Skip to main content

GRPE

ZAYAZ Global Routing Policy Engine

1. Purpose​

The ZAYAZ Global Routing Policy Engine (GRPE) is the authoritative decision engine that determines where a tenant request must be routed at runtime.

GRPE exists to translate:

  • tenant routing policy,
  • platform residency policy,
  • regional health state,
  • disaster recovery state,
  • and maintenance overrides

into a deterministic routing decision.

GRPE is a policy engine, not a transport layer.

It does not:

  • terminate TLS,
  • resolve DNS,
  • authenticate users,
  • or execute ESG business logic.

Instead, it produces a routing decision that is then used by:

  • Cloudflare Workers,
  • regional API ingress,
  • control-plane services,
  • and internal routers.

2. Design Principles​

GRPE MUST follow these principles:

  1. Tenant-centric routing
    All routing is based on tenant policy, never on end-user geolocation.

  2. Data residency first
    Routing must not violate the tenant’s legal data residency configuration.

  3. Region determinism
    A tenant has one active region at any point in time.

  4. Policy over infrastructure
    GRPE decides what should happen; infrastructure executes it.

  5. Controlled resilience
    Failover behavior is explicit and governed by dr_mode, not by silent heuristics.

  6. Auditability
    Every routing decision must be reproducible and explainable.


3. What GRPE Must Decide​

GRPE must decide:

  • whether the tenant remains in primary_region
  • whether the tenant may use secondary_region
  • whether dr_region_sr or dr_region_rr may be activated
  • whether routing must be blocked because no compliant region is available
  • whether platform maintenance overrides all normal routing
  • what the effective active_region is
  • what the final resolved_origin is

GRPE must never decide based on:

  • request IP geolocation
  • browser locale
  • nearest AWS region
  • CDN edge location

4. Architectural Position​

4.1. Control Plane vs Data Plane​

  • Control Plane
    Global components that determine routing:

    • tenant registry
    • auth
    • Cloudflare Worker
    • GRPE
    • residency region policy
    • platform routing state
  • Data Plane
    Regional components that execute tenant workloads:

    • api.<region>.zayaz.io
    • regional storage
    • regional compute
    • regional queues
    • regional KMS and S3

GRPE sits between the two.


4.2. Runtime Flow​


5. Authoritative Inputs​

GRPE consumes three categories of authoritative inputs.

5.1. Tenant Routing Policy​

Tenant-specific, contract-bound input.

Example runtime shape:

example-runtime-shape.tsGitHub ↗
type TenantStatus = "active" | "inactive" | "suspended" | "maintenance";
type OriginTarget = "app_prod" | "app_maintenance" | "sandbox_default";

type Region =
| "af-south-1"
| "ap-northeast-1"
| "ap-northeast-2"
| "ap-northeast-3"
| "ap-south-1"
| "ap-southeast-1"
| "ap-southeast-2"
| "eu-central-1"
| "eu-north-1"
| "eu-west-1"
| "eu-west-2"
| "eu-west-3"
| "me-central-1"
| "sa-east-1"
| "us-east-1"
| "us-east-2"
| "us-west-1"
| "us-west-2";

type ResidencyZone = "af" | "as" | "oc" | "eu" | "me" | "sa" | "na";

interface TenantRoutingPolicy {
client_id: string;
legal_country: string;
primary_region: Region;
data_residency_zone: ResidencyZone;
dr_mode: "sr" | "rr";
dr_activation: "never" | "emergency_only" | "preapproved";
dr_legal_basis?: string;
status: TenantStatus;
origin_target: OriginTarget;
auth_profile_id: string;
css_sssr_ref: string;
logo_sssr_ref: string;
}

Example onboarding-derived payload:

example-onboarding-derived-payload.jsonGitHub ↗
{
"user_id": "ECO-276-...",
"legal_country": "DE",
"primary_region": "eu-north-1",
"data_residency_zone": "eu",
"dr_mode": "sr",
"dr_activation": "emergency_only",
"dr_legal_basis": "contractual_consent"
}

