Home Reference Source Test

src/eventstore/EventstoreSettings.ts

  1. import * as bunyan from 'bunyan'
  2. import uuid = require('uuid/v4')
  3. import * as tls from 'tls'
  4.  
  5. /**
  6. * @external {bunyan} https://github.com/trentm/node-bunyan
  7. */
  8.  
  9. /**
  10. * @external {Long} https://github.com/dcodeIO/long.js
  11. */
  12.  
  13. /**
  14. * @typedef {object} UserCredentials
  15. * @property {string} username username to use for authentication
  16. * @property {string} password password to use for authentication
  17. */
  18. export interface UserCredentials {
  19. username: string
  20. password: string
  21. }
  22.  
  23. /**
  24. * @typedef {Object} EventstoreSettings
  25. * @property {string} uri connection uri (default=tcp://admin@changeit@127.0.0.1:1113)
  26. * @property {boolean} useSSL indicates if to connect to secure tcp port (default=false)
  27. * @property {SecureContextOptions | null} secureContext node tls.SecureContextOptions (default=null)
  28. * @property {boolean} useHttps indicates if to use https for discovery (default=false)
  29. * @property {string} host connection host name (will be ignored if uri is set)
  30. * @property {number} port connection port (will be ignored if uri is set)
  31. * @property {UserCredentials} credentials user credentials
  32. * @property {boolean} requireMaster forces to connect to master node only if set to true (default=true)
  33. * @property {bunyan} logger bunyan logger instance
  34. * @property {number} maxQueueSize maximum pending requests (default=5000)
  35. * @property {number} connectTimeout connect timeout in ms (default=1000)
  36. * @property {number} maxReconnections maximum re-connection tries (default=10)
  37. * @property {number} reconnectionDelay delay between reconnects in ms (default=2000)
  38. * @property {number} operationTimeout time in ms until a request timed out if no response from eventstore arrives (default=7000)
  39. * @property {number} operationTimeoutCheckPeriod time period in ms to check for timed out requests (default=1000)
  40. * @property {string} clusterDns dns ip to use to discover eventstore cluster ip's (default=empty string)
  41. * @property {number} maxDiscoverAttempts maximum count of discover attempts before giving up
  42. * @property {number} externalGossipPort gossip ip port (default=2112)
  43. * @property {number} gossipTimeout timeout in ms (default=1000)
  44. * @property {string[]} gossipSeeds array list of eventstore cluster ip's
  45. * @property {boolean} validateServer validate server ssl certificate (default=false)
  46. * @property {string} clientId client id string to identify connection at eventstore (default=ts-client-uuid())
  47. *
  48. */
  49. export interface EventstoreSettings {
  50. uri: string
  51. useSSL: boolean
  52. secureContext: null | tls.SecureContextOptions
  53. useHttps: boolean
  54. host: string
  55. port: number
  56. credentials: UserCredentials
  57. requireMaster: boolean
  58. logger: bunyan
  59.  
  60. maxQueueSize: number
  61. connectTimeout: number
  62. maxReconnections: number
  63. reconnectionDelay: number
  64. operationTimeout: number
  65. operationTimeoutCheckPeriod: number
  66. clusterDns: string
  67. maxDiscoverAttempts: number
  68. externalGossipPort: number
  69. gossipTimeout: number
  70. gossipSeeds: string[]
  71. validateServer: boolean
  72. clientId: string
  73. }
  74.  
  75. /** default eventstore connection settings */
  76. const defaultConnectionSettings: EventstoreSettings = {
  77. uri: 'tcp://admin@changeit@127.0.0.1:1113',
  78. requireMaster: true,
  79.  
  80. maxDiscoverAttempts: 10,
  81. clusterDns: '',
  82. externalGossipPort: 2112,
  83. gossipTimeout: 1000,
  84. gossipSeeds: [],
  85.  
  86. useSSL: false, //use tcp encrypted?
  87. secureContext: null,
  88. useHttps: false, //fetch gossip info over https?
  89. validateServer: false,
  90.  
  91. connectTimeout: 1000,
  92. maxReconnections: 10,
  93. reconnectionDelay: 2 * 1000,
  94.  
  95. clientId: `ts-client-${uuid()}`,
  96.  
  97. maxQueueSize: 5000,
  98.  
  99. operationTimeout: 7 * 1000,
  100. operationTimeoutCheckPeriod: 1000,
  101.  
  102. logger: bunyan.createLogger({
  103. name: 'eventstore-ts-client',
  104. level: 'debug'
  105. }),
  106.  
  107. host: '', //dummy entry will be overwritten by internal functions
  108. port: 0, //dummy entry will be overwritten by internal functions
  109. credentials: {
  110. password: '', //dummy entry will be overwritten by internal functions
  111. username: '' //dummy entry will be overwritten by internal functions
  112. }
  113. }
  114.  
  115. /**
  116. * Generates settings for connecting to eventstore
  117. */
  118. export function setConnectionSettings(
  119. customSettings: object | EventstoreSettings
  120. ): EventstoreSettings {
  121. return {...defaultConnectionSettings, ...customSettings}
  122. }