@scrypted/server 0.113.0 → 0.114.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,12 +20,14 @@ function prep(pluginVolume, hash) {
20
20
  const zipFile = path_1.default.join(zipDir, zipFilename);
21
21
  const unzippedPath = path_1.default.join(zipDir, 'unzipped');
22
22
  const zipDirTmp = zipDir + '.tmp';
23
+ const zipDirTmp2 = zipDir + '.tmp2';
23
24
  return {
24
25
  unzippedPath,
25
26
  zipFilename,
26
27
  zipDir,
27
28
  zipFile,
28
29
  zipDirTmp,
30
+ zipDirTmp2,
29
31
  };
30
32
  }
31
33
  async function prepareZip(pluginVolume, h, getZip) {
@@ -51,15 +53,36 @@ function prepareZipSync(pluginVolume, h, getZip) {
51
53
  return extractZip(pluginVolume, h, zipBuffer);
52
54
  }
53
55
  function extractZip(pluginVolume, h, zipBuffer) {
54
- const { zipDir, zipDirTmp, zipFilename, zipFile, unzippedPath } = prep(pluginVolume, h);
56
+ const { zipDir, zipDirTmp, zipDirTmp2, zipFilename, zipFile, unzippedPath } = prep(pluginVolume, h);
57
+ // stage the plugin zip in a tmp directory, then move it to the final location.
58
+ // so if the zip extraction is corrupt, it won't be used.
55
59
  fs_1.default.rmSync(zipDirTmp, {
56
60
  recursive: true,
57
61
  force: true,
58
62
  });
59
- fs_1.default.rmSync(zipDir, {
60
- recursive: true,
61
- force: true,
62
- });
63
+ let zipDirTmp2Exists = false;
64
+ try {
65
+ fs_1.default.rmSync(zipDirTmp2, {
66
+ recursive: true,
67
+ force: true,
68
+ });
69
+ }
70
+ catch (e) {
71
+ zipDirTmp2Exists = true;
72
+ }
73
+ try {
74
+ fs_1.default.rmSync(zipDir, {
75
+ recursive: true,
76
+ force: true,
77
+ });
78
+ }
79
+ catch (e) {
80
+ if (zipDirTmp2Exists)
81
+ throw e;
82
+ // file lock from dangling plugin process may have prevented the recursive rm from completing.
83
+ // try renaming it. it will get cleaned up eventually.
84
+ fs_1.default.renameSync(zipDir, zipDirTmp2);
85
+ }
63
86
  fs_1.default.mkdirSync(zipDirTmp, {
64
87
  recursive: true,
65
88
  });
@@ -1 +1 @@
1
- {"version":3,"file":"node-worker-common.js","sourceRoot":"","sources":["../../../src/plugin/runtime/node-worker-common.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node-worker-common.js","sourceRoot":"","sources":["../../../src/plugin/runtime/node-worker-common.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrypted/server",
3
- "version": "0.113.0",
3
+ "version": "0.114.0",
4
4
  "description": "",
5
5
  "dependencies": {
6
6
  "@mapbox/node-pre-gyp": "^1.0.11",
@@ -15,6 +15,7 @@ function prep(pluginVolume: string, hash: string) {
15
15
  const zipFile = path.join(zipDir, zipFilename);
16
16
  const unzippedPath = path.join(zipDir, 'unzipped')
17
17
  const zipDirTmp = zipDir + '.tmp';
18
+ const zipDirTmp2 = zipDir + '.tmp2';
18
19
 
19
20
  return {
20
21
  unzippedPath,
@@ -22,6 +23,7 @@ function prep(pluginVolume: string, hash: string) {
22
23
  zipDir,
23
24
  zipFile,
24
25
  zipDirTmp,
26
+ zipDirTmp2,
25
27
  };
26
28
  }
27
29
 
@@ -52,16 +54,39 @@ export function prepareZipSync(pluginVolume: string, h: string, getZip: () => Bu
52
54
  }
53
55
 
54
56
  export function extractZip(pluginVolume: string, h: string, zipBuffer: Buffer) {
55
- const { zipDir, zipDirTmp, zipFilename, zipFile, unzippedPath } = prep(pluginVolume, h);
57
+ const { zipDir, zipDirTmp, zipDirTmp2, zipFilename, zipFile, unzippedPath } = prep(pluginVolume, h);
56
58
 
59
+ // stage the plugin zip in a tmp directory, then move it to the final location.
60
+ // so if the zip extraction is corrupt, it won't be used.
57
61
  fs.rmSync(zipDirTmp, {
58
62
  recursive: true,
59
63
  force: true,
60
64
  });
61
- fs.rmSync(zipDir, {
62
- recursive: true,
63
- force: true,
64
- });
65
+
66
+ let zipDirTmp2Exists = false;
67
+ try {
68
+ fs.rmSync(zipDirTmp2, {
69
+ recursive: true,
70
+ force: true,
71
+ });
72
+ }
73
+ catch (e) {
74
+ zipDirTmp2Exists = true;
75
+ }
76
+
77
+ try {
78
+ fs.rmSync(zipDir, {
79
+ recursive: true,
80
+ force: true,
81
+ });
82
+ }
83
+ catch (e) {
84
+ if (zipDirTmp2Exists)
85
+ throw e;
86
+ // file lock from dangling plugin process may have prevented the recursive rm from completing.
87
+ // try renaming it. it will get cleaned up eventually.
88
+ fs.renameSync(zipDir, zipDirTmp2);
89
+ }
65
90
  fs.mkdirSync(zipDirTmp, {
66
91
  recursive: true,
67
92
  });