ddc586e506df53c94040de7f88666d24b4f22d46bd4c99c69fa250c9051e17a7245b817419b0b212dfb352b344ecfead6ea7c5d6000734cc4bf5f69e249847 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603
  1. /**
  2. * We strongly discourage the use of the `async_hooks` API.
  3. * Other APIs that can cover most of its use cases include:
  4. *
  5. * * [`AsyncLocalStorage`](https://nodejs.org/docs/latest-v22.x/api/async_context.html#class-asynclocalstorage) tracks async context
  6. * * [`process.getActiveResourcesInfo()`](https://nodejs.org/docs/latest-v22.x/api/process.html#processgetactiveresourcesinfo) tracks active resources
  7. *
  8. * The `node:async_hooks` module provides an API to track asynchronous resources.
  9. * It can be accessed using:
  10. *
  11. * ```js
  12. * import async_hooks from 'node:async_hooks';
  13. * ```
  14. * @experimental
  15. * @see [source](https://github.com/nodejs/node/blob/v22.x/lib/async_hooks.js)
  16. */
  17. declare module "async_hooks" {
  18. /**
  19. * ```js
  20. * import { executionAsyncId } from 'node:async_hooks';
  21. * import fs from 'node:fs';
  22. *
  23. * console.log(executionAsyncId()); // 1 - bootstrap
  24. * const path = '.';
  25. * fs.open(path, 'r', (err, fd) => {
  26. * console.log(executionAsyncId()); // 6 - open()
  27. * });
  28. * ```
  29. *
  30. * The ID returned from `executionAsyncId()` is related to execution timing, not
  31. * causality (which is covered by `triggerAsyncId()`):
  32. *
  33. * ```js
  34. * const server = net.createServer((conn) => {
  35. * // Returns the ID of the server, not of the new connection, because the
  36. * // callback runs in the execution scope of the server's MakeCallback().
  37. * async_hooks.executionAsyncId();
  38. *
  39. * }).listen(port, () => {
  40. * // Returns the ID of a TickObject (process.nextTick()) because all
  41. * // callbacks passed to .listen() are wrapped in a nextTick().
  42. * async_hooks.executionAsyncId();
  43. * });
  44. * ```
  45. *
  46. * Promise contexts may not get precise `executionAsyncIds` by default.
  47. * See the section on [promise execution tracking](https://nodejs.org/docs/latest-v22.x/api/async_hooks.html#promise-execution-tracking).
  48. * @since v8.1.0
  49. * @return The `asyncId` of the current execution context. Useful to track when something calls.
  50. */
  51. function executionAsyncId(): number;
  52. /**
  53. * Resource objects returned by `executionAsyncResource()` are most often internal
  54. * Node.js handle objects with undocumented APIs. Using any functions or properties
  55. * on the object is likely to crash your application and should be avoided.
  56. *
  57. * Using `executionAsyncResource()` in the top-level execution context will
  58. * return an empty object as there is no handle or request object to use,
  59. * but having an object representing the top-level can be helpful.
  60. *
  61. * ```js
  62. * import { open } from 'node:fs';
  63. * import { executionAsyncId, executionAsyncResource } from 'node:async_hooks';
  64. *
  65. * console.log(executionAsyncId(), executionAsyncResource()); // 1 {}
  66. * open(new URL(import.meta.url), 'r', (err, fd) => {
  67. * console.log(executionAsyncId(), executionAsyncResource()); // 7 FSReqWrap
  68. * });
  69. * ```
  70. *
  71. * This can be used to implement continuation local storage without the
  72. * use of a tracking `Map` to store the metadata:
  73. *
  74. * ```js
  75. * import { createServer } from 'node:http';
  76. * import {
  77. * executionAsyncId,
  78. * executionAsyncResource,
  79. * createHook,
  80. * } from 'node:async_hooks';
  81. * const sym = Symbol('state'); // Private symbol to avoid pollution
  82. *
  83. * createHook({
  84. * init(asyncId, type, triggerAsyncId, resource) {
  85. * const cr = executionAsyncResource();
  86. * if (cr) {
  87. * resource[sym] = cr[sym];
  88. * }
  89. * },
  90. * }).enable();
  91. *
  92. * const server = createServer((req, res) => {
  93. * executionAsyncResource()[sym] = { state: req.url };
  94. * setTimeout(function() {
  95. * res.end(JSON.stringify(executionAsyncResource()[sym]));
  96. * }, 100);
  97. * }).listen(3000);
  98. * ```
  99. * @since v13.9.0, v12.17.0
  100. * @return The resource representing the current execution. Useful to store data within the resource.
  101. */
  102. function executionAsyncResource(): object;
  103. /**
  104. * ```js
  105. * const server = net.createServer((conn) => {
  106. * // The resource that caused (or triggered) this callback to be called
  107. * // was that of the new connection. Thus the return value of triggerAsyncId()
  108. * // is the asyncId of "conn".
  109. * async_hooks.triggerAsyncId();
  110. *
  111. * }).listen(port, () => {
  112. * // Even though all callbacks passed to .listen() are wrapped in a nextTick()
  113. * // the callback itself exists because the call to the server's .listen()
  114. * // was made. So the return value would be the ID of the server.
  115. * async_hooks.triggerAsyncId();
  116. * });
  117. * ```
  118. *
  119. * Promise contexts may not get valid `triggerAsyncId`s by default. See
  120. * the section on [promise execution tracking](https://nodejs.org/docs/latest-v22.x/api/async_hooks.html#promise-execution-tracking).
  121. * @return The ID of the resource responsible for calling the callback that is currently being executed.
  122. */
  123. function triggerAsyncId(): number;
  124. interface HookCallbacks {
  125. /**
  126. * Called when a class is constructed that has the possibility to emit an asynchronous event.
  127. * @param asyncId A unique ID for the async resource
  128. * @param type The type of the async resource
  129. * @param triggerAsyncId The unique ID of the async resource in whose execution context this async resource was created
  130. * @param resource Reference to the resource representing the async operation, needs to be released during destroy
  131. */
  132. init?(asyncId: number, type: string, triggerAsyncId: number, resource: object): void;
  133. /**
  134. * When an asynchronous operation is initiated or completes a callback is called to notify the user.
  135. * The before callback is called just before said callback is executed.
  136. * @param asyncId the unique identifier assigned to the resource about to execute the callback.
  137. */
  138. before?(asyncId: number): void;
  139. /**
  140. * Called immediately after the callback specified in `before` is completed.
  141. *
  142. * If an uncaught exception occurs during execution of the callback, then `after` will run after the `'uncaughtException'` event is emitted or a `domain`'s handler runs.
  143. * @param asyncId the unique identifier assigned to the resource which has executed the callback.
  144. */
  145. after?(asyncId: number): void;
  146. /**
  147. * Called when a promise has resolve() called. This may not be in the same execution id
  148. * as the promise itself.
  149. * @param asyncId the unique id for the promise that was resolve()d.
  150. */
  151. promiseResolve?(asyncId: number): void;
  152. /**
  153. * Called after the resource corresponding to asyncId is destroyed
  154. * @param asyncId a unique ID for the async resource
  155. */
  156. destroy?(asyncId: number): void;
  157. }
  158. interface AsyncHook {
  159. /**
  160. * Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop.
  161. */
  162. enable(): this;
  163. /**
  164. * Disable the callbacks for a given AsyncHook instance from the global pool of AsyncHook callbacks to be executed. Once a hook has been disabled it will not be called again until enabled.
  165. */
  166. disable(): this;
  167. }
  168. /**
  169. * Registers functions to be called for different lifetime events of each async
  170. * operation.
  171. *
  172. * The callbacks `init()`/`before()`/`after()`/`destroy()` are called for the
  173. * respective asynchronous event during a resource's lifetime.
  174. *
  175. * All callbacks are optional. For example, if only resource cleanup needs to
  176. * be tracked, then only the `destroy` callback needs to be passed. The
  177. * specifics of all functions that can be passed to `callbacks` is in the `Hook Callbacks` section.
  178. *
  179. * ```js
  180. * import { createHook } from 'node:async_hooks';
  181. *
  182. * const asyncHook = createHook({
  183. * init(asyncId, type, triggerAsyncId, resource) { },
  184. * destroy(asyncId) { },
  185. * });
  186. * ```
  187. *
  188. * The callbacks will be inherited via the prototype chain:
  189. *
  190. * ```js
  191. * class MyAsyncCallbacks {
  192. * init(asyncId, type, triggerAsyncId, resource) { }
  193. * destroy(asyncId) {}
  194. * }
  195. *
  196. * class MyAddedCallbacks extends MyAsyncCallbacks {
  197. * before(asyncId) { }
  198. * after(asyncId) { }
  199. * }
  200. *
  201. * const asyncHook = async_hooks.createHook(new MyAddedCallbacks());
  202. * ```
  203. *
  204. * Because promises are asynchronous resources whose lifecycle is tracked
  205. * via the async hooks mechanism, the `init()`, `before()`, `after()`, and`destroy()` callbacks _must not_ be async functions that return promises.
  206. * @since v8.1.0
  207. * @param callbacks The `Hook Callbacks` to register
  208. * @return Instance used for disabling and enabling hooks
  209. */
  210. function createHook(callbacks: HookCallbacks): AsyncHook;
  211. interface AsyncResourceOptions {
  212. /**
  213. * The ID of the execution context that created this async event.
  214. * @default executionAsyncId()
  215. */
  216. triggerAsyncId?: number | undefined;
  217. /**
  218. * Disables automatic `emitDestroy` when the object is garbage collected.
  219. * This usually does not need to be set (even if `emitDestroy` is called
  220. * manually), unless the resource's `asyncId` is retrieved and the
  221. * sensitive API's `emitDestroy` is called with it.
  222. * @default false
  223. */
  224. requireManualDestroy?: boolean | undefined;
  225. }
  226. /**
  227. * The class `AsyncResource` is designed to be extended by the embedder's async
  228. * resources. Using this, users can easily trigger the lifetime events of their
  229. * own resources.
  230. *
  231. * The `init` hook will trigger when an `AsyncResource` is instantiated.
  232. *
  233. * The following is an overview of the `AsyncResource` API.
  234. *
  235. * ```js
  236. * import { AsyncResource, executionAsyncId } from 'node:async_hooks';
  237. *
  238. * // AsyncResource() is meant to be extended. Instantiating a
  239. * // new AsyncResource() also triggers init. If triggerAsyncId is omitted then
  240. * // async_hook.executionAsyncId() is used.
  241. * const asyncResource = new AsyncResource(
  242. * type, { triggerAsyncId: executionAsyncId(), requireManualDestroy: false },
  243. * );
  244. *
  245. * // Run a function in the execution context of the resource. This will
  246. * // * establish the context of the resource
  247. * // * trigger the AsyncHooks before callbacks
  248. * // * call the provided function `fn` with the supplied arguments
  249. * // * trigger the AsyncHooks after callbacks
  250. * // * restore the original execution context
  251. * asyncResource.runInAsyncScope(fn, thisArg, ...args);
  252. *
  253. * // Call AsyncHooks destroy callbacks.
  254. * asyncResource.emitDestroy();
  255. *
  256. * // Return the unique ID assigned to the AsyncResource instance.
  257. * asyncResource.asyncId();
  258. *
  259. * // Return the trigger ID for the AsyncResource instance.
  260. * asyncResource.triggerAsyncId();
  261. * ```
  262. */
  263. class AsyncResource {
  264. /**
  265. * AsyncResource() is meant to be extended. Instantiating a
  266. * new AsyncResource() also triggers init. If triggerAsyncId is omitted then
  267. * async_hook.executionAsyncId() is used.
  268. * @param type The type of async event.
  269. * @param triggerAsyncId The ID of the execution context that created
  270. * this async event (default: `executionAsyncId()`), or an
  271. * AsyncResourceOptions object (since v9.3.0)
  272. */
  273. constructor(type: string, triggerAsyncId?: number | AsyncResourceOptions);
  274. /**
  275. * Binds the given function to the current execution context.
  276. * @since v14.8.0, v12.19.0
  277. * @param fn The function to bind to the current execution context.
  278. * @param type An optional name to associate with the underlying `AsyncResource`.
  279. */
  280. static bind<Func extends (this: ThisArg, ...args: any[]) => any, ThisArg>(
  281. fn: Func,
  282. type?: string,
  283. thisArg?: ThisArg,
  284. ): Func;
  285. /**
  286. * Binds the given function to execute to this `AsyncResource`'s scope.
  287. * @since v14.8.0, v12.19.0
  288. * @param fn The function to bind to the current `AsyncResource`.
  289. */
  290. bind<Func extends (...args: any[]) => any>(fn: Func): Func;
  291. /**
  292. * Call the provided function with the provided arguments in the execution context
  293. * of the async resource. This will establish the context, trigger the AsyncHooks
  294. * before callbacks, call the function, trigger the AsyncHooks after callbacks, and
  295. * then restore the original execution context.
  296. * @since v9.6.0
  297. * @param fn The function to call in the execution context of this async resource.
  298. * @param thisArg The receiver to be used for the function call.
  299. * @param args Optional arguments to pass to the function.
  300. */
  301. runInAsyncScope<This, Result>(
  302. fn: (this: This, ...args: any[]) => Result,
  303. thisArg?: This,
  304. ...args: any[]
  305. ): Result;
  306. /**
  307. * Call all `destroy` hooks. This should only ever be called once. An error will
  308. * be thrown if it is called more than once. This **must** be manually called. If
  309. * the resource is left to be collected by the GC then the `destroy` hooks will
  310. * never be called.
  311. * @return A reference to `asyncResource`.
  312. */
  313. emitDestroy(): this;
  314. /**
  315. * @return The unique `asyncId` assigned to the resource.
  316. */
  317. asyncId(): number;
  318. /**
  319. * @return The same `triggerAsyncId` that is passed to the `AsyncResource` constructor.
  320. */
  321. triggerAsyncId(): number;
  322. }
  323. /**
  324. * This class creates stores that stay coherent through asynchronous operations.
  325. *
  326. * While you can create your own implementation on top of the `node:async_hooks` module, `AsyncLocalStorage` should be preferred as it is a performant and memory
  327. * safe implementation that involves significant optimizations that are non-obvious
  328. * to implement.
  329. *
  330. * The following example uses `AsyncLocalStorage` to build a simple logger
  331. * that assigns IDs to incoming HTTP requests and includes them in messages
  332. * logged within each request.
  333. *
  334. * ```js
  335. * import http from 'node:http';
  336. * import { AsyncLocalStorage } from 'node:async_hooks';
  337. *
  338. * const asyncLocalStorage = new AsyncLocalStorage();
  339. *
  340. * function logWithId(msg) {
  341. * const id = asyncLocalStorage.getStore();
  342. * console.log(`${id !== undefined ? id : '-'}:`, msg);
  343. * }
  344. *
  345. * let idSeq = 0;
  346. * http.createServer((req, res) => {
  347. * asyncLocalStorage.run(idSeq++, () => {
  348. * logWithId('start');
  349. * // Imagine any chain of async operations here
  350. * setImmediate(() => {
  351. * logWithId('finish');
  352. * res.end();
  353. * });
  354. * });
  355. * }).listen(8080);
  356. *
  357. * http.get('http://localhost:8080');
  358. * http.get('http://localhost:8080');
  359. * // Prints:
  360. * // 0: start
  361. * // 1: start
  362. * // 0: finish
  363. * // 1: finish
  364. * ```
  365. *
  366. * Each instance of `AsyncLocalStorage` maintains an independent storage context.
  367. * Multiple instances can safely exist simultaneously without risk of interfering
  368. * with each other's data.
  369. * @since v13.10.0, v12.17.0
  370. */
  371. class AsyncLocalStorage<T> {
  372. /**
  373. * Binds the given function to the current execution context.
  374. * @since v19.8.0
  375. * @param fn The function to bind to the current execution context.
  376. * @return A new function that calls `fn` within the captured execution context.
  377. */
  378. static bind<Func extends (...args: any[]) => any>(fn: Func): Func;
  379. /**
  380. * Captures the current execution context and returns a function that accepts a
  381. * function as an argument. Whenever the returned function is called, it
  382. * calls the function passed to it within the captured context.
  383. *
  384. * ```js
  385. * const asyncLocalStorage = new AsyncLocalStorage();
  386. * const runInAsyncScope = asyncLocalStorage.run(123, () => AsyncLocalStorage.snapshot());
  387. * const result = asyncLocalStorage.run(321, () => runInAsyncScope(() => asyncLocalStorage.getStore()));
  388. * console.log(result); // returns 123
  389. * ```
  390. *
  391. * AsyncLocalStorage.snapshot() can replace the use of AsyncResource for simple
  392. * async context tracking purposes, for example:
  393. *
  394. * ```js
  395. * class Foo {
  396. * #runInAsyncScope = AsyncLocalStorage.snapshot();
  397. *
  398. * get() { return this.#runInAsyncScope(() => asyncLocalStorage.getStore()); }
  399. * }
  400. *
  401. * const foo = asyncLocalStorage.run(123, () => new Foo());
  402. * console.log(asyncLocalStorage.run(321, () => foo.get())); // returns 123
  403. * ```
  404. * @since v19.8.0
  405. * @return A new function with the signature `(fn: (...args) : R, ...args) : R`.
  406. */
  407. static snapshot(): <R, TArgs extends any[]>(fn: (...args: TArgs) => R, ...args: TArgs) => R;
  408. /**
  409. * Disables the instance of `AsyncLocalStorage`. All subsequent calls
  410. * to `asyncLocalStorage.getStore()` will return `undefined` until `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()` is called again.
  411. *
  412. * When calling `asyncLocalStorage.disable()`, all current contexts linked to the
  413. * instance will be exited.
  414. *
  415. * Calling `asyncLocalStorage.disable()` is required before the `asyncLocalStorage` can be garbage collected. This does not apply to stores
  416. * provided by the `asyncLocalStorage`, as those objects are garbage collected
  417. * along with the corresponding async resources.
  418. *
  419. * Use this method when the `asyncLocalStorage` is not in use anymore
  420. * in the current process.
  421. * @since v13.10.0, v12.17.0
  422. * @experimental
  423. */
  424. disable(): void;
  425. /**
  426. * Returns the current store.
  427. * If called outside of an asynchronous context initialized by
  428. * calling `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()`, it
  429. * returns `undefined`.
  430. * @since v13.10.0, v12.17.0
  431. */
  432. getStore(): T | undefined;
  433. /**
  434. * Runs a function synchronously within a context and returns its
  435. * return value. The store is not accessible outside of the callback function.
  436. * The store is accessible to any asynchronous operations created within the
  437. * callback.
  438. *
  439. * The optional `args` are passed to the callback function.
  440. *
  441. * If the callback function throws an error, the error is thrown by `run()` too.
  442. * The stacktrace is not impacted by this call and the context is exited.
  443. *
  444. * Example:
  445. *
  446. * ```js
  447. * const store = { id: 2 };
  448. * try {
  449. * asyncLocalStorage.run(store, () => {
  450. * asyncLocalStorage.getStore(); // Returns the store object
  451. * setTimeout(() => {
  452. * asyncLocalStorage.getStore(); // Returns the store object
  453. * }, 200);
  454. * throw new Error();
  455. * });
  456. * } catch (e) {
  457. * asyncLocalStorage.getStore(); // Returns undefined
  458. * // The error will be caught here
  459. * }
  460. * ```
  461. * @since v13.10.0, v12.17.0
  462. */
  463. run<R>(store: T, callback: () => R): R;
  464. run<R, TArgs extends any[]>(store: T, callback: (...args: TArgs) => R, ...args: TArgs): R;
  465. /**
  466. * Runs a function synchronously outside of a context and returns its
  467. * return value. The store is not accessible within the callback function or
  468. * the asynchronous operations created within the callback. Any `getStore()` call done within the callback function will always return `undefined`.
  469. *
  470. * The optional `args` are passed to the callback function.
  471. *
  472. * If the callback function throws an error, the error is thrown by `exit()` too.
  473. * The stacktrace is not impacted by this call and the context is re-entered.
  474. *
  475. * Example:
  476. *
  477. * ```js
  478. * // Within a call to run
  479. * try {
  480. * asyncLocalStorage.getStore(); // Returns the store object or value
  481. * asyncLocalStorage.exit(() => {
  482. * asyncLocalStorage.getStore(); // Returns undefined
  483. * throw new Error();
  484. * });
  485. * } catch (e) {
  486. * asyncLocalStorage.getStore(); // Returns the same object or value
  487. * // The error will be caught here
  488. * }
  489. * ```
  490. * @since v13.10.0, v12.17.0
  491. * @experimental
  492. */
  493. exit<R, TArgs extends any[]>(callback: (...args: TArgs) => R, ...args: TArgs): R;
  494. /**
  495. * Transitions into the context for the remainder of the current
  496. * synchronous execution and then persists the store through any following
  497. * asynchronous calls.
  498. *
  499. * Example:
  500. *
  501. * ```js
  502. * const store = { id: 1 };
  503. * // Replaces previous store with the given store object
  504. * asyncLocalStorage.enterWith(store);
  505. * asyncLocalStorage.getStore(); // Returns the store object
  506. * someAsyncOperation(() => {
  507. * asyncLocalStorage.getStore(); // Returns the same object
  508. * });
  509. * ```
  510. *
  511. * This transition will continue for the _entire_ synchronous execution.
  512. * This means that if, for example, the context is entered within an event
  513. * handler subsequent event handlers will also run within that context unless
  514. * specifically bound to another context with an `AsyncResource`. That is why `run()` should be preferred over `enterWith()` unless there are strong reasons
  515. * to use the latter method.
  516. *
  517. * ```js
  518. * const store = { id: 1 };
  519. *
  520. * emitter.on('my-event', () => {
  521. * asyncLocalStorage.enterWith(store);
  522. * });
  523. * emitter.on('my-event', () => {
  524. * asyncLocalStorage.getStore(); // Returns the same object
  525. * });
  526. *
  527. * asyncLocalStorage.getStore(); // Returns undefined
  528. * emitter.emit('my-event');
  529. * asyncLocalStorage.getStore(); // Returns the same object
  530. * ```
  531. * @since v13.11.0, v12.17.0
  532. * @experimental
  533. */
  534. enterWith(store: T): void;
  535. }
  536. /**
  537. * @since v17.2.0, v16.14.0
  538. * @return A map of provider types to the corresponding numeric id.
  539. * This map contains all the event types that might be emitted by the `async_hooks.init()` event.
  540. */
  541. namespace asyncWrapProviders {
  542. const NONE: number;
  543. const DIRHANDLE: number;
  544. const DNSCHANNEL: number;
  545. const ELDHISTOGRAM: number;
  546. const FILEHANDLE: number;
  547. const FILEHANDLECLOSEREQ: number;
  548. const FIXEDSIZEBLOBCOPY: number;
  549. const FSEVENTWRAP: number;
  550. const FSREQCALLBACK: number;
  551. const FSREQPROMISE: number;
  552. const GETADDRINFOREQWRAP: number;
  553. const GETNAMEINFOREQWRAP: number;
  554. const HEAPSNAPSHOT: number;
  555. const HTTP2SESSION: number;
  556. const HTTP2STREAM: number;
  557. const HTTP2PING: number;
  558. const HTTP2SETTINGS: number;
  559. const HTTPINCOMINGMESSAGE: number;
  560. const HTTPCLIENTREQUEST: number;
  561. const JSSTREAM: number;
  562. const JSUDPWRAP: number;
  563. const MESSAGEPORT: number;
  564. const PIPECONNECTWRAP: number;
  565. const PIPESERVERWRAP: number;
  566. const PIPEWRAP: number;
  567. const PROCESSWRAP: number;
  568. const PROMISE: number;
  569. const QUERYWRAP: number;
  570. const SHUTDOWNWRAP: number;
  571. const SIGNALWRAP: number;
  572. const STATWATCHER: number;
  573. const STREAMPIPE: number;
  574. const TCPCONNECTWRAP: number;
  575. const TCPSERVERWRAP: number;
  576. const TCPWRAP: number;
  577. const TTYWRAP: number;
  578. const UDPSENDWRAP: number;
  579. const UDPWRAP: number;
  580. const SIGINTWATCHDOG: number;
  581. const WORKER: number;
  582. const WORKERHEAPSNAPSHOT: number;
  583. const WRITEWRAP: number;
  584. const ZLIB: number;
  585. const CHECKPRIMEREQUEST: number;
  586. const PBKDF2REQUEST: number;
  587. const KEYPAIRGENREQUEST: number;
  588. const KEYGENREQUEST: number;
  589. const KEYEXPORTREQUEST: number;
  590. const CIPHERREQUEST: number;
  591. const DERIVEBITSREQUEST: number;
  592. const HASHREQUEST: number;
  593. const RANDOMBYTESREQUEST: number;
  594. const RANDOMPRIMEREQUEST: number;
  595. const SCRYPTREQUEST: number;
  596. const SIGNREQUEST: number;
  597. const TLSWRAP: number;
  598. const VERIFYREQUEST: number;
  599. }
  600. }
  601. declare module "node:async_hooks" {
  602. export * from "async_hooks";
  603. }