create type sentinel_action_result as enum ('Success', 'Failed'); create type sentinel_decision as enum ('Undecided', 'Allowed', 'Blocked', 'Challenge'); create table sentinel_activities ( tenant_id varchar(21) not null references tenants (id) on update cascade on delete cascade, id varchar(21) not null, /** The target that the action was performed on. */ target_type varchar(32) /* @use SentinelActivityTargetType */ not null, /** The target hashed identifier. */ target_hash varchar(64) not null, /** The action name that was performed. */ action varchar(64) /* @use SentinelActivityAction */ not null, /** If the action was successful or not. */ action_result sentinel_action_result not null, /** Additional payload data if any. */ payload jsonb /* @use SentinelActivityPayload */ not null, /** The sentinel decision for the action. */ decision sentinel_decision not null, /** The expiry date of the decision. For instant decisions, this is the date the activity was created. */ decision_expires_at timestamptz not null default(now()), /** The time the activity was created. */ created_at timestamptz not null default(now()), primary key (id) ); create index sentinel_activities__id on sentinel_activities (tenant_id, id); create index sentinel_activities__target_type_target_hash_action_action_result_decision on sentinel_activities (tenant_id, target_type, target_hash, action, action_result, decision);