5.2. Residency Region Policy​

The file residency_region_policy.json is the authoritative platform-governed map of:

  • primary region
  • zone
  • secondary region
  • strict-residency DR region
  • resilient-residency DR region
  • whether RR is allowed

This policy is authoritative input to GRPE.

Runtime shape:

rrp-runtime-shape.tsGitHub ↗
/**
* Supported regions
*/
type Region =
| "eu-north-1"
| "eu-central-1"
| "us-east-1";

/**
* Residency zones
*/
type ResidencyZone =
| "EU"
| "US"
| "GLOBAL";

/**
* Encryption policy
*/
type EncryptionPolicy = "sse_kms_required";

/**
* Residency Region Policy Entry
*/
export interface ResidencyRegionPolicyEntry {
zone: ResidencyZone;
primary_region: Region;
secondary_region: Region;
dr_region_sr: Region;
dr_region_rr: Region | null;
rr_allowed: boolean;
dr_encryption: EncryptionPolicy;
notes?: string;
}

/**
* Example usage
*/
const examplePolicy: ResidencyRegionPolicyEntry = {
zone: "EU",
primary_region: "eu-north-1",
secondary_region: "eu-central-1",
dr_region_sr: "eu-central-1",
dr_region_rr: null,
rr_allowed: false,
dr_encryption: "sse_kms_required",
notes: "EU data must remain within EU regions"
};

console.log(examplePolicy);

This policy is immutable at runtime and only changes through controlled release/versioning.


5.3. Platform Routing State​

Operational runtime state used by GRPE.

operational-runtime-state.tsGitHub ↗
/**
* Supported regions
*/
type Region =
| "eu-north-1"
| "eu-central-1"
| "us-east-1";

/**
* Region health states
*/
type RegionHealth = "healthy" | "degraded" | "down";

/**
* Platform Routing State
*/
export interface PlatformRoutingState {
force_maintenance: boolean;

/**
* Health status per region (optional per region)
*/
region_health: Partial<Record<Region, RegionHealth>>;

/**
* Regions currently declared under disaster recovery
*/
dr_declared_regions: Region[];

/**
* Regions blocked due to compliance / outage / policy
*/
blocked_regions?: Region[];

/**
* Version identifier for policy tracking / audit
*/
policy_version?: string;
}

/**
* Example usage
*/
const exampleState: PlatformRoutingState = {
force_maintenance: false,
region_health: {
"eu-north-1": "healthy",
"eu-central-1": "degraded",
"us-east-1": "down"
},
dr_declared_regions: ["eu-central-1"],
blocked_regions: ["us-east-1"],
policy_version: "v2026.03.21"
};

console.log(exampleState);

This state is not contractual. It is operational and may change during incidents.


6. Derived Routing Concepts​

GRPE computes or consumes the following concepts.

6.1. secondary_region​

Derived from residency_region_policy[primary_region].secondary_region.


6.2. dr_effective_region​

Derived as:

if tenant.dr_mode == "sr":
dr_effective_region = dr_region_sr
else if tenant.dr_mode == "rr":
dr_effective_region = dr_region_rr

6.3. active_region​

The region that will actually serve the request now.

Usually:

active_region = primary_region

But may become:

  • secondary_region
  • dr_region_sr
  • dr_region_rr

depending on policy and state.


7. Outputs​

GRPE must return a deterministic decision object.

output.tsGitHub ↗
/**
* Supported regions
*/
type Region =
| "eu-north-1"
| "eu-central-1"
| "us-east-1";

/**
* Routing mode
*/
type RoutingMode =
| "primary"
| "secondary"
| "dr"
| "maintenance"
| "blocked";

/**
* Compliance decision
*/
type ComplianceDecision = "allowed" | "denied";

