// Bostr config

module.exports = {
  // Server listener [Required]
  address: "0.0.0.0",
  port: "8080",

  // Standalone HTTPS server. Normally bostr is accepting unsecured connections.
  // Specifying the absolute path of the private key/certificate will make bostr to only accept secured connections.
  //
  // Tip: You do not need this if you are running bostr behind reverse proxy.
  https: {
    privKey: "",
    certificate: "",
    ticketKey: ""
  },

  // Clusters.
  // 0 will make bostr run clusters with available parallelism / CPU cores.
  clusters: 0,

  // Log about bouncer connection with relays?
  log_about_relays: false,

  // Use deflate compression for websocket.
  perMessageDeflate: true,

  // Time before reconnect to relays in milliseconds.
  reconnect_time: 5000,

  // Ratelimit expiration after ratelimit from upstream relay in miliseconds.
  // Setting as 0 will disable ratelimit handling.
  upstream_ratelimit_expiration: 10000,

  // Maximum subscriptions that client could open.
  // Setting as -1 will disable max subscription limit.
  max_client_subs: -1,

  // Maximum amount of orphan sessions.
  // Setting to 0 disables orphan session function.
  max_orphan_sess: 7,

  // Wait for every connected relays send EOSE.
  // Could improve accuracy on received events.
  //
  // Depending on your configured relays,
  // It may could cause loading problems in client due to slow EOSE from bouncer.
  // You could try fix this by changing <eose_timeout> or <max_eose_score> value.
  wait_eose: true,

  // Pause an subscription from receiving further events after reached to <filter.limit>
  // Could save client's bandwidth, but may miss some events.
  //
  // Depending on <wait_eose> settings, It could either miss some events.
  pause_on_limit: false,

  // EOSE timeout in milliseconds
  eose_timeout: 2300,

  // Maximum of received EOSE from relays to send EOSE to client.
  // Normally, waiting EOSE from 3 relays should be enough. Leaving it with 0 equals wait for every established relays.
  // NOTE: Please adjust this max score correctly with your configured relays.
  //       If you only setted up 3 relays, Set the <max_eose_score> as 0.
  // Tip : The bigger = The more accurate EOSE, The less = EOSE sent way earlier.
  max_eose_score: 0,

  // Client event broadcast ratelimit in miliseconds.
  // Client only able to broadcast new event to this bouncer after <broadcast_ratelimit>.
  // Leaving it as 0 will disable this function.
  broadcast_ratelimit: 0,

  // Incomming websocket connection ratelimit in miliseconds.
  // Leaving it as 0 will disable this function.
  incomming_ratelimit: 0,

  // A whitelist of users public keys who could use this bouncer.
  // Leaving this empty will allow everyone to use this bouncer.
  // NOTE: - Require NIP-42 compatible nostr client.
  //         You may use <allowed_event_authors> instead if your client does not support NIP-42.
  authorized_keys: [
    // "pubkey-in-hex",
    // "npub ....",
    // ....
  ],

  // A whitelist of approved event publishers.
  // Leaving this empty will allow everyone to publish events with this bouncer.
  approved_publishers: [
    // "pubkey-in-hex",
    // "npub ....",
    // ....
  ],

  // Used for accessing NIP-42 protected events from certain relays.
  // It could be your key. Leaving this empty completely disables NIP-42 function.
  //
  // You could use this function even as a public bouncer.
  // There are no security risk as it utilize NIP-42 to recognize client public key.
  //
  // NOTE: - Require NIP-42 compatible nostr client
  private_keys: {
    // "pubkey-in-hex": "privatekey",
    // "pubkey-in-hex": "nsec ...."
  },
  // Tip: If you want to convert your pubkey/privatekey to hex,
  //      You could run the following command:
  //        $ node hexconverter.js npub....
  //        $ node hexconverter.js nsec....

  // Server information.
  // Only for when nostr client requesting server information.
  server_meta: {
    "contact": "unset",
    "pubkey": "0000000000000000000000000000000000000000000000000000000000000000",
    "description": "Nostr relay bouncer",
    "name": "Bostr",
    "software": "git+https://github.com/Yonle/bostr",

    // Some nostr client may read the following for compatibility check.
    // You may change the supported_nips to match with what your relays supported.
    "supported_nips": [1,2,9,11,12,15,16,20,22,33,40,42,50],
    "version": require("./package.json").version
  },

  // Path to favicon file.
  favicon: "",

  // Cache relays
  // Used for caching received events from <relays> to reduce bandwidth waste.
  // Keeping this empty will disable caching function.
  //
  // To make this working properly, Please enable <pause_on_limit>.
  cache_relays: [
    // "ws://localhost:8001",
    // "ws://localhost:8002",
    // ...and so on
  ],

  // Nostr relays to bounce [Required]
  relays: [
    "wss://example1.com",
    "wss://example2.com",
    // "wss://example3.com",
    // ...and so on
  ]
}