@eggjs/security 4.0.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.
Files changed (183) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +569 -0
  3. package/README.zh-CN.md +441 -0
  4. package/dist/commonjs/agent.d.ts +6 -0
  5. package/dist/commonjs/agent.js +14 -0
  6. package/dist/commonjs/app/extend/agent.d.ts +5 -0
  7. package/dist/commonjs/app/extend/agent.js +11 -0
  8. package/dist/commonjs/app/extend/application.d.ts +16 -0
  9. package/dist/commonjs/app/extend/application.js +35 -0
  10. package/dist/commonjs/app/extend/context.d.ts +68 -0
  11. package/dist/commonjs/app/extend/context.js +283 -0
  12. package/dist/commonjs/app/extend/helper.d.ts +12 -0
  13. package/dist/commonjs/app/extend/helper.js +10 -0
  14. package/dist/commonjs/app/extend/response.d.ts +41 -0
  15. package/dist/commonjs/app/extend/response.js +85 -0
  16. package/dist/commonjs/app/middleware/securities.d.ts +4 -0
  17. package/dist/commonjs/app/middleware/securities.js +55 -0
  18. package/dist/commonjs/app.d.ts +6 -0
  19. package/dist/commonjs/app.js +29 -0
  20. package/dist/commonjs/config/config.default.d.ts +871 -0
  21. package/dist/commonjs/config/config.default.js +357 -0
  22. package/dist/commonjs/config/config.local.d.ts +5 -0
  23. package/dist/commonjs/config/config.local.js +10 -0
  24. package/dist/commonjs/index.d.ts +1 -0
  25. package/dist/commonjs/index.js +14 -0
  26. package/dist/commonjs/lib/extend/safe_curl.d.ts +16 -0
  27. package/dist/commonjs/lib/extend/safe_curl.js +28 -0
  28. package/dist/commonjs/lib/helper/cliFilter.d.ts +4 -0
  29. package/dist/commonjs/lib/helper/cliFilter.js +20 -0
  30. package/dist/commonjs/lib/helper/escape.d.ts +2 -0
  31. package/dist/commonjs/lib/helper/escape.js +8 -0
  32. package/dist/commonjs/lib/helper/escapeShellArg.d.ts +1 -0
  33. package/dist/commonjs/lib/helper/escapeShellArg.js +8 -0
  34. package/dist/commonjs/lib/helper/escapeShellCmd.d.ts +1 -0
  35. package/dist/commonjs/lib/helper/escapeShellCmd.js +17 -0
  36. package/dist/commonjs/lib/helper/index.d.ts +21 -0
  37. package/dist/commonjs/lib/helper/index.js +26 -0
  38. package/dist/commonjs/lib/helper/shtml.d.ts +2 -0
  39. package/dist/commonjs/lib/helper/shtml.js +76 -0
  40. package/dist/commonjs/lib/helper/sjs.d.ts +4 -0
  41. package/dist/commonjs/lib/helper/sjs.js +52 -0
  42. package/dist/commonjs/lib/helper/sjson.d.ts +1 -0
  43. package/dist/commonjs/lib/helper/sjson.js +45 -0
  44. package/dist/commonjs/lib/helper/spath.d.ts +5 -0
  45. package/dist/commonjs/lib/helper/spath.js +28 -0
  46. package/dist/commonjs/lib/helper/surl.d.ts +2 -0
  47. package/dist/commonjs/lib/helper/surl.js +33 -0
  48. package/dist/commonjs/lib/middlewares/csp.d.ts +4 -0
  49. package/dist/commonjs/lib/middlewares/csp.js +68 -0
  50. package/dist/commonjs/lib/middlewares/csrf.d.ts +4 -0
  51. package/dist/commonjs/lib/middlewares/csrf.js +42 -0
  52. package/dist/commonjs/lib/middlewares/dta.d.ts +3 -0
  53. package/dist/commonjs/lib/middlewares/dta.js +14 -0
  54. package/dist/commonjs/lib/middlewares/hsts.d.ts +4 -0
  55. package/dist/commonjs/lib/middlewares/hsts.js +23 -0
  56. package/dist/commonjs/lib/middlewares/index.d.ts +13 -0
  57. package/dist/commonjs/lib/middlewares/index.js +28 -0
  58. package/dist/commonjs/lib/middlewares/methodnoallow.d.ts +3 -0
  59. package/dist/commonjs/lib/middlewares/methodnoallow.js +22 -0
  60. package/dist/commonjs/lib/middlewares/noopen.d.ts +4 -0
  61. package/dist/commonjs/lib/middlewares/noopen.js +17 -0
  62. package/dist/commonjs/lib/middlewares/nosniff.d.ts +4 -0
  63. package/dist/commonjs/lib/middlewares/nosniff.js +30 -0
  64. package/dist/commonjs/lib/middlewares/referrerPolicy.d.ts +4 -0
  65. package/dist/commonjs/lib/middlewares/referrerPolicy.js +36 -0
  66. package/dist/commonjs/lib/middlewares/xframe.d.ts +4 -0
  67. package/dist/commonjs/lib/middlewares/xframe.js +19 -0
  68. package/dist/commonjs/lib/middlewares/xssProtection.d.ts +4 -0
  69. package/dist/commonjs/lib/middlewares/xssProtection.js +16 -0
  70. package/dist/commonjs/lib/utils.d.ts +19 -0
  71. package/dist/commonjs/lib/utils.js +206 -0
  72. package/dist/commonjs/package.json +3 -0
  73. package/dist/commonjs/types.d.ts +10 -0
  74. package/dist/commonjs/types.js +5 -0
  75. package/dist/esm/agent.d.ts +6 -0
  76. package/dist/esm/agent.js +11 -0
  77. package/dist/esm/app/extend/agent.d.ts +5 -0
  78. package/dist/esm/app/extend/agent.js +8 -0
  79. package/dist/esm/app/extend/application.d.ts +16 -0
  80. package/dist/esm/app/extend/application.js +32 -0
  81. package/dist/esm/app/extend/context.d.ts +68 -0
  82. package/dist/esm/app/extend/context.js +244 -0
  83. package/dist/esm/app/extend/helper.d.ts +12 -0
  84. package/dist/esm/app/extend/helper.js +5 -0
  85. package/dist/esm/app/extend/response.d.ts +41 -0
  86. package/dist/esm/app/extend/response.js +82 -0
  87. package/dist/esm/app/middleware/securities.d.ts +4 -0
  88. package/dist/esm/app/middleware/securities.js +50 -0
  89. package/dist/esm/app.d.ts +6 -0
  90. package/dist/esm/app.js +26 -0
  91. package/dist/esm/config/config.default.d.ts +871 -0
  92. package/dist/esm/config/config.default.js +351 -0
  93. package/dist/esm/config/config.local.d.ts +5 -0
  94. package/dist/esm/config/config.local.js +8 -0
  95. package/dist/esm/index.d.ts +1 -0
  96. package/dist/esm/index.js +12 -0
  97. package/dist/esm/lib/extend/safe_curl.d.ts +16 -0
  98. package/dist/esm/lib/extend/safe_curl.js +25 -0
  99. package/dist/esm/lib/helper/cliFilter.d.ts +4 -0
  100. package/dist/esm/lib/helper/cliFilter.js +17 -0
  101. package/dist/esm/lib/helper/escape.d.ts +2 -0
  102. package/dist/esm/lib/helper/escape.js +3 -0
  103. package/dist/esm/lib/helper/escapeShellArg.d.ts +1 -0
  104. package/dist/esm/lib/helper/escapeShellArg.js +5 -0
  105. package/dist/esm/lib/helper/escapeShellCmd.d.ts +1 -0
  106. package/dist/esm/lib/helper/escapeShellCmd.js +14 -0
  107. package/dist/esm/lib/helper/index.d.ts +21 -0
  108. package/dist/esm/lib/helper/index.js +21 -0
  109. package/dist/esm/lib/helper/shtml.d.ts +2 -0
  110. package/dist/esm/lib/helper/shtml.js +70 -0
  111. package/dist/esm/lib/helper/sjs.d.ts +4 -0
  112. package/dist/esm/lib/helper/sjs.js +49 -0
  113. package/dist/esm/lib/helper/sjson.d.ts +1 -0
  114. package/dist/esm/lib/helper/sjson.js +39 -0
  115. package/dist/esm/lib/helper/spath.d.ts +5 -0
  116. package/dist/esm/lib/helper/spath.js +25 -0
  117. package/dist/esm/lib/helper/surl.d.ts +2 -0
  118. package/dist/esm/lib/helper/surl.js +30 -0
  119. package/dist/esm/lib/middlewares/csp.d.ts +4 -0
  120. package/dist/esm/lib/middlewares/csp.js +63 -0
  121. package/dist/esm/lib/middlewares/csrf.d.ts +4 -0
  122. package/dist/esm/lib/middlewares/csrf.js +37 -0
  123. package/dist/esm/lib/middlewares/dta.d.ts +3 -0
  124. package/dist/esm/lib/middlewares/dta.js +12 -0
  125. package/dist/esm/lib/middlewares/hsts.d.ts +4 -0
  126. package/dist/esm/lib/middlewares/hsts.js +21 -0
  127. package/dist/esm/lib/middlewares/index.d.ts +13 -0
  128. package/dist/esm/lib/middlewares/index.js +23 -0
  129. package/dist/esm/lib/middlewares/methodnoallow.d.ts +3 -0
  130. package/dist/esm/lib/middlewares/methodnoallow.js +20 -0
  131. package/dist/esm/lib/middlewares/noopen.d.ts +4 -0
  132. package/dist/esm/lib/middlewares/noopen.js +15 -0
  133. package/dist/esm/lib/middlewares/nosniff.d.ts +4 -0
  134. package/dist/esm/lib/middlewares/nosniff.js +28 -0
  135. package/dist/esm/lib/middlewares/referrerPolicy.d.ts +4 -0
  136. package/dist/esm/lib/middlewares/referrerPolicy.js +34 -0
  137. package/dist/esm/lib/middlewares/xframe.d.ts +4 -0
  138. package/dist/esm/lib/middlewares/xframe.js +17 -0
  139. package/dist/esm/lib/middlewares/xssProtection.d.ts +4 -0
  140. package/dist/esm/lib/middlewares/xssProtection.js +14 -0
  141. package/dist/esm/lib/utils.d.ts +19 -0
  142. package/dist/esm/lib/utils.js +194 -0
  143. package/dist/esm/package.json +3 -0
  144. package/dist/esm/types.d.ts +10 -0
  145. package/dist/esm/types.js +3 -0
  146. package/dist/package.json +4 -0
  147. package/package.json +116 -0
  148. package/src/agent.ts +14 -0
  149. package/src/app/extend/agent.ts +14 -0
  150. package/src/app/extend/application.ts +51 -0
  151. package/src/app/extend/context.ts +282 -0
  152. package/src/app/extend/helper.ts +5 -0
  153. package/src/app/extend/response.ts +95 -0
  154. package/src/app/middleware/securities.ts +63 -0
  155. package/src/app.ts +31 -0
  156. package/src/config/config.default.ts +379 -0
  157. package/src/config/config.local.ts +9 -0
  158. package/src/index.ts +12 -0
  159. package/src/lib/extend/safe_curl.ts +35 -0
  160. package/src/lib/helper/cliFilter.ts +20 -0
  161. package/src/lib/helper/escape.ts +3 -0
  162. package/src/lib/helper/escapeShellArg.ts +4 -0
  163. package/src/lib/helper/escapeShellCmd.ts +16 -0
  164. package/src/lib/helper/index.ts +21 -0
  165. package/src/lib/helper/shtml.ts +77 -0
  166. package/src/lib/helper/sjs.ts +57 -0
  167. package/src/lib/helper/sjson.ts +35 -0
  168. package/src/lib/helper/spath.ts +27 -0
  169. package/src/lib/helper/surl.ts +35 -0
  170. package/src/lib/middlewares/csp.ts +70 -0
  171. package/src/lib/middlewares/csrf.ts +44 -0
  172. package/src/lib/middlewares/dta.ts +13 -0
  173. package/src/lib/middlewares/hsts.ts +24 -0
  174. package/src/lib/middlewares/index.ts +23 -0
  175. package/src/lib/middlewares/methodnoallow.ts +23 -0
  176. package/src/lib/middlewares/noopen.ts +18 -0
  177. package/src/lib/middlewares/nosniff.ts +32 -0
  178. package/src/lib/middlewares/referrerPolicy.ts +39 -0
  179. package/src/lib/middlewares/xframe.ts +20 -0
  180. package/src/lib/middlewares/xssProtection.ts +17 -0
  181. package/src/lib/utils.ts +208 -0
  182. package/src/types.ts +16 -0
  183. package/src/typings/index.d.ts +4 -0
@@ -0,0 +1,357 @@
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.SecurityHelperConfig = exports.SecurityConfig = exports.SecurityMiddlewareName = exports.LookupAddress = void 0;
7
+ const zod_1 = __importDefault(require("zod"));
8
+ const core_1 = require("@eggjs/core");
9
+ const CSRFSupportRequestItem = zod_1.default.object({
10
+ path: zod_1.default.instanceof(RegExp),
11
+ methods: zod_1.default.array(zod_1.default.string()),
12
+ });
13
+ exports.LookupAddress = zod_1.default.object({
14
+ address: zod_1.default.string(),
15
+ family: zod_1.default.number(),
16
+ });
17
+ const LookupAddressAndStringArray = zod_1.default.union([zod_1.default.string(), exports.LookupAddress]).array();
18
+ const SSRFCheckAddressFunction = zod_1.default.function()
19
+ .args(zod_1.default.union([zod_1.default.string(), exports.LookupAddress, LookupAddressAndStringArray]), zod_1.default.union([zod_1.default.number(), zod_1.default.string()]), zod_1.default.string())
20
+ .returns(zod_1.default.boolean());
21
+ exports.SecurityMiddlewareName = zod_1.default.enum([
22
+ 'csrf',
23
+ 'hsts',
24
+ 'methodnoallow',
25
+ 'noopen',
26
+ 'nosniff',
27
+ 'csp',
28
+ 'xssProtection',
29
+ 'xframe',
30
+ 'dta',
31
+ ]);
32
+ /**
33
+ * (ctx) => boolean
34
+ */
35
+ const IgnoreOrMatchHandler = zod_1.default.function().args(zod_1.default.instanceof(core_1.Context)).returns(zod_1.default.boolean());
36
+ const IgnoreOrMatch = zod_1.default.union([
37
+ zod_1.default.string(), zod_1.default.instanceof(RegExp), IgnoreOrMatchHandler,
38
+ ]);
39
+ const IgnoreOrMatchOption = zod_1.default.union([IgnoreOrMatch, IgnoreOrMatch.array()]).optional();
40
+ /**
41
+ * security options
42
+ * @member Config#security
43
+ */
44
+ exports.SecurityConfig = zod_1.default.object({
45
+ /**
46
+ * domain white list
47
+ *
48
+ * Default to `[]`
49
+ */
50
+ domainWhiteList: zod_1.default.array(zod_1.default.string()).default([]),
51
+ /**
52
+ * protocol white list
53
+ *
54
+ * Default to `[]`
55
+ */
56
+ protocolWhiteList: zod_1.default.array(zod_1.default.string()).default([]),
57
+ /**
58
+ * default open security middleware
59
+ *
60
+ * Default to `'csrf,hsts,methodnoallow,noopen,nosniff,csp,xssProtection,xframe,dta'`
61
+ */
62
+ defaultMiddleware: zod_1.default.union([zod_1.default.string(), zod_1.default.array(exports.SecurityMiddlewareName)])
63
+ .default(exports.SecurityMiddlewareName.options),
64
+ /**
65
+ * whether defend csrf attack
66
+ */
67
+ csrf: zod_1.default.preprocess(val => {
68
+ // transform old config, `csrf: false` to `csrf: { enable: false }`
69
+ if (typeof val === 'boolean') {
70
+ return { enable: val };
71
+ }
72
+ return val;
73
+ }, zod_1.default.object({
74
+ match: IgnoreOrMatchOption,
75
+ ignore: IgnoreOrMatchOption,
76
+ /**
77
+ * Default to `true`
78
+ */
79
+ enable: zod_1.default.boolean().default(true),
80
+ /**
81
+ * csrf token detect source type
82
+ *
83
+ * Default to `'ctoken'`
84
+ */
85
+ type: zod_1.default.enum(['ctoken', 'referer', 'all', 'any']).default('ctoken'),
86
+ /**
87
+ * ignore json request
88
+ *
89
+ * Default to `false`
90
+ *
91
+ * @deprecated is not safe now, don't use it
92
+ */
93
+ ignoreJSON: zod_1.default.boolean().default(false),
94
+ /**
95
+ * csrf token cookie name
96
+ *
97
+ * Default to `'csrfToken'`
98
+ */
99
+ cookieName: zod_1.default.union([zod_1.default.string(), zod_1.default.array(zod_1.default.string())]).default('csrfToken'),
100
+ /**
101
+ * csrf token session name
102
+ *
103
+ * Default to `'csrfToken'`
104
+ */
105
+ sessionName: zod_1.default.string().default('csrfToken'),
106
+ /**
107
+ * csrf token request header name
108
+ *
109
+ * Default to `'x-csrf-token'`
110
+ */
111
+ headerName: zod_1.default.string().default('x-csrf-token'),
112
+ /**
113
+ * csrf token request body field name
114
+ *
115
+ * Default to `'_csrf'`
116
+ */
117
+ bodyName: zod_1.default.union([zod_1.default.string(), zod_1.default.array(zod_1.default.string())]).default('_csrf'),
118
+ /**
119
+ * csrf token request query field name
120
+ *
121
+ * Default to `'_csrf'`
122
+ */
123
+ queryName: zod_1.default.union([zod_1.default.string(), zod_1.default.array(zod_1.default.string())]).default('_csrf'),
124
+ /**
125
+ * rotate csrf token when it is invalid
126
+ *
127
+ * Default to `false`
128
+ */
129
+ rotateWhenInvalid: zod_1.default.boolean().default(false),
130
+ /**
131
+ * These config works when using `'ctoken'` type
132
+ *
133
+ * Default to `false`
134
+ */
135
+ useSession: zod_1.default.boolean().default(false),
136
+ /**
137
+ * csrf token cookie domain setting,
138
+ * can be `(ctx) => string` or `string`
139
+ *
140
+ * Default to `undefined`, auto set the cookie domain in the safe way
141
+ */
142
+ cookieDomain: zod_1.default.union([
143
+ zod_1.default.string(),
144
+ zod_1.default.function()
145
+ .args(zod_1.default.instanceof(core_1.Context))
146
+ .returns(zod_1.default.string()),
147
+ ]).optional(),
148
+ /**
149
+ * csrf token check requests config
150
+ */
151
+ supportedRequests: zod_1.default.array(CSRFSupportRequestItem)
152
+ .default([
153
+ { path: /^\//, methods: ['POST', 'PATCH', 'DELETE', 'PUT', 'CONNECT'] },
154
+ ]),
155
+ /**
156
+ * referer or origin header white list.
157
+ * It only works when using `'referer'` type
158
+ *
159
+ * Default to `[]`
160
+ */
161
+ refererWhiteList: zod_1.default.array(zod_1.default.string()).default([]),
162
+ /**
163
+ * csrf token cookie options
164
+ *
165
+ * Default to `{
166
+ * signed: false,
167
+ * httpOnly: false,
168
+ * overwrite: true,
169
+ * }`
170
+ */
171
+ cookieOptions: zod_1.default.object({
172
+ signed: zod_1.default.boolean(),
173
+ httpOnly: zod_1.default.boolean(),
174
+ overwrite: zod_1.default.boolean(),
175
+ }).default({
176
+ signed: false,
177
+ httpOnly: false,
178
+ overwrite: true,
179
+ }),
180
+ }).default({})),
181
+ /**
182
+ * whether enable X-Frame-Options response header
183
+ */
184
+ xframe: zod_1.default.object({
185
+ match: IgnoreOrMatchOption,
186
+ ignore: IgnoreOrMatchOption,
187
+ /**
188
+ * Default to `true`
189
+ */
190
+ enable: zod_1.default.boolean().default(true),
191
+ /**
192
+ * X-Frame-Options value, can be `'DENY'`, `'SAMEORIGIN'`, `'ALLOW-FROM https://example.com'`
193
+ *
194
+ * Default to `'SAMEORIGIN'`
195
+ */
196
+ value: zod_1.default.string().default('SAMEORIGIN'),
197
+ }).default({}),
198
+ /**
199
+ * whether enable Strict-Transport-Security response header
200
+ */
201
+ hsts: zod_1.default.object({
202
+ match: IgnoreOrMatchOption,
203
+ ignore: IgnoreOrMatchOption,
204
+ /**
205
+ * Default to `false`
206
+ */
207
+ enable: zod_1.default.boolean().default(false),
208
+ /**
209
+ * Max age of Strict-Transport-Security in seconds
210
+ *
211
+ * Default to `365 * 24 * 3600`
212
+ */
213
+ maxAge: zod_1.default.number().default(365 * 24 * 3600),
214
+ /**
215
+ * Whether include sub domains
216
+ *
217
+ * Default to `false`
218
+ */
219
+ includeSubdomains: zod_1.default.boolean().default(false),
220
+ }).default({}),
221
+ /**
222
+ * whether enable Http Method filter
223
+ */
224
+ methodnoallow: zod_1.default.object({
225
+ match: IgnoreOrMatchOption,
226
+ ignore: IgnoreOrMatchOption,
227
+ /**
228
+ * Default to `true`
229
+ */
230
+ enable: zod_1.default.boolean().default(true),
231
+ }).default({}),
232
+ /**
233
+ * whether enable IE automatically download open
234
+ */
235
+ noopen: zod_1.default.object({
236
+ match: IgnoreOrMatchOption,
237
+ ignore: IgnoreOrMatchOption,
238
+ /**
239
+ * Default to `true`
240
+ */
241
+ enable: zod_1.default.boolean().default(true),
242
+ }).default({}),
243
+ /**
244
+ * whether enable IE8 automatically detect mime
245
+ */
246
+ nosniff: zod_1.default.object({
247
+ match: IgnoreOrMatchOption,
248
+ ignore: IgnoreOrMatchOption,
249
+ /**
250
+ * Default to `true`
251
+ */
252
+ enable: zod_1.default.boolean().default(true),
253
+ }).default({}),
254
+ /**
255
+ * whether enable IE8 XSS Filter
256
+ */
257
+ xssProtection: zod_1.default.object({
258
+ match: IgnoreOrMatchOption,
259
+ ignore: IgnoreOrMatchOption,
260
+ /**
261
+ * Default to `true`
262
+ */
263
+ enable: zod_1.default.boolean().default(true),
264
+ /**
265
+ * X-XSS-Protection response header value
266
+ *
267
+ * Default to `'1; mode=block'`
268
+ */
269
+ value: zod_1.default.coerce.string().default('1; mode=block'),
270
+ }).default({}),
271
+ /**
272
+ * content security policy config
273
+ */
274
+ csp: zod_1.default.object({
275
+ match: IgnoreOrMatchOption,
276
+ ignore: IgnoreOrMatchOption,
277
+ /**
278
+ * Default to `false`
279
+ */
280
+ enable: zod_1.default.boolean().default(false),
281
+ // https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP#csp_overview
282
+ policy: zod_1.default.record(zod_1.default.union([zod_1.default.string(), zod_1.default.array(zod_1.default.string()), zod_1.default.boolean()])).default({}),
283
+ /**
284
+ * whether enable report only mode
285
+ * Default to `undefined`
286
+ */
287
+ reportOnly: zod_1.default.boolean().optional(),
288
+ /**
289
+ * whether support IE
290
+ * Default to `undefined`
291
+ */
292
+ supportIE: zod_1.default.boolean().optional(),
293
+ }).default({}),
294
+ /**
295
+ * whether enable referrer policy
296
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy
297
+ */
298
+ referrerPolicy: zod_1.default.object({
299
+ match: IgnoreOrMatchOption,
300
+ ignore: IgnoreOrMatchOption,
301
+ /**
302
+ * Default to `false`
303
+ */
304
+ enable: zod_1.default.boolean().default(false),
305
+ /**
306
+ * referrer policy value
307
+ *
308
+ * Default to `'no-referrer-when-downgrade'`
309
+ */
310
+ value: zod_1.default.string().default('no-referrer-when-downgrade'),
311
+ }).default({}),
312
+ /**
313
+ * whether enable auto avoid directory traversal attack
314
+ */
315
+ dta: zod_1.default.object({
316
+ match: IgnoreOrMatchOption,
317
+ ignore: IgnoreOrMatchOption,
318
+ /**
319
+ * Default to `true`
320
+ */
321
+ enable: zod_1.default.boolean().default(true),
322
+ }).default({}),
323
+ ssrf: zod_1.default.object({
324
+ ipBlackList: zod_1.default.array(zod_1.default.string()).optional(),
325
+ ipExceptionList: zod_1.default.array(zod_1.default.string()).optional(),
326
+ hostnameExceptionList: zod_1.default.array(zod_1.default.string()).optional(),
327
+ checkAddress: SSRFCheckAddressFunction.optional(),
328
+ }).default({}),
329
+ match: zod_1.default.union([IgnoreOrMatch, IgnoreOrMatch.array()]).optional(),
330
+ ignore: zod_1.default.union([IgnoreOrMatch, IgnoreOrMatch.array()]).optional(),
331
+ __protocolWhiteListSet: zod_1.default.set(zod_1.default.string()).optional().readonly(),
332
+ });
333
+ const SecurityHelperOnTagAttrHandler = zod_1.default.function()
334
+ .args(zod_1.default.string(), zod_1.default.string(), zod_1.default.string(), zod_1.default.boolean())
335
+ .returns(zod_1.default.union([zod_1.default.string(), zod_1.default.void()]));
336
+ exports.SecurityHelperConfig = zod_1.default.object({
337
+ shtml: zod_1.default.object({
338
+ /**
339
+ * tag attribute white list
340
+ */
341
+ whiteList: zod_1.default.record(zod_1.default.array(zod_1.default.string())).optional(),
342
+ /**
343
+ * domain white list
344
+ * @deprecated use `config.security.domainWhiteList` instead
345
+ */
346
+ domainWhiteList: zod_1.default.array(zod_1.default.string()).optional(),
347
+ /**
348
+ * tag attribute handler
349
+ */
350
+ onTagAttr: SecurityHelperOnTagAttrHandler.optional(),
351
+ }).default({}),
352
+ });
353
+ exports.default = {
354
+ security: exports.SecurityConfig.parse({}),
355
+ helper: exports.SecurityHelperConfig.parse({}),
356
+ };
357
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhDQUFvQjtBQUNwQixzQ0FBc0M7QUFFdEMsTUFBTSxzQkFBc0IsR0FBRyxhQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3RDLElBQUksRUFBRSxhQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUMxQixPQUFPLEVBQUUsYUFBQyxDQUFDLEtBQUssQ0FBQyxhQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDN0IsQ0FBQyxDQUFDO0FBR1UsUUFBQSxhQUFhLEdBQUcsYUFBQyxDQUFDLE1BQU0sQ0FBQztJQUNwQyxPQUFPLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixNQUFNLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRTtDQUNuQixDQUFDLENBQUM7QUFHSCxNQUFNLDJCQUEyQixHQUFHLGFBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBRSxhQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUscUJBQWEsQ0FBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkYsTUFBTSx3QkFBd0IsR0FBRyxhQUFDLENBQUMsUUFBUSxFQUFFO0tBQzFDLElBQUksQ0FBQyxhQUFDLENBQUMsS0FBSyxDQUFDLENBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLHFCQUFhLEVBQUUsMkJBQTJCLENBQUUsQ0FBQyxFQUFFLGFBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBRSxhQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFFLENBQUMsRUFBRSxhQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7S0FDMUgsT0FBTyxDQUFDLGFBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBT1gsUUFBQSxzQkFBc0IsR0FBRyxhQUFDLENBQUMsSUFBSSxD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
@@ -0,0 +1,5 @@
1
+ import { SecurityConfig } from '../types.js';
2
+ declare const _default: {
3
+ security: SecurityConfig;
4
+ };
5
+ export default _default;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = {
4
+ security: {
5
+ hsts: {
6
+ enable: false,
7
+ },
8
+ },
9
+ };
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmxvY2FsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbmZpZy9jb25maWcubG9jYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxrQkFBZTtJQUNiLFFBQVEsRUFBRTtRQUNSLElBQUksRUFBRTtZQUNKLE1BQU0sRUFBRSxLQUFLO1NBQ2Q7S0FDZ0I7Q0FDcEIsQ0FBQyJ9
@@ -0,0 +1 @@
1
+ import './types.js';
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("./types.js");
4
+ // module.exports = require('./app/middleware/securities');
5
+ // module.exports.csp = require('./lib/middlewares/csp');
6
+ // module.exports.csrf = require('./lib/middlewares/csrf');
7
+ // module.exports.methodNoAllow = require('./lib/middlewares/methodnoallow');
8
+ // module.exports.noopen = require('./lib/middlewares/noopen');
9
+ // module.exports.nosniff = require('./lib/middlewares/nosniff');
10
+ // module.exports.xssProtection = require('./lib/middlewares/xssProtection');
11
+ // module.exports.xframe = require('./lib/middlewares/xframe');
12
+ // module.exports.safeRedirect = require('./lib/safe_redirect');
13
+ // module.exports.utils = require('./lib/utils');
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQkFBb0I7QUFFcEIsMkRBQTJEO0FBQzNELHlEQUF5RDtBQUN6RCwyREFBMkQ7QUFDM0QsNkVBQTZFO0FBQzdFLCtEQUErRDtBQUMvRCxpRUFBaUU7QUFDakUsNkVBQTZFO0FBQzdFLCtEQUErRDtBQUMvRCxnRUFBZ0U7QUFDaEUsaURBQWlEIn0=
@@ -0,0 +1,16 @@
1
+ import { EggCore } from '@eggjs/core';
2
+ import type { SSRFCheckAddressFunction } from '../../types.js';
3
+ type HttpClient = EggCore['HttpClient'];
4
+ type HttpClientParameters = Parameters<HttpClient['prototype']['request']>;
5
+ export type HttpClientRequestURL = HttpClientParameters[0];
6
+ export type HttpClientOptions = HttpClientParameters[1] & {
7
+ checkAddress?: SSRFCheckAddressFunction;
8
+ };
9
+ export type HttpClientResponse<T = any> = Awaited<ReturnType<HttpClient['prototype']['request']>> & {
10
+ data: T;
11
+ };
12
+ /**
13
+ * safe curl with ssrf protection
14
+ */
15
+ export declare function safeCurlForApplication<T = any>(app: EggCore, url: HttpClientRequestURL, options?: HttpClientOptions): Promise<import("urllib").HttpClientResponse<T>>;
16
+ export {};
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.safeCurlForApplication = safeCurlForApplication;
4
+ const SSRF_HTTPCLIENT = Symbol('SSRF_HTTPCLIENT');
5
+ /**
6
+ * safe curl with ssrf protection
7
+ */
8
+ async function safeCurlForApplication(app, url, options = {}) {
9
+ const ssrfConfig = app.config.security.ssrf;
10
+ if (ssrfConfig?.checkAddress) {
11
+ options.checkAddress = ssrfConfig.checkAddress;
12
+ }
13
+ else {
14
+ app.logger.warn('[@eggjs/security] please configure `config.security.ssrf` first');
15
+ }
16
+ if (ssrfConfig?.checkAddress) {
17
+ let httpClient = app[SSRF_HTTPCLIENT];
18
+ // use the new httpClient init with checkAddress
19
+ if (!httpClient) {
20
+ httpClient = app[SSRF_HTTPCLIENT] = app.createHttpClient({
21
+ checkAddress: ssrfConfig.checkAddress,
22
+ });
23
+ }
24
+ return await httpClient.request(url, options);
25
+ }
26
+ return await app.curl(url, options);
27
+ }
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZV9jdXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9leHRlbmQvc2FmZV9jdXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBY0Esd0RBb0JDO0FBL0JELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBUWxEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLHNCQUFzQixDQUFVLEdBQVksRUFBRSxHQUF5QixFQUFFLFVBQTZCLEVBQUU7SUFDNUgsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQzVDLElBQUksVUFBVSxFQUFFLFlBQVksRUFBRSxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztJQUNqRCxDQUFDO1NBQU0sQ0FBQztRQUNOLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlFQUFpRSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELElBQUksVUFBVSxFQUFFLFlBQVksRUFBRSxDQUFDO1FBQzdCLElBQUksVUFBVSxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQTRDLENBQUM7UUFDakYsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixVQUFVLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDdkQsWUFBWSxFQUFFLFVBQVUsQ0FBQyxZQUFZO2FBQ3RDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBSSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELE9BQU8sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFJLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6QyxDQUFDIn0=
@@ -0,0 +1,4 @@
1
+ /**
2
+ * remote command execution
3
+ */
4
+ export default function cliFilter(text: string): string;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /**
3
+ * remote command execution
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = cliFilter;
7
+ const BASIC_ALPHABETS = new Set('abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ.-_'.split(''));
8
+ function cliFilter(text) {
9
+ const str = '' + text;
10
+ let res = '';
11
+ let ascii;
12
+ for (let index = 0; index < str.length; index++) {
13
+ ascii = str[index];
14
+ if (BASIC_ALPHABETS.has(ascii)) {
15
+ res += ascii;
16
+ }
17
+ }
18
+ return res;
19
+ }
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpRmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9oZWxwZXIvY2xpRmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7QUFJSCw0QkFhQztBQWZELE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLG1FQUFtRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRS9HLFNBQXdCLFNBQVMsQ0FBQyxJQUFZO0lBQzVDLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDdEIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2IsSUFBSSxLQUFLLENBQUM7SUFFVixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ2hELEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsR0FBRyxJQUFJLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIn0=
@@ -0,0 +1,2 @@
1
+ import escapeHTML from 'escape-html';
2
+ export default escapeHTML;
@@ -0,0 +1,8 @@
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
+ const escape_html_1 = __importDefault(require("escape-html"));
7
+ exports.default = escape_html_1.default;
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNjYXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9oZWxwZXIvZXNjYXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOERBQXFDO0FBRXJDLGtCQUFlLHFCQUFVLENBQUMifQ==
@@ -0,0 +1 @@
1
+ export default function escapeShellArg(text: string): string;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = escapeShellArg;
4
+ function escapeShellArg(text) {
5
+ const str = '' + text;
6
+ return '\'' + str.replace(/\\/g, '\\\\').replace(/\'/g, '\\\'') + '\'';
7
+ }
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNjYXBlU2hlbGxBcmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2hlbHBlci9lc2NhcGVTaGVsbEFyZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUdDO0FBSEQsU0FBd0IsY0FBYyxDQUFDLElBQVk7SUFDakQsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztJQUN0QixPQUFPLElBQUksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6RSxDQUFDIn0=
@@ -0,0 +1 @@
1
+ export default function escapeShellCmd(text: string): string;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = escapeShellCmd;
4
+ const BASIC_ALPHABETS = new Set('#&;`|*?~<>^()[]{}$;\'",\x0A\xFF'.split(''));
5
+ function escapeShellCmd(text) {
6
+ const str = '' + text;
7
+ let res = '';
8
+ let ascii;
9
+ for (let index = 0; index < str.length; index++) {
10
+ ascii = str[index];
11
+ if (!BASIC_ALPHABETS.has(ascii)) {
12
+ res += ascii;
13
+ }
14
+ }
15
+ return res;
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNjYXBlU2hlbGxDbWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2hlbHBlci9lc2NhcGVTaGVsbENtZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGlDQWFDO0FBZkQsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsaUNBQWlDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFN0UsU0FBd0IsY0FBYyxDQUFDLElBQVk7SUFDakQsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztJQUN0QixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDYixJQUFJLEtBQUssQ0FBQztJQUVWLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDaEQsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hDLEdBQUcsSUFBSSxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyJ9
@@ -0,0 +1,21 @@
1
+ import cliFilter from './cliFilter.js';
2
+ import escape from './escape.js';
3
+ import escapeShellArg from './escapeShellArg.js';
4
+ import escapeShellCmd from './escapeShellCmd.js';
5
+ import shtml from './shtml.js';
6
+ import sjs from './sjs.js';
7
+ import sjson from './sjson.js';
8
+ import spath from './spath.js';
9
+ import surl from './surl.js';
10
+ declare const _default: {
11
+ cliFilter: typeof cliFilter;
12
+ escape: typeof escape;
13
+ escapeShellArg: typeof escapeShellArg;
14
+ escapeShellCmd: typeof escapeShellCmd;
15
+ shtml: typeof shtml;
16
+ sjs: typeof sjs;
17
+ sjson: typeof sjson;
18
+ spath: typeof spath;
19
+ surl: typeof surl;
20
+ };
21
+ export default _default;
@@ -0,0 +1,26 @@
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
+ const cliFilter_js_1 = __importDefault(require("./cliFilter.js"));
7
+ const escape_js_1 = __importDefault(require("./escape.js"));
8
+ const escapeShellArg_js_1 = __importDefault(require("./escapeShellArg.js"));
9
+ const escapeShellCmd_js_1 = __importDefault(require("./escapeShellCmd.js"));
10
+ const shtml_js_1 = __importDefault(require("./shtml.js"));
11
+ const sjs_js_1 = __importDefault(require("./sjs.js"));
12
+ const sjson_js_1 = __importDefault(require("./sjson.js"));
13
+ const spath_js_1 = __importDefault(require("./spath.js"));
14
+ const surl_js_1 = __importDefault(require("./surl.js"));
15
+ exports.default = {
16
+ cliFilter: cliFilter_js_1.default,
17
+ escape: escape_js_1.default,
18
+ escapeShellArg: escapeShellArg_js_1.default,
19
+ escapeShellCmd: escapeShellCmd_js_1.default,
20
+ shtml: shtml_js_1.default,
21
+ sjs: sjs_js_1.default,
22
+ sjson: sjson_js_1.default,
23
+ spath: spath_js_1.default,
24
+ surl: surl_js_1.default,
25
+ };
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2hlbHBlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGtFQUF1QztBQUN2Qyw0REFBaUM7QUFDakMsNEVBQWlEO0FBQ2pELDRFQUFpRDtBQUNqRCwwREFBK0I7QUFDL0Isc0RBQTJCO0FBQzNCLDBEQUErQjtBQUMvQiwwREFBK0I7QUFDL0Isd0RBQTZCO0FBRTdCLGtCQUFlO0lBQ2IsU0FBUyxFQUFULHNCQUFTO0lBQ1QsTUFBTSxFQUFOLG1CQUFNO0lBQ04sY0FBYyxFQUFkLDJCQUFjO0lBQ2QsY0FBYyxFQUFkLDJCQUFjO0lBQ2QsS0FBSyxFQUFMLGtCQUFLO0lBQ0wsR0FBRyxFQUFILGdCQUFHO0lBQ0gsS0FBSyxFQUFMLGtCQUFLO0lBQ0wsS0FBSyxFQUFMLGtCQUFLO0lBQ0wsSUFBSSxFQUFKLGlCQUFJO0NBQ0wsQ0FBQyJ9
@@ -0,0 +1,2 @@
1
+ import type { BaseContextClass } from '@eggjs/core';
2
+ export default function shtml(this: BaseContextClass, val: string): string;