/**
* Routing decision
*/
export interface RoutingDecision {
client_id: string;
routing_mode: RoutingMode;
active_region?: Region;
resolved_origin: string;
compliance_decision: ComplianceDecision;
failover_reason?: string;
policy_version?: string;
}

/**
* Example usage
*/
const exampleDecision: RoutingDecision = {
client_id: "client-eco-001",
routing_mode: "primary",
active_region: "eu-north-1",
resolved_origin: "https://eu-north-1.app.zayaz.io",
compliance_decision: "allowed",
policy_version: "v2026.03.21"
};

console.log(exampleDecision);

7.1. Output semantics​

  • routing_mode Explains what class of routing was selected.

  • active_region The effective region chosen for the request, if applicable.

  • resolved_origin The final host/URL the request should be routed to.

  • compliance_decision Whether the selected outcome is compliant with tenant residency/DR policy.

  • failover_reason Human-readable explanation when not on primary.


8. Region Policy Source​

The following policy map is authoritative for primary, secondary, SR DR, and RR DR behavior.

8.1. Policy Notes​

The policy includes, per primary region:

  • zone
  • primary_region
  • secondary_region
  • dr_region_sr
  • dr_region_rr
  • rr_allowed
  • encryption rule
  • explanatory notes

Examples from the policy:

  • eu-north-1 → secondary eu-west-1, SR DR eu-west-3, RR not allowed
  • af-south-1 → same-region SR only, RR DR eu-west-1
  • sa-east-1 → same-region SR only, RR DR us-east-1

8.2. Full JSON Source​

GRPE uses the authoritative residency_region_policy.json defined in the AWS Usage & Tenant Routing Architecture specification.


9. Decision Rules​

GRPE must apply rules in a fixed order.

9.1. Rule Order​

  1. Global maintenance override
  2. Tenant status validation
  3. Origin target short-circuiting
  4. Primary region evaluation
  5. Secondary region evaluation
  6. DR evaluation
  7. Compliance validation
  8. Final origin resolution
  9. Block if no compliant target exists

9.2. Maintenance Override​

If platform maintenance is forced:

  • all tenant requests route to maintenance origin
  • unless explicitly exempted by future policy extensions

Example outcome:

example-outcome.jsonGitHub ↗
{
"client_id": "eco-173-123-456-789",
"routing_mode": "maintenance",
"resolved_origin": "https://maintenance.zayaz.io",
"compliance_decision": "allowed"
}

9.3. Tenant Status Rules​

If tenant is:

  • inactive
  • suspended

GRPE must not route to regional application origin.

If tenant is:

  • maintenance

GRPE routes to maintenance origin.


9.4. Origin Target Rules​

If origin_target is:

  • sandbox_default → route to sandbox origin
  • app_maintenance → route to maintenance origin
  • app_prod → continue normal regional routing

9.5. Primary Region Rule​

If primary_region is healthy and not blocked:

  • active_region = primary_region
  • routing_mode = primary

9.6. Secondary Region Rule​

If primary_region is not healthy enough for routing, GRPE may evaluate secondary_region.

This is a platform resilience optimization layer, not a legal DR event.

Use of secondary_region is allowed only if:

  • it is defined in policy
  • it is in the same permitted zone/policy envelope
  • the platform state allows non-DR failover
  • future policy settings do not disable it

If not used, GRPE proceeds to DR evaluation.


9.7. Strict Residency DR Rule (dr_mode = "sr")​

If tenant is in SR mode:

  • GRPE may only activate dr_region_sr
  • dr_region_rr must never be used
  • no cross-zone DR is allowed

9.8. Resilient Residency DR Rule (dr_mode = "rr")​

If tenant is in RR mode:

  • rr_allowed must be true in policy
  • GRPE may activate dr_region_rr
  • activation must respect dr_activation
  • dr_legal_basis must exist when required

9.9. DR Activation Rules​

If dr_activation = "never":

  • no DR routing allowed

If dr_activation = "emergency_only":

  • DR routing only if platform state indicates declared disaster conditions

