Railsr.Resources.Firewall (Railsr v1.0.0)

Copy Markdown View Source

Railsr Compliance Firewall API.

The Firewall is a real-time rule engine that evaluates every transaction before it executes. Rules are written in a Lisp-like DSL. Matched transactions are either blocked or placed in quarantine for manual review.

Rule Syntax

Rules use a Lisp-style s-expression DSL over context data objects (enduser, beneficiary, transaction, ledger).

; Block transactions over £10,000 to non-UK beneficiaries
(and
  (> (transaction.amount) 1000000)
  (not (= (beneficiary.country) "GB")))

Available Actions

  • "block" — reject the transaction immediately
  • "quarantine" — hold for manual review
  • "pass" — explicitly allow (overrides lower-priority rules)

Datasets

Upload CSV lookup tables and reference them in rules via (in-dataset "dataset_name" (beneficiary.bic)).

Summary

Functions

Upload a new firewall dataset (CSV format).

Delete a dataset by name.

Get reference documentation for built-in firewall functions.

Retrieve the current firewall rule-set.

List all firewall datasets.

Create or replace the firewall rule-set for the customer.

Replace an existing dataset by name.

Functions

create_dataset(params, opts \\ [])

@spec create_dataset(
  map(),
  keyword()
) :: {:ok, Railsr.Types.FirewallDataset.t()} | {:error, Railsr.Error.t()}

Upload a new firewall dataset (CSV format).

Params

  • :name — dataset identifier (used in rules via in-dataset)
  • :columns — list of column names
  • :rows — list of row value lists
Railsr.Resources.Firewall.create_dataset(%{
  name: "blocked_bics",
  columns: ["bic"],
  rows: [["CHASUS33"], ["DEUTDEDB"]]
})

delete_dataset(name, opts \\ [])

@spec delete_dataset(
  String.t(),
  keyword()
) :: :ok | {:error, Railsr.Error.t()}

Delete a dataset by name.

get_functions(opts \\ [])

@spec get_functions(keyword()) :: {:ok, map()} | {:error, Railsr.Error.t()}

Get reference documentation for built-in firewall functions.

get_rules(opts \\ [])

@spec get_rules(keyword()) ::
  {:ok, Railsr.Types.FirewallRules.t()} | {:error, Railsr.Error.t()}

Retrieve the current firewall rule-set.

list_datasets(opts \\ [])

@spec list_datasets(keyword()) ::
  {:ok, [Railsr.Types.FirewallDataset.t()]} | {:error, Railsr.Error.t()}

List all firewall datasets.

set_rules(params, opts \\ [])

@spec set_rules(
  map(),
  keyword()
) :: {:ok, Railsr.Types.FirewallRules.t()} | {:error, Railsr.Error.t()}

Create or replace the firewall rule-set for the customer.

Rules are evaluated in order; first match wins.

Params

  • :rules — list of rule maps, each with:
    • :name — human-readable rule name
    • :rule — DSL string
    • :action"block" | "quarantine" | "pass"

    • :priority — integer (lower = higher priority)
Railsr.Resources.Firewall.set_rules(%{
  rules: [
    %{
      name: "Block high-value international",
      rule: ~s[(and (> (transaction.amount) 1000000)
                    (not (= (beneficiary.country) "GB"))))],
      action: "quarantine",
      priority: 10
    }
  ]
})

update_dataset(name, params, opts \\ [])

@spec update_dataset(String.t(), map(), keyword()) ::
  {:ok, Railsr.Types.FirewallDataset.t()} | {:error, Railsr.Error.t()}

Replace an existing dataset by name.