svc-infra 0.1.688__tar.gz → 0.1.709__tar.gz

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 svc-infra might be problematic. Click here for more details.

Files changed (367) hide show
  1. {svc_infra-0.1.688 → svc_infra-0.1.709}/PKG-INFO +60 -56
  2. {svc_infra-0.1.688 → svc_infra-0.1.709}/README.md +6 -6
  3. svc_infra-0.1.709/pyproject.toml +165 -0
  4. svc_infra-0.1.709/src/svc_infra/__init__.py +59 -0
  5. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/apf_payments/models.py +133 -42
  6. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/apf_payments/provider/aiydan.py +121 -47
  7. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/apf_payments/provider/base.py +30 -9
  8. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/apf_payments/provider/stripe.py +156 -62
  9. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/apf_payments/schemas.py +18 -9
  10. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/apf_payments/service.py +98 -41
  11. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/apf_payments/settings.py +5 -1
  12. svc_infra-0.1.709/src/svc_infra/api/__init__.py +61 -0
  13. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/__init__.py +15 -0
  14. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/admin/add.py +28 -14
  15. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/apf_payments/router.py +78 -30
  16. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/apf_payments/setup.py +13 -4
  17. svc_infra-0.1.709/src/svc_infra/api/fastapi/auth/__init__.py +65 -0
  18. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/_cookies.py +6 -2
  19. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/add.py +17 -10
  20. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/gaurd.py +43 -14
  21. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/mfa/models.py +3 -1
  22. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/mfa/pre_auth.py +10 -6
  23. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/mfa/router.py +15 -8
  24. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/mfa/security.py +1 -2
  25. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/mfa/utils.py +2 -1
  26. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/mfa/verify.py +9 -2
  27. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/policy.py +0 -1
  28. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/providers.py +3 -1
  29. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/routers/apikey_router.py +6 -6
  30. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/routers/oauth_router.py +127 -43
  31. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/routers/session_router.py +6 -2
  32. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/security.py +31 -10
  33. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/sender.py +8 -1
  34. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/state.py +3 -1
  35. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/ws_security.py +2 -2
  36. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/billing/router.py +13 -4
  37. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/db/__init__.py +5 -1
  38. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/db/http.py +3 -1
  39. svc_infra-0.1.709/src/svc_infra/api/fastapi/db/nosql/__init__.py +46 -0
  40. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/db/nosql/mongo/add.py +16 -7
  41. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/db/nosql/mongo/crud_router.py +30 -11
  42. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/db/sql/__init__.py +5 -1
  43. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/db/sql/add.py +34 -11
  44. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/db/sql/crud_router.py +60 -34
  45. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/db/sql/health.py +3 -1
  46. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/db/sql/session.py +3 -1
  47. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/db/sql/users.py +18 -6
  48. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/dependencies/ratelimit.py +25 -11
  49. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/docs/add.py +21 -8
  50. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/docs/landing.py +3 -1
  51. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/docs/scoped.py +22 -10
  52. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/dual/dualize.py +1 -1
  53. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/dual/protected.py +20 -6
  54. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/dual/router.py +40 -13
  55. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/ease.py +6 -2
  56. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/http/concurrency.py +2 -1
  57. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/http/conditional.py +3 -1
  58. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/middleware/debug.py +4 -1
  59. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/middleware/errors/catchall.py +6 -2
  60. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/middleware/errors/exceptions.py +1 -1
  61. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/middleware/errors/handlers.py +13 -5
  62. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/middleware/graceful_shutdown.py +22 -5
  63. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/middleware/idempotency.py +11 -3
  64. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/middleware/optimistic_lock.py +8 -3
  65. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/middleware/ratelimit.py +12 -13
  66. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/middleware/ratelimit_store.py +31 -4
  67. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/middleware/request_id.py +3 -1
  68. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/middleware/request_size_limit.py +3 -3
  69. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/middleware/timeout.py +38 -7
  70. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/openapi/apply.py +5 -3
  71. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/openapi/conventions.py +9 -2
  72. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/openapi/mutators.py +53 -22
  73. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/openapi/pipeline.py +1 -1
  74. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/openapi/security.py +3 -1
  75. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/ops/add.py +3 -1
  76. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/pagination.py +44 -19
  77. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/routers/__init__.py +43 -15
  78. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/setup.py +47 -20
  79. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/tenancy/context.py +3 -3
  80. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/versioned.py +1 -1
  81. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/app/__init__.py +3 -1
  82. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/app/env.py +69 -1
  83. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/app/logging/add.py +9 -2
  84. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/app/logging/formats.py +12 -5
  85. svc_infra-0.1.709/src/svc_infra/billing/__init__.py +46 -0
  86. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/billing/async_service.py +24 -1
  87. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/billing/jobs.py +15 -4
  88. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/billing/models.py +69 -23
  89. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/billing/quotas.py +3 -1
  90. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/billing/schemas.py +7 -4
  91. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/billing/service.py +44 -2
  92. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cache/__init__.py +5 -0
  93. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cache/add.py +21 -9
  94. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cache/backend.py +2 -4
  95. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cache/decorators.py +81 -33
  96. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cache/demo.py +2 -2
  97. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cache/recache.py +26 -14
  98. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cache/resources.py +14 -5
  99. svc_infra-0.1.709/src/svc_infra/cache/tags.py +52 -0
  100. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cache/utils.py +3 -1
  101. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cli/__init__.py +22 -2
  102. svc_infra-0.1.709/src/svc_infra/cli/cmds/__init__.py +55 -0
  103. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cli/cmds/db/nosql/mongo/mongo_cmds.py +3 -1
  104. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cli/cmds/db/nosql/mongo/mongo_scaffold_cmds.py +3 -1
  105. svc_infra-0.1.709/src/svc_infra/cli/cmds/db/ops_cmds.py +270 -0
  106. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cli/cmds/db/sql/alembic_cmds.py +24 -8
  107. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cli/cmds/db/sql/sql_export_cmds.py +18 -10
  108. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cli/cmds/docs/docs_cmds.py +3 -1
  109. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cli/cmds/dx/dx_cmds.py +22 -5
  110. svc_infra-0.1.709/src/svc_infra/cli/cmds/health/__init__.py +179 -0
  111. svc_infra-0.1.709/src/svc_infra/cli/cmds/health/health_cmds.py +8 -0
  112. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cli/cmds/jobs/jobs_cmds.py +6 -2
  113. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cli/cmds/obs/obs_cmds.py +32 -12
  114. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cli/cmds/sdk/sdk_cmds.py +15 -5
  115. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cli/foundation/runner.py +6 -2
  116. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/data/add.py +2 -2
  117. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/data/backup.py +7 -2
  118. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/data/erasure.py +1 -1
  119. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/data/fixtures.py +5 -3
  120. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/data/retention.py +11 -5
  121. svc_infra-0.1.709/src/svc_infra/db/__init__.py +15 -0
  122. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/crud_schema.py +9 -9
  123. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/__init__.py +3 -0
  124. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/core.py +30 -9
  125. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/indexes.py +3 -1
  126. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/management.py +1 -1
  127. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/mongo/client.py +19 -2
  128. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/mongo/settings.py +6 -2
  129. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/repository.py +35 -15
  130. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/resource.py +20 -3
  131. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/scaffold.py +9 -3
  132. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/service.py +3 -1
  133. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/types.py +6 -2
  134. svc_infra-0.1.709/src/svc_infra/db/ops.py +384 -0
  135. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/outbox.py +6 -2
  136. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/apikey.py +37 -9
  137. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/authref.py +9 -3
  138. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/constants.py +12 -8
  139. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/core.py +2 -2
  140. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/management.py +11 -8
  141. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/repository.py +50 -17
  142. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/scaffold.py +6 -2
  143. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/service.py +15 -5
  144. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/tenant.py +13 -4
  145. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/uniq_hooks.py +9 -3
  146. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/utils.py +121 -48
  147. svc_infra-0.1.709/src/svc_infra/deploy/__init__.py +538 -0
  148. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/documents/add.py +10 -4
  149. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/documents/storage.py +3 -1
  150. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/dx/add.py +3 -1
  151. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/dx/checks.py +3 -2
  152. svc_infra-0.1.709/src/svc_infra/exceptions.py +141 -0
  153. svc_infra-0.1.709/src/svc_infra/health/__init__.py +864 -0
  154. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/http/client.py +35 -2
  155. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/jobs/builtins/outbox_processor.py +3 -1
  156. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/jobs/builtins/webhook_delivery.py +7 -2
  157. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/jobs/easy.py +1 -0
  158. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/jobs/loader.py +10 -5
  159. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/jobs/queue.py +39 -4
  160. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/jobs/redis_queue.py +87 -22
  161. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/jobs/runner.py +6 -2
  162. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/loaders/__init__.py +5 -5
  163. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/loaders/base.py +1 -1
  164. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/loaders/github.py +6 -4
  165. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/loaders/models.py +2 -2
  166. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/loaders/url.py +9 -3
  167. svc_infra-0.1.709/src/svc_infra/logging/__init__.py +374 -0
  168. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/mcp/svc_infra_mcp.py +5 -4
  169. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/add.py +13 -4
  170. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/cloud_dash.py +2 -1
  171. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/metrics/__init__.py +3 -4
  172. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/metrics/asgi.py +13 -7
  173. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/metrics/http.py +9 -5
  174. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/metrics/sqlalchemy.py +13 -9
  175. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/metrics.py +6 -5
  176. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/settings.py +6 -2
  177. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/security/add.py +23 -7
  178. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/security/audit.py +92 -10
  179. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/security/audit_service.py +4 -3
  180. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/security/hibp.py +8 -2
  181. svc_infra-0.1.709/src/svc_infra/security/jwt_rotation.py +105 -0
  182. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/security/lockout.py +11 -5
  183. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/security/models.py +33 -11
  184. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/security/oauth_models.py +17 -3
  185. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/security/org_invites.py +5 -3
  186. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/security/passwords.py +3 -1
  187. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/security/permissions.py +24 -2
  188. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/security/session.py +1 -1
  189. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/security/signed_cookies.py +21 -1
  190. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/storage/add.py +7 -4
  191. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/storage/backends/local.py +14 -6
  192. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/storage/backends/memory.py +3 -1
  193. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/storage/backends/s3.py +41 -17
  194. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/storage/easy.py +5 -2
  195. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/storage/settings.py +5 -3
  196. svc_infra-0.1.709/src/svc_infra/testing/__init__.py +685 -0
  197. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/utils.py +7 -3
  198. svc_infra-0.1.709/src/svc_infra/webhooks/__init__.py +69 -0
  199. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/webhooks/add.py +65 -48
  200. svc_infra-0.1.709/src/svc_infra/webhooks/encryption.py +115 -0
  201. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/webhooks/fastapi.py +3 -1
  202. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/webhooks/service.py +4 -1
  203. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/webhooks/signing.py +5 -1
  204. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/websocket/add.py +4 -3
  205. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/websocket/client.py +2 -1
  206. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/websocket/config.py +18 -6
  207. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/websocket/manager.py +5 -3
  208. svc_infra-0.1.688/pyproject.toml +0 -154
  209. svc_infra-0.1.688/src/svc_infra/__init__.py +0 -28
  210. svc_infra-0.1.688/src/svc_infra/api/fastapi/db/nosql/__init__.py +0 -8
  211. svc_infra-0.1.688/src/svc_infra/billing/__init__.py +0 -23
  212. svc_infra-0.1.688/src/svc_infra/cache/tags.py +0 -77
  213. svc_infra-0.1.688/src/svc_infra/cli/cmds/__init__.py +0 -28
  214. svc_infra-0.1.688/src/svc_infra/obs/templates/sidecars/fly/__init__.py +0 -0
  215. svc_infra-0.1.688/src/svc_infra/obs/templates/sidecars/k8s/__init__.py +0 -0
  216. svc_infra-0.1.688/src/svc_infra/obs/templates/sidecars/railway/__init__.py +0 -0
  217. svc_infra-0.1.688/src/svc_infra/security/jwt_rotation.py +0 -53
  218. svc_infra-0.1.688/src/svc_infra/webhooks/__init__.py +0 -16
  219. {svc_infra-0.1.688 → svc_infra-0.1.709}/LICENSE +0 -0
  220. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/apf_payments/README.md +0 -0
  221. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/apf_payments/__init__.py +0 -0
  222. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/apf_payments/alembic.py +0 -0
  223. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/apf_payments/provider/__init__.py +0 -0
  224. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/apf_payments/provider/registry.py +0 -0
  225. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/admin/__init__.py +0 -0
  226. {svc_infra-0.1.688/src/svc_infra/api → svc_infra-0.1.709/src/svc_infra/api/fastapi/apf_payments}/__init__.py +0 -0
  227. {svc_infra-0.1.688/src/svc_infra/api/fastapi/apf_payments → svc_infra-0.1.709/src/svc_infra/api/fastapi/auth/mfa}/__init__.py +0 -0
  228. {svc_infra-0.1.688/src/svc_infra/api/fastapi/auth → svc_infra-0.1.709/src/svc_infra/api/fastapi/auth/routers}/__init__.py +0 -0
  229. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/routers/account.py +0 -0
  230. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/auth/settings.py +0 -0
  231. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/billing/setup.py +0 -0
  232. {svc_infra-0.1.688/src/svc_infra/api/fastapi/auth/mfa → svc_infra-0.1.709/src/svc_infra/api/fastapi/cache}/__init__.py +0 -0
  233. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/cache/add.py +0 -0
  234. {svc_infra-0.1.688/src/svc_infra/api/fastapi/auth/routers → svc_infra-0.1.709/src/svc_infra/api/fastapi/db/nosql/mongo}/__init__.py +0 -0
  235. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/db/nosql/mongo/health.py +0 -0
  236. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/db/sql/README.md +0 -0
  237. {svc_infra-0.1.688/src/svc_infra/api/fastapi/cache → svc_infra-0.1.709/src/svc_infra/api/fastapi/docs}/__init__.py +0 -0
  238. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/dual/__init__.py +0 -0
  239. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/dual/public.py +0 -0
  240. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/dual/utils.py +0 -0
  241. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/dx.py +0 -0
  242. {svc_infra-0.1.688/src/svc_infra/api/fastapi/db/nosql/mongo → svc_infra-0.1.709/src/svc_infra/api/fastapi/http}/__init__.py +0 -0
  243. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/http/deprecation.py +0 -0
  244. {svc_infra-0.1.688/src/svc_infra/api/fastapi/docs → svc_infra-0.1.709/src/svc_infra/api/fastapi/middleware}/__init__.py +0 -0
  245. {svc_infra-0.1.688/src/svc_infra/api/fastapi/http → svc_infra-0.1.709/src/svc_infra/api/fastapi/middleware/errors}/__init__.py +0 -0
  246. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/middleware/idempotency_store.py +0 -0
  247. {svc_infra-0.1.688/src/svc_infra/api/fastapi/middleware → svc_infra-0.1.709/src/svc_infra/api/fastapi/openapi}/__init__.py +0 -0
  248. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/openapi/models.py +0 -0
  249. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/openapi/responses.py +0 -0
  250. {svc_infra-0.1.688/src/svc_infra/api/fastapi/middleware/errors → svc_infra-0.1.709/src/svc_infra/api/fastapi/paths}/__init__.py +0 -0
  251. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/paths/auth.py +0 -0
  252. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/paths/generic.py +0 -0
  253. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/paths/prefix.py +0 -0
  254. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/paths/user.py +0 -0
  255. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/routers/ping.py +0 -0
  256. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/api/fastapi/tenancy/add.py +0 -0
  257. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/app/README.md +0 -0
  258. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/app/logging/__init__.py +0 -0
  259. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/app/logging/filter.py +0 -0
  260. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/app/root.py +0 -0
  261. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/bundled_docs/README.md +0 -0
  262. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/bundled_docs/__init__.py +0 -0
  263. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/bundled_docs/getting-started.md +0 -0
  264. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cache/README.md +0 -0
  265. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cache/keys.py +0 -0
  266. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cache/ttl.py +0 -0
  267. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cli/__main__.py +0 -0
  268. {svc_infra-0.1.688/src/svc_infra/api/fastapi/openapi → svc_infra-0.1.709/src/svc_infra/cli/cmds/db}/__init__.py +0 -0
  269. {svc_infra-0.1.688/src/svc_infra/api/fastapi/paths → svc_infra-0.1.709/src/svc_infra/cli/cmds/db/nosql}/__init__.py +0 -0
  270. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cli/cmds/db/nosql/mongo/README.md +0 -0
  271. {svc_infra-0.1.688/src/svc_infra/cli/cmds/db → svc_infra-0.1.709/src/svc_infra/cli/cmds/db/nosql/mongo}/__init__.py +0 -0
  272. {svc_infra-0.1.688/src/svc_infra/cli/cmds/db/nosql → svc_infra-0.1.709/src/svc_infra/cli/cmds/db/sql}/__init__.py +0 -0
  273. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cli/cmds/db/sql/sql_scaffold_cmds.py +0 -0
  274. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cli/cmds/dx/__init__.py +0 -0
  275. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cli/cmds/help.py +0 -0
  276. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cli/cmds/jobs/__init__.py +0 -0
  277. {svc_infra-0.1.688/src/svc_infra/cli/cmds/db/nosql/mongo → svc_infra-0.1.709/src/svc_infra/cli/cmds/obs}/__init__.py +0 -0
  278. {svc_infra-0.1.688/src/svc_infra/cli/cmds/db/sql → svc_infra-0.1.709/src/svc_infra/cli/cmds/sdk}/__init__.py +0 -0
  279. {svc_infra-0.1.688/src/svc_infra/cli/cmds/obs → svc_infra-0.1.709/src/svc_infra/cli/foundation}/__init__.py +0 -0
  280. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/cli/foundation/typer_bootstrap.py +0 -0
  281. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/inbox.py +0 -0
  282. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/base.py +0 -0
  283. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/constants.py +0 -0
  284. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/mongo/README.md +0 -0
  285. {svc_infra-0.1.688/src/svc_infra/cli/cmds/sdk → svc_infra-0.1.709/src/svc_infra/db/nosql/mongo}/__init__.py +0 -0
  286. {svc_infra-0.1.688/src/svc_infra/cli/foundation → svc_infra-0.1.709/src/svc_infra/db/nosql/mongo/templates}/__init__.py +0 -0
  287. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/mongo/templates/documents.py.tmpl +0 -0
  288. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/mongo/templates/resources.py.tmpl +0 -0
  289. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/mongo/templates/schemas.py.tmpl +0 -0
  290. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/service_with_hooks.py +0 -0
  291. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/nosql/utils.py +0 -0
  292. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/README.md +0 -0
  293. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/__init__.py +0 -0
  294. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/base.py +0 -0
  295. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/resource.py +0 -0
  296. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/service_with_hooks.py +0 -0
  297. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/templates/__init__.py +0 -0
  298. {svc_infra-0.1.688/src/svc_infra/db → svc_infra-0.1.709/src/svc_infra/db/sql/templates/models_schemas}/__init__.py +0 -0
  299. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/templates/models_schemas/auth/models.py.tmpl +0 -0
  300. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/templates/models_schemas/auth/schemas.py.tmpl +0 -0
  301. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/templates/models_schemas/entity/models.py.tmpl +0 -0
  302. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/templates/models_schemas/entity/schemas.py.tmpl +0 -0
  303. {svc_infra-0.1.688/src/svc_infra/db/nosql/mongo → svc_infra-0.1.709/src/svc_infra/db/sql/templates/setup}/__init__.py +0 -0
  304. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/templates/setup/alembic.ini.tmpl +0 -0
  305. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/templates/setup/env_async.py.tmpl +0 -0
  306. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/templates/setup/env_sync.py.tmpl +0 -0
  307. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/templates/setup/script.py.mako.tmpl +0 -0
  308. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/types.py +0 -0
  309. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/uniq.py +0 -0
  310. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/sql/versioning.py +0 -0
  311. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/db/utils.py +0 -0
  312. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/documents/__init__.py +0 -0
  313. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/documents/ease.py +0 -0
  314. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/documents/models.py +0 -0
  315. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/dx/changelog.py +0 -0
  316. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/http/__init__.py +0 -0
  317. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/jobs/scheduler.py +0 -0
  318. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/jobs/worker.py +0 -0
  319. {svc_infra-0.1.688/src/svc_infra/db/nosql/mongo/templates → svc_infra-0.1.709/src/svc_infra/mcp}/__init__.py +0 -0
  320. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/README.md +0 -0
  321. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/__init__.py +0 -0
  322. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/grafana/dashboards/http-overview.json +0 -0
  323. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/metrics/base.py +0 -0
  324. {svc_infra-0.1.688/src/svc_infra/db/sql/templates/models_schemas → svc_infra-0.1.709/src/svc_infra/obs/providers}/__init__.py +0 -0
  325. {svc_infra-0.1.688/src/svc_infra/db/sql/templates/setup → svc_infra-0.1.709/src/svc_infra/obs/providers/compose_cloud}/__init__.py +0 -0
  326. {svc_infra-0.1.688/src/svc_infra/mcp → svc_infra-0.1.709/src/svc_infra/obs/providers/compose_cloud/templates}/__init__.py +0 -0
  327. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/providers/compose_cloud/templates/agent.yaml.tmpl +0 -0
  328. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/providers/compose_cloud/templates/docker-compose.cloud.yml.tmpl +0 -0
  329. {svc_infra-0.1.688/src/svc_infra/obs/providers → svc_infra-0.1.709/src/svc_infra/obs/providers/grafana}/__init__.py +0 -0
  330. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/providers/grafana/dashboards/00_overview.json +0 -0
  331. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/providers/grafana/dashboards/10_http.json +0 -0
  332. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/providers/grafana/dashboards/20_db.json +0 -0
  333. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/providers/grafana/dashboards/30_runtime.json +0 -0
  334. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/providers/grafana/dashboards/40_clients.json +0 -0
  335. {svc_infra-0.1.688/src/svc_infra/obs/providers/compose_cloud → svc_infra-0.1.709/src/svc_infra/obs/providers/grafana/dashboards}/__init__.py +0 -0
  336. {svc_infra-0.1.688/src/svc_infra/obs/providers/compose_cloud → svc_infra-0.1.709/src/svc_infra/obs/providers/grafana}/templates/__init__.py +0 -0
  337. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/providers/grafana/templates/docker-compose.yml.tmpl +0 -0
  338. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/providers/grafana/templates/prometheus.yml.tmpl +0 -0
  339. {svc_infra-0.1.688/src/svc_infra/obs/providers/grafana → svc_infra-0.1.709/src/svc_infra/obs/providers/grafana/templates/provisioning}/__init__.py +0 -0
  340. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/providers/grafana/templates/provisioning/dashboards.yml +0 -0
  341. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/providers/grafana/templates/provisioning/datasource.yml +0 -0
  342. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/templates/grafana_dashboard.json +0 -0
  343. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/templates/prometheus_rules.yml +0 -0
  344. {svc_infra-0.1.688/src/svc_infra/obs/providers/grafana/dashboards → svc_infra-0.1.709/src/svc_infra/obs/templates/sidecars}/__init__.py +0 -0
  345. {svc_infra-0.1.688/src/svc_infra/obs/providers/grafana/templates → svc_infra-0.1.709/src/svc_infra/obs/templates/sidecars/compose}/__init__.py +0 -0
  346. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/templates/sidecars/compose/agent.yaml +0 -0
  347. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/templates/sidecars/compose/docker-compose.yml +0 -0
  348. {svc_infra-0.1.688/src/svc_infra/obs/providers/grafana/templates/provisioning → svc_infra-0.1.709/src/svc_infra/obs/templates/sidecars/fly}/__init__.py +0 -0
  349. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/templates/sidecars/fly/agent.yaml +0 -0
  350. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/templates/sidecars/fly/fly.toml.fragment +0 -0
  351. {svc_infra-0.1.688/src/svc_infra/obs/templates/sidecars → svc_infra-0.1.709/src/svc_infra/obs/templates/sidecars/k8s}/__init__.py +0 -0
  352. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/templates/sidecars/k8s/configmap.yaml +0 -0
  353. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/templates/sidecars/k8s/deployment.yaml +0 -0
  354. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/templates/sidecars/railway/Dockerfile +0 -0
  355. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/templates/sidecars/railway/README.md +0 -0
  356. {svc_infra-0.1.688/src/svc_infra/obs/templates/sidecars/compose → svc_infra-0.1.709/src/svc_infra/obs/templates/sidecars/railway}/__init__.py +0 -0
  357. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/obs/templates/sidecars/railway/agent.yaml +0 -0
  358. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/py.typed +0 -0
  359. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/security/headers.py +0 -0
  360. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/storage/__init__.py +0 -0
  361. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/storage/backends/__init__.py +0 -0
  362. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/storage/base.py +0 -0
  363. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/webhooks/router.py +0 -0
  364. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/websocket/__init__.py +0 -0
  365. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/websocket/easy.py +0 -0
  366. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/websocket/exceptions.py +0 -0
  367. {svc_infra-0.1.688 → svc_infra-0.1.709}/src/svc_infra/websocket/models.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: svc-infra
3
- Version: 0.1.688
3
+ Version: 0.1.709
4
4
  Summary: Infrastructure for building and deploying prod-ready services
5
5
  License: MIT
6
6
  Keywords: fastapi,sqlalchemy,alembic,auth,infra,async,pydantic
@@ -16,66 +16,70 @@ Classifier: Programming Language :: Python :: 3.11
16
16
  Classifier: Programming Language :: Python :: 3.12
17
17
  Classifier: Programming Language :: Python :: 3.13
18
18
  Classifier: Programming Language :: Python :: 3 :: Only
19
+ Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
20
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
21
  Classifier: Typing :: Typed
22
+ Provides-Extra: adyen
20
23
  Provides-Extra: duckdb
21
24
  Provides-Extra: metrics
25
+ Provides-Extra: mongodb
22
26
  Provides-Extra: mssql
23
27
  Provides-Extra: mysql
28
+ Provides-Extra: payments
24
29
  Provides-Extra: pg
25
30
  Provides-Extra: pg2
26
31
  Provides-Extra: redshift
27
32
  Provides-Extra: s3
28
33
  Provides-Extra: snowflake
29
34
  Provides-Extra: sqlite
30
- Requires-Dist: adyen (>=13.4.0,<14.0.0)
31
- Requires-Dist: ai-infra (>=0.1.63,<0.2.0)
32
- Requires-Dist: aioboto3 (>=13.0.0,<14.0.0) ; extra == "s3"
33
- Requires-Dist: aiofiles (>=24.1.0,<25.0.0)
34
- Requires-Dist: aiosqlite (>=0.20.0,<0.21.0) ; extra == "sqlite"
35
- Requires-Dist: alembic (>=1.13.2,<2.0.0)
36
- Requires-Dist: asyncpg (>=0.30.0,<0.31.0) ; extra == "pg"
37
- Requires-Dist: authlib (>=1.6.2,<2.0.0)
38
- Requires-Dist: cashews[redis] (>=7.4.1,<8.0.0)
39
- Requires-Dist: duckdb (>=1.1.3,<2.0.0) ; extra == "duckdb"
40
- Requires-Dist: email-validator (>=2.2.0,<3.0.0)
41
- Requires-Dist: fastapi (>=0.116.1,<0.117.0)
42
- Requires-Dist: fastapi-users-db-sqlalchemy (>=7.0.0,<8.0.0)
43
- Requires-Dist: fastapi-users[oauth] (>=14.0.1,<15.0.0)
44
- Requires-Dist: greenlet (>=3,<4)
45
- Requires-Dist: httpx (>=0.28.1,<0.29.0)
46
- Requires-Dist: httpx-oauth (>=0.16.1,<0.17.0)
47
- Requires-Dist: itsdangerous (>=2.2.0,<3.0.0)
48
- Requires-Dist: mcp (>=1.13.0,<2.0.0)
49
- Requires-Dist: motor (>=3.7.1,<4.0.0)
50
- Requires-Dist: mysqlclient (>=2.2.4,<3.0.0) ; extra == "mysql"
51
- Requires-Dist: opentelemetry-exporter-otlp (>=1.36.0,<2.0.0)
52
- Requires-Dist: opentelemetry-instrumentation-fastapi (>=0.57b0,<0.58)
53
- Requires-Dist: opentelemetry-instrumentation-httpx (>=0.57b0,<0.58)
54
- Requires-Dist: opentelemetry-instrumentation-requests (>=0.57b0,<0.58)
55
- Requires-Dist: opentelemetry-instrumentation-sqlalchemy (>=0.57b0,<0.58)
56
- Requires-Dist: opentelemetry-propagator-b3 (>=1.36.0,<2.0.0)
57
- Requires-Dist: opentelemetry-sdk (>=1.36.0,<2.0.0)
58
- Requires-Dist: passlib[bcrypt] (>=1.7.4,<2.0.0)
59
- Requires-Dist: pre-commit (>=4.3.0,<5.0.0)
60
- Requires-Dist: prometheus-client (>=0.22.1,<0.23.0) ; extra == "metrics"
61
- Requires-Dist: psycopg2-binary (>=2.9.10,<3.0.0) ; extra == "pg2"
62
- Requires-Dist: psycopg[binary] (>=3.2.10,<4.0.0) ; extra == "pg"
63
- Requires-Dist: pydantic-settings (>=2.10.1,<3.0.0)
64
- Requires-Dist: pymysql (>=1.1.1,<2.0.0) ; extra == "mysql"
65
- Requires-Dist: pyodbc (>=5.1.0,<6.0.0) ; extra == "mssql"
66
- Requires-Dist: pyotp (>=2.9.0,<3.0.0)
67
- Requires-Dist: python-dotenv (>=1.1.1,<2.0.0)
68
- Requires-Dist: redis (>=6.4.0,<7.0.0)
69
- Requires-Dist: redshift-connector (>=2.0.918,<3.0.0) ; extra == "redshift"
70
- Requires-Dist: snowflake-connector-python (>=3.12.0,<4.0.0) ; extra == "snowflake"
71
- Requires-Dist: sqlalchemy[asyncio] (>=2.0.43,<3.0.0)
72
- Requires-Dist: stripe (>=13.0.1,<14.0.0)
73
- Requires-Dist: typer (>=0.16.1,<0.17.0)
74
- Requires-Dist: websockets (>=15.0.1,<16.0.0)
75
- Project-URL: Documentation, https://github.com/your-org/svc-infra#readme
76
- Project-URL: Homepage, https://github.com/your-org/svc-infra
77
- Project-URL: Issues, https://github.com/your-org/svc-infra/issues
78
- Project-URL: Repository, https://github.com/your-org/svc-infra
35
+ Provides-Extra: stripe
36
+ Requires-Dist: adyen (>=10.0.0) ; extra == "payments" or extra == "adyen"
37
+ Requires-Dist: aioboto3 (>=12.0.0) ; extra == "s3"
38
+ Requires-Dist: aiofiles (>=24.0.0)
39
+ Requires-Dist: aiosqlite (>=0.19.0) ; extra == "sqlite"
40
+ Requires-Dist: alembic (>=1.13.0)
41
+ Requires-Dist: asyncpg (>=0.29.0) ; extra == "pg"
42
+ Requires-Dist: authlib (>=1.0.0)
43
+ Requires-Dist: cashews[redis] (>=7.0)
44
+ Requires-Dist: duckdb (>=0.10.0) ; extra == "duckdb"
45
+ Requires-Dist: email-validator (>=2.0.0)
46
+ Requires-Dist: fastapi (>=0.110.0)
47
+ Requires-Dist: fastapi-users-db-sqlalchemy (>=7.0.0)
48
+ Requires-Dist: fastapi-users[oauth] (>=14.0.0)
49
+ Requires-Dist: greenlet (>=3.0)
50
+ Requires-Dist: httpx (>=0.25.0)
51
+ Requires-Dist: httpx-oauth (>=0.15.0)
52
+ Requires-Dist: itsdangerous (>=2.0.0)
53
+ Requires-Dist: mcp (>=1.0.0)
54
+ Requires-Dist: motor (>=3.0.0) ; extra == "mongodb"
55
+ Requires-Dist: mysqlclient (>=2.2.0) ; extra == "mysql"
56
+ Requires-Dist: opentelemetry-exporter-otlp (>=1.20.0)
57
+ Requires-Dist: opentelemetry-instrumentation-fastapi (>=0.41b0)
58
+ Requires-Dist: opentelemetry-instrumentation-httpx (>=0.41b0)
59
+ Requires-Dist: opentelemetry-instrumentation-requests (>=0.41b0)
60
+ Requires-Dist: opentelemetry-instrumentation-sqlalchemy (>=0.41b0)
61
+ Requires-Dist: opentelemetry-propagator-b3 (>=1.20.0)
62
+ Requires-Dist: opentelemetry-sdk (>=1.20.0)
63
+ Requires-Dist: passlib[bcrypt] (>=1.7.4)
64
+ Requires-Dist: prometheus-client (>=0.18.0) ; extra == "metrics"
65
+ Requires-Dist: psycopg2-binary (>=2.9.0) ; extra == "pg2"
66
+ Requires-Dist: psycopg[binary] (>=3.0) ; extra == "pg"
67
+ Requires-Dist: pydantic-settings (>=2.0)
68
+ Requires-Dist: pymysql (>=1.1.0) ; extra == "mysql"
69
+ Requires-Dist: pyodbc (>=5.0.0) ; extra == "mssql"
70
+ Requires-Dist: pyotp (>=2.9.0)
71
+ Requires-Dist: python-dotenv (>=1.0.0)
72
+ Requires-Dist: redis (>=5.0.0)
73
+ Requires-Dist: redshift-connector (>=2.0.0) ; extra == "redshift"
74
+ Requires-Dist: snowflake-connector-python (>=3.0.0) ; extra == "snowflake"
75
+ Requires-Dist: sqlalchemy[asyncio] (>=2.0)
76
+ Requires-Dist: stripe (>=7.0.0) ; extra == "payments" or extra == "stripe"
77
+ Requires-Dist: typer (>=0.12.0)
78
+ Requires-Dist: websockets (>=12.0)
79
+ Project-URL: Documentation, https://nfrax.com/svc-infra
80
+ Project-URL: Homepage, https://github.com/nfraxlab/svc-infra
81
+ Project-URL: Issues, https://github.com/nfraxlab/svc-infra/issues
82
+ Project-URL: Repository, https://github.com/nfraxlab/svc-infra
79
83
  Description-Content-Type: text/markdown
80
84
 
81
85
  <div align="center">
@@ -316,7 +320,7 @@ See the [Environment Reference](docs/environment.md) for all options.
316
320
  See all features working together:
317
321
 
318
322
  ```bash
319
- git clone https://github.com/nfraxio/svc-infra.git
323
+ git clone https://github.com/nfraxlab/svc-infra.git
320
324
  cd svc-infra
321
325
 
322
326
  # Setup and run
@@ -332,9 +336,9 @@ svc-infra is part of the **nfrax** infrastructure suite:
332
336
 
333
337
  | Package | Purpose |
334
338
  |---------|---------|
335
- | **[svc-infra](https://github.com/nfraxio/svc-infra)** | Backend infrastructure (auth, billing, jobs, webhooks) |
336
- | **[ai-infra](https://github.com/nfraxio/ai-infra)** | AI/LLM infrastructure (agents, tools, RAG, MCP) |
337
- | **[fin-infra](https://github.com/nfraxio/fin-infra)** | Financial infrastructure (banking, portfolio, insights) |
339
+ | **[svc-infra](https://github.com/nfraxlab/svc-infra)** | Backend infrastructure (auth, billing, jobs, webhooks) |
340
+ | **[ai-infra](https://github.com/nfraxlab/ai-infra)** | AI/LLM infrastructure (agents, tools, RAG, MCP) |
341
+ | **[fin-infra](https://github.com/nfraxlab/fin-infra)** | Financial infrastructure (banking, portfolio, insights) |
338
342
 
339
343
  ## 📄 License
340
344
 
@@ -344,9 +348,9 @@ MIT License - use it for anything.
344
348
 
345
349
  <div align="center">
346
350
 
347
- **Built with ❤️ by [nfraxio](https://github.com/nfraxio)**
351
+ **Built with ❤️ by [nfraxlab](https://github.com/nfraxlab)**
348
352
 
349
- [⭐ Star us on GitHub](https://github.com/nfraxio/svc-infra) · [📦 View on PyPI](https://pypi.org/project/svc-infra/)
353
+ [⭐ Star us on GitHub](https://github.com/nfraxlab/svc-infra) · [📦 View on PyPI](https://pypi.org/project/svc-infra/)
350
354
 
351
355
  </div>
352
356
 
@@ -236,7 +236,7 @@ See the [Environment Reference](docs/environment.md) for all options.
236
236
  See all features working together:
237
237
 
238
238
  ```bash
239
- git clone https://github.com/nfraxio/svc-infra.git
239
+ git clone https://github.com/nfraxlab/svc-infra.git
240
240
  cd svc-infra
241
241
 
242
242
  # Setup and run
@@ -252,9 +252,9 @@ svc-infra is part of the **nfrax** infrastructure suite:
252
252
 
253
253
  | Package | Purpose |
254
254
  |---------|---------|
255
- | **[svc-infra](https://github.com/nfraxio/svc-infra)** | Backend infrastructure (auth, billing, jobs, webhooks) |
256
- | **[ai-infra](https://github.com/nfraxio/ai-infra)** | AI/LLM infrastructure (agents, tools, RAG, MCP) |
257
- | **[fin-infra](https://github.com/nfraxio/fin-infra)** | Financial infrastructure (banking, portfolio, insights) |
255
+ | **[svc-infra](https://github.com/nfraxlab/svc-infra)** | Backend infrastructure (auth, billing, jobs, webhooks) |
256
+ | **[ai-infra](https://github.com/nfraxlab/ai-infra)** | AI/LLM infrastructure (agents, tools, RAG, MCP) |
257
+ | **[fin-infra](https://github.com/nfraxlab/fin-infra)** | Financial infrastructure (banking, portfolio, insights) |
258
258
 
259
259
  ## 📄 License
260
260
 
@@ -264,8 +264,8 @@ MIT License - use it for anything.
264
264
 
265
265
  <div align="center">
266
266
 
267
- **Built with ❤️ by [nfraxio](https://github.com/nfraxio)**
267
+ **Built with ❤️ by [nfraxlab](https://github.com/nfraxlab)**
268
268
 
269
- [⭐ Star us on GitHub](https://github.com/nfraxio/svc-infra) · [📦 View on PyPI](https://pypi.org/project/svc-infra/)
269
+ [⭐ Star us on GitHub](https://github.com/nfraxlab/svc-infra) · [📦 View on PyPI](https://pypi.org/project/svc-infra/)
270
270
 
271
271
  </div>
@@ -0,0 +1,165 @@
1
+ [tool.poetry]
2
+ name = "svc-infra"
3
+ version = "0.1.709"
4
+ description = "Infrastructure for building and deploying prod-ready services"
5
+ authors = ["Ali Khatami <aliikhatami94@gmail.com>"]
6
+ license = "MIT"
7
+ readme = "README.md"
8
+ packages = [{ include = "svc_infra", from = "src" }]
9
+ keywords = ["fastapi", "sqlalchemy", "alembic", "auth", "infra", "async", "pydantic"]
10
+ include = [
11
+ "src/svc_infra/py.typed",
12
+ "src/svc_infra/db/templates/**/*",
13
+ "src/svc_infra/obs/templates/**/*",
14
+ "src/svc_infra/obs/grafana/templates/**/*",
15
+ "src/svc_infra/obs/grafana/dashboards/**/*",
16
+ "src/svc_infra/docs/**/*"
17
+ ]
18
+
19
+ classifiers = [
20
+ "Development Status :: 4 - Beta",
21
+ "Intended Audience :: Developers",
22
+ "License :: OSI Approved :: MIT License",
23
+ "Programming Language :: Python :: 3",
24
+ "Programming Language :: Python :: 3 :: Only",
25
+ "Programming Language :: Python :: 3.11",
26
+ "Programming Language :: Python :: 3.12",
27
+ "Programming Language :: Python :: 3.13",
28
+ "Topic :: Internet :: WWW/HTTP :: HTTP Servers",
29
+ "Topic :: Software Development :: Libraries :: Python Modules",
30
+ "Framework :: FastAPI",
31
+ "Typing :: Typed"
32
+ ]
33
+
34
+ [tool.poetry.urls]
35
+ Homepage = "https://github.com/nfraxlab/svc-infra"
36
+ Repository = "https://github.com/nfraxlab/svc-infra"
37
+ Issues = "https://github.com/nfraxlab/svc-infra/issues"
38
+ Documentation = "https://nfrax.com/svc-infra"
39
+
40
+ [tool.poetry.dependencies]
41
+ python = ">=3.11,<4.0"
42
+
43
+ # Core
44
+ fastapi = ">=0.110.0"
45
+ pydantic-settings = ">=2.0"
46
+ python-dotenv = ">=1.0.0"
47
+ typer = ">=0.12.0"
48
+ httpx = ">=0.25.0"
49
+
50
+ # DB + auth
51
+ sqlalchemy = { extras = ["asyncio"], version = ">=2.0" }
52
+ alembic = ">=1.13.0"
53
+ greenlet = ">=3.0"
54
+ fastapi-users = { extras = ["oauth"], version = ">=14.0.0" }
55
+ fastapi-users-db-sqlalchemy = ">=7.0.0"
56
+ authlib = ">=1.0.0"
57
+ httpx-oauth = ">=0.15.0"
58
+ passlib = { extras = ["bcrypt"], version = ">=1.7.4" }
59
+ email-validator = ">=2.0.0"
60
+
61
+ # Database drivers (all optional)
62
+ psycopg = {extras = ["binary"], version = ">=3.0"} # v3
63
+ asyncpg = { version = ">=0.29.0", optional = true }
64
+ aiosqlite = { version = ">=0.19.0", optional = true }
65
+ pymysql = { version = ">=1.1.0", optional = true }
66
+ mysqlclient = { version = ">=2.2.0", optional = true }
67
+ pyodbc = { version = ">=5.0.0", optional = true }
68
+ snowflake-connector-python = { version = ">=3.0.0", optional = true }
69
+ redshift-connector = { version = ">=2.0.0", optional = true }
70
+ duckdb = { version = ">=0.10.0", optional = true }
71
+
72
+ # Storage
73
+ aiofiles = ">=24.0.0"
74
+ aioboto3 = { version = ">=12.0.0", optional = true }
75
+
76
+ # Other infra deps
77
+ mcp = ">=1.0.0"
78
+ opentelemetry-sdk = ">=1.20.0"
79
+ opentelemetry-instrumentation-fastapi = ">=0.41b0"
80
+ opentelemetry-instrumentation-sqlalchemy = ">=0.41b0"
81
+ opentelemetry-instrumentation-requests = ">=0.41b0"
82
+ opentelemetry-instrumentation-httpx = ">=0.41b0"
83
+ opentelemetry-exporter-otlp = ">=1.20.0"
84
+ opentelemetry-propagator-b3 = ">=1.20.0"
85
+ prometheus-client = ">=0.18.0"
86
+ redis = ">=5.0.0"
87
+ cashews = {extras = ["redis"], version = ">=7.0"}
88
+ itsdangerous = ">=2.0.0"
89
+ pyotp = ">=2.9.0"
90
+ websockets = ">=12.0"
91
+
92
+ # Optional dependencies (install via extras)
93
+ motor = { version = ">=3.0.0", optional = true }
94
+ stripe = { version = ">=7.0.0", optional = true }
95
+ adyen = { version = ">=10.0.0", optional = true }
96
+ psycopg2-binary = { version = ">=2.9.0", optional = true }
97
+
98
+ [tool.poetry.extras]
99
+ # Postgres v3 (recommended)
100
+ pg = ["psycopg", "asyncpg"]
101
+ # Postgres v2 (legacy compatibility)
102
+ pg2 = ["psycopg2-binary"]
103
+ sqlite = ["aiosqlite"]
104
+ mysql = ["pymysql", "mysqlclient"]
105
+ # Payment providers
106
+ payments = ["stripe", "adyen"]
107
+ stripe = ["stripe"]
108
+ adyen = ["adyen"]
109
+ # MongoDB
110
+ mongodb = ["motor"]
111
+ mssql = ["pyodbc"]
112
+ snowflake = ["snowflake-connector-python"]
113
+ redshift = ["redshift-connector"]
114
+ duckdb = ["duckdb"]
115
+ metrics = ["prometheus-client"]
116
+ s3 = ["aioboto3"]
117
+
118
+ [tool.poetry.group.dev.dependencies]
119
+ pytest = ">=8.0.0"
120
+ pytest-asyncio = ">=0.23.0"
121
+ ruff = ">=0.6.0"
122
+ mypy = ">=1.10.0"
123
+ types-requests = ">=2.31.0"
124
+ pytest-mock = ">=3.12.0"
125
+ httpx = ">=0.25.0"
126
+ fakeredis = ">=2.20.0"
127
+ moto = {extras = ["s3"], version = ">=5.0.0"}
128
+ aiosqlite = ">=0.19.0" # Required for acceptance tests using SQLite
129
+ pre-commit = ">=3.0.0"
130
+ # Documentation
131
+ mkdocs = ">=1.6.0"
132
+ mkdocs-material = ">=9.5.0"
133
+ mkdocstrings = {extras = ["python"], version = ">=0.25.0"}
134
+
135
+ [tool.poetry.scripts]
136
+ svc-infra = "svc_infra.cli:main"
137
+
138
+ [tool.pytest.ini_options]
139
+ testpaths = ["tests"]
140
+ python_files = ["test_*.py", "*_test.py"]
141
+ python_classes = ["Test*",]
142
+ python_functions = ["test_*"]
143
+ markers = [
144
+ "acceptance: End-to-end acceptance tests running against the acceptance app or BASE_URL",
145
+ "unit: Unit tests",
146
+ "security: Security and auth hardening tests",
147
+ "ratelimit: Rate limiting and abuse protection tests",
148
+ "concurrency: Idempotency and concurrency control tests",
149
+ "jobs: Background jobs and scheduling tests",
150
+ "webhooks: Webhooks framework tests",
151
+ "billing: Billing primitives tests",
152
+ "tenancy: Tenancy isolation and enforcement tests",
153
+ "data_lifecycle: Data lifecycle (fixtures, retention, erasure, backups)",
154
+ "ops: SLOs & Ops tests (probes, breaker, instrumentation)",
155
+ "dx: Developer experience and quality gates tests",
156
+ "admin: Admin scope and impersonation tests",
157
+ "storage: File storage system tests",
158
+ ]
159
+ filterwarnings = [
160
+ "ignore:The `route` decorator is deprecated:DeprecationWarning:starlette.*",
161
+ ]
162
+
163
+ [build-system]
164
+ requires = ["poetry-core>=2.0.0,<3.0.0"]
165
+ build-backend = "poetry.core.masonry.api"
@@ -0,0 +1,59 @@
1
+ """svc-infra: Service Infrastructure Toolkit.
2
+
3
+ A comprehensive backend infrastructure library providing:
4
+ - API framework (FastAPI scaffolding, dual routers, auth)
5
+ - Database (SQL/Mongo, migrations, repositories)
6
+ - Caching (Redis, decorators)
7
+ - Jobs (background tasks, queues)
8
+ - Webhooks (delivery, subscriptions)
9
+ - Billing (Stripe/Adyen integration)
10
+ - Observability (logging, metrics)
11
+
12
+ Example:
13
+ from svc_infra.api.fastapi import easy_service_app
14
+ from svc_infra.api.fastapi.auth import add_auth_users
15
+
16
+ app = easy_service_app(name="MyAPI")
17
+ add_auth_users(app)
18
+ """
19
+
20
+ from __future__ import annotations
21
+
22
+ # Core modules (lazy import pattern for optional dependencies)
23
+ from . import api, app, cache, db, jobs, webhooks
24
+
25
+ # Base exception
26
+ from .exceptions import SvcInfraError
27
+
28
+ # Content Loaders
29
+ from .loaders import (
30
+ BaseLoader,
31
+ GitHubLoader,
32
+ LoadedContent,
33
+ URLLoader,
34
+ load_github,
35
+ load_github_sync,
36
+ load_url,
37
+ load_url_sync,
38
+ )
39
+
40
+ __all__ = [
41
+ # Core modules
42
+ "api",
43
+ "app",
44
+ "cache",
45
+ "db",
46
+ "jobs",
47
+ "webhooks",
48
+ # Base exception
49
+ "SvcInfraError",
50
+ # Loaders
51
+ "BaseLoader",
52
+ "GitHubLoader",
53
+ "LoadedContent",
54
+ "URLLoader",
55
+ "load_github",
56
+ "load_github_sync",
57
+ "load_url",
58
+ "load_url_sync",
59
+ ]