@blocklet/uploader-server 0.1.67 → 0.1.68

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.
@@ -16,7 +16,7 @@ let resourceTypes = [
16
16
  type: ImgResourceType,
17
17
  did: ImageBinDid,
18
18
  folder: ""
19
- // default is root, can be set to 'public' or 'assets' or any other folder
19
+ // can be string or string[]
20
20
  }
21
21
  ];
22
22
  let canUseResources = [];
@@ -36,9 +36,15 @@ export const mappingResource = async () => {
36
36
  if (!existsSync(originDir) || !resourceType) {
37
37
  return false;
38
38
  }
39
- const { folder = "" } = resourceType;
40
- return { originDir, dir: join(originDir, folder || ""), blockletInfo: resource };
41
- }).filter(Boolean);
39
+ const folders = Array.isArray(resourceType.folder) ? resourceType.folder : [resourceType.folder || ""];
40
+ return folders.map((folder) => ({
41
+ originDir,
42
+ dir: join(originDir, folder),
43
+ blockletInfo: resource,
44
+ whitelist: resourceType.whitelist,
45
+ blacklist: resourceType.blacklist
46
+ }));
47
+ }).filter(Boolean).flat();
42
48
  logger.info(
43
49
  "Mapping can use resources count: ",
44
50
  canUseResources.length
@@ -80,13 +86,24 @@ export const initStaticResourceMiddleware = ({
80
86
  mappingResource();
81
87
  return (req, res, next) => {
82
88
  const urlPath = new URL(`http://localhost${req.url}`).pathname;
83
- const matchCanUseResourceItem = canUseResources.find((item) => existsSync(join(item.dir, urlPath)));
89
+ const matchCanUseResourceItem = canUseResources.find((item) => {
90
+ if (!existsSync(join(item.dir, urlPath))) {
91
+ return false;
92
+ }
93
+ const { whitelist, blacklist } = item;
94
+ if (whitelist?.length && !whitelist.some((ext) => urlPath.endsWith(ext))) {
95
+ return false;
96
+ }
97
+ if (blacklist?.length && blacklist.some((ext) => urlPath.endsWith(ext))) {
98
+ return false;
99
+ }
100
+ return true;
101
+ });
84
102
  if (matchCanUseResourceItem) {
85
103
  express.static(matchCanUseResourceItem.dir, {
86
104
  maxAge: "365d",
87
105
  immutable: true,
88
106
  index: false,
89
- // fallthrough: false,
90
107
  ...options
91
108
  })(req, res, next);
92
109
  } else {
@@ -113,7 +130,7 @@ export const initProxyToMediaKitUploadsMiddleware = ({ options, express } = {})
113
130
  },
114
131
  (err) => {
115
132
  console.error("Proxy error:", err);
116
- res.status(502).end();
133
+ next();
117
134
  }
118
135
  );
119
136
  };
@@ -30,7 +30,7 @@ let resourceTypes = [{
30
30
  type: ImgResourceType,
31
31
  did: ImageBinDid,
32
32
  folder: ""
33
- // default is root, can be set to 'public' or 'assets' or any other folder
33
+ // can be string or string[]
34
34
  }];
35
35
  let canUseResources = [];
36
36
  const mappingResource = async () => {
@@ -51,15 +51,15 @@ const mappingResource = async () => {
51
51
  if (!existsSync(originDir) || !resourceType) {
52
52
  return false;
53
53
  }
54
- const {
55
- folder = ""
56
- } = resourceType;
57
- return {
54
+ const folders = Array.isArray(resourceType.folder) ? resourceType.folder : [resourceType.folder || ""];
55
+ return folders.map(folder => ({
58
56
  originDir,
59
- dir: join(originDir, folder || ""),
60
- blockletInfo: resource
61
- };
62
- }).filter(Boolean);
57
+ dir: join(originDir, folder),
58
+ blockletInfo: resource,
59
+ whitelist: resourceType.whitelist,
60
+ blacklist: resourceType.blacklist
61
+ }));
62
+ }).filter(Boolean).flat();
63
63
  logger.info("Mapping can use resources count: ", canUseResources.length
64
64
  // canUseResources
65
65
  );
@@ -103,13 +103,27 @@ const initStaticResourceMiddleware = ({
103
103
  mappingResource();
104
104
  return (req, res, next) => {
105
105
  const urlPath = new URL(`http://localhost${req.url}`).pathname;
106
- const matchCanUseResourceItem = canUseResources.find(item => existsSync(join(item.dir, urlPath)));
106
+ const matchCanUseResourceItem = canUseResources.find(item => {
107
+ if (!existsSync(join(item.dir, urlPath))) {
108
+ return false;
109
+ }
110
+ const {
111
+ whitelist,
112
+ blacklist
113
+ } = item;
114
+ if (whitelist?.length && !whitelist.some(ext => urlPath.endsWith(ext))) {
115
+ return false;
116
+ }
117
+ if (blacklist?.length && blacklist.some(ext => urlPath.endsWith(ext))) {
118
+ return false;
119
+ }
120
+ return true;
121
+ });
107
122
  if (matchCanUseResourceItem) {
108
123
  express.static(matchCanUseResourceItem.dir, {
109
124
  maxAge: "365d",
110
125
  immutable: true,
111
126
  index: false,
112
- // fallthrough: false,
113
127
  ...options
114
128
  })(req, res, next);
115
129
  } else {
@@ -137,7 +151,7 @@ const initProxyToMediaKitUploadsMiddleware = ({
137
151
  ...options
138
152
  }, err => {
139
153
  console.error("Proxy error:", err);
140
- res.status(502).end();
154
+ next();
141
155
  });
142
156
  };
143
157
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blocklet/uploader-server",
3
- "version": "0.1.67",
3
+ "version": "0.1.68",
4
4
  "description": "blocklet upload server",
5
5
  "publishConfig": {
6
6
  "access": "public"