package polymarket

  1. Overview
  2. Docs
OCaml client library for the Polymarket prediction market API

Install

dune-project
 Dependency

Authors

Maintainers

Sources

0.2.0.tar.gz
md5=4eb4c5d2f63ff081c9713d90be5a51b2
sha512=0e3de0c9b40683e09ab8f9f966a44784ef1b9b482c3eefef84104a7e8042c92f1d79893ee9588b24fa3d0decaed7f365509f4d1c23c66ce8328efb64e721f276

doc/src/polymarket.rate_limiter/matcher.ml.html

Source file matcher.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
(** Route matching for rate limiting. *)

let path_matches_prefix ~path ~prefix =
  if String.length prefix = 0 || prefix = "/" then true
  else
    (* Normalize: remove trailing slash from prefix for comparison *)
    let normalized_prefix =
      if String.ends_with ~suffix:"/" prefix then
        String.sub prefix 0 (String.length prefix - 1)
      else prefix
    in
    let prefix_len = String.length normalized_prefix in
    let path_len = String.length path in
    if String.starts_with ~prefix:normalized_prefix path then
      (* Exact match or followed by '/' or end of path *)
      prefix_len = path_len || (prefix_len < path_len && path.[prefix_len] = '/')
    else false

let matches_pattern ~method_ ~uri (pattern : Types.route_pattern) =
  let host_matches =
    match pattern.host with None -> true | Some h -> Uri.host uri = Some h
  in
  let method_matches =
    match pattern.method_ with
    | None -> true
    | Some m -> String.uppercase_ascii m = String.uppercase_ascii method_
  in
  let path_matches =
    match pattern.path_prefix with
    | None -> true
    | Some prefix ->
        let path = Uri.path uri in
        path_matches_prefix ~path ~prefix
  in
  host_matches && method_matches && path_matches

let find_matching_routes ~method_ ~uri routes =
  List.filter
    (fun (rc : Types.route_config) -> matches_pattern ~method_ ~uri rc.pattern)
    routes

let make_route_key ~method_ ~uri (pattern : Types.route_pattern) =
  let host = Option.value ~default:"*" (Uri.host uri) in
  let path = Option.value ~default:"/" pattern.path_prefix in
  (* Use pattern.method_ if specified, otherwise use actual request method *)
  let method_str = Option.value ~default:method_ pattern.method_ in
  Printf.sprintf "%s:%s:%s" host method_str path