# Configuration specific to AS registration. Unless other marked, all fields
# are *REQUIRED*.
homeserver:
  # The URL to the home server for client-server API calls, also used to form the
  # media URLs as displayed in bridged IRC channels:
  url: "http://localhost:8008"
  #
  # The URL of the homeserver hosting media files. This is only used to transform
  # mxc URIs to http URIs when bridging m.room.[file|image] events. Optional. By
  # default, this is the homeserver URL, specified above.
  #
  # media_url: "http://media.repo:8008"

  # Drop Matrix messages which are older than this number of seconds, according to
  # the event's origin_server_ts.
  # If the bridge is down for a while, the homeserver will attempt to send all missed
  # events on reconnection. These events may be hours old, which can be confusing to
  # IRC users if they are then bridged. This option allows these old messages to be
  # dropped.
  # CAUTION: This is a very coarse heuristic. Federated homeservers may have different
  # clock times and hence produce different origin_server_ts values, which may be old
  # enough to cause *all* events from the homeserver to be dropped.
  # Default: 0 (don't ever drop)
  dropMatrixMessagesAfterSecs: 300 # 5 minutes

  # The 'domain' part for user IDs on this home server. Usually (but not always)
  # is the "domain name" part of the HS URL.
  domain: "localhost"

  # Should presence be enabled for matrix clients on this bridge. If disabled on the
  # homeserver then it should also be disabled here to avoid excess traffic.
  # Default: true
  enablePresence: true