If dr_activation = "preapproved":

  • DR routing may proceed under pre-approved platform failover conditions

9.10. Compliance Validation​

GRPE must validate that the resulting region is lawful for the tenant.

Validation includes:

  • residency zone compatibility
  • DR mode compatibility
  • RR allow-list compatibility
  • legal basis where required

If validation fails:

  • compliance_decision = denied
  • routing must be blocked or diverted to maintenance

10. Origin Resolution​

GRPE chooses region and mode. A separate origin resolver translates the result to a concrete host.

10.1. Regional API Host Convention​

regional-api-host-convention.tsGitHub ↗
/**
* Supported regions
*/
type Region =
| "eu-north-1"
| "eu-central-1"
| "us-east-1";

/**
* Resolve regional API host
*/
export function regionalApiHost(region: Region): string {
return `https://api.${region}.zayaz.io`;
}

/**
* Example usage
*/
const apiUrl = regionalApiHost("eu-north-1");
console.log(apiUrl);

Examples:

  • eu-north-1 → https://api.eu-north-1.zayaz.io
  • us-east-1 → https://api.us-east-1.zayaz.io

10.2. Static Origins​

static-origins.tsGitHub ↗
const STATIC_ORIGINS = {
app_maintenance: "https://maintenance.zayaz.io",
sandbox_default: "https://sandbox.zayaz.dev"
} as const;

11. Reference Implementation (TypeScript)​

reference-implementation.tsGitHub ↗
type TenantStatus = "active" | "inactive" | "suspended" | "maintenance";
type OriginTarget = "app_prod" | "app_maintenance" | "sandbox_default";
type RegionHealth = "healthy" | "degraded" | "down";

type Region =
| "af-south-1"
| "ap-northeast-1"
| "ap-northeast-2"
| "ap-northeast-3"
| "ap-south-1"
| "ap-southeast-1"
| "ap-southeast-2"
| "eu-central-1"
| "eu-north-1"
| "eu-west-1"
| "eu-west-2"
| "eu-west-3"
| "me-central-1"
| "sa-east-1"
| "us-east-1"
| "us-east-2"
| "us-west-1"
| "us-west-2";

type ResidencyZone = "af" | "as" | "oc" | "eu" | "me" | "sa" | "na";

interface TenantRoutingPolicy {
client_id: string;
legal_country: string;
primary_region: Region;
data_residency_zone: ResidencyZone;
dr_mode: "sr" | "rr";
dr_activation: "never" | "emergency_only" | "preapproved";
dr_legal_basis?: string;
status: TenantStatus;
origin_target: OriginTarget;
auth_profile_id: string;
css_sssr_ref: string;
logo_sssr_ref: string;
}

interface ResidencyRegionPolicyEntry {
zone: ResidencyZone;
primary_region: Region;
secondary_region: Region;
dr_region_sr: Region;
dr_region_rr: Region | null;
rr_allowed: boolean;
dr_encryption: "sse_kms_required";
notes?: string;
}

interface PlatformRoutingState {
force_maintenance: boolean;
region_health: Partial<Record<Region, RegionHealth>>;
dr_declared_regions: Region[];
blocked_regions?: Region[];
policy_version?: string;
allow_secondary_failover?: boolean;
}

interface RoutingDecision {
client_id: string;
routing_mode: "primary" | "secondary" | "dr" | "maintenance" | "blocked";
active_region?: Region;
resolved_origin: string;
compliance_decision: "allowed" | "denied";
failover_reason?: string;
policy_version?: string;
}

function regionalApiHost(region: Region): string {
return `https://api.${region}.zayaz.io`;
}

const STATIC_ORIGINS = {
app_maintenance: "https://maintenance.zayaz.io",
sandbox_default: "https://sandbox.zayaz.dev"
} as const;

function isRegionBlocked(region: Region, state: PlatformRoutingState): boolean {
return (state.blocked_regions ?? []).includes(region);
}

