analygo-foundation 2.1.3.dev0__tar.gz → 2.1.5__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.
Files changed (72) hide show
  1. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/PKG-INFO +1 -1
  2. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/entitlements/entitlement_service.py +9 -9
  3. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/entitlements/queries.py +8 -8
  4. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation.egg-info/PKG-INFO +1 -1
  5. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/pyproject.toml +1 -1
  6. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/README.md +0 -0
  7. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/__init__.py +0 -0
  8. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/_config.py +0 -0
  9. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/_correlation.py +0 -0
  10. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/_db.py +0 -0
  11. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/_diagnostics.py +0 -0
  12. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/_jwt.py +0 -0
  13. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/_portal_db.py +0 -0
  14. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/_redis.py +0 -0
  15. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/authority/__init__.py +0 -0
  16. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/authority/admin_authority.py +0 -0
  17. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/authority/authority_service.py +0 -0
  18. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/authority/client_directory.py +0 -0
  19. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/authority/org_authority.py +0 -0
  20. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/authority/org_clients.py +0 -0
  21. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/authority/surface_c.py +0 -0
  22. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/authority_service.py +0 -0
  23. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/bootstrap/__init__.py +0 -0
  24. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/bootstrap/identity_resolver.py +0 -0
  25. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/contracts.py +0 -0
  26. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/entitlements/__init__.py +0 -0
  27. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/entitlements/entitlement_dependency.py +0 -0
  28. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/guards.py +0 -0
  29. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/identity/__init__.py +0 -0
  30. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/identity/models.py +0 -0
  31. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/identity/seat_resolver.py +0 -0
  32. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/identity_resolution_log.py +0 -0
  33. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/me_orgs_resolved_context.py +0 -0
  34. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/observability.py +0 -0
  35. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/onboarding.py +0 -0
  36. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/org_membership_cache.py +0 -0
  37. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/org_membership_resolver.py +0 -0
  38. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/org_scope.py +0 -0
  39. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/py.typed +0 -0
  40. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/rbac/__init__.py +0 -0
  41. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/rbac/aegis_permission_service.py +0 -0
  42. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/rbac/permission_checker.py +0 -0
  43. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/rbac/permission_registry.py +0 -0
  44. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/request_context.py +0 -0
  45. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/runtime/__init__.py +0 -0
  46. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/runtime/boundary_logging.py +0 -0
  47. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/runtime/context.py +0 -0
  48. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/runtime/correlation_id.py +0 -0
  49. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/runtime/depends.py +0 -0
  50. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/runtime/exceptions.py +0 -0
  51. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/runtime/health.py +0 -0
  52. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/runtime/middleware.py +0 -0
  53. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/runtime/resolver.py +0 -0
  54. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/runtime/tracer.py +0 -0
  55. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/user_identity.py +0 -0
  56. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/utils/__init__.py +0 -0
  57. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/utils/portal_dsn.py +0 -0
  58. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation/utils/portal_user_sub.py +0 -0
  59. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation.egg-info/SOURCES.txt +0 -0
  60. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation.egg-info/dependency_links.txt +0 -0
  61. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation.egg-info/requires.txt +0 -0
  62. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/analygo_foundation.egg-info/top_level.txt +0 -0
  63. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/setup.cfg +0 -0
  64. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/tests/test_imports.py +0 -0
  65. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/tests/test_observability.py +0 -0
  66. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/tests/test_runtime_boundary_logging.py +0 -0
  67. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/tests/test_runtime_context.py +0 -0
  68. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/tests/test_runtime_correlation_id.py +0 -0
  69. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/tests/test_runtime_health.py +0 -0
  70. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/tests/test_runtime_middleware.py +0 -0
  71. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/tests/test_runtime_resolver.py +0 -0
  72. {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.5}/tests/test_runtime_tracer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: analygo-foundation
3
- Version: 2.1.3.dev0
3
+ Version: 2.1.5
4
4
  Summary: Foundation runtime — shared identity, org resolution, RBAC, authority services, and observability for the Analygo ecosystem
5
5
  Author-email: Analygo <engineering@analygo.com>
6
6
  License-Expression: MIT
@@ -1,14 +1,14 @@
1
- """Entitlement service — resolve org capabilities from license tiers.
1
+ """Entitlement service — resolve org capabilities live from org_plans + offerings.
2
2
 
3
3
  Provides:
4
4
  - getOrgEntitlements(org_id, product_area): resolve an org's plan_type,
5
- billing_status, and capabilities from the unified access schema.
5
+ billing_status, and capabilities.
6
6
  - Redis-backed caching (5-min TTL) with fail-open DB fallback.
7
7
 
8
- Resolution chain:
8
+ Resolution chain (single read-time JOIN, no cache drift):
9
9
  1. organization_plans (org_id) → plan_type, billing_status
10
- 2. plan_licenses (plan_type) → license_tier_id
11
- 3. license_tiers (id, product_area) → name, capabilities, monthly_price_cents
10
+ 2. offerings (plan_type, product_area) → entitlements (capabilities JSONB)
11
+ 3. license_tiers (plan_type) → tier_name, monthly_price_cents
12
12
  """
13
13
 
14
14
  from __future__ import annotations
@@ -78,11 +78,11 @@ def _resolve_entitlement_from_db(
78
78
  org_id: str,
79
79
  product_area: str,
80
80
  ) -> Optional[dict[str, Any]]:
81
- """Query Portal DB to resolve an org's entitlement.
81
+ """Resolve an org's entitlement from the live source of truth.
82
82
 
83
- Reads from product_catalog.org_offering_entitlements the canonical
84
- table that confirm_checkout writes to. No stale billing JOINs, no
85
- offering-slug-to-plan-type derivation.
83
+ Joins core_identity.organization_plans (canonical plan state) with
84
+ product_catalog.offerings (capabilities per plan) no stale cache
85
+ table, no drift possible.
86
86
  """
87
87
  import psycopg
88
88
 
@@ -7,12 +7,12 @@ and changed independently of the service logic.
7
7
  # ── psycopg (raw) queries ─────────────────────────────────────────
8
8
 
9
9
  ORG_OFFERING_ENTITLEMENTS_SQL = """
10
- SELECT plan_type, status, entitlements
11
- FROM product_catalog.org_offering_entitlements
12
- WHERE org_id = %s::uuid
13
- AND product_area = %s
14
- AND status IN ('active', 'trialing')
15
- ORDER BY updated_at DESC
10
+ SELECT op.plan_type, op.billing_status, o.entitlements
11
+ FROM core_identity.organization_plans op
12
+ JOIN product_catalog.offerings o ON o.tier = op.plan_type
13
+ WHERE op.org_id = %s::uuid
14
+ AND op.billing_status = 'active'
15
+ AND o.product_area = %s
16
16
  LIMIT 1
17
17
  """
18
18
 
@@ -22,8 +22,8 @@ TIER_METADATA_SQL = """
22
22
  SELECT
23
23
  lt.name AS tier_name,
24
24
  lt.monthly_price_cents
25
- FROM public.plan_licenses pl
26
- JOIN public.license_tiers lt ON lt.id = pl.license_tier_id
25
+ FROM billing.plan_licenses pl
26
+ JOIN billing.license_tiers lt ON lt.id = pl.license_tier_id
27
27
  WHERE pl.plan_type = :plan_type
28
28
  AND lt.product_area = :product_area
29
29
  LIMIT 1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: analygo-foundation
3
- Version: 2.1.3.dev0
3
+ Version: 2.1.5
4
4
  Summary: Foundation runtime — shared identity, org resolution, RBAC, authority services, and observability for the Analygo ecosystem
5
5
  Author-email: Analygo <engineering@analygo.com>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "analygo-foundation"
3
- version = "2.1.3.dev0"
3
+ version = "2.1.5"
4
4
  description = "Foundation runtime — shared identity, org resolution, RBAC, authority services, and observability for the Analygo ecosystem"
5
5
  requires-python = ">=3.11"
6
6
  license = "MIT"