@jsonjoy.com/json-pack 1.20.0 → 17.59.0

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 (344) hide show
  1. package/lib/JsonPackExtension.d.ts +8 -0
  2. package/lib/JsonPackExtension.js +8 -0
  3. package/lib/JsonPackExtension.js.map +1 -1
  4. package/lib/JsonPackMpint.d.ts +25 -0
  5. package/lib/JsonPackMpint.js +31 -1
  6. package/lib/JsonPackMpint.js.map +1 -1
  7. package/lib/JsonPackValue.d.ts +10 -0
  8. package/lib/JsonPackValue.js +10 -0
  9. package/lib/JsonPackValue.js.map +1 -1
  10. package/lib/avro/AvroDecoder.d.ts +67 -0
  11. package/lib/avro/AvroDecoder.js +77 -5
  12. package/lib/avro/AvroDecoder.js.map +1 -1
  13. package/lib/avro/AvroEncoder.d.ts +71 -0
  14. package/lib/avro/AvroEncoder.js +90 -12
  15. package/lib/avro/AvroEncoder.js.map +1 -1
  16. package/lib/avro/AvroSchemaDecoder.d.ts +53 -0
  17. package/lib/avro/AvroSchemaDecoder.js +60 -3
  18. package/lib/avro/AvroSchemaDecoder.js.map +1 -1
  19. package/lib/avro/AvroSchemaEncoder.d.ts +65 -0
  20. package/lib/avro/AvroSchemaEncoder.js +84 -5
  21. package/lib/avro/AvroSchemaEncoder.js.map +1 -1
  22. package/lib/avro/AvroSchemaValidator.d.ts +10 -0
  23. package/lib/avro/AvroSchemaValidator.js +18 -1
  24. package/lib/avro/AvroSchemaValidator.js.map +1 -1
  25. package/lib/avro/types.d.ts +31 -0
  26. package/lib/avro/types.js +4 -0
  27. package/lib/avro/types.js.map +1 -1
  28. package/lib/bencode/BencodeDecoder.js +9 -9
  29. package/lib/bencode/BencodeDecoder.js.map +1 -1
  30. package/lib/bencode/BencodeEncoder.d.ts +5 -0
  31. package/lib/bencode/BencodeEncoder.js +25 -20
  32. package/lib/bencode/BencodeEncoder.js.map +1 -1
  33. package/lib/bson/BsonDecoder.js +48 -33
  34. package/lib/bson/BsonDecoder.js.map +1 -1
  35. package/lib/bson/BsonEncoder.js +11 -3
  36. package/lib/bson/BsonEncoder.js.map +1 -1
  37. package/lib/cbor/CborDecoder.d.ts +24 -0
  38. package/lib/cbor/CborDecoder.js +94 -56
  39. package/lib/cbor/CborDecoder.js.map +1 -1
  40. package/lib/cbor/CborDecoderBase.d.ts +1 -0
  41. package/lib/cbor/CborDecoderBase.js +63 -53
  42. package/lib/cbor/CborDecoderBase.js.map +1 -1
  43. package/lib/cbor/CborEncoder.d.ts +5 -0
  44. package/lib/cbor/CborEncoder.js +9 -3
  45. package/lib/cbor/CborEncoder.js.map +1 -1
  46. package/lib/cbor/CborEncoderFast.d.ts +7 -0
  47. package/lib/cbor/CborEncoderFast.js +22 -14
  48. package/lib/cbor/CborEncoderFast.js.map +1 -1
  49. package/lib/cbor/CborEncoderStable.d.ts +1 -0
  50. package/lib/cbor/CborEncoderStable.js +2 -1
  51. package/lib/cbor/CborEncoderStable.js.map +1 -1
  52. package/lib/cbor/shared.d.ts +1 -1
  53. package/lib/codecs/Codecs.d.ts +1 -1
  54. package/lib/codecs/cbor.js +1 -1
  55. package/lib/codecs/cbor.js.map +1 -1
  56. package/lib/codecs/json.js +1 -1
  57. package/lib/codecs/json.js.map +1 -1
  58. package/lib/codecs/msgpack.js +1 -1
  59. package/lib/codecs/msgpack.js.map +1 -1
  60. package/lib/ejson/EjsonDecoder.d.ts +5 -0
  61. package/lib/ejson/EjsonDecoder.js +72 -37
  62. package/lib/ejson/EjsonDecoder.js.map +1 -1
  63. package/lib/ejson/EjsonEncoder.d.ts +5 -0
  64. package/lib/ejson/EjsonEncoder.js +149 -114
  65. package/lib/ejson/EjsonEncoder.js.map +1 -1
  66. package/lib/ejson/index.js +1 -0
  67. package/lib/ejson/index.js.map +1 -1
  68. package/lib/ion/Import.d.ts +1 -1
  69. package/lib/ion/Import.js.map +1 -1
  70. package/lib/ion/IonDecoder.d.ts +0 -1
  71. package/lib/ion/IonDecoder.js +4 -3
  72. package/lib/ion/IonDecoder.js.map +1 -1
  73. package/lib/ion/IonDecoderBase.js +29 -18
  74. package/lib/ion/IonDecoderBase.js.map +1 -1
  75. package/lib/ion/IonEncoderFast.d.ts +1 -1
  76. package/lib/ion/IonEncoderFast.js +30 -30
  77. package/lib/ion/IonEncoderFast.js.map +1 -1
  78. package/lib/ion/ast.d.ts +4 -1
  79. package/lib/ion/symbols.d.ts +1 -1
  80. package/lib/json/JsonDecoder.js +72 -66
  81. package/lib/json/JsonDecoder.js.map +1 -1
  82. package/lib/json/JsonDecoderDag.js +14 -0
  83. package/lib/json/JsonDecoderDag.js.map +1 -1
  84. package/lib/json/JsonDecoderPartial.d.ts +22 -0
  85. package/lib/json/JsonDecoderPartial.js +30 -8
  86. package/lib/json/JsonDecoderPartial.js.map +1 -1
  87. package/lib/json/JsonEncoder.d.ts +5 -0
  88. package/lib/json/JsonEncoder.js +68 -54
  89. package/lib/json/JsonEncoder.js.map +1 -1
  90. package/lib/json/JsonEncoderDag.d.ts +17 -0
  91. package/lib/json/JsonEncoderDag.js +27 -10
  92. package/lib/json/JsonEncoderDag.js.map +1 -1
  93. package/lib/json/JsonEncoderStable.js +5 -5
  94. package/lib/json/JsonEncoderStable.js.map +1 -1
  95. package/lib/json-binary/codec.d.ts +8 -1
  96. package/lib/json-binary/codec.js +7 -0
  97. package/lib/json-binary/codec.js.map +1 -1
  98. package/lib/msgpack/MsgPackDecoder.d.ts +27 -0
  99. package/lib/msgpack/MsgPackDecoder.js +55 -23
  100. package/lib/msgpack/MsgPackDecoder.js.map +1 -1
  101. package/lib/msgpack/MsgPackDecoderFast.d.ts +8 -0
  102. package/lib/msgpack/MsgPackDecoderFast.js +14 -5
  103. package/lib/msgpack/MsgPackDecoderFast.js.map +1 -1
  104. package/lib/msgpack/MsgPackEncoder.d.ts +3 -0
  105. package/lib/msgpack/MsgPackEncoder.js +7 -4
  106. package/lib/msgpack/MsgPackEncoder.js.map +1 -1
  107. package/lib/msgpack/MsgPackEncoderFast.d.ts +26 -4
  108. package/lib/msgpack/MsgPackEncoderFast.js +31 -0
  109. package/lib/msgpack/MsgPackEncoderFast.js.map +1 -1
  110. package/lib/msgpack/MsgPackEncoderStable.d.ts +3 -0
  111. package/lib/msgpack/MsgPackEncoderStable.js +3 -0
  112. package/lib/msgpack/MsgPackEncoderStable.js.map +1 -1
  113. package/lib/msgpack/MsgPackToJsonConverter.d.ts +30 -4
  114. package/lib/msgpack/MsgPackToJsonConverter.js +32 -5
  115. package/lib/msgpack/MsgPackToJsonConverter.js.map +1 -1
  116. package/lib/msgpack/index.d.ts +29 -0
  117. package/lib/msgpack/index.js +30 -0
  118. package/lib/msgpack/index.js.map +1 -1
  119. package/lib/msgpack/shallow-read.js +7 -7
  120. package/lib/msgpack/shallow-read.js.map +1 -1
  121. package/lib/msgpack/types.d.ts +1 -0
  122. package/lib/msgpack/util.d.ts +1 -1
  123. package/lib/nfs/v3/FullNfsv3Encoder.d.ts +3 -3
  124. package/lib/nfs/v3/FullNfsv3Encoder.js +3 -3
  125. package/lib/nfs/v3/FullNfsv3Encoder.js.map +1 -1
  126. package/lib/nfs/v3/Nfsv3Decoder.js +51 -50
  127. package/lib/nfs/v3/Nfsv3Decoder.js.map +1 -1
  128. package/lib/nfs/v3/Nfsv3Encoder.d.ts +2 -2
  129. package/lib/nfs/v3/Nfsv3Encoder.js +52 -52
  130. package/lib/nfs/v3/Nfsv3Encoder.js.map +1 -1
  131. package/lib/nfs/v3/constants.d.ts +34 -0
  132. package/lib/nfs/v3/constants.js +4 -0
  133. package/lib/nfs/v3/constants.js.map +1 -1
  134. package/lib/nfs/v3/locks/NlmDecoder.js +20 -20
  135. package/lib/nfs/v3/locks/NlmDecoder.js.map +1 -1
  136. package/lib/nfs/v3/locks/NlmEncoder.d.ts +2 -2
  137. package/lib/nfs/v3/locks/NlmEncoder.js +20 -20
  138. package/lib/nfs/v3/locks/NlmEncoder.js.map +1 -1
  139. package/lib/nfs/v3/locks/constants.d.ts +9 -0
  140. package/lib/nfs/v3/locks/messages.d.ts +58 -1
  141. package/lib/nfs/v3/locks/messages.js +54 -0
  142. package/lib/nfs/v3/locks/messages.js.map +1 -1
  143. package/lib/nfs/v3/locks/structs.d.ts +15 -0
  144. package/lib/nfs/v3/locks/structs.js +15 -0
  145. package/lib/nfs/v3/locks/structs.js.map +1 -1
  146. package/lib/nfs/v3/messages.d.ts +249 -0
  147. package/lib/nfs/v3/messages.js +249 -0
  148. package/lib/nfs/v3/messages.js.map +1 -1
  149. package/lib/nfs/v3/mount/MountDecoder.js +12 -12
  150. package/lib/nfs/v3/mount/MountEncoder.d.ts +2 -2
  151. package/lib/nfs/v3/mount/MountEncoder.js +13 -13
  152. package/lib/nfs/v3/mount/MountEncoder.js.map +1 -1
  153. package/lib/nfs/v3/mount/constants.d.ts +9 -0
  154. package/lib/nfs/v3/mount/messages.d.ts +31 -1
  155. package/lib/nfs/v3/mount/messages.js +27 -0
  156. package/lib/nfs/v3/mount/messages.js.map +1 -1
  157. package/lib/nfs/v3/mount/structs.d.ts +15 -0
  158. package/lib/nfs/v3/mount/structs.js +15 -0
  159. package/lib/nfs/v3/mount/structs.js.map +1 -1
  160. package/lib/nfs/v3/structs.d.ts +78 -0
  161. package/lib/nfs/v3/structs.js +78 -0
  162. package/lib/nfs/v3/structs.js.map +1 -1
  163. package/lib/nfs/v4/Nfsv4Decoder.d.ts +14 -12
  164. package/lib/nfs/v4/Nfsv4Decoder.js +241 -165
  165. package/lib/nfs/v4/Nfsv4Decoder.js.map +1 -1
  166. package/lib/nfs/v4/Nfsv4Encoder.d.ts +6 -93
  167. package/lib/nfs/v4/Nfsv4Encoder.js +8 -824
  168. package/lib/nfs/v4/Nfsv4Encoder.js.map +1 -1
  169. package/lib/nfs/v4/Nfsv4FullEncoder.d.ts +32 -0
  170. package/lib/nfs/v4/Nfsv4FullEncoder.js +72 -0
  171. package/lib/nfs/v4/Nfsv4FullEncoder.js.map +1 -0
  172. package/lib/nfs/v4/attributes.d.ts +79 -0
  173. package/lib/nfs/v4/attributes.js +265 -0
  174. package/lib/nfs/v4/attributes.js.map +1 -0
  175. package/lib/nfs/v4/builder.d.ts +333 -0
  176. package/lib/nfs/v4/builder.js +460 -0
  177. package/lib/nfs/v4/builder.js.map +1 -0
  178. package/lib/nfs/v4/client/NfsFsDir.d.ts +23 -0
  179. package/lib/nfs/v4/client/NfsFsDir.js +132 -0
  180. package/lib/nfs/v4/client/NfsFsDir.js.map +1 -0
  181. package/lib/nfs/v4/client/NfsFsDirent.d.ts +17 -0
  182. package/lib/nfs/v4/client/NfsFsDirent.js +35 -0
  183. package/lib/nfs/v4/client/NfsFsDirent.js.map +1 -0
  184. package/lib/nfs/v4/client/NfsFsFileHandle.d.ts +35 -0
  185. package/lib/nfs/v4/client/NfsFsFileHandle.js +271 -0
  186. package/lib/nfs/v4/client/NfsFsFileHandle.js.map +1 -0
  187. package/lib/nfs/v4/client/NfsFsStats.d.ts +34 -0
  188. package/lib/nfs/v4/client/NfsFsStats.js +52 -0
  189. package/lib/nfs/v4/client/NfsFsStats.js.map +1 -0
  190. package/lib/nfs/v4/client/Nfsv4FsClient.d.ts +53 -0
  191. package/lib/nfs/v4/client/Nfsv4FsClient.js +812 -0
  192. package/lib/nfs/v4/client/Nfsv4FsClient.js.map +1 -0
  193. package/lib/nfs/v4/client/Nfsv4TcpClient.d.ts +41 -0
  194. package/lib/nfs/v4/client/Nfsv4TcpClient.js +216 -0
  195. package/lib/nfs/v4/client/Nfsv4TcpClient.js.map +1 -0
  196. package/lib/nfs/v4/client/types.d.ts +9 -0
  197. package/lib/nfs/v4/client/types.js +3 -0
  198. package/lib/nfs/v4/client/types.js.map +1 -0
  199. package/lib/nfs/v4/constants.d.ts +80 -0
  200. package/lib/nfs/v4/constants.js +4 -0
  201. package/lib/nfs/v4/constants.js.map +1 -1
  202. package/lib/nfs/v4/format.d.ts +23 -0
  203. package/lib/nfs/v4/format.js +870 -0
  204. package/lib/nfs/v4/format.js.map +1 -0
  205. package/lib/nfs/v4/index.d.ts +3 -1
  206. package/lib/nfs/v4/index.js +3 -1
  207. package/lib/nfs/v4/index.js.map +1 -1
  208. package/lib/nfs/v4/messages.d.ts +208 -90
  209. package/lib/nfs/v4/messages.js +585 -1
  210. package/lib/nfs/v4/messages.js.map +1 -1
  211. package/lib/nfs/v4/server/Nfsv4CompoundProcCtx.d.ts +30 -0
  212. package/lib/nfs/v4/server/Nfsv4CompoundProcCtx.js +176 -0
  213. package/lib/nfs/v4/server/Nfsv4CompoundProcCtx.js.map +1 -0
  214. package/lib/nfs/v4/server/Nfsv4Connection.d.ts +45 -0
  215. package/lib/nfs/v4/server/Nfsv4Connection.js +163 -0
  216. package/lib/nfs/v4/server/Nfsv4Connection.js.map +1 -0
  217. package/lib/nfs/v4/server/Nfsv4TcpServer.d.ts +25 -0
  218. package/lib/nfs/v4/server/Nfsv4TcpServer.js +92 -0
  219. package/lib/nfs/v4/server/Nfsv4TcpServer.js.map +1 -0
  220. package/lib/nfs/v4/server/operations/ByteRangeLock.d.ts +79 -0
  221. package/lib/nfs/v4/server/operations/ByteRangeLock.js +63 -0
  222. package/lib/nfs/v4/server/operations/ByteRangeLock.js.map +1 -0
  223. package/lib/nfs/v4/server/operations/ClientRecord.d.ts +110 -0
  224. package/lib/nfs/v4/server/operations/ClientRecord.js +70 -0
  225. package/lib/nfs/v4/server/operations/ClientRecord.js.map +1 -0
  226. package/lib/nfs/v4/server/operations/FilesystemStats.d.ts +30 -0
  227. package/lib/nfs/v4/server/operations/FilesystemStats.js +30 -0
  228. package/lib/nfs/v4/server/operations/FilesystemStats.js.map +1 -0
  229. package/lib/nfs/v4/server/operations/LockOwnerState.d.ts +82 -0
  230. package/lib/nfs/v4/server/operations/LockOwnerState.js +57 -0
  231. package/lib/nfs/v4/server/operations/LockOwnerState.js.map +1 -0
  232. package/lib/nfs/v4/server/operations/LockStateid.d.ts +64 -0
  233. package/lib/nfs/v4/server/operations/LockStateid.js +58 -0
  234. package/lib/nfs/v4/server/operations/LockStateid.js.map +1 -0
  235. package/lib/nfs/v4/server/operations/Nfsv4Operations.d.ts +45 -0
  236. package/lib/nfs/v4/server/operations/Nfsv4Operations.js +3 -0
  237. package/lib/nfs/v4/server/operations/Nfsv4Operations.js.map +1 -0
  238. package/lib/nfs/v4/server/operations/Nfsv4OperationsNotImpl.d.ts +42 -0
  239. package/lib/nfs/v4/server/operations/Nfsv4OperationsNotImpl.js +159 -0
  240. package/lib/nfs/v4/server/operations/Nfsv4OperationsNotImpl.js.map +1 -0
  241. package/lib/nfs/v4/server/operations/OpenFileState.d.ts +102 -0
  242. package/lib/nfs/v4/server/operations/OpenFileState.js +68 -0
  243. package/lib/nfs/v4/server/operations/OpenFileState.js.map +1 -0
  244. package/lib/nfs/v4/server/operations/OpenOwnerState.d.ts +83 -0
  245. package/lib/nfs/v4/server/operations/OpenOwnerState.js +58 -0
  246. package/lib/nfs/v4/server/operations/OpenOwnerState.js.map +1 -0
  247. package/lib/nfs/v4/server/operations/node/Nfsv4OperationsNode.d.ts +169 -0
  248. package/lib/nfs/v4/server/operations/node/Nfsv4OperationsNode.js +1474 -0
  249. package/lib/nfs/v4/server/operations/node/Nfsv4OperationsNode.js.map +1 -0
  250. package/lib/nfs/v4/server/operations/node/attrs.d.ts +17 -0
  251. package/lib/nfs/v4/server/operations/node/attrs.js +275 -0
  252. package/lib/nfs/v4/server/operations/node/attrs.js.map +1 -0
  253. package/lib/nfs/v4/server/operations/node/fh.d.ts +93 -0
  254. package/lib/nfs/v4/server/operations/node/fh.js +209 -0
  255. package/lib/nfs/v4/server/operations/node/fh.js.map +1 -0
  256. package/lib/nfs/v4/server/operations/node/util.d.ts +4 -0
  257. package/lib/nfs/v4/server/operations/node/util.js +17 -0
  258. package/lib/nfs/v4/server/operations/node/util.js.map +1 -0
  259. package/lib/nfs/v4/server/types.d.ts +4 -0
  260. package/lib/nfs/v4/server/types.js +3 -0
  261. package/lib/nfs/v4/server/types.js.map +1 -0
  262. package/lib/nfs/v4/server/util.d.ts +5 -0
  263. package/lib/nfs/v4/server/util.js +184 -0
  264. package/lib/nfs/v4/server/util.js.map +1 -0
  265. package/lib/nfs/v4/structs.d.ts +243 -56
  266. package/lib/nfs/v4/structs.js +367 -17
  267. package/lib/nfs/v4/structs.js.map +1 -1
  268. package/lib/resp/RespDecoder.d.ts +9 -0
  269. package/lib/resp/RespDecoder.js +93 -76
  270. package/lib/resp/RespDecoder.js.map +1 -1
  271. package/lib/resp/RespEncoder.d.ts +8 -0
  272. package/lib/resp/RespEncoder.js +107 -89
  273. package/lib/resp/RespEncoder.js.map +1 -1
  274. package/lib/resp/RespEncoderLegacy.d.ts +3 -0
  275. package/lib/resp/RespEncoderLegacy.js +7 -4
  276. package/lib/resp/RespEncoderLegacy.js.map +1 -1
  277. package/lib/resp/RespStreamingDecoder.d.ts +48 -0
  278. package/lib/resp/RespStreamingDecoder.js +48 -0
  279. package/lib/resp/RespStreamingDecoder.js.map +1 -1
  280. package/lib/resp/constants.d.ts +19 -19
  281. package/lib/rm/RmRecordDecoder.js.map +1 -1
  282. package/lib/rm/RmRecordEncoder.d.ts +17 -1
  283. package/lib/rm/RmRecordEncoder.js +40 -1
  284. package/lib/rm/RmRecordEncoder.js.map +1 -1
  285. package/lib/rpc/RpcMessageDecoder.d.ts +1 -1
  286. package/lib/rpc/RpcMessageDecoder.js +11 -8
  287. package/lib/rpc/RpcMessageDecoder.js.map +1 -1
  288. package/lib/rpc/RpcMessageEncoder.d.ts +2 -2
  289. package/lib/rpc/RpcMessageEncoder.js +6 -6
  290. package/lib/rpc/RpcMessageEncoder.js.map +1 -1
  291. package/lib/rpc/constants.d.ts +76 -28
  292. package/lib/rpc/constants.js +10 -0
  293. package/lib/rpc/constants.js.map +1 -1
  294. package/lib/ssh/SshDecoder.d.ts +47 -1
  295. package/lib/ssh/SshDecoder.js +52 -2
  296. package/lib/ssh/SshDecoder.js.map +1 -1
  297. package/lib/ssh/SshEncoder.d.ts +70 -1
  298. package/lib/ssh/SshEncoder.js +81 -8
  299. package/lib/ssh/SshEncoder.js.map +1 -1
  300. package/lib/ssh/index.d.ts +6 -0
  301. package/lib/ssh/index.js +6 -0
  302. package/lib/ssh/index.js.map +1 -1
  303. package/lib/ubjson/UbjsonDecoder.js +1 -1
  304. package/lib/ubjson/UbjsonDecoder.js.map +1 -1
  305. package/lib/ubjson/UbjsonEncoder.js +6 -5
  306. package/lib/ubjson/UbjsonEncoder.js.map +1 -1
  307. package/lib/util/CompressionTable.js +4 -4
  308. package/lib/util/CompressionTable.js.map +1 -1
  309. package/lib/util/DecompressionTable.js +3 -2
  310. package/lib/util/DecompressionTable.js.map +1 -1
  311. package/lib/ws/WsFrameDecoder.d.ts +18 -0
  312. package/lib/ws/WsFrameDecoder.js +18 -0
  313. package/lib/ws/WsFrameDecoder.js.map +1 -1
  314. package/lib/ws/WsFrameEncoder.d.ts +1 -1
  315. package/lib/ws/WsFrameEncoder.js +3 -3
  316. package/lib/ws/WsFrameEncoder.js.map +1 -1
  317. package/lib/ws/constants.js +5 -0
  318. package/lib/ws/constants.js.map +1 -1
  319. package/lib/xdr/XdrDecoder.d.ts +62 -0
  320. package/lib/xdr/XdrDecoder.js +73 -6
  321. package/lib/xdr/XdrDecoder.js.map +1 -1
  322. package/lib/xdr/XdrEncoder.d.ts +71 -0
  323. package/lib/xdr/XdrEncoder.js +88 -13
  324. package/lib/xdr/XdrEncoder.js.map +1 -1
  325. package/lib/xdr/XdrSchemaDecoder.d.ts +40 -0
  326. package/lib/xdr/XdrSchemaDecoder.js +52 -0
  327. package/lib/xdr/XdrSchemaDecoder.js.map +1 -1
  328. package/lib/xdr/XdrSchemaEncoder.d.ts +5 -0
  329. package/lib/xdr/XdrSchemaEncoder.js +9 -0
  330. package/lib/xdr/XdrSchemaEncoder.js.map +1 -1
  331. package/lib/xdr/XdrSchemaValidator.d.ts +9 -0
  332. package/lib/xdr/XdrSchemaValidator.js +42 -11
  333. package/lib/xdr/XdrSchemaValidator.js.map +1 -1
  334. package/lib/xdr/XdrUnion.d.ts +5 -0
  335. package/lib/xdr/XdrUnion.js +5 -0
  336. package/lib/xdr/XdrUnion.js.map +1 -1
  337. package/lib/xdr/index.d.ts +14 -0
  338. package/lib/xdr/index.js +14 -0
  339. package/lib/xdr/index.js.map +1 -1
  340. package/lib/xdr/types.d.ts +52 -0
  341. package/package.json +35 -56
  342. package/lib/nfs/v4/FullNfsv4Encoder.d.ts +0 -28
  343. package/lib/nfs/v4/FullNfsv4Encoder.js +0 -73
  344. package/lib/nfs/v4/FullNfsv4Encoder.js.map +0 -1
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Nfsv4TcpServer = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const net = tslib_1.__importStar(require("net"));
6
+ const Nfsv4Connection_1 = require("./Nfsv4Connection");
7
+ /* tslint:disable:no-console */
8
+ const PORT = Number(process.env.NFS_PORT) || Number(process.env.PORT) || 2049;
9
+ const HOST = process.env.NFS_HOST
10
+ ? String(process.env.NFS_HOST)
11
+ : process.env.HOST
12
+ ? String(process.env.HOST)
13
+ : '127.0.0.1';
14
+ class Nfsv4TcpServer {
15
+ static start(opts) {
16
+ const server = new Nfsv4TcpServer(opts);
17
+ server.start().catch(console.error);
18
+ }
19
+ constructor(opts) {
20
+ this.port = PORT;
21
+ this.host = HOST;
22
+ this.debug = false;
23
+ this.port = opts.port ?? PORT;
24
+ this.host = opts.host ?? HOST;
25
+ this.debug = opts.debug ?? false;
26
+ this.logger = opts.logger ?? console;
27
+ const ops = opts.ops;
28
+ const server = (this.server = new net.Server());
29
+ server.on('connection', (socket) => {
30
+ if (this.debug)
31
+ this.logger.log('New connection from', socket.remoteAddress, 'port', socket.remotePort);
32
+ new Nfsv4Connection_1.Nfsv4Connection({
33
+ duplex: socket,
34
+ ops,
35
+ debug: this.debug,
36
+ logger: this.logger,
37
+ });
38
+ });
39
+ server.on('error', opts.onError ??
40
+ ((err) => {
41
+ if (this.debug)
42
+ this.logger.error('Server error:', err.message);
43
+ process.exit(1);
44
+ }));
45
+ if (opts.stopOnSigint ?? true) {
46
+ this.sigintHandler = () => {
47
+ if (this.debug)
48
+ this.logger.log('\nShutting down NFSv4 server...');
49
+ this.cleanup();
50
+ process.exit(0);
51
+ };
52
+ process.on('SIGINT', this.sigintHandler);
53
+ }
54
+ }
55
+ cleanup() {
56
+ if (this.sigintHandler) {
57
+ process.off('SIGINT', this.sigintHandler);
58
+ this.sigintHandler = undefined;
59
+ }
60
+ this.server.close((err) => {
61
+ if (this.debug && err)
62
+ this.logger.error('Error closing server:', err);
63
+ });
64
+ }
65
+ stop() {
66
+ return new Promise((resolve) => {
67
+ this.cleanup();
68
+ this.server.close(() => {
69
+ if (this.debug)
70
+ this.logger.log('NFSv4 server closed');
71
+ resolve();
72
+ });
73
+ });
74
+ }
75
+ start(port = this.port, host = this.host) {
76
+ if (this.debug)
77
+ this.logger.log(`Starting NFSv4 TCP server on ${host}:${port}...`);
78
+ return new Promise((resolve, reject) => {
79
+ const onError = (err) => reject(err);
80
+ const server = this.server;
81
+ server.on('error', onError);
82
+ server.listen(port, host, () => {
83
+ if (this.debug)
84
+ this.logger.log(`NFSv4 TCP server listening on ${host}:${port}`);
85
+ server.off('error', onError);
86
+ resolve();
87
+ });
88
+ });
89
+ }
90
+ }
91
+ exports.Nfsv4TcpServer = Nfsv4TcpServer;
92
+ //# sourceMappingURL=Nfsv4TcpServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Nfsv4TcpServer.js","sourceRoot":"","sources":["../../../../src/nfs/v4/server/Nfsv4TcpServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import type * as struct from '../../structs';
2
+ /**
3
+ * Byte-range lock record for NFSv4 LOCK operations.
4
+ * Represents a single byte-range lock held by a lock-owner on a file.
5
+ */
6
+ export declare class ByteRangeLock {
7
+ /**
8
+ * Stateid associated with this lock.
9
+ * Used by client to identify this lock in subsequent operations (LOCKU, etc.).
10
+ */
11
+ readonly stateid: struct.Nfsv4Stateid;
12
+ /**
13
+ * Absolute file system path of the locked file.
14
+ * Used to identify which file this lock applies to.
15
+ */
16
+ readonly path: string;
17
+ /**
18
+ * Lock type - READ or WRITE lock.
19
+ * READ locks (shared) can coexist with other READ locks.
20
+ * WRITE locks (exclusive) conflict with all other locks.
21
+ */
22
+ readonly locktype: number;
23
+ /**
24
+ * Starting byte offset of the locked range.
25
+ * 0-based offset from start of file.
26
+ */
27
+ readonly offset: bigint;
28
+ /**
29
+ * Length of the locked range in bytes.
30
+ * Special value 0xFFFFFFFFFFFFFFFF means "to end of file".
31
+ */
32
+ readonly length: bigint;
33
+ /**
34
+ * Key identifying the lock-owner that holds this lock.
35
+ * Format: `${clientid}:${base64(owner)}`.
36
+ * Links this lock back to the owner for cleanup and conflict checking.
37
+ */
38
+ readonly lockOwnerKey: string;
39
+ constructor(
40
+ /**
41
+ * Stateid associated with this lock.
42
+ * Used by client to identify this lock in subsequent operations (LOCKU, etc.).
43
+ */
44
+ stateid: struct.Nfsv4Stateid,
45
+ /**
46
+ * Absolute file system path of the locked file.
47
+ * Used to identify which file this lock applies to.
48
+ */
49
+ path: string,
50
+ /**
51
+ * Lock type - READ or WRITE lock.
52
+ * READ locks (shared) can coexist with other READ locks.
53
+ * WRITE locks (exclusive) conflict with all other locks.
54
+ */
55
+ locktype: number,
56
+ /**
57
+ * Starting byte offset of the locked range.
58
+ * 0-based offset from start of file.
59
+ */
60
+ offset: bigint,
61
+ /**
62
+ * Length of the locked range in bytes.
63
+ * Special value 0xFFFFFFFFFFFFFFFF means "to end of file".
64
+ */
65
+ length: bigint,
66
+ /**
67
+ * Key identifying the lock-owner that holds this lock.
68
+ * Format: `${clientid}:${base64(owner)}`.
69
+ * Links this lock back to the owner for cleanup and conflict checking.
70
+ */
71
+ lockOwnerKey: string);
72
+ /**
73
+ * Check if this lock overlaps with a given byte range.
74
+ * @param offset - Start offset to check
75
+ * @param length - Length to check
76
+ * @returns true if ranges overlap
77
+ */
78
+ overlaps(offset: bigint, length: bigint): boolean;
79
+ }
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ByteRangeLock = void 0;
4
+ /**
5
+ * Byte-range lock record for NFSv4 LOCK operations.
6
+ * Represents a single byte-range lock held by a lock-owner on a file.
7
+ */
8
+ class ByteRangeLock {
9
+ constructor(
10
+ /**
11
+ * Stateid associated with this lock.
12
+ * Used by client to identify this lock in subsequent operations (LOCKU, etc.).
13
+ */
14
+ stateid,
15
+ /**
16
+ * Absolute file system path of the locked file.
17
+ * Used to identify which file this lock applies to.
18
+ */
19
+ path,
20
+ /**
21
+ * Lock type - READ or WRITE lock.
22
+ * READ locks (shared) can coexist with other READ locks.
23
+ * WRITE locks (exclusive) conflict with all other locks.
24
+ */
25
+ locktype,
26
+ /**
27
+ * Starting byte offset of the locked range.
28
+ * 0-based offset from start of file.
29
+ */
30
+ offset,
31
+ /**
32
+ * Length of the locked range in bytes.
33
+ * Special value 0xFFFFFFFFFFFFFFFF means "to end of file".
34
+ */
35
+ length,
36
+ /**
37
+ * Key identifying the lock-owner that holds this lock.
38
+ * Format: `${clientid}:${base64(owner)}`.
39
+ * Links this lock back to the owner for cleanup and conflict checking.
40
+ */
41
+ lockOwnerKey) {
42
+ this.stateid = stateid;
43
+ this.path = path;
44
+ this.locktype = locktype;
45
+ this.offset = offset;
46
+ this.length = length;
47
+ this.lockOwnerKey = lockOwnerKey;
48
+ }
49
+ /**
50
+ * Check if this lock overlaps with a given byte range.
51
+ * @param offset - Start offset to check
52
+ * @param length - Length to check
53
+ * @returns true if ranges overlap
54
+ */
55
+ overlaps(offset, length) {
56
+ const MAX_UINT64 = BigInt('0xFFFFFFFFFFFFFFFF');
57
+ const thisEnd = this.length === MAX_UINT64 ? MAX_UINT64 : this.offset + this.length;
58
+ const otherEnd = length === MAX_UINT64 ? MAX_UINT64 : offset + length;
59
+ return this.offset < otherEnd && offset < thisEnd;
60
+ }
61
+ }
62
+ exports.ByteRangeLock = ByteRangeLock;
63
+ //# sourceMappingURL=ByteRangeLock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ByteRangeLock.js","sourceRoot":"","sources":["../../../../../src/nfs/v4/server/operations/ByteRangeLock.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACH,MAAa,aAAa;IACxB;IACE;;;OAGG;IACa,OAA4B;IAE5C;;;OAGG;IACa,IAAY;IAE5B;;;;OAIG;IACa,QAAgB;IAEhC;;;OAGG;IACa,MAAc;IAE9B;;;OAGG;IACa,MAAc;IAE9B;;;;OAIG;IACa,YAAoB;QAhCpB,YAAO,GAAP,OAAO,CAAqB;QAM5B,SAAI,GAAJ,IAAI,CAAQ;QAOZ,aAAQ,GAAR,QAAQ,CAAQ;QAMhB,WAAM,GAAN,MAAM,CAAQ;QAMd,WAAM,GAAN,MAAM,CAAQ;QAOd,iBAAY,GAAZ,YAAY,CAAQ;IACnC,CAAC;IAEJ;;;;;OAKG;IACI,QAAQ,CAAC,MAAc,EAAE,MAAc;QAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACpF,MAAM,QAAQ,GAAG,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;QACtE,OAAO,IAAI,CAAC,MAAM,GAAG,QAAQ,IAAI,MAAM,GAAG,OAAO,CAAC;IACpD,CAAC;CACF;AArDD,sCAqDC"}
@@ -0,0 +1,110 @@
1
+ import type * as msg from '../../messages';
2
+ import type * as struct from '../../structs';
3
+ /** Client state record for NFS v4 client registration. */
4
+ export declare class ClientRecord {
5
+ /**
6
+ * Principal associated with this client (from RPC credentials).
7
+ */
8
+ readonly principal: string;
9
+ /**
10
+ * Client verifier - used to detect client reboots.
11
+ * If client sends SETCLIENTID with same clientIdString but different verifier,
12
+ * it indicates the client rebooted and old state should be discarded.
13
+ * Size 8 bytes (NFS4_VERIFIER_SIZE) buffer.
14
+ */
15
+ readonly verifier: Uint8Array;
16
+ /**
17
+ * Client identifier string - globally unique client identity.
18
+ * Typically contains hostname or other unique data.
19
+ * Used to find existing client records across SETCLIENTID calls.
20
+ */
21
+ readonly clientIdString: Uint8Array;
22
+ /**
23
+ * Callback information - RPC program number and network address.
24
+ * Used by server to initiate callbacks to client (e.g., for delegation recalls).
25
+ * Server opens new TCP connection to client using this address when needed.
26
+ */
27
+ readonly callback: struct.Nfsv4CbClient;
28
+ /**
29
+ * Callback identifier - client-provided value.
30
+ * Sent by server in callback RPCs to help client distinguish which
31
+ * server is calling back (useful if client talks to multiple servers).
32
+ */
33
+ readonly callbackIdent: number;
34
+ /**
35
+ * SETCLIENTID confirmation verifier - random 8-byte token.
36
+ * Generated by server, returned to client, must be echoed back in
37
+ * SETCLIENTID_CONFIRM to prove client received the SETCLIENTID response.
38
+ * Prevents race conditions and stale client ID reuse.
39
+ *
40
+ * const NFS4_VERIFIER_SIZE = 8;
41
+ * typedef opaque verifier4[NFS4_VERIFIER_SIZE];
42
+ */
43
+ readonly setclientidConfirm: Uint8Array;
44
+ /**
45
+ * Cached SETCLIENTID response for duplicate request handling.
46
+ * If a client repeats a SETCLIENTID request (same clientIdString and verifier),
47
+ * server can return this cached response instead of creating a new record.
48
+ * This helps handle network retries and duplicate requests gracefully.
49
+ */
50
+ cache: msg.Nfsv4SetclientidResponse | undefined;
51
+ /**
52
+ * Last time this client renewed its lease (in milliseconds since epoch).
53
+ * Per RFC 7530 §9.5, any stateful operation from the client renews the lease.
54
+ * The server must track this to detect expired leases and revoke client state.
55
+ */
56
+ lastRenew: number;
57
+ constructor(
58
+ /**
59
+ * Principal associated with this client (from RPC credentials).
60
+ */
61
+ principal: string,
62
+ /**
63
+ * Client verifier - used to detect client reboots.
64
+ * If client sends SETCLIENTID with same clientIdString but different verifier,
65
+ * it indicates the client rebooted and old state should be discarded.
66
+ * Size 8 bytes (NFS4_VERIFIER_SIZE) buffer.
67
+ */
68
+ verifier: Uint8Array,
69
+ /**
70
+ * Client identifier string - globally unique client identity.
71
+ * Typically contains hostname or other unique data.
72
+ * Used to find existing client records across SETCLIENTID calls.
73
+ */
74
+ clientIdString: Uint8Array,
75
+ /**
76
+ * Callback information - RPC program number and network address.
77
+ * Used by server to initiate callbacks to client (e.g., for delegation recalls).
78
+ * Server opens new TCP connection to client using this address when needed.
79
+ */
80
+ callback: struct.Nfsv4CbClient,
81
+ /**
82
+ * Callback identifier - client-provided value.
83
+ * Sent by server in callback RPCs to help client distinguish which
84
+ * server is calling back (useful if client talks to multiple servers).
85
+ */
86
+ callbackIdent: number,
87
+ /**
88
+ * SETCLIENTID confirmation verifier - random 8-byte token.
89
+ * Generated by server, returned to client, must be echoed back in
90
+ * SETCLIENTID_CONFIRM to prove client received the SETCLIENTID response.
91
+ * Prevents race conditions and stale client ID reuse.
92
+ *
93
+ * const NFS4_VERIFIER_SIZE = 8;
94
+ * typedef opaque verifier4[NFS4_VERIFIER_SIZE];
95
+ */
96
+ setclientidConfirm: Uint8Array,
97
+ /**
98
+ * Cached SETCLIENTID response for duplicate request handling.
99
+ * If a client repeats a SETCLIENTID request (same clientIdString and verifier),
100
+ * server can return this cached response instead of creating a new record.
101
+ * This helps handle network retries and duplicate requests gracefully.
102
+ */
103
+ cache?: msg.Nfsv4SetclientidResponse | undefined,
104
+ /**
105
+ * Last time this client renewed its lease (in milliseconds since epoch).
106
+ * Per RFC 7530 §9.5, any stateful operation from the client renews the lease.
107
+ * The server must track this to detect expired leases and revoke client state.
108
+ */
109
+ lastRenew?: number);
110
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClientRecord = void 0;
4
+ /** Client state record for NFS v4 client registration. */
5
+ class ClientRecord {
6
+ constructor(
7
+ /**
8
+ * Principal associated with this client (from RPC credentials).
9
+ */
10
+ principal,
11
+ /**
12
+ * Client verifier - used to detect client reboots.
13
+ * If client sends SETCLIENTID with same clientIdString but different verifier,
14
+ * it indicates the client rebooted and old state should be discarded.
15
+ * Size 8 bytes (NFS4_VERIFIER_SIZE) buffer.
16
+ */
17
+ verifier,
18
+ /**
19
+ * Client identifier string - globally unique client identity.
20
+ * Typically contains hostname or other unique data.
21
+ * Used to find existing client records across SETCLIENTID calls.
22
+ */
23
+ clientIdString,
24
+ /**
25
+ * Callback information - RPC program number and network address.
26
+ * Used by server to initiate callbacks to client (e.g., for delegation recalls).
27
+ * Server opens new TCP connection to client using this address when needed.
28
+ */
29
+ callback,
30
+ /**
31
+ * Callback identifier - client-provided value.
32
+ * Sent by server in callback RPCs to help client distinguish which
33
+ * server is calling back (useful if client talks to multiple servers).
34
+ */
35
+ callbackIdent,
36
+ /**
37
+ * SETCLIENTID confirmation verifier - random 8-byte token.
38
+ * Generated by server, returned to client, must be echoed back in
39
+ * SETCLIENTID_CONFIRM to prove client received the SETCLIENTID response.
40
+ * Prevents race conditions and stale client ID reuse.
41
+ *
42
+ * const NFS4_VERIFIER_SIZE = 8;
43
+ * typedef opaque verifier4[NFS4_VERIFIER_SIZE];
44
+ */
45
+ setclientidConfirm,
46
+ /**
47
+ * Cached SETCLIENTID response for duplicate request handling.
48
+ * If a client repeats a SETCLIENTID request (same clientIdString and verifier),
49
+ * server can return this cached response instead of creating a new record.
50
+ * This helps handle network retries and duplicate requests gracefully.
51
+ */
52
+ cache = undefined,
53
+ /**
54
+ * Last time this client renewed its lease (in milliseconds since epoch).
55
+ * Per RFC 7530 §9.5, any stateful operation from the client renews the lease.
56
+ * The server must track this to detect expired leases and revoke client state.
57
+ */
58
+ lastRenew = Date.now()) {
59
+ this.principal = principal;
60
+ this.verifier = verifier;
61
+ this.clientIdString = clientIdString;
62
+ this.callback = callback;
63
+ this.callbackIdent = callbackIdent;
64
+ this.setclientidConfirm = setclientidConfirm;
65
+ this.cache = cache;
66
+ this.lastRenew = lastRenew;
67
+ }
68
+ }
69
+ exports.ClientRecord = ClientRecord;
70
+ //# sourceMappingURL=ClientRecord.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClientRecord.js","sourceRoot":"","sources":["../../../../../src/nfs/v4/server/operations/ClientRecord.ts"],"names":[],"mappings":";;;AAGA,0DAA0D;AAC1D,MAAa,YAAY;IACvB;IACE;;OAEG;IACa,SAAiB;IAEjC;;;;;OAKG;IACa,QAAoB;IAEpC;;;;OAIG;IACa,cAA0B;IAE1C;;;;OAIG;IACa,QAA8B;IAE9C;;;;OAIG;IACa,aAAqB;IAErC;;;;;;;;OAQG;IACa,kBAA8B;IAE9C;;;;;OAKG;IACI,QAAkD,SAAS;IAElE;;;;OAIG;IACI,YAAoB,IAAI,CAAC,GAAG,EAAE;QAvDrB,cAAS,GAAT,SAAS,CAAQ;QAQjB,aAAQ,GAAR,QAAQ,CAAY;QAOpB,mBAAc,GAAd,cAAc,CAAY;QAO1B,aAAQ,GAAR,QAAQ,CAAsB;QAO9B,kBAAa,GAAb,aAAa,CAAQ;QAWrB,uBAAkB,GAAlB,kBAAkB,CAAY;QAQvC,UAAK,GAAL,KAAK,CAAsD;QAO3D,cAAS,GAAT,SAAS,CAAqB;IACpC,CAAC;CACL;AA9DD,oCA8DC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Filesystem statistics for NFSv4 space and file count attributes.
3
+ */
4
+ export declare class FilesystemStats {
5
+ /** Available space in bytes for unprivileged users */
6
+ readonly spaceAvail: bigint;
7
+ /** Free space in bytes on the filesystem */
8
+ readonly spaceFree: bigint;
9
+ /** Total space in bytes on the filesystem */
10
+ readonly spaceTotal: bigint;
11
+ /** Available file slots (inodes) */
12
+ readonly filesAvail: bigint;
13
+ /** Free file slots (inodes) */
14
+ readonly filesFree: bigint;
15
+ /** Total file slots (inodes) */
16
+ readonly filesTotal: bigint;
17
+ constructor(
18
+ /** Available space in bytes for unprivileged users */
19
+ spaceAvail: bigint,
20
+ /** Free space in bytes on the filesystem */
21
+ spaceFree: bigint,
22
+ /** Total space in bytes on the filesystem */
23
+ spaceTotal: bigint,
24
+ /** Available file slots (inodes) */
25
+ filesAvail: bigint,
26
+ /** Free file slots (inodes) */
27
+ filesFree: bigint,
28
+ /** Total file slots (inodes) */
29
+ filesTotal: bigint);
30
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FilesystemStats = void 0;
4
+ /**
5
+ * Filesystem statistics for NFSv4 space and file count attributes.
6
+ */
7
+ class FilesystemStats {
8
+ constructor(
9
+ /** Available space in bytes for unprivileged users */
10
+ spaceAvail,
11
+ /** Free space in bytes on the filesystem */
12
+ spaceFree,
13
+ /** Total space in bytes on the filesystem */
14
+ spaceTotal,
15
+ /** Available file slots (inodes) */
16
+ filesAvail,
17
+ /** Free file slots (inodes) */
18
+ filesFree,
19
+ /** Total file slots (inodes) */
20
+ filesTotal) {
21
+ this.spaceAvail = spaceAvail;
22
+ this.spaceFree = spaceFree;
23
+ this.spaceTotal = spaceTotal;
24
+ this.filesAvail = filesAvail;
25
+ this.filesFree = filesFree;
26
+ this.filesTotal = filesTotal;
27
+ }
28
+ }
29
+ exports.FilesystemStats = FilesystemStats;
30
+ //# sourceMappingURL=FilesystemStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilesystemStats.js","sourceRoot":"","sources":["../../../../../src/nfs/v4/server/operations/FilesystemStats.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,eAAe;IAC1B;IACE,sDAAsD;IACtC,UAAkB;IAClC,4CAA4C;IAC5B,SAAiB;IACjC,6CAA6C;IAC7B,UAAkB;IAClC,oCAAoC;IACpB,UAAkB;IAClC,+BAA+B;IACf,SAAiB;IACjC,gCAAgC;IAChB,UAAkB;QAVlB,eAAU,GAAV,UAAU,CAAQ;QAElB,cAAS,GAAT,SAAS,CAAQ;QAEjB,eAAU,GAAV,UAAU,CAAQ;QAElB,eAAU,GAAV,UAAU,CAAQ;QAElB,cAAS,GAAT,SAAS,CAAQ;QAEjB,eAAU,GAAV,UAAU,CAAQ;IACjC,CAAC;CACL;AAfD,0CAeC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Lock-owner state record for NFSv4 LOCK operations.
3
+ * A lock-owner represents a single entity (process, thread) on a client
4
+ * that can acquire byte-range locks on files. Tracks all locks held by this owner.
5
+ */
6
+ export declare class LockOwnerState {
7
+ /**
8
+ * Client ID that owns this lock-owner.
9
+ * Links the owner back to the specific NFS client that created it.
10
+ */
11
+ readonly clientid: bigint;
12
+ /**
13
+ * Opaque lock-owner identifier provided by the client.
14
+ * Typically represents a process or thread ID on the client.
15
+ * Combined with clientid, uniquely identifies this lock-owner.
16
+ */
17
+ readonly owner: Uint8Array;
18
+ /**
19
+ * Sequence number for operations from this lock-owner.
20
+ * Used to serialize LOCK/LOCKU operations.
21
+ * Incremented after each successful stateful operation.
22
+ * Server rejects operations with incorrect sequence numbers to prevent replays.
23
+ */
24
+ seqid: number;
25
+ /**
26
+ * Set of lock keys for all byte-range locks currently held by this owner.
27
+ * Format: lock keys are `${stateid}:${offset}:${length}`.
28
+ * Used to track all active locks and clean them up if the owner goes away.
29
+ */
30
+ readonly locks: Set<string>;
31
+ /**
32
+ * Cached response from the last successful operation.
33
+ * Per RFC 7530 §9.1.7, when a client retries with the same seqid (replay),
34
+ * the server must return the cached response instead of re-executing the operation.
35
+ * This ensures idempotency for LOCK and LOCKU operations.
36
+ */
37
+ lastResponse?: any | undefined;
38
+ /**
39
+ * Signature of the last request to validate true replays.
40
+ * Used to detect mismatched replays where the client reuses a seqid but changes
41
+ * the request parameters, which must be rejected with NFS4ERR_BAD_SEQID.
42
+ */
43
+ lastRequestKey?: string | undefined;
44
+ constructor(
45
+ /**
46
+ * Client ID that owns this lock-owner.
47
+ * Links the owner back to the specific NFS client that created it.
48
+ */
49
+ clientid: bigint,
50
+ /**
51
+ * Opaque lock-owner identifier provided by the client.
52
+ * Typically represents a process or thread ID on the client.
53
+ * Combined with clientid, uniquely identifies this lock-owner.
54
+ */
55
+ owner: Uint8Array,
56
+ /**
57
+ * Sequence number for operations from this lock-owner.
58
+ * Used to serialize LOCK/LOCKU operations.
59
+ * Incremented after each successful stateful operation.
60
+ * Server rejects operations with incorrect sequence numbers to prevent replays.
61
+ */
62
+ seqid: number,
63
+ /**
64
+ * Set of lock keys for all byte-range locks currently held by this owner.
65
+ * Format: lock keys are `${stateid}:${offset}:${length}`.
66
+ * Used to track all active locks and clean them up if the owner goes away.
67
+ */
68
+ locks?: Set<string>,
69
+ /**
70
+ * Cached response from the last successful operation.
71
+ * Per RFC 7530 §9.1.7, when a client retries with the same seqid (replay),
72
+ * the server must return the cached response instead of re-executing the operation.
73
+ * This ensures idempotency for LOCK and LOCKU operations.
74
+ */
75
+ lastResponse?: any | undefined,
76
+ /**
77
+ * Signature of the last request to validate true replays.
78
+ * Used to detect mismatched replays where the client reuses a seqid but changes
79
+ * the request parameters, which must be rejected with NFS4ERR_BAD_SEQID.
80
+ */
81
+ lastRequestKey?: string | undefined);
82
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LockOwnerState = void 0;
4
+ /**
5
+ * Lock-owner state record for NFSv4 LOCK operations.
6
+ * A lock-owner represents a single entity (process, thread) on a client
7
+ * that can acquire byte-range locks on files. Tracks all locks held by this owner.
8
+ */
9
+ class LockOwnerState {
10
+ constructor(
11
+ /**
12
+ * Client ID that owns this lock-owner.
13
+ * Links the owner back to the specific NFS client that created it.
14
+ */
15
+ clientid,
16
+ /**
17
+ * Opaque lock-owner identifier provided by the client.
18
+ * Typically represents a process or thread ID on the client.
19
+ * Combined with clientid, uniquely identifies this lock-owner.
20
+ */
21
+ owner,
22
+ /**
23
+ * Sequence number for operations from this lock-owner.
24
+ * Used to serialize LOCK/LOCKU operations.
25
+ * Incremented after each successful stateful operation.
26
+ * Server rejects operations with incorrect sequence numbers to prevent replays.
27
+ */
28
+ seqid,
29
+ /**
30
+ * Set of lock keys for all byte-range locks currently held by this owner.
31
+ * Format: lock keys are `${stateid}:${offset}:${length}`.
32
+ * Used to track all active locks and clean them up if the owner goes away.
33
+ */
34
+ locks = new Set(),
35
+ /**
36
+ * Cached response from the last successful operation.
37
+ * Per RFC 7530 §9.1.7, when a client retries with the same seqid (replay),
38
+ * the server must return the cached response instead of re-executing the operation.
39
+ * This ensures idempotency for LOCK and LOCKU operations.
40
+ */
41
+ lastResponse,
42
+ /**
43
+ * Signature of the last request to validate true replays.
44
+ * Used to detect mismatched replays where the client reuses a seqid but changes
45
+ * the request parameters, which must be rejected with NFS4ERR_BAD_SEQID.
46
+ */
47
+ lastRequestKey) {
48
+ this.clientid = clientid;
49
+ this.owner = owner;
50
+ this.seqid = seqid;
51
+ this.locks = locks;
52
+ this.lastResponse = lastResponse;
53
+ this.lastRequestKey = lastRequestKey;
54
+ }
55
+ }
56
+ exports.LockOwnerState = LockOwnerState;
57
+ //# sourceMappingURL=LockOwnerState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LockOwnerState.js","sourceRoot":"","sources":["../../../../../src/nfs/v4/server/operations/LockOwnerState.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH,MAAa,cAAc;IACzB;IACE;;;OAGG;IACa,QAAgB;IAEhC;;;;OAIG;IACa,KAAiB;IAEjC;;;;;OAKG;IACI,KAAa;IAEpB;;;;OAIG;IACa,QAAqB,IAAI,GAAG,EAAE;IAE9C;;;;;OAKG;IACI,YAAkB;IAEzB;;;;OAIG;IACI,cAAuB;QArCd,aAAQ,GAAR,QAAQ,CAAQ;QAOhB,UAAK,GAAL,KAAK,CAAY;QAQ1B,UAAK,GAAL,KAAK,CAAQ;QAOJ,UAAK,GAAL,KAAK,CAAyB;QAQvC,iBAAY,GAAZ,YAAY,CAAM;QAOlB,mBAAc,GAAd,cAAc,CAAS;IAC7B,CAAC;CACL;AA7CD,wCA6CC"}