@milaboratories/pl-drivers 1.16.0 → 1.16.2

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 (243) hide show
  1. package/dist/clients/constructors.cjs.map +1 -1
  2. package/dist/clients/constructors.js.map +1 -1
  3. package/dist/clients/crc32c.cjs.map +1 -1
  4. package/dist/clients/crc32c.js.map +1 -1
  5. package/dist/clients/download.cjs +56 -5
  6. package/dist/clients/download.cjs.map +1 -1
  7. package/dist/clients/download.d.ts +13 -1
  8. package/dist/clients/download.d.ts.map +1 -1
  9. package/dist/clients/download.js +53 -2
  10. package/dist/clients/download.js.map +1 -1
  11. package/dist/clients/download_url_cache.cjs +3 -1
  12. package/dist/clients/download_url_cache.cjs.map +1 -1
  13. package/dist/clients/download_url_cache.js +2 -1
  14. package/dist/clients/download_url_cache.js.map +1 -1
  15. package/dist/clients/logs.cjs +2 -1
  16. package/dist/clients/logs.cjs.map +1 -1
  17. package/dist/clients/logs.d.ts.map +1 -1
  18. package/dist/clients/logs.js +2 -0
  19. package/dist/clients/logs.js.map +1 -1
  20. package/dist/clients/ls_api.cjs +1 -1
  21. package/dist/clients/ls_api.cjs.map +1 -1
  22. package/dist/clients/ls_api.d.ts.map +1 -1
  23. package/dist/clients/ls_api.js +1 -0
  24. package/dist/clients/ls_api.js.map +1 -1
  25. package/dist/clients/progress.cjs +2 -1
  26. package/dist/clients/progress.cjs.map +1 -1
  27. package/dist/clients/progress.d.ts.map +1 -1
  28. package/dist/clients/progress.js +2 -0
  29. package/dist/clients/progress.js.map +1 -1
  30. package/dist/clients/upload.cjs +7 -5
  31. package/dist/clients/upload.cjs.map +1 -1
  32. package/dist/clients/upload.d.ts.map +1 -1
  33. package/dist/clients/upload.js +6 -4
  34. package/dist/clients/upload.js.map +1 -1
  35. package/dist/drivers/download_blob/blob_key.cjs +1 -1
  36. package/dist/drivers/download_blob/blob_key.cjs.map +1 -1
  37. package/dist/drivers/download_blob/blob_key.js.map +1 -1
  38. package/dist/drivers/download_blob/download_blob.cjs +36 -7
  39. package/dist/drivers/download_blob/download_blob.cjs.map +1 -1
  40. package/dist/drivers/download_blob/download_blob.d.ts +9 -1
  41. package/dist/drivers/download_blob/download_blob.d.ts.map +1 -1
  42. package/dist/drivers/download_blob/download_blob.js +30 -1
  43. package/dist/drivers/download_blob/download_blob.js.map +1 -1
  44. package/dist/drivers/download_blob/download_blob_task.cjs +9 -3
  45. package/dist/drivers/download_blob/download_blob_task.cjs.map +1 -1
  46. package/dist/drivers/download_blob/download_blob_task.js +6 -1
  47. package/dist/drivers/download_blob/download_blob_task.js.map +1 -1
  48. package/dist/drivers/download_blob/sparse_cache/cache.cjs +9 -1
  49. package/dist/drivers/download_blob/sparse_cache/cache.cjs.map +1 -1
  50. package/dist/drivers/download_blob/sparse_cache/cache.js +8 -0
  51. package/dist/drivers/download_blob/sparse_cache/cache.js.map +1 -1
  52. package/dist/drivers/download_blob/sparse_cache/file.cjs +2 -1
  53. package/dist/drivers/download_blob/sparse_cache/file.cjs.map +1 -1
  54. package/dist/drivers/download_blob/sparse_cache/file.js +1 -1
  55. package/dist/drivers/download_blob/sparse_cache/file.js.map +1 -1
  56. package/dist/drivers/download_blob/sparse_cache/ranges.cjs +3 -1
  57. package/dist/drivers/download_blob/sparse_cache/ranges.cjs.map +1 -1
  58. package/dist/drivers/download_blob/sparse_cache/ranges.js +1 -1
  59. package/dist/drivers/download_blob/sparse_cache/ranges.js.map +1 -1
  60. package/dist/drivers/download_blob_url/driver.cjs +6 -1
  61. package/dist/drivers/download_blob_url/driver.cjs.map +1 -1
  62. package/dist/drivers/download_blob_url/driver.d.ts.map +1 -1
  63. package/dist/drivers/download_blob_url/driver.js +5 -0
  64. package/dist/drivers/download_blob_url/driver.js.map +1 -1
  65. package/dist/drivers/download_blob_url/driver_id.cjs +0 -1
  66. package/dist/drivers/download_blob_url/driver_id.cjs.map +1 -1
  67. package/dist/drivers/download_blob_url/driver_id.js.map +1 -1
  68. package/dist/drivers/download_blob_url/snapshot.cjs +0 -1
  69. package/dist/drivers/download_blob_url/snapshot.cjs.map +1 -1
  70. package/dist/drivers/download_blob_url/snapshot.d.ts +1 -2
  71. package/dist/drivers/download_blob_url/snapshot.d.ts.map +1 -1
  72. package/dist/drivers/download_blob_url/snapshot.js.map +1 -1
  73. package/dist/drivers/download_blob_url/task.cjs +14 -6
  74. package/dist/drivers/download_blob_url/task.cjs.map +1 -1
  75. package/dist/drivers/download_blob_url/task.d.ts +1 -1
  76. package/dist/drivers/download_blob_url/task.d.ts.map +1 -1
  77. package/dist/drivers/download_blob_url/task.js +8 -1
  78. package/dist/drivers/download_blob_url/task.js.map +1 -1
  79. package/dist/drivers/download_url/driver.cjs +41 -19
  80. package/dist/drivers/download_url/driver.cjs.map +1 -1
  81. package/dist/drivers/download_url/driver.d.ts +10 -5
  82. package/dist/drivers/download_url/driver.d.ts.map +1 -1
  83. package/dist/drivers/download_url/driver.js +40 -18
  84. package/dist/drivers/download_url/driver.js.map +1 -1
  85. package/dist/drivers/download_url/task.cjs +39 -23
  86. package/dist/drivers/download_url/task.cjs.map +1 -1
  87. package/dist/drivers/download_url/task.d.ts +20 -6
  88. package/dist/drivers/download_url/task.d.ts.map +1 -1
  89. package/dist/drivers/download_url/task.js +36 -20
  90. package/dist/drivers/download_url/task.js.map +1 -1
  91. package/dist/drivers/helpers/download_local_handle.cjs.map +1 -1
  92. package/dist/drivers/helpers/download_local_handle.js.map +1 -1
  93. package/dist/drivers/helpers/download_remote_handle.cjs +0 -1
  94. package/dist/drivers/helpers/download_remote_handle.cjs.map +1 -1
  95. package/dist/drivers/helpers/download_remote_handle.js.map +1 -1
  96. package/dist/drivers/helpers/files_cache.cjs +1 -1
  97. package/dist/drivers/helpers/files_cache.cjs.map +1 -1
  98. package/dist/drivers/helpers/files_cache.js +1 -0
  99. package/dist/drivers/helpers/files_cache.js.map +1 -1
  100. package/dist/drivers/helpers/helpers.cjs +1 -0
  101. package/dist/drivers/helpers/helpers.cjs.map +1 -1
  102. package/dist/drivers/helpers/helpers.d.ts.map +1 -1
  103. package/dist/drivers/helpers/helpers.js +1 -0
  104. package/dist/drivers/helpers/helpers.js.map +1 -1
  105. package/dist/drivers/helpers/logs_handle.cjs +3 -1
  106. package/dist/drivers/helpers/logs_handle.cjs.map +1 -1
  107. package/dist/drivers/helpers/logs_handle.js +1 -1
  108. package/dist/drivers/helpers/logs_handle.js.map +1 -1
  109. package/dist/drivers/helpers/ls_remote_import_handle.cjs.map +1 -1
  110. package/dist/drivers/helpers/ls_remote_import_handle.js.map +1 -1
  111. package/dist/drivers/helpers/ls_storage_entry.cjs +2 -1
  112. package/dist/drivers/helpers/ls_storage_entry.cjs.map +1 -1
  113. package/dist/drivers/helpers/ls_storage_entry.js +1 -1
  114. package/dist/drivers/helpers/ls_storage_entry.js.map +1 -1
  115. package/dist/drivers/helpers/polling_ops.d.ts.map +1 -1
  116. package/dist/drivers/helpers/read_file.cjs +2 -2
  117. package/dist/drivers/helpers/read_file.cjs.map +1 -1
  118. package/dist/drivers/helpers/read_file.js.map +1 -1
  119. package/dist/drivers/logs.cjs +3 -1
  120. package/dist/drivers/logs.cjs.map +1 -1
  121. package/dist/drivers/logs.js +3 -0
  122. package/dist/drivers/logs.js.map +1 -1
  123. package/dist/drivers/logs_stream.cjs +8 -1
  124. package/dist/drivers/logs_stream.cjs.map +1 -1
  125. package/dist/drivers/logs_stream.d.ts.map +1 -1
  126. package/dist/drivers/logs_stream.js +8 -0
  127. package/dist/drivers/logs_stream.js.map +1 -1
  128. package/dist/drivers/ls.cjs +10 -3
  129. package/dist/drivers/ls.cjs.map +1 -1
  130. package/dist/drivers/ls.d.ts.map +1 -1
  131. package/dist/drivers/ls.js +8 -1
  132. package/dist/drivers/ls.js.map +1 -1
  133. package/dist/drivers/types.cjs +10 -1
  134. package/dist/drivers/types.cjs.map +1 -1
  135. package/dist/drivers/types.d.ts +3 -4
  136. package/dist/drivers/types.d.ts.map +1 -1
  137. package/dist/drivers/types.js +10 -0
  138. package/dist/drivers/types.js.map +1 -1
  139. package/dist/drivers/upload.cjs +5 -1
  140. package/dist/drivers/upload.cjs.map +1 -1
  141. package/dist/drivers/upload.d.ts.map +1 -1
  142. package/dist/drivers/upload.js +5 -0
  143. package/dist/drivers/upload.js.map +1 -1
  144. package/dist/drivers/upload_task.cjs +6 -1
  145. package/dist/drivers/upload_task.cjs.map +1 -1
  146. package/dist/drivers/upload_task.d.ts.map +1 -1
  147. package/dist/drivers/upload_task.js +5 -0
  148. package/dist/drivers/upload_task.js.map +1 -1
  149. package/dist/drivers/urls/url.cjs +1 -1
  150. package/dist/drivers/urls/url.cjs.map +1 -1
  151. package/dist/drivers/urls/url.js.map +1 -1
  152. package/dist/drivers/virtual_storages.cjs +3 -3
  153. package/dist/drivers/virtual_storages.cjs.map +1 -1
  154. package/dist/drivers/virtual_storages.d.ts.map +1 -1
  155. package/dist/drivers/virtual_storages.js.map +1 -1
  156. package/dist/helpers/download.cjs +1 -1
  157. package/dist/helpers/download.cjs.map +1 -1
  158. package/dist/helpers/download.d.ts.map +1 -1
  159. package/dist/helpers/download.js +1 -0
  160. package/dist/helpers/download.js.map +1 -1
  161. package/dist/helpers/download_errors.cjs.map +1 -1
  162. package/dist/helpers/download_errors.d.ts.map +1 -1
  163. package/dist/helpers/download_errors.js.map +1 -1
  164. package/dist/helpers/validate.cjs +1 -1
  165. package/dist/helpers/validate.cjs.map +1 -1
  166. package/dist/helpers/validate.d.ts.map +1 -1
  167. package/dist/helpers/validate.js.map +1 -1
  168. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.cjs +4 -2
  169. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.cjs.map +1 -1
  170. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.client.cjs +1 -1
  171. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.client.cjs.map +1 -1
  172. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.client.d.ts +3 -5
  173. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.client.d.ts.map +1 -1
  174. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.client.js +1 -0
  175. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.client.js.map +1 -1
  176. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.d.ts +1 -1
  177. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.d.ts.map +1 -1
  178. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.js +7 -3
  179. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.js.map +1 -1
  180. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.cjs +4 -2
  181. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.cjs.map +1 -1
  182. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.client.cjs +1 -1
  183. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.client.cjs.map +1 -1
  184. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.client.js +1 -0
  185. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.client.js.map +1 -1
  186. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.d.ts +1 -1
  187. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.d.ts.map +1 -1
  188. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.js +7 -3
  189. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.js.map +1 -1
  190. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.cjs +7 -3
  191. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.cjs.map +1 -1
  192. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.client.cjs +1 -1
  193. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.client.cjs.map +1 -1
  194. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.client.d.ts +3 -5
  195. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.client.d.ts.map +1 -1
  196. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.client.js +1 -0
  197. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.client.js.map +1 -1
  198. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.d.ts +1 -1
  199. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.d.ts.map +1 -1
  200. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.js +3 -3
  201. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.js.map +1 -1
  202. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.cjs +8 -5
  203. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.cjs.map +1 -1
  204. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.client.cjs +1 -1
  205. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.client.cjs.map +1 -1
  206. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.client.d.ts +3 -5
  207. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.client.d.ts.map +1 -1
  208. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.client.js +1 -0
  209. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.client.js.map +1 -1
  210. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.d.ts.map +1 -1
  211. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.js +5 -5
  212. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.js.map +1 -1
  213. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.cjs +17 -7
  214. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.cjs.map +1 -1
  215. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.client.cjs +1 -1
  216. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.client.cjs.map +1 -1
  217. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.client.js +1 -0
  218. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.client.js.map +1 -1
  219. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.d.ts.map +1 -1
  220. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.js +7 -7
  221. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.js.map +1 -1
  222. package/dist/proto-grpc/google/protobuf/duration.cjs +0 -1
  223. package/dist/proto-grpc/google/protobuf/duration.cjs.map +1 -1
  224. package/dist/proto-grpc/google/protobuf/duration.d.ts.map +1 -1
  225. package/dist/proto-grpc/google/protobuf/duration.js.map +1 -1
  226. package/dist/proto-grpc/google/protobuf/timestamp.cjs +0 -1
  227. package/dist/proto-grpc/google/protobuf/timestamp.cjs.map +1 -1
  228. package/dist/proto-grpc/google/protobuf/timestamp.d.ts.map +1 -1
  229. package/dist/proto-grpc/google/protobuf/timestamp.js.map +1 -1
  230. package/dist/proto-rest/downloadapi.d.ts +1 -1
  231. package/dist/proto-rest/downloadapi.d.ts.map +1 -1
  232. package/dist/proto-rest/index.d.ts +1 -1
  233. package/dist/proto-rest/index.d.ts.map +1 -1
  234. package/dist/proto-rest/progressapi.d.ts +1 -1
  235. package/dist/proto-rest/progressapi.d.ts.map +1 -1
  236. package/dist/proto-rest/streamingapi.d.ts +1 -1
  237. package/dist/proto-rest/streamingapi.d.ts.map +1 -1
  238. package/package.json +7 -7
  239. package/src/clients/download.ts +71 -3
  240. package/src/drivers/download_blob/download_blob.ts +30 -1
  241. package/src/drivers/download_url/driver.ts +44 -19
  242. package/src/drivers/download_url/get_local_tgz.test.ts +106 -0
  243. package/src/drivers/download_url/task.ts +53 -30
@@ -1 +1 @@
1
- {"version":3,"file":"timestamp.cjs","names":["MessageType","PbLong","UnknownFieldHandler","WireType"],"sources":["../../../../src/proto-grpc/google/protobuf/timestamp.ts"],"sourcesContent":["// @generated by protobuf-ts 2.11.1 with parameter client_generic,optimize_speed,generate_dependencies,force_server_none\n// @generated from protobuf file \"google/protobuf/timestamp.proto\" (package \"google.protobuf\", syntax proto3)\n// tslint:disable\n//\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc. All rights reserved.\n// https://developers.google.com/protocol-buffers/\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { typeofJsonValue } from \"@protobuf-ts/runtime\";\nimport type { JsonValue } from \"@protobuf-ts/runtime\";\nimport type { JsonReadOptions } from \"@protobuf-ts/runtime\";\nimport type { JsonWriteOptions } from \"@protobuf-ts/runtime\";\nimport { PbLong } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\n/**\n * A Timestamp represents a point in time independent of any time zone or local\n * calendar, encoded as a count of seconds and fractions of seconds at\n * nanosecond resolution. The count is relative to an epoch at UTC midnight on\n * January 1, 1970, in the proleptic Gregorian calendar which extends the\n * Gregorian calendar backwards to year one.\n *\n * All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n * second table is needed for interpretation, using a [24-hour linear\n * smear](https://developers.google.com/time/smear).\n *\n * The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n * restricting to that range, we ensure that we can convert to and from [RFC\n * 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n *\n * # Examples\n *\n * Example 1: Compute Timestamp from POSIX `time()`.\n *\n * Timestamp timestamp;\n * timestamp.set_seconds(time(NULL));\n * timestamp.set_nanos(0);\n *\n * Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n *\n * struct timeval tv;\n * gettimeofday(&tv, NULL);\n *\n * Timestamp timestamp;\n * timestamp.set_seconds(tv.tv_sec);\n * timestamp.set_nanos(tv.tv_usec * 1000);\n *\n * Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n *\n * FILETIME ft;\n * GetSystemTimeAsFileTime(&ft);\n * UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n *\n * // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n * // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n * Timestamp timestamp;\n * timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n * timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n *\n * Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n *\n * long millis = System.currentTimeMillis();\n *\n * Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n * .setNanos((int) ((millis % 1000) * 1000000)).build();\n *\n * Example 5: Compute Timestamp from Java `Instant.now()`.\n *\n * Instant now = Instant.now();\n *\n * Timestamp timestamp =\n * Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n * .setNanos(now.getNano()).build();\n *\n * Example 6: Compute Timestamp from current time in Python.\n *\n * timestamp = Timestamp()\n * timestamp.GetCurrentTime()\n *\n * # JSON Mapping\n *\n * In JSON format, the Timestamp type is encoded as a string in the\n * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n * format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n * where {year} is always expressed using four digits while {month}, {day},\n * {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n * seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n * are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n * is required. A proto3 JSON serializer should always use UTC (as indicated by\n * \"Z\") when printing the Timestamp type and a proto3 JSON parser should be\n * able to accept both UTC and other timezones (as indicated by an offset).\n *\n * For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n * 01:30 UTC on January 15, 2017.\n *\n * In JavaScript, one can convert a Date object to this format using the\n * standard\n * [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n * method. In Python, a standard `datetime.datetime` object can be converted\n * to this format using\n * [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n * the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n * the Joda Time's [`ISODateTimeFormat.dateTime()`](\n * http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n * ) to obtain a formatter capable of generating timestamps in this format.\n *\n *\n * @generated from protobuf message google.protobuf.Timestamp\n */\nexport interface Timestamp {\n /**\n * Represents seconds of UTC time since Unix epoch\n * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to\n * 9999-12-31T23:59:59Z inclusive.\n *\n * @generated from protobuf field: int64 seconds = 1\n */\n seconds: bigint;\n /**\n * Non-negative fractions of a second at nanosecond resolution. Negative\n * second values with fractions must still have non-negative nanos values\n * that count forward in time. Must be from 0 to 999,999,999\n * inclusive.\n *\n * @generated from protobuf field: int32 nanos = 2\n */\n nanos: number;\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass Timestamp$Type extends MessageType<Timestamp> {\n constructor() {\n super(\"google.protobuf.Timestamp\", [\n { no: 1, name: \"seconds\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },\n { no: 2, name: \"nanos\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ }\n ]);\n }\n /**\n * Creates a new `Timestamp` for the current time.\n */\n now(): Timestamp {\n const msg = this.create();\n const ms = Date.now();\n msg.seconds = PbLong.from(Math.floor(ms / 1000)).toBigInt();\n msg.nanos = (ms % 1000) * 1000000;\n return msg;\n }\n /**\n * Converts a `Timestamp` to a JavaScript Date.\n */\n toDate(message: Timestamp): Date {\n return new Date(PbLong.from(message.seconds).toNumber() * 1000 + Math.ceil(message.nanos / 1000000));\n }\n /**\n * Converts a JavaScript Date to a `Timestamp`.\n */\n fromDate(date: Date): Timestamp {\n const msg = this.create();\n const ms = date.getTime();\n msg.seconds = PbLong.from(Math.floor(ms / 1000)).toBigInt();\n msg.nanos = ((ms % 1000) + (ms < 0 && ms % 1000 !== 0 ? 1000 : 0)) * 1000000;\n return msg;\n }\n /**\n * In JSON format, the `Timestamp` type is encoded as a string\n * in the RFC 3339 format.\n */\n internalJsonWrite(message: Timestamp, options: JsonWriteOptions): JsonValue {\n let ms = PbLong.from(message.seconds).toNumber() * 1000;\n if (ms < Date.parse(\"0001-01-01T00:00:00Z\") || ms > Date.parse(\"9999-12-31T23:59:59Z\"))\n throw new Error(\"Unable to encode Timestamp to JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.\");\n if (message.nanos < 0)\n throw new Error(\"Unable to encode invalid Timestamp to JSON. Nanos must not be negative.\");\n let z = \"Z\";\n if (message.nanos > 0) {\n let nanosStr = (message.nanos + 1000000000).toString().substring(1);\n if (nanosStr.substring(3) === \"000000\")\n z = \".\" + nanosStr.substring(0, 3) + \"Z\";\n else if (nanosStr.substring(6) === \"000\")\n z = \".\" + nanosStr.substring(0, 6) + \"Z\";\n else\n z = \".\" + nanosStr + \"Z\";\n }\n return new Date(ms).toISOString().replace(\".000Z\", z);\n }\n /**\n * In JSON format, the `Timestamp` type is encoded as a string\n * in the RFC 3339 format.\n */\n internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: Timestamp): Timestamp {\n if (typeof json !== \"string\")\n throw new Error(\"Unable to parse Timestamp from JSON \" + typeofJsonValue(json) + \".\");\n let matches = json.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);\n if (!matches)\n throw new Error(\"Unable to parse Timestamp from JSON. Invalid format.\");\n let ms = Date.parse(matches[1] + \"-\" + matches[2] + \"-\" + matches[3] + \"T\" + matches[4] + \":\" + matches[5] + \":\" + matches[6] + (matches[8] ? matches[8] : \"Z\"));\n if (Number.isNaN(ms))\n throw new Error(\"Unable to parse Timestamp from JSON. Invalid value.\");\n if (ms < Date.parse(\"0001-01-01T00:00:00Z\") || ms > Date.parse(\"9999-12-31T23:59:59Z\"))\n throw new globalThis.Error(\"Unable to parse Timestamp from JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.\");\n if (!target)\n target = this.create();\n target.seconds = PbLong.from(ms / 1000).toBigInt();\n target.nanos = 0;\n if (matches[7])\n target.nanos = (parseInt(\"1\" + matches[7] + \"0\".repeat(9 - matches[7].length)) - 1000000000);\n return target;\n }\n create(value?: PartialMessage<Timestamp>): Timestamp {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.seconds = 0n;\n message.nanos = 0;\n if (value !== undefined)\n reflectionMergePartial<Timestamp>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Timestamp): Timestamp {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* int64 seconds */ 1:\n message.seconds = reader.int64().toBigInt();\n break;\n case /* int32 nanos */ 2:\n message.nanos = reader.int32();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Timestamp, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* int64 seconds = 1; */\n if (message.seconds !== 0n)\n writer.tag(1, WireType.Varint).int64(message.seconds);\n /* int32 nanos = 2; */\n if (message.nanos !== 0)\n writer.tag(2, WireType.Varint).int32(message.nanos);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message google.protobuf.Timestamp\n */\nexport const Timestamp = new Timestamp$Type();\n"],"mappings":"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"}
1
+ {"version":3,"file":"timestamp.cjs","names":["MessageType","PbLong","UnknownFieldHandler","WireType"],"sources":["../../../../src/proto-grpc/google/protobuf/timestamp.ts"],"sourcesContent":["// @generated by protobuf-ts 2.11.1 with parameter client_generic,optimize_speed,generate_dependencies,force_server_none\n// @generated from protobuf file \"google/protobuf/timestamp.proto\" (package \"google.protobuf\", syntax proto3)\n// tslint:disable\n//\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc. All rights reserved.\n// https://developers.google.com/protocol-buffers/\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { typeofJsonValue } from \"@protobuf-ts/runtime\";\nimport type { JsonValue } from \"@protobuf-ts/runtime\";\nimport type { JsonReadOptions } from \"@protobuf-ts/runtime\";\nimport type { JsonWriteOptions } from \"@protobuf-ts/runtime\";\nimport { PbLong } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\n/**\n * A Timestamp represents a point in time independent of any time zone or local\n * calendar, encoded as a count of seconds and fractions of seconds at\n * nanosecond resolution. The count is relative to an epoch at UTC midnight on\n * January 1, 1970, in the proleptic Gregorian calendar which extends the\n * Gregorian calendar backwards to year one.\n *\n * All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n * second table is needed for interpretation, using a [24-hour linear\n * smear](https://developers.google.com/time/smear).\n *\n * The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n * restricting to that range, we ensure that we can convert to and from [RFC\n * 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n *\n * # Examples\n *\n * Example 1: Compute Timestamp from POSIX `time()`.\n *\n * Timestamp timestamp;\n * timestamp.set_seconds(time(NULL));\n * timestamp.set_nanos(0);\n *\n * Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n *\n * struct timeval tv;\n * gettimeofday(&tv, NULL);\n *\n * Timestamp timestamp;\n * timestamp.set_seconds(tv.tv_sec);\n * timestamp.set_nanos(tv.tv_usec * 1000);\n *\n * Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n *\n * FILETIME ft;\n * GetSystemTimeAsFileTime(&ft);\n * UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n *\n * // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n * // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n * Timestamp timestamp;\n * timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n * timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n *\n * Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n *\n * long millis = System.currentTimeMillis();\n *\n * Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n * .setNanos((int) ((millis % 1000) * 1000000)).build();\n *\n * Example 5: Compute Timestamp from Java `Instant.now()`.\n *\n * Instant now = Instant.now();\n *\n * Timestamp timestamp =\n * Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n * .setNanos(now.getNano()).build();\n *\n * Example 6: Compute Timestamp from current time in Python.\n *\n * timestamp = Timestamp()\n * timestamp.GetCurrentTime()\n *\n * # JSON Mapping\n *\n * In JSON format, the Timestamp type is encoded as a string in the\n * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n * format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n * where {year} is always expressed using four digits while {month}, {day},\n * {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n * seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n * are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n * is required. A proto3 JSON serializer should always use UTC (as indicated by\n * \"Z\") when printing the Timestamp type and a proto3 JSON parser should be\n * able to accept both UTC and other timezones (as indicated by an offset).\n *\n * For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n * 01:30 UTC on January 15, 2017.\n *\n * In JavaScript, one can convert a Date object to this format using the\n * standard\n * [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n * method. In Python, a standard `datetime.datetime` object can be converted\n * to this format using\n * [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n * the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n * the Joda Time's [`ISODateTimeFormat.dateTime()`](\n * http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n * ) to obtain a formatter capable of generating timestamps in this format.\n *\n *\n * @generated from protobuf message google.protobuf.Timestamp\n */\nexport interface Timestamp {\n /**\n * Represents seconds of UTC time since Unix epoch\n * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to\n * 9999-12-31T23:59:59Z inclusive.\n *\n * @generated from protobuf field: int64 seconds = 1\n */\n seconds: bigint;\n /**\n * Non-negative fractions of a second at nanosecond resolution. Negative\n * second values with fractions must still have non-negative nanos values\n * that count forward in time. Must be from 0 to 999,999,999\n * inclusive.\n *\n * @generated from protobuf field: int32 nanos = 2\n */\n nanos: number;\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass Timestamp$Type extends MessageType<Timestamp> {\n constructor() {\n super(\"google.protobuf.Timestamp\", [\n { no: 1, name: \"seconds\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },\n { no: 2, name: \"nanos\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ }\n ]);\n }\n /**\n * Creates a new `Timestamp` for the current time.\n */\n now(): Timestamp {\n const msg = this.create();\n const ms = Date.now();\n msg.seconds = PbLong.from(Math.floor(ms / 1000)).toBigInt();\n msg.nanos = (ms % 1000) * 1000000;\n return msg;\n }\n /**\n * Converts a `Timestamp` to a JavaScript Date.\n */\n toDate(message: Timestamp): Date {\n return new Date(PbLong.from(message.seconds).toNumber() * 1000 + Math.ceil(message.nanos / 1000000));\n }\n /**\n * Converts a JavaScript Date to a `Timestamp`.\n */\n fromDate(date: Date): Timestamp {\n const msg = this.create();\n const ms = date.getTime();\n msg.seconds = PbLong.from(Math.floor(ms / 1000)).toBigInt();\n msg.nanos = ((ms % 1000) + (ms < 0 && ms % 1000 !== 0 ? 1000 : 0)) * 1000000;\n return msg;\n }\n /**\n * In JSON format, the `Timestamp` type is encoded as a string\n * in the RFC 3339 format.\n */\n internalJsonWrite(message: Timestamp, options: JsonWriteOptions): JsonValue {\n let ms = PbLong.from(message.seconds).toNumber() * 1000;\n if (ms < Date.parse(\"0001-01-01T00:00:00Z\") || ms > Date.parse(\"9999-12-31T23:59:59Z\"))\n throw new Error(\"Unable to encode Timestamp to JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.\");\n if (message.nanos < 0)\n throw new Error(\"Unable to encode invalid Timestamp to JSON. Nanos must not be negative.\");\n let z = \"Z\";\n if (message.nanos > 0) {\n let nanosStr = (message.nanos + 1000000000).toString().substring(1);\n if (nanosStr.substring(3) === \"000000\")\n z = \".\" + nanosStr.substring(0, 3) + \"Z\";\n else if (nanosStr.substring(6) === \"000\")\n z = \".\" + nanosStr.substring(0, 6) + \"Z\";\n else\n z = \".\" + nanosStr + \"Z\";\n }\n return new Date(ms).toISOString().replace(\".000Z\", z);\n }\n /**\n * In JSON format, the `Timestamp` type is encoded as a string\n * in the RFC 3339 format.\n */\n internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: Timestamp): Timestamp {\n if (typeof json !== \"string\")\n throw new Error(\"Unable to parse Timestamp from JSON \" + typeofJsonValue(json) + \".\");\n let matches = json.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);\n if (!matches)\n throw new Error(\"Unable to parse Timestamp from JSON. Invalid format.\");\n let ms = Date.parse(matches[1] + \"-\" + matches[2] + \"-\" + matches[3] + \"T\" + matches[4] + \":\" + matches[5] + \":\" + matches[6] + (matches[8] ? matches[8] : \"Z\"));\n if (Number.isNaN(ms))\n throw new Error(\"Unable to parse Timestamp from JSON. Invalid value.\");\n if (ms < Date.parse(\"0001-01-01T00:00:00Z\") || ms > Date.parse(\"9999-12-31T23:59:59Z\"))\n throw new globalThis.Error(\"Unable to parse Timestamp from JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.\");\n if (!target)\n target = this.create();\n target.seconds = PbLong.from(ms / 1000).toBigInt();\n target.nanos = 0;\n if (matches[7])\n target.nanos = (parseInt(\"1\" + matches[7] + \"0\".repeat(9 - matches[7].length)) - 1000000000);\n return target;\n }\n create(value?: PartialMessage<Timestamp>): Timestamp {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.seconds = 0n;\n message.nanos = 0;\n if (value !== undefined)\n reflectionMergePartial<Timestamp>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Timestamp): Timestamp {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* int64 seconds */ 1:\n message.seconds = reader.int64().toBigInt();\n break;\n case /* int32 nanos */ 2:\n message.nanos = reader.int32();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Timestamp, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* int64 seconds = 1; */\n if (message.seconds !== 0n)\n writer.tag(1, WireType.Varint).int64(message.seconds);\n /* int32 nanos = 2; */\n if (message.nanos !== 0)\n writer.tag(2, WireType.Varint).int32(message.nanos);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message google.protobuf.Timestamp\n */\nexport const Timestamp = new Timestamp$Type();\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"timestamp.d.ts","names":[],"sources":["../../../../src/proto-grpc/google/protobuf/timestamp.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8RA;;;;;;;;;;;;;;UAhJiB,SAAA;;;;;;;;EAQb,OAAA;;;;;;;;;EASA,KAAA;AAAA;AAAA,cAGE,cAAA,SAAuB,WAAA,CAAY,SAAA;;;;;EAUrC,GAAA,CAAA,GAAO,SAAA;;;;EAUP,MAAA,CAAO,OAAA,EAAS,SAAA,GAAY,IAAA;;;;EAM5B,QAAA,CAAS,IAAA,EAAM,IAAA,GAAO,SAAA;;;;;EAWtB,iBAAA,CAAkB,OAAA,EAAS,SAAA,EAAW,OAAA,EAAS,gBAAA,GAAmB,SAAA;;;;;EAsBlE,gBAAA,CAAiB,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,eAAA,EAAiB,MAAA,GAAS,SAAA,GAAY,SAAA;EAmBjF,MAAA,CAAO,KAAA,GAAQ,cAAA,CAAe,SAAA,IAAa,SAAA;EAQ3C,kBAAA,CAAmB,MAAA,EAAQ,aAAA,EAAe,MAAA,UAAgB,OAAA,EAAS,iBAAA,EAAmB,MAAA,GAAS,SAAA,GAAY,SAAA;EAsB3G,mBAAA,CAAoB,OAAA,EAAS,SAAA,EAAW,MAAA,EAAQ,aAAA,EAAe,OAAA,EAAS,kBAAA,GAAqB,aAAA;AAAA;;;;cAgBpF,SAAA,EAAS,cAAA"}
1
+ {"version":3,"file":"timestamp.d.ts","names":[],"sources":["../../../../src/proto-grpc/google/protobuf/timestamp.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8Q8G;AAgB9G;;;;AAA6C;;;;;;;;;;UAhJ5B,SAAA;;;;;;;;EAQb,OAAA;;;;;;;;;EASA,KAAK;AAAA;AAAA,cAGH,cAAA,SAAuB,WAAA,CAAY,SAAA;;;;;EAUrC,GAAA,IAAO,SAAA;;;;EAUP,MAAA,CAAO,OAAA,EAAS,SAAA,GAAY,IAAA;;;;EAM5B,QAAA,CAAS,IAAA,EAAM,IAAA,GAAO,SAAA;;;;;EAWtB,iBAAA,CAAkB,OAAA,EAAS,SAAA,EAAW,OAAA,EAAS,gBAAA,GAAmB,SAAA;;;;;EAsBlE,gBAAA,CAAiB,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,eAAA,EAAiB,MAAA,GAAS,SAAA,GAAY,SAAA;EAmBjF,MAAA,CAAO,KAAA,GAAQ,cAAA,CAAe,SAAA,IAAa,SAAA;EAQ3C,kBAAA,CAAmB,MAAA,EAAQ,aAAA,EAAe,MAAA,UAAgB,OAAA,EAAS,iBAAA,EAAmB,MAAA,GAAS,SAAA,GAAY,SAAA;EAsB3G,mBAAA,CAAoB,OAAA,EAAS,SAAA,EAAW,MAAA,EAAQ,aAAA,EAAe,OAAA,EAAS,kBAAA,GAAqB,aAAA;AAAA;;;;cAgBpF,SAAA,EAAS,cAAuB"}
@@ -1 +1 @@
1
- {"version":3,"file":"timestamp.js","names":[],"sources":["../../../../src/proto-grpc/google/protobuf/timestamp.ts"],"sourcesContent":["// @generated by protobuf-ts 2.11.1 with parameter client_generic,optimize_speed,generate_dependencies,force_server_none\n// @generated from protobuf file \"google/protobuf/timestamp.proto\" (package \"google.protobuf\", syntax proto3)\n// tslint:disable\n//\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc. All rights reserved.\n// https://developers.google.com/protocol-buffers/\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { typeofJsonValue } from \"@protobuf-ts/runtime\";\nimport type { JsonValue } from \"@protobuf-ts/runtime\";\nimport type { JsonReadOptions } from \"@protobuf-ts/runtime\";\nimport type { JsonWriteOptions } from \"@protobuf-ts/runtime\";\nimport { PbLong } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\n/**\n * A Timestamp represents a point in time independent of any time zone or local\n * calendar, encoded as a count of seconds and fractions of seconds at\n * nanosecond resolution. The count is relative to an epoch at UTC midnight on\n * January 1, 1970, in the proleptic Gregorian calendar which extends the\n * Gregorian calendar backwards to year one.\n *\n * All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n * second table is needed for interpretation, using a [24-hour linear\n * smear](https://developers.google.com/time/smear).\n *\n * The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n * restricting to that range, we ensure that we can convert to and from [RFC\n * 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n *\n * # Examples\n *\n * Example 1: Compute Timestamp from POSIX `time()`.\n *\n * Timestamp timestamp;\n * timestamp.set_seconds(time(NULL));\n * timestamp.set_nanos(0);\n *\n * Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n *\n * struct timeval tv;\n * gettimeofday(&tv, NULL);\n *\n * Timestamp timestamp;\n * timestamp.set_seconds(tv.tv_sec);\n * timestamp.set_nanos(tv.tv_usec * 1000);\n *\n * Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n *\n * FILETIME ft;\n * GetSystemTimeAsFileTime(&ft);\n * UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n *\n * // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n * // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n * Timestamp timestamp;\n * timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n * timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n *\n * Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n *\n * long millis = System.currentTimeMillis();\n *\n * Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n * .setNanos((int) ((millis % 1000) * 1000000)).build();\n *\n * Example 5: Compute Timestamp from Java `Instant.now()`.\n *\n * Instant now = Instant.now();\n *\n * Timestamp timestamp =\n * Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n * .setNanos(now.getNano()).build();\n *\n * Example 6: Compute Timestamp from current time in Python.\n *\n * timestamp = Timestamp()\n * timestamp.GetCurrentTime()\n *\n * # JSON Mapping\n *\n * In JSON format, the Timestamp type is encoded as a string in the\n * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n * format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n * where {year} is always expressed using four digits while {month}, {day},\n * {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n * seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n * are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n * is required. A proto3 JSON serializer should always use UTC (as indicated by\n * \"Z\") when printing the Timestamp type and a proto3 JSON parser should be\n * able to accept both UTC and other timezones (as indicated by an offset).\n *\n * For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n * 01:30 UTC on January 15, 2017.\n *\n * In JavaScript, one can convert a Date object to this format using the\n * standard\n * [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n * method. In Python, a standard `datetime.datetime` object can be converted\n * to this format using\n * [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n * the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n * the Joda Time's [`ISODateTimeFormat.dateTime()`](\n * http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n * ) to obtain a formatter capable of generating timestamps in this format.\n *\n *\n * @generated from protobuf message google.protobuf.Timestamp\n */\nexport interface Timestamp {\n /**\n * Represents seconds of UTC time since Unix epoch\n * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to\n * 9999-12-31T23:59:59Z inclusive.\n *\n * @generated from protobuf field: int64 seconds = 1\n */\n seconds: bigint;\n /**\n * Non-negative fractions of a second at nanosecond resolution. Negative\n * second values with fractions must still have non-negative nanos values\n * that count forward in time. Must be from 0 to 999,999,999\n * inclusive.\n *\n * @generated from protobuf field: int32 nanos = 2\n */\n nanos: number;\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass Timestamp$Type extends MessageType<Timestamp> {\n constructor() {\n super(\"google.protobuf.Timestamp\", [\n { no: 1, name: \"seconds\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },\n { no: 2, name: \"nanos\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ }\n ]);\n }\n /**\n * Creates a new `Timestamp` for the current time.\n */\n now(): Timestamp {\n const msg = this.create();\n const ms = Date.now();\n msg.seconds = PbLong.from(Math.floor(ms / 1000)).toBigInt();\n msg.nanos = (ms % 1000) * 1000000;\n return msg;\n }\n /**\n * Converts a `Timestamp` to a JavaScript Date.\n */\n toDate(message: Timestamp): Date {\n return new Date(PbLong.from(message.seconds).toNumber() * 1000 + Math.ceil(message.nanos / 1000000));\n }\n /**\n * Converts a JavaScript Date to a `Timestamp`.\n */\n fromDate(date: Date): Timestamp {\n const msg = this.create();\n const ms = date.getTime();\n msg.seconds = PbLong.from(Math.floor(ms / 1000)).toBigInt();\n msg.nanos = ((ms % 1000) + (ms < 0 && ms % 1000 !== 0 ? 1000 : 0)) * 1000000;\n return msg;\n }\n /**\n * In JSON format, the `Timestamp` type is encoded as a string\n * in the RFC 3339 format.\n */\n internalJsonWrite(message: Timestamp, options: JsonWriteOptions): JsonValue {\n let ms = PbLong.from(message.seconds).toNumber() * 1000;\n if (ms < Date.parse(\"0001-01-01T00:00:00Z\") || ms > Date.parse(\"9999-12-31T23:59:59Z\"))\n throw new Error(\"Unable to encode Timestamp to JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.\");\n if (message.nanos < 0)\n throw new Error(\"Unable to encode invalid Timestamp to JSON. Nanos must not be negative.\");\n let z = \"Z\";\n if (message.nanos > 0) {\n let nanosStr = (message.nanos + 1000000000).toString().substring(1);\n if (nanosStr.substring(3) === \"000000\")\n z = \".\" + nanosStr.substring(0, 3) + \"Z\";\n else if (nanosStr.substring(6) === \"000\")\n z = \".\" + nanosStr.substring(0, 6) + \"Z\";\n else\n z = \".\" + nanosStr + \"Z\";\n }\n return new Date(ms).toISOString().replace(\".000Z\", z);\n }\n /**\n * In JSON format, the `Timestamp` type is encoded as a string\n * in the RFC 3339 format.\n */\n internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: Timestamp): Timestamp {\n if (typeof json !== \"string\")\n throw new Error(\"Unable to parse Timestamp from JSON \" + typeofJsonValue(json) + \".\");\n let matches = json.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);\n if (!matches)\n throw new Error(\"Unable to parse Timestamp from JSON. Invalid format.\");\n let ms = Date.parse(matches[1] + \"-\" + matches[2] + \"-\" + matches[3] + \"T\" + matches[4] + \":\" + matches[5] + \":\" + matches[6] + (matches[8] ? matches[8] : \"Z\"));\n if (Number.isNaN(ms))\n throw new Error(\"Unable to parse Timestamp from JSON. Invalid value.\");\n if (ms < Date.parse(\"0001-01-01T00:00:00Z\") || ms > Date.parse(\"9999-12-31T23:59:59Z\"))\n throw new globalThis.Error(\"Unable to parse Timestamp from JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.\");\n if (!target)\n target = this.create();\n target.seconds = PbLong.from(ms / 1000).toBigInt();\n target.nanos = 0;\n if (matches[7])\n target.nanos = (parseInt(\"1\" + matches[7] + \"0\".repeat(9 - matches[7].length)) - 1000000000);\n return target;\n }\n create(value?: PartialMessage<Timestamp>): Timestamp {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.seconds = 0n;\n message.nanos = 0;\n if (value !== undefined)\n reflectionMergePartial<Timestamp>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Timestamp): Timestamp {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* int64 seconds */ 1:\n message.seconds = reader.int64().toBigInt();\n break;\n case /* int32 nanos */ 2:\n message.nanos = reader.int32();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Timestamp, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* int64 seconds = 1; */\n if (message.seconds !== 0n)\n writer.tag(1, WireType.Varint).int64(message.seconds);\n /* int32 nanos = 2; */\n if (message.nanos !== 0)\n writer.tag(2, WireType.Varint).int32(message.nanos);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message google.protobuf.Timestamp\n */\nexport const Timestamp = new Timestamp$Type();\n"],"mappings":"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"}
1
+ {"version":3,"file":"timestamp.js","names":[],"sources":["../../../../src/proto-grpc/google/protobuf/timestamp.ts"],"sourcesContent":["// @generated by protobuf-ts 2.11.1 with parameter client_generic,optimize_speed,generate_dependencies,force_server_none\n// @generated from protobuf file \"google/protobuf/timestamp.proto\" (package \"google.protobuf\", syntax proto3)\n// tslint:disable\n//\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc. All rights reserved.\n// https://developers.google.com/protocol-buffers/\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { typeofJsonValue } from \"@protobuf-ts/runtime\";\nimport type { JsonValue } from \"@protobuf-ts/runtime\";\nimport type { JsonReadOptions } from \"@protobuf-ts/runtime\";\nimport type { JsonWriteOptions } from \"@protobuf-ts/runtime\";\nimport { PbLong } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\n/**\n * A Timestamp represents a point in time independent of any time zone or local\n * calendar, encoded as a count of seconds and fractions of seconds at\n * nanosecond resolution. The count is relative to an epoch at UTC midnight on\n * January 1, 1970, in the proleptic Gregorian calendar which extends the\n * Gregorian calendar backwards to year one.\n *\n * All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n * second table is needed for interpretation, using a [24-hour linear\n * smear](https://developers.google.com/time/smear).\n *\n * The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n * restricting to that range, we ensure that we can convert to and from [RFC\n * 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n *\n * # Examples\n *\n * Example 1: Compute Timestamp from POSIX `time()`.\n *\n * Timestamp timestamp;\n * timestamp.set_seconds(time(NULL));\n * timestamp.set_nanos(0);\n *\n * Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n *\n * struct timeval tv;\n * gettimeofday(&tv, NULL);\n *\n * Timestamp timestamp;\n * timestamp.set_seconds(tv.tv_sec);\n * timestamp.set_nanos(tv.tv_usec * 1000);\n *\n * Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n *\n * FILETIME ft;\n * GetSystemTimeAsFileTime(&ft);\n * UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n *\n * // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n * // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n * Timestamp timestamp;\n * timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n * timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n *\n * Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n *\n * long millis = System.currentTimeMillis();\n *\n * Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n * .setNanos((int) ((millis % 1000) * 1000000)).build();\n *\n * Example 5: Compute Timestamp from Java `Instant.now()`.\n *\n * Instant now = Instant.now();\n *\n * Timestamp timestamp =\n * Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n * .setNanos(now.getNano()).build();\n *\n * Example 6: Compute Timestamp from current time in Python.\n *\n * timestamp = Timestamp()\n * timestamp.GetCurrentTime()\n *\n * # JSON Mapping\n *\n * In JSON format, the Timestamp type is encoded as a string in the\n * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n * format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n * where {year} is always expressed using four digits while {month}, {day},\n * {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n * seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n * are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n * is required. A proto3 JSON serializer should always use UTC (as indicated by\n * \"Z\") when printing the Timestamp type and a proto3 JSON parser should be\n * able to accept both UTC and other timezones (as indicated by an offset).\n *\n * For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n * 01:30 UTC on January 15, 2017.\n *\n * In JavaScript, one can convert a Date object to this format using the\n * standard\n * [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n * method. In Python, a standard `datetime.datetime` object can be converted\n * to this format using\n * [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n * the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n * the Joda Time's [`ISODateTimeFormat.dateTime()`](\n * http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n * ) to obtain a formatter capable of generating timestamps in this format.\n *\n *\n * @generated from protobuf message google.protobuf.Timestamp\n */\nexport interface Timestamp {\n /**\n * Represents seconds of UTC time since Unix epoch\n * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to\n * 9999-12-31T23:59:59Z inclusive.\n *\n * @generated from protobuf field: int64 seconds = 1\n */\n seconds: bigint;\n /**\n * Non-negative fractions of a second at nanosecond resolution. Negative\n * second values with fractions must still have non-negative nanos values\n * that count forward in time. Must be from 0 to 999,999,999\n * inclusive.\n *\n * @generated from protobuf field: int32 nanos = 2\n */\n nanos: number;\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass Timestamp$Type extends MessageType<Timestamp> {\n constructor() {\n super(\"google.protobuf.Timestamp\", [\n { no: 1, name: \"seconds\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },\n { no: 2, name: \"nanos\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ }\n ]);\n }\n /**\n * Creates a new `Timestamp` for the current time.\n */\n now(): Timestamp {\n const msg = this.create();\n const ms = Date.now();\n msg.seconds = PbLong.from(Math.floor(ms / 1000)).toBigInt();\n msg.nanos = (ms % 1000) * 1000000;\n return msg;\n }\n /**\n * Converts a `Timestamp` to a JavaScript Date.\n */\n toDate(message: Timestamp): Date {\n return new Date(PbLong.from(message.seconds).toNumber() * 1000 + Math.ceil(message.nanos / 1000000));\n }\n /**\n * Converts a JavaScript Date to a `Timestamp`.\n */\n fromDate(date: Date): Timestamp {\n const msg = this.create();\n const ms = date.getTime();\n msg.seconds = PbLong.from(Math.floor(ms / 1000)).toBigInt();\n msg.nanos = ((ms % 1000) + (ms < 0 && ms % 1000 !== 0 ? 1000 : 0)) * 1000000;\n return msg;\n }\n /**\n * In JSON format, the `Timestamp` type is encoded as a string\n * in the RFC 3339 format.\n */\n internalJsonWrite(message: Timestamp, options: JsonWriteOptions): JsonValue {\n let ms = PbLong.from(message.seconds).toNumber() * 1000;\n if (ms < Date.parse(\"0001-01-01T00:00:00Z\") || ms > Date.parse(\"9999-12-31T23:59:59Z\"))\n throw new Error(\"Unable to encode Timestamp to JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.\");\n if (message.nanos < 0)\n throw new Error(\"Unable to encode invalid Timestamp to JSON. Nanos must not be negative.\");\n let z = \"Z\";\n if (message.nanos > 0) {\n let nanosStr = (message.nanos + 1000000000).toString().substring(1);\n if (nanosStr.substring(3) === \"000000\")\n z = \".\" + nanosStr.substring(0, 3) + \"Z\";\n else if (nanosStr.substring(6) === \"000\")\n z = \".\" + nanosStr.substring(0, 6) + \"Z\";\n else\n z = \".\" + nanosStr + \"Z\";\n }\n return new Date(ms).toISOString().replace(\".000Z\", z);\n }\n /**\n * In JSON format, the `Timestamp` type is encoded as a string\n * in the RFC 3339 format.\n */\n internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: Timestamp): Timestamp {\n if (typeof json !== \"string\")\n throw new Error(\"Unable to parse Timestamp from JSON \" + typeofJsonValue(json) + \".\");\n let matches = json.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);\n if (!matches)\n throw new Error(\"Unable to parse Timestamp from JSON. Invalid format.\");\n let ms = Date.parse(matches[1] + \"-\" + matches[2] + \"-\" + matches[3] + \"T\" + matches[4] + \":\" + matches[5] + \":\" + matches[6] + (matches[8] ? matches[8] : \"Z\"));\n if (Number.isNaN(ms))\n throw new Error(\"Unable to parse Timestamp from JSON. Invalid value.\");\n if (ms < Date.parse(\"0001-01-01T00:00:00Z\") || ms > Date.parse(\"9999-12-31T23:59:59Z\"))\n throw new globalThis.Error(\"Unable to parse Timestamp from JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.\");\n if (!target)\n target = this.create();\n target.seconds = PbLong.from(ms / 1000).toBigInt();\n target.nanos = 0;\n if (matches[7])\n target.nanos = (parseInt(\"1\" + matches[7] + \"0\".repeat(9 - matches[7].length)) - 1000000000);\n return target;\n }\n create(value?: PartialMessage<Timestamp>): Timestamp {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.seconds = 0n;\n message.nanos = 0;\n if (value !== undefined)\n reflectionMergePartial<Timestamp>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Timestamp): Timestamp {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* int64 seconds */ 1:\n message.seconds = reader.int64().toBigInt();\n break;\n case /* int32 nanos */ 2:\n message.nanos = reader.int32();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Timestamp, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* int64 seconds = 1; */\n if (message.seconds !== 0n)\n writer.tag(1, WireType.Varint).int64(message.seconds);\n /* int32 nanos = 2; */\n if (message.nanos !== 0)\n writer.tag(2, WireType.Varint).int32(message.nanos);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message google.protobuf.Timestamp\n */\nexport const Timestamp = new Timestamp$Type();\n"],"mappings":"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"}
@@ -100,5 +100,5 @@ interface operations {
100
100
  };
101
101
  }
102
102
  //#endregion
103
- export { paths };
103
+ export { components, operations, paths };
104
104
  //# sourceMappingURL=downloadapi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"downloadapi.d.ts","names":[],"sources":["../../src/proto-rest/downloadapi.ts"],"mappings":";;AAKA;;;UAAiB,KAAA;EACf,sBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;AAAA;AAAA,UAIa,UAAA;EACf,OAAA;IACE,qCAAA;MACE,IAAA;MACA,KAAA;IAAA;IAEF,kCAAA;MACE,UAAA;MAAA;;;;MAKA,iBAAA;MAUA;;;;;MAJA,aAAA;IAAA;IAEF,mCAAA;MACE,WAAA;MACA,OAAA,EAAS,UAAA;IAAA,GAuBb;IApBE,iBAAA;MAsBF,uDApBI,OAAA;IAAA;MAAA,CAEC,GAAA;IAAA,GAsBoB;IAnBvB,MAAA;MA6BwB;;;;MAxBtB,IAAA,UAeJ;MAbI,OAAA,UAeA;MAbA,OAAA,EAAS,UAAA;IAAA;EAAA;EAGb,SAAA;EACA,UAAA;EACA,aAAA;EACA,OAAA;EACA,SAAA;AAAA;AAAA,UAGe,UAAA;EACf,uBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;4BAEE,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;MAIxB,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;AAAA"}
1
+ {"version":3,"file":"downloadapi.d.ts","names":[],"sources":["../../src/proto-rest/downloadapi.ts"],"mappings":";;AAKA;;;UAAiB,KAAA;EACf,sBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAU;IAChB,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;AAAA;AAAA,UAIa,UAAA;EACf,OAAA;IACE,qCAAA;MACE,IAAA;MACA,KAAA;IAAA;IAEF,kCAAA;MACE,UAAA;MAAA;;;;MAKA,iBAAA;MAUA;;;;;MAJA,aAAA;IAAA;IAEF,mCAAA;MACE,WAAA;MACA,OAAA,EAAS,UAAA;IAAA,GAuBb;IApBE,iBAAA;MAsBF,uDApBI,OAAA;IAAA;MAAA,CAEC,GAAA;IAAA,GAsBoB;IAnBvB,MAAA;MA6BwB;;;;MAxBtB,IAAA,UAeJ;MAbI,OAAA,UAeA;MAbA,OAAA,EAAS,UAAU;IAAA;EAAA;EAGvB,SAAA;EACA,UAAA;EACA,aAAA;EACA,OAAA;EACA,SAAA;AAAA;AAAA,UAGe,UAAA;EACf,uBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;4BAEE,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;MAIxB,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;AAAA"}
@@ -8,5 +8,5 @@ type DownloadRestClientType = Client<paths>;
8
8
  type ProgressRestClientType = Client<paths$1>;
9
9
  type StreamingRestClientType = Client<paths$2>;
10
10
  //#endregion
11
- export { DownloadRestClientType, ProgressRestClientType, StreamingRestClientType };
11
+ export { type paths as DownloadApiPaths, DownloadRestClientType, type paths$1 as ProgressApiPaths, ProgressRestClientType, type paths$2 as StreamingApiPaths, StreamingRestClientType };
12
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/proto-rest/index.ts"],"mappings":";;;;;;KAeY,sBAAA,GAAyB,MAAA,CAAO,KAAA;AAAA,KAShC,sBAAA,GAAyB,MAAA,CAAO,OAAA;AAAA,KAGhC,uBAAA,GAA0B,MAAA,CAAO,OAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/proto-rest/index.ts"],"mappings":";;;;;;KAeY,sBAAA,GAAyB,MAAM,CAAC,KAAA;AAAA,KAShC,sBAAA,GAAyB,MAAM,CAAC,OAAA;AAAA,KAGhC,uBAAA,GAA0B,MAAM,CAAC,OAAA"}
@@ -147,5 +147,5 @@ interface operations {
147
147
  };
148
148
  }
149
149
  //#endregion
150
- export { paths };
150
+ export { components, operations, paths };
151
151
  //# sourceMappingURL=progressapi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"progressapi.d.ts","names":[],"sources":["../../src/proto-rest/progressapi.ts"],"mappings":";;AAKA;;;UAAiB,KAAA;EACf,kBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,uBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;AAAA;AAAA,UAIa,UAAA;EACf,OAAA;IAuBY,kIArBV,iBAAA;MA0CqB,uDAxCnB,OAAA;IAAA;MAAA,CAEC,GAAA;IAAA;IAEH,6BAAA;MACE,UAAA,UAAA;MAEA,iBAAA;IAAA;IAEF,8BAAA;MACE,MAAA,EAAQ,UAAA;IAAA;IAEV,kCAAA;MACE,UAAA,UAGA;MADA,iBAAA;MACA,cAAA;IAAA;IAEF,mCAAA;MACE,MAAA,EAAQ,UAAA;IAAA;IAEV,kBAAA;MAKE,oBAHA,QAAA;MACA,cAAA;MACA,UAAA;MACA,IAAA,WAcA;MAZA,IAAA;IAAA,GAgBJ;IAbE,MAAA;MAeF;;;;MAVI,IAAA,UAcqB;MAZrB,OAAA,UAsBsB;MApBtB,OAAA,EAAS,UAAA;IAAA;EAAA;EAGb,SAAA;EACA,UAAA;EACA,aAAA;EACA,OAAA;EACA,SAAA;AAAA;AAAA,UAGe,UAAA;EACf,kBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MAWE,sBATA,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GAiBxB;MAbA,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,uBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;4BAEE,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;MAIxB,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;AAAA"}
1
+ {"version":3,"file":"progressapi.d.ts","names":[],"sources":["../../src/proto-rest/progressapi.ts"],"mappings":";;AAKA;;;UAAiB,KAAA;EACf,kBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,uBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAU;IAChB,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;AAAA;AAAA,UAIa,UAAA;EACf,OAAA;IAuBY,kIArBV,iBAAA;MA0CqB,uDAxCnB,OAAA;IAAA;MAAA,CAEC,GAAA;IAAA;IAEH,6BAAA;MACE,UAAA,UAAA;MAEA,iBAAA;IAAA;IAEF,8BAAA;MACE,MAAA,EAAQ,UAAA;IAAA;IAEV,kCAAA;MACE,UAAA,UAGA;MADA,iBAAA;MACA,cAAA;IAAA;IAEF,mCAAA;MACE,MAAA,EAAQ,UAAA;IAAA;IAEV,kBAAA;MAKE,oBAHA,QAAA;MACA,cAAA;MACA,UAAA;MACA,IAAA,WAcA;MAZA,IAAA;IAAA,GAgBJ;IAbE,MAAA;MAeF;;;AACS;MAXL,IAAA,UAcqB;MAZrB,OAAA,UAsBsB;MApBtB,OAAA,EAAS,UAAA;IAAA;EAAA;EAGb,SAAA;EACA,UAAA;EACA,aAAA;EACA,OAAA;EACA,SAAA;AAAA;AAAA,UAGe,UAAA;EACf,kBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MAWE,sBATA,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GAiBxB;MAbA,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,uBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;4BAEE,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;MAIxB,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;AAAA"}
@@ -305,5 +305,5 @@ interface operations {
305
305
  };
306
306
  }
307
307
  //#endregion
308
- export { paths };
308
+ export { components, operations, paths };
309
309
  //# sourceMappingURL=streamingapi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"streamingapi.d.ts","names":[],"sources":["../../src/proto-rest/streamingapi.ts"],"mappings":"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"}
1
+ {"version":3,"file":"streamingapi.d.ts","names":[],"sources":["../../src/proto-rest/streamingapi.ts"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milaboratories/pl-drivers",
3
- "version": "1.16.0",
3
+ "version": "1.16.2",
4
4
  "description": "Drivers and a low-level clients for log streaming, downloading and uploading files from and to pl",
5
5
  "files": [
6
6
  "dist/**/*",
@@ -29,12 +29,12 @@
29
29
  "tar-fs": "^3.0.9",
30
30
  "undici": "~7.16.0",
31
31
  "zod": "~3.25.76",
32
- "@milaboratories/pl-client": "3.11.4",
33
32
  "@milaboratories/computable": "2.9.5",
34
- "@milaboratories/pl-model-common": "1.46.1",
35
33
  "@milaboratories/helpers": "1.14.2",
34
+ "@milaboratories/pl-model-common": "1.46.2",
35
+ "@milaboratories/pl-tree": "1.12.14",
36
36
  "@milaboratories/ts-helpers": "1.8.3",
37
- "@milaboratories/pl-tree": "1.12.12"
37
+ "@milaboratories/pl-client": "3.12.0"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/decompress": "^4.2.7",
@@ -44,10 +44,10 @@
44
44
  "openapi-typescript": "^7.10.0",
45
45
  "typescript": "~5.9.3",
46
46
  "vitest": "^4.1.3",
47
- "@milaboratories/ts-builder": "1.5.2",
47
+ "@milaboratories/build-configs": "2.0.0",
48
48
  "@milaboratories/test-helpers": "1.2.2",
49
- "@milaboratories/ts-configs": "1.2.3",
50
- "@milaboratories/build-configs": "2.0.0"
49
+ "@milaboratories/ts-builder": "1.6.0",
50
+ "@milaboratories/ts-configs": "1.3.0"
51
51
  },
52
52
  "engines": {
53
53
  "node": ">=22"
@@ -25,9 +25,12 @@ import { validateAbsolute } from "../helpers/validate";
25
25
  import type { DownloadAPI_GetDownloadURL_Response } from "../proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol";
26
26
  import { DownloadClient } from "../proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.client";
27
27
  import type { DownloadApiPaths, DownloadRestClientType } from "../proto-rest";
28
- import { type GetContentOptions } from "@milaboratories/pl-model-common";
28
+ import { type GetContentOptions, type BlobDriverMetrics } from "@milaboratories/pl-model-common";
29
29
  import { DownloadUrlCache } from "./download_url_cache";
30
30
 
31
+ /** Subset of {@link BlobDriverMetrics} owned by the download client (presigned cache + in-flight downloads). */
32
+ type ClientDownloadMetrics = Omit<BlobDriverMetrics, "uncachedRequests" | "uncachedRequestBytes">;
33
+
31
34
  /** Gets URLs for downloading from pl-core, parses them and reads or downloads
32
35
  * files locally and from the web. */
33
36
  export class ClientDownload {
@@ -43,6 +46,13 @@ export class ClientDownload {
43
46
  /** Caches presigned download URLs by resource id until they (almost) expire. */
44
47
  private readonly urlCache: DownloadUrlCache;
45
48
 
49
+ /** Active remote downloads; in-flight gauges are summed over this set on read. */
50
+ private readonly inFlight = new Set<{ size: number; received: number }>();
51
+ private presignedUrlCacheHits = 0;
52
+ private presignedUrlCacheMisses = 0;
53
+ private presignedUrlStaleHits = 0;
54
+ private presignedUrlRequestSumLatencyMs = 0;
55
+
46
56
  constructor(
47
57
  wireClientProviderFactory: WireClientProviderFactory,
48
58
  public readonly httpClient: Dispatcher,
@@ -95,7 +105,7 @@ export class ClientDownload {
95
105
  const timer = PerfTimer.start();
96
106
  const result = isLocal(downloadUrl)
97
107
  ? await this.withLocalFileContent(downloadUrl, ops, handler)
98
- : await this.remoteFileDownloader.withContent(downloadUrl, remoteHeaders, ops, handler);
108
+ : await this.withTrackedRemoteContent(downloadUrl, remoteHeaders, ops, handler);
99
109
 
100
110
  this.logger.info(
101
111
  `blob ${stringifyWithResourceId(info)} download finished, ` + `took: ${timer.elapsed()}`,
@@ -106,22 +116,80 @@ export class ClientDownload {
106
116
  const cached = this.urlCache.get(info.id);
107
117
  if (cached !== undefined) {
108
118
  try {
109
- return await attempt(cached);
119
+ const result = await attempt(cached);
120
+ this.presignedUrlCacheHits++;
121
+ return result;
110
122
  } catch (error) {
111
123
  if (!isDownloadNetworkError400(error)) throw error;
112
124
  this.urlCache.delete(info.id);
125
+ this.presignedUrlStaleHits++;
113
126
  this.logger.info(
114
127
  `cached download URL for blob ${stringifyWithResourceId(info)} rejected ` +
115
128
  `(status ${error.statusCode}), re-fetching`,
116
129
  );
117
130
  }
131
+ } else {
132
+ this.presignedUrlCacheMisses++;
118
133
  }
119
134
 
135
+ const urlFetchStartMs = performance.now();
120
136
  const fresh = await this.grpcGetDownloadUrl(info, options, ops.signal);
137
+ this.presignedUrlRequestSumLatencyMs += performance.now() - urlFetchStartMs;
121
138
  this.urlCache.set(info.id, fresh);
122
139
  return await attempt(fresh);
123
140
  }
124
141
 
142
+ /** Download-client-owned slice of {@link BlobDriverMetrics}: presigned-URL cache + in-flight downloads. */
143
+ metrics(): ClientDownloadMetrics {
144
+ let inFlightBytesTotal = 0;
145
+ let inFlightBytesReceived = 0;
146
+ for (const rec of this.inFlight) {
147
+ inFlightBytesTotal += rec.size;
148
+ inFlightBytesReceived += rec.received;
149
+ }
150
+ return {
151
+ downloadsInFlight: this.inFlight.size,
152
+ inFlightBytesTotal,
153
+ inFlightBytesReceived,
154
+ presignedUrlCacheHits: this.presignedUrlCacheHits,
155
+ presignedUrlCacheMisses: this.presignedUrlCacheMisses,
156
+ presignedUrlStaleHits: this.presignedUrlStaleHits,
157
+ presignedUrlRequestSumLatencyMs: this.presignedUrlRequestSumLatencyMs,
158
+ };
159
+ }
160
+
161
+ /** Wraps a remote download so it appears in the in-flight gauges and its received bytes are counted live. */
162
+ private async withTrackedRemoteContent<T>(
163
+ url: string,
164
+ headers: Record<string, string>,
165
+ ops: GetContentOptions,
166
+ handler: ContentHandler<T>,
167
+ ): Promise<T> {
168
+ const rec = { size: 0, received: 0 };
169
+ this.inFlight.add(rec);
170
+ try {
171
+ return await this.remoteFileDownloader.withContent(
172
+ url,
173
+ headers,
174
+ ops,
175
+ async (content, size) => {
176
+ rec.size = size;
177
+ const counted = content.pipeThrough(
178
+ new TransformStream<Uint8Array, Uint8Array>({
179
+ transform: (chunk, controller) => {
180
+ rec.received += chunk.byteLength;
181
+ controller.enqueue(chunk);
182
+ },
183
+ }),
184
+ );
185
+ return await handler(counted, size);
186
+ },
187
+ );
188
+ } finally {
189
+ this.inFlight.delete(rec);
190
+ }
191
+ }
192
+
125
193
  async withLocalFileContent<T>(
126
194
  url: string,
127
195
  ops: GetContentOptions,
@@ -9,6 +9,7 @@ import {
9
9
  import type {
10
10
  AnyLogHandle,
11
11
  BlobDriver,
12
+ BlobDriverMetrics,
12
13
  ContentHandler,
13
14
  GetContentOptions,
14
15
  LocalBlobHandle,
@@ -101,6 +102,10 @@ export class DownloadDriver implements BlobDriver, AsyncDisposable {
101
102
 
102
103
  private readonly saveDir: string;
103
104
 
105
+ /** Downloads that bypassed the ranges cache; counted when issued. */
106
+ private uncachedRequests = 0;
107
+ private uncachedRequestBytes = 0;
108
+
104
109
  constructor(
105
110
  private readonly logger: MiLogger,
106
111
  private readonly clientDownload: ClientDownload,
@@ -341,6 +346,18 @@ export class DownloadDriver implements BlobDriver, AsyncDisposable {
341
346
  });
342
347
  }
343
348
 
349
+ /**
350
+ * Operational metrics for a monitoring panel. Serv cache metrics are reported separately
351
+ * (different owner) — the panel composes both.
352
+ */
353
+ public getMetrics(): BlobDriverMetrics {
354
+ return {
355
+ uncachedRequests: this.uncachedRequests,
356
+ uncachedRequestBytes: this.uncachedRequestBytes,
357
+ ...this.clientDownload.metrics(),
358
+ };
359
+ }
360
+
344
361
  private async getContentImpl({
345
362
  handle,
346
363
  options,
@@ -399,12 +416,24 @@ export class DownloadDriver implements BlobDriver, AsyncDisposable {
399
416
 
400
417
  if (filePath) return await withFileContent({ path: filePath, range, signal, handler });
401
418
 
419
+ if (bypassRangesCache) this.uncachedRequests++;
420
+
402
421
  return await this.clientDownload.withBlobContent(
403
422
  result.info,
404
423
  { signal },
405
424
  options,
406
425
  async (content, size) => {
407
- if (bypassRangesCache) return await handler(content, size);
426
+ if (bypassRangesCache) {
427
+ const counted = content.pipeThrough(
428
+ new TransformStream<Uint8Array, Uint8Array>({
429
+ transform: (chunk, controller) => {
430
+ this.uncachedRequestBytes += chunk.byteLength;
431
+ controller.enqueue(chunk);
432
+ },
433
+ }),
434
+ );
435
+ return await handler(counted, size);
436
+ }
408
437
 
409
438
  const [handlerStream, cacheStream] = content.tee();
410
439
 
@@ -12,6 +12,7 @@ import { stringifyWithResourceId } from "@milaboratories/pl-client";
12
12
  import type { BlockUIURL, FrontendDriver } from "@milaboratories/pl-model-common";
13
13
  import { isBlockUIURL } from "@milaboratories/pl-model-common";
14
14
  import { getPathForBlockUIURL } from "../urls/url";
15
+ import type { DownloadSource } from "./task";
15
16
  import { DownloadByUrlTask, rmRFDir, URLAborted } from "./task";
16
17
 
17
18
  export interface DownloadUrlSyncReader {
@@ -50,7 +51,7 @@ export type DownloadUrlDriverOps = {
50
51
  export class DownloadUrlDriver implements DownloadUrlSyncReader, FrontendDriver {
51
52
  private readonly downloadHelper: RemoteFileDownloader;
52
53
 
53
- private urlToDownload: Map<string, DownloadByUrlTask> = new Map();
54
+ private taskByKey: Map<string, DownloadByUrlTask> = new Map();
54
55
  private downloadQueue: TaskProcessor;
55
56
 
56
57
  /** Writes and removes files to a hard drive and holds a counter for every
@@ -83,13 +84,36 @@ export class DownloadUrlDriver implements DownloadUrlSyncReader, FrontendDriver
83
84
  getUrl(url: URL, ctx?: ComputableCtx): Computable<UrlResult | undefined> | UrlResult | undefined {
84
85
  // wrap result as computable, if we were not given an existing computable context
85
86
  if (ctx === undefined) return Computable.make((c) => this.getUrl(url, c));
87
+ return this.getResult({ type: "url", url }, url.toString(), ctx);
88
+ }
89
+
90
+ getLocalTgz(path: string, mtime: string, ctx: ComputableCtx): UrlResult | undefined;
91
+ getLocalTgz(path: string, mtime: string): Computable<UrlResult | undefined>;
92
+
93
+ /** Mirror of {@link getUrl} for a local `.tgz` archive: lazily unpacks it
94
+ * into the recycled cache (so a live UI keeps the folder pinned) and returns
95
+ * a custom-protocol URL. Keyed on `path + ":" + mtime`, so the unpacked UI is
96
+ * re-derived when the source block changes. */
97
+ getLocalTgz(
98
+ path: string,
99
+ mtime: string,
100
+ ctx?: ComputableCtx,
101
+ ): Computable<UrlResult | undefined> | UrlResult | undefined {
102
+ if (ctx === undefined) return Computable.make((c) => this.getLocalTgz(path, mtime, c));
103
+ return this.getResult({ type: "local-tgz", path, mtime }, `${path}:${mtime}`, ctx);
104
+ }
86
105
 
106
+ private getResult(
107
+ source: DownloadSource,
108
+ key: string,
109
+ ctx: ComputableCtx,
110
+ ): UrlResult | undefined {
87
111
  const callerId = randomUUID();
88
112
 
89
113
  // read as ~ golang's defer
90
- ctx.addOnDestroy(() => this.releasePath(url, callerId));
114
+ ctx.addOnDestroy(() => this.releaseByKey(key, callerId));
91
115
 
92
- const result = this.getUrlNoCtx(url, ctx.watcher, callerId);
116
+ const result = this.getResultNoCtx(source, key, ctx.watcher, callerId);
93
117
  if (result?.url === undefined)
94
118
  ctx.markUnstable(
95
119
  `a path to the downloaded and untared archive might be undefined. The current result: ${result}`,
@@ -98,16 +122,15 @@ export class DownloadUrlDriver implements DownloadUrlSyncReader, FrontendDriver
98
122
  return result;
99
123
  }
100
124
 
101
- getUrlNoCtx(url: URL, w: Watcher, callerId: string) {
102
- const key = url.toString();
103
- const task = this.urlToDownload.get(key);
125
+ private getResultNoCtx(source: DownloadSource, key: string, w: Watcher, callerId: string) {
126
+ const task = this.taskByKey.get(key);
104
127
 
105
128
  if (task !== undefined) {
106
129
  task.attach(w, callerId);
107
130
  return task.getUrl();
108
131
  }
109
132
 
110
- const newTask = this.setNewTask(w, url, callerId);
133
+ const newTask = this.setNewTask(w, source, key, callerId);
111
134
  this.downloadQueue.push({
112
135
  fn: async () => this.downloadUrl(newTask, callerId),
113
136
  recoverableErrorPredicate: (e) => !(e instanceof URLAborted) && !isDownloadNetworkError400(e),
@@ -133,9 +156,8 @@ export class DownloadUrlDriver implements DownloadUrlSyncReader, FrontendDriver
133
156
 
134
157
  /** Removes a directory and aborts a downloading task when all callers
135
158
  * are not interested in it. */
136
- async releasePath(url: URL, callerId: string): Promise<void> {
137
- const key = url.toString();
138
- const task = this.urlToDownload.get(key);
159
+ async releaseByKey(key: string, callerId: string): Promise<void> {
160
+ const task = this.taskByKey.get(key);
139
161
  if (task == undefined) return;
140
162
 
141
163
  if (this.cache.existsFile(task.path)) {
@@ -169,7 +191,7 @@ export class DownloadUrlDriver implements DownloadUrlSyncReader, FrontendDriver
169
191
  this.downloadQueue.stop();
170
192
 
171
193
  await Promise.all(
172
- Array.from(this.urlToDownload.entries()).map(async ([, task]) => {
194
+ Array.from(this.taskByKey.entries()).map(async ([, task]) => {
173
195
  await rmRFDir(task.path);
174
196
  this.cache.removeCache(task);
175
197
 
@@ -181,28 +203,31 @@ export class DownloadUrlDriver implements DownloadUrlSyncReader, FrontendDriver
181
203
  );
182
204
  }
183
205
 
184
- private setNewTask(w: Watcher, url: URL, callerId: string) {
206
+ private setNewTask(w: Watcher, source: DownloadSource, key: string, callerId: string) {
185
207
  const result = new DownloadByUrlTask(
186
208
  this.logger,
187
- this.getFilePath(url),
188
- url,
209
+ this.getExtractionPath(key),
210
+ source,
211
+ key,
189
212
  this.signer,
190
213
  this.saveDir,
191
214
  );
192
215
  result.attach(w, callerId);
193
- this.urlToDownload.set(url.toString(), result);
216
+ this.taskByKey.set(key, result);
194
217
 
195
218
  return result;
196
219
  }
197
220
 
198
221
  private removeTask(task: DownloadByUrlTask, reason: string) {
199
222
  task.abort(reason);
200
- task.change.markChanged(`task for url ${task.url} removed: ${reason}`);
201
- this.urlToDownload.delete(task.url.toString());
223
+ task.change.markChanged(`task for ${task.key} removed: ${reason}`);
224
+ this.taskByKey.delete(task.key);
202
225
  }
203
226
 
204
- private getFilePath(url: URL): string {
205
- const sha256 = createHash("sha256").update(url.toString()).digest("hex");
227
+ /** Directory an archive (url or local file) is extracted into; keyed by a
228
+ * hash of the task key so the same source maps to a stable on-disk path. */
229
+ private getExtractionPath(key: string): string {
230
+ const sha256 = createHash("sha256").update(key).digest("hex");
206
231
  return path.join(this.saveDir, sha256);
207
232
  }
208
233
  }