# Configuration specific to the IRC service
ircService:
  servers:
    # The address of the server to connect to.
    irc.freenode.net:
      # A human-readable short name. This is used to label IRC status rooms
      # where matrix users control their connections.
      # E.g. 'ExampleNet IRC Bridge status'.
      # It is also used in the Third Party Lookup API as the instance `desc`
      # property, where each server is an instance.
      name: "Freenode"

      # An ID for uniquely identifying this server amongst other servers being bridged.
      networkId: "freenode"

      # URL to an icon used as the network icon whenever this network appear in
      # a network list. (Like in the riot room directory, for instance.)
      # icon: https://example.com/images/hash.png

      # The port to connect to. Optional.
      port: 6697
      # Whether to use SSL or not. Default: false.
      ssl: true
      # Whether or not IRC server is using a self-signed cert or not providing CA Chain
      sslselfsign: false
      # Should the connection attempt to identify via SASL (if a server or user password is given)
      # If false, this will use PASS instead. If SASL fails, we do not fallback to PASS.
      sasl: false
      # Whether to allow expired certs when connecting to the IRC server.
      # Usually this should be off. Default: false.
      allowExpiredCerts: false
      # A specific CA to trust instead of the default CAs. Optional.
      #ca: |
      #  -----BEGIN CERTIFICATE-----
      #  ...
      #  -----END CERTIFICATE-----

      #
      # The connection password to send for all clients as a PASS (or SASL, if enabled above) command. Optional.
      # password: 'pa$$w0rd'
      #
      # Whether or not to send connection/error notices to real Matrix users. Default: true.
      sendConnectionMessages: true

      quitDebounce:
        # Whether parts due to net-splits are debounced for delayMs, to allow
        # time for the netsplit to resolve itself. A netsplit is detected as being
        # a QUIT rate higher than quitsPerSecond. Default: false.
        enabled: false
        # The maximum number of quits per second acceptable above which a netsplit is
        # considered ongoing. Default: 5.
        quitsPerSecond: 5
        # The time window in which to wait before bridging a QUIT to Matrix that occurred during
        # a netsplit. Debouncing is jittered randomly between delayMinMs and delayMaxMs so that the HS
        # is not sent many requests to leave rooms all at once if a netsplit occurs and many
        # people to not rejoin.
        # If the user with the same IRC nick as the one who sent the quit rejoins a channel
        # they are considered back online and the quit is not bridged, so long as the rejoin
        # occurs before the randomly-jittered timeout is not reached.
        # Default: 3600000, = 1h
        delayMinMs: 3600000 # 1h
        # Default: 7200000, = 2h
        delayMaxMs: 7200000 # 2h

      # A map for conversion of IRC user modes to Matrix power levels. This enables bridging
      # of IRC ops to Matrix power levels only, it does not enable the reverse. If a user has
      # been given multiple modes, the one that maps to the highest power level will be used.
      modePowerMap:
        o: 50

      botConfig:
        # Enable the presence of the bot in IRC channels. The bot serves as the entity
        # which maps from IRC -> Matrix. You can disable the bot entirely which
        # means IRC -> Matrix chat will be shared by active "M-Nick" connections
        # in the room. If there are no users in the room (or if there are users
        # but their connections are not on IRC) then nothing will be bridged to
        # Matrix. If you're concerned about the bot being treated as a "logger"
        # entity, then you may want to disable the bot. If you want IRC->Matrix
        # but don't want to have TCP connections to IRC unless a Matrix user speaks
        # (because your client connection limit is low), then you may want to keep
        # the bot enabled. Default: true.
        # NB: If the bot is disabled, you SHOULD have matrix-to-IRC syncing turned
        #     on, else there will be no users and no bot in a channel (meaning no
        #     messages to Matrix!) until a Matrix user speaks which makes a client
        #     join the target IRC channel.
        # NBB: The bridge bot IRC client will still join the target IRC network so
        #      it can service bridge-specific queries from the IRC-side e.g. so
        #      real IRC clients have a way to change their Matrix display name.
        #      See https://github.com/matrix-org/matrix-appservice-irc/issues/55
        enabled: false
        # The nickname to give the AS bot.
        nick: "hswaw_matrix"
        # The password to give to NickServ or IRC Server for this nick. Optional.
        # password: "helloworld"
        #
        # Join channels even if there are no Matrix users on the other side of
        # the bridge. Set to false to prevent the bot from joining channels which have no
        # real matrix users in them, even if there is a mapping for the channel.
        # Default: true
        joinChannelsIfNoUsers: false

      # Configuration for PMs / private 1:1 communications between users.
      privateMessages:
        # Enable the ability for PMs to be sent to/from IRC/Matrix.
        # Default: true.
        enabled: true
        # Prevent Matrix users from sending PMs to the following IRC nicks.
        # Optional. Default: [].
        # exclude: ["Alice", "Bob"] # NOT YET IMPLEMENTED

        # Should created Matrix PM rooms be federated? If false, only users on the
        # HS attached to this AS will be able to interact with this room.
        # Optional. Default: true.
        federate: false

      # Configuration for mappings not explicitly listed in the 'mappings'
      # section.
      dynamicChannels:
        # Enable the ability for Matrix users to join *any* channel on this IRC
        # network.
        # Default: false.
        enabled: true
        # Should the AS create a room alias for the new Matrix room? The form of
        # the alias can be modified via 'aliasTemplate'. Default: true.
        createAlias: true
        # Should the AS publish the new Matrix room to the public room list so
        # anyone can see it? Default: true.
        published: true
        # What should the join_rule be for the new Matrix room? If 'public',
        # anyone can join the room. If 'invite', only users with an invite can
        # join the room. Note that if an IRC channel has +k or +i set on it,
        # join_rules will be set to 'invite' until these modes are removed.
        # Default: "public".
        joinRule: public
        # This will set the m.room.related_groups state event in newly created rooms
        # with the given groupId. This means flares will show up on IRC users in those rooms.
        # This should be set to the same thing as namespaces.users.group_id in irc_registration.
        # This does not alter existing rooms.
        # Leaving this option empty will not set the event.
        groupId: +freenode:hackerspace.pl
        # Should created Matrix rooms be federated? If false, only users on the
        # HS attached to this AS will be able to interact with this room.
        # Default: true.
        federate: false
        # The room alias template to apply when creating new aliases. This only
        # applies if createAlias is 'true'. The following variables are exposed:
        # $SERVER => The IRC server address (e.g. "irc.example.com")
        # $CHANNEL => The IRC channel (e.g. "#python")
        # This MUST have $CHANNEL somewhere in it.
        # Default: '#irc_$SERVER_$CHANNEL'
        aliasTemplate: "#freenode_$CHANNEL"
        # A list of user IDs which the AS bot will send invites to in response
        # to a !join. Only applies if joinRule is 'invite'. Default: []
        # whitelist:
        #   - "@foo:example.com"
        #   - "@bar:example.com"
        #
        # Prevent the given list of channels from being mapped under any
        # circumstances.
        # exclude: ["#foo", "#bar"]

      # Configuration for controlling how Matrix and IRC membership lists are
      # synced.
      membershipLists:
        # Enable the syncing of membership lists between IRC and Matrix. This
        # can have a significant effect on performance on startup as the lists are
        # synced. This must be enabled for anything else in this section to take
        # effect. Default: false.
        enabled: true

        # Syncing membership lists at startup can result in hundreds of members to
        # process all at once. This timer drip feeds membership entries at the
        # specified rate. Default: 10000. (10s)
        floodDelayMs: 10000

        global:
          ircToMatrix:
            # Get a snapshot of all real IRC users on a channel (via NAMES) and
            # join their virtual matrix clients to the room.
            initial: true
            # Make virtual matrix clients join and leave rooms as their real IRC
            # counterparts join/part channels. Default: false.
            incremental: true

          matrixToIrc:
            # Get a snapshot of all real Matrix users in the room and join all of
            # them to the mapped IRC channel on startup. Default: false.
            initial: true
            # Make virtual IRC clients join and leave channels as their real Matrix
            # counterparts join/leave rooms. Make sure your 'maxClients' value is
            # high enough! Default: false.
            incremental: true

        # Apply specific rules to Matrix rooms. Only matrix-to-IRC takes effect.
        #rooms:
        #  - room: "!fuasirouddJoxtwfge:localhost"
        #    matrixToIrc:
        #      initial: false
        #      incremental: false

        # Apply specific rules to IRC channels. Only IRC-to-matrix takes effect.
        #channels:
        #  - channel: "#foo"
        #    ircToMatrix:
        #      initial: false
        #      incremental: false

        # Should the bridge ignore users which are not considered active on the bridge
        # during startup
        ignoreIdleUsersOnStartup:
          enabled: true
          # How many hours can a user be considered idle for before they are considered
          # ignoreable
          idleForHours: 72
          # A regex which will exclude matching MXIDs from this check.
          # exclude: "foobar"

      #mappings:
        # 1:many mappings from IRC channels to room IDs on this IRC server.
        # The matrix room must already exist. Your matrix client should expose
        # the room ID in a "settings" page for the room.
        #"#thepub": ["!kieouiJuedJoxtVdaG:localhost"]

      # Configuration for virtual matrix users. The following variables are
      # exposed:
      # $NICK => The IRC nick
      # $SERVER => The IRC server address (e.g. "irc.example.com")
      matrixClients:
        # The user ID template to use when creating virtual matrix users. This
        # MUST have $NICK somewhere in it.
        # Optional. Default: "@$SERVER_$NICK".
        # Example: "@irc.example.com_Alice:example.com"
        userTemplate: "@freenode_$NICK"
        # The display name to use for created matrix clients. This should have
        # $NICK somewhere in it if it is specified. Can also use $SERVER to
        # insert the IRC domain.
        # Optional. Default: "$NICK (IRC)". Example: "Alice (IRC)"
        displayName: "$NICK"
        # Number of tries a client can attempt to join a room before the request
        # is discarded. You can also use -1 to never retry or 0 to never give up.
        # Optional. Default: -1
        joinAttempts: -1

      # Configuration for virtual IRC users. The following variables are exposed:
      # $LOCALPART => The user ID localpart ("alice" in @alice:localhost)
      # $USERID => The user ID
      # $DISPLAY => The display name of this user, with excluded characters
      #             (e.g. space) removed. If the user has no display name, this
      #             falls back to $LOCALPART.
      ircClients:
        # The template to apply to every IRC client nick. This MUST have either
        # $DISPLAY or $USERID or $LOCALPART somewhere in it.
        # Optional. Default: "M-$DISPLAY". Example: "M-Alice".
        nickTemplate: "$DISPLAY"
        # True to allow virtual IRC clients to change their nick on this server
        # by issuing !nick <server> <nick> commands to the IRC AS bot.
        # This is completely freeform: it will NOT follow the nickTemplate.
        allowNickChanges: true
        # The max number of IRC clients that will connect. If the limit is
        # reached, the client that spoke the longest time ago will be
        # disconnected and replaced.
        # Optional. Default: 30.
        maxClients: 30
        # IPv6 configuration.
        ipv6:
          # Optional. Set to true to force IPv6 for outgoing connections.
          only: false
          # Optional. The IPv6 prefix to use for generating unique addresses for each
          # connected user. If not specified, all users will connect from the same
          # (default) address. This may require additional OS-specific work to allow
          # for the node process to bind to multiple different source addresses
          # e.g IP_FREEBIND on Linux, which requires an LD_PRELOAD with the library
          # https://github.com/matrix-org/freebindfree as Node does not expose setsockopt.
          # prefix: "2001:0db8:85a3::"  # modify appropriately
        #
        # The maximum amount of time in seconds that the client can exist
        # without sending another message before being disconnected. Use 0 to
        # not apply an idle timeout. This value is ignored if this IRC server is
        # mirroring matrix membership lists to IRC. Default: 172800 (48 hours)
        idleTimeout: 10800
        # The number of millseconds to wait between consecutive reconnections if a
        # client gets disconnected. Setting to 0 will cause the scheduling to be
        # disabled, i.e. it will be scheduled immediately (with jitter.
        # Otherwise, the scheduling interval will be used such that one client
        # reconnect for this server will be handled every reconnectIntervalMs ms using
        # a FIFO queue.
        # Default: 5000 (5 seconds)
        reconnectIntervalMs: 5000
        # The number of concurrent reconnects if a user has been disconnected unexpectedly
        # (e.g. a netsplit). You should set this to a reasonably high number so that
        # bridges are not waiting an eternity to reconnect all its clients if
        # we see a massive number of disconnect. This is unrelated to the reconnectIntervalMs
        # setting above which is for connecting on restart of the bridge. Set to 0 to
        # immediately try to reconnect all users.
        # Default: 50
        concurrentReconnectLimit: 50
        # The number of lines to allow being sent by the IRC client that has received
        # a large block of text to send from matrix. If the number of lines that would
        # be sent is > lineLimit, the text will instead be uploaded to matrix and the
        # resulting URI is treated as a file. As such, a link will be sent to the IRC
        # side instead of potentially spamming IRC and getting the IRC client kicked.
        # Default: 3.
        lineLimit: 3
        # A list of user modes to set on every IRC client. For example, "RiG" would set
        # +R, +i and +G on every IRC connection when they have successfully connected.
        # User modes vary wildly depending on the IRC network you're connecting to,
        # so check before setting this value. Some modes may not work as intended
        # through the bridge e.g. caller ID as there is no way to /ACCEPT.
        # Default: "" (no user modes)
        # userModes: "R"

  # Configuration for an ident server. If you are running a public bridge it is
  # advised you setup an ident server so IRC mods can ban specific matrix users
  # rather than the application service itself.
  ident:
    # True to listen for Ident requests and respond with the
    # matrix user's user_id (converted to ASCII, respecting RFC 1413).
    # Default: false.
    enabled: false
    # The port to listen on for incoming ident requests.
    # Ports below 1024 require root to listen on, and you may not want this to
    # run as root. Instead, you can get something like an Apache to yank up
    # incoming requests to 113 to a high numbered port. Set the port to listen
    # on instead of 113 here.
    # Default: 113.
    port: 1113
    # The address to listen on for incoming ident requests.
    # Default: 0.0.0.0
    address: "::"

  # Configuration for logging. Optional. Default: console debug level logging
  # only.
  logging:
    # Level to log on console/logfile. One of error|warn|info|debug
    level: "debug"
    # The file location to log to. This is relative to the project directory.
    logfile: "debug.log"
    # The file location to log errors to. This is relative to the project
    # directory.
    errfile: "errors.log"
    # Whether to log to the console or not.
    toConsole: true
    # The max number of files to keep. Files will be overwritten eventually due
    # to rotations.
    maxFiles: 5

  # Optional. Enable Prometheus metrics. If this is enabled, you MUST install `prom-client`:
  #   $ npm install prom-client@6.3.0
  # Metrics will then be available via GET /metrics on the bridge listening port (-p).
  metrics:
    # Whether to actually enable the metric endpoint. Default: false
    enabled: true
    # When collecting remote user active times, which "buckets" should be used. Defaults are given below.
    # The bucket name is formed of a duration and a period. (h=hours,d=days,w=weeks).
    remoteUserAgeBuckets:
      - "1h"
      - "1d"
      - "1w"

  # Configuration options for the debug HTTP API. To access this API, you must
  # append ?access_token=$APPSERVICE_TOKEN (from the registration file) to the requests.
  #
  # The debug API exposes the following endpoints:
  #
  #   GET /irc/$domain/user/$user_id => Return internal state for the IRC client for this user ID.
  #
  #   POST /irc/$domain/user/$user_id => Issue a raw IRC command down this connection.
  #                                      Format: new line delimited commands as per IRC protocol.
  #
  debugApi:
    # True to enable the HTTP API endpoint. Default: false.
    enabled: false
    # The port to host the HTTP API.
    port: 11100

  # Configuration for the provisioning API.
  #
  # GET /_matrix/provision/link
  # GET /_matrix/provision/unlink
  # GET /_matrix/provision/listlinks
  #
  provisioning:
    # True to enable the provisioning HTTP endpoint. Default: false.
    enabled: true
    # The number of seconds to wait before giving up on getting a response from
    # an IRC channel operator. If the channel operator does not respond within the
    # allotted time period, the provisioning request will fail.
    # Default: 300 seconds (5 mins)
    requestTimeoutSeconds: 300

  # WARNING: The bridge needs to send plaintext passwords to the IRC server, it cannot
  # send a password hash. As a result, passwords (NOT hashes) are stored encrypted in
  # the database.
  #
  # To generate a .pem file:
  # $ openssl genpkey -out passkey.pem -outform PEM -algorithm RSA -pkeyopt rsa_keygen_bits:2048
  #
  # The path to the RSA PEM-formatted private key to use when encrypting IRC passwords
  # for storage in the database. Passwords are stored by using the admin room command
  # `!storepass server.name passw0rd. When a connection is made to IRC on behalf of
  # the Matrix user, this password will be sent as the server password (PASS command).
  #passwordEncryptionKeyPath: "passkey.pem"

  # Config for Matrix -> IRC bridging
  matrixHandler:
    # Cache this many matrix events in memory to be used for m.relates_to messages (usually replies).
    eventCacheSize: 4096

# Options here are generally only applicable to large-scale bridges and may have
# consequences greater than other options in this configuration file.
advanced:
  # The maximum number of HTTP(S) sockets to maintain. Usually this is unlimited
  # however for large bridges it is important to rate limit the bridge to avoid
  # accidentally overloading the homeserver. Defaults to 1000, which should be
  # enough for the vast majority of use cases.
  maxHttpSockets: 1000

database:
  engine: "nedb"
  connectionString: "nedb:///data"