function isRegionUsable(region: Region, state: PlatformRoutingState): boolean {
const health = state.region_health[region] ?? "healthy";
return health === "healthy" || health === "degraded";
}

function isDeclaredDrRegion(region: Region, state: PlatformRoutingState): boolean {
return state.dr_declared_regions.includes(region);
}

function resolveRoutingDecision(
tenant: TenantRoutingPolicy,
regionPolicy: ResidencyRegionPolicyEntry,
state: PlatformRoutingState
): RoutingDecision {
if (state.force_maintenance || tenant.status === "maintenance") {
return {
client_id: tenant.client_id,
routing_mode: "maintenance",
resolved_origin: STATIC_ORIGINS.app_maintenance,
compliance_decision: "allowed",
policy_version: state.policy_version
};
}

if (tenant.status === "inactive" || tenant.status === "suspended") {
return {
client_id: tenant.client_id,
routing_mode: "blocked",
resolved_origin: STATIC_ORIGINS.app_maintenance,
compliance_decision: "denied",
failover_reason: `tenant_status_${tenant.status}`,
policy_version: state.policy_version
};
}

if (tenant.origin_target === "sandbox_default") {
return {
client_id: tenant.client_id,
routing_mode: "primary",
resolved_origin: STATIC_ORIGINS.sandbox_default,
compliance_decision: "allowed",
policy_version: state.policy_version
};
}

if (tenant.origin_target === "app_maintenance") {
return {
client_id: tenant.client_id,
routing_mode: "maintenance",
resolved_origin: STATIC_ORIGINS.app_maintenance,
compliance_decision: "allowed",
policy_version: state.policy_version
};
}

if (
!isRegionBlocked(tenant.primary_region, state) &&
isRegionUsable(tenant.primary_region, state)
) {
return {
client_id: tenant.client_id,
routing_mode: "primary",
active_region: tenant.primary_region,
resolved_origin: regionalApiHost(tenant.primary_region),
compliance_decision: "allowed",
policy_version: state.policy_version
};
}

if (
state.allow_secondary_failover &&
regionPolicy.secondary_region &&
!isRegionBlocked(regionPolicy.secondary_region, state) &&
isRegionUsable(regionPolicy.secondary_region, state) &&
regionPolicy.zone === tenant.data_residency_zone
) {
return {
client_id: tenant.client_id,
routing_mode: "secondary",
active_region: regionPolicy.secondary_region,
resolved_origin: regionalApiHost(regionPolicy.secondary_region),
compliance_decision: "allowed",
failover_reason: "primary_region_unavailable_secondary_used",
policy_version: state.policy_version
};
}

if (tenant.dr_mode === "sr") {
const dr = regionPolicy.dr_region_sr;
if (
dr &&
!isRegionBlocked(dr, state) &&
isRegionUsable(dr, state) &&
regionPolicy.zone === tenant.data_residency_zone &&
(tenant.dr_activation === "preapproved" ||
(tenant.dr_activation === "emergency_only" && isDeclaredDrRegion(dr, state)))
) {
return {
client_id: tenant.client_id,
routing_mode: "dr",
active_region: dr,
resolved_origin: regionalApiHost(dr),
compliance_decision: "allowed",
failover_reason: "strict_residency_dr",
policy_version: state.policy_version
};
}
}

if (tenant.dr_mode === "rr" && regionPolicy.rr_allowed && regionPolicy.dr_region_rr) {
const dr = regionPolicy.dr_region_rr;
if (
!isRegionBlocked(dr, state) &&
isRegionUsable(dr, state) &&
tenant.dr_legal_basis &&
(tenant.dr_activation === "preapproved" ||
(tenant.dr_activation === "emergency_only" && isDeclaredDrRegion(dr, state)))
) {
return {
client_id: tenant.client_id,
routing_mode: "dr",
active_region: dr,
resolved_origin: regionalApiHost(dr),
compliance_decision: "allowed",
failover_reason: "resilient_residency_dr",
policy_version: state.policy_version
};
}
}

return {
client_id: tenant.client_id,
routing_mode: "blocked",
resolved_origin: STATIC_ORIGINS.app_maintenance,
compliance_decision: "denied",
failover_reason: "no_compliant_region_available",
policy_version: state.policy_version
};
}

12. Decision Table (Simplified)​

Tenant statePrimary healthySecondary allowedDR allowedOutcome
activeyesn/an/aprimary
activenoyesn/asecondary
active + SRnonoyesdr_region_sr
active + RRnonoyesdr_region_rr
inactiven/an/an/ablocked
suspendedn/an/an/ablocked
maintenancen/an/an/amaintenance

13. Cloudflare Worker Integration​

GRPE should not be embedded as ad hoc logic inside worker.ts.

Preferred module split:

  • tenant-policy.ts
  • residency-policy.ts
  • platform-routing-state.ts
  • grpe.ts
  • origin-resolver.ts
  • worker.ts

13.1. Worker Flow​


14. KV Snapshot Requirements​

The Worker-side KV snapshot should include enough policy to avoid a live control-plane lookup on every request.

Recommended payload:

kv-snapshot.jsonGitHub ↗
{
"client_id": "eco-173-123-456-789",
"tenant_slug": "acme",
"hostname": "acme.zayaz.cloud",
"status": "active",
"origin_target": "app_prod",
"primary_region": "eu-north-1",
"data_residency_zone": "eu",
"dr_mode": "sr",
"dr_activation": "emergency_only",
"dr_legal_basis": "contractual_consent",
"css_sssr_ref": "sssr:asset.client-profiles.css.css @ eco-173-123-456-789",
"logo_sssr_ref": "sssr:asset.client-profiles.main-logo.gif @ eco-173-123-456-789",
"auth_profile_id": "auth_acme_v1"
}

15. Observability & Audit​

Every GRPE decision must be loggable.

Minimum audit payload:

minimum-audit-payload.jsonGitHub ↗
{
"client_id": "eco-173-123-456-789",
"primary_region": "eu-north-1",
"routing_mode": "primary",
"active_region": "eu-north-1",
"resolved_origin": "https://api.eu-north-1.zayaz.io",
"compliance_decision": "allowed",
"failover_reason": null,
"policy_version": "2026-03-21",
"timestamp": "2026-03-21T12:00:00Z"
}

Events should be emitted for:

  • primary routing success
  • secondary routing success
  • DR activation
  • compliance denial
  • blocked routing
  • maintenance override

These events should feed:

  • ALTD
  • telemetry/ops dashboards
  • post-incident analysis
  • compliance review

16. Non-Negotiable Invariants​

  • Routing is policy-driven, never geolocation-driven
  • Tenant policy is authoritative
  • primary_region is sticky until migration
  • GRPE never chooses an unlawful region
  • dr_region_rr must never be used unless RR is both allowed and legally activated
  • Maintenance override must remain explicit
  • Every decision must be reproducible from inputs

17. Future Extensions​

GRPE may later support:

  • compliance profiles
  • sovereign cloud rules
  • tenant tier-based routing classes
  • maintenance exemptions
  • latency-aware ranking within legally allowed candidates
  • formal decision traces / signed routing attestations

Any extension must preserve:

  • determinism
  • auditability
  • policy-first routing

18. Summary​

ZAYAZ GRPE is the formal runtime decision engine for tenant routing.

It converts:

  • tenant policy,
  • residency region policy,
  • and platform routing state

into:

  • compliant region selection,
  • deterministic origin resolution,
  • and auditable runtime behavior.

It is the layer that ensures ZAYAZ can always answer:

  • Where is tenant X being routed right now?
  • Why was that region selected?
  • Was the choice policy-compliant?
  • Under what DR or maintenance state did that happen?

That makes GRPE a core infrastructure and compliance component of the ZAYAZ platform.




GitHub RepoRequest for Change (RFC)