@blazedpath/commons 0.2.2 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (626) hide show
  1. package/README.md +4 -1
  2. package/dist/blz-base/health/index.d.ts +1 -0
  3. package/dist/blz-base/health/index.js +1 -0
  4. package/dist/blz-base/index.d.ts +108 -0
  5. package/dist/blz-base/index.js +1 -0
  6. package/dist/blz-cache/LruCache.d.ts +31 -0
  7. package/dist/blz-cache/LruCache.js +1 -0
  8. package/dist/blz-cache/index.d.ts +2 -0
  9. package/dist/blz-cache/index.js +1 -0
  10. package/dist/blz-config/index.d.ts +16 -0
  11. package/dist/blz-config/index.js +1 -0
  12. package/dist/blz-core/index.d.ts +32 -0
  13. package/dist/blz-core/index.js +1 -0
  14. package/dist/blz-cryptography/index.d.ts +2 -0
  15. package/dist/blz-cryptography/index.js +1 -0
  16. package/dist/blz-datetimes/index.d.ts +35 -0
  17. package/dist/blz-datetimes/index.js +1 -0
  18. package/dist/blz-file/fileService.d.ts +25 -0
  19. package/dist/blz-file/fileService.js +1 -0
  20. package/dist/blz-file/index.d.ts +2 -0
  21. package/dist/blz-file/index.js +1 -0
  22. package/dist/blz-file/index.test.js +1 -0
  23. package/dist/blz-file/lab.js +1 -0
  24. package/dist/blz-hazelcast/index.d.ts +25 -0
  25. package/dist/blz-hazelcast/index.js +1 -0
  26. package/dist/blz-hazelcast/lib/credentials.d.ts +10 -0
  27. package/dist/blz-hazelcast/lib/credentials.js +1 -0
  28. package/dist/blz-hazelcast/lib/credentialsFactory.d.ts +1 -0
  29. package/dist/blz-hazelcast/lib/credentialsFactory.js +1 -0
  30. package/dist/blz-hazelcast/lib/hazelcastCache.d.ts +27 -0
  31. package/dist/blz-hazelcast/lib/hazelcastCache.js +1 -0
  32. package/dist/blz-iterable/index.d.ts +49 -0
  33. package/dist/blz-iterable/index.js +1 -0
  34. package/dist/blz-json-schema/index.d.ts +1 -0
  35. package/dist/blz-json-schema/index.js +1 -0
  36. package/dist/blz-jwt/index.d.ts +12 -0
  37. package/dist/blz-jwt/index.js +1 -0
  38. package/dist/blz-kafka/index.d.ts +9 -0
  39. package/dist/blz-kafka/index.js +1 -0
  40. package/dist/blz-math/index.d.ts +22 -0
  41. package/dist/blz-math/index.js +1 -0
  42. package/dist/blz-mongodb/index.d.ts +28 -0
  43. package/dist/blz-mongodb/index.js +1 -0
  44. package/dist/blz-rds/__test__/scape.test.js +1 -0
  45. package/dist/blz-rds/blz-rds-executor.d.ts +4 -0
  46. package/dist/blz-rds/blz-rds-executor.js +1 -0
  47. package/dist/blz-rds/blz-rds-helper.d.ts +5 -0
  48. package/dist/blz-rds/blz-rds-helper.js +1 -0
  49. package/dist/blz-rds/commands/core/add.d.ts +2 -0
  50. package/dist/blz-rds/commands/core/add.js +1 -0
  51. package/dist/blz-rds/commands/core/and.d.ts +3 -0
  52. package/dist/blz-rds/commands/core/and.js +1 -0
  53. package/dist/blz-rds/commands/core/asc.d.ts +2 -0
  54. package/dist/blz-rds/commands/core/asc.js +1 -0
  55. package/dist/blz-rds/commands/core/avg.d.ts +2 -0
  56. package/dist/blz-rds/commands/core/avg.js +1 -0
  57. package/dist/blz-rds/commands/core/column-ref.d.ts +2 -0
  58. package/dist/blz-rds/commands/core/column-ref.js +1 -0
  59. package/dist/blz-rds/commands/core/count-distinct.d.ts +2 -0
  60. package/dist/blz-rds/commands/core/count-distinct.js +1 -0
  61. package/dist/blz-rds/commands/core/count.d.ts +2 -0
  62. package/dist/blz-rds/commands/core/count.js +1 -0
  63. package/dist/blz-rds/commands/core/decimal.d.ts +2 -0
  64. package/dist/blz-rds/commands/core/decimal.js +1 -0
  65. package/dist/blz-rds/commands/core/desc.d.ts +2 -0
  66. package/dist/blz-rds/commands/core/desc.js +1 -0
  67. package/dist/blz-rds/commands/core/distinct.d.ts +2 -0
  68. package/dist/blz-rds/commands/core/distinct.js +1 -0
  69. package/dist/blz-rds/commands/core/divide.d.ts +2 -0
  70. package/dist/blz-rds/commands/core/divide.js +1 -0
  71. package/dist/blz-rds/commands/core/embedded-exists.d.ts +3 -0
  72. package/dist/blz-rds/commands/core/embedded-exists.js +1 -0
  73. package/dist/blz-rds/commands/core/embedded-select.d.ts +2 -0
  74. package/dist/blz-rds/commands/core/embedded-select.js +1 -0
  75. package/dist/blz-rds/commands/core/equals.d.ts +3 -0
  76. package/dist/blz-rds/commands/core/equals.js +1 -0
  77. package/dist/blz-rds/commands/core/false.d.ts +2 -0
  78. package/dist/blz-rds/commands/core/false.js +1 -0
  79. package/dist/blz-rds/commands/core/greater-or-equal.d.ts +3 -0
  80. package/dist/blz-rds/commands/core/greater-or-equal.js +1 -0
  81. package/dist/blz-rds/commands/core/greater.d.ts +3 -0
  82. package/dist/blz-rds/commands/core/greater.js +1 -0
  83. package/dist/blz-rds/commands/core/in.d.ts +3 -0
  84. package/dist/blz-rds/commands/core/in.js +1 -0
  85. package/dist/blz-rds/commands/core/integer.d.ts +2 -0
  86. package/dist/blz-rds/commands/core/integer.js +1 -0
  87. package/dist/blz-rds/commands/core/is-not-null.d.ts +3 -0
  88. package/dist/blz-rds/commands/core/is-not-null.js +1 -0
  89. package/dist/blz-rds/commands/core/is-null-or-value.d.ts +3 -0
  90. package/dist/blz-rds/commands/core/is-null-or-value.js +1 -0
  91. package/dist/blz-rds/commands/core/is-null.d.ts +3 -0
  92. package/dist/blz-rds/commands/core/is-null.js +1 -0
  93. package/dist/blz-rds/commands/core/less-or-equal.d.ts +3 -0
  94. package/dist/blz-rds/commands/core/less-or-equal.js +1 -0
  95. package/dist/blz-rds/commands/core/less-unary.d.ts +2 -0
  96. package/dist/blz-rds/commands/core/less-unary.js +1 -0
  97. package/dist/blz-rds/commands/core/less.d.ts +3 -0
  98. package/dist/blz-rds/commands/core/less.js +1 -0
  99. package/dist/blz-rds/commands/core/like.d.ts +3 -0
  100. package/dist/blz-rds/commands/core/like.js +1 -0
  101. package/dist/blz-rds/commands/core/max.d.ts +2 -0
  102. package/dist/blz-rds/commands/core/max.js +1 -0
  103. package/dist/blz-rds/commands/core/min.d.ts +2 -0
  104. package/dist/blz-rds/commands/core/min.js +1 -0
  105. package/dist/blz-rds/commands/core/multiply.d.ts +2 -0
  106. package/dist/blz-rds/commands/core/multiply.js +1 -0
  107. package/dist/blz-rds/commands/core/not-equals.d.ts +3 -0
  108. package/dist/blz-rds/commands/core/not-equals.js +1 -0
  109. package/dist/blz-rds/commands/core/not-in.d.ts +3 -0
  110. package/dist/blz-rds/commands/core/not-in.js +1 -0
  111. package/dist/blz-rds/commands/core/not.d.ts +3 -0
  112. package/dist/blz-rds/commands/core/not.js +1 -0
  113. package/dist/blz-rds/commands/core/null.d.ts +2 -0
  114. package/dist/blz-rds/commands/core/null.js +1 -0
  115. package/dist/blz-rds/commands/core/nvl.d.ts +2 -0
  116. package/dist/blz-rds/commands/core/nvl.js +1 -0
  117. package/dist/blz-rds/commands/core/or.d.ts +3 -0
  118. package/dist/blz-rds/commands/core/or.js +1 -0
  119. package/dist/blz-rds/commands/core/parameter.d.ts +2 -0
  120. package/dist/blz-rds/commands/core/parameter.js +1 -0
  121. package/dist/blz-rds/commands/core/remainder.d.ts +2 -0
  122. package/dist/blz-rds/commands/core/remainder.js +1 -0
  123. package/dist/blz-rds/commands/core/string.d.ts +2 -0
  124. package/dist/blz-rds/commands/core/string.js +1 -0
  125. package/dist/blz-rds/commands/core/subtract.d.ts +2 -0
  126. package/dist/blz-rds/commands/core/subtract.js +1 -0
  127. package/dist/blz-rds/commands/core/sum.d.ts +2 -0
  128. package/dist/blz-rds/commands/core/sum.js +1 -0
  129. package/dist/blz-rds/commands/core/true.d.ts +2 -0
  130. package/dist/blz-rds/commands/core/true.js +1 -0
  131. package/dist/blz-rds/commands/core/tuple.d.ts +2 -0
  132. package/dist/blz-rds/commands/core/tuple.js +1 -0
  133. package/dist/blz-rds/commands/datetimes/add-days.d.ts +2 -0
  134. package/dist/blz-rds/commands/datetimes/add-days.js +1 -0
  135. package/dist/blz-rds/commands/datetimes/add-hours.d.ts +2 -0
  136. package/dist/blz-rds/commands/datetimes/add-hours.js +1 -0
  137. package/dist/blz-rds/commands/datetimes/add-milliseconds.d.ts +2 -0
  138. package/dist/blz-rds/commands/datetimes/add-milliseconds.js +1 -0
  139. package/dist/blz-rds/commands/datetimes/add-minutes.d.ts +2 -0
  140. package/dist/blz-rds/commands/datetimes/add-minutes.js +1 -0
  141. package/dist/blz-rds/commands/datetimes/add-months.d.ts +2 -0
  142. package/dist/blz-rds/commands/datetimes/add-months.js +1 -0
  143. package/dist/blz-rds/commands/datetimes/add-seconds.d.ts +2 -0
  144. package/dist/blz-rds/commands/datetimes/add-seconds.js +1 -0
  145. package/dist/blz-rds/commands/datetimes/add-years.d.ts +2 -0
  146. package/dist/blz-rds/commands/datetimes/add-years.js +1 -0
  147. package/dist/blz-rds/commands/datetimes/date-diff.d.ts +2 -0
  148. package/dist/blz-rds/commands/datetimes/date-diff.js +1 -0
  149. package/dist/blz-rds/commands/datetimes/date.d.ts +2 -0
  150. package/dist/blz-rds/commands/datetimes/date.js +1 -0
  151. package/dist/blz-rds/commands/datetimes/datetime-diff.d.ts +2 -0
  152. package/dist/blz-rds/commands/datetimes/datetime-diff.js +1 -0
  153. package/dist/blz-rds/commands/datetimes/datetime.d.ts +2 -0
  154. package/dist/blz-rds/commands/datetimes/datetime.js +1 -0
  155. package/dist/blz-rds/commands/datetimes/day.d.ts +2 -0
  156. package/dist/blz-rds/commands/datetimes/day.js +1 -0
  157. package/dist/blz-rds/commands/datetimes/hour.d.ts +2 -0
  158. package/dist/blz-rds/commands/datetimes/hour.js +1 -0
  159. package/dist/blz-rds/commands/datetimes/millisecond.d.ts +2 -0
  160. package/dist/blz-rds/commands/datetimes/millisecond.js +1 -0
  161. package/dist/blz-rds/commands/datetimes/minute.d.ts +2 -0
  162. package/dist/blz-rds/commands/datetimes/minute.js +1 -0
  163. package/dist/blz-rds/commands/datetimes/month-text.d.ts +2 -0
  164. package/dist/blz-rds/commands/datetimes/month-text.js +1 -0
  165. package/dist/blz-rds/commands/datetimes/month.d.ts +2 -0
  166. package/dist/blz-rds/commands/datetimes/month.js +1 -0
  167. package/dist/blz-rds/commands/datetimes/now.d.ts +2 -0
  168. package/dist/blz-rds/commands/datetimes/now.js +1 -0
  169. package/dist/blz-rds/commands/datetimes/second.d.ts +2 -0
  170. package/dist/blz-rds/commands/datetimes/second.js +1 -0
  171. package/dist/blz-rds/commands/datetimes/subtract-days.d.ts +2 -0
  172. package/dist/blz-rds/commands/datetimes/subtract-days.js +1 -0
  173. package/dist/blz-rds/commands/datetimes/subtract-hours.d.ts +2 -0
  174. package/dist/blz-rds/commands/datetimes/subtract-hours.js +1 -0
  175. package/dist/blz-rds/commands/datetimes/subtract-milliseconds.d.ts +2 -0
  176. package/dist/blz-rds/commands/datetimes/subtract-milliseconds.js +1 -0
  177. package/dist/blz-rds/commands/datetimes/subtract-minutes.d.ts +2 -0
  178. package/dist/blz-rds/commands/datetimes/subtract-minutes.js +1 -0
  179. package/dist/blz-rds/commands/datetimes/subtract-seconds.d.ts +2 -0
  180. package/dist/blz-rds/commands/datetimes/subtract-seconds.js +1 -0
  181. package/dist/blz-rds/commands/datetimes/time-diff.d.ts +2 -0
  182. package/dist/blz-rds/commands/datetimes/time-diff.js +1 -0
  183. package/dist/blz-rds/commands/datetimes/time.d.ts +2 -0
  184. package/dist/blz-rds/commands/datetimes/time.js +1 -0
  185. package/dist/blz-rds/commands/datetimes/today.d.ts +2 -0
  186. package/dist/blz-rds/commands/datetimes/today.js +1 -0
  187. package/dist/blz-rds/commands/datetimes/week-day-text.d.ts +2 -0
  188. package/dist/blz-rds/commands/datetimes/week-day-text.js +1 -0
  189. package/dist/blz-rds/commands/datetimes/week-day.d.ts +2 -0
  190. package/dist/blz-rds/commands/datetimes/week-day.js +1 -0
  191. package/dist/blz-rds/commands/datetimes/week.d.ts +2 -0
  192. package/dist/blz-rds/commands/datetimes/week.js +1 -0
  193. package/dist/blz-rds/commands/datetimes/year.d.ts +2 -0
  194. package/dist/blz-rds/commands/datetimes/year.js +1 -0
  195. package/dist/blz-rds/commands/math/abs.d.ts +2 -0
  196. package/dist/blz-rds/commands/math/abs.js +1 -0
  197. package/dist/blz-rds/commands/math/acos.d.ts +2 -0
  198. package/dist/blz-rds/commands/math/acos.js +1 -0
  199. package/dist/blz-rds/commands/math/asin.d.ts +2 -0
  200. package/dist/blz-rds/commands/math/asin.js +1 -0
  201. package/dist/blz-rds/commands/math/atan.d.ts +2 -0
  202. package/dist/blz-rds/commands/math/atan.js +1 -0
  203. package/dist/blz-rds/commands/math/atan2.d.ts +2 -0
  204. package/dist/blz-rds/commands/math/atan2.js +1 -0
  205. package/dist/blz-rds/commands/math/ceil.d.ts +2 -0
  206. package/dist/blz-rds/commands/math/ceil.js +1 -0
  207. package/dist/blz-rds/commands/math/cos.d.ts +2 -0
  208. package/dist/blz-rds/commands/math/cos.js +1 -0
  209. package/dist/blz-rds/commands/math/cosh.d.ts +2 -0
  210. package/dist/blz-rds/commands/math/cosh.js +1 -0
  211. package/dist/blz-rds/commands/math/exp.d.ts +2 -0
  212. package/dist/blz-rds/commands/math/exp.js +1 -0
  213. package/dist/blz-rds/commands/math/floor.d.ts +2 -0
  214. package/dist/blz-rds/commands/math/floor.js +1 -0
  215. package/dist/blz-rds/commands/math/log.d.ts +2 -0
  216. package/dist/blz-rds/commands/math/log.js +1 -0
  217. package/dist/blz-rds/commands/math/log10.d.ts +2 -0
  218. package/dist/blz-rds/commands/math/log10.js +1 -0
  219. package/dist/blz-rds/commands/math/pow.d.ts +2 -0
  220. package/dist/blz-rds/commands/math/pow.js +1 -0
  221. package/dist/blz-rds/commands/math/random.d.ts +2 -0
  222. package/dist/blz-rds/commands/math/random.js +1 -0
  223. package/dist/blz-rds/commands/math/round.d.ts +2 -0
  224. package/dist/blz-rds/commands/math/round.js +1 -0
  225. package/dist/blz-rds/commands/math/sign.d.ts +2 -0
  226. package/dist/blz-rds/commands/math/sign.js +1 -0
  227. package/dist/blz-rds/commands/math/sin.d.ts +2 -0
  228. package/dist/blz-rds/commands/math/sin.js +1 -0
  229. package/dist/blz-rds/commands/math/sinh.d.ts +2 -0
  230. package/dist/blz-rds/commands/math/sinh.js +1 -0
  231. package/dist/blz-rds/commands/math/sqrt.d.ts +2 -0
  232. package/dist/blz-rds/commands/math/sqrt.js +1 -0
  233. package/dist/blz-rds/commands/math/tan.d.ts +2 -0
  234. package/dist/blz-rds/commands/math/tan.js +1 -0
  235. package/dist/blz-rds/commands/math/tanh.d.ts +2 -0
  236. package/dist/blz-rds/commands/math/tanh.js +1 -0
  237. package/dist/blz-rds/commands/math/trunc.d.ts +2 -0
  238. package/dist/blz-rds/commands/math/trunc.js +1 -0
  239. package/dist/blz-rds/commands/strings/concat.d.ts +2 -0
  240. package/dist/blz-rds/commands/strings/concat.js +1 -0
  241. package/dist/blz-rds/commands/strings/contains.d.ts +3 -0
  242. package/dist/blz-rds/commands/strings/contains.js +1 -0
  243. package/dist/blz-rds/commands/strings/ends-with.d.ts +3 -0
  244. package/dist/blz-rds/commands/strings/ends-with.js +1 -0
  245. package/dist/blz-rds/commands/strings/index-of.d.ts +2 -0
  246. package/dist/blz-rds/commands/strings/index-of.js +1 -0
  247. package/dist/blz-rds/commands/strings/is-null-or-empty.d.ts +3 -0
  248. package/dist/blz-rds/commands/strings/is-null-or-empty.js +1 -0
  249. package/dist/blz-rds/commands/strings/is-null-or-white-space.d.ts +3 -0
  250. package/dist/blz-rds/commands/strings/is-null-or-white-space.js +1 -0
  251. package/dist/blz-rds/commands/strings/join.d.ts +2 -0
  252. package/dist/blz-rds/commands/strings/join.js +1 -0
  253. package/dist/blz-rds/commands/strings/last-index-of.d.ts +2 -0
  254. package/dist/blz-rds/commands/strings/last-index-of.js +1 -0
  255. package/dist/blz-rds/commands/strings/length.d.ts +2 -0
  256. package/dist/blz-rds/commands/strings/length.js +1 -0
  257. package/dist/blz-rds/commands/strings/pad-left.d.ts +2 -0
  258. package/dist/blz-rds/commands/strings/pad-left.js +1 -0
  259. package/dist/blz-rds/commands/strings/pad-right.d.ts +2 -0
  260. package/dist/blz-rds/commands/strings/pad-right.js +1 -0
  261. package/dist/blz-rds/commands/strings/replace.d.ts +2 -0
  262. package/dist/blz-rds/commands/strings/replace.js +1 -0
  263. package/dist/blz-rds/commands/strings/starts-with.d.ts +3 -0
  264. package/dist/blz-rds/commands/strings/starts-with.js +1 -0
  265. package/dist/blz-rds/commands/strings/substring.d.ts +2 -0
  266. package/dist/blz-rds/commands/strings/substring.js +1 -0
  267. package/dist/blz-rds/commands/strings/to-lower.d.ts +2 -0
  268. package/dist/blz-rds/commands/strings/to-lower.js +1 -0
  269. package/dist/blz-rds/commands/strings/to-upper.d.ts +2 -0
  270. package/dist/blz-rds/commands/strings/to-upper.js +1 -0
  271. package/dist/blz-rds/commands/strings/trim-end.d.ts +2 -0
  272. package/dist/blz-rds/commands/strings/trim-end.js +1 -0
  273. package/dist/blz-rds/commands/strings/trim-start.d.ts +2 -0
  274. package/dist/blz-rds/commands/strings/trim-start.js +1 -0
  275. package/dist/blz-rds/commands/strings/trim.d.ts +2 -0
  276. package/dist/blz-rds/commands/strings/trim.js +1 -0
  277. package/dist/blz-rds/index.d.ts +53 -0
  278. package/dist/blz-rds/index.js +1 -0
  279. package/dist/blz-rds-mysql/base.d.ts +83 -0
  280. package/dist/blz-rds-mysql/base.js +1 -0
  281. package/dist/blz-rds-mysql/connection-manager.d.ts +8 -0
  282. package/dist/blz-rds-mysql/connection-manager.js +1 -0
  283. package/dist/blz-rds-mysql/execute-bulk-insert.d.ts +2 -0
  284. package/dist/blz-rds-mysql/execute-bulk-insert.js +1 -0
  285. package/dist/blz-rds-mysql/execute-bulk-merge.d.ts +2 -0
  286. package/dist/blz-rds-mysql/execute-bulk-merge.js +1 -0
  287. package/dist/blz-rds-mysql/execute-non-query.d.ts +14 -0
  288. package/dist/blz-rds-mysql/execute-non-query.js +1 -0
  289. package/dist/blz-rds-mysql/execute-query.d.ts +11 -0
  290. package/dist/blz-rds-mysql/execute-query.js +1 -0
  291. package/dist/blz-rds-mysql/index.d.ts +9 -0
  292. package/dist/blz-rds-mysql/index.js +1 -0
  293. package/dist/blz-rds-mysql/stored-procedure.d.ts +19 -0
  294. package/dist/blz-rds-mysql/stored-procedure.js +1 -0
  295. package/dist/blz-rds-mysqlx/base.d.ts +83 -0
  296. package/dist/blz-rds-mysqlx/base.js +1 -0
  297. package/dist/blz-rds-mysqlx/connection-manager.d.ts +6 -0
  298. package/dist/blz-rds-mysqlx/connection-manager.js +1 -0
  299. package/dist/blz-rds-mysqlx/execute-bulk-insert.d.ts +2 -0
  300. package/dist/blz-rds-mysqlx/execute-bulk-insert.js +1 -0
  301. package/dist/blz-rds-mysqlx/execute-bulk-merge.d.ts +2 -0
  302. package/dist/blz-rds-mysqlx/execute-bulk-merge.js +1 -0
  303. package/dist/blz-rds-mysqlx/execute-non-query.d.ts +4 -0
  304. package/dist/blz-rds-mysqlx/execute-non-query.js +1 -0
  305. package/dist/blz-rds-mysqlx/execute-query.d.ts +7 -0
  306. package/dist/blz-rds-mysqlx/execute-query.js +1 -0
  307. package/dist/blz-rds-mysqlx/index.d.ts +9 -0
  308. package/dist/blz-rds-mysqlx/index.js +1 -0
  309. package/dist/blz-rds-mysqlx/stored-procedure.d.ts +20 -0
  310. package/dist/blz-rds-mysqlx/stored-procedure.js +1 -0
  311. package/dist/blz-rds-oracle/index.d.ts +25 -0
  312. package/dist/blz-rds-oracle/index.js +1 -0
  313. package/dist/blz-rds-postgres/base.d.ts +94 -0
  314. package/dist/blz-rds-postgres/base.js +1 -0
  315. package/dist/blz-rds-postgres/connection-manager.d.ts +6 -0
  316. package/dist/blz-rds-postgres/connection-manager.js +1 -0
  317. package/dist/blz-rds-postgres/execute-bulk-insert.d.ts +5 -0
  318. package/dist/blz-rds-postgres/execute-bulk-insert.js +1 -0
  319. package/dist/blz-rds-postgres/execute-bulk-merge.d.ts +4 -0
  320. package/dist/blz-rds-postgres/execute-bulk-merge.js +1 -0
  321. package/dist/blz-rds-postgres/execute-non-query.d.ts +12 -0
  322. package/dist/blz-rds-postgres/execute-non-query.js +1 -0
  323. package/dist/blz-rds-postgres/execute-query.d.ts +4 -0
  324. package/dist/blz-rds-postgres/execute-query.js +1 -0
  325. package/dist/blz-rds-postgres/index.d.ts +9 -0
  326. package/dist/blz-rds-postgres/index.js +1 -0
  327. package/dist/blz-rds-postgres/result-set.js +1 -0
  328. package/dist/blz-rds-postgres/stored-procedure.d.ts +19 -0
  329. package/dist/blz-rds-postgres/stored-procedure.js +1 -0
  330. package/dist/blz-redis/index.d.ts +31 -0
  331. package/dist/blz-redis/index.js +1 -0
  332. package/dist/blz-redis/lib/redisCache.d.ts +33 -0
  333. package/dist/blz-redis/lib/redisCache.js +1 -0
  334. package/dist/blz-regex/index.d.ts +3 -0
  335. package/dist/blz-regex/index.js +1 -0
  336. package/dist/blz-security/__test__/autorization.test.js +1 -0
  337. package/dist/blz-security/__test__/autorizationKpn.test.js +1 -0
  338. package/dist/blz-security/__test__/orderManagement.test.js +1 -0
  339. package/dist/blz-security/__test__/secureUrl.test.js +1 -0
  340. package/dist/blz-security/__test__/solveMergeRule.test.js +1 -0
  341. package/dist/blz-security/__test__/sqlInjectionGuard.test.js +1 -0
  342. package/dist/blz-security/__test__/xssGuard.test.js +1 -0
  343. package/dist/blz-security/authorizationService.d.ts +42 -0
  344. package/dist/blz-security/authorizationService.js +2 -0
  345. package/dist/blz-security/config/global.js +1 -0
  346. package/dist/blz-security/filescanner/index.d.ts +24 -0
  347. package/dist/blz-security/filescanner/index.js +1 -0
  348. package/dist/blz-security/helpers/consts.d.ts +28 -0
  349. package/dist/blz-security/helpers/consts.js +1 -0
  350. package/dist/blz-security/helpers/utils.d.ts +82 -0
  351. package/dist/blz-security/helpers/utils.js +1 -0
  352. package/dist/blz-security/implementations/cache.d.ts +58 -0
  353. package/dist/blz-security/implementations/cache.js +1 -0
  354. package/dist/blz-security/implementations/oidc.d.ts +100 -0
  355. package/dist/blz-security/implementations/oidc.js +1 -0
  356. package/dist/blz-security/implementations/pkceCacheStore.d.ts +2 -0
  357. package/dist/blz-security/implementations/pkceCacheStore.js +1 -0
  358. package/dist/blz-security/implementations/saml.js +1 -0
  359. package/dist/blz-security/implementations/uma.d.ts +31 -0
  360. package/dist/blz-security/implementations/uma.js +1 -0
  361. package/dist/blz-security/implementations/webAuthn.js +1 -0
  362. package/dist/blz-security/implementations/wstg.js +1 -0
  363. package/dist/blz-security/index.d.ts +4 -0
  364. package/dist/blz-security/index.js +2 -0
  365. package/dist/blz-security/lab/index.js +1 -0
  366. package/dist/blz-security/middleware/HapiServerAzureAd.d.ts +26 -0
  367. package/dist/blz-security/middleware/HapiServerAzureAd.js +1 -0
  368. package/dist/blz-security/middleware/HapiServerKeycloak.d.ts +47 -0
  369. package/dist/blz-security/middleware/HapiServerKeycloak.js +1 -0
  370. package/dist/blz-security/middleware/HapiServerSimToken.d.ts +13 -0
  371. package/dist/blz-security/middleware/HapiServerSimToken.js +1 -0
  372. package/dist/blz-security/middleware/hapi.d.ts +14 -0
  373. package/dist/blz-security/middleware/hapi.js +1 -0
  374. package/dist/blz-security/middleware/hapiServer.js +1 -0
  375. package/dist/blz-security/navigationMemoryRepository.d.ts +6 -0
  376. package/dist/blz-security/navigationMemoryRepository.js +1 -0
  377. package/dist/blz-security/navigationMongoDbRepository.d.ts +15 -0
  378. package/dist/blz-security/navigationMongoDbRepository.js +1 -0
  379. package/dist/blz-security/secureUrlService.d.ts +7 -0
  380. package/dist/blz-security/secureUrlService.js +1 -0
  381. package/dist/blz-security/securityService.d.ts +72 -0
  382. package/dist/blz-security/securityService.js +1 -0
  383. package/dist/blz-security/sqlInjectionGuard.d.ts +37 -0
  384. package/dist/blz-security/sqlInjectionGuard.js +1 -0
  385. package/dist/blz-security/xssGuard.d.ts +14 -0
  386. package/dist/blz-security/xssGuard.js +1 -0
  387. package/dist/blz-strings/index.d.ts +42 -0
  388. package/dist/blz-strings/index.js +1 -0
  389. package/dist/blz-uuid/index.d.ts +1 -0
  390. package/dist/blz-uuid/index.js +1 -0
  391. package/dist/blz-yaml/index.d.ts +2 -0
  392. package/dist/blz-yaml/index.js +1 -0
  393. package/dist/index.d.ts +34 -0
  394. package/dist/index.js +1 -0
  395. package/dist/process-managers/index.d.ts +25 -0
  396. package/dist/process-managers/index.js +1 -0
  397. package/package.json +52 -41
  398. package/blz-base/health/index.js +0 -215
  399. package/blz-base/index.js +0 -1466
  400. package/blz-cache/LruCache.js +0 -44
  401. package/blz-cache/index.js +0 -29
  402. package/blz-config/index.js +0 -434
  403. package/blz-core/index.js +0 -364
  404. package/blz-cryptography/index.js +0 -54
  405. package/blz-datetimes/index.js +0 -356
  406. package/blz-file/example.dat +0 -2545
  407. package/blz-file/fileService.js +0 -205
  408. package/blz-file/index.js +0 -94
  409. package/blz-file/index.test.js +0 -31
  410. package/blz-file/lab.js +0 -33
  411. package/blz-hazelcast/index.js +0 -189
  412. package/blz-hazelcast/lib/credentials.js +0 -25
  413. package/blz-hazelcast/lib/credentialsFactory.js +0 -12
  414. package/blz-hazelcast/lib/hazelcastCache.js +0 -234
  415. package/blz-iterable/index.js +0 -446
  416. package/blz-json-schema/index.js +0 -11
  417. package/blz-jwt/index.js +0 -121
  418. package/blz-kafka/index.js +0 -522
  419. package/blz-math/index.js +0 -131
  420. package/blz-mongodb/index.js +0 -326
  421. package/blz-rds/__test__/scape.test.js +0 -58
  422. package/blz-rds/blz-rds-executor.js +0 -578
  423. package/blz-rds/blz-rds-helper.js +0 -310
  424. package/blz-rds/commands/core/add.js +0 -13
  425. package/blz-rds/commands/core/and.js +0 -18
  426. package/blz-rds/commands/core/asc.js +0 -10
  427. package/blz-rds/commands/core/avg.js +0 -10
  428. package/blz-rds/commands/core/column-ref.js +0 -8
  429. package/blz-rds/commands/core/count-distinct.js +0 -10
  430. package/blz-rds/commands/core/count.js +0 -10
  431. package/blz-rds/commands/core/decimal.js +0 -8
  432. package/blz-rds/commands/core/desc.js +0 -10
  433. package/blz-rds/commands/core/distinct.js +0 -10
  434. package/blz-rds/commands/core/divide.js +0 -11
  435. package/blz-rds/commands/core/embedded-exists.js +0 -17
  436. package/blz-rds/commands/core/embedded-select.js +0 -17
  437. package/blz-rds/commands/core/equals.js +0 -9
  438. package/blz-rds/commands/core/false.js +0 -8
  439. package/blz-rds/commands/core/greater-or-equal.js +0 -9
  440. package/blz-rds/commands/core/greater.js +0 -9
  441. package/blz-rds/commands/core/in.js +0 -9
  442. package/blz-rds/commands/core/integer.js +0 -8
  443. package/blz-rds/commands/core/is-not-null.js +0 -11
  444. package/blz-rds/commands/core/is-null-or-value.js +0 -10
  445. package/blz-rds/commands/core/is-null.js +0 -11
  446. package/blz-rds/commands/core/less-or-equal.js +0 -9
  447. package/blz-rds/commands/core/less-unary.js +0 -12
  448. package/blz-rds/commands/core/less.js +0 -9
  449. package/blz-rds/commands/core/like.js +0 -12
  450. package/blz-rds/commands/core/max.js +0 -10
  451. package/blz-rds/commands/core/min.js +0 -10
  452. package/blz-rds/commands/core/multiply.js +0 -13
  453. package/blz-rds/commands/core/not-equals.js +0 -9
  454. package/blz-rds/commands/core/not-in.js +0 -9
  455. package/blz-rds/commands/core/not.js +0 -13
  456. package/blz-rds/commands/core/null.js +0 -8
  457. package/blz-rds/commands/core/nvl.js +0 -11
  458. package/blz-rds/commands/core/or.js +0 -13
  459. package/blz-rds/commands/core/parameter.js +0 -34
  460. package/blz-rds/commands/core/remainder.js +0 -16
  461. package/blz-rds/commands/core/string.js +0 -8
  462. package/blz-rds/commands/core/subtract.js +0 -13
  463. package/blz-rds/commands/core/sum.js +0 -10
  464. package/blz-rds/commands/core/true.js +0 -8
  465. package/blz-rds/commands/core/tuple.js +0 -13
  466. package/blz-rds/commands/datetimes/add-days.js +0 -11
  467. package/blz-rds/commands/datetimes/add-hours.js +0 -11
  468. package/blz-rds/commands/datetimes/add-milliseconds.js +0 -11
  469. package/blz-rds/commands/datetimes/add-minutes.js +0 -11
  470. package/blz-rds/commands/datetimes/add-months.js +0 -11
  471. package/blz-rds/commands/datetimes/add-seconds.js +0 -11
  472. package/blz-rds/commands/datetimes/add-years.js +0 -11
  473. package/blz-rds/commands/datetimes/date-diff.js +0 -11
  474. package/blz-rds/commands/datetimes/date.js +0 -12
  475. package/blz-rds/commands/datetimes/datetime-diff.js +0 -11
  476. package/blz-rds/commands/datetimes/datetime.js +0 -15
  477. package/blz-rds/commands/datetimes/day.js +0 -10
  478. package/blz-rds/commands/datetimes/hour.js +0 -10
  479. package/blz-rds/commands/datetimes/millisecond.js +0 -10
  480. package/blz-rds/commands/datetimes/minute.js +0 -10
  481. package/blz-rds/commands/datetimes/month-text.js +0 -10
  482. package/blz-rds/commands/datetimes/month.js +0 -10
  483. package/blz-rds/commands/datetimes/now.js +0 -9
  484. package/blz-rds/commands/datetimes/second.js +0 -10
  485. package/blz-rds/commands/datetimes/subtract-days.js +0 -11
  486. package/blz-rds/commands/datetimes/subtract-hours.js +0 -11
  487. package/blz-rds/commands/datetimes/subtract-milliseconds.js +0 -11
  488. package/blz-rds/commands/datetimes/subtract-minutes.js +0 -11
  489. package/blz-rds/commands/datetimes/subtract-seconds.js +0 -11
  490. package/blz-rds/commands/datetimes/time-diff.js +0 -11
  491. package/blz-rds/commands/datetimes/time.js +0 -13
  492. package/blz-rds/commands/datetimes/today.js +0 -9
  493. package/blz-rds/commands/datetimes/week-day-text.js +0 -10
  494. package/blz-rds/commands/datetimes/week-day.js +0 -10
  495. package/blz-rds/commands/datetimes/week.js +0 -10
  496. package/blz-rds/commands/datetimes/year.js +0 -10
  497. package/blz-rds/commands/math/abs.js +0 -10
  498. package/blz-rds/commands/math/acos.js +0 -10
  499. package/blz-rds/commands/math/asin.js +0 -10
  500. package/blz-rds/commands/math/atan.js +0 -10
  501. package/blz-rds/commands/math/atan2.js +0 -11
  502. package/blz-rds/commands/math/ceil.js +0 -10
  503. package/blz-rds/commands/math/cos.js +0 -10
  504. package/blz-rds/commands/math/cosh.js +0 -10
  505. package/blz-rds/commands/math/exp.js +0 -10
  506. package/blz-rds/commands/math/floor.js +0 -10
  507. package/blz-rds/commands/math/log.js +0 -18
  508. package/blz-rds/commands/math/log10.js +0 -10
  509. package/blz-rds/commands/math/pow.js +0 -11
  510. package/blz-rds/commands/math/random.js +0 -9
  511. package/blz-rds/commands/math/round.js +0 -18
  512. package/blz-rds/commands/math/sign.js +0 -10
  513. package/blz-rds/commands/math/sin.js +0 -10
  514. package/blz-rds/commands/math/sinh.js +0 -10
  515. package/blz-rds/commands/math/sqrt.js +0 -10
  516. package/blz-rds/commands/math/tan.js +0 -10
  517. package/blz-rds/commands/math/tanh.js +0 -10
  518. package/blz-rds/commands/math/trunc.js +0 -18
  519. package/blz-rds/commands/strings/concat.js +0 -20
  520. package/blz-rds/commands/strings/contains.js +0 -12
  521. package/blz-rds/commands/strings/ends-with.js +0 -12
  522. package/blz-rds/commands/strings/index-of.js +0 -11
  523. package/blz-rds/commands/strings/is-null-or-empty.js +0 -11
  524. package/blz-rds/commands/strings/is-null-or-white-space.js +0 -11
  525. package/blz-rds/commands/strings/join.js +0 -22
  526. package/blz-rds/commands/strings/last-index-of.js +0 -11
  527. package/blz-rds/commands/strings/length.js +0 -10
  528. package/blz-rds/commands/strings/pad-left.js +0 -20
  529. package/blz-rds/commands/strings/pad-right.js +0 -20
  530. package/blz-rds/commands/strings/replace.js +0 -12
  531. package/blz-rds/commands/strings/starts-with.js +0 -12
  532. package/blz-rds/commands/strings/substring.js +0 -12
  533. package/blz-rds/commands/strings/to-lower.js +0 -10
  534. package/blz-rds/commands/strings/to-upper.js +0 -10
  535. package/blz-rds/commands/strings/trim-end.js +0 -10
  536. package/blz-rds/commands/strings/trim-start.js +0 -10
  537. package/blz-rds/commands/strings/trim.js +0 -10
  538. package/blz-rds/index.js +0 -744
  539. package/blz-rds-mysql/base.js +0 -857
  540. package/blz-rds-mysql/connection-manager.js +0 -129
  541. package/blz-rds-mysql/execute-bulk-insert.js +0 -35
  542. package/blz-rds-mysql/execute-bulk-merge.js +0 -45
  543. package/blz-rds-mysql/execute-non-query.js +0 -34
  544. package/blz-rds-mysql/execute-query.js +0 -50
  545. package/blz-rds-mysql/index.js +0 -41
  546. package/blz-rds-mysql/stored-procedure.js +0 -207
  547. package/blz-rds-mysqlx/base.js +0 -846
  548. package/blz-rds-mysqlx/connection-manager.js +0 -141
  549. package/blz-rds-mysqlx/execute-bulk-insert.js +0 -35
  550. package/blz-rds-mysqlx/execute-bulk-merge.js +0 -45
  551. package/blz-rds-mysqlx/execute-non-query.js +0 -29
  552. package/blz-rds-mysqlx/execute-query.js +0 -39
  553. package/blz-rds-mysqlx/index.js +0 -41
  554. package/blz-rds-mysqlx/stored-procedure.js +0 -179
  555. package/blz-rds-oracle/index.js +0 -539
  556. package/blz-rds-postgres/base.js +0 -861
  557. package/blz-rds-postgres/connection-manager.js +0 -225
  558. package/blz-rds-postgres/execute-bulk-insert.js +0 -81
  559. package/blz-rds-postgres/execute-bulk-merge.js +0 -93
  560. package/blz-rds-postgres/execute-non-query.js +0 -23
  561. package/blz-rds-postgres/execute-query.js +0 -37
  562. package/blz-rds-postgres/index.js +0 -41
  563. package/blz-rds-postgres/result-set.js +0 -51
  564. package/blz-rds-postgres/stored-procedure.js +0 -116
  565. package/blz-redis/index.js +0 -217
  566. package/blz-redis/lib/redisCache.js +0 -265
  567. package/blz-regex/index.js +0 -25
  568. package/blz-security/.eslintrc.js +0 -15
  569. package/blz-security/__test__/AuthorizationKpn.yaml +0 -1149
  570. package/blz-security/__test__/FinancingSetting.yaml +0 -177
  571. package/blz-security/__test__/KpnConfigPortal.yaml +0 -330
  572. package/blz-security/__test__/OrderManagement.yaml +0 -5190
  573. package/blz-security/__test__/Security.yaml +0 -128
  574. package/blz-security/__test__/autorization.test.js +0 -105
  575. package/blz-security/__test__/autorizationKpn.test.js +0 -42
  576. package/blz-security/__test__/orderManagement.test.js +0 -26
  577. package/blz-security/__test__/secureUrl.test.js +0 -79
  578. package/blz-security/__test__/solveMergeRule.test.js +0 -109
  579. package/blz-security/__test__/sqlInjectionGuard.test.js +0 -203
  580. package/blz-security/__test__/xssGuard.test.js +0 -204
  581. package/blz-security/authorizationService.js +0 -537
  582. package/blz-security/config/global.js +0 -8
  583. package/blz-security/config/welcome +0 -8
  584. package/blz-security/doc/README.md +0 -75
  585. package/blz-security/filescanner/index.js +0 -46
  586. package/blz-security/helpers/consts.js +0 -229
  587. package/blz-security/helpers/utils.js +0 -267
  588. package/blz-security/implementations/cache.js +0 -90
  589. package/blz-security/implementations/oidc.js +0 -404
  590. package/blz-security/implementations/pkceCacheStore.js +0 -23
  591. package/blz-security/implementations/saml.js +0 -10
  592. package/blz-security/implementations/uma.js +0 -63
  593. package/blz-security/implementations/webAuthn.js +0 -9
  594. package/blz-security/implementations/wstg.js +0 -72
  595. package/blz-security/index.js +0 -77
  596. package/blz-security/lab/index.js +0 -43
  597. package/blz-security/middleware/HapiServerAzureAd.js +0 -681
  598. package/blz-security/middleware/HapiServerKeycloak.js +0 -876
  599. package/blz-security/middleware/HapiServerSimToken.js +0 -286
  600. package/blz-security/middleware/hapi.js +0 -555
  601. package/blz-security/middleware/hapiServer.js +0 -1008
  602. package/blz-security/navigationMemoryRepository.js +0 -15
  603. package/blz-security/navigationMongoDbRepository.js +0 -73
  604. package/blz-security/secureUrlService.js +0 -47
  605. package/blz-security/securityService.js +0 -413
  606. package/blz-security/sqlInjectionGuard.js +0 -162
  607. package/blz-security/templates/forbidden.html +0 -0
  608. package/blz-security/templates/session-iframe-azure-ad.html +0 -7
  609. package/blz-security/templates/session-iframe.html +0 -73
  610. package/blz-security/templates/unauthorized.html +0 -1
  611. package/blz-security/xssGuard.js +0 -87
  612. package/blz-strings/index.js +0 -167
  613. package/blz-uuid/index.js +0 -7
  614. package/blz-yaml/index.js +0 -19
  615. package/index.js +0 -84
  616. package/process-managers/index.js +0 -422
  617. /package/{blz-rds-mysql → dist/blz-rds-mysql}/syntaxis.json +0 -0
  618. /package/{blz-rds-mysqlx → dist/blz-rds-mysqlx}/syntaxis.json +0 -0
  619. /package/{blz-rds-oracle → dist/blz-rds-oracle}/syntaxis.json +0 -0
  620. /package/{blz-rds-postgres → dist/blz-rds-postgres}/syntaxis.json +0 -0
  621. /package/{blz-security → dist/blz-security}/lab/ConfigurationAdmin.agent.json +0 -0
  622. /package/{blz-security → dist/blz-security}/lab/frontend.json +0 -0
  623. /package/{blz-security → dist/blz-security}/lab/result.json +0 -0
  624. /package/{blz-security → dist/blz-security}/lab/resultOnWeb.json +0 -0
  625. /package/{blz-security → dist/blz-security}/lab/rules.json +0 -0
  626. /package/{blz-security → dist/blz-security}/lab/securityRules.json +0 -0
@@ -1,876 +0,0 @@
1
- /**
2
- * @author Blazedpath Team
3
- * @implements Protecting all resources through hapi middleware
4
- * @description Hapi.js (derived from Http-API) is an open-source Node.js
5
- * framework used to build powerful and scalable web applications.
6
- * @see https://hapi.dev/api/
7
- */
8
- const Uma = require('../implementations/uma')
9
- const Jsonwebtoken = require('jsonwebtoken') // Implementations of JSON Web Tokens.
10
- const {
11
- Exception,
12
- getFullUrl,
13
- getHost,
14
- getProtocol,
15
- getPathname,
16
- getTemplate,
17
- getTokenTolerance,
18
- trace,
19
- errorResponse
20
- } = require('../helpers/utils')
21
- // HapiServer Modules
22
- const hapiYar = require('@hapi/yar');
23
- const hapiJwt = require('@hapi/jwt');
24
- const hapiCookie = require('@hapi/cookie')
25
- // Quick Http Fetch using axios
26
- const axios = require('axios');
27
- // Crypto for code_verifier in token exchange
28
- const crypto = require('crypto');
29
- // Uses Issue to cache manage and logout (generators/customs not sure why yet)
30
- const {
31
- Issuer
32
- } = require('openid-client') // OpenID Certified Relying Party.
33
- const {
34
- METADATA
35
- } = require('../helpers/consts')
36
- // Rotating key-certs, so we jwk used to routinly fetch them
37
- const jwksClient = require('jwks-rsa') // Retrieve RSA public keys from a JWKS.
38
-
39
- let contextConfig = {}
40
- let securityService = null
41
-
42
- class HapiServerKeycloak {
43
- constructor(openIdConnect, cookiesName, cache) {
44
- this.openIdConnect = openIdConnect
45
- this.COOKIE_NAMES = cookiesName
46
- this.activateTraceApiMethod = false
47
- this.queryStringLimit = null;
48
- this.securityLoginTokenExpToleranceSeconds = 3600 * 5; // Default 5 hours
49
- this.authServerConfig = null;
50
- this.authServerFullLoginUrl = null;
51
- // This cache stores locally the jwt token set for refresh and logout.
52
- this.cache = cache;
53
- // To terminate sessions
54
- this.clientOidc = null;
55
- // This client keeps a refresh of the rotating keys
56
- this.clientJwk = null;
57
- this.publicKeyFetch = null;
58
- // URL temporal hash
59
- this.securityService = null;
60
- this.securityUrlCookieKey = null;
61
- }
62
-
63
- async generateGuid() {
64
- return crypto.randomUUID();
65
- }
66
-
67
- async connect(_securityService, hapiServer, config) {
68
- contextConfig = config
69
- this.authServerConfig = contextConfig;
70
- securityService = _securityService
71
- const {
72
- authServer,
73
- activateTraceApiMethod
74
- } = config
75
- if (activateTraceApiMethod) {
76
- this.activateTraceApiMethod = activateTraceApiMethod
77
- }
78
- let oidcConfiguration = {}
79
- const stateOption = {
80
- clearInvalid: true,
81
- encoding: 'base64',
82
- isSecure: true,
83
- isHttpOnly: true,
84
- isSameSite: 'Lax',
85
- path: '/',
86
- strictHeader: true
87
- }
88
- try {
89
- if (authServer.sessionCookiesDomain) {
90
- stateOption.domain = authServer.sessionCookiesDomain
91
- }
92
- stateOption.isHttpOnly = authServer.isHttpOnlyForSessionState ?? false;
93
- hapiServer.state(this.COOKIE_NAMES.SESSION_STATE, stateOption)
94
- oidcConfiguration = await this.configuration(authServer)
95
- if (oidcConfiguration.clientOidc) {
96
- this.clientOidc = oidcConfiguration.clientOidc;
97
- }
98
- if (!authServer.scope || !authServer.scope.split(' ').some((reg) => reg === 'openid')) {
99
- authServer.scope = `openid ${authServer.scope || ''}`
100
- authServer.scope.trim();
101
- }
102
- if (authServer.tokenEndpoint && !authServer.tokenEndpoint.match(/https.*/)) {
103
- hapiServer.states.cookies[this.COOKIE_NAMES.SID].isSecure = false
104
- hapiServer.states.cookies[this.COOKIE_NAMES.SESSION_STATE].isSecure = false
105
- }
106
- trace('INFO', 'The following configuration was initialized')
107
- const securityConfiguration = Object.fromEntries(Object.entries(authServer).filter((entry) => !['clientSecret', 'PrivateKey', 'PublicKey'].includes(entry[0])))
108
- trace('INFO', oidcConfiguration.tokenEndpoint ? oidcConfiguration : securityConfiguration)
109
-
110
- // cookie specifically used for path hash
111
- this.securityUrlCookieKey = securityService.getSecureUrlCookieKey();
112
- if (this.securityUrlCookieKey) {
113
- const securityUrlCookieStateOptions = {
114
- ...stateOption,
115
- isHttpOnly: false,
116
- ttl: null,
117
- };
118
- hapiServer.state(this.securityUrlCookieKey, securityUrlCookieStateOptions);
119
- }
120
- } catch (err) {
121
- trace('ERROR', `Exception ${err.message}`)
122
- trace('ERROR', err.stack)
123
- }
124
- // set the scope
125
- const me = this
126
- // Add Plugins
127
-
128
- this.configurePlugins(hapiServer);
129
- // onPreAuth: Here we check if the jwtToken in yar, recompose the authorization header before hapi jwt module auth.
130
- // Http protocol does not redirect all headers on a 3XX code.
131
- hapiServer.ext('onPreAuth', async (request, h) => {
132
- // add cookie para lo de flavio
133
- if (this.securityUrlCookieKey){
134
- const clientId = request.state[this.securityUrlCookieKey];
135
- if (!clientId) {
136
- const securityUrlCookieKeyValue = await this.generateGuid();
137
- h.state(this.securityUrlCookieKey, securityUrlCookieKeyValue); // Set cookie
138
- }
139
- }
140
-
141
- // Retrieve token info from yar storage
142
- let tokenInfo = request.yar.get('jwtToken');
143
- if (tokenInfo) {
144
- // check if token is about to be expired or absent, if so, update
145
- let aboutToExpire = await me.tokenAboutToExpire(tokenInfo.token, 10);
146
- if (aboutToExpire) {
147
- // If refresh token is expired as well, then the user MUST re-login
148
- let isRefreshTokenExpired = await this.isRefreshTokenExpired(tokenInfo.refreshToken);
149
- let refreshTokenPresent = 'refreshToken' in tokenInfo;
150
- if (isRefreshTokenExpired && refreshTokenPresent) {
151
- // clear token from cookies and exit
152
- request.yar.get('jwtToken', true);
153
- delete request.headers.authorization; // Remove the authorization header
154
- await request.yar.commit(h);
155
- return h.continue;
156
- } else {
157
- // If refresh token is present and not expired, attempt refresh
158
- let refreshedTokens = await this.refreshToken(tokenInfo.refreshToken);
159
- // Check that this method returned a valid set of tokens
160
- if (refreshedTokens && refreshedTokens.token_type &&
161
- (refreshedTokens.id_token || refreshedTokens.access_token) && refreshedTokens.session_state &&
162
- refreshedTokens.refresh_token) {
163
- let refreshedTokenInfo = {
164
- tokenType: 'Bearer',
165
- token: refreshedTokens.id_token,
166
- tokenSubType: 'id_token',
167
- refreshToken: refreshedTokens.refresh_token
168
- };
169
- request.yar.set('jwtToken', refreshedTokenInfo);
170
- await request.yar.commit(h);
171
- tokenInfo = refreshedTokenInfo;
172
- } else {
173
- // Refresh token failed, clear and continue
174
- request.yar.get('jwtToken', true);
175
- delete request.headers.authorization;
176
- await request.yar.commit(h);
177
- return h.continue;
178
- }
179
- }
180
- }
181
- switch (tokenInfo.tokenType) {
182
- case 'Bearer':
183
- case 'bearer': {
184
- request.headers.authorization = `Bearer ${tokenInfo.token}`;
185
- break;
186
- }
187
- default:
188
- break;
189
- }
190
- }
191
- return h.continue;
192
- });
193
- hapiServer.ext('onPreResponse', async (request, h) => {
194
- const response = request.response;
195
-
196
- let authError = request.yar.get('authError', true);
197
- await request.yar.commit(h);
198
- // By this point, token refresh was already attempted in onPreAuth event, so it redirects to login on unauthorized
199
- if (response.isBoom && response.output.statusCode === 401 && !request.path.startsWith('/auth/callback') && !authError) {
200
- // Create the url query string parameters. with a random code verifier, store in yar and get the codeChallenge
201
- const codeVerifier = crypto.randomBytes(32).toString('base64url');
202
- request.yar.set('code_verifier', codeVerifier); // For PKCE auth flow
203
- request.yar.set('originalUrlPathName', me.getFullUrl(request)); // For redirect after login
204
- await request.yar.commit(h);
205
-
206
- const codeChallenge = crypto.createHash('sha256').update(codeVerifier).digest('base64url');
207
- const responseType = 'code'; // Authorization code grant
208
- const redirectUri = me.getRedirectUriPath(request, 'auth/callback');
209
- const codeChallengeMethod = 'S256'; // PKCE method
210
- const scope = (authServer.scope) ? authServer.scope.trim().replace(/\s+/g, '%20') : 'openid';
211
-
212
- const authLoginUrlWithParams = new URL(authServer.authorizationEndpoint);
213
- authLoginUrlWithParams.searchParams.set('client_id', me.authServerConfig.authServer.clientId);
214
- authLoginUrlWithParams.searchParams.set('response_type', responseType);
215
- authLoginUrlWithParams.searchParams.set('redirect_uri', redirectUri);
216
- authLoginUrlWithParams.searchParams.set('scope', scope);
217
- authLoginUrlWithParams.searchParams.set('code_challenge', codeChallenge);
218
- authLoginUrlWithParams.searchParams.set('code_challenge_method', codeChallengeMethod);
219
-
220
- // Redirect to Keycloak
221
- return h.redirect(authLoginUrlWithParams.toString()).takeover();
222
- }
223
- return h.continue;
224
- });
225
- // /auth/callback : Resolves the jwt token on a callback after the login
226
- hapiServer.route({
227
- method: 'GET',
228
- path: '/auth/callback',
229
- options: {
230
- auth: false, // Disable authentication for this route
231
- },
232
- handler: async (request, h) => {
233
- const authCode = request.query.code;
234
- if (!authCode) {
235
- return h.response('Authorization code missing').code(400);
236
- }
237
- try {
238
- // Grab the code verifier
239
- let codeVerifier = request.yar.get('code_verifier', true);
240
- let tokenResponse = await axios.post(
241
- me.authServerConfig.authServer.tokenEndpoint,
242
- new URLSearchParams({
243
- grant_type: 'authorization_code',
244
- client_id: me.authServerConfig.authServer.clientId,
245
- client_secret: me.authServerConfig.authServer.clientSecret, // If required
246
- code: authCode,
247
- redirect_uri: me.getRedirectUriPath(request, 'auth/callback'),
248
- code_verifier: codeVerifier
249
- }).toString(), {
250
- headers: {
251
- 'Content-Type': 'application/x-www-form-urlencoded',
252
- },
253
- }
254
- );
255
- if (!tokenResponse.statusText === 'OK') {
256
- throw new Error('Failed to exchange code for tokens');
257
- }
258
- let obtainedTokens = {};
259
- obtainedTokens.tokenType = 'Bearer';
260
- if (tokenResponse.data.id_token) {
261
- obtainedTokens.token = tokenResponse.data.id_token;
262
- obtainedTokens.tokenSubType = 'id_token';
263
- } else {
264
- obtainedTokens.token = tokenResponse.data.access_token;
265
- obtainedTokens.tokenSubType = 'access_token';
266
- }
267
- obtainedTokens.refreshToken = tokenResponse.data.refresh_token;
268
-
269
- let originalUrlPathName = request.yar.get('originalUrlPathName') ?? '/'
270
- // Set session state
271
- const sessionState = request.query.session_state;
272
- h.state(this.COOKIE_NAMES.SESSION_STATE, sessionState);
273
-
274
- // Store the JWT token in the `Authorization` header or a cookie
275
- switch (obtainedTokens.tokenType) {
276
- case 'Bearer':
277
- case 'bearer': {
278
- request.yar.set('jwtToken', obtainedTokens);
279
- await request.yar.commit(h);
280
- return h.redirect(originalUrlPathName).takeover();
281
- }
282
- default: {
283
- break;
284
- }
285
- }
286
- return h.continue; // Continue in case no token_type -> no auth header configured
287
- } catch (error) {
288
- request.yar.set('authError', false);
289
- await request.yar.commit(h);
290
- console.error('Failed to exchange code for token:', error.response?.data || error.message);
291
- return h.response('Failed to authenticate').code(500).takeover();
292
- }
293
- },
294
- });
295
- // /get-authorization
296
- hapiServer.route({
297
- method: 'GET',
298
- path: '/get-authorization',
299
- handler: async (request, h) => {
300
- try {
301
- const {
302
- session_state: ckSessionState
303
- } = request.state
304
- if (!ckSessionState) {
305
- throw new Exception("Keycloack get-authorization: Session cookie doesn't exist.", 'CookiesError', 404)
306
- }
307
- const tokenSet = await me.openIdConnect.tokenSet()
308
- const tokens = await tokenSet.tokens(ckSessionState)
309
- const uma = await Uma.permission()
310
- const token = await uma.ticket({
311
- tokenUrl: authServer.tokenEndpoint || authServer.tokenUrl,
312
- token: tokens.access_token,
313
- audience: authServer.clientId
314
- })
315
- const sourceData = Jsonwebtoken.decode(token.access_token)
316
- return h.response(JSON.stringify(sourceData.authorization)).takeover()
317
- } catch (err) {
318
- return errorResponse(h, err, 401)
319
- }
320
- }
321
- })
322
- // /get-security-rules
323
- hapiServer.route({
324
- method: 'GET',
325
- path: '/get-security-rules',
326
- handler: async (request, h) => {
327
- try {
328
- const securityRules = await securityService.getFrontendSecurityRules(request)
329
- return h.response(JSON.stringify(securityRules)).takeover()
330
- } catch (err) {
331
- return errorResponse(h, err, 401)
332
- }
333
- }
334
- })
335
- // /get-permissions
336
- hapiServer.route({
337
- method: 'GET',
338
- path: '/get-permissions',
339
- handler: async (request, h) => {
340
- try {
341
- const permissions = await securityService.getPermissions()
342
- return h.response(JSON.stringify(permissions)).takeover()
343
- } catch (err) {
344
- return errorResponse(h, err, 401)
345
- }
346
- }
347
- })
348
-
349
- hapiServer.route({
350
- method: 'GET',
351
- path: '/check-authorize',
352
- handler: async (request, h) => {
353
- try {
354
- const resourcePath = request.query.path;
355
- const action = request.query.action;
356
- const roles = request.query.roles;
357
- const domains = request.query.domains;
358
- let parsedRoles;
359
- if (Array.isArray(roles)) {
360
- parsedRoles = roles;
361
- } else if (typeof roles === 'string') {
362
- parsedRoles = roles.split(',').map(r => r.trim());
363
- } else {
364
- parsedRoles = [];
365
- }
366
- let parsedDomains;
367
- if (Array.isArray(domains)) {
368
- parsedDomains = domains;
369
- } else if (typeof domains === 'string') {
370
- parsedDomains = domains.split(',').map(d => d.trim());
371
- } else {
372
- parsedDomains = [];
373
- }
374
- const result = await securityService.checkAuthorize(
375
- resourcePath,
376
- action,
377
- parsedRoles,
378
- parsedDomains
379
- );
380
- return h.response(JSON.stringify(result)).takeover()
381
- } catch (err) {
382
- return errorResponse(h, err, 401)
383
- }
384
- }
385
- })
386
-
387
- // /get-user-info
388
- hapiServer.route({
389
- method: 'GET',
390
- path: '/get-user-info',
391
- handler: async (request, h) => {
392
- try {
393
- const userInfo = await securityService.getUserInfo(request)
394
- return h
395
- .response(JSON.stringify(userInfo))
396
- .takeover()
397
- } catch (err) {
398
- return errorResponse(h, err, 500)
399
- }
400
- }
401
- })
402
- // /logout
403
- hapiServer.route({
404
- path: '/logout',
405
- method: 'GET',
406
- options: {
407
- auth: false, // Disable authentication for this route TODO:
408
- },
409
- handler: async (request, h) => {
410
- try {
411
- const ckSessionState = request.state[this.COOKIE_NAMES.SESSION_STATE]
412
- request.yar.clear('jwtToken');
413
- await request.yar.commit(h);
414
- let endSessionUrl = await me.endSessionUrl(me.getRedirectUri(request), me.clientOidc);
415
- return h
416
- .response()
417
- .unstate(this.COOKIE_NAMES.SID)
418
- .unstate(this.COOKIE_NAMES.SESSION_STATE)
419
- .unstate(this.COOKIE_NAMES.AUTH_TOKEN)
420
- .redirect(endSessionUrl)
421
- .takeover()
422
- } catch (err) {
423
- return errorResponse(h, err, 500)
424
- }
425
- }
426
- })
427
- // /invalid-session
428
- hapiServer.route({
429
- path: '/invalid-session',
430
- method: 'GET',
431
- handler: async (request, h) => {
432
- try {
433
- const endSessionUrl = await me.openIdConnect.endSessionUrl({
434
- redirectUri: this.getRedirectUri(request),
435
- sessionState: request.state[this.COOKIE_NAMES.SESSION_STATE]
436
- })
437
- return h
438
- .response()
439
- .unstate(this.COOKIE_NAMES.SID)
440
- .unstate(this.COOKIE_NAMES.SESSION_STATE)
441
- .redirect(endSessionUrl)
442
- .takeover()
443
- } catch (err) {
444
- return errorResponse(h, err, 500)
445
- }
446
- }
447
- })
448
- // /check-session-iframe.html
449
- hapiServer.route({
450
- path: '/check-session-iframe.html',
451
- method: 'GET',
452
- handler: async (_request, h) => {
453
- try {
454
- let content = '<html/>'
455
- if (authServer && authServer.checkSessionIframe) {
456
- const {
457
- checkSessionIframe: sessionIframeUrl,
458
- clientId,
459
- sessionCookiesPrefix
460
- } = authServer
461
- if (sessionIframeUrl && sessionIframeUrl.includes('https://')) {
462
- trace('INFO', `Session management url: ${sessionIframeUrl}`)
463
- content = getTemplate('session-iframe', {
464
- sessionIframeUrl,
465
- clientId,
466
- sessionCookiesPrefix: sessionCookiesPrefix || ''
467
- })
468
- } else {
469
- trace('WARN', 'For session management, it is necessary to get the value from a cookie called session_state, and as a good practice, it should have reached a secure context [TLS].')
470
- }
471
- }
472
- return h
473
- .response(content)
474
- .header('Content-Type', 'text/html')
475
- } catch (err) {
476
- return errorResponse(h, err, 500)
477
- }
478
- }
479
- });
480
- // /check-session
481
- hapiServer.route({
482
- path: '/check-session',
483
- options: {
484
- auth: false
485
- },
486
- method: 'GET',
487
- handler: async (request, h) => {
488
- let tokenInfo = request.yar.get('jwtToken');
489
- let tokenIsExpired = { expired: false }
490
- if (tokenInfo) {
491
- // check if refresh token is about to be expired
492
- tokenIsExpired.expired = await this.tokenAboutToExpire(tokenInfo.refreshToken, 0.5);
493
- if (tokenIsExpired.expired) {
494
- tokenIsExpired.redirectUrl = await this.getFullKeycloakLoginUri(request, h)
495
- request.yar.clear('jwtToken');
496
- request.yar.clear('userRelog');
497
- }
498
- }
499
- return h.response(tokenIsExpired);
500
- }
501
- });
502
- }
503
- // this function takes h, because i need to set yar storage, and avoid overprocessing
504
- async getFullKeycloakLoginUri(request, h) {
505
- const codeVerifier = crypto.randomBytes(32).toString('base64url');
506
- request.yar.set('code_verifier', codeVerifier); // For PKCE auth flow
507
- request.yar.set('originalUrlPathName', this.getBaseUrl(request) ); // For redirect after login
508
- await request.yar.commit(h);
509
-
510
- const responseType = 'code'; // Authorization code grant
511
- const redirectUri = this.getRedirectUriPath(request, 'auth/callback');
512
- const scope = this.authServerConfig.authServer.scope;
513
- const codeChallenge = crypto.createHash('sha256').update(codeVerifier).digest('base64url');
514
- const codeChallengeMethod = 'S256'; // PKCE method
515
-
516
- const authLoginUrlWithParams = new URL(this.authServerConfig.authServer.authorizationEndpoint);
517
- authLoginUrlWithParams.searchParams.set('client_id', this.authServerConfig.authServer.clientId);
518
- authLoginUrlWithParams.searchParams.set('response_type', responseType);
519
- authLoginUrlWithParams.searchParams.set('redirect_uri', redirectUri);
520
- authLoginUrlWithParams.searchParams.set('scope', scope);
521
- authLoginUrlWithParams.searchParams.set('code_challenge', codeChallenge);
522
- authLoginUrlWithParams.searchParams.set('code_challenge_method', codeChallengeMethod);
523
- return authLoginUrlWithParams.toString();
524
- }
525
- getRedirectUri(request) {
526
- return contextConfig.authServer.redirectUri || getFullUrl(request)
527
- }
528
- getRedirectUriPath(request, redirectPath) {
529
- const baseUrl = this.getBaseUrl(request);
530
- const path = (redirectPath) ?? this.getPathname(request);
531
- let url = new URL(path, baseUrl);
532
-
533
- // If the hostname is not localhost, force HTTPS
534
- if (url.hostname !== 'localhost') {
535
- url.protocol = 'https:';
536
- }
537
- return url.toString();
538
- }
539
-
540
- getFullUrl(request) {
541
- return `${getProtocol(request)}://${getHost(request)}${getPathname(request)}`
542
- }
543
- getBaseUrl(request) {
544
- return `${getProtocol(request)}://${getHost(request)}/`
545
- }
546
- async authenticate(h, scope) {
547
- const {
548
- request
549
- } = h
550
- const pkceCode = await this.openIdConnect.pkceCode()
551
- const requestUrl = getFullUrl(request)
552
- let oidcMetadata = await this.openIdConnect.oidcMetadata()
553
- if (!oidcMetadata || !oidcMetadata.openid_configuration) {
554
- oidcMetadata = await this.configuration(contextConfig.authServer)
555
- }
556
- if (requestUrl.match(new RegExp(/^(https?:\/{2}.*):?(\d*)/.source + getHost(request) + /\/?$/.source))) {
557
- const authorizationUrl = await this.openIdConnect.authorizationUrl({
558
- scope,
559
- redirectUri: this.getRedirectUri(request),
560
- pkceCode
561
- })
562
- trace('INFO', `Authenticate redirecting to ${authorizationUrl}`)
563
- return h
564
- .response()
565
- .state(this.COOKIE_NAMES.SID, pkceCode)
566
- .redirect(authorizationUrl)
567
- .takeover()
568
- } else if (getPathname(request) === '/logout') {
569
- return h.continue
570
- } else {
571
- const tokenSet = await this.openIdConnect.tokenSet()
572
- const {
573
- state
574
- } = request
575
- if (tokenSet && state && state[this.COOKIE_NAMES.SESSION_STATE]) {
576
- const tokens = await tokenSet.tokens(state[this.COOKIE_NAMES.SESSION_STATE])
577
- if (!tokens || tokens.refresh_expires_in <= getTokenTolerance(0)) {
578
- throw new Exception('Error when getting token', 'ExpirationError', 403)
579
- }
580
- return h.continue
581
- } else {
582
- return h
583
- .response()
584
- .code(401)
585
- .takeover()
586
- }
587
- }
588
- }
589
- async configurePlugins(server) {
590
- // Hapi Yar module, saves info in the cookies across session calls
591
- const hapiYarPassword = process.env.blz_hapiYarPassword || 'your-super-secure-yar-atleast-32-bytes-password';
592
- await server.register({
593
- plugin: hapiYar,
594
- options: {
595
- cookieOptions: {
596
- password: hapiYarPassword,
597
- isSecure: true, // Use true in production
598
- isHttpOnly: true,
599
- isSameSite: 'Lax', // 'Strict', 'Lax', or 'None'
600
- clearInvalid: true,
601
- ignoreErrors: true
602
- },
603
- storeBlank: false, // Prevent saving blank sessions
604
- maxCookieSize: 0 // Use server-side storage for larger payloads
605
- }
606
- });
607
- // Register @hapi/jwt plugin
608
- await server.register(hapiJwt);
609
-
610
- // Use rotating certificates with keysFetch function for jwt module
611
- this.startupJwksClient();
612
- // set up the function in this.publickKeyFetch
613
- this.startupPublickKeyFetch();
614
-
615
- // Define the auth strategy
616
- server.auth.strategy('jwtAuth', 'jwt', {
617
- keys: this.publicKeyFetch,
618
- verify: {
619
- aud: this.authServerConfig.authServer.audience ?? false,
620
- iss: this.authServerConfig.authServer.issuer,
621
- exp: true,
622
- sub: false
623
- },
624
- validate: false
625
- });
626
-
627
- // Register the @hapi/cookie plugin
628
- await server.register(hapiCookie);
629
-
630
- const hapiCookiePassword = process.env.blz_hapiCookiePassword || 'supersecretpasswordmustbeatleast32characterslong';
631
- // Define the cookie-based auth strategy
632
- server.auth.strategy('cookieAuth', 'cookie', {
633
- cookie: {
634
- name: 'sid', // Primary session cookie
635
- password: hapiCookiePassword, // Encryption key
636
- isSecure: true, // Should be true in production
637
- isHttpOnly: true, // Prevents client-side JavaScript access
638
- isSameSite: 'Lax', // Protects against CSRF
639
- },
640
- keepAlive: true, // automatically sets the session cookie after validation to extend the current session for a new ttl duration. Defaults to false.
641
- redirectTo: false, //function(request) {}, // Redirect if authentication fails
642
- });
643
- // Set default auth strategy to try both JWT and cookies
644
- server.auth.default({
645
- strategies: ['jwtAuth', 'cookieAuth'], // Try JWT first, then Cookie
646
- });
647
- }
648
-
649
- async configuration(authServer) {
650
- if (!authServer) {
651
- throw new Exception('Error when getting configuration attributes ')
652
- }
653
- const {
654
- clientId,
655
- clientSecret
656
- } = authServer
657
- await this.openIdConnect.client({
658
- clientId,
659
- clientSecret
660
- })
661
- if (authServer.openIdConfigurationEndpoint) {
662
- return await this.openIdConnect.configuration(authServer.openIdConfigurationEndpoint)
663
- } else {
664
- // If configuration uri does not exist but the auth server form has been filled in.
665
- return await this.openIdConnect.configuration({
666
- issuer: authServer.issuer,
667
- authorization_endpoint: authServer.authorizationEndpoint,
668
- token_endpoint: authServer.tokenEndpoint,
669
- userinfo_endpoint: authServer.userinfoEndpoint,
670
- end_session_endpoint: authServer.endSessionEndpoint,
671
- jwks_uri: authServer.jwksUri
672
- })
673
- }
674
- }
675
-
676
- async endSessionUrl(redirectUri, clientOidc) {
677
- redirectUri = redirectUri.replace(/logout|invalid-session/gmi, '')
678
- // Log off specific session.
679
- if (!clientOidc) {
680
- throw new Error('Unable to get configuration from identity provider', 'ConfigurationError', 404);
681
- }
682
- return clientOidc.endSessionUrl({
683
- post_logout_redirect_uri: redirectUri
684
- })
685
- }
686
- oidcMetadataKey() {
687
- return this.authServerConfig.authServer.sessionCookiesDomain || 'oidcMetadata'
688
- }
689
- async configuration(context) {
690
- let metadata = await this.cache.get(this.oidcMetadataKey())
691
- if (typeof context === 'string' && !context.match(/(https?:\/\/.*):?(\d*)\/?(.*)/gi)) {
692
- throw new Exception('Wrong OpenId Provider configuration URI entered', 'AttributeError', 403)
693
- }
694
- if (!metadata || !metadata.issuer) {
695
- if (context.issuer) {
696
- metadata = {
697
- ...(metadata || {}),
698
- ...context
699
- }
700
- } else {
701
- metadata = metadata || {}
702
- metadata.openid_configuration = context
703
- metadata = {
704
- ...metadata,
705
- ...(await Issuer.discover(context.issuer))
706
- } // Discover an issuer configuration, must be an url
707
- }
708
- await this.cache.set(this.oidcMetadataKey(), metadata, 864e5) // 1 day of cache
709
- }
710
- return new Iss(metadata)
711
- }
712
- async refreshToken(refreshToken) {
713
- // Make a POST request to Keycloak to refresh the token
714
- const response = await axios.post(this.authServerConfig.authServer.tokenEndpoint,
715
- new URLSearchParams({
716
- grant_type: 'refresh_token',
717
- client_id: this.authServerConfig.authServer.clientId,
718
- client_secret: this.authServerConfig.authServer.clientSecret,
719
- refresh_token: refreshToken,
720
- }).toString(), {
721
- headers: {
722
- 'Content-Type': 'application/x-www-form-urlencoded',
723
- },
724
- }
725
- );
726
-
727
- if (!(response.status === 200)) {
728
- const errorResponse = await response.json();
729
- console.error('Error refreshing token:', errorResponse);
730
- return errorResponse;
731
- }
732
- // Refresh token response may change from time to time, here are two possible responses
733
- try {
734
- return await response.json(); // all tokens refershed
735
-
736
- } catch (error) {
737
-
738
- }
739
- try {
740
- return response.data;
741
- } catch {
742
-
743
- }
744
-
745
- }
746
- async decodeJwtToken(token) {
747
- const decodedToken = hapiJwt.token.decode(token);
748
- return decodedToken;
749
- }
750
- async tokenAboutToExpire(token, minutesBeforeExpiration = 0) {
751
- if (!token)
752
- return true;
753
- const decodedToken = hapiJwt.token.decode(token);
754
- const expirationTime = decodedToken.decoded.payload.exp * 1000; // Convert to milliseconds
755
- const currentTime = Date.now();
756
- const expirationThreshold = minutesBeforeExpiration * 60 * 1000; // Convert minutes to milliseconds
757
-
758
- // Check if the token is expired or about to expire within the specified minutes
759
- const isAboutToExpire = expirationTime - currentTime <= expirationThreshold;
760
- return isAboutToExpire;
761
- }
762
- async isRefreshTokenExpired(refreshToken) {
763
- try {
764
- // Decode the token without verifying its signature.
765
- const decodedRefreshToken = hapiJwt.token.decode(refreshToken);
766
- // Get the current timestamp (in seconds).
767
- const currentTimestamp = Math.floor(Date.now() / 1000);
768
-
769
- if (decodedRefreshToken && decodedRefreshToken.decoded && decodedRefreshToken.decoded.payload && decodedRefreshToken.decoded.payload.exp) {
770
- return (decodedRefreshToken.decoded.payload.exp < currentTimestamp)
771
- } else
772
- return true;
773
- } catch (error) {
774
- // if there is an error treat as if expired, so a re-login is prompted
775
- console.error('Failed to decode the token: Invalid Refresh token format', error);
776
- return true;
777
- }
778
- }
779
-
780
- async startupJwksClient() {
781
- // Rotating certificates, prepare for the hapi jwt module
782
- this.clientJwk = jwksClient({
783
- jwksUri: this.authServerConfig.authServer.jwksUri,
784
- cache: true, // Cache signing keys to avoid frequent network calls
785
- rateLimit: true, // Rate limit the number of requests to the JWKS URI
786
- jwksRequestsPerMinute: 10, // Limit to 10 requests per minute
787
- });
788
- }
789
- async startupPublickKeyFetch() {
790
- // Function to get the signing key
791
- const getKey = async (kid) => {
792
- return new Promise((resolve, reject) => {
793
- this.clientJwk.getSigningKey(kid, (err, key) => {
794
- if (err) {
795
- return reject(err);
796
- }
797
- const signingKey = key.getPublicKey(); // Public key for signature verification
798
- resolve(signingKey);
799
- });
800
- });
801
- };
802
- this.publicKeyFetch = async (artifacts) => {
803
- const kid = artifacts.decoded.header.kid; // Extract 'kid' from JWT header
804
- return getKey(kid); // Fetch the corresponding public key
805
- }
806
- }
807
- }
808
-
809
- class Iss {
810
- /**
811
- * @constructor
812
- * @param {Object} metadata
813
- */
814
- constructor(metadata) {
815
- if (!metadata.id_token_signing_alg_values_supported) {
816
- metadata.id_token_signing_alg_values_supported = ['RS256']
817
- }
818
- if (!metadata.response_types_supported) {
819
- metadata.response_types_supported = ['code', 'none', 'id_token', 'token', 'id_token token', 'code id_token', 'code token', 'code id_token token']
820
- }
821
- if (!metadata.subject_types_supported) {
822
- metadata.subject_types_supported = ['public']
823
- }
824
- const claimsRequired = METADATA.filter(({
825
- type
826
- }) => type === 'REQUIRED');
827
- const missingClaims = [];
828
-
829
- for (const claim of claimsRequired) {
830
- const normalizedToCamelClaimName = claim.name.toLowerCase().replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
831
- const attributeCamelCase = metadata[normalizedToCamelClaimName]; // Directly access metadata
832
- const attributeSnakeCase = metadata[claim.name]; // Directly access metadata
833
- if (!attributeSnakeCase && !attributeCamelCase) {
834
- missingClaims.push(claim);
835
- }
836
- }
837
-
838
- if (missingClaims.length > 0) {
839
- console.error(JSON.stringify(missingClaims));
840
- throw new Error(JSON.stringify(missingClaims));
841
- }
842
-
843
- // Issuer needs the metadata in snake_case
844
- const issuer = metadata.Client ? metadata : new Issuer(this.#camelToSnakeCase(metadata))
845
- // Client instance for the authorization server of that issuer.
846
- const clientPayload = {
847
- client_id: metadata.clientId,
848
- response_type: 'code'
849
- }
850
- if (metadata.clientSecret) {
851
- clientPayload.client_secret = metadata.clientSecret
852
- }
853
- this.clientOidc = new issuer.Client(clientPayload);
854
- }
855
- #camelToSnakeCase(obj) {
856
- const toSnakeCase = str => str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);
857
-
858
- if (typeof obj !== 'object' || obj === null) return obj;
859
-
860
- if (Array.isArray(obj)) {
861
- return obj.map(item => this.#camelToSnakeCase(item));
862
- }
863
-
864
- return Object.entries(obj).reduce((acc, [key, value]) => {
865
- const newKey = toSnakeCase(key);
866
- acc[newKey] = typeof value === 'object' && value !== null ?
867
- this.#camelToSnakeCase(value) :
868
- value;
869
- return acc;
870
- }, {});
871
- }
872
- }
873
-
874
- module.exports = {
875
- HapiServerKeycloak
876
- }