@devvit/ui-renderer 0.11.0-next-2024-10-03-38b7c67ab.0 → 0.11.0-next-2024-10-07-a281378ea.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.
- package/blocks/templates/imageUtil.d.ts +20 -0
- package/blocks/templates/imageUtil.d.ts.map +1 -0
- package/blocks/templates/imageUtil.js +91 -0
- package/blocks/templates/imageUtil.js.map +1 -0
- package/blocks/templates/imageUtil.test.d.ts.map +1 -0
- package/blocks/templates/imageUtil.test.js.map +1 -0
- package/blocks/templates/renderImageBlock.d.ts.map +1 -1
- package/blocks/templates/renderImageBlock.js +1 -1
- package/blocks/templates/renderImageBlock.js.map +1 -1
- package/devvit-custom-post-meta.min.json +11 -11
- package/devvit-custom-post.min.js.map +3 -3
- package/devvit-surface-meta.min.json +11 -11
- package/devvit-surface.min.js.map +3 -3
- package/package.json +9 -9
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const REDD_IT = "redd.it";
|
|
2
|
+
export declare const REDDIT_STATIC = "redditstatic.com";
|
|
3
|
+
export declare const REDDIT_MEDIA = "redditmedia.com";
|
|
4
|
+
export declare const SNOO_DEV = "snoo.dev";
|
|
5
|
+
export declare const VerifiedPublicImageHosts: readonly string[];
|
|
6
|
+
export declare const VerifiedImageHosts: readonly string[];
|
|
7
|
+
/**
|
|
8
|
+
* Validates whether an image URL is allowed to be displayed
|
|
9
|
+
* @param imageUrl
|
|
10
|
+
* @returns true if the URL is allowed
|
|
11
|
+
*/
|
|
12
|
+
export declare function isValidImageURL(imageUrl: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Performs any sanitization needed on a given image URL
|
|
15
|
+
* Currently only processes SVG data URIs
|
|
16
|
+
* @param imageUrl
|
|
17
|
+
* @returns the sanitized URL
|
|
18
|
+
*/
|
|
19
|
+
export declare function sanitizeImageURL(imageUrl: string): string | undefined;
|
|
20
|
+
//# sourceMappingURL=imageUtil.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageUtil.d.ts","sourceRoot":"","sources":["../../../library/src/blocks/templates/imageUtil.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,YAAY,CAAC;AACjC,eAAO,MAAM,aAAa,qBAAqB,CAAC;AAChD,eAAO,MAAM,YAAY,oBAAoB,CAAC;AAC9C,eAAO,MAAM,QAAQ,aAAa,CAAC;AAEnC,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAA2C,CAAC;AAClG,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAK/C,CAAC;AAoBF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAgBzD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAuCrE"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// Only the following domains are approved: redd.it, redditstatic.com, redditmedia.com, or snoo.dev
|
|
2
|
+
import { sanitizeSvg } from '@devvit/shared-types/sanitizeSvg.js';
|
|
3
|
+
export const REDD_IT = 'redd.it';
|
|
4
|
+
export const REDDIT_STATIC = 'redditstatic.com';
|
|
5
|
+
export const REDDIT_MEDIA = 'redditmedia.com';
|
|
6
|
+
export const SNOO_DEV = 'snoo.dev';
|
|
7
|
+
export const VerifiedPublicImageHosts = [REDD_IT, REDDIT_STATIC, REDDIT_MEDIA];
|
|
8
|
+
export const VerifiedImageHosts = [
|
|
9
|
+
SNOO_DEV,
|
|
10
|
+
REDD_IT,
|
|
11
|
+
REDDIT_STATIC,
|
|
12
|
+
REDDIT_MEDIA,
|
|
13
|
+
];
|
|
14
|
+
const MIME_SVG_XML = 'image/svg+xml';
|
|
15
|
+
const ALLOWED_DATA_MIMETYPES = [MIME_SVG_XML];
|
|
16
|
+
function validateDataUrl(url) {
|
|
17
|
+
// mediaType is everything before the data section
|
|
18
|
+
const mediaType = url.pathname.split(',')[0];
|
|
19
|
+
// chunks are separated by semicolons, with the first being the mimetype
|
|
20
|
+
const mimetype = mediaType.split(';')[0];
|
|
21
|
+
return ALLOWED_DATA_MIMETYPES.includes(mimetype);
|
|
22
|
+
}
|
|
23
|
+
function validateHttpUrl(url) {
|
|
24
|
+
// Get just the domain name from the hostname
|
|
25
|
+
const domain = url.hostname.split('.').slice(-2).join('.');
|
|
26
|
+
return VerifiedImageHosts.includes(domain);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Validates whether an image URL is allowed to be displayed
|
|
30
|
+
* @param imageUrl
|
|
31
|
+
* @returns true if the URL is allowed
|
|
32
|
+
*/
|
|
33
|
+
export function isValidImageURL(imageUrl) {
|
|
34
|
+
try {
|
|
35
|
+
const url = new URL(imageUrl);
|
|
36
|
+
const protocol = url.protocol.substring(0, 4);
|
|
37
|
+
switch (protocol) {
|
|
38
|
+
case 'blob':
|
|
39
|
+
return true;
|
|
40
|
+
case 'data':
|
|
41
|
+
return validateDataUrl(url);
|
|
42
|
+
case 'http':
|
|
43
|
+
return validateHttpUrl(url);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (_) {
|
|
47
|
+
// invalid imageUrl
|
|
48
|
+
}
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Performs any sanitization needed on a given image URL
|
|
53
|
+
* Currently only processes SVG data URIs
|
|
54
|
+
* @param imageUrl
|
|
55
|
+
* @returns the sanitized URL
|
|
56
|
+
*/
|
|
57
|
+
export function sanitizeImageURL(imageUrl) {
|
|
58
|
+
try {
|
|
59
|
+
// only parse up until the data segment so we don't waste time parsing it here
|
|
60
|
+
const dataSeparator = imageUrl.indexOf(',');
|
|
61
|
+
const url = new URL(dataSeparator > 0 ? imageUrl.slice(0, dataSeparator) : imageUrl);
|
|
62
|
+
// nothing to sanitize
|
|
63
|
+
if (url.protocol.startsWith('http') || url.protocol.startsWith('blob')) {
|
|
64
|
+
return encodeURI(imageUrl);
|
|
65
|
+
}
|
|
66
|
+
const mediaType = url.pathname;
|
|
67
|
+
const [mimetype] = mediaType.split(';');
|
|
68
|
+
// can't sanitize binary image data
|
|
69
|
+
if (mimetype !== MIME_SVG_XML) {
|
|
70
|
+
return imageUrl;
|
|
71
|
+
}
|
|
72
|
+
const base64 = mediaType.split(';').at(-1) === 'base64';
|
|
73
|
+
const data = imageUrl.slice(dataSeparator + 1);
|
|
74
|
+
const svgData = base64 ? atob(data) : data;
|
|
75
|
+
// extract SVG
|
|
76
|
+
const svg = decodeURIComponent(svgData);
|
|
77
|
+
// sanitize
|
|
78
|
+
const safeSvg = sanitizeSvg(svg);
|
|
79
|
+
if (safeSvg === undefined) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
// URI encode if we're not base64 encoding to ensure the img tag doesn't choke on `#` and `?` characters
|
|
83
|
+
const safeData = base64 ? btoa(safeSvg) : encodeURIComponent(safeSvg);
|
|
84
|
+
// eslint-disable-next-line @reddit/i18n-shreddit/no-unwrapped-strings
|
|
85
|
+
return `data:${mediaType},${safeData}`;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// failed to parse URL
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=imageUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageUtil.js","sourceRoot":"","sources":["../../../library/src/blocks/templates/imageUtil.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageUtil.test.d.ts","sourceRoot":"","sources":["../../../library/src/blocks/templates/imageUtil.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageUtil.test.js","sourceRoot":"","sources":["../../../library/src/blocks/templates/imageUtil.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderImageBlock.d.ts","sourceRoot":"","sources":["../../../library/src/blocks/templates/renderImageBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"renderImageBlock.d.ts","sourceRoot":"","sources":["../../../library/src/blocks/templates/renderImageBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAY5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAK9C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,GAAG,YAAY,CAgE/E"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { isValidImageURL, sanitizeImageURL, VerifiedPublicImageHosts, } from '@devvit/shared-types/imageUtil.js';
|
|
2
1
|
import { getTemplateRenderingStrategy } from '@reddit/faceplate-ui/faceplateUIConfig.js';
|
|
3
2
|
import { nothing } from 'lit';
|
|
4
3
|
import { defaultClasses, defaultStyles, imageClasses, imageStyle, onClickAction, } from '../attributes.js';
|
|
4
|
+
import { isValidImageURL, sanitizeImageURL, VerifiedPublicImageHosts } from './imageUtil.js';
|
|
5
5
|
import { classMap, getSizes } from './util.js';
|
|
6
6
|
const FALLBACK_IMG_URL = 'https://i.redd.it/p1vmc5ulmpib1.png';
|
|
7
7
|
export function renderImageBlock(block, ctx) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderImageBlock.js","sourceRoot":"","sources":["../../../library/src/blocks/templates/renderImageBlock.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"renderImageBlock.js","sourceRoot":"","sources":["../../../library/src/blocks/templates/renderImageBlock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAE9B,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAG7F,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,gBAAgB,GAAG,qCAAqC,CAAC;AAE/D,MAAM,UAAU,gBAAgB,CAAC,KAAY,EAAE,GAAkB;IAC/D,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,4BAA4B,EAAE,CAAC;IAErE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC1D,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,EACJ,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,WAAW,EACnB,GAAG,EACH,WAAW,EACX,UAAU,GACX,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC;IAE7B,oDAAoD;IACpD,IAAI,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,gBAAgB,CAAC;IAChE,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CACX,sDAAsD,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC7F,CAAC;YACF,mCAAmC;YACnC,QAAQ,GAAG,gBAAgB,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG;QACd,GAAG,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC;QAC7B,GAAG,YAAY,CAAC,UAAU,CAAC;KAC5B,CAAC;IAEF,MAAM,MAAM,GAAG;QACb,GAAG,UAAU,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC;QACnE,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC;KAC7B,CAAC;IAEF,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE1C,OAAO,IAAI,CAAA;;0BAEa,WAAW;eACtB,QAAQ,CAAC,OAAO,CAAC;eACjB,QAAQ,CAAC,MAAM,CAAC;gBACf,SAAS,CAAC,OAAO,CAAC;;;;eAInB,QAAQ;;;kBAGL;QACR,WAAW,EAAE,CAAC,KAA2C,EAAE,EAAE;YAC3D,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;YAEhD,sEAAsE;YACtE,KAAK,CAAC,MAAM,CAAC,aAAc,CAAC,KAAK,CAAC,eAAe,GAAG,OAAO,gBAAgB,GAAG,CAAC;QACjF,CAAC;QACD,IAAI,EAAE,IAAI;KACX;;;GAGN,CAAC;AACJ,CAAC"}
|
|
@@ -8178,25 +8178,20 @@
|
|
|
8178
8178
|
"imports": [],
|
|
8179
8179
|
"format": "esm"
|
|
8180
8180
|
},
|
|
8181
|
-
"
|
|
8182
|
-
"bytes":
|
|
8181
|
+
"library/src/blocks/templates/imageUtil.ts": {
|
|
8182
|
+
"bytes": 3177,
|
|
8183
8183
|
"imports": [
|
|
8184
8184
|
{
|
|
8185
8185
|
"path": "../shared-types/dist/sanitizeSvg.js",
|
|
8186
8186
|
"kind": "import-statement",
|
|
8187
|
-
"original": "
|
|
8187
|
+
"original": "@devvit/shared-types/sanitizeSvg.js"
|
|
8188
8188
|
}
|
|
8189
8189
|
],
|
|
8190
8190
|
"format": "esm"
|
|
8191
8191
|
},
|
|
8192
8192
|
"library/src/blocks/templates/renderImageBlock.ts": {
|
|
8193
|
-
"bytes":
|
|
8193
|
+
"bytes": 2439,
|
|
8194
8194
|
"imports": [
|
|
8195
|
-
{
|
|
8196
|
-
"path": "../shared-types/dist/imageUtil.js",
|
|
8197
|
-
"kind": "import-statement",
|
|
8198
|
-
"original": "@devvit/shared-types/imageUtil.js"
|
|
8199
|
-
},
|
|
8200
8195
|
{
|
|
8201
8196
|
"path": "../../node_modules/@reddit/faceplate-ui/dist/faceplateUIConfig.js",
|
|
8202
8197
|
"kind": "import-statement",
|
|
@@ -8212,6 +8207,11 @@
|
|
|
8212
8207
|
"kind": "import-statement",
|
|
8213
8208
|
"original": "../attributes.js"
|
|
8214
8209
|
},
|
|
8210
|
+
{
|
|
8211
|
+
"path": "library/src/blocks/templates/imageUtil.ts",
|
|
8212
|
+
"kind": "import-statement",
|
|
8213
|
+
"original": "./imageUtil.js"
|
|
8214
|
+
},
|
|
8215
8215
|
{
|
|
8216
8216
|
"path": "library/src/blocks/templates/util.ts",
|
|
8217
8217
|
"kind": "import-statement",
|
|
@@ -8816,7 +8816,7 @@
|
|
|
8816
8816
|
"imports": [],
|
|
8817
8817
|
"exports": [],
|
|
8818
8818
|
"inputs": {},
|
|
8819
|
-
"bytes":
|
|
8819
|
+
"bytes": 6410808
|
|
8820
8820
|
},
|
|
8821
8821
|
"dist/devvit-custom-post.min.js": {
|
|
8822
8822
|
"imports": [
|
|
@@ -9415,7 +9415,7 @@
|
|
|
9415
9415
|
"../shared-types/dist/sanitizeSvg.js": {
|
|
9416
9416
|
"bytesInOutput": 1351
|
|
9417
9417
|
},
|
|
9418
|
-
"
|
|
9418
|
+
"library/src/blocks/templates/imageUtil.ts": {
|
|
9419
9419
|
"bytesInOutput": 849
|
|
9420
9420
|
},
|
|
9421
9421
|
"library/src/blocks/templates/renderImageBlock.ts": {
|