@lakutata/containerd 0.0.0-stage → 3.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +409 -2
  3. package/THIRD_PARTY_NOTICES.md +310 -0
  4. package/dist/cjs/client/BuildKit.d.ts +176 -0
  5. package/dist/cjs/client/BuildKit.js +536 -0
  6. package/dist/cjs/client/BuildKitMessages.d.ts +35 -0
  7. package/dist/cjs/client/BuildKitMessages.js +123 -0
  8. package/dist/cjs/client/ContainerStore.d.ts +558 -0
  9. package/dist/cjs/client/ContainerStore.js +1384 -0
  10. package/dist/cjs/client/ContainerdClient.d.ts +244 -0
  11. package/dist/cjs/client/ContainerdClient.js +455 -0
  12. package/dist/cjs/client/DockerIgnore.d.ts +44 -0
  13. package/dist/cjs/client/DockerIgnore.js +186 -0
  14. package/dist/cjs/client/Fifo.d.ts +31 -0
  15. package/dist/cjs/client/Fifo.js +66 -0
  16. package/dist/cjs/client/ImageStore.d.ts +258 -0
  17. package/dist/cjs/client/ImageStore.js +636 -0
  18. package/dist/cjs/client/Messages.d.ts +103 -0
  19. package/dist/cjs/client/Messages.js +397 -0
  20. package/dist/cjs/client/Networks.d.ts +221 -0
  21. package/dist/cjs/client/Networks.js +630 -0
  22. package/dist/cjs/client/Platforms.d.ts +53 -0
  23. package/dist/cjs/client/Platforms.js +169 -0
  24. package/dist/cjs/client/Reference.d.ts +33 -0
  25. package/dist/cjs/client/Reference.js +70 -0
  26. package/dist/cjs/client/Registry.d.ts +145 -0
  27. package/dist/cjs/client/Registry.js +272 -0
  28. package/dist/cjs/client/Rootfs.d.ts +83 -0
  29. package/dist/cjs/client/Rootfs.js +245 -0
  30. package/dist/cjs/client/Seccomp.d.ts +36 -0
  31. package/dist/cjs/client/Seccomp.js +156 -0
  32. package/dist/cjs/client/Spec.d.ts +151 -0
  33. package/dist/cjs/client/Spec.js +227 -0
  34. package/dist/cjs/client/Volumes.d.ts +42 -0
  35. package/dist/cjs/client/Volumes.js +80 -0
  36. package/dist/cjs/containerd/Containerd.d.ts +442 -0
  37. package/dist/cjs/containerd/Containerd.js +929 -0
  38. package/dist/cjs/containerd/exceptions/ContainerdConnectionException.d.ts +9 -0
  39. package/dist/cjs/containerd/exceptions/ContainerdConnectionException.js +16 -0
  40. package/dist/cjs/containerd/exceptions/ContainerdContainerNameConflictException.d.ts +8 -0
  41. package/dist/cjs/containerd/exceptions/ContainerdContainerNameConflictException.js +15 -0
  42. package/dist/cjs/containerd/exceptions/ContainerdContainerNotFoundException.d.ts +9 -0
  43. package/dist/cjs/containerd/exceptions/ContainerdContainerNotFoundException.js +16 -0
  44. package/dist/cjs/containerd/exceptions/ContainerdContainerStateException.d.ts +10 -0
  45. package/dist/cjs/containerd/exceptions/ContainerdContainerStateException.js +17 -0
  46. package/dist/cjs/containerd/exceptions/ContainerdImageBuildException.d.ts +9 -0
  47. package/dist/cjs/containerd/exceptions/ContainerdImageBuildException.js +16 -0
  48. package/dist/cjs/containerd/exceptions/ContainerdImageExportException.d.ts +9 -0
  49. package/dist/cjs/containerd/exceptions/ContainerdImageExportException.js +16 -0
  50. package/dist/cjs/containerd/exceptions/ContainerdImageImportException.d.ts +9 -0
  51. package/dist/cjs/containerd/exceptions/ContainerdImageImportException.js +16 -0
  52. package/dist/cjs/containerd/exceptions/ContainerdImageNotFoundException.d.ts +9 -0
  53. package/dist/cjs/containerd/exceptions/ContainerdImageNotFoundException.js +16 -0
  54. package/dist/cjs/containerd/exceptions/ContainerdImagePullException.d.ts +9 -0
  55. package/dist/cjs/containerd/exceptions/ContainerdImagePullException.js +16 -0
  56. package/dist/cjs/containerd/exceptions/ContainerdImagePushException.d.ts +8 -0
  57. package/dist/cjs/containerd/exceptions/ContainerdImagePushException.js +15 -0
  58. package/dist/cjs/containerd/exceptions/ContainerdNetworkConflictException.d.ts +9 -0
  59. package/dist/cjs/containerd/exceptions/ContainerdNetworkConflictException.js +16 -0
  60. package/dist/cjs/containerd/exceptions/ContainerdNetworkNotFoundException.d.ts +9 -0
  61. package/dist/cjs/containerd/exceptions/ContainerdNetworkNotFoundException.js +16 -0
  62. package/dist/cjs/containerd/exceptions/ContainerdPathNotFoundException.d.ts +8 -0
  63. package/dist/cjs/containerd/exceptions/ContainerdPathNotFoundException.js +15 -0
  64. package/dist/cjs/containerd/exceptions/ContainerdPlatformException.d.ts +9 -0
  65. package/dist/cjs/containerd/exceptions/ContainerdPlatformException.js +16 -0
  66. package/dist/cjs/containerd/exceptions/ContainerdVolumeInUseException.d.ts +8 -0
  67. package/dist/cjs/containerd/exceptions/ContainerdVolumeInUseException.js +15 -0
  68. package/dist/cjs/containerd/exceptions/ContainerdVolumeNotFoundException.d.ts +8 -0
  69. package/dist/cjs/containerd/exceptions/ContainerdVolumeNotFoundException.js +15 -0
  70. package/dist/cjs/containerd/lib/ContainerdContainer.d.ts +292 -0
  71. package/dist/cjs/containerd/lib/ContainerdContainer.js +536 -0
  72. package/dist/cjs/containerd/lib/ContainerdContainerTTY.d.ts +116 -0
  73. package/dist/cjs/containerd/lib/ContainerdContainerTTY.js +178 -0
  74. package/dist/cjs/containerd/lib/ContainerdErrors.d.ts +6 -0
  75. package/dist/cjs/containerd/lib/ContainerdErrors.js +37 -0
  76. package/dist/cjs/containerd/lib/ContainerdImage.d.ts +149 -0
  77. package/dist/cjs/containerd/lib/ContainerdImage.js +222 -0
  78. package/dist/cjs/containerd/options/ContainerdPruneOptions.d.ts +44 -0
  79. package/dist/cjs/containerd/options/ContainerdPruneOptions.js +51 -0
  80. package/dist/cjs/containerd/options/ContainerdRegistryAuthOptions.d.ts +32 -0
  81. package/dist/cjs/containerd/options/ContainerdRegistryAuthOptions.js +45 -0
  82. package/dist/cjs/containerd/options/container/ContainerCommitOptions.d.ts +57 -0
  83. package/dist/cjs/containerd/options/container/ContainerCommitOptions.js +66 -0
  84. package/dist/cjs/containerd/options/container/ContainerCreateOptions.d.ts +273 -0
  85. package/dist/cjs/containerd/options/container/ContainerCreateOptions.js +239 -0
  86. package/dist/cjs/containerd/options/container/ContainerExecOptions.d.ts +53 -0
  87. package/dist/cjs/containerd/options/container/ContainerExecOptions.js +63 -0
  88. package/dist/cjs/containerd/options/container/ContainerExportDirectoryOptions.d.ts +32 -0
  89. package/dist/cjs/containerd/options/container/ContainerExportDirectoryOptions.js +45 -0
  90. package/dist/cjs/containerd/options/container/ContainerKillOptions.d.ts +30 -0
  91. package/dist/cjs/containerd/options/container/ContainerKillOptions.js +41 -0
  92. package/dist/cjs/containerd/options/container/ContainerLogsOptions.d.ts +34 -0
  93. package/dist/cjs/containerd/options/container/ContainerLogsOptions.js +44 -0
  94. package/dist/cjs/containerd/options/container/ContainerRemoveOptions.d.ts +22 -0
  95. package/dist/cjs/containerd/options/container/ContainerRemoveOptions.js +34 -0
  96. package/dist/cjs/containerd/options/container/ContainerResourceOptions.d.ts +63 -0
  97. package/dist/cjs/containerd/options/container/ContainerResourceOptions.js +67 -0
  98. package/dist/cjs/containerd/options/container/ContainerStopOptions.d.ts +30 -0
  99. package/dist/cjs/containerd/options/container/ContainerStopOptions.js +41 -0
  100. package/dist/cjs/containerd/options/container/ContainerTTYConsoleSizeOptions.d.ts +26 -0
  101. package/dist/cjs/containerd/options/container/ContainerTTYConsoleSizeOptions.js +40 -0
  102. package/dist/cjs/containerd/options/container/ContainerTTYOptions.d.ts +50 -0
  103. package/dist/cjs/containerd/options/container/ContainerTTYOptions.js +63 -0
  104. package/dist/cjs/containerd/options/image/ImageBuildOptions.d.ts +88 -0
  105. package/dist/cjs/containerd/options/image/ImageBuildOptions.js +95 -0
  106. package/dist/cjs/containerd/options/image/ImageExportOptions.d.ts +25 -0
  107. package/dist/cjs/containerd/options/image/ImageExportOptions.js +39 -0
  108. package/dist/cjs/containerd/options/image/ImageImportOptions.d.ts +38 -0
  109. package/dist/cjs/containerd/options/image/ImageImportOptions.js +47 -0
  110. package/dist/cjs/containerd/options/image/ImagePullOptions.d.ts +53 -0
  111. package/dist/cjs/containerd/options/image/ImagePullOptions.js +66 -0
  112. package/dist/cjs/containerd/options/image/ImagePushOptions.d.ts +44 -0
  113. package/dist/cjs/containerd/options/image/ImagePushOptions.js +58 -0
  114. package/dist/cjs/containerd/options/network/NetworkCreateOptions.d.ts +82 -0
  115. package/dist/cjs/containerd/options/network/NetworkCreateOptions.js +83 -0
  116. package/dist/cjs/containerd/options/volume/VolumeCreateOptions.d.ts +26 -0
  117. package/dist/cjs/containerd/options/volume/VolumeCreateOptions.js +40 -0
  118. package/dist/cjs/containerd/types/ContainerdBind.d.ts +28 -0
  119. package/dist/cjs/containerd/types/ContainerdBind.js +2 -0
  120. package/dist/cjs/containerd/types/ContainerdBuildOutputCallback.d.ts +6 -0
  121. package/dist/cjs/containerd/types/ContainerdBuildOutputCallback.js +2 -0
  122. package/dist/cjs/containerd/types/ContainerdContainerNetwork.d.ts +40 -0
  123. package/dist/cjs/containerd/types/ContainerdContainerNetwork.js +2 -0
  124. package/dist/cjs/containerd/types/ContainerdContainerPort.d.ts +22 -0
  125. package/dist/cjs/containerd/types/ContainerdContainerPort.js +2 -0
  126. package/dist/cjs/containerd/types/ContainerdContainerState.d.ts +42 -0
  127. package/dist/cjs/containerd/types/ContainerdContainerState.js +2 -0
  128. package/dist/cjs/containerd/types/ContainerdContainerStats.d.ts +107 -0
  129. package/dist/cjs/containerd/types/ContainerdContainerStats.js +2 -0
  130. package/dist/cjs/containerd/types/ContainerdDevice.d.ts +25 -0
  131. package/dist/cjs/containerd/types/ContainerdDevice.js +2 -0
  132. package/dist/cjs/containerd/types/ContainerdExecResult.d.ts +18 -0
  133. package/dist/cjs/containerd/types/ContainerdExecResult.js +2 -0
  134. package/dist/cjs/containerd/types/ContainerdImageConfig.d.ts +46 -0
  135. package/dist/cjs/containerd/types/ContainerdImageConfig.js +2 -0
  136. package/dist/cjs/containerd/types/ContainerdNetworkInfo.d.ts +49 -0
  137. package/dist/cjs/containerd/types/ContainerdNetworkInfo.js +2 -0
  138. package/dist/cjs/containerd/types/ContainerdProgressCallback.d.ts +29 -0
  139. package/dist/cjs/containerd/types/ContainerdProgressCallback.js +2 -0
  140. package/dist/cjs/containerd/types/ContainerdPruneResult.d.ts +21 -0
  141. package/dist/cjs/containerd/types/ContainerdPruneResult.js +2 -0
  142. package/dist/cjs/containerd/types/ContainerdRestartPolicy.d.ts +13 -0
  143. package/dist/cjs/containerd/types/ContainerdRestartPolicy.js +2 -0
  144. package/dist/cjs/containerd/types/ContainerdTmpfs.d.ts +20 -0
  145. package/dist/cjs/containerd/types/ContainerdTmpfs.js +2 -0
  146. package/dist/cjs/containerd/types/ContainerdVolume.d.ts +19 -0
  147. package/dist/cjs/containerd/types/ContainerdVolume.js +2 -0
  148. package/dist/cjs/containerd/types/ContainerdVolumeInfo.d.ts +26 -0
  149. package/dist/cjs/containerd/types/ContainerdVolumeInfo.js +2 -0
  150. package/dist/cjs/exports/Containerd.d.ts +69 -0
  151. package/dist/cjs/exports/Containerd.js +87 -0
  152. package/dist/cjs/package.json +1 -0
  153. package/dist/esm/client/BuildKit.js +488 -0
  154. package/dist/esm/client/BuildKitMessages.js +120 -0
  155. package/dist/esm/client/ContainerStore.js +1339 -0
  156. package/dist/esm/client/ContainerdClient.js +416 -0
  157. package/dist/esm/client/DockerIgnore.js +179 -0
  158. package/dist/esm/client/Fifo.js +59 -0
  159. package/dist/esm/client/ImageStore.js +628 -0
  160. package/dist/esm/client/Messages.js +393 -0
  161. package/dist/esm/client/Networks.js +621 -0
  162. package/dist/esm/client/Platforms.js +156 -0
  163. package/dist/esm/client/Reference.js +66 -0
  164. package/dist/esm/client/Registry.js +263 -0
  165. package/dist/esm/client/Rootfs.js +234 -0
  166. package/dist/esm/client/Seccomp.js +152 -0
  167. package/dist/esm/client/Spec.js +220 -0
  168. package/dist/esm/client/Volumes.js +73 -0
  169. package/dist/esm/containerd/Containerd.js +923 -0
  170. package/dist/esm/containerd/exceptions/ContainerdConnectionException.js +12 -0
  171. package/dist/esm/containerd/exceptions/ContainerdContainerNameConflictException.js +11 -0
  172. package/dist/esm/containerd/exceptions/ContainerdContainerNotFoundException.js +12 -0
  173. package/dist/esm/containerd/exceptions/ContainerdContainerStateException.js +13 -0
  174. package/dist/esm/containerd/exceptions/ContainerdImageBuildException.js +12 -0
  175. package/dist/esm/containerd/exceptions/ContainerdImageExportException.js +12 -0
  176. package/dist/esm/containerd/exceptions/ContainerdImageImportException.js +12 -0
  177. package/dist/esm/containerd/exceptions/ContainerdImageNotFoundException.js +12 -0
  178. package/dist/esm/containerd/exceptions/ContainerdImagePullException.js +12 -0
  179. package/dist/esm/containerd/exceptions/ContainerdImagePushException.js +11 -0
  180. package/dist/esm/containerd/exceptions/ContainerdNetworkConflictException.js +12 -0
  181. package/dist/esm/containerd/exceptions/ContainerdNetworkNotFoundException.js +12 -0
  182. package/dist/esm/containerd/exceptions/ContainerdPathNotFoundException.js +11 -0
  183. package/dist/esm/containerd/exceptions/ContainerdPlatformException.js +12 -0
  184. package/dist/esm/containerd/exceptions/ContainerdVolumeInUseException.js +11 -0
  185. package/dist/esm/containerd/exceptions/ContainerdVolumeNotFoundException.js +11 -0
  186. package/dist/esm/containerd/lib/ContainerdContainer.js +533 -0
  187. package/dist/esm/containerd/lib/ContainerdContainerTTY.js +175 -0
  188. package/dist/esm/containerd/lib/ContainerdErrors.js +34 -0
  189. package/dist/esm/containerd/lib/ContainerdImage.js +219 -0
  190. package/dist/esm/containerd/options/ContainerdPruneOptions.js +47 -0
  191. package/dist/esm/containerd/options/ContainerdRegistryAuthOptions.js +41 -0
  192. package/dist/esm/containerd/options/container/ContainerCommitOptions.js +62 -0
  193. package/dist/esm/containerd/options/container/ContainerCreateOptions.js +235 -0
  194. package/dist/esm/containerd/options/container/ContainerExecOptions.js +59 -0
  195. package/dist/esm/containerd/options/container/ContainerExportDirectoryOptions.js +41 -0
  196. package/dist/esm/containerd/options/container/ContainerKillOptions.js +37 -0
  197. package/dist/esm/containerd/options/container/ContainerLogsOptions.js +40 -0
  198. package/dist/esm/containerd/options/container/ContainerRemoveOptions.js +30 -0
  199. package/dist/esm/containerd/options/container/ContainerResourceOptions.js +63 -0
  200. package/dist/esm/containerd/options/container/ContainerStopOptions.js +37 -0
  201. package/dist/esm/containerd/options/container/ContainerTTYConsoleSizeOptions.js +36 -0
  202. package/dist/esm/containerd/options/container/ContainerTTYOptions.js +59 -0
  203. package/dist/esm/containerd/options/image/ImageBuildOptions.js +91 -0
  204. package/dist/esm/containerd/options/image/ImageExportOptions.js +35 -0
  205. package/dist/esm/containerd/options/image/ImageImportOptions.js +43 -0
  206. package/dist/esm/containerd/options/image/ImagePullOptions.js +62 -0
  207. package/dist/esm/containerd/options/image/ImagePushOptions.js +54 -0
  208. package/dist/esm/containerd/options/network/NetworkCreateOptions.js +79 -0
  209. package/dist/esm/containerd/options/volume/VolumeCreateOptions.js +36 -0
  210. package/dist/esm/containerd/types/ContainerdBind.js +1 -0
  211. package/dist/esm/containerd/types/ContainerdBuildOutputCallback.js +1 -0
  212. package/dist/esm/containerd/types/ContainerdContainerNetwork.js +1 -0
  213. package/dist/esm/containerd/types/ContainerdContainerPort.js +1 -0
  214. package/dist/esm/containerd/types/ContainerdContainerState.js +1 -0
  215. package/dist/esm/containerd/types/ContainerdContainerStats.js +1 -0
  216. package/dist/esm/containerd/types/ContainerdDevice.js +1 -0
  217. package/dist/esm/containerd/types/ContainerdExecResult.js +1 -0
  218. package/dist/esm/containerd/types/ContainerdImageConfig.js +1 -0
  219. package/dist/esm/containerd/types/ContainerdNetworkInfo.js +1 -0
  220. package/dist/esm/containerd/types/ContainerdProgressCallback.js +1 -0
  221. package/dist/esm/containerd/types/ContainerdPruneResult.js +1 -0
  222. package/dist/esm/containerd/types/ContainerdRestartPolicy.js +1 -0
  223. package/dist/esm/containerd/types/ContainerdTmpfs.js +1 -0
  224. package/dist/esm/containerd/types/ContainerdVolume.js +1 -0
  225. package/dist/esm/containerd/types/ContainerdVolumeInfo.js +1 -0
  226. package/dist/esm/exports/Containerd.js +68 -0
  227. package/dist/types/client/BuildKit.d.ts +176 -0
  228. package/dist/types/client/BuildKitMessages.d.ts +35 -0
  229. package/dist/types/client/ContainerStore.d.ts +558 -0
  230. package/dist/types/client/ContainerdClient.d.ts +244 -0
  231. package/dist/types/client/DockerIgnore.d.ts +44 -0
  232. package/dist/types/client/Fifo.d.ts +31 -0
  233. package/dist/types/client/ImageStore.d.ts +258 -0
  234. package/dist/types/client/Messages.d.ts +103 -0
  235. package/dist/types/client/Networks.d.ts +221 -0
  236. package/dist/types/client/Platforms.d.ts +53 -0
  237. package/dist/types/client/Reference.d.ts +33 -0
  238. package/dist/types/client/Registry.d.ts +145 -0
  239. package/dist/types/client/Rootfs.d.ts +83 -0
  240. package/dist/types/client/Seccomp.d.ts +36 -0
  241. package/dist/types/client/Spec.d.ts +151 -0
  242. package/dist/types/client/Volumes.d.ts +42 -0
  243. package/dist/types/containerd/Containerd.d.ts +442 -0
  244. package/dist/types/containerd/exceptions/ContainerdConnectionException.d.ts +9 -0
  245. package/dist/types/containerd/exceptions/ContainerdContainerNameConflictException.d.ts +8 -0
  246. package/dist/types/containerd/exceptions/ContainerdContainerNotFoundException.d.ts +9 -0
  247. package/dist/types/containerd/exceptions/ContainerdContainerStateException.d.ts +10 -0
  248. package/dist/types/containerd/exceptions/ContainerdImageBuildException.d.ts +9 -0
  249. package/dist/types/containerd/exceptions/ContainerdImageExportException.d.ts +9 -0
  250. package/dist/types/containerd/exceptions/ContainerdImageImportException.d.ts +9 -0
  251. package/dist/types/containerd/exceptions/ContainerdImageNotFoundException.d.ts +9 -0
  252. package/dist/types/containerd/exceptions/ContainerdImagePullException.d.ts +9 -0
  253. package/dist/types/containerd/exceptions/ContainerdImagePushException.d.ts +8 -0
  254. package/dist/types/containerd/exceptions/ContainerdNetworkConflictException.d.ts +9 -0
  255. package/dist/types/containerd/exceptions/ContainerdNetworkNotFoundException.d.ts +9 -0
  256. package/dist/types/containerd/exceptions/ContainerdPathNotFoundException.d.ts +8 -0
  257. package/dist/types/containerd/exceptions/ContainerdPlatformException.d.ts +9 -0
  258. package/dist/types/containerd/exceptions/ContainerdVolumeInUseException.d.ts +8 -0
  259. package/dist/types/containerd/exceptions/ContainerdVolumeNotFoundException.d.ts +8 -0
  260. package/dist/types/containerd/lib/ContainerdContainer.d.ts +292 -0
  261. package/dist/types/containerd/lib/ContainerdContainerTTY.d.ts +116 -0
  262. package/dist/types/containerd/lib/ContainerdErrors.d.ts +6 -0
  263. package/dist/types/containerd/lib/ContainerdImage.d.ts +149 -0
  264. package/dist/types/containerd/options/ContainerdPruneOptions.d.ts +44 -0
  265. package/dist/types/containerd/options/ContainerdRegistryAuthOptions.d.ts +32 -0
  266. package/dist/types/containerd/options/container/ContainerCommitOptions.d.ts +57 -0
  267. package/dist/types/containerd/options/container/ContainerCreateOptions.d.ts +273 -0
  268. package/dist/types/containerd/options/container/ContainerExecOptions.d.ts +53 -0
  269. package/dist/types/containerd/options/container/ContainerExportDirectoryOptions.d.ts +32 -0
  270. package/dist/types/containerd/options/container/ContainerKillOptions.d.ts +30 -0
  271. package/dist/types/containerd/options/container/ContainerLogsOptions.d.ts +34 -0
  272. package/dist/types/containerd/options/container/ContainerRemoveOptions.d.ts +22 -0
  273. package/dist/types/containerd/options/container/ContainerResourceOptions.d.ts +63 -0
  274. package/dist/types/containerd/options/container/ContainerStopOptions.d.ts +30 -0
  275. package/dist/types/containerd/options/container/ContainerTTYConsoleSizeOptions.d.ts +26 -0
  276. package/dist/types/containerd/options/container/ContainerTTYOptions.d.ts +50 -0
  277. package/dist/types/containerd/options/image/ImageBuildOptions.d.ts +88 -0
  278. package/dist/types/containerd/options/image/ImageExportOptions.d.ts +25 -0
  279. package/dist/types/containerd/options/image/ImageImportOptions.d.ts +38 -0
  280. package/dist/types/containerd/options/image/ImagePullOptions.d.ts +53 -0
  281. package/dist/types/containerd/options/image/ImagePushOptions.d.ts +44 -0
  282. package/dist/types/containerd/options/network/NetworkCreateOptions.d.ts +82 -0
  283. package/dist/types/containerd/options/volume/VolumeCreateOptions.d.ts +26 -0
  284. package/dist/types/containerd/types/ContainerdBind.d.ts +28 -0
  285. package/dist/types/containerd/types/ContainerdBuildOutputCallback.d.ts +6 -0
  286. package/dist/types/containerd/types/ContainerdContainerNetwork.d.ts +40 -0
  287. package/dist/types/containerd/types/ContainerdContainerPort.d.ts +22 -0
  288. package/dist/types/containerd/types/ContainerdContainerState.d.ts +42 -0
  289. package/dist/types/containerd/types/ContainerdContainerStats.d.ts +107 -0
  290. package/dist/types/containerd/types/ContainerdDevice.d.ts +25 -0
  291. package/dist/types/containerd/types/ContainerdExecResult.d.ts +18 -0
  292. package/dist/types/containerd/types/ContainerdImageConfig.d.ts +46 -0
  293. package/dist/types/containerd/types/ContainerdNetworkInfo.d.ts +49 -0
  294. package/dist/types/containerd/types/ContainerdProgressCallback.d.ts +29 -0
  295. package/dist/types/containerd/types/ContainerdPruneResult.d.ts +21 -0
  296. package/dist/types/containerd/types/ContainerdRestartPolicy.d.ts +13 -0
  297. package/dist/types/containerd/types/ContainerdTmpfs.d.ts +20 -0
  298. package/dist/types/containerd/types/ContainerdVolume.d.ts +19 -0
  299. package/dist/types/containerd/types/ContainerdVolumeInfo.d.ts +26 -0
  300. package/dist/types/exports/Containerd.d.ts +69 -0
  301. package/package.json +51 -4
@@ -0,0 +1,83 @@
1
+ import type { Stats } from 'node:fs';
2
+ import type { SnapshotMount } from './ContainerdClient.js';
3
+ /**
4
+ * The user of a process: its identifiers and its groups
5
+ */
6
+ export type ProcessUser = {
7
+ uid: number;
8
+ gid: number;
9
+ additionalGids: number[];
10
+ home: string;
11
+ };
12
+ /**
13
+ * The directories of the layers of the mounts of a snapshot, the top one first (overlay: its upper directory and its
14
+ * lower ones, bind: its source)
15
+ * @param mounts
16
+ */
17
+ export declare function layerDirectories(mounts: SnapshotMount[]): string[];
18
+ /**
19
+ * Read a file of the root file system of a snapshot from the directories of its layers (the snapshotter of the host,
20
+ * readable by root): the top layer having it first, its deletions (the whiteouts of overlay) honoured, its symbolic
21
+ * links resolved in the root file system
22
+ * @param mounts
23
+ * @param file an absolute path in the root file system
24
+ * @param depth
25
+ */
26
+ export declare function readRootfsFile(mounts: SnapshotMount[], file: string, depth?: number): Promise<Buffer | undefined>;
27
+ /**
28
+ * Resolve the user of a process in a root file system (its /etc/passwd and /etc/group): user, user:group, uid, uid:gid
29
+ * @param mounts
30
+ * @param user empty for root
31
+ */
32
+ export declare function resolveUser(mounts: SnapshotMount[], user: string | undefined): Promise<ProcessUser>;
33
+ /**
34
+ * A file system read from the host: a directory (the root of a process), or the directories of the layers of a snapshot
35
+ */
36
+ export interface FileTree {
37
+ /**
38
+ * A path whose symbolic links are resolved in the file system (not in the one of the host)
39
+ * @param file an absolute path in the file system
40
+ */
41
+ resolve(file: string): Promise<string>;
42
+ /**
43
+ * The stats of a path (its link not followed) and the path of the host to read it, undefined when it does not exist
44
+ * @param file
45
+ */
46
+ lstat(file: string): Promise<{
47
+ stats: Stats;
48
+ path: string;
49
+ } | undefined>;
50
+ /**
51
+ * The names of the entries of a directory, sorted
52
+ * @param directory
53
+ */
54
+ readdir(directory: string): Promise<string[]>;
55
+ }
56
+ /**
57
+ * A file system of a directory of the host (/proc/<pid>/root: the one of a running container, its mounts with it)
58
+ */
59
+ export declare class DirectoryTree implements FileTree {
60
+ protected readonly root: string;
61
+ constructor(root: string);
62
+ resolve(file: string): Promise<string>;
63
+ lstat(file: string): Promise<{
64
+ stats: Stats;
65
+ path: string;
66
+ } | undefined>;
67
+ readdir(directory: string): Promise<string[]>;
68
+ }
69
+ /**
70
+ * A file system of the layers of a snapshot (the directories of overlay, the top one first): the deletions of the upper
71
+ * layers (their whiteouts) hide the entries of the lower ones
72
+ */
73
+ export declare class LayersTree implements FileTree {
74
+ protected readonly layers: string[];
75
+ constructor(layers: string[]);
76
+ resolve(file: string): Promise<string>;
77
+ protected stat(file: string): Promise<Stats | undefined>;
78
+ lstat(file: string): Promise<{
79
+ stats: Stats;
80
+ path: string;
81
+ } | undefined>;
82
+ readdir(directory: string): Promise<string[]>;
83
+ }
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LayersTree = exports.DirectoryTree = void 0;
7
+ exports.layerDirectories = layerDirectories;
8
+ exports.readRootfsFile = readRootfsFile;
9
+ exports.resolveUser = resolveUser;
10
+ const promises_1 = require("node:fs/promises");
11
+ const node_path_1 = __importDefault(require("node:path"));
12
+ /**
13
+ * The directories of the layers of the mounts of a snapshot, the top one first (overlay: its upper directory and its
14
+ * lower ones, bind: its source)
15
+ * @param mounts
16
+ */
17
+ function layerDirectories(mounts) {
18
+ const directories = [];
19
+ for (const mount of mounts) {
20
+ if (mount.type === 'bind' || mount.type === 'rbind') {
21
+ directories.push(mount.source);
22
+ continue;
23
+ }
24
+ if (mount.type !== 'overlay')
25
+ continue;
26
+ for (const option of mount.options) {
27
+ if (option.startsWith('upperdir='))
28
+ directories.unshift(option.slice(9));
29
+ if (option.startsWith('lowerdir='))
30
+ directories.push(...option.slice(9).split(':'));
31
+ }
32
+ }
33
+ return directories;
34
+ }
35
+ /**
36
+ * Read a file of the root file system of a snapshot from the directories of its layers (the snapshotter of the host,
37
+ * readable by root): the top layer having it first, its deletions (the whiteouts of overlay) honoured, its symbolic
38
+ * links resolved in the root file system
39
+ * @param mounts
40
+ * @param file an absolute path in the root file system
41
+ * @param depth
42
+ */
43
+ async function readRootfsFile(mounts, file, depth = 0) {
44
+ if (depth > 8)
45
+ return undefined;
46
+ const relative = node_path_1.default.posix.normalize(file).replace(/^\/+/, '');
47
+ for (const directory of layerDirectories(mounts)) {
48
+ const target = node_path_1.default.join(directory, relative);
49
+ let stats;
50
+ try {
51
+ stats = await (0, promises_1.lstat)(target);
52
+ }
53
+ catch {
54
+ continue;
55
+ }
56
+ //Deleted by this layer
57
+ if (stats.isCharacterDevice() && stats.rdev === 0)
58
+ return undefined;
59
+ if (stats.isSymbolicLink()) {
60
+ const link = await (0, promises_1.readlink)(target);
61
+ return await readRootfsFile(mounts, link.startsWith('/') ? link : node_path_1.default.posix.join(node_path_1.default.posix.dirname('/' + relative), link), depth + 1);
62
+ }
63
+ if (!stats.isFile())
64
+ return undefined;
65
+ return await (0, promises_1.readFile)(target);
66
+ }
67
+ return undefined;
68
+ }
69
+ /**
70
+ * The entries of a file of the database of the users or of the groups (name:x:id:…)
71
+ * @param content
72
+ */
73
+ function parseEntries(content) {
74
+ if (!content)
75
+ return [];
76
+ return content.toString('utf8').split('\n').filter((line) => !!line.trim() && !line.startsWith('#')).map((line) => line.split(':'));
77
+ }
78
+ /**
79
+ * Resolve the user of a process in a root file system (its /etc/passwd and /etc/group): user, user:group, uid, uid:gid
80
+ * @param mounts
81
+ * @param user empty for root
82
+ */
83
+ async function resolveUser(mounts, user) {
84
+ const [userPart, groupPart] = (user ?? '').split(':');
85
+ const passwd = parseEntries(await readRootfsFile(mounts, '/etc/passwd'));
86
+ let uid = 0;
87
+ let gid = 0;
88
+ let home = '/';
89
+ let name = 'root';
90
+ if (userPart) {
91
+ const entry = passwd.find((fields) => fields[0] === userPart) ?? (/^\d+$/.test(userPart) ? passwd.find((fields) => fields[2] === userPart) : undefined);
92
+ if (entry) {
93
+ uid = Number(entry[2]);
94
+ gid = Number(entry[3]);
95
+ home = entry[5] || '/';
96
+ name = entry[0];
97
+ }
98
+ else if (/^\d+$/.test(userPart)) {
99
+ uid = Number(userPart);
100
+ gid = Number(userPart);
101
+ name = undefined;
102
+ }
103
+ else {
104
+ throw new Error(`The user "${userPart}" is not in the /etc/passwd of the image`);
105
+ }
106
+ }
107
+ else {
108
+ const root = passwd.find((fields) => fields[2] === '0');
109
+ if (root)
110
+ home = root[5] || '/';
111
+ }
112
+ const groups = parseEntries(await readRootfsFile(mounts, '/etc/group'));
113
+ if (groupPart) {
114
+ const entry = groups.find((fields) => fields[0] === groupPart);
115
+ if (entry)
116
+ gid = Number(entry[2]);
117
+ else if (/^\d+$/.test(groupPart))
118
+ gid = Number(groupPart);
119
+ else
120
+ throw new Error(`The group "${groupPart}" is not in the /etc/group of the image`);
121
+ }
122
+ //The groups the user is a member of (supplementary)
123
+ const additionalGids = name ? groups
124
+ .filter((fields) => (fields[3] ?? '').split(',').includes(name) && Number(fields[2]) !== gid)
125
+ .map((fields) => Number(fields[2])) : [];
126
+ return { uid: uid, gid: gid, additionalGids: [...new Set(additionalGids)], home: home };
127
+ }
128
+ /**
129
+ * The resolution of the symbolic links of a path in a file tree
130
+ * @param tree
131
+ * @param file
132
+ */
133
+ async function resolveInTree(tree, file) {
134
+ const pending = node_path_1.default.posix.normalize(`/${file}`).split('/').filter(Boolean);
135
+ let current = '/';
136
+ let links = 0;
137
+ while (pending.length) {
138
+ const part = pending.shift();
139
+ if (part === '..') {
140
+ current = node_path_1.default.posix.dirname(current);
141
+ continue;
142
+ }
143
+ const candidate = node_path_1.default.posix.join(current, part);
144
+ const found = await tree.lstat(candidate);
145
+ if (found?.stats.isSymbolicLink()) {
146
+ if (++links > 40)
147
+ throw new Error(`The path ${file} has too many symbolic links`);
148
+ const target = await (0, promises_1.readlink)(found.path);
149
+ if (target.startsWith('/'))
150
+ current = '/';
151
+ pending.unshift(...target.split('/').filter(Boolean));
152
+ continue;
153
+ }
154
+ current = candidate;
155
+ }
156
+ return current;
157
+ }
158
+ /**
159
+ * A file system of a directory of the host (/proc/<pid>/root: the one of a running container, its mounts with it)
160
+ */
161
+ class DirectoryTree {
162
+ constructor(root) {
163
+ this.root = root;
164
+ }
165
+ resolve(file) {
166
+ return resolveInTree(this, file);
167
+ }
168
+ async lstat(file) {
169
+ const real = node_path_1.default.join(this.root, node_path_1.default.posix.normalize(`/${file}`));
170
+ try {
171
+ return { stats: await (0, promises_1.lstat)(real), path: real };
172
+ }
173
+ catch {
174
+ return undefined;
175
+ }
176
+ }
177
+ async readdir(directory) {
178
+ return (await (0, promises_1.readdir)(node_path_1.default.join(this.root, node_path_1.default.posix.normalize(`/${directory}`)))).sort();
179
+ }
180
+ }
181
+ exports.DirectoryTree = DirectoryTree;
182
+ /**
183
+ * Whether stats are the ones of a whiteout of overlay (a deletion of a layer)
184
+ * @param stats
185
+ */
186
+ function isWhiteout(stats) {
187
+ return stats.isCharacterDevice() && stats.rdev === 0;
188
+ }
189
+ /**
190
+ * A file system of the layers of a snapshot (the directories of overlay, the top one first): the deletions of the upper
191
+ * layers (their whiteouts) hide the entries of the lower ones
192
+ */
193
+ class LayersTree {
194
+ constructor(layers) {
195
+ this.layers = layers;
196
+ }
197
+ resolve(file) {
198
+ return resolveInTree(this, file);
199
+ }
200
+ async stat(file) {
201
+ try {
202
+ return await (0, promises_1.lstat)(file);
203
+ }
204
+ catch {
205
+ return undefined;
206
+ }
207
+ }
208
+ async lstat(file) {
209
+ const parts = node_path_1.default.posix.normalize(`/${file}`).split('/').filter(Boolean);
210
+ for (const layer of this.layers) {
211
+ //An ancestor deleted (or replaced by a file) by this layer hides the path in the lower layers
212
+ for (let length = 1; length < parts.length; length++) {
213
+ const ancestor = await this.stat(node_path_1.default.join(layer, ...parts.slice(0, length)));
214
+ if (ancestor && (isWhiteout(ancestor) || !ancestor.isDirectory()))
215
+ return undefined;
216
+ }
217
+ const real = node_path_1.default.join(layer, ...parts);
218
+ const stats = await this.stat(real);
219
+ if (!stats)
220
+ continue;
221
+ return isWhiteout(stats) ? undefined : { stats: stats, path: real };
222
+ }
223
+ return undefined;
224
+ }
225
+ async readdir(directory) {
226
+ const parts = node_path_1.default.posix.normalize(`/${directory}`).split('/').filter(Boolean);
227
+ const names = new Map();
228
+ for (const layer of this.layers) {
229
+ const stats = await this.stat(node_path_1.default.join(layer, ...parts));
230
+ if (!stats)
231
+ continue;
232
+ //Deleted or replaced by this layer: the lower layers are hidden
233
+ if (!stats.isDirectory())
234
+ break;
235
+ for (const name of await (0, promises_1.readdir)(node_path_1.default.join(layer, ...parts))) {
236
+ if (names.has(name))
237
+ continue;
238
+ const entry = await this.stat(node_path_1.default.join(layer, ...parts, name));
239
+ names.set(name, !!entry && !isWhiteout(entry));
240
+ }
241
+ }
242
+ return [...names].filter(([, present]) => present).map(([name]) => name).sort();
243
+ }
244
+ }
245
+ exports.LayersTree = LayersTree;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * A rule of a profile of seccomp (OCI)
3
+ */
4
+ export type SeccompSyscall = {
5
+ names: string[];
6
+ action: string;
7
+ errnoRet?: number;
8
+ args?: {
9
+ index: number;
10
+ value: number;
11
+ valueTwo?: number;
12
+ op: string;
13
+ }[];
14
+ };
15
+ /**
16
+ * A profile of seccomp (the linux.seccomp of the specification of OCI)
17
+ */
18
+ export type SeccompProfile = {
19
+ defaultAction: string;
20
+ defaultErrnoRet?: number;
21
+ architectures?: string[];
22
+ flags?: string[];
23
+ syscalls?: SeccompSyscall[];
24
+ };
25
+ /**
26
+ * Whether the kernel filters the system calls (the Seccomp field of the status of the processes)
27
+ * @param status the status of a process
28
+ */
29
+ export declare function seccompSupported(status?: string): boolean;
30
+ /**
31
+ * The default profile of seccomp of a container, by its capabilities (its bounding set)
32
+ * @param capabilities
33
+ * @param arch the architecture of the machine, as Node.js names it
34
+ * @param kernel the release of its kernel
35
+ */
36
+ export declare function defaultSeccompProfile(capabilities: string[], arch?: string, kernel?: string): SeccompProfile;
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.seccompSupported = seccompSupported;
4
+ exports.defaultSeccompProfile = defaultSeccompProfile;
5
+ const node_fs_1 = require("node:fs");
6
+ const node_os_1 = require("node:os");
7
+ const ALLOWED = [
8
+ 'accept', 'accept4', 'access', 'adjtimex', 'alarm', 'bind', 'brk', 'cachestat', 'capget', 'capset', 'chdir', 'chmod',
9
+ 'chown', 'chown32', 'clock_adjtime', 'clock_adjtime64', 'clock_getres', 'clock_getres_time64', 'clock_gettime',
10
+ 'clock_gettime64', 'clock_nanosleep', 'clock_nanosleep_time64', 'close', 'close_range', 'connect', 'copy_file_range',
11
+ 'creat', 'dup', 'dup2', 'dup3', 'epoll_create', 'epoll_create1', 'epoll_ctl', 'epoll_ctl_old', 'epoll_pwait',
12
+ 'epoll_pwait2', 'epoll_wait', 'epoll_wait_old', 'eventfd', 'eventfd2', 'execve', 'execveat', 'exit', 'exit_group',
13
+ 'faccessat', 'faccessat2', 'fadvise64', 'fadvise64_64', 'fallocate', 'fanotify_mark', 'fchdir', 'fchmod', 'fchmodat',
14
+ 'fchmodat2', 'fchown', 'fchown32', 'fchownat', 'fcntl', 'fcntl64', 'fdatasync', 'fgetxattr', 'flistxattr', 'flock',
15
+ 'fork', 'fremovexattr', 'fsetxattr', 'fstat', 'fstat64', 'fstatat64', 'fstatfs', 'fstatfs64', 'fsync', 'ftruncate',
16
+ 'ftruncate64', 'futex', 'futex_requeue', 'futex_time64', 'futex_wait', 'futex_waitv', 'futex_wake', 'futimesat',
17
+ 'getcpu', 'getcwd', 'getdents', 'getdents64', 'getegid', 'getegid32', 'geteuid', 'geteuid32', 'getgid', 'getgid32',
18
+ 'getgroups', 'getgroups32', 'getitimer', 'getpeername', 'getpgid', 'getpgrp', 'getpid', 'getppid', 'getpriority',
19
+ 'getrandom', 'getresgid', 'getresgid32', 'getresuid', 'getresuid32', 'getrlimit', 'get_robust_list', 'getrusage',
20
+ 'getsid', 'getsockname', 'getsockopt', 'get_thread_area', 'gettid', 'gettimeofday', 'getuid', 'getuid32', 'getxattr',
21
+ 'inotify_add_watch', 'inotify_init', 'inotify_init1', 'inotify_rm_watch', 'io_cancel', 'ioctl', 'io_destroy',
22
+ 'io_getevents', 'io_pgetevents', 'io_pgetevents_time64', 'ioprio_get', 'ioprio_set', 'io_setup', 'io_submit',
23
+ 'io_uring_enter', 'io_uring_register', 'io_uring_setup', 'ipc', 'kill', 'landlock_add_rule', 'landlock_create_ruleset',
24
+ 'landlock_restrict_self', 'lchown', 'lchown32', 'lgetxattr', 'link', 'linkat', 'listen', 'listxattr', 'llistxattr',
25
+ '_llseek', 'lremovexattr', 'lseek', 'lsetxattr', 'lstat', 'lstat64', 'madvise', 'membarrier', 'memfd_create',
26
+ 'memfd_secret', 'mincore', 'mkdir', 'mkdirat', 'mknod', 'mknodat', 'mlock', 'mlock2', 'mlockall', 'map_shadow_stack',
27
+ 'mmap', 'mmap2', 'mprotect', 'mq_getsetattr', 'mq_notify', 'mq_open', 'mq_timedreceive', 'mq_timedreceive_time64',
28
+ 'mq_timedsend', 'mq_timedsend_time64', 'mq_unlink', 'mremap', 'msgctl', 'msgget', 'msgrcv', 'msgsnd', 'msync',
29
+ 'munlock', 'munlockall', 'munmap', 'name_to_handle_at', 'nanosleep', 'newfstatat', '_newselect', 'open', 'openat',
30
+ 'openat2', 'pause', 'pidfd_open', 'pidfd_send_signal', 'pipe', 'pipe2', 'pkey_alloc', 'pkey_free', 'pkey_mprotect',
31
+ 'poll', 'ppoll', 'ppoll_time64', 'prctl', 'pread64', 'preadv', 'preadv2', 'prlimit64', 'process_mrelease', 'pselect6',
32
+ 'pselect6_time64', 'pwrite64', 'pwritev', 'pwritev2', 'read', 'readahead', 'readlink', 'readlinkat', 'readv', 'recv',
33
+ 'recvfrom', 'recvmmsg', 'recvmmsg_time64', 'recvmsg', 'remap_file_pages', 'removexattr', 'rename', 'renameat',
34
+ 'renameat2', 'restart_syscall', 'rmdir', 'rseq', 'rt_sigaction', 'rt_sigpending', 'rt_sigprocmask', 'rt_sigqueueinfo',
35
+ 'rt_sigreturn', 'rt_sigsuspend', 'rt_sigtimedwait', 'rt_sigtimedwait_time64', 'rt_tgsigqueueinfo', 'sched_getaffinity',
36
+ 'sched_getattr', 'sched_getparam', 'sched_get_priority_max', 'sched_get_priority_min', 'sched_getscheduler',
37
+ 'sched_rr_get_interval', 'sched_rr_get_interval_time64', 'sched_setaffinity', 'sched_setattr', 'sched_setparam',
38
+ 'sched_setscheduler', 'sched_yield', 'seccomp', 'select', 'semctl', 'semget', 'semop', 'semtimedop',
39
+ 'semtimedop_time64', 'send', 'sendfile', 'sendfile64', 'sendmmsg', 'sendmsg', 'sendto', 'setfsgid', 'setfsgid32',
40
+ 'setfsuid', 'setfsuid32', 'setgid', 'setgid32', 'setgroups', 'setgroups32', 'setitimer', 'setpgid', 'setpriority',
41
+ 'setregid', 'setregid32', 'setresgid', 'setresgid32', 'setresuid', 'setresuid32', 'setreuid', 'setreuid32',
42
+ 'setrlimit', 'set_robust_list', 'setsid', 'setsockopt', 'set_thread_area', 'set_tid_address', 'setuid', 'setuid32',
43
+ 'setxattr', 'shmat', 'shmctl', 'shmdt', 'shmget', 'shutdown', 'sigaltstack', 'signalfd', 'signalfd4', 'sigprocmask',
44
+ 'sigreturn', 'socketcall', 'socketpair', 'splice', 'stat', 'stat64', 'statfs', 'statfs64', 'statx', 'symlink',
45
+ 'symlinkat', 'sync', 'sync_file_range', 'syncfs', 'sysinfo', 'tee', 'tgkill', 'time', 'timer_create', 'timer_delete',
46
+ 'timer_getoverrun', 'timer_gettime', 'timer_gettime64', 'timer_settime', 'timer_settime64', 'timerfd_create',
47
+ 'timerfd_gettime', 'timerfd_gettime64', 'timerfd_settime', 'timerfd_settime64', 'times', 'tkill', 'truncate',
48
+ 'truncate64', 'ugetrlimit', 'umask', 'uname', 'unlink', 'unlinkat', 'utime', 'utimensat', 'utimensat_time64', 'utimes',
49
+ 'vfork', 'vmsplice', 'wait4', 'waitid', 'waitpid', 'write', 'writev'
50
+ ];
51
+ /**
52
+ * The architectures of the system calls filtered, by the architecture of the machine (the emulated containers run its
53
+ * system calls: their emulators are processes of the machine)
54
+ */
55
+ const ARCHITECTURES = {
56
+ x64: ['SCMP_ARCH_X86_64', 'SCMP_ARCH_X86', 'SCMP_ARCH_X32'],
57
+ arm64: ['SCMP_ARCH_ARM', 'SCMP_ARCH_AARCH64'],
58
+ mips64: ['SCMP_ARCH_MIPS', 'SCMP_ARCH_MIPS64', 'SCMP_ARCH_MIPS64N32'],
59
+ mips64el: ['SCMP_ARCH_MIPSEL', 'SCMP_ARCH_MIPSEL64', 'SCMP_ARCH_MIPSEL64N32'],
60
+ s390x: ['SCMP_ARCH_S390', 'SCMP_ARCH_S390X'],
61
+ riscv64: ['SCMP_ARCH_RISCV64']
62
+ };
63
+ /**
64
+ * The system calls of the architectures of the machine
65
+ */
66
+ const ARCHITECTURE_SYSCALLS = {
67
+ ppc64: ['sync_file_range2', 'swapcontext'],
68
+ arm: ['arm_fadvise64_64', 'arm_sync_file_range', 'sync_file_range2', 'breakpoint', 'cacheflush', 'set_tls'],
69
+ arm64: ['arm_fadvise64_64', 'arm_sync_file_range', 'sync_file_range2', 'breakpoint', 'cacheflush', 'set_tls'],
70
+ x64: ['arch_prctl', 'modify_ldt'],
71
+ ia32: ['modify_ldt'],
72
+ s390x: ['s390_pci_mmio_read', 's390_pci_mmio_write', 's390_runtime_instr'],
73
+ riscv64: ['riscv_flush_icache']
74
+ };
75
+ /**
76
+ * The system calls allowed with the capabilities
77
+ */
78
+ const CAPABILITY_SYSCALLS = {
79
+ CAP_DAC_READ_SEARCH: ['open_by_handle_at'],
80
+ CAP_SYS_ADMIN: [
81
+ 'bpf', 'clone', 'clone3', 'fanotify_init', 'fsconfig', 'fsmount', 'fsopen', 'fspick', 'lookup_dcookie', 'mount',
82
+ 'mount_setattr', 'move_mount', 'open_tree', 'perf_event_open', 'quotactl', 'quotactl_fd', 'setdomainname',
83
+ 'sethostname', 'setns', 'syslog', 'umount', 'umount2', 'unshare'
84
+ ],
85
+ CAP_SYS_BOOT: ['reboot'],
86
+ CAP_SYS_CHROOT: ['chroot'],
87
+ CAP_SYS_MODULE: ['delete_module', 'init_module', 'finit_module'],
88
+ CAP_SYS_PACCT: ['acct'],
89
+ CAP_SYS_PTRACE: ['kcmp', 'pidfd_getfd', 'process_madvise', 'process_vm_readv', 'process_vm_writev', 'ptrace'],
90
+ CAP_SYS_RAWIO: ['iopl', 'ioperm'],
91
+ CAP_SYS_TIME: ['settimeofday', 'stime', 'clock_settime', 'clock_settime64'],
92
+ CAP_SYS_TTY_CONFIG: ['vhangup'],
93
+ CAP_SYS_NICE: ['get_mempolicy', 'mbind', 'set_mempolicy', 'set_mempolicy_home_node'],
94
+ CAP_SYSLOG: ['syslog'],
95
+ CAP_BPF: ['bpf'],
96
+ CAP_PERFMON: ['perf_event_open']
97
+ };
98
+ const AF_VSOCK = 40;
99
+ const ENOSYS = 38;
100
+ /**
101
+ * The flags of clone creating namespaces (NEWNS, NEWUTS, NEWIPC, NEWUSER, NEWPID, NEWNET, NEWCGROUP)
102
+ */
103
+ const CLONE_NAMESPACES = 0x00020000 | 0x04000000 | 0x08000000 | 0x10000000 | 0x20000000 | 0x40000000 | 0x02000000;
104
+ /**
105
+ * Whether a release of Linux (6.1.0-13-arm64) is at least a version
106
+ * @param kernel
107
+ * @param major
108
+ * @param minor
109
+ */
110
+ function kernelAtLeast(kernel, major, minor) {
111
+ const match = kernel.match(/^(\d+)\.(\d+)/);
112
+ if (!match)
113
+ return false;
114
+ return Number(match[1]) > major || (Number(match[1]) === major && Number(match[2]) >= minor);
115
+ }
116
+ /**
117
+ * Whether the kernel filters the system calls (the Seccomp field of the status of the processes)
118
+ * @param status the status of a process
119
+ */
120
+ function seccompSupported(status) {
121
+ try {
122
+ return /^Seccomp:/m.test(status ?? (0, node_fs_1.readFileSync)('/proc/self/status', 'utf8'));
123
+ }
124
+ catch {
125
+ return false;
126
+ }
127
+ }
128
+ /**
129
+ * The default profile of seccomp of a container, by its capabilities (its bounding set)
130
+ * @param capabilities
131
+ * @param arch the architecture of the machine, as Node.js names it
132
+ * @param kernel the release of its kernel
133
+ */
134
+ function defaultSeccompProfile(capabilities, arch = process.arch, kernel = (0, node_os_1.release)()) {
135
+ const allow = (names, args) => ({ names: names, action: 'SCMP_ACT_ALLOW', args: args ?? [] });
136
+ const syscalls = [
137
+ allow([...ALLOWED]),
138
+ allow(['socket'], [{ index: 0, value: AF_VSOCK, op: 'SCMP_CMP_NE' }]),
139
+ ...[0x0, 0x0008, 0x20000, 0x20008, 0xffffffff].map((value) => allow(['personality'], [{ index: 0, value: value, op: 'SCMP_CMP_EQ' }]))
140
+ ];
141
+ if (kernelAtLeast(kernel, 4, 8))
142
+ syscalls.push(allow(['process_vm_readv', 'process_vm_writev', 'ptrace']));
143
+ if (ARCHITECTURE_SYSCALLS[arch])
144
+ syscalls.push(allow([...ARCHITECTURE_SYSCALLS[arch]]));
145
+ for (const capability of capabilities) {
146
+ if (CAPABILITY_SYSCALLS[capability])
147
+ syscalls.push(allow([...CAPABILITY_SYSCALLS[capability]]));
148
+ }
149
+ if (!capabilities.includes('CAP_SYS_ADMIN')) {
150
+ //clone without the flags creating namespaces (its second argument on s390x)
151
+ syscalls.push(allow(['clone'], [{ index: arch === 's390x' ? 1 : 0, value: CLONE_NAMESPACES, valueTwo: 0, op: 'SCMP_CMP_MASKED_EQ' }]));
152
+ //clone3 refused with ENOSYS: the C libraries fall back to clone
153
+ syscalls.push({ names: ['clone3'], action: 'SCMP_ACT_ERRNO', errnoRet: ENOSYS });
154
+ }
155
+ return { defaultAction: 'SCMP_ACT_ERRNO', architectures: [...ARCHITECTURES[arch] ?? []], syscalls: syscalls };
156
+ }
@@ -0,0 +1,151 @@
1
+ import type { SeccompProfile } from './Seccomp.js';
2
+ /**
3
+ * The capabilities of the containers by default (the ones of containerd, Docker and nerdctl)
4
+ */
5
+ export declare const DEFAULT_CAPABILITIES: readonly string[];
6
+ /**
7
+ * All the capabilities of Linux (the privileged containers)
8
+ */
9
+ export declare const ALL_CAPABILITIES: readonly string[];
10
+ /**
11
+ * A bind mount of a container
12
+ */
13
+ export type SpecMount = {
14
+ type?: string;
15
+ source: string;
16
+ destination: string;
17
+ options?: string[];
18
+ };
19
+ /**
20
+ * A device of the host given to a container
21
+ */
22
+ export type SpecDevice = {
23
+ path: string;
24
+ containerPath: string;
25
+ type: 'c' | 'b';
26
+ major: number;
27
+ minor: number;
28
+ fileMode?: number;
29
+ uid?: number;
30
+ gid?: number;
31
+ permissions: string;
32
+ };
33
+ /**
34
+ * A rule of the devices of the cgroup of a container: the devices of a type (a: all), of a major and a minor number
35
+ * (all when they are not given), and their access (r, w, m)
36
+ */
37
+ export type DeviceCgroupRule = {
38
+ type: 'a' | 'c' | 'b';
39
+ major?: number;
40
+ minor?: number;
41
+ access: string;
42
+ };
43
+ /**
44
+ * Parse a rule of the devices of a cgroup as Docker writes it: "c 188:* rwm", "b 8:16 r", "a *:* rwm"
45
+ * @param rule
46
+ */
47
+ export declare function parseDeviceCgroupRule(rule: string): DeviceCgroupRule;
48
+ /**
49
+ * The options of the specification of a container
50
+ */
51
+ export type SpecOptions = {
52
+ id: string;
53
+ namespace: string;
54
+ args: string[];
55
+ env: string[];
56
+ cwd: string;
57
+ uid: number;
58
+ gid: number;
59
+ additionalGids: number[];
60
+ hostname: string;
61
+ terminal?: boolean;
62
+ privileged?: boolean;
63
+ readonlyRootfs?: boolean;
64
+ capAdd?: string[];
65
+ capDrop?: string[];
66
+ mounts?: SpecMount[];
67
+ devices?: SpecDevice[];
68
+ /**
69
+ * The devices the cgroup allows besides the ones given (the ones plugged later, by a bind mount of /dev)
70
+ */
71
+ deviceCgroupRules?: DeviceCgroupRule[];
72
+ /**
73
+ * The network: the one of the host, or a namespace of its own (only its loopback, or the path of the one prepared)
74
+ */
75
+ network: {
76
+ mode: 'host';
77
+ } | {
78
+ mode: 'none';
79
+ } | {
80
+ mode: 'path';
81
+ path: string;
82
+ } | {
83
+ mode: 'cni';
84
+ };
85
+ pidHost?: boolean;
86
+ ipcHost?: boolean;
87
+ /**
88
+ * A cgroup namespace of its own (the private one of Docker and nerdctl on cgroup v2): its cgroup is the root of its
89
+ * /sys/fs/cgroup
90
+ */
91
+ cgroupNamespace?: boolean;
92
+ /**
93
+ * The path of the cgroup (/default/id with cgroupfs, system.slice:lakutata:id with systemd)
94
+ */
95
+ cgroupsPath: string;
96
+ memory?: number;
97
+ memorySwap?: number;
98
+ cpuQuota?: number;
99
+ cpuPeriod?: number;
100
+ cpuShares?: number;
101
+ cpuset?: string;
102
+ pidsLimit?: number;
103
+ oomKillDisable?: boolean;
104
+ sysctls?: Record<string, string>;
105
+ shmSize?: number;
106
+ rlimits?: {
107
+ type: string;
108
+ hard: number;
109
+ soft: number;
110
+ }[];
111
+ annotations?: Record<string, string>;
112
+ /**
113
+ * The profile of seccomp of the processes (none: unconfined)
114
+ */
115
+ seccomp?: SeccompProfile;
116
+ /**
117
+ * The hooks of the runtime (createRuntime, poststop…)
118
+ */
119
+ hooks?: Record<string, {
120
+ path: string;
121
+ args?: string[];
122
+ env?: string[];
123
+ timeout?: number;
124
+ }[]>;
125
+ };
126
+ /**
127
+ * The capabilities of a container: the ones by default (all for the privileged containers), the ones added, without
128
+ * the ones dropped (ALL drops all)
129
+ * @param options
130
+ */
131
+ export declare function containerCapabilities(options: Pick<SpecOptions, 'privileged' | 'capAdd' | 'capDrop'>): string[];
132
+ /**
133
+ * The specification of the runtime (OCI) of a container on Linux, as containerd and nerdctl generate it
134
+ * @param options
135
+ */
136
+ export declare function generateSpec(options: SpecOptions): Record<string, any>;
137
+ /**
138
+ * The specification of a process executed in a container (exec): the one of the container, its arguments, its
139
+ * environment, its directory, its user and its terminal changed
140
+ * @param spec the specification of the container
141
+ * @param options
142
+ */
143
+ export declare function execProcessSpec(spec: Record<string, any>, options: {
144
+ args: string[];
145
+ env?: string[];
146
+ cwd?: string;
147
+ uid?: number;
148
+ gid?: number;
149
+ additionalGids?: number[];
150
+ terminal?: boolean;
151
+ }): Record<string, any>;