6675 lines
215 KiB
JavaScript
6675 lines
215 KiB
JavaScript
/*
|
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
if you want to view the source, please visit the github repository of this plugin
|
|
*/
|
|
|
|
var __create = Object.create;
|
|
var __defProp = Object.defineProperty;
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
var __getProtoOf = Object.getPrototypeOf;
|
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
|
var __commonJS = (cb, mod) => function __require() {
|
|
return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
};
|
|
var __export = (target, all) => {
|
|
__markAsModule(target);
|
|
for (var name in all)
|
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
};
|
|
var __reExport = (target, module2, desc) => {
|
|
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
|
for (let key of __getOwnPropNames(module2))
|
|
if (!__hasOwnProp.call(target, key) && key !== "default")
|
|
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
|
|
}
|
|
return target;
|
|
};
|
|
var __toModule = (module2) => {
|
|
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
|
|
};
|
|
var __async = (__this, __arguments, generator) => {
|
|
return new Promise((resolve, reject) => {
|
|
var fulfilled = (value) => {
|
|
try {
|
|
step(generator.next(value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
};
|
|
var rejected = (value) => {
|
|
try {
|
|
step(generator.throw(value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
};
|
|
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
step((generator = generator.apply(__this, __arguments)).next());
|
|
});
|
|
};
|
|
|
|
// node_modules/oembed-parser/src/utils/isValidURL.js
|
|
var require_isValidURL = __commonJS({
|
|
"node_modules/oembed-parser/src/utils/isValidURL.js"(exports, module2) {
|
|
module2.exports = (url = "") => {
|
|
try {
|
|
const ourl = new URL(url);
|
|
return ourl !== null && ourl.protocol.startsWith("http");
|
|
} catch (err) {
|
|
return false;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/helpers/bind.js
|
|
var require_bind = __commonJS({
|
|
"node_modules/axios/lib/helpers/bind.js"(exports, module2) {
|
|
"use strict";
|
|
module2.exports = function bind(fn, thisArg) {
|
|
return function wrap() {
|
|
var args = new Array(arguments.length);
|
|
for (var i = 0; i < args.length; i++) {
|
|
args[i] = arguments[i];
|
|
}
|
|
return fn.apply(thisArg, args);
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/utils.js
|
|
var require_utils = __commonJS({
|
|
"node_modules/axios/lib/utils.js"(exports, module2) {
|
|
"use strict";
|
|
var bind = require_bind();
|
|
var toString = Object.prototype.toString;
|
|
function isArray(val) {
|
|
return toString.call(val) === "[object Array]";
|
|
}
|
|
function isUndefined(val) {
|
|
return typeof val === "undefined";
|
|
}
|
|
function isBuffer(val) {
|
|
return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && typeof val.constructor.isBuffer === "function" && val.constructor.isBuffer(val);
|
|
}
|
|
function isArrayBuffer(val) {
|
|
return toString.call(val) === "[object ArrayBuffer]";
|
|
}
|
|
function isFormData(val) {
|
|
return typeof FormData !== "undefined" && val instanceof FormData;
|
|
}
|
|
function isArrayBufferView(val) {
|
|
var result;
|
|
if (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView) {
|
|
result = ArrayBuffer.isView(val);
|
|
} else {
|
|
result = val && val.buffer && val.buffer instanceof ArrayBuffer;
|
|
}
|
|
return result;
|
|
}
|
|
function isString(val) {
|
|
return typeof val === "string";
|
|
}
|
|
function isNumber(val) {
|
|
return typeof val === "number";
|
|
}
|
|
function isObject(val) {
|
|
return val !== null && typeof val === "object";
|
|
}
|
|
function isPlainObject(val) {
|
|
if (toString.call(val) !== "[object Object]") {
|
|
return false;
|
|
}
|
|
var prototype = Object.getPrototypeOf(val);
|
|
return prototype === null || prototype === Object.prototype;
|
|
}
|
|
function isDate(val) {
|
|
return toString.call(val) === "[object Date]";
|
|
}
|
|
function isFile(val) {
|
|
return toString.call(val) === "[object File]";
|
|
}
|
|
function isBlob(val) {
|
|
return toString.call(val) === "[object Blob]";
|
|
}
|
|
function isFunction(val) {
|
|
return toString.call(val) === "[object Function]";
|
|
}
|
|
function isStream(val) {
|
|
return isObject(val) && isFunction(val.pipe);
|
|
}
|
|
function isURLSearchParams(val) {
|
|
return typeof URLSearchParams !== "undefined" && val instanceof URLSearchParams;
|
|
}
|
|
function trim(str) {
|
|
return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, "");
|
|
}
|
|
function isStandardBrowserEnv() {
|
|
if (typeof navigator !== "undefined" && (navigator.product === "ReactNative" || navigator.product === "NativeScript" || navigator.product === "NS")) {
|
|
return false;
|
|
}
|
|
return typeof window !== "undefined" && typeof document !== "undefined";
|
|
}
|
|
function forEach(obj, fn) {
|
|
if (obj === null || typeof obj === "undefined") {
|
|
return;
|
|
}
|
|
if (typeof obj !== "object") {
|
|
obj = [obj];
|
|
}
|
|
if (isArray(obj)) {
|
|
for (var i = 0, l = obj.length; i < l; i++) {
|
|
fn.call(null, obj[i], i, obj);
|
|
}
|
|
} else {
|
|
for (var key in obj) {
|
|
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
fn.call(null, obj[key], key, obj);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function merge() {
|
|
var result = {};
|
|
function assignValue(val, key) {
|
|
if (isPlainObject(result[key]) && isPlainObject(val)) {
|
|
result[key] = merge(result[key], val);
|
|
} else if (isPlainObject(val)) {
|
|
result[key] = merge({}, val);
|
|
} else if (isArray(val)) {
|
|
result[key] = val.slice();
|
|
} else {
|
|
result[key] = val;
|
|
}
|
|
}
|
|
for (var i = 0, l = arguments.length; i < l; i++) {
|
|
forEach(arguments[i], assignValue);
|
|
}
|
|
return result;
|
|
}
|
|
function extend(a, b, thisArg) {
|
|
forEach(b, function assignValue(val, key) {
|
|
if (thisArg && typeof val === "function") {
|
|
a[key] = bind(val, thisArg);
|
|
} else {
|
|
a[key] = val;
|
|
}
|
|
});
|
|
return a;
|
|
}
|
|
function stripBOM(content) {
|
|
if (content.charCodeAt(0) === 65279) {
|
|
content = content.slice(1);
|
|
}
|
|
return content;
|
|
}
|
|
module2.exports = {
|
|
isArray,
|
|
isArrayBuffer,
|
|
isBuffer,
|
|
isFormData,
|
|
isArrayBufferView,
|
|
isString,
|
|
isNumber,
|
|
isObject,
|
|
isPlainObject,
|
|
isUndefined,
|
|
isDate,
|
|
isFile,
|
|
isBlob,
|
|
isFunction,
|
|
isStream,
|
|
isURLSearchParams,
|
|
isStandardBrowserEnv,
|
|
forEach,
|
|
merge,
|
|
extend,
|
|
trim,
|
|
stripBOM
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/helpers/buildURL.js
|
|
var require_buildURL = __commonJS({
|
|
"node_modules/axios/lib/helpers/buildURL.js"(exports, module2) {
|
|
"use strict";
|
|
var utils = require_utils();
|
|
function encode(val) {
|
|
return encodeURIComponent(val).replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+").replace(/%5B/gi, "[").replace(/%5D/gi, "]");
|
|
}
|
|
module2.exports = function buildURL(url, params, paramsSerializer) {
|
|
if (!params) {
|
|
return url;
|
|
}
|
|
var serializedParams;
|
|
if (paramsSerializer) {
|
|
serializedParams = paramsSerializer(params);
|
|
} else if (utils.isURLSearchParams(params)) {
|
|
serializedParams = params.toString();
|
|
} else {
|
|
var parts = [];
|
|
utils.forEach(params, function serialize(val, key) {
|
|
if (val === null || typeof val === "undefined") {
|
|
return;
|
|
}
|
|
if (utils.isArray(val)) {
|
|
key = key + "[]";
|
|
} else {
|
|
val = [val];
|
|
}
|
|
utils.forEach(val, function parseValue(v) {
|
|
if (utils.isDate(v)) {
|
|
v = v.toISOString();
|
|
} else if (utils.isObject(v)) {
|
|
v = JSON.stringify(v);
|
|
}
|
|
parts.push(encode(key) + "=" + encode(v));
|
|
});
|
|
});
|
|
serializedParams = parts.join("&");
|
|
}
|
|
if (serializedParams) {
|
|
var hashmarkIndex = url.indexOf("#");
|
|
if (hashmarkIndex !== -1) {
|
|
url = url.slice(0, hashmarkIndex);
|
|
}
|
|
url += (url.indexOf("?") === -1 ? "?" : "&") + serializedParams;
|
|
}
|
|
return url;
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/core/InterceptorManager.js
|
|
var require_InterceptorManager = __commonJS({
|
|
"node_modules/axios/lib/core/InterceptorManager.js"(exports, module2) {
|
|
"use strict";
|
|
var utils = require_utils();
|
|
function InterceptorManager() {
|
|
this.handlers = [];
|
|
}
|
|
InterceptorManager.prototype.use = function use(fulfilled, rejected, options) {
|
|
this.handlers.push({
|
|
fulfilled,
|
|
rejected,
|
|
synchronous: options ? options.synchronous : false,
|
|
runWhen: options ? options.runWhen : null
|
|
});
|
|
return this.handlers.length - 1;
|
|
};
|
|
InterceptorManager.prototype.eject = function eject(id) {
|
|
if (this.handlers[id]) {
|
|
this.handlers[id] = null;
|
|
}
|
|
};
|
|
InterceptorManager.prototype.forEach = function forEach(fn) {
|
|
utils.forEach(this.handlers, function forEachHandler(h) {
|
|
if (h !== null) {
|
|
fn(h);
|
|
}
|
|
});
|
|
};
|
|
module2.exports = InterceptorManager;
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/helpers/normalizeHeaderName.js
|
|
var require_normalizeHeaderName = __commonJS({
|
|
"node_modules/axios/lib/helpers/normalizeHeaderName.js"(exports, module2) {
|
|
"use strict";
|
|
var utils = require_utils();
|
|
module2.exports = function normalizeHeaderName(headers, normalizedName) {
|
|
utils.forEach(headers, function processHeader(value, name) {
|
|
if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
|
|
headers[normalizedName] = value;
|
|
delete headers[name];
|
|
}
|
|
});
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/core/enhanceError.js
|
|
var require_enhanceError = __commonJS({
|
|
"node_modules/axios/lib/core/enhanceError.js"(exports, module2) {
|
|
"use strict";
|
|
module2.exports = function enhanceError(error, config, code, request, response) {
|
|
error.config = config;
|
|
if (code) {
|
|
error.code = code;
|
|
}
|
|
error.request = request;
|
|
error.response = response;
|
|
error.isAxiosError = true;
|
|
error.toJSON = function toJSON() {
|
|
return {
|
|
message: this.message,
|
|
name: this.name,
|
|
description: this.description,
|
|
number: this.number,
|
|
fileName: this.fileName,
|
|
lineNumber: this.lineNumber,
|
|
columnNumber: this.columnNumber,
|
|
stack: this.stack,
|
|
config: this.config,
|
|
code: this.code,
|
|
status: this.response && this.response.status ? this.response.status : null
|
|
};
|
|
};
|
|
return error;
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/core/createError.js
|
|
var require_createError = __commonJS({
|
|
"node_modules/axios/lib/core/createError.js"(exports, module2) {
|
|
"use strict";
|
|
var enhanceError = require_enhanceError();
|
|
module2.exports = function createError(message, config, code, request, response) {
|
|
var error = new Error(message);
|
|
return enhanceError(error, config, code, request, response);
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/core/settle.js
|
|
var require_settle = __commonJS({
|
|
"node_modules/axios/lib/core/settle.js"(exports, module2) {
|
|
"use strict";
|
|
var createError = require_createError();
|
|
module2.exports = function settle(resolve, reject, response) {
|
|
var validateStatus = response.config.validateStatus;
|
|
if (!response.status || !validateStatus || validateStatus(response.status)) {
|
|
resolve(response);
|
|
} else {
|
|
reject(createError("Request failed with status code " + response.status, response.config, null, response.request, response));
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/helpers/cookies.js
|
|
var require_cookies = __commonJS({
|
|
"node_modules/axios/lib/helpers/cookies.js"(exports, module2) {
|
|
"use strict";
|
|
var utils = require_utils();
|
|
module2.exports = utils.isStandardBrowserEnv() ? function standardBrowserEnv() {
|
|
return {
|
|
write: function write(name, value, expires, path, domain, secure) {
|
|
var cookie = [];
|
|
cookie.push(name + "=" + encodeURIComponent(value));
|
|
if (utils.isNumber(expires)) {
|
|
cookie.push("expires=" + new Date(expires).toGMTString());
|
|
}
|
|
if (utils.isString(path)) {
|
|
cookie.push("path=" + path);
|
|
}
|
|
if (utils.isString(domain)) {
|
|
cookie.push("domain=" + domain);
|
|
}
|
|
if (secure === true) {
|
|
cookie.push("secure");
|
|
}
|
|
document.cookie = cookie.join("; ");
|
|
},
|
|
read: function read(name) {
|
|
var match = document.cookie.match(new RegExp("(^|;\\s*)(" + name + ")=([^;]*)"));
|
|
return match ? decodeURIComponent(match[3]) : null;
|
|
},
|
|
remove: function remove(name) {
|
|
this.write(name, "", Date.now() - 864e5);
|
|
}
|
|
};
|
|
}() : function nonStandardBrowserEnv() {
|
|
return {
|
|
write: function write() {
|
|
},
|
|
read: function read() {
|
|
return null;
|
|
},
|
|
remove: function remove() {
|
|
}
|
|
};
|
|
}();
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/helpers/isAbsoluteURL.js
|
|
var require_isAbsoluteURL = __commonJS({
|
|
"node_modules/axios/lib/helpers/isAbsoluteURL.js"(exports, module2) {
|
|
"use strict";
|
|
module2.exports = function isAbsoluteURL(url) {
|
|
return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/helpers/combineURLs.js
|
|
var require_combineURLs = __commonJS({
|
|
"node_modules/axios/lib/helpers/combineURLs.js"(exports, module2) {
|
|
"use strict";
|
|
module2.exports = function combineURLs(baseURL, relativeURL) {
|
|
return relativeURL ? baseURL.replace(/\/+$/, "") + "/" + relativeURL.replace(/^\/+/, "") : baseURL;
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/core/buildFullPath.js
|
|
var require_buildFullPath = __commonJS({
|
|
"node_modules/axios/lib/core/buildFullPath.js"(exports, module2) {
|
|
"use strict";
|
|
var isAbsoluteURL = require_isAbsoluteURL();
|
|
var combineURLs = require_combineURLs();
|
|
module2.exports = function buildFullPath(baseURL, requestedURL) {
|
|
if (baseURL && !isAbsoluteURL(requestedURL)) {
|
|
return combineURLs(baseURL, requestedURL);
|
|
}
|
|
return requestedURL;
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/helpers/parseHeaders.js
|
|
var require_parseHeaders = __commonJS({
|
|
"node_modules/axios/lib/helpers/parseHeaders.js"(exports, module2) {
|
|
"use strict";
|
|
var utils = require_utils();
|
|
var ignoreDuplicateOf = [
|
|
"age",
|
|
"authorization",
|
|
"content-length",
|
|
"content-type",
|
|
"etag",
|
|
"expires",
|
|
"from",
|
|
"host",
|
|
"if-modified-since",
|
|
"if-unmodified-since",
|
|
"last-modified",
|
|
"location",
|
|
"max-forwards",
|
|
"proxy-authorization",
|
|
"referer",
|
|
"retry-after",
|
|
"user-agent"
|
|
];
|
|
module2.exports = function parseHeaders(headers) {
|
|
var parsed = {};
|
|
var key;
|
|
var val;
|
|
var i;
|
|
if (!headers) {
|
|
return parsed;
|
|
}
|
|
utils.forEach(headers.split("\n"), function parser(line) {
|
|
i = line.indexOf(":");
|
|
key = utils.trim(line.substr(0, i)).toLowerCase();
|
|
val = utils.trim(line.substr(i + 1));
|
|
if (key) {
|
|
if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
|
|
return;
|
|
}
|
|
if (key === "set-cookie") {
|
|
parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
|
|
} else {
|
|
parsed[key] = parsed[key] ? parsed[key] + ", " + val : val;
|
|
}
|
|
}
|
|
});
|
|
return parsed;
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/helpers/isURLSameOrigin.js
|
|
var require_isURLSameOrigin = __commonJS({
|
|
"node_modules/axios/lib/helpers/isURLSameOrigin.js"(exports, module2) {
|
|
"use strict";
|
|
var utils = require_utils();
|
|
module2.exports = utils.isStandardBrowserEnv() ? function standardBrowserEnv() {
|
|
var msie = /(msie|trident)/i.test(navigator.userAgent);
|
|
var urlParsingNode = document.createElement("a");
|
|
var originURL;
|
|
function resolveURL(url) {
|
|
var href = url;
|
|
if (msie) {
|
|
urlParsingNode.setAttribute("href", href);
|
|
href = urlParsingNode.href;
|
|
}
|
|
urlParsingNode.setAttribute("href", href);
|
|
return {
|
|
href: urlParsingNode.href,
|
|
protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, "") : "",
|
|
host: urlParsingNode.host,
|
|
search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, "") : "",
|
|
hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, "") : "",
|
|
hostname: urlParsingNode.hostname,
|
|
port: urlParsingNode.port,
|
|
pathname: urlParsingNode.pathname.charAt(0) === "/" ? urlParsingNode.pathname : "/" + urlParsingNode.pathname
|
|
};
|
|
}
|
|
originURL = resolveURL(window.location.href);
|
|
return function isURLSameOrigin(requestURL) {
|
|
var parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;
|
|
return parsed.protocol === originURL.protocol && parsed.host === originURL.host;
|
|
};
|
|
}() : function nonStandardBrowserEnv() {
|
|
return function isURLSameOrigin() {
|
|
return true;
|
|
};
|
|
}();
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/cancel/Cancel.js
|
|
var require_Cancel = __commonJS({
|
|
"node_modules/axios/lib/cancel/Cancel.js"(exports, module2) {
|
|
"use strict";
|
|
function Cancel(message) {
|
|
this.message = message;
|
|
}
|
|
Cancel.prototype.toString = function toString() {
|
|
return "Cancel" + (this.message ? ": " + this.message : "");
|
|
};
|
|
Cancel.prototype.__CANCEL__ = true;
|
|
module2.exports = Cancel;
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/adapters/xhr.js
|
|
var require_xhr = __commonJS({
|
|
"node_modules/axios/lib/adapters/xhr.js"(exports, module2) {
|
|
"use strict";
|
|
var utils = require_utils();
|
|
var settle = require_settle();
|
|
var cookies = require_cookies();
|
|
var buildURL = require_buildURL();
|
|
var buildFullPath = require_buildFullPath();
|
|
var parseHeaders = require_parseHeaders();
|
|
var isURLSameOrigin = require_isURLSameOrigin();
|
|
var createError = require_createError();
|
|
var defaults = require_defaults();
|
|
var Cancel = require_Cancel();
|
|
module2.exports = function xhrAdapter(config) {
|
|
return new Promise(function dispatchXhrRequest(resolve, reject) {
|
|
var requestData = config.data;
|
|
var requestHeaders = config.headers;
|
|
var responseType = config.responseType;
|
|
var onCanceled;
|
|
function done() {
|
|
if (config.cancelToken) {
|
|
config.cancelToken.unsubscribe(onCanceled);
|
|
}
|
|
if (config.signal) {
|
|
config.signal.removeEventListener("abort", onCanceled);
|
|
}
|
|
}
|
|
if (utils.isFormData(requestData)) {
|
|
delete requestHeaders["Content-Type"];
|
|
}
|
|
var request = new XMLHttpRequest();
|
|
if (config.auth) {
|
|
var username = config.auth.username || "";
|
|
var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : "";
|
|
requestHeaders.Authorization = "Basic " + btoa(username + ":" + password);
|
|
}
|
|
var fullPath = buildFullPath(config.baseURL, config.url);
|
|
request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);
|
|
request.timeout = config.timeout;
|
|
function onloadend() {
|
|
if (!request) {
|
|
return;
|
|
}
|
|
var responseHeaders = "getAllResponseHeaders" in request ? parseHeaders(request.getAllResponseHeaders()) : null;
|
|
var responseData = !responseType || responseType === "text" || responseType === "json" ? request.responseText : request.response;
|
|
var response = {
|
|
data: responseData,
|
|
status: request.status,
|
|
statusText: request.statusText,
|
|
headers: responseHeaders,
|
|
config,
|
|
request
|
|
};
|
|
settle(function _resolve(value) {
|
|
resolve(value);
|
|
done();
|
|
}, function _reject(err) {
|
|
reject(err);
|
|
done();
|
|
}, response);
|
|
request = null;
|
|
}
|
|
if ("onloadend" in request) {
|
|
request.onloadend = onloadend;
|
|
} else {
|
|
request.onreadystatechange = function handleLoad() {
|
|
if (!request || request.readyState !== 4) {
|
|
return;
|
|
}
|
|
if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf("file:") === 0)) {
|
|
return;
|
|
}
|
|
setTimeout(onloadend);
|
|
};
|
|
}
|
|
request.onabort = function handleAbort() {
|
|
if (!request) {
|
|
return;
|
|
}
|
|
reject(createError("Request aborted", config, "ECONNABORTED", request));
|
|
request = null;
|
|
};
|
|
request.onerror = function handleError() {
|
|
reject(createError("Network Error", config, null, request));
|
|
request = null;
|
|
};
|
|
request.ontimeout = function handleTimeout() {
|
|
var timeoutErrorMessage = config.timeout ? "timeout of " + config.timeout + "ms exceeded" : "timeout exceeded";
|
|
var transitional = config.transitional || defaults.transitional;
|
|
if (config.timeoutErrorMessage) {
|
|
timeoutErrorMessage = config.timeoutErrorMessage;
|
|
}
|
|
reject(createError(timeoutErrorMessage, config, transitional.clarifyTimeoutError ? "ETIMEDOUT" : "ECONNABORTED", request));
|
|
request = null;
|
|
};
|
|
if (utils.isStandardBrowserEnv()) {
|
|
var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : void 0;
|
|
if (xsrfValue) {
|
|
requestHeaders[config.xsrfHeaderName] = xsrfValue;
|
|
}
|
|
}
|
|
if ("setRequestHeader" in request) {
|
|
utils.forEach(requestHeaders, function setRequestHeader(val, key) {
|
|
if (typeof requestData === "undefined" && key.toLowerCase() === "content-type") {
|
|
delete requestHeaders[key];
|
|
} else {
|
|
request.setRequestHeader(key, val);
|
|
}
|
|
});
|
|
}
|
|
if (!utils.isUndefined(config.withCredentials)) {
|
|
request.withCredentials = !!config.withCredentials;
|
|
}
|
|
if (responseType && responseType !== "json") {
|
|
request.responseType = config.responseType;
|
|
}
|
|
if (typeof config.onDownloadProgress === "function") {
|
|
request.addEventListener("progress", config.onDownloadProgress);
|
|
}
|
|
if (typeof config.onUploadProgress === "function" && request.upload) {
|
|
request.upload.addEventListener("progress", config.onUploadProgress);
|
|
}
|
|
if (config.cancelToken || config.signal) {
|
|
onCanceled = function(cancel) {
|
|
if (!request) {
|
|
return;
|
|
}
|
|
reject(!cancel || cancel && cancel.type ? new Cancel("canceled") : cancel);
|
|
request.abort();
|
|
request = null;
|
|
};
|
|
config.cancelToken && config.cancelToken.subscribe(onCanceled);
|
|
if (config.signal) {
|
|
config.signal.aborted ? onCanceled() : config.signal.addEventListener("abort", onCanceled);
|
|
}
|
|
}
|
|
if (!requestData) {
|
|
requestData = null;
|
|
}
|
|
request.send(requestData);
|
|
});
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/defaults.js
|
|
var require_defaults = __commonJS({
|
|
"node_modules/axios/lib/defaults.js"(exports, module2) {
|
|
"use strict";
|
|
var utils = require_utils();
|
|
var normalizeHeaderName = require_normalizeHeaderName();
|
|
var enhanceError = require_enhanceError();
|
|
var DEFAULT_CONTENT_TYPE = {
|
|
"Content-Type": "application/x-www-form-urlencoded"
|
|
};
|
|
function setContentTypeIfUnset(headers, value) {
|
|
if (!utils.isUndefined(headers) && utils.isUndefined(headers["Content-Type"])) {
|
|
headers["Content-Type"] = value;
|
|
}
|
|
}
|
|
function getDefaultAdapter() {
|
|
var adapter;
|
|
if (typeof XMLHttpRequest !== "undefined") {
|
|
adapter = require_xhr();
|
|
} else if (typeof process !== "undefined" && Object.prototype.toString.call(process) === "[object process]") {
|
|
adapter = require_xhr();
|
|
}
|
|
return adapter;
|
|
}
|
|
function stringifySafely(rawValue, parser, encoder) {
|
|
if (utils.isString(rawValue)) {
|
|
try {
|
|
(parser || JSON.parse)(rawValue);
|
|
return utils.trim(rawValue);
|
|
} catch (e) {
|
|
if (e.name !== "SyntaxError") {
|
|
throw e;
|
|
}
|
|
}
|
|
}
|
|
return (encoder || JSON.stringify)(rawValue);
|
|
}
|
|
var defaults = {
|
|
transitional: {
|
|
silentJSONParsing: true,
|
|
forcedJSONParsing: true,
|
|
clarifyTimeoutError: false
|
|
},
|
|
adapter: getDefaultAdapter(),
|
|
transformRequest: [function transformRequest(data, headers) {
|
|
normalizeHeaderName(headers, "Accept");
|
|
normalizeHeaderName(headers, "Content-Type");
|
|
if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {
|
|
return data;
|
|
}
|
|
if (utils.isArrayBufferView(data)) {
|
|
return data.buffer;
|
|
}
|
|
if (utils.isURLSearchParams(data)) {
|
|
setContentTypeIfUnset(headers, "application/x-www-form-urlencoded;charset=utf-8");
|
|
return data.toString();
|
|
}
|
|
if (utils.isObject(data) || headers && headers["Content-Type"] === "application/json") {
|
|
setContentTypeIfUnset(headers, "application/json");
|
|
return stringifySafely(data);
|
|
}
|
|
return data;
|
|
}],
|
|
transformResponse: [function transformResponse(data) {
|
|
var transitional = this.transitional || defaults.transitional;
|
|
var silentJSONParsing = transitional && transitional.silentJSONParsing;
|
|
var forcedJSONParsing = transitional && transitional.forcedJSONParsing;
|
|
var strictJSONParsing = !silentJSONParsing && this.responseType === "json";
|
|
if (strictJSONParsing || forcedJSONParsing && utils.isString(data) && data.length) {
|
|
try {
|
|
return JSON.parse(data);
|
|
} catch (e) {
|
|
if (strictJSONParsing) {
|
|
if (e.name === "SyntaxError") {
|
|
throw enhanceError(e, this, "E_JSON_PARSE");
|
|
}
|
|
throw e;
|
|
}
|
|
}
|
|
}
|
|
return data;
|
|
}],
|
|
timeout: 0,
|
|
xsrfCookieName: "XSRF-TOKEN",
|
|
xsrfHeaderName: "X-XSRF-TOKEN",
|
|
maxContentLength: -1,
|
|
maxBodyLength: -1,
|
|
validateStatus: function validateStatus(status) {
|
|
return status >= 200 && status < 300;
|
|
},
|
|
headers: {
|
|
common: {
|
|
"Accept": "application/json, text/plain, */*"
|
|
}
|
|
}
|
|
};
|
|
utils.forEach(["delete", "get", "head"], function forEachMethodNoData(method) {
|
|
defaults.headers[method] = {};
|
|
});
|
|
utils.forEach(["post", "put", "patch"], function forEachMethodWithData(method) {
|
|
defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
|
|
});
|
|
module2.exports = defaults;
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/core/transformData.js
|
|
var require_transformData = __commonJS({
|
|
"node_modules/axios/lib/core/transformData.js"(exports, module2) {
|
|
"use strict";
|
|
var utils = require_utils();
|
|
var defaults = require_defaults();
|
|
module2.exports = function transformData(data, headers, fns) {
|
|
var context = this || defaults;
|
|
utils.forEach(fns, function transform(fn) {
|
|
data = fn.call(context, data, headers);
|
|
});
|
|
return data;
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/cancel/isCancel.js
|
|
var require_isCancel = __commonJS({
|
|
"node_modules/axios/lib/cancel/isCancel.js"(exports, module2) {
|
|
"use strict";
|
|
module2.exports = function isCancel(value) {
|
|
return !!(value && value.__CANCEL__);
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/core/dispatchRequest.js
|
|
var require_dispatchRequest = __commonJS({
|
|
"node_modules/axios/lib/core/dispatchRequest.js"(exports, module2) {
|
|
"use strict";
|
|
var utils = require_utils();
|
|
var transformData = require_transformData();
|
|
var isCancel = require_isCancel();
|
|
var defaults = require_defaults();
|
|
var Cancel = require_Cancel();
|
|
function throwIfCancellationRequested(config) {
|
|
if (config.cancelToken) {
|
|
config.cancelToken.throwIfRequested();
|
|
}
|
|
if (config.signal && config.signal.aborted) {
|
|
throw new Cancel("canceled");
|
|
}
|
|
}
|
|
module2.exports = function dispatchRequest(config) {
|
|
throwIfCancellationRequested(config);
|
|
config.headers = config.headers || {};
|
|
config.data = transformData.call(config, config.data, config.headers, config.transformRequest);
|
|
config.headers = utils.merge(config.headers.common || {}, config.headers[config.method] || {}, config.headers);
|
|
utils.forEach(["delete", "get", "head", "post", "put", "patch", "common"], function cleanHeaderConfig(method) {
|
|
delete config.headers[method];
|
|
});
|
|
var adapter = config.adapter || defaults.adapter;
|
|
return adapter(config).then(function onAdapterResolution(response) {
|
|
throwIfCancellationRequested(config);
|
|
response.data = transformData.call(config, response.data, response.headers, config.transformResponse);
|
|
return response;
|
|
}, function onAdapterRejection(reason) {
|
|
if (!isCancel(reason)) {
|
|
throwIfCancellationRequested(config);
|
|
if (reason && reason.response) {
|
|
reason.response.data = transformData.call(config, reason.response.data, reason.response.headers, config.transformResponse);
|
|
}
|
|
}
|
|
return Promise.reject(reason);
|
|
});
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/core/mergeConfig.js
|
|
var require_mergeConfig = __commonJS({
|
|
"node_modules/axios/lib/core/mergeConfig.js"(exports, module2) {
|
|
"use strict";
|
|
var utils = require_utils();
|
|
module2.exports = function mergeConfig(config1, config2) {
|
|
config2 = config2 || {};
|
|
var config = {};
|
|
function getMergedValue(target, source) {
|
|
if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
|
|
return utils.merge(target, source);
|
|
} else if (utils.isPlainObject(source)) {
|
|
return utils.merge({}, source);
|
|
} else if (utils.isArray(source)) {
|
|
return source.slice();
|
|
}
|
|
return source;
|
|
}
|
|
function mergeDeepProperties(prop) {
|
|
if (!utils.isUndefined(config2[prop])) {
|
|
return getMergedValue(config1[prop], config2[prop]);
|
|
} else if (!utils.isUndefined(config1[prop])) {
|
|
return getMergedValue(void 0, config1[prop]);
|
|
}
|
|
}
|
|
function valueFromConfig2(prop) {
|
|
if (!utils.isUndefined(config2[prop])) {
|
|
return getMergedValue(void 0, config2[prop]);
|
|
}
|
|
}
|
|
function defaultToConfig2(prop) {
|
|
if (!utils.isUndefined(config2[prop])) {
|
|
return getMergedValue(void 0, config2[prop]);
|
|
} else if (!utils.isUndefined(config1[prop])) {
|
|
return getMergedValue(void 0, config1[prop]);
|
|
}
|
|
}
|
|
function mergeDirectKeys(prop) {
|
|
if (prop in config2) {
|
|
return getMergedValue(config1[prop], config2[prop]);
|
|
} else if (prop in config1) {
|
|
return getMergedValue(void 0, config1[prop]);
|
|
}
|
|
}
|
|
var mergeMap = {
|
|
"url": valueFromConfig2,
|
|
"method": valueFromConfig2,
|
|
"data": valueFromConfig2,
|
|
"baseURL": defaultToConfig2,
|
|
"transformRequest": defaultToConfig2,
|
|
"transformResponse": defaultToConfig2,
|
|
"paramsSerializer": defaultToConfig2,
|
|
"timeout": defaultToConfig2,
|
|
"timeoutMessage": defaultToConfig2,
|
|
"withCredentials": defaultToConfig2,
|
|
"adapter": defaultToConfig2,
|
|
"responseType": defaultToConfig2,
|
|
"xsrfCookieName": defaultToConfig2,
|
|
"xsrfHeaderName": defaultToConfig2,
|
|
"onUploadProgress": defaultToConfig2,
|
|
"onDownloadProgress": defaultToConfig2,
|
|
"decompress": defaultToConfig2,
|
|
"maxContentLength": defaultToConfig2,
|
|
"maxBodyLength": defaultToConfig2,
|
|
"transport": defaultToConfig2,
|
|
"httpAgent": defaultToConfig2,
|
|
"httpsAgent": defaultToConfig2,
|
|
"cancelToken": defaultToConfig2,
|
|
"socketPath": defaultToConfig2,
|
|
"responseEncoding": defaultToConfig2,
|
|
"validateStatus": mergeDirectKeys
|
|
};
|
|
utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {
|
|
var merge = mergeMap[prop] || mergeDeepProperties;
|
|
var configValue = merge(prop);
|
|
utils.isUndefined(configValue) && merge !== mergeDirectKeys || (config[prop] = configValue);
|
|
});
|
|
return config;
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/env/data.js
|
|
var require_data = __commonJS({
|
|
"node_modules/axios/lib/env/data.js"(exports, module2) {
|
|
module2.exports = {
|
|
"version": "0.24.0"
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/helpers/validator.js
|
|
var require_validator = __commonJS({
|
|
"node_modules/axios/lib/helpers/validator.js"(exports, module2) {
|
|
"use strict";
|
|
var VERSION = require_data().version;
|
|
var validators = {};
|
|
["object", "boolean", "number", "function", "string", "symbol"].forEach(function(type, i) {
|
|
validators[type] = function validator(thing) {
|
|
return typeof thing === type || "a" + (i < 1 ? "n " : " ") + type;
|
|
};
|
|
});
|
|
var deprecatedWarnings = {};
|
|
validators.transitional = function transitional(validator, version, message) {
|
|
function formatMessage(opt, desc) {
|
|
return "[Axios v" + VERSION + "] Transitional option '" + opt + "'" + desc + (message ? ". " + message : "");
|
|
}
|
|
return function(value, opt, opts) {
|
|
if (validator === false) {
|
|
throw new Error(formatMessage(opt, " has been removed" + (version ? " in " + version : "")));
|
|
}
|
|
if (version && !deprecatedWarnings[opt]) {
|
|
deprecatedWarnings[opt] = true;
|
|
console.warn(formatMessage(opt, " has been deprecated since v" + version + " and will be removed in the near future"));
|
|
}
|
|
return validator ? validator(value, opt, opts) : true;
|
|
};
|
|
};
|
|
function assertOptions(options, schema, allowUnknown) {
|
|
if (typeof options !== "object") {
|
|
throw new TypeError("options must be an object");
|
|
}
|
|
var keys = Object.keys(options);
|
|
var i = keys.length;
|
|
while (i-- > 0) {
|
|
var opt = keys[i];
|
|
var validator = schema[opt];
|
|
if (validator) {
|
|
var value = options[opt];
|
|
var result = value === void 0 || validator(value, opt, options);
|
|
if (result !== true) {
|
|
throw new TypeError("option " + opt + " must be " + result);
|
|
}
|
|
continue;
|
|
}
|
|
if (allowUnknown !== true) {
|
|
throw Error("Unknown option " + opt);
|
|
}
|
|
}
|
|
}
|
|
module2.exports = {
|
|
assertOptions,
|
|
validators
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/core/Axios.js
|
|
var require_Axios = __commonJS({
|
|
"node_modules/axios/lib/core/Axios.js"(exports, module2) {
|
|
"use strict";
|
|
var utils = require_utils();
|
|
var buildURL = require_buildURL();
|
|
var InterceptorManager = require_InterceptorManager();
|
|
var dispatchRequest = require_dispatchRequest();
|
|
var mergeConfig = require_mergeConfig();
|
|
var validator = require_validator();
|
|
var validators = validator.validators;
|
|
function Axios(instanceConfig) {
|
|
this.defaults = instanceConfig;
|
|
this.interceptors = {
|
|
request: new InterceptorManager(),
|
|
response: new InterceptorManager()
|
|
};
|
|
}
|
|
Axios.prototype.request = function request(config) {
|
|
if (typeof config === "string") {
|
|
config = arguments[1] || {};
|
|
config.url = arguments[0];
|
|
} else {
|
|
config = config || {};
|
|
}
|
|
config = mergeConfig(this.defaults, config);
|
|
if (config.method) {
|
|
config.method = config.method.toLowerCase();
|
|
} else if (this.defaults.method) {
|
|
config.method = this.defaults.method.toLowerCase();
|
|
} else {
|
|
config.method = "get";
|
|
}
|
|
var transitional = config.transitional;
|
|
if (transitional !== void 0) {
|
|
validator.assertOptions(transitional, {
|
|
silentJSONParsing: validators.transitional(validators.boolean),
|
|
forcedJSONParsing: validators.transitional(validators.boolean),
|
|
clarifyTimeoutError: validators.transitional(validators.boolean)
|
|
}, false);
|
|
}
|
|
var requestInterceptorChain = [];
|
|
var synchronousRequestInterceptors = true;
|
|
this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
|
|
if (typeof interceptor.runWhen === "function" && interceptor.runWhen(config) === false) {
|
|
return;
|
|
}
|
|
synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
|
|
requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
|
|
});
|
|
var responseInterceptorChain = [];
|
|
this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
|
|
responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
|
|
});
|
|
var promise;
|
|
if (!synchronousRequestInterceptors) {
|
|
var chain = [dispatchRequest, void 0];
|
|
Array.prototype.unshift.apply(chain, requestInterceptorChain);
|
|
chain = chain.concat(responseInterceptorChain);
|
|
promise = Promise.resolve(config);
|
|
while (chain.length) {
|
|
promise = promise.then(chain.shift(), chain.shift());
|
|
}
|
|
return promise;
|
|
}
|
|
var newConfig = config;
|
|
while (requestInterceptorChain.length) {
|
|
var onFulfilled = requestInterceptorChain.shift();
|
|
var onRejected = requestInterceptorChain.shift();
|
|
try {
|
|
newConfig = onFulfilled(newConfig);
|
|
} catch (error) {
|
|
onRejected(error);
|
|
break;
|
|
}
|
|
}
|
|
try {
|
|
promise = dispatchRequest(newConfig);
|
|
} catch (error) {
|
|
return Promise.reject(error);
|
|
}
|
|
while (responseInterceptorChain.length) {
|
|
promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());
|
|
}
|
|
return promise;
|
|
};
|
|
Axios.prototype.getUri = function getUri(config) {
|
|
config = mergeConfig(this.defaults, config);
|
|
return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, "");
|
|
};
|
|
utils.forEach(["delete", "get", "head", "options"], function forEachMethodNoData(method) {
|
|
Axios.prototype[method] = function(url, config) {
|
|
return this.request(mergeConfig(config || {}, {
|
|
method,
|
|
url,
|
|
data: (config || {}).data
|
|
}));
|
|
};
|
|
});
|
|
utils.forEach(["post", "put", "patch"], function forEachMethodWithData(method) {
|
|
Axios.prototype[method] = function(url, data, config) {
|
|
return this.request(mergeConfig(config || {}, {
|
|
method,
|
|
url,
|
|
data
|
|
}));
|
|
};
|
|
});
|
|
module2.exports = Axios;
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/cancel/CancelToken.js
|
|
var require_CancelToken = __commonJS({
|
|
"node_modules/axios/lib/cancel/CancelToken.js"(exports, module2) {
|
|
"use strict";
|
|
var Cancel = require_Cancel();
|
|
function CancelToken(executor) {
|
|
if (typeof executor !== "function") {
|
|
throw new TypeError("executor must be a function.");
|
|
}
|
|
var resolvePromise;
|
|
this.promise = new Promise(function promiseExecutor(resolve) {
|
|
resolvePromise = resolve;
|
|
});
|
|
var token = this;
|
|
this.promise.then(function(cancel) {
|
|
if (!token._listeners)
|
|
return;
|
|
var i;
|
|
var l = token._listeners.length;
|
|
for (i = 0; i < l; i++) {
|
|
token._listeners[i](cancel);
|
|
}
|
|
token._listeners = null;
|
|
});
|
|
this.promise.then = function(onfulfilled) {
|
|
var _resolve;
|
|
var promise = new Promise(function(resolve) {
|
|
token.subscribe(resolve);
|
|
_resolve = resolve;
|
|
}).then(onfulfilled);
|
|
promise.cancel = function reject() {
|
|
token.unsubscribe(_resolve);
|
|
};
|
|
return promise;
|
|
};
|
|
executor(function cancel(message) {
|
|
if (token.reason) {
|
|
return;
|
|
}
|
|
token.reason = new Cancel(message);
|
|
resolvePromise(token.reason);
|
|
});
|
|
}
|
|
CancelToken.prototype.throwIfRequested = function throwIfRequested() {
|
|
if (this.reason) {
|
|
throw this.reason;
|
|
}
|
|
};
|
|
CancelToken.prototype.subscribe = function subscribe(listener) {
|
|
if (this.reason) {
|
|
listener(this.reason);
|
|
return;
|
|
}
|
|
if (this._listeners) {
|
|
this._listeners.push(listener);
|
|
} else {
|
|
this._listeners = [listener];
|
|
}
|
|
};
|
|
CancelToken.prototype.unsubscribe = function unsubscribe(listener) {
|
|
if (!this._listeners) {
|
|
return;
|
|
}
|
|
var index = this._listeners.indexOf(listener);
|
|
if (index !== -1) {
|
|
this._listeners.splice(index, 1);
|
|
}
|
|
};
|
|
CancelToken.source = function source() {
|
|
var cancel;
|
|
var token = new CancelToken(function executor(c) {
|
|
cancel = c;
|
|
});
|
|
return {
|
|
token,
|
|
cancel
|
|
};
|
|
};
|
|
module2.exports = CancelToken;
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/helpers/spread.js
|
|
var require_spread = __commonJS({
|
|
"node_modules/axios/lib/helpers/spread.js"(exports, module2) {
|
|
"use strict";
|
|
module2.exports = function spread(callback) {
|
|
return function wrap(arr) {
|
|
return callback.apply(null, arr);
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/helpers/isAxiosError.js
|
|
var require_isAxiosError = __commonJS({
|
|
"node_modules/axios/lib/helpers/isAxiosError.js"(exports, module2) {
|
|
"use strict";
|
|
module2.exports = function isAxiosError(payload) {
|
|
return typeof payload === "object" && payload.isAxiosError === true;
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/axios.js
|
|
var require_axios = __commonJS({
|
|
"node_modules/axios/lib/axios.js"(exports, module2) {
|
|
"use strict";
|
|
var utils = require_utils();
|
|
var bind = require_bind();
|
|
var Axios = require_Axios();
|
|
var mergeConfig = require_mergeConfig();
|
|
var defaults = require_defaults();
|
|
function createInstance(defaultConfig) {
|
|
var context = new Axios(defaultConfig);
|
|
var instance = bind(Axios.prototype.request, context);
|
|
utils.extend(instance, Axios.prototype, context);
|
|
utils.extend(instance, context);
|
|
instance.create = function create(instanceConfig) {
|
|
return createInstance(mergeConfig(defaultConfig, instanceConfig));
|
|
};
|
|
return instance;
|
|
}
|
|
var axios = createInstance(defaults);
|
|
axios.Axios = Axios;
|
|
axios.Cancel = require_Cancel();
|
|
axios.CancelToken = require_CancelToken();
|
|
axios.isCancel = require_isCancel();
|
|
axios.VERSION = require_data().version;
|
|
axios.all = function all(promises) {
|
|
return Promise.all(promises);
|
|
};
|
|
axios.spread = require_spread();
|
|
axios.isAxiosError = require_isAxiosError();
|
|
module2.exports = axios;
|
|
module2.exports.default = axios;
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/index.js
|
|
var require_axios2 = __commonJS({
|
|
"node_modules/axios/index.js"(exports, module2) {
|
|
module2.exports = require_axios();
|
|
}
|
|
});
|
|
|
|
// node_modules/bellajs/dist/bella.min.js
|
|
var require_bella_min = __commonJS({
|
|
"node_modules/bellajs/dist/bella.min.js"(exports, module2) {
|
|
!function(e, t) {
|
|
typeof exports == "object" && typeof module2 != "undefined" ? t(exports) : typeof define == "function" && define.amd ? define(["exports"], t) : t((e = typeof globalThis != "undefined" ? globalThis : e || self).bella = {});
|
|
}(exports, function(e) {
|
|
const t = (e2) => ({}).toString.call(e2), r = (e2) => Array.isArray(e2), n = (e2) => String(e2) === e2, o = (e2) => Number(e2) === e2, a = (e2) => t(e2) === "[object Null]", i = (e2) => t(e2) === "[object Undefined]", l = (e2) => i(e2) || a(e2), s = (e2) => t(e2) === "[object Object]" && !r(e2), c = (e2) => e2 instanceof Date && !isNaN(e2.valueOf()), u = (e2) => !e2 || l(e2) || n(e2) && e2 === "" || r(e2) && e2.length === 0 || s(e2) && Object.keys(e2).length === 0, g = (e2, t2) => !(!e2 || !t2) && Object.prototype.hasOwnProperty.call(e2, t2), f = (e2, t2) => {
|
|
if (u(e2) && u(t2))
|
|
return true;
|
|
if (c(e2) && c(t2))
|
|
return e2.getTime() === t2.getTime();
|
|
if (r(e2) && r(t2)) {
|
|
if (e2.length !== t2.length)
|
|
return false;
|
|
let r2 = true;
|
|
for (let n2 = 0; n2 < e2.length; n2++)
|
|
if (!f(e2[n2], t2[n2])) {
|
|
r2 = false;
|
|
break;
|
|
}
|
|
return r2;
|
|
}
|
|
if (s(e2) && s(t2)) {
|
|
if (Object.keys(e2).length !== Object.keys(t2).length)
|
|
return false;
|
|
let r2 = true;
|
|
for (const n2 in e2)
|
|
if (!g(t2, n2) || !f(e2[n2], t2[n2])) {
|
|
r2 = false;
|
|
break;
|
|
}
|
|
return r2;
|
|
}
|
|
return e2 === t2;
|
|
}, p = Number.MAX_SAFE_INTEGER, h = (e2, t2) => {
|
|
if ((!e2 || e2 < 0) && (e2 = 0), t2 || (t2 = p), e2 === t2)
|
|
return t2;
|
|
e2 > t2 && (e2 = Math.min(e2, t2), t2 = Math.max(e2, t2));
|
|
const r2 = e2, n2 = t2 - e2 + 1;
|
|
return Math.floor(Math.random() * n2) + r2;
|
|
}, d = (e2) => {
|
|
const t2 = o(e2) ? String(e2) : e2;
|
|
if (!n(t2))
|
|
throw new Error("InvalidInput: String required.");
|
|
return t2;
|
|
}, m = (e2) => {
|
|
const t2 = d(e2).toLowerCase();
|
|
return t2.length > 1 ? t2.charAt(0).toUpperCase() + t2.slice(1) : t2.toUpperCase();
|
|
}, b = (e2, t2, a2) => {
|
|
let i2 = d(e2);
|
|
if (o(t2) && (t2 = String(t2)), o(a2) && (a2 = String(a2)), n(t2) && n(a2)) {
|
|
const e3 = i2.split(t2);
|
|
i2 = e3.join(a2);
|
|
} else if (r(t2) && n(a2))
|
|
t2.forEach((e3) => {
|
|
i2 = b(i2, e3, a2);
|
|
});
|
|
else if (r(t2) && r(a2) && t2.length === a2.length) {
|
|
const e3 = t2.length;
|
|
if (e3 > 0)
|
|
for (let r2 = 0; r2 < e3; r2++) {
|
|
const e4 = t2[r2], n2 = a2[r2];
|
|
i2 = b(i2, e4, n2);
|
|
}
|
|
}
|
|
return i2;
|
|
}, y = (e2) => {
|
|
let t2 = d(e2);
|
|
const r2 = { a: "\xE1|\xE0|\u1EA3|\xE3|\u1EA1|\u0103|\u1EAF|\u1EB7|\u1EB1|\u1EB3|\u1EB5|\xE2|\u1EA5|\u1EA7|\u1EA9|\u1EAB|\u1EAD|\xE4", A: "\xC1|\xC0|\u1EA2|\xC3|\u1EA0|\u0102|\u1EAE|\u1EB6|\u1EB0|\u1EB2|\u1EB4|\xC2|\u1EA4|\u1EA6|\u1EA8|\u1EAA|\u1EAC|\xC4", c: "\xE7", C: "\xC7", d: "\u0111", D: "\u0110", e: "\xE9|\xE8|\u1EBB|\u1EBD|\u1EB9|\xEA|\u1EBF|\u1EC1|\u1EC3|\u1EC5|\u1EC7|\xEB", E: "\xC9|\xC8|\u1EBA|\u1EBC|\u1EB8|\xCA|\u1EBE|\u1EC0|\u1EC2|\u1EC4|\u1EC6|\xCB", i: "\xED|\xEC|\u1EC9|\u0129|\u1ECB|\xEF|\xEE", I: "\xCD|\xCC|\u1EC8|\u0128|\u1ECA|\xCF|\xCE", o: "\xF3|\xF2|\u1ECF|\xF5|\u1ECD|\xF4|\u1ED1|\u1ED3|\u1ED5|\u1ED7|\u1ED9|\u01A1|\u1EDB|\u1EDD|\u1EDF|\u1EE1|\u1EE3|\xF6", O: "\xD3|\xD2|\u1ECE|\xD5|\u1ECC|\xD4|\u1ED0|\u1ED2|\u1ED4|\xD4|\u1ED8|\u01A0|\u1EDA|\u1EDC|\u1EDE|\u1EE0|\u1EE2|\xD6", u: "\xFA|\xF9|\u1EE7|\u0169|\u1EE5|\u01B0|\u1EE9|\u1EEB|\u1EED|\u1EEF|\u1EF1|\xFB", U: "\xDA|\xD9|\u1EE6|\u0168|\u1EE4|\u01AF|\u1EE8|\u1EEA|\u1EEC|\u1EEE|\u1EF0|\xDB", y: "\xFD|\u1EF3|\u1EF7|\u1EF9|\u1EF5", Y: "\xDD|\u1EF2|\u1EF6|\u1EF8|\u1EF4" }, n2 = (e3, r3) => {
|
|
t2 = b(t2, e3, r3);
|
|
};
|
|
for (const e3 in r2)
|
|
if (g(r2, e3)) {
|
|
r2[e3].split("|").forEach((t3) => n2(t3, e3));
|
|
}
|
|
return t2;
|
|
}, w = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], M = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], j = () => new Date(), D = () => Date.now(), S = j().getTimezoneOffset(), N = (() => {
|
|
const e2 = Math.abs(S / 60);
|
|
return ["GMT", S < 0 ? "+" : "-", String(e2).padStart(4, "0")].join("");
|
|
})(), O = (e2) => String(e2 < 10 ? "0" + e2 : e2), A = (e2, t2 = "D, M d, Y h:i:s A") => {
|
|
const r2 = c(e2) ? e2 : new Date(e2);
|
|
if (!c(r2))
|
|
throw new Error("InvalidInput: Number or Date required.");
|
|
const n2 = t2.includes("a") || t2.includes("A"), o2 = w, a2 = M, i2 = { Y: () => r2.getFullYear(), y: () => (i2.Y() + "").slice(-2), F: () => a2[i2.n() - 1], M: () => (i2.F() + "").slice(0, 3), m: () => O(i2.n()), n: () => r2.getMonth() + 1, S: () => ((e3) => {
|
|
let t3 = e3 + " ";
|
|
const r3 = t3.charAt(t3.length - 2);
|
|
return t3 = r3 === "1" ? "st" : r3 === "2" ? "nd" : r3 === "3" ? "rd" : "th", t3;
|
|
})(i2.j()), j: () => r2.getDate(), d: () => O(i2.j()), t: () => new Date(i2.Y(), i2.n(), 0).getDate(), w: () => r2.getDay(), l: () => o2[i2.w()], D: () => (i2.l() + "").slice(0, 3), G: () => r2.getHours(), g: () => i2.G() % 12 || 12, h: () => O(n2 ? i2.g() : i2.G()), i: () => O(r2.getMinutes()), s: () => O(r2.getSeconds()), a: () => i2.G() > 11 ? "pm" : "am", A: () => i2.a().toUpperCase(), O: () => N };
|
|
return t2.replace(/\.*\\?([a-z])/gi, (e3, t3) => i2[e3] ? i2[e3]() : t3);
|
|
};
|
|
const I = (e2, t2, r2, n2 = {}) => {
|
|
const { writable: o2 = false, configurable: a2 = false, enumerable: i2 = false } = n2;
|
|
Object.defineProperty(e2, t2, { value: r2, writable: o2, configurable: a2, enumerable: i2 });
|
|
}, v = (e2) => {
|
|
const t2 = e2, r2 = () => t2 == null, n2 = Object.create({});
|
|
return I(n2, "__value__", t2, { enumerable: true }), I(n2, "__type__", "Maybe", { enumerable: true }), I(n2, "isNil", r2), I(n2, "value", () => t2), I(n2, "map", (e3) => v(r2() ? null : e3(t2))), I(n2, "if", (e3) => v(e3(t2) === true ? t2 : null)), I(n2, "else", (e3) => v(t2 || e3())), n2;
|
|
}, T = (e2, t2 = null) => {
|
|
const n2 = t2 || new Set();
|
|
if (n2.has(e2))
|
|
return e2;
|
|
if (n2.add(e2), c(e2))
|
|
return new Date(e2.valueOf());
|
|
const o2 = (e3) => {
|
|
const t3 = Object.create({});
|
|
for (const r2 in e3)
|
|
g(e3, r2) && (t3[r2] = T(e3[r2], n2));
|
|
return t3;
|
|
}, a2 = (e3) => [...e3].map((e4) => r(e4) ? a2(e4) : s(e4) ? o2(e4) : T(e4, n2));
|
|
return r(e2) ? a2(e2) : s(e2) ? o2(e2) : e2;
|
|
}, E = (e2, t2, n2 = false, o2 = []) => {
|
|
for (const a2 in e2)
|
|
if (!(o2.length > 0 && o2.includes(a2)) && (!n2 || n2 && g(t2, a2))) {
|
|
const i2 = e2[a2], l2 = t2[a2];
|
|
s(l2) && s(i2) || r(l2) && r(i2) ? t2[a2] = E(i2, t2[a2], n2, o2) : t2[a2] = T(i2);
|
|
}
|
|
return t2;
|
|
}, _ = (e2, t2) => e2 > t2 ? 1 : e2 < t2 ? -1 : 0, q = (e2 = [], t2 = null) => {
|
|
const r2 = [...e2], n2 = t2 || _;
|
|
return r2.sort(n2), r2;
|
|
}, C = (e2 = []) => {
|
|
const t2 = [...e2], r2 = [];
|
|
let n2 = t2.length;
|
|
for (; n2 > 0; ) {
|
|
const e3 = Math.floor(Math.random() * n2);
|
|
r2.push(t2.splice(e3, 1)[0]), n2--;
|
|
}
|
|
return r2;
|
|
};
|
|
e.clone = T, e.compose = (...e2) => e2.reduce((e3, t2) => (r2) => e3(t2(r2))), e.copies = E, e.curry = (e2) => {
|
|
const t2 = e2.length, r2 = (t3, n2) => t3 > 0 ? (...e3) => r2(t3 - e3.length, [...n2, ...e3]) : e2(...n2);
|
|
return r2(t2, []);
|
|
}, e.equals = f, e.escapeHTML = (e2) => d(e2).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """), e.genid = (e2, t2 = "") => {
|
|
const r2 = "abcdefghijklmnopqrstuvwxyz", n2 = r2.toUpperCase(), o2 = [r2, n2, "0123456789"].join("").split("").sort(() => Math.random() > 0.5).join(""), a2 = o2.length, i2 = Math.max(e2 || 32, t2.length);
|
|
let l2 = t2;
|
|
for (; l2.length < i2; ) {
|
|
const e3 = h(0, a2);
|
|
l2 += o2.charAt(e3) || "";
|
|
}
|
|
return l2;
|
|
}, e.hasProperty = g, e.isArray = r, e.isBoolean = (e2) => Boolean(e2) === e2, e.isDate = c, e.isElement = (e2) => t(e2).match(/^\[object HTML\w*Element]$/) !== null, e.isEmail = (e2) => n(e2) && /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i.test(e2), e.isEmpty = u, e.isFunction = (e2) => t(e2) === "[object Function]", e.isInteger = (e2) => Number.isInteger(e2), e.isLetter = (e2) => n(e2) && /^[a-z]+$/i.test(e2), e.isNil = l, e.isNull = a, e.isNumber = o, e.isObject = s, e.isString = n, e.isUndefined = i, e.maybe = v, e.md5 = (e2) => {
|
|
for (var t2 = [], r2 = 0; r2 < 64; )
|
|
t2[r2] = 0 | 4294967296 * Math.abs(Math.sin(++r2));
|
|
for (var n2, o2, a2, i2, l2 = [], s2 = decodeURIComponent(encodeURI(e2)), c2 = s2.length, u2 = [n2 = 1732584193, o2 = -271733879, ~n2, ~o2], g2 = 0; g2 <= c2; )
|
|
l2[g2 >> 2] |= (s2.charCodeAt(g2) || 128) << g2++ % 4 * 8;
|
|
for (l2[e2 = 16 * (c2 + 8 >> 6) + 14] = 8 * c2, g2 = 0; g2 < e2; g2 += 16) {
|
|
for (c2 = u2, i2 = 0; i2 < 64; )
|
|
c2 = [a2 = c2[3], (n2 = 0 | c2[1]) + ((a2 = c2[0] + [n2 & (o2 = c2[2]) | ~n2 & a2, a2 & n2 | ~a2 & o2, n2 ^ o2 ^ a2, o2 ^ (n2 | ~a2)][c2 = i2 >> 4] + (t2[i2] + (0 | l2[[i2, 5 * i2 + 1, 3 * i2 + 5, 7 * i2][c2] % 16 + g2]))) << (c2 = [7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21][4 * c2 + i2++ % 4]) | a2 >>> 32 - c2), n2, o2];
|
|
for (i2 = 4; i2; )
|
|
u2[--i2] = u2[i2] + c2[i2];
|
|
}
|
|
for (e2 = ""; i2 < 32; )
|
|
e2 += (u2[i2 >> 3] >> 4 * (1 ^ 7 & i2++) & 15).toString(16);
|
|
return e2;
|
|
}, e.now = j, e.pick = (e2 = [], t2 = 1) => {
|
|
const r2 = C(e2), n2 = Math.max(1, t2), o2 = Math.min(n2, r2.length - 1);
|
|
return r2.splice(0, o2);
|
|
}, e.pipe = (...e2) => e2.reduce((e3, t2) => (r2) => t2(e3(r2))), e.randint = h, e.replaceAll = b, e.shuffle = C, e.slugify = (e2, t2 = "-") => y(e2).trim().toLowerCase().replace(/\W+/g, " ").replace(/\s+/g, " ").replace(/\s/g, t2), e.sort = q, e.sortBy = (e2 = [], t2 = 1, r2 = "") => n(r2) && g(e2[0], r2) ? q(e2, (e3, n2) => e3[r2] > n2[r2] ? t2 : e3[r2] < n2[r2] ? -1 * t2 : 0) : e2, e.stripAccent = y, e.stripTags = (e2) => d(e2).replace(/<.*?>/gi, " ").replace(/\s\s+/g, " ").trim(), e.time = D, e.toDateString = A, e.toLocalDateString = (e2 = D()) => {
|
|
const t2 = c(e2) ? e2 : new Date(e2);
|
|
if (!c(t2))
|
|
throw new Error("InvalidInput: Number or Date required.");
|
|
return A(t2, "D, j M Y h:i:s O");
|
|
}, e.toRelativeTime = (e2 = D()) => {
|
|
const t2 = c(e2) ? e2 : new Date(e2);
|
|
if (!c(t2))
|
|
throw new Error("InvalidInput: Number or Date required.");
|
|
let r2 = j() - t2, n2 = parseInt(t2, 10);
|
|
if (isNaN(n2) && (n2 = 0), r2 <= n2)
|
|
return "Just now";
|
|
let o2 = null;
|
|
const a2 = { millisecond: 1, second: 1e3, minute: 60, hour: 60, day: 24, month: 30, year: 12 };
|
|
for (const e3 in a2) {
|
|
if (r2 < a2[e3])
|
|
break;
|
|
o2 = e3, r2 /= a2[e3];
|
|
}
|
|
return r2 = Math.floor(r2), r2 !== 1 && (o2 += "s"), [r2, o2].join(" ") + " ago";
|
|
}, e.toUTCDateString = (e2 = D()) => {
|
|
const t2 = c(e2) ? e2 : new Date(e2);
|
|
if (!c(t2))
|
|
throw new Error("InvalidInput: Number or Date required.");
|
|
const r2 = t2.getMinutes(), n2 = new Date(t2);
|
|
return n2.setMinutes(r2 + S), `${A(n2, "D, j M Y h:i:s")} GMT+0000`;
|
|
}, e.truncate = (e2, t2) => {
|
|
const r2 = d(e2), n2 = t2 || 140;
|
|
if (r2.length <= n2)
|
|
return r2;
|
|
let o2 = r2.substring(0, n2);
|
|
const a2 = o2.split(" ");
|
|
let i2 = "";
|
|
return a2.length > 1 ? (a2.pop(), i2 += a2.join(" "), i2.length < r2.length && (i2 += "...")) : (o2 = o2.substring(0, n2 - 3), i2 = o2 + "..."), i2;
|
|
}, e.ucfirst = m, e.ucwords = (e2) => d(e2).split(" ").map((e3) => m(e3)).join(" "), e.unescapeHTML = (e2) => d(e2).replace(/"/g, '"').replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&"), e.unique = (e2 = []) => [...new Set(e2)], Object.defineProperty(e, "__esModule", { value: true });
|
|
});
|
|
}
|
|
});
|
|
|
|
// node_modules/oembed-parser/src/config.js
|
|
var require_config = __commonJS({
|
|
"node_modules/oembed-parser/src/config.js"(exports, module2) {
|
|
var { clone, copies } = require_bella_min();
|
|
var requestOptions = {
|
|
headers: {
|
|
"user-agent": "Mozilla/5.0 (X11; Linux i686; rv:94.0) Gecko/20100101 Firefox/94.0",
|
|
accept: "application/json; charset=utf-8"
|
|
},
|
|
responseType: "json",
|
|
responseEncoding: "utf8",
|
|
timeout: 6e4,
|
|
maxRedirects: 3
|
|
};
|
|
module2.exports = {
|
|
getRequestOptions: () => {
|
|
return clone(requestOptions);
|
|
},
|
|
setRequestOptions: (opts) => {
|
|
copies(opts, requestOptions);
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/oembed-parser/src/utils/retrieve.js
|
|
var require_retrieve = __commonJS({
|
|
"node_modules/oembed-parser/src/utils/retrieve.js"(exports, module2) {
|
|
var axios = require_axios2();
|
|
var { getRequestOptions } = require_config();
|
|
module2.exports = (url) => __async(exports, null, function* () {
|
|
try {
|
|
const res = yield axios.get(url, getRequestOptions());
|
|
const contentType = res.headers["content-type"] || "";
|
|
if (!contentType || !contentType.includes("application/json")) {
|
|
return null;
|
|
}
|
|
return res.data;
|
|
} catch (err) {
|
|
return null;
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
// node_modules/oembed-parser/src/utils/fetchEmbed.js
|
|
var require_fetchEmbed = __commonJS({
|
|
"node_modules/oembed-parser/src/utils/fetchEmbed.js"(exports, module2) {
|
|
var retrieve = require_retrieve();
|
|
var isFacebookGraphDependent = (url) => {
|
|
return url.includes("facebook.com") || url.includes("instagram.com");
|
|
};
|
|
var getFacebookGraphToken = () => {
|
|
const env = process.env || {};
|
|
const appId = env.FACEBOOK_APP_ID || "845078789498971";
|
|
const clientToken = env.FACEBOOK_CLIENT_TOKEN || "8ff3ab4ddd45b8f018b35c4fb7edac62";
|
|
return `access_token=${appId}|${clientToken}`;
|
|
};
|
|
var getRegularUrl = (query, basseUrl) => {
|
|
return basseUrl.replace(/\{format\}/g, "json") + "?" + query;
|
|
};
|
|
var fetchEmbed = (_0, _1, ..._2) => __async(exports, [_0, _1, ..._2], function* (url, provider, params = {}) {
|
|
const queries = [
|
|
"format=json",
|
|
`url=${encodeURIComponent(url)}`
|
|
];
|
|
const {
|
|
maxwidth = 0,
|
|
maxheight = 0
|
|
} = params;
|
|
if (maxwidth > 0) {
|
|
queries.push(`maxwidth=${maxwidth}`);
|
|
}
|
|
if (maxheight > 0) {
|
|
queries.push(`maxheight=${maxheight}`);
|
|
}
|
|
if (isFacebookGraphDependent(provider.providerUrl)) {
|
|
queries.push(getFacebookGraphToken());
|
|
}
|
|
const query = queries.join("&");
|
|
const link = getRegularUrl(query, provider.fetchEndpoint);
|
|
const body = retrieve(link);
|
|
return body;
|
|
});
|
|
module2.exports = fetchEmbed;
|
|
}
|
|
});
|
|
|
|
// node_modules/oembed-parser/src/utils/getDomain.js
|
|
var require_getDomain = __commonJS({
|
|
"node_modules/oembed-parser/src/utils/getDomain.js"(exports, module2) {
|
|
module2.exports = (url = "") => {
|
|
try {
|
|
const { host } = new URL(url);
|
|
return host;
|
|
} catch (err) {
|
|
return "";
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/oembed-parser/src/utils/providers.json
|
|
var require_providers = __commonJS({
|
|
"node_modules/oembed-parser/src/utils/providers.json"(exports, module2) {
|
|
module2.exports = [
|
|
{
|
|
provider_name: "23HQ",
|
|
provider_url: "http://www.23hq.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://www.23hq.com/*/photo/*"
|
|
],
|
|
url: "http://www.23hq.com/23/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Abraia",
|
|
provider_url: "https://abraia.me",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://store.abraia.me/*"
|
|
],
|
|
url: "https://api.abraia.me/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "ActBlue",
|
|
provider_url: "https://secure.actblue.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://secure.actblue.com/donate/*"
|
|
],
|
|
url: "https://secure.actblue.com/cf/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Adways",
|
|
provider_url: "http://www.adways.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://play.adpaths.com/experience/*"
|
|
],
|
|
url: "http://play.adpaths.com/oembed/*"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "afreecaTV",
|
|
provider_url: "https://www.afreecatv.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://v.afree.ca/ST/",
|
|
"https://vod.afreecatv.com/ST/",
|
|
"https://vod.afreecatv.com/PLAYER/STATION/"
|
|
],
|
|
url: "https://openapi.afreecatv.com/vod/embedinfo",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Altium LLC",
|
|
provider_url: "https://altium.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://altium.com/viewer/*"
|
|
],
|
|
url: "https://viewer.altium.com/shell/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Altru",
|
|
provider_url: "https://www.altrulabs.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://app.altrulabs.com/*/*?answer_id=*",
|
|
"https://app.altrulabs.com/player/*"
|
|
],
|
|
url: "https://api.altrulabs.com/api/v1/social/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "amCharts Live Editor",
|
|
provider_url: "https://live.amcharts.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://live.amcharts.com/*",
|
|
"https://live.amcharts.com/*"
|
|
],
|
|
url: "https://live.amcharts.com/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Animatron",
|
|
provider_url: "https://www.animatron.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.animatron.com/project/*",
|
|
"https://animatron.com/project/*"
|
|
],
|
|
url: "https://animatron.com/oembed/json",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Animoto",
|
|
provider_url: "http://animoto.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://animoto.com/play/*"
|
|
],
|
|
url: "http://animoto.com/oembeds/create"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "AnnieMusic",
|
|
provider_url: "https://anniemusic.app",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://anniemusic.app/t/*",
|
|
"https://anniemusic.app/p/*"
|
|
],
|
|
url: "https://api.anniemusic.app/api/v1/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Apester",
|
|
provider_url: "https://www.apester.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://renderer.apester.com/v2/*?preview=true&iframe_preview=true"
|
|
],
|
|
url: "https://display.apester.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "ArcGIS StoryMaps",
|
|
provider_url: "https://storymaps.arcgis.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://storymaps.arcgis.com/stories/*"
|
|
],
|
|
url: "https://storymaps.arcgis.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Archivos",
|
|
provider_url: "https://app.archivos.digital",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://app.archivos.digital/app/view/*"
|
|
],
|
|
url: "https://app.archivos.digital/oembed/"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Audioboom",
|
|
provider_url: "https://audioboom.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://audioboom.com/channels/*",
|
|
"https://audioboom.com/channel/*",
|
|
"https://audioboom.com/posts/*"
|
|
],
|
|
url: "https://audioboom.com/publishing/oembed/v4.{format}",
|
|
formats: [
|
|
"json",
|
|
"xml"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "AudioClip",
|
|
provider_url: "https://audioclip.naver.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://audioclip.naver.com/channels/*/clips/*",
|
|
"https://audioclip.naver.com/audiobooks/*"
|
|
],
|
|
url: "https://audioclip.naver.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Audiomack",
|
|
provider_url: "https://audiomack.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://audiomack.com/*/song/*",
|
|
"https://audiomack.com/*/album/*",
|
|
"https://audiomack.com/*/playlist/*"
|
|
],
|
|
url: "https://audiomack.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Audiomeans",
|
|
provider_url: "https://audiomeans.fr",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://podcasts.audiomeans.fr/*"
|
|
],
|
|
url: "https://podcasts.audiomeans.fr/services/oembed",
|
|
discovery: false,
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Avocode",
|
|
provider_url: "https://www.avocode.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://app.avocode.com/view/*"
|
|
],
|
|
url: "https://stage-embed.avocode.com/api/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Backtracks",
|
|
provider_url: "https://backtracks.fm",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://backtracks.fm/*/*/e/*",
|
|
"https://backtracks.fm/*/s/*/*",
|
|
"https://backtracks.fm/*/*/*/*/e/*/*",
|
|
"https://backtracks.fm/*",
|
|
"http://backtracks.fm/*"
|
|
],
|
|
url: "https://backtracks.fm/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Beautiful.AI",
|
|
provider_url: "https://www.beautiful.ai/",
|
|
endpoints: [
|
|
{
|
|
url: "https://www.beautiful.ai/api/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Blackfire.io",
|
|
provider_url: "https://blackfire.io",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://blackfire.io/profiles/*/graph",
|
|
"https://blackfire.io/profiles/compare/*/graph"
|
|
],
|
|
url: "https://blackfire.io/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Blogcast",
|
|
provider_url: "https://blogcast.host/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://blogcast.host/embed/*",
|
|
"https://blogcast.host/embedly/*"
|
|
],
|
|
url: "https://blogcast.host/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Box Office Buz",
|
|
provider_url: "http://boxofficebuz.com",
|
|
endpoints: [
|
|
{
|
|
url: "http://boxofficebuz.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "BrioVR",
|
|
provider_url: "https://view.briovr.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://view.briovr.com/api/v1/worlds/oembed/*"
|
|
],
|
|
url: "https://view.briovr.com/api/v1/worlds/oembed/"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Buttondown",
|
|
provider_url: "https://buttondown.email/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://buttondown.email/*"
|
|
],
|
|
url: "https://buttondown.email/embed",
|
|
formats: [
|
|
"json"
|
|
],
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Byzart Project",
|
|
provider_url: "https://cmc.byzart.eu",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://cmc.byzart.eu/files/*"
|
|
],
|
|
url: "https://cmc.byzart.eu/oembed/",
|
|
discovery: false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Cacoo",
|
|
provider_url: "https://cacoo.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://cacoo.com/diagrams/*"
|
|
],
|
|
url: "http://cacoo.com/oembed.{format}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Catapult",
|
|
provider_url: "https://www.catapult.app/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www-catapult-app.sandbox.hs-sites.com/video-page*",
|
|
"https://www-catapult.app/video-page*"
|
|
],
|
|
url: "https://www.catapult.app/_hcms/api/video/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "CatBoat",
|
|
provider_url: "http://img.catbo.at/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://img.catbo.at/*"
|
|
],
|
|
url: "http://img.catbo.at/oembed.json",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Ceros",
|
|
provider_url: "http://www.ceros.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://view.ceros.com/*"
|
|
],
|
|
url: "http://view.ceros.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "ChartBlocks",
|
|
provider_url: "http://www.chartblocks.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://public.chartblocks.com/c/*"
|
|
],
|
|
url: "http://embed.chartblocks.com/1.0/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "chirbit.com",
|
|
provider_url: "http://www.chirbit.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://chirb.it/*"
|
|
],
|
|
url: "http://chirb.it/oembed.{format}",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "CHROCO",
|
|
provider_url: "https://chroco.ooo/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://chroco.ooo/mypage/*",
|
|
"https://chroco.ooo/story/*"
|
|
],
|
|
url: "https://chroco.ooo/embed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "CircuitLab",
|
|
provider_url: "https://www.circuitlab.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.circuitlab.com/circuit/*"
|
|
],
|
|
url: "https://www.circuitlab.com/circuit/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Clipland",
|
|
provider_url: "http://www.clipland.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://www.clipland.com/v/*",
|
|
"https://www.clipland.com/v/*"
|
|
],
|
|
url: "https://www.clipland.com/api/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Clyp",
|
|
provider_url: "http://clyp.it/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://clyp.it/*",
|
|
"http://clyp.it/playlist/*"
|
|
],
|
|
url: "http://api.clyp.it/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "CoCo Corp",
|
|
provider_url: "https://ilovecoco.video",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://app.ilovecoco.video/*/embed"
|
|
],
|
|
url: "https://app.ilovecoco.video/api/oembed.{format}",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "CodeHS",
|
|
provider_url: "http://www.codehs.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://codehs.com/editor/share_abacus/*"
|
|
],
|
|
url: "https://codehs.com/api/sharedprogram/*/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "CodePen",
|
|
provider_url: "https://codepen.io",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://codepen.io/*",
|
|
"https://codepen.io/*"
|
|
],
|
|
url: "https://codepen.io/api/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Codepoints",
|
|
provider_url: "https://codepoints.net",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://codepoints.net/*",
|
|
"https://codepoints.net/*",
|
|
"http://www.codepoints.net/*",
|
|
"https://www.codepoints.net/*"
|
|
],
|
|
url: "https://codepoints.net/api/v1/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "CodeSandbox",
|
|
provider_url: "https://codesandbox.io",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://codesandbox.io/s/*",
|
|
"https://codesandbox.io/embed/*"
|
|
],
|
|
url: "https://codesandbox.io/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "CollegeHumor",
|
|
provider_url: "http://www.collegehumor.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://www.collegehumor.com/video/*"
|
|
],
|
|
url: "http://www.collegehumor.com/oembed.{format}",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Commaful",
|
|
provider_url: "https://commaful.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://commaful.com/play/*"
|
|
],
|
|
url: "https://commaful.com/api/oembed/"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Coub",
|
|
provider_url: "http://coub.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://coub.com/view/*",
|
|
"http://coub.com/embed/*"
|
|
],
|
|
url: "http://coub.com/api/oembed.{format}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Crowd Ranking",
|
|
provider_url: "http://crowdranking.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://crowdranking.com/*/*"
|
|
],
|
|
url: "http://crowdranking.com/api/oembed.{format}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Cueup DJ Booking",
|
|
provider_url: "https://cueup.io",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://cueup.io/user/*/sounds/*"
|
|
],
|
|
url: "https://gql.cueup.io/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Curated",
|
|
provider_url: "https://curated.co/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.curated.co/*"
|
|
],
|
|
url: "https://api.curated.co/oembed",
|
|
formats: [
|
|
"json"
|
|
],
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "CustomerDB",
|
|
provider_url: "http://customerdb.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://app.customerdb.com/share/*"
|
|
],
|
|
url: "https://app.customerdb.com/embed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Dailymotion",
|
|
provider_url: "https://www.dailymotion.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.dailymotion.com/video/*"
|
|
],
|
|
url: "https://www.dailymotion.com/services/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "DALEXNI",
|
|
provider_url: "https://dalexni.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://dalexni.com/i/*"
|
|
],
|
|
url: "https://dalexni.com/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Datawrapper",
|
|
provider_url: "http://www.datawrapper.de",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://datawrapper.dwcdn.net/*"
|
|
],
|
|
url: "https://api.datawrapper.de/v3/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Deseret News",
|
|
provider_url: "https://www.deseret.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.deseret.com/*"
|
|
],
|
|
url: "https://embed.deseret.com/"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Deviantart.com",
|
|
provider_url: "http://www.deviantart.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://*.deviantart.com/art/*",
|
|
"http://*.deviantart.com/*#/d*",
|
|
"http://fav.me/*",
|
|
"http://sta.sh/*",
|
|
"https://*.deviantart.com/art/*",
|
|
"https://*.deviantart.com/*/art/*",
|
|
'https://sta.sh/*",',
|
|
'https://*.deviantart.com/*#/d*"'
|
|
],
|
|
url: "http://backend.deviantart.com/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Didacte",
|
|
provider_url: "https://www.didacte.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.didacte.com/a/course/*"
|
|
],
|
|
url: "https://*.didacte.com/cards/oembed",
|
|
discovery: true,
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Digiteka",
|
|
provider_url: "https://www.ultimedia.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.ultimedia.com/central/video/edit/id/*/topic_id/*/",
|
|
"https://www.ultimedia.com/default/index/videogeneric/id/*/showtitle/1/viewnc/1",
|
|
"https://www.ultimedia.com/default/index/videogeneric/id/*"
|
|
],
|
|
url: "https://www.ultimedia.com/api/search/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "DocDroid",
|
|
provider_url: "https://www.docdroid.net/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.docdroid.net/*",
|
|
"http://*.docdroid.net/*",
|
|
"https://docdro.id/*",
|
|
"http://docdro.id/*",
|
|
"https://*.docdroid.com/*",
|
|
"http://*.docdroid.com/*"
|
|
],
|
|
url: "https://www.docdroid.net/api/oembed",
|
|
formats: [
|
|
"json"
|
|
],
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Dotsub",
|
|
provider_url: "http://dotsub.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://dotsub.com/view/*"
|
|
],
|
|
url: "http://dotsub.com/services/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "DTube",
|
|
provider_url: "https://d.tube/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://d.tube/v/*"
|
|
],
|
|
url: "https://api.d.tube/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "eduMedia",
|
|
provider_url: "https://www.edumedia-sciences.com/",
|
|
endpoints: [
|
|
{
|
|
url: "https://www.edumedia-sciences.com/oembed.json",
|
|
discovery: true
|
|
},
|
|
{
|
|
url: "https://www.edumedia-sciences.com/oembed.xml",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "EgliseInfo",
|
|
provider_url: "http://egliseinfo.catholique.fr/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://egliseinfo.catholique.fr/*"
|
|
],
|
|
url: "http://egliseinfo.catholique.fr/api/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Embedery",
|
|
provider_url: "https://embedery.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://embedery.com/widget/*"
|
|
],
|
|
url: "https://embedery.com/api/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Embedly",
|
|
provider_url: "http://api.embed.ly/",
|
|
endpoints: [
|
|
{
|
|
url: "http://api.embed.ly/1/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Enystre Music",
|
|
provider_url: "https://music.enystre.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://music.enystre.com/lyrics/*"
|
|
],
|
|
url: "https://music.enystre.com/oembed",
|
|
formats: [
|
|
"json",
|
|
"xml"
|
|
],
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Ethfiddle",
|
|
provider_url: "https://www.ethfiddle.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://ethfiddle.com/*"
|
|
],
|
|
url: "https://ethfiddle.com/services/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "EventLive",
|
|
provider_url: "https://eventlive.pro",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://evt.live/*",
|
|
"https://evt.live/*/*",
|
|
"https://live.eventlive.pro/*",
|
|
"https://live.eventlive.pro/*/*"
|
|
],
|
|
url: "https://evt.live/api/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Ex.Co",
|
|
provider_url: "https://ex.co",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://app.ex.co/stories/*",
|
|
"https://www.playbuzz.com/*"
|
|
],
|
|
url: "https://oembed.ex.co/item",
|
|
discovery: false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Eyrie",
|
|
provider_url: "https://eyrie.io/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://eyrie.io/board/*",
|
|
"https://eyrie.io/sparkfun/*"
|
|
],
|
|
url: "https://eyrie.io/v1/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Facebook",
|
|
provider_url: "https://www.facebook.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.facebook.com/*/posts/*",
|
|
"https://www.facebook.com/*/activity/*",
|
|
"https://www.facebook.com/*/photos/*",
|
|
"https://www.facebook.com/photo.php?fbid=*",
|
|
"https://www.facebook.com/photos/*",
|
|
"https://www.facebook.com/permalink.php?story_fbid=*",
|
|
"https://www.facebook.com/media/set?set=*",
|
|
"https://www.facebook.com/questions/*",
|
|
"https://www.facebook.com/notes/*/*/*"
|
|
],
|
|
url: "https://graph.facebook.com/v10.0/oembed_post",
|
|
discovery: false
|
|
},
|
|
{
|
|
schemes: [
|
|
"https://www.facebook.com/*/videos/*",
|
|
"https://www.facebook.com/video.php?id=*",
|
|
"https://www.facebook.com/video.php?v=*"
|
|
],
|
|
url: "https://graph.facebook.com/v10.0/oembed_video",
|
|
discovery: false
|
|
},
|
|
{
|
|
schemes: [
|
|
"https://www.facebook.com/*"
|
|
],
|
|
url: "https://graph.facebook.com/v10.0/oembed_page",
|
|
discovery: false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Fader",
|
|
provider_url: "https://app.getfader.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://app.getfader.com/projects/*/publish"
|
|
],
|
|
url: "https://app.getfader.com/api/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Faithlife TV",
|
|
provider_url: "https://faithlifetv.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://faithlifetv.com/items/*",
|
|
"https://faithlifetv.com/items/resource/*/*",
|
|
"https://faithlifetv.com/media/*",
|
|
"https://faithlifetv.com/media/assets/*",
|
|
"https://faithlifetv.com/media/resource/*/*"
|
|
],
|
|
url: "https://faithlifetv.com/api/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Firework",
|
|
provider_url: "https://fireworktv.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.fireworktv.com/*",
|
|
"https://*.fireworktv.com/embed/*/v/*"
|
|
],
|
|
url: "https://www.fireworktv.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "FITE",
|
|
provider_url: "https://www.fite.tv/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.fite.tv/watch/*"
|
|
],
|
|
url: "https://www.fite.tv/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Flat",
|
|
provider_url: "https://flat.io",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://flat.io/score/*",
|
|
"https://*.flat.io/score/*"
|
|
],
|
|
url: "https://flat.io/services/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Flickr",
|
|
provider_url: "https://www.flickr.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://*.flickr.com/photos/*",
|
|
"http://flic.kr/p/*",
|
|
"https://*.flickr.com/photos/*",
|
|
"https://*.*.flickr.com/*/*",
|
|
"http://*.*.flickr.com/*/*",
|
|
"https://flic.kr/p/*"
|
|
],
|
|
url: "https://www.flickr.com/services/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Flourish",
|
|
provider_url: "https://flourish.studio/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://public.flourish.studio/visualisation/*",
|
|
"https://public.flourish.studio/story/*"
|
|
],
|
|
url: "https://app.flourish.studio/api/v1/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "FOX SPORTS Australia",
|
|
provider_url: "http://www.foxsports.com.au",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://fiso.foxsports.com.au/isomorphic-widget/*",
|
|
"https://fiso.foxsports.com.au/isomorphic-widget/*"
|
|
],
|
|
url: "https://fiso.foxsports.com.au/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "FrameBuzz",
|
|
provider_url: "https://framebuzz.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://framebuzz.com/v/*",
|
|
"https://framebuzz.com/v/*"
|
|
],
|
|
url: "https://framebuzz.com/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Framer",
|
|
provider_url: "https://www.framer.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://framer.com/share/*",
|
|
"https://framer.com/embed/*"
|
|
],
|
|
url: "https://api.framer.com/web/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Geograph Britain and Ireland",
|
|
provider_url: "https://www.geograph.org.uk/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://*.geograph.org.uk/*",
|
|
"http://*.geograph.co.uk/*",
|
|
"http://*.geograph.ie/*",
|
|
"http://*.wikimedia.org/*_geograph.org.uk_*"
|
|
],
|
|
url: "http://api.geograph.org.uk/api/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Geograph Channel Islands",
|
|
provider_url: "http://channel-islands.geograph.org/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://*.geograph.org.gg/*",
|
|
"http://*.geograph.org.je/*",
|
|
"http://channel-islands.geograph.org/*",
|
|
"http://channel-islands.geographs.org/*",
|
|
"http://*.channel.geographs.org/*"
|
|
],
|
|
url: "http://www.geograph.org.gg/api/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Geograph Germany",
|
|
provider_url: "http://geo-en.hlipp.de/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://geo-en.hlipp.de/*",
|
|
"http://geo.hlipp.de/*",
|
|
"http://germany.geograph.org/*"
|
|
],
|
|
url: "http://geo.hlipp.de/restapi.php/api/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Getty Images",
|
|
provider_url: "http://www.gettyimages.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://gty.im/*"
|
|
],
|
|
url: "http://embed.gettyimages.com/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Gfycat",
|
|
provider_url: "https://gfycat.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://gfycat.com/*",
|
|
"http://www.gfycat.com/*",
|
|
"https://gfycat.com/*",
|
|
"https://www.gfycat.com/*"
|
|
],
|
|
url: "https://api.gfycat.com/v1/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Gifnote",
|
|
provider_url: "https://www.gifnote.com/",
|
|
endpoints: [
|
|
{
|
|
url: "https://www.gifnote.com/services/oembed",
|
|
schemes: [
|
|
"https://www.gifnote.com/play/*"
|
|
],
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "GIPHY",
|
|
provider_url: "https://giphy.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://giphy.com/gifs/*",
|
|
"https://giphy.com/clips/*",
|
|
"http://gph.is/*",
|
|
"https://media.giphy.com/media/*/giphy.gif"
|
|
],
|
|
url: "https://giphy.com/services/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "GloriaTV",
|
|
provider_url: "https://gloria.tv/",
|
|
endpoints: [
|
|
{
|
|
url: "https://gloria.tv/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Gong",
|
|
provider_url: "https://www.gong.io/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://app.gong.io/call?id=*"
|
|
],
|
|
url: "https://app.gong.io/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Grain",
|
|
provider_url: "https://grain.co",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://grain.co/highlight/*"
|
|
],
|
|
url: "http://api.grain.co/_/api/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "GT Channel",
|
|
provider_url: "https://gtchannel.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://gtchannel.com/watch/*"
|
|
],
|
|
url: "https://api.luminery.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Gyazo",
|
|
provider_url: "https://gyazo.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://gyazo.com/*"
|
|
],
|
|
url: "https://api.gyazo.com/api/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "hearthis.at",
|
|
provider_url: "https://hearthis.at/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://hearthis.at/*/*/",
|
|
"https://hearthis.at/*/set/*/"
|
|
],
|
|
url: "https://hearthis.at/oembed/?format=json",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "hihaho",
|
|
provider_url: "https://www.hihaho.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://player.hihaho.com/*"
|
|
],
|
|
url: "https://player.hihaho.com/services/oembed",
|
|
formats: [
|
|
"json",
|
|
"xml"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "HippoVideo",
|
|
provider_url: "https://hippovideo.io",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://*.hippovideo.io/*",
|
|
"https://*.hippovideo.io/*"
|
|
],
|
|
url: "https://www.hippovideo.io/services/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Homey",
|
|
provider_url: "https://homey.app",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://homey.app/f/*",
|
|
"https://homey.app/*/flow/*"
|
|
],
|
|
url: "https://homey.app/api/oembed/flow",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "HuffDuffer",
|
|
provider_url: "http://huffduffer.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://huffduffer.com/*/*"
|
|
],
|
|
url: "http://huffduffer.com/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Hulu",
|
|
provider_url: "http://www.hulu.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://www.hulu.com/watch/*"
|
|
],
|
|
url: "http://www.hulu.com/api/oembed.{format}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Idomoo",
|
|
provider_url: "https://idomoo.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.idomoo.com/*"
|
|
],
|
|
url: "https://oembed.idomoo.com/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "iFixit",
|
|
provider_url: "http://www.iFixit.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://www.ifixit.com/Guide/View/*"
|
|
],
|
|
url: "http://www.ifixit.com/Embed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "IFTTT",
|
|
provider_url: "http://www.ifttt.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://ifttt.com/recipes/*"
|
|
],
|
|
url: "http://www.ifttt.com/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "iHeartRadio",
|
|
provider_url: "https://www.iheart.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.iheart.com/podcast/*/*"
|
|
],
|
|
url: "https://www.iheart.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Indaco",
|
|
provider_url: "https://player.indacolive.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://player.indacolive.com/player/jwp/clients/*"
|
|
],
|
|
url: "https://player.indacolive.com/services/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Infogram",
|
|
provider_url: "https://infogram.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://infogram.com/*"
|
|
],
|
|
url: "https://infogram.com/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Infoveave",
|
|
provider_url: "https://infoveave.net/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.infoveave.net/E/*",
|
|
"https://*.infoveave.net/P/*"
|
|
],
|
|
url: "https://infoveave.net/services/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Injurymap",
|
|
provider_url: "https://www.injurymap.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.injurymap.com/exercises/*"
|
|
],
|
|
url: "https://www.injurymap.com/services/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Inoreader",
|
|
provider_url: "https://www.inoreader.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.inoreader.com/oembed/"
|
|
],
|
|
url: "https://www.inoreader.com/oembed/api/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "inphood",
|
|
provider_url: "http://inphood.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://*.inphood.com/*"
|
|
],
|
|
url: "http://api.inphood.com/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Instagram",
|
|
provider_url: "https://instagram.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://instagram.com/*/p/*,",
|
|
"http://www.instagram.com/*/p/*,",
|
|
"https://instagram.com/*/p/*,",
|
|
"https://www.instagram.com/*/p/*,",
|
|
"http://instagram.com/p/*",
|
|
"http://instagr.am/p/*",
|
|
"http://www.instagram.com/p/*",
|
|
"http://www.instagr.am/p/*",
|
|
"https://instagram.com/p/*",
|
|
"https://instagr.am/p/*",
|
|
"https://www.instagram.com/p/*",
|
|
"https://www.instagr.am/p/*",
|
|
"http://instagram.com/tv/*",
|
|
"http://instagr.am/tv/*",
|
|
"http://www.instagram.com/tv/*",
|
|
"http://www.instagr.am/tv/*",
|
|
"https://instagram.com/tv/*",
|
|
"https://instagr.am/tv/*",
|
|
"https://www.instagram.com/tv/*",
|
|
"https://www.instagr.am/tv/*",
|
|
"http://www.instagram.com/reel/*",
|
|
"https://www.instagram.com/reel/*",
|
|
"http://instagram.com/reel/*",
|
|
"https://instagram.com/reel/*",
|
|
"http://instagr.am/reel/*",
|
|
"https://instagr.am/reel/*"
|
|
],
|
|
url: "https://graph.facebook.com/v10.0/instagram_oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Insticator Inc",
|
|
provider_url: "https://www.insticator.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://ppa.insticator.com/embed-unit/*"
|
|
],
|
|
url: "https://www.insticator.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Issuu",
|
|
provider_url: "https://issuu.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://issuu.com/*/docs/*"
|
|
],
|
|
url: "https://issuu.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Jovian",
|
|
provider_url: "https://jovian.ai/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://jovian.ml/*",
|
|
"https://jovian.ml/viewer*",
|
|
"https://*.jovian.ml/*",
|
|
"https://jovian.ai/*",
|
|
"https://jovian.ai/viewer*",
|
|
"https://*.jovian.ai/*"
|
|
],
|
|
url: "https://api.jovian.ai/oembed.json",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "KakaoTv",
|
|
provider_url: "https://tv.kakao.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://tv.kakao.com/channel/*/cliplink/*",
|
|
"https://tv.kakao.com/m/channel/*/cliplink/*",
|
|
"https://tv.kakao.com/channel/v/*",
|
|
"https://tv.kakao.com/channel/*/livelink/*",
|
|
"https://tv.kakao.com/m/channel/*/livelink/*",
|
|
"https://tv.kakao.com/channel/l/*"
|
|
],
|
|
url: "https://tv.kakao.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Kickstarter",
|
|
provider_url: "http://www.kickstarter.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://www.kickstarter.com/projects/*"
|
|
],
|
|
url: "http://www.kickstarter.com/services/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Kidoju",
|
|
provider_url: "https://www.kidoju.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.kidoju.com/en/x/*/*",
|
|
"https://www.kidoju.com/fr/x/*/*"
|
|
],
|
|
url: "https://www.kidoju.com/api/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Kirim.Email",
|
|
provider_url: "https://kirim.email/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://halaman.email/form/*",
|
|
"https://aplikasi.kirim.email/form/*"
|
|
],
|
|
url: "https://halaman.email/service/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Kit",
|
|
provider_url: "https://kit.co/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://kit.co/*/*",
|
|
"https://kit.co/*/*"
|
|
],
|
|
url: "https://embed.kit.co/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Kitchenbowl",
|
|
provider_url: "http://www.kitchenbowl.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://www.kitchenbowl.com/recipe/*"
|
|
],
|
|
url: "http://www.kitchenbowl.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "kmdr",
|
|
provider_url: "https://kmdr.sh",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://app.kmdr.sh/h/*",
|
|
"https://app.kmdr.sh/history/*"
|
|
],
|
|
url: "https://api.kmdr.sh/services/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Knacki",
|
|
provider_url: "http://jdr.knacki.info",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://jdr.knacki.info/meuh/*",
|
|
"https://jdr.knacki.info/meuh/*"
|
|
],
|
|
url: "https://jdr.knacki.info/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Knowledge Pad",
|
|
provider_url: "https://knowledgepad.co/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://knowledgepad.co/#/knowledge/*"
|
|
],
|
|
url: "https://api.spoonacular.com/knowledge/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Kooapp",
|
|
provider_url: "https://kooapp.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.kooapp.com/koo/",
|
|
"http://*.kooapp.com/koo/"
|
|
],
|
|
url: "https://embed-stage.kooapp.com/services/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "LearningApps.org",
|
|
provider_url: "http://learningapps.org/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://learningapps.org/*"
|
|
],
|
|
url: "http://learningapps.org/oembed.php",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "LeMans.Pod",
|
|
provider_url: "https://umotion-test.univ-lemans.fr/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://umotion-test.univ-lemans.fr/video/*"
|
|
],
|
|
url: "https://umotion-test.univ-lemans.fr/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Lille.Pod",
|
|
provider_url: "https://pod.univ-lille.fr/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://pod.univ-lille.fr/video/*"
|
|
],
|
|
url: "https://pod.univ-lille.fr/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Livestream",
|
|
provider_url: "https://livestream.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://livestream.com/accounts/*/events/*",
|
|
"https://livestream.com/accounts/*/events/*/videos/*",
|
|
"https://livestream.com/*/events/*",
|
|
"https://livestream.com/*/events/*/videos/*",
|
|
"https://livestream.com/*/*",
|
|
"https://livestream.com/*/*/videos/*"
|
|
],
|
|
url: "https://livestream.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "LottieFiles",
|
|
provider_url: "https://lottiefiles.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://lottiefiles.com/*",
|
|
"https://*.lottiefiles.com/*"
|
|
],
|
|
url: "https://embed.lottiefiles.com/oembed",
|
|
discovery: true,
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Ludus",
|
|
provider_url: "https://ludus.one",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://app.ludus.one/*"
|
|
],
|
|
url: "https://app.ludus.one/oembed",
|
|
discovery: true,
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Lumiere",
|
|
provider_url: "https://latd.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.lumiere.is/v/*"
|
|
],
|
|
url: "https://admin.lumiere.is/api/services/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "MathEmbed",
|
|
provider_url: "http://mathembed.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://mathembed.com/latex?inputText=*",
|
|
"http://mathembed.com/latex?inputText=*"
|
|
],
|
|
url: "http://mathembed.com/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Matterport",
|
|
provider_url: "https://matterport.com/",
|
|
endpoints: [
|
|
{
|
|
url: "https://my.matterport.com/api/v1/models/oembed/",
|
|
discovery: true,
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "me.me",
|
|
provider_url: "https://me.me/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://me.me/i/*"
|
|
],
|
|
url: "https://me.me/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "MediaLab",
|
|
provider_url: "https://www.medialab.co/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.medialab.app/share/watch/*",
|
|
"https://*.medialab.co/share/watch/*",
|
|
"https://*.medialab.app/share/social/*",
|
|
"https://*.medialab.co/share/social/*",
|
|
"https://*.medialab.app/share/embed/*",
|
|
"https://*.medialab.co/share/embed/*"
|
|
],
|
|
url: "https://*.medialab.(co|app)/api/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Medienarchiv der K\xFCnste - Z\xFCrcher Hochschule der K\xFCnste",
|
|
provider_url: "https://medienarchiv.zhdk.ch/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://medienarchiv.zhdk.ch/entries/*"
|
|
],
|
|
url: "https://medienarchiv.zhdk.ch/oembed.{format}",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Mermaid Ink",
|
|
provider_url: "https://mermaid.ink",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://mermaid.ink/img/*",
|
|
"https://mermaid.ink/svg/*"
|
|
],
|
|
url: "https://mermaid.ink/services/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Microsoft Stream",
|
|
provider_url: "https://stream.microsoft.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.microsoftstream.com/video/*",
|
|
"https://*.microsoftstream.com/channel/*"
|
|
],
|
|
url: "https://web.microsoftstream.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Minerva",
|
|
provider_url: "https://www.minervaknows.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.minervaknows.com/featured-recipes/*",
|
|
"https://www.minervaknows.com/themes/*",
|
|
"https://www.minervaknows.com/themes/*/recipes/*",
|
|
"https://app.minervaknows.com/recipes/*",
|
|
"https://app.minervaknows.com/recipes/*/follow"
|
|
],
|
|
url: "https://oembed.minervaknows.com",
|
|
formats: [
|
|
"json"
|
|
],
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "MixCloud",
|
|
provider_url: "https://mixcloud.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://www.mixcloud.com/*/*/",
|
|
"https://www.mixcloud.com/*/*/"
|
|
],
|
|
url: "https://www.mixcloud.com/oembed/"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Moby Picture",
|
|
provider_url: "http://www.mobypicture.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://www.mobypicture.com/user/*/view/*",
|
|
"http://moby.to/*"
|
|
],
|
|
url: "http://api.mobypicture.com/oEmbed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Music Box Maniacs",
|
|
provider_url: "https://musicboxmaniacs.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://musicboxmaniacs.com/explore/melody/*"
|
|
],
|
|
url: "https://musicboxmaniacs.com/embed/",
|
|
formats: [
|
|
"json"
|
|
],
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "myBeweeg",
|
|
provider_url: "https://mybeweeg.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://mybeweeg.com/w/*"
|
|
],
|
|
url: "https://mybeweeg.com/services/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Namchey",
|
|
provider_url: "https://namchey.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://namchey.com/embeds/*"
|
|
],
|
|
url: "https://namchey.com/api/oembed",
|
|
formats: [
|
|
"json",
|
|
"xml"
|
|
],
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "nanoo.tv",
|
|
provider_url: "https://www.nanoo.tv/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://*.nanoo.tv/link/*",
|
|
"http://nanoo.tv/link/*",
|
|
"http://*.nanoo.pro/link/*",
|
|
"http://nanoo.pro/link/*",
|
|
"https://*.nanoo.tv/link/*",
|
|
"https://nanoo.tv/link/*",
|
|
"https://*.nanoo.pro/link/*",
|
|
"https://nanoo.pro/link/*",
|
|
"http://media.zhdk.ch/signatur/*",
|
|
"http://new.media.zhdk.ch/signatur/*",
|
|
"https://media.zhdk.ch/signatur/*",
|
|
"https://new.media.zhdk.ch/signatur/*"
|
|
],
|
|
url: "https://www.nanoo.tv/services/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Nasjonalbiblioteket",
|
|
provider_url: "https://www.nb.no/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.nb.no/items/*"
|
|
],
|
|
url: "https://api.nb.no/catalog/v1/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Natural Atlas",
|
|
provider_url: "https://naturalatlas.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://naturalatlas.com/*",
|
|
"https://naturalatlas.com/*/*",
|
|
"https://naturalatlas.com/*/*/*",
|
|
"https://naturalatlas.com/*/*/*/*"
|
|
],
|
|
url: "https://naturalatlas.com/oembed.{format}",
|
|
discovery: true,
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "nfb.ca",
|
|
provider_url: "http://www.nfb.ca/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://*.nfb.ca/film/*"
|
|
],
|
|
url: "http://www.nfb.ca/remote/services/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "NFTNDX.IO",
|
|
provider_url: "https://www.nftndx.io/",
|
|
endpoints: [
|
|
{
|
|
url: "https://www.nftndx.io/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "NoPaste",
|
|
provider_url: "https://nopaste.ml",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://nopaste.ml/*"
|
|
],
|
|
url: "https://oembed.nopaste.ml",
|
|
discovery: false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Observable",
|
|
provider_url: "https://observablehq.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://observablehq.com/@*/*",
|
|
"https://observablehq.com/d/*",
|
|
"https://observablehq.com/embed/*"
|
|
],
|
|
url: "https://api.observablehq.com/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Odds.com.au",
|
|
provider_url: "https://www.odds.com.au",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.odds.com.au/*",
|
|
"https://odds.com.au/*"
|
|
],
|
|
url: "https://www.odds.com.au/api/oembed/"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Odesli (formerly Songlink)",
|
|
provider_url: "https://odesli.co",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://song.link/*",
|
|
"https://album.link/*",
|
|
"https://artist.link/*",
|
|
"https://playlist.link/*",
|
|
"https://pods.link/*",
|
|
"https://mylink.page/*",
|
|
"https://odesli.co/*"
|
|
],
|
|
url: "https://song.link/oembed",
|
|
formats: [
|
|
"json"
|
|
],
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Odysee",
|
|
provider_url: "https://odysee.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://odysee.com/*/*",
|
|
"https://odysee.com/*"
|
|
],
|
|
url: "https://odysee.com/$/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Official FM",
|
|
provider_url: "http://official.fm",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://official.fm/tracks/*",
|
|
"http://official.fm/playlists/*"
|
|
],
|
|
url: "http://official.fm/services/oembed.{format}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Omniscope",
|
|
provider_url: "https://omniscope.me/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://omniscope.me/*"
|
|
],
|
|
url: "https://omniscope.me/_global_/oembed/json",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Omny Studio",
|
|
provider_url: "https://omnystudio.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://omny.fm/shows/*"
|
|
],
|
|
url: "https://omny.fm/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Ora TV",
|
|
provider_url: "http://www.ora.tv/",
|
|
endpoints: [
|
|
{
|
|
discovery: true,
|
|
url: "https://www.ora.tv/oembed/*?format={format}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Orbitvu",
|
|
provider_url: "https://orbitvu.co",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://orbitvu.co/001/*/ov3601/view",
|
|
"https://orbitvu.co/001/*/ov3601/*/view",
|
|
"https://orbitvu.co/001/*/ov3602/*/view",
|
|
"https://orbitvu.co/001/*/2/orbittour/*/view",
|
|
"https://orbitvu.co/001/*/1/2/orbittour/*/view",
|
|
"http://orbitvu.co/001/*/ov3601/view",
|
|
"http://orbitvu.co/001/*/ov3601/*/view",
|
|
"http://orbitvu.co/001/*/ov3602/*/view",
|
|
"http://orbitvu.co/001/*/2/orbittour/*/view",
|
|
"http://orbitvu.co/001/*/1/2/orbittour/*/view"
|
|
],
|
|
url: "http://orbitvu.co/service/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Outplayed.tv",
|
|
provider_url: "https://outplayed.tv/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://outplayed.tv/media/*"
|
|
],
|
|
url: "https://outplayed.tv/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Overflow",
|
|
provider_url: "https://overflow.io",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://overflow.io/s/*",
|
|
"https://overflow.io/embed/*"
|
|
],
|
|
url: "https://overflow.io/services/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "OZ",
|
|
provider_url: "https://www.oz.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.oz.com/*/video/*"
|
|
],
|
|
url: "https://core.oz.com/oembed",
|
|
formats: [
|
|
"json",
|
|
"xml"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Padlet",
|
|
provider_url: "https://padlet.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://padlet.com/*"
|
|
],
|
|
url: "https://padlet.com/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Pastery",
|
|
provider_url: "https://www.pastery.net",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://pastery.net/*",
|
|
"https://pastery.net/*",
|
|
"http://www.pastery.net/*",
|
|
"https://www.pastery.net/*"
|
|
],
|
|
url: "https://www.pastery.net/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "PingVP",
|
|
provider_url: "https://www.pingvp.com/",
|
|
endpoints: [
|
|
{
|
|
url: "https://beta.pingvp.com.kpnis.nl/p/oembed.php",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Pinpoll",
|
|
provider_url: "https://www.pinpoll.com/products/tools",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://tools.pinpoll.com/embed/*"
|
|
],
|
|
url: "https://tools.pinpoll.com/oembed",
|
|
discovery: true,
|
|
formats: [
|
|
"json",
|
|
"xml"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Pinterest",
|
|
provider_url: "https://www.pinterest.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.pinterest.com/*"
|
|
],
|
|
url: "https://www.pinterest.com/oembed.json",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "PitchHub",
|
|
provider_url: "https://www.pitchhub.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.pitchhub.com/en/public/player/*"
|
|
],
|
|
url: "https://*.pitchhub.com.com/en/public/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Pixdor",
|
|
provider_url: "http://www.pixdor.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://store.pixdor.com/place-marker-widget/*/show",
|
|
"https://store.pixdor.com/map/*/show"
|
|
],
|
|
url: "https://store.pixdor.com/oembed",
|
|
formats: [
|
|
"json",
|
|
"xml"
|
|
],
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Podbean",
|
|
provider_url: "http://podbean.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.podbean.com/e/*",
|
|
"http://*.podbean.com/e/*"
|
|
],
|
|
url: "https://api.podbean.com/v1/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Poll Daddy",
|
|
provider_url: "http://polldaddy.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://*.polldaddy.com/s/*",
|
|
"http://*.polldaddy.com/poll/*",
|
|
"http://*.polldaddy.com/ratings/*"
|
|
],
|
|
url: "http://polldaddy.com/oembed/"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Portfolium",
|
|
provider_url: "https://portfolium.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://portfolium.com/entry/*"
|
|
],
|
|
url: "https://api.portfolium.com/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Present",
|
|
provider_url: "https://present.do",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://present.do/decks/*"
|
|
],
|
|
url: "https://gateway.cobalt.run/present/decks/oembed",
|
|
discovery: true,
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Prezi Video",
|
|
provider_url: "https://prezi.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://prezi.com/v/*",
|
|
"https://*.prezi.com/v/*"
|
|
],
|
|
url: "https://prezi.com/v/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Quiz.biz",
|
|
provider_url: "http://www.quiz.biz/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://www.quiz.biz/quizz-*.html"
|
|
],
|
|
url: "http://www.quiz.biz/api/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Quizz.biz",
|
|
provider_url: "http://www.quizz.biz/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://www.quizz.biz/quizz-*.html"
|
|
],
|
|
url: "http://www.quizz.biz/api/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "RadioPublic",
|
|
provider_url: "https://radiopublic.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://play.radiopublic.com/*",
|
|
"https://radiopublic.com/*",
|
|
"https://www.radiopublic.com/*",
|
|
"http://play.radiopublic.com/*",
|
|
"http://radiopublic.com/*",
|
|
"http://www.radiopublic.com/*",
|
|
"https://*.radiopublic.com/*'"
|
|
],
|
|
url: "https://oembed.radiopublic.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Raindrop",
|
|
provider_url: "https://raindrop.io",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://raindrop.io/*",
|
|
"https://raindrop.io/*/*",
|
|
"https://raindrop.io/*/*/*",
|
|
"https://raindrop.io/*/*/*/*"
|
|
],
|
|
url: "https://pub.raindrop.io/api/oembed",
|
|
discovery: true,
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "rcvis",
|
|
provider_url: "https://www.rcvis.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.rcvis.com/v/*",
|
|
"https://www.rcvis.com/visualize=*",
|
|
"https://www.rcvis.com/ve/*",
|
|
"https://www.rcvis.com/visualizeEmbedded=*"
|
|
],
|
|
url: "https://animatron.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Reddit",
|
|
provider_url: "https://reddit.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://reddit.com/r/*/comments/*/*",
|
|
"https://www.reddit.com/r/*/comments/*/*"
|
|
],
|
|
url: "https://www.reddit.com/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "ReleaseWire",
|
|
provider_url: "http://www.releasewire.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://rwire.com/*"
|
|
],
|
|
url: "http://publisher.releasewire.com/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Replit",
|
|
provider_url: "https://replit.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://repl.it/@*/*",
|
|
"https://replit.com/@*/*"
|
|
],
|
|
url: "https://replit.com/data/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "ReverbNation",
|
|
provider_url: "https://www.reverbnation.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.reverbnation.com/*",
|
|
"https://www.reverbnation.com/*/songs/*"
|
|
],
|
|
url: "https://www.reverbnation.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Roomshare",
|
|
provider_url: "http://roomshare.jp",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://roomshare.jp/post/*",
|
|
"http://roomshare.jp/en/post/*"
|
|
],
|
|
url: "http://roomshare.jp/en/oembed.{format}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "RoosterTeeth",
|
|
provider_url: "https://roosterteeth.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://roosterteeth.com/*"
|
|
],
|
|
url: "https://roosterteeth.com/oembed",
|
|
formats: [
|
|
"json"
|
|
],
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Rumble",
|
|
provider_url: "https://rumble.com/",
|
|
endpoints: [
|
|
{
|
|
url: "https://rumble.com/api/Media/oembed.{format}",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Runkit",
|
|
provider_url: "https://runkit.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://embed.runkit.com/*,",
|
|
"https://embed.runkit.com/*,"
|
|
],
|
|
url: "https://embed.runkit.com/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Saooti",
|
|
provider_url: "https://octopus.saooti.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://octopus.saooti.com/main/pub/podcast/*"
|
|
],
|
|
url: "https://octopus.saooti.com/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Sapo Videos",
|
|
provider_url: "http://videos.sapo.pt",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://videos.sapo.pt/*"
|
|
],
|
|
url: "http://videos.sapo.pt/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Screen9",
|
|
provider_url: "http://www.screen9.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://console.screen9.com/*",
|
|
"https://*.screen9.tv/*"
|
|
],
|
|
url: "https://api.screen9.com/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Screencast.com",
|
|
provider_url: "http://www.screencast.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://www.screencast.com/*"
|
|
],
|
|
url: "https://api.screencast.com/external/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Screenr",
|
|
provider_url: "http://www.screenr.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://www.screenr.com/*/"
|
|
],
|
|
url: "http://www.screenr.com/api/oembed.{format}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "ScribbleMaps",
|
|
provider_url: "https://scribblemaps.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://www.scribblemaps.com/maps/view/*",
|
|
"https://www.scribblemaps.com/maps/view/*",
|
|
"http://scribblemaps.com/maps/view/*",
|
|
"https://scribblemaps.com/maps/view/*"
|
|
],
|
|
url: "https://scribblemaps.com/api/services/oembed.{format}",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Scribd",
|
|
provider_url: "http://www.scribd.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://www.scribd.com/doc/*"
|
|
],
|
|
url: "http://www.scribd.com/services/oembed/"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "SendtoNews",
|
|
provider_url: "http://www.sendtonews.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://embed.sendtonews.com/oembed/*"
|
|
],
|
|
url: "https://embed.sendtonews.com/services/oembed",
|
|
discovery: true,
|
|
formats: [
|
|
"json",
|
|
"xml"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "ShortNote",
|
|
provider_url: "https://www.shortnote.jp/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.shortnote.jp/view/notes/*"
|
|
],
|
|
url: "https://www.shortnote.jp/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Shoudio",
|
|
provider_url: "http://shoudio.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://shoudio.com/*",
|
|
"http://shoud.io/*"
|
|
],
|
|
url: "http://shoudio.com/api/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Show by Animaker",
|
|
provider_url: "https://getshow.io/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://app.getshow.io/iframe/*",
|
|
"https://*.getshow.io/share/*"
|
|
],
|
|
url: "https://api.getshow.io/oembed.{format}",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Show the Way, actionable location info",
|
|
provider_url: "https://showtheway.io",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://showtheway.io/to/*"
|
|
],
|
|
url: "https://showtheway.io/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Simplecast",
|
|
provider_url: "https://simplecast.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://simplecast.com/s/*"
|
|
],
|
|
url: "https://simplecast.com/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Sizzle",
|
|
provider_url: "https://onsizzle.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://onsizzle.com/i/*"
|
|
],
|
|
url: "https://onsizzle.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Sketchfab",
|
|
provider_url: "http://sketchfab.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://sketchfab.com/*models/*",
|
|
"https://sketchfab.com/*models/*",
|
|
"https://sketchfab.com/*/folders/*"
|
|
],
|
|
url: "http://sketchfab.com/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "SlideShare",
|
|
provider_url: "http://www.slideshare.net/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.slideshare.net/*/*",
|
|
"http://www.slideshare.net/*/*",
|
|
"https://fr.slideshare.net/*/*",
|
|
"http://fr.slideshare.net/*/*",
|
|
"https://de.slideshare.net/*/*",
|
|
"http://de.slideshare.net/*/*",
|
|
"https://es.slideshare.net/*/*",
|
|
"http://es.slideshare.net/*/*",
|
|
"https://pt.slideshare.net/*/*",
|
|
"http://pt.slideshare.net/*/*"
|
|
],
|
|
url: "https://www.slideshare.net/api/oembed/2",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "SmashNotes",
|
|
provider_url: "https://smashnotes.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://smashnotes.com/p/*",
|
|
"https://smashnotes.com/p/*/e/* - https://smashnotes.com/p/*/e/*/s/*"
|
|
],
|
|
url: "https://smashnotes.com/services/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Smrthi",
|
|
provider_url: "https://www.smrthi.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.smrthi.com/book/*"
|
|
],
|
|
url: "https://www.smrthi.com/api/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "SmugMug",
|
|
provider_url: "https://www.smugmug.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://*.smugmug.com/*",
|
|
"https://*.smugmug.com/*"
|
|
],
|
|
url: "https://api.smugmug.com/services/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "SocialExplorer",
|
|
provider_url: "https://www.socialexplorer.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.socialexplorer.com/*/explore",
|
|
"https://www.socialexplorer.com/*/view",
|
|
"https://www.socialexplorer.com/*/edit",
|
|
"https://www.socialexplorer.com/*/embed"
|
|
],
|
|
url: "https://www.socialexplorer.com/services/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "SoundCloud",
|
|
provider_url: "http://soundcloud.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://soundcloud.com/*",
|
|
"https://soundcloud.com/*",
|
|
"https://soundcloud.app.goog.gl/*"
|
|
],
|
|
url: "https://soundcloud.com/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "SpeakerDeck",
|
|
provider_url: "https://speakerdeck.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://speakerdeck.com/*/*",
|
|
"https://speakerdeck.com/*/*"
|
|
],
|
|
url: "https://speakerdeck.com/oembed.json",
|
|
discovery: true,
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Spotify",
|
|
provider_url: "https://spotify.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://open.spotify.com/*",
|
|
"spotify:*"
|
|
],
|
|
url: "https://open.spotify.com/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Spreaker",
|
|
provider_url: "https://www.spreaker.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://*.spreaker.com/*",
|
|
"https://*.spreaker.com/*"
|
|
],
|
|
url: "https://api.spreaker.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "SproutVideo",
|
|
provider_url: "https://sproutvideo.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://sproutvideo.com/videos/*",
|
|
"https://*.vids.io/videos/*"
|
|
],
|
|
url: "http://sproutvideo.com/oembed.{format}",
|
|
formats: [
|
|
"json",
|
|
"xml"
|
|
],
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Stanford Digital Repository",
|
|
provider_url: "https://purl.stanford.edu/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://purl.stanford.edu/*"
|
|
],
|
|
url: "https://purl.stanford.edu/embed.{format}",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Streamable",
|
|
provider_url: "https://streamable.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://streamable.com/*",
|
|
"https://streamable.com/*"
|
|
],
|
|
url: "https://api.streamable.com/oembed.json",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Streamio",
|
|
provider_url: "https://www.streamio.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://s3m.io/*",
|
|
"https://23m.io/*"
|
|
],
|
|
url: "https://streamio.com/api/v1/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Subscribi",
|
|
provider_url: "https://subscribi.io/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://subscribi.io/api/oembed*"
|
|
],
|
|
url: "https://subscribi.io/api/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Sudomemo",
|
|
provider_url: "https://www.sudomemo.net/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.sudomemo.net/watch/*",
|
|
"http://www.sudomemo.net/watch/*",
|
|
"https://flipnot.es/*",
|
|
"http://flipnot.es/*"
|
|
],
|
|
url: "https://www.sudomemo.net/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Sutori",
|
|
provider_url: "https://www.sutori.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.sutori.com/story/*"
|
|
],
|
|
url: "https://www.sutori.com/api/oembed",
|
|
discovery: true,
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Sway",
|
|
provider_url: "https://www.sway.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://sway.com/*",
|
|
"https://www.sway.com/*"
|
|
],
|
|
url: "https://sway.com/api/v1.0/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "TED",
|
|
provider_url: "https://www.ted.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://ted.com/talks/*",
|
|
"https://ted.com/talks/*",
|
|
"https://www.ted.com/talks/*"
|
|
],
|
|
url: "https://www.ted.com/services/v1/oembed.{format}",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "The New York Times",
|
|
provider_url: "https://www.nytimes.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.nytimes.com/svc/oembed",
|
|
"https://nytimes.com/*",
|
|
"https://*.nytimes.com/*"
|
|
],
|
|
url: "https://www.nytimes.com/svc/oembed/json/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "They Said So",
|
|
provider_url: "https://theysaidso.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://theysaidso.com/image/*"
|
|
],
|
|
url: "https://theysaidso.com/extensions/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "TickCounter",
|
|
provider_url: "https://www.tickcounter.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://www.tickcounter.com/countdown/*",
|
|
"http://www.tickcounter.com/countup/*",
|
|
"http://www.tickcounter.com/ticker/*",
|
|
"http://www.tickcounter.com/worldclock/*",
|
|
"https://www.tickcounter.com/countdown/*",
|
|
"https://www.tickcounter.com/countup/*",
|
|
"https://www.tickcounter.com/ticker/*",
|
|
"https://www.tickcounter.com/worldclock/*"
|
|
],
|
|
url: "https://www.tickcounter.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "TikTok",
|
|
provider_url: "http://www.tiktok.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.tiktok.com/*/video/*"
|
|
],
|
|
url: "https://www.tiktok.com/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Toornament",
|
|
provider_url: "https://www.toornament.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.toornament.com/tournaments/*/information",
|
|
"https://www.toornament.com/tournaments/*/registration/",
|
|
"https://www.toornament.com/tournaments/*/matches/schedule",
|
|
"https://www.toornament.com/tournaments/*/stages/*/"
|
|
],
|
|
url: "https://widget.toornament.com/oembed",
|
|
discovery: true,
|
|
formats: [
|
|
"json",
|
|
"xml"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Topy",
|
|
provider_url: "http://www.topy.se/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://www.topy.se/image/*"
|
|
],
|
|
url: "http://www.topy.se/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Totango",
|
|
provider_url: "https://totango.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://app-test.totango.com/*"
|
|
],
|
|
url: "https://app-test.totango.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Trinity Audio",
|
|
provider_url: "https://trinityaudio.ai",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://trinitymedia.ai/player/*",
|
|
"http://trinitymedia.ai/player/*"
|
|
],
|
|
url: "https://trinitymedia.ai/player/trinity-oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Tumblr",
|
|
provider_url: "https://www.tumblr.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.tumblr.com/post/*"
|
|
],
|
|
url: "https://www.tumblr.com/oembed/1.0"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Tuxx",
|
|
provider_url: "https://www.tuxx.be/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.tuxx.be/*"
|
|
],
|
|
url: "https://www.tuxx.be/services/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "tvcf",
|
|
provider_url: "http://tvcf.co.kr",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://play.tvcf.co.kr/*",
|
|
"https://*.tvcf.co.kr/*"
|
|
],
|
|
url: "https://play.tvcf.co.kr/rest/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Twitter",
|
|
provider_url: "http://www.twitter.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://twitter.com/*/status/*",
|
|
"https://*.twitter.com/*/status/*"
|
|
],
|
|
url: "https://publish.twitter.com/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "TypeCast",
|
|
provider_url: "https://typecast.ai",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://play.typecast.ai/s/*",
|
|
"https://play.typecast.ai/e/*",
|
|
"https://play.typecast.ai/*"
|
|
],
|
|
url: "https://play.typecast.ai/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Typlog",
|
|
provider_url: "https://typlog.com",
|
|
endpoints: [
|
|
{
|
|
url: "https://typlog.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "UAPod",
|
|
provider_url: "https://uapod.univ-antilles.fr/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://uapod.univ-antilles.fr/video/*"
|
|
],
|
|
url: "https://uapod.univ-antilles.fr/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "University of Cambridge Map",
|
|
provider_url: "https://map.cam.ac.uk",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://map.cam.ac.uk/*"
|
|
],
|
|
url: "https://map.cam.ac.uk/oembed/"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "UnivParis1.Pod",
|
|
provider_url: "https://mediatheque.univ-paris1.fr/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://mediatheque.univ-paris1.fr/video/*"
|
|
],
|
|
url: "https://mediatheque.univ-paris1.fr/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Upec.Pod",
|
|
provider_url: "https://pod.u-pec.fr/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://pod.u-pec.fr/video/*"
|
|
],
|
|
url: "https://pod.u-pec.fr/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Ustream",
|
|
provider_url: "http://www.ustream.tv",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://*.ustream.tv/*",
|
|
"http://*.ustream.com/*"
|
|
],
|
|
url: "http://www.ustream.tv/oembed",
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "uStudio, Inc.",
|
|
provider_url: "https://www.ustudio.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.ustudio.com/embed/*",
|
|
"https://*.ustudio.com/embed/*/*"
|
|
],
|
|
url: "https://app.ustudio.com/api/v2/oembed",
|
|
discovery: true,
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "VeeR VR",
|
|
provider_url: "http://veer.tv/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://veer.tv/videos/*"
|
|
],
|
|
url: "https://api.veer.tv/oembed",
|
|
discovery: true
|
|
},
|
|
{
|
|
schemes: [
|
|
"http://veervr.tv/videos/*"
|
|
],
|
|
url: "https://api.veervr.tv/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Verse",
|
|
provider_url: "http://verse.com/",
|
|
endpoints: [
|
|
{
|
|
url: "http://verse.com/services/oembed/"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "VEVO",
|
|
provider_url: "http://www.vevo.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://www.vevo.com/*",
|
|
"https://www.vevo.com/*"
|
|
],
|
|
url: "https://www.vevo.com/oembed",
|
|
discovery: false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Videfit",
|
|
provider_url: "https://videfit.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://videfit.com/videos/*"
|
|
],
|
|
url: "https://videfit.com/oembed",
|
|
discovery: false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Vidyard",
|
|
provider_url: "https://vidyard.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"http://*.vidyard.com/*",
|
|
"https://*.vidyard.com/*",
|
|
"http://*.hubs.vidyard.com/*",
|
|
"https://*.hubs.vidyard.com/*"
|
|
],
|
|
url: "https://api.vidyard.com/dashboard/v1.1/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Vimeo",
|
|
provider_url: "https://vimeo.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://vimeo.com/*",
|
|
"https://vimeo.com/album/*/video/*",
|
|
"https://vimeo.com/channels/*/*",
|
|
"https://vimeo.com/groups/*/videos/*",
|
|
"https://vimeo.com/ondemand/*/*",
|
|
"https://player.vimeo.com/video/*"
|
|
],
|
|
url: "https://vimeo.com/api/oembed.{format}",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Viously",
|
|
provider_url: "https://www.viously.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://www.viously.com/*/*"
|
|
],
|
|
url: "https://www.viously.com/oembed",
|
|
discovery: true,
|
|
formats: [
|
|
"json",
|
|
"xml"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Vizydrop",
|
|
provider_url: "https://vizydrop.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://vizydrop.com/shared/*"
|
|
],
|
|
url: "https://vizydrop.com/oembed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Vlipsy",
|
|
provider_url: "https://vlipsy.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://vlipsy.com/*"
|
|
],
|
|
url: "https://vlipsy.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "VLIVE",
|
|
provider_url: "https://www.vlive.tv",
|
|
endpoints: [
|
|
{
|
|
url: "https://www.vlive.tv/oembed",
|
|
schemes: [
|
|
"https://www.vlive.tv/video/*"
|
|
],
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "VoxSnap",
|
|
provider_url: "https://voxsnap.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://article.voxsnap.com/*/*"
|
|
],
|
|
url: "https://data.voxsnap.com/oembed",
|
|
discovery: true,
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Waltrack",
|
|
provider_url: "https://waltrack/net",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://waltrack.net/product/*"
|
|
],
|
|
url: "https://waltrack.net/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Wave.video",
|
|
provider_url: "https://wave.video",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://watch.wave.video/*",
|
|
"https://embed.wave.video/*"
|
|
],
|
|
url: "https://embed.wave.video/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "wecandeo",
|
|
provider_url: "https://www.wecandeo.com/",
|
|
endpoints: [
|
|
{
|
|
url: "https://play.wecandeo.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Wiredrive",
|
|
provider_url: "https://www.wiredrive.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.wiredrive.com/*"
|
|
],
|
|
url: "http://*.wiredrive.com/present-oembed/",
|
|
formats: [
|
|
"json"
|
|
],
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Wistia, Inc.",
|
|
provider_url: "https://wistia.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://fast.wistia.com/embed/iframe/*",
|
|
"https://fast.wistia.com/embed/playlists/*",
|
|
"https://*.wistia.com/medias/*"
|
|
],
|
|
url: "https://fast.wistia.com/oembed.{format}",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "wizer.me",
|
|
provider_url: "https://www.wizer.me/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.wizer.me/learn/*",
|
|
"https://*.wizer.me/preview/*"
|
|
],
|
|
url: "https://app.wizer.me/api/oembed.{format}",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Wokwi",
|
|
provider_url: "https://wokwi.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://wokwi.com/share/*"
|
|
],
|
|
url: "https://wokwi.com/api/oembed",
|
|
discovery: true,
|
|
formats: [
|
|
"json"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Wolfram Cloud",
|
|
provider_url: "https://www.wolframcloud.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.wolframcloud.com/*"
|
|
],
|
|
url: "https://www.wolframcloud.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "WordPress.com",
|
|
provider_url: "http://wordpress.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://wordpress.com/*",
|
|
"http://wordpress.com/*",
|
|
"https://*.wordpress.com/*",
|
|
"http://*.wordpress.com/*",
|
|
"https://*.*.wordpress.com/*",
|
|
"http://*.*.wordpress.com/*",
|
|
"https://wp.me/*",
|
|
"http://wp.me/*"
|
|
],
|
|
url: "http://public-api.wordpress.com/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "YouTube",
|
|
provider_url: "https://www.youtube.com/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.youtube.com/watch*",
|
|
"https://*.youtube.com/v/*",
|
|
"https://youtu.be/*",
|
|
"https://*.youtube.com/playlist?list=*",
|
|
"https://youtube.com/playlist?list=*"
|
|
],
|
|
url: "https://www.youtube.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Zeplin",
|
|
provider_url: "https://zeplin.io",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://app.zeplin.io/project/*/screen/*",
|
|
"https://app.zeplin.io/project/*/screen/*/version/*",
|
|
"https://app.zeplin.io/project/*/styleguide/components?coid=*",
|
|
"https://app.zeplin.io/styleguide/*/components?coid=*"
|
|
],
|
|
url: "https://app.zeplin.io/embed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "ZingSoft",
|
|
provider_url: "https://app.zingsoft.com",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://app.zingsoft.com/embed/*",
|
|
"https://app.zingsoft.com/view/*"
|
|
],
|
|
url: "https://app.zingsoft.com/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "ZnipeTV",
|
|
provider_url: "https://www.znipe.tv/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://*.znipe.tv/*"
|
|
],
|
|
url: "https://api.znipe.tv/v3/oembed/",
|
|
discovery: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
provider_name: "Zoomable",
|
|
provider_url: "https://zoomable.ca/",
|
|
endpoints: [
|
|
{
|
|
schemes: [
|
|
"https://srv2.zoomable.ca/viewer.php*"
|
|
],
|
|
url: "https://srv2.zoomable.ca/oembed",
|
|
discovery: true
|
|
}
|
|
]
|
|
}
|
|
];
|
|
}
|
|
});
|
|
|
|
// node_modules/oembed-parser/src/utils/provider.js
|
|
var require_provider = __commonJS({
|
|
"node_modules/oembed-parser/src/utils/provider.js"(exports, module2) {
|
|
var isValidURL = require_isValidURL();
|
|
var getDomain = require_getDomain();
|
|
var defaultProviderList = require_providers();
|
|
var providersFromList = (providers = []) => {
|
|
return providers.map((provider) => {
|
|
const { provider_url: url } = provider;
|
|
provider.domain = getDomain(url);
|
|
return provider;
|
|
}).filter((provider) => {
|
|
return provider.domain !== "";
|
|
});
|
|
};
|
|
var store = {
|
|
providers: providersFromList(defaultProviderList)
|
|
};
|
|
var get = () => {
|
|
return [...store.providers];
|
|
};
|
|
var set = (providers = []) => {
|
|
store.providers = providersFromList(providers);
|
|
return store.providers.length;
|
|
};
|
|
var getEndpoint = (url, domain, endpoints) => {
|
|
for (let i = 0; i < endpoints.length; i++) {
|
|
const endpoint = endpoints[i];
|
|
const { schemes = [], url: endpointUrl } = endpoint;
|
|
if (schemes.length === 0) {
|
|
const endpointDomain = getDomain(endpointUrl);
|
|
if (endpointDomain === domain) {
|
|
return endpoint;
|
|
}
|
|
}
|
|
const isMatchedScheme = schemes.some((scheme) => {
|
|
const reg = new RegExp(scheme.replace(/\*/g, "(.*)").replace(/\?/g, "\\?").replace(/,$/g, ""), "i");
|
|
return url.match(reg);
|
|
});
|
|
if (isMatchedScheme) {
|
|
return endpoint;
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
var find = (url = "") => {
|
|
if (!isValidURL(url)) {
|
|
return null;
|
|
}
|
|
const domain = getDomain(url);
|
|
const providers = get();
|
|
for (let i = 0; i < providers.length; i++) {
|
|
const prov = providers[i];
|
|
const {
|
|
endpoints,
|
|
provider_name: providerName,
|
|
provider_url: providerUrl
|
|
} = prov;
|
|
const endpoint = getEndpoint(url, domain, endpoints);
|
|
if (endpoint) {
|
|
return {
|
|
fetchEndpoint: endpoint.url,
|
|
providerName,
|
|
providerUrl
|
|
};
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
var has = (url = "") => {
|
|
return find(url) !== null;
|
|
};
|
|
module2.exports = {
|
|
get,
|
|
set,
|
|
find,
|
|
has
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/oembed-parser/src/main.js
|
|
var require_main = __commonJS({
|
|
"node_modules/oembed-parser/src/main.js"(exports, module2) {
|
|
var isValidURL = require_isValidURL();
|
|
var fetchEmbed = require_fetchEmbed();
|
|
var provider = require_provider();
|
|
var {
|
|
setRequestOptions
|
|
} = require_config();
|
|
var extract2 = (_0, ..._1) => __async(exports, [_0, ..._1], function* (url, params = {}) {
|
|
if (!isValidURL(url)) {
|
|
throw new Error("Invalid input URL");
|
|
}
|
|
const p = provider.find(url);
|
|
if (!p) {
|
|
throw new Error(`No provider found with given url "${url}"`);
|
|
}
|
|
const data = yield fetchEmbed(url, p, params);
|
|
return data;
|
|
});
|
|
module2.exports = {
|
|
extract: extract2,
|
|
hasProvider: provider.has,
|
|
findProvider: provider.find,
|
|
setProviderList: provider.set,
|
|
setRequestOptions
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/oembed-parser/package.json
|
|
var require_package = __commonJS({
|
|
"node_modules/oembed-parser/package.json"(exports, module2) {
|
|
module2.exports = {
|
|
version: "2.0.0",
|
|
name: "oembed-parser",
|
|
description: "Get oEmbed data from given URL.",
|
|
homepage: "https://www.npmjs.com/package/oembed-parser",
|
|
repository: {
|
|
type: "git",
|
|
url: "git@github.com:ndaidong/oembed-parser.git"
|
|
},
|
|
author: "@ndaidong",
|
|
main: "./index.js",
|
|
types: "./index.d.ts",
|
|
engines: {
|
|
node: ">= 10.14.2"
|
|
},
|
|
scripts: {
|
|
lint: "standard .",
|
|
pretest: "npm run lint",
|
|
test: "jest --verbose --coverage=true --unhandled-rejections=strict --detectOpenHandles",
|
|
eval: "node eval",
|
|
sync: "node sync",
|
|
tsc: "tsc --init",
|
|
build: "tsc",
|
|
reset: "node reset"
|
|
},
|
|
dependencies: {
|
|
axios: "^0.24.0",
|
|
bellajs: "^10.0.2"
|
|
},
|
|
devDependencies: {
|
|
jest: "^27.4.5",
|
|
nock: "^13.2.1"
|
|
},
|
|
keywords: [
|
|
"oembed",
|
|
"extractor",
|
|
"parser",
|
|
"util"
|
|
],
|
|
license: "MIT",
|
|
_resolved: "https://registry.npmjs.org/oembed-parser/-/oembed-parser-2.0.0.tgz",
|
|
_integrity: "sha512-VuEGFjLBDaydO+6ZzHXBAzc7jwletgsFTHi8UT3Zdt13xT2JzXM0R3XfafKDsZVloPxGC2Ad+ubNjEDT6lN3Gg==",
|
|
_from: "oembed-parser@2.0.0"
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/oembed-parser/index.js
|
|
var require_oembed_parser = __commonJS({
|
|
"node_modules/oembed-parser/index.js"(exports, module2) {
|
|
var main = require_main();
|
|
main.version = require_package().version;
|
|
module2.exports = main;
|
|
}
|
|
});
|
|
|
|
// node_modules/dompurify/dist/purify.js
|
|
var require_purify = __commonJS({
|
|
"node_modules/dompurify/dist/purify.js"(exports, module2) {
|
|
(function(global, factory) {
|
|
typeof exports === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global = global || self, global.DOMPurify = factory());
|
|
})(exports, function() {
|
|
"use strict";
|
|
function _toConsumableArray(arr) {
|
|
if (Array.isArray(arr)) {
|
|
for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {
|
|
arr2[i] = arr[i];
|
|
}
|
|
return arr2;
|
|
} else {
|
|
return Array.from(arr);
|
|
}
|
|
}
|
|
var hasOwnProperty = Object.hasOwnProperty, setPrototypeOf = Object.setPrototypeOf, isFrozen = Object.isFrozen, getPrototypeOf = Object.getPrototypeOf, getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
|
|
var freeze = Object.freeze, seal = Object.seal, create = Object.create;
|
|
var _ref = typeof Reflect !== "undefined" && Reflect, apply = _ref.apply, construct = _ref.construct;
|
|
if (!apply) {
|
|
apply = function apply2(fun, thisValue, args) {
|
|
return fun.apply(thisValue, args);
|
|
};
|
|
}
|
|
if (!freeze) {
|
|
freeze = function freeze2(x) {
|
|
return x;
|
|
};
|
|
}
|
|
if (!seal) {
|
|
seal = function seal2(x) {
|
|
return x;
|
|
};
|
|
}
|
|
if (!construct) {
|
|
construct = function construct2(Func, args) {
|
|
return new (Function.prototype.bind.apply(Func, [null].concat(_toConsumableArray(args))))();
|
|
};
|
|
}
|
|
var arrayForEach = unapply(Array.prototype.forEach);
|
|
var arrayPop = unapply(Array.prototype.pop);
|
|
var arrayPush = unapply(Array.prototype.push);
|
|
var stringToLowerCase = unapply(String.prototype.toLowerCase);
|
|
var stringMatch = unapply(String.prototype.match);
|
|
var stringReplace = unapply(String.prototype.replace);
|
|
var stringIndexOf = unapply(String.prototype.indexOf);
|
|
var stringTrim = unapply(String.prototype.trim);
|
|
var regExpTest = unapply(RegExp.prototype.test);
|
|
var typeErrorCreate = unconstruct(TypeError);
|
|
function unapply(func) {
|
|
return function(thisArg) {
|
|
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
args[_key - 1] = arguments[_key];
|
|
}
|
|
return apply(func, thisArg, args);
|
|
};
|
|
}
|
|
function unconstruct(func) {
|
|
return function() {
|
|
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
args[_key2] = arguments[_key2];
|
|
}
|
|
return construct(func, args);
|
|
};
|
|
}
|
|
function addToSet(set, array) {
|
|
if (setPrototypeOf) {
|
|
setPrototypeOf(set, null);
|
|
}
|
|
var l = array.length;
|
|
while (l--) {
|
|
var element = array[l];
|
|
if (typeof element === "string") {
|
|
var lcElement = stringToLowerCase(element);
|
|
if (lcElement !== element) {
|
|
if (!isFrozen(array)) {
|
|
array[l] = lcElement;
|
|
}
|
|
element = lcElement;
|
|
}
|
|
}
|
|
set[element] = true;
|
|
}
|
|
return set;
|
|
}
|
|
function clone(object) {
|
|
var newObject = create(null);
|
|
var property = void 0;
|
|
for (property in object) {
|
|
if (apply(hasOwnProperty, object, [property])) {
|
|
newObject[property] = object[property];
|
|
}
|
|
}
|
|
return newObject;
|
|
}
|
|
function lookupGetter(object, prop) {
|
|
while (object !== null) {
|
|
var desc = getOwnPropertyDescriptor(object, prop);
|
|
if (desc) {
|
|
if (desc.get) {
|
|
return unapply(desc.get);
|
|
}
|
|
if (typeof desc.value === "function") {
|
|
return unapply(desc.value);
|
|
}
|
|
}
|
|
object = getPrototypeOf(object);
|
|
}
|
|
function fallbackValue(element) {
|
|
console.warn("fallback value for", element);
|
|
return null;
|
|
}
|
|
return fallbackValue;
|
|
}
|
|
var html = freeze(["a", "abbr", "acronym", "address", "area", "article", "aside", "audio", "b", "bdi", "bdo", "big", "blink", "blockquote", "body", "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "content", "data", "datalist", "dd", "decorator", "del", "details", "dfn", "dialog", "dir", "div", "dl", "dt", "element", "em", "fieldset", "figcaption", "figure", "font", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "img", "input", "ins", "kbd", "label", "legend", "li", "main", "map", "mark", "marquee", "menu", "menuitem", "meter", "nav", "nobr", "ol", "optgroup", "option", "output", "p", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "section", "select", "shadow", "small", "source", "spacer", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "time", "tr", "track", "tt", "u", "ul", "var", "video", "wbr"]);
|
|
var svg = freeze(["svg", "a", "altglyph", "altglyphdef", "altglyphitem", "animatecolor", "animatemotion", "animatetransform", "circle", "clippath", "defs", "desc", "ellipse", "filter", "font", "g", "glyph", "glyphref", "hkern", "image", "line", "lineargradient", "marker", "mask", "metadata", "mpath", "path", "pattern", "polygon", "polyline", "radialgradient", "rect", "stop", "style", "switch", "symbol", "text", "textpath", "title", "tref", "tspan", "view", "vkern"]);
|
|
var svgFilters = freeze(["feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence"]);
|
|
var svgDisallowed = freeze(["animate", "color-profile", "cursor", "discard", "fedropshadow", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "foreignobject", "hatch", "hatchpath", "mesh", "meshgradient", "meshpatch", "meshrow", "missing-glyph", "script", "set", "solidcolor", "unknown", "use"]);
|
|
var mathMl = freeze(["math", "menclose", "merror", "mfenced", "mfrac", "mglyph", "mi", "mlabeledtr", "mmultiscripts", "mn", "mo", "mover", "mpadded", "mphantom", "mroot", "mrow", "ms", "mspace", "msqrt", "mstyle", "msub", "msup", "msubsup", "mtable", "mtd", "mtext", "mtr", "munder", "munderover"]);
|
|
var mathMlDisallowed = freeze(["maction", "maligngroup", "malignmark", "mlongdiv", "mscarries", "mscarry", "msgroup", "mstack", "msline", "msrow", "semantics", "annotation", "annotation-xml", "mprescripts", "none"]);
|
|
var text = freeze(["#text"]);
|
|
var html$1 = freeze(["accept", "action", "align", "alt", "autocapitalize", "autocomplete", "autopictureinpicture", "autoplay", "background", "bgcolor", "border", "capture", "cellpadding", "cellspacing", "checked", "cite", "class", "clear", "color", "cols", "colspan", "controls", "controlslist", "coords", "crossorigin", "datetime", "decoding", "default", "dir", "disabled", "disablepictureinpicture", "disableremoteplayback", "download", "draggable", "enctype", "enterkeyhint", "face", "for", "headers", "height", "hidden", "high", "href", "hreflang", "id", "inputmode", "integrity", "ismap", "kind", "label", "lang", "list", "loading", "loop", "low", "max", "maxlength", "media", "method", "min", "minlength", "multiple", "muted", "name", "nonce", "noshade", "novalidate", "nowrap", "open", "optimum", "pattern", "placeholder", "playsinline", "poster", "preload", "pubdate", "radiogroup", "readonly", "rel", "required", "rev", "reversed", "role", "rows", "rowspan", "spellcheck", "scope", "selected", "shape", "size", "sizes", "span", "srclang", "start", "src", "srcset", "step", "style", "summary", "tabindex", "title", "translate", "type", "usemap", "valign", "value", "width", "xmlns", "slot"]);
|
|
var svg$1 = freeze(["accent-height", "accumulate", "additive", "alignment-baseline", "ascent", "attributename", "attributetype", "azimuth", "basefrequency", "baseline-shift", "begin", "bias", "by", "class", "clip", "clippathunits", "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-profile", "color-rendering", "cx", "cy", "d", "dx", "dy", "diffuseconstant", "direction", "display", "divisor", "dur", "edgemode", "elevation", "end", "fill", "fill-opacity", "fill-rule", "filter", "filterunits", "flood-color", "flood-opacity", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "fx", "fy", "g1", "g2", "glyph-name", "glyphref", "gradientunits", "gradienttransform", "height", "href", "id", "image-rendering", "in", "in2", "k", "k1", "k2", "k3", "k4", "kerning", "keypoints", "keysplines", "keytimes", "lang", "lengthadjust", "letter-spacing", "kernelmatrix", "kernelunitlength", "lighting-color", "local", "marker-end", "marker-mid", "marker-start", "markerheight", "markerunits", "markerwidth", "maskcontentunits", "maskunits", "max", "mask", "media", "method", "mode", "min", "name", "numoctaves", "offset", "operator", "opacity", "order", "orient", "orientation", "origin", "overflow", "paint-order", "path", "pathlength", "patterncontentunits", "patterntransform", "patternunits", "points", "preservealpha", "preserveaspectratio", "primitiveunits", "r", "rx", "ry", "radius", "refx", "refy", "repeatcount", "repeatdur", "restart", "result", "rotate", "scale", "seed", "shape-rendering", "specularconstant", "specularexponent", "spreadmethod", "startoffset", "stddeviation", "stitchtiles", "stop-color", "stop-opacity", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke", "stroke-width", "style", "surfacescale", "systemlanguage", "tabindex", "targetx", "targety", "transform", "text-anchor", "text-decoration", "text-rendering", "textlength", "type", "u1", "u2", "unicode", "values", "viewbox", "visibility", "version", "vert-adv-y", "vert-origin-x", "vert-origin-y", "width", "word-spacing", "wrap", "writing-mode", "xchannelselector", "ychannelselector", "x", "x1", "x2", "xmlns", "y", "y1", "y2", "z", "zoomandpan"]);
|
|
var mathMl$1 = freeze(["accent", "accentunder", "align", "bevelled", "close", "columnsalign", "columnlines", "columnspan", "denomalign", "depth", "dir", "display", "displaystyle", "encoding", "fence", "frame", "height", "href", "id", "largeop", "length", "linethickness", "lspace", "lquote", "mathbackground", "mathcolor", "mathsize", "mathvariant", "maxsize", "minsize", "movablelimits", "notation", "numalign", "open", "rowalign", "rowlines", "rowspacing", "rowspan", "rspace", "rquote", "scriptlevel", "scriptminsize", "scriptsizemultiplier", "selection", "separator", "separators", "stretchy", "subscriptshift", "supscriptshift", "symmetric", "voffset", "width", "xmlns"]);
|
|
var xml = freeze(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]);
|
|
var MUSTACHE_EXPR = seal(/\{\{[\s\S]*|[\s\S]*\}\}/gm);
|
|
var ERB_EXPR = seal(/<%[\s\S]*|[\s\S]*%>/gm);
|
|
var DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/);
|
|
var ARIA_ATTR = seal(/^aria-[\-\w]+$/);
|
|
var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i);
|
|
var IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i);
|
|
var ATTR_WHITESPACE = seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g);
|
|
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) {
|
|
return typeof obj;
|
|
} : function(obj) {
|
|
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
};
|
|
function _toConsumableArray$1(arr) {
|
|
if (Array.isArray(arr)) {
|
|
for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {
|
|
arr2[i] = arr[i];
|
|
}
|
|
return arr2;
|
|
} else {
|
|
return Array.from(arr);
|
|
}
|
|
}
|
|
var getGlobal = function getGlobal2() {
|
|
return typeof window === "undefined" ? null : window;
|
|
};
|
|
var _createTrustedTypesPolicy = function _createTrustedTypesPolicy2(trustedTypes, document2) {
|
|
if ((typeof trustedTypes === "undefined" ? "undefined" : _typeof(trustedTypes)) !== "object" || typeof trustedTypes.createPolicy !== "function") {
|
|
return null;
|
|
}
|
|
var suffix = null;
|
|
var ATTR_NAME = "data-tt-policy-suffix";
|
|
if (document2.currentScript && document2.currentScript.hasAttribute(ATTR_NAME)) {
|
|
suffix = document2.currentScript.getAttribute(ATTR_NAME);
|
|
}
|
|
var policyName = "dompurify" + (suffix ? "#" + suffix : "");
|
|
try {
|
|
return trustedTypes.createPolicy(policyName, {
|
|
createHTML: function createHTML(html$$1) {
|
|
return html$$1;
|
|
}
|
|
});
|
|
} catch (_) {
|
|
console.warn("TrustedTypes policy " + policyName + " could not be created.");
|
|
return null;
|
|
}
|
|
};
|
|
function createDOMPurify() {
|
|
var window2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : getGlobal();
|
|
var DOMPurify2 = function DOMPurify3(root) {
|
|
return createDOMPurify(root);
|
|
};
|
|
DOMPurify2.version = "2.3.4";
|
|
DOMPurify2.removed = [];
|
|
if (!window2 || !window2.document || window2.document.nodeType !== 9) {
|
|
DOMPurify2.isSupported = false;
|
|
return DOMPurify2;
|
|
}
|
|
var originalDocument = window2.document;
|
|
var document2 = window2.document;
|
|
var DocumentFragment = window2.DocumentFragment, HTMLTemplateElement = window2.HTMLTemplateElement, Node = window2.Node, Element = window2.Element, NodeFilter = window2.NodeFilter, _window$NamedNodeMap = window2.NamedNodeMap, NamedNodeMap = _window$NamedNodeMap === void 0 ? window2.NamedNodeMap || window2.MozNamedAttrMap : _window$NamedNodeMap, HTMLFormElement = window2.HTMLFormElement, DOMParser = window2.DOMParser, trustedTypes = window2.trustedTypes;
|
|
var ElementPrototype = Element.prototype;
|
|
var cloneNode = lookupGetter(ElementPrototype, "cloneNode");
|
|
var getNextSibling = lookupGetter(ElementPrototype, "nextSibling");
|
|
var getChildNodes = lookupGetter(ElementPrototype, "childNodes");
|
|
var getParentNode = lookupGetter(ElementPrototype, "parentNode");
|
|
if (typeof HTMLTemplateElement === "function") {
|
|
var template = document2.createElement("template");
|
|
if (template.content && template.content.ownerDocument) {
|
|
document2 = template.content.ownerDocument;
|
|
}
|
|
}
|
|
var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument);
|
|
var emptyHTML = trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML("") : "";
|
|
var _document = document2, implementation = _document.implementation, createNodeIterator = _document.createNodeIterator, createDocumentFragment = _document.createDocumentFragment, getElementsByTagName = _document.getElementsByTagName;
|
|
var importNode = originalDocument.importNode;
|
|
var documentMode = {};
|
|
try {
|
|
documentMode = clone(document2).documentMode ? document2.documentMode : {};
|
|
} catch (_) {
|
|
}
|
|
var hooks = {};
|
|
DOMPurify2.isSupported = typeof getParentNode === "function" && implementation && typeof implementation.createHTMLDocument !== "undefined" && documentMode !== 9;
|
|
var MUSTACHE_EXPR$$1 = MUSTACHE_EXPR, ERB_EXPR$$1 = ERB_EXPR, DATA_ATTR$$1 = DATA_ATTR, ARIA_ATTR$$1 = ARIA_ATTR, IS_SCRIPT_OR_DATA$$1 = IS_SCRIPT_OR_DATA, ATTR_WHITESPACE$$1 = ATTR_WHITESPACE;
|
|
var IS_ALLOWED_URI$$1 = IS_ALLOWED_URI;
|
|
var ALLOWED_TAGS = null;
|
|
var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray$1(html), _toConsumableArray$1(svg), _toConsumableArray$1(svgFilters), _toConsumableArray$1(mathMl), _toConsumableArray$1(text)));
|
|
var ALLOWED_ATTR = null;
|
|
var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray$1(html$1), _toConsumableArray$1(svg$1), _toConsumableArray$1(mathMl$1), _toConsumableArray$1(xml)));
|
|
var CUSTOM_ELEMENT_HANDLING = Object.seal(Object.create(null, {
|
|
tagNameCheck: {
|
|
writable: true,
|
|
configurable: false,
|
|
enumerable: true,
|
|
value: null
|
|
},
|
|
attributeNameCheck: {
|
|
writable: true,
|
|
configurable: false,
|
|
enumerable: true,
|
|
value: null
|
|
},
|
|
allowCustomizedBuiltInElements: {
|
|
writable: true,
|
|
configurable: false,
|
|
enumerable: true,
|
|
value: false
|
|
}
|
|
}));
|
|
var FORBID_TAGS = null;
|
|
var FORBID_ATTR = null;
|
|
var ALLOW_ARIA_ATTR = true;
|
|
var ALLOW_DATA_ATTR = true;
|
|
var ALLOW_UNKNOWN_PROTOCOLS = false;
|
|
var SAFE_FOR_TEMPLATES = false;
|
|
var WHOLE_DOCUMENT = false;
|
|
var SET_CONFIG = false;
|
|
var FORCE_BODY = false;
|
|
var RETURN_DOM = false;
|
|
var RETURN_DOM_FRAGMENT = false;
|
|
var RETURN_TRUSTED_TYPE = false;
|
|
var SANITIZE_DOM = true;
|
|
var KEEP_CONTENT = true;
|
|
var IN_PLACE = false;
|
|
var USE_PROFILES = {};
|
|
var FORBID_CONTENTS = null;
|
|
var DEFAULT_FORBID_CONTENTS = addToSet({}, ["annotation-xml", "audio", "colgroup", "desc", "foreignobject", "head", "iframe", "math", "mi", "mn", "mo", "ms", "mtext", "noembed", "noframes", "noscript", "plaintext", "script", "style", "svg", "template", "thead", "title", "video", "xmp"]);
|
|
var DATA_URI_TAGS = null;
|
|
var DEFAULT_DATA_URI_TAGS = addToSet({}, ["audio", "video", "img", "source", "image", "track"]);
|
|
var URI_SAFE_ATTRIBUTES = null;
|
|
var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ["alt", "class", "for", "id", "label", "name", "pattern", "placeholder", "role", "summary", "title", "value", "style", "xmlns"]);
|
|
var MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML";
|
|
var SVG_NAMESPACE = "http://www.w3.org/2000/svg";
|
|
var HTML_NAMESPACE = "http://www.w3.org/1999/xhtml";
|
|
var NAMESPACE = HTML_NAMESPACE;
|
|
var IS_EMPTY_INPUT = false;
|
|
var PARSER_MEDIA_TYPE = void 0;
|
|
var SUPPORTED_PARSER_MEDIA_TYPES = ["application/xhtml+xml", "text/html"];
|
|
var DEFAULT_PARSER_MEDIA_TYPE = "text/html";
|
|
var transformCaseFunc = void 0;
|
|
var CONFIG = null;
|
|
var formElement = document2.createElement("form");
|
|
var isRegexOrFunction = function isRegexOrFunction2(testValue) {
|
|
return testValue instanceof RegExp || testValue instanceof Function;
|
|
};
|
|
var _parseConfig = function _parseConfig2(cfg) {
|
|
if (CONFIG && CONFIG === cfg) {
|
|
return;
|
|
}
|
|
if (!cfg || (typeof cfg === "undefined" ? "undefined" : _typeof(cfg)) !== "object") {
|
|
cfg = {};
|
|
}
|
|
cfg = clone(cfg);
|
|
ALLOWED_TAGS = "ALLOWED_TAGS" in cfg ? addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS;
|
|
ALLOWED_ATTR = "ALLOWED_ATTR" in cfg ? addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR;
|
|
URI_SAFE_ATTRIBUTES = "ADD_URI_SAFE_ATTR" in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR) : DEFAULT_URI_SAFE_ATTRIBUTES;
|
|
DATA_URI_TAGS = "ADD_DATA_URI_TAGS" in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS) : DEFAULT_DATA_URI_TAGS;
|
|
FORBID_CONTENTS = "FORBID_CONTENTS" in cfg ? addToSet({}, cfg.FORBID_CONTENTS) : DEFAULT_FORBID_CONTENTS;
|
|
FORBID_TAGS = "FORBID_TAGS" in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};
|
|
FORBID_ATTR = "FORBID_ATTR" in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};
|
|
USE_PROFILES = "USE_PROFILES" in cfg ? cfg.USE_PROFILES : false;
|
|
ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;
|
|
ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;
|
|
ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false;
|
|
SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false;
|
|
WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false;
|
|
RETURN_DOM = cfg.RETURN_DOM || false;
|
|
RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false;
|
|
RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false;
|
|
FORCE_BODY = cfg.FORCE_BODY || false;
|
|
SANITIZE_DOM = cfg.SANITIZE_DOM !== false;
|
|
KEEP_CONTENT = cfg.KEEP_CONTENT !== false;
|
|
IN_PLACE = cfg.IN_PLACE || false;
|
|
IS_ALLOWED_URI$$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$$1;
|
|
NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;
|
|
if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {
|
|
CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;
|
|
}
|
|
if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {
|
|
CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;
|
|
}
|
|
if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === "boolean") {
|
|
CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;
|
|
}
|
|
PARSER_MEDIA_TYPE = SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE : PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE;
|
|
transformCaseFunc = PARSER_MEDIA_TYPE === "application/xhtml+xml" ? function(x) {
|
|
return x;
|
|
} : stringToLowerCase;
|
|
if (SAFE_FOR_TEMPLATES) {
|
|
ALLOW_DATA_ATTR = false;
|
|
}
|
|
if (RETURN_DOM_FRAGMENT) {
|
|
RETURN_DOM = true;
|
|
}
|
|
if (USE_PROFILES) {
|
|
ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray$1(text)));
|
|
ALLOWED_ATTR = [];
|
|
if (USE_PROFILES.html === true) {
|
|
addToSet(ALLOWED_TAGS, html);
|
|
addToSet(ALLOWED_ATTR, html$1);
|
|
}
|
|
if (USE_PROFILES.svg === true) {
|
|
addToSet(ALLOWED_TAGS, svg);
|
|
addToSet(ALLOWED_ATTR, svg$1);
|
|
addToSet(ALLOWED_ATTR, xml);
|
|
}
|
|
if (USE_PROFILES.svgFilters === true) {
|
|
addToSet(ALLOWED_TAGS, svgFilters);
|
|
addToSet(ALLOWED_ATTR, svg$1);
|
|
addToSet(ALLOWED_ATTR, xml);
|
|
}
|
|
if (USE_PROFILES.mathMl === true) {
|
|
addToSet(ALLOWED_TAGS, mathMl);
|
|
addToSet(ALLOWED_ATTR, mathMl$1);
|
|
addToSet(ALLOWED_ATTR, xml);
|
|
}
|
|
}
|
|
if (cfg.ADD_TAGS) {
|
|
if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {
|
|
ALLOWED_TAGS = clone(ALLOWED_TAGS);
|
|
}
|
|
addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);
|
|
}
|
|
if (cfg.ADD_ATTR) {
|
|
if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {
|
|
ALLOWED_ATTR = clone(ALLOWED_ATTR);
|
|
}
|
|
addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);
|
|
}
|
|
if (cfg.ADD_URI_SAFE_ATTR) {
|
|
addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);
|
|
}
|
|
if (cfg.FORBID_CONTENTS) {
|
|
if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {
|
|
FORBID_CONTENTS = clone(FORBID_CONTENTS);
|
|
}
|
|
addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS);
|
|
}
|
|
if (KEEP_CONTENT) {
|
|
ALLOWED_TAGS["#text"] = true;
|
|
}
|
|
if (WHOLE_DOCUMENT) {
|
|
addToSet(ALLOWED_TAGS, ["html", "head", "body"]);
|
|
}
|
|
if (ALLOWED_TAGS.table) {
|
|
addToSet(ALLOWED_TAGS, ["tbody"]);
|
|
delete FORBID_TAGS.tbody;
|
|
}
|
|
if (freeze) {
|
|
freeze(cfg);
|
|
}
|
|
CONFIG = cfg;
|
|
};
|
|
var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ["mi", "mo", "mn", "ms", "mtext"]);
|
|
var HTML_INTEGRATION_POINTS = addToSet({}, ["foreignobject", "desc", "title", "annotation-xml"]);
|
|
var ALL_SVG_TAGS = addToSet({}, svg);
|
|
addToSet(ALL_SVG_TAGS, svgFilters);
|
|
addToSet(ALL_SVG_TAGS, svgDisallowed);
|
|
var ALL_MATHML_TAGS = addToSet({}, mathMl);
|
|
addToSet(ALL_MATHML_TAGS, mathMlDisallowed);
|
|
var _checkValidNamespace = function _checkValidNamespace2(element) {
|
|
var parent = getParentNode(element);
|
|
if (!parent || !parent.tagName) {
|
|
parent = {
|
|
namespaceURI: HTML_NAMESPACE,
|
|
tagName: "template"
|
|
};
|
|
}
|
|
var tagName = stringToLowerCase(element.tagName);
|
|
var parentTagName = stringToLowerCase(parent.tagName);
|
|
if (element.namespaceURI === SVG_NAMESPACE) {
|
|
if (parent.namespaceURI === HTML_NAMESPACE) {
|
|
return tagName === "svg";
|
|
}
|
|
if (parent.namespaceURI === MATHML_NAMESPACE) {
|
|
return tagName === "svg" && (parentTagName === "annotation-xml" || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);
|
|
}
|
|
return Boolean(ALL_SVG_TAGS[tagName]);
|
|
}
|
|
if (element.namespaceURI === MATHML_NAMESPACE) {
|
|
if (parent.namespaceURI === HTML_NAMESPACE) {
|
|
return tagName === "math";
|
|
}
|
|
if (parent.namespaceURI === SVG_NAMESPACE) {
|
|
return tagName === "math" && HTML_INTEGRATION_POINTS[parentTagName];
|
|
}
|
|
return Boolean(ALL_MATHML_TAGS[tagName]);
|
|
}
|
|
if (element.namespaceURI === HTML_NAMESPACE) {
|
|
if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {
|
|
return false;
|
|
}
|
|
if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {
|
|
return false;
|
|
}
|
|
var commonSvgAndHTMLElements = addToSet({}, ["title", "style", "font", "a", "script"]);
|
|
return !ALL_MATHML_TAGS[tagName] && (commonSvgAndHTMLElements[tagName] || !ALL_SVG_TAGS[tagName]);
|
|
}
|
|
return false;
|
|
};
|
|
var _forceRemove = function _forceRemove2(node) {
|
|
arrayPush(DOMPurify2.removed, { element: node });
|
|
try {
|
|
node.parentNode.removeChild(node);
|
|
} catch (_) {
|
|
try {
|
|
node.outerHTML = emptyHTML;
|
|
} catch (_2) {
|
|
node.remove();
|
|
}
|
|
}
|
|
};
|
|
var _removeAttribute = function _removeAttribute2(name, node) {
|
|
try {
|
|
arrayPush(DOMPurify2.removed, {
|
|
attribute: node.getAttributeNode(name),
|
|
from: node
|
|
});
|
|
} catch (_) {
|
|
arrayPush(DOMPurify2.removed, {
|
|
attribute: null,
|
|
from: node
|
|
});
|
|
}
|
|
node.removeAttribute(name);
|
|
if (name === "is" && !ALLOWED_ATTR[name]) {
|
|
if (RETURN_DOM || RETURN_DOM_FRAGMENT) {
|
|
try {
|
|
_forceRemove(node);
|
|
} catch (_) {
|
|
}
|
|
} else {
|
|
try {
|
|
node.setAttribute(name, "");
|
|
} catch (_) {
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var _initDocument = function _initDocument2(dirty) {
|
|
var doc = void 0;
|
|
var leadingWhitespace = void 0;
|
|
if (FORCE_BODY) {
|
|
dirty = "<remove></remove>" + dirty;
|
|
} else {
|
|
var matches = stringMatch(dirty, /^[\r\n\t ]+/);
|
|
leadingWhitespace = matches && matches[0];
|
|
}
|
|
if (PARSER_MEDIA_TYPE === "application/xhtml+xml") {
|
|
dirty = '<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>' + dirty + "</body></html>";
|
|
}
|
|
var dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;
|
|
if (NAMESPACE === HTML_NAMESPACE) {
|
|
try {
|
|
doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);
|
|
} catch (_) {
|
|
}
|
|
}
|
|
if (!doc || !doc.documentElement) {
|
|
doc = implementation.createDocument(NAMESPACE, "template", null);
|
|
try {
|
|
doc.documentElement.innerHTML = IS_EMPTY_INPUT ? "" : dirtyPayload;
|
|
} catch (_) {
|
|
}
|
|
}
|
|
var body = doc.body || doc.documentElement;
|
|
if (dirty && leadingWhitespace) {
|
|
body.insertBefore(document2.createTextNode(leadingWhitespace), body.childNodes[0] || null);
|
|
}
|
|
if (NAMESPACE === HTML_NAMESPACE) {
|
|
return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? "html" : "body")[0];
|
|
}
|
|
return WHOLE_DOCUMENT ? doc.documentElement : body;
|
|
};
|
|
var _createIterator = function _createIterator2(root) {
|
|
return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null, false);
|
|
};
|
|
var _isClobbered = function _isClobbered2(elm) {
|
|
return elm instanceof HTMLFormElement && (typeof elm.nodeName !== "string" || typeof elm.textContent !== "string" || typeof elm.removeChild !== "function" || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== "function" || typeof elm.setAttribute !== "function" || typeof elm.namespaceURI !== "string" || typeof elm.insertBefore !== "function");
|
|
};
|
|
var _isNode = function _isNode2(object) {
|
|
return (typeof Node === "undefined" ? "undefined" : _typeof(Node)) === "object" ? object instanceof Node : object && (typeof object === "undefined" ? "undefined" : _typeof(object)) === "object" && typeof object.nodeType === "number" && typeof object.nodeName === "string";
|
|
};
|
|
var _executeHook = function _executeHook2(entryPoint, currentNode, data) {
|
|
if (!hooks[entryPoint]) {
|
|
return;
|
|
}
|
|
arrayForEach(hooks[entryPoint], function(hook) {
|
|
hook.call(DOMPurify2, currentNode, data, CONFIG);
|
|
});
|
|
};
|
|
var _sanitizeElements = function _sanitizeElements2(currentNode) {
|
|
var content = void 0;
|
|
_executeHook("beforeSanitizeElements", currentNode, null);
|
|
if (_isClobbered(currentNode)) {
|
|
_forceRemove(currentNode);
|
|
return true;
|
|
}
|
|
if (stringMatch(currentNode.nodeName, /[\u0080-\uFFFF]/)) {
|
|
_forceRemove(currentNode);
|
|
return true;
|
|
}
|
|
var tagName = transformCaseFunc(currentNode.nodeName);
|
|
_executeHook("uponSanitizeElement", currentNode, {
|
|
tagName,
|
|
allowedTags: ALLOWED_TAGS
|
|
});
|
|
if (!_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\w]/g, currentNode.innerHTML) && regExpTest(/<[/\w]/g, currentNode.textContent)) {
|
|
_forceRemove(currentNode);
|
|
return true;
|
|
}
|
|
if (tagName === "select" && regExpTest(/<template/i, currentNode.innerHTML)) {
|
|
_forceRemove(currentNode);
|
|
return true;
|
|
}
|
|
if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
|
|
if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {
|
|
var parentNode = getParentNode(currentNode) || currentNode.parentNode;
|
|
var childNodes = getChildNodes(currentNode) || currentNode.childNodes;
|
|
if (childNodes && parentNode) {
|
|
var childCount = childNodes.length;
|
|
for (var i = childCount - 1; i >= 0; --i) {
|
|
parentNode.insertBefore(cloneNode(childNodes[i], true), getNextSibling(currentNode));
|
|
}
|
|
}
|
|
}
|
|
if (!FORBID_TAGS[tagName] && _basicCustomElementTest(tagName)) {
|
|
if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName))
|
|
return false;
|
|
if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName))
|
|
return false;
|
|
}
|
|
_forceRemove(currentNode);
|
|
return true;
|
|
}
|
|
if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {
|
|
_forceRemove(currentNode);
|
|
return true;
|
|
}
|
|
if ((tagName === "noscript" || tagName === "noembed") && regExpTest(/<\/no(script|embed)/i, currentNode.innerHTML)) {
|
|
_forceRemove(currentNode);
|
|
return true;
|
|
}
|
|
if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {
|
|
content = currentNode.textContent;
|
|
content = stringReplace(content, MUSTACHE_EXPR$$1, " ");
|
|
content = stringReplace(content, ERB_EXPR$$1, " ");
|
|
if (currentNode.textContent !== content) {
|
|
arrayPush(DOMPurify2.removed, { element: currentNode.cloneNode() });
|
|
currentNode.textContent = content;
|
|
}
|
|
}
|
|
_executeHook("afterSanitizeElements", currentNode, null);
|
|
return false;
|
|
};
|
|
var _isValidAttribute = function _isValidAttribute2(lcTag, lcName, value) {
|
|
if (SANITIZE_DOM && (lcName === "id" || lcName === "name") && (value in document2 || value in formElement)) {
|
|
return false;
|
|
}
|
|
if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR$$1, lcName))
|
|
;
|
|
else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$$1, lcName))
|
|
;
|
|
else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {
|
|
if (_basicCustomElementTest(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) || lcName === "is" && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value)))
|
|
;
|
|
else {
|
|
return false;
|
|
}
|
|
} else if (URI_SAFE_ATTRIBUTES[lcName])
|
|
;
|
|
else if (regExpTest(IS_ALLOWED_URI$$1, stringReplace(value, ATTR_WHITESPACE$$1, "")))
|
|
;
|
|
else if ((lcName === "src" || lcName === "xlink:href" || lcName === "href") && lcTag !== "script" && stringIndexOf(value, "data:") === 0 && DATA_URI_TAGS[lcTag])
|
|
;
|
|
else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$$1, stringReplace(value, ATTR_WHITESPACE$$1, "")))
|
|
;
|
|
else if (!value)
|
|
;
|
|
else {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
var _basicCustomElementTest = function _basicCustomElementTest2(tagName) {
|
|
return tagName.indexOf("-") > 0;
|
|
};
|
|
var _sanitizeAttributes = function _sanitizeAttributes2(currentNode) {
|
|
var attr = void 0;
|
|
var value = void 0;
|
|
var lcName = void 0;
|
|
var l = void 0;
|
|
_executeHook("beforeSanitizeAttributes", currentNode, null);
|
|
var attributes = currentNode.attributes;
|
|
if (!attributes) {
|
|
return;
|
|
}
|
|
var hookEvent = {
|
|
attrName: "",
|
|
attrValue: "",
|
|
keepAttr: true,
|
|
allowedAttributes: ALLOWED_ATTR
|
|
};
|
|
l = attributes.length;
|
|
while (l--) {
|
|
attr = attributes[l];
|
|
var _attr = attr, name = _attr.name, namespaceURI = _attr.namespaceURI;
|
|
value = stringTrim(attr.value);
|
|
lcName = transformCaseFunc(name);
|
|
hookEvent.attrName = lcName;
|
|
hookEvent.attrValue = value;
|
|
hookEvent.keepAttr = true;
|
|
hookEvent.forceKeepAttr = void 0;
|
|
_executeHook("uponSanitizeAttribute", currentNode, hookEvent);
|
|
value = hookEvent.attrValue;
|
|
if (hookEvent.forceKeepAttr) {
|
|
continue;
|
|
}
|
|
_removeAttribute(name, currentNode);
|
|
if (!hookEvent.keepAttr) {
|
|
continue;
|
|
}
|
|
if (regExpTest(/\/>/i, value)) {
|
|
_removeAttribute(name, currentNode);
|
|
continue;
|
|
}
|
|
if (SAFE_FOR_TEMPLATES) {
|
|
value = stringReplace(value, MUSTACHE_EXPR$$1, " ");
|
|
value = stringReplace(value, ERB_EXPR$$1, " ");
|
|
}
|
|
var lcTag = transformCaseFunc(currentNode.nodeName);
|
|
if (!_isValidAttribute(lcTag, lcName, value)) {
|
|
continue;
|
|
}
|
|
try {
|
|
if (namespaceURI) {
|
|
currentNode.setAttributeNS(namespaceURI, name, value);
|
|
} else {
|
|
currentNode.setAttribute(name, value);
|
|
}
|
|
arrayPop(DOMPurify2.removed);
|
|
} catch (_) {
|
|
}
|
|
}
|
|
_executeHook("afterSanitizeAttributes", currentNode, null);
|
|
};
|
|
var _sanitizeShadowDOM = function _sanitizeShadowDOM2(fragment) {
|
|
var shadowNode = void 0;
|
|
var shadowIterator = _createIterator(fragment);
|
|
_executeHook("beforeSanitizeShadowDOM", fragment, null);
|
|
while (shadowNode = shadowIterator.nextNode()) {
|
|
_executeHook("uponSanitizeShadowNode", shadowNode, null);
|
|
if (_sanitizeElements(shadowNode)) {
|
|
continue;
|
|
}
|
|
if (shadowNode.content instanceof DocumentFragment) {
|
|
_sanitizeShadowDOM2(shadowNode.content);
|
|
}
|
|
_sanitizeAttributes(shadowNode);
|
|
}
|
|
_executeHook("afterSanitizeShadowDOM", fragment, null);
|
|
};
|
|
DOMPurify2.sanitize = function(dirty, cfg) {
|
|
var body = void 0;
|
|
var importedNode = void 0;
|
|
var currentNode = void 0;
|
|
var oldNode = void 0;
|
|
var returnNode = void 0;
|
|
IS_EMPTY_INPUT = !dirty;
|
|
if (IS_EMPTY_INPUT) {
|
|
dirty = "<!-->";
|
|
}
|
|
if (typeof dirty !== "string" && !_isNode(dirty)) {
|
|
if (typeof dirty.toString !== "function") {
|
|
throw typeErrorCreate("toString is not a function");
|
|
} else {
|
|
dirty = dirty.toString();
|
|
if (typeof dirty !== "string") {
|
|
throw typeErrorCreate("dirty is not a string, aborting");
|
|
}
|
|
}
|
|
}
|
|
if (!DOMPurify2.isSupported) {
|
|
if (_typeof(window2.toStaticHTML) === "object" || typeof window2.toStaticHTML === "function") {
|
|
if (typeof dirty === "string") {
|
|
return window2.toStaticHTML(dirty);
|
|
}
|
|
if (_isNode(dirty)) {
|
|
return window2.toStaticHTML(dirty.outerHTML);
|
|
}
|
|
}
|
|
return dirty;
|
|
}
|
|
if (!SET_CONFIG) {
|
|
_parseConfig(cfg);
|
|
}
|
|
DOMPurify2.removed = [];
|
|
if (typeof dirty === "string") {
|
|
IN_PLACE = false;
|
|
}
|
|
if (IN_PLACE)
|
|
;
|
|
else if (dirty instanceof Node) {
|
|
body = _initDocument("<!---->");
|
|
importedNode = body.ownerDocument.importNode(dirty, true);
|
|
if (importedNode.nodeType === 1 && importedNode.nodeName === "BODY") {
|
|
body = importedNode;
|
|
} else if (importedNode.nodeName === "HTML") {
|
|
body = importedNode;
|
|
} else {
|
|
body.appendChild(importedNode);
|
|
}
|
|
} else {
|
|
if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && dirty.indexOf("<") === -1) {
|
|
return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;
|
|
}
|
|
body = _initDocument(dirty);
|
|
if (!body) {
|
|
return RETURN_DOM ? null : emptyHTML;
|
|
}
|
|
}
|
|
if (body && FORCE_BODY) {
|
|
_forceRemove(body.firstChild);
|
|
}
|
|
var nodeIterator = _createIterator(IN_PLACE ? dirty : body);
|
|
while (currentNode = nodeIterator.nextNode()) {
|
|
if (currentNode.nodeType === 3 && currentNode === oldNode) {
|
|
continue;
|
|
}
|
|
if (_sanitizeElements(currentNode)) {
|
|
continue;
|
|
}
|
|
if (currentNode.content instanceof DocumentFragment) {
|
|
_sanitizeShadowDOM(currentNode.content);
|
|
}
|
|
_sanitizeAttributes(currentNode);
|
|
oldNode = currentNode;
|
|
}
|
|
oldNode = null;
|
|
if (IN_PLACE) {
|
|
return dirty;
|
|
}
|
|
if (RETURN_DOM) {
|
|
if (RETURN_DOM_FRAGMENT) {
|
|
returnNode = createDocumentFragment.call(body.ownerDocument);
|
|
while (body.firstChild) {
|
|
returnNode.appendChild(body.firstChild);
|
|
}
|
|
} else {
|
|
returnNode = body;
|
|
}
|
|
if (ALLOWED_ATTR.shadowroot) {
|
|
returnNode = importNode.call(originalDocument, returnNode, true);
|
|
}
|
|
return returnNode;
|
|
}
|
|
var serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;
|
|
if (SAFE_FOR_TEMPLATES) {
|
|
serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR$$1, " ");
|
|
serializedHTML = stringReplace(serializedHTML, ERB_EXPR$$1, " ");
|
|
}
|
|
return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;
|
|
};
|
|
DOMPurify2.setConfig = function(cfg) {
|
|
_parseConfig(cfg);
|
|
SET_CONFIG = true;
|
|
};
|
|
DOMPurify2.clearConfig = function() {
|
|
CONFIG = null;
|
|
SET_CONFIG = false;
|
|
};
|
|
DOMPurify2.isValidAttribute = function(tag, attr, value) {
|
|
if (!CONFIG) {
|
|
_parseConfig({});
|
|
}
|
|
var lcTag = transformCaseFunc(tag);
|
|
var lcName = transformCaseFunc(attr);
|
|
return _isValidAttribute(lcTag, lcName, value);
|
|
};
|
|
DOMPurify2.addHook = function(entryPoint, hookFunction) {
|
|
if (typeof hookFunction !== "function") {
|
|
return;
|
|
}
|
|
hooks[entryPoint] = hooks[entryPoint] || [];
|
|
arrayPush(hooks[entryPoint], hookFunction);
|
|
};
|
|
DOMPurify2.removeHook = function(entryPoint) {
|
|
if (hooks[entryPoint]) {
|
|
arrayPop(hooks[entryPoint]);
|
|
}
|
|
};
|
|
DOMPurify2.removeHooks = function(entryPoint) {
|
|
if (hooks[entryPoint]) {
|
|
hooks[entryPoint] = [];
|
|
}
|
|
};
|
|
DOMPurify2.removeAllHooks = function() {
|
|
hooks = {};
|
|
};
|
|
return DOMPurify2;
|
|
}
|
|
var purify = createDOMPurify();
|
|
return purify;
|
|
});
|
|
}
|
|
});
|
|
|
|
// src/main.ts
|
|
__export(exports, {
|
|
default: () => FormatNotionPlugin
|
|
});
|
|
var import_obsidian3 = __toModule(require("obsidian"));
|
|
|
|
// src/utils/iframe_generator.utils.ts
|
|
var import_oembed_parser = __toModule(require_oembed_parser());
|
|
var DOMPurify = __toModule(require_purify());
|
|
var buildDefaultIframe = (url) => {
|
|
return `<iframe src=${url} allow="fullscreen" allowfullscreen style="height:100%;width:100%; aspect-ratio: 16 / 9; "></iframe>`;
|
|
};
|
|
var getIframeGeneratorFromSanitize = (sanitize2) => (url) => __async(void 0, null, function* () {
|
|
const defaultHtml = buildDefaultIframe(url);
|
|
if (!(0, import_oembed_parser.hasProvider)(url)) {
|
|
return defaultHtml;
|
|
}
|
|
try {
|
|
const oembedData = yield (0, import_oembed_parser.extract)(url);
|
|
if (oembedData && oembedData.type !== "rich" && oembedData.type !== "video") {
|
|
throw new Error("Not a rich or video type:" + oembedData);
|
|
}
|
|
const html = oembedData == null ? void 0 : oembedData.html;
|
|
const cleanedHtml = sanitize2(html, { ALLOWED_TAGS: ["iframe"] });
|
|
if (!cleanedHtml.startsWith("<iframe")) {
|
|
throw new Error("Not an iframe, we currently do not support this: " + html);
|
|
}
|
|
return cleanedHtml;
|
|
} catch (e) {
|
|
console.warn(`Could not get oembed data for ${url}`, e);
|
|
return defaultHtml;
|
|
}
|
|
});
|
|
var getIframe = getIframeGeneratorFromSanitize(DOMPurify.sanitize);
|
|
|
|
// src/configure_iframe_modal.ts
|
|
var import_obsidian2 = __toModule(require("obsidian"));
|
|
|
|
// src/components/aspect_ratio_input.ts
|
|
var import_obsidian = __toModule(require("obsidian"));
|
|
function createAspectRatioInput(iframeRatioContainer, onAspectRatioUpdate) {
|
|
const aspectRatioInputContainer = iframeRatioContainer.createEl("div");
|
|
const heightInputName = "heightValue";
|
|
aspectRatioInputContainer.className = "space-y";
|
|
const heightInputLabel = aspectRatioInputContainer.createEl("label");
|
|
heightInputLabel.setAttribute("for", heightInputName);
|
|
heightInputLabel.innerText = "Aspect Ratio: ";
|
|
const ratioInput = new import_obsidian.DropdownComponent(aspectRatioInputContainer);
|
|
ratioInput.addOptions({
|
|
"16/9": "16/9",
|
|
"4/3": "4/3",
|
|
"1/1": "1/1",
|
|
"none": "none"
|
|
});
|
|
ratioInput.onChange(onAspectRatioUpdate);
|
|
return aspectRatioInputContainer;
|
|
}
|
|
|
|
// src/constant.ts
|
|
var defaultHeight = "100px";
|
|
var _a, _b;
|
|
var electronMajorVersion = (_b = (_a = process.versions) == null ? void 0 : _a.electron) == null ? void 0 : _b.split(".")[0];
|
|
var doesSupportAspectRatio = +electronMajorVersion >= 12;
|
|
|
|
// src/utils/ratio.utils.ts
|
|
var swapRatio = (ratio) => {
|
|
if (ratio === "none") {
|
|
return ratio;
|
|
}
|
|
const [a, b] = ratio.split("/");
|
|
return `${b}/${a}`;
|
|
``;
|
|
};
|
|
var addAspectRatio = (iframe) => {
|
|
console.log(JSON.stringify(iframe.style), iframe.style.aspectRatio.toString());
|
|
if ((iframe == null ? void 0 : iframe.style.getPropertyValue("aspect-ratio")) || (iframe == null ? void 0 : iframe.style.aspectRatio)) {
|
|
return iframe;
|
|
}
|
|
const ratio = iframe.offsetWidth / iframe.offsetHeight;
|
|
iframe.style.setProperty("aspect-ratio", ratio.toString());
|
|
console.log("Set ratio", iframe.offsetWidth, iframe.offsetHeight, "computed", ratio);
|
|
return iframe;
|
|
};
|
|
|
|
// src/components/resizable_iframe_container.ts
|
|
function createIframeContainerEl(contentEl, iframeHtml) {
|
|
const iframeContainer = contentEl.createEl("div");
|
|
iframeContainer.className = "iframe__container space-y";
|
|
const fragment = document.createElement("template");
|
|
fragment.innerHTML = iframeHtml;
|
|
const iframe = fragment.content.firstChild;
|
|
iframeContainer.appendChild(iframe);
|
|
console.log(iframe.outerHTML);
|
|
addAspectRatio(iframe);
|
|
const resetToDefaultWidth = () => {
|
|
iframe.style.width = "100%";
|
|
iframe.style.height = "100%";
|
|
};
|
|
resetToDefaultWidth();
|
|
iframe.allowFullscreen = true;
|
|
iframe.allow = "fullscreen";
|
|
return {
|
|
iframeContainer,
|
|
updateAspectRatio: (value) => {
|
|
if (value === "none") {
|
|
iframe.style.removeProperty("aspect-ratio");
|
|
} else {
|
|
iframe.style.setProperty("aspect-ratio", value);
|
|
resetToDefaultWidth();
|
|
}
|
|
},
|
|
outputHtml: () => {
|
|
return iframe.outerHTML;
|
|
},
|
|
resetToDefaultWidth
|
|
};
|
|
}
|
|
function createIframeContainerElLegacy(contentEl, url) {
|
|
const iframeContainer = contentEl.createEl("div");
|
|
iframeContainer.className = "iframe__container__legacy space-y";
|
|
iframeContainer.style.overflow = "auto";
|
|
iframeContainer.style.resize = "both";
|
|
iframeContainer.style.height = defaultHeight;
|
|
const ratioContainer = iframeContainer.createEl("div");
|
|
ratioContainer.style.display = "block";
|
|
ratioContainer.style.position = "relative";
|
|
ratioContainer.style.width = "100%";
|
|
ratioContainer.style.height = "0px";
|
|
ratioContainer.style.setProperty("--aspect-ratio", "9/16");
|
|
ratioContainer.style.paddingBottom = "calc(var(--aspect-ratio) * 100%)";
|
|
const iframe = ratioContainer.createEl("iframe");
|
|
iframe.src = url;
|
|
iframe.allow = "fullscreen";
|
|
iframe.style.position = "absolute";
|
|
iframe.style.top = "0px";
|
|
iframe.style.left = "0px";
|
|
iframe.style.height = "100%";
|
|
iframe.style.width = "100%";
|
|
iframeContainer.style.height = ratioContainer.offsetHeight + "px";
|
|
return {
|
|
iframeContainer,
|
|
updateAspectRatio: (value) => {
|
|
if (value === "none") {
|
|
ratioContainer.style.paddingBottom = "0px";
|
|
ratioContainer.style.height = "100%";
|
|
} else {
|
|
ratioContainer.style.paddingBottom = "calc(var(--aspect-ratio) * 100%)";
|
|
ratioContainer.style.height = "0px";
|
|
}
|
|
ratioContainer.style.setProperty("--aspect-ratio", swapRatio(value));
|
|
},
|
|
outputHtml: () => {
|
|
iframeContainer.className = "";
|
|
iframeContainer.style.height = ratioContainer.offsetHeight + "px";
|
|
return ratioContainer.outerHTML;
|
|
},
|
|
resetToDefaultWidth: () => {
|
|
iframeContainer.style.width = "100%";
|
|
iframeContainer.style.height = ratioContainer.offsetHeight + "px";
|
|
}
|
|
};
|
|
}
|
|
|
|
// src/configure_iframe_modal.ts
|
|
var ConfigureIframeModal = class extends import_obsidian2.Modal {
|
|
constructor(app, iframeHtml, editor) {
|
|
super(app);
|
|
this.iframeHtml = iframeHtml;
|
|
this.editor = editor;
|
|
this.containerEl.className += " iframe__modal";
|
|
}
|
|
onOpen() {
|
|
const { contentEl } = this;
|
|
const container = contentEl.createEl("div");
|
|
container.className = "iframe__modal__container";
|
|
const title = contentEl.createEl("h2");
|
|
title.innerText = "This is how the link is going to look";
|
|
const subTitle = contentEl.createEl("div");
|
|
const outdatedObsidianWarning = doesSupportAspectRatio ? "" : "</br><strong>For the best experience, please re-download Obsidian to get the latest Electron version</strong>.";
|
|
subTitle.innerHTML = "To choose the size, drag the <strong>bottom right</strong> (the preview won't respect the note width)." + outdatedObsidianWarning;
|
|
const { iframeContainer, outputHtml, resetToDefaultWidth, updateAspectRatio } = doesSupportAspectRatio ? createIframeContainerEl(contentEl, this.iframeHtml) : createIframeContainerElLegacy(contentEl, this.iframeHtml);
|
|
const widthCheckbox = createShouldUseDefaultWidthButton(container, resetToDefaultWidth);
|
|
const aspectRatioInput = createAspectRatioInput(container, updateAspectRatio);
|
|
const buttonContainer = contentEl.createEl("div");
|
|
buttonContainer.className = "button__container space-y";
|
|
const cancelButton = buttonContainer.createEl("button");
|
|
cancelButton.setText("Cancel");
|
|
cancelButton.onclick = (e) => {
|
|
e.preventDefault();
|
|
this.close();
|
|
};
|
|
const okButton = buttonContainer.createEl("button");
|
|
okButton.setText("OK");
|
|
okButton.className = "mod-warning";
|
|
okButton.onclick = (e) => {
|
|
e.preventDefault();
|
|
this.editor.replaceSelection(outputHtml());
|
|
this.close();
|
|
};
|
|
container.appendChild(title);
|
|
container.appendChild(subTitle);
|
|
container.appendChild(aspectRatioInput);
|
|
container.appendChild(widthCheckbox);
|
|
container.appendChild(iframeContainer);
|
|
container.appendChild(buttonContainer);
|
|
contentEl.appendChild(container);
|
|
}
|
|
onClose() {
|
|
const { contentEl } = this;
|
|
contentEl.empty();
|
|
}
|
|
};
|
|
function createShouldUseDefaultWidthButton(container, onClick) {
|
|
const name = "shouldUseDefaultWidth";
|
|
const checkboxContainer = container.createEl("div");
|
|
checkboxContainer.className = "space-y";
|
|
const label = checkboxContainer.createEl("button");
|
|
label.setAttribute("for", name);
|
|
label.innerText = "Match the note width (reset the size)";
|
|
label.onclick = onClick;
|
|
return checkboxContainer;
|
|
}
|
|
|
|
// src/utils/url.utils.ts
|
|
function isUrl(text) {
|
|
const urlRegex = new RegExp("^(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/)?[a-z0-9]+([\\-.]{1}[a-z0-9]+)*\\.[a-z]{2,5}(:[0-9]{1,5})?(\\/.*)?$");
|
|
return urlRegex.test(text);
|
|
}
|
|
|
|
// src/main.ts
|
|
var FormatNotionPlugin = class extends import_obsidian3.Plugin {
|
|
onload() {
|
|
return __async(this, null, function* () {
|
|
console.log("Loading obsidian-convert-url-to-iframe");
|
|
this.addCommand({
|
|
id: "url-to-iframe",
|
|
name: "URL to Preview/Iframe",
|
|
callback: () => this.urlToIframe(),
|
|
hotkeys: [
|
|
{
|
|
modifiers: ["Alt"],
|
|
key: "i"
|
|
}
|
|
]
|
|
});
|
|
this.registerEvent(this.app.workspace.on("editor-menu", (menu, _, view) => {
|
|
const url = this.getCleanedUrl();
|
|
if (url) {
|
|
menu.addItem((item) => {
|
|
item.setTitle("Url to Preview/Iframe").setIcon("create-new").onClick((_2) => {
|
|
this.urlToIframe(url);
|
|
});
|
|
});
|
|
}
|
|
}));
|
|
});
|
|
}
|
|
urlToIframe(inputUrl) {
|
|
return __async(this, null, function* () {
|
|
const activeLeaf = this.app.workspace.activeLeaf;
|
|
const editor = activeLeaf.view.sourceMode.cmEditor;
|
|
const url = inputUrl || this.getCleanedUrl();
|
|
if (url) {
|
|
const iframeHtml = yield getIframe(url);
|
|
const modal = new ConfigureIframeModal(this.app, iframeHtml, editor);
|
|
modal.open();
|
|
} else {
|
|
new import_obsidian3.Notice("Select a URL to convert to an preview/iframe.");
|
|
}
|
|
});
|
|
}
|
|
getCleanedUrl() {
|
|
const activeLeaf = this.app.workspace.activeLeaf;
|
|
const editor = activeLeaf.view.sourceMode.cmEditor;
|
|
const selectedText = editor.somethingSelected() ? editor.getSelection() : null;
|
|
const cleanedText = selectedText == null ? void 0 : selectedText.trim();
|
|
if (selectedText && isUrl(cleanedText)) {
|
|
return cleanedText;
|
|
}
|
|
return null;
|
|
}
|
|
};
|
|
/*! @license DOMPurify 2.3.4 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.3.4/LICENSE */
|