@ohos-ports/confluentinc-kafka-javascript 1.10.0-beta.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 (628) hide show
  1. package/CHANGELOG.md +457 -0
  2. package/LICENSE.kafkajs +31 -0
  3. package/LICENSE.node-rdkafka +25 -0
  4. package/LICENSE.txt +20 -0
  5. package/README.md +133 -0
  6. package/binding.gyp +184 -0
  7. package/build/Release/confluent-kafka-javascript.node +0 -0
  8. package/build/deps/librdkafka++.so.1 +0 -0
  9. package/build/deps/librdkafka.Makefile +6 -0
  10. package/build/deps/librdkafka.so.1 +0 -0
  11. package/build/deps/librdkafka.target.mk +55 -0
  12. package/deps/librdkafka/.clang-format +136 -0
  13. package/deps/librdkafka/.clang-format-cpp +103 -0
  14. package/deps/librdkafka/.dir-locals.el +10 -0
  15. package/deps/librdkafka/.formatignore +35 -0
  16. package/deps/librdkafka/.gdbmacros +19 -0
  17. package/deps/librdkafka/CHANGELOG.md +2477 -0
  18. package/deps/librdkafka/CMakeLists.txt +291 -0
  19. package/deps/librdkafka/CODE_OF_CONDUCT.md +46 -0
  20. package/deps/librdkafka/CONFIGURATION.md +212 -0
  21. package/deps/librdkafka/CONTRIBUTING.md +431 -0
  22. package/deps/librdkafka/Doxyfile +2375 -0
  23. package/deps/librdkafka/INTRODUCTION.md +2752 -0
  24. package/deps/librdkafka/LICENSE +26 -0
  25. package/deps/librdkafka/LICENSE.cjson +22 -0
  26. package/deps/librdkafka/LICENSE.crc32c +28 -0
  27. package/deps/librdkafka/LICENSE.fnv1a +18 -0
  28. package/deps/librdkafka/LICENSE.hdrhistogram +27 -0
  29. package/deps/librdkafka/LICENSE.lz4 +26 -0
  30. package/deps/librdkafka/LICENSE.murmur2 +25 -0
  31. package/deps/librdkafka/LICENSE.nanopb +22 -0
  32. package/deps/librdkafka/LICENSE.opentelemetry +203 -0
  33. package/deps/librdkafka/LICENSE.pycrc +23 -0
  34. package/deps/librdkafka/LICENSE.queue +31 -0
  35. package/deps/librdkafka/LICENSE.regexp +5 -0
  36. package/deps/librdkafka/LICENSE.snappy +36 -0
  37. package/deps/librdkafka/LICENSE.tinycthread +26 -0
  38. package/deps/librdkafka/LICENSE.wingetopt +49 -0
  39. package/deps/librdkafka/LICENSES.txt +625 -0
  40. package/deps/librdkafka/Makefile +125 -0
  41. package/deps/librdkafka/README.md +201 -0
  42. package/deps/librdkafka/README.win32 +26 -0
  43. package/deps/librdkafka/STATISTICS.md +624 -0
  44. package/deps/librdkafka/configure +214 -0
  45. package/deps/librdkafka/configure.self +341 -0
  46. package/deps/librdkafka/dev-conf.sh +123 -0
  47. package/deps/librdkafka/lds-gen.py +73 -0
  48. package/deps/librdkafka/mainpage.doxy +40 -0
  49. package/deps/librdkafka/mklove/Makefile.base +329 -0
  50. package/deps/librdkafka/mklove/modules/configure.atomics +144 -0
  51. package/deps/librdkafka/mklove/modules/configure.base +2484 -0
  52. package/deps/librdkafka/mklove/modules/configure.builtin +70 -0
  53. package/deps/librdkafka/mklove/modules/configure.cc +186 -0
  54. package/deps/librdkafka/mklove/modules/configure.cxx +8 -0
  55. package/deps/librdkafka/mklove/modules/configure.fileversion +65 -0
  56. package/deps/librdkafka/mklove/modules/configure.gitversion +29 -0
  57. package/deps/librdkafka/mklove/modules/configure.good_cflags +18 -0
  58. package/deps/librdkafka/mklove/modules/configure.host +132 -0
  59. package/deps/librdkafka/mklove/modules/configure.lib +49 -0
  60. package/deps/librdkafka/mklove/modules/configure.libcurl +99 -0
  61. package/deps/librdkafka/mklove/modules/configure.libsasl2 +36 -0
  62. package/deps/librdkafka/mklove/modules/configure.libssl +147 -0
  63. package/deps/librdkafka/mklove/modules/configure.libzstd +58 -0
  64. package/deps/librdkafka/mklove/modules/configure.parseversion +95 -0
  65. package/deps/librdkafka/mklove/modules/configure.pic +16 -0
  66. package/deps/librdkafka/mklove/modules/configure.socket +20 -0
  67. package/deps/librdkafka/mklove/modules/configure.zlib +61 -0
  68. package/deps/librdkafka/mklove/modules/patches/README.md +8 -0
  69. package/deps/librdkafka/mklove/modules/patches/libcurl.0000-no-runtime-linking-check.patch +11 -0
  70. package/deps/librdkafka/mklove/modules/patches/libssl.0000-osx-rand-include-fix-OpenSSL-PR16409.patch +56 -0
  71. package/deps/librdkafka/service.yml +182 -0
  72. package/deps/librdkafka/src/CMakeLists.txt +379 -0
  73. package/deps/librdkafka/src/Makefile +105 -0
  74. package/deps/librdkafka/src/README.lz4.md +30 -0
  75. package/deps/librdkafka/src/cJSON.c +3191 -0
  76. package/deps/librdkafka/src/cJSON.h +306 -0
  77. package/deps/librdkafka/src/crc32c.c +430 -0
  78. package/deps/librdkafka/src/crc32c.h +38 -0
  79. package/deps/librdkafka/src/generate_proto.sh +66 -0
  80. package/deps/librdkafka/src/librdkafka_cgrp_synch.png +0 -0
  81. package/deps/librdkafka/src/lz4.c +2727 -0
  82. package/deps/librdkafka/src/lz4.h +842 -0
  83. package/deps/librdkafka/src/lz4frame.c +2078 -0
  84. package/deps/librdkafka/src/lz4frame.h +692 -0
  85. package/deps/librdkafka/src/lz4frame_static.h +47 -0
  86. package/deps/librdkafka/src/lz4hc.c +1631 -0
  87. package/deps/librdkafka/src/lz4hc.h +413 -0
  88. package/deps/librdkafka/src/nanopb/pb.h +917 -0
  89. package/deps/librdkafka/src/nanopb/pb_common.c +388 -0
  90. package/deps/librdkafka/src/nanopb/pb_common.h +49 -0
  91. package/deps/librdkafka/src/nanopb/pb_decode.c +1727 -0
  92. package/deps/librdkafka/src/nanopb/pb_decode.h +193 -0
  93. package/deps/librdkafka/src/nanopb/pb_encode.c +1000 -0
  94. package/deps/librdkafka/src/nanopb/pb_encode.h +185 -0
  95. package/deps/librdkafka/src/opentelemetry/common.pb.c +32 -0
  96. package/deps/librdkafka/src/opentelemetry/common.pb.h +170 -0
  97. package/deps/librdkafka/src/opentelemetry/metrics.options +2 -0
  98. package/deps/librdkafka/src/opentelemetry/metrics.pb.c +67 -0
  99. package/deps/librdkafka/src/opentelemetry/metrics.pb.h +966 -0
  100. package/deps/librdkafka/src/opentelemetry/resource.pb.c +12 -0
  101. package/deps/librdkafka/src/opentelemetry/resource.pb.h +58 -0
  102. package/deps/librdkafka/src/queue.h +850 -0
  103. package/deps/librdkafka/src/rd.h +592 -0
  104. package/deps/librdkafka/src/rdaddr.c +255 -0
  105. package/deps/librdkafka/src/rdaddr.h +202 -0
  106. package/deps/librdkafka/src/rdatomic.h +262 -0
  107. package/deps/librdkafka/src/rdavg.h +260 -0
  108. package/deps/librdkafka/src/rdavl.c +210 -0
  109. package/deps/librdkafka/src/rdavl.h +250 -0
  110. package/deps/librdkafka/src/rdbase64.c +200 -0
  111. package/deps/librdkafka/src/rdbase64.h +43 -0
  112. package/deps/librdkafka/src/rdbuf.c +1884 -0
  113. package/deps/librdkafka/src/rdbuf.h +375 -0
  114. package/deps/librdkafka/src/rdcrc32.c +114 -0
  115. package/deps/librdkafka/src/rdcrc32.h +170 -0
  116. package/deps/librdkafka/src/rddl.c +179 -0
  117. package/deps/librdkafka/src/rddl.h +43 -0
  118. package/deps/librdkafka/src/rdendian.h +175 -0
  119. package/deps/librdkafka/src/rdfloat.h +67 -0
  120. package/deps/librdkafka/src/rdfnv1a.c +113 -0
  121. package/deps/librdkafka/src/rdfnv1a.h +35 -0
  122. package/deps/librdkafka/src/rdgz.c +120 -0
  123. package/deps/librdkafka/src/rdgz.h +46 -0
  124. package/deps/librdkafka/src/rdhdrhistogram.c +721 -0
  125. package/deps/librdkafka/src/rdhdrhistogram.h +87 -0
  126. package/deps/librdkafka/src/rdhttp.c +831 -0
  127. package/deps/librdkafka/src/rdhttp.h +101 -0
  128. package/deps/librdkafka/src/rdinterval.h +177 -0
  129. package/deps/librdkafka/src/rdkafka.c +7287 -0
  130. package/deps/librdkafka/src/rdkafka.h +11795 -0
  131. package/deps/librdkafka/src/rdkafka_admin.c +10165 -0
  132. package/deps/librdkafka/src/rdkafka_admin.h +658 -0
  133. package/deps/librdkafka/src/rdkafka_assignment.c +1282 -0
  134. package/deps/librdkafka/src/rdkafka_assignment.h +73 -0
  135. package/deps/librdkafka/src/rdkafka_assignor.c +1800 -0
  136. package/deps/librdkafka/src/rdkafka_assignor.h +402 -0
  137. package/deps/librdkafka/src/rdkafka_aux.c +409 -0
  138. package/deps/librdkafka/src/rdkafka_aux.h +174 -0
  139. package/deps/librdkafka/src/rdkafka_background.c +222 -0
  140. package/deps/librdkafka/src/rdkafka_broker.c +6736 -0
  141. package/deps/librdkafka/src/rdkafka_broker.h +851 -0
  142. package/deps/librdkafka/src/rdkafka_buf.c +543 -0
  143. package/deps/librdkafka/src/rdkafka_buf.h +1525 -0
  144. package/deps/librdkafka/src/rdkafka_cert.c +576 -0
  145. package/deps/librdkafka/src/rdkafka_cert.h +62 -0
  146. package/deps/librdkafka/src/rdkafka_cgrp.c +8310 -0
  147. package/deps/librdkafka/src/rdkafka_cgrp.h +589 -0
  148. package/deps/librdkafka/src/rdkafka_conf.c +5177 -0
  149. package/deps/librdkafka/src/rdkafka_conf.h +746 -0
  150. package/deps/librdkafka/src/rdkafka_confval.h +97 -0
  151. package/deps/librdkafka/src/rdkafka_coord.c +623 -0
  152. package/deps/librdkafka/src/rdkafka_coord.h +132 -0
  153. package/deps/librdkafka/src/rdkafka_error.c +228 -0
  154. package/deps/librdkafka/src/rdkafka_error.h +80 -0
  155. package/deps/librdkafka/src/rdkafka_event.c +502 -0
  156. package/deps/librdkafka/src/rdkafka_event.h +126 -0
  157. package/deps/librdkafka/src/rdkafka_feature.c +898 -0
  158. package/deps/librdkafka/src/rdkafka_feature.h +104 -0
  159. package/deps/librdkafka/src/rdkafka_fetcher.c +3820 -0
  160. package/deps/librdkafka/src/rdkafka_fetcher.h +62 -0
  161. package/deps/librdkafka/src/rdkafka_header.c +220 -0
  162. package/deps/librdkafka/src/rdkafka_header.h +76 -0
  163. package/deps/librdkafka/src/rdkafka_idempotence.c +807 -0
  164. package/deps/librdkafka/src/rdkafka_idempotence.h +144 -0
  165. package/deps/librdkafka/src/rdkafka_int.h +1505 -0
  166. package/deps/librdkafka/src/rdkafka_interceptor.c +842 -0
  167. package/deps/librdkafka/src/rdkafka_interceptor.h +104 -0
  168. package/deps/librdkafka/src/rdkafka_lz4.c +450 -0
  169. package/deps/librdkafka/src/rdkafka_lz4.h +49 -0
  170. package/deps/librdkafka/src/rdkafka_metadata.c +2347 -0
  171. package/deps/librdkafka/src/rdkafka_metadata.h +350 -0
  172. package/deps/librdkafka/src/rdkafka_metadata_cache.c +1183 -0
  173. package/deps/librdkafka/src/rdkafka_mock.c +4514 -0
  174. package/deps/librdkafka/src/rdkafka_mock.h +867 -0
  175. package/deps/librdkafka/src/rdkafka_mock_cgrp.c +1877 -0
  176. package/deps/librdkafka/src/rdkafka_mock_handlers.c +5255 -0
  177. package/deps/librdkafka/src/rdkafka_mock_int.h +1005 -0
  178. package/deps/librdkafka/src/rdkafka_mock_sharegrp.c +1207 -0
  179. package/deps/librdkafka/src/rdkafka_msg.c +2619 -0
  180. package/deps/librdkafka/src/rdkafka_msg.h +629 -0
  181. package/deps/librdkafka/src/rdkafka_msgbatch.h +62 -0
  182. package/deps/librdkafka/src/rdkafka_msgset.h +105 -0
  183. package/deps/librdkafka/src/rdkafka_msgset_reader.c +2099 -0
  184. package/deps/librdkafka/src/rdkafka_msgset_writer.c +1474 -0
  185. package/deps/librdkafka/src/rdkafka_offset.c +1565 -0
  186. package/deps/librdkafka/src/rdkafka_offset.h +150 -0
  187. package/deps/librdkafka/src/rdkafka_op.c +1219 -0
  188. package/deps/librdkafka/src/rdkafka_op.h +1065 -0
  189. package/deps/librdkafka/src/rdkafka_partition.c +5109 -0
  190. package/deps/librdkafka/src/rdkafka_partition.h +1215 -0
  191. package/deps/librdkafka/src/rdkafka_pattern.c +228 -0
  192. package/deps/librdkafka/src/rdkafka_pattern.h +70 -0
  193. package/deps/librdkafka/src/rdkafka_plugin.c +213 -0
  194. package/deps/librdkafka/src/rdkafka_plugin.h +41 -0
  195. package/deps/librdkafka/src/rdkafka_proto.h +739 -0
  196. package/deps/librdkafka/src/rdkafka_protocol.h +131 -0
  197. package/deps/librdkafka/src/rdkafka_queue.c +1351 -0
  198. package/deps/librdkafka/src/rdkafka_queue.h +1235 -0
  199. package/deps/librdkafka/src/rdkafka_range_assignor.c +1748 -0
  200. package/deps/librdkafka/src/rdkafka_request.c +7298 -0
  201. package/deps/librdkafka/src/rdkafka_request.h +761 -0
  202. package/deps/librdkafka/src/rdkafka_roundrobin_assignor.c +123 -0
  203. package/deps/librdkafka/src/rdkafka_sasl.c +589 -0
  204. package/deps/librdkafka/src/rdkafka_sasl.h +63 -0
  205. package/deps/librdkafka/src/rdkafka_sasl_cyrus.c +722 -0
  206. package/deps/librdkafka/src/rdkafka_sasl_int.h +89 -0
  207. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.c +1833 -0
  208. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.h +52 -0
  209. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.c +1827 -0
  210. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.h +52 -0
  211. package/deps/librdkafka/src/rdkafka_sasl_plain.c +142 -0
  212. package/deps/librdkafka/src/rdkafka_sasl_scram.c +858 -0
  213. package/deps/librdkafka/src/rdkafka_sasl_win32.c +550 -0
  214. package/deps/librdkafka/src/rdkafka_share_acknowledgement.c +1445 -0
  215. package/deps/librdkafka/src/rdkafka_share_acknowledgement.h +373 -0
  216. package/deps/librdkafka/src/rdkafka_ssl.c +2235 -0
  217. package/deps/librdkafka/src/rdkafka_ssl.h +86 -0
  218. package/deps/librdkafka/src/rdkafka_sticky_assignor.c +4785 -0
  219. package/deps/librdkafka/src/rdkafka_subscription.c +411 -0
  220. package/deps/librdkafka/src/rdkafka_telemetry.c +761 -0
  221. package/deps/librdkafka/src/rdkafka_telemetry.h +52 -0
  222. package/deps/librdkafka/src/rdkafka_telemetry_decode.c +1307 -0
  223. package/deps/librdkafka/src/rdkafka_telemetry_decode.h +59 -0
  224. package/deps/librdkafka/src/rdkafka_telemetry_encode.c +1309 -0
  225. package/deps/librdkafka/src/rdkafka_telemetry_encode.h +459 -0
  226. package/deps/librdkafka/src/rdkafka_timer.c +407 -0
  227. package/deps/librdkafka/src/rdkafka_timer.h +117 -0
  228. package/deps/librdkafka/src/rdkafka_topic.c +2382 -0
  229. package/deps/librdkafka/src/rdkafka_topic.h +369 -0
  230. package/deps/librdkafka/src/rdkafka_transport.c +1309 -0
  231. package/deps/librdkafka/src/rdkafka_transport.h +99 -0
  232. package/deps/librdkafka/src/rdkafka_transport_int.h +100 -0
  233. package/deps/librdkafka/src/rdkafka_txnmgr.c +3256 -0
  234. package/deps/librdkafka/src/rdkafka_txnmgr.h +171 -0
  235. package/deps/librdkafka/src/rdkafka_zstd.c +226 -0
  236. package/deps/librdkafka/src/rdkafka_zstd.h +57 -0
  237. package/deps/librdkafka/src/rdlist.c +593 -0
  238. package/deps/librdkafka/src/rdlist.h +444 -0
  239. package/deps/librdkafka/src/rdlog.c +89 -0
  240. package/deps/librdkafka/src/rdlog.h +41 -0
  241. package/deps/librdkafka/src/rdmap.c +508 -0
  242. package/deps/librdkafka/src/rdmap.h +492 -0
  243. package/deps/librdkafka/src/rdmurmur2.c +167 -0
  244. package/deps/librdkafka/src/rdmurmur2.h +35 -0
  245. package/deps/librdkafka/src/rdports.c +61 -0
  246. package/deps/librdkafka/src/rdports.h +38 -0
  247. package/deps/librdkafka/src/rdposix.h +250 -0
  248. package/deps/librdkafka/src/rdrand.c +151 -0
  249. package/deps/librdkafka/src/rdrand.h +72 -0
  250. package/deps/librdkafka/src/rdregex.c +156 -0
  251. package/deps/librdkafka/src/rdregex.h +43 -0
  252. package/deps/librdkafka/src/rdsignal.h +57 -0
  253. package/deps/librdkafka/src/rdstring.c +645 -0
  254. package/deps/librdkafka/src/rdstring.h +98 -0
  255. package/deps/librdkafka/src/rdsysqueue.h +404 -0
  256. package/deps/librdkafka/src/rdtime.h +356 -0
  257. package/deps/librdkafka/src/rdtypes.h +86 -0
  258. package/deps/librdkafka/src/rdunittest.c +564 -0
  259. package/deps/librdkafka/src/rdunittest.h +232 -0
  260. package/deps/librdkafka/src/rdunittest_acknowledge.c +1177 -0
  261. package/deps/librdkafka/src/rdunittest_fetcher.c +1211 -0
  262. package/deps/librdkafka/src/rdunittest_msgset_errors.c +1521 -0
  263. package/deps/librdkafka/src/rdvarint.c +134 -0
  264. package/deps/librdkafka/src/rdvarint.h +165 -0
  265. package/deps/librdkafka/src/rdwin32.h +382 -0
  266. package/deps/librdkafka/src/rdxxhash.c +1030 -0
  267. package/deps/librdkafka/src/rdxxhash.h +328 -0
  268. package/deps/librdkafka/src/regexp.c +1352 -0
  269. package/deps/librdkafka/src/regexp.h +41 -0
  270. package/deps/librdkafka/src/snappy.c +1866 -0
  271. package/deps/librdkafka/src/snappy.h +62 -0
  272. package/deps/librdkafka/src/snappy_compat.h +138 -0
  273. package/deps/librdkafka/src/statistics_schema.json +444 -0
  274. package/deps/librdkafka/src/tinycthread.c +932 -0
  275. package/deps/librdkafka/src/tinycthread.h +503 -0
  276. package/deps/librdkafka/src/tinycthread_extra.c +210 -0
  277. package/deps/librdkafka/src/tinycthread_extra.h +218 -0
  278. package/deps/librdkafka/src/win32_config.h +58 -0
  279. package/deps/librdkafka/src-cpp/CMakeLists.txt +90 -0
  280. package/deps/librdkafka/src-cpp/ConfImpl.cpp +84 -0
  281. package/deps/librdkafka/src-cpp/ConsumerImpl.cpp +244 -0
  282. package/deps/librdkafka/src-cpp/HandleImpl.cpp +436 -0
  283. package/deps/librdkafka/src-cpp/HeadersImpl.cpp +48 -0
  284. package/deps/librdkafka/src-cpp/KafkaConsumerImpl.cpp +296 -0
  285. package/deps/librdkafka/src-cpp/Makefile +55 -0
  286. package/deps/librdkafka/src-cpp/MessageImpl.cpp +38 -0
  287. package/deps/librdkafka/src-cpp/MetadataImpl.cpp +170 -0
  288. package/deps/librdkafka/src-cpp/ProducerImpl.cpp +197 -0
  289. package/deps/librdkafka/src-cpp/QueueImpl.cpp +70 -0
  290. package/deps/librdkafka/src-cpp/README.md +16 -0
  291. package/deps/librdkafka/src-cpp/RdKafka.cpp +59 -0
  292. package/deps/librdkafka/src-cpp/TopicImpl.cpp +124 -0
  293. package/deps/librdkafka/src-cpp/TopicPartitionImpl.cpp +57 -0
  294. package/deps/librdkafka/src-cpp/rdkafkacpp.h +3797 -0
  295. package/deps/librdkafka/src-cpp/rdkafkacpp_int.h +1641 -0
  296. package/deps/librdkafka/tests/0000-unittests.c +72 -0
  297. package/deps/librdkafka/tests/0001-multiobj.c +102 -0
  298. package/deps/librdkafka/tests/0002-unkpart.c +244 -0
  299. package/deps/librdkafka/tests/0003-msgmaxsize.c +173 -0
  300. package/deps/librdkafka/tests/0004-conf.c +934 -0
  301. package/deps/librdkafka/tests/0005-order.c +133 -0
  302. package/deps/librdkafka/tests/0006-symbols.c +163 -0
  303. package/deps/librdkafka/tests/0007-autotopic.c +136 -0
  304. package/deps/librdkafka/tests/0008-reqacks.c +179 -0
  305. package/deps/librdkafka/tests/0009-mock_cluster.c +272 -0
  306. package/deps/librdkafka/tests/0011-produce_batch.c +753 -0
  307. package/deps/librdkafka/tests/0012-produce_consume.c +537 -0
  308. package/deps/librdkafka/tests/0013-null-msgs.c +473 -0
  309. package/deps/librdkafka/tests/0014-reconsume-191.c +512 -0
  310. package/deps/librdkafka/tests/0015-offset_seeks.c +172 -0
  311. package/deps/librdkafka/tests/0016-client_swname.c +181 -0
  312. package/deps/librdkafka/tests/0017-compression.c +140 -0
  313. package/deps/librdkafka/tests/0018-cgrp_term.c +444 -0
  314. package/deps/librdkafka/tests/0019-list_groups.c +289 -0
  315. package/deps/librdkafka/tests/0020-destroy_hang.c +162 -0
  316. package/deps/librdkafka/tests/0021-rkt_destroy.c +72 -0
  317. package/deps/librdkafka/tests/0022-consume_batch.c +331 -0
  318. package/deps/librdkafka/tests/0025-timers.c +147 -0
  319. package/deps/librdkafka/tests/0026-consume_pause.c +547 -0
  320. package/deps/librdkafka/tests/0028-long_topicnames.c +79 -0
  321. package/deps/librdkafka/tests/0029-assign_offset.c +202 -0
  322. package/deps/librdkafka/tests/0030-offset_commit.c +589 -0
  323. package/deps/librdkafka/tests/0031-get_offsets.c +235 -0
  324. package/deps/librdkafka/tests/0033-regex_subscribe.c +536 -0
  325. package/deps/librdkafka/tests/0034-offset_reset.c +398 -0
  326. package/deps/librdkafka/tests/0035-api_version.c +73 -0
  327. package/deps/librdkafka/tests/0036-partial_fetch.c +87 -0
  328. package/deps/librdkafka/tests/0037-destroy_hang_local.c +85 -0
  329. package/deps/librdkafka/tests/0038-performance.c +121 -0
  330. package/deps/librdkafka/tests/0039-event.c +284 -0
  331. package/deps/librdkafka/tests/0040-io_event.c +257 -0
  332. package/deps/librdkafka/tests/0041-fetch_max_bytes.c +97 -0
  333. package/deps/librdkafka/tests/0042-many_topics.c +252 -0
  334. package/deps/librdkafka/tests/0043-no_connection.c +77 -0
  335. package/deps/librdkafka/tests/0044-partition_cnt.c +94 -0
  336. package/deps/librdkafka/tests/0045-subscribe_update.c +1010 -0
  337. package/deps/librdkafka/tests/0046-rkt_cache.c +65 -0
  338. package/deps/librdkafka/tests/0047-partial_buf_tmout.c +98 -0
  339. package/deps/librdkafka/tests/0048-partitioner.c +283 -0
  340. package/deps/librdkafka/tests/0049-consume_conn_close.c +162 -0
  341. package/deps/librdkafka/tests/0050-subscribe_adds.c +145 -0
  342. package/deps/librdkafka/tests/0051-assign_adds.c +126 -0
  343. package/deps/librdkafka/tests/0052-msg_timestamps.c +238 -0
  344. package/deps/librdkafka/tests/0053-stats_cb.cpp +527 -0
  345. package/deps/librdkafka/tests/0054-offset_time.cpp +236 -0
  346. package/deps/librdkafka/tests/0055-producer_latency.c +539 -0
  347. package/deps/librdkafka/tests/0056-balanced_group_mt.c +315 -0
  348. package/deps/librdkafka/tests/0057-invalid_topic.cpp +112 -0
  349. package/deps/librdkafka/tests/0058-log.cpp +123 -0
  350. package/deps/librdkafka/tests/0059-bsearch.cpp +241 -0
  351. package/deps/librdkafka/tests/0060-op_prio.cpp +163 -0
  352. package/deps/librdkafka/tests/0061-consumer_lag.cpp +295 -0
  353. package/deps/librdkafka/tests/0062-stats_event.c +126 -0
  354. package/deps/librdkafka/tests/0063-clusterid.cpp +180 -0
  355. package/deps/librdkafka/tests/0064-interceptors.c +529 -0
  356. package/deps/librdkafka/tests/0065-yield.cpp +140 -0
  357. package/deps/librdkafka/tests/0066-plugins.cpp +143 -0
  358. package/deps/librdkafka/tests/0067-empty_topic.cpp +151 -0
  359. package/deps/librdkafka/tests/0068-produce_timeout.c +136 -0
  360. package/deps/librdkafka/tests/0069-consumer_add_parts.c +119 -0
  361. package/deps/librdkafka/tests/0070-null_empty.cpp +197 -0
  362. package/deps/librdkafka/tests/0072-headers_ut.c +448 -0
  363. package/deps/librdkafka/tests/0073-headers.c +381 -0
  364. package/deps/librdkafka/tests/0074-producev.c +87 -0
  365. package/deps/librdkafka/tests/0075-retry.c +290 -0
  366. package/deps/librdkafka/tests/0076-produce_retry.c +452 -0
  367. package/deps/librdkafka/tests/0077-compaction.c +366 -0
  368. package/deps/librdkafka/tests/0078-c_from_cpp.cpp +96 -0
  369. package/deps/librdkafka/tests/0079-fork.c +93 -0
  370. package/deps/librdkafka/tests/0080-admin_ut.c +3095 -0
  371. package/deps/librdkafka/tests/0081-admin.c +5633 -0
  372. package/deps/librdkafka/tests/0082-fetch_max_bytes.cpp +137 -0
  373. package/deps/librdkafka/tests/0083-cb_event.c +233 -0
  374. package/deps/librdkafka/tests/0084-destroy_flags.c +208 -0
  375. package/deps/librdkafka/tests/0085-headers.cpp +392 -0
  376. package/deps/librdkafka/tests/0086-purge.c +368 -0
  377. package/deps/librdkafka/tests/0088-produce_metadata_timeout.c +162 -0
  378. package/deps/librdkafka/tests/0089-max_poll_interval.c +511 -0
  379. package/deps/librdkafka/tests/0090-idempotence.c +171 -0
  380. package/deps/librdkafka/tests/0091-max_poll_interval_timeout.c +295 -0
  381. package/deps/librdkafka/tests/0092-mixed_msgver.c +103 -0
  382. package/deps/librdkafka/tests/0093-holb.c +200 -0
  383. package/deps/librdkafka/tests/0094-idempotence_msg_timeout.c +231 -0
  384. package/deps/librdkafka/tests/0095-all_brokers_down.cpp +122 -0
  385. package/deps/librdkafka/tests/0097-ssl_verify.cpp +674 -0
  386. package/deps/librdkafka/tests/0098-consumer-txn.cpp +1218 -0
  387. package/deps/librdkafka/tests/0099-commit_metadata.c +194 -0
  388. package/deps/librdkafka/tests/0100-thread_interceptors.cpp +195 -0
  389. package/deps/librdkafka/tests/0101-fetch-from-follower.cpp +446 -0
  390. package/deps/librdkafka/tests/0102-static_group_rebalance.c +836 -0
  391. package/deps/librdkafka/tests/0103-transactions.c +1383 -0
  392. package/deps/librdkafka/tests/0104-fetch_from_follower_mock.c +625 -0
  393. package/deps/librdkafka/tests/0105-transactions_mock.c +3930 -0
  394. package/deps/librdkafka/tests/0106-cgrp_sess_timeout.c +318 -0
  395. package/deps/librdkafka/tests/0107-topic_recreate.c +259 -0
  396. package/deps/librdkafka/tests/0109-auto_create_topics.cpp +278 -0
  397. package/deps/librdkafka/tests/0110-batch_size.cpp +182 -0
  398. package/deps/librdkafka/tests/0111-delay_create_topics.cpp +127 -0
  399. package/deps/librdkafka/tests/0112-assign_unknown_part.c +87 -0
  400. package/deps/librdkafka/tests/0113-cooperative_rebalance.cpp +3473 -0
  401. package/deps/librdkafka/tests/0114-sticky_partitioning.cpp +176 -0
  402. package/deps/librdkafka/tests/0115-producer_auth.cpp +182 -0
  403. package/deps/librdkafka/tests/0116-kafkaconsumer_close.cpp +216 -0
  404. package/deps/librdkafka/tests/0117-mock_errors.c +331 -0
  405. package/deps/librdkafka/tests/0118-commit_rebalance.c +154 -0
  406. package/deps/librdkafka/tests/0119-consumer_auth.cpp +167 -0
  407. package/deps/librdkafka/tests/0120-asymmetric_subscription.c +185 -0
  408. package/deps/librdkafka/tests/0121-clusterid.c +115 -0
  409. package/deps/librdkafka/tests/0122-buffer_cleaning_after_rebalance.c +227 -0
  410. package/deps/librdkafka/tests/0123-connections_max_idle.c +98 -0
  411. package/deps/librdkafka/tests/0124-openssl_invalid_engine.c +69 -0
  412. package/deps/librdkafka/tests/0125-immediate_flush.c +144 -0
  413. package/deps/librdkafka/tests/0126-oauthbearer_oidc.c +1164 -0
  414. package/deps/librdkafka/tests/0127-fetch_queue_backoff.cpp +165 -0
  415. package/deps/librdkafka/tests/0128-sasl_callback_queue.cpp +217 -0
  416. package/deps/librdkafka/tests/0129-fetch_aborted_msgs.c +79 -0
  417. package/deps/librdkafka/tests/0130-store_offsets.c +178 -0
  418. package/deps/librdkafka/tests/0131-connect_timeout.c +81 -0
  419. package/deps/librdkafka/tests/0132-strategy_ordering.c +179 -0
  420. package/deps/librdkafka/tests/0133-ssl_keys.c +150 -0
  421. package/deps/librdkafka/tests/0134-ssl_provider.c +92 -0
  422. package/deps/librdkafka/tests/0135-sasl_credentials.cpp +279 -0
  423. package/deps/librdkafka/tests/0136-resolve_cb.c +181 -0
  424. package/deps/librdkafka/tests/0137-barrier_batch_consume.c +752 -0
  425. package/deps/librdkafka/tests/0138-admin_mock.c +281 -0
  426. package/deps/librdkafka/tests/0139-offset_validation_mock.c +950 -0
  427. package/deps/librdkafka/tests/0140-commit_metadata.cpp +108 -0
  428. package/deps/librdkafka/tests/0142-reauthentication.c +931 -0
  429. package/deps/librdkafka/tests/0143-exponential_backoff_mock.c +552 -0
  430. package/deps/librdkafka/tests/0144-idempotence_mock.c +373 -0
  431. package/deps/librdkafka/tests/0145-pause_resume_mock.c +119 -0
  432. package/deps/librdkafka/tests/0146-metadata_mock.c +505 -0
  433. package/deps/librdkafka/tests/0147-consumer_group_consumer_mock.c +1210 -0
  434. package/deps/librdkafka/tests/0148-offset_fetch_commit_error_mock.c +569 -0
  435. package/deps/librdkafka/tests/0149-broker-same-host-port.c +140 -0
  436. package/deps/librdkafka/tests/0150-telemetry_mock.c +651 -0
  437. package/deps/librdkafka/tests/0151-purge-brokers.c +566 -0
  438. package/deps/librdkafka/tests/0152-rebootstrap.c +59 -0
  439. package/deps/librdkafka/tests/0153-memberid.c +128 -0
  440. package/deps/librdkafka/tests/0155-share_group_heartbeat_mock.c +2695 -0
  441. package/deps/librdkafka/tests/0156-share_consumer_fetch_mock.c +1551 -0
  442. package/deps/librdkafka/tests/0157-share_consumer_ack_mock.c +1788 -0
  443. package/deps/librdkafka/tests/0158-share_consumer_transactions_mock.c +467 -0
  444. package/deps/librdkafka/tests/0170-share_consumer_subscription.c +2192 -0
  445. package/deps/librdkafka/tests/0171-share_consumer_consume.c +2150 -0
  446. package/deps/librdkafka/tests/0172-share_consumer_acknowledge.c +1919 -0
  447. package/deps/librdkafka/tests/0173-share_consumer_commit_async.c +2735 -0
  448. package/deps/librdkafka/tests/0174-share_consumer_concurrency.c +1434 -0
  449. package/deps/librdkafka/tests/0175-share_consumer_groups.c +574 -0
  450. package/deps/librdkafka/tests/0176-share_consumer_commit_sync.c +2986 -0
  451. package/deps/librdkafka/tests/0177-share_consumer_transactions.c +1815 -0
  452. package/deps/librdkafka/tests/0178-share_consumer_close.c +2102 -0
  453. package/deps/librdkafka/tests/0179-share_consumer_destroy.c +2482 -0
  454. package/deps/librdkafka/tests/0180-share_consumer_config.c +1677 -0
  455. package/deps/librdkafka/tests/0181-share_consumer_topic_delete.c +354 -0
  456. package/deps/librdkafka/tests/0182-share_consumer_error_handling_mock.c +3358 -0
  457. package/deps/librdkafka/tests/0183-share_consumer_leader_change_mock.c +1234 -0
  458. package/deps/librdkafka/tests/0184-share_consumer_topic_recreate.c +1356 -0
  459. package/deps/librdkafka/tests/0185-share_consumer_max_poll_interval.c +557 -0
  460. package/deps/librdkafka/tests/0186-share_consumer_fatal_error.c +360 -0
  461. package/deps/librdkafka/tests/0190-share_consumer_telemetry.c +387 -0
  462. package/deps/librdkafka/tests/1000-unktopic.c +164 -0
  463. package/deps/librdkafka/tests/8000-idle.cpp +60 -0
  464. package/deps/librdkafka/tests/8001-fetch_from_follower_mock_manual.c +113 -0
  465. package/deps/librdkafka/tests/CMakeLists.txt +193 -0
  466. package/deps/librdkafka/tests/LibrdkafkaTestApp.py +291 -0
  467. package/deps/librdkafka/tests/Makefile +182 -0
  468. package/deps/librdkafka/tests/README.md +514 -0
  469. package/deps/librdkafka/tests/autotest.sh +33 -0
  470. package/deps/librdkafka/tests/backtrace.gdb +30 -0
  471. package/deps/librdkafka/tests/broker_version_tests.py +315 -0
  472. package/deps/librdkafka/tests/buildbox.sh +17 -0
  473. package/deps/librdkafka/tests/cleanup-checker-tests.sh +20 -0
  474. package/deps/librdkafka/tests/cluster_testing.py +203 -0
  475. package/deps/librdkafka/tests/delete-test-topics.sh +56 -0
  476. package/deps/librdkafka/tests/fixtures/oauthbearer/jwt_assertion_template.json +10 -0
  477. package/deps/librdkafka/tests/fixtures/ssl/Makefile +8 -0
  478. package/deps/librdkafka/tests/fixtures/ssl/README.md +13 -0
  479. package/deps/librdkafka/tests/fixtures/ssl/client.keystore.intermediate.p12 +0 -0
  480. package/deps/librdkafka/tests/fixtures/ssl/client.keystore.p12 +0 -0
  481. package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.intermediate.pem +72 -0
  482. package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.pem +50 -0
  483. package/deps/librdkafka/tests/fixtures/ssl/client2.intermediate.key +46 -0
  484. package/deps/librdkafka/tests/fixtures/ssl/client2.key +46 -0
  485. package/deps/librdkafka/tests/fixtures/ssl/create_keys.sh +168 -0
  486. package/deps/librdkafka/tests/fuzzers/Makefile +12 -0
  487. package/deps/librdkafka/tests/fuzzers/README.md +31 -0
  488. package/deps/librdkafka/tests/fuzzers/fuzz_regex.c +74 -0
  489. package/deps/librdkafka/tests/fuzzers/helpers.h +90 -0
  490. package/deps/librdkafka/tests/gen-ssl-certs.sh +165 -0
  491. package/deps/librdkafka/tests/interactive_broker_version.py +170 -0
  492. package/deps/librdkafka/tests/interceptor_test/CMakeLists.txt +16 -0
  493. package/deps/librdkafka/tests/interceptor_test/Makefile +22 -0
  494. package/deps/librdkafka/tests/interceptor_test/interceptor_test.c +314 -0
  495. package/deps/librdkafka/tests/interceptor_test/interceptor_test.h +54 -0
  496. package/deps/librdkafka/tests/java/IncrementalRebalanceCli.java +97 -0
  497. package/deps/librdkafka/tests/java/Makefile +13 -0
  498. package/deps/librdkafka/tests/java/Murmur2Cli.java +46 -0
  499. package/deps/librdkafka/tests/java/README.md +14 -0
  500. package/deps/librdkafka/tests/java/TransactionProducerCli.java +162 -0
  501. package/deps/librdkafka/tests/java/run-class.sh +11 -0
  502. package/deps/librdkafka/tests/librdkafka.suppressions +483 -0
  503. package/deps/librdkafka/tests/lz4_manual_test.sh +59 -0
  504. package/deps/librdkafka/tests/multi-broker-version-test.sh +50 -0
  505. package/deps/librdkafka/tests/parse-refcnt.sh +43 -0
  506. package/deps/librdkafka/tests/performance_plot.py +115 -0
  507. package/deps/librdkafka/tests/plugin_test/Makefile +19 -0
  508. package/deps/librdkafka/tests/plugin_test/plugin_test.c +58 -0
  509. package/deps/librdkafka/tests/requirements.txt +2 -0
  510. package/deps/librdkafka/tests/run-all-tests.sh +81 -0
  511. package/deps/librdkafka/tests/run-consumer-tests.sh +16 -0
  512. package/deps/librdkafka/tests/run-producer-tests.sh +16 -0
  513. package/deps/librdkafka/tests/run-test-batches.py +157 -0
  514. package/deps/librdkafka/tests/run-test.sh +141 -0
  515. package/deps/librdkafka/tests/rusage.c +249 -0
  516. package/deps/librdkafka/tests/sasl_test.py +289 -0
  517. package/deps/librdkafka/tests/scenarios/README.md +6 -0
  518. package/deps/librdkafka/tests/scenarios/ak23.json +6 -0
  519. package/deps/librdkafka/tests/scenarios/default.json +5 -0
  520. package/deps/librdkafka/tests/scenarios/noautocreate.json +5 -0
  521. package/deps/librdkafka/tests/share_telemetry_verify/share-otel-collector-config.yaml +28 -0
  522. package/deps/librdkafka/tests/sockem.c +801 -0
  523. package/deps/librdkafka/tests/sockem.h +85 -0
  524. package/deps/librdkafka/tests/sockem_ctrl.c +145 -0
  525. package/deps/librdkafka/tests/sockem_ctrl.h +61 -0
  526. package/deps/librdkafka/tests/test.c +8376 -0
  527. package/deps/librdkafka/tests/test.conf.example +27 -0
  528. package/deps/librdkafka/tests/test.h +1150 -0
  529. package/deps/librdkafka/tests/testcpp.cpp +131 -0
  530. package/deps/librdkafka/tests/testcpp.h +388 -0
  531. package/deps/librdkafka/tests/testshared.h +416 -0
  532. package/deps/librdkafka/tests/tools/README.md +4 -0
  533. package/deps/librdkafka/tests/tools/stats/README.md +21 -0
  534. package/deps/librdkafka/tests/tools/stats/filter.jq +42 -0
  535. package/deps/librdkafka/tests/tools/stats/graph.py +150 -0
  536. package/deps/librdkafka/tests/tools/stats/requirements.txt +3 -0
  537. package/deps/librdkafka/tests/tools/stats/to_csv.py +124 -0
  538. package/deps/librdkafka/tests/trivup/trivup-0.15.0.tar.gz +0 -0
  539. package/deps/librdkafka/tests/until-fail.sh +87 -0
  540. package/deps/librdkafka/tests/xxxx-assign_partition.c +122 -0
  541. package/deps/librdkafka/tests/xxxx-metadata.cpp +159 -0
  542. package/deps/librdkafka/vcpkg.json +23 -0
  543. package/deps/librdkafka/win32/README.md +5 -0
  544. package/deps/librdkafka/win32/build-package.bat +3 -0
  545. package/deps/librdkafka/win32/build.bat +19 -0
  546. package/deps/librdkafka/win32/common.vcxproj +84 -0
  547. package/deps/librdkafka/win32/interceptor_test/interceptor_test.vcxproj +87 -0
  548. package/deps/librdkafka/win32/librdkafka.autopkg.template +54 -0
  549. package/deps/librdkafka/win32/librdkafka.master.testing.targets +13 -0
  550. package/deps/librdkafka/win32/librdkafka.sln +226 -0
  551. package/deps/librdkafka/win32/librdkafka.vcxproj +282 -0
  552. package/deps/librdkafka/win32/librdkafkacpp/librdkafkacpp.vcxproj +104 -0
  553. package/deps/librdkafka/win32/msbuild.ps1 +58 -0
  554. package/deps/librdkafka/win32/openssl_engine_example/openssl_engine_example.vcxproj +132 -0
  555. package/deps/librdkafka/win32/package-zip.ps1 +46 -0
  556. package/deps/librdkafka/win32/packages/repositories.config +4 -0
  557. package/deps/librdkafka/win32/push-package.bat +4 -0
  558. package/deps/librdkafka/win32/rdkafka_complex_consumer_example_cpp/rdkafka_complex_consumer_example_cpp.vcxproj +67 -0
  559. package/deps/librdkafka/win32/rdkafka_example/rdkafka_example.vcxproj +97 -0
  560. package/deps/librdkafka/win32/rdkafka_performance/rdkafka_performance.vcxproj +97 -0
  561. package/deps/librdkafka/win32/setup-msys2.ps1 +47 -0
  562. package/deps/librdkafka/win32/setup-vcpkg.ps1 +34 -0
  563. package/deps/librdkafka/win32/tests/test.conf.example +25 -0
  564. package/deps/librdkafka/win32/tests/tests.vcxproj +278 -0
  565. package/deps/librdkafka/win32/win_ssl_cert_store/win_ssl_cert_store.vcxproj +132 -0
  566. package/deps/librdkafka/win32/wingetopt.c +564 -0
  567. package/deps/librdkafka/win32/wingetopt.h +101 -0
  568. package/deps/librdkafka/win32/wintime.h +33 -0
  569. package/deps/librdkafka.gyp +83 -0
  570. package/deps/windows-install.py +80 -0
  571. package/index.d.ts +3 -0
  572. package/lib/admin.js +732 -0
  573. package/lib/client.js +679 -0
  574. package/lib/error.js +501 -0
  575. package/lib/index.js +8 -0
  576. package/lib/kafka-consumer-stream.js +399 -0
  577. package/lib/kafka-consumer.js +798 -0
  578. package/lib/kafkajs/_admin.js +1052 -0
  579. package/lib/kafkajs/_common.js +887 -0
  580. package/lib/kafkajs/_consumer.js +2156 -0
  581. package/lib/kafkajs/_consumer_cache.js +310 -0
  582. package/lib/kafkajs/_error.js +298 -0
  583. package/lib/kafkajs/_kafka.js +125 -0
  584. package/lib/kafkajs/_linked-list.js +220 -0
  585. package/lib/kafkajs/_producer.js +863 -0
  586. package/lib/kafkajs/index.js +5 -0
  587. package/lib/producer/high-level-producer.js +400 -0
  588. package/lib/producer-stream.js +337 -0
  589. package/lib/producer.js +405 -0
  590. package/lib/rdkafka.js +44 -0
  591. package/lib/tools/ref-counter.js +53 -0
  592. package/lib/topic-partition.js +91 -0
  593. package/lib/topic.js +43 -0
  594. package/lib/util.js +55 -0
  595. package/librdkafka.js +12 -0
  596. package/package.json +85 -0
  597. package/shim/source_location +54 -0
  598. package/src/admin.cc +1597 -0
  599. package/src/admin.h +112 -0
  600. package/src/binding.cc +76 -0
  601. package/src/binding.h +25 -0
  602. package/src/callbacks.cc +676 -0
  603. package/src/callbacks.h +302 -0
  604. package/src/common.cc +1628 -0
  605. package/src/common.h +192 -0
  606. package/src/config.cc +219 -0
  607. package/src/config.h +61 -0
  608. package/src/connection.cc +703 -0
  609. package/src/connection.h +117 -0
  610. package/src/errors.cc +119 -0
  611. package/src/errors.h +60 -0
  612. package/src/kafka-consumer.cc +1539 -0
  613. package/src/kafka-consumer.h +147 -0
  614. package/src/producer.cc +917 -0
  615. package/src/producer.h +124 -0
  616. package/src/topic.cc +173 -0
  617. package/src/topic.h +54 -0
  618. package/src/workers.cc +1714 -0
  619. package/src/workers.h +690 -0
  620. package/types/config.d.ts +1269 -0
  621. package/types/errors.d.ts +373 -0
  622. package/types/kafkajs.d.ts +568 -0
  623. package/types/rdkafka.d.ts +571 -0
  624. package/util/configure.js +32 -0
  625. package/util/generate-docs.sh +18 -0
  626. package/util/get-env.js +6 -0
  627. package/util/test-compile.js +11 -0
  628. package/util/test-producer-delivery.js +100 -0
