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.common/auth.ml.html

Source file auth.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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
(** Authentication types and header builders for Polymarket APIs.

    This module provides credentials types and functions for building
    authentication headers for L1 (wallet-based) and L2 (API key-based)
    authentication. *)

open Ppx_yojson_conv_lib.Yojson_conv.Primitives

(** {1 Types} *)

type credentials = { api_key : string; secret : string; passphrase : string }
[@@deriving show, eq]

type api_key_response = {
  api_key : string; [@key "apiKey"]
  secret : string;
  passphrase : string;
}
[@@deriving yojson, show, eq]
(** Response from API key endpoints (create or derive). *)

(** {1 Conversion} *)

let credentials_of_api_key_response (resp : api_key_response) : credentials =
  { api_key = resp.api_key; secret = resp.secret; passphrase = resp.passphrase }

(** {1 Header Names} *)

let poly_address = "POLY_ADDRESS"
let poly_signature = "POLY_SIGNATURE"
let poly_timestamp = "POLY_TIMESTAMP"
let poly_nonce = "POLY_NONCE"
let poly_api_key = "POLY_API_KEY"
let poly_passphrase = "POLY_PASSPHRASE"

(** {1 L1 Authentication} *)

let build_l1_headers ~private_key ~address ~nonce =
  let timestamp = Crypto.current_timestamp_ms () in
  let signature =
    Crypto.sign_clob_auth_message ~private_key ~address ~timestamp ~nonce
  in
  [
    (poly_address, address);
    (poly_signature, signature);
    (poly_timestamp, timestamp);
    (poly_nonce, string_of_int nonce);
  ]

(** {1 L2 Authentication} *)

let build_l2_headers ~(credentials : credentials) ~address ~method_ ~path ~body
    =
  let timestamp = Crypto.current_timestamp_ms () in
  let signature =
    Crypto.sign_l2_request ~secret:credentials.secret ~timestamp ~method_ ~path
      ~body
  in
  [
    (poly_address, address);
    (poly_signature, signature);
    (poly_timestamp, timestamp);
    (poly_api_key, credentials.api_key);
    (poly_passphrase, credentials.passphrase);
  ]