@nocobase/plugin-backups 2.0.56

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 (380) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +99 -0
  3. package/client.d.ts +2 -0
  4. package/client.js +1 -0
  5. package/dist/client/components/BackupSettings.d.ts +2 -0
  6. package/dist/client/components/BackupsManagement.d.ts +2 -0
  7. package/dist/client/components/BackupsTable.d.ts +16 -0
  8. package/dist/client/components/NewBackup.d.ts +10 -0
  9. package/dist/client/components/RefreshBackups.d.ts +10 -0
  10. package/dist/client/components/RestoreFromBackup.d.ts +5 -0
  11. package/dist/client/components/RestoreFromLocal.d.ts +2 -0
  12. package/dist/client/constants.d.ts +1 -0
  13. package/dist/client/contexts.d.ts +17 -0
  14. package/dist/client/hooks/useBackupAppInfo.d.ts +8 -0
  15. package/dist/client/hooks/useCheckBackupMessage.d.ts +4 -0
  16. package/dist/client/hooks/useRestoreTask.d.ts +2 -0
  17. package/dist/client/index.d.ts +7 -0
  18. package/dist/client/index.js +10 -0
  19. package/dist/client/locale.d.ts +10 -0
  20. package/dist/externalVersion.js +32 -0
  21. package/dist/index.d.ts +2 -0
  22. package/dist/index.js +48 -0
  23. package/dist/locale/de-DE.json +52 -0
  24. package/dist/locale/en-US.json +52 -0
  25. package/dist/locale/es-ES.json +52 -0
  26. package/dist/locale/fr-FR.json +52 -0
  27. package/dist/locale/hu-HU.json +52 -0
  28. package/dist/locale/id-ID.json +52 -0
  29. package/dist/locale/it-IT.json +52 -0
  30. package/dist/locale/ja-JP.json +52 -0
  31. package/dist/locale/ko-KR.json +52 -0
  32. package/dist/locale/nl-NL.json +52 -0
  33. package/dist/locale/pt-BR.json +52 -0
  34. package/dist/locale/ru-RU.json +52 -0
  35. package/dist/locale/tr-TR.json +52 -0
  36. package/dist/locale/uk-UA.json +52 -0
  37. package/dist/locale/vi-VN.json +52 -0
  38. package/dist/locale/zh-CN.json +52 -0
  39. package/dist/locale/zh-TW.json +52 -0
  40. package/dist/node_modules/archiver/LICENSE +22 -0
  41. package/dist/node_modules/archiver/index.js +68 -0
  42. package/dist/node_modules/archiver/lib/core.js +974 -0
  43. package/dist/node_modules/archiver/lib/error.js +40 -0
  44. package/dist/node_modules/archiver/lib/plugins/json.js +110 -0
  45. package/dist/node_modules/archiver/lib/plugins/tar.js +167 -0
  46. package/dist/node_modules/archiver/lib/plugins/zip.js +120 -0
  47. package/dist/node_modules/archiver/node_modules/async/all.js +119 -0
  48. package/dist/node_modules/archiver/node_modules/async/allLimit.js +46 -0
  49. package/dist/node_modules/archiver/node_modules/async/allSeries.js +45 -0
  50. package/dist/node_modules/archiver/node_modules/async/any.js +122 -0
  51. package/dist/node_modules/archiver/node_modules/async/anyLimit.js +47 -0
  52. package/dist/node_modules/archiver/node_modules/async/anySeries.js +46 -0
  53. package/dist/node_modules/archiver/node_modules/async/apply.js +11 -0
  54. package/dist/node_modules/archiver/node_modules/async/applyEach.js +57 -0
  55. package/dist/node_modules/archiver/node_modules/async/applyEachSeries.js +37 -0
  56. package/dist/node_modules/archiver/node_modules/async/asyncify.js +118 -0
  57. package/dist/node_modules/archiver/node_modules/async/auto.js +333 -0
  58. package/dist/node_modules/archiver/node_modules/async/autoInject.js +182 -0
  59. package/dist/node_modules/archiver/node_modules/async/bower.json +17 -0
  60. package/dist/node_modules/archiver/node_modules/async/cargo.js +63 -0
  61. package/dist/node_modules/archiver/node_modules/async/cargoQueue.js +71 -0
  62. package/dist/node_modules/archiver/node_modules/async/compose.js +55 -0
  63. package/dist/node_modules/archiver/node_modules/async/concat.js +115 -0
  64. package/dist/node_modules/archiver/node_modules/async/concatLimit.js +60 -0
  65. package/dist/node_modules/archiver/node_modules/async/concatSeries.js +41 -0
  66. package/dist/node_modules/archiver/node_modules/async/constant.js +14 -0
  67. package/dist/node_modules/archiver/node_modules/async/detect.js +96 -0
  68. package/dist/node_modules/archiver/node_modules/async/detectLimit.js +48 -0
  69. package/dist/node_modules/archiver/node_modules/async/detectSeries.js +47 -0
  70. package/dist/node_modules/archiver/node_modules/async/dir.js +43 -0
  71. package/dist/node_modules/archiver/node_modules/async/dist/async.js +6062 -0
  72. package/dist/node_modules/archiver/node_modules/async/dist/async.min.js +1 -0
  73. package/dist/node_modules/archiver/node_modules/async/doDuring.js +68 -0
  74. package/dist/node_modules/archiver/node_modules/async/doUntil.js +46 -0
  75. package/dist/node_modules/archiver/node_modules/async/doWhilst.js +68 -0
  76. package/dist/node_modules/archiver/node_modules/async/during.js +78 -0
  77. package/dist/node_modules/archiver/node_modules/async/each.js +129 -0
  78. package/dist/node_modules/archiver/node_modules/async/eachLimit.js +50 -0
  79. package/dist/node_modules/archiver/node_modules/async/eachOf.js +185 -0
  80. package/dist/node_modules/archiver/node_modules/async/eachOfLimit.js +47 -0
  81. package/dist/node_modules/archiver/node_modules/async/eachOfSeries.js +39 -0
  82. package/dist/node_modules/archiver/node_modules/async/eachSeries.js +44 -0
  83. package/dist/node_modules/archiver/node_modules/async/ensureAsync.js +67 -0
  84. package/dist/node_modules/archiver/node_modules/async/every.js +119 -0
  85. package/dist/node_modules/archiver/node_modules/async/everyLimit.js +46 -0
  86. package/dist/node_modules/archiver/node_modules/async/everySeries.js +45 -0
  87. package/dist/node_modules/archiver/node_modules/async/filter.js +93 -0
  88. package/dist/node_modules/archiver/node_modules/async/filterLimit.js +45 -0
  89. package/dist/node_modules/archiver/node_modules/async/filterSeries.js +43 -0
  90. package/dist/node_modules/archiver/node_modules/async/find.js +96 -0
  91. package/dist/node_modules/archiver/node_modules/async/findLimit.js +48 -0
  92. package/dist/node_modules/archiver/node_modules/async/findSeries.js +47 -0
  93. package/dist/node_modules/archiver/node_modules/async/flatMap.js +115 -0
  94. package/dist/node_modules/archiver/node_modules/async/flatMapLimit.js +60 -0
  95. package/dist/node_modules/archiver/node_modules/async/flatMapSeries.js +41 -0
  96. package/dist/node_modules/archiver/node_modules/async/foldl.js +153 -0
  97. package/dist/node_modules/archiver/node_modules/async/foldr.js +41 -0
  98. package/dist/node_modules/archiver/node_modules/async/forEach.js +129 -0
  99. package/dist/node_modules/archiver/node_modules/async/forEachLimit.js +50 -0
  100. package/dist/node_modules/archiver/node_modules/async/forEachOf.js +185 -0
  101. package/dist/node_modules/archiver/node_modules/async/forEachOfLimit.js +47 -0
  102. package/dist/node_modules/archiver/node_modules/async/forEachOfSeries.js +39 -0
  103. package/dist/node_modules/archiver/node_modules/async/forEachSeries.js +44 -0
  104. package/dist/node_modules/archiver/node_modules/async/forever.js +68 -0
  105. package/dist/node_modules/archiver/node_modules/async/groupBy.js +108 -0
  106. package/dist/node_modules/archiver/node_modules/async/groupByLimit.js +71 -0
  107. package/dist/node_modules/archiver/node_modules/async/groupBySeries.js +36 -0
  108. package/dist/node_modules/archiver/node_modules/async/index.js +588 -0
  109. package/dist/node_modules/archiver/node_modules/async/inject.js +153 -0
  110. package/dist/node_modules/archiver/node_modules/async/internal/DoublyLinkedList.js +92 -0
  111. package/dist/node_modules/archiver/node_modules/async/internal/Heap.js +120 -0
  112. package/dist/node_modules/archiver/node_modules/async/internal/applyEach.js +29 -0
  113. package/dist/node_modules/archiver/node_modules/async/internal/asyncEachOfLimit.js +75 -0
  114. package/dist/node_modules/archiver/node_modules/async/internal/awaitify.js +28 -0
  115. package/dist/node_modules/archiver/node_modules/async/internal/breakLoop.js +10 -0
  116. package/dist/node_modules/archiver/node_modules/async/internal/consoleFunc.js +31 -0
  117. package/dist/node_modules/archiver/node_modules/async/internal/createTester.js +40 -0
  118. package/dist/node_modules/archiver/node_modules/async/internal/eachOfLimit.js +90 -0
  119. package/dist/node_modules/archiver/node_modules/async/internal/filter.js +55 -0
  120. package/dist/node_modules/archiver/node_modules/async/internal/getIterator.js +11 -0
  121. package/dist/node_modules/archiver/node_modules/async/internal/initialParams.js +14 -0
  122. package/dist/node_modules/archiver/node_modules/async/internal/isArrayLike.js +10 -0
  123. package/dist/node_modules/archiver/node_modules/async/internal/iterator.js +57 -0
  124. package/dist/node_modules/archiver/node_modules/async/internal/map.js +30 -0
  125. package/dist/node_modules/archiver/node_modules/async/internal/once.js +17 -0
  126. package/dist/node_modules/archiver/node_modules/async/internal/onlyOnce.js +15 -0
  127. package/dist/node_modules/archiver/node_modules/async/internal/parallel.js +34 -0
  128. package/dist/node_modules/archiver/node_modules/async/internal/promiseCallback.js +23 -0
  129. package/dist/node_modules/archiver/node_modules/async/internal/queue.js +294 -0
  130. package/dist/node_modules/archiver/node_modules/async/internal/range.js +14 -0
  131. package/dist/node_modules/archiver/node_modules/async/internal/reject.js +26 -0
  132. package/dist/node_modules/archiver/node_modules/async/internal/setImmediate.js +34 -0
  133. package/dist/node_modules/archiver/node_modules/async/internal/withoutIndex.js +10 -0
  134. package/dist/node_modules/archiver/node_modules/async/internal/wrapAsync.js +34 -0
  135. package/dist/node_modules/archiver/node_modules/async/log.js +41 -0
  136. package/dist/node_modules/archiver/node_modules/async/map.js +142 -0
  137. package/dist/node_modules/archiver/node_modules/async/mapLimit.js +45 -0
  138. package/dist/node_modules/archiver/node_modules/async/mapSeries.js +44 -0
  139. package/dist/node_modules/archiver/node_modules/async/mapValues.js +152 -0
  140. package/dist/node_modules/archiver/node_modules/async/mapValuesLimit.js +61 -0
  141. package/dist/node_modules/archiver/node_modules/async/mapValuesSeries.js +37 -0
  142. package/dist/node_modules/archiver/node_modules/async/memoize.js +91 -0
  143. package/dist/node_modules/archiver/node_modules/async/nextTick.js +52 -0
  144. package/dist/node_modules/archiver/node_modules/async/package.json +75 -0
  145. package/dist/node_modules/archiver/node_modules/async/parallel.js +180 -0
  146. package/dist/node_modules/archiver/node_modules/async/parallelLimit.js +41 -0
  147. package/dist/node_modules/archiver/node_modules/async/priorityQueue.js +60 -0
  148. package/dist/node_modules/archiver/node_modules/async/queue.js +24 -0
  149. package/dist/node_modules/archiver/node_modules/async/race.js +67 -0
  150. package/dist/node_modules/archiver/node_modules/async/reduce.js +153 -0
  151. package/dist/node_modules/archiver/node_modules/async/reduceRight.js +41 -0
  152. package/dist/node_modules/archiver/node_modules/async/reflect.js +78 -0
  153. package/dist/node_modules/archiver/node_modules/async/reflectAll.js +93 -0
  154. package/dist/node_modules/archiver/node_modules/async/reject.js +87 -0
  155. package/dist/node_modules/archiver/node_modules/async/rejectLimit.js +45 -0
  156. package/dist/node_modules/archiver/node_modules/async/rejectSeries.js +43 -0
  157. package/dist/node_modules/archiver/node_modules/async/retry.js +159 -0
  158. package/dist/node_modules/archiver/node_modules/async/retryable.js +77 -0
  159. package/dist/node_modules/archiver/node_modules/async/select.js +93 -0
  160. package/dist/node_modules/archiver/node_modules/async/selectLimit.js +45 -0
  161. package/dist/node_modules/archiver/node_modules/async/selectSeries.js +43 -0
  162. package/dist/node_modules/archiver/node_modules/async/seq.js +79 -0
  163. package/dist/node_modules/archiver/node_modules/async/series.js +186 -0
  164. package/dist/node_modules/archiver/node_modules/async/setImmediate.js +45 -0
  165. package/dist/node_modules/archiver/node_modules/async/some.js +122 -0
  166. package/dist/node_modules/archiver/node_modules/async/someLimit.js +47 -0
  167. package/dist/node_modules/archiver/node_modules/async/someSeries.js +46 -0
  168. package/dist/node_modules/archiver/node_modules/async/sortBy.js +190 -0
  169. package/dist/node_modules/archiver/node_modules/async/timeout.js +89 -0
  170. package/dist/node_modules/archiver/node_modules/async/times.js +50 -0
  171. package/dist/node_modules/archiver/node_modules/async/timesLimit.js +43 -0
  172. package/dist/node_modules/archiver/node_modules/async/timesSeries.js +32 -0
  173. package/dist/node_modules/archiver/node_modules/async/transform.js +173 -0
  174. package/dist/node_modules/archiver/node_modules/async/tryEach.js +78 -0
  175. package/dist/node_modules/archiver/node_modules/async/unmemoize.js +25 -0
  176. package/dist/node_modules/archiver/node_modules/async/until.js +61 -0
  177. package/dist/node_modules/archiver/node_modules/async/waterfall.js +105 -0
  178. package/dist/node_modules/archiver/node_modules/async/whilst.js +78 -0
  179. package/dist/node_modules/archiver/node_modules/async/wrapSync.js +118 -0
  180. package/dist/node_modules/archiver/node_modules/readable-stream/errors-browser.js +127 -0
  181. package/dist/node_modules/archiver/node_modules/readable-stream/errors.js +116 -0
  182. package/dist/node_modules/archiver/node_modules/readable-stream/experimentalWarning.js +17 -0
  183. package/dist/node_modules/archiver/node_modules/readable-stream/lib/_stream_duplex.js +126 -0
  184. package/dist/node_modules/archiver/node_modules/readable-stream/lib/_stream_passthrough.js +37 -0
  185. package/dist/node_modules/archiver/node_modules/readable-stream/lib/_stream_readable.js +1027 -0
  186. package/dist/node_modules/archiver/node_modules/readable-stream/lib/_stream_transform.js +190 -0
  187. package/dist/node_modules/archiver/node_modules/readable-stream/lib/_stream_writable.js +641 -0
  188. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/async_iterator.js +180 -0
  189. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/buffer_list.js +183 -0
  190. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/destroy.js +96 -0
  191. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +86 -0
  192. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/from-browser.js +3 -0
  193. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/from.js +52 -0
  194. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/pipeline.js +86 -0
  195. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/state.js +22 -0
  196. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/stream-browser.js +1 -0
  197. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/stream.js +1 -0
  198. package/dist/node_modules/archiver/node_modules/readable-stream/package.json +68 -0
  199. package/dist/node_modules/archiver/node_modules/readable-stream/readable-browser.js +9 -0
  200. package/dist/node_modules/archiver/node_modules/readable-stream/readable.js +16 -0
  201. package/dist/node_modules/archiver/node_modules/tar-stream/extract.js +257 -0
  202. package/dist/node_modules/archiver/node_modules/tar-stream/headers.js +295 -0
  203. package/dist/node_modules/archiver/node_modules/tar-stream/index.js +2 -0
  204. package/dist/node_modules/archiver/node_modules/tar-stream/pack.js +255 -0
  205. package/dist/node_modules/archiver/node_modules/tar-stream/package.json +58 -0
  206. package/dist/node_modules/archiver/node_modules/tar-stream/sandbox.js +11 -0
  207. package/dist/node_modules/archiver/package.json +1 -0
  208. package/dist/node_modules/cron-parser/.eslintrc.json +15 -0
  209. package/dist/node_modules/cron-parser/.travis.yml +7 -0
  210. package/dist/node_modules/cron-parser/LICENSE +21 -0
  211. package/dist/node_modules/cron-parser/component.json +11 -0
  212. package/dist/node_modules/cron-parser/index.d.ts +1 -0
  213. package/dist/node_modules/cron-parser/lib/date.js +252 -0
  214. package/dist/node_modules/cron-parser/lib/expression.js +983 -0
  215. package/dist/node_modules/cron-parser/lib/field_compactor.js +70 -0
  216. package/dist/node_modules/cron-parser/lib/field_stringify.js +38 -0
  217. package/dist/node_modules/cron-parser/lib/parser.js +1 -0
  218. package/dist/node_modules/cron-parser/node_modules/luxon/build/amd/luxon.js +8489 -0
  219. package/dist/node_modules/cron-parser/node_modules/luxon/build/cjs-browser/luxon.js +8487 -0
  220. package/dist/node_modules/cron-parser/node_modules/luxon/build/global/luxon.js +8490 -0
  221. package/dist/node_modules/cron-parser/node_modules/luxon/build/global/luxon.min.js +1 -0
  222. package/dist/node_modules/cron-parser/node_modules/luxon/build/node/luxon.js +7522 -0
  223. package/dist/node_modules/cron-parser/node_modules/luxon/package.json +96 -0
  224. package/dist/node_modules/cron-parser/node_modules/luxon/src/datetime.js +2169 -0
  225. package/dist/node_modules/cron-parser/node_modules/luxon/src/duration.js +880 -0
  226. package/dist/node_modules/cron-parser/node_modules/luxon/src/errors.js +61 -0
  227. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/conversions.js +157 -0
  228. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/diff.js +80 -0
  229. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/digits.js +76 -0
  230. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/english.js +233 -0
  231. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/formats.js +191 -0
  232. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/formatter.js +386 -0
  233. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/invalid.js +14 -0
  234. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/locale.js +482 -0
  235. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/regexParser.js +335 -0
  236. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/tokenParser.js +424 -0
  237. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/util.js +292 -0
  238. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/zoneUtil.js +36 -0
  239. package/dist/node_modules/cron-parser/node_modules/luxon/src/info.js +193 -0
  240. package/dist/node_modules/cron-parser/node_modules/luxon/src/interval.js +602 -0
  241. package/dist/node_modules/cron-parser/node_modules/luxon/src/luxon.js +26 -0
  242. package/dist/node_modules/cron-parser/node_modules/luxon/src/luxonFilled.js +13 -0
  243. package/dist/node_modules/cron-parser/node_modules/luxon/src/settings.js +137 -0
  244. package/dist/node_modules/cron-parser/node_modules/luxon/src/zone.js +88 -0
  245. package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/IANAZone.js +191 -0
  246. package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/fixedOffsetZone.js +94 -0
  247. package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/invalidZone.js +53 -0
  248. package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/localZone.js +63 -0
  249. package/dist/node_modules/cron-parser/package.json +1 -0
  250. package/dist/node_modules/cron-parser/test/31_of_month.js +17 -0
  251. package/dist/node_modules/cron-parser/test/bug.js +29 -0
  252. package/dist/node_modules/cron-parser/test/crondate.js +16 -0
  253. package/dist/node_modules/cron-parser/test/crontab.example +7 -0
  254. package/dist/node_modules/cron-parser/test/empty_around_comma.js +22 -0
  255. package/dist/node_modules/cron-parser/test/expression.js +1489 -0
  256. package/dist/node_modules/cron-parser/test/field_compactor.js +250 -0
  257. package/dist/node_modules/cron-parser/test/field_stringify.js +84 -0
  258. package/dist/node_modules/cron-parser/test/fields.js +32 -0
  259. package/dist/node_modules/cron-parser/test/increment_on_first_iteration.js +22 -0
  260. package/dist/node_modules/cron-parser/test/index-ts3.test-d.ts +133 -0
  261. package/dist/node_modules/cron-parser/test/index.test-d.ts +138 -0
  262. package/dist/node_modules/cron-parser/test/leap_year.js +17 -0
  263. package/dist/node_modules/cron-parser/test/parser.js +46 -0
  264. package/dist/node_modules/cron-parser/test/parser_crondate_formats.js +145 -0
  265. package/dist/node_modules/cron-parser/test/parser_day_of_month.js +169 -0
  266. package/dist/node_modules/cron-parser/test/prev_date.js +32 -0
  267. package/dist/node_modules/cron-parser/test/stringify.js +402 -0
  268. package/dist/node_modules/cron-parser/test/timezone.js +422 -0
  269. package/dist/node_modules/cron-parser/types/common.d.ts +131 -0
  270. package/dist/node_modules/cron-parser/types/index.d.ts +45 -0
  271. package/dist/node_modules/cron-parser/types/ts3/index.d.ts +28 -0
  272. package/dist/node_modules/fs-extra/LICENSE +15 -0
  273. package/dist/node_modules/fs-extra/lib/copy/copy.js +232 -0
  274. package/dist/node_modules/fs-extra/lib/copy/index.js +6 -0
  275. package/dist/node_modules/fs-extra/lib/copy-sync/copy-sync.js +166 -0
  276. package/dist/node_modules/fs-extra/lib/copy-sync/index.js +5 -0
  277. package/dist/node_modules/fs-extra/lib/empty/index.js +48 -0
  278. package/dist/node_modules/fs-extra/lib/ensure/file.js +69 -0
  279. package/dist/node_modules/fs-extra/lib/ensure/index.js +23 -0
  280. package/dist/node_modules/fs-extra/lib/ensure/link.js +61 -0
  281. package/dist/node_modules/fs-extra/lib/ensure/symlink-paths.js +99 -0
  282. package/dist/node_modules/fs-extra/lib/ensure/symlink-type.js +31 -0
  283. package/dist/node_modules/fs-extra/lib/ensure/symlink.js +63 -0
  284. package/dist/node_modules/fs-extra/lib/fs/index.js +130 -0
  285. package/dist/node_modules/fs-extra/lib/index.js +1 -0
  286. package/dist/node_modules/fs-extra/lib/json/index.js +16 -0
  287. package/dist/node_modules/fs-extra/lib/json/jsonfile.js +11 -0
  288. package/dist/node_modules/fs-extra/lib/json/output-json-sync.js +12 -0
  289. package/dist/node_modules/fs-extra/lib/json/output-json.js +12 -0
  290. package/dist/node_modules/fs-extra/lib/mkdirs/index.js +14 -0
  291. package/dist/node_modules/fs-extra/lib/mkdirs/make-dir.js +141 -0
  292. package/dist/node_modules/fs-extra/lib/move/index.js +6 -0
  293. package/dist/node_modules/fs-extra/lib/move/move.js +65 -0
  294. package/dist/node_modules/fs-extra/lib/move-sync/index.js +5 -0
  295. package/dist/node_modules/fs-extra/lib/move-sync/move-sync.js +47 -0
  296. package/dist/node_modules/fs-extra/lib/output/index.js +40 -0
  297. package/dist/node_modules/fs-extra/lib/path-exists/index.js +12 -0
  298. package/dist/node_modules/fs-extra/lib/remove/index.js +9 -0
  299. package/dist/node_modules/fs-extra/lib/remove/rimraf.js +302 -0
  300. package/dist/node_modules/fs-extra/lib/util/stat.js +139 -0
  301. package/dist/node_modules/fs-extra/lib/util/utimes.js +26 -0
  302. package/dist/node_modules/fs-extra/package.json +1 -0
  303. package/dist/node_modules/semver/LICENSE +15 -0
  304. package/dist/node_modules/semver/bin/semver.js +197 -0
  305. package/dist/node_modules/semver/classes/comparator.js +141 -0
  306. package/dist/node_modules/semver/classes/index.js +5 -0
  307. package/dist/node_modules/semver/classes/range.js +539 -0
  308. package/dist/node_modules/semver/classes/semver.js +302 -0
  309. package/dist/node_modules/semver/functions/clean.js +6 -0
  310. package/dist/node_modules/semver/functions/cmp.js +52 -0
  311. package/dist/node_modules/semver/functions/coerce.js +60 -0
  312. package/dist/node_modules/semver/functions/compare-build.js +7 -0
  313. package/dist/node_modules/semver/functions/compare-loose.js +3 -0
  314. package/dist/node_modules/semver/functions/compare.js +5 -0
  315. package/dist/node_modules/semver/functions/diff.js +65 -0
  316. package/dist/node_modules/semver/functions/eq.js +3 -0
  317. package/dist/node_modules/semver/functions/gt.js +3 -0
  318. package/dist/node_modules/semver/functions/gte.js +3 -0
  319. package/dist/node_modules/semver/functions/inc.js +19 -0
  320. package/dist/node_modules/semver/functions/lt.js +3 -0
  321. package/dist/node_modules/semver/functions/lte.js +3 -0
  322. package/dist/node_modules/semver/functions/major.js +3 -0
  323. package/dist/node_modules/semver/functions/minor.js +3 -0
  324. package/dist/node_modules/semver/functions/neq.js +3 -0
  325. package/dist/node_modules/semver/functions/parse.js +16 -0
  326. package/dist/node_modules/semver/functions/patch.js +3 -0
  327. package/dist/node_modules/semver/functions/prerelease.js +6 -0
  328. package/dist/node_modules/semver/functions/rcompare.js +3 -0
  329. package/dist/node_modules/semver/functions/rsort.js +3 -0
  330. package/dist/node_modules/semver/functions/satisfies.js +10 -0
  331. package/dist/node_modules/semver/functions/sort.js +3 -0
  332. package/dist/node_modules/semver/functions/valid.js +6 -0
  333. package/dist/node_modules/semver/index.js +1 -0
  334. package/dist/node_modules/semver/internal/constants.js +35 -0
  335. package/dist/node_modules/semver/internal/debug.js +9 -0
  336. package/dist/node_modules/semver/internal/identifiers.js +23 -0
  337. package/dist/node_modules/semver/internal/parse-options.js +15 -0
  338. package/dist/node_modules/semver/internal/re.js +217 -0
  339. package/dist/node_modules/semver/package.json +1 -0
  340. package/dist/node_modules/semver/preload.js +2 -0
  341. package/dist/node_modules/semver/range.bnf +16 -0
  342. package/dist/node_modules/semver/ranges/gtr.js +4 -0
  343. package/dist/node_modules/semver/ranges/intersects.js +7 -0
  344. package/dist/node_modules/semver/ranges/ltr.js +4 -0
  345. package/dist/node_modules/semver/ranges/max-satisfying.js +25 -0
  346. package/dist/node_modules/semver/ranges/min-satisfying.js +24 -0
  347. package/dist/node_modules/semver/ranges/min-version.js +61 -0
  348. package/dist/node_modules/semver/ranges/outside.js +80 -0
  349. package/dist/node_modules/semver/ranges/simplify.js +47 -0
  350. package/dist/node_modules/semver/ranges/subset.js +247 -0
  351. package/dist/node_modules/semver/ranges/to-comparators.js +8 -0
  352. package/dist/node_modules/semver/ranges/valid.js +11 -0
  353. package/dist/node_modules/yauzl/LICENSE +21 -0
  354. package/dist/node_modules/yauzl/fd-slicer.js +314 -0
  355. package/dist/node_modules/yauzl/index.js +1 -0
  356. package/dist/node_modules/yauzl/package.json +1 -0
  357. package/dist/server/adapters/database.d.ts +9 -0
  358. package/dist/server/adapters/database.js +486 -0
  359. package/dist/server/collections/backup-settings.d.ts +2 -0
  360. package/dist/server/collections/backup-settings.js +67 -0
  361. package/dist/server/index.d.ts +1 -0
  362. package/dist/server/index.js +42 -0
  363. package/dist/server/managers/backup.d.ts +41 -0
  364. package/dist/server/managers/backup.js +448 -0
  365. package/dist/server/managers/restore.d.ts +24 -0
  366. package/dist/server/managers/restore.js +434 -0
  367. package/dist/server/plugin.d.ts +26 -0
  368. package/dist/server/plugin.js +251 -0
  369. package/dist/server/resourcers/backup-cli.d.ts +23 -0
  370. package/dist/server/resourcers/backup-cli.js +237 -0
  371. package/dist/server/resourcers/backups.d.ts +24 -0
  372. package/dist/server/resourcers/backups.js +192 -0
  373. package/dist/server/types.d.ts +12 -0
  374. package/dist/server/types.js +24 -0
  375. package/dist/server/utils.d.ts +48 -0
  376. package/dist/server/utils.js +323 -0
  377. package/dist/swagger/index.json +313 -0
  378. package/package.json +51 -0
  379. package/server.d.ts +2 -0
  380. package/server.js +1 -0
