@atproto/pds 0.5.27 → 0.5.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +58 -0
- package/dist/actor-store/blob/transactor.d.ts +1 -5
- package/dist/actor-store/blob/transactor.d.ts.map +1 -1
- package/dist/actor-store/blob/transactor.js +72 -43
- package/dist/actor-store/blob/transactor.js.map +1 -1
- package/dist/api/com/atproto/identity/resolveHandle.d.ts.map +1 -1
- package/dist/api/com/atproto/identity/resolveHandle.js +1 -1
- package/dist/api/com/atproto/identity/resolveHandle.js.map +1 -1
- package/dist/api/com/atproto/repo/uploadBlob.d.ts.map +1 -1
- package/dist/api/com/atproto/repo/uploadBlob.js +1 -1
- package/dist/api/com/atproto/repo/uploadBlob.js.map +1 -1
- package/dist/auth-verifier.d.ts.map +1 -1
- package/dist/auth-verifier.js +12 -6
- package/dist/auth-verifier.js.map +1 -1
- package/dist/context.d.ts +2 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +6 -0
- package/dist/context.js.map +1 -1
- package/dist/lexicons/app/bsky/actor/contentVisibilityDeclaration.d.ts +3 -0
- package/dist/lexicons/app/bsky/actor/contentVisibilityDeclaration.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/actor/contentVisibilityDeclaration.defs.d.ts +66 -0
- package/dist/lexicons/app/bsky/actor/contentVisibilityDeclaration.defs.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/actor/contentVisibilityDeclaration.defs.js +26 -0
- package/dist/lexicons/app/bsky/actor/contentVisibilityDeclaration.defs.js.map +1 -0
- package/dist/lexicons/app/bsky/actor/contentVisibilityDeclaration.js +6 -0
- package/dist/lexicons/app/bsky/actor/contentVisibilityDeclaration.js.map +1 -0
- package/dist/lexicons/app/bsky/actor.d.ts +1 -0
- package/dist/lexicons/app/bsky/actor.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/actor.js +1 -0
- package/dist/lexicons/app/bsky/actor.js.map +1 -1
- package/dist/lexicons/app/bsky/authCreatePosts.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/authCreatePosts.defs.js +5 -0
- package/dist/lexicons/app/bsky/authCreatePosts.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/authFullApp.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/authFullApp.defs.js +5 -0
- package/dist/lexicons/app/bsky/authFullApp.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/embed/video.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/embed/video.defs.js +2 -4
- package/dist/lexicons/app/bsky/embed/video.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/video/abortUpload.d.ts +3 -0
- package/dist/lexicons/app/bsky/video/abortUpload.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/video/abortUpload.defs.d.ts +53 -0
- package/dist/lexicons/app/bsky/video/abortUpload.defs.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/video/abortUpload.defs.js +26 -0
- package/dist/lexicons/app/bsky/video/abortUpload.defs.js.map +1 -0
- package/dist/lexicons/app/bsky/video/abortUpload.js +6 -0
- package/dist/lexicons/app/bsky/video/abortUpload.js.map +1 -0
- package/dist/lexicons/app/bsky/video/defs.defs.d.ts +1 -1
- package/dist/lexicons/app/bsky/video/defs.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/video/defs.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/video/finishUpload.d.ts +3 -0
- package/dist/lexicons/app/bsky/video/finishUpload.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/video/finishUpload.defs.d.ts +42 -0
- package/dist/lexicons/app/bsky/video/finishUpload.defs.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/video/finishUpload.defs.js +30 -0
- package/dist/lexicons/app/bsky/video/finishUpload.defs.js.map +1 -0
- package/dist/lexicons/app/bsky/video/finishUpload.js +6 -0
- package/dist/lexicons/app/bsky/video/finishUpload.js.map +1 -0
- package/dist/lexicons/app/bsky/video/getUploadStatus.d.ts +3 -0
- package/dist/lexicons/app/bsky/video/getUploadStatus.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/video/getUploadStatus.defs.d.ts +73 -0
- package/dist/lexicons/app/bsky/video/getUploadStatus.defs.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/video/getUploadStatus.defs.js +30 -0
- package/dist/lexicons/app/bsky/video/getUploadStatus.defs.js.map +1 -0
- package/dist/lexicons/app/bsky/video/getUploadStatus.js +6 -0
- package/dist/lexicons/app/bsky/video/getUploadStatus.js.map +1 -0
- package/dist/lexicons/app/bsky/video/startUpload.d.ts +3 -0
- package/dist/lexicons/app/bsky/video/startUpload.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/video/startUpload.defs.d.ts +63 -0
- package/dist/lexicons/app/bsky/video/startUpload.defs.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/video/startUpload.defs.js +36 -0
- package/dist/lexicons/app/bsky/video/startUpload.defs.js.map +1 -0
- package/dist/lexicons/app/bsky/video/startUpload.js +6 -0
- package/dist/lexicons/app/bsky/video/startUpload.js.map +1 -0
- package/dist/lexicons/app/bsky/video/uploadPart.d.ts +3 -0
- package/dist/lexicons/app/bsky/video/uploadPart.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/video/uploadPart.defs.d.ts +37 -0
- package/dist/lexicons/app/bsky/video/uploadPart.defs.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/video/uploadPart.defs.js +31 -0
- package/dist/lexicons/app/bsky/video/uploadPart.defs.js.map +1 -0
- package/dist/lexicons/app/bsky/video/uploadPart.js +6 -0
- package/dist/lexicons/app/bsky/video/uploadPart.js.map +1 -0
- package/dist/lexicons/app/bsky/video.d.ts +5 -0
- package/dist/lexicons/app/bsky/video.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/video.js +5 -0
- package/dist/lexicons/app/bsky/video.js.map +1 -1
- package/dist/mailer/templates/confirm-email.js +44 -1198
- package/dist/mailer/templates/confirm-email.js.map +1 -7
- package/dist/mailer/templates/delete-account.js +25 -1190
- package/dist/mailer/templates/delete-account.js.map +1 -7
- package/dist/mailer/templates/plc-operation.js +25 -1190
- package/dist/mailer/templates/plc-operation.js.map +1 -7
- package/dist/mailer/templates/reset-password.js +33 -1190
- package/dist/mailer/templates/reset-password.js.map +1 -7
- package/dist/mailer/templates/update-email.js +25 -1190
- package/dist/mailer/templates/update-email.js.map +1 -7
- package/dist/scripts/index.d.ts +2 -2
- package/dist/scripts/index.d.ts.map +1 -1
- package/dist/scripts/index.js +2 -2
- package/dist/scripts/index.js.map +1 -1
- package/dist/telemetry.js +8 -186
- package/dist/telemetry.js.map +1 -1
- package/example.env +55 -0
- package/package.json +23 -32
|
@@ -1,7 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/utils.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/exception.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/helpers/block-helper-missing.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/helpers/each.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/helpers/helper-missing.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/helpers/if.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/helpers/log.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/helpers/lookup.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/helpers/with.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/helpers.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/decorators/inline.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/decorators.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/logger.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/internal/create-new-lookup-object.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/internal/proto-access.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/base.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/safe-string.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/internal/wrapHelper.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/runtime.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars/no-conflict.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/lib/handlebars.runtime.js", "../../../../../node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/runtime.js", "../../../src/mailer/templates/update-email.hbs"],
|
|
4
|
-
"sourcesContent": ["const escape = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`',\n '=': '='\n};\n\nconst badChars = /[&<>\"'`=]/g,\n possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n return escape[chr];\n}\n\nexport function extend(obj /* , ...source */) {\n for (let i = 1; i < arguments.length; i++) {\n for (let key in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n obj[key] = arguments[i][key];\n }\n }\n }\n\n return obj;\n}\n\nexport let toString = Object.prototype.toString;\n\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nlet isFunction = function(value) {\n return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n isFunction = function(value) {\n return (\n typeof value === 'function' &&\n toString.call(value) === '[object Function]'\n );\n };\n}\nexport { isFunction };\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nexport const isArray =\n Array.isArray ||\n function(value) {\n return value && typeof value === 'object'\n ? toString.call(value) === '[object Array]'\n : false;\n };\n\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\nexport function indexOf(array, value) {\n for (let i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n return -1;\n}\n\nexport function escapeExpression(string) {\n if (typeof string !== 'string') {\n // don't escape SafeStrings, since they're already safe\n if (string && string.toHTML) {\n return string.toHTML();\n } else if (string == null) {\n return '';\n } else if (!string) {\n return string + '';\n }\n\n // Force a string conversion as this will be done by the append regardless and\n // the regex test will do this transparently behind the scenes, causing issues if\n // an object's to string has escaped characters in it.\n string = '' + string;\n }\n\n if (!possible.test(string)) {\n return string;\n }\n return string.replace(badChars, escapeChar);\n}\n\nexport function isEmpty(value) {\n if (!value && value !== 0) {\n return true;\n } else if (isArray(value) && value.length === 0) {\n return true;\n } else {\n return false;\n }\n}\n\nexport function createFrame(object) {\n let frame = extend({}, object);\n frame._parent = object;\n return frame;\n}\n\nexport function blockParams(params, ids) {\n params.path = ids;\n return params;\n}\n\nexport function appendContextPath(contextPath, id) {\n return (contextPath ? contextPath + '.' : '') + id;\n}\n", "const errorProps = [\n 'description',\n 'fileName',\n 'lineNumber',\n 'endLineNumber',\n 'message',\n 'name',\n 'number',\n 'stack'\n];\n\nfunction Exception(message, node) {\n let loc = node && node.loc,\n line,\n endLineNumber,\n column,\n endColumn;\n\n if (loc) {\n line = loc.start.line;\n endLineNumber = loc.end.line;\n column = loc.start.column;\n endColumn = loc.end.column;\n\n message += ' - ' + line + ':' + column;\n }\n\n let tmp = Error.prototype.constructor.call(this, message);\n\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (let idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n\n try {\n if (loc) {\n this.lineNumber = line;\n this.endLineNumber = endLineNumber;\n\n // Work around issue under safari where we can't directly set the column value\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(this, 'column', {\n value: column,\n enumerable: true\n });\n Object.defineProperty(this, 'endColumn', {\n value: endColumn,\n enumerable: true\n });\n } else {\n this.column = column;\n this.endColumn = endColumn;\n }\n }\n } catch (nop) {\n /* Ignore if the browser is very particular */\n }\n}\n\nException.prototype = new Error();\n\nexport default Exception;\n", "import { appendContextPath, createFrame, isArray } from '../utils';\n\nexport default function(instance) {\n instance.registerHelper('blockHelperMissing', function(context, options) {\n let inverse = options.inverse,\n fn = options.fn;\n\n if (context === true) {\n return fn(this);\n } else if (context === false || context == null) {\n return inverse(this);\n } else if (isArray(context)) {\n if (context.length > 0) {\n if (options.ids) {\n options.ids = [options.name];\n }\n\n return instance.helpers.each(context, options);\n } else {\n return inverse(this);\n }\n } else {\n if (options.data && options.ids) {\n let data = createFrame(options.data);\n data.contextPath = appendContextPath(\n options.data.contextPath,\n options.name\n );\n options = { data: data };\n }\n\n return fn(context, options);\n }\n });\n}\n", "import {\n appendContextPath,\n blockParams,\n createFrame,\n isArray,\n isFunction\n} from '../utils';\nimport Exception from '../exception';\n\nexport default function(instance) {\n instance.registerHelper('each', function(context, options) {\n if (!options) {\n throw new Exception('Must pass iterator to #each');\n }\n\n let fn = options.fn,\n inverse = options.inverse,\n i = 0,\n ret = '',\n data,\n contextPath;\n\n if (options.data && options.ids) {\n contextPath =\n appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n }\n\n if (isFunction(context)) {\n context = context.call(this);\n }\n\n if (options.data) {\n data = createFrame(options.data);\n }\n\n function execIteration(field, index, last) {\n if (data) {\n data.key = field;\n data.index = index;\n data.first = index === 0;\n data.last = !!last;\n\n if (contextPath) {\n data.contextPath = contextPath + field;\n }\n }\n\n ret =\n ret +\n fn(context[field], {\n data: data,\n blockParams: blockParams(\n [context[field], field],\n [contextPath + field, null]\n )\n });\n }\n\n if (context && typeof context === 'object') {\n if (isArray(context)) {\n for (let j = context.length; i < j; i++) {\n if (i in context) {\n execIteration(i, i, i === context.length - 1);\n }\n }\n } else if (global.Symbol && context[global.Symbol.iterator]) {\n const newContext = [];\n const iterator = context[global.Symbol.iterator]();\n for (let it = iterator.next(); !it.done; it = iterator.next()) {\n newContext.push(it.value);\n }\n context = newContext;\n for (let j = context.length; i < j; i++) {\n execIteration(i, i, i === context.length - 1);\n }\n } else {\n let priorKey;\n\n Object.keys(context).forEach(key => {\n // We're running the iterations one step out of sync so we can detect\n // the last iteration without have to scan the object twice and create\n // an itermediate keys array.\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1);\n }\n priorKey = key;\n i++;\n });\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1, true);\n }\n }\n }\n\n if (i === 0) {\n ret = inverse(this);\n }\n\n return ret;\n });\n}\n", "import Exception from '../exception';\n\nexport default function(instance) {\n instance.registerHelper('helperMissing', function(/* [args, ]options */) {\n if (arguments.length === 1) {\n // A missing field in a {{foo}} construct.\n return undefined;\n } else {\n // Someone is actually trying to call something, blow up.\n throw new Exception(\n 'Missing helper: \"' + arguments[arguments.length - 1].name + '\"'\n );\n }\n });\n}\n", "import { isEmpty, isFunction } from '../utils';\nimport Exception from '../exception';\n\nexport default function(instance) {\n instance.registerHelper('if', function(conditional, options) {\n if (arguments.length != 2) {\n throw new Exception('#if requires exactly one argument');\n }\n if (isFunction(conditional)) {\n conditional = conditional.call(this);\n }\n\n // Default behavior is to render the positive path if the value is truthy and not empty.\n // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n if ((!options.hash.includeZero && !conditional) || isEmpty(conditional)) {\n return options.inverse(this);\n } else {\n return options.fn(this);\n }\n });\n\n instance.registerHelper('unless', function(conditional, options) {\n if (arguments.length != 2) {\n throw new Exception('#unless requires exactly one argument');\n }\n return instance.helpers['if'].call(this, conditional, {\n fn: options.inverse,\n inverse: options.fn,\n hash: options.hash\n });\n });\n}\n", "export default function(instance) {\n instance.registerHelper('log', function(/* message, options */) {\n let args = [undefined],\n options = arguments[arguments.length - 1];\n for (let i = 0; i < arguments.length - 1; i++) {\n args.push(arguments[i]);\n }\n\n let level = 1;\n if (options.hash.level != null) {\n level = options.hash.level;\n } else if (options.data && options.data.level != null) {\n level = options.data.level;\n }\n args[0] = level;\n\n instance.log(...args);\n });\n}\n", "export default function(instance) {\n instance.registerHelper('lookup', function(obj, field, options) {\n if (!obj) {\n // Note for 5.0: Change to \"obj == null\" in 5.0\n return obj;\n }\n return options.lookupProperty(obj, field);\n });\n}\n", "import {\n appendContextPath,\n blockParams,\n createFrame,\n isEmpty,\n isFunction\n} from '../utils';\nimport Exception from '../exception';\n\nexport default function(instance) {\n instance.registerHelper('with', function(context, options) {\n if (arguments.length != 2) {\n throw new Exception('#with requires exactly one argument');\n }\n if (isFunction(context)) {\n context = context.call(this);\n }\n\n let fn = options.fn;\n\n if (!isEmpty(context)) {\n let data = options.data;\n if (options.data && options.ids) {\n data = createFrame(options.data);\n data.contextPath = appendContextPath(\n options.data.contextPath,\n options.ids[0]\n );\n }\n\n return fn(context, {\n data: data,\n blockParams: blockParams([context], [data && data.contextPath])\n });\n } else {\n return options.inverse(this);\n }\n });\n}\n", "import registerBlockHelperMissing from './helpers/block-helper-missing';\nimport registerEach from './helpers/each';\nimport registerHelperMissing from './helpers/helper-missing';\nimport registerIf from './helpers/if';\nimport registerLog from './helpers/log';\nimport registerLookup from './helpers/lookup';\nimport registerWith from './helpers/with';\n\nexport function registerDefaultHelpers(instance) {\n registerBlockHelperMissing(instance);\n registerEach(instance);\n registerHelperMissing(instance);\n registerIf(instance);\n registerLog(instance);\n registerLookup(instance);\n registerWith(instance);\n}\n\nexport function moveHelperToHooks(instance, helperName, keepHelper) {\n if (instance.helpers[helperName]) {\n instance.hooks[helperName] = instance.helpers[helperName];\n if (!keepHelper) {\n delete instance.helpers[helperName];\n }\n }\n}\n", "import { extend } from '../utils';\n\nexport default function(instance) {\n instance.registerDecorator('inline', function(fn, props, container, options) {\n let ret = fn;\n if (!props.partials) {\n props.partials = {};\n ret = function(context, options) {\n // Create a new partials stack frame prior to exec.\n let original = container.partials;\n container.partials = extend({}, original, props.partials);\n let ret = fn(context, options);\n container.partials = original;\n return ret;\n };\n }\n\n props.partials[options.args[0]] = options.fn;\n\n return ret;\n });\n}\n", "import registerInline from './decorators/inline';\n\nexport function registerDefaultDecorators(instance) {\n registerInline(instance);\n}\n", "import { indexOf } from './utils';\n\nlet logger = {\n methodMap: ['debug', 'info', 'warn', 'error'],\n level: 'info',\n\n // Maps a given level value to the `methodMap` indexes above.\n lookupLevel: function(level) {\n if (typeof level === 'string') {\n let levelMap = indexOf(logger.methodMap, level.toLowerCase());\n if (levelMap >= 0) {\n level = levelMap;\n } else {\n level = parseInt(level, 10);\n }\n }\n\n return level;\n },\n\n // Can be overridden in the host environment\n log: function(level, ...message) {\n level = logger.lookupLevel(level);\n\n if (\n typeof console !== 'undefined' &&\n logger.lookupLevel(logger.level) <= level\n ) {\n let method = logger.methodMap[level];\n // eslint-disable-next-line no-console\n if (!console[method]) {\n method = 'log';\n }\n console[method](...message); // eslint-disable-line no-console\n }\n }\n};\n\nexport default logger;\n", "import { extend } from '../utils';\n\n/**\n * Create a new object with \"null\"-prototype to avoid truthy results on prototype properties.\n * The resulting object can be used with \"object[property]\" to check if a property exists\n * @param {...object} sources a varargs parameter of source objects that will be merged\n * @returns {object}\n */\nexport function createNewLookupObject(...sources) {\n return extend(Object.create(null), ...sources);\n}\n", "import { createNewLookupObject } from './create-new-lookup-object';\nimport * as logger from '../logger';\n\nconst loggedProperties = Object.create(null);\n\nexport function createProtoAccessControl(runtimeOptions) {\n let defaultMethodWhiteList = Object.create(null);\n defaultMethodWhiteList['constructor'] = false;\n defaultMethodWhiteList['__defineGetter__'] = false;\n defaultMethodWhiteList['__defineSetter__'] = false;\n defaultMethodWhiteList['__lookupGetter__'] = false;\n\n let defaultPropertyWhiteList = Object.create(null);\n // eslint-disable-next-line no-proto\n defaultPropertyWhiteList['__proto__'] = false;\n\n return {\n properties: {\n whitelist: createNewLookupObject(\n defaultPropertyWhiteList,\n runtimeOptions.allowedProtoProperties\n ),\n defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n },\n methods: {\n whitelist: createNewLookupObject(\n defaultMethodWhiteList,\n runtimeOptions.allowedProtoMethods\n ),\n defaultValue: runtimeOptions.allowProtoMethodsByDefault\n }\n };\n}\n\nexport function resultIsAllowed(result, protoAccessControl, propertyName) {\n if (typeof result === 'function') {\n return checkWhiteList(protoAccessControl.methods, propertyName);\n } else {\n return checkWhiteList(protoAccessControl.properties, propertyName);\n }\n}\n\nfunction checkWhiteList(protoAccessControlForType, propertyName) {\n if (protoAccessControlForType.whitelist[propertyName] !== undefined) {\n return protoAccessControlForType.whitelist[propertyName] === true;\n }\n if (protoAccessControlForType.defaultValue !== undefined) {\n return protoAccessControlForType.defaultValue;\n }\n logUnexpecedPropertyAccessOnce(propertyName);\n return false;\n}\n\nfunction logUnexpecedPropertyAccessOnce(propertyName) {\n if (loggedProperties[propertyName] !== true) {\n loggedProperties[propertyName] = true;\n logger.log(\n 'error',\n `Handlebars: Access has been denied to resolve the property \"${propertyName}\" because it is not an \"own property\" of its parent.\\n` +\n `You can add a runtime option to disable the check or this warning:\\n` +\n `See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details`\n );\n }\n}\n\nexport function resetLoggedProperties() {\n Object.keys(loggedProperties).forEach(propertyName => {\n delete loggedProperties[propertyName];\n });\n}\n", "import { createFrame, extend, toString } from './utils';\nimport Exception from './exception';\nimport { registerDefaultHelpers } from './helpers';\nimport { registerDefaultDecorators } from './decorators';\nimport logger from './logger';\nimport { resetLoggedProperties } from './internal/proto-access';\n\nexport const VERSION = '4.7.7';\nexport const COMPILER_REVISION = 8;\nexport const LAST_COMPATIBLE_COMPILER_REVISION = 7;\n\nexport const REVISION_CHANGES = {\n 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n 2: '== 1.0.0-rc.3',\n 3: '== 1.0.0-rc.4',\n 4: '== 1.x.x',\n 5: '== 2.0.0-alpha.x',\n 6: '>= 2.0.0-beta.1',\n 7: '>= 4.0.0 <4.3.0',\n 8: '>= 4.3.0'\n};\n\nconst objectType = '[object Object]';\n\nexport function HandlebarsEnvironment(helpers, partials, decorators) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n this.decorators = decorators || {};\n\n registerDefaultHelpers(this);\n registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n\n logger: logger,\n log: logger.log,\n\n registerHelper: function(name, fn) {\n if (toString.call(name) === objectType) {\n if (fn) {\n throw new Exception('Arg not supported with multiple helpers');\n }\n extend(this.helpers, name);\n } else {\n this.helpers[name] = fn;\n }\n },\n unregisterHelper: function(name) {\n delete this.helpers[name];\n },\n\n registerPartial: function(name, partial) {\n if (toString.call(name) === objectType) {\n extend(this.partials, name);\n } else {\n if (typeof partial === 'undefined') {\n throw new Exception(\n `Attempting to register a partial called \"${name}\" as undefined`\n );\n }\n this.partials[name] = partial;\n }\n },\n unregisterPartial: function(name) {\n delete this.partials[name];\n },\n\n registerDecorator: function(name, fn) {\n if (toString.call(name) === objectType) {\n if (fn) {\n throw new Exception('Arg not supported with multiple decorators');\n }\n extend(this.decorators, name);\n } else {\n this.decorators[name] = fn;\n }\n },\n unregisterDecorator: function(name) {\n delete this.decorators[name];\n },\n /**\n * Reset the memory of illegal property accesses that have already been logged.\n * @deprecated should only be used in handlebars test-cases\n */\n resetLoggedPropertyAccesses() {\n resetLoggedProperties();\n }\n};\n\nexport let log = logger.log;\n\nexport { createFrame, logger };\n", "// Build out our basic SafeString type\nfunction SafeString(string) {\n this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function() {\n return '' + this.string;\n};\n\nexport default SafeString;\n", "export function wrapHelper(helper, transformOptionsFn) {\n if (typeof helper !== 'function') {\n // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639\n // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.\n return helper;\n }\n let wrapper = function(/* dynamic arguments */) {\n const options = arguments[arguments.length - 1];\n arguments[arguments.length - 1] = transformOptionsFn(options);\n return helper.apply(this, arguments);\n };\n return wrapper;\n}\n", "import * as Utils from './utils';\nimport Exception from './exception';\nimport {\n COMPILER_REVISION,\n createFrame,\n LAST_COMPATIBLE_COMPILER_REVISION,\n REVISION_CHANGES\n} from './base';\nimport { moveHelperToHooks } from './helpers';\nimport { wrapHelper } from './internal/wrapHelper';\nimport {\n createProtoAccessControl,\n resultIsAllowed\n} from './internal/proto-access';\n\nexport function checkRevision(compilerInfo) {\n const compilerRevision = (compilerInfo && compilerInfo[0]) || 1,\n currentRevision = COMPILER_REVISION;\n\n if (\n compilerRevision >= LAST_COMPATIBLE_COMPILER_REVISION &&\n compilerRevision <= COMPILER_REVISION\n ) {\n return;\n }\n\n if (compilerRevision < LAST_COMPATIBLE_COMPILER_REVISION) {\n const runtimeVersions = REVISION_CHANGES[currentRevision],\n compilerVersions = REVISION_CHANGES[compilerRevision];\n throw new Exception(\n 'Template was precompiled with an older version of Handlebars than the current runtime. ' +\n 'Please update your precompiler to a newer version (' +\n runtimeVersions +\n ') or downgrade your runtime to an older version (' +\n compilerVersions +\n ').'\n );\n } else {\n // Use the embedded version info since the runtime doesn't know about this revision yet\n throw new Exception(\n 'Template was precompiled with a newer version of Handlebars than the current runtime. ' +\n 'Please update your runtime to a newer version (' +\n compilerInfo[1] +\n ').'\n );\n }\n}\n\nexport function template(templateSpec, env) {\n /* istanbul ignore next */\n if (!env) {\n throw new Exception('No environment passed to template');\n }\n if (!templateSpec || !templateSpec.main) {\n throw new Exception('Unknown template object: ' + typeof templateSpec);\n }\n\n templateSpec.main.decorator = templateSpec.main_d;\n\n // Note: Using env.VM references rather than local var references throughout this section to allow\n // for external users to override these as pseudo-supported APIs.\n env.VM.checkRevision(templateSpec.compiler);\n\n // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)\n const templateWasPrecompiledWithCompilerV7 =\n templateSpec.compiler && templateSpec.compiler[0] === 7;\n\n function invokePartialWrapper(partial, context, options) {\n if (options.hash) {\n context = Utils.extend({}, context, options.hash);\n if (options.ids) {\n options.ids[0] = true;\n }\n }\n partial = env.VM.resolvePartial.call(this, partial, context, options);\n\n let extendedOptions = Utils.extend({}, options, {\n hooks: this.hooks,\n protoAccessControl: this.protoAccessControl\n });\n\n let result = env.VM.invokePartial.call(\n this,\n partial,\n context,\n extendedOptions\n );\n\n if (result == null && env.compile) {\n options.partials[options.name] = env.compile(\n partial,\n templateSpec.compilerOptions,\n env\n );\n result = options.partials[options.name](context, extendedOptions);\n }\n if (result != null) {\n if (options.indent) {\n let lines = result.split('\\n');\n for (let i = 0, l = lines.length; i < l; i++) {\n if (!lines[i] && i + 1 === l) {\n break;\n }\n\n lines[i] = options.indent + lines[i];\n }\n result = lines.join('\\n');\n }\n return result;\n } else {\n throw new Exception(\n 'The partial ' +\n options.name +\n ' could not be compiled when running in runtime-only mode'\n );\n }\n }\n\n // Just add water\n let container = {\n strict: function(obj, name, loc) {\n if (!obj || !(name in obj)) {\n throw new Exception('\"' + name + '\" not defined in ' + obj, {\n loc: loc\n });\n }\n return container.lookupProperty(obj, name);\n },\n lookupProperty: function(parent, propertyName) {\n let result = parent[propertyName];\n if (result == null) {\n return result;\n }\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return result;\n }\n\n if (resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n return result;\n }\n return undefined;\n },\n lookup: function(depths, name) {\n const len = depths.length;\n for (let i = 0; i < len; i++) {\n let result = depths[i] && container.lookupProperty(depths[i], name);\n if (result != null) {\n return depths[i][name];\n }\n }\n },\n lambda: function(current, context) {\n return typeof current === 'function' ? current.call(context) : current;\n },\n\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n\n fn: function(i) {\n let ret = templateSpec[i];\n ret.decorator = templateSpec[i + '_d'];\n return ret;\n },\n\n programs: [],\n program: function(i, data, declaredBlockParams, blockParams, depths) {\n let programWrapper = this.programs[i],\n fn = this.fn(i);\n if (data || depths || blockParams || declaredBlockParams) {\n programWrapper = wrapProgram(\n this,\n i,\n fn,\n data,\n declaredBlockParams,\n blockParams,\n depths\n );\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n }\n return programWrapper;\n },\n\n data: function(value, depth) {\n while (value && depth--) {\n value = value._parent;\n }\n return value;\n },\n mergeIfNeeded: function(param, common) {\n let obj = param || common;\n\n if (param && common && param !== common) {\n obj = Utils.extend({}, common, param);\n }\n\n return obj;\n },\n // An empty object to use as replacement for null-contexts\n nullContext: Object.seal({}),\n\n noop: env.VM.noop,\n compilerInfo: templateSpec.compiler\n };\n\n function ret(context, options = {}) {\n let data = options.data;\n\n ret._setup(options);\n if (!options.partial && templateSpec.useData) {\n data = initData(context, data);\n }\n let depths,\n blockParams = templateSpec.useBlockParams ? [] : undefined;\n if (templateSpec.useDepths) {\n if (options.depths) {\n depths =\n context != options.depths[0]\n ? [context].concat(options.depths)\n : options.depths;\n } else {\n depths = [context];\n }\n }\n\n function main(context /*, options*/) {\n return (\n '' +\n templateSpec.main(\n container,\n context,\n container.helpers,\n container.partials,\n data,\n blockParams,\n depths\n )\n );\n }\n\n main = executeDecorators(\n templateSpec.main,\n main,\n container,\n options.depths || [],\n data,\n blockParams\n );\n return main(context, options);\n }\n\n ret.isTop = true;\n\n ret._setup = function(options) {\n if (!options.partial) {\n let mergedHelpers = Utils.extend({}, env.helpers, options.helpers);\n wrapHelpersToPassLookupProperty(mergedHelpers, container);\n container.helpers = mergedHelpers;\n\n if (templateSpec.usePartial) {\n // Use mergeIfNeeded here to prevent compiling global partials multiple times\n container.partials = container.mergeIfNeeded(\n options.partials,\n env.partials\n );\n }\n if (templateSpec.usePartial || templateSpec.useDecorators) {\n container.decorators = Utils.extend(\n {},\n env.decorators,\n options.decorators\n );\n }\n\n container.hooks = {};\n container.protoAccessControl = createProtoAccessControl(options);\n\n let keepHelperInHelpers =\n options.allowCallsToHelperMissing ||\n templateWasPrecompiledWithCompilerV7;\n moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);\n moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);\n } else {\n container.protoAccessControl = options.protoAccessControl; // internal option\n container.helpers = options.helpers;\n container.partials = options.partials;\n container.decorators = options.decorators;\n container.hooks = options.hooks;\n }\n };\n\n ret._child = function(i, data, blockParams, depths) {\n if (templateSpec.useBlockParams && !blockParams) {\n throw new Exception('must pass block params');\n }\n if (templateSpec.useDepths && !depths) {\n throw new Exception('must pass parent depths');\n }\n\n return wrapProgram(\n container,\n i,\n templateSpec[i],\n data,\n 0,\n blockParams,\n depths\n );\n };\n return ret;\n}\n\nexport function wrapProgram(\n container,\n i,\n fn,\n data,\n declaredBlockParams,\n blockParams,\n depths\n) {\n function prog(context, options = {}) {\n let currentDepths = depths;\n if (\n depths &&\n context != depths[0] &&\n !(context === container.nullContext && depths[0] === null)\n ) {\n currentDepths = [context].concat(depths);\n }\n\n return fn(\n container,\n context,\n container.helpers,\n container.partials,\n options.data || data,\n blockParams && [options.blockParams].concat(blockParams),\n currentDepths\n );\n }\n\n prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n prog.program = i;\n prog.depth = depths ? depths.length : 0;\n prog.blockParams = declaredBlockParams || 0;\n return prog;\n}\n\n/**\n * This is currently part of the official API, therefore implementation details should not be changed.\n */\nexport function resolvePartial(partial, context, options) {\n if (!partial) {\n if (options.name === '@partial-block') {\n partial = options.data['partial-block'];\n } else {\n partial = options.partials[options.name];\n }\n } else if (!partial.call && !options.name) {\n // This is a dynamic partial that returned a string\n options.name = partial;\n partial = options.partials[partial];\n }\n return partial;\n}\n\nexport function invokePartial(partial, context, options) {\n // Use the current closure context to save the partial-block if this partial\n const currentPartialBlock = options.data && options.data['partial-block'];\n options.partial = true;\n if (options.ids) {\n options.data.contextPath = options.ids[0] || options.data.contextPath;\n }\n\n let partialBlock;\n if (options.fn && options.fn !== noop) {\n options.data = createFrame(options.data);\n // Wrapper function to get access to currentPartialBlock from the closure\n let fn = options.fn;\n partialBlock = options.data['partial-block'] = function partialBlockWrapper(\n context,\n options = {}\n ) {\n // Restore the partial-block from the closure for the execution of the block\n // i.e. the part inside the block of the partial call.\n options.data = createFrame(options.data);\n options.data['partial-block'] = currentPartialBlock;\n return fn(context, options);\n };\n if (fn.partials) {\n options.partials = Utils.extend({}, options.partials, fn.partials);\n }\n }\n\n if (partial === undefined && partialBlock) {\n partial = partialBlock;\n }\n\n if (partial === undefined) {\n throw new Exception('The partial ' + options.name + ' could not be found');\n } else if (partial instanceof Function) {\n return partial(context, options);\n }\n}\n\nexport function noop() {\n return '';\n}\n\nfunction initData(context, data) {\n if (!data || !('root' in data)) {\n data = data ? createFrame(data) : {};\n data.root = context;\n }\n return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n if (fn.decorator) {\n let props = {};\n prog = fn.decorator(\n prog,\n props,\n container,\n depths && depths[0],\n data,\n blockParams,\n depths\n );\n Utils.extend(prog, props);\n }\n return prog;\n}\n\nfunction wrapHelpersToPassLookupProperty(mergedHelpers, container) {\n Object.keys(mergedHelpers).forEach(helperName => {\n let helper = mergedHelpers[helperName];\n mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n });\n}\n\nfunction passLookupPropertyOption(helper, container) {\n const lookupProperty = container.lookupProperty;\n return wrapHelper(helper, options => {\n return Utils.extend({ lookupProperty }, options);\n });\n}\n", "export default function(Handlebars) {\n /* istanbul ignore next */\n let root = typeof global !== 'undefined' ? global : window,\n $Handlebars = root.Handlebars;\n /* istanbul ignore next */\n Handlebars.noConflict = function() {\n if (root.Handlebars === Handlebars) {\n root.Handlebars = $Handlebars;\n }\n return Handlebars;\n };\n}\n", "import * as base from './handlebars/base';\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\nimport SafeString from './handlebars/safe-string';\nimport Exception from './handlebars/exception';\nimport * as Utils from './handlebars/utils';\nimport * as runtime from './handlebars/runtime';\n\nimport noConflict from './handlebars/no-conflict';\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n let hb = new base.HandlebarsEnvironment();\n\n Utils.extend(hb, base);\n hb.SafeString = SafeString;\n hb.Exception = Exception;\n hb.Utils = Utils;\n hb.escapeExpression = Utils.escapeExpression;\n\n hb.VM = runtime;\n hb.template = function(spec) {\n return runtime.template(spec, hb);\n };\n\n return hb;\n}\n\nlet inst = create();\ninst.create = create;\n\nnoConflict(inst);\n\ninst['default'] = inst;\n\nexport default inst;\n", "// Create a simple path alias to allow browserify to resolve\n// the runtime on a supported path.\nmodule.exports = require('./dist/cjs/handlebars.runtime')['default'];\n", "import * as Handlebars from 'handlebars/runtime';\nHandlebars.registerHelper({});\nHandlebars.registerPartial({});\nexport default Handlebars.template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<html dir='ltr' lang='en'>\\n\\n <head>\\n <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />\\n <meta name='x-apple-disable-message-reformatting' />\\n <title>Update your email</title>\\n <meta\\n name='description'\\n content='To update the email for your account, enter the code provided in the app along with your new email.'\\n />\\n </head>\\n <div\\n style='display:none;overflow:hidden;line-height:1px;opacity:0;max-height:0;max-width:0'\\n >To update the email for your account, enter the code provided in the app\\n along with your new email.<div\\n >\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF\u00A0\u200C\u200B\u200D\u200E\u200F\uFEFF</div>\\n </div>\\n\\n <body\\n style='padding:12px;padding-bottom:40px;background-color:hsl(211, 20%, 95.3%)'\\n >\\n <table\\n align='center'\\n width='100%'\\n border='0'\\n cellPadding='0'\\n cellSpacing='0'\\n role='presentation'\\n style='max-width:37.5em'\\n >\\n <tbody>\\n <tr style='width:100%'>\\n <td>\\n <table\\n align='center'\\n width='100%'\\n border='0'\\n cellPadding='0'\\n cellSpacing='0'\\n role='presentation'\\n style='padding-top:24px;padding-bottom:24px'\\n >\\n <tbody>\\n <tr>\\n <td><img\\n alt='\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"config\") : depth0)) != null ? lookupProperty(stack1,\"serviceName\") : stack1), depth0))\n + \"'\\n src='\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"config\") : depth0)) != null ? lookupProperty(stack1,\"logoUrl\") : stack1), depth0))\n + \"'\\n style='display:block;outline:none;border:none;text-decoration:none;width:110px;margin:0 auto'\\n /></td>\\n </tr>\\n </tbody>\\n </table>\\n <table\\n align='center'\\n width='100%'\\n border='0'\\n cellPadding='0'\\n cellSpacing='0'\\n role='presentation'\\n style='padding:24px;padding-bottom:16px;border-radius:12px;background-color:#FFFFFF'\\n >\\n <tbody>\\n <tr>\\n <td>\\n <h1\\n style='font-size:26px;letter-spacing:0.25px;color:#000000;font-family:-apple-system, BlinkMacSystemFont, 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;margin:0px 0px;line-height:1.0'\\n >Update your email</h1>\\n <p\\n style='font-size:16px;line-height:1.4;margin:0px 0px;letter-spacing:0.25px;color:hsl(211, 24%, 34.2%);font-family:-apple-system, BlinkMacSystemFont, 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;padding-top:12px;padding-bottom:12px;padding-right:32px'\\n >To update the email for your account, enter the code below\\n in the app along with your new email.</p><code\\n style='display:block;padding:16px;border-radius:8px;border-width:1px;border-style:solid;background-color:hsl(211, 20%, 95.3%);border-color:hsl(211, 20%, 85.89999999999999%);font-size:14px;letter-spacing:0.25px;font-family:monospace;text-transform:uppercase'\\n >\"\n + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"token\") : depth0), depth0))\n + \"</code>\\n <p\\n style='font-size:14px;line-height:1.4;margin:0px 0px;letter-spacing:0.25px;color:hsl(211, 20%, 53%);font-family:-apple-system, BlinkMacSystemFont, 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;padding-top:12px'\\n >If you didn't request an email update, you can safely\\n ignore this email.</p>\\n <table\\n align='center'\\n width='100%'\\n border='0'\\n cellPadding='0'\\n cellSpacing='0'\\n role='presentation'\\n style='padding-top:24px'\\n >\\n <tbody>\\n <tr>\\n <td>\\n <hr\\n style='width:100%;border:none;border-top:1px solid #eaeaea;margin:0'\\n />\\n <table\\n align='center'\\n width='100%'\\n border='0'\\n cellPadding='0'\\n cellSpacing='0'\\n role='presentation'\\n style='padding-top:16px;vertical-align:middle'\\n >\\n <tbody style='width:100%'>\\n <tr style='width:100%'>\\n <td data-id='__react-email-column'>\\n <p\\n style='font-size:14px;line-height:1.4;margin:0px 0px;color:hsl(211, 20%, 53%);font-family:-apple-system, BlinkMacSystemFont, 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;letter-spacing:0.25px'\\n ><a\\n href='\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"config\") : depth0)) != null ? lookupProperty(stack1,\"homeUrl\") : stack1), depth0))\n + \"'\\n style='color:hsl(211, 20%, 53%);text-decoration:none;text-decoration-line:underline;font-family:-apple-system, BlinkMacSystemFont, 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;margin:0px 0px;line-height:1.0;font-size:14px;letter-spacing:0.25px'\\n target='_blank'\\n >\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"config\") : depth0)) != null ? lookupProperty(stack1,\"serviceName\") : stack1), depth0))\n + \"</a></p>\\n </td>\\n <td\\n data-id='__react-email-column'\\n style='width:24px'\\n ><img\\n alt='\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"config\") : depth0)) != null ? lookupProperty(stack1,\"serviceName\") : stack1), depth0))\n + \"'\\n src='\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"config\") : depth0)) != null ? lookupProperty(stack1,\"markUrl\") : stack1), depth0))\n + \"'\\n style='display:block;outline:none;border:none;text-decoration:none;width:24px'\\n /></td>\\n </tr>\\n </tbody>\\n </table>\\n </td>\\n </tr>\\n </tbody>\\n </table>\\n </td>\\n </tr>\\n </tbody>\\n </table>\\n <table\\n align='center'\\n width='100%'\\n border='0'\\n cellPadding='0'\\n cellSpacing='0'\\n role='presentation'\\n style='height:500px'\\n >\\n <tbody>\\n <tr>\\n <td></td>\\n </tr>\\n </tbody>\\n </table>\\n </td>\\n </tr>\\n </tbody>\\n </table>\\n </body>\\n\\n</html>\";\n},\"useData\":true});"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
1
|
+
{"version":3,"sources":["update-email.hbs"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6C2B,kBAAE,gIAAF,UA7C3B;AAAA,EA6CiD,oCA7CjD;AAAA,EA8C2B,IADA,MACA,CADA,MACA,CAAE,4HAAF,UA9C3B;AAAA,EA8C6C,21DA9C7C;AAAA,EAwEqB,IA3BM,MA2BN,yDAAE,0DAAF,6SAxErB;AAAA,EAwE8B,wpEAxE9B;AAAA,EA2G8C,IA9DnB,MA8DmB,CA9DnB,MA8DmB,CAAE,4HAAF,UA3G9C;AAAA,EA2GgE,mgBA3GhE;AAAA,EA8GuC,IAjEZ,MAiEY,CAjEZ,MAiEY,CAAE,gIAAF,UA9GvC;AAAA,EA8G6D,gTA9G7D;AAAA,EAoH2C,IAvEhB,MAuEgB,CAvEhB,MAuEgB,CAAE,gIAAF,UApH3C;AAAA,EAoHiE,oDApHjE;AAAA,EAqH2C,IAxEhB,MAwEgB,CAxEhB,MAwEgB,CAAE,4HAAF,UArH3C;AAAA,EAqH6D,29BArH7D;AAAA","file":"update-email.js"}
|
package/dist/scripts/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { publishIdentity, publishIdentityFromFile } from './publish-identity.js';
|
|
2
|
-
import {
|
|
2
|
+
import { rebuildRepoScript } from './rebuild-repo.js';
|
|
3
3
|
import { rotateKeys, rotateKeysFromFile, rotateKeysRecovery } from './rotate-keys.js';
|
|
4
4
|
import { sequencerRecovery } from './sequencer-recovery/index.js';
|
|
5
5
|
import { repairRepos } from './sequencer-recovery/repair-repos.js';
|
|
6
6
|
export declare const scripts: {
|
|
7
|
-
'rebuild-repo': typeof
|
|
7
|
+
'rebuild-repo': typeof rebuildRepoScript;
|
|
8
8
|
'sequencer-recovery': typeof sequencerRecovery;
|
|
9
9
|
'recovery-repair-repos': typeof repairRepos;
|
|
10
10
|
'rotate-keys': typeof rotateKeys;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scripts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAChF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scripts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAA;AAElE,eAAO,MAAM,OAAO;;;;;;;;;CASmD,CAAA"}
|
package/dist/scripts/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { publishIdentity, publishIdentityFromFile } from './publish-identity.js';
|
|
2
|
-
import {
|
|
2
|
+
import { rebuildRepoScript } from './rebuild-repo.js';
|
|
3
3
|
import { rotateKeys, rotateKeysFromFile, rotateKeysRecovery, } from './rotate-keys.js';
|
|
4
4
|
import { sequencerRecovery } from './sequencer-recovery/index.js';
|
|
5
5
|
import { repairRepos } from './sequencer-recovery/repair-repos.js';
|
|
6
6
|
export const scripts = {
|
|
7
|
-
'rebuild-repo':
|
|
7
|
+
'rebuild-repo': rebuildRepoScript,
|
|
8
8
|
'sequencer-recovery': sequencerRecovery,
|
|
9
9
|
'recovery-repair-repos': repairRepos,
|
|
10
10
|
'rotate-keys': rotateKeys,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scripts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAChF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scripts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAA;AAElE,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,cAAc,EAAE,iBAAiB;IACjC,oBAAoB,EAAE,iBAAiB;IACvC,uBAAuB,EAAE,WAAW;IACpC,aAAa,EAAE,UAAU;IACzB,kBAAkB,EAAE,kBAAkB;IACtC,sBAAsB,EAAE,kBAAkB;IAC1C,kBAAkB,EAAE,eAAe;IACnC,uBAAuB,EAAE,uBAAuB;CACqB,CAAA","sourcesContent":["import { publishIdentity, publishIdentityFromFile } from './publish-identity.js'\nimport { rebuildRepoScript } from './rebuild-repo.js'\nimport {\n rotateKeys,\n rotateKeysFromFile,\n rotateKeysRecovery,\n} from './rotate-keys.js'\nimport { sequencerRecovery } from './sequencer-recovery/index.js'\nimport { repairRepos } from './sequencer-recovery/repair-repos.js'\n\nexport const scripts = {\n 'rebuild-repo': rebuildRepoScript,\n 'sequencer-recovery': sequencerRecovery,\n 'recovery-repair-repos': repairRepos,\n 'rotate-keys': rotateKeys,\n 'rotate-keys-file': rotateKeysFromFile,\n 'rotate-keys-recovery': rotateKeysRecovery,\n 'publish-identity': publishIdentity,\n 'publish-identity-file': publishIdentityFromFile,\n} satisfies Record<string, (ctx: any, args: string[]) => Promise<void>>\n"]}
|
package/dist/telemetry.js
CHANGED
|
@@ -1,193 +1,15 @@
|
|
|
1
|
-
import { register } from 'node:module';
|
|
2
|
-
import { diag } from '@opentelemetry/api';
|
|
3
|
-
import { getResourceDetectors } from '@opentelemetry/auto-instrumentations-node';
|
|
4
|
-
import { getBooleanFromEnv, getStringFromEnv, getStringListFromEnv, } from '@opentelemetry/core';
|
|
5
1
|
import { AwsInstrumentation } from '@opentelemetry/instrumentation-aws-sdk';
|
|
6
|
-
import { ExpressInstrumentation, ExpressLayerType, } from '@opentelemetry/instrumentation-express';
|
|
7
|
-
import { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
|
|
8
2
|
import { IORedisInstrumentation } from '@opentelemetry/instrumentation-ioredis';
|
|
9
|
-
import { PinoInstrumentation } from '@opentelemetry/instrumentation-pino';
|
|
10
|
-
import { RuntimeNodeInstrumentation } from '@opentelemetry/instrumentation-runtime-node';
|
|
11
|
-
import { UndiciInstrumentation } from '@opentelemetry/instrumentation-undici';
|
|
12
|
-
import { NodeSDK } from '@opentelemetry/sdk-node';
|
|
13
|
-
import { ATTR_HTTP_ROUTE } from '@opentelemetry/semantic-conventions';
|
|
14
3
|
import { BetterSqlite3Instrumentation } from 'opentelemetry-plugin-better-sqlite3';
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
// rather than `registerInstrumentations` to get exporter setup from the
|
|
22
|
-
// conventional OTEL_* env vars for free.
|
|
23
|
-
// @NOTE Telemetry is opt-in via exporter endpoint rather than a non-standard
|
|
24
|
-
// flag: configuring an OTLP endpoint is what enables the SDK. OTEL_SDK_DISABLED
|
|
25
|
-
// remains a kill switch, per spec.
|
|
26
|
-
const otelDisabled = getBooleanFromEnv('OTEL_SDK_DISABLED');
|
|
27
|
-
const tracesConfigured = isSignalConfigured('TRACES');
|
|
28
|
-
const metricsConfigured = isSignalConfigured('METRICS');
|
|
29
|
-
const logsConfigured = isSignalConfigured('LOGS');
|
|
30
|
-
const otelConfigured = tracesConfigured || metricsConfigured || logsConfigured;
|
|
31
|
-
const otelEnabled = !otelDisabled && otelConfigured;
|
|
32
|
-
if (otelEnabled) {
|
|
33
|
-
try {
|
|
34
|
-
register('@opentelemetry/instrumentation/hook.mjs', import.meta.url);
|
|
35
|
-
const sdk = new NodeSDK({
|
|
36
|
-
// @NOTE Unlike sdk-node's default detectors, these include the
|
|
37
|
-
// "container" detector.
|
|
38
|
-
resourceDetectors: getResourceDetectors(),
|
|
39
|
-
instrumentations: getInstrumentations(),
|
|
40
|
-
// @NOTE The gate above enables the SDK as soon as *any* signal is
|
|
41
|
-
// configured, but NodeSDK then defaults every unspecified
|
|
42
|
-
// OTEL_{SIGNAL}_EXPORTER to "otlp" on http://localhost:4318 — shipping
|
|
43
|
-
// signals the operator never opted into. An *empty* pipeline opts a
|
|
44
|
-
// signal out: NodeSDK only reads OTEL_{SIGNAL}_EXPORTER when the pipeline
|
|
45
|
-
// option is `undefined`, and registers no provider when handed an empty
|
|
46
|
-
// one. Opted-in signals get `undefined` so they stay env-configured.
|
|
47
|
-
spanProcessors: tracesConfigured ? undefined : [],
|
|
48
|
-
metricReaders: metricsConfigured ? undefined : [],
|
|
49
|
-
logRecordProcessors: logsConfigured ? undefined : [],
|
|
50
|
-
});
|
|
51
|
-
sdk.start();
|
|
52
|
-
// @NOTE On SIGINT/SIGTERM the PDS releases its resources without calling
|
|
53
|
-
// process.exit(), so the event loop empties and Node emits "beforeExit"
|
|
54
|
-
// (https://nodejs.org/api/process.html#event-beforeexit). That's our window
|
|
55
|
-
// to flush pending telemetry.
|
|
56
|
-
process.once('beforeExit', () => {
|
|
57
|
-
sdk.shutdown().catch((err) => {
|
|
58
|
-
diag.error('Error terminating OpenTelemetry SDK', err);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
catch (err) {
|
|
63
|
-
diag.error('Error initializing OpenTelemetry SDK', err);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
function getInstrumentations() {
|
|
67
|
-
return [
|
|
68
|
-
// @NOTE Not using getNodeAutoInstrumentations: it pulls in many
|
|
69
|
-
// instrumentations we don't need, with no easy way to filter them out.
|
|
70
|
-
new RuntimeNodeInstrumentation(),
|
|
71
|
-
new HttpInstrumentation({
|
|
72
|
-
// Derives "http.route" (and the span name) from the normalized XRPC path,
|
|
73
|
-
// for both incoming and outgoing requests.
|
|
74
|
-
//
|
|
75
|
-
// @NOTE Must be applyCustomAttributesOnSpan (fires on response finish),
|
|
76
|
-
// not requestHook (fires on request start). The express instrumentation
|
|
77
|
-
// overwrites the shared rpcMetadata.route on every layer it enters, which
|
|
78
|
-
// in this app resolves to "/" more often than not (multiple express apps
|
|
79
|
-
// and routers mounted at "/", plus catchall middlewares with no route
|
|
80
|
-
// layer). On finish, the http instrumentation copies rpcMetadata.route
|
|
81
|
-
// into "http.route" and renames the span from it, clobbering anything a
|
|
82
|
-
// requestHook set. This hook runs after that, so it wins.
|
|
83
|
-
applyCustomAttributesOnSpan: (span, request) => {
|
|
84
|
-
const { url, method, proxy } = 'path' in request
|
|
85
|
-
? // ClientRequest
|
|
86
|
-
{
|
|
87
|
-
url: request.path,
|
|
88
|
-
method: request.method,
|
|
89
|
-
proxy: request.getHeader('atproto-proxy'),
|
|
90
|
-
}
|
|
91
|
-
: // IncomingMessage
|
|
92
|
-
{
|
|
93
|
-
url: request.url ?? '/',
|
|
94
|
-
method: request.method ?? 'GET',
|
|
95
|
-
proxy: request.headers['atproto-proxy'],
|
|
96
|
-
};
|
|
97
|
-
const lxm = method === 'GET' || method === 'POST'
|
|
98
|
-
? extractNormalizedLxm(url)
|
|
99
|
-
: undefined;
|
|
100
|
-
// Normalized route for XRPC, raw path otherwise
|
|
101
|
-
const route = lxm ? `/xrpc/${lxm}` : url.split('?')[0];
|
|
102
|
-
span.setAttribute(ATTR_HTTP_ROUTE, route);
|
|
103
|
-
if (lxm) {
|
|
104
|
-
span.updateName(`${method} /xrpc/${lxm}`);
|
|
105
|
-
span.setAttribute(ATTR_XRPC_METHOD, lxm);
|
|
106
|
-
span.setAttribute(ATTR_XRPC_PROXIED, !!proxy);
|
|
107
|
-
if (proxy) {
|
|
108
|
-
span.setAttribute(ATTR_XRPC_PROXY, proxy);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
},
|
|
112
|
-
}),
|
|
113
|
-
new ExpressInstrumentation({
|
|
114
|
-
ignoreLayersType: [ExpressLayerType.MIDDLEWARE],
|
|
115
|
-
}),
|
|
116
|
-
new UndiciInstrumentation({
|
|
117
|
-
requestHook: (span, request) => {
|
|
118
|
-
const lxm = extractNormalizedLxm(request.path);
|
|
119
|
-
if (lxm) {
|
|
120
|
-
span.setAttribute(ATTR_XRPC_METHOD, lxm);
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
|
-
}),
|
|
4
|
+
import pkg from '@atproto/pds/package.json' with { type: 'json' };
|
|
5
|
+
import { setup } from '@atproto-labs/opentelemetry-node';
|
|
6
|
+
setup(() => ({
|
|
7
|
+
name: pkg.name,
|
|
8
|
+
version: pkg.version,
|
|
9
|
+
instrumentations: [
|
|
124
10
|
new AwsInstrumentation(),
|
|
125
11
|
new IORedisInstrumentation(),
|
|
126
12
|
new BetterSqlite3Instrumentation(),
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
// and would forward all subsystems indiscriminately. Events we actually want
|
|
130
|
-
// in the OTEL stack go through the Logs API explicitly (see ./events.ts).
|
|
131
|
-
new PinoInstrumentation({ disableLogSending: true }),
|
|
132
|
-
];
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* A signal counts as configured when an OTLP endpoint applies to it
|
|
136
|
-
* (signal-specific or generic) and its exporter isn't set to "none".
|
|
137
|
-
*
|
|
138
|
-
* @NOTE OTEL_{SIGNAL}_EXPORTER is a comma-separated list, and the SDK handles
|
|
139
|
-
* "none" alongside other exporters inconsistently (metrics & logs disable the
|
|
140
|
-
* signal, traces falls back to "otlp"). Such a combination is a
|
|
141
|
-
* misconfiguration, so we treat any list containing "none" as disabling.
|
|
142
|
-
*/
|
|
143
|
-
function isSignalConfigured(signal) {
|
|
144
|
-
if (getStringListFromEnv(`OTEL_${signal}_EXPORTER`)?.includes('none')) {
|
|
145
|
-
return false;
|
|
146
|
-
}
|
|
147
|
-
return (!!getStringFromEnv(`OTEL_EXPORTER_OTLP_${signal}_ENDPOINT`) ||
|
|
148
|
-
!!getStringFromEnv('OTEL_EXPORTER_OTLP_ENDPOINT'));
|
|
149
|
-
}
|
|
150
|
-
// @NOTE Hand-rolled (rather than using URL/split) because this runs on every
|
|
151
|
-
// instrumented request. Should become obsolete once we have dedicated
|
|
152
|
-
// XrpcClient/XrpcServer instrumentations.
|
|
153
|
-
function extractNormalizedLxm(url) {
|
|
154
|
-
if (typeof url !== 'string') {
|
|
155
|
-
return undefined;
|
|
156
|
-
}
|
|
157
|
-
// 9 = "/xrpc/".length + shortest conceivable NSID ("a.b")
|
|
158
|
-
if (url.length < 9 || !url.startsWith('/xrpc/')) {
|
|
159
|
-
return undefined;
|
|
160
|
-
}
|
|
161
|
-
const firstMethodCharPos = 6; // "/xrpc/".length
|
|
162
|
-
// Characters that can never open an NSID (note "_" skips "/xrpc/_health")
|
|
163
|
-
const nextChar = url.charCodeAt(firstMethodCharPos);
|
|
164
|
-
if (nextChar === 0x2e /* '.' */ ||
|
|
165
|
-
nextChar === 0x2f /* '/' */ ||
|
|
166
|
-
nextChar === 0x3f /* '?' */ ||
|
|
167
|
-
nextChar === 0x5f /* '_' */) {
|
|
168
|
-
return undefined;
|
|
169
|
-
}
|
|
170
|
-
const queryIndex = url.indexOf('?', firstMethodCharPos + 1);
|
|
171
|
-
let lastMethodCharPos = queryIndex === -1 ? url.length - 1 : queryIndex - 1;
|
|
172
|
-
// Ignore the trailing slash, if there is one
|
|
173
|
-
if (url.charCodeAt(lastMethodCharPos) === 0x2f /* '/' */) {
|
|
174
|
-
lastMethodCharPos--;
|
|
175
|
-
}
|
|
176
|
-
if (lastMethodCharPos < 9) {
|
|
177
|
-
return undefined;
|
|
178
|
-
}
|
|
179
|
-
// Make sure there is no other slash in the path
|
|
180
|
-
if (url.lastIndexOf('/', lastMethodCharPos) !== firstMethodCharPos - 1) {
|
|
181
|
-
return undefined;
|
|
182
|
-
}
|
|
183
|
-
// Require at least one dot, and not as the last character
|
|
184
|
-
const lastDotPos = url.lastIndexOf('.', lastMethodCharPos);
|
|
185
|
-
if (lastDotPos === -1 || lastDotPos === lastMethodCharPos) {
|
|
186
|
-
return undefined;
|
|
187
|
-
}
|
|
188
|
-
// @NOTE Only the domain authority is case-insensitive; the trailing name
|
|
189
|
-
// segment is not, so it must be preserved as-is to avoid conflating
|
|
190
|
-
// distinct NSIDs.
|
|
191
|
-
return `${url.substring(firstMethodCharPos, lastDotPos).toLowerCase()}${url.substring(lastDotPos, lastMethodCharPos + 1)}`;
|
|
192
|
-
}
|
|
13
|
+
],
|
|
14
|
+
}));
|
|
193
15
|
//# sourceMappingURL=telemetry.js.map
|
package/dist/telemetry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["import { register } from 'node:module'\nimport { diag } from '@opentelemetry/api'\nimport { getResourceDetectors } from '@opentelemetry/auto-instrumentations-node'\nimport {\n getBooleanFromEnv,\n getStringFromEnv,\n getStringListFromEnv,\n} from '@opentelemetry/core'\nimport type { Instrumentation } from '@opentelemetry/instrumentation'\nimport { AwsInstrumentation } from '@opentelemetry/instrumentation-aws-sdk'\nimport {\n ExpressInstrumentation,\n ExpressLayerType,\n} from '@opentelemetry/instrumentation-express'\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http'\nimport { IORedisInstrumentation } from '@opentelemetry/instrumentation-ioredis'\nimport { PinoInstrumentation } from '@opentelemetry/instrumentation-pino'\nimport { RuntimeNodeInstrumentation } from '@opentelemetry/instrumentation-runtime-node'\nimport { UndiciInstrumentation } from '@opentelemetry/instrumentation-undici'\nimport { NodeSDK } from '@opentelemetry/sdk-node'\nimport { ATTR_HTTP_ROUTE } from '@opentelemetry/semantic-conventions'\nimport { BetterSqlite3Instrumentation } from 'opentelemetry-plugin-better-sqlite3'\n\nconst ATTR_XRPC_METHOD = 'xrpc.method'\nconst ATTR_XRPC_PROXIED = 'xrpc.proxied'\nconst ATTR_XRPC_PROXY = 'xrpc.proxy'\n\n// @NOTE Hand-rolled equivalent of \"@opentelemetry/auto-instrumentations-node\"'s\n// register script, because that one lacks better-sqlite3 instrumentation and\n// doesn't let us customize the HTTP span naming for XRPC. We use `NodeSDK`\n// rather than `registerInstrumentations` to get exporter setup from the\n// conventional OTEL_* env vars for free.\n\n// @NOTE Telemetry is opt-in via exporter endpoint rather than a non-standard\n// flag: configuring an OTLP endpoint is what enables the SDK. OTEL_SDK_DISABLED\n// remains a kill switch, per spec.\nconst otelDisabled = getBooleanFromEnv('OTEL_SDK_DISABLED')\nconst tracesConfigured = isSignalConfigured('TRACES')\nconst metricsConfigured = isSignalConfigured('METRICS')\nconst logsConfigured = isSignalConfigured('LOGS')\nconst otelConfigured = tracesConfigured || metricsConfigured || logsConfigured\nconst otelEnabled = !otelDisabled && otelConfigured\n\nif (otelEnabled) {\n try {\n register('@opentelemetry/instrumentation/hook.mjs', import.meta.url)\n\n const sdk = new NodeSDK({\n // @NOTE Unlike sdk-node's default detectors, these include the\n // \"container\" detector.\n resourceDetectors: getResourceDetectors(),\n instrumentations: getInstrumentations(),\n\n // @NOTE The gate above enables the SDK as soon as *any* signal is\n // configured, but NodeSDK then defaults every unspecified\n // OTEL_{SIGNAL}_EXPORTER to \"otlp\" on http://localhost:4318 — shipping\n // signals the operator never opted into. An *empty* pipeline opts a\n // signal out: NodeSDK only reads OTEL_{SIGNAL}_EXPORTER when the pipeline\n // option is `undefined`, and registers no provider when handed an empty\n // one. Opted-in signals get `undefined` so they stay env-configured.\n spanProcessors: tracesConfigured ? undefined : [],\n metricReaders: metricsConfigured ? undefined : [],\n logRecordProcessors: logsConfigured ? undefined : [],\n })\n\n sdk.start()\n\n // @NOTE On SIGINT/SIGTERM the PDS releases its resources without calling\n // process.exit(), so the event loop empties and Node emits \"beforeExit\"\n // (https://nodejs.org/api/process.html#event-beforeexit). That's our window\n // to flush pending telemetry.\n process.once('beforeExit', () => {\n sdk.shutdown().catch((err) => {\n diag.error('Error terminating OpenTelemetry SDK', err)\n })\n })\n } catch (err) {\n diag.error('Error initializing OpenTelemetry SDK', err)\n }\n}\n\nfunction getInstrumentations(): Instrumentation[] {\n return [\n // @NOTE Not using getNodeAutoInstrumentations: it pulls in many\n // instrumentations we don't need, with no easy way to filter them out.\n new RuntimeNodeInstrumentation(),\n new HttpInstrumentation({\n // Derives \"http.route\" (and the span name) from the normalized XRPC path,\n // for both incoming and outgoing requests.\n //\n // @NOTE Must be applyCustomAttributesOnSpan (fires on response finish),\n // not requestHook (fires on request start). The express instrumentation\n // overwrites the shared rpcMetadata.route on every layer it enters, which\n // in this app resolves to \"/\" more often than not (multiple express apps\n // and routers mounted at \"/\", plus catchall middlewares with no route\n // layer). On finish, the http instrumentation copies rpcMetadata.route\n // into \"http.route\" and renames the span from it, clobbering anything a\n // requestHook set. This hook runs after that, so it wins.\n applyCustomAttributesOnSpan: (span, request) => {\n const { url, method, proxy } =\n 'path' in request\n ? // ClientRequest\n {\n url: request.path,\n method: request.method,\n proxy: request.getHeader('atproto-proxy'),\n }\n : // IncomingMessage\n {\n url: request.url ?? '/',\n method: request.method ?? 'GET',\n proxy: request.headers['atproto-proxy'],\n }\n\n const lxm =\n method === 'GET' || method === 'POST'\n ? extractNormalizedLxm(url)\n : undefined\n\n // Normalized route for XRPC, raw path otherwise\n const route = lxm ? `/xrpc/${lxm}` : url.split('?')[0]\n span.setAttribute(ATTR_HTTP_ROUTE, route)\n\n if (lxm) {\n span.updateName(`${method} /xrpc/${lxm}`)\n span.setAttribute(ATTR_XRPC_METHOD, lxm)\n span.setAttribute(ATTR_XRPC_PROXIED, !!proxy)\n\n if (proxy) {\n span.setAttribute(ATTR_XRPC_PROXY, proxy)\n }\n }\n },\n }),\n new ExpressInstrumentation({\n ignoreLayersType: [ExpressLayerType.MIDDLEWARE],\n }),\n new UndiciInstrumentation({\n requestHook: (span, request) => {\n const lxm = extractNormalizedLxm(request.path)\n if (lxm) {\n span.setAttribute(ATTR_XRPC_METHOD, lxm)\n }\n },\n }),\n new AwsInstrumentation(),\n new IORedisInstrumentation(),\n new BetterSqlite3Instrumentation(),\n // @NOTE Keep log correlation (trace_id/span_id injected into pino records)\n // but disable log sending: it JSON.parse()s every record on the main thread\n // and would forward all subsystems indiscriminately. Events we actually want\n // in the OTEL stack go through the Logs API explicitly (see ./events.ts).\n new PinoInstrumentation({ disableLogSending: true }),\n ]\n}\n\n/**\n * A signal counts as configured when an OTLP endpoint applies to it\n * (signal-specific or generic) and its exporter isn't set to \"none\".\n *\n * @NOTE OTEL_{SIGNAL}_EXPORTER is a comma-separated list, and the SDK handles\n * \"none\" alongside other exporters inconsistently (metrics & logs disable the\n * signal, traces falls back to \"otlp\"). Such a combination is a\n * misconfiguration, so we treat any list containing \"none\" as disabling.\n */\nfunction isSignalConfigured(signal: 'TRACES' | 'METRICS' | 'LOGS'): boolean {\n if (getStringListFromEnv(`OTEL_${signal}_EXPORTER`)?.includes('none')) {\n return false\n }\n\n return (\n !!getStringFromEnv(`OTEL_EXPORTER_OTLP_${signal}_ENDPOINT`) ||\n !!getStringFromEnv('OTEL_EXPORTER_OTLP_ENDPOINT')\n )\n}\n\n// @NOTE Hand-rolled (rather than using URL/split) because this runs on every\n// instrumented request. Should become obsolete once we have dedicated\n// XrpcClient/XrpcServer instrumentations.\nfunction extractNormalizedLxm(url: unknown): string | undefined {\n if (typeof url !== 'string') {\n return undefined\n }\n\n // 9 = \"/xrpc/\".length + shortest conceivable NSID (\"a.b\")\n if (url.length < 9 || !url.startsWith('/xrpc/')) {\n return undefined\n }\n\n const firstMethodCharPos = 6 // \"/xrpc/\".length\n\n // Characters that can never open an NSID (note \"_\" skips \"/xrpc/_health\")\n const nextChar = url.charCodeAt(firstMethodCharPos)\n if (\n nextChar === 0x2e /* '.' */ ||\n nextChar === 0x2f /* '/' */ ||\n nextChar === 0x3f /* '?' */ ||\n nextChar === 0x5f /* '_' */\n ) {\n return undefined\n }\n\n const queryIndex = url.indexOf('?', firstMethodCharPos + 1)\n\n let lastMethodCharPos = queryIndex === -1 ? url.length - 1 : queryIndex - 1\n\n // Ignore the trailing slash, if there is one\n if (url.charCodeAt(lastMethodCharPos) === 0x2f /* '/' */) {\n lastMethodCharPos--\n }\n\n if (lastMethodCharPos < 9) {\n return undefined\n }\n\n // Make sure there is no other slash in the path\n if (url.lastIndexOf('/', lastMethodCharPos) !== firstMethodCharPos - 1) {\n return undefined\n }\n\n // Require at least one dot, and not as the last character\n const lastDotPos = url.lastIndexOf('.', lastMethodCharPos)\n if (lastDotPos === -1 || lastDotPos === lastMethodCharPos) {\n return undefined\n }\n\n // @NOTE Only the domain authority is case-insensitive; the trailing name\n // segment is not, so it must be preserved as-is to avoid conflating\n // distinct NSIDs.\n return `${url.substring(firstMethodCharPos, lastDotPos).toLowerCase()}${url.substring(lastDotPos, lastMethodCharPos + 1)}`\n}\n"]}
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAA;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAA;AAC/E,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAA;AAClF,OAAO,GAAG,MAAM,2BAA2B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAA;AAExD,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,IAAI;IACd,OAAO,EAAE,GAAG,CAAC,OAAO;IACpB,gBAAgB,EAAE;QAChB,IAAI,kBAAkB,EAAE;QACxB,IAAI,sBAAsB,EAAE;QAC5B,IAAI,4BAA4B,EAAE;KACnC;CACF,CAAC,CAAC,CAAA","sourcesContent":["import { AwsInstrumentation } from '@opentelemetry/instrumentation-aws-sdk'\nimport { IORedisInstrumentation } from '@opentelemetry/instrumentation-ioredis'\nimport { BetterSqlite3Instrumentation } from 'opentelemetry-plugin-better-sqlite3'\nimport pkg from '@atproto/pds/package.json' with { type: 'json' }\nimport { setup } from '@atproto-labs/opentelemetry-node'\n\nsetup(() => ({\n name: pkg.name,\n version: pkg.version,\n instrumentations: [\n new AwsInstrumentation(),\n new IORedisInstrumentation(),\n new BetterSqlite3Instrumentation(),\n ],\n}))\n"]}
|
package/example.env
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# See more env options in src/config/env.ts
|
|
2
|
+
# Hostname - the public domain that you intend to deploy your service at
|
|
3
|
+
PDS_HOSTNAME="example.com"
|
|
4
|
+
PDS_PORT="2583"
|
|
5
|
+
|
|
6
|
+
# Database config - use one or the other
|
|
7
|
+
PDS_DATA_DIRECTORY="data"
|
|
8
|
+
|
|
9
|
+
# Blobstore - filesystem location to store uploaded blobs
|
|
10
|
+
PDS_BLOBSTORE_DISK_LOCATION="blobs"
|
|
11
|
+
|
|
12
|
+
# Private keys - these are each expected to be 64 char hex strings (256 bit)
|
|
13
|
+
PDS_REPO_SIGNING_KEY_K256_PRIVATE_KEY_HEX="3ee68..."
|
|
14
|
+
PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX="e049f..."
|
|
15
|
+
|
|
16
|
+
# Secrets - update to secure high-entropy strings
|
|
17
|
+
PDS_DPOP_SECRET="32-random-bytes-hex-encoded"
|
|
18
|
+
PDS_JWT_SECRET="jwt-secret"
|
|
19
|
+
PDS_ADMIN_PASSWORD="admin-pass"
|
|
20
|
+
|
|
21
|
+
# Environment - example is for live network
|
|
22
|
+
PDS_DID_PLC_URL="https://plc.directory"
|
|
23
|
+
PDS_BSKY_APP_VIEW_URL="https://api.bsky.app"
|
|
24
|
+
PDS_BSKY_APP_VIEW_DID="did:web:api.bsky.app"
|
|
25
|
+
PDS_CRAWLERS="https://bsky.network"
|
|
26
|
+
|
|
27
|
+
# OAuth Provider - branding for the login / consent screens
|
|
28
|
+
PDS_SERVICE_NAME="John's self hosted PDS"
|
|
29
|
+
PDS_LOGO_URL=
|
|
30
|
+
PDS_PRIMARY_COLOR="#7507e3"
|
|
31
|
+
PDS_ERROR_COLOR=
|
|
32
|
+
PDS_HOME_URL=
|
|
33
|
+
PDS_TERMS_OF_SERVICE_URL=
|
|
34
|
+
PDS_PRIVACY_POLICY_URL=
|
|
35
|
+
PDS_SUPPORT_URL=
|
|
36
|
+
# Auth screen background images, shown behind the login card, by colour scheme
|
|
37
|
+
PDS_BACKGROUND_LIGHT_URL=
|
|
38
|
+
PDS_BACKGROUND_DARK_URL=
|
|
39
|
+
|
|
40
|
+
# Debugging
|
|
41
|
+
NODE_TLS_REJECT_UNAUTHORIZED=1
|
|
42
|
+
LOG_ENABLED=0
|
|
43
|
+
LOG_LEVEL=info
|
|
44
|
+
PDS_INVITE_REQUIRED=1
|
|
45
|
+
PDS_DISABLE_SSRF_PROTECTION=0
|
|
46
|
+
|
|
47
|
+
# Telemetry (optional) - requires running with `node --import @atproto/pds/telemetry`.
|
|
48
|
+
# See:
|
|
49
|
+
# - https://opentelemetry.io/docs/languages/sdk-configuration/general/
|
|
50
|
+
# - https://opentelemetry.io/docs/languages/sdk-configuration/otlp-exporter/
|
|
51
|
+
#OTEL_SERVICE_NAME="pds"
|
|
52
|
+
#OTEL_NODE_RESOURCE_DETECTORS="container,env,host"
|
|
53
|
+
#OTEL_EXPORTER_OTLP_ENDPOINT="https://otel-collector.example.com"
|
|
54
|
+
#OTEL_EXPORTER_OTLP_PROTOCOL="http/protobuf"
|
|
55
|
+
#OTEL_SEMCONV_STABILITY_OPT_IN="http"
|