@@ -0,0 +1,703 @@
1
+ /*
2
+ * confluent-kafka-javascript - Node.js wrapper for RdKafka C/C++ library
3
+ *
4
+ * Copyright (c) 2016-2023 Blizzard Entertainment
5
+ * (c) 2023 Confluent, Inc.
6
+ *
7
+ * This software may be modified and distributed under the terms
8
+ * of the MIT license. See the LICENSE.txt file for details.
9
+ */
10
+ #include "src/connection.h"
11
+
12
+ #include <list>
13
+ #include <string>
14
+ #include <vector>
15
+
16
+ #include "src/workers.h"
17
+
18
+ using RdKafka::Conf;
19
+
20
+ namespace NodeKafka {
21
+
22
+ /**
23
+ * @brief Connection v8 wrapped object.
24
+ *
25
+ * Wraps the RdKafka::Handle object with compositional inheritence and
26
+ * provides sensible defaults for exposing callbacks to node
27
+ *
28
+ * This object can't itself expose methods to the prototype directly, as far
29
+ * as I can tell. But it can provide the NAN_METHODS that just need to be added
30
+ * to the prototype. Since connections, etc. are managed differently based on
31
+ * whether it is a producer or consumer, they manage that. This base class
32
+ * handles some of the wrapping functionality and more importantly, the
33
+ * configuration of callbacks
34
+ *
35
+ * Any callback available to both consumers and producers, like logging or
36
+ * events will be handled in here.
37
+ *
38
+ * @sa RdKafka::Handle
39
+ * @sa NodeKafka::Client
40
+ */
41
+
42
+ Connection::Connection(Conf* gconfig, Conf* tconfig):
43
+ m_event_cb(),
44
+ m_gconfig(gconfig),
45
+ m_tconfig(tconfig),
46
+ m_is_background_polling(false) {
47
+ std::string errstr;
48
+
49
+ m_client = NULL;
50
+ m_is_closing = false;
51
+ uv_rwlock_init(&m_connection_lock);
52
+
53
+ // Try to set the event cb. Shouldn't be an error here, but if there
54
+ // is, it doesn't get reported.
55
+ //
56
+ // Perhaps node new methods should report this as an error? But there
57
+ // isn't anything the user can do about it.
58
+ m_gconfig->set("event_cb", &m_event_cb, errstr);
59
+ }
60
+
61
+ /* Use an existing Connection object as the underlying for this object.
62
+ * At this point, the underlying connection is assumed to be connected with
63
+ * the m_client set. */
64
+ Connection::Connection(Connection *existing):
65
+ m_event_cb() {
66
+ m_client = existing->m_client;
67
+
68
+ m_gconfig = existing->m_gconfig;
69
+ m_tconfig = existing->m_tconfig;
70
+
71
+ m_is_closing = false;
72
+ m_has_underlying = true;
73
+
74
+ // We must share the same connection lock as the existing connection to
75
+ // avoid getting disconnected while the existing connection is still in use.
76
+ m_connection_lock = existing->m_connection_lock;
77
+ }
78
+
79
+
80
+ Connection::~Connection() {
81
+ // The underlying connection will take care of cleanup.
82
+ if (m_has_underlying) {
83
+ return;
84
+ }
85
+
86
+ uv_rwlock_destroy(&m_connection_lock);
87
+ if (m_tconfig) {
88
+ delete m_tconfig;
89
+ }
90
+
91
+ if (m_gconfig) {
92
+ delete m_gconfig;
93
+ }
94
+ }
95
+
96
+ Baton Connection::rdkafkaErrorToBaton(RdKafka::Error* error) {
97
+ if (NULL == error) {
98
+ return Baton(RdKafka::ERR_NO_ERROR);
99
+ } else {
100
+ Baton result(error->code(), error->str(), error->is_fatal(),
101
+ error->is_retriable(), error->txn_requires_abort());
102
+ delete error;
103
+ return result;
104
+ }
105
+ }
106
+
107
+ // If OAUTHBEARER authentication is set up, then push the callbacks onto the
108
+ // SASL queue so we don't need to keep polling. This method should be called
109
+ // before the client is created.
110
+ Baton Connection::setupSaslOAuthBearerConfig() {
111
+ if (!m_gconfig->is_sasl_oauthbearer()) {
112
+ return Baton(RdKafka::ERR_NO_ERROR);
113
+ }
114
+
115
+ std::string errstr;
116
+ if (m_gconfig->enable_sasl_queue(true, errstr) != RdKafka::Conf::CONF_OK) {
117
+ return Baton(RdKafka::ERR__STATE, errstr);
118
+ }
119
+
120
+ return Baton(RdKafka::ERR_NO_ERROR);
121
+ }
122
+
123
+ // If OAUTHBEARER authentication is set up, then handle the callbacks on
124
+ // the background thread. This method should be called after the client is
125
+ // created and only if `setupSaslOAuthBearerConfig` is called earlier.
126
+ Baton Connection::setupSaslOAuthBearerBackgroundQueue() {
127
+ if (!m_gconfig->is_sasl_oauthbearer()) {
128
+ return Baton(RdKafka::ERR_NO_ERROR);
129
+ }
130
+
131
+ RdKafka::Error* error = m_client->sasl_background_callbacks_enable();
132
+ return rdkafkaErrorToBaton(error);
133
+ }
134
+
135
+ Baton Connection::SetPollInBackground(bool set) {
136
+ scoped_shared_read_lock lock(m_connection_lock);
137
+ rd_kafka_t* rk = this->m_client->c_ptr();
138
+ if (!IsConnected()) {
139
+ return Baton(RdKafka::ERR__STATE, "Client is disconnected");
140
+ }
141
+
142
+ if (set && !m_is_background_polling) {
143
+ m_is_background_polling = true;
144
+ rd_kafka_queue_t* main_q = rd_kafka_queue_get_main(rk);
145
+ rd_kafka_queue_t* background_q = rd_kafka_queue_get_background(rk);
146
+ rd_kafka_queue_forward(main_q, background_q);
147
+ rd_kafka_queue_destroy(main_q);
148
+ rd_kafka_queue_destroy(background_q);
149
+ } else if (!set && m_is_background_polling) {
150
+ m_is_background_polling = false;
151
+ rd_kafka_queue_t* main_q = rd_kafka_queue_get_main(rk);
152
+ rd_kafka_queue_forward(main_q, NULL);
153
+ rd_kafka_queue_destroy(main_q);
154
+ }
155
+
156
+ return Baton(RdKafka::ERR_NO_ERROR);
157
+ }
158
+
159
+ RdKafka::TopicPartition* Connection::GetPartition(std::string &topic) {
160
+ return RdKafka::TopicPartition::create(topic, RdKafka::Topic::PARTITION_UA);
161
+ }
162
+
163
+ RdKafka::TopicPartition* Connection::GetPartition(std::string &topic, int partition) { // NOLINT
164
+ return RdKafka::TopicPartition::create(topic, partition);
165
+ }
166
+
167
+ bool Connection::IsConnected() const {
168
+ return !m_is_closing && m_client != NULL;
169
+ }
170
+
171
+ bool Connection::IsClosing() const {
172
+ return m_client != NULL && m_is_closing;
173
+ }
174
+
175
+ RdKafka::Handle* Connection::GetClient() {
176
+ return m_client;
177
+ }
178
+
179
+ std::string Connection::Name() const {
180
+ if (!IsConnected()) {
181
+ return std::string("");
182
+ }
183
+ return std::string(m_client->name());
184
+ }
185
+
186
+ Baton Connection::CreateTopic(std::string topic_name) {
187
+ return CreateTopic(topic_name, NULL);
188
+ }
189
+
190
+ Baton Connection::CreateTopic(std::string topic_name, RdKafka::Conf* conf) {
191
+ std::string errstr;
192
+
193
+ RdKafka::Topic* topic = NULL;
194
+
195
+ if (IsConnected()) {
196
+ scoped_shared_read_lock lock(m_connection_lock);
197
+ if (IsConnected()) {
198
+ topic = RdKafka::Topic::create(m_client, topic_name, conf, errstr);
199
+ } else {
200
+ return Baton(RdKafka::ErrorCode::ERR__STATE);
201
+ }
202
+ } else {
203
+ return Baton(RdKafka::ErrorCode::ERR__STATE);
204
+ }
205
+
206
+ if (!errstr.empty()) {
207
+ return Baton(RdKafka::ErrorCode::ERR_TOPIC_EXCEPTION, errstr);
208
+ }
209
+
210
+ // Maybe do it this way later? Then we don't need to do static_cast
211
+ // <RdKafka::Topic*>
212
+ return Baton(topic);
213
+ }
214
+
215
+ Baton Connection::QueryWatermarkOffsets(
216
+ std::string topic_name, int32_t partition,
217
+ int64_t* low_offset, int64_t* high_offset,
218
+ int timeout_ms) {
219
+ // Check if we are connected first
220
+
221
+ RdKafka::ErrorCode err;
222
+
223
+ if (IsConnected()) {
224
+ scoped_shared_read_lock lock(m_connection_lock);
225
+ if (IsConnected()) {
226
+ // Always send true - we
227
+ err = m_client->query_watermark_offsets(topic_name, partition,
228
+ low_offset, high_offset, timeout_ms);
229
+
230
+ } else {
231
+ err = RdKafka::ERR__STATE;
232
+ }
233
+ } else {
234
+ err = RdKafka::ERR__STATE;
235
+ }
236
+
237
+ return Baton(err);
238
+ }
239
+
240
+ /**
241
+ * Look up the offsets for the given partitions by timestamp.
242
+ *
243
+ * The returned offset for each partition is the earliest offset whose
244
+ * timestamp is greater than or equal to the given timestamp in the
245
+ * corresponding partition.
246
+ *
247
+ * @returns A baton specifying the error state. If there was no error,
248
+ * there still may be an error on a topic partition basis.
249
+ */
250
+ Baton Connection::OffsetsForTimes(
251
+ std::vector<RdKafka::TopicPartition*> &toppars,
252
+ int timeout_ms) {
253
+ // Check if we are connected first
254
+
255
+ RdKafka::ErrorCode err;
256
+
257
+ if (IsConnected()) {
258
+ scoped_shared_read_lock lock(m_connection_lock);
259
+ if (IsConnected()) {
260
+ // Always send true - we
261
+ err = m_client->offsetsForTimes(toppars, timeout_ms);
262
+
263
+ } else {
264
+ err = RdKafka::ERR__STATE;
265
+ }
266
+ } else {
267
+ err = RdKafka::ERR__STATE;
268
+ }
269
+
270
+ return Baton(err);
271
+ }
272
+
273
+ Baton Connection::GetMetadata(
274
+ bool all_topics, std::string topic_name, int timeout_ms) {
275
+ RdKafka::Topic* topic = NULL;
276
+ RdKafka::ErrorCode err;
277
+
278
+ std::string errstr;
279
+
280
+ if (!topic_name.empty()) {
281
+ Baton b = CreateTopic(topic_name);
282
+ if (b.err() == RdKafka::ErrorCode::ERR_NO_ERROR) {
283
+ topic = b.data<RdKafka::Topic*>();
284
+ }
285
+ }
286
+
287
+ RdKafka::Metadata* metadata = NULL;
288
+
289
+ if (!errstr.empty()) {
290
+ return Baton(RdKafka::ERR_TOPIC_EXCEPTION);
291
+ }
292
+
293
+ if (IsConnected()) {
294
+ scoped_shared_read_lock lock(m_connection_lock);
295
+ if (IsConnected()) {
296
+ // Always send true - we
297
+ err = m_client->metadata(all_topics, topic, &metadata, timeout_ms);
298
+ } else {
299
+ err = RdKafka::ERR__STATE;
300
+ }
301
+ } else {
302
+ err = RdKafka::ERR__STATE;
303
+ }
304
+
305
+ if (topic != NULL)
306
+ delete topic;
307
+
308
+ if (err == RdKafka::ERR_NO_ERROR) {
309
+ return Baton(metadata);
310
+ } else {
311
+ // metadata is not set here
312
+ // @see https://github.com/confluentinc/librdkafka/blob/master/src-cpp/rdkafkacpp.h#L860 // NOLINT
313
+ return Baton(err);
314
+ }
315
+ }
316
+
317
+ Baton Connection::SetSaslCredentials(
318
+ std::string username, std::string password) {
319
+ RdKafka::Error *error;
320
+
321
+ if (IsConnected()) {
322
+ scoped_shared_read_lock lock(m_connection_lock);
323
+ if (IsConnected()) {
324
+ // Always send true - we
325
+ error = m_client->sasl_set_credentials(username, password);
326
+ } else {
327
+ return Baton(RdKafka::ERR__STATE);
328
+ }
329
+ } else {
330
+ return Baton(RdKafka::ERR__STATE);
331
+ }
332
+
333
+ return rdkafkaErrorToBaton(error);
334
+ }
335
+
336
+ Baton Connection::SetOAuthBearerToken(
337
+ const std::string& value, int64_t lifetime_ms,
338
+ const std::string& principal_name,
339
+ const std::list<std::string>& extensions) {
340
+ RdKafka::ErrorCode error_code;
341
+ std::string errstr;
342
+
343
+ if (IsConnected()) {
344
+ scoped_shared_read_lock lock(m_connection_lock);
345
+ if (IsConnected()) {
346
+ error_code = m_client->oauthbearer_set_token(
347
+ value, lifetime_ms, principal_name, extensions, errstr);
348
+ } else {
349
+ return Baton(RdKafka::ERR__STATE);
350
+ }
351
+ } else {
352
+ return Baton(RdKafka::ERR__STATE);
353
+ }
354
+
355
+ if (error_code != RdKafka::ERR_NO_ERROR) {
356
+ return Baton(error_code, errstr);
357
+ }
358
+
359
+ return Baton(error_code);
360
+ }
361
+
362
+ Baton Connection::SetOAuthBearerTokenFailure(const std::string& errstr) {
363
+ RdKafka::ErrorCode error_code;
364
+
365
+ if (IsConnected()) {
366
+ scoped_shared_read_lock lock(m_connection_lock);
367
+ if (IsConnected()) {
368
+ error_code = m_client->oauthbearer_set_token_failure(errstr);
369
+ } else {
370
+ return Baton(RdKafka::ERR__STATE);
371
+ }
372
+ } else {
373
+ return Baton(RdKafka::ERR__STATE);
374
+ }
375
+
376
+ return Baton(error_code);
377
+ }
378
+
379
+ void Connection::ConfigureCallback(
380
+ const std::string &string_key, const v8::Local<v8::Function> &cb, bool add) {
381
+ if (string_key.compare("event_cb") == 0) {
382
+ if (add) {
383
+ this->m_event_cb.dispatcher.AddCallback(cb);
384
+ } else {
385
+ this->m_event_cb.dispatcher.RemoveCallback(cb);
386
+ }
387
+ }
388
+ }
389
+
390
+ // NAN METHODS
391
+
392
+ NAN_METHOD(Connection::NodeGetMetadata) {
393
+ Nan::HandleScope scope;
394
+
395
+ Connection* obj = ObjectWrap::Unwrap<Connection>(info.This());
396
+
397
+ v8::Local<v8::Object> config;
398
+ if (info[0]->IsObject()) {
399
+ config = info[0].As<v8::Object>();
400
+ } else {
401
+ config = Nan::New<v8::Object>();
402
+ }
403
+
404
+ if (!info[1]->IsFunction()) {
405
+ Nan::ThrowError("Second parameter must be a callback");
406
+ return;
407
+ }
408
+
409
+ v8::Local<v8::Function> cb = info[1].As<v8::Function>();
410
+
411
+ std::string topic = GetParameter<std::string>(config, "topic", "");
412
+ bool allTopics = GetParameter<bool>(config, "allTopics", true);
413
+ int timeout_ms = GetParameter<int64_t>(config, "timeout", 30000);
414
+
415
+ Nan::Callback *callback = new Nan::Callback(cb);
416
+
417
+ Nan::AsyncQueueWorker(new Workers::ConnectionMetadata(
418
+ callback, obj, topic, timeout_ms, allTopics));
419
+
420
+ info.GetReturnValue().Set(Nan::Null());
421
+ }
422
+
423
+ NAN_METHOD(Connection::NodeOffsetsForTimes) {
424
+ Nan::HandleScope scope;
425
+
426
+ if (info.Length() < 3 || !info[0]->IsArray()) {
427
+ // Just throw an exception
428
+ return Nan::ThrowError("Need to specify an array of topic partitions");
429
+ }
430
+
431
+ std::vector<RdKafka::TopicPartition *> toppars =
432
+ Conversion::TopicPartition::FromV8Array(info[0].As<v8::Array>());
433
+
434
+ int timeout_ms;
435
+ Nan::Maybe<uint32_t> maybeTimeout =
436
+ Nan::To<uint32_t>(info[1].As<v8::Number>());
437
+
438
+ if (maybeTimeout.IsNothing()) {
439
+ timeout_ms = 1000;
440
+ } else {
441
+ timeout_ms = static_cast<int>(maybeTimeout.FromJust());
442
+ }
443
+
444
+ v8::Local<v8::Function> cb = info[2].As<v8::Function>();
445
+ Nan::Callback *callback = new Nan::Callback(cb);
446
+
447
+ Connection* handle = ObjectWrap::Unwrap<Connection>(info.This());
448
+
449
+ Nan::AsyncQueueWorker(
450
+ new Workers::Handle::OffsetsForTimes(callback, handle,
451
+ toppars, timeout_ms));
452
+
453
+ info.GetReturnValue().Set(Nan::Null());
454
+ }
455
+
456
+ NAN_METHOD(Connection::NodeQueryWatermarkOffsets) {
457
+ Nan::HandleScope scope;
458
+
459
+ Connection* obj = ObjectWrap::Unwrap<Connection>(info.This());
460
+
461
+ if (!info[0]->IsString()) {
462
+ Nan::ThrowError("1st parameter must be a topic string");;
463
+ return;
464
+ }
465
+
466
+ if (!info[1]->IsNumber()) {
467
+ Nan::ThrowError("2nd parameter must be a partition number");
468
+ return;
469
+ }
470
+
471
+ if (!info[2]->IsNumber()) {
472
+ Nan::ThrowError("3rd parameter must be a number of milliseconds");
473
+ return;
474
+ }
475
+
476
+ if (!info[3]->IsFunction()) {
477
+ Nan::ThrowError("4th parameter must be a callback");
478
+ return;
479
+ }
480
+
481
+ // Get string pointer for the topic name
482
+ Nan::Utf8String topicUTF8(Nan::To<v8::String>(info[0]).ToLocalChecked());
483
+ // The first parameter is the topic
484
+ std::string topic_name(*topicUTF8);
485
+
486
+ // Second parameter is the partition
487
+ int32_t partition = Nan::To<int32_t>(info[1]).FromJust();
488
+
489
+ // Third parameter is the timeout
490
+ int timeout_ms = Nan::To<int>(info[2]).FromJust();
491
+
492
+ // Fourth parameter is the callback
493
+ v8::Local<v8::Function> cb = info[3].As<v8::Function>();
494
+ Nan::Callback *callback = new Nan::Callback(cb);
495
+
496
+ Nan::AsyncQueueWorker(new Workers::ConnectionQueryWatermarkOffsets(
497
+ callback, obj, topic_name, partition, timeout_ms));
498
+
499
+ info.GetReturnValue().Set(Nan::Null());
500
+ }
501
+
502
+ NAN_METHOD(Connection::NodeSetSaslCredentials) {
503
+ if (!info[0]->IsString()) {
504
+ Nan::ThrowError("1st parameter must be a username string");
505
+ return;
506
+ }
507
+
508
+ if (!info[1]->IsString()) {
509
+ Nan::ThrowError("2nd parameter must be a password string");
510
+ return;
511
+ }
512
+
513
+ // Get string pointer for the username
514
+ Nan::Utf8String usernameUTF8(Nan::To<v8::String>(info[0]).ToLocalChecked());
515
+ // The first parameter is the username
516
+ std::string username(*usernameUTF8);
517
+
518
+ // Get string pointer for the password
519
+ Nan::Utf8String passwordUTF8(Nan::To<v8::String>(info[1]).ToLocalChecked());
520
+ // The first parameter is the password
521
+ std::string password(*passwordUTF8);
522
+
523
+ Connection* obj = ObjectWrap::Unwrap<Connection>(info.This());
524
+ Baton b = obj->SetSaslCredentials(username, password);
525
+
526
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
527
+ v8::Local<v8::Value> errorObject = b.ToObject();
528
+ return Nan::ThrowError(errorObject);
529
+ }
530
+
531
+ info.GetReturnValue().Set(Nan::Null());
532
+ }
533
+
534
+
535
+ // Node methods
536
+ NAN_METHOD(Connection::NodeConfigureCallbacks) {
537
+ Nan::HandleScope scope;
538
+
539
+ if (info.Length() < 2 ||
540
+ !info[0]->IsBoolean() ||
541
+ !info[1]->IsObject()) {
542
+ // Just throw an exception
543
+ return Nan::ThrowError("Need to specify a callbacks object");
544
+ }
545
+ v8::Local<v8::Context> context = Nan::GetCurrentContext();
546
+ Connection* obj = ObjectWrap::Unwrap<Connection>(info.This());
547
+
548
+ const bool add = Nan::To<bool>(info[0]).ToChecked();
549
+ v8::Local<v8::Object> configs_object =
550
+ info[1]->ToObject(context).ToLocalChecked();
551
+ v8::Local<v8::Array> configs_property_names =
552
+ configs_object->GetOwnPropertyNames(context).ToLocalChecked();
553
+
554
+ for (unsigned int j = 0; j < configs_property_names->Length(); ++j) {
555
+ std::string configs_string_key;
556
+
557
+ v8::Local<v8::Value> configs_key =
558
+ Nan::Get(configs_property_names, j).ToLocalChecked();
559
+ v8::Local<v8::Value> configs_value =
560
+ Nan::Get(configs_object, configs_key).ToLocalChecked();
561
+
562
+ int config_type = 0;
563
+ if (configs_value->IsObject() && configs_key->IsString()) {
564
+ Nan::Utf8String configs_utf8_key(configs_key);
565
+ configs_string_key = std::string(*configs_utf8_key);
566
+ if (configs_string_key.compare("global") == 0) {
567
+ config_type = 1;
568
+ } else if (configs_string_key.compare("topic") == 0) {
569
+ config_type = 2;
570
+ } else if (configs_string_key.compare("event") == 0) {
571
+ config_type = 3;
572
+ } else {
573
+ continue;
574
+ }
575
+ } else {
576
+ continue;
577
+ }
578
+
579
+ v8::Local<v8::Object> object =
580
+ configs_value->ToObject(context).ToLocalChecked();
581
+ v8::Local<v8::Array> property_names =
582
+ object->GetOwnPropertyNames(context).ToLocalChecked();
583
+
584
+ for (unsigned int i = 0; i < property_names->Length(); ++i) {
585
+ std::string errstr;
586
+ std::string string_key;
587
+
588
+ v8::Local<v8::Value> key = Nan::Get(property_names, i).ToLocalChecked();
589
+ v8::Local<v8::Value> value = Nan::Get(object, key).ToLocalChecked();
590
+
591
+ if (key->IsString()) {
592
+ Nan::Utf8String utf8_key(key);
593
+ string_key = std::string(*utf8_key);
594
+ } else {
595
+ continue;
596
+ }
597
+
598
+ if (value->IsFunction()) {
599
+ v8::Local<v8::Function> cb = value.As<v8::Function>();
600
+ switch (config_type) {
601
+ case 1:
602
+ obj->m_gconfig->ConfigureCallback(string_key, cb, add, errstr);
603
+ if (!errstr.empty()) {
604
+ return Nan::ThrowError(errstr.c_str());
605
+ }
606
+ break;
607
+ case 2:
608
+ obj->m_tconfig->ConfigureCallback(string_key, cb, add, errstr);
609
+ if (!errstr.empty()) {
610
+ return Nan::ThrowError(errstr.c_str());
611
+ }
612
+ break;
613
+ case 3:
614
+ obj->ConfigureCallback(string_key, cb, add);
615
+ break;
616
+ }
617
+ }
618
+ }
619
+ }
620
+
621
+ info.GetReturnValue().Set(Nan::True());
622
+ }
623
+
624
+ NAN_METHOD(Connection::NodeSetOAuthBearerToken) {
625
+ if (!info[0]->IsString()) {
626
+ Nan::ThrowError("1st parameter must be a token string");
627
+ return;
628
+ }
629
+
630
+ if (!info[1]->IsNumber()) {
631
+ Nan::ThrowError("2nd parameter must be a lifetime_ms number");
632
+ return;
633
+ }
634
+
635
+ if (!info[2]->IsString()) {
636
+ Nan::ThrowError("3rd parameter must be a principal_name string");
637
+ return;
638
+ }
639
+
640
+ if (!info[3]->IsNullOrUndefined() && !info[3]->IsArray()) {
641
+ Nan::ThrowError("4th parameter must be an extensions array or null");
642
+ return;
643
+ }
644
+
645
+ // Get string pointer for the token
646
+ Nan::Utf8String tokenUtf8(Nan::To<v8::String>(info[0]).ToLocalChecked());
647
+ std::string token(*tokenUtf8);
648
+
649
+ // Get the lifetime_ms
650
+ int64_t lifetime_ms = Nan::To<int64_t>(info[1]).FromJust();
651
+
652
+ // Get string pointer for the principal_name
653
+ Nan::Utf8String principal_nameUtf8(
654
+ Nan::To<v8::String>(info[2]).ToLocalChecked());
655
+ std::string principal_name(*principal_nameUtf8);
656
+
657
+ // Get the extensions (if any)
658
+ std::list<std::string> extensions;
659
+ if (!info[3]->IsNullOrUndefined()) {
660
+ v8::Local<v8::Array> extensionsArray = info[3].As<v8::Array>();
661
+ extensions = v8ArrayToStringList(extensionsArray);
662
+ }
663
+
664
+ Connection* obj = ObjectWrap::Unwrap<Connection>(info.This());
665
+ Baton b =
666
+ obj->SetOAuthBearerToken(token, lifetime_ms, principal_name, extensions);
667
+
668
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
669
+ v8::Local<v8::Value> errorObject = b.ToObject();
670
+ return Nan::ThrowError(errorObject);
671
+ }
672
+
673
+ info.GetReturnValue().Set(Nan::Null());
674
+ }
675
+
676
+ NAN_METHOD(Connection::NodeSetOAuthBearerTokenFailure) {
677
+ if (!info[0]->IsString()) {
678
+ Nan::ThrowError("1st parameter must be an error string");
679
+ return;
680
+ }
681
+
682
+ // Get string pointer for the error string
683
+ Nan::Utf8String errstrUtf8(Nan::To<v8::String>(info[0]).ToLocalChecked());
684
+ std::string errstr(*errstrUtf8);
685
+
686
+ Connection* obj = ObjectWrap::Unwrap<Connection>(info.This());
687
+ Baton b = obj->SetOAuthBearerTokenFailure(errstr);
688
+
689
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
690
+ v8::Local<v8::Value> errorObject = b.ToObject();
691
+ return Nan::ThrowError(errorObject);
692
+ }
693
+
694
+ info.GetReturnValue().Set(Nan::Null());
695
+ }
696
+
697
+ NAN_METHOD(Connection::NodeName) {
698
+ Connection* obj = ObjectWrap::Unwrap<Connection>(info.This());
699
+ std::string name = obj->Name();
700
+ info.GetReturnValue().Set(Nan::New(name).ToLocalChecked());
701
+ }
702
+
703
+ } // namespace NodeKafka