@@ -0,0 +1,251 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __create = Object.create;
11
+ var __defProp = Object.defineProperty;
12
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
13
+ var __getOwnPropNames = Object.getOwnPropertyNames;
14
+ var __getProtoOf = Object.getPrototypeOf;
15
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
16
+ var __export = (target, all) => {
17
+ for (var name in all)
18
+ __defProp(target, name, { get: all[name], enumerable: true });
19
+ };
20
+ var __copyProps = (to, from, except, desc) => {
21
+ if (from && typeof from === "object" || typeof from === "function") {
22
+ for (let key of __getOwnPropNames(from))
23
+ if (!__hasOwnProp.call(to, key) && key !== except)
24
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
25
+ }
26
+ return to;
27
+ };
28
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
29
+ // If the importer is in node compatibility mode or this is not an ESM
30
+ // file that has been converted to a CommonJS file using a Babel-
31
+ // compatible transform (i.e. "__esModule" has not been set), then set
32
+ // "default" to the CommonJS "module.exports" for node compatibility.
33
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
34
+ mod
35
+ ));
36
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
37
+ var plugin_exports = {};
38
+ __export(plugin_exports, {
39
+ PluginBackupsServer: () => PluginBackupsServer,
40
+ default: () => plugin_default
41
+ });
42
+ module.exports = __toCommonJS(plugin_exports);
43
+ var import_lock_manager = require("@nocobase/lock-manager");
44
+ var import_server = require("@nocobase/server");
45
+ var import_cron_parser = __toESM(require("cron-parser"));
46
+ var import_lodash = __toESM(require("lodash"));
47
+ var import_path = __toESM(require("path"));
48
+ var import_backup = require("./managers/backup");
49
+ var import_restore = require("./managers/restore");
50
+ var import_backup_cli = __toESM(require("./resourcers/backup-cli"));
51
+ var import_backups = __toESM(require("./resourcers/backups"));
52
+ var import_utils = require("./utils");
53
+ const MAX_TIMEOUT_VALUE = 2147483647;
54
+ const DEFAULT_SETTINGS = {
55
+ values: {
56
+ scheduled: false,
57
+ cron: "0 0 * * *",
58
+ keep: 100,
59
+ enableFilesBackup: true,
60
+ storageId: null,
61
+ encryptionPassword: ""
62
+ }
63
+ };
64
+ class PluginBackupsServer extends import_server.Plugin {
65
+ #autoBackupTimer = null;
66
+ async afterAdd() {
67
+ }
68
+ async beforeLoad() {
69
+ this.db.on(`${import_utils.SETTINGS}.afterUpdate`, async (model) => {
70
+ this.#autoBackupTimer = await this.#createBackupTimer(model);
71
+ });
72
+ this.app.acl.registerSnippet({
73
+ name: `pm.${this.name}.settings`,
74
+ actions: [`${import_utils.SETTINGS}:get`, `${import_utils.SETTINGS}:update`]
75
+ });
76
+ this.app.acl.registerSnippet({
77
+ name: `pm.${this.name}`,
78
+ actions: ["backups:*", "backup:*"]
79
+ });
80
+ }
81
+ async load() {
82
+ await this.app.cacheManager.createCache({
83
+ name: import_utils.BACKUP_TASKS_CACHE_NAME,
84
+ store: "memory",
85
+ ttl: 24 * 60 * 60 * 1e3
86
+ });
87
+ await this.app.cacheManager.createCache({
88
+ name: import_utils.RESTORE_TASKS_CACHE_NAME,
89
+ store: "memory",
90
+ ttl: import_utils.RESTORE_TASKS_CACHE_TTL,
91
+ max: 10
92
+ });
93
+ this.app.acl.addFixedParams(import_utils.SETTINGS, "destroy", () => {
94
+ return {
95
+ "id.$ne": 1
96
+ };
97
+ });
98
+ this.app.resourceManager.define(import_backups.default);
99
+ this.app.resourceManager.define(import_backup_cli.default);
100
+ this.app.on("beforeStart", async () => {
101
+ await this.#makeSureSettingsExist();
102
+ this.#autoBackupTimer = await this.#createBackupTimer();
103
+ });
104
+ this.app.on("beforeStop", () => {
105
+ this.#cancelBackupTimer();
106
+ });
107
+ }
108
+ async install(options) {
109
+ await this.#makeSureSettingsExist();
110
+ }
111
+ async #makeSureSettingsExist() {
112
+ const hasSettings = await this.db.getRepository(import_utils.SETTINGS).findOne();
113
+ if (!hasSettings) {
114
+ await this.db.getRepository(import_utils.SETTINGS).create(DEFAULT_SETTINGS);
115
+ }
116
+ }
117
+ // Use TypeScript-level `private` (not `#`) so tests can call it via
118
+ // `(plugin as any).runAutoBackupTask()`.
119
+ async runAutoBackupTask() {
120
+ let release;
121
+ try {
122
+ const lock = await this.app.lockManager.tryAcquire(`backup:auto-task:${this.app.name}`);
123
+ release = await lock.acquire(60 * 60 * 1e3);
124
+ } catch (e) {
125
+ if (e instanceof import_lock_manager.LockAcquireError) {
126
+ this.log.info("Auto backup skipped: already running on another instance");
127
+ return;
128
+ }
129
+ throw e;
130
+ }
131
+ const settings = await this.db.getRepository(import_utils.SETTINGS).findOne();
132
+ const backupManager = new import_backup.BackupManager(this.app, null, settings);
133
+ let statusCache;
134
+ try {
135
+ statusCache = this.app.cacheManager.getCache(import_utils.BACKUP_TASKS_CACHE_NAME);
136
+ } catch {
137
+ statusCache = await this.app.cacheManager.createCache({
138
+ name: import_utils.BACKUP_TASKS_CACHE_NAME,
139
+ store: "memory",
140
+ ttl: 24 * 60 * 60 * 1e3
141
+ });
142
+ }
143
+ const backupName = await backupManager.createBackupName();
144
+ const fileName = `${backupName}.${import_utils.BACKUP_EXTENSION}`;
145
+ try {
146
+ await statusCache.set(fileName, {
147
+ inProgress: true
148
+ });
149
+ await backupManager.backup(backupName);
150
+ } catch (e) {
151
+ this.log.error(e);
152
+ } finally {
153
+ await statusCache.set(fileName, {
154
+ inProgress: false
155
+ });
156
+ await (release == null ? void 0 : release());
157
+ }
158
+ }
159
+ async #createBackupTimer(model) {
160
+ this.#cancelBackupTimer();
161
+ const backupSettings = model || await this.db.getRepository(import_utils.SETTINGS).findOne();
162
+ if (backupSettings.scheduled && backupSettings.cron) {
163
+ const interval = import_cron_parser.default.parseExpression(backupSettings.cron, { currentDate: /* @__PURE__ */ new Date() });
164
+ const next = interval.next();
165
+ const nextTime = next.getTime();
166
+ const timeout = nextTime - Date.now();
167
+ if (timeout < 0) {
168
+ return;
169
+ }
170
+ if (timeout > MAX_TIMEOUT_VALUE) {
171
+ return setTimeout(async () => {
172
+ this.#autoBackupTimer = await this.#createBackupTimer();
173
+ }, MAX_TIMEOUT_VALUE);
174
+ }
175
+ this.log.info(`Next backup scheduled at ${next}`);
176
+ return setTimeout(async () => {
177
+ await this.runAutoBackupTask();
178
+ this.#autoBackupTimer = await this.#createBackupTimer();
179
+ }, timeout);
180
+ }
181
+ return null;
182
+ }
183
+ #cancelBackupTimer() {
184
+ if (this.#autoBackupTimer) {
185
+ clearTimeout(this.#autoBackupTimer);
186
+ this.#autoBackupTimer = null;
187
+ }
188
+ }
189
+ async afterEnable() {
190
+ }
191
+ async afterDisable() {
192
+ }
193
+ async remove() {
194
+ }
195
+ async backup() {
196
+ const backupManager = new import_backup.BackupManager(this.app, null, {
197
+ scheduled: false,
198
+ cron: null,
199
+ encryptionPassword: null,
200
+ enableFilesBackup: false,
201
+ keep: 0
202
+ });
203
+ const fileBaseName = await backupManager.createBackupName();
204
+ const backupFilePath = await backupManager.backup(fileBaseName);
205
+ return backupFilePath;
206
+ }
207
+ async restore(backupFilePath, options) {
208
+ const ctx = {
209
+ app: this.app,
210
+ i18n: this.app.i18n,
211
+ logger: this.app.logger
212
+ };
213
+ const restoreManager = new import_restore.RestoreManager(ctx, this.app.db.options);
214
+ await restoreManager.restoreCLI(backupFilePath, null, true);
215
+ }
216
+ static async staticImport() {
217
+ import_server.Application.addCommand((app) => {
218
+ app.command("restore").argument("<filepath>").option("--underscored").option("--database [database]").option("--schema [schema]").action(async (filepath, opts) => {
219
+ const ctx = {
220
+ app,
221
+ i18n: app.i18n,
222
+ logger: app.logger
223
+ };
224
+ const dbOptions = {
225
+ ...app.db.options
226
+ };
227
+ if (opts.underscored) {
228
+ dbOptions.underscored = true;
229
+ }
230
+ if (opts.database) {
231
+ dbOptions.database = opts.database;
232
+ }
233
+ if (opts.schema) {
234
+ import_lodash.default.set(ctx, "request.body.dbSchema", opts.schema);
235
+ dbOptions["schema"] = opts.schema;
236
+ await app.db.sequelize.query(`CREATE SCHEMA IF NOT EXISTS "${opts.schema}"`);
237
+ }
238
+ const restoreManager = new import_restore.RestoreManager(ctx, dbOptions);
239
+ const backupFilePath = import_path.default.isAbsolute(filepath) ? filepath : import_path.default.resolve(process.cwd(), filepath);
240
+ const password = null;
241
+ const tolerentMode = true;
242
+ await restoreManager.restoreCLI(backupFilePath, password, tolerentMode);
243
+ });
244
+ });
245
+ }
246
+ }
247
+ var plugin_default = PluginBackupsServer;
248
+ // Annotate the CommonJS export names for ESM import in node:
249
+ 0 && (module.exports = {
250
+ PluginBackupsServer
251
+ });
@@ -0,0 +1,23 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ declare const _default: {
10
+ name: string;
11
+ middleware: (ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>) => Promise<any>;
12
+ actions: {
13
+ list(ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>): Promise<void>;
14
+ create(ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>): Promise<void>;
15
+ status(ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>): Promise<void>;
16
+ download(ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>): Promise<void>;
17
+ remove(ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>): Promise<void>;
18
+ restore(ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>): Promise<void>;
19
+ restoreUpload(ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>): Promise<void>;
20
+ restoreStatus(ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>): Promise<void>;
21
+ };
22
+ };
23
+ export default _default;
@@ -0,0 +1,237 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __create = Object.create;
11
+ var __defProp = Object.defineProperty;
12
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
13
+ var __getOwnPropNames = Object.getOwnPropertyNames;
14
+ var __getProtoOf = Object.getPrototypeOf;
15
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
16
+ var __export = (target, all) => {
17
+ for (var name in all)
18
+ __defProp(target, name, { get: all[name], enumerable: true });
19
+ };
20
+ var __copyProps = (to, from, except, desc) => {
21
+ if (from && typeof from === "object" || typeof from === "function") {
22
+ for (let key of __getOwnPropNames(from))
23
+ if (!__hasOwnProp.call(to, key) && key !== except)
24
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
25
+ }
26
+ return to;
27
+ };
28
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
29
+ // If the importer is in node compatibility mode or this is not an ESM
30
+ // file that has been converted to a CommonJS file using a Babel-
31
+ // compatible transform (i.e. "__esModule" has not been set), then set
32
+ // "default" to the CommonJS "module.exports" for node compatibility.
33
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
34
+ mod
35
+ ));
36
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
37
+ var backup_cli_exports = {};
38
+ __export(backup_cli_exports, {
39
+ default: () => backup_cli_default
40
+ });
41
+ module.exports = __toCommonJS(backup_cli_exports);
42
+ var import_utils = require("@nocobase/utils");
43
+ var import_crypto = __toESM(require("crypto"));
44
+ var import_promises = __toESM(require("fs/promises"));
45
+ var import_os = __toESM(require("os"));
46
+ var import_path = __toESM(require("path"));
47
+ var import_backup = require("../managers/backup");
48
+ var import_restore = require("../managers/restore");
49
+ var import_utils2 = require("../utils");
50
+ async function setRestoreTaskError(statusCache, taskId, error) {
51
+ await statusCache.set(taskId, {
52
+ inProgress: false,
53
+ message: error instanceof Error ? error.message : String(error)
54
+ });
55
+ }
56
+ function getBackupName(ctx) {
57
+ var _a;
58
+ return ctx.action.params.name || ((_a = ctx.request.body) == null ? void 0 : _a.name);
59
+ }
60
+ function getPassword(ctx) {
61
+ var _a;
62
+ return ctx.action.params.password || ((_a = ctx.request.body) == null ? void 0 : _a.password);
63
+ }
64
+ function getSkipRevertOnError(ctx) {
65
+ var _a;
66
+ return (0, import_utils2.isQsTruly)(ctx.action.params.skipRevertOnError || ((_a = ctx.request.body) == null ? void 0 : _a.skipRevertOnError));
67
+ }
68
+ function getForceSchemaRestore(ctx) {
69
+ var _a;
70
+ return (0, import_utils2.isQsTruly)(ctx.action.params.force || ((_a = ctx.request.body) == null ? void 0 : _a.force));
71
+ }
72
+ function getBackupDir(ctx) {
73
+ return (0, import_utils.storagePathJoin)("backups", ctx.app.name);
74
+ }
75
+ function getBackupFilePath(ctx, name) {
76
+ const backupDir = getBackupDir(ctx);
77
+ const filePath = import_path.default.resolve(backupDir, name);
78
+ if (import_path.default.basename(name) !== name || !name.endsWith(`.${import_utils2.BACKUP_EXTENSION}`) || !filePath.startsWith(backupDir + import_path.default.sep)) {
79
+ ctx.throw(400, "Invalid backup name");
80
+ }
81
+ return filePath;
82
+ }
83
+ var backup_cli_default = {
84
+ name: "backup",
85
+ middleware: async (ctx, next) => {
86
+ if (ctx.action.actionName !== "restoreUpload") {
87
+ return next();
88
+ }
89
+ const storage = import_utils.koaMulter.diskStorage({
90
+ destination: import_os.default.tmpdir(),
91
+ filename: function(req, file, cb) {
92
+ const randomName = Date.now().toString() + Math.random().toString().slice(2);
93
+ cb(null, randomName);
94
+ }
95
+ });
96
+ const upload = (0, import_utils.koaMulter)({ storage }).single("file");
97
+ return upload(ctx, next);
98
+ },
99
+ actions: {
100
+ async list(ctx, next) {
101
+ const backupSettings = await ctx.db.getRepository(import_utils2.SETTINGS).findOne();
102
+ const backupManager = new import_backup.BackupManager(ctx.app, ctx, backupSettings);
103
+ ctx.body = await backupManager.list();
104
+ await next();
105
+ },
106
+ async create(ctx, next) {
107
+ const backupSettings = await ctx.db.getRepository(import_utils2.SETTINGS).findOne();
108
+ const backupManager = new import_backup.BackupManager(ctx.app, ctx, backupSettings);
109
+ const statusCache = ctx.app.cacheManager.getCache(import_utils2.BACKUP_TASKS_CACHE_NAME);
110
+ const backupName = await backupManager.createBackupName();
111
+ const fileName = `${backupName}.${import_utils2.BACKUP_EXTENSION}`;
112
+ backupManager.backup(backupName).then(async () => {
113
+ await statusCache.set(fileName, {
114
+ inProgress: false
115
+ });
116
+ }).catch(async (e) => {
117
+ await statusCache.set(fileName, {
118
+ inProgress: false,
119
+ message: e.message
120
+ });
121
+ });
122
+ await statusCache.set(fileName, {
123
+ inProgress: true
124
+ });
125
+ ctx.body = {
126
+ name: fileName,
127
+ inProgress: true
128
+ };
129
+ await next();
130
+ },
131
+ async status(ctx, next) {
132
+ const name = getBackupName(ctx);
133
+ if (!name) {
134
+ ctx.throw(400, "Backup name is required");
135
+ return;
136
+ }
137
+ const statusCache = ctx.app.cacheManager.getCache(import_utils2.BACKUP_TASKS_CACHE_NAME);
138
+ const results = await statusCache.mget(name);
139
+ ctx.body = {
140
+ [name]: results[0]
141
+ };
142
+ await next();
143
+ },
144
+ async download(ctx, next) {
145
+ const name = getBackupName(ctx);
146
+ if (!name) {
147
+ ctx.throw(400, "Backup name is required");
148
+ return;
149
+ }
150
+ const backupSettings = await ctx.db.getRepository(import_utils2.SETTINGS).findOne();
151
+ const backupManager = new import_backup.BackupManager(ctx.app, ctx, backupSettings);
152
+ ctx.attachment(name);
153
+ ctx.body = await backupManager.createReadStream(name);
154
+ await next();
155
+ },
156
+ async remove(ctx, next) {
157
+ const name = getBackupName(ctx);
158
+ if (!name) {
159
+ ctx.throw(400, "Backup name is required");
160
+ return;
161
+ }
162
+ const backupSettings = await ctx.db.getRepository(import_utils2.SETTINGS).findOne();
163
+ const backupManager = new import_backup.BackupManager(ctx.app, ctx, backupSettings);
164
+ await backupManager.destroy(name);
165
+ ctx.body = {
166
+ status: "ok"
167
+ };
168
+ await next();
169
+ },
170
+ async restore(ctx, next) {
171
+ const name = getBackupName(ctx);
172
+ if (!name) {
173
+ ctx.throw(400, "Backup name is required");
174
+ return;
175
+ }
176
+ const restoreManager = new import_restore.RestoreManager(ctx);
177
+ const taskId = import_crypto.default.randomUUID();
178
+ const statusCache = ctx.app.cacheManager.getCache(import_utils2.RESTORE_TASKS_CACHE_NAME);
179
+ await statusCache.set(taskId, {
180
+ inProgress: true
181
+ });
182
+ try {
183
+ await restoreManager.restore(
184
+ getBackupFilePath(ctx, name),
185
+ taskId,
186
+ getPassword(ctx),
187
+ true,
188
+ getSkipRevertOnError(ctx),
189
+ {
190
+ forceSchemaRestore: getForceSchemaRestore(ctx)
191
+ }
192
+ );
193
+ ctx.body = {
194
+ status: "ok",
195
+ task: taskId
196
+ };
197
+ await next();
198
+ } catch (error) {
199
+ await setRestoreTaskError(statusCache, taskId, error);
200
+ throw error;
201
+ }
202
+ },
203
+ async restoreUpload(ctx, next) {
204
+ var _a;
205
+ const restoreManager = new import_restore.RestoreManager(ctx);
206
+ const taskId = import_crypto.default.randomUUID();
207
+ const statusCache = ctx.app.cacheManager.getCache(import_utils2.RESTORE_TASKS_CACHE_NAME);
208
+ const uploadedFilePath = (_a = ctx.request.file) == null ? void 0 : _a.path;
209
+ await statusCache.set(taskId, {
210
+ inProgress: true
211
+ });
212
+ try {
213
+ await restoreManager.restore(ctx.request.file.path, taskId, getPassword(ctx), true, getSkipRevertOnError(ctx), {
214
+ forceSchemaRestore: getForceSchemaRestore(ctx)
215
+ });
216
+ ctx.body = {
217
+ status: "ok",
218
+ task: taskId
219
+ };
220
+ await next();
221
+ } catch (error) {
222
+ await setRestoreTaskError(statusCache, taskId, error);
223
+ throw error;
224
+ } finally {
225
+ if (uploadedFilePath) {
226
+ await import_promises.default.unlink(uploadedFilePath).catch(() => {
227
+ });
228
+ }
229
+ }
230
+ },
231
+ async restoreStatus(ctx, next) {
232
+ const statusCache = ctx.app.cacheManager.getCache(import_utils2.RESTORE_TASKS_CACHE_NAME);
233
+ ctx.body = await statusCache.get(ctx.action.params.task);
234
+ await next();
235
+ }
236
+ }
237
+ };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ declare const _default: {
10
+ name: string;
11
+ middleware: (ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>) => Promise<any>;
12
+ actions: {
13
+ list(ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>): Promise<void>;
14
+ upload(ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>): Promise<void>;
15
+ create(ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>): Promise<void>;
16
+ taskStatus(ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>): Promise<void>;
17
+ download(ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>): Promise<void>;
18
+ destroy(ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>): Promise<void>;
19
+ restore(ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>): Promise<void>;
20
+ restoreStatus(ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>): Promise<void>;
21
+ appInfo(ctx: import("@nocobase/resourcer").ResourcerContext, next: () => Promise<any>): Promise<void>;
22
+ };
23
+ };
24
+ export default _default;