spaps-server-quickstart 0.4.0__tar.gz → 0.5.1__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.
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/.gitignore +17 -0
- spaps_server_quickstart-0.5.1/CHANGELOG.md +128 -0
- spaps_server_quickstart-0.5.1/PKG-INFO +288 -0
- spaps_server_quickstart-0.5.1/README.md +214 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/MIGRATION_GUIDE.md +7 -7
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/TDD_PLAN.md +4 -4
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/TM-ENV-001-checklist.md +2 -3
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/TM-ENV-001-email-environment-safety.md +3 -3
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/UPGRADING.md +1 -1
- spaps_server_quickstart-0.5.1/docs/feature-plans/INDEX.md +24 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/feature-plans/security-audit-remediation-2026q1/README.md +1 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/feature-plans/security-audit-remediation-2026q1/plan.md +3 -3
- spaps_server_quickstart-0.5.1/docs/feature-plans/trust-invariants-kernel/README.md +38 -0
- spaps_server_quickstart-0.5.1/docs/feature-plans/trust-invariants-kernel/backend.md +149 -0
- spaps_server_quickstart-0.5.1/docs/feature-plans/trust-invariants-kernel/describe-wave-1-principal-proxy-reuse.md +79 -0
- spaps_server_quickstart-0.5.1/docs/feature-plans/trust-invariants-kernel/flows.md +60 -0
- spaps_server_quickstart-0.5.1/docs/feature-plans/trust-invariants-kernel/frontend.md +34 -0
- spaps_server_quickstart-0.5.1/docs/feature-plans/trust-invariants-kernel/plan.md +202 -0
- spaps_server_quickstart-0.5.1/docs/feature-plans/trust-invariants-kernel/schema.mmd +61 -0
- spaps_server_quickstart-0.5.1/docs/feature-plans/trust-invariants-kernel/shared.md +120 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/security-audit-remediation-2026q1-tm007-tm008.md +6 -2
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/pyproject.toml +13 -2
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/__init__.py +1 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/api/domains/health_router.py +3 -5
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/app_factory.py +2 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/auth/__init__.py +13 -10
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/db/__init__.py +9 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/db/session.py +59 -1
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/_db/model_registry.py +37 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/_db/rls.py +1 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/affiliate_referrals/repository.py +4 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/affiliate_referrals/router.py +17 -2
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/affiliate_referrals/schemas.py +65 -8
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/affiliate_referrals/service.py +133 -25
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/agent_approvals/errors.py +10 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/agent_approvals/repository.py +14 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/agent_approvals/router.py +126 -17
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/agent_approvals/schemas.py +28 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/agent_approvals/service.py +125 -19
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/applications/blueprints.py +563 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/applications/models.py +6 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/applications/repository.py +2 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/applications/router.py +2 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/applications/schemas.py +2 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/applications/service.py +23 -4
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/__init__.py +9 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/errors.py +82 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/models.py +131 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/repository.py +80 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/router.py +77 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/schemas.py +89 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/service.py +214 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/audit/router.py +8 -4
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/audit/service.py +13 -2
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/auth/repository.py +7 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/auth/router.py +98 -13
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/auth/schemas.py +9 -5
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/auth/service.py +457 -136
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/billing_accounts/__init__.py +5 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/billing_accounts/models.py +55 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/billing_accounts/repository.py +110 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/billing_accounts/resolver.py +272 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo/repository.py +18 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo/router.py +48 -3
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo/schemas.py +13 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo/service.py +134 -12
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/cfo_roles/deps.py +85 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo_roles/me_router.py +2 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo_roles/router.py +6 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo_roles/service.py +11 -4
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/dayrate/repository.py +85 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/dayrate/router.py +212 -69
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/dayrate/schemas.py +57 -2
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/dayrate/service.py +232 -48
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/device_flow/router.py +2 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/device_flow/schemas.py +1 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/device_flow/service.py +17 -4
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/docs/discovery.py +50 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/docs/repository.py +29 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/docs/router.py +30 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/docs/schemas.py +43 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/docs/service.py +40 -19
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/email/config.py +72 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/email/mailgun.py +13 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/email/router.py +22 -8
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/email/service.py +347 -131
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/entitlements/repository.py +26 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/entitlements/router.py +9 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/entitlements/service.py +236 -99
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/issue_reporting_platform/__init__.py +2 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/issue_reporting_platform/errors.py +61 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/issue_reporting_platform/models.py +70 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/issue_reporting_platform/repository.py +189 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/issue_reporting_platform/router.py +338 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/issue_reporting_platform/schemas.py +106 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/issue_reporting_platform/service.py +884 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/policies/__init__.py +1 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/policies/errors.py +25 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/policies/evaluator.py +415 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/policies/models.py +115 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/policies/repository.py +138 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/policies/router.py +198 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/policies/schemas.py +124 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/policies/service.py +323 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/redirects.py +145 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/security/models.py +5 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/security/repository.py +18 -4
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/security/router.py +2 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/security/service.py +14 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/self_service/router.py +14 -9
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/self_service/schemas.py +2 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/self_service/service.py +25 -5
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/admin_detection.py +5 -8
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/blacklist_service.py +58 -36
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/password_service.py +11 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/stripe/guest_checkout.py +27 -14
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/stripe/models.py +3 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/stripe/repository.py +40 -3
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/stripe/router.py +78 -7
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/stripe/schemas.py +64 -5
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/stripe/service.py +181 -43
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/stripe/webhook_handler.py +561 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/support_telemetry_platform/__init__.py +2 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/support_telemetry_platform/errors.py +55 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/support_telemetry_platform/models.py +141 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/support_telemetry_platform/repository.py +318 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/support_telemetry_platform/router.py +263 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/support_telemetry_platform/schemas.py +149 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/support_telemetry_platform/service.py +529 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/router.py +33 -39
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/schemas.py +0 -2
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/service.py +3 -2
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/webhooks/delivery.py +71 -51
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/webhooks/destination_security.py +41 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/webhooks/errors.py +7 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/webhooks/schemas.py +5 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/webhooks/service.py +39 -20
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/webhooks/signing.py +49 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/whitelist/models.py +1 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/whitelist/repository.py +2 -2
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/whitelist/router.py +36 -17
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/whitelist/schemas.py +1 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/whitelist/service.py +1 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/logging.py +14 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/middleware/api_key.py +47 -32
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/middleware/client_ip.py +91 -0
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/middleware/envelope.py +169 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/middleware/error_handler.py +13 -1
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/middleware/key_scope.py +169 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/middleware/local_mode.py +3 -1
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/middleware/origin_validation.py +135 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/middleware/rate_limiting.py +119 -31
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/middleware/spaps_deps.py +84 -13
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/sdk/server_clients.py +35 -40
- spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/sdk/trusted_service_middleware.py +283 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/seeds/cli.py +34 -27
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/settings.py +1 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/spaps_app.py +100 -4
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/spaps_settings.py +32 -3
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/startup.py +200 -82
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/alembic/env.py +1 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/alembic.ini +1 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/.env.production.example +1 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/.github/workflows/rollback.yml +1 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/Makefile +1 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/deploy/docker-compose.migration.yml +1 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/conftest.py +2 -2
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/Makefile +1 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/.env.production.example +1 -1
- spaps_server_quickstart-0.5.1/tests/conftest.py +45 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/test_auth_contract.py +1 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/test_celery_contract.py +3 -3
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/test_db_contract.py +18 -2
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/test_dependencies_contract.py +2 -2
- spaps_server_quickstart-0.5.1/tests/contracts/test_golden_app_pack.py +126 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/test_manifest_parity.py +12 -13
- spaps_server_quickstart-0.5.1/tests/contracts/test_oss_hygiene_script.py +53 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/test_settings_contract.py +2 -2
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/affiliate_referrals/test_router.py +203 -1
- spaps_server_quickstart-0.5.1/tests/domains/affiliate_referrals/test_schemas.py +76 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/affiliate_referrals/test_service.py +225 -2
- spaps_server_quickstart-0.5.1/tests/domains/agent_approvals/test_callback_url_validation.py +283 -0
- spaps_server_quickstart-0.5.1/tests/domains/agent_approvals/test_repository.py +77 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/agent_approvals/test_router.py +130 -14
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/agent_approvals/test_service.py +377 -24
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/applications/test_repository.py +27 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/applications/test_router.py +259 -0
- spaps_server_quickstart-0.5.1/tests/domains/approval_authz_prod_hardening/conftest.py +54 -0
- spaps_server_quickstart-0.5.1/tests/domains/approval_authz_prod_hardening/test_router.py +322 -0
- spaps_server_quickstart-0.5.1/tests/domains/approval_authz_prod_hardening/test_service.py +380 -0
- spaps_server_quickstart-0.5.1/tests/domains/approval_authz_prod_hardening/test_wiring.py +439 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/audit/test_router.py +12 -3
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/audit/test_service.py +45 -3
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/auth/test_refresh_token_anomaly.py +51 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/auth/test_repository.py +37 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/auth/test_router.py +255 -2
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/auth/test_service.py +811 -2
- spaps_server_quickstart-0.5.1/tests/domains/billing_accounts/test_repository.py +251 -0
- spaps_server_quickstart-0.5.1/tests/domains/billing_accounts/test_resolver.py +211 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/cfo/test_router.py +139 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/cfo/test_service.py +450 -85
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/cfo_roles/test_router.py +258 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/cfo_roles/test_service.py +25 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/dayrate/test_enhanced_booking_service.py +113 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/dayrate/test_repository.py +214 -0
- spaps_server_quickstart-0.5.1/tests/domains/dayrate/test_router.py +1118 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/dayrate/test_service.py +429 -30
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/device_flow/test_router.py +7 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/device_flow/test_service.py +79 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/docs/test_repository.py +41 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/docs/test_router.py +67 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/docs/test_service.py +64 -4
- spaps_server_quickstart-0.5.1/tests/domains/email/test_config.py +112 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/email/test_env_safety.py +1 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/email/test_router.py +93 -6
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/email/test_service.py +395 -10
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/entitlements/test_router.py +51 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/entitlements/test_service.py +395 -0
- spaps_server_quickstart-0.5.1/tests/domains/issue_reporting_platform/test_router.py +566 -0
- spaps_server_quickstart-0.5.1/tests/domains/issue_reporting_platform/test_service.py +813 -0
- spaps_server_quickstart-0.5.1/tests/domains/policies/test_evaluator.py +375 -0
- spaps_server_quickstart-0.5.1/tests/domains/policies/test_router.py +78 -0
- spaps_server_quickstart-0.5.1/tests/domains/policies/test_service.py +324 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/security/test_repository.py +84 -7
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/security/test_router.py +44 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/security/test_service.py +20 -6
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/self_service/test_router.py +141 -26
- spaps_server_quickstart-0.5.1/tests/domains/sessions/test_admin_detection.py +38 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/stripe/test_guest_checkout.py +252 -61
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/stripe/test_repository.py +29 -3
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/stripe/test_router.py +370 -6
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/stripe/test_service.py +324 -17
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/stripe/test_webhook_handler.py +411 -36
- spaps_server_quickstart-0.5.1/tests/domains/stripe/test_webhook_hardening.py +336 -0
- spaps_server_quickstart-0.5.1/tests/domains/support_telemetry_platform/__init__.py +2 -0
- spaps_server_quickstart-0.5.1/tests/domains/support_telemetry_platform/test_repository.py +116 -0
- spaps_server_quickstart-0.5.1/tests/domains/support_telemetry_platform/test_router.py +257 -0
- spaps_server_quickstart-0.5.1/tests/domains/support_telemetry_platform/test_service.py +361 -0
- spaps_server_quickstart-0.5.1/tests/domains/wallets/test_legacy_routes_tenant_binding.py +82 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/wallets/test_router.py +12 -15
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/wallets/test_service.py +73 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/webhooks/test_delivery.py +115 -9
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/webhooks/test_router.py +16 -6
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/webhooks/test_service.py +149 -60
- spaps_server_quickstart-0.5.1/tests/domains/whitelist/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/whitelist/test_repository.py +1 -1
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/whitelist/test_router.py +70 -3
- spaps_server_quickstart-0.5.1/tests/middleware/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/middleware/test_api_key.py +34 -3
- spaps_server_quickstart-0.5.1/tests/middleware/test_client_ip.py +89 -0
- spaps_server_quickstart-0.5.1/tests/middleware/test_envelope.py +115 -0
- spaps_server_quickstart-0.5.1/tests/middleware/test_key_scope.py +234 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/middleware/test_origin_validation.py +27 -5
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/middleware/test_rate_limiting.py +223 -15
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/middleware/test_spaps_deps.py +173 -4
- spaps_server_quickstart-0.5.1/tests/seeds/test_cli.py +89 -0
- spaps_server_quickstart-0.5.1/tests/test_alembic_path_bootstrap.py +66 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_auth.py +89 -16
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_auth_cookies.py +3 -3
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_db_session.py +127 -8
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_environment_safety.py +68 -0
- spaps_server_quickstart-0.5.1/tests/test_health_router.py +239 -0
- spaps_server_quickstart-0.5.1/tests/test_readme_snippets.py +25 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_sdk.py +164 -25
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_sessions_blacklist.py +97 -7
- spaps_server_quickstart-0.5.1/tests/test_spaps_app.py +79 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_startup_validation.py +82 -0
- spaps_server_quickstart-0.4.0/CHANGELOG.md +0 -38
- spaps_server_quickstart-0.4.0/PKG-INFO +0 -337
- spaps_server_quickstart-0.4.0/README.md +0 -272
- spaps_server_quickstart-0.4.0/coverage.xml +0 -1607
- spaps_server_quickstart-0.4.0/docs/TM-ENV-001-summary.md +0 -177
- spaps_server_quickstart-0.4.0/src/spaps_server_quickstart/domains/cfo_roles/deps.py +0 -39
- spaps_server_quickstart-0.4.0/src/spaps_server_quickstart/domains/stripe/webhook_handler.py +0 -290
- spaps_server_quickstart-0.4.0/src/spaps_server_quickstart/middleware/envelope.py +0 -129
- spaps_server_quickstart-0.4.0/src/spaps_server_quickstart/middleware/key_scope.py +0 -80
- spaps_server_quickstart-0.4.0/src/spaps_server_quickstart/middleware/origin_validation.py +0 -83
- spaps_server_quickstart-0.4.0/src/spaps_server_quickstart/sdk/trusted_service_middleware.py +0 -110
- spaps_server_quickstart-0.4.0/tests/conftest.py +0 -9
- spaps_server_quickstart-0.4.0/tests/domains/dayrate/test_router.py +0 -560
- spaps_server_quickstart-0.4.0/tests/middleware/test_key_scope.py +0 -104
- spaps_server_quickstart-0.4.0/tests/test_health_router.py +0 -94
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/.python-version +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/TM-002-IMPLEMENTATION.md +0 -0
- /spaps_server_quickstart-0.4.0/diff/plan.md → /spaps_server_quickstart-0.5.1/docs/feature-plans/_archived/diff-mvp-plan.md +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/feature-plans/security-audit-remediation-2026q1/AUDIT_REPORT.md +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/feature-plans/security-audit-remediation-2026q1/backend.md +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/feature-plans/security-audit-remediation-2026q1/flows.md +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/feature-plans/security-audit-remediation-2026q1/frontend.md +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/feature-plans/security-audit-remediation-2026q1/schema.mmd +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/feature-plans/security-audit-remediation-2026q1/shared.md +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/messaging-broker-plan.md +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/scripts/release.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/alembic/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/alembic/naming.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/api/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/api/dependencies.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/api/domains/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/api/domains/metrics_router.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/api/health.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/api/router.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/auth/cookies.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/auth/dependencies.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/auth_channels.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/db/alembic_status.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/db/migration_runner.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/_db/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/_db/base.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/_db/types.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/affiliate_referrals/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/affiliate_referrals/errors.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/affiliate_referrals/models.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/agent_approvals/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/agent_approvals/models.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/applications/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/audit/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/audit/errors.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/audit/models.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/audit/repository.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/audit/retention.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/audit/schemas.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/auth/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo/errors.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo/models.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo/quickbooks.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo_roles/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo_roles/errors.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo_roles/schemas.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/crypto/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/crypto/errors.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/crypto/models.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/crypto/repository.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/crypto/router.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/crypto/schemas.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/crypto/service.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/dayrate/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/dayrate/errors.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/dayrate/models.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/dayrate/pricing.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/device_flow/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/device_flow/repository.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/device_flow/store.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/docs/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/docs/errors.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/docs/models.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/email/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/email/errors.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/email/models.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/email/repository.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/email/schemas.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/entitlements/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/entitlements/errors.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/entitlements/models.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/entitlements/schemas.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/errors.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/events.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/secure_messages/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/secure_messages/encryption.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/secure_messages/errors.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/secure_messages/models.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/secure_messages/repository.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/secure_messages/router.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/secure_messages/schemas.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/secure_messages/service.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/security/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/security/errors.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/security/schemas.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/self_service/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/self_service/errors.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/jwt_service.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/models.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/nonce_service.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/repository.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/router.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/schemas.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/service.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/stripe/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/stripe/errors.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/users/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/users/models.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/users/repository.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/users/router.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/users/schemas.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/users/service.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/chains/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/chains/dispatcher.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/chains/ethereum.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/chains/solana.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/models.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/repository.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/webhooks/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/webhooks/models.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/webhooks/repository.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/webhooks/router.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/whitelist/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/local_mode/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/local_mode/middleware.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/local_mode/personas.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/middleware/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/middleware/jwt_auth.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/middleware/security_headers.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/middleware.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/rbac/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/schemas/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/schemas/health.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/sdk/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/sdk/_ttl_cache.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/sdk/admin_token_cache.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/sdk/feature_evaluator.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/sdk/role_hierarchy.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/secure_messaging.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/seeds/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/seeds/schemas.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/seeds/validator.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/tasks/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/tasks/celery_factory.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/tasks/health.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/tasks/notifications.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/.pre-commit-config.yaml +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/alembic/script.py.mako +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/alembic/versions/.gitkeep +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/docs/templates/API_DOCUMENTATION_TEMPLATE.md +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/docs/templates/DEBUG_REPORT_TEMPLATE.md +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/docs/templates/OPERATIONS_PLAYBOOK_TEMPLATE.md +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/domains/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/domains/admin/router.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/domains/auth/local_routes.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/domains/users/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/domains/users/models.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/domains/users/repository.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/domains/users/router.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/domains/users/schemas.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/domains/users/service.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/.githooks/pre-push +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/.github/workflows/deploy.yml +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/deploy/deploy.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/deploy/post-deploy-verify.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/deploy/pre-deploy-checks.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/docker-compose.prod.yml +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/scripts/backup-db.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/scripts/dev/await_db.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/scripts/dev/fetch-prod-db.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/scripts/dev/local-debug-loop.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/scripts/dev/start-db.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/scripts/dev/stop-db.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/scripts/new-migration.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/scripts/prepush.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/scripts/restore-db.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/scripts/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/scripts/seeds/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/scripts/seeds/data/users.yaml +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/scripts/seeds/schemas/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/scripts/seeds/schemas/users.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/README.md +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/api/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/api/test_health.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/api/test_users_auth.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/domains/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/domains/example/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/domains/example/conftest.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/domains/users/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/domains/users/conftest.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/integration/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/integration/test_db_connectivity.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/unit/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/unit/test_settings.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/testing.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/docker-compose.yml +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/.github/workflows/deploy.yml +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/Makefile +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/deploy.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/post-deploy-verify.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/pre-deploy-checks.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/reverse-proxy/README.md +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/reverse-proxy/certs/.gitkeep +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/reverse-proxy/docker-compose.yml +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/reverse-proxy/nginx.conf +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/reverse-proxy/sites-available/.gitkeep +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/reverse-proxy/sites-enabled/.gitkeep +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/reverse-proxy/static/.gitkeep +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/reverse-proxy/up.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/docker-compose.dev.yml +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/docker-compose.prod.yml +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/scripts/dev/await_db.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/scripts/dev/local-debug-loop.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/scripts/dev/start-db.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/scripts/dev/stop-db.sh +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/tests/conftest.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/test_app_factory_contract.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/test_health_contract.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/test_router_contract.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/affiliate_referrals/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/agent_approvals/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/applications/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/applications/test_service.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/domains/audit → spaps_server_quickstart-0.5.1/tests/domains/approval_authz_prod_hardening}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/domains/auth → spaps_server_quickstart-0.5.1/tests/domains/audit}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/audit/test_repository.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/audit/test_retention.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/domains/cfo → spaps_server_quickstart-0.5.1/tests/domains/auth}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/domains/crypto → spaps_server_quickstart-0.5.1/tests/domains/cfo}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/cfo/test_repository.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/cfo_roles/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/conftest.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/domains/dayrate → spaps_server_quickstart-0.5.1/tests/domains/crypto}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/crypto/test_repository.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/crypto/test_router.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/crypto/test_service.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/domains/device_flow → spaps_server_quickstart-0.5.1/tests/domains/dayrate}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/dayrate/test_allotment_service.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/dayrate/test_booking_policy_service.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/dayrate/test_booking_routes.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/dayrate/test_pricing.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/domains/docs → spaps_server_quickstart-0.5.1/tests/domains/device_flow}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/device_flow/test_store.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/domains/email → spaps_server_quickstart-0.5.1/tests/domains/docs}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/domains/entitlements → spaps_server_quickstart-0.5.1/tests/domains/email}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/email/test_repository.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/domains/secure_messages → spaps_server_quickstart-0.5.1/tests/domains/entitlements}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/entitlements/test_repository.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/domains/security → spaps_server_quickstart-0.5.1/tests/domains/policies}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/domains/self_service → spaps_server_quickstart-0.5.1/tests/domains/secure_messages}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/secure_messages/test_encryption.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/secure_messages/test_router.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/secure_messages/test_service.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/secure_messages/test_tm013_security.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/domains/sessions → spaps_server_quickstart-0.5.1/tests/domains/security}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/domains/stripe → spaps_server_quickstart-0.5.1/tests/domains/self_service}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/domains/users → spaps_server_quickstart-0.5.1/tests/domains/sessions}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/sessions/test_repository.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/sessions/test_router.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/sessions/test_service.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/domains/wallets → spaps_server_quickstart-0.5.1/tests/domains/stripe}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/stripe/test_subscription_application_scoping.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/test_smoke.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/domains/webhooks → spaps_server_quickstart-0.5.1/tests/domains/users}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/users/test_repository.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/users/test_router.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/users/test_service.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/domains/whitelist → spaps_server_quickstart-0.5.1/tests/domains/wallets}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/wallets/test_chains.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/wallets/test_repository.py +0 -0
- {spaps_server_quickstart-0.4.0/tests/middleware → spaps_server_quickstart-0.5.1/tests/domains/webhooks}/__init__.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/webhooks/test_repository.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/webhooks/test_signing.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/whitelist/test_service.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/middleware/test_jwt_auth.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/middleware/test_local_mode.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/middleware/test_security_headers.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_alembic_naming.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_api_router.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_app_factory.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_auth_channels.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_auth_dependencies.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_bcrypt_compat.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_dev_data_pipeline.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_imports.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_local_mode.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_logging.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_middleware.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_migration_runner.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_migration_status.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_operations_templates.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_package_metadata.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_rbac.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_secure_messaging.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_seed_validation.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_session_autocommit.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_sessions_jwt.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_sessions_nonce.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_sessions_password.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_settings.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_tasks.py +0 -0
- {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/todo.md +0 -0
|
@@ -78,6 +78,10 @@ storybook-static/
|
|
|
78
78
|
# IDE
|
|
79
79
|
.vscode/
|
|
80
80
|
.idea/
|
|
81
|
+
.codex/
|
|
82
|
+
.mcp.json
|
|
83
|
+
.claude/settings.local.json
|
|
84
|
+
.claude/skills/
|
|
81
85
|
*.swp
|
|
82
86
|
*.swo
|
|
83
87
|
*.swn
|
|
@@ -150,6 +154,13 @@ backup-feb8.sql
|
|
|
150
154
|
# Stripe CLI
|
|
151
155
|
.stripe-listen.pid
|
|
152
156
|
|
|
157
|
+
# Local modes/swarm artifacts
|
|
158
|
+
.ntm/
|
|
159
|
+
.skillbox/
|
|
160
|
+
MODES_ANALYSIS_PROGRESS.md
|
|
161
|
+
MODES_OF_REASONING_REPORT_AND_ANALYSIS_OF_PROJECT.md
|
|
162
|
+
MODES_SWARM/
|
|
163
|
+
|
|
153
164
|
# OS files
|
|
154
165
|
Thumbs.db
|
|
155
166
|
Desktop.ini
|
|
@@ -168,3 +179,9 @@ playwright/.cache/
|
|
|
168
179
|
# (keep package-lock.json for applications)
|
|
169
180
|
# yarn.lock
|
|
170
181
|
# pnpm-lock.yaml*.tgz
|
|
182
|
+
|
|
183
|
+
**/coverage.xml
|
|
184
|
+
|
|
185
|
+
context.yaml
|
|
186
|
+
MODES_OF_REASONING_SECOND_PASS_REPORT.md
|
|
187
|
+
skillbox-config/
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented in this file.
|
|
4
|
+
|
|
5
|
+
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
- No changes yet.
|
|
10
|
+
|
|
11
|
+
## [0.5.0] - 2026-03-29
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- End-user issue-reporting flows, runtime token admin support, and support-telemetry helpers for downstream FastAPI services.
|
|
16
|
+
- Browser-friendly device-flow verification and expanded reusable database helper surface.
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- Magic-link redirect handling, stale session admin-email behavior, and related auth/session hardening.
|
|
21
|
+
- Hotspot complexity and coverage gaps across webhook, auth, and session paths.
|
|
22
|
+
|
|
23
|
+
## [0.4.0] - 2026-02-11
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
- Full domain rewrite covering auth, sessions, users, wallets, payments, entitlements, dayrate, agent approvals, affiliate referrals, email templates, and related operational domains.
|
|
28
|
+
- Approval capability gates and governance health endpoint.
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- Production cutover to Python SPAPS stack (CI/CD, Docker Compose, deploy scripts).
|
|
33
|
+
- Consolidated SPAPS integration patterns into published packages.
|
|
34
|
+
|
|
35
|
+
### Security
|
|
36
|
+
|
|
37
|
+
- Rate limiting by client IP.
|
|
38
|
+
- PII encryption startup checks.
|
|
39
|
+
- Webhook authentication hardening.
|
|
40
|
+
- Row-level locking on refresh tokens.
|
|
41
|
+
- Fail-closed settings defaults.
|
|
42
|
+
|
|
43
|
+
## [0.3.0] - 2026-02-08
|
|
44
|
+
|
|
45
|
+
### Added
|
|
46
|
+
|
|
47
|
+
- Contract tests and shared testing module.
|
|
48
|
+
- Health endpoint enhancements.
|
|
49
|
+
|
|
50
|
+
### Changed
|
|
51
|
+
|
|
52
|
+
- Expanded coverage across settings, middleware, database, Celery, and auth helpers.
|
|
53
|
+
|
|
54
|
+
## [0.2.3] - 2026-01-12
|
|
55
|
+
|
|
56
|
+
### Fixed
|
|
57
|
+
|
|
58
|
+
- `SpapsAuthMiddleware` now skips execution when `authenticated_user` is already populated.
|
|
59
|
+
|
|
60
|
+
## [0.2.2] - 2026-01-11
|
|
61
|
+
|
|
62
|
+
### Added
|
|
63
|
+
|
|
64
|
+
- `fnmatch` glob support for `spaps_auth_exempt_paths`.
|
|
65
|
+
- Set-password endpoint support for authenticated users.
|
|
66
|
+
- Stripe webhook admin tooling for entitlement workflows.
|
|
67
|
+
- Tier 3 templates: seeds, tests, domain examples, docs.
|
|
68
|
+
- Startup validation, Alembic templates, and CI/CD workflow scaffolding.
|
|
69
|
+
|
|
70
|
+
## [0.2.1] - 2025-12-01
|
|
71
|
+
|
|
72
|
+
### Added
|
|
73
|
+
|
|
74
|
+
- Shared pgvector dev scripts: `start-db.sh`, `stop-db.sh`, `await_db.py`.
|
|
75
|
+
- Dynamic DNS resolver support for Docker reverse-proxy setups.
|
|
76
|
+
|
|
77
|
+
### Fixed
|
|
78
|
+
|
|
79
|
+
- nginx DNS caching behavior.
|
|
80
|
+
- HTMA rate-limiting exemption handling.
|
|
81
|
+
|
|
82
|
+
## [0.2.0] - 2025-10-15
|
|
83
|
+
|
|
84
|
+
### Added
|
|
85
|
+
|
|
86
|
+
- Local auth bypass mode with pre-configured admin/user personas.
|
|
87
|
+
- Deployment check scripts (`pre-deploy`, `post-deploy`).
|
|
88
|
+
- Database caching workflow for local debug loops.
|
|
89
|
+
- Operational templates (Makefile, GHCR deploy, compose/reverse-proxy stubs).
|
|
90
|
+
|
|
91
|
+
### Security
|
|
92
|
+
|
|
93
|
+
- Production guardrails for local-auth bypass mode.
|
|
94
|
+
|
|
95
|
+
## [0.1.2] - 2025-10-15
|
|
96
|
+
|
|
97
|
+
### Fixed
|
|
98
|
+
|
|
99
|
+
- CI pipeline trigger scoping and quickstart build stability.
|
|
100
|
+
|
|
101
|
+
## [0.1.1] - 2025-10-14
|
|
102
|
+
|
|
103
|
+
### Changed
|
|
104
|
+
|
|
105
|
+
- Maintenance release to unblock automated PyPI publishing workflow.
|
|
106
|
+
|
|
107
|
+
## [0.1.0] - 2025-10-14
|
|
108
|
+
|
|
109
|
+
### Added
|
|
110
|
+
|
|
111
|
+
- FastAPI lifespan handling for SPAPS auth cleanup.
|
|
112
|
+
- Migration and upgrading guidance for downstream services.
|
|
113
|
+
- Shared refresh-cookie configuration and browser helper exports.
|
|
114
|
+
- Expanded package exports for auth helpers and operational templates.
|
|
115
|
+
- RBAC role helpers and sample domain routers.
|
|
116
|
+
- Comprehensive unit tests across settings, middleware, DB, Celery, and auth helpers.
|
|
117
|
+
|
|
118
|
+
## [0.0.2] - 2025-10-12
|
|
119
|
+
|
|
120
|
+
### Added
|
|
121
|
+
|
|
122
|
+
- Declared the `spaps` Python client dependency for downstream installs and CI runs.
|
|
123
|
+
|
|
124
|
+
## [0.0.1] - 2025-10-14
|
|
125
|
+
|
|
126
|
+
### Added
|
|
127
|
+
|
|
128
|
+
- Initial `spaps-server-quickstart` scaffold with shared FastAPI/Celery/database utilities.
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: spaps-server-quickstart
|
|
3
|
+
Version: 0.5.1
|
|
4
|
+
Summary: Shared FastAPI/Celery scaffolding for Sweet Potato service backends.
|
|
5
|
+
Project-URL: Homepage, https://api.sweetpotato.dev
|
|
6
|
+
Project-URL: Repository, https://github.com/sweet-potato/spaps
|
|
7
|
+
Author-email: buildooor <buildooor@gmail.com>
|
|
8
|
+
License: MIT
|
|
9
|
+
Keywords: celery,fastapi,quickstart,spaps,sweet-potato
|
|
10
|
+
Classifier: Framework :: FastAPI
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Topic :: Internet :: WWW/HTTP
|
|
17
|
+
Requires-Python: >=3.12
|
|
18
|
+
Requires-Dist: alembic<2.0,>=1.13.1
|
|
19
|
+
Requires-Dist: asyncpg<0.31,>=0.30.0
|
|
20
|
+
Requires-Dist: bcrypt<6.0,>=4.0.0
|
|
21
|
+
Requires-Dist: celery<6.0,>=5.5.3
|
|
22
|
+
Requires-Dist: cryptography<45.0,>=42.0.0
|
|
23
|
+
Requires-Dist: email-validator<3.0,>=2.1.0
|
|
24
|
+
Requires-Dist: eth-account<1.0,>=0.13.0
|
|
25
|
+
Requires-Dist: fastapi<0.119,>=0.118.0
|
|
26
|
+
Requires-Dist: greenlet<4.0,>=3.0.3
|
|
27
|
+
Requires-Dist: httpx<0.29,>=0.28.1
|
|
28
|
+
Requires-Dist: orjson<4.0,>=3.10.0
|
|
29
|
+
Requires-Dist: pgvector<0.5,>=0.4.1
|
|
30
|
+
Requires-Dist: psycopg[binary]<3.3,>=3.2.10
|
|
31
|
+
Requires-Dist: pydantic-settings<3.0,>=2.3.0
|
|
32
|
+
Requires-Dist: pydantic<3.0,>=2.8.0
|
|
33
|
+
Requires-Dist: pyjwt<3.0,>=2.8.0
|
|
34
|
+
Requires-Dist: python-dotenv<2.0,>=1.0.1
|
|
35
|
+
Requires-Dist: redis<7.0,>=6.4.0
|
|
36
|
+
Requires-Dist: slowapi<1.0,>=0.1.9
|
|
37
|
+
Requires-Dist: solders<1.0,>=0.21.0
|
|
38
|
+
Requires-Dist: spaps>=0.1.2
|
|
39
|
+
Requires-Dist: sqlalchemy<3.0,>=2.0.30
|
|
40
|
+
Requires-Dist: stripe<12.0,>=8.0.0
|
|
41
|
+
Requires-Dist: structlog<26.0,>=25.4.0
|
|
42
|
+
Requires-Dist: uvicorn[standard]<0.38,>=0.37.0
|
|
43
|
+
Provides-Extra: dev
|
|
44
|
+
Requires-Dist: anyio<5.0,>=4.4.0; extra == 'dev'
|
|
45
|
+
Requires-Dist: bcrypt<6.0,>=4.0.0; extra == 'dev'
|
|
46
|
+
Requires-Dist: coverage<8.0,>=7.4.0; extra == 'dev'
|
|
47
|
+
Requires-Dist: docker<8.0,>=7.0.0; extra == 'dev'
|
|
48
|
+
Requires-Dist: filelock<4.0,>=3.12.0; extra == 'dev'
|
|
49
|
+
Requires-Dist: httpx<0.29,>=0.28.1; extra == 'dev'
|
|
50
|
+
Requires-Dist: mypy<1.12,>=1.10.0; extra == 'dev'
|
|
51
|
+
Requires-Dist: pytest-asyncio<0.24,>=0.23.0; extra == 'dev'
|
|
52
|
+
Requires-Dist: pytest-cov<6.0,>=5.0.0; extra == 'dev'
|
|
53
|
+
Requires-Dist: pytest-testmon<3.0,>=2.1.0; extra == 'dev'
|
|
54
|
+
Requires-Dist: pytest-xdist<4.0,>=3.6.1; extra == 'dev'
|
|
55
|
+
Requires-Dist: pytest<9.0,>=8.2.0; extra == 'dev'
|
|
56
|
+
Requires-Dist: respx<0.23,>=0.22.0; extra == 'dev'
|
|
57
|
+
Requires-Dist: ruff<0.5,>=0.4.1; extra == 'dev'
|
|
58
|
+
Requires-Dist: testcontainers[postgres]<5.0,>=4.0.0; extra == 'dev'
|
|
59
|
+
Requires-Dist: types-pyyaml<7.0,>=6.0.0; extra == 'dev'
|
|
60
|
+
Provides-Extra: release
|
|
61
|
+
Requires-Dist: build<2.0,>=1.2.1; extra == 'release'
|
|
62
|
+
Requires-Dist: twine<6.0,>=5.0.0; extra == 'release'
|
|
63
|
+
Provides-Extra: testing
|
|
64
|
+
Requires-Dist: docker<8.0,>=7.0.0; extra == 'testing'
|
|
65
|
+
Requires-Dist: filelock<4.0,>=3.12.0; extra == 'testing'
|
|
66
|
+
Requires-Dist: httpx<0.29,>=0.28.1; extra == 'testing'
|
|
67
|
+
Requires-Dist: pytest-asyncio<0.24,>=0.23.0; extra == 'testing'
|
|
68
|
+
Requires-Dist: pytest-testmon<3.0,>=2.1.0; extra == 'testing'
|
|
69
|
+
Requires-Dist: pytest-xdist<4.0,>=3.6.1; extra == 'testing'
|
|
70
|
+
Requires-Dist: pytest<9.0,>=8.2.0; extra == 'testing'
|
|
71
|
+
Requires-Dist: respx<0.23,>=0.22.0; extra == 'testing'
|
|
72
|
+
Requires-Dist: testcontainers[postgres]<5.0,>=4.0.0; extra == 'testing'
|
|
73
|
+
Description-Content-Type: text/markdown
|
|
74
|
+
|
|
75
|
+
# spaps-server-quickstart
|
|
76
|
+
|
|
77
|
+
Reusable FastAPI, SQLAlchemy, Celery, auth, and operational scaffolding for SPAPS-aligned Python services. This is the active backend package in this repository.
|
|
78
|
+
|
|
79
|
+
Examples in this README use placeholders such as `https://api.example.test` and local-only database URLs. Replace them with values from your own environment.
|
|
80
|
+
|
|
81
|
+
## Install
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
pip install spaps-server-quickstart
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
This package targets Python 3.12+.
|
|
88
|
+
|
|
89
|
+
## When It Fits
|
|
90
|
+
|
|
91
|
+
| Need | Package gives you |
|
|
92
|
+
| --- | --- |
|
|
93
|
+
| A real FastAPI starting point | `create_app`, settings loaders, request logging, and startup checks |
|
|
94
|
+
| Shared auth and RBAC | SPAPS auth middleware, auth channels, cookies, and role dependencies |
|
|
95
|
+
| Async database plumbing | SQLAlchemy 2 async session helpers and Alembic support |
|
|
96
|
+
| Operational scaffolding | Celery setup, deploy templates, local-mode helpers, and service SDK utilities |
|
|
97
|
+
|
|
98
|
+
## Quick Start
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
from fastapi import APIRouter
|
|
102
|
+
|
|
103
|
+
from spaps_server_quickstart import create_app
|
|
104
|
+
from spaps_server_quickstart.settings import (
|
|
105
|
+
BaseServiceSettings,
|
|
106
|
+
create_settings_loader,
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
class ExampleSettings(BaseServiceSettings):
|
|
111
|
+
app_name: str = "Example Service"
|
|
112
|
+
spaps_auth_enabled: bool = False
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
router = APIRouter()
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
@router.get("/health")
|
|
119
|
+
async def health() -> dict[str, bool]:
|
|
120
|
+
return {"ok": True}
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
app = create_app(
|
|
124
|
+
settings_loader=create_settings_loader(ExampleSettings),
|
|
125
|
+
api_router=router,
|
|
126
|
+
)
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## What the Package Ships
|
|
130
|
+
|
|
131
|
+
| Area | Highlights |
|
|
132
|
+
| --- | --- |
|
|
133
|
+
| App lifecycle | `create_app`, startup validation, logging, CORS wiring |
|
|
134
|
+
| Auth | `SpapsAuthMiddleware`, auth cookies, auth channel service, local mode |
|
|
135
|
+
| Routing and RBAC | Base router builder, authenticated-user dependencies, `require_roles`, `has_required_roles` |
|
|
136
|
+
| Database | Async sessionmaker factory, migration runner, Alembic helpers |
|
|
137
|
+
| Tasks | Celery app factory plus notification and ping task helpers |
|
|
138
|
+
| Service SDK helpers | Admin token cache, server-side SPAPS clients, trusted-service middleware, feature evaluation |
|
|
139
|
+
| Templates | Domain examples, tests, deployment scaffolding, and local operations helpers |
|
|
140
|
+
| Reference contract | The `golden_path` app blueprint, seeded paid-access policy, and downstream runbook for the core auth -> billing -> entitlement -> access loop |
|
|
141
|
+
|
|
142
|
+
## Golden App Pack
|
|
143
|
+
|
|
144
|
+
If you want one SPAPS-native reference contract instead of a blank scaffold, start with the `golden_path` blueprint.
|
|
145
|
+
|
|
146
|
+
It is the canonical pack for:
|
|
147
|
+
|
|
148
|
+
- browser auth and session bootstrap
|
|
149
|
+
- Stripe checkout or subscription flows
|
|
150
|
+
- entitlement projection into `paid_access`
|
|
151
|
+
- policy-gated access through the seeded `access-paid-features` rule
|
|
152
|
+
- an operator runbook under `docs/downstream_apps/golden-path-reference/`
|
|
153
|
+
|
|
154
|
+
## Local Development Mode
|
|
155
|
+
|
|
156
|
+
Set `DEVELOPMENT_ENVIRONMENT=local` to enable local auth bypass in development and tests.
|
|
157
|
+
|
|
158
|
+
```python
|
|
159
|
+
from spaps_server_quickstart.local_mode import (
|
|
160
|
+
LocalAuthMiddleware,
|
|
161
|
+
get_default_registry,
|
|
162
|
+
)
|
|
163
|
+
from spaps_server_quickstart.settings import BaseServiceSettings
|
|
164
|
+
|
|
165
|
+
settings = BaseServiceSettings(development_environment="local")
|
|
166
|
+
|
|
167
|
+
if settings.is_local_development:
|
|
168
|
+
app.add_middleware(LocalAuthMiddleware, registry=get_default_registry())
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Default personas:
|
|
172
|
+
|
|
173
|
+
| Persona | Token | Roles |
|
|
174
|
+
| --- | --- | --- |
|
|
175
|
+
| Admin | `local-admin` | `admin`, `user` |
|
|
176
|
+
| User | `local-user` | `user` |
|
|
177
|
+
|
|
178
|
+
## Configuration
|
|
179
|
+
|
|
180
|
+
Common settings exposed through `BaseServiceSettings`:
|
|
181
|
+
|
|
182
|
+
| Setting | Purpose |
|
|
183
|
+
| --- | --- |
|
|
184
|
+
| `development_environment` | Enables local bypass mode when set to `local` |
|
|
185
|
+
| `spaps_auth_enabled` | Turns SPAPS auth middleware on or off |
|
|
186
|
+
| `spaps_auth_exempt_paths` | Comma-separated paths that skip SPAPS auth |
|
|
187
|
+
| `cors_allow_origins` | Shared CORS configuration |
|
|
188
|
+
| `database_url` | Async SQLAlchemy database URL |
|
|
189
|
+
| `redis_url` | Redis URL used by Celery defaults |
|
|
190
|
+
| `secure_messages_enabled` | Enables secure-messaging gateway support |
|
|
191
|
+
|
|
192
|
+
Example environment:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
DEVELOPMENT_ENVIRONMENT=local
|
|
196
|
+
SPAPS_API_URL=https://api.example.test
|
|
197
|
+
SPAPS_API_KEY=spaps_sec_example
|
|
198
|
+
DATABASE_URL=postgresql+asyncpg://postgres:postgres@localhost:5432/service
|
|
199
|
+
SPAPS_AUTH_EXEMPT_PATHS=/health,/docs
|
|
200
|
+
CORS_ALLOW_ORIGINS=http://localhost:3000,http://localhost:5173
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Validation
|
|
204
|
+
|
|
205
|
+
From the repository root, the `Makefile` is the canonical workflow:
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
make install
|
|
209
|
+
make pytest
|
|
210
|
+
make lint
|
|
211
|
+
make typecheck
|
|
212
|
+
make pytest-cov
|
|
213
|
+
make test
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Useful additional commands:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
make pytest-full
|
|
220
|
+
make migrate
|
|
221
|
+
make new-migration MSG="add_example_table"
|
|
222
|
+
make local-up
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## Troubleshooting
|
|
226
|
+
|
|
227
|
+
### `make pytest` reports no affected tests
|
|
228
|
+
|
|
229
|
+
That is expected when testmon sees no impacted tests. Use `make pytest-full` when you need a full run.
|
|
230
|
+
|
|
231
|
+
### Local auth bypass is not active
|
|
232
|
+
|
|
233
|
+
Confirm `DEVELOPMENT_ENVIRONMENT=local` is set before application startup and that `LocalAuthMiddleware` is wired into the app.
|
|
234
|
+
|
|
235
|
+
### Unauthenticated routes still require auth
|
|
236
|
+
|
|
237
|
+
Check `spaps_auth_exempt_paths` and make sure the configured paths match the router paths exactly.
|
|
238
|
+
|
|
239
|
+
### Startup fails on environment validation
|
|
240
|
+
|
|
241
|
+
Review the required settings and any safety checks triggered during startup.
|
|
242
|
+
|
|
243
|
+
### I need a new service quickly
|
|
244
|
+
|
|
245
|
+
Start from the included templates, then keep the repo-root validation path intact while adapting domain code and settings.
|
|
246
|
+
|
|
247
|
+
## Limitations
|
|
248
|
+
|
|
249
|
+
- This package is a scaffold, not a finished application.
|
|
250
|
+
- Downstream services still need their own routers, schemas, repositories, and deployment settings.
|
|
251
|
+
- Some operational templates intentionally need environment-specific edits before production use.
|
|
252
|
+
|
|
253
|
+
## FAQ
|
|
254
|
+
|
|
255
|
+
### Is this the active backend package in this repo?
|
|
256
|
+
|
|
257
|
+
Yes. This package replaces the old Node/Express stack as the active backend surface.
|
|
258
|
+
|
|
259
|
+
### Does it include local auth bypass support?
|
|
260
|
+
|
|
261
|
+
Yes. Set `DEVELOPMENT_ENVIRONMENT=local` and wire in the local-mode helpers.
|
|
262
|
+
|
|
263
|
+
### Can I use it without Celery?
|
|
264
|
+
|
|
265
|
+
Yes. Celery helpers are included, but you can compose only the pieces your service needs.
|
|
266
|
+
|
|
267
|
+
### Does it include RBAC helpers?
|
|
268
|
+
|
|
269
|
+
Yes. Use `require_roles`, `has_required_roles`, and the authenticated-user dependencies.
|
|
270
|
+
|
|
271
|
+
### What is the recommended validation path here?
|
|
272
|
+
|
|
273
|
+
From the repository root: `make pytest`, `make lint`, `make typecheck`, `make pytest-cov`, and `make test`.
|
|
274
|
+
|
|
275
|
+
## Metadata
|
|
276
|
+
|
|
277
|
+
- `package_name`: `spaps-server-quickstart`
|
|
278
|
+
- `latest_version`: `0.5.0`
|
|
279
|
+
- `minimum_runtime`: `Python >=3.12`
|
|
280
|
+
- `api_base_url`: `https://api.sweetpotato.dev`
|
|
281
|
+
|
|
282
|
+
## About Contributions
|
|
283
|
+
|
|
284
|
+
> *About Contributions:* Please don't take this the wrong way, but I do not accept outside contributions for any of my projects. I simply don't have the mental bandwidth to review anything, and it's my name on the thing, so I'm responsible for any problems it causes; thus, the risk-reward is highly asymmetric from my perspective. I'd also have to worry about other "stakeholders," which seems unwise for tools I mostly make for myself for free. Feel free to submit issues, and even PRs if you want to illustrate a proposed fix, but know I won't merge them directly. Instead, I'll have Claude or Codex review submissions via `gh` and independently decide whether and how to address them. Bug reports in particular are welcome. Sorry if this offends, but I want to avoid wasted time and hurt feelings. I understand this isn't in sync with the prevailing open-source ethos that seeks community contributions, but it's the only way I can move at this velocity and keep my sanity.
|
|
285
|
+
|
|
286
|
+
## License
|
|
287
|
+
|
|
288
|
+
MIT
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
# spaps-server-quickstart
|
|
2
|
+
|
|
3
|
+
Reusable FastAPI, SQLAlchemy, Celery, auth, and operational scaffolding for SPAPS-aligned Python services. This is the active backend package in this repository.
|
|
4
|
+
|
|
5
|
+
Examples in this README use placeholders such as `https://api.example.test` and local-only database URLs. Replace them with values from your own environment.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pip install spaps-server-quickstart
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
This package targets Python 3.12+.
|
|
14
|
+
|
|
15
|
+
## When It Fits
|
|
16
|
+
|
|
17
|
+
| Need | Package gives you |
|
|
18
|
+
| --- | --- |
|
|
19
|
+
| A real FastAPI starting point | `create_app`, settings loaders, request logging, and startup checks |
|
|
20
|
+
| Shared auth and RBAC | SPAPS auth middleware, auth channels, cookies, and role dependencies |
|
|
21
|
+
| Async database plumbing | SQLAlchemy 2 async session helpers and Alembic support |
|
|
22
|
+
| Operational scaffolding | Celery setup, deploy templates, local-mode helpers, and service SDK utilities |
|
|
23
|
+
|
|
24
|
+
## Quick Start
|
|
25
|
+
|
|
26
|
+
```python
|
|
27
|
+
from fastapi import APIRouter
|
|
28
|
+
|
|
29
|
+
from spaps_server_quickstart import create_app
|
|
30
|
+
from spaps_server_quickstart.settings import (
|
|
31
|
+
BaseServiceSettings,
|
|
32
|
+
create_settings_loader,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class ExampleSettings(BaseServiceSettings):
|
|
37
|
+
app_name: str = "Example Service"
|
|
38
|
+
spaps_auth_enabled: bool = False
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
router = APIRouter()
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
@router.get("/health")
|
|
45
|
+
async def health() -> dict[str, bool]:
|
|
46
|
+
return {"ok": True}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
app = create_app(
|
|
50
|
+
settings_loader=create_settings_loader(ExampleSettings),
|
|
51
|
+
api_router=router,
|
|
52
|
+
)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## What the Package Ships
|
|
56
|
+
|
|
57
|
+
| Area | Highlights |
|
|
58
|
+
| --- | --- |
|
|
59
|
+
| App lifecycle | `create_app`, startup validation, logging, CORS wiring |
|
|
60
|
+
| Auth | `SpapsAuthMiddleware`, auth cookies, auth channel service, local mode |
|
|
61
|
+
| Routing and RBAC | Base router builder, authenticated-user dependencies, `require_roles`, `has_required_roles` |
|
|
62
|
+
| Database | Async sessionmaker factory, migration runner, Alembic helpers |
|
|
63
|
+
| Tasks | Celery app factory plus notification and ping task helpers |
|
|
64
|
+
| Service SDK helpers | Admin token cache, server-side SPAPS clients, trusted-service middleware, feature evaluation |
|
|
65
|
+
| Templates | Domain examples, tests, deployment scaffolding, and local operations helpers |
|
|
66
|
+
| Reference contract | The `golden_path` app blueprint, seeded paid-access policy, and downstream runbook for the core auth -> billing -> entitlement -> access loop |
|
|
67
|
+
|
|
68
|
+
## Golden App Pack
|
|
69
|
+
|
|
70
|
+
If you want one SPAPS-native reference contract instead of a blank scaffold, start with the `golden_path` blueprint.
|
|
71
|
+
|
|
72
|
+
It is the canonical pack for:
|
|
73
|
+
|
|
74
|
+
- browser auth and session bootstrap
|
|
75
|
+
- Stripe checkout or subscription flows
|
|
76
|
+
- entitlement projection into `paid_access`
|
|
77
|
+
- policy-gated access through the seeded `access-paid-features` rule
|
|
78
|
+
- an operator runbook under `docs/downstream_apps/golden-path-reference/`
|
|
79
|
+
|
|
80
|
+
## Local Development Mode
|
|
81
|
+
|
|
82
|
+
Set `DEVELOPMENT_ENVIRONMENT=local` to enable local auth bypass in development and tests.
|
|
83
|
+
|
|
84
|
+
```python
|
|
85
|
+
from spaps_server_quickstart.local_mode import (
|
|
86
|
+
LocalAuthMiddleware,
|
|
87
|
+
get_default_registry,
|
|
88
|
+
)
|
|
89
|
+
from spaps_server_quickstart.settings import BaseServiceSettings
|
|
90
|
+
|
|
91
|
+
settings = BaseServiceSettings(development_environment="local")
|
|
92
|
+
|
|
93
|
+
if settings.is_local_development:
|
|
94
|
+
app.add_middleware(LocalAuthMiddleware, registry=get_default_registry())
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Default personas:
|
|
98
|
+
|
|
99
|
+
| Persona | Token | Roles |
|
|
100
|
+
| --- | --- | --- |
|
|
101
|
+
| Admin | `local-admin` | `admin`, `user` |
|
|
102
|
+
| User | `local-user` | `user` |
|
|
103
|
+
|
|
104
|
+
## Configuration
|
|
105
|
+
|
|
106
|
+
Common settings exposed through `BaseServiceSettings`:
|
|
107
|
+
|
|
108
|
+
| Setting | Purpose |
|
|
109
|
+
| --- | --- |
|
|
110
|
+
| `development_environment` | Enables local bypass mode when set to `local` |
|
|
111
|
+
| `spaps_auth_enabled` | Turns SPAPS auth middleware on or off |
|
|
112
|
+
| `spaps_auth_exempt_paths` | Comma-separated paths that skip SPAPS auth |
|
|
113
|
+
| `cors_allow_origins` | Shared CORS configuration |
|
|
114
|
+
| `database_url` | Async SQLAlchemy database URL |
|
|
115
|
+
| `redis_url` | Redis URL used by Celery defaults |
|
|
116
|
+
| `secure_messages_enabled` | Enables secure-messaging gateway support |
|
|
117
|
+
|
|
118
|
+
Example environment:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
DEVELOPMENT_ENVIRONMENT=local
|
|
122
|
+
SPAPS_API_URL=https://api.example.test
|
|
123
|
+
SPAPS_API_KEY=spaps_sec_example
|
|
124
|
+
DATABASE_URL=postgresql+asyncpg://postgres:postgres@localhost:5432/service
|
|
125
|
+
SPAPS_AUTH_EXEMPT_PATHS=/health,/docs
|
|
126
|
+
CORS_ALLOW_ORIGINS=http://localhost:3000,http://localhost:5173
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Validation
|
|
130
|
+
|
|
131
|
+
From the repository root, the `Makefile` is the canonical workflow:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
make install
|
|
135
|
+
make pytest
|
|
136
|
+
make lint
|
|
137
|
+
make typecheck
|
|
138
|
+
make pytest-cov
|
|
139
|
+
make test
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Useful additional commands:
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
make pytest-full
|
|
146
|
+
make migrate
|
|
147
|
+
make new-migration MSG="add_example_table"
|
|
148
|
+
make local-up
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Troubleshooting
|
|
152
|
+
|
|
153
|
+
### `make pytest` reports no affected tests
|
|
154
|
+
|
|
155
|
+
That is expected when testmon sees no impacted tests. Use `make pytest-full` when you need a full run.
|
|
156
|
+
|
|
157
|
+
### Local auth bypass is not active
|
|
158
|
+
|
|
159
|
+
Confirm `DEVELOPMENT_ENVIRONMENT=local` is set before application startup and that `LocalAuthMiddleware` is wired into the app.
|
|
160
|
+
|
|
161
|
+
### Unauthenticated routes still require auth
|
|
162
|
+
|
|
163
|
+
Check `spaps_auth_exempt_paths` and make sure the configured paths match the router paths exactly.
|
|
164
|
+
|
|
165
|
+
### Startup fails on environment validation
|
|
166
|
+
|
|
167
|
+
Review the required settings and any safety checks triggered during startup.
|
|
168
|
+
|
|
169
|
+
### I need a new service quickly
|
|
170
|
+
|
|
171
|
+
Start from the included templates, then keep the repo-root validation path intact while adapting domain code and settings.
|
|
172
|
+
|
|
173
|
+
## Limitations
|
|
174
|
+
|
|
175
|
+
- This package is a scaffold, not a finished application.
|
|
176
|
+
- Downstream services still need their own routers, schemas, repositories, and deployment settings.
|
|
177
|
+
- Some operational templates intentionally need environment-specific edits before production use.
|
|
178
|
+
|
|
179
|
+
## FAQ
|
|
180
|
+
|
|
181
|
+
### Is this the active backend package in this repo?
|
|
182
|
+
|
|
183
|
+
Yes. This package replaces the old Node/Express stack as the active backend surface.
|
|
184
|
+
|
|
185
|
+
### Does it include local auth bypass support?
|
|
186
|
+
|
|
187
|
+
Yes. Set `DEVELOPMENT_ENVIRONMENT=local` and wire in the local-mode helpers.
|
|
188
|
+
|
|
189
|
+
### Can I use it without Celery?
|
|
190
|
+
|
|
191
|
+
Yes. Celery helpers are included, but you can compose only the pieces your service needs.
|
|
192
|
+
|
|
193
|
+
### Does it include RBAC helpers?
|
|
194
|
+
|
|
195
|
+
Yes. Use `require_roles`, `has_required_roles`, and the authenticated-user dependencies.
|
|
196
|
+
|
|
197
|
+
### What is the recommended validation path here?
|
|
198
|
+
|
|
199
|
+
From the repository root: `make pytest`, `make lint`, `make typecheck`, `make pytest-cov`, and `make test`.
|
|
200
|
+
|
|
201
|
+
## Metadata
|
|
202
|
+
|
|
203
|
+
- `package_name`: `spaps-server-quickstart`
|
|
204
|
+
- `latest_version`: `0.5.0`
|
|
205
|
+
- `minimum_runtime`: `Python >=3.12`
|
|
206
|
+
- `api_base_url`: `https://api.sweetpotato.dev`
|
|
207
|
+
|
|
208
|
+
## About Contributions
|
|
209
|
+
|
|
210
|
+
> *About Contributions:* Please don't take this the wrong way, but I do not accept outside contributions for any of my projects. I simply don't have the mental bandwidth to review anything, and it's my name on the thing, so I'm responsible for any problems it causes; thus, the risk-reward is highly asymmetric from my perspective. I'd also have to worry about other "stakeholders," which seems unwise for tools I mostly make for myself for free. Feel free to submit issues, and even PRs if you want to illustrate a proposed fix, but know I won't merge them directly. Instead, I'll have Claude or Codex review submissions via `gh` and independently decide whether and how to address them. Bug reports in particular are welcome. Sorry if this offends, but I want to avoid wasted time and hurt feelings. I understand this isn't in sync with the prevailing open-source ethos that seeks community contributions, but it's the only way I can move at this velocity and keep my sanity.
|
|
211
|
+
|
|
212
|
+
## License
|
|
213
|
+
|
|
214
|
+
MIT
|