@todesktop/cli 1.19.0-3 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/cli.js +44 -4459
- package/dist/cli.js.map +4 -4
- package/package.json +1 -1
- package/schemas/schema.json +1 -1
package/dist/cli.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../node_modules/.pnpm/es-object-atoms@1.1.1/node_modules/es-object-atoms/index.js", "../../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/index.js", "../../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/eval.js", "../../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/range.js", "../../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/ref.js", "../../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/syntax.js", "../../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/type.js", "../../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/uri.js", "../../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/abs.js", "../../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/floor.js", "../../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/max.js", "../../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/min.js", "../../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/pow.js", "../../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/round.js", "../../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/isNaN.js", "../../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/sign.js", "../../../node_modules/.pnpm/gopd@1.2.0/node_modules/gopd/gOPD.js", "../../../node_modules/.pnpm/gopd@1.2.0/node_modules/gopd/index.js", "../../../node_modules/.pnpm/es-define-property@1.0.1/node_modules/es-define-property/index.js", "../../../node_modules/.pnpm/has-symbols@1.1.0/node_modules/has-symbols/shams.js", "../../../node_modules/.pnpm/has-symbols@1.1.0/node_modules/has-symbols/index.js", "../../../node_modules/.pnpm/get-proto@1.0.1/node_modules/get-proto/Reflect.getPrototypeOf.js", "../../../node_modules/.pnpm/get-proto@1.0.1/node_modules/get-proto/Object.getPrototypeOf.js", "../../../node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/implementation.js", "../../../node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/index.js", "../../../node_modules/.pnpm/call-bind-apply-helpers@1.0.2/node_modules/call-bind-apply-helpers/functionCall.js", "../../../node_modules/.pnpm/call-bind-apply-helpers@1.0.2/node_modules/call-bind-apply-helpers/functionApply.js", "../../../node_modules/.pnpm/call-bind-apply-helpers@1.0.2/node_modules/call-bind-apply-helpers/reflectApply.js", "../../../node_modules/.pnpm/call-bind-apply-helpers@1.0.2/node_modules/call-bind-apply-helpers/actualApply.js", "../../../node_modules/.pnpm/call-bind-apply-helpers@1.0.2/node_modules/call-bind-apply-helpers/index.js", "../../../node_modules/.pnpm/dunder-proto@1.0.1/node_modules/dunder-proto/get.js", "../../../node_modules/.pnpm/get-proto@1.0.1/node_modules/get-proto/index.js", "../../../node_modules/.pnpm/hasown@2.0.2/node_modules/hasown/index.js", "../../../node_modules/.pnpm/get-intrinsic@1.3.0/node_modules/get-intrinsic/index.js", "../../../node_modules/.pnpm/call-bound@1.0.4/node_modules/call-bound/index.js", "../../../node_modules/.pnpm/has-tostringtag@1.0.2/node_modules/has-tostringtag/shams.js", "../../../node_modules/.pnpm/is-regex@1.2.1/node_modules/is-regex/index.js", "../../../node_modules/.pnpm/property-expr@2.0.6/node_modules/property-expr/index.js", "../../../node_modules/.pnpm/tiny-case@1.0.3/node_modules/tiny-case/index.js", "../../../node_modules/.pnpm/toposort@2.0.2/node_modules/toposort/index.js", "../../../node_modules/.pnpm/yup@1.7.0/node_modules/yup/index.js", "../src/index.ts", "../src/commands/build/components/Build.tsx", "../src/components/BreakpointNotice.tsx", "../src/utilities/introspectionBreakpoints.ts", "../src/commands/build/utilities/breakpoints.ts", "../src/components/BreakpointPrompt.tsx", "../../../node_modules/.pnpm/@todesktop+shared@7.193.0/node_modules/@todesktop/shared/package.json", "../../../node_modules/.pnpm/@todesktop+shared@7.193.0/node_modules/@todesktop/shared/lib/esm/base.js", "../../../node_modules/.pnpm/@todesktop+shared@7.193.0/node_modules/@todesktop/shared/lib/esm/desktopify.js", "../../../node_modules/.pnpm/@todesktop+shared@7.193.0/node_modules/@todesktop/shared/lib/esm/introspection/breakpoints.js", "../../../node_modules/.pnpm/@todesktop+shared@7.193.0/node_modules/@todesktop/shared/lib/esm/introspection/status.js", "../../../node_modules/.pnpm/@todesktop+shared@7.193.0/node_modules/@todesktop/shared/lib/esm/plans.js", "../../../node_modules/.pnpm/@todesktop+shared@7.193.0/node_modules/@todesktop/shared/lib/esm/validations.js", "../../../node_modules/.pnpm/@todesktop+shared@7.193.0/node_modules/@todesktop/shared/lib/esm/index.js", "../src/utilities/useInput.ts", "../src/utilities/useExit.ts", "../src/utilities/analytics.ts", "../src/utilities/getEnvironmentVariables.ts", "../src/utilities/firestore.ts", "../src/utilities/configStore.ts", "../src/utilities/getToDesktopPackageJson.ts", "../src/utilities/readJson.ts", "../src/utilities/getCliVersion.ts", "../src/utilities/logger.ts", "../src/utilities/getCallableFirebaseFunction.ts", "../src/utilities/introspectionStatus.ts", "../src/components/BuildProgress.tsx", "../src/components/BuildCompleteMessage.tsx", "../src/utilities/logForCI.ts", "../src/utilities/fixMacUrl.ts", "../src/components/PlatformProgress.tsx", "../src/components/IntrospectionNotice.tsx", "../src/utilities/buildStatus.ts", "../src/components/ErrorDisplay.tsx", "../src/utilities/CliError.ts", "../src/components/MainLayout.tsx", "../src/components/CancelBuild.tsx", "../src/components/Footer.tsx", "../src/components/Header.tsx", "../src/commands/build/components/Preparation.tsx", "../src/commands/build/components/ProgressBar.tsx", "../src/libs/ink-progress-bar/index.tsx", "../src/commands/build/utilities/runBuild.ts", "../src/utilities/postToFirebaseFunction.ts", "../src/utilities/projectConfig/getProjectConfig.ts", "../src/utilities/projectConfig/loadConfig.ts", "../src/utilities/projectConfig/loadTypeScriptConfig.ts", "../src/utilities/projectConfig/resolveConfigPaths.ts", "../src/utilities/projectConfig/validateConfig.ts", "../src/utilities/projectConfig/addCustomKeywords.ts", "../src/utilities/projectConfig/validatePackageJSON.ts", "../src/utilities/projectConfig/schema/packageJSON.ts", "../schemas/schema.json", "../src/utilities/projectConfig/schema/full.ts", "../src/utilities/projectConfig/computeFullProjectConfig.ts", "../src/utilities/shouldExitOnBuildFailure.ts", "../src/commands/build/utilities/getPackageJson.ts", "../src/commands/build/utilities/getVersionControlInfo.ts", "../src/commands/build/utilities/spyBuild.ts", "../src/utilities/firestoreData.ts", "../src/commands/build/utilities/uploadApplicationSource.ts", "../src/commands/build/utilities/generateS3Key.ts", "../src/commands/build/utilities/uploadToS3.ts", "../src/commands/build/utilities/zip.ts", "../src/commands/build/utilities/workspace/index.ts", "../src/components/LoginHOC.tsx", "../src/components/Login.tsx", "../src/components/TextInput.tsx", "../src/components/LoadingText.tsx", "../src/components/ErrorBoundary.tsx", "../src/commands/build/components/OngoingBuildGuard.tsx", "../src/components/CustomSelectInputIndicator.tsx", "../src/components/CustomSelectInputItem.tsx", "../src/components/ViewBuild.tsx", "../src/utilities/getLatestBuildId.ts", "../src/utilities/subscribeToFirebaseDoc.ts", "../src/utilities/subscribeToBuild.ts", "../src/utilities/findAppUserId.ts", "../src/utilities/useAnalytics.ts", "../src/commands/build/BuildCommand.tsx", "../src/components/ViewBuilds.tsx", "../src/components/Table.tsx", "../src/components/TableEnd.tsx", "../src/components/TableHead.tsx", "../src/components/TableBody.tsx", "../src/components/TableRow.tsx", "../src/utilities/getKeyDetails.ts", "../src/utilities/capitalize.ts", "../src/utilities/getBuilds.ts", "../src/utilities/getRelativeDateFromDateString.ts", "../src/components/SyntaxHighlight.tsx", "../src/commands/BuildsCommand.tsx", "../src/commands/introspect/IntrospectCommand.tsx", "../src/commands/introspect/components/IntrospectSession.tsx", "../src/commands/introspect/utilities/sessionManager.ts", "../src/commands/introspect/utilities/websocketClient.ts", "../src/commands/introspect/utilities/terminalManager.ts", "../src/commands/introspect/utilities/tokenRefresh.ts", "../src/commands/introspect/components/BuildSelector.tsx", "../src/components/BuildTableLayout.tsx", "../src/components/SelectTable.tsx", "../src/components/useBuildTableState.ts", "../src/commands/introspect/utilities/buildQueries.ts", "../src/commands/introspect/components/PlatformSelector.tsx", "../src/commands/introspect/components/LatestBuildLoader.tsx", "../src/commands/LogoutCommand.tsx", "../src/components/BuildPicker.tsx", "../src/utilities/getLatestReleasedBuild.ts", "../src/utilities/getBuildById.ts", "../src/commands/release/components/ReleaseBuildLogic.tsx", "../src/utilities/getBuildAttributes.ts", "../src/commands/release/utilities/releaseBuild.ts", "../src/commands/release/components/ReleaseBuildView.tsx", "../src/components/BuildError.tsx", "../src/commands/release/components/ReleaseConfirmation.tsx", "../src/commands/smoke-test/utilities/build.ts", "../src/commands/release/utilities/analyzeRelease.ts", "../src/commands/release/components/DowngradeConfirmation.tsx", "../src/commands/release/components/YesNoConfirmation.tsx", "../src/commands/release/ReleaseCommand.tsx", "../src/commands/smoke-test/SmokeTestCommand.tsx", "../src/commands/smoke-test/components/Cancellation.tsx", "../src/commands/smoke-test/components/SmokeTestView.tsx", "../src/commands/smoke-test/components/ProgressBar.tsx", "../src/commands/smoke-test/components/TestProgress.tsx", "../src/commands/smoke-test/utilities/cancelSmokeTest.ts", "../src/commands/smoke-test/utilities/queueSmokeTest.ts", "../src/commands/smoke-test/utilities/waitUntilFinished.ts", "../src/commands/WhoamiCommand.tsx", "../src/utilities/exitIfCLIOutOfDate.ts", "../src/utilities/initSentry.ts", "../package.json", "../src/utilities/onCommand.ts", "../src/commands/build/utilities/continueBreakpoint.ts"],
|
|
4
|
-
"sourcesContent": ["'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Object;\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n", "'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n", "'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n", "'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n", "'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n", "'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n", "'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n", "'use strict';\n\n/** @type {import('./abs')} */\nmodule.exports = Math.abs;\n", "'use strict';\n\n/** @type {import('./floor')} */\nmodule.exports = Math.floor;\n", "'use strict';\n\n/** @type {import('./max')} */\nmodule.exports = Math.max;\n", "'use strict';\n\n/** @type {import('./min')} */\nmodule.exports = Math.min;\n", "'use strict';\n\n/** @type {import('./pow')} */\nmodule.exports = Math.pow;\n", "'use strict';\n\n/** @type {import('./round')} */\nmodule.exports = Math.round;\n", "'use strict';\n\n/** @type {import('./isNaN')} */\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n", "'use strict';\n\nvar $isNaN = require('./isNaN');\n\n/** @type {import('./sign')} */\nmodule.exports = function sign(number) {\n\tif ($isNaN(number) || number === 0) {\n\t\treturn number;\n\t}\n\treturn number < 0 ? -1 : +1;\n};\n", "'use strict';\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;\n", "'use strict';\n\n/** @type {import('.')} */\nvar $gOPD = require('./gOPD');\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n", "'use strict';\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n", "'use strict';\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\t/** @type {{ [k in symbol]?: unknown }} */\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n", "'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n", "'use strict';\n\n/** @type {import('./Reflect.getPrototypeOf')} */\nmodule.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;\n", "'use strict';\n\nvar $Object = require('es-object-atoms');\n\n/** @type {import('./Object.getPrototypeOf')} */\nmodule.exports = $Object.getPrototypeOf || null;\n", "'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n var arr = [];\n\n for (var i = 0; i < a.length; i += 1) {\n arr[i] = a[i];\n }\n for (var j = 0; j < b.length; j += 1) {\n arr[j + a.length] = b[j];\n }\n\n return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n var arr = [];\n for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n arr[j] = arrLike[i];\n }\n return arr;\n};\n\nvar joiny = function (arr, joiner) {\n var str = '';\n for (var i = 0; i < arr.length; i += 1) {\n str += arr[i];\n if (i + 1 < arr.length) {\n str += joiner;\n }\n }\n return str;\n};\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slicy(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n concatty(args, arguments)\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n }\n return target.apply(\n that,\n concatty(args, arguments)\n );\n\n };\n\n var boundLength = max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs[i] = '$' + i;\n }\n\n bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n", "'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n", "'use strict';\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n", "'use strict';\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n", "'use strict';\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n", "'use strict';\n\nvar bind = require('function-bind');\n\nvar $apply = require('./functionApply');\nvar $call = require('./functionCall');\nvar $reflectApply = require('./reflectApply');\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n", "'use strict';\n\nvar bind = require('function-bind');\nvar $TypeError = require('es-errors/type');\n\nvar $call = require('./functionCall');\nvar $actualApply = require('./actualApply');\n\n/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n", "'use strict';\n\nvar callBind = require('call-bind-apply-helpers');\nvar gOPD = require('gopd');\n\nvar hasProtoAccessor;\ntry {\n\t// eslint-disable-next-line no-extra-parens, no-proto\n\thasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;\n} catch (e) {\n\tif (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n\t\tthrow e;\n\t}\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));\n\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function'\n\t? callBind([desc.get])\n\t: typeof $getPrototypeOf === 'function'\n\t\t? /** @type {import('./get')} */ function getDunder(value) {\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\treturn $getPrototypeOf(value == null ? value : $Object(value));\n\t\t}\n\t\t: false;\n", "'use strict';\n\nvar reflectGetProto = require('./Reflect.getPrototypeOf');\nvar originalGetProto = require('./Object.getPrototypeOf');\n\nvar getDunderProto = require('dunder-proto/get');\n\n/** @type {import('.')} */\nmodule.exports = reflectGetProto\n\t? function getProto(O) {\n\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\treturn reflectGetProto(O);\n\t}\n\t: originalGetProto\n\t\t? function getProto(O) {\n\t\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\t\tthrow new TypeError('getProto: not an object');\n\t\t\t}\n\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\treturn originalGetProto(O);\n\t\t}\n\t\t: getDunderProto\n\t\t\t? function getProto(O) {\n\t\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\t\treturn getDunderProto(O);\n\t\t\t}\n\t\t\t: null;\n", "'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n", "'use strict';\n\nvar undefined;\n\nvar $Object = require('es-object-atoms');\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar abs = require('math-intrinsics/abs');\nvar floor = require('math-intrinsics/floor');\nvar max = require('math-intrinsics/max');\nvar min = require('math-intrinsics/min');\nvar pow = require('math-intrinsics/pow');\nvar round = require('math-intrinsics/round');\nvar sign = require('math-intrinsics/sign');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = require('gopd');\nvar $defineProperty = require('es-define-property');\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = require('get-proto');\nvar $ObjectGPO = require('get-proto/Object.getPrototypeOf');\nvar $ReflectGPO = require('get-proto/Reflect.getPrototypeOf');\n\nvar $apply = require('call-bind-apply-helpers/functionApply');\nvar $call = require('call-bind-apply-helpers/functionCall');\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': $Object,\n\t'%Object.getOwnPropertyDescriptor%': $gOPD,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\n\t'%Function.prototype.call%': $call,\n\t'%Function.prototype.apply%': $apply,\n\t'%Object.defineProperty%': $defineProperty,\n\t'%Object.getPrototypeOf%': $ObjectGPO,\n\t'%Math.abs%': abs,\n\t'%Math.floor%': floor,\n\t'%Math.max%': max,\n\t'%Math.min%': min,\n\t'%Math.pow%': pow,\n\t'%Math.round%': round,\n\t'%Math.sign%': sign,\n\t'%Reflect.getPrototypeOf%': $ReflectGPO\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBindBasic = require('call-bind-apply-helpers');\n\n/** @type {(thisArg: string, searchString: string, position?: number) => number} */\nvar $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);\n\n/** @type {import('.')} */\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\t/* eslint no-extra-parens: 0 */\n\n\tvar intrinsic = /** @type {(this: unknown, ...args: unknown[]) => unknown} */ (GetIntrinsic(name, !!allowMissing));\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBindBasic(/** @type {const} */ ([intrinsic]));\n\t}\n\treturn intrinsic;\n};\n", "'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n", "'use strict';\n\nvar callBound = require('call-bound');\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar hasOwn = require('hasown');\nvar gOPD = require('gopd');\n\n/** @type {import('.')} */\nvar fn;\n\nif (hasToStringTag) {\n\t/** @type {(receiver: ThisParameterType<typeof RegExp.prototype.exec>, ...args: Parameters<typeof RegExp.prototype.exec>) => ReturnType<typeof RegExp.prototype.exec>} */\n\tvar $exec = callBound('RegExp.prototype.exec');\n\t/** @type {object} */\n\tvar isRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\t/** @type {{ toString(): never, valueOf(): never, [Symbol.toPrimitive]?(): never }} */\n\tvar badStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n\n\t/** @type {import('.')} */\n\t// @ts-expect-error TS can't figure out that the $exec call always throws\n\t// eslint-disable-next-line consistent-return\n\tfn = function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {NonNullable<typeof gOPD>} */ (gOPD)(/** @type {{ lastIndex?: unknown }} */ (value), 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && hasOwn(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t$exec(value, /** @type {string} */ (/** @type {unknown} */ (badStringifier)));\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t};\n} else {\n\t/** @type {(receiver: ThisParameterType<typeof Object.prototype.toString>, ...args: Parameters<typeof Object.prototype.toString>) => ReturnType<typeof Object.prototype.toString>} */\n\tvar $toString = callBound('Object.prototype.toString');\n\t/** @const @type {'[object RegExp]'} */\n\tvar regexClass = '[object RegExp]';\n\n\t/** @type {import('.')} */\n\tfn = function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n}\n\nmodule.exports = fn;\n", "/**\n * Based on Kendo UI Core expression code <https://github.com/telerik/kendo-ui-core#license-information>\n */\n'use strict'\n\nfunction Cache(maxSize) {\n this._maxSize = maxSize\n this.clear()\n}\nCache.prototype.clear = function () {\n this._size = 0\n this._values = Object.create(null)\n}\nCache.prototype.get = function (key) {\n return this._values[key]\n}\nCache.prototype.set = function (key, value) {\n this._size >= this._maxSize && this.clear()\n if (!(key in this._values)) this._size++\n\n return (this._values[key] = value)\n}\n\nvar SPLIT_REGEX = /[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,\n DIGIT_REGEX = /^\\d+$/,\n LEAD_DIGIT_REGEX = /^\\d/,\n SPEC_CHAR_REGEX = /[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,\n CLEAN_QUOTES_REGEX = /^\\s*(['\"]?)(.*?)(\\1)\\s*$/,\n MAX_CACHE_SIZE = 512\n\nvar pathCache = new Cache(MAX_CACHE_SIZE),\n setCache = new Cache(MAX_CACHE_SIZE),\n getCache = new Cache(MAX_CACHE_SIZE)\n\nvar config\n\nmodule.exports = {\n Cache: Cache,\n\n split: split,\n\n normalizePath: normalizePath,\n\n setter: function (path) {\n var parts = normalizePath(path)\n\n return (\n setCache.get(path) ||\n setCache.set(path, function setter(obj, value) {\n var index = 0\n var len = parts.length\n var data = obj\n\n while (index < len - 1) {\n var part = parts[index]\n if (\n part === '__proto__' ||\n part === 'constructor' ||\n part === 'prototype'\n ) {\n return obj\n }\n\n data = data[parts[index++]]\n }\n data[parts[index]] = value\n })\n )\n },\n\n getter: function (path, safe) {\n var parts = normalizePath(path)\n return (\n getCache.get(path) ||\n getCache.set(path, function getter(data) {\n var index = 0,\n len = parts.length\n while (index < len) {\n if (data != null || !safe) data = data[parts[index++]]\n else return\n }\n return data\n })\n )\n },\n\n join: function (segments) {\n return segments.reduce(function (path, part) {\n return (\n path +\n (isQuoted(part) || DIGIT_REGEX.test(part)\n ? '[' + part + ']'\n : (path ? '.' : '') + part)\n )\n }, '')\n },\n\n forEach: function (path, cb, thisArg) {\n forEach(Array.isArray(path) ? path : split(path), cb, thisArg)\n },\n}\n\nfunction normalizePath(path) {\n return (\n pathCache.get(path) ||\n pathCache.set(\n path,\n split(path).map(function (part) {\n return part.replace(CLEAN_QUOTES_REGEX, '$2')\n })\n )\n )\n}\n\nfunction split(path) {\n return path.match(SPLIT_REGEX) || ['']\n}\n\nfunction forEach(parts, iter, thisArg) {\n var len = parts.length,\n part,\n idx,\n isArray,\n isBracket\n\n for (idx = 0; idx < len; idx++) {\n part = parts[idx]\n\n if (part) {\n if (shouldBeQuoted(part)) {\n part = '\"' + part + '\"'\n }\n\n isBracket = isQuoted(part)\n isArray = !isBracket && /^\\d+$/.test(part)\n\n iter.call(thisArg, part, isBracket, isArray, idx, parts)\n }\n }\n}\n\nfunction isQuoted(str) {\n return (\n typeof str === 'string' && str && [\"'\", '\"'].indexOf(str.charAt(0)) !== -1\n )\n}\n\nfunction hasLeadingNumber(part) {\n return part.match(LEAD_DIGIT_REGEX) && !part.match(DIGIT_REGEX)\n}\n\nfunction hasSpecialChars(part) {\n return SPEC_CHAR_REGEX.test(part)\n}\n\nfunction shouldBeQuoted(part) {\n return !isQuoted(part) && (hasLeadingNumber(part) || hasSpecialChars(part))\n}\n", "const reWords = /[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde]|$)|(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde](?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])|$)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?(?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['\u2019](?:d|ll|m|re|s|t|ve))?|[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?|\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])|\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])|\\d+|(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?)*/g\n\nconst words = (str) => str.match(reWords) || []\n\nconst upperFirst = (str) => str[0].toUpperCase() + str.slice(1)\n\nconst join = (str, d) => words(str).join(d).toLowerCase()\n\nconst camelCase = (str) =>\n words(str).reduce(\n (acc, next) =>\n `${acc}${\n !acc\n ? next.toLowerCase()\n : next[0].toUpperCase() + next.slice(1).toLowerCase()\n }`,\n '',\n )\n\nconst pascalCase = (str) => upperFirst(camelCase(str))\n\nconst snakeCase = (str) => join(str, '_')\n\nconst kebabCase = (str) => join(str, '-')\n\nconst sentenceCase = (str) => upperFirst(join(str, ' '))\n\nconst titleCase = (str) => words(str).map(upperFirst).join(' ')\n\nmodule.exports = {\n words,\n upperFirst,\n camelCase,\n pascalCase,\n snakeCase,\n kebabCase,\n sentenceCase,\n titleCase,\n}\n", "\n/**\n * Topological sorting function\n *\n * @param {Array} edges\n * @returns {Array}\n */\n\nmodule.exports = function(edges) {\n return toposort(uniqueNodes(edges), edges)\n}\n\nmodule.exports.array = toposort\n\nfunction toposort(nodes, edges) {\n var cursor = nodes.length\n , sorted = new Array(cursor)\n , visited = {}\n , i = cursor\n // Better data structures make algorithm much faster.\n , outgoingEdges = makeOutgoingEdges(edges)\n , nodesHash = makeNodesHash(nodes)\n\n // check for unknown nodes\n edges.forEach(function(edge) {\n if (!nodesHash.has(edge[0]) || !nodesHash.has(edge[1])) {\n throw new Error('Unknown node. There is an unknown node in the supplied edges.')\n }\n })\n\n while (i--) {\n if (!visited[i]) visit(nodes[i], i, new Set())\n }\n\n return sorted\n\n function visit(node, i, predecessors) {\n if(predecessors.has(node)) {\n var nodeRep\n try {\n nodeRep = \", node was:\" + JSON.stringify(node)\n } catch(e) {\n nodeRep = \"\"\n }\n throw new Error('Cyclic dependency' + nodeRep)\n }\n\n if (!nodesHash.has(node)) {\n throw new Error('Found unknown node. Make sure to provided all involved nodes. Unknown node: '+JSON.stringify(node))\n }\n\n if (visited[i]) return;\n visited[i] = true\n\n var outgoing = outgoingEdges.get(node) || new Set()\n outgoing = Array.from(outgoing)\n\n if (i = outgoing.length) {\n predecessors.add(node)\n do {\n var child = outgoing[--i]\n visit(child, nodesHash.get(child), predecessors)\n } while (i)\n predecessors.delete(node)\n }\n\n sorted[--cursor] = node\n }\n}\n\nfunction uniqueNodes(arr){\n var res = new Set()\n for (var i = 0, len = arr.length; i < len; i++) {\n var edge = arr[i]\n res.add(edge[0])\n res.add(edge[1])\n }\n return Array.from(res)\n}\n\nfunction makeOutgoingEdges(arr){\n var edges = new Map()\n for (var i = 0, len = arr.length; i < len; i++) {\n var edge = arr[i]\n if (!edges.has(edge[0])) edges.set(edge[0], new Set())\n if (!edges.has(edge[1])) edges.set(edge[1], new Set())\n edges.get(edge[0]).add(edge[1])\n }\n return edges\n}\n\nfunction makeNodesHash(arr){\n var res = new Map()\n for (var i = 0, len = arr.length; i < len; i++) {\n res.set(arr[i], i)\n }\n return res\n}\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar propertyExpr = require('property-expr');\nvar tinyCase = require('tiny-case');\nvar toposort = require('toposort');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar toposort__default = /*#__PURE__*/_interopDefaultLegacy(toposort);\n\nconst toString = Object.prototype.toString;\nconst errorToString = Error.prototype.toString;\nconst regExpToString = RegExp.prototype.toString;\nconst symbolToString = typeof Symbol !== 'undefined' ? Symbol.prototype.toString : () => '';\nconst SYMBOL_REGEXP = /^Symbol\\((.*)\\)(.*)$/;\nfunction printNumber(val) {\n if (val != +val) return 'NaN';\n const isNegativeZero = val === 0 && 1 / val < 0;\n return isNegativeZero ? '-0' : '' + val;\n}\nfunction printSimpleValue(val, quoteStrings = false) {\n if (val == null || val === true || val === false) return '' + val;\n const typeOf = typeof val;\n if (typeOf === 'number') return printNumber(val);\n if (typeOf === 'string') return quoteStrings ? `\"${val}\"` : val;\n if (typeOf === 'function') return '[Function ' + (val.name || 'anonymous') + ']';\n if (typeOf === 'symbol') return symbolToString.call(val).replace(SYMBOL_REGEXP, 'Symbol($1)');\n const tag = toString.call(val).slice(8, -1);\n if (tag === 'Date') return isNaN(val.getTime()) ? '' + val : val.toISOString(val);\n if (tag === 'Error' || val instanceof Error) return '[' + errorToString.call(val) + ']';\n if (tag === 'RegExp') return regExpToString.call(val);\n return null;\n}\nfunction printValue(value, quoteStrings) {\n let result = printSimpleValue(value, quoteStrings);\n if (result !== null) return result;\n return JSON.stringify(value, function (key, value) {\n let result = printSimpleValue(this[key], quoteStrings);\n if (result !== null) return result;\n return value;\n }, 2);\n}\n\nfunction toArray(value) {\n return value == null ? [] : [].concat(value);\n}\n\nlet _Symbol$toStringTag, _Symbol$hasInstance, _Symbol$toStringTag2;\nlet strReg = /\\$\\{\\s*(\\w+)\\s*\\}/g;\n_Symbol$toStringTag = Symbol.toStringTag;\nclass ValidationErrorNoStack {\n constructor(errorOrErrors, value, field, type) {\n this.name = void 0;\n this.message = void 0;\n this.value = void 0;\n this.path = void 0;\n this.type = void 0;\n this.params = void 0;\n this.errors = void 0;\n this.inner = void 0;\n this[_Symbol$toStringTag] = 'Error';\n this.name = 'ValidationError';\n this.value = value;\n this.path = field;\n this.type = type;\n this.errors = [];\n this.inner = [];\n toArray(errorOrErrors).forEach(err => {\n if (ValidationError.isError(err)) {\n this.errors.push(...err.errors);\n const innerErrors = err.inner.length ? err.inner : [err];\n this.inner.push(...innerErrors);\n } else {\n this.errors.push(err);\n }\n });\n this.message = this.errors.length > 1 ? `${this.errors.length} errors occurred` : this.errors[0];\n }\n}\n_Symbol$hasInstance = Symbol.hasInstance;\n_Symbol$toStringTag2 = Symbol.toStringTag;\nclass ValidationError extends Error {\n static formatError(message, params) {\n // Attempt to make the path more friendly for error message interpolation.\n const path = params.label || params.path || 'this';\n // Store the original path under `originalPath` so it isn't lost to custom\n // message functions; e.g., ones provided in `setLocale()` calls.\n params = Object.assign({}, params, {\n path,\n originalPath: params.path\n });\n if (typeof message === 'string') return message.replace(strReg, (_, key) => printValue(params[key]));\n if (typeof message === 'function') return message(params);\n return message;\n }\n static isError(err) {\n return err && err.name === 'ValidationError';\n }\n constructor(errorOrErrors, value, field, type, disableStack) {\n const errorNoStack = new ValidationErrorNoStack(errorOrErrors, value, field, type);\n if (disableStack) {\n return errorNoStack;\n }\n super();\n this.value = void 0;\n this.path = void 0;\n this.type = void 0;\n this.params = void 0;\n this.errors = [];\n this.inner = [];\n this[_Symbol$toStringTag2] = 'Error';\n this.name = errorNoStack.name;\n this.message = errorNoStack.message;\n this.type = errorNoStack.type;\n this.value = errorNoStack.value;\n this.path = errorNoStack.path;\n this.errors = errorNoStack.errors;\n this.inner = errorNoStack.inner;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ValidationError);\n }\n }\n static [_Symbol$hasInstance](inst) {\n return ValidationErrorNoStack[Symbol.hasInstance](inst) || super[Symbol.hasInstance](inst);\n }\n}\n\nlet mixed = {\n default: '${path} is invalid',\n required: '${path} is a required field',\n defined: '${path} must be defined',\n notNull: '${path} cannot be null',\n oneOf: '${path} must be one of the following values: ${values}',\n notOneOf: '${path} must not be one of the following values: ${values}',\n notType: ({\n path,\n type,\n value,\n originalValue\n }) => {\n const castMsg = originalValue != null && originalValue !== value ? ` (cast from the value \\`${printValue(originalValue, true)}\\`).` : '.';\n return type !== 'mixed' ? `${path} must be a \\`${type}\\` type, ` + `but the final value was: \\`${printValue(value, true)}\\`` + castMsg : `${path} must match the configured type. ` + `The validated value was: \\`${printValue(value, true)}\\`` + castMsg;\n }\n};\nlet string = {\n length: '${path} must be exactly ${length} characters',\n min: '${path} must be at least ${min} characters',\n max: '${path} must be at most ${max} characters',\n matches: '${path} must match the following: \"${regex}\"',\n email: '${path} must be a valid email',\n url: '${path} must be a valid URL',\n uuid: '${path} must be a valid UUID',\n datetime: '${path} must be a valid ISO date-time',\n datetime_precision: '${path} must be a valid ISO date-time with a sub-second precision of exactly ${precision} digits',\n datetime_offset: '${path} must be a valid ISO date-time with UTC \"Z\" timezone',\n trim: '${path} must be a trimmed string',\n lowercase: '${path} must be a lowercase string',\n uppercase: '${path} must be a upper case string'\n};\nlet number = {\n min: '${path} must be greater than or equal to ${min}',\n max: '${path} must be less than or equal to ${max}',\n lessThan: '${path} must be less than ${less}',\n moreThan: '${path} must be greater than ${more}',\n positive: '${path} must be a positive number',\n negative: '${path} must be a negative number',\n integer: '${path} must be an integer'\n};\nlet date = {\n min: '${path} field must be later than ${min}',\n max: '${path} field must be at earlier than ${max}'\n};\nlet boolean = {\n isValue: '${path} field must be ${value}'\n};\nlet object = {\n noUnknown: '${path} field has unspecified keys: ${unknown}',\n exact: '${path} object contains unknown properties: ${properties}'\n};\nlet array = {\n min: '${path} field must have at least ${min} items',\n max: '${path} field must have less than or equal to ${max} items',\n length: '${path} must have ${length} items'\n};\nlet tuple = {\n notType: params => {\n const {\n path,\n value,\n spec\n } = params;\n const typeLen = spec.types.length;\n if (Array.isArray(value)) {\n if (value.length < typeLen) return `${path} tuple value has too few items, expected a length of ${typeLen} but got ${value.length} for value: \\`${printValue(value, true)}\\``;\n if (value.length > typeLen) return `${path} tuple value has too many items, expected a length of ${typeLen} but got ${value.length} for value: \\`${printValue(value, true)}\\``;\n }\n return ValidationError.formatError(mixed.notType, params);\n }\n};\nvar locale = Object.assign(Object.create(null), {\n mixed,\n string,\n number,\n date,\n object,\n array,\n boolean,\n tuple\n});\n\nconst isSchema = obj => obj && obj.__isYupSchema__;\n\nclass Condition {\n static fromOptions(refs, config) {\n if (!config.then && !config.otherwise) throw new TypeError('either `then:` or `otherwise:` is required for `when()` conditions');\n let {\n is,\n then,\n otherwise\n } = config;\n let check = typeof is === 'function' ? is : (...values) => values.every(value => value === is);\n return new Condition(refs, (values, schema) => {\n var _branch;\n let branch = check(...values) ? then : otherwise;\n return (_branch = branch == null ? void 0 : branch(schema)) != null ? _branch : schema;\n });\n }\n constructor(refs, builder) {\n this.fn = void 0;\n this.refs = refs;\n this.refs = refs;\n this.fn = builder;\n }\n resolve(base, options) {\n let values = this.refs.map(ref =>\n // TODO: ? operator here?\n ref.getValue(options == null ? void 0 : options.value, options == null ? void 0 : options.parent, options == null ? void 0 : options.context));\n let schema = this.fn(values, base, options);\n if (schema === undefined ||\n // @ts-ignore this can be base\n schema === base) {\n return base;\n }\n if (!isSchema(schema)) throw new TypeError('conditions must return a schema object');\n return schema.resolve(options);\n }\n}\n\nconst prefixes = {\n context: '$',\n value: '.'\n};\nfunction create$9(key, options) {\n return new Reference(key, options);\n}\nclass Reference {\n constructor(key, options = {}) {\n this.key = void 0;\n this.isContext = void 0;\n this.isValue = void 0;\n this.isSibling = void 0;\n this.path = void 0;\n this.getter = void 0;\n this.map = void 0;\n if (typeof key !== 'string') throw new TypeError('ref must be a string, got: ' + key);\n this.key = key.trim();\n if (key === '') throw new TypeError('ref must be a non-empty string');\n this.isContext = this.key[0] === prefixes.context;\n this.isValue = this.key[0] === prefixes.value;\n this.isSibling = !this.isContext && !this.isValue;\n let prefix = this.isContext ? prefixes.context : this.isValue ? prefixes.value : '';\n this.path = this.key.slice(prefix.length);\n this.getter = this.path && propertyExpr.getter(this.path, true);\n this.map = options.map;\n }\n getValue(value, parent, context) {\n let result = this.isContext ? context : this.isValue ? value : parent;\n if (this.getter) result = this.getter(result || {});\n if (this.map) result = this.map(result);\n return result;\n }\n\n /**\n *\n * @param {*} value\n * @param {Object} options\n * @param {Object=} options.context\n * @param {Object=} options.parent\n */\n cast(value, options) {\n return this.getValue(value, options == null ? void 0 : options.parent, options == null ? void 0 : options.context);\n }\n resolve() {\n return this;\n }\n describe() {\n return {\n type: 'ref',\n key: this.key\n };\n }\n toString() {\n return `Ref(${this.key})`;\n }\n static isRef(value) {\n return value && value.__isYupRef;\n }\n}\n\n// @ts-ignore\nReference.prototype.__isYupRef = true;\n\nconst isAbsent = value => value == null;\n\nfunction createValidation(config) {\n function validate({\n value,\n path = '',\n options,\n originalValue,\n schema\n }, panic, next) {\n const {\n name,\n test,\n params,\n message,\n skipAbsent\n } = config;\n let {\n parent,\n context,\n abortEarly = schema.spec.abortEarly,\n disableStackTrace = schema.spec.disableStackTrace\n } = options;\n const resolveOptions = {\n value,\n parent,\n context\n };\n function createError(overrides = {}) {\n const nextParams = resolveParams(Object.assign({\n value,\n originalValue,\n label: schema.spec.label,\n path: overrides.path || path,\n spec: schema.spec,\n disableStackTrace: overrides.disableStackTrace || disableStackTrace\n }, params, overrides.params), resolveOptions);\n const error = new ValidationError(ValidationError.formatError(overrides.message || message, nextParams), value, nextParams.path, overrides.type || name, nextParams.disableStackTrace);\n error.params = nextParams;\n return error;\n }\n const invalid = abortEarly ? panic : next;\n let ctx = {\n path,\n parent,\n type: name,\n from: options.from,\n createError,\n resolve(item) {\n return resolveMaybeRef(item, resolveOptions);\n },\n options,\n originalValue,\n schema\n };\n const handleResult = validOrError => {\n if (ValidationError.isError(validOrError)) invalid(validOrError);else if (!validOrError) invalid(createError());else next(null);\n };\n const handleError = err => {\n if (ValidationError.isError(err)) invalid(err);else panic(err);\n };\n const shouldSkip = skipAbsent && isAbsent(value);\n if (shouldSkip) {\n return handleResult(true);\n }\n let result;\n try {\n var _result;\n result = test.call(ctx, value, ctx);\n if (typeof ((_result = result) == null ? void 0 : _result.then) === 'function') {\n if (options.sync) {\n throw new Error(`Validation test of type: \"${ctx.type}\" returned a Promise during a synchronous validate. ` + `This test will finish after the validate call has returned`);\n }\n return Promise.resolve(result).then(handleResult, handleError);\n }\n } catch (err) {\n handleError(err);\n return;\n }\n handleResult(result);\n }\n validate.OPTIONS = config;\n return validate;\n}\n\n// Warning: mutates the input\nfunction resolveParams(params, options) {\n if (!params) return params;\n for (const key of Object.keys(params)) {\n params[key] = resolveMaybeRef(params[key], options);\n }\n return params;\n}\nfunction resolveMaybeRef(item, options) {\n return Reference.isRef(item) ? item.getValue(options.value, options.parent, options.context) : item;\n}\n\nfunction getIn(schema, path, value, context = value) {\n let parent, lastPart, lastPartDebug;\n\n // root path: ''\n if (!path) return {\n parent,\n parentPath: path,\n schema\n };\n propertyExpr.forEach(path, (_part, isBracket, isArray) => {\n let part = isBracket ? _part.slice(1, _part.length - 1) : _part;\n schema = schema.resolve({\n context,\n parent,\n value\n });\n let isTuple = schema.type === 'tuple';\n let idx = isArray ? parseInt(part, 10) : 0;\n if (schema.innerType || isTuple) {\n if (isTuple && !isArray) throw new Error(`Yup.reach cannot implicitly index into a tuple type. the path part \"${lastPartDebug}\" must contain an index to the tuple element, e.g. \"${lastPartDebug}[0]\"`);\n if (value && idx >= value.length) {\n throw new Error(`Yup.reach cannot resolve an array item at index: ${_part}, in the path: ${path}. ` + `because there is no value at that index. `);\n }\n parent = value;\n value = value && value[idx];\n schema = isTuple ? schema.spec.types[idx] : schema.innerType;\n }\n\n // sometimes the array index part of a path doesn't exist: \"nested.arr.child\"\n // in these cases the current part is the next schema and should be processed\n // in this iteration. For cases where the index signature is included this\n // check will fail and we'll handle the `child` part on the next iteration like normal\n if (!isArray) {\n if (!schema.fields || !schema.fields[part]) throw new Error(`The schema does not contain the path: ${path}. ` + `(failed at: ${lastPartDebug} which is a type: \"${schema.type}\")`);\n parent = value;\n value = value && value[part];\n schema = schema.fields[part];\n }\n lastPart = part;\n lastPartDebug = isBracket ? '[' + _part + ']' : '.' + _part;\n });\n return {\n schema,\n parent,\n parentPath: lastPart\n };\n}\nfunction reach(obj, path, value, context) {\n return getIn(obj, path, value, context).schema;\n}\n\nclass ReferenceSet extends Set {\n describe() {\n const description = [];\n for (const item of this.values()) {\n description.push(Reference.isRef(item) ? item.describe() : item);\n }\n return description;\n }\n resolveAll(resolve) {\n let result = [];\n for (const item of this.values()) {\n result.push(resolve(item));\n }\n return result;\n }\n clone() {\n return new ReferenceSet(this.values());\n }\n merge(newItems, removeItems) {\n const next = this.clone();\n newItems.forEach(value => next.add(value));\n removeItems.forEach(value => next.delete(value));\n return next;\n }\n}\n\n// tweaked from https://github.com/Kelin2025/nanoclone/blob/0abeb7635bda9b68ef2277093f76dbe3bf3948e1/src/index.js\nfunction clone(src, seen = new Map()) {\n if (isSchema(src) || !src || typeof src !== 'object') return src;\n if (seen.has(src)) return seen.get(src);\n let copy;\n if (src instanceof Date) {\n // Date\n copy = new Date(src.getTime());\n seen.set(src, copy);\n } else if (src instanceof RegExp) {\n // RegExp\n copy = new RegExp(src);\n seen.set(src, copy);\n } else if (Array.isArray(src)) {\n // Array\n copy = new Array(src.length);\n seen.set(src, copy);\n for (let i = 0; i < src.length; i++) copy[i] = clone(src[i], seen);\n } else if (src instanceof Map) {\n // Map\n copy = new Map();\n seen.set(src, copy);\n for (const [k, v] of src.entries()) copy.set(k, clone(v, seen));\n } else if (src instanceof Set) {\n // Set\n copy = new Set();\n seen.set(src, copy);\n for (const v of src) copy.add(clone(v, seen));\n } else if (src instanceof Object) {\n // Object\n copy = {};\n seen.set(src, copy);\n for (const [k, v] of Object.entries(src)) copy[k] = clone(v, seen);\n } else {\n throw Error(`Unable to clone ${src}`);\n }\n return copy;\n}\n\n/**\n * Copied from @standard-schema/spec to avoid having a dependency on it.\n * https://github.com/standard-schema/standard-schema/blob/main/packages/spec/src/index.ts\n */\n\nfunction createStandardPath(path) {\n if (!(path != null && path.length)) {\n return undefined;\n }\n\n // Array to store the final path segments\n const segments = [];\n // Buffer for building the current segment\n let currentSegment = '';\n // Track if we're inside square brackets (array/property access)\n let inBrackets = false;\n // Track if we're inside quotes (for property names with special chars)\n let inQuotes = false;\n for (let i = 0; i < path.length; i++) {\n const char = path[i];\n if (char === '[' && !inQuotes) {\n // When entering brackets, push any accumulated segment after splitting on dots\n if (currentSegment) {\n segments.push(...currentSegment.split('.').filter(Boolean));\n currentSegment = '';\n }\n inBrackets = true;\n continue;\n }\n if (char === ']' && !inQuotes) {\n if (currentSegment) {\n // Handle numeric indices (e.g. arr[0])\n if (/^\\d+$/.test(currentSegment)) {\n segments.push(currentSegment);\n } else {\n // Handle quoted property names (e.g. obj[\"foo.bar\"])\n segments.push(currentSegment.replace(/^\"|\"$/g, ''));\n }\n currentSegment = '';\n }\n inBrackets = false;\n continue;\n }\n if (char === '\"') {\n // Toggle quote state for handling quoted property names\n inQuotes = !inQuotes;\n continue;\n }\n if (char === '.' && !inBrackets && !inQuotes) {\n // On dots outside brackets/quotes, push current segment\n if (currentSegment) {\n segments.push(currentSegment);\n currentSegment = '';\n }\n continue;\n }\n currentSegment += char;\n }\n\n // Push any remaining segment after splitting on dots\n if (currentSegment) {\n segments.push(...currentSegment.split('.').filter(Boolean));\n }\n return segments;\n}\nfunction createStandardIssues(error, parentPath) {\n const path = parentPath ? `${parentPath}.${error.path}` : error.path;\n return error.errors.map(err => ({\n message: err,\n path: createStandardPath(path)\n }));\n}\nfunction issuesFromValidationError(error, parentPath) {\n var _error$inner;\n if (!((_error$inner = error.inner) != null && _error$inner.length) && error.errors.length) {\n return createStandardIssues(error, parentPath);\n }\n const path = parentPath ? `${parentPath}.${error.path}` : error.path;\n return error.inner.flatMap(err => issuesFromValidationError(err, path));\n}\n\n// If `CustomSchemaMeta` isn't extended with any keys, we'll fall back to a\n// loose Record definition allowing free form usage.\nclass Schema {\n constructor(options) {\n this.type = void 0;\n this.deps = [];\n this.tests = void 0;\n this.transforms = void 0;\n this.conditions = [];\n this._mutate = void 0;\n this.internalTests = {};\n this._whitelist = new ReferenceSet();\n this._blacklist = new ReferenceSet();\n this.exclusiveTests = Object.create(null);\n this._typeCheck = void 0;\n this.spec = void 0;\n this.tests = [];\n this.transforms = [];\n this.withMutation(() => {\n this.typeError(mixed.notType);\n });\n this.type = options.type;\n this._typeCheck = options.check;\n this.spec = Object.assign({\n strip: false,\n strict: false,\n abortEarly: true,\n recursive: true,\n disableStackTrace: false,\n nullable: false,\n optional: true,\n coerce: true\n }, options == null ? void 0 : options.spec);\n this.withMutation(s => {\n s.nonNullable();\n });\n }\n\n // TODO: remove\n get _type() {\n return this.type;\n }\n clone(spec) {\n if (this._mutate) {\n if (spec) Object.assign(this.spec, spec);\n return this;\n }\n\n // if the nested value is a schema we can skip cloning, since\n // they are already immutable\n const next = Object.create(Object.getPrototypeOf(this));\n\n // @ts-expect-error this is readonly\n next.type = this.type;\n next._typeCheck = this._typeCheck;\n next._whitelist = this._whitelist.clone();\n next._blacklist = this._blacklist.clone();\n next.internalTests = Object.assign({}, this.internalTests);\n next.exclusiveTests = Object.assign({}, this.exclusiveTests);\n\n // @ts-expect-error this is readonly\n next.deps = [...this.deps];\n next.conditions = [...this.conditions];\n next.tests = [...this.tests];\n next.transforms = [...this.transforms];\n next.spec = clone(Object.assign({}, this.spec, spec));\n return next;\n }\n label(label) {\n let next = this.clone();\n next.spec.label = label;\n return next;\n }\n meta(...args) {\n if (args.length === 0) return this.spec.meta;\n let next = this.clone();\n next.spec.meta = Object.assign(next.spec.meta || {}, args[0]);\n return next;\n }\n withMutation(fn) {\n let before = this._mutate;\n this._mutate = true;\n let result = fn(this);\n this._mutate = before;\n return result;\n }\n concat(schema) {\n if (!schema || schema === this) return this;\n if (schema.type !== this.type && this.type !== 'mixed') throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${schema.type}`);\n let base = this;\n let combined = schema.clone();\n const mergedSpec = Object.assign({}, base.spec, combined.spec);\n combined.spec = mergedSpec;\n combined.internalTests = Object.assign({}, base.internalTests, combined.internalTests);\n\n // manually merge the blacklist/whitelist (the other `schema` takes\n // precedence in case of conflicts)\n combined._whitelist = base._whitelist.merge(schema._whitelist, schema._blacklist);\n combined._blacklist = base._blacklist.merge(schema._blacklist, schema._whitelist);\n\n // start with the current tests\n combined.tests = base.tests;\n combined.exclusiveTests = base.exclusiveTests;\n\n // manually add the new tests to ensure\n // the deduping logic is consistent\n combined.withMutation(next => {\n schema.tests.forEach(fn => {\n next.test(fn.OPTIONS);\n });\n });\n combined.transforms = [...base.transforms, ...combined.transforms];\n return combined;\n }\n isType(v) {\n if (v == null) {\n if (this.spec.nullable && v === null) return true;\n if (this.spec.optional && v === undefined) return true;\n return false;\n }\n return this._typeCheck(v);\n }\n resolve(options) {\n let schema = this;\n if (schema.conditions.length) {\n let conditions = schema.conditions;\n schema = schema.clone();\n schema.conditions = [];\n schema = conditions.reduce((prevSchema, condition) => condition.resolve(prevSchema, options), schema);\n schema = schema.resolve(options);\n }\n return schema;\n }\n resolveOptions(options) {\n var _options$strict, _options$abortEarly, _options$recursive, _options$disableStack;\n return Object.assign({}, options, {\n from: options.from || [],\n strict: (_options$strict = options.strict) != null ? _options$strict : this.spec.strict,\n abortEarly: (_options$abortEarly = options.abortEarly) != null ? _options$abortEarly : this.spec.abortEarly,\n recursive: (_options$recursive = options.recursive) != null ? _options$recursive : this.spec.recursive,\n disableStackTrace: (_options$disableStack = options.disableStackTrace) != null ? _options$disableStack : this.spec.disableStackTrace\n });\n }\n\n /**\n * Run the configured transform pipeline over an input value.\n */\n\n cast(value, options = {}) {\n let resolvedSchema = this.resolve(Object.assign({\n value\n }, options));\n let allowOptionality = options.assert === 'ignore-optionality';\n let result = resolvedSchema._cast(value, options);\n if (options.assert !== false && !resolvedSchema.isType(result)) {\n if (allowOptionality && isAbsent(result)) {\n return result;\n }\n let formattedValue = printValue(value);\n let formattedResult = printValue(result);\n throw new TypeError(`The value of ${options.path || 'field'} could not be cast to a value ` + `that satisfies the schema type: \"${resolvedSchema.type}\". \\n\\n` + `attempted value: ${formattedValue} \\n` + (formattedResult !== formattedValue ? `result of cast: ${formattedResult}` : ''));\n }\n return result;\n }\n _cast(rawValue, options) {\n let value = rawValue === undefined ? rawValue : this.transforms.reduce((prevValue, fn) => fn.call(this, prevValue, rawValue, this), rawValue);\n if (value === undefined) {\n value = this.getDefault(options);\n }\n return value;\n }\n _validate(_value, options = {}, panic, next) {\n let {\n path,\n originalValue = _value,\n strict = this.spec.strict\n } = options;\n let value = _value;\n if (!strict) {\n value = this._cast(value, Object.assign({\n assert: false\n }, options));\n }\n let initialTests = [];\n for (let test of Object.values(this.internalTests)) {\n if (test) initialTests.push(test);\n }\n this.runTests({\n path,\n value,\n originalValue,\n options,\n tests: initialTests\n }, panic, initialErrors => {\n // even if we aren't ending early we can't proceed further if the types aren't correct\n if (initialErrors.length) {\n return next(initialErrors, value);\n }\n this.runTests({\n path,\n value,\n originalValue,\n options,\n tests: this.tests\n }, panic, next);\n });\n }\n\n /**\n * Executes a set of validations, either schema, produced Tests or a nested\n * schema validate result.\n */\n runTests(runOptions, panic, next) {\n let fired = false;\n let {\n tests,\n value,\n originalValue,\n path,\n options\n } = runOptions;\n let panicOnce = arg => {\n if (fired) return;\n fired = true;\n panic(arg, value);\n };\n let nextOnce = arg => {\n if (fired) return;\n fired = true;\n next(arg, value);\n };\n let count = tests.length;\n let nestedErrors = [];\n if (!count) return nextOnce([]);\n let args = {\n value,\n originalValue,\n path,\n options,\n schema: this\n };\n for (let i = 0; i < tests.length; i++) {\n const test = tests[i];\n test(args, panicOnce, function finishTestRun(err) {\n if (err) {\n Array.isArray(err) ? nestedErrors.push(...err) : nestedErrors.push(err);\n }\n if (--count <= 0) {\n nextOnce(nestedErrors);\n }\n });\n }\n }\n asNestedTest({\n key,\n index,\n parent,\n parentPath,\n originalParent,\n options\n }) {\n const k = key != null ? key : index;\n if (k == null) {\n throw TypeError('Must include `key` or `index` for nested validations');\n }\n const isIndex = typeof k === 'number';\n let value = parent[k];\n const testOptions = Object.assign({}, options, {\n // Nested validations fields are always strict:\n // 1. parent isn't strict so the casting will also have cast inner values\n // 2. parent is strict in which case the nested values weren't cast either\n strict: true,\n parent,\n value,\n originalValue: originalParent[k],\n // FIXME: tests depend on `index` being passed around deeply,\n // we should not let the options.key/index bleed through\n key: undefined,\n // index: undefined,\n [isIndex ? 'index' : 'key']: k,\n path: isIndex || k.includes('.') ? `${parentPath || ''}[${isIndex ? k : `\"${k}\"`}]` : (parentPath ? `${parentPath}.` : '') + key\n });\n return (_, panic, next) => this.resolve(testOptions)._validate(value, testOptions, panic, next);\n }\n validate(value, options) {\n var _options$disableStack2;\n let schema = this.resolve(Object.assign({}, options, {\n value\n }));\n let disableStackTrace = (_options$disableStack2 = options == null ? void 0 : options.disableStackTrace) != null ? _options$disableStack2 : schema.spec.disableStackTrace;\n return new Promise((resolve, reject) => schema._validate(value, options, (error, parsed) => {\n if (ValidationError.isError(error)) error.value = parsed;\n reject(error);\n }, (errors, validated) => {\n if (errors.length) reject(new ValidationError(errors, validated, undefined, undefined, disableStackTrace));else resolve(validated);\n }));\n }\n validateSync(value, options) {\n var _options$disableStack3;\n let schema = this.resolve(Object.assign({}, options, {\n value\n }));\n let result;\n let disableStackTrace = (_options$disableStack3 = options == null ? void 0 : options.disableStackTrace) != null ? _options$disableStack3 : schema.spec.disableStackTrace;\n schema._validate(value, Object.assign({}, options, {\n sync: true\n }), (error, parsed) => {\n if (ValidationError.isError(error)) error.value = parsed;\n throw error;\n }, (errors, validated) => {\n if (errors.length) throw new ValidationError(errors, value, undefined, undefined, disableStackTrace);\n result = validated;\n });\n return result;\n }\n isValid(value, options) {\n return this.validate(value, options).then(() => true, err => {\n if (ValidationError.isError(err)) return false;\n throw err;\n });\n }\n isValidSync(value, options) {\n try {\n this.validateSync(value, options);\n return true;\n } catch (err) {\n if (ValidationError.isError(err)) return false;\n throw err;\n }\n }\n _getDefault(options) {\n let defaultValue = this.spec.default;\n if (defaultValue == null) {\n return defaultValue;\n }\n return typeof defaultValue === 'function' ? defaultValue.call(this, options) : clone(defaultValue);\n }\n getDefault(options\n // If schema is defaulted we know it's at least not undefined\n ) {\n let schema = this.resolve(options || {});\n return schema._getDefault(options);\n }\n default(def) {\n if (arguments.length === 0) {\n return this._getDefault();\n }\n let next = this.clone({\n default: def\n });\n return next;\n }\n strict(isStrict = true) {\n return this.clone({\n strict: isStrict\n });\n }\n nullability(nullable, message) {\n const next = this.clone({\n nullable\n });\n next.internalTests.nullable = createValidation({\n message,\n name: 'nullable',\n test(value) {\n return value === null ? this.schema.spec.nullable : true;\n }\n });\n return next;\n }\n optionality(optional, message) {\n const next = this.clone({\n optional\n });\n next.internalTests.optionality = createValidation({\n message,\n name: 'optionality',\n test(value) {\n return value === undefined ? this.schema.spec.optional : true;\n }\n });\n return next;\n }\n optional() {\n return this.optionality(true);\n }\n defined(message = mixed.defined) {\n return this.optionality(false, message);\n }\n nullable() {\n return this.nullability(true);\n }\n nonNullable(message = mixed.notNull) {\n return this.nullability(false, message);\n }\n required(message = mixed.required) {\n return this.clone().withMutation(next => next.nonNullable(message).defined(message));\n }\n notRequired() {\n return this.clone().withMutation(next => next.nullable().optional());\n }\n transform(fn) {\n let next = this.clone();\n next.transforms.push(fn);\n return next;\n }\n\n /**\n * Adds a test function to the schema's queue of tests.\n * tests can be exclusive or non-exclusive.\n *\n * - exclusive tests, will replace any existing tests of the same name.\n * - non-exclusive: can be stacked\n *\n * If a non-exclusive test is added to a schema with an exclusive test of the same name\n * the exclusive test is removed and further tests of the same name will be stacked.\n *\n * If an exclusive test is added to a schema with non-exclusive tests of the same name\n * the previous tests are removed and further tests of the same name will replace each other.\n */\n\n test(...args) {\n let opts;\n if (args.length === 1) {\n if (typeof args[0] === 'function') {\n opts = {\n test: args[0]\n };\n } else {\n opts = args[0];\n }\n } else if (args.length === 2) {\n opts = {\n name: args[0],\n test: args[1]\n };\n } else {\n opts = {\n name: args[0],\n message: args[1],\n test: args[2]\n };\n }\n if (opts.message === undefined) opts.message = mixed.default;\n if (typeof opts.test !== 'function') throw new TypeError('`test` is a required parameters');\n let next = this.clone();\n let validate = createValidation(opts);\n let isExclusive = opts.exclusive || opts.name && next.exclusiveTests[opts.name] === true;\n if (opts.exclusive) {\n if (!opts.name) throw new TypeError('Exclusive tests must provide a unique `name` identifying the test');\n }\n if (opts.name) next.exclusiveTests[opts.name] = !!opts.exclusive;\n next.tests = next.tests.filter(fn => {\n if (fn.OPTIONS.name === opts.name) {\n if (isExclusive) return false;\n if (fn.OPTIONS.test === validate.OPTIONS.test) return false;\n }\n return true;\n });\n next.tests.push(validate);\n return next;\n }\n when(keys, options) {\n if (!Array.isArray(keys) && typeof keys !== 'string') {\n options = keys;\n keys = '.';\n }\n let next = this.clone();\n let deps = toArray(keys).map(key => new Reference(key));\n deps.forEach(dep => {\n // @ts-ignore readonly array\n if (dep.isSibling) next.deps.push(dep.key);\n });\n next.conditions.push(typeof options === 'function' ? new Condition(deps, options) : Condition.fromOptions(deps, options));\n return next;\n }\n typeError(message) {\n let next = this.clone();\n next.internalTests.typeError = createValidation({\n message,\n name: 'typeError',\n skipAbsent: true,\n test(value) {\n if (!this.schema._typeCheck(value)) return this.createError({\n params: {\n type: this.schema.type\n }\n });\n return true;\n }\n });\n return next;\n }\n oneOf(enums, message = mixed.oneOf) {\n let next = this.clone();\n enums.forEach(val => {\n next._whitelist.add(val);\n next._blacklist.delete(val);\n });\n next.internalTests.whiteList = createValidation({\n message,\n name: 'oneOf',\n skipAbsent: true,\n test(value) {\n let valids = this.schema._whitelist;\n let resolved = valids.resolveAll(this.resolve);\n return resolved.includes(value) ? true : this.createError({\n params: {\n values: Array.from(valids).join(', '),\n resolved\n }\n });\n }\n });\n return next;\n }\n notOneOf(enums, message = mixed.notOneOf) {\n let next = this.clone();\n enums.forEach(val => {\n next._blacklist.add(val);\n next._whitelist.delete(val);\n });\n next.internalTests.blacklist = createValidation({\n message,\n name: 'notOneOf',\n test(value) {\n let invalids = this.schema._blacklist;\n let resolved = invalids.resolveAll(this.resolve);\n if (resolved.includes(value)) return this.createError({\n params: {\n values: Array.from(invalids).join(', '),\n resolved\n }\n });\n return true;\n }\n });\n return next;\n }\n strip(strip = true) {\n let next = this.clone();\n next.spec.strip = strip;\n return next;\n }\n\n /**\n * Return a serialized description of the schema including validations, flags, types etc.\n *\n * @param options Provide any needed context for resolving runtime schema alterations (lazy, when conditions, etc).\n */\n describe(options) {\n const next = (options ? this.resolve(options) : this).clone();\n const {\n label,\n meta,\n optional,\n nullable\n } = next.spec;\n const description = {\n meta,\n label,\n optional,\n nullable,\n default: next.getDefault(options),\n type: next.type,\n oneOf: next._whitelist.describe(),\n notOneOf: next._blacklist.describe(),\n tests: next.tests.filter((n, idx, list) => list.findIndex(c => c.OPTIONS.name === n.OPTIONS.name) === idx).map(fn => {\n const params = fn.OPTIONS.params && options ? resolveParams(Object.assign({}, fn.OPTIONS.params), options) : fn.OPTIONS.params;\n return {\n name: fn.OPTIONS.name,\n params\n };\n })\n };\n return description;\n }\n get ['~standard']() {\n const schema = this;\n const standard = {\n version: 1,\n vendor: 'yup',\n async validate(value) {\n try {\n const result = await schema.validate(value, {\n abortEarly: false\n });\n return {\n value: result\n };\n } catch (err) {\n if (err instanceof ValidationError) {\n return {\n issues: issuesFromValidationError(err)\n };\n }\n throw err;\n }\n }\n };\n return standard;\n }\n}\n// @ts-expect-error\nSchema.prototype.__isYupSchema__ = true;\nfor (const method of ['validate', 'validateSync']) Schema.prototype[`${method}At`] = function (path, value, options = {}) {\n const {\n parent,\n parentPath,\n schema\n } = getIn(this, path, value, options.context);\n return schema[method](parent && parent[parentPath], Object.assign({}, options, {\n parent,\n path\n }));\n};\nfor (const alias of ['equals', 'is']) Schema.prototype[alias] = Schema.prototype.oneOf;\nfor (const alias of ['not', 'nope']) Schema.prototype[alias] = Schema.prototype.notOneOf;\n\nconst returnsTrue = () => true;\nfunction create$8(spec) {\n return new MixedSchema(spec);\n}\nclass MixedSchema extends Schema {\n constructor(spec) {\n super(typeof spec === 'function' ? {\n type: 'mixed',\n check: spec\n } : Object.assign({\n type: 'mixed',\n check: returnsTrue\n }, spec));\n }\n}\ncreate$8.prototype = MixedSchema.prototype;\n\nfunction create$7() {\n return new BooleanSchema();\n}\nclass BooleanSchema extends Schema {\n constructor() {\n super({\n type: 'boolean',\n check(v) {\n if (v instanceof Boolean) v = v.valueOf();\n return typeof v === 'boolean';\n }\n });\n this.withMutation(() => {\n this.transform((value, _raw, ctx) => {\n if (ctx.spec.coerce && !ctx.isType(value)) {\n if (/^(true|1)$/i.test(String(value))) return true;\n if (/^(false|0)$/i.test(String(value))) return false;\n }\n return value;\n });\n });\n }\n isTrue(message = boolean.isValue) {\n return this.test({\n message,\n name: 'is-value',\n exclusive: true,\n params: {\n value: 'true'\n },\n test(value) {\n return isAbsent(value) || value === true;\n }\n });\n }\n isFalse(message = boolean.isValue) {\n return this.test({\n message,\n name: 'is-value',\n exclusive: true,\n params: {\n value: 'false'\n },\n test(value) {\n return isAbsent(value) || value === false;\n }\n });\n }\n default(def) {\n return super.default(def);\n }\n defined(msg) {\n return super.defined(msg);\n }\n optional() {\n return super.optional();\n }\n required(msg) {\n return super.required(msg);\n }\n notRequired() {\n return super.notRequired();\n }\n nullable() {\n return super.nullable();\n }\n nonNullable(msg) {\n return super.nonNullable(msg);\n }\n strip(v) {\n return super.strip(v);\n }\n}\ncreate$7.prototype = BooleanSchema.prototype;\n\n/**\n * This file is a modified version of the file from the following repository:\n * Date.parse with progressive enhancement for ISO 8601 <https://github.com/csnover/js-iso8601>\n * NON-CONFORMANT EDITION.\n * \u00A9 2011 Colin Snover <http://zetafleet.com>\n * Released under MIT license.\n */\n\n// prettier-ignore\n// 1 YYYY 2 MM 3 DD 4 HH 5 mm 6 ss 7 msec 8 Z 9 \u00B1 10 tzHH 11 tzmm\nconst isoReg = /^(\\d{4}|[+-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,.](\\d{1,}))?)?(?:(Z)|([+-])(\\d{2})(?::?(\\d{2}))?)?)?$/;\nfunction parseIsoDate(date) {\n const struct = parseDateStruct(date);\n if (!struct) return Date.parse ? Date.parse(date) : Number.NaN;\n\n // timestamps without timezone identifiers should be considered local time\n if (struct.z === undefined && struct.plusMinus === undefined) {\n return new Date(struct.year, struct.month, struct.day, struct.hour, struct.minute, struct.second, struct.millisecond).valueOf();\n }\n let totalMinutesOffset = 0;\n if (struct.z !== 'Z' && struct.plusMinus !== undefined) {\n totalMinutesOffset = struct.hourOffset * 60 + struct.minuteOffset;\n if (struct.plusMinus === '+') totalMinutesOffset = 0 - totalMinutesOffset;\n }\n return Date.UTC(struct.year, struct.month, struct.day, struct.hour, struct.minute + totalMinutesOffset, struct.second, struct.millisecond);\n}\nfunction parseDateStruct(date) {\n var _regexResult$7$length, _regexResult$;\n const regexResult = isoReg.exec(date);\n if (!regexResult) return null;\n\n // use of toNumber() avoids NaN timestamps caused by \u201Cundefined\u201D\n // values being passed to Date constructor\n return {\n year: toNumber(regexResult[1]),\n month: toNumber(regexResult[2], 1) - 1,\n day: toNumber(regexResult[3], 1),\n hour: toNumber(regexResult[4]),\n minute: toNumber(regexResult[5]),\n second: toNumber(regexResult[6]),\n millisecond: regexResult[7] ?\n // allow arbitrary sub-second precision beyond milliseconds\n toNumber(regexResult[7].substring(0, 3)) : 0,\n precision: (_regexResult$7$length = (_regexResult$ = regexResult[7]) == null ? void 0 : _regexResult$.length) != null ? _regexResult$7$length : undefined,\n z: regexResult[8] || undefined,\n plusMinus: regexResult[9] || undefined,\n hourOffset: toNumber(regexResult[10]),\n minuteOffset: toNumber(regexResult[11])\n };\n}\nfunction toNumber(str, defaultValue = 0) {\n return Number(str) || defaultValue;\n}\n\n// Taken from HTML spec: https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlet rEmail =\n// eslint-disable-next-line\n/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\nlet rUrl =\n// eslint-disable-next-line\n/^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i;\n\n// eslint-disable-next-line\nlet rUUID = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\nlet yearMonthDay = '^\\\\d{4}-\\\\d{2}-\\\\d{2}';\nlet hourMinuteSecond = '\\\\d{2}:\\\\d{2}:\\\\d{2}';\nlet zOrOffset = '(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)';\nlet rIsoDateTime = new RegExp(`${yearMonthDay}T${hourMinuteSecond}(\\\\.\\\\d+)?${zOrOffset}$`);\nlet isTrimmed = value => isAbsent(value) || value === value.trim();\nlet objStringTag = {}.toString();\nfunction create$6() {\n return new StringSchema();\n}\nclass StringSchema extends Schema {\n constructor() {\n super({\n type: 'string',\n check(value) {\n if (value instanceof String) value = value.valueOf();\n return typeof value === 'string';\n }\n });\n this.withMutation(() => {\n this.transform((value, _raw, ctx) => {\n if (!ctx.spec.coerce || ctx.isType(value)) return value;\n\n // don't ever convert arrays\n if (Array.isArray(value)) return value;\n const strValue = value != null && value.toString ? value.toString() : value;\n\n // no one wants plain objects converted to [Object object]\n if (strValue === objStringTag) return value;\n return strValue;\n });\n });\n }\n required(message) {\n return super.required(message).withMutation(schema => schema.test({\n message: message || mixed.required,\n name: 'required',\n skipAbsent: true,\n test: value => !!value.length\n }));\n }\n notRequired() {\n return super.notRequired().withMutation(schema => {\n schema.tests = schema.tests.filter(t => t.OPTIONS.name !== 'required');\n return schema;\n });\n }\n length(length, message = string.length) {\n return this.test({\n message,\n name: 'length',\n exclusive: true,\n params: {\n length\n },\n skipAbsent: true,\n test(value) {\n return value.length === this.resolve(length);\n }\n });\n }\n min(min, message = string.min) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n skipAbsent: true,\n test(value) {\n return value.length >= this.resolve(min);\n }\n });\n }\n max(max, message = string.max) {\n return this.test({\n name: 'max',\n exclusive: true,\n message,\n params: {\n max\n },\n skipAbsent: true,\n test(value) {\n return value.length <= this.resolve(max);\n }\n });\n }\n matches(regex, options) {\n let excludeEmptyString = false;\n let message;\n let name;\n if (options) {\n if (typeof options === 'object') {\n ({\n excludeEmptyString = false,\n message,\n name\n } = options);\n } else {\n message = options;\n }\n }\n return this.test({\n name: name || 'matches',\n message: message || string.matches,\n params: {\n regex\n },\n skipAbsent: true,\n test: value => value === '' && excludeEmptyString || value.search(regex) !== -1\n });\n }\n email(message = string.email) {\n return this.matches(rEmail, {\n name: 'email',\n message,\n excludeEmptyString: true\n });\n }\n url(message = string.url) {\n return this.matches(rUrl, {\n name: 'url',\n message,\n excludeEmptyString: true\n });\n }\n uuid(message = string.uuid) {\n return this.matches(rUUID, {\n name: 'uuid',\n message,\n excludeEmptyString: false\n });\n }\n datetime(options) {\n let message = '';\n let allowOffset;\n let precision;\n if (options) {\n if (typeof options === 'object') {\n ({\n message = '',\n allowOffset = false,\n precision = undefined\n } = options);\n } else {\n message = options;\n }\n }\n return this.matches(rIsoDateTime, {\n name: 'datetime',\n message: message || string.datetime,\n excludeEmptyString: true\n }).test({\n name: 'datetime_offset',\n message: message || string.datetime_offset,\n params: {\n allowOffset\n },\n skipAbsent: true,\n test: value => {\n if (!value || allowOffset) return true;\n const struct = parseDateStruct(value);\n if (!struct) return false;\n return !!struct.z;\n }\n }).test({\n name: 'datetime_precision',\n message: message || string.datetime_precision,\n params: {\n precision\n },\n skipAbsent: true,\n test: value => {\n if (!value || precision == undefined) return true;\n const struct = parseDateStruct(value);\n if (!struct) return false;\n return struct.precision === precision;\n }\n });\n }\n\n //-- transforms --\n ensure() {\n return this.default('').transform(val => val === null ? '' : val);\n }\n trim(message = string.trim) {\n return this.transform(val => val != null ? val.trim() : val).test({\n message,\n name: 'trim',\n test: isTrimmed\n });\n }\n lowercase(message = string.lowercase) {\n return this.transform(value => !isAbsent(value) ? value.toLowerCase() : value).test({\n message,\n name: 'string_case',\n exclusive: true,\n skipAbsent: true,\n test: value => isAbsent(value) || value === value.toLowerCase()\n });\n }\n uppercase(message = string.uppercase) {\n return this.transform(value => !isAbsent(value) ? value.toUpperCase() : value).test({\n message,\n name: 'string_case',\n exclusive: true,\n skipAbsent: true,\n test: value => isAbsent(value) || value === value.toUpperCase()\n });\n }\n}\ncreate$6.prototype = StringSchema.prototype;\n\n//\n// String Interfaces\n//\n\nlet isNaN$1 = value => value != +value;\nfunction create$5() {\n return new NumberSchema();\n}\nclass NumberSchema extends Schema {\n constructor() {\n super({\n type: 'number',\n check(value) {\n if (value instanceof Number) value = value.valueOf();\n return typeof value === 'number' && !isNaN$1(value);\n }\n });\n this.withMutation(() => {\n this.transform((value, _raw, ctx) => {\n if (!ctx.spec.coerce) return value;\n let parsed = value;\n if (typeof parsed === 'string') {\n parsed = parsed.replace(/\\s/g, '');\n if (parsed === '') return NaN;\n // don't use parseFloat to avoid positives on alpha-numeric strings\n parsed = +parsed;\n }\n\n // null -> NaN isn't useful; treat all nulls as null and let it fail on\n // nullability check vs TypeErrors\n if (ctx.isType(parsed) || parsed === null) return parsed;\n return parseFloat(parsed);\n });\n });\n }\n min(min, message = number.min) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n skipAbsent: true,\n test(value) {\n return value >= this.resolve(min);\n }\n });\n }\n max(max, message = number.max) {\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n skipAbsent: true,\n test(value) {\n return value <= this.resolve(max);\n }\n });\n }\n lessThan(less, message = number.lessThan) {\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n less\n },\n skipAbsent: true,\n test(value) {\n return value < this.resolve(less);\n }\n });\n }\n moreThan(more, message = number.moreThan) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n more\n },\n skipAbsent: true,\n test(value) {\n return value > this.resolve(more);\n }\n });\n }\n positive(msg = number.positive) {\n return this.moreThan(0, msg);\n }\n negative(msg = number.negative) {\n return this.lessThan(0, msg);\n }\n integer(message = number.integer) {\n return this.test({\n name: 'integer',\n message,\n skipAbsent: true,\n test: val => Number.isInteger(val)\n });\n }\n truncate() {\n return this.transform(value => !isAbsent(value) ? value | 0 : value);\n }\n round(method) {\n var _method;\n let avail = ['ceil', 'floor', 'round', 'trunc'];\n method = ((_method = method) == null ? void 0 : _method.toLowerCase()) || 'round';\n\n // this exists for symemtry with the new Math.trunc\n if (method === 'trunc') return this.truncate();\n if (avail.indexOf(method.toLowerCase()) === -1) throw new TypeError('Only valid options for round() are: ' + avail.join(', '));\n return this.transform(value => !isAbsent(value) ? Math[method](value) : value);\n }\n}\ncreate$5.prototype = NumberSchema.prototype;\n\n//\n// Number Interfaces\n//\n\nlet invalidDate = new Date('');\nlet isDate = obj => Object.prototype.toString.call(obj) === '[object Date]';\nfunction create$4() {\n return new DateSchema();\n}\nclass DateSchema extends Schema {\n constructor() {\n super({\n type: 'date',\n check(v) {\n return isDate(v) && !isNaN(v.getTime());\n }\n });\n this.withMutation(() => {\n this.transform((value, _raw, ctx) => {\n // null -> InvalidDate isn't useful; treat all nulls as null and let it fail on\n // nullability check vs TypeErrors\n if (!ctx.spec.coerce || ctx.isType(value) || value === null) return value;\n value = parseIsoDate(value);\n\n // 0 is a valid timestamp equivalent to 1970-01-01T00:00:00Z(unix epoch) or before.\n return !isNaN(value) ? new Date(value) : DateSchema.INVALID_DATE;\n });\n });\n }\n prepareParam(ref, name) {\n let param;\n if (!Reference.isRef(ref)) {\n let cast = this.cast(ref);\n if (!this._typeCheck(cast)) throw new TypeError(`\\`${name}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);\n param = cast;\n } else {\n param = ref;\n }\n return param;\n }\n min(min, message = date.min) {\n let limit = this.prepareParam(min, 'min');\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n skipAbsent: true,\n test(value) {\n return value >= this.resolve(limit);\n }\n });\n }\n max(max, message = date.max) {\n let limit = this.prepareParam(max, 'max');\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n skipAbsent: true,\n test(value) {\n return value <= this.resolve(limit);\n }\n });\n }\n}\nDateSchema.INVALID_DATE = invalidDate;\ncreate$4.prototype = DateSchema.prototype;\ncreate$4.INVALID_DATE = invalidDate;\n\n// @ts-expect-error\nfunction sortFields(fields, excludedEdges = []) {\n let edges = [];\n let nodes = new Set();\n let excludes = new Set(excludedEdges.map(([a, b]) => `${a}-${b}`));\n function addNode(depPath, key) {\n let node = propertyExpr.split(depPath)[0];\n nodes.add(node);\n if (!excludes.has(`${key}-${node}`)) edges.push([key, node]);\n }\n for (const key of Object.keys(fields)) {\n let value = fields[key];\n nodes.add(key);\n if (Reference.isRef(value) && value.isSibling) addNode(value.path, key);else if (isSchema(value) && 'deps' in value) value.deps.forEach(path => addNode(path, key));\n }\n return toposort__default[\"default\"].array(Array.from(nodes), edges).reverse();\n}\n\nfunction findIndex(arr, err) {\n let idx = Infinity;\n arr.some((key, ii) => {\n var _err$path;\n if ((_err$path = err.path) != null && _err$path.includes(key)) {\n idx = ii;\n return true;\n }\n });\n return idx;\n}\nfunction sortByKeyOrder(keys) {\n return (a, b) => {\n return findIndex(keys, a) - findIndex(keys, b);\n };\n}\n\nconst parseJson = (value, _, ctx) => {\n if (typeof value !== 'string') {\n return value;\n }\n let parsed = value;\n try {\n parsed = JSON.parse(value);\n } catch (err) {\n /* */\n }\n return ctx.isType(parsed) ? parsed : value;\n};\n\n// @ts-ignore\nfunction deepPartial(schema) {\n if ('fields' in schema) {\n const partial = {};\n for (const [key, fieldSchema] of Object.entries(schema.fields)) {\n partial[key] = deepPartial(fieldSchema);\n }\n return schema.setFields(partial);\n }\n if (schema.type === 'array') {\n const nextArray = schema.optional();\n if (nextArray.innerType) nextArray.innerType = deepPartial(nextArray.innerType);\n return nextArray;\n }\n if (schema.type === 'tuple') {\n return schema.optional().clone({\n types: schema.spec.types.map(deepPartial)\n });\n }\n if ('optional' in schema) {\n return schema.optional();\n }\n return schema;\n}\nconst deepHas = (obj, p) => {\n const path = [...propertyExpr.normalizePath(p)];\n if (path.length === 1) return path[0] in obj;\n let last = path.pop();\n let parent = propertyExpr.getter(propertyExpr.join(path), true)(obj);\n return !!(parent && last in parent);\n};\nlet isObject = obj => Object.prototype.toString.call(obj) === '[object Object]';\nfunction unknown(ctx, value) {\n let known = Object.keys(ctx.fields);\n return Object.keys(value).filter(key => known.indexOf(key) === -1);\n}\nconst defaultSort = sortByKeyOrder([]);\nfunction create$3(spec) {\n return new ObjectSchema(spec);\n}\nclass ObjectSchema extends Schema {\n constructor(spec) {\n super({\n type: 'object',\n check(value) {\n return isObject(value) || typeof value === 'function';\n }\n });\n this.fields = Object.create(null);\n this._sortErrors = defaultSort;\n this._nodes = [];\n this._excludedEdges = [];\n this.withMutation(() => {\n if (spec) {\n this.shape(spec);\n }\n });\n }\n _cast(_value, options = {}) {\n var _options$stripUnknown;\n let value = super._cast(_value, options);\n\n //should ignore nulls here\n if (value === undefined) return this.getDefault(options);\n if (!this._typeCheck(value)) return value;\n let fields = this.fields;\n let strip = (_options$stripUnknown = options.stripUnknown) != null ? _options$stripUnknown : this.spec.noUnknown;\n let props = [].concat(this._nodes, Object.keys(value).filter(v => !this._nodes.includes(v)));\n let intermediateValue = {}; // is filled during the transform below\n let innerOptions = Object.assign({}, options, {\n parent: intermediateValue,\n __validating: options.__validating || false\n });\n let isChanged = false;\n for (const prop of props) {\n let field = fields[prop];\n let exists = (prop in value);\n if (field) {\n let fieldValue;\n let inputValue = value[prop];\n\n // safe to mutate since this is fired in sequence\n innerOptions.path = (options.path ? `${options.path}.` : '') + prop;\n field = field.resolve({\n value: inputValue,\n context: options.context,\n parent: intermediateValue\n });\n let fieldSpec = field instanceof Schema ? field.spec : undefined;\n let strict = fieldSpec == null ? void 0 : fieldSpec.strict;\n if (fieldSpec != null && fieldSpec.strip) {\n isChanged = isChanged || prop in value;\n continue;\n }\n fieldValue = !options.__validating || !strict ?\n // TODO: use _cast, this is double resolving\n field.cast(value[prop], innerOptions) : value[prop];\n if (fieldValue !== undefined) {\n intermediateValue[prop] = fieldValue;\n }\n } else if (exists && !strip) {\n intermediateValue[prop] = value[prop];\n }\n if (exists !== prop in intermediateValue || intermediateValue[prop] !== value[prop]) {\n isChanged = true;\n }\n }\n return isChanged ? intermediateValue : value;\n }\n _validate(_value, options = {}, panic, next) {\n let {\n from = [],\n originalValue = _value,\n recursive = this.spec.recursive\n } = options;\n options.from = [{\n schema: this,\n value: originalValue\n }, ...from];\n // this flag is needed for handling `strict` correctly in the context of\n // validation vs just casting. e.g strict() on a field is only used when validating\n options.__validating = true;\n options.originalValue = originalValue;\n super._validate(_value, options, panic, (objectErrors, value) => {\n if (!recursive || !isObject(value)) {\n next(objectErrors, value);\n return;\n }\n originalValue = originalValue || value;\n let tests = [];\n for (let key of this._nodes) {\n let field = this.fields[key];\n if (!field || Reference.isRef(field)) {\n continue;\n }\n tests.push(field.asNestedTest({\n options,\n key,\n parent: value,\n parentPath: options.path,\n originalParent: originalValue\n }));\n }\n this.runTests({\n tests,\n value,\n originalValue,\n options\n }, panic, fieldErrors => {\n next(fieldErrors.sort(this._sortErrors).concat(objectErrors), value);\n });\n });\n }\n clone(spec) {\n const next = super.clone(spec);\n next.fields = Object.assign({}, this.fields);\n next._nodes = this._nodes;\n next._excludedEdges = this._excludedEdges;\n next._sortErrors = this._sortErrors;\n return next;\n }\n concat(schema) {\n let next = super.concat(schema);\n let nextFields = next.fields;\n for (let [field, schemaOrRef] of Object.entries(this.fields)) {\n const target = nextFields[field];\n nextFields[field] = target === undefined ? schemaOrRef : target;\n }\n return next.withMutation(s =>\n // XXX: excludes here is wrong\n s.setFields(nextFields, [...this._excludedEdges, ...schema._excludedEdges]));\n }\n _getDefault(options) {\n if ('default' in this.spec) {\n return super._getDefault(options);\n }\n\n // if there is no default set invent one\n if (!this._nodes.length) {\n return undefined;\n }\n let dft = {};\n this._nodes.forEach(key => {\n var _innerOptions;\n const field = this.fields[key];\n let innerOptions = options;\n if ((_innerOptions = innerOptions) != null && _innerOptions.value) {\n innerOptions = Object.assign({}, innerOptions, {\n parent: innerOptions.value,\n value: innerOptions.value[key]\n });\n }\n dft[key] = field && 'getDefault' in field ? field.getDefault(innerOptions) : undefined;\n });\n return dft;\n }\n setFields(shape, excludedEdges) {\n let next = this.clone();\n next.fields = shape;\n next._nodes = sortFields(shape, excludedEdges);\n next._sortErrors = sortByKeyOrder(Object.keys(shape));\n // XXX: this carries over edges which may not be what you want\n if (excludedEdges) next._excludedEdges = excludedEdges;\n return next;\n }\n shape(additions, excludes = []) {\n return this.clone().withMutation(next => {\n let edges = next._excludedEdges;\n if (excludes.length) {\n if (!Array.isArray(excludes[0])) excludes = [excludes];\n edges = [...next._excludedEdges, ...excludes];\n }\n\n // XXX: excludes here is wrong\n return next.setFields(Object.assign(next.fields, additions), edges);\n });\n }\n partial() {\n const partial = {};\n for (const [key, schema] of Object.entries(this.fields)) {\n partial[key] = 'optional' in schema && schema.optional instanceof Function ? schema.optional() : schema;\n }\n return this.setFields(partial);\n }\n deepPartial() {\n const next = deepPartial(this);\n return next;\n }\n pick(keys) {\n const picked = {};\n for (const key of keys) {\n if (this.fields[key]) picked[key] = this.fields[key];\n }\n return this.setFields(picked, this._excludedEdges.filter(([a, b]) => keys.includes(a) && keys.includes(b)));\n }\n omit(keys) {\n const remaining = [];\n for (const key of Object.keys(this.fields)) {\n if (keys.includes(key)) continue;\n remaining.push(key);\n }\n return this.pick(remaining);\n }\n from(from, to, alias) {\n let fromGetter = propertyExpr.getter(from, true);\n return this.transform(obj => {\n if (!obj) return obj;\n let newObj = obj;\n if (deepHas(obj, from)) {\n newObj = Object.assign({}, obj);\n if (!alias) delete newObj[from];\n newObj[to] = fromGetter(obj);\n }\n return newObj;\n });\n }\n\n /** Parse an input JSON string to an object */\n json() {\n return this.transform(parseJson);\n }\n\n /**\n * Similar to `noUnknown` but only validates that an object is the right shape without stripping the unknown keys\n */\n exact(message) {\n return this.test({\n name: 'exact',\n exclusive: true,\n message: message || object.exact,\n test(value) {\n if (value == null) return true;\n const unknownKeys = unknown(this.schema, value);\n return unknownKeys.length === 0 || this.createError({\n params: {\n properties: unknownKeys.join(', ')\n }\n });\n }\n });\n }\n stripUnknown() {\n return this.clone({\n noUnknown: true\n });\n }\n noUnknown(noAllow = true, message = object.noUnknown) {\n if (typeof noAllow !== 'boolean') {\n message = noAllow;\n noAllow = true;\n }\n let next = this.test({\n name: 'noUnknown',\n exclusive: true,\n message: message,\n test(value) {\n if (value == null) return true;\n const unknownKeys = unknown(this.schema, value);\n return !noAllow || unknownKeys.length === 0 || this.createError({\n params: {\n unknown: unknownKeys.join(', ')\n }\n });\n }\n });\n next.spec.noUnknown = noAllow;\n return next;\n }\n unknown(allow = true, message = object.noUnknown) {\n return this.noUnknown(!allow, message);\n }\n transformKeys(fn) {\n return this.transform(obj => {\n if (!obj) return obj;\n const result = {};\n for (const key of Object.keys(obj)) result[fn(key)] = obj[key];\n return result;\n });\n }\n camelCase() {\n return this.transformKeys(tinyCase.camelCase);\n }\n snakeCase() {\n return this.transformKeys(tinyCase.snakeCase);\n }\n constantCase() {\n return this.transformKeys(key => tinyCase.snakeCase(key).toUpperCase());\n }\n describe(options) {\n const next = (options ? this.resolve(options) : this).clone();\n const base = super.describe(options);\n base.fields = {};\n for (const [key, value] of Object.entries(next.fields)) {\n var _innerOptions2;\n let innerOptions = options;\n if ((_innerOptions2 = innerOptions) != null && _innerOptions2.value) {\n innerOptions = Object.assign({}, innerOptions, {\n parent: innerOptions.value,\n value: innerOptions.value[key]\n });\n }\n base.fields[key] = value.describe(innerOptions);\n }\n return base;\n }\n}\ncreate$3.prototype = ObjectSchema.prototype;\n\nfunction create$2(type) {\n return new ArraySchema(type);\n}\nclass ArraySchema extends Schema {\n constructor(type) {\n super({\n type: 'array',\n spec: {\n types: type\n },\n check(v) {\n return Array.isArray(v);\n }\n });\n\n // `undefined` specifically means uninitialized, as opposed to \"no subtype\"\n this.innerType = void 0;\n this.innerType = type;\n }\n _cast(_value, _opts) {\n const value = super._cast(_value, _opts);\n\n // should ignore nulls here\n if (!this._typeCheck(value) || !this.innerType) {\n return value;\n }\n let isChanged = false;\n const castArray = value.map((v, idx) => {\n const castElement = this.innerType.cast(v, Object.assign({}, _opts, {\n path: `${_opts.path || ''}[${idx}]`\n }));\n if (castElement !== v) {\n isChanged = true;\n }\n return castElement;\n });\n return isChanged ? castArray : value;\n }\n _validate(_value, options = {}, panic, next) {\n var _options$recursive;\n // let sync = options.sync;\n // let path = options.path;\n let innerType = this.innerType;\n // let endEarly = options.abortEarly ?? this.spec.abortEarly;\n let recursive = (_options$recursive = options.recursive) != null ? _options$recursive : this.spec.recursive;\n options.originalValue != null ? options.originalValue : _value;\n super._validate(_value, options, panic, (arrayErrors, value) => {\n var _options$originalValu2;\n if (!recursive || !innerType || !this._typeCheck(value)) {\n next(arrayErrors, value);\n return;\n }\n\n // #950 Ensure that sparse array empty slots are validated\n let tests = new Array(value.length);\n for (let index = 0; index < value.length; index++) {\n var _options$originalValu;\n tests[index] = innerType.asNestedTest({\n options,\n index,\n parent: value,\n parentPath: options.path,\n originalParent: (_options$originalValu = options.originalValue) != null ? _options$originalValu : _value\n });\n }\n this.runTests({\n value,\n tests,\n originalValue: (_options$originalValu2 = options.originalValue) != null ? _options$originalValu2 : _value,\n options\n }, panic, innerTypeErrors => next(innerTypeErrors.concat(arrayErrors), value));\n });\n }\n clone(spec) {\n const next = super.clone(spec);\n // @ts-expect-error readonly\n next.innerType = this.innerType;\n return next;\n }\n\n /** Parse an input JSON string to an object */\n json() {\n return this.transform(parseJson);\n }\n concat(schema) {\n let next = super.concat(schema);\n\n // @ts-expect-error readonly\n next.innerType = this.innerType;\n if (schema.innerType)\n // @ts-expect-error readonly\n next.innerType = next.innerType ?\n // @ts-expect-error Lazy doesn't have concat and will break\n next.innerType.concat(schema.innerType) : schema.innerType;\n return next;\n }\n of(schema) {\n // FIXME: this should return a new instance of array without the default to be\n let next = this.clone();\n if (!isSchema(schema)) throw new TypeError('`array.of()` sub-schema must be a valid yup schema not: ' + printValue(schema));\n\n // @ts-expect-error readonly\n next.innerType = schema;\n next.spec = Object.assign({}, next.spec, {\n types: schema\n });\n return next;\n }\n length(length, message = array.length) {\n return this.test({\n message,\n name: 'length',\n exclusive: true,\n params: {\n length\n },\n skipAbsent: true,\n test(value) {\n return value.length === this.resolve(length);\n }\n });\n }\n min(min, message) {\n message = message || array.min;\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n skipAbsent: true,\n // FIXME(ts): Array<typeof T>\n test(value) {\n return value.length >= this.resolve(min);\n }\n });\n }\n max(max, message) {\n message = message || array.max;\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n skipAbsent: true,\n test(value) {\n return value.length <= this.resolve(max);\n }\n });\n }\n ensure() {\n return this.default(() => []).transform((val, original) => {\n // We don't want to return `null` for nullable schema\n if (this._typeCheck(val)) return val;\n return original == null ? [] : [].concat(original);\n });\n }\n compact(rejector) {\n let reject = !rejector ? v => !!v : (v, i, a) => !rejector(v, i, a);\n return this.transform(values => values != null ? values.filter(reject) : values);\n }\n describe(options) {\n const next = (options ? this.resolve(options) : this).clone();\n const base = super.describe(options);\n if (next.innerType) {\n var _innerOptions;\n let innerOptions = options;\n if ((_innerOptions = innerOptions) != null && _innerOptions.value) {\n innerOptions = Object.assign({}, innerOptions, {\n parent: innerOptions.value,\n value: innerOptions.value[0]\n });\n }\n base.innerType = next.innerType.describe(innerOptions);\n }\n return base;\n }\n}\ncreate$2.prototype = ArraySchema.prototype;\n\n// @ts-ignore\nfunction create$1(schemas) {\n return new TupleSchema(schemas);\n}\nclass TupleSchema extends Schema {\n constructor(schemas) {\n super({\n type: 'tuple',\n spec: {\n types: schemas\n },\n check(v) {\n const types = this.spec.types;\n return Array.isArray(v) && v.length === types.length;\n }\n });\n this.withMutation(() => {\n this.typeError(tuple.notType);\n });\n }\n _cast(inputValue, options) {\n const {\n types\n } = this.spec;\n const value = super._cast(inputValue, options);\n if (!this._typeCheck(value)) {\n return value;\n }\n let isChanged = false;\n const castArray = types.map((type, idx) => {\n const castElement = type.cast(value[idx], Object.assign({}, options, {\n path: `${options.path || ''}[${idx}]`\n }));\n if (castElement !== value[idx]) isChanged = true;\n return castElement;\n });\n return isChanged ? castArray : value;\n }\n _validate(_value, options = {}, panic, next) {\n let itemTypes = this.spec.types;\n super._validate(_value, options, panic, (tupleErrors, value) => {\n var _options$originalValu2;\n // intentionally not respecting recursive\n if (!this._typeCheck(value)) {\n next(tupleErrors, value);\n return;\n }\n let tests = [];\n for (let [index, itemSchema] of itemTypes.entries()) {\n var _options$originalValu;\n tests[index] = itemSchema.asNestedTest({\n options,\n index,\n parent: value,\n parentPath: options.path,\n originalParent: (_options$originalValu = options.originalValue) != null ? _options$originalValu : _value\n });\n }\n this.runTests({\n value,\n tests,\n originalValue: (_options$originalValu2 = options.originalValue) != null ? _options$originalValu2 : _value,\n options\n }, panic, innerTypeErrors => next(innerTypeErrors.concat(tupleErrors), value));\n });\n }\n describe(options) {\n const next = (options ? this.resolve(options) : this).clone();\n const base = super.describe(options);\n base.innerType = next.spec.types.map((schema, index) => {\n var _innerOptions;\n let innerOptions = options;\n if ((_innerOptions = innerOptions) != null && _innerOptions.value) {\n innerOptions = Object.assign({}, innerOptions, {\n parent: innerOptions.value,\n value: innerOptions.value[index]\n });\n }\n return schema.describe(innerOptions);\n });\n return base;\n }\n}\ncreate$1.prototype = TupleSchema.prototype;\n\nfunction create(builder) {\n return new Lazy(builder);\n}\nfunction catchValidationError(fn) {\n try {\n return fn();\n } catch (err) {\n if (ValidationError.isError(err)) return Promise.reject(err);\n throw err;\n }\n}\nclass Lazy {\n constructor(builder) {\n this.type = 'lazy';\n this.__isYupSchema__ = true;\n this.spec = void 0;\n this._resolve = (value, options = {}) => {\n let schema = this.builder(value, options);\n if (!isSchema(schema)) throw new TypeError('lazy() functions must return a valid schema');\n if (this.spec.optional) schema = schema.optional();\n return schema.resolve(options);\n };\n this.builder = builder;\n this.spec = {\n meta: undefined,\n optional: false\n };\n }\n clone(spec) {\n const next = new Lazy(this.builder);\n next.spec = Object.assign({}, this.spec, spec);\n return next;\n }\n optionality(optional) {\n const next = this.clone({\n optional\n });\n return next;\n }\n optional() {\n return this.optionality(true);\n }\n resolve(options) {\n return this._resolve(options.value, options);\n }\n cast(value, options) {\n return this._resolve(value, options).cast(value, options);\n }\n asNestedTest(config) {\n let {\n key,\n index,\n parent,\n options\n } = config;\n let value = parent[index != null ? index : key];\n return this._resolve(value, Object.assign({}, options, {\n value,\n parent\n })).asNestedTest(config);\n }\n validate(value, options) {\n return catchValidationError(() => this._resolve(value, options).validate(value, options));\n }\n validateSync(value, options) {\n return this._resolve(value, options).validateSync(value, options);\n }\n validateAt(path, value, options) {\n return catchValidationError(() => this._resolve(value, options).validateAt(path, value, options));\n }\n validateSyncAt(path, value, options) {\n return this._resolve(value, options).validateSyncAt(path, value, options);\n }\n isValid(value, options) {\n try {\n return this._resolve(value, options).isValid(value, options);\n } catch (err) {\n if (ValidationError.isError(err)) {\n return Promise.resolve(false);\n }\n throw err;\n }\n }\n isValidSync(value, options) {\n return this._resolve(value, options).isValidSync(value, options);\n }\n describe(options) {\n return options ? this.resolve(options).describe(options) : {\n type: 'lazy',\n meta: this.spec.meta,\n label: undefined\n };\n }\n meta(...args) {\n if (args.length === 0) return this.spec.meta;\n let next = this.clone();\n next.spec.meta = Object.assign(next.spec.meta || {}, args[0]);\n return next;\n }\n get ['~standard']() {\n const schema = this;\n const standard = {\n version: 1,\n vendor: 'yup',\n async validate(value) {\n try {\n const result = await schema.validate(value, {\n abortEarly: false\n });\n return {\n value: result\n };\n } catch (err) {\n if (ValidationError.isError(err)) {\n return {\n issues: issuesFromValidationError(err)\n };\n }\n throw err;\n }\n }\n };\n return standard;\n }\n}\n\nfunction setLocale(custom) {\n Object.keys(custom).forEach(type => {\n // @ts-ignore\n Object.keys(custom[type]).forEach(method => {\n // @ts-ignore\n locale[type][method] = custom[type][method];\n });\n });\n}\n\nfunction addMethod(schemaType, name, fn) {\n if (!schemaType || !isSchema(schemaType.prototype)) throw new TypeError('You must provide a yup schema constructor function');\n if (typeof name !== 'string') throw new TypeError('A Method name must be provided');\n if (typeof fn !== 'function') throw new TypeError('Method function must be provided');\n schemaType.prototype[name] = fn;\n}\n\nexports.ArraySchema = ArraySchema;\nexports.BooleanSchema = BooleanSchema;\nexports.DateSchema = DateSchema;\nexports.LazySchema = Lazy;\nexports.MixedSchema = MixedSchema;\nexports.NumberSchema = NumberSchema;\nexports.ObjectSchema = ObjectSchema;\nexports.Schema = Schema;\nexports.StringSchema = StringSchema;\nexports.TupleSchema = TupleSchema;\nexports.ValidationError = ValidationError;\nexports.addMethod = addMethod;\nexports.array = create$2;\nexports.bool = create$7;\nexports.boolean = create$7;\nexports.date = create$4;\nexports.defaultLocale = locale;\nexports.getIn = getIn;\nexports.isSchema = isSchema;\nexports.lazy = create;\nexports.mixed = create$8;\nexports.number = create$5;\nexports.object = create$3;\nexports.printValue = printValue;\nexports.reach = reach;\nexports.ref = create$9;\nexports.setLocale = setLocale;\nexports.string = create$6;\nexports.tuple = create$1;\n", "#!/usr/bin/env node\nimport { InvalidArgumentError, Option, program } from 'commander';\nimport { render } from 'ink';\nimport { FC, createElement } from 'react';\nimport 'source-map-support/register';\n\nimport BuildCommand from './commands/build/BuildCommand';\nimport BuildsCommand from './commands/BuildsCommand';\nimport IntrospectCommand from './commands/introspect/IntrospectCommand';\nimport LogoutCommand from './commands/LogoutCommand';\nimport ReleaseCommand from './commands/release/ReleaseCommand';\nimport SmokeTestCommand from './commands/smoke-test/SmokeTestCommand';\nimport WhoamiCommand from './commands/WhoamiCommand';\nimport getCliVersion from './utilities/getCliVersion';\nimport onCommand from './utilities/onCommand';\nimport { setConfigDir, setEphemeralMode } from './utilities/configStore';\nimport {\n BreakpointResolution,\n formatBreakpointCatalog,\n resolveBreakpointInput,\n} from './commands/build/utilities/breakpoints';\nimport {\n continueBreakpoint,\n isValidPlatform,\n} from './commands/build/utilities/continueBreakpoint';\nimport { PlatformName } from '@todesktop/shared';\n\nfunction parseCount(value: string): number {\n const parsedValue = Number.parseInt(value, 10);\n if (parsedValue > 0) {\n return parsedValue;\n }\n\n throw new InvalidArgumentError('Should be a positive number');\n}\n\nconst configOption = new Option(\n '--config [string]',\n 'Path to a different configuration file. If not specified, ' +\n '`todesktop.json` in the project root will be used',\n).argParser((value?: string): string | undefined => {\n if (typeof value === 'string' && value === '') {\n throw new InvalidArgumentError('Provided config path is empty');\n }\n\n return value;\n});\n\nprogram\n .name('todesktop')\n .version(getCliVersion())\n .option(\n '--config-dir <path>',\n 'Custom directory for storing CLI configuration and credentials. ' +\n 'Can also be set via TODESKTOP_CONFIG_DIR environment variable',\n )\n .option(\n '--ephemeral',\n 'Do not persist any configuration or credentials to disk. ' +\n 'Useful for CI environments where credentials are provided via environment variables',\n )\n .hook('preAction', (thisCommand) => {\n const opts = thisCommand.opts();\n if (opts.configDir) {\n setConfigDir(opts.configDir);\n }\n if (opts.ephemeral) {\n setEphemeralMode(true);\n }\n });\n\nprogram\n .command('build')\n .description(\n 'Build an Electron app with native installers, code signing baked-in, ' +\n \"etc. but without releasing it (existing users won't get an \" +\n 'auto-update). For quicker builds, you can append `--code-sign=false` ' +\n 'to disable code-signing and notarization.',\n )\n .option(\n '--code-sign [bool]',\n 'Whether or not code-signing and notarization should be performed. ' +\n 'Disable this for quicker builds',\n )\n .option(\n '--async',\n 'Upload your app for building on our servers but exit after the upload ' +\n 'is complete. Do not wait until the app is actually built',\n )\n .option(\n '--webhook [string]',\n 'Send POST request to the webhook URL after building is finished',\n )\n .option(\n '--ignore-extends-errors [bool]',\n 'Ignore `id` and `appId` validation errors when extending another todesktop.json file',\n )\n .option('--introspect', 'Enable interactive debugging for this build')\n .option(\n '--breakpoints <list>',\n 'Comma-separated list of build breakpoints (requires --introspect). Use `--breakpoints=list` to show supported names',\n )\n .option(\n '--continue <buildId>',\n 'Resume a paused introspection breakpoint for an existing build',\n )\n .option(\n '--platform <platform>',\n 'Platform to target when using --continue (mac, windows, linux)',\n )\n .addOption(configOption)\n .action(\n async ({\n async,\n codeSign,\n config,\n webhook,\n ignoreExtendsErrors,\n introspect,\n breakpoints,\n continue: continueBuildId,\n platform,\n }) => {\n if (continueBuildId) {\n if (!platform) {\n console.error(\n '--continue requires a valid --platform option (mac, windows, linux).',\n );\n process.exit(1);\n }\n\n if (!isValidPlatform(platform)) {\n console.error(\n '--continue requires a valid --platform option (mac, windows, linux).',\n );\n process.exit(1);\n }\n\n try {\n const resolvedPlatform: PlatformName = platform;\n await continueBreakpoint({\n buildId: continueBuildId,\n platform: resolvedPlatform,\n configPath: config,\n ignoreExtendsErrors: ignoreExtendsErrors === true,\n });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n console.error(message);\n process.exit(1);\n }\n\n return;\n }\n\n if (platform) {\n console.error('--platform is only valid when used with --continue');\n process.exit(1);\n }\n\n if (breakpoints === 'list') {\n console.log(formatBreakpointCatalog());\n return;\n }\n\n let breakpointPlan: BreakpointResolution | undefined;\n if (typeof breakpoints === 'string') {\n if (introspect !== true) {\n console.error(\n '--breakpoints requires --introspect. Re-run with --introspect to enable pause points.',\n );\n process.exit(1);\n }\n\n const resolution = resolveBreakpointInput(breakpoints);\n if ('error' in resolution) {\n console.error(resolution.error);\n process.exit(1);\n }\n breakpointPlan = resolution;\n }\n\n runCommand(BuildCommand, {\n configPath: config,\n flags: {\n exitAfterUploading: async === true,\n shouldCodeSign: codeSign !== 'false',\n ignoreExtendsErrors: ignoreExtendsErrors === true,\n onBuildFinishedWebhook: webhook,\n introspect: introspect === true,\n breakpointPlan,\n },\n });\n },\n );\n\nprogram\n .command('builds')\n .description('View your builds')\n .argument('[id]', 'View a specific build by ID')\n .option('--latest', 'View the latest build')\n .addOption(configOption)\n .option('--count [number]', 'Number of builds to show per page', parseCount)\n .addOption(\n new Option('--format <type>', 'Format to output the build details in')\n .choices(['json', 'table'])\n .default('table'),\n )\n .option(\n '--exit',\n 'Disable dynamic pagination and exit the process once the build data ' +\n 'has been displayed',\n )\n .action((id, { config, count, exit, format, latest }) => {\n runCommand(BuildsCommand, {\n configPath: config,\n count,\n exit,\n format,\n id,\n shouldViewLatest: latest,\n });\n });\n\nprogram\n .command('logout')\n .description('Logs you out')\n .action(() => {\n runCommand(LogoutCommand, null, { exitIfOutOfDate: false });\n });\n\nprogram\n .command('release')\n .description('Release a build')\n .argument('[id]', 'A specific build ID to release')\n .option('--force', 'Skips interactive confirmation step')\n .option('--latest', 'Release the latest build')\n .addOption(configOption)\n .action((id, { config, force, latest }) => {\n runCommand(ReleaseCommand, {\n configPath: config,\n shouldConfirm: !force,\n buildId: latest ? 'latest' : id,\n });\n });\n\nprogram\n .command('smoke-test')\n .description('Check whether the build works and can be successfully updated')\n .argument('[id]', 'A specific build ID to test')\n .option('--latest', 'Release the latest build')\n .addOption(configOption)\n .action((id, { config, latest }) => {\n runCommand(SmokeTestCommand, {\n configPath: config,\n buildId: latest ? 'latest' : id,\n });\n });\n\nprogram\n .command('introspect [buildId]')\n .description('Connect to an ongoing build for interactive debugging')\n .option(\n '--platform <platform>',\n 'Platform to introspect (mac, windows, linux)',\n )\n .option('--latest', 'Connect to the latest build with introspection enabled')\n .option('--verbose', 'Show detailed connection information')\n .addOption(configOption)\n .action(\n (\n buildId?: string,\n options?: {\n platform?: string;\n latest?: boolean;\n verbose?: boolean;\n config?: string;\n },\n ) => {\n runCommand(IntrospectCommand, {\n buildId,\n platform: options?.platform,\n verbose: options?.verbose,\n latest: options?.latest,\n configPath: options?.config,\n });\n },\n )\n .command('whoami')\n .description(\"Prints the email of the account you're signed into\")\n .action(() => {\n runCommand(WhoamiCommand);\n });\n\nconst runCommand = <T extends FC<Props>, Props extends object>(\n component: T,\n props: Props | null = null,\n { exitIfOutOfDate = true } = {},\n) => {\n onCommand({ exitIfOutOfDate });\n\n const { waitUntilExit } = render(createElement(component, props));\n\n waitUntilExit().catch((error) => {\n console.error(error.stack);\n });\n};\n\n// Don't exist with status 1 if no command specified\nconst args = [...process.argv];\nif (args.length === 2) {\n args.push('help');\n}\n\nprogram.parse(args);\n", "// libs\nimport { Text } from 'ink';\nimport { useEffect, useState } from 'react';\n\n// components\nimport BreakpointNotice from '../../../components/BreakpointNotice';\nimport BreakpointPrompt from '../../../components/BreakpointPrompt';\nimport BuildProgress from '../../../components/BuildProgress';\nimport ErrorDisplay from '../../../components/ErrorDisplay';\nimport MainLayout from '../../../components/MainLayout';\nimport Preparation from './Preparation';\n\n// utils\nimport logForCI from '../../../utilities/logForCI';\nimport runBuild from '../utilities/runBuild';\nimport type { BuildFlags, BuildState } from '../utilities/types';\nimport useExit from '../../../utilities/useExit';\n\nexport default function Build({\n commandUsed,\n configPath,\n flags,\n}: {\n commandUsed: string;\n configPath?: string;\n flags: BuildFlags;\n}) {\n const exit = useExit();\n const [state, setState] = useState<BuildState>({ state: 'initializing' });\n\n useEffect(() => {\n runBuild({ configPath, flags, updateState }).catch((e) => {\n const error = e.response ? e.response.data : e;\n logForCI(error);\n updateState({ state: 'error', error });\n });\n\n return () => state.onUnmount?.();\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n function updateState(changes: Partial<BuildState>) {\n setState(\n (previousState) => ({ ...previousState, ...changes }) as BuildState,\n );\n\n if (changes.state === 'exit-after-uploading') {\n setTimeout(() => exit(), 10);\n }\n\n if (changes.state === 'build-failed') {\n setTimeout(() => exit(new Error('Build has failed')), 10);\n }\n }\n\n switch (state.state) {\n case 'build-failed':\n case 'building': {\n if (!state.build) {\n return (\n <ErrorDisplay commandUsed={commandUsed} error=\"No build is set\" />\n );\n }\n\n return (\n <MainLayout\n appName={state.build.appName || state.appPkg?.name || ''}\n appVersion={state.build.appVersion || state.appPkg?.version || ''}\n build={state.build}\n commandUsed={commandUsed}\n hasBuildEverFailed={state.state === 'build-failed'}\n >\n <BreakpointNotice plan={state.breakpointPlan} />\n <BreakpointPrompt appId={state.appId} build={state.build} />\n <BuildProgress build={state.build} onBuildFailure={() => {}} />\n </MainLayout>\n );\n }\n\n case 'error':\n return <ErrorDisplay commandUsed={commandUsed} error={state.error} />;\n\n case 'exit-after-uploading':\n return (\n <Text>\n App is building on ToDesktop. Exit since the --async flag is passed.\n </Text>\n );\n\n case 'initializing':\n return <Text>Getting app info...</Text>;\n\n case 'preparing':\n return (\n <MainLayout\n appName={state.build?.appName || state.appPkg?.name || ''}\n appVersion={state.build?.appVersion || state.appPkg?.version || ''}\n build={state.build}\n commandUsed={commandUsed}\n hasBuildEverFailed={false}\n >\n <BreakpointNotice plan={state.breakpointPlan} />\n <Preparation\n progressPercentage={state.preparationProgress || 0}\n stageLabel={state.preparationStageLabel || 'Preparing'}\n uploadedSize={state.preparationUploadedSize}\n />\n </MainLayout>\n );\n\n default:\n return (\n <ErrorDisplay\n commandUsed={commandUsed}\n error={new Error(`Unknown state ${(state as BuildState).state}`)}\n />\n );\n }\n}\n", "import { Box, Text } from 'ink';\nimport { BreakpointPlan } from '../commands/build/utilities/types';\nimport { formatResolvedQueueMessage } from '../commands/build/utilities/breakpoints';\n\nexport interface BreakpointNoticeProps {\n plan?: BreakpointPlan;\n}\n\nexport default function BreakpointNotice({ plan }: BreakpointNoticeProps) {\n if (!plan) {\n return null;\n }\n\n const lines = formatResolvedQueueMessage(\n plan.breakpoints,\n plan.warnings,\n plan.expansions,\n );\n\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n {lines.map((line) => (\n <Text key={line}>{line}</Text>\n ))}\n </Box>\n );\n}\n", "import { BreakpointConfig, HookBreakpointName } from '@todesktop/shared';\n\nexport interface BreakpointDefinition {\n config: BreakpointConfig;\n value: string;\n label: string;\n description: string;\n aliases?: string[];\n}\n\nexport interface BreakpointParseResult {\n breakpoints: BreakpointConfig[];\n errors: string[];\n warnings: string[];\n expansions: Array<{ input: string; outputs: BreakpointConfig[] }>;\n}\n\nconst phaseBreakpointDefinitions: BreakpointDefinition[] = [\n {\n config: { type: 'phase', id: 'afterSourcePrep' },\n value: 'afterSourcePrep',\n label: 'After Source Prep',\n description:\n 'Pause once sources are unpacked, hooks ran, and postProcessApplicationSource completed.',\n },\n {\n config: { type: 'phase', id: 'beforeInstall' },\n value: 'beforeInstall',\n label: 'Before Install',\n description: 'Pause immediately before dependency installation begins.',\n },\n {\n config: { type: 'phase', id: 'afterInstall' },\n value: 'afterInstall',\n label: 'After Install',\n description:\n 'Pause after dependencies and plugins install and before resource writes.',\n },\n {\n config: { type: 'phase', id: 'beforePack' },\n value: 'beforePack',\n label: 'Before Pack',\n description:\n 'Pause after Electron Builder configuration is ready but before Packager.build() executes.',\n },\n {\n config: { type: 'phase', id: 'afterPack' },\n value: 'afterPack',\n label: 'After Pack',\n description: 'Pause once packaging completes and artifacts exist locally.',\n },\n {\n config: { type: 'phase', id: 'beforeUpload' },\n value: 'beforeUpload',\n label: 'Before Upload',\n description:\n 'Pause when manifests and metadata are generated before uploads start.',\n },\n {\n config: { type: 'phase', id: 'afterUpload' },\n value: 'afterUpload',\n label: 'After Upload',\n description:\n 'Pause after uploads finish but before CDN invalidation or bookkeeping.',\n },\n {\n config: { type: 'phase', id: 'beforeFinalize' },\n value: 'beforeFinalize',\n label: 'Before Finalize',\n description:\n 'Pause prior to sendBuildEvent.done() and cleanup completing the build.',\n },\n];\n\nconst hookBreakpointDefinitions: BreakpointDefinition[] = [\n {\n config: {\n type: 'hook',\n id: 'todesktop:beforeInstall',\n position: 'before',\n },\n value: 'hook:todesktop:beforeInstall:before',\n label: 'Before todesktop:beforeInstall',\n description: 'Pause just before the todesktop:beforeInstall hook runs.',\n aliases: ['todesktop:beforeInstall.before'],\n },\n {\n config: {\n type: 'hook',\n id: 'todesktop:beforeInstall',\n position: 'after',\n },\n value: 'hook:todesktop:beforeInstall:after',\n label: 'After todesktop:beforeInstall',\n description: 'Pause immediately after the todesktop:beforeInstall hook.',\n aliases: ['todesktop:beforeInstall.after'],\n },\n {\n config: {\n type: 'hook',\n id: 'todesktop:beforeBuild',\n position: 'before',\n },\n value: 'hook:todesktop:beforeBuild:before',\n label: 'Before todesktop:beforeBuild',\n description: 'Pause before the todesktop:beforeBuild hook executes.',\n aliases: ['todesktop:beforeBuild.before'],\n },\n {\n config: {\n type: 'hook',\n id: 'todesktop:beforeBuild',\n position: 'after',\n },\n value: 'hook:todesktop:beforeBuild:after',\n label: 'After todesktop:beforeBuild',\n description: 'Pause after the todesktop:beforeBuild hook.',\n aliases: ['todesktop:beforeBuild.after'],\n },\n {\n config: {\n type: 'hook',\n id: 'todesktop:afterPack',\n position: 'before',\n },\n value: 'hook:todesktop:afterPack:before',\n label: 'Before todesktop:afterPack',\n description: 'Pause prior to the todesktop:afterPack hook.',\n aliases: ['todesktop:afterPack.before'],\n },\n {\n config: {\n type: 'hook',\n id: 'todesktop:afterPack',\n position: 'after',\n },\n value: 'hook:todesktop:afterPack:after',\n label: 'After todesktop:afterPack',\n description: 'Pause after the todesktop:afterPack hook completes.',\n aliases: ['todesktop:afterPack.after'],\n },\n];\n\nconst breakpointDefinitions: BreakpointDefinition[] = [\n ...phaseBreakpointDefinitions,\n ...hookBreakpointDefinitions,\n];\n\nconst hookNames: HookBreakpointName[] = [\n 'todesktop:beforeInstall',\n 'todesktop:beforeBuild',\n 'todesktop:afterPack',\n];\n\nconst aliasMap: Record<string, BreakpointDefinition[]> = (() => {\n const map: Record<string, BreakpointDefinition[]> = {};\n for (const definition of breakpointDefinitions) {\n const aliases = new Set<string>([\n definition.value,\n ...(definition.aliases || []),\n ]);\n\n if (definition.config.type === 'hook') {\n const hookAlias = `${definition.config.id}:${definition.config.position}`;\n aliases.add(hookAlias);\n }\n\n for (const alias of aliases) {\n if (!map[alias]) {\n map[alias] = [];\n }\n map[alias].push(definition);\n }\n }\n\n return map;\n})();\n\nconst allSuggestionTokens = Array.from(\n new Set([\n ...Object.keys(aliasMap),\n 'hook:todesktop:beforeInstall:*',\n 'hook:todesktop:beforeBuild:*',\n 'hook:todesktop:afterPack:*',\n ]),\n);\n\nfunction canonicalKey(config: BreakpointConfig): string {\n if (config.type === 'phase') {\n return `phase:${config.id}`;\n }\n\n return `hook:${config.id}:${config.position}`;\n}\n\nfunction levenshtein(a: string, b: string): number {\n if (a === b) {\n return 0;\n }\n if (!a.length) {\n return b.length;\n }\n if (!b.length) {\n return a.length;\n }\n\n const matrix = Array.from({ length: a.length + 1 }, () =>\n Array(b.length + 1).fill(0),\n );\n\n for (let i = 0; i <= a.length; i += 1) {\n matrix[i][0] = i;\n }\n for (let j = 0; j <= b.length; j += 1) {\n matrix[0][j] = j;\n }\n\n for (let i = 1; i <= a.length; i += 1) {\n for (let j = 1; j <= b.length; j += 1) {\n const cost = a[i - 1] === b[j - 1] ? 0 : 1;\n matrix[i][j] = Math.min(\n matrix[i - 1][j] + 1,\n matrix[i][j - 1] + 1,\n matrix[i - 1][j - 1] + cost,\n );\n }\n }\n\n return matrix[a.length][b.length];\n}\n\nfunction expandWildcardHook(\n hookName: HookBreakpointName,\n): BreakpointDefinition[] {\n return hookBreakpointDefinitions.filter(\n (definition) => definition.config.id === hookName,\n );\n}\n\nexport function parseBreakpointList(input: string): BreakpointParseResult {\n const tokens = input\n .split(',')\n .map((token) => token.trim())\n .filter(Boolean);\n\n const seen = new Set<string>();\n const breakpoints: BreakpointConfig[] = [];\n const errors: string[] = [];\n const warnings: string[] = [];\n const expansions: BreakpointParseResult['expansions'] = [];\n\n const pushDefinition = (definition: BreakpointDefinition, source: string) => {\n const key = canonicalKey(definition.config);\n if (seen.has(key)) {\n warnings.push(\n `Duplicate breakpoint \"${definition.value}\" ignored (from \"${source}\").`,\n );\n return;\n }\n seen.add(key);\n breakpoints.push(definition.config);\n };\n\n const suggest = (token: string): string | null => {\n let best: { token: string; distance: number } | null = null;\n for (const candidate of allSuggestionTokens) {\n const distance = levenshtein(token, candidate);\n if (!best || distance < best.distance) {\n best = { token: candidate, distance };\n }\n }\n if (best && best.distance <= Math.max(2, Math.floor(token.length / 2))) {\n return best.token;\n }\n return null;\n };\n\n for (const token of tokens) {\n if (token.startsWith('hook:') && token.endsWith(':*')) {\n const hookNameCandidate = token.slice(5, -2);\n if (!isHookBreakpointName(hookNameCandidate)) {\n const suggestion = suggest(token);\n errors.push(\n suggestion\n ? `Unknown breakpoint \"${token}\". Did you mean \"${suggestion}\"?`\n : `Unknown breakpoint \"${token}\".`,\n );\n continue;\n }\n const definitions = expandWildcardHook(hookNameCandidate);\n\n expansions.push({\n input: token,\n outputs: definitions.map((definition) => definition.config),\n });\n\n for (const definition of definitions) {\n pushDefinition(definition, token);\n }\n continue;\n }\n\n if (token.endsWith('.*')) {\n const hookNameCandidate = token.substring(0, token.length - 2);\n if (isHookBreakpointName(hookNameCandidate)) {\n const definitions = expandWildcardHook(hookNameCandidate);\n expansions.push({\n input: token,\n outputs: definitions.map((definition) => definition.config),\n });\n for (const definition of definitions) {\n pushDefinition(definition, token);\n }\n continue;\n }\n }\n\n const definitions = aliasMap[token];\n if (!definitions || definitions.length === 0) {\n const suggestion = suggest(token);\n errors.push(\n suggestion\n ? `Unknown breakpoint \"${token}\". Did you mean \"${suggestion}\"?`\n : `Unknown breakpoint \"${token}\".`,\n );\n continue;\n }\n\n if (definitions.length > 1) {\n expansions.push({\n input: token,\n outputs: definitions.map((definition) => definition.config),\n });\n }\n\n for (const definition of definitions) {\n pushDefinition(definition, token);\n }\n }\n\n return { breakpoints, errors, warnings, expansions };\n}\n\nexport function listBreakpointDefinitions(): BreakpointDefinition[] {\n return breakpointDefinitions.slice();\n}\n\nexport function formatBreakpoint(config: BreakpointConfig): string {\n if (config.type === 'phase') {\n return config.id;\n }\n return `hook:${config.id}:${config.position}`;\n}\n\nfunction isHookBreakpointName(value: string): value is HookBreakpointName {\n return (hookNames as string[]).includes(value);\n}\n", "import { BreakpointConfig } from '@todesktop/shared';\nimport {\n formatBreakpoint,\n listBreakpointDefinitions,\n parseBreakpointList,\n} from '../../../utilities/introspectionBreakpoints';\n\nexport interface BreakpointResolution {\n breakpoints: BreakpointConfig[];\n warnings: string[];\n expansions: Array<{ input: string; outputs: BreakpointConfig[] }>;\n}\n\nexport function resolveBreakpointInput(\n input: string,\n): BreakpointResolution | { error: string } {\n const result = parseBreakpointList(input);\n\n if (result.errors.length > 0) {\n return { error: result.errors.join('\\n') };\n }\n\n return {\n breakpoints: result.breakpoints,\n warnings: result.warnings,\n expansions: result.expansions,\n };\n}\n\nexport function formatBreakpointCatalog(): string {\n const definitions = listBreakpointDefinitions();\n const lines: string[] = [];\n lines.push('Supported breakpoints:');\n for (const definition of definitions) {\n lines.push(\n ` - ${definition.value} \u2014 ${definition.description} (${\n definition.config.type === 'phase'\n ? 'phase'\n : `${definition.config.id} ${definition.config.position}`\n })`,\n );\n }\n return lines.join('\\n');\n}\n\nexport function formatResolvedQueueMessage(\n breakpoints: BreakpointConfig[],\n warnings: string[],\n expansions: Array<{ input: string; outputs: BreakpointConfig[] }>,\n): string[] {\n const lines: string[] = [];\n\n if (!breakpoints.length) {\n lines.push(\n 'Breakpoints were requested but no valid entries were provided. Build will continue without pause points.',\n );\n return lines;\n }\n\n lines.push(`Breakpoints enabled:`);\n breakpoints.forEach((breakpoint, index) => {\n lines.push(` ${index + 1}. ${formatBreakpoint(breakpoint)}`);\n });\n\n if (expansions.length) {\n lines.push('');\n for (const expansion of expansions) {\n lines.push(\n ` \u2139 \"${expansion.input}\" expands to ${expansion.outputs\n .map((bp) => formatBreakpoint(bp))\n .join(', ')}`,\n );\n }\n }\n\n if (warnings.length) {\n lines.push('');\n lines.push(...warnings.map((warning) => ` ! ${warning}`));\n }\n\n return lines;\n}\n", "import { Box, Text } from 'ink';\nimport { useEffect, useMemo, useState } from 'react';\nimport {\n BREAKPOINT_MAX_REMAINING_MS,\n BreakpointConfig,\n BreakpointPauseLease,\n BreakpointRenewal,\n CurrentBreakpointState,\n HookBreakpointName,\n HookBreakpointPosition,\n IntrospectPlatformData,\n PhaseBreakpointId,\n PlatformName,\n} from '@todesktop/shared';\nimport { formatBreakpoint } from '../utilities/introspectionBreakpoints';\nimport { Build } from '../types';\nimport useInput from '../utilities/useInput';\nimport getCallableFirebaseFunction from '../utilities/getCallableFirebaseFunction';\nimport { currentUser } from '../utilities/firestore';\nimport { formatIntrospectionStatus } from '../utilities/introspectionStatus';\n\ninterface BreakpointPromptProps {\n appId?: string;\n build: Build;\n}\n\nfunction formatRemaining(remainingMs: number): string {\n if (Number.isNaN(remainingMs)) {\n return 'unknown';\n }\n\n if (remainingMs <= 0) {\n return 'expired';\n }\n\n const totalSeconds = Math.floor(remainingMs / 1000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n if (minutes <= 0) {\n return `${seconds}s`;\n }\n return `${minutes}m ${seconds.toString().padStart(2, '0')}s`;\n}\n\nfunction describeLeaseOwner(lease?: BreakpointPauseLease): string {\n if (!lease) {\n return 'Unknown';\n }\n return lease.createdByUserId;\n}\n\nfunction describeRenewals(renewals?: BreakpointRenewal[]): string {\n if (!renewals || renewals.length === 0) {\n return 'none';\n }\n return `${renewals.length}`;\n}\n\nexport default function BreakpointPrompt({\n appId,\n build,\n}: BreakpointPromptProps) {\n const [now, setNow] = useState(() => Date.now());\n const [error, setError] = useState<string | null>(null);\n const [inFlight, setInFlight] = useState<null | {\n platform: PlatformName;\n action: 'resume' | 'renew' | 'skip';\n }>(null);\n\n useEffect(() => {\n const timer = setInterval(() => setNow(Date.now()), 1000);\n return () => clearInterval(timer);\n }, []);\n\n const primary = useMemo<{\n platform: PlatformName;\n data: IntrospectPlatformData;\n } | null>(() => {\n const { introspect } = build;\n if (!introspect) return null;\n\n const pausedEntry = (\n Object.entries(introspect) as [PlatformName, IntrospectPlatformData][]\n ).find(([, data]) => data?.breakpointStatus === 'paused');\n\n if (!pausedEntry) {\n return null;\n }\n\n const [platform, data] = pausedEntry;\n return { platform, data };\n }, [build.introspect]);\n\n const isActive = Boolean(primary && !inFlight);\n\n useInput(\n async (input, key) => {\n if (!primary || !appId || inFlight) {\n return;\n }\n\n const lower = input.toLowerCase();\n const { platform } = primary;\n const actionLabel = (type: (typeof inFlight)['action']) =>\n `${type} (${platform})`;\n\n async function invoke(action: 'resume' | 'renew' | 'skip') {\n setError(null);\n setInFlight({ platform, action });\n try {\n const user = currentUser();\n if (!user) {\n throw new Error('Not authenticated. Please run: todesktop login');\n }\n\n const idToken = await user.getIdToken(true);\n const actionMap: Record<\n typeof action,\n | 'resumeBuildBreakpoint'\n | 'renewBuildBreakpoint'\n | 'skipBuildBreakpoints'\n > = {\n resume: 'resumeBuildBreakpoint',\n renew: 'renewBuildBreakpoint',\n skip: 'skipBuildBreakpoints',\n };\n const functionName = actionMap[action];\n if (!functionName) {\n throw new Error(`Unknown breakpoint action: ${action}`);\n }\n\n const callFunction = getCallableFirebaseFunction(functionName);\n\n await callFunction({\n appId,\n buildId: build.id,\n platform,\n idToken,\n });\n } catch (err) {\n const message =\n err instanceof Error ? err.message : JSON.stringify(err);\n setError(`${actionLabel(action)} failed: ${message}`);\n } finally {\n setInFlight(null);\n }\n }\n\n if (key.return) {\n await invoke('resume');\n } else if (lower === 'x') {\n await invoke('skip');\n } else if (!key.ctrl && !key.meta && lower === ' ') {\n if (!canRenew) {\n return;\n }\n await invoke('renew');\n }\n },\n { isActive },\n );\n\n if (!primary) {\n return null;\n }\n\n const { platform, data } = primary;\n const breakpoint = data.currentBreakpoint;\n if (!breakpoint) {\n return null;\n }\n const { breakpointStatus } = data;\n const { shellStatus } = data;\n\n const expiresAtMs = toDateSafe(breakpoint.expiresAt)?.getTime() ?? NaN;\n const remainingMs = expiresAtMs - now;\n const canRenew = remainingMs < BREAKPOINT_MAX_REMAINING_MS;\n\n const formattedBreakpoint = formatBreakpoint(toBreakpointConfig(breakpoint));\n\n const renewalsDescription = describeRenewals(breakpoint.renewals);\n\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text color=\"yellow\">\n {platform} {formatIntrospectionStatus(breakpointStatus, shellStatus)} at{' '}\n {formattedBreakpoint} (lease expires in {formatRemaining(remainingMs)}).\n </Text>\n <Text color=\"gray\">\n Lease owner: {describeLeaseOwner(data.pauseLease)} \u00B7 renewals:{' '}\n {renewalsDescription}\n </Text>\n <Text>\n Press <Text bold>Enter</Text> to continue, <Text bold>x</Text> to skip\n remaining breakpoints, <Text bold>space</Text> to renew lease\n {canRenew ? '' : ' (limit reached)'}, <Text bold>Ctrl+C</Text> to\n detach.\n </Text>\n {inFlight ? (\n <Text color=\"cyan\">\n {inFlight.action === 'renew'\n ? 'Renewing lease'\n : inFlight.action === 'skip'\n ? 'Skipping remaining breakpoints'\n : 'Resuming build'}\n \u2026\n </Text>\n ) : null}\n {error ? <Text color=\"red\">{error}</Text> : null}\n </Box>\n );\n}\n\nfunction toDateSafe(value: unknown): Date | null {\n try {\n return toDate(value);\n } catch {\n return null;\n }\n}\n\nfunction toBreakpointConfig(state: CurrentBreakpointState): BreakpointConfig {\n if (state.type === 'hook') {\n return {\n type: 'hook',\n id: state.id as HookBreakpointName,\n position: (state.position ?? 'before') as HookBreakpointPosition,\n };\n }\n\n return {\n type: 'phase',\n id: state.id as PhaseBreakpointId,\n };\n}\n\nfunction toDate(value: unknown): Date {\n if (!value) {\n throw new Error('Missing timestamp value');\n }\n\n if (value instanceof Date) {\n return value;\n }\n\n if (typeof value === 'string') {\n return new Date(value);\n }\n\n if (\n typeof value === 'object' &&\n (value as { toDate?: () => Date }).toDate instanceof Function\n ) {\n return (value as { toDate: () => Date }).toDate();\n }\n\n throw new Error('Unsupported timestamp value');\n}\n", "{\n \"name\": \"@todesktop/shared\",\n \"version\": \"7.193.0\",\n \"description\": \"\",\n \"main\": \"./lib/cjs/index.js\",\n \"module\": \"./lib/esm/index.js\",\n \"types\": \"./lib/esm/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./lib/esm/index.d.ts\",\n \"default\": \"./lib/esm/index.js\"\n },\n \"require\": {\n \"types\": \"./lib/cjs/index.d.ts\",\n \"default\": \"./lib/cjs/index.js\"\n }\n }\n },\n \"scripts\": {\n \"build\": \"rm -rf ./lib && pnpm run build:cjs && pnpm run build:esm && pnpm run build:rename-cjs-index\",\n \"build:cjs\": \"tsc -p tsconfig.json\",\n \"build:esm\": \"tsc -p tsconfig.esm.json\",\n \"build:rename-cjs-index\": \"mv ./lib/cjs/index.cjs.js ./lib/cjs/index.js && mv ./lib/cjs/index.cjs.d.ts ./lib/cjs/index.d.ts\",\n \"bump\": \"npm version minor && git push && npm publish\",\n \"dev\": \"tsc\",\n \"format\": \"prettier . --write && eslint --fix\",\n \"lint\": \"prettier . --check && eslint\",\n \"prepublishOnly\": \"npm run build\",\n \"test\": \"vitest run\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"author\": \"Dave Jeffery <dave@davejeffery.com>\",\n \"license\": \"UNLICENSED\",\n \"dependencies\": {\n \"@todesktop/client-electron-types\": \"^28.0.0\",\n \"@types/debug\": \"^4.1.1\",\n \"@types/node\": \"^16.4.12\",\n \"is-regex\": \"^1.0.4\",\n \"semver\": \"^7.3.5\",\n \"yup\": \"^1.4.0\"\n },\n \"devDependencies\": {\n \"@todesktop/dev-config\": \"workspace:*\",\n \"@types/semver\": \"^7.3.9\",\n \"app-builder-lib\": \"^25.1.8\",\n \"eslint\": \"catalog:\",\n \"prettier\": \"catalog:\",\n \"typescript\": \"catalog:\",\n \"vitest\": \"^1.6.1\"\n }\n}\n", "export var WindowsEVOnboardingSteps;\n(function (WindowsEVOnboardingSteps) {\n WindowsEVOnboardingSteps[\"hasBeenVerified\"] = \"hasBeenVerified\";\n WindowsEVOnboardingSteps[\"hasChosenProvider\"] = \"hasChosenProvider\";\n WindowsEVOnboardingSteps[\"hasGeneratedCert\"] = \"hasGeneratedCert\";\n WindowsEVOnboardingSteps[\"hasOrderedCert\"] = \"hasOrderedCert\";\n WindowsEVOnboardingSteps[\"hasUploadedCert\"] = \"hasUploadedCert\";\n})(WindowsEVOnboardingSteps || (WindowsEVOnboardingSteps = {}));\nexport var WindowsEVOnboardingProvider;\n(function (WindowsEVOnboardingProvider) {\n WindowsEVOnboardingProvider[\"globalsign\"] = \"globalsign\";\n WindowsEVOnboardingProvider[\"other\"] = \"other\";\n})(WindowsEVOnboardingProvider || (WindowsEVOnboardingProvider = {}));\nexport var WindowsHSMCertType;\n(function (WindowsHSMCertType) {\n WindowsHSMCertType[\"azureTrustedSigning\"] = \"azureTrustedSigning\";\n WindowsHSMCertType[\"ev\"] = \"ev\";\n WindowsHSMCertType[\"file\"] = \"file\";\n})(WindowsHSMCertType || (WindowsHSMCertType = {}));\n", "export var PlatformName;\n(function (PlatformName) {\n PlatformName[\"linux\"] = \"linux\";\n PlatformName[\"mac\"] = \"mac\";\n PlatformName[\"windows\"] = \"windows\";\n})(PlatformName || (PlatformName = {}));\nexport var PackageManager;\n(function (PackageManager) {\n PackageManager[\"npm\"] = \"npm\";\n PackageManager[\"pnpm\"] = \"pnpm\";\n PackageManager[\"yarn\"] = \"yarn\";\n})(PackageManager || (PackageManager = {}));\nexport var BuildStatus;\n(function (BuildStatus) {\n BuildStatus[\"building\"] = \"building\";\n BuildStatus[\"cancelled\"] = \"cancelled\";\n BuildStatus[\"failed\"] = \"failed\";\n BuildStatus[\"preparation\"] = \"preparation\";\n BuildStatus[\"queued\"] = \"queued\";\n BuildStatus[\"succeeded\"] = \"succeeded\";\n})(BuildStatus || (BuildStatus = {}));\nexport var AnalysisStatus;\n(function (AnalysisStatus) {\n AnalysisStatus[\"analyzing\"] = \"analyzing\";\n AnalysisStatus[\"done\"] = \"done\";\n AnalysisStatus[\"downloading\"] = \"downloading\";\n AnalysisStatus[\"error\"] = \"error\";\n AnalysisStatus[\"extracting\"] = \"extracting\";\n AnalysisStatus[\"initializing\"] = \"initializing\";\n AnalysisStatus[\"notStarted\"] = \"notStarted\";\n})(AnalysisStatus || (AnalysisStatus = {}));\nexport var ManifestCategory;\n(function (ManifestCategory) {\n ManifestCategory[\"buildStamped\"] = \"build-stamped\";\n ManifestCategory[\"primary\"] = \"primary\";\n ManifestCategory[\"versioned\"] = \"versioned\";\n})(ManifestCategory || (ManifestCategory = {}));\nexport const hasBuildKickedOff = (build) => {\n if (!build) {\n return false;\n }\n return build.status && build.status !== BuildStatus.preparation;\n};\nexport const isPlatformBuildRunning = (platformBuild) => {\n if (!platformBuild) {\n return false;\n }\n return (!platformBuild.shouldSkip && // <-- Noteworthy\n !['cancelled', 'succeeded'].includes(platformBuild.status) &&\n (platformBuild.status !== 'failed' ||\n platformBuild.numberOfAttemptedBuilds < 2));\n};\n// NOTE: this relies on Firestore solely\nexport const isCiBuildRunning = (build) => {\n if (!build) {\n return false;\n }\n return (build.status === 'building' ||\n (build.status === 'failed' &&\n ['linux', 'mac', 'windows'].some((platform) => build.status === 'building' ||\n (build.status === 'failed' &&\n isPlatformBuildRunning(build[platform])))));\n};\nexport const isBuildRunning = (build) => {\n if (!build) {\n return false;\n }\n return (!['cancelled', 'succeeded'].includes(build.status) &&\n ['linux', 'mac', 'windows'].some((platform) => isPlatformBuildRunning(build[platform])));\n};\nexport const isBuildCancellable = (build) => hasBuildKickedOff(build) && isBuildRunning(build);\n", "const MINUTE = 60 * 1000;\nexport const BREAKPOINT_DEFAULT_LEASE_MS = 20 * MINUTE; // 20 minutes\nexport const BREAKPOINT_RENEW_INCREMENT_MS = 10 * MINUTE; // 10 minutes\nexport const BREAKPOINT_MAX_REMAINING_MS = 20 * MINUTE; // 20 minutes\nexport function isSameBreakpoint(a, b) {\n if (!a || !b) {\n return false;\n }\n if (a.type !== b.type) {\n return false;\n }\n if (a.id !== b.id) {\n return false;\n }\n if (isHookBreakpointConfig(a) && isHookBreakpointConfig(b)) {\n return a.position === b.position;\n }\n return true;\n}\nfunction isHookBreakpointConfig(config) {\n return config.type === 'hook';\n}\nexport function cloneBreakpointQueue(queue) {\n return Array.isArray(queue) ? queue.map((entry) => (Object.assign({}, entry))) : [];\n}\nexport function markQueueSkipped(queue, startIndex, options = {}) {\n var _a;\n const updated = cloneBreakpointQueue(queue);\n const { fallbackHitAt } = options;\n if (startIndex < 0 || startIndex >= updated.length) {\n return updated;\n }\n const current = updated[startIndex];\n const hitAt = (_a = current.hitAt) !== null && _a !== void 0 ? _a : fallbackHitAt;\n updated[startIndex] = Object.assign(Object.assign(Object.assign({}, current), { skipped: true }), (hitAt ? { hitAt } : {}));\n for (let i = startIndex + 1; i < updated.length; i += 1) {\n if (!updated[i].hitAt) {\n updated[i] = Object.assign(Object.assign({}, updated[i]), { skipped: true });\n }\n }\n return updated;\n}\n", "const PLATFORM_LABELS = {\n mac: 'Mac',\n windows: 'Windows',\n linux: 'Linux',\n};\n/**\n * Check if a build was introspected (has connectedAt or disconnectedAt on any platform).\n * Builds that were introspected cannot be released.\n */\nexport function wasIntrospected(build) {\n const introspect = build.introspect;\n if (!introspect)\n return false;\n const platforms = ['mac', 'windows', 'linux'];\n for (const platform of platforms) {\n const data = introspect[platform];\n if ((data === null || data === void 0 ? void 0 : data.connectedAt) || (data === null || data === void 0 ? void 0 : data.disconnectedAt)) {\n return true;\n }\n }\n return false;\n}\n/**\n * Get list of platform names that were introspected (have connectedAt or disconnectedAt).\n * Returns capitalized platform names (e.g., ['Mac', 'Windows']).\n */\nexport function getIntrospectedPlatformNames(build) {\n const introspect = build.introspect;\n if (!introspect)\n return [];\n const platforms = ['mac', 'windows', 'linux'];\n const result = [];\n for (const platform of platforms) {\n const data = introspect[platform];\n if ((data === null || data === void 0 ? void 0 : data.connectedAt) || (data === null || data === void 0 ? void 0 : data.disconnectedAt)) {\n result.push(PLATFORM_LABELS[platform]);\n }\n }\n return result;\n}\n/**\n * Format introspection status as a human-readable string.\n * Combines breakpoint status and shell status into a single label.\n */\nexport function formatIntrospectionStatus(breakpointStatus, shellStatus) {\n if (breakpointStatus === 'paused') {\n if (shellStatus === 'connected') {\n return 'paused (shell connected)';\n }\n if (shellStatus === 'disconnected') {\n return 'paused (shell disconnected)';\n }\n return 'paused';\n }\n if (breakpointStatus === 'ready') {\n if (shellStatus === 'connected') {\n return 'ready (shell connected)';\n }\n if (shellStatus === 'disconnected') {\n return 'ready (shell disconnected)';\n }\n return 'ready';\n }\n if (breakpointStatus === 'resuming') {\n return 'resuming';\n }\n if (breakpointStatus === 'initializing') {\n return 'initializing';\n }\n if (breakpointStatus === 'finished') {\n return 'finished';\n }\n if (breakpointStatus === 'error' || shellStatus === 'error') {\n return 'error';\n }\n return 'status unknown';\n}\n", "export var PortalConfigKey;\n(function (PortalConfigKey) {\n PortalConfigKey[\"BuilderUpdateDev\"] = \"builder_update_dev\";\n PortalConfigKey[\"BuilderUpdateProd\"] = \"builder_update_prod\";\n PortalConfigKey[\"BuilderUpgradeDev\"] = \"builder_upgrade_dev\";\n PortalConfigKey[\"BuilderUpgradeProd\"] = \"builder_upgrade_prod\";\n PortalConfigKey[\"CLIUpdateDev\"] = \"cli_update_dev\";\n PortalConfigKey[\"CLIUpdateProd\"] = \"cli_update_prod\";\n PortalConfigKey[\"CLIUpgradeDev\"] = \"cli_upgrade_dev\";\n PortalConfigKey[\"CLIUpgradeProd\"] = \"cli_upgrade_prod\";\n})(PortalConfigKey || (PortalConfigKey = {}));\n// --- factory functions ---\nconst createPrice = (id, price) => {\n return Object.assign({ id }, price);\n};\nconst createProduct = (id, prices) => ({ id, prices });\nconst createPlan = (tier, products) => {\n const record = {\n basic: { label: 'Basic', tiers: ['basic', 'legacy_pro', 'pro', 'scale'] },\n legacy_pro: { label: 'Pro', tiers: ['legacy_pro', 'pro', 'scale'] },\n pro: { label: 'Pro', tiers: ['pro', 'scale'] },\n scale: { label: 'Scale', tiers: ['scale'] },\n };\n const { label, tiers } = record[tier];\n return {\n eligiblePlanTiers: tiers,\n label,\n products: { dev: products.dev, prod: products.prod },\n tier,\n };\n};\nconst PORTAL_VERSION = 1; // increment this value to force Stripe to update the portal configurations\nconst createPortalConfig = (key, products) => {\n return {\n business_profile: {\n headline: 'ToDesktop Billing Portal',\n privacy_policy_url: 'https://www.todesktop.com/privacy-policy',\n terms_of_service_url: 'https://www.todesktop.com/terms',\n },\n default_return_url: 'https://app.todesktop.com',\n features: {\n payment_method_update: { enabled: true },\n subscription_update: {\n default_allowed_updates: ['price'],\n enabled: true,\n products: products.map((product) => {\n return {\n prices: Object.values(product.prices)\n .filter((price) => price.status === 'active')\n .map((price) => price.id),\n product: product.id,\n };\n }),\n },\n },\n metadata: { key, version: PORTAL_VERSION },\n };\n};\n// --- products ---\nexport const products = {\n dev: {\n builder: {\n essential: createProduct('prod_MoR1S4o0nLv00y', {\n monthly_125: createPrice('price_1PuuAqIewCKA2h0Iw4judQNj', {\n amount: 125,\n period: 'monthly',\n status: 'active',\n }),\n monthly_99: createPrice('price_1M4o9XIewCKA2h0IVfGrid8E', {\n amount: 99,\n period: 'monthly',\n status: 'inactive',\n }),\n yearly_1200: createPrice('price_1PuvdgIewCKA2h0IisTKqjFN', {\n amount: 1200,\n period: 'yearly',\n status: 'active',\n }),\n }),\n professional: createProduct('prod_MoR1SchsRDAIgY', {\n monthly_199: createPrice('price_1M4o9vIewCKA2h0IHREokdD8', {\n amount: 199,\n period: 'monthly',\n status: 'inactive',\n }),\n monthly_240: createPrice('price_1M4o9vIewCKA2h0IHREokdD8', {\n amount: 240,\n period: 'monthly',\n status: 'inactive',\n }),\n monthly_300: createPrice('price_1PuuHrIewCKA2h0IQfEZ4Wog', {\n amount: 300,\n period: 'monthly',\n status: 'active',\n }),\n yearly_2880: createPrice('price_1PuuJAIewCKA2h0IibpUIhf9', {\n amount: 2880,\n period: 'yearly',\n status: 'active',\n }),\n }),\n },\n cli: {\n founder: createProduct('prod_Gq0E8nbTYHtkPl', {\n monthly_100: createPrice('plan_Gq0FzdmoTJshQL', {\n amount: 100,\n period: 'monthly',\n status: 'inactive',\n }),\n monthly_125: createPrice('price_1PuuMRIewCKA2h0IrggfwCwA', {\n amount: 125,\n period: 'monthly',\n status: 'active',\n }),\n yearly_1200: createPrice('price_1PuuMkIewCKA2h0IRxhkDpmk', {\n amount: 1200,\n period: 'yearly',\n status: 'active',\n }),\n }),\n founder30: createProduct('prod_GsL6LaRo4NFD5n', {\n monthly_30: createPrice('plan_GsL7NZskOY0TC9', {\n amount: 30,\n period: 'monthly',\n status: 'active',\n }),\n }),\n founder50: createProduct('prod_GsL5O1PdbxOrxJ', {\n monthly_50: createPrice('plan_GsL6VYAshfh7c4', {\n amount: 50,\n period: 'monthly',\n status: 'active',\n }),\n monthly_90: createPrice('plan_GsL6VYAshfh7c4', {\n amount: 90,\n period: 'monthly',\n status: 'inactive',\n }),\n }),\n performance: createProduct('prod_LphQku6BNkzCga', {\n monthly_300: createPrice('price_1L821UIewCKA2h0IUwRhicyo', {\n amount: 300,\n period: 'monthly',\n status: 'inactive',\n }),\n monthly_375: createPrice('price_1PuuO7IewCKA2h0IOK9ivzS0', {\n amount: 375,\n period: 'monthly',\n status: 'active',\n }),\n yearly_3600: createPrice('price_1PuuOKIewCKA2h0IrcVvJkgG', {\n amount: 3600,\n period: 'yearly',\n status: 'active',\n }),\n }),\n scale: createProduct('prod_LphQxNgfUIxVfA', {\n monthly_1200: createPrice('price_1L821wIewCKA2h0IMLUmjulL', {\n amount: 1200,\n period: 'monthly',\n status: 'inactive',\n }),\n monthly_1500: createPrice('price_1PuuPFIewCKA2h0IbPmKdsJr', {\n amount: 1500,\n period: 'monthly',\n status: 'active',\n }),\n yearly_14400: createPrice('price_1PuuPaIewCKA2h0IhLfSlRFj', {\n amount: 14400,\n period: 'yearly',\n status: 'active',\n }),\n }),\n },\n legacy: {\n business: createProduct('prod_Fe8CbCE2wGJIWr', {\n monthly_199: createPrice('plan_Fe8CUkZfXasFtB', {\n amount: 199,\n period: 'monthly',\n status: 'active',\n }),\n }),\n enterprise: createProduct('prod_Hc9PMnHUmHvOlw', {\n monthly_700: createPrice('price_1H2v6JIewCKA2h0IgUwsuctb', {\n amount: 700,\n period: 'monthly',\n status: 'active',\n }),\n }),\n essential: createProduct('prod_FplN7CkqFRH0ye', {\n monthly_58: createPrice('plan_FpljxNuZtNFFbm', {\n amount: 58,\n period: 'monthly',\n status: 'active',\n }),\n }),\n essentialNew: createProduct('prod_GYXm5X66hM1Ywj', {\n monthly_58: createPrice('plan_GYXmTA3EdfCv4q', {\n amount: 58,\n period: 'monthly',\n status: 'active',\n }),\n yearly_580: createPrice('plan_GYXmTA3EdfCv4q', {\n amount: 580,\n period: 'yearly',\n status: 'active',\n }),\n }),\n growth: createProduct('prod_FplOSDbBmxba94', {\n monthly_199: createPrice('plan_FplOshrr1w3Mvu', {\n amount: 199,\n period: 'monthly',\n status: 'active',\n }),\n }),\n professional: createProduct('prod_GYXo54YK5kga12', {\n monthly_199: createPrice('plan_GYXoIkvwVKyfF2', {\n amount: 199,\n period: 'monthly',\n status: 'active',\n }),\n yearly_1990: createPrice('price_1KHU70IewCKA2h0IR87yXOQ2', {\n amount: 1990,\n period: 'yearly',\n status: 'inactive',\n }),\n yearly_2388: createPrice('price_1KHU70IewCKA2h0IR87yXOQ2', {\n amount: 2388,\n period: 'yearly',\n status: 'active',\n }),\n }),\n startup: createProduct('prod_Fe8BTslXbdylxV', {\n monthly_49: createPrice('plan_Fe8BzLp7k71eGD', {\n amount: 49,\n period: 'monthly',\n status: 'active',\n }),\n yearly_200: createPrice('plan_Fe8BzLp7k71eGD', {\n amount: 200,\n period: 'yearly',\n status: 'active',\n }),\n }),\n },\n },\n prod: {\n builder: {\n essential: createProduct('prod_MoR2Ldm5PJpJZJ', {\n monthly_125: createPrice('price_1PuuU1IewCKA2h0IUSAcuUUb', {\n amount: 125,\n period: 'monthly',\n status: 'active',\n }),\n monthly_99: createPrice('price_1M4oA4IewCKA2h0IWgfbSJBe', {\n amount: 99,\n period: 'monthly',\n status: 'inactive',\n }),\n yearly_1200: createPrice('price_1PuuUZIewCKA2h0IDMNwNqQl', {\n amount: 1200,\n period: 'yearly',\n status: 'active',\n }),\n }),\n professional: createProduct('prod_MoR2h0Nf16hhgb', {\n monthly_199: createPrice('price_1M4oABIewCKA2h0INkbaCbIS', {\n amount: 199,\n period: 'monthly',\n status: 'inactive',\n }),\n monthly_240: createPrice('price_1MIDxtIewCKA2h0IvWi5weJL', {\n amount: 240,\n period: 'monthly',\n status: 'inactive',\n }),\n monthly_300: createPrice('price_1PuuVSIewCKA2h0IETsLUwF9', {\n amount: 300,\n period: 'monthly',\n status: 'active',\n }),\n yearly_2880: createPrice('price_1PuuVmIewCKA2h0I37dMpqI5', {\n amount: 2880,\n period: 'yearly',\n status: 'active',\n }),\n }),\n },\n cli: {\n founder: createProduct('prod_GpzVRVsBgluoef', {\n monthly_100: createPrice('plan_GpzWZLfsOzjrvI', {\n amount: 100,\n period: 'monthly',\n status: 'inactive',\n }),\n monthly_125: createPrice('price_1PuuXFIewCKA2h0IVHSyfFsd', {\n amount: 125,\n period: 'monthly',\n status: 'active',\n }),\n yearly_1200: createPrice('price_1PuuXYIewCKA2h0IAsygBajd', {\n amount: 1200,\n period: 'yearly',\n status: 'active',\n }),\n }),\n founder30: createProduct('prod_GrHtZKuUDvLZOF', {\n monthly_30: createPrice('plan_GrHuyGjzYN0XN2', {\n amount: 30,\n period: 'monthly',\n status: 'active',\n }),\n }),\n founder50: createProduct('prod_GsL0ntimYpTTwD', {\n monthly_50: createPrice('plan_GsL1IRUwpj5CIF', {\n amount: 50,\n period: 'monthly',\n status: 'active',\n }),\n monthly_90: createPrice('price_1JMHNnIewCKA2h0II5RGjVtk', {\n amount: 90,\n period: 'monthly',\n status: 'inactive',\n }),\n }),\n performance: createProduct('prod_LphRn5Rfuq3CMh', {\n monthly_300: createPrice('price_1L822LIewCKA2h0I5JYyOG1p', {\n amount: 300,\n period: 'monthly',\n status: 'inactive',\n }),\n monthly_375: createPrice('price_1PuuYKIewCKA2h0IWBJ4cyRQ', {\n amount: 375,\n period: 'monthly',\n status: 'active',\n }),\n yearly_3600: createPrice('price_1PuuYcIewCKA2h0IzeU1xWbQ', {\n amount: 3600,\n period: 'yearly',\n status: 'active',\n }),\n }),\n scale: createProduct('prod_LphRKSuMLjQriP', {\n monthly_1200: createPrice('price_1L822RIewCKA2h0IPt9f2nZM', {\n amount: 1200,\n period: 'monthly',\n status: 'inactive',\n }),\n monthly_1500: createPrice('price_1PuuarIewCKA2h0IEONPcFU5', {\n amount: 1500,\n period: 'monthly',\n status: 'active',\n }),\n yearly_14400: createPrice('price_1Puub5IewCKA2h0IMJ3CQ58r', {\n amount: 14400,\n period: 'yearly',\n status: 'active',\n }),\n }),\n },\n legacy: {\n business: createProduct('prod_FdmEvAgT7ZtVEw', {\n monthly_199: createPrice('plan_FdmE8akq9ukxiY', {\n amount: 199,\n period: 'monthly',\n status: 'active',\n }),\n }),\n enterprise: createProduct('prod_GuGGWeMQ3SCuE9', {\n monthly_700: createPrice('plan_GuGICX6nRtDthN', {\n amount: 700,\n period: 'monthly',\n status: 'active',\n }),\n }),\n essential: createProduct('prod_FohIP5aSMWWGyY', {\n monthly_58: createPrice('plan_FohJzCujA6vvt4', {\n amount: 58,\n period: 'monthly',\n status: 'active',\n }),\n }),\n essentialNew: createProduct('prod_GYXn73zcoJKsF8', {\n monthly_58: createPrice('plan_GYXn2cnPl5dy7j', {\n amount: 58,\n period: 'monthly',\n status: 'active',\n }),\n yearly_580: createPrice('price_1Gqb24IewCKA2h0ILP5rxTnT', {\n amount: 580,\n period: 'yearly',\n status: 'active',\n }),\n }),\n growth: createProduct('prod_FohKfjLOlJNm1W', {\n monthly_199: createPrice('plan_FohKGuWis5ocsi', {\n amount: 199,\n period: 'monthly',\n status: 'active',\n }),\n }),\n professional: createProduct('prod_GYXouE5K7vuitU', {\n monthly_199: createPrice('plan_GYXoKsa2j0yURg', {\n amount: 199,\n period: 'monthly',\n status: 'active',\n }),\n yearly_1990: createPrice('price_1KHTgaIewCKA2h0I81TVg85r', {\n amount: 1990,\n period: 'yearly',\n status: 'inactive',\n }),\n yearly_2388: createPrice('price_1KLT32IewCKA2h0IFeJOAgG5', {\n amount: 2388,\n period: 'yearly',\n status: 'active',\n }),\n }),\n startup: createProduct('prod_FdmCGcrX2IETUH', {\n monthly_49: createPrice('plan_FdmDAUN7JGD8pR', {\n amount: 49,\n period: 'monthly',\n status: 'active',\n }),\n yearly_200: createPrice('plan_Ft8qvk401twwrW', {\n amount: 200,\n period: 'yearly',\n status: 'active',\n }),\n }),\n },\n },\n};\nconst { dev, prod } = products;\n// --- plans ---\nexport const basicPlan = createPlan('basic', {\n dev: [\n dev.builder.essential,\n dev.cli.founder30,\n dev.cli.founder50,\n dev.cli.founder,\n dev.legacy.essential,\n dev.legacy.essentialNew,\n dev.legacy.startup,\n ],\n prod: [\n prod.builder.essential,\n prod.cli.founder30,\n prod.cli.founder50,\n prod.cli.founder,\n prod.legacy.essential,\n prod.legacy.essentialNew,\n prod.legacy.startup,\n ],\n});\nexport const legacyProPlan = createPlan('legacy_pro', {\n dev: [\n dev.builder.professional,\n dev.cli.founder,\n dev.cli.founder30,\n dev.cli.founder50,\n dev.cli.performance,\n dev.cli.scale,\n dev.legacy.professional,\n dev.legacy.growth,\n dev.legacy.business,\n ],\n prod: [\n prod.builder.professional,\n prod.cli.founder,\n prod.cli.founder30,\n prod.cli.founder50,\n prod.cli.performance,\n prod.cli.scale,\n prod.legacy.professional,\n prod.legacy.growth,\n prod.legacy.business,\n ],\n});\nexport const proPlan = createPlan('pro', {\n dev: [\n dev.builder.professional,\n dev.cli.performance,\n dev.legacy.professional,\n dev.legacy.growth,\n dev.legacy.business,\n ],\n prod: [\n prod.builder.professional,\n prod.cli.performance,\n prod.legacy.professional,\n prod.legacy.growth,\n prod.legacy.business,\n ],\n});\nexport const scalePlan = createPlan('scale', {\n dev: [dev.cli.scale, dev.legacy.enterprise],\n prod: [prod.cli.scale, prod.legacy.enterprise],\n});\n// --- configurations ---\nexport const configurations = {\n dev: {\n builder: {\n update: createPortalConfig(PortalConfigKey.BuilderUpdateDev, [\n dev.builder.essential,\n dev.builder.professional,\n ]),\n upgrade: createPortalConfig(PortalConfigKey.BuilderUpgradeDev, [\n dev.builder.professional,\n ]),\n },\n cli: {\n update: createPortalConfig(PortalConfigKey.CLIUpdateDev, [\n dev.cli.founder,\n dev.cli.performance,\n dev.cli.scale,\n ]),\n upgrade: createPortalConfig(PortalConfigKey.CLIUpgradeDev, [\n dev.cli.performance,\n dev.cli.scale,\n ]),\n },\n },\n prod: {\n builder: {\n update: createPortalConfig(PortalConfigKey.BuilderUpdateProd, [\n prod.builder.essential,\n prod.builder.professional,\n ]),\n upgrade: createPortalConfig(PortalConfigKey.BuilderUpgradeProd, [\n prod.builder.professional,\n ]),\n },\n cli: {\n update: createPortalConfig(PortalConfigKey.CLIUpdateProd, [\n prod.cli.founder,\n prod.cli.performance,\n prod.cli.scale,\n ]),\n upgrade: createPortalConfig(PortalConfigKey.CLIUpgradeProd, [\n prod.cli.performance,\n prod.cli.scale,\n ]),\n },\n },\n};\n// --- utilities ---\nexport const hasActiveSub = (sub) => {\n return !!(sub && (sub.status === 'active' || sub.status === 'trialing'));\n};\nexport const hasPlan = (plan, sub) => {\n if (!sub || !hasActiveSub(sub))\n return false;\n const plans = [basicPlan, legacyProPlan, proPlan, scalePlan];\n // find the plans that are eligible to be tested\n const eligiblePlans = plans.filter((eligiblePlan) => {\n return plan.eligiblePlanTiers.includes(eligiblePlan.tier);\n });\n // test if any of those plans contains the current subscription\n for (const eligiblePlan of eligiblePlans) {\n const allProducts = [\n ...eligiblePlan.products.dev,\n ...eligiblePlan.products.prod,\n ];\n for (const { id, prices } of allProducts) {\n if ((sub === null || sub === void 0 ? void 0 : sub.productId) && (sub === null || sub === void 0 ? void 0 : sub.productId) === id) {\n return true;\n }\n if (Object.values(prices).some((price) => price.id === (sub === null || sub === void 0 ? void 0 : sub.planId))) {\n return true;\n }\n }\n }\n return false;\n};\nexport const getPlan = (sub) => {\n const plans = [basicPlan, legacyProPlan, proPlan, scalePlan];\n for (const plan of plans) {\n const allProducts = [...plan.products.dev, ...plan.products.prod];\n for (const { id, prices } of allProducts) {\n if ((sub === null || sub === void 0 ? void 0 : sub.productId) && (sub === null || sub === void 0 ? void 0 : sub.productId) === id) {\n return plan;\n }\n if (Object.values(prices).some((price) => price.id === (sub === null || sub === void 0 ? void 0 : sub.planId))) {\n return plan;\n }\n }\n }\n return null;\n};\nexport const LegacyProductRecord = {\n builder_essential: {\n dev: dev.builder.essential,\n prod: prod.builder.essential,\n },\n builder_professional: {\n dev: dev.builder.professional,\n prod: prod.builder.professional,\n },\n business: { dev: dev.legacy.business, prod: prod.legacy.business },\n cli_founder: { dev: dev.cli.founder, prod: prod.cli.founder },\n cli_founder_30: { dev: dev.cli.founder30, prod: prod.cli.founder30 },\n cli_founder_50: { dev: dev.cli.founder50, prod: prod.cli.founder50 },\n cli_performance: { dev: dev.cli.performance, prod: prod.cli.performance },\n cli_scale: { dev: dev.cli.scale, prod: prod.cli.scale },\n enterprise: { dev: dev.legacy.enterprise, prod: prod.legacy.enterprise },\n essential: { dev: dev.legacy.essential, prod: prod.legacy.essential },\n essential_new: {\n dev: dev.legacy.essentialNew,\n prod: prod.legacy.essentialNew,\n },\n growth: { dev: dev.legacy.growth, prod: prod.legacy.growth },\n professional: {\n dev: dev.legacy.professional,\n prod: prod.legacy.professional,\n },\n professional_annual: {\n dev: dev.legacy.professional,\n prod: prod.legacy.professional,\n },\n professional_annual_full_price: {\n dev: dev.legacy.professional,\n prod: prod.legacy.professional,\n },\n startup: { dev: dev.legacy.startup, prod: prod.legacy.startup },\n};\n", "import isRegex from 'is-regex';\nimport semver from 'semver';\nimport * as yup from 'yup';\nexport const appTitleValidation = yup\n .string()\n .label('App title')\n .max(26)\n .matches(/^[\\w\\-\\s]+$/, 'App title may contain letters, numbers, spaces and dashes only')\n .matches(/^[^\\s]+(\\s+[^\\s]+)*$/, 'App title may not begin or end with space')\n .required();\nfunction isNumeric(str) {\n if (typeof str !== 'string')\n return false;\n return !Number.isNaN(Number(str)) && !Number.isNaN(parseFloat(str));\n}\nfunction isNumericSemver(value) {\n // check if valid semver\n if (!semver.valid(value))\n return false;\n // ensure that all values are numbers\n if (!value.split('.').every((num) => isNumeric(num)))\n return false;\n return true;\n}\nexport const forceVersionValidation = yup\n .string()\n .label('App version')\n .required()\n // can have multiple keys included - https://www.npmjs.com/package/yup#schemawhenkeys-string--string-builder-object--values-any-schema--schema-schema\n .when('$currentVersion', ([currentVersion], schema) => schema.test('semantic-version', 'App version must follow a numeric SemVer versioning scheme (e.g. 1.0.0) and be greater than prior version.', (forceVersion) => {\n return (isNumericSemver(forceVersion) &&\n semver.gt(forceVersion, currentVersion));\n}));\nexport const iconValidation = yup\n .string()\n .label('Icon')\n .url()\n .required('You must upload an icon for your app');\nexport const urlValidation = yup\n .string()\n .matches(/^(?:([a-z0-9+.-]+):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*\\.?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/, {\n excludeEmptyString: true,\n message: \"Invalid URL. Don't forget to include the protocol (e.g.. https://).\",\n})\n .label('Website URL')\n .required();\nexport const urlValidationForm = yup.object().shape({\n url: urlValidation,\n});\nexport const heightValidation = yup\n .number()\n .label('Height')\n .moreThan(1)\n .lessThan(2000)\n .required();\nexport const widthValidation = yup\n .number()\n .label('Width')\n .moreThan(1)\n .lessThan(3000)\n .required();\nexport const internalAppRegexValidation = yup\n .string()\n .required()\n .label('Internal URLs')\n .test('escape-forward-slash', \"a forward-slash ('/') must be escaped with a back-slash ('\\\\')\", (value) => {\n if (value.includes('/')) {\n const forwardSlashCount = value\n .split('')\n .map((char) => char === '/')\n .filter((isTrue) => isTrue).length;\n const backSlashEscapeCount = ((value || '').match(/(?=\\\\\\/)/g) || [])\n .length;\n return forwardSlashCount === backSlashEscapeCount;\n }\n return true;\n})\n .test('is-regex', \n// eslint-disable-next-line no-template-curly-in-string\n'${path} must be valid regular expression', (value) => isRegex(RegExp(value)));\nexport const appProtocolValidation = yup\n .string()\n .required()\n .label('App Protocol')\n .test('ends-with-protocol', 'Protocols must end with `://`', (value) => value.endsWith('://'))\n .test('is-lowercase', 'Protocols must be lowercase', (value) => value === value.toLowerCase())\n .matches(/^[a-zA-Z-.]+:\\/\\/$/, 'Protocols contain letters, dots (.) and dashes (-) only')\n .min(5);\nexport const appConfigValidation = yup.object({\n customUserAgent: yup.string().required(),\n disableDevTools: yup.boolean().required(),\n iconUrl: iconValidation,\n id: yup.string().required(),\n internalURLs: yup.string().required(),\n isFrameBlocked: yup.boolean().required(),\n meta: yup\n .object({\n appIterations: yup.number().required(),\n hasAppChanged: yup.boolean().required(),\n publishedVersions: yup.object({\n desktopify: yup.string().notRequired(),\n electron: yup.string().notRequired(),\n version: yup.string().notRequired(),\n }),\n schemaVersion: yup.number().required(),\n })\n .required(),\n name: appTitleValidation,\n secret: yup.string().required(),\n singleInstance: yup.boolean().required(),\n url: urlValidation,\n windowOptions: yup\n .object({\n hasMaxHeight: yup.boolean().required(),\n hasMaxWidth: yup.boolean().required(),\n hasMinHeight: yup.boolean().required(),\n hasMinWidth: yup.boolean().required(),\n height: yup.number().required(),\n isFullscreenable: yup.boolean().required(),\n isMaximizable: yup.boolean().required(),\n isMinimizable: yup.boolean().required(),\n isResizable: yup.boolean().required(),\n maxHeight: yup.number().required(),\n maxWidth: yup.number().required(),\n minHeight: yup.number().required(),\n minWidth: yup.number().required(),\n startInFullscreenMode: yup.boolean().required(),\n width: yup.number().required(),\n alwaysOnTop: yup.boolean().required(),\n autoHideMenuBar: yup.boolean().required(),\n transparentInsetTitlebar: yup.boolean().required(),\n transparentTitlebar: yup.boolean().required(),\n })\n .required(),\n});\nexport const shouldMinimizeToTrayIsActive = (desktopApp) => {\n return desktopApp.trays.some((t) => t.leftClick.role === 'toggleMenu' || t.rightClick.role === 'toggleMenu');\n};\n", "// Path is relative to lib/esm/ output directory\nimport packageJson from '../../package.json' with { type: 'json' };\nexport * from './base.js';\nexport * from './desktopify.js';\nexport * from './desktopify2.js';\nexport * from './getSiteInfo.js';\nexport * from './hsm.js';\nexport * from './introspection/breakpoints.js';\nexport * from './introspection/status.js';\nexport * from './invitePermissionLabels.js';\nexport * from './personalAccessTokens.js';\nexport * from './plans.js';\nexport * from './plugin.js';\nexport * from './toDesktop.js';\nexport * from './validations.js';\nexport const schemaVersion = packageJson.version;\n", "import isCi from 'is-ci';\nimport { useCallback, useEffect, useRef } from 'react';\nimport { useInput as useInkInput, useStdin } from 'ink';\nimport useExit from './useExit';\n\ntype Handler = Parameters<typeof useInkInput>[0];\ntype Options = Parameters<typeof useInkInput>[1];\n\ntype Extras = {\n onCtrlCPressed?: () => void;\n};\n\ntype Subscription = {\n handler: Handler;\n isActive?: boolean;\n};\n\nconst ctrlCSubscriptions = new Set<() => void>();\nconst exitHandlers = new Set<() => void>();\n\nlet activeStdin: NodeJS.ReadStream | null = null;\nlet stdinListenerCount = 0;\n\nconst onStdin = (data: Buffer) => {\n let input = String(data);\n let wasCtrlPressed = false;\n\n if (input <= '\\u001A' && input !== '\\r') {\n input = String.fromCharCode(input.charCodeAt(0) + 'a'.charCodeAt(0) - 1);\n wasCtrlPressed = true;\n }\n\n if (wasCtrlPressed && input === 'c') {\n ctrlCSubscriptions.forEach((subscription) => subscription());\n\n const { value: exit } = exitHandlers.values().next();\n if (exit) {\n setTimeout(exit, 10);\n }\n }\n};\n\nfunction normaliseOptions(options?: Options): Options {\n if (!options) {\n return {};\n }\n\n if ('isActive' in options) {\n return { isActive: options.isActive };\n }\n\n return {};\n}\n\nfunction normaliseExtras(extras?: Extras): Extras {\n if (!extras) {\n return {};\n }\n\n if ('onCtrlCPressed' in extras) {\n return { onCtrlCPressed: extras.onCtrlCPressed };\n }\n\n return {};\n}\n\n/*\n See https://github.com/vadimdemedes/pastel/issues/38\n*/\nexport default function useInput(\n handler?: Handler,\n options: Options = {},\n extras: Extras = {},\n) {\n const exit = useExit();\n const { stdin, isRawModeSupported } = useStdin();\n const subscriptionRef = useRef<Subscription[]>([]);\n\n const canUseRawInput = !isCi && Boolean(isRawModeSupported && stdin);\n\n const register = useCallback(\n (\n nextHandler: Handler,\n nextOptions: Options = {},\n nextExtras: Extras = {},\n ) => {\n if (!canUseRawInput) {\n return () => {};\n }\n\n const normalisedOptions = normaliseOptions(nextOptions);\n const normalisedExtras = normaliseExtras(nextExtras);\n\n const subscription: Subscription = {\n handler: nextHandler,\n isActive: normalisedOptions.isActive,\n };\n\n subscriptionRef.current = [...subscriptionRef.current, subscription];\n\n if (normalisedExtras.onCtrlCPressed) {\n ctrlCSubscriptions.add(normalisedExtras.onCtrlCPressed);\n }\n\n return () => {\n subscriptionRef.current = subscriptionRef.current.filter(\n (item) => item !== subscription,\n );\n\n if (normalisedExtras.onCtrlCPressed) {\n ctrlCSubscriptions.delete(normalisedExtras.onCtrlCPressed);\n }\n };\n },\n [canUseRawInput],\n );\n\n useEffect(() => {\n if (!canUseRawInput || !stdin) {\n return;\n }\n\n exitHandlers.add(exit);\n const onStdinData = (data: Buffer) => onStdin(data);\n\n if (stdinListenerCount === 0) {\n activeStdin = stdin;\n activeStdin.on('data', onStdinData);\n }\n\n stdinListenerCount += 1;\n\n return () => {\n exitHandlers.delete(exit);\n stdinListenerCount = Math.max(stdinListenerCount - 1, 0);\n\n if (stdinListenerCount === 0 && activeStdin) {\n activeStdin.off('data', onStdinData);\n activeStdin = null;\n }\n };\n }, [canUseRawInput, exit, stdin]);\n\n useInkInput(\n useCallback(\n (input, key) => {\n if (!canUseRawInput) {\n return;\n }\n\n for (const subscription of subscriptionRef.current) {\n if (subscription.isActive === false) {\n continue;\n }\n\n subscription.handler(input, key);\n }\n },\n [canUseRawInput],\n ),\n {\n isActive: canUseRawInput,\n },\n );\n\n useEffect(() => {\n if (!handler) {\n return;\n }\n\n const unsubscribe = register(handler, options, extras);\n\n return () => {\n unsubscribe();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [extras?.onCtrlCPressed, handler, options?.isActive, register]);\n\n if (handler) {\n return;\n }\n\n return register;\n}\n", "import { useApp } from 'ink';\nimport { flush } from './analytics';\nimport logger from './logger';\n\nexport default () => {\n const { exit } = useApp();\n\n return (error?: Error) => {\n logger.debug({ error }, 'Exit called');\n\n /*\n First, destroy connections.\n Why do we need to do this if we're going to call process.exit\n below anyway? Just to be safe in case a Firestore subscription\n triggers a state update after the React app is exited.\n */\n // Firebase v9+ doesn't require manual termination for most cases\n // If you need to terminate connections, use terminate() from firebase/firestore\n // TODO: Uncomment this when we've been on Firebase v11 for a while and are confident this is no longer needed\n // import { terminate } from \"firebase/firestore\";\n // terminate(firestore).catch((e) => logger.error(e));\n\n let timeoutId;\n Promise.race([\n // flush the analytics to make sure all outstanding events are pushed to segment\n flush(),\n // If it takes longer than 1 second, resolve early to proceed with program exit\n new Promise<void>(\n (resolve) => (timeoutId = setTimeout(() => resolve(), 1000)),\n ),\n ])\n .catch(() => {})\n .finally(() => {\n clearTimeout(timeoutId);\n /*\n Then, exit the React app. We don't pass the error because:\n 1. We don't want it displayed. We could give it a dummy error but\n that will output an empty line.\n 2. It doesn't exit with the correct code anyway, see\n https://github.com/vadimdemedes/pastel/issues/39.\n\n Side note: your component must not perform state updates after\n calling this, it will error.\n\n The try-catch shouldn't be needed here, but let's be safe\n */\n try {\n exit();\n } catch (e) {\n logger.error(e);\n // Ignore\n }\n\n /*\n Then exit the process.\n It should happen if all connections, etc. are destroyed. We manually\n exit with a code because:\n 1. We might not clean up properly, it could fail or take a long time.\n 2. The exit function above doesn't exit the CLI with the correct\n code anyway.\n\n If we had a way to detect when the app exits, we would use that\n and then call process.exit / destroy connections appropriately\n (https://github.com/vadimdemedes/pastel/issues/38).\n */\n setTimeout(() => process.exit(error ? 1 : 0), 10);\n });\n };\n};\n", "import { Analytics } from '@segment/analytics-node';\nimport os from 'os';\nimport { v4 as uuidv4 } from 'uuid';\nimport getEnvironmentVariables from './getEnvironmentVariables';\nimport { currentUser } from './firestore';\nimport { getAuthConfig } from './configStore';\nimport getCliVersion from './getCliVersion';\n\nconst environmentVariables = getEnvironmentVariables();\n\nlet analytics: Analytics | undefined = new Analytics({\n flushAt: 1,\n flushInterval: 1,\n writeKey: environmentVariables.SEGMENT_WRITE_KEY,\n});\n\nexport const ANALYTICS_EVENT = {\n CLI_COMMAND: 'CLI Command',\n};\n\nexport function disableAnalytics() {\n analytics = undefined;\n}\n\nfunction getAnalyticsBaseProperties() {\n const baseProps = {\n app: {\n cliVersion: '',\n },\n client: 'cli',\n user: {\n email: '',\n },\n os: {\n name: '',\n version: '',\n },\n runtime: {\n name: 'Node.js',\n version: '',\n },\n };\n try {\n baseProps.os = {\n name: os.platform(),\n version: os.release(),\n };\n } catch {\n // nothing\n }\n\n try {\n baseProps.user = {\n email: getAuthConfig().email as string,\n };\n } catch {\n // nothing\n }\n\n try {\n baseProps.app = {\n cliVersion: getCliVersion(),\n };\n } catch {\n // nothing\n }\n\n try {\n baseProps.runtime = {\n name: 'Node.js',\n version: process.version,\n };\n } catch {\n // nothing\n }\n\n return baseProps;\n}\n\nconst anonymousId = uuidv4();\nexport const track = (event: string, properties = {}, callback = () => {}) => {\n try {\n const user = currentUser();\n analytics?.track(\n {\n event,\n userId: user?.uid,\n anonymousId,\n properties: {\n ...properties,\n ...getAnalyticsBaseProperties(),\n },\n },\n callback,\n );\n } catch {\n // nothing\n }\n};\n\nexport const identify = (id: string, traits = {}, callback = () => {}) => {\n try {\n analytics?.identify({ userId: id, anonymousId, traits }, callback);\n } catch {\n // nothing\n }\n};\n\nexport const flush = () => analytics?.flush({ close: true });\n", "import dotenv from 'dotenv';\nimport path from 'path';\n\nlet hasInitialized = false;\n\nconst init = () => {\n if (hasInitialized) {\n return;\n }\n\n // In test environment, load test-specific environment variables\n const envFile = process.env.NODE_ENV === 'test' ? '../.env.test' : '../.env';\n\n dotenv.config({\n path: path.resolve(__dirname, envFile),\n quiet: true,\n });\n hasInitialized = true;\n};\n\ntype EnvVars = {\n TODESKTOP_CLI_ENV: string;\n TODESKTOP_CLI_S3_BUCKET: string;\n TODESKTOP_CLI_FIREBASE_FUNCTIONS_BASE: string;\n TODESKTOP_CLI_FIREBASE_API_KEY: string;\n TODESKTOP_CLI_FIREBASE_AUTH_DOMAIN: string;\n TODESKTOP_CLI_FIREBASE_DATABASE_URL: string;\n TODESKTOP_CLI_FIRESTORE_HOST?: string;\n TODESKTOP_CLI_FIREBASE_PROJECT_ID: string;\n TODESKTOP_CLI_FIREBASE_STORAGE_BUCKET: string;\n TODESKTOP_CLI_FIREBASE_MESSAGING_SENDER_ID: string;\n TODESKTOP_CLI_FIREBASE_ID: string;\n TODESKTOP_CLI_SENTRY_DSN: string;\n SEGMENT_WRITE_KEY: string;\n};\n\nexport default () => {\n init();\n return process.env as NodeJS.ProcessEnv & EnvVars;\n};\n", "import { initializeApp } from 'firebase/app';\nimport { connectFirestoreEmulator, getFirestore } from 'firebase/firestore';\nimport {\n getAuth,\n signInWithCustomToken as authSignInWithCustomToken,\n onAuthStateChanged,\n} from 'firebase/auth';\nimport getEnvironmentVariables from './getEnvironmentVariables';\n\nconst environmentVariables = getEnvironmentVariables();\n\n// if (environmentVariables.NODE_ENV === \"development\") {\n// if (true) {\n// setLogLevel(\"debug\");\n// }\n\nconst firebaseApp = initializeApp({\n apiKey: environmentVariables.TODESKTOP_CLI_FIREBASE_API_KEY,\n authDomain: environmentVariables.TODESKTOP_CLI_FIREBASE_AUTH_DOMAIN,\n databaseURL: environmentVariables.TODESKTOP_CLI_FIREBASE_DATABASE_URL,\n projectId: environmentVariables.TODESKTOP_CLI_FIREBASE_PROJECT_ID,\n storageBucket: environmentVariables.TODESKTOP_CLI_FIREBASE_STORAGE_BUCKET,\n messagingSenderId:\n environmentVariables.TODESKTOP_CLI_FIREBASE_MESSAGING_SENDER_ID,\n appId: environmentVariables.TODESKTOP_CLI_FIREBASE_ID,\n});\n\nconst auth = getAuth(firebaseApp);\nconst db = getFirestore(firebaseApp);\n\nconst [host, port] =\n environmentVariables.TODESKTOP_CLI_FIRESTORE_HOST?.split(':') || [];\nif (host && port) {\n connectFirestoreEmulator(db, host, Number.parseInt(port, 10));\n}\n\ninterface FirebaseUser {\n displayName: string | null;\n email: string | null;\n getIdToken(forceRefresh?: boolean): Promise<string>;\n uid: string;\n}\n\nexport const currentUser = (): FirebaseUser | null => {\n return auth.currentUser as FirebaseUser | null;\n};\nexport const signInWithCustomToken = async (token: string) => {\n return authSignInWithCustomToken(auth, token);\n};\n\n/**\n * onUserAuth is only triggered on sign-in. This\n * happens once signInWithCustomToken is successful.\n *\n * It technically also triggers on sign-out but there's\n * no concept of signing out of firebase with the CLI app.\n * (See logout command which just deletes a local file)\n */\nexport const onUserAuth = (\n handler: (user: Partial<FirebaseUser>) => void,\n): (() => void) =>\n onAuthStateChanged(auth, (user) => {\n handler(((user as FirebaseUser | null) ?? {}) as Partial<FirebaseUser>);\n });\n\nexport default db;\n", "import Conf from 'conf';\n\n// Configuration for lazy initialization\nlet customCwd: string | undefined = process.env.TODESKTOP_CONFIG_DIR;\nlet ephemeralMode = false;\nconst memoryStore = new Map<string, string>();\nlet configInstance: Conf<Record<string, unknown>> | null = null;\n\n/**\n * Set a custom directory for the config store.\n * Must be called before any config operations.\n */\nexport const setConfigDir = (cwd: string) => {\n customCwd = cwd;\n};\n\n/**\n * Enable ephemeral mode - config will only be stored in memory\n * and not persisted to disk.\n */\nexport const setEphemeralMode = (enabled: boolean) => {\n ephemeralMode = enabled;\n};\n\nconst getConfigInstance = () => {\n if (!configInstance) {\n configInstance = new Conf({\n configName: 'todesktop-cli',\n ...(customCwd && { cwd: customCwd }),\n });\n }\n return configInstance;\n};\n\nexport const accessTokenConfigKey = 'accessToken';\nexport const emailConfigKey = 'email';\nexport const jwtTokenConfigKey = 'jwtToken';\n\nexport const setConfig = (key: string, value: string) => {\n if (ephemeralMode) {\n memoryStore.set(key, value);\n } else {\n getConfigInstance().set(key, value);\n }\n};\n\nexport const getConfig = (key: string) => {\n if (ephemeralMode) {\n return memoryStore.get(key);\n }\n return getConfigInstance().get(key) as string;\n};\n\nexport const setAuthConfig = (email, accessToken, jwtToken) => {\n setConfig(emailConfigKey, email);\n setConfig(accessTokenConfigKey, accessToken);\n setConfig(jwtTokenConfigKey, jwtToken);\n};\n\nexport const getAuthConfig = () => {\n const accessToken = getConfig(accessTokenConfigKey);\n const jwtToken = getConfig(jwtTokenConfigKey);\n const email = getConfig(emailConfigKey);\n\n return { accessToken, jwtToken, email };\n};\n\nexport const deleteAuthConfig = () => {\n if (ephemeralMode) {\n memoryStore.delete(emailConfigKey);\n memoryStore.delete(accessTokenConfigKey);\n memoryStore.delete(jwtTokenConfigKey);\n } else {\n const config = getConfigInstance();\n config.delete(emailConfigKey);\n config.delete(accessTokenConfigKey);\n config.delete(jwtTokenConfigKey);\n }\n};\n\n/**\n * Reset the config store state. Only for testing purposes.\n * @internal\n */\nexport const resetConfigStoreForTesting = () => {\n customCwd = undefined;\n ephemeralMode = false;\n memoryStore.clear();\n configInstance = null;\n};\n", "import pkgUp from 'pkg-up';\nimport type toDesktopPackageJson from '../../package.json';\nimport readJson from './readJson';\n\ntype ToDesktopPackageJson = typeof toDesktopPackageJson;\n\nconst packageJson = readJson<ToDesktopPackageJson>(\n pkgUp.sync({ cwd: __dirname }),\n);\n\nexport default function getToDesktopPackageJson(): ToDesktopPackageJson {\n return packageJson;\n}\n", "// This exists so it can be mocked in tests\nexport default function readJson<T>(filePath: string): T {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require(filePath);\n}\n", "import getToDesktopPackageJson from './getToDesktopPackageJson';\n\nconst cliVersion = getToDesktopPackageJson().version;\n\nexport default () => cliVersion;\n", "import bunyan from 'bunyan';\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport * as Sentry from '@sentry/node';\n\nlet logger: Logger;\n\nconst SENSITIVE_FIELD_KEY_SUBSTRINGS = [\n 'token',\n 'password',\n 'secret',\n 'credentials',\n 'environmentVariable',\n];\n\nfunction isJWT(str: string): boolean {\n // JWT typically follows the pattern: xxx.yyy.zzz\n // where each part is base64url encoded\n const jwtPattern = /^[A-Za-z0-9_-]{2,}(?:\\.[A-Za-z0-9_-]{2,}){2}$/;\n\n // We specify a minimum length of 20 characters because JWT strings\n // are usually longer than that and we want to avoid false positives.\n return typeof str === 'string' && str.length > 20 && jwtPattern.test(str);\n}\n\nfunction sanitizeFields(obj: any): any {\n if (!obj || typeof obj !== 'object') {\n if (typeof obj === 'string' && isJWT(obj)) {\n return '[REDACTED JWT]';\n }\n return obj;\n }\n\n // Create a deep copy of the object so that we don't mutate the original object\n const copy = Array.isArray(obj) ? [...obj] : { ...obj };\n\n for (const key of Object.keys(copy)) {\n const lowerKey = key.toLowerCase();\n const value = copy[key];\n\n if (\n SENSITIVE_FIELD_KEY_SUBSTRINGS.some(\n (substring) =>\n // Fields that start with `$` are references to secrets (and not secrets themselves) so keep them in logs because they are useful.\n lowerKey.includes(substring) && !lowerKey.startsWith('$'),\n )\n ) {\n copy[key] = '[REDACTED]';\n } else if (typeof value === 'string' && isJWT(value)) {\n copy[key] = '[REDACTED JWT]';\n } else if (typeof value === 'object') {\n copy[key] = sanitizeFields(value);\n }\n }\n\n return copy;\n}\n\ntry {\n const name = 'todesktop-cli';\n\n let parentDirectory: string;\n const homePath = os.homedir();\n if (process.platform === 'darwin') {\n parentDirectory = path.join(homePath, 'Library', 'Logs', name);\n } else if (process.platform === 'win32') {\n parentDirectory = path.join(\n process.env.APPDATA || path.join(homePath, 'AppData', 'Roaming'),\n name,\n 'logs',\n );\n } else {\n parentDirectory = path.join(\n process.env.XDG_CONFIG_HOME || path.join(homePath, '.config'),\n name,\n 'logs',\n );\n }\n\n fs.mkdirSync(parentDirectory, { recursive: true });\n\n logger = bunyan.createLogger({\n name,\n serializers: {\n scrub: (data: any) => sanitizeFields(data),\n },\n streams: [\n {\n level: 'debug',\n path: path.join(parentDirectory, 'main.log'),\n },\n ],\n });\n} catch (e) {\n // Ignore\n\n const noOp = () => {};\n logger = {\n debug: noOp,\n error: noOp,\n fatal: noOp,\n info: noOp,\n trace: noOp,\n warn: noOp,\n };\n\n try {\n Sentry.captureException(e);\n } catch {\n // Ignore\n }\n}\n\nexport default logger;\n\nexport interface Logger {\n debug: LogFn;\n error: LogFn;\n fatal: LogFn;\n info: LogFn;\n trace: LogFn;\n warn: LogFn;\n}\n\nexport type LogFn = (obj: Error | object | string, ...args: unknown[]) => void;\n", "import {\n getFunctions,\n httpsCallable,\n connectFunctionsEmulator,\n} from 'firebase/functions';\nimport { initializeApp } from 'firebase/app';\nimport getEnvironmentVariables from './getEnvironmentVariables';\n\nconst env = getEnvironmentVariables();\n\nconst app = initializeApp({\n apiKey: env.TODESKTOP_CLI_FIREBASE_API_KEY,\n authDomain: env.TODESKTOP_CLI_FIREBASE_AUTH_DOMAIN,\n databaseURL: env.TODESKTOP_CLI_FIREBASE_DATABASE_URL,\n projectId: env.TODESKTOP_CLI_FIREBASE_PROJECT_ID,\n storageBucket: env.TODESKTOP_CLI_FIREBASE_STORAGE_BUCKET,\n messagingSenderId: env.TODESKTOP_CLI_FIREBASE_MESSAGING_SENDER_ID,\n appId: env.TODESKTOP_CLI_FIREBASE_ID,\n});\n\nconst functions = getFunctions(app);\n\nconst firebaseFunctionsBase = env.TODESKTOP_CLI_FIREBASE_FUNCTIONS_BASE || '';\nif (firebaseFunctionsBase.includes('localhost')) {\n const firebaseUrl = new URL(firebaseFunctionsBase);\n connectFunctionsEmulator(\n functions,\n firebaseUrl.hostname,\n parseInt(firebaseUrl.port),\n );\n}\n\nexport default (functionName) => httpsCallable(functions, functionName);\n", "import {\n IntrospectBreakpointStatus,\n IntrospectShellStatus,\n formatIntrospectionStatus,\n} from '@todesktop/shared';\n\nexport { formatIntrospectionStatus };\n\nexport function getIntrospectionStatusIndicator(\n breakpointStatus?: IntrospectBreakpointStatus,\n shellStatus?: IntrospectShellStatus,\n): string {\n if (shellStatus === 'connected') {\n return '\u25C6';\n }\n\n if (breakpointStatus === 'paused') {\n return '\u23F8';\n }\n\n if (breakpointStatus === 'ready') {\n return '\u2713';\n }\n\n if (breakpointStatus === 'initializing' || shellStatus === 'initializing') {\n return '\u22EF';\n }\n\n if (breakpointStatus === 'finished') {\n return '\u25A0';\n }\n\n if (breakpointStatus === 'error' || shellStatus === 'error') {\n return '\u2717';\n }\n\n return '\u25CB';\n}\n", "import { Box, Text } from 'ink';\nimport PropTypes from 'prop-types';\nimport { useEffect, useState } from 'react';\nimport throttle from 'lodash.throttle';\nimport BuildCompleteMessage from './BuildCompleteMessage';\nimport PlatformProgress from './PlatformProgress';\nimport IntrospectionNotice from './IntrospectionNotice';\nimport { hasBuildKickedOff } from '../utilities/buildStatus';\nimport logForCI from '../utilities/logForCI';\nimport useExit from '../utilities/useExit';\n\nconst logForCIThrottled = throttle(logForCI, 60 * 1000, { trailing: true });\n\nconst BuildProgress = ({ build, onBuildFailure }) => {\n const exit = useExit();\n\n const [{ hasKickedOff }, setState] = useState({\n hasKickedOff: false,\n });\n const platformsNotSkipped = ['windows', 'mac', 'linux'].filter(\n (platform) => !build[platform].shouldSkip,\n );\n\n useEffect(() => {\n setState((previousState) => ({\n ...previousState,\n hasKickedOff: hasBuildKickedOff(build),\n }));\n }, [build]);\n\n useEffect(() => {\n if (build.status === 'failed') {\n onBuildFailure(build.errorMessage);\n } else if (build.status === 'cancelled') {\n setTimeout(exit, 10);\n } else {\n const ciPlatformProgress = platformsNotSkipped.map(\n (platform) =>\n `${platform.charAt(0).toUpperCase() + platform.slice(1)}: ${\n build[platform].progressActivityName\n } (${build[platform].progressPercentage}%)`,\n );\n logForCIThrottled(ciPlatformProgress.join(', '));\n }\n }, [build, exit, onBuildFailure, platformsNotSkipped]);\n\n if (build.status === 'succeeded') {\n return <BuildCompleteMessage build={build} />;\n }\n\n if (build.status === 'cancelled') {\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text>Build cancelled</Text>\n </Box>\n );\n }\n\n if (!hasKickedOff) {\n return null;\n }\n\n return (\n <>\n <IntrospectionNotice build={build} />\n <Box flexDirection=\"column\">\n {platformsNotSkipped.map((platform) => (\n <Box flexDirection=\"column\" key={platform}>\n <PlatformProgress\n activityName={\n build[platform].status === 'failed'\n ? build[platform].errorMessage\n : build[platform].progressActivityName\n }\n activityType={\n build[platform].status === 'failed'\n ? 'error'\n : build[platform].progressActivityType\n }\n downloadUrl={build[platform].standardDownloadUrl}\n percent={build[platform].progressPercentage}\n platform={platform}\n shouldShowReadyPrefix={\n !(build && ['failed', 'succeeded'].includes(build.status))\n }\n />\n </Box>\n ))}\n </Box>\n </>\n );\n};\n\nBuildProgress.propTypes = {\n build: PropTypes.object.isRequired,\n onBuildFailure: PropTypes.func.isRequired,\n};\n\nexport default BuildProgress;\n", "import { Box, Text } from 'ink';\nimport Link from 'ink-link';\nimport PropTypes from 'prop-types';\nimport { Build } from '@todesktop/shared';\nimport { useEffect } from 'react';\nimport logForCI from '../utilities/logForCI';\nimport useExit from '../utilities/useExit';\nimport fixMacUrl from '../utilities/fixMacUrl';\n\nconst BuildCompleteMessage = ({ build }: { build: Build }) => {\n const exit = useExit();\n let url = build.standardUniversalDownloadUrl;\n\n if (process.platform === 'darwin' && build.mac?.standardDownloadUrl) {\n // Otherwise the download link may link to a Intel file when on Apple Silicon\n url = fixMacUrl(build.mac.standardDownloadUrl);\n }\n\n logForCI(`Build complete! ${url}`);\n\n // On build completion, exit with non-error code\n useEffect(() => {\n if (url) {\n // Just to avoid updating state after exiting the React app\n setTimeout(exit, 10);\n }\n }, [exit, url]);\n\n return (\n <Box marginBottom={1}>\n <Text>\n <Text bold>Build complete!</Text>{' '}\n <Link fallback={false} url={url}>\n {url || ''}\n </Link>\n </Text>\n </Box>\n );\n};\n\nBuildCompleteMessage.propTypes = {\n build: PropTypes.object.isRequired,\n};\n\nexport default BuildCompleteMessage;\n", "import isCi from 'is-ci';\nimport logger from './logger';\n\nexport default function logForCI(...args: unknown[]) {\n logger.info({ args }, 'logForCI');\n\n if (isCi || !process.stdin.isTTY) {\n console.info(...args);\n }\n}\n", "/**\n * Fixes the Mac URL by adding the correct architecture to the URL.\n * @param url The URL to fix.\n * @returns The fixed URL.\n */\nexport default function fixMacUrl(url: string) {\n const baseUrl = new URL(url);\n baseUrl.pathname = `${baseUrl.pathname}/zip/${process.arch}`;\n return baseUrl.href;\n}\n", "import PropTypes from 'prop-types';\nimport { Box, Text } from 'ink';\nimport Link from 'ink-link';\nimport fixMacUrl from '../utilities/fixMacUrl';\n\nconst preLabelMaxWidth = 'More info: '.length;\n\nconst getProgressPercentageLabel = (\n percentage: number,\n activityType?: 'error',\n) => {\n let backgroundColor = 'white';\n let color = 'black';\n\n if (activityType === 'error') {\n backgroundColor = 'red';\n } else if (percentage === 100) {\n backgroundColor = 'green';\n color = 'black';\n }\n\n return (\n <>\n <Text backgroundColor={backgroundColor} color={color}>\n {' '}\n {Math.round(percentage).toString().padStart(2, '0')}%{' '}\n </Text>\n <Text> </Text>\n </>\n );\n};\n\nconst PlatformProgress = ({\n activityName,\n activityType,\n downloadUrl,\n percent,\n platform,\n shouldShowReadyPrefix,\n}) => {\n let progressIndicator;\n if (activityType === 'done') {\n if (platform === 'mac') {\n // Otherwise the download link may link to a Intel file when on Apple Silicon\n downloadUrl = fixMacUrl(downloadUrl);\n }\n progressIndicator = (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text>\n {getProgressPercentageLabel(100)}\n {shouldShowReadyPrefix ? 'Ready!' : ''}\n </Text>\n <Link fallback={false} url={downloadUrl}>\n {downloadUrl}\n </Link>\n </Box>\n );\n } else {\n let activityNameToDisplay = activityName.replace(\n /(?:\\r\\n|\\r|\\n)\\s*/g,\n '\u21B5 ',\n );\n if (activityNameToDisplay.length > 64) {\n activityNameToDisplay = `${activityNameToDisplay.substr(0, 61)}...`;\n }\n\n progressIndicator = (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text>\n {['preparation', 'queue'].includes(activityType)\n ? undefined\n : getProgressPercentageLabel(percent, activityType)}\n {activityNameToDisplay}\n {activityType === 'error' ? '' : <Text>...</Text>}\n </Text>\n </Box>\n );\n }\n return (\n <Box>\n <Box width={preLabelMaxWidth}>\n <Text>{platform[0].toUpperCase() + platform.substr(1)}: </Text>\n </Box>\n {progressIndicator}\n </Box>\n );\n};\n\nPlatformProgress.propTypes = {\n activityName: PropTypes.string.isRequired,\n activityType: PropTypes.string.isRequired,\n downloadUrl: PropTypes.string,\n percent: PropTypes.number.isRequired,\n platform: PropTypes.string.isRequired,\n shouldShowReadyPrefix: PropTypes.bool,\n};\n\nexport default PlatformProgress;\n", "import { Box, Text } from 'ink';\nimport { useEffect, useState } from 'react';\nimport { Build } from '@todesktop/shared';\n\ninterface IntrospectionNoticeProps {\n build: Build;\n}\n\nexport default function IntrospectionNotice({\n build,\n}: IntrospectionNoticeProps) {\n const [hasShownNotice, setHasShownNotice] = useState(false);\n\n useEffect(() => {\n if (hasShownNotice) return;\n\n const { introspect } = build;\n if (!introspect) return;\n\n const readyPlatforms = (['mac', 'windows', 'linux'] as const).filter(\n (platform) => {\n const platformData = introspect[platform];\n return (\n platformData?.enabled &&\n (platformData.shellStatus === 'ready' ||\n platformData.shellStatus === 'disconnected')\n );\n },\n );\n\n if (readyPlatforms.length > 0) {\n setHasShownNotice(true);\n }\n }, [build.introspect, hasShownNotice]);\n\n if (!hasShownNotice) {\n return null;\n }\n\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text color=\"green\">\n \uD83D\uDD0E Introspection tunnel available. Run{' '}\n <Text bold>todesktop introspect {build.id}</Text> in another terminal to\n connect.\n </Text>\n </Box>\n );\n}\n", "export const hasBuildKickedOff = (build) => {\n if (!build) {\n return false;\n }\n return build.status && build.status !== 'preparation';\n};\n\n// NOTE: this relies on Firestore solely\nexport const isBuildCancellable = (build) =>\n hasBuildKickedOff(build) && isBuildRunning(build);\n\nexport const isBuildRunning = (build) => {\n if (!build) {\n return false;\n }\n return (\n !['cancelled', 'succeeded'].includes(build.status) &&\n ['linux', 'mac', 'windows'].some((platform) =>\n isPlatformBuildRunning(build[platform]),\n )\n );\n};\n\nexport const isPlatformBuildRunning = (platformBuild) => {\n if (!platformBuild) {\n return false;\n }\n return (\n !platformBuild.shouldSkip && // <-- Noteworthy\n !['cancelled', 'succeeded'].includes(platformBuild.status) &&\n ('failed' !== platformBuild.status ||\n platformBuild.numberOfAttemptedBuilds < 2)\n );\n};\n", "import { Box, Text } from 'ink';\nimport { useEffect } from 'react';\nimport CliError from '../utilities/CliError';\nimport getCliVersion from '../utilities/getCliVersion';\nimport logger from '../utilities/logger';\nimport useExit from '../utilities/useExit';\n\nexport default function ErrorDisplay({\n commandUsed,\n error,\n}: {\n commandUsed?: string;\n error?: unknown;\n}) {\n const exit = useExit();\n\n const normalizedError = CliError.from(error);\n\n logger.error({ error });\n\n // After an error is set, exit\n useEffect(() => {\n if (!error) {\n return;\n }\n // Just to avoid updating state after exiting the React app\n setTimeout(() => exit(normalizedError), 10);\n }, [exit, error, normalizedError]);\n\n return (\n <>\n <Text backgroundColor=\"red\" color=\"white\">\n {' '}\n ERROR{' '}\n </Text>\n <Text>{normalizedError.message}</Text>\n\n <Box flexDirection=\"column\" marginTop={1}>\n {commandUsed ? (\n <Text dimColor color=\"gray\">\n Command: {commandUsed}\n </Text>\n ) : null}\n <Text dimColor color=\"gray\">\n @todesktop/cli: {getCliVersion()}\n </Text>\n <Text dimColor color=\"gray\">\n Node: {process.version}\n </Text>\n <Text dimColor color=\"gray\">\n cwd: {process.cwd()}\n </Text>\n </Box>\n </>\n );\n}\n", "export default class CliError extends Error {\n type: CliErrorType;\n constructor(\n message: string,\n { cause, type = 'error' }: { cause?: Error; type?: CliErrorType } = {},\n ) {\n super(message, { cause });\n this.type = type;\n }\n\n static from(e: unknown, type: CliErrorType = 'error'): CliError {\n if (e instanceof Error) {\n return new CliError(e.message, { cause: e, type });\n } else if (typeof e === 'string') {\n return new CliError(e, { type });\n } else {\n return new CliError(JSON.stringify(e), { type });\n }\n }\n}\n\nexport type CliErrorType = 'build-error' | 'error';\n", "// libs\nimport { Box, Text, useStdin } from 'ink';\nimport isCi from 'is-ci';\nimport { ReactNode, useEffect, useState } from 'react';\nimport { Build } from '../types';\n\n// components\nimport CancelBuild from './CancelBuild';\nimport Footer from './Footer';\nimport Header from './Header';\n\n// utilities\nimport {\n hasBuildKickedOff,\n isBuildCancellable,\n} from '../utilities/buildStatus';\nimport logger from '../utilities/logger';\nimport useInput from '../utilities/useInput';\n\nconst MainLayout = ({\n appId,\n appName,\n appVersion,\n build,\n children,\n commandUsed,\n hasBuildEverFailed,\n}: {\n appId?: string;\n appName: string;\n appVersion?: string;\n build?: Build;\n children?: ReactNode;\n commandUsed?: string;\n hasBuildEverFailed?: boolean;\n}) => {\n const { isRawModeSupported } = useStdin();\n\n const [\n { canCancelBuild, hasKickedOff, isCancellingBuild, wasCtrlCPressed },\n setState,\n ] = useState({\n canCancelBuild: null,\n hasKickedOff: false,\n isCancellingBuild: false,\n wasCtrlCPressed: false,\n });\n\n useEffect(() => {\n setState((previousState) => ({\n ...previousState,\n hasKickedOff: hasBuildKickedOff(build),\n }));\n }, [build]);\n\n useEffect(() => {\n setState((previousState) => ({\n ...previousState,\n canCancelBuild:\n !isCi &&\n isRawModeSupported &&\n !isCancellingBuild &&\n isBuildCancellable(build),\n }));\n }, [build, isCancellingBuild, isRawModeSupported]);\n\n useInput(\n async (_input, key) => {\n if (key.escape && canCancelBuild) {\n logger.debug('MainLayout component: esc pressed, cancelling build');\n\n setState((previousState) => ({\n ...previousState,\n isCancellingBuild: true,\n }));\n }\n },\n {},\n {\n onCtrlCPressed: () => {\n setState((previousState) => ({\n ...previousState,\n wasCtrlCPressed: true,\n }));\n },\n },\n );\n\n return (\n <>\n <Header build={build} name={appName} version={appVersion} />\n\n {isCancellingBuild ? (\n <Box flexDirection=\"column\" marginBottom={1}>\n <CancelBuild appId={appId} commandUsed={commandUsed} id={build.id} />\n </Box>\n ) : (\n children\n )}\n\n <Footer\n hasBuildEverFailed={hasBuildEverFailed}\n shouldShowCancelBuildInstructions={canCancelBuild && !wasCtrlCPressed}\n uiUrl={build ? build.url : null}\n />\n\n {wasCtrlCPressed && hasKickedOff ? (\n <>\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color=\"gray\">\n The build will continue in the background. To view it, run:\n </Text>\n </Box>\n <Box>\n <Text bold color=\"gray\">\n todesktop builds {build.id}\n </Text>\n </Box>\n </>\n ) : null}\n </>\n );\n};\n\nexport default MainLayout;\n", "// libs\nimport { Text } from 'ink';\nimport { ReactNode, useEffect, useState } from 'react';\n\n// components\nimport ErrorDisplay from './ErrorDisplay';\n\n// utils\nimport getCallableFirebaseFunction from '../utilities/getCallableFirebaseFunction';\nimport logForCI from '../utilities/logForCI';\nimport logger from '../utilities/logger';\nimport useExit from '../utilities/useExit';\n\nconst cancelBuild = getCallableFirebaseFunction('cancelBuild');\n\nconst CancelBuild = ({\n appId,\n children: postCancelContents,\n commandUsed,\n id,\n}: {\n appId: string;\n children?: ReactNode;\n commandUsed: string;\n id: string;\n}) => {\n logger.debug({ appId, buildId: id }, 'CancelBuild component: render');\n\n const exit = useExit();\n const [\n { arbitraryMessageComponent, error, hasCompleted, hasStarted },\n setState,\n ] = useState({\n arbitraryMessageComponent: null,\n error: null,\n hasCompleted: false,\n hasStarted: false,\n });\n\n useEffect(() => {\n if (hasCompleted || hasStarted) {\n return;\n }\n\n setState((previousState) => ({ ...previousState, hasStarted: true }));\n logForCI('Cancelling build...');\n cancelBuild({ appId, buildId: id })\n .then((result) => {\n logger.debug(\n { appId, buildId: id, result },\n 'CancelBuild component: cancellation request complete',\n );\n setState((previousState) => ({ ...previousState, hasCompleted: true }));\n })\n .catch((e) => {\n logger.debug(\n { appId, buildId: id, code: e.code },\n 'CancelBuild component: cancellation request failed',\n );\n logger.error(e);\n const stateUpdates = {\n arbitraryMessageComponent: undefined,\n error: undefined,\n hasCompleted: true,\n };\n\n if (e.code === 'internal') {\n stateUpdates.error = e;\n } else {\n stateUpdates.arbitraryMessageComponent = (\n <Text>\n <Text color=\"red\">Cannot cancel build ({id}).</Text> {e.message}\n </Text>\n );\n }\n\n setState((prevState) => ({\n ...prevState,\n ...stateUpdates,\n }));\n });\n }, [appId, id, hasStarted, hasCompleted]);\n\n // Exit when done, unless there are custom contents to display\n useEffect(() => {\n if (hasCompleted && !postCancelContents) {\n logger.debug(\n 'CancelBuild component: exiting now that build is cancelled',\n );\n exit();\n }\n }, [postCancelContents, exit, hasCompleted]);\n\n if (error) {\n error.message = `Failed to cancel build (${id}). ${error.message}`;\n return <ErrorDisplay commandUsed={commandUsed} error={error} />;\n }\n\n if (arbitraryMessageComponent) {\n return arbitraryMessageComponent;\n }\n\n if (hasCompleted) {\n return postCancelContents ? (\n <>{postCancelContents}</>\n ) : (\n <Text>Build cancelled</Text>\n );\n }\n\n return <Text>Cancelling build ({id})...</Text>;\n};\n\nexport default CancelBuild;\n", "import { Box, Text } from 'ink';\nimport Link from 'ink-link';\nimport PropTypes from 'prop-types';\n\nconst Footer = ({\n hasBuildEverFailed,\n shouldShowCancelBuildInstructions,\n uiUrl,\n}) => {\n if (!uiUrl) {\n return null;\n }\n\n let buildFailedMessage;\n if (hasBuildEverFailed) {\n buildFailedMessage = <Text color=\"red\">An error has occurred. </Text>;\n }\n\n return (\n <Box flexDirection=\"column\">\n <Box flexDirection=\"column\">\n <Text bold>{buildFailedMessage}See web UI for more information: </Text>\n <Text>\n <Link fallback={false} url={uiUrl}>\n {uiUrl}\n </Link>\n </Text>\n </Box>\n {shouldShowCancelBuildInstructions ? (\n <Text color=\"gray\">\n <Text bold>[esc]:</Text> cancel build\n </Text>\n ) : null}\n </Box>\n );\n};\n\nFooter.propTypes = {\n hasBuildEverFailed: PropTypes.bool,\n shouldShowCancelBuildInstructions: PropTypes.bool,\n uiUrl: PropTypes.string,\n};\n\nexport default Footer;\n", "import { Box, Text } from 'ink';\nimport PropTypes from 'prop-types';\n\nconst getText = (build, name, version) => {\n const suffix = name + (version ? ` v${version}` : '');\n\n if (build && ['cancelled', 'succeeded', 'failed'].includes(build.status)) {\n if (build.status === 'succeeded') {\n return <Text>\u2705 {suffix}</Text>;\n } else if (build.status === 'failed') {\n return <Text>\u274C {suffix}</Text>;\n } else if (build.status === 'cancelled') {\n return (\n <Text>\n <Text bold color=\"gray\">\n X\n </Text>{' '}\n {suffix}\n </Text>\n );\n }\n } else {\n return <Text>{suffix}</Text>;\n }\n};\n\nconst Header = ({ build, name, version }) => (\n <Box marginBottom={1}>{getText(build, name, version)}</Box>\n);\n\nHeader.propTypes = {\n build: PropTypes.object,\n name: PropTypes.string.isRequired,\n version: PropTypes.string,\n};\n\nexport default Header;\n", "import { Box, Text } from 'ink';\nimport ProgressBar from './ProgressBar';\nimport PropTypes from 'prop-types';\n\nconst Preparation = ({ progressPercentage, stageLabel, uploadedSize }) => {\n return (\n <Box marginBottom={1}>\n <Text>{stageLabel}: </Text>\n <Box flexDirection=\"column\">\n <ProgressBar left={11} percent={progressPercentage} />\n {uploadedSize ? <Text>{uploadedSize}</Text> : undefined}\n </Box>\n </Box>\n );\n};\n\nPreparation.propTypes = {\n progressPercentage: PropTypes.number.isRequired,\n stageLabel: PropTypes.string.isRequired,\n uploadedSize: PropTypes.string,\n};\n\nexport default Preparation;\n", "import PropTypes from 'prop-types';\nimport Gradient from 'ink-gradient';\nimport Bar from '../../../libs/ink-progress-bar';\n\ninterface ProgressBarProps {\n left?: number;\n right?: number;\n percent: number;\n}\n\nconst ProgressBar = ({ left, right, percent }: ProgressBarProps) => (\n <Gradient colors={['gray', 'white']}>\n <Bar left={left} right={right} percent={percent} />\n </Gradient>\n);\n\nProgressBar.propTypes = {\n left: PropTypes.number,\n right: PropTypes.number,\n // 0 -> 1\n percent: PropTypes.number.isRequired,\n};\n\nexport default ProgressBar;\n", "/**\n * Ported from https://github.com/brigand/ink-progress-bar/blob/master/src/index.js\n * `ink-progress-bar` doesn't list react or ink as a direct dependency which messes up\n * installation for users of yarn v2+.\n */\nimport { Text } from 'ink';\n\nconst Bar = ({\n percent = 1,\n columns = 0,\n left = 0,\n right = 0,\n character = '\u2588',\n rightPad = false,\n ...rest\n}: {\n percent?: number;\n columns?: number;\n left?: number;\n right?: number;\n character?: string;\n rightPad?: boolean;\n}) => {\n const getString = () => {\n const screen = columns || process.stdout.columns || 80;\n const space = screen - right - left;\n const max = Math.min(Math.floor(space * percent), space);\n const chars = character.repeat(max);\n\n if (!rightPad) {\n return chars;\n }\n\n return chars + ' '.repeat(space - max);\n };\n\n return <Text {...rest}>{getString()}</Text>;\n};\n\nexport default Bar;\n", "// libs\n\nimport axios from 'axios';\nimport prettyBytes from 'pretty-bytes';\n\n// utils\nimport { currentUser } from '../../../utilities/firestore';\nimport logForCI from '../../../utilities/logForCI';\nimport postToFirebaseFunction from '../../../utilities/postToFirebaseFunction';\nimport getProjectConfig from '../../../utilities/projectConfig/getProjectConfig';\nimport shouldExitOnBuildFailure from '../../../utilities/shouldExitOnBuildFailure';\nimport getAppPkgJson from './getPackageJson';\nimport getVersionControlInfo from './getVersionControlInfo';\nimport spyBuild from './spyBuild';\nimport { BuildFlags, BuildState } from './types';\nimport uploadApplicationSource from './uploadApplicationSource';\n\nexport default async function runBuild({\n configPath,\n updateState,\n flags,\n}: {\n configPath?: string;\n flags: BuildFlags;\n updateState: (state: Partial<BuildState>) => void;\n}) {\n logForCI('Getting application information...');\n\n if (flags.breakpointPlan) {\n updateState({ breakpointPlan: flags.breakpointPlan });\n }\n const primaryUserId = currentUser()?.uid;\n\n // This will throw if validation fails or project root can not be found:\n const { config, unprocessedConfig } = getProjectConfig(configPath, {\n build: flags,\n });\n const appId = config.id;\n const appPkgJson = getAppPkgJson({ config });\n\n const buildObserver = spyBuild();\n buildObserver.onUpdate(({ build }) => updateState({ build }));\n\n updateState({\n appId,\n appPkg: appPkgJson,\n onUnmount: () => buildObserver.unsubscribe(),\n preparationStageLabel: 'Preparing',\n preparationProgress: 0.02,\n state: 'preparing',\n });\n logForCI('Preparing...');\n\n // Create build in Firebase\n let buildId: string;\n try {\n const prepareResult = await postToFirebaseFunction('prepareNewBuild', {\n appPkgName: appPkgJson.name,\n appPkgProductName: appPkgJson.productName,\n appVersion: appPkgJson.version,\n id: config.id,\n onBuildFinishedWebhook: flags.onBuildFinishedWebhook,\n projectConfig: unprocessedConfig,\n shouldCodeSign: flags.shouldCodeSign !== false,\n shouldRelease: false,\n userId: primaryUserId,\n versionControlInfo: await getVersionControlInfo(config.appPath),\n introspect: flags.introspect,\n breakpoints: flags.breakpointPlan?.breakpoints,\n idToken: await currentUser()?.getIdToken(),\n });\n buildId = prepareResult.appData.meta.currentBuildProgress.id;\n\n buildObserver.subscribe({ appId, buildId, userId: prepareResult.userId });\n await buildObserver.whenFirstUpdate();\n } catch (e) {\n throw addErrorMessage(e, 'Failed while preparing new build');\n }\n\n logForCI(`Retrieved build ID: ${buildId}`);\n updateState({\n preparationProgress: 0.05,\n preparationStageLabel: 'Uploading',\n });\n logForCI('Uploading...');\n\n let sourceArchiveDetails: unknown;\n try {\n sourceArchiveDetails = await uploadApplicationSource({\n appId,\n appPkgJson,\n buildId,\n config,\n onProgress(progress: number, uploadedSize?: number) {\n // Upload is treated as 95% of preparation\n const preparationState = {\n preparationProgress: 0.05 + (progress / 100) * 0.95,\n preparationUploadedSize: '',\n };\n\n if (uploadedSize) {\n preparationState.preparationUploadedSize = prettyBytes(uploadedSize);\n }\n\n updateState(preparationState);\n },\n });\n } catch (e) {\n throw addErrorMessage(e, 'Failed while uploading application source');\n }\n\n updateState({ state: 'building' });\n logForCI('Kicking off build...');\n\n try {\n await postToFirebaseFunction('kickOffBuild', {\n appBuilderLibVersion: config.appBuilderLibVersion,\n appId,\n appPkgName: appPkgJson.name,\n appVersion: appPkgJson.version,\n buildId,\n idToken: await currentUser()?.getIdToken(),\n linuxImageVersion: config.linux?.imageVersion,\n nodeVersion: config.nodeVersion,\n npmVersion: config.npmVersion,\n pnpmVersion: config.pnpmVersion,\n sourceArchiveDetails,\n userId: primaryUserId,\n });\n } catch (e) {\n throw addErrorMessage(e, 'Failed while kicking off build');\n }\n\n if (flags.exitAfterUploading) {\n updateState({ state: 'exit-after-uploading' });\n return;\n }\n\n const build = await buildObserver.whenSettled();\n if (build?.status === 'failed' && shouldExitOnBuildFailure(build)) {\n updateState({ state: 'build-failed' });\n }\n}\n\nfunction addErrorMessage(e: unknown, message: string): Error {\n let originalMessage = '';\n if (axios.isAxiosError(e) && e.response?.data?.message) {\n originalMessage = e.response.data.message;\n } else if (e instanceof Error) {\n originalMessage = e.message;\n } else if (e && typeof e === 'object') {\n originalMessage = JSON.stringify(e);\n } else {\n originalMessage = String(e);\n }\n\n const newError = new Error(`${message}; ${originalMessage}`);\n if (e instanceof Error) {\n newError.stack = e.stack;\n }\n\n return newError;\n}\n", "import axios from 'axios';\nimport getEnvironmentVariables from './getEnvironmentVariables';\nimport logger from './logger';\n\nconst { TODESKTOP_CLI_FIREBASE_FUNCTIONS_BASE } = getEnvironmentVariables();\n\nexport default async function postToFirebaseFunction(\n functionName: string,\n body = {},\n config = {},\n) {\n logger.debug(\n { scrub: { functionName, body, config } },\n 'postToFirebaseFunction',\n );\n\n let baseUrl = TODESKTOP_CLI_FIREBASE_FUNCTIONS_BASE;\n if (!baseUrl.endsWith('/')) {\n baseUrl += '/';\n }\n\n try {\n const response = await axios.post(\n `${baseUrl}${functionName}`,\n body,\n config,\n );\n\n logger.debug(\n { scrub: { responseData: response.data } },\n 'postToFirebaseFunction: success',\n );\n return response.data;\n } catch (e) {\n logger.error({ error: e }, 'postToFirebaseFunction: error');\n throw e;\n }\n}\n", "import findUp from 'find-up';\nimport { existsSync } from 'fs';\nimport { dirname, resolve } from 'path';\nimport { BuildFlags } from '../../commands/build/utilities/types';\nimport { ProjectConfig } from '../../types';\nimport logger from '../logger';\nimport loadConfig from './loadConfig';\nimport resolveConfigPaths from './resolveConfigPaths';\nimport validateConfig from './validateConfig';\nimport computeFullProjectConfig from './computeFullProjectConfig';\n\nexport default function getProjectConfig(\n configPath?: string,\n flags?: { build?: Pick<BuildFlags, 'ignoreExtendsErrors'> },\n): {\n config: ProjectConfig;\n unprocessedConfig: ProjectConfig;\n projectRoot: string;\n} {\n // If no config path is provided, we'll try to find one\n if (!configPath) {\n logger.debug('No config path provided, searching for one');\n configPath = findUp.sync([\n 'todesktop.json',\n 'todesktop.js',\n 'todesktop.ts',\n ]);\n if (!configPath) {\n throw new Error(\n 'Can not find todesktop.json, todesktop.js, or todesktop.ts in this folder or any parent folders',\n );\n }\n } else {\n configPath = resolve(process.cwd(), configPath);\n\n // If the config path is provided\n if (!existsSync(configPath)) {\n logger.error('Provided config path does not exist');\n throw new Error(`Config file not found at ${configPath}`);\n }\n }\n\n const projectRoot = dirname(configPath);\n\n // This will throw if it's not valid JSON\n const partialConfig = loadConfig(configPath);\n\n // compute the full project config\n const config = computeFullProjectConfig(partialConfig, projectRoot, flags);\n\n // This will throw if invalid\n validateConfig({ config, projectRoot });\n\n const result = resolveConfigPaths({ config, projectRoot });\n\n // Used by `tdutils cli`\n if (process.env.TODESKTOP_CLI_APP_ID) {\n result.id = process.env.TODESKTOP_CLI_APP_ID;\n }\n\n return { config: result, unprocessedConfig: config, projectRoot };\n}\n", "// This is its own file just so we can mock it more easily\nimport { extname } from 'path';\nimport { PartialProjectConfig } from '../../types';\nimport loadTypeScriptConfig from './loadTypeScriptConfig';\n\nexport default function loadConfig(configPath: string): PartialProjectConfig {\n const extension = extname(configPath);\n\n if (extension === '.ts') {\n return loadTypeScriptConfig(configPath);\n }\n\n // For .json and .js files, use the standard require\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require(configPath);\n}\n", "/* eslint-disable @typescript-eslint/no-require-imports */\n\nimport { resolve } from 'path';\nimport { PartialProjectConfig } from '../../types';\nimport logger from '../logger';\n\n/**\n * Loads and compiles a TypeScript configuration file using the user's local TypeScript installation\n */\nexport default function loadTypeScriptConfig(\n configPath: string,\n): PartialProjectConfig {\n const projectRoot = process.cwd();\n\n try {\n logger.debug(`Attempting to load TypeScript config from: ${configPath}`);\n\n // Try to resolve TypeScript from the user's project\n let typescript: typeof import('typescript');\n try {\n // First try to require from the user's project directory\n const tsPath = resolve(projectRoot, 'node_modules', 'typescript');\n typescript = require(tsPath);\n logger.debug(`Found TypeScript in user's project at: ${tsPath}`);\n } catch {\n // Fall back to globally installed TypeScript or our dev dependency\n try {\n // Dynamic require to prevent esbuild from bundling typescript (9MB)\n const moduleName = 'typescript';\n typescript = require(moduleName);\n logger.debug('Using globally available TypeScript installation');\n } catch {\n throw new Error(\n `TypeScript is required to load .ts configuration files but was not found. ` +\n `Please install TypeScript in your project: npm install --save-dev typescript`,\n );\n }\n }\n\n // Read the TypeScript file\n\n const fs = require('fs');\n const sourceCode = fs.readFileSync(configPath, 'utf8');\n\n // Compile TypeScript to JavaScript\n const result = typescript.transpile(sourceCode, {\n target: typescript.ScriptTarget.ES2018,\n module: typescript.ModuleKind.CommonJS,\n moduleResolution: typescript.ModuleResolutionKind.NodeJs,\n esModuleInterop: true,\n allowSyntheticDefaultImports: true,\n resolveJsonModule: true,\n declaration: false,\n sourceMap: false,\n });\n\n // Create a temporary module to evaluate the compiled JavaScript\n const module = { exports: {} };\n const moduleWrapper = new Function(\n 'module',\n 'exports',\n 'require',\n '__filename',\n '__dirname',\n result,\n );\n\n // Execute the compiled code\n moduleWrapper(\n module,\n module.exports,\n (id: string) => {\n // Custom require function that resolves relative to the config file\n if (id.startsWith('.')) {\n return require(resolve(configPath, '..', id));\n }\n return require(id);\n },\n configPath,\n resolve(configPath, '..'),\n );\n\n // Extract the configuration\n const config = (module.exports as any).default || module.exports;\n\n if (!config || typeof config !== 'object') {\n throw new Error(\n `TypeScript configuration file must export a configuration object. ` +\n `Received: ${typeof config}`,\n );\n }\n\n logger.debug('Successfully loaded and compiled TypeScript configuration');\n return config as PartialProjectConfig;\n } catch (error) {\n logger.error(\n `Failed to load TypeScript configuration from ${configPath}:`,\n error,\n );\n\n if (error instanceof Error) {\n // Provide more helpful error messages for common issues\n if (error.message.includes('Cannot find module')) {\n throw new Error(\n `Failed to load TypeScript configuration: ${error.message}. ` +\n `Make sure all imported modules are installed.`,\n );\n } else if (error.message.includes('TypeScript is required')) {\n throw error; // Re-throw our custom TypeScript missing error\n } else {\n throw new Error(\n `Failed to compile TypeScript configuration: ${error.message}. ` +\n `Please check your todesktop.ts file for syntax errors.`,\n );\n }\n }\n\n throw error;\n }\n}\n", "import * as path from 'path';\nimport { ProjectConfig } from '../../types';\n\nexport default function resolveConfigPaths({\n config,\n projectRoot,\n}: {\n config: ProjectConfig;\n projectRoot: string;\n}): ProjectConfig {\n const appRoot = config.appPath\n ? path.isAbsolute(config.appPath)\n ? config.appPath\n : path.join(projectRoot, config.appPath)\n : projectRoot;\n\n const transformIfExists = (value, transformer) =>\n value ? transformer(value) : undefined;\n const resolvePath = (filePath) =>\n path.isAbsolute(filePath) ? filePath : path.join(projectRoot, filePath);\n\n const result = {\n ...config,\n appPath: appRoot,\n icon: resolvePath(config.icon),\n };\n\n if (config.extraContentFiles) {\n result.extraContentFiles = transformIfExists(\n config.extraContentFiles,\n (extraContentFiles) =>\n extraContentFiles.map((extraContentFile) => ({\n ...extraContentFile,\n from: resolvePath(extraContentFile.from),\n })),\n );\n }\n\n if (config.extraResources) {\n result.extraResources = transformIfExists(\n config.extraResources,\n (extraResources) =>\n extraResources.map((extraResource) => ({\n ...extraResource,\n from: resolvePath(extraResource.from),\n })),\n );\n }\n\n if (config.linux) {\n result.linux = { ...config.linux };\n\n if (config.linux.icon) {\n result.linux.icon = resolvePath(config.linux.icon);\n }\n }\n\n if (config.mac) {\n result.mac = { ...config.mac };\n\n if (config.mac.entitlements) {\n result.mac.entitlements = resolvePath(config.mac.entitlements);\n }\n\n if (config.mac.entitlementsInherit) {\n result.mac.entitlementsInherit = resolvePath(\n config.mac.entitlementsInherit,\n );\n }\n\n if (config.mac.requirements) {\n result.mac.requirements = resolvePath(config.mac.requirements);\n }\n\n if (config.mac.icon) {\n result.mac.icon = resolvePath(config.mac.icon);\n }\n }\n\n if (config.mas) {\n result.mas = { ...config.mas };\n\n if (config.mas.entitlements) {\n result.mas.entitlements = resolvePath(config.mas.entitlements);\n }\n\n if (config.mas.entitlementsInherit) {\n result.mas.entitlementsInherit = resolvePath(\n config.mas.entitlementsInherit,\n );\n }\n\n if (config.mas.provisioningProfile) {\n result.mas.provisioningProfile = resolvePath(\n config.mas.provisioningProfile,\n );\n }\n }\n\n if (config.dmg) {\n if (config.dmg.background) {\n result.dmg.background = resolvePath(config.dmg.background);\n }\n }\n\n if (config.windows) {\n result.windows = { ...config.windows };\n\n if (config.windows.icon) {\n result.windows.icon = resolvePath(config.windows.icon);\n }\n }\n\n return result;\n}\n", "import Ajv from 'ajv';\nimport addFormats from 'ajv-formats';\nimport betterAjvErrors from 'better-ajv-errors';\nimport { ProjectConfig } from '../../types';\nimport addCustomKeywords from './addCustomKeywords';\nimport getFullSchema from './schema/full';\n\nexport default function validateConfig({\n config,\n projectRoot,\n}: {\n config: ProjectConfig;\n projectRoot: string;\n}) {\n const context = { projectRoot };\n const schema = getFullSchema(context);\n\n const ajv = new Ajv({ allErrors: true });\n addFormats(ajv);\n addCustomKeywords(ajv, context);\n const validate = ajv.compile(schema);\n\n if (config.productName) {\n throw new Error(\n `todesktop.json invalid.\n\nThe \"productName\" property is no longer supported in todesktop.json. Please remove it and add it to your app's package.json instead.\n\nWe made this change because Electron also uses the \"productName\" if it exists in your app's package.json. If you do not add it to your package.json, your app name will default to the value of the \"name\" property in your package.json.`,\n );\n }\n\n if (!validate(config)) {\n const output = betterAjvErrors(schema, config, validate.errors, {\n indent: 2,\n });\n\n throw new Error(\n `todesktop.json invalid. \\nLearn more here: https://www.npmjs.com/package/@todesktop/cli#project-configuration-todesktopjson \\n\\n${output}`,\n );\n }\n}\n", "/*\n See https://ajv.js.org/keywords.html\n*/\nimport Ajv, {\n FuncKeywordDefinition,\n SchemaValidateFunction,\n ValidationError,\n} from 'ajv';\nimport emailRegex from 'email-regex';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport parseAuthor from 'parse-author';\nimport * as semver from 'semver';\nimport validatePackageJSON from './validatePackageJSON';\nimport semverValidRange from 'semver/ranges/valid';\n\nexport default (ajv: Ajv, context) => {\n const addKeyword = (def: FuncKeywordDefinition) => {\n const validate: SchemaValidateFunction = (schema, data) => {\n try {\n return (def.validate as SchemaValidateFunction)(schema, data);\n } catch (e) {\n if (e instanceof ValidationError) {\n validate.errors = e.errors;\n return false;\n }\n\n throw e;\n }\n };\n\n ajv.addKeyword({ ...def, validate });\n };\n\n addKeyword({\n keyword: 'validSemver',\n type: 'string',\n validate: (_schema, data) => {\n if (!semverValidRange(data)) {\n throw new ValidationError([\n {\n keyword: 'validSemver',\n message: `${data} must be a valid semantic version or version range`,\n },\n ]);\n }\n\n return true;\n },\n });\n\n // validate that dependencies object doesn't contain packageNames in the blacklist\n addKeyword({\n keyword: 'excludedDependencies',\n validate: (schema, data) => {\n const matchingPackages = schema.blacklist.filter(\n (packageName) => data[packageName],\n );\n\n if (matchingPackages.length) {\n throw new ValidationError([\n {\n keyword: 'Dependency',\n message: `${matchingPackages.join(', ')} should not be in ${\n schema.dependencyKey\n }`,\n instancePath: `/${schema.dependencyKey}`,\n },\n ]);\n }\n\n return true;\n },\n });\n\n // TODO: Remove if isn't used\n addKeyword({\n keyword: 'email',\n type: 'string',\n validate: (_schema, data) => {\n if (!emailRegex({ exact: true }).test(data)) {\n throw new ValidationError([\n {\n keyword: 'email',\n message: 'invalid',\n },\n ]);\n }\n return true;\n },\n });\n\n addKeyword({\n keyword: 'file',\n type: 'string',\n validate: (schema, data) => {\n const mustBeDirectory =\n schema.mustBeDirectory || schema.mustBeElectronApp;\n\n // Value is empty\n if (!data.trim().length) {\n if (schema.isOptional) {\n return true;\n }\n\n throw new ValidationError([\n {\n keyword: schema.mustBeDirectory ? 'Directory' : 'File',\n message: 'is empty',\n },\n ]);\n }\n\n const filePath = path.isAbsolute(data)\n ? data\n : path.join(schema.from, data);\n\n // Isn't in project\n if (path.relative(schema.from, filePath).startsWith('..')) {\n throw new ValidationError([\n {\n keyword: mustBeDirectory ? 'Directory' : 'File',\n message: `is not in project (${filePath})`,\n },\n ]);\n }\n\n // Extension isn't allowed\n if (\n schema.extensions &&\n !schema.extensions.includes(path.extname(filePath).substr(1))\n ) {\n throw new ValidationError([\n {\n keyword: 'File extension',\n message: `invalid. ${path.extname(data)} Must be${\n schema.extensions > 1 ? 'one of the following:' : ''\n } \"${schema.extensions.join('\", \"')}\"`,\n },\n ]);\n }\n\n // Doesn't exist\n if (!fs.existsSync(filePath)) {\n throw new ValidationError([\n {\n keyword: mustBeDirectory ? 'Directory' : 'File',\n message: `does not exist (${filePath})`,\n },\n ]);\n }\n\n const stats = fs.statSync(filePath);\n\n if (mustBeDirectory && stats.isFile()) {\n throw new ValidationError([\n {\n keyword: 'Directory',\n message: `must be a directory, not a file (${filePath})`,\n },\n ]);\n } else if (schema.mustBeFile && stats.isDirectory()) {\n throw new ValidationError([\n {\n keyword: 'File',\n message: `must be a file, not a directory (${filePath})`,\n },\n ]);\n }\n\n if (schema.mustBeElectronApp) {\n const appRoot = path.resolve(filePath);\n const pkgPath = path.join(appRoot, 'package.json');\n\n if (!fs.existsSync(pkgPath)) {\n throw new ValidationError([\n {\n keyword: 'App',\n message: `invalid. There is no package.json at ${pkgPath}`,\n },\n ]);\n }\n\n let pkg;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n pkg = require(pkgPath);\n } catch {\n throw new ValidationError([\n {\n keyword: 'App',\n message: `invalid. Invalid JSON in package.json (${pkgPath})`,\n },\n ]);\n }\n\n context.projectRoot = appRoot;\n // This throws and bubbles all the way up to the user\n validatePackageJSON(pkg, pkgPath, context);\n\n // Validate that either an index.js or valid \"main\" property exists\n const mainFilePath = pkg.main;\n if (mainFilePath) {\n const resolvedMainFilePath = path.join(appRoot, mainFilePath);\n if (!fs.existsSync(resolvedMainFilePath)) {\n throw new ValidationError([\n {\n keyword: 'App',\n message: `invalid. The \"main\" file specified in your package.json (${mainFilePath}) does not exist (${resolvedMainFilePath})`,\n },\n ]);\n }\n } else if (!fs.existsSync(path.join(appRoot, 'index.js'))) {\n throw new ValidationError([\n {\n keyword: 'App',\n message:\n 'invalid. There is neither a \"main\" property in your package.json nor an index.js at the root of your app',\n },\n ]);\n }\n }\n\n return true;\n },\n errors: true,\n });\n\n addKeyword({\n keyword: 'npmAuthor',\n validate: (_schema, data) => {\n const dataType = typeof data;\n if (dataType === 'undefined') {\n return true;\n } else if (dataType === 'string') {\n const parsedAuthor = parseAuthor(data);\n if (!parsedAuthor || !parsedAuthor.email) {\n throw new ValidationError([\n {\n keyword: 'author',\n message:\n 'invalid. If you\\'re using a string, it must look something like \"Barney Rubble <b@rubble.com>\", see https://docs.npmjs.com/files/package.json#people-fields-author-contributors',\n },\n ]);\n }\n } else if (dataType === 'object') {\n if (typeof data.name === 'undefined') {\n throw new ValidationError([\n {\n keyword: 'author',\n message: `invalid. \"name\" property is missing.`,\n },\n ]);\n } else {\n if (typeof data.name !== 'string') {\n throw new ValidationError([\n {\n keyword: 'author',\n message: `.name invalid. It must be a string`,\n },\n ]);\n }\n\n if (typeof data.email === 'undefined') {\n throw new ValidationError([\n {\n keyword: 'author',\n message: `invalid. \"email\" property is missing.`,\n },\n ]);\n } else if (typeof data.email === 'string') {\n if (!emailRegex({ exact: true }).test(data.email)) {\n throw new ValidationError([\n {\n keyword: 'author',\n message: `.email invalid. It does not look like an email.`,\n },\n ]);\n }\n } else {\n throw new ValidationError([\n {\n keyword: 'author',\n message: `.email invalid. It must be a string.`,\n },\n ]);\n }\n }\n } else {\n // Neither object nor string\n throw new ValidationError([\n {\n keyword: 'author',\n message:\n 'invalid. It must either be an object or string. See https://docs.npmjs.com/files/package.json#people-fields-author-contributors',\n },\n ]);\n }\n\n return true;\n },\n errors: true,\n });\n\n addKeyword({\n keyword: 'semanticVersion',\n type: 'string',\n validate: (schema, data) => {\n const keyword =\n (schema.packageName ? `${schema.packageName} ` : '') + 'version';\n\n if (!(semver.valid(data) || semver.validRange(data))) {\n throw new ValidationError([\n {\n keyword,\n message:\n 'invalid. It must be a semantic version (see https://semver.org/)',\n },\n ]);\n }\n\n if (\n schema.mustBeExact &&\n (data.startsWith('~') || data.startsWith('^'))\n ) {\n throw new ValidationError([\n {\n keyword,\n message:\n 'invalid. It must be an exact version. Good: 9.0.0. Bad: ^9.0.0',\n },\n ]);\n }\n return true;\n },\n });\n};\n", "import Ajv from 'ajv';\nimport addFormats from 'ajv-formats';\nimport betterAjvErrors from 'better-ajv-errors';\nimport addCustomKeywords from './addCustomKeywords';\nimport getPackageJsonSchema from './schema/packageJSON';\n\nexport default (pkg, pkgPath, context) => {\n const ajv = new Ajv({ allErrors: true });\n addFormats(ajv);\n addCustomKeywords(ajv, context);\n const schema = getPackageJsonSchema(context);\n const validate = ajv.compile(schema);\n if (!validate(pkg)) {\n const output = betterAjvErrors(schema, pkg, validate.errors, {\n indent: 2,\n });\n\n const error = new Error(`package.json invalid (${pkgPath}); \\n${output}`);\n (error as any).isValidationError = true;\n // This throws and bubbles all the way up to the user\n throw error;\n }\n};\n", "export default (context) => {\n return {\n type: 'object',\n required: [\n 'author',\n 'dependencies',\n 'devDependencies',\n 'homepage',\n 'name',\n 'version',\n ],\n properties: {\n author: {\n npmAuthor: {},\n },\n dependencies: {\n type: 'object',\n required: ['@todesktop/runtime'],\n // custom keyword that checks package names aren't included in dependencies\n excludedDependencies: {\n dependencyKey: 'dependencies',\n blacklist: ['@todesktop/cli'],\n },\n properties: {\n '@todesktop/runtime': {\n type: 'string',\n },\n },\n },\n devDependencies: {\n type: 'object',\n required: ['electron'],\n properties: {\n electron: {\n oneOf: [\n {\n type: 'string',\n semanticVersion: {\n packageName: 'electron',\n mustBeExact: true,\n },\n },\n {\n type: 'string',\n pattern: '^catalog:',\n },\n ],\n },\n },\n },\n name: {\n type: 'string',\n minLength: 1,\n },\n scripts: {\n type: 'object',\n properties: {\n 'todesktop:beforeInstall': {\n type: 'string',\n file: {\n from: context.projectRoot,\n mustBeFile: true,\n },\n },\n 'todesktop:beforeBuild': {\n type: 'string',\n file: {\n from: context.projectRoot,\n mustBeFile: true,\n },\n },\n 'todesktop:afterPack': {\n type: 'string',\n file: {\n from: context.projectRoot,\n mustBeFile: true,\n },\n },\n },\n },\n version: {\n type: 'string',\n semanticVersion: {},\n },\n },\n };\n};\n", "{\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"if\": {\n \"required\": [\"extends\"]\n },\n \"then\": {\n \"required\": [\"id\"]\n },\n \"else\": {\n \"required\": [\"id\", \"icon\", \"schemaVersion\"]\n },\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\",\n \"description\": \"To enable JSON validation and IntelliSense for your `todesktop.json` file in compatible code editors, your editor needs to know where the schema file is located. You can add a `$schema` property to the top of your `todesktop.json` file, pointing to a version of the schema. This can be a local path or a hosted URL.\",\n \"examples\": [\n \"https://unpkg.com/@todesktop/cli@1.12.5/schemas/schema.json\",\n \"./node_modules/@todesktop/cli/schemas/schema.json\"\n ]\n },\n \"appBuilderLibVersion\": {\n \"$ref\": \"#/definitions/appBuilderLibVersionProperty\"\n },\n \"appId\": { \"$ref\": \"#/definitions/appIdProperty\" },\n \"appFiles\": { \"$ref\": \"#/definitions/appFilesProperty\" },\n \"appProtocolScheme\": { \"$ref\": \"#/definitions/appProtocolSchemeProperty\" },\n \"appPath\": { \"$ref\": \"#/definitions/appPathProperty\" },\n \"bundleWorkspacePackages\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"Useful when your application is a monorepo (e.g. pnpm workspaces). You can configure whether the CLI bundles workspace packages alongside the app upload. When enabled, workspace dependencies referenced via `workspace:` or local `file:` specifiers are bundled with your application upload and dependency ranges are rewritten to `file:` paths so they install deterministically on the build servers.\",\n \"examples\": [\"{\\\"enabled\\\":true}\"],\n \"default\": { \"enabled\": false },\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Enable automatic bundling of workspace packages for this project.\"\n }\n }\n },\n \"bytenode\": { \"$ref\": \"#/definitions/bytenodeConfigProperty\" },\n \"asar\": { \"$ref\": \"#/definitions/asarProperty\" },\n \"asarUnpack\": { \"$ref\": \"#/definitions/asarUnpackProperty\" },\n \"buildVersion\": { \"$ref\": \"#/definitions/buildVersionProperty\" },\n \"copyright\": { \"$ref\": \"#/definitions/copyrightProperty\" },\n \"electronMirror\": { \"$ref\": \"#/definitions/electronMirrorProperty\" },\n \"electronVersion\": { \"$ref\": \"#/definitions/electronVersionProperty\" },\n \"extends\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"This is the path to a base configuration file (`.json` or `.js`). This is especially useful for configuration sharing between different environments (e.g., staging and production). The base configuration file can be a relative path from the project root or an absolute path.\",\n \"examples\": [\"./todesktop.base.json\", \"./todesktop.base.js\"],\n \"default\": null\n },\n \"extraContentFiles\": { \"$ref\": \"#/definitions/extraContentFilesProperty\" },\n \"extraResources\": { \"$ref\": \"#/definitions/extraResourcesProperty\" },\n \"fileAssociations\": { \"$ref\": \"#/definitions/fileAssociationsProperty\" },\n \"updateUrlBase\": { \"$ref\": \"#/definitions/updateUrlBaseProperty\" },\n \"filesForDistribution\": {\n \"$ref\": \"#/definitions/filesForDistributionProperty\"\n },\n \"icon\": {\n \"type\": \"string\",\n \"description\": \"The path to your application's desktop icon. It must be an ICNS or PNG.\",\n \"examples\": [\"./appIcon.png\"],\n \"file\": {\n \"extensions\": [\"icns\", \"png\"],\n \"mustBeFile\": true\n },\n \"minLength\": 3\n },\n \"linux\": { \"$ref\": \"#/definitions/linuxConfigProperty\" },\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Your ToDesktop application ID. This is used to identify your app. This would have been generated when you first created your ToDesktop application via the web interface.\",\n \"examples\": [\"2005223bd1nqpl7\"]\n },\n \"includeSubNodeModules\": {\n \"$ref\": \"#/definitions/includeSubNodeModulesProperty\"\n },\n \"mac\": { \"$ref\": \"#/definitions/macConfigProperty\" },\n \"mas\": { \"$ref\": \"#/definitions/masConfigProperty\" },\n \"dmg\": { \"$ref\": \"#/definitions/dmgConfigProperty\" },\n \"nodeVersion\": { \"$ref\": \"#/definitions/nodeVersionProperty\" },\n \"npmVersion\": { \"$ref\": \"#/definitions/npmVersionProperty\" },\n \"pnpmVersion\": { \"$ref\": \"#/definitions/pnpmVersionProperty\" },\n \"packageJson\": { \"$ref\": \"#/definitions/packageJsonProperty\" },\n \"packageManager\": { \"$ref\": \"#/definitions/packageManagerProperty\" },\n \"rebuildLibrary\": { \"$ref\": \"#/definitions/rebuildLibraryProperty\" },\n \"schemaVersion\": {\n \"type\": \"number\",\n \"minimum\": 1,\n \"maximum\": 1,\n \"description\": \"This is the `todesktop.json` schema version. This must be `1`.\",\n \"examples\": [1]\n },\n \"snap\": { \"$ref\": \"#/definitions/snapConfigProperty\" },\n \"uploadSizeLimit\": { \"$ref\": \"#/definitions/uploadSizeLimitProperty\" },\n \"windows\": { \"$ref\": \"#/definitions/windowsConfigProperty\" },\n \"platformOverrides\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"This option allows you to specify platform-specific configurations for Windows, macOS, and Linux builds. Most top-level configuration fields available in `todesktop.json` can be overridden within the `windows`, `mac`, or `linux` objects under `platformOverrides`.\",\n \"default\": {},\n \"properties\": {\n \"windows\": {\n \"$ref\": \"#/definitions/platformOverridableProperties\"\n },\n \"mac\": {\n \"$ref\": \"#/definitions/platformOverridableProperties\"\n },\n \"linux\": {\n \"$ref\": \"#/definitions/platformOverridableProperties\"\n }\n }\n }\n },\n \"definitions\": {\n \"appBuilderLibVersionProperty\": {\n \"type\": \"string\",\n \"validSemver\": {},\n \"minLength\": 1,\n \"description\": \"The version of app-builder-lib that ToDesktop should use for building your app. This can be useful if you need to use a specific version that includes certain features or fixes.\",\n \"examples\": [\"22.14.13\"]\n },\n \"appIdProperty\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Your application ID. Omit this unless you know what you're doing. It's used as the [CFBundleIdentifier](https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-102070) for MacOS and as the [Application User Model ID](<https://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx>) for Windows.\",\n \"examples\": [\"com.microsoft.word\"],\n \"default\": \"auto-generated\"\n },\n \"bytenodeConfigProperty\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"Compile selected source files to .jsc using Bytenode during the build. Provide glob patterns relative to your appPath.\",\n \"default\": { \"enabled\": false },\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Enable Bytenode compilation.\"\n },\n \"files\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\", \"minLength\": 1 },\n \"minItems\": 1,\n \"description\": \"Glob patterns relative to appPath for files to compile to Bytenode.\"\n }\n },\n \"allOf\": [\n {\n \"if\": {\n \"properties\": { \"enabled\": { \"const\": true } },\n \"required\": [\"enabled\"]\n },\n \"then\": { \"required\": [\"files\"] }\n }\n ]\n },\n \"appFilesProperty\": {\n \"type\": \"array\",\n \"description\": \"This option allows you to decide which files get uploaded to be built on the ToDesktop servers. By default, all files in your app path are included in your app, except for `node_modules` and `.git`. Dependencies are installed on our build servers as there could be platform-specific postinstall steps.\",\n \"default\": [\"**\"],\n \"examples\": [\"[\\\"dist/**\\\", \\\"!static/**\\\"]\"],\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n },\n \"minItems\": 1\n },\n \"appProtocolSchemeProperty\": {\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"minLength\": 1\n },\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n },\n \"minItems\": 1\n }\n ],\n \"description\": \"If you want to register a protocol for your application (e.g. `example://`) and or support deeplinking, you will need to use this option. If your desired protocol is `example://`, you would set `\\\"appProtocolScheme\\\": \\\"example\\\"`. NOTE: these features also require additional application logic.\",\n \"examples\": [\"word\", \"[\\\"word\\\", \\\"excel\\\"]\"],\n \"default\": \"no protocol scheme is registered\"\n },\n \"appPathProperty\": {\n \"type\": \"string\",\n \"description\": \"This is the path to your Electron application directory. Omit this unless your project setup is complicated. This is the directory that the CLI uploads.\",\n \"default\": \".\",\n \"examples\": [\"./dist\"],\n \"file\": {\n \"isOptional\": true,\n \"mustBeElectronApp\": true\n }\n },\n \"asarProperty\": {\n \"type\": \"boolean\",\n \"default\": true,\n \"description\": \"Whether to package your application's source code within an asar archive. You should only turn this off if you have a good reason to.\"\n },\n \"asarUnpackProperty\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n },\n \"minItems\": 1\n }\n ],\n \"description\": \"This option allows you to decide which files get unpacked from the asar archive. By default we unpack all native `*.node` files.\",\n \"default\": [\"**/*.node\"]\n },\n \"buildVersionProperty\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The build version. Maps to the CFBundleVersion on macOS, and FileVersion metadata property on Windows.\",\n \"default\": \"auto-generated from build id\"\n },\n \"copyrightProperty\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The human-readable copyright line for the app.\",\n \"examples\": [\"Copyright \u00A9 1995 Walt Disney\"],\n \"default\": \"The `package.json` [productName](#recommendations-for-app-packagejson) / `name`.\"\n },\n \"electronMirrorProperty\": {\n \"type\": \"string\",\n \"format\": \"uri\",\n \"description\": \"The base URL of the mirror to download Electron from. This may be a mirror geographically closer to you or even your own mirror which contains custom Electron builds. The version downloaded is the Electron version specified in `devDependencies` in your app's `package.json`. Alternatively you can explicitly specify an `electronVersion` in `todesktop.json` as described below.\",\n \"examples\": [\"https://cdn.npm.taobao.org/dist/electron/\"],\n \"default\": \"Electron is downloaded from the main official source.\"\n },\n \"electronVersionProperty\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The version of Electron to use. In most cases you should not specify an `electronVersion` property. Only specify this option if you wish to override the version that is specified in `package.json`.\",\n \"examples\": [\"12.0.7-beta.17\"],\n \"default\": \"Electron version specified in `devDependencies` in your app's `package.json`\"\n },\n \"extraContentFilesProperty\": {\n \"type\": \"array\",\n \"description\": \"This option allows you specify files to be copied into the application's content directory (`Contents` for MacOS, root directory for Linux and Windows).\",\n \"default\": [],\n \"items\": {\n \"type\": \"object\",\n \"required\": [\"from\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"from\": {\n \"type\": \"string\",\n \"file\": {}\n },\n \"to\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"extraResourcesProperty\": {\n \"type\": \"array\",\n \"description\": \"This option allows you to specify files to be copied into the application's resources directory (`Contents/Resources` for MacOS, `resources` for Linux and Windows). It works just like the `extraContentFiles` option, except the files go to a different directory.\",\n \"default\": [],\n \"items\": {\n \"type\": \"object\",\n \"required\": [\"from\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"from\": {\n \"type\": \"string\",\n \"file\": {\n \"from\": \"context.projectRoot\"\n }\n },\n \"to\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"fileAssociationsProperty\": {\n \"type\": \"array\",\n \"description\": \"Associate a file type with your Electron app.\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\"ext\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"ext\": {\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"minLength\": 1\n },\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n }\n ],\n \"description\": \"The extension (minus the leading period). e.g. png.\"\n },\n \"description\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"windows-only. The description.\"\n },\n \"name\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The name. e.g. PNG. Defaults to value of `ext`.\"\n },\n \"mimeType\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"linux-only. The mime-type.\"\n },\n \"icon\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"macOS and windows. Icon file name without extension. It points to ico file for Windows and icns for macOS. For example, if the `icon` value is `\\\"icons/py\\\"` then it will look for both `\\\"icons/py.ico\\\"` and `\\\"icons/py.icns\\\"` in your project directory.\"\n },\n \"role\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"macOS-only. The app's role with respect to the type. The value can be `Editor`, `Viewer`, `Shell`, or `None`. Corresponds to `CFBundleTypeRole`.\",\n \"default\": \"Editor\"\n },\n \"isPackage\": {\n \"type\": \"boolean\",\n \"description\": \"macOS-only. Whether the document is distributed as a bundle. If set to true, the bundle directory is treated as a file. Corresponds to `LSTypeIsPackage`.\"\n },\n \"rank\": {\n \"type\": \"string\",\n \"enum\": [\"Owner\", \"Default\", \"Alternate\", \"None\"],\n \"description\": \"macOS-only. Determines how Launch Services ranks this app among the apps that declare themselves editors or viewers of files of this type. The possible values are: `Owner` (this app is the primary creator of files of this type), `Default` (this app is an opener of files of this type; this value is also used if no rank is specified), `Alternate` (this app is a secondary viewer of files of this type), and `None` (this app is never selected to open files of this type, but it accepts drops of files of this type).\",\n \"default\": \"Default\"\n }\n }\n },\n \"minItems\": 1\n },\n \"updateUrlBaseProperty\": {\n \"type\": \"string\",\n \"format\": \"uri\",\n \"description\": \"The URL to check for updates. You should only set this if you want to use your own self-hosted update server instead of ToDesktop's built-in update service. See https://www.github.com/ToDesktop/self-hosted for more information.\",\n \"examples\": [\"https://example.com/updates\"],\n \"default\": \"ToDesktop's auto-update URL.\"\n },\n \"filesForDistributionProperty\": {\n \"type\": \"array\",\n \"description\": \"This option allows you to explicitly exclude or include certain files in the packaged version of your app. These files are filtered _after_ the build step which happens on the ToDesktop servers.\",\n \"examples\": [\n \"[\\\"!**/node_modules/realm/android/**\\\", \\\"!**/design/**\\\"]\"\n ],\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n },\n \"minItems\": 1\n },\n \"linuxConfigProperty\": {\n \"type\": \"object\",\n \"description\": \"This object contains some options that only apply to the building & releasing for Linux.\",\n \"examples\": [\"{ \\\"category\\\": \\\"Utility\\\"}\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"category\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The [application category](https://specifications.freedesktop.org/menu-spec/latest/apa.html#main-category-registry).\",\n \"examples\": [\"Utility\"]\n },\n \"icon\": {\n \"type\": \"string\",\n \"description\": \"The path to your application's Linux desktop icon. It must be an ICNS or PNG.\",\n \"examples\": [\"./linux-icon.png\"],\n \"file\": {\n \"extensions\": [\"icns\", \"png\"],\n \"mustBeFile\": true\n },\n \"minLength\": 3\n },\n \"imageVersion\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The version of the Linux image that ToDesktop should use to build your app.\",\n \"examples\": [\"0.1.0\"],\n \"default\": \"0.0.11\"\n },\n \"noSandbox\": {\n \"type\": \"boolean\",\n \"description\": \"This option allows you to configure whether your app should run in a sandboxed environment.\",\n \"default\": true\n }\n }\n },\n \"includeSubNodeModulesProperty\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Whether to include **all** of the submodules node_modules directories\"\n },\n \"macConfigProperty\": {\n \"type\": \"object\",\n \"description\": \"This object contains some options that only apply to the building & releasing for MacOS.\",\n \"examples\": [\"{ \\\"entitlements\\\": \\\"./entitlements.mac.plist\\\" }\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"category\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The application category type, as shown in the Finder via _View -> Arrange by Application Category_ when viewing the Applications directory.\",\n \"examples\": [\"public.app-category.productivity\"]\n },\n \"additionalBinariesToSign\": {\n \"type\": \"array\",\n \"description\": \"Paths of any extra binaries that need to be signed. These could be files in your own app code or `node_modules`.\",\n \"examples\": [\"[\\\"./node_modules/example-package/example-file\\\"]\"],\n \"default\": [],\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n },\n \"entitlements\": {\n \"type\": \"string\",\n \"description\": \"The path to an entitlements file for signing your application. It must be a plist file.\",\n \"examples\": [\"./entitlements.mac.plist\"],\n \"default\": \"A sane minimal entitlements file we've put together.\",\n \"file\": {\n \"extensions\": [\"plist\"],\n \"mustBeFile\": true\n },\n \"minLength\": 1\n },\n \"entitlementsInherit\": {\n \"type\": \"string\",\n \"description\": \"The path to a child entitlements file for signing your application. It must be a plist file.\",\n \"examples\": [\"./entitlementsInherit.mac.plist\"],\n \"default\": \"No entitlements file is provided by default.\",\n \"file\": {\n \"extensions\": [\"plist\"],\n \"mustBeFile\": true\n },\n \"minLength\": 1\n },\n \"extendInfo\": {\n \"type\": \"object\",\n \"description\": \"Extra entries for `Info.plist`.\",\n \"examples\": [\"{ \\\"NSUserNotificationAlertStyle\\\": \\\"alert\\\" }\"],\n \"default\": {}\n },\n \"icon\": {\n \"type\": \"string\",\n \"description\": \"The path to your application's Mac desktop icon. It must be an ICNS or PNG.\",\n \"examples\": [\"./mac-icon.png\"],\n \"file\": {\n \"extensions\": [\"icns\", \"png\"],\n \"mustBeFile\": true\n },\n \"minLength\": 3\n },\n \"requirements\": {\n \"type\": \"string\",\n \"description\": \"The path to the [requirements file](https://developer.apple.com/library/archive/documentation/Security/Conceptual/CodeSigningGuide/RequirementLang/RequirementLang.html) used when signing your application.\",\n \"examples\": [\"./requirements.txt\"],\n \"default\": \"No requirements file is used by default.\",\n \"file\": {\n \"extensions\": [\"txt\"],\n \"mustBeFile\": true\n },\n \"minLength\": 1\n }\n }\n },\n \"masConfigProperty\": {\n \"type\": \"object\",\n \"description\": \"This object contains options that only apply to building the application for Mac App Store.\",\n \"examples\": [\"{ \\\"type\\\": \\\"development\\\" }\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"entitlements\": {\n \"type\": \"string\",\n \"description\": \"The path to an entitlements file for signing your application. It must be a plist file.\",\n \"examples\": [\"./entitlements.mas.plist\"],\n \"default\": \"No entitlements file is provided by default.\",\n \"file\": {\n \"extensions\": [\"plist\"],\n \"mustBeFile\": true\n },\n \"minLength\": 1\n },\n \"entitlementsInherit\": {\n \"type\": \"string\",\n \"description\": \"The path to a child entitlements file for signing your application. It must be a plist file.\",\n \"examples\": [\"./entitlementsInherit.mas.plist\"],\n \"default\": \"No entitlements file is provided by default.\",\n \"file\": {\n \"extensions\": [\"plist\"],\n \"mustBeFile\": true\n },\n \"minLength\": 1\n },\n \"provisioningProfile\": {\n \"type\": \"string\",\n \"description\": \"The path to a provisioning profile for authorizing your application.\",\n \"examples\": [\"./mas.provisionprofile\"],\n \"default\": \"No provisioning profile is used by default.\",\n \"file\": {\n \"extensions\": [\"provisionprofile\"],\n \"mustBeFile\": true\n },\n \"minLength\": 1\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\"development\", \"distribution\"],\n \"description\": \"Whether to sign app for development or for distribution.\",\n \"examples\": [\"distribution\"],\n \"default\": \"development\"\n },\n \"minimumSystemVersion\": {\n \"type\": \"string\",\n \"description\": \"The minimum macOS version required to run the app. Set to '12.0' or higher for arm64-only Mac App Store submissions.\",\n \"examples\": [\"12.0\", \"11.0\", \"10.15\"],\n \"pattern\": \"^[0-9]+\\\\.[0-9]+(\\\\.[0-9]+)?$\"\n },\n \"x64ArchFiles\": {\n \"type\": \"string\",\n \"description\": \"Minimatch pattern of paths that are allowed to be x64 binaries in both ASAR files.\",\n \"examples\": [\"Contents/Resources/foobar/**\"],\n \"default\": \"not defined\"\n }\n }\n },\n \"dmgConfigProperty\": {\n \"type\": \"object\",\n \"description\": \"Options for customizing the macOS DMG (disk image) installer.\",\n \"additionalProperties\": false,\n \"properties\": {\n \"background\": {\n \"type\": \"string\",\n \"description\": \"The path to the DMG installer's background image. It must be a `.tiff` file. The resolution of this file determines the resolution of the installer window. Typically, backgrounds are 540x380.\",\n \"examples\": [\"./mac-dmg-background.tiff\"],\n \"default\": \"undefined\",\n \"file\": {\n \"extensions\": [\"tiff\"],\n \"mustBeFile\": true\n },\n \"minLength\": 1\n },\n \"artifactName\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The artifact name of the DMG file. Macros ${productName}, ${version}, ${name} are supported.\"\n },\n \"backgroundColor\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The background color (accepts css colors). Defaults to \\\"`#ffffff`\\\" (white) if no background image.\",\n \"default\": \"#ffffff\"\n },\n \"iconSize\": {\n \"type\": \"number\",\n \"description\": \"The size of all the icons inside the DMG. Defaults to `80`.\",\n \"default\": 80\n },\n \"iconTextSize\": {\n \"type\": \"number\",\n \"description\": \"The size of all the icon texts inside the DMG. Defaults to `12`.\",\n \"default\": 12\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The title of the produced DMG, which will be shown when mounted (volume name). Macro `${productName}`, `${version}` and `${name}` are supported.\",\n \"default\": \"${productName} ${version}\"\n },\n \"contents\": {\n \"type\": \"array\",\n \"description\": \"Customize icon locations. The x and y coordinates refer to the position of the center of the icon (at 1x scale), and do not take the label into account.\",\n \"items\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"x\": {\n \"type\": \"number\",\n \"description\": \"The device-independent pixel offset from the left of the window to the center of the icon.\"\n },\n \"y\": {\n \"type\": \"number\",\n \"description\": \"The device-independent pixel offset from the top of the window to the center of the icon.\"\n }\n }\n }\n },\n \"window\": {\n \"type\": \"object\",\n \"description\": \"The DMG windows position and size. In most cases, you will only want to specify a `height` and `width` value but not `x` and `y`.\",\n \"additionalProperties\": false,\n \"properties\": {\n \"x\": {\n \"type\": \"number\",\n \"description\": \"The X position relative to left of the screen.\"\n },\n \"y\": {\n \"type\": \"number\",\n \"description\": \"The Y position relative to top of the screen.\"\n },\n \"width\": {\n \"type\": \"number\",\n \"description\": \"The width. Defaults to background image width or 540.\"\n },\n \"height\": {\n \"type\": \"number\",\n \"description\": \"The height. Defaults to background image height or 380.\"\n }\n }\n }\n }\n },\n \"nodeVersionProperty\": {\n \"type\": \"string\",\n \"validSemver\": {},\n \"minLength\": 1,\n \"description\": \"The version of Node.js that ToDesktop should use to build your app.\",\n \"examples\": [\"18.12.1\"]\n },\n \"npmVersionProperty\": {\n \"type\": \"string\",\n \"validSemver\": {},\n \"minLength\": 1,\n \"description\": \"The version of NPM that ToDesktop should use for installation.\",\n \"examples\": [\"9.8.1\"]\n },\n \"pnpmVersionProperty\": {\n \"type\": \"string\",\n \"validSemver\": {},\n \"minLength\": 1,\n \"description\": \"The version of pnpm that ToDesktop should use for installation.\",\n \"examples\": [\"8.10.5\"]\n },\n \"packageJsonProperty\": {\n \"type\": \"object\",\n \"description\": \"If you want to override the default `package.json` configuration, use the `packageJson` property. For example, you can use this to override the `productName` or `version` properties.\",\n \"default\": {}\n },\n \"packageManagerProperty\": {\n \"type\": \"string\",\n \"enum\": [\"npm\", \"yarn\", \"pnpm\"],\n \"description\": \"The package manager to use when installing dependencies. Valid values are `npm`, `yarn` or `pnpm`.\",\n \"examples\": [\"yarn\"],\n \"default\": \"If `yarn.lock` exists, `yarn` is used. If `pnpm-lock.yaml` or `shrinkwrap.yaml` exists, `pnpm` is used. Otherwise, `npm` is used.\"\n },\n \"rebuildLibraryProperty\": {\n \"type\": \"string\",\n \"enum\": [\"app-builder\", \"@electron/rebuild\"],\n \"description\": \"The library that ToDesktop should use for rebuilding native modules. Valid values are `app-builder` or `@electron/rebuild`.\",\n \"default\": \"app-builder\"\n },\n \"snapConfigProperty\": {\n \"type\": \"object\",\n \"description\": \"This object contains some options that only apply to the building for the [Snap Store](https://snapcraft.io/store).\",\n \"examples\": [\"{ \\\"confinement\\\": \\\"classic\\\", \\\"grade\\\": \\\"devel\\\" }\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"after\": {\n \"type\": \"array\",\n \"description\": \"Ensures that all the part names listed are staged before the app part begins its [lifecycle](https://snapcraft.io/docs/parts-lifecycle#heading--steps).\",\n \"default\": [\"desktop-gtk2\"],\n \"examples\": [\"[\\\"launch-scripts\\\"]\"],\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n },\n \"appPartStage\": {\n \"type\": \"array\",\n \"description\": \"Specifies which files from the app part to stage and which to exclude. Individual files, directories, wildcards, globstars, and exclusions are accepted. See [Snapcraft filesets](https://snapcraft.io/docs/snapcraft-filesets) to learn more about the format.\",\n \"examples\": [\"[\\\"-usr/lib/python*\\\"]\"],\n \"default\": \"See [snap.ts](https://github.com/electron-userland/electron-builder/blob/master/packages/app-builder-lib/templates/snap/snapcraft.yaml#L29).\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n },\n \"assumes\": {\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"minLength\": 1\n },\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n }\n ],\n \"description\": \"The list of features that must be supported by the core in order for this snap to install. To learn more, see the [Snapcraft docs](https://snapcraft.io/docs/snapcraft-top-level-metadata#heading--assumes).\",\n \"examples\": [\"snapd2.38\"],\n \"default\": \"undefined\"\n },\n \"autoStart\": {\n \"type\": \"boolean\",\n \"description\": \"Whether or not the snap should automatically start on login.\",\n \"default\": false,\n \"examples\": [true]\n },\n \"base\": {\n \"type\": \"string\",\n \"description\": \"The base snap to use for building this snap.\",\n \"default\": \"core18\",\n \"examples\": [\"core20\"]\n },\n \"buildPackages\": {\n \"type\": \"array\",\n \"description\": \"The list of debian packages needs to be installed for building this snap.\",\n \"default\": [],\n \"examples\": [\n \"[\\\"libssl-dev\\\", \\\"libssh-dev\\\", \\\"libncursesw5-dev\\\"]\"\n ],\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n },\n \"confinement\": {\n \"type\": \"string\",\n \"enum\": [\"classic\", \"devmode\", \"strict\"],\n \"description\": \"The type of [confinement](https://snapcraft.io/docs/reference/confinement) supported by the snap. `devmode`, `strict`, or `classic`.\",\n \"default\": \"strict\",\n \"examples\": [\"classic\"]\n },\n \"environment\": {\n \"type\": \"object\",\n \"description\": \"The custom environment. If you set this, it will be merged with the default.\",\n \"default\": { \"TMPDIR\": \"$XDG_RUNTIME_DIR\" },\n \"examples\": [\"{\\\"TMPDIR\\\": \\\"$XDG_RUNTIME_DIR\\\"}\"]\n },\n \"grade\": {\n \"type\": \"string\",\n \"enum\": [\"devel\", \"stable\"],\n \"description\": \"The quality grade of the snap. It can be either `devel` (i.e. a development version of the snap, so not to be published to the \\\"stable\\\" or \\\"candidate\\\" channels) or `stable` (i.e. a stable release or release candidate, which can be released to all channels).\",\n \"default\": \"stable\",\n \"examples\": [\"devel\"]\n },\n \"layout\": {\n \"type\": \"object\",\n \"description\": \"Specifies any files to make accessible from locations such as `/usr`, `/var`, and `/etc`. See [snap layouts](https://snapcraft.io/docs/snap-layouts) to learn more.\",\n \"default\": \"undefined\",\n \"examples\": [\n \"{ \\\"/var/lib/foo\\\": { \\\"bind\\\": \\\"$SNAP_DATA/var/lib/foo\\\" } }\"\n ]\n },\n \"plugs\": {\n \"type\": \"array\",\n \"description\": \"The list of [plugs](https://snapcraft.io/docs/reference/interfaces). If list contains `default`, it will be replaced with the default list, so, `[\\\"default\\\", \\\"foo\\\"]` can be used to add a custom plug `foo` in addition to the default list.\",\n \"default\": [\n \"desktop\",\n \"desktop-legacy\",\n \"home\",\n \"x11\",\n \"unity7\",\n \"browser-support\",\n \"network\",\n \"gsettings\",\n \"pulseaudio\",\n \"opengl\"\n ],\n \"examples\": [\n \"[ \\\"default\\\", { \\\"browser-sandbox\\\": { \\\"interface\\\": \\\"browser-support\\\", \\\"allow-sandbox\\\": true } }, \\\"another-simple-plug-name\\\" ]\"\n ],\n \"items\": {\n \"anyOf\": [\n {\n \"type\": \"string\",\n \"minLength\": 1\n },\n {\n \"type\": \"object\"\n }\n ]\n }\n },\n \"stagePackages\": {\n \"type\": \"array\",\n \"description\": \"The list of Ubuntu packages to use that are needed to support the app part creation. Like `depends` for deb. If list contains `default`, it will be replaced with the default list, so, `[\\\"default\\\", \\\"foo\\\"]` can be used to add custom package `foo` in addition to the defaults.\",\n \"default\": [\n \"libasound2\",\n \"libgconf2-4\",\n \"libnotify4\",\n \"libnspr4\",\n \"libnss3\",\n \"libpcre3\",\n \"libpulse0\",\n \"libxss1\",\n \"libxtst6\"\n ],\n \"examples\": [\"[\\\"default\\\", \\\"depends\\\"]\"],\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n },\n \"summary\": {\n \"type\": \"string\",\n \"maxLength\": 78,\n \"description\": \"A sentence summarising the snap. Max len. 78 characters, describing the snap in short and simple terms.\",\n \"default\": \"The [productName](#recommendations-for-app-packagejson).\",\n \"examples\": [\"The super cat generator\"]\n },\n \"useTemplateApp\": {\n \"type\": \"boolean\",\n \"description\": \"Whether to use a template snap.\",\n \"default\": \"true if `stagePackages` is not specified.\",\n \"examples\": [false]\n }\n }\n },\n \"uploadSizeLimitProperty\": {\n \"type\": \"number\",\n \"description\": \"The max upload size (in MB). Before uploading your files to our servers, we check that the total file size is less than this number. If you are accidentally including unneccesary files in your app, check out the `appPath` and `appFiles` options.\",\n \"default\": 20,\n \"examples\": [35]\n },\n \"windowsConfigProperty\": {\n \"type\": \"object\",\n \"description\": \"This object contains some options that only apply to the building & releasing for Windows.\",\n \"examples\": [\"{ \\\"icon\\\": \\\"./icon.ico\\\" }\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"icon\": {\n \"type\": \"string\",\n \"description\": \"The path to your application's Windows desktop icon. It must be an ICO, ICNS, or PNG.\",\n \"examples\": [\"./icon.ico\"],\n \"file\": {\n \"extensions\": [\"icns\", \"png\", \"ico\"],\n \"mustBeFile\": true\n },\n \"minLength\": 3\n },\n \"nsisCustomBinary\": {\n \"type\": \"object\",\n \"description\": \"Allows you to provide your own makensis, such as one with support for debug logging via LogSet and LogText. (Logging also requires option debugLogging = true). It's not recommended to use it for production build.\",\n \"default\": \"undefined\",\n \"additionalProperties\": false,\n \"properties\": {\n \"checksum\": {\n \"type\": \"string\",\n \"description\": \"Checksum for the custom NSIS binary.\"\n },\n \"debugLogging\": {\n \"type\": \"boolean\",\n \"description\": \"Enable debug logging with the custom NSIS binary.\"\n },\n \"url\": {\n \"type\": \"string\",\n \"description\": \"URL to download the custom NSIS binary (e.g., a .7z archive).\"\n },\n \"version\": {\n \"type\": \"string\",\n \"description\": \"Version of the custom NSIS binary.\"\n }\n }\n },\n \"nsisInclude\": {\n \"type\": \"string\",\n \"description\": \"The path to NSIS script to customize installer.\",\n \"examples\": [\"build/installer.nsh\"],\n \"default\": \"undefined\",\n \"file\": {\n \"extensions\": [\"nsh\"],\n \"mustBeFile\": true\n }\n },\n \"publisherName\": {\n \"type\": \"array\",\n \"description\": \"The publisher name, exactly as in your code signing certificate. Several names can be provided. Defaults to common name from your code signing certificate. You should typically not include this property in your configuration unless you wish to transition to a new certificate in the future.\",\n \"examples\": [\"[\\\"ABC Limited\\\"]\"],\n \"default\": \"Default to the common name from your code signing certificate.\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n }\n }\n },\n \"platformOverridableProperties\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"Defines properties that can be overridden on a per-platform basis under the 'platformOverrides' field.\",\n \"properties\": {\n \"appBuilderLibVersion\": {\n \"$ref\": \"#/definitions/appBuilderLibVersionProperty\"\n },\n \"appId\": { \"$ref\": \"#/definitions/appIdProperty\" },\n \"appFiles\": { \"$ref\": \"#/definitions/appFilesProperty\" },\n \"appProtocolScheme\": {\n \"$ref\": \"#/definitions/appProtocolSchemeProperty\"\n },\n \"appPath\": { \"$ref\": \"#/definitions/appPathProperty\" },\n \"bytenode\": { \"$ref\": \"#/definitions/bytenodeConfigProperty\" },\n \"asar\": { \"$ref\": \"#/definitions/asarProperty\" },\n \"asarUnpack\": { \"$ref\": \"#/definitions/asarUnpackProperty\" },\n \"buildVersion\": { \"$ref\": \"#/definitions/buildVersionProperty\" },\n \"copyright\": { \"$ref\": \"#/definitions/copyrightProperty\" },\n \"electronMirror\": { \"$ref\": \"#/definitions/electronMirrorProperty\" },\n \"electronVersion\": { \"$ref\": \"#/definitions/electronVersionProperty\" },\n \"extraContentFiles\": {\n \"$ref\": \"#/definitions/extraContentFilesProperty\"\n },\n \"extraResources\": { \"$ref\": \"#/definitions/extraResourcesProperty\" },\n \"fileAssociations\": {\n \"$ref\": \"#/definitions/fileAssociationsProperty\"\n },\n \"updateUrlBase\": { \"$ref\": \"#/definitions/updateUrlBaseProperty\" },\n \"filesForDistribution\": {\n \"$ref\": \"#/definitions/filesForDistributionProperty\"\n },\n \"linux\": { \"$ref\": \"#/definitions/linuxConfigProperty\" },\n \"includeSubNodeModules\": {\n \"$ref\": \"#/definitions/includeSubNodeModulesProperty\"\n },\n \"mac\": { \"$ref\": \"#/definitions/macConfigProperty\" },\n \"mas\": { \"$ref\": \"#/definitions/masConfigProperty\" },\n \"dmg\": { \"$ref\": \"#/definitions/dmgConfigProperty\" },\n \"nodeVersion\": { \"$ref\": \"#/definitions/nodeVersionProperty\" },\n \"npmVersion\": { \"$ref\": \"#/definitions/npmVersionProperty\" },\n \"pnpmVersion\": { \"$ref\": \"#/definitions/pnpmVersionProperty\" },\n \"packageJson\": { \"$ref\": \"#/definitions/packageJsonProperty\" },\n \"packageManager\": { \"$ref\": \"#/definitions/packageManagerProperty\" },\n \"rebuildLibrary\": { \"$ref\": \"#/definitions/rebuildLibraryProperty\" },\n \"snap\": { \"$ref\": \"#/definitions/snapConfigProperty\" },\n \"uploadSizeLimit\": { \"$ref\": \"#/definitions/uploadSizeLimitProperty\" },\n \"windows\": { \"$ref\": \"#/definitions/windowsConfigProperty\" }\n }\n }\n }\n}\n", "import jsonSchema from '../../../../schemas/schema.json';\n\nexport default (context) => {\n function updateFileProperty(record: Record<string, any>) {\n for (const [key, value] of Object.entries(record)) {\n if (key === 'file' && typeof value === 'object') {\n value['from'] = context.projectRoot;\n } else if (typeof value === 'object' && value !== null) {\n updateFileProperty(value);\n }\n }\n }\n\n updateFileProperty(jsonSchema);\n return jsonSchema;\n};\n", "import merge from 'lodash.merge';\nimport { resolve } from 'path';\nimport { PartialProjectConfig, ProjectConfig } from '../../types';\nimport logger from '../logger';\nimport loadConfig from './loadConfig';\nimport { BuildFlags } from '../../commands/build/utilities/types';\n\nexport default function computeFullProjectConfig(\n partialConfig: PartialProjectConfig,\n projectRoot: string,\n flags?: { build?: Pick<BuildFlags, 'ignoreExtendsErrors'> },\n): ProjectConfig {\n if (!partialConfig.extends) {\n logger.debug('No extends field, returning partial config');\n return partialConfig as ProjectConfig;\n } else {\n logger.debug('Extends field found, resolving');\n const parentConfigPath = resolve(projectRoot, partialConfig.extends);\n const parentConfig = loadConfig(parentConfigPath);\n\n parentConfig.appPath = parentConfig.appPath || '.';\n\n const parentFullConfig = computeFullProjectConfig(\n parentConfig,\n projectRoot,\n flags,\n );\n\n // skip if `flags.build` isn't defined since --ignore-extends-errors is only available via todesktop-build.\n if (flags?.build && !flags.build.ignoreExtendsErrors) {\n const hasSameId = partialConfig.id === parentFullConfig.id;\n const hasSameAppId =\n partialConfig.appId &&\n parentFullConfig.appId &&\n partialConfig.appId === parentFullConfig.appId;\n\n if (hasSameId || hasSameAppId) {\n throw new Error(`\ntodesktop.json invalid. Cannot have the same \"id\" or \"appId\" as an extended todesktop.json file.\n\nYou can disable this error by running todesktop build with the --ignore-extends-errors flag.`);\n }\n\n // throw error in this case otherwise the child config will inherit the defined appId from the parent\n if (parentFullConfig.appId && !partialConfig.appId) {\n throw new Error(`\ntodesktop.json invalid. Please add \"appId\" to your todesktop.json or remove \"appId\" from the extended todesktop.json.\n\nYou can disable this error by running todesktop build with the --ignore-extends-errors flag.`);\n }\n }\n\n const result = merge({}, parentFullConfig, partialConfig);\n delete result.extends;\n return result;\n }\n}\n", "// X build has failed, should we exit? I.e. is it settled?\nexport default (build) => {\n const hasBuildSettled = ['linux', 'mac', 'windows'].every(\n (platform) =>\n build[platform].shouldSkip ||\n 'succeeded' === build[platform].status ||\n ('failed' === build[platform].status &&\n build[platform].numberOfAttemptedBuilds === 2),\n );\n\n const hasSettledWithError = ['linux', 'mac', 'windows'].some(\n (platform) => 'failed' === build[platform].status,\n );\n\n return hasBuildSettled && hasSettledWithError;\n};\n", "import merge from 'lodash.merge';\nimport path from 'path';\nimport readJson from '../../../utilities/readJson';\n\nfunction deleteNullDeps(dep) {\n Object.keys(dep).forEach((key) => {\n if (dep[key] === null) {\n delete dep[key];\n }\n });\n return dep;\n}\n\n/**\n * Remove any dependencies or devDependencies that have a version of null.\n * This is useful for removing dependencies that are not to be used when building\n * in ToDesktop. For example this will remove the `electron-builder` dev dependency\n * from the package.json file when building in ToDesktop:\n * {\n * \"devDependencies\": {\n * \"electron-builder\": null\n * }\n * }\n */\nfunction removeNullDependencies(pkgJson) {\n const { dependencies, devDependencies } = pkgJson;\n\n if (dependencies) {\n pkgJson.dependencies = deleteNullDeps(dependencies);\n }\n\n if (devDependencies) {\n pkgJson.devDependencies = deleteNullDeps(devDependencies);\n }\n\n return pkgJson;\n}\n\nfunction getAppPkgJson({ config }) {\n const packageJsonFromConfig = config.packageJson || {};\n const extendsFrom = packageJsonFromConfig.extends || 'package.json';\n const packageJsonFromFile = readJson(path.join(config.appPath, extendsFrom));\n\n return removeNullDependencies(\n merge({}, packageJsonFromFile, packageJsonFromConfig),\n );\n}\n\nexport default getAppPkgJson;\n", "import * as gitRevSync from 'git-rev-sync';\n\nexport default async (directory) => {\n let result = {};\n\n try {\n const gitCommitHash = gitRevSync.long(directory);\n\n if (gitCommitHash) {\n result = {\n branchName: gitRevSync.branch(directory),\n commitDate: gitRevSync.date().toISOString(),\n commitId: gitCommitHash,\n commitMessage: gitRevSync.message(),\n hasUncommittedChanges: gitRevSync.isDirty(),\n repositoryRemoteUrl: gitRevSync.remoteUrl(),\n versionControlSystemName: 'git',\n };\n }\n } catch {\n // Ignore\n }\n\n return result;\n};\n", "import { Build } from '@todesktop/shared';\nimport EventEmitter from 'events';\nimport type { DocSnapshot } from '../../../types';\nimport { doc, onSnapshot } from 'firebase/firestore';\nimport firestore from '../../../utilities/firestore';\nimport { readDocumentSnapshot } from '../../../utilities/firestoreData';\n\nexport default function spyBuild() {\n const emitter = new EventEmitter();\n\n let unsubscribeSnapshot: (() => void) | undefined;\n let latestBuildDoc: Build | undefined;\n\n function when(predicate: (build: Build) => boolean) {\n if (latestBuildDoc && predicate(latestBuildDoc)) {\n return Promise.resolve(latestBuildDoc);\n }\n\n return new Promise<Build>((resolve, reject) => {\n emitter\n .on('update', ({ build }) => {\n if (predicate(build)) {\n resolve(build);\n }\n })\n .once('error', (e) => reject(e));\n });\n }\n\n return {\n onUpdate(\n callback: (data: {\n build: Build | undefined;\n snapshot: DocSnapshot<Build>;\n }) => void,\n ) {\n emitter.on('update', callback);\n },\n\n subscribe({\n appId,\n buildId,\n userId,\n }: {\n appId: string;\n buildId: string;\n userId: string;\n }) {\n const buildPath = `users/${userId}/applications/${appId}/builds/${buildId}`;\n unsubscribeSnapshot = onSnapshot(\n doc(firestore, buildPath),\n (snapshot) => {\n latestBuildDoc = readDocumentSnapshot<Build>(snapshot);\n emitter.emit('update', {\n build: latestBuildDoc,\n snapshot: snapshot as unknown as DocSnapshot<Build>,\n });\n },\n (err) => {\n emitter.emit('error', err);\n },\n );\n },\n\n unsubscribe() {\n unsubscribeSnapshot?.();\n },\n\n async whenFirstUpdate() {\n if (latestBuildDoc) {\n return Promise.resolve(latestBuildDoc);\n }\n\n return new Promise<Build>((resolve, reject) => {\n emitter\n .once('update', (data) => resolve(data))\n .once('error', (e) => reject(e));\n });\n },\n\n async whenSettled() {\n return when((build) => buildHasSettled(build));\n },\n };\n}\n\nfunction buildHasSettled(build: Build) {\n return (['linux', 'mac', 'windows'] as const).every(\n (platform) =>\n build[platform]?.shouldSkip ||\n 'succeeded' === build[platform]?.status ||\n 'cancelled' === build[platform]?.status ||\n ('failed' === build[platform]?.status &&\n build[platform]?.numberOfAttemptedBuilds === 2),\n );\n}\n", "import type {\n DocumentData,\n DocumentSnapshot,\n QueryDocumentSnapshot,\n QuerySnapshot,\n} from 'firebase/firestore';\n\nexport const readQueryDocument = <T>(\n doc: QueryDocumentSnapshot<DocumentData>,\n): T => {\n return doc.data() as unknown as T;\n};\n\nexport const readDocumentSnapshot = <T>(\n snapshot: DocumentSnapshot<DocumentData>,\n): T | undefined => {\n return snapshot.exists() ? (snapshot.data() as unknown as T) : undefined;\n};\n\nexport const readQuerySnapshot = <T>(\n snapshot: QuerySnapshot<DocumentData>,\n): T[] => {\n return snapshot.docs.map((doc) => readQueryDocument<T>(doc));\n};\n", "import fastGlob from 'fast-glob';\nimport * as fs from 'fs';\nimport { IPackageJson } from 'package-json-type';\nimport * as path from 'path';\nimport type { ProjectConfig } from '../../../types';\nimport generateS3Key from './generateS3Key';\nimport logger from '../../../utilities/logger';\nimport uploadToS3 from './uploadToS3';\nimport zip from './zip';\nimport prepareWorkspaceBundle, { ZipEntry } from './workspace';\n\nconst getAppFiles = async (\n globsInput,\n appPath,\n appPkgJson,\n): Promise<ZipEntry[]> => {\n const globs = [\n '!node_modules',\n '!**/node_modules',\n '!.git',\n '!**/.git',\n '!.gitignore',\n '!**/.gitignore',\n ];\n\n if (globsInput && globsInput.length) {\n globs.push(\n ...globsInput,\n path.join(appPath, 'package.json'),\n path.join(appPath, 'package-lock.json'),\n path.join(appPath, 'yarn.lock'),\n path.join(appPath, 'pnpm-lock.yaml'),\n path.join(appPath, 'shrinkwrap.yaml'),\n );\n } else {\n globs.push('**');\n }\n\n // automatically add hooks to `appFiles` if they exist\n for (const hookName of [\n 'todesktop:beforeInstall',\n 'todesktop:beforeBuild',\n 'todesktop:afterPack',\n ]) {\n if (appPkgJson.scripts && appPkgJson.scripts[hookName]) {\n globs.push(path.join(appPath, appPkgJson.scripts[hookName]));\n }\n }\n\n const normalizedGlobs = globs\n .map((glob) => {\n // Make relative if it's not\n const globToUse = path.isAbsolute(glob)\n ? path.relative(appPath, glob)\n : glob;\n\n return (\n globToUse\n // Globs must always have forward slashes\n .replace(/\\\\/g, '/')\n // Remove trailing slash\n .replace(/\\/+$/, '')\n );\n })\n .filter((glob) => !glob.startsWith('..') && !glob.startsWith('!..'));\n\n let absolutePaths = await fastGlob(normalizedGlobs, {\n absolute: true,\n cwd: appPath,\n dot: true,\n followSymbolicLinks: false,\n onlyDirectories: false,\n onlyFiles: true,\n globstar: true,\n unique: true,\n });\n\n if (process.platform === 'win32') {\n absolutePaths = absolutePaths.map((absolutePath) =>\n absolutePath.replace(/\\//g, path.sep),\n );\n }\n\n if (!absolutePaths || !absolutePaths.length) {\n throw new Error('No files found to upload');\n } else if (\n !absolutePaths.filter(\n (absolutePath) =>\n absolutePath.endsWith('.js') || absolutePath.endsWith('.ts'),\n ).length\n ) {\n throw new Error(\n `No .js/.ts files found to upload (${absolutePaths[0]}). There's likely an issue with the appFiles option. Learn more at https://www.npmjs.com/package/@todesktop/cli#appfiles----optional-array-of-glob-patterns. If this is not the case, please contact us.`,\n );\n } else {\n let mainFilePath = appPath;\n if (appPkgJson.main) {\n mainFilePath = path.join(mainFilePath, appPkgJson.main);\n }\n\n if (fs.statSync(mainFilePath).isDirectory()) {\n mainFilePath = path.join(mainFilePath, 'index.js');\n }\n\n // Make sure the \"main\" file is included\n if (!absolutePaths.includes(mainFilePath)) {\n throw new Error(\n `The \"main\" file specified in your package.json (${\n appPkgJson.main\n ? path.relative(appPath, mainFilePath)\n : 'defaults to index.js'\n }) is not set to be uploaded to our servers. This is likely due to how you have configured the \\`appFiles\\` option. Learn more at https://www.npmjs.com/package/@todesktop/cli#appfiles----optional-array-of-glob-patterns. If this is not the case, please contact us.`,\n );\n }\n }\n\n return absolutePaths.map((absolutePath) => {\n return {\n from: absolutePath,\n to: path.join('app', path.relative(appPath, absolutePath)),\n } satisfies ZipEntry;\n });\n};\n\nexport default async function uploadApplicationSource({\n appId,\n appPkgJson,\n buildId,\n config,\n onProgress,\n}: {\n appId: string;\n appPkgJson: IPackageJson;\n buildId: string;\n config: ProjectConfig;\n onProgress: (progress: number, uploadedSize?: number) => void;\n}) {\n logger.debug(\n {\n scrub: {\n appId,\n appPkgJson,\n buildId,\n config,\n onProgress,\n },\n },\n 'uploadApplicationSource',\n );\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let totalBytes = 0;\n\n let effectiveAppPkgJson = appPkgJson;\n let workspaceEntries: ZipEntry[] = [];\n\n try {\n const workspaceBundle = await prepareWorkspaceBundle({\n appPath: config.appPath,\n appPkgJson,\n config,\n });\n effectiveAppPkgJson = workspaceBundle.appPackageJson;\n workspaceEntries = workspaceBundle.entries;\n } catch (error) {\n logger.error({ err: error }, 'Failed to prepare workspace bundle');\n throw error;\n }\n\n const files: ZipEntry[] = [\n /*\n App files (stored in app/ in the ZIP)\n */\n ...(await getAppFiles(\n config.appFiles,\n config.appPath,\n effectiveAppPkgJson,\n )),\n\n /*\n Optional extra content files (stored in extraContentFiles/ in the ZIP). Their\n paths within is the their relative path from the project root so\n there will be no issues with clashing filenames. We also don't\n also any file paths in our todesktop.json that are outside of the\n project directory\n */\n ...(config.extraContentFiles || []).map(({ from, to = '.' }) => {\n return {\n from,\n to: path.join('extraContentFiles', to, path.basename(from)),\n };\n }),\n\n /*\n Optional extra resources (stored in extraResources/ in the ZIP).\n Similar to extra content files above\n */\n ...(config.extraResources || []).map(({ from, to = '.' }) => {\n return {\n from,\n to: path.join('extraResources', to, path.basename(from)),\n };\n }),\n\n /*\n Icons (more may be added below)\n */\n {\n from: config.icon,\n to: path.join('icons', 'appIcon' + path.extname(config.icon)),\n },\n ];\n\n if (config.linux) {\n if (config.linux.icon) {\n files.push({\n from: config.linux.icon,\n to: path.join(\n 'icons',\n 'appIcon-linux' + path.extname(config.linux.icon),\n ),\n });\n }\n }\n\n if (Array.isArray(config.fileAssociations)) {\n const possibleIcons = [];\n for (const fa of config.fileAssociations) {\n if (fa.icon) {\n const icon = path.parse(fa.icon);\n // The right extension is set by electron-builder\n // https://github.com/electron-userland/electron-builder/blob/abf52eaf8dfba63eb9507c03032d8f7e2f26dd2b/packages/builder-util/src/util.ts#L320\n possibleIcons.push(\n { ext: fa.ext, icon: path.join(icon.dir, icon.name) + '.ico' },\n { ext: fa.ext, icon: path.join(icon.dir, icon.name) + '.icns' },\n );\n }\n }\n\n await Promise.all(\n possibleIcons.map(async ({ ext, icon }) => {\n if (await exists(icon)) {\n files.push({\n from: icon,\n to: path.join('icons', 'association-' + ext + path.extname(icon)),\n });\n }\n }),\n );\n }\n\n if (config.mac) {\n if (config.mac.entitlements) {\n files.push({\n from: config.mac.entitlements,\n to: path.join('other', 'mac', 'entitlements.mac.plist'),\n });\n }\n\n if (config.mac.entitlementsInherit) {\n files.push({\n from: config.mac.entitlementsInherit,\n to: path.join('other', 'mac', 'entitlementsInherit.mac.plist'),\n });\n }\n\n if (config.mac.icon) {\n files.push({\n from: config.mac.icon,\n to: path.join('icons', 'appIcon-mac' + path.extname(config.mac.icon)),\n });\n }\n\n if (config.mac.requirements) {\n files.push({\n from: config.mac.requirements,\n to: path.join('other', 'mac', 'requirements.txt'),\n });\n }\n }\n\n if (config.mas) {\n if (config.mas.entitlements) {\n files.push({\n from: config.mas.entitlements,\n to: path.join('other', 'mac', 'entitlements.mas.plist'),\n });\n }\n\n if (config.mas.entitlementsInherit) {\n files.push({\n from: config.mas.entitlementsInherit,\n to: path.join('other', 'mac', 'entitlementsInherit.mas.plist'),\n });\n }\n\n if (config.mas.provisioningProfile) {\n files.push({\n from: config.mas.provisioningProfile,\n to: path.join('other', 'mac', 'mas.provisionprofile'),\n });\n }\n }\n\n if (config.dmg) {\n if (config.dmg.background) {\n files.push({\n from: config.dmg.background,\n to: path.join('other', 'mac', 'dmg-background.tiff'),\n });\n }\n }\n\n if (config.windows) {\n if (config.windows.icon) {\n files.push({\n from: config.windows.icon,\n to: path.join(\n 'icons',\n 'appIcon-windows' + path.extname(config.windows.icon),\n ),\n });\n }\n\n if (config.windows.nsisInclude) {\n files.push({\n from: config.windows.nsisInclude,\n to: path.join('other', 'installer.nsh'),\n });\n }\n }\n\n if (workspaceEntries.length) {\n files.push(...workspaceEntries);\n }\n\n return uploadToS3({\n bucket: config.bucket || undefined,\n inputStream: await zip({\n files,\n fileSizeLimit: config.uploadSizeLimit,\n onError: (e) => {\n throw e;\n },\n onProgress({ fs }) {\n totalBytes = fs.totalBytes;\n },\n appPkgJson: effectiveAppPkgJson,\n }),\n key: generateS3Key({\n appId,\n buildId,\n filenameSuffix: `${effectiveAppPkgJson.name?.replaceAll('/', '')}.zip`,\n }),\n onProgress({ loaded, total }) {\n onProgress((loaded / total) * 100, loaded);\n },\n });\n}\n\nasync function exists(filePath: string): Promise<boolean> {\n try {\n await fs.promises.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n", "export default ({ appId, buildId, filenameSuffix }) =>\n `${appId}/sourceArchives/${buildId}--${filenameSuffix}`;\n", "import superagent from 'superagent';\nimport streamToArray from 'stream-to-array';\nimport getEnvironmentVariables from '../../../utilities/getEnvironmentVariables';\nimport logger from '../../../utilities/logger';\nimport getCallableFirebaseFunction from '../../../utilities/getCallableFirebaseFunction';\n\nconst { TODESKTOP_CLI_S3_BUCKET } = getEnvironmentVariables();\nconst MAX_RETRIES = 3;\nconst RETRY_DELAY = 2000; // 2 seconds\n\nconst delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\ntype UploadParams = {\n bucket?: string;\n inputStream: NodeJS.ReadableStream;\n key: string;\n onProgress?: (event: { loaded: number; total: number }) => void;\n};\n\ntype UploadedResponse = {\n bucket: string;\n key: string;\n url: string;\n};\n\nconst uploadToS3WithRetry = async (\n input: UploadParams,\n retries = MAX_RETRIES,\n): Promise<any> => {\n try {\n return await uploadToS3(input);\n } catch (error) {\n if (retries > 0) {\n logger.warn(\n `Upload failed. Retrying... (${\n MAX_RETRIES - retries + 1\n } of ${MAX_RETRIES})`,\n );\n await delay(RETRY_DELAY);\n return uploadToS3WithRetry(input, retries - 1);\n } else {\n logger.error('All retries exhausted. Upload failed.');\n throw error;\n }\n }\n};\n\nconst uploadToS3 = async ({\n bucket = TODESKTOP_CLI_S3_BUCKET,\n inputStream,\n key,\n onProgress = () => {},\n}: UploadParams): Promise<UploadedResponse> => {\n const getSignedURL = getCallableFirebaseFunction('getSignedURL');\n const result = await getSignedURL({\n key,\n });\n const data = result.data as {\n signedURL: string;\n uploadURL: string;\n };\n\n const parts = await streamToArray(inputStream);\n const buffers = parts.map((part) =>\n Buffer.isBuffer(part) ? part : Buffer.from(part),\n );\n const body = Buffer.concat(buffers);\n\n return new Promise((resolve, reject) => {\n superagent\n .put(data.signedURL)\n .send(body)\n .set('content-type', 'application/zip')\n .on('progress', onProgress)\n .end((err) => {\n logger.debug({ bucket, key, url: data.uploadURL }, 'uploadToS3');\n if (err) {\n logger.error({ err }, 'uploadToS3');\n return reject(err);\n }\n return resolve({ bucket, key, url: data.uploadURL });\n });\n });\n};\n\nexport default uploadToS3WithRetry;\n", "import archiver from 'archiver';\nimport du from 'du';\nimport fs from 'fs';\nimport chalk from 'chalk';\nimport logger from '../../../utilities/logger';\nimport path from 'path';\n\nexport default async function zip({\n files,\n fileSizeLimit = 20,\n onError,\n onProgress,\n appPkgJson,\n}) {\n logger.debug({ files }, 'zip');\n const stream = archiver('zip');\n\n // good practice to catch warnings (ie stat failures and other non-blocking errors)\n stream.on('warning', (err) => {\n if (err.code === 'ENOENT') {\n console.warn(err);\n logger.warn({ err }, 'zip: stream warning ENOENT');\n } else {\n // throw error\n onError(err);\n }\n });\n\n // good practice to catch this error explicitly\n stream.on('error', (err) => {\n onError(err);\n });\n\n // Grab the file size and more\n const processedFiles = await Promise.all(\n files.map(async (file) => {\n if (file.content !== undefined && file.content !== null) {\n const buffer = Buffer.isBuffer(file.content)\n ? file.content\n : Buffer.from(file.content);\n\n return {\n ...file,\n contentBuffer: buffer,\n isDirectory: false,\n size: buffer.length,\n virtual: true,\n };\n }\n\n if (!file.from) {\n throw new Error(\n `Zip entry for ${file.to} must provide either a source path or in-memory content.`,\n );\n }\n\n const stats = fs.lstatSync(file.from);\n const isDirectory = stats.isDirectory();\n\n return {\n ...file,\n isDirectory,\n stats,\n size: isDirectory ? await du(file.from) : stats.size,\n virtual: false,\n };\n }),\n );\n\n const totalFileSize = processedFiles.reduce((sum, b) => sum + b.size, 0);\n // Does file size sum exceed limit?\n if (totalFileSize > fileSizeLimit * 1000000) {\n onError(\n new Error(\n [\n `\\n\\nYour app is larger than ${fileSizeLimit}MB. Your app is ${chalk.bold.red.underline(\n (totalFileSize / 1000000).toFixed(1) + 'MB',\n )}.\\n`,\n `You may be including unnecessary files in your app(see the \\`appPath\\` and \\`appFiles\\` options).`,\n `If not, this limit can be raised by setting the \\`uploadSizeLimit\\` option.`,\n `Learn more at https://www.npmjs.com/package/@todesktop/cli#uploadsizelimit---optional-number`,\n ].join('\\n'),\n ),\n );\n return stream;\n }\n\n // Add the files to the ZIP\n processedFiles.forEach((entry) => {\n const { from, isDirectory, stats, to, virtual, contentBuffer, mode } =\n entry;\n if (virtual) {\n stream.append(contentBuffer, {\n name: to,\n mode: mode ?? 0o644,\n });\n } else if (isDirectory) {\n stream.directory(from, to);\n } else if (appPkgJson && to === path.join('app', 'package.json')) {\n stream.append(JSON.stringify(appPkgJson), {\n name: to,\n });\n } else {\n stream.file(from, { name: to, mode: mode ?? stats.mode });\n }\n });\n\n // finalize the archive (ie we are done appending files but streams have to finish yet)\n // 'close', 'end' or 'finish' may be fired right after calling this method so register to them beforehand\n stream.finalize();\n\n stream.on('progress', (progress) =>\n onProgress({\n ...progress,\n percentage: (progress.entries.processed / progress.entries.total) * 100,\n }),\n );\n\n return stream;\n}\n", "import fastGlob from 'fast-glob';\nimport fs from 'fs';\nimport path from 'path';\nimport yaml from 'js-yaml';\nimport logger from '../../../../utilities/logger';\nimport type { ProjectConfig } from '../../../../types';\nimport type { IPackageJson } from 'package-json-type';\n\ntype WorkspaceType = 'npm' | 'pnpm';\n\ntype DependencySection =\n | 'dependencies'\n | 'optionalDependencies'\n | 'devDependencies';\n\ninterface WorkspacePackage {\n dir: string;\n manifest: IPackageJson;\n name: string;\n realDir: string;\n}\n\ninterface DependencyReference {\n name: string;\n spec: string;\n section: DependencySection;\n}\n\ninterface WorkspaceBundleInput {\n appPath: string;\n appPkgJson: IPackageJson;\n config: ProjectConfig;\n}\n\nexport interface ZipEntry {\n content?: string | Buffer;\n from?: string;\n mode?: number;\n to: string;\n}\n\nexport interface WorkspaceBundleResult {\n appPackageJson: IPackageJson;\n entries: ZipEntry[];\n shouldBundle: boolean;\n}\n\ninterface WorkspaceDefinition {\n globs: string[];\n rootDir: string;\n realRootDir: string;\n type: WorkspaceType;\n warning?: string;\n catalog?: Record<string, string>;\n}\n\ninterface PackageRewriteContext {\n bundlePath: string;\n packageName: string;\n}\n\nconst BUNDLED_ROOT = 'bundledPackages';\nconst DEFAULT_IGNORE_GLOBS = [\n '**/node_modules/**',\n '**/.git/**',\n '**/.hg/**',\n '**/.svn/**',\n '**/.DS_Store',\n '**/npm-debug.log',\n '**/yarn-error.log',\n];\n\nexport default async function prepareWorkspaceBundle(\n input: WorkspaceBundleInput,\n): Promise<WorkspaceBundleResult> {\n const { config, appPkgJson, appPath } = input;\n if (!config.bundleWorkspacePackages?.enabled) {\n return {\n appPackageJson: appPkgJson,\n entries: [],\n shouldBundle: false,\n };\n }\n\n const workspace = findWorkspaceDefinition(appPath, appPkgJson);\n if (!workspace) {\n throw new Error(\n 'Bundle workspace packages is enabled but no workspace root could be found.',\n );\n }\n\n if (workspace.warning) {\n logger.warn(workspace.warning);\n }\n\n const workspacePackages = collectWorkspacePackages(workspace);\n const bundledPackageNames = determineBundleClosure({\n appPath,\n appPkgJson,\n workspace,\n workspacePackages,\n });\n\n if (!bundledPackageNames.size) {\n logger.info('No workspace packages matched bundle criteria.');\n return {\n appPackageJson: appPkgJson,\n entries: [],\n shouldBundle: false,\n };\n }\n\n const bundleEntries: ZipEntry[] = [];\n const appRewriteMap: Record<string, string> = {};\n const bundledPackageContexts = new Map<string, PackageRewriteContext>();\n\n const sortedPackageNames = Array.from(bundledPackageNames).sort();\n for (const packageName of sortedPackageNames) {\n const pkg = workspacePackages.get(packageName);\n if (!pkg) {\n throw new Error(\n `Workspace package \"${packageName}\" referenced for bundling but not found in workspace map.`,\n );\n }\n const bundlePath = getBundlePath(packageName);\n bundledPackageContexts.set(packageName, { bundlePath, packageName });\n appRewriteMap[packageName] = `file:../${path.posix.join(\n BUNDLED_ROOT,\n bundlePath,\n )}`;\n\n const packageEntries = await buildPackageEntries({\n bundlePath,\n workspacePackage: pkg,\n bundledNames: bundledPackageNames,\n contexts: bundledPackageContexts,\n workspace,\n });\n bundleEntries.push(...packageEntries.files);\n bundleEntries.push(packageEntries.packageJsonEntry);\n }\n\n const rewrittenAppPkgJson = applyRewriteMap(\n appPkgJson,\n appRewriteMap,\n workspace.catalog,\n );\n\n logger.info(\n `Bundling ${sortedPackageNames.length} workspace package(s) from ${workspace.type} workspace at ${workspace.rootDir}`,\n );\n logger.info(`Bundled packages: ${sortedPackageNames.join(', ')}`);\n\n return {\n appPackageJson: rewrittenAppPkgJson,\n entries: bundleEntries,\n shouldBundle: true,\n };\n}\n\nfunction findWorkspaceDefinition(\n appPath: string,\n appPkgJson: IPackageJson,\n): WorkspaceDefinition | undefined {\n const appDir = path.resolve(appPath);\n let currentDir = appDir;\n let previousDir = '';\n const pnpmPreference = detectPnpmPreference(appPkgJson);\n\n while (currentDir !== previousDir) {\n const pnpmFile = path.join(currentDir, 'pnpm-workspace.yaml');\n const packageJsonPath = path.join(currentDir, 'package.json');\n\n const hasPnpm = fs.existsSync(pnpmFile);\n const packageJson = readPackageJsonIfExists(packageJsonPath);\n const npmWorkspaces = getNpmWorkspaces(packageJson);\n\n if (hasPnpm || npmWorkspaces.length) {\n const pnpmDefinition = hasPnpm\n ? createPnpmDefinition({ pnpmFile, rootDir: currentDir })\n : undefined;\n const npmDefinition = npmWorkspaces.length\n ? createNpmDefinition({ globs: npmWorkspaces, rootDir: currentDir })\n : undefined;\n\n const chosen = chooseWorkspaceDefinition({\n pnpmPreference,\n pnpmDefinition,\n npmDefinition,\n });\n\n if (chosen) {\n const includesApp = workspaceIncludesPath({\n appDir,\n globs: chosen.globs,\n rootDir: chosen.rootDir,\n });\n if (includesApp) {\n return chosen;\n }\n }\n }\n\n previousDir = currentDir;\n currentDir = path.dirname(currentDir);\n }\n\n return undefined;\n}\n\nfunction detectPnpmPreference(appPkgJson: IPackageJson): boolean {\n const pkgManager = appPkgJson.packageManager;\n if (typeof pkgManager !== 'string') {\n return false;\n }\n return pkgManager.startsWith('pnpm@');\n}\n\nfunction readPackageJsonIfExists(filePath: string): IPackageJson | undefined {\n if (!fs.existsSync(filePath)) {\n return undefined;\n }\n try {\n return JSON.parse(fs.readFileSync(filePath, 'utf8'));\n } catch (error) {\n throw new Error(`Unable to parse package.json at ${filePath}: ${error}`);\n }\n}\n\nfunction getNpmWorkspaces(packageJson?: IPackageJson): string[] {\n if (!packageJson) {\n return [];\n }\n const { workspaces } = packageJson as Record<string, any>;\n if (!workspaces) {\n return [];\n }\n if (Array.isArray(workspaces)) {\n return workspaces.filter(\n (value): value is string => typeof value === 'string',\n );\n }\n if (typeof workspaces === 'object' && Array.isArray(workspaces.packages)) {\n return workspaces.packages.filter(\n (value): value is string => typeof value === 'string',\n );\n }\n return [];\n}\n\nfunction createPnpmDefinition({\n pnpmFile,\n rootDir,\n}: {\n pnpmFile: string;\n rootDir: string;\n}): WorkspaceDefinition {\n const { packages, catalog } = parsePnpmWorkspaceFile(pnpmFile);\n if (!packages.length) {\n throw new Error(\n `pnpm workspace file at ${pnpmFile} does not define any packages.`,\n );\n }\n return {\n globs: packages,\n rootDir,\n realRootDir: fs.realpathSync(rootDir),\n type: 'pnpm',\n catalog,\n };\n}\n\nfunction createNpmDefinition({\n globs,\n rootDir,\n}: {\n globs: string[];\n rootDir: string;\n}): WorkspaceDefinition {\n return {\n globs,\n rootDir,\n realRootDir: fs.realpathSync(rootDir),\n type: 'npm',\n };\n}\n\nfunction chooseWorkspaceDefinition({\n pnpmPreference,\n pnpmDefinition,\n npmDefinition,\n}: {\n pnpmPreference: boolean;\n pnpmDefinition?: WorkspaceDefinition;\n npmDefinition?: WorkspaceDefinition;\n}): WorkspaceDefinition | undefined {\n if (pnpmDefinition && npmDefinition) {\n const warning =\n 'Both pnpm-workspace.yaml and package.json workspaces detected; defaulting to pnpm.';\n if (pnpmPreference) {\n return pnpmDefinition;\n }\n return { ...pnpmDefinition, warning };\n }\n return pnpmDefinition || npmDefinition;\n}\n\nfunction parsePnpmWorkspaceFile(filePath: string): {\n packages: string[];\n catalog: Record<string, string>;\n} {\n const content = fs.readFileSync(filePath, 'utf8');\n const parsed = yaml.load(content);\n\n let packagesField: unknown;\n let catalogField: unknown;\n let catalogsField: unknown;\n\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n const parsedObj = parsed as Record<string, unknown>;\n packagesField = parsedObj.packages;\n catalogField = parsedObj.catalog;\n catalogsField = parsedObj.catalogs;\n } else {\n packagesField = parsed;\n }\n\n if (!Array.isArray(packagesField)) {\n throw new Error(\n `pnpm workspace file at ${filePath} does not define any packages.`,\n );\n }\n\n const packages = packagesField\n .map((value) => (typeof value === 'string' ? value.trim() : ''))\n .filter((value): value is string => Boolean(value));\n\n if (!packages.length) {\n throw new Error(\n `pnpm workspace file at ${filePath} does not define any packages.`,\n );\n }\n\n // Parse catalog if it exists\n const catalog: Record<string, string> = {};\n if (\n catalogField &&\n typeof catalogField === 'object' &&\n !Array.isArray(catalogField)\n ) {\n for (const [key, value] of Object.entries(catalogField)) {\n if (typeof value === 'string') {\n catalog[key] = value;\n }\n }\n }\n\n // Parse and flatten named catalogs onto the main catalog\n // Named catalogs are flattened with the key format: \"catalogName:packageName\"\n if (\n catalogsField &&\n typeof catalogsField === 'object' &&\n !Array.isArray(catalogsField)\n ) {\n for (const [catalogName, catalogContent] of Object.entries(catalogsField)) {\n if (\n catalogContent &&\n typeof catalogContent === 'object' &&\n !Array.isArray(catalogContent)\n ) {\n for (const [packageName, version] of Object.entries(catalogContent)) {\n if (typeof version === 'string') {\n // Flatten named catalog entries with format \"catalogName:packageName\"\n catalog[`${catalogName}:${packageName}`] = version;\n }\n }\n }\n }\n }\n\n return { packages, catalog };\n}\n\nfunction workspaceIncludesPath({\n appDir,\n globs,\n rootDir,\n}: {\n appDir: string;\n globs: string[];\n rootDir: string;\n}) {\n const target = path.resolve(appDir);\n const matches = fastGlob.sync(globs, {\n absolute: true,\n cwd: rootDir,\n onlyDirectories: true,\n followSymbolicLinks: false,\n ignore: ['**/node_modules/**'],\n });\n return matches.some((dir) => path.resolve(dir) === target);\n}\n\nfunction collectWorkspacePackages(\n definition: WorkspaceDefinition,\n): Map<string, WorkspacePackage> {\n const { globs, rootDir } = definition;\n const directories = fastGlob.sync(globs, {\n absolute: true,\n cwd: rootDir,\n onlyDirectories: true,\n followSymbolicLinks: false,\n ignore: ['**/node_modules/**'],\n });\n\n const packages = new Map<string, WorkspacePackage>();\n\n for (const dir of directories) {\n const packageJsonPath = path.join(dir, 'package.json');\n if (!fs.existsSync(packageJsonPath)) {\n continue;\n }\n const manifest = readPackageJsonIfExists(packageJsonPath);\n if (!manifest || !manifest.name) {\n continue;\n }\n const { name } = manifest;\n if (packages.has(name)) {\n const existing = packages.get(name);\n throw new Error(\n `Duplicate workspace package name \"${name}\" found at ${existing?.dir} and ${dir}`,\n );\n }\n const absoluteDir = path.resolve(dir);\n const pkg: WorkspacePackage = {\n dir: absoluteDir,\n manifest,\n name,\n realDir: fs.realpathSync(absoluteDir),\n };\n packages.set(name, pkg);\n }\n\n return packages;\n}\n\nfunction determineBundleClosure({\n appPath,\n appPkgJson,\n workspace,\n workspacePackages,\n}: {\n appPath: string;\n appPkgJson: IPackageJson;\n workspace: WorkspaceDefinition;\n workspacePackages: Map<string, WorkspacePackage>;\n}): Set<string> {\n const bundled = new Set<string>();\n const queue: DependencyReference[] = [];\n\n collectDependencyReferences({\n manifest: appPkgJson,\n packageDir: appPath,\n queue,\n workspace,\n workspacePackages,\n sourceName: 'app',\n });\n\n while (queue.length) {\n const ref = queue.shift();\n if (!ref) {\n continue;\n }\n const targetPackage = workspacePackages.get(ref.name);\n if (!targetPackage) {\n throw new Error(\n `Dependency \"${ref.name}\" referenced via ${ref.section} is not part of the workspace.`,\n );\n }\n if (bundled.has(targetPackage.name)) {\n continue;\n }\n bundled.add(targetPackage.name);\n collectDependencyReferences({\n manifest: targetPackage.manifest,\n packageDir: targetPackage.dir,\n queue,\n workspace,\n workspacePackages,\n sourceName: targetPackage.name,\n });\n }\n\n return bundled;\n}\n\nfunction collectDependencyReferences({\n manifest,\n packageDir,\n queue,\n workspace,\n workspacePackages,\n sourceName,\n}: {\n manifest: IPackageJson;\n packageDir: string;\n queue: DependencyReference[];\n workspace: WorkspaceDefinition;\n workspacePackages: Map<string, WorkspacePackage>;\n sourceName: string;\n}) {\n const sections: DependencySection[] = [\n 'dependencies',\n 'optionalDependencies',\n 'devDependencies',\n ];\n\n for (const section of sections) {\n const deps = manifest[section];\n if (!deps) continue;\n for (const [depName, spec] of Object.entries(deps)) {\n if (typeof spec !== 'string') continue;\n const target = resolveWorkspaceTarget({\n depName,\n packageDir,\n spec,\n workspace,\n workspacePackages,\n sourceName,\n });\n if (target) {\n queue.push({ name: target, spec, section });\n }\n }\n }\n}\n\nfunction resolveWorkspaceTarget({\n depName,\n packageDir,\n spec,\n workspace,\n workspacePackages,\n sourceName,\n}: {\n depName: string;\n packageDir: string;\n spec: string;\n workspace: WorkspaceDefinition;\n workspacePackages: Map<string, WorkspacePackage>;\n sourceName: string;\n}): string | undefined {\n if (spec.startsWith('workspace:')) {\n if (!workspacePackages.has(depName)) {\n throw new Error(\n `Workspace dependency \"${depName}\" referenced by ${sourceName} is not declared in workspace globs.`,\n );\n }\n return depName;\n }\n\n if (spec.startsWith('file:')) {\n const targetPath = spec.slice('file:'.length);\n const resolved = path.resolve(packageDir, targetPath);\n const targetRealPath = fs.realpathSync(resolved);\n const relativeToRoot = path.relative(workspace.realRootDir, targetRealPath);\n if (relativeToRoot.startsWith('..') || path.isAbsolute(relativeToRoot)) {\n throw new Error(\n `Dependency \"${depName}\" from ${sourceName} resolves outside of workspace root via spec ${spec}.`,\n );\n }\n for (const pkg of workspacePackages.values()) {\n if (pkg.realDir === targetRealPath) {\n return pkg.name;\n }\n }\n throw new Error(\n `Dependency \"${depName}\" from ${sourceName} points to ${resolved}, which is not a known workspace package.`,\n );\n }\n\n return undefined;\n}\n\nfunction getBundlePath(packageName: string): string {\n if (packageName.startsWith('@')) {\n const [scope, ...rest] = packageName.split('/');\n return [scope, rest.join('/')].filter(Boolean).join('/');\n }\n return packageName;\n}\n\nfunction applyRewriteMap(\n manifest: IPackageJson,\n rewriteMap: Record<string, string>,\n catalog?: Record<string, string>,\n): IPackageJson {\n const clone = JSON.parse(JSON.stringify(manifest));\n const sections: DependencySection[] = [\n 'dependencies',\n 'optionalDependencies',\n 'devDependencies',\n ];\n\n for (const section of sections) {\n const sectionDeps = clone[section];\n if (!sectionDeps) continue;\n\n // Apply path rewrites for workspace packages\n for (const [depName, rewrite] of Object.entries(rewriteMap)) {\n if (sectionDeps[depName]) {\n sectionDeps[depName] = rewrite;\n }\n }\n\n // Resolve catalog references\n if (catalog) {\n for (const [depName, spec] of Object.entries(sectionDeps)) {\n if (typeof spec === 'string' && spec.startsWith('catalog:')) {\n let catalogKey: string;\n\n if (spec === 'catalog:') {\n // \"catalog:\" means use the default catalog with the package name\n catalogKey = depName;\n } else {\n // \"catalog:someName\" could be either:\n // 1. A named catalog reference (look for \"someName:depName\")\n // 2. A specific package in default catalog (look for \"someName\")\n const catalogRef = spec.slice('catalog:'.length);\n const namedCatalogKey = `${catalogRef}:${depName}`;\n\n // Try named catalog first (e.g., \"react17:react\")\n if (catalog[namedCatalogKey]) {\n catalogKey = namedCatalogKey;\n } else {\n // Fall back to direct catalog reference\n catalogKey = catalogRef;\n }\n }\n\n const resolvedVersion = catalog[catalogKey];\n if (resolvedVersion) {\n sectionDeps[depName] = resolvedVersion;\n } else {\n throw new Error(\n `Catalog reference \"${spec}\" for dependency \"${depName}\" not found in pnpm catalog. Available catalog entries: ${Object.keys(\n catalog,\n ).join(', ')}`,\n );\n }\n }\n }\n }\n }\n\n return clone;\n}\n\nasync function buildPackageEntries({\n bundlePath,\n workspacePackage,\n bundledNames,\n contexts,\n workspace,\n}: {\n bundlePath: string;\n workspacePackage: WorkspacePackage;\n bundledNames: Set<string>;\n contexts: Map<string, PackageRewriteContext>;\n workspace: WorkspaceDefinition;\n}): Promise<{\n files: ZipEntry[];\n packageJsonEntry: ZipEntry;\n}> {\n const packageDir = workspacePackage.dir;\n const { manifest } = workspacePackage;\n const filesToInclude = await gatherPackageFiles({ packageDir, manifest });\n const files: ZipEntry[] = filesToInclude.map((absolutePath) => {\n const relative = path.relative(packageDir, absolutePath);\n const posixRelative = toPosix(path.join(bundlePath, relative));\n return {\n from: absolutePath,\n to: path.posix.join(BUNDLED_ROOT, posixRelative),\n };\n });\n\n const rewrites = buildRewriteMapForPackage({\n bundlePath,\n manifest,\n bundledNames,\n contexts,\n });\n\n const packageJsonEntry: ZipEntry = {\n content: Buffer.from(\n `${JSON.stringify(\n applyRewriteMap(manifest, rewrites, workspace.catalog),\n null,\n 2,\n )}\\n`,\n ),\n to: path.posix.join(BUNDLED_ROOT, bundlePath, 'package.json'),\n };\n\n return { files, packageJsonEntry };\n}\n\nasync function gatherPackageFiles({\n packageDir,\n manifest,\n}: {\n packageDir: string;\n manifest: IPackageJson;\n}): Promise<string[]> {\n const declaredPatterns = Array.isArray((manifest as any).files)\n ? ((manifest as any).files as string[])\n : ['**/*'];\n\n const normalizedPatterns = declaredPatterns.flatMap((pattern) => {\n if (pattern.includes('*')) {\n return [pattern];\n }\n const absoluteCandidate = path.join(packageDir, pattern);\n try {\n const stats = fs.statSync(absoluteCandidate);\n if (stats.isDirectory()) {\n const posixPattern = pattern.replace(/\\\\/g, '/');\n return [pattern, `${posixPattern}/**/*`];\n }\n } catch (_error) {\n // ignore stat errors and treat as file pattern\n }\n return [pattern];\n });\n\n const matchedFiles = await fastGlob(normalizedPatterns, {\n absolute: true,\n cwd: packageDir,\n dot: true,\n onlyFiles: true,\n followSymbolicLinks: false,\n ignore: DEFAULT_IGNORE_GLOBS,\n });\n\n const extras = [\n 'README',\n 'README.md',\n 'README.txt',\n 'LICENSE',\n 'LICENCE',\n 'NOTICE',\n 'CHANGELOG',\n 'CHANGELOG.md',\n ];\n\n for (const extra of extras) {\n const extraPath = path.join(packageDir, extra);\n if (fs.existsSync(extraPath) && fs.statSync(extraPath).isFile()) {\n matchedFiles.push(extraPath);\n }\n }\n\n const uniqueFiles = Array.from(new Set(matchedFiles));\n\n return uniqueFiles.filter((filePath) => !filePath.endsWith('package.json'));\n}\n\nfunction buildRewriteMapForPackage({\n bundlePath,\n manifest,\n bundledNames,\n contexts,\n}: {\n bundlePath: string;\n manifest: IPackageJson;\n bundledNames: Set<string>;\n contexts: Map<string, PackageRewriteContext>;\n}): Record<string, string> {\n const rewriteMap: Record<string, string> = {};\n const sections: DependencySection[] = [\n 'dependencies',\n 'optionalDependencies',\n 'devDependencies',\n ];\n\n for (const section of sections) {\n const deps = manifest[section];\n if (!deps) continue;\n for (const [depName, spec] of Object.entries(deps)) {\n if (typeof spec !== 'string') continue;\n if (bundledNames.has(depName)) {\n const targetBundlePath =\n contexts.get(depName)?.bundlePath ?? getBundlePath(depName);\n const fromPath = path.posix.join(BUNDLED_ROOT, bundlePath);\n const toPath = path.posix.join(BUNDLED_ROOT, targetBundlePath);\n const relative = path.posix.relative(fromPath, toPath) || '.';\n rewriteMap[depName] = `file:${relative}`;\n }\n }\n }\n return rewriteMap;\n}\n\nfunction toPosix(targetPath: string) {\n return targetPath.split(path.sep).join(path.posix.sep);\n}\n", "import { useStdin } from 'ink';\nimport { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport isCi from 'is-ci';\n\n// components\nimport Login from './Login';\n\n// logic\nimport { signInWithCustomToken } from '../utilities/firestore';\nimport { getAuthConfig, setAuthConfig } from '../utilities/configStore';\nimport postToFirebaseFunction from '../utilities/postToFirebaseFunction';\nimport getEnvironmentVariables from '../utilities/getEnvironmentVariables';\nimport ErrorDisplay from './ErrorDisplay';\nimport LoadingText from './LoadingText';\n\nconst LoginHOC = ({ children, isInteractive = true }) => {\n const [isLoggedIn, setIsLoggedIn] = useState(false);\n const [isEffectDone, setEffectDone] = useState(false);\n const [error, setError] = useState(null);\n const { isRawModeSupported } = useStdin();\n\n // use effect for determining if tokens exist and are valid\n useEffect(() => {\n async function isAccessTokenValid() {\n const { accessToken, email, jwtToken } = getAuthConfig();\n let userCreds = null;\n\n const { TODESKTOP_ACCESS_TOKEN, TODESKTOP_EMAIL } =\n getEnvironmentVariables();\n\n // 1. attempt log in with environment variables if present\n try {\n if (TODESKTOP_ACCESS_TOKEN && TODESKTOP_EMAIL) {\n const newJwtToken = await postToFirebaseFunction(\n 'loginWithAccessToken',\n {\n email: TODESKTOP_EMAIL,\n accessToken: TODESKTOP_ACCESS_TOKEN,\n },\n );\n\n if (newJwtToken) {\n userCreds = await signInWithCustomToken(newJwtToken);\n if (userCreds.user) setIsLoggedIn(true);\n }\n // if no environment variables set and is in a CI, set alert message and exit\n } else if (!isRawModeSupported || isCi) {\n setError(\n new Error(\n 'ToDesktop environment variables not found. When automating builds with your CI provider, you need to specify environment variables for TODESKTOP_EMAIL and TODESKTOP_ACCESS_TOKEN.',\n ),\n );\n }\n } catch (err) {\n if (typeof err === 'object') {\n err.message = 'Log in with environment variables failed.';\n }\n setError(err);\n }\n\n // 2. attempt log in with jwtToken if present\n try {\n if (!userCreds && jwtToken) {\n userCreds = await signInWithCustomToken(jwtToken);\n if (userCreds.user) setIsLoggedIn(true);\n }\n } catch {\n // do nothing, attempt login with accessToken and email\n }\n\n // 3. attempt log in with accessToken and email on disk\n try {\n if (!userCreds && accessToken && email) {\n const newJwtToken = await postToFirebaseFunction(\n 'loginWithAccessToken',\n { email, accessToken },\n );\n\n if (newJwtToken) {\n userCreds = await signInWithCustomToken(newJwtToken);\n setAuthConfig(email, accessToken, newJwtToken);\n if (userCreds.user) setIsLoggedIn(true);\n }\n }\n } catch {\n // do nothing: no error state and not logged in state means render login\n }\n\n setEffectDone(true);\n }\n\n isAccessTokenValid();\n }, [isRawModeSupported]);\n\n if (error && isInteractive) {\n return <ErrorDisplay error={error} />;\n }\n\n if (!isEffectDone) {\n return <LoadingText />;\n }\n\n if (!isLoggedIn && isInteractive) {\n return <Login setIsLoggedIn={setIsLoggedIn} />;\n }\n\n return <>{children}</>;\n};\n\nLoginHOC.propTypes = {\n children: PropTypes.object,\n isInteractive: PropTypes.bool,\n};\n\nexport default LoginHOC;\n", "// modules\nimport { Box, Text } from 'ink';\nimport PropTypes from 'prop-types';\nimport { useState } from 'react';\nimport { Form, Field } from 'react-final-form';\n\n// components\nimport TextInput from './TextInput';\nimport ErrorDisplay from './ErrorDisplay';\n\n// logic\nimport postToFirebaseFunction from '../utilities/postToFirebaseFunction';\nimport { signInWithCustomToken } from '../utilities/firestore';\nimport { setAuthConfig } from '../utilities/configStore';\n\nconst loginFields = [\n {\n name: 'email',\n label: 'Your email',\n placeholder: 'name@email.com',\n Input: TextInput,\n validate: (value) => {\n if (!value) return 'Required';\n },\n },\n {\n name: 'accessToken',\n label: 'Your access token',\n placeholder: '********',\n Input: TextInput,\n validate: (value) => {\n if (!value) return 'Required';\n },\n mask: '*',\n },\n];\n\nconst Login = ({ setIsLoggedIn }) => {\n const [activeField, setActiveField] = useState(0);\n const [error, setError] = useState(null);\n const [failureMessage, setFailureMessage] = useState(null);\n const [isSubmittingForm, setIsSubmittingForm] = useState(false);\n\n const onFailure = (message) => {\n setIsSubmittingForm(false);\n setFailureMessage(message);\n setActiveField(0);\n };\n\n // login handler that verifies accessToken and email with that in firebase\n const onSubmitLogin = async ({ email, accessToken }) => {\n setFailureMessage(null);\n setIsSubmittingForm(true);\n\n try {\n const jwtToken = await postToFirebaseFunction('loginWithAccessToken', {\n email,\n accessToken,\n });\n\n if (jwtToken) {\n await signInWithCustomToken(jwtToken);\n setAuthConfig(email, accessToken, jwtToken);\n setIsLoggedIn(true);\n } else {\n onFailure('Incorrrect credentials. Try again');\n }\n } catch (err) {\n if (err.code === 500) {\n setError(err);\n } else {\n onFailure(\n `Login unsuccessful: ${err?.response?.data?.message || err.message}`,\n );\n }\n }\n };\n\n if (error) return <ErrorDisplay error={error} />;\n\n return (\n <>\n <Text>You are not currently logged in.</Text>\n <Text>Log in below:</Text>\n <Box marginBottom={1} />\n <Form onSubmit={onSubmitLogin}>\n {({ handleSubmit, validating }) => (\n <Box flexDirection=\"column\">\n {loginFields.map(\n ({ name, label, placeholder, validate, Input, mask }, index) => (\n <Field name={name} key={name} validate={validate}>\n {({ input, meta }) => (\n <Box flexDirection=\"column\">\n {activeField >= index ? (\n <Box>\n <Text bold={activeField === index}>{label}: </Text>\n {activeField === index ? (\n <Input\n {...input}\n mask={mask}\n placeholder={placeholder}\n onSubmit={() => {\n if (meta.valid && !validating) {\n setActiveField((value) => value + 1); // go to next field\n if (activeField === loginFields.length - 1) {\n // last field, so submit\n handleSubmit();\n }\n } else {\n input.onBlur(); // mark as touched to show error\n }\n }}\n />\n ) : (\n (input.value && (\n <Text>\n {name === 'accessToken'\n ? input.value.replace(/./gi, '*')\n : input.value}\n </Text>\n )) ||\n (placeholder && (\n <Text color=\"gray\">{placeholder}</Text>\n ))\n )}\n {meta.invalid && meta.touched && (\n <Box marginLeft={2} marginRight={1}>\n <Text color=\"red\">\u2716</Text>\n </Box>\n )}\n {meta.error && meta.touched && (\n <Error errorMessage={meta.error} />\n )}\n </Box>\n ) : null}\n </Box>\n )}\n </Field>\n ),\n )}\n </Box>\n )}\n </Form>\n\n {isSubmittingForm && (\n <Box marginTop={1}>\n <Text>Logging in...</Text>\n </Box>\n )}\n\n {failureMessage && <Error errorMessage={failureMessage} marginTop />}\n </>\n );\n};\n\nconst Error = ({\n errorMessage,\n marginTop,\n}: {\n errorMessage: string;\n marginTop?: boolean;\n}) => (\n <Box marginTop={marginTop ? 1 : 0}>\n <Text color=\"red\">{errorMessage}</Text>\n </Box>\n);\n\nError.propTypes = {\n errorMessage: PropTypes.string.isRequired,\n marginTop: PropTypes.bool,\n};\n\nLogin.propTypes = {\n setIsLoggedIn: PropTypes.func.isRequired,\n};\n\nexport default Login;\n", "import InkTextInput from 'ink-text-input';\nimport React from 'react';\n\nconst TextInput = ({ onBlur, onFocus, ...props }: TextInputProps) => {\n React.useEffect(() => {\n onFocus();\n return onBlur;\n }, [onFocus, onBlur]);\n return <InkTextInput {...props} showCursor />;\n};\n\nexport default TextInput;\n\ntype InkTextInputProps = React.ComponentProps<typeof InkTextInput>;\ninterface TextInputProps extends InkTextInputProps {\n onBlur: () => void;\n onFocus: () => void;\n}\n", "import { Text, useStdout } from 'ink';\n\nconst LoadingText = ({ text = 'Loading' }: { text?: string }) => {\n const { stdout } = useStdout();\n const stdOutRedirected = !stdout.isTTY;\n if (stdOutRedirected) {\n // Don't write Loading text if we're not in a TTY (e.g... redirected to a file)\n return null;\n }\n\n return <Text>{text}...</Text>;\n};\n\nexport default LoadingText;\n", "import * as Sentry from '@sentry/node';\nimport React, { ReactNode } from 'react';\n\nclass ErrorBoundary extends React.Component<\n { children: ReactNode },\n { error?: Error; eventId?: string }\n> {\n constructor(props) {\n super(props);\n this.state = { error: null };\n }\n\n static getDerivedStateFromError(error) {\n return { error };\n }\n\n componentDidCatch(error, errorInfo) {\n Sentry.withScope((scope) => {\n scope.setExtras(errorInfo);\n Sentry.captureException(error);\n });\n }\n\n render() {\n const { children } = this.props;\n const { error } = this.state;\n\n if (error) {\n throw error;\n }\n\n return children;\n }\n}\n\nexport default ErrorBoundary;\n", "import { Box, Text, useStdin } from 'ink';\nimport SelectInput from 'ink-select-input';\nimport PropTypes from 'prop-types';\nimport { ReactNode, useEffect, useState } from 'react';\nimport type { Build } from '@todesktop/shared';\nimport CancelBuild from '../../../components/CancelBuild';\nimport CustomSelectInputIndicator from '../../../components/CustomSelectInputIndicator';\nimport CustomSelectInputItem from '../../../components/CustomSelectInputItem';\nimport ErrorDisplay from '../../../components/ErrorDisplay';\nimport ViewBuild from '../../../components/ViewBuild';\nimport {\n isBuildCancellable,\n isBuildRunning,\n} from '../../../utilities/buildStatus';\nimport {\n collection,\n query,\n where,\n orderBy,\n limit,\n getDocs,\n} from 'firebase/firestore';\nimport firestore from '../../../utilities/firestore';\nimport getProjectConfig from '../../../utilities/projectConfig/getProjectConfig';\nimport logger from '../../../utilities/logger';\nimport useInput from '../../../utilities/useInput';\nimport useExit from '../../../utilities/useExit';\nimport isCi from 'is-ci';\nimport findAppUserId from '../../../utilities/findAppUserId';\nimport { readQueryDocument } from '../../../utilities/firestoreData';\n\nconst OngoingBuildGuard = ({\n children,\n commandUsed,\n configPath,\n}: {\n children: ReactNode;\n commandUsed: string;\n configPath?: string;\n}) => {\n const { isRawModeSupported } = useStdin();\n const exit = useExit();\n const [{ appId, builds, error, isLoading, itemChosen }, setState] = useState<{\n appId: string | null;\n builds: Build[];\n error: Error | null;\n isLoading: boolean;\n itemChosen: { value: string } | null;\n }>({\n appId: null,\n builds: [],\n error: null,\n isLoading: true,\n itemChosen: null,\n });\n\n useEffect(() => {\n if (!isLoading) {\n return;\n }\n\n (async () => {\n try {\n const applicationId = getProjectConfig(configPath).config.id;\n const { id } = await findAppUserId(applicationId);\n\n const now = new Date();\n const twentyFourHoursAgo = new Date(\n now.getTime() - 24 * 60 * 60 * 1000,\n );\n\n const buildsQuery = query(\n collection(\n firestore,\n `users/${id}/applications/${applicationId}/builds`,\n ),\n where('createdAt', '>=', twentyFourHoursAgo),\n orderBy('createdAt', 'desc'),\n limit(10),\n );\n const buildsResult = await getDocs(buildsQuery);\n\n const stateUpdates: {\n appId: string | null;\n isLoading: boolean;\n builds: Build[];\n } = {\n appId: applicationId,\n isLoading: false,\n builds: [],\n };\n\n if (!buildsResult.empty) {\n const latestBuild = readQueryDocument<Build>(buildsResult.docs[0]);\n const isRunning =\n isBuildRunning(latestBuild) && latestBuild.status !== 'preparation';\n logger.debug(\n { isRunning },\n 'OngoingBuildGuard component: got latest build',\n );\n\n stateUpdates.builds = buildsResult.docs\n .map((doc) => readQueryDocument<Build>(doc))\n .filter((build) => {\n if (isBuildRunning(build) && build.status !== 'preparation') {\n return true;\n }\n return false;\n });\n }\n\n setState((previousState) => ({\n ...previousState,\n ...stateUpdates,\n }));\n } catch (e) {\n setState((previousState) => ({\n ...previousState,\n error: e as Error,\n }));\n }\n })();\n }, [builds, itemChosen, isLoading, isRawModeSupported, configPath]);\n\n /*\n Because we're using <SelectInput/>, we need to explicitly handle when\n ctrl+c is pressed. `useInput` takes care of that.\n See https://github.com/vadimdemedes/pastel/issues/38\n */\n useInput(() => {}, { isActive: Boolean(isRawModeSupported) });\n\n if (error) {\n return <ErrorDisplay commandUsed={commandUsed} error={error} />;\n }\n\n if (isLoading) {\n return <Text>...</Text>;\n }\n\n if (itemChosen) {\n logger.debug({ itemChosen }, 'OngoingBuildGuard component: item chosen');\n const build = builds.find(Boolean);\n\n if (itemChosen.value === 'view' && build) {\n return <ViewBuild commandUsed={commandUsed} id={build.id} />;\n } else if (itemChosen.value === 'cancel' && build && appId) {\n return (\n <CancelBuild appId={appId} commandUsed={commandUsed} id={build.id}>\n {children}\n </CancelBuild>\n );\n } else if (itemChosen.value === 'concurrent') {\n return <>{children}</>;\n } else {\n setTimeout(exit, 10);\n }\n }\n\n if (builds.length && isCi === false && isRawModeSupported) {\n const latestBuild = builds.find(Boolean);\n const multiple = builds.length > 1;\n\n const items = [\n {\n label: `View ${multiple ? 'latest' : 'it'}`,\n value: 'view',\n },\n ];\n\n if (builds.some((build) => isBuildCancellable(build))) {\n items.push({\n label: `Cancel ${multiple ? 'latest' : 'it'} and start a new build`,\n value: 'cancel',\n });\n\n items.push({\n label: 'Start a concurrent build',\n value: 'concurrent',\n });\n }\n\n items.push({\n label: 'Exit',\n value: 'exit',\n });\n const handleSelect = (itemChosen: { value: string }) =>\n setState((previousState) => ({ ...previousState, itemChosen }));\n\n return (\n <>\n <Box marginBottom={1}>\n <Text bold>\n {multiple\n ? 'There are ongoing builds '\n : 'There is an ongoing build '}\n </Text>\n <Text>\n ({latestBuild?.appName}\n {latestBuild?.appVersion ? ` v${latestBuild.appVersion}` : ''})\n </Text>\n </Box>\n <SelectInput\n indicatorComponent={CustomSelectInputIndicator}\n itemComponent={CustomSelectInputItem}\n items={items}\n onSelect={handleSelect}\n />\n </>\n );\n } else {\n return <>{children}</>;\n }\n};\n\nOngoingBuildGuard.propTypes = {\n commandUsed: PropTypes.string.isRequired,\n children: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n configPath: PropTypes.string,\n};\n\nexport default OngoingBuildGuard;\n", "import { Box, Text } from 'ink';\nimport { ComponentProps } from 'react';\n\nexport default function CustomSelectInputIndicator({\n isSelected,\n ...props\n}: {\n isSelected?: boolean;\n} & ComponentProps<typeof Box>) {\n const selectIndicator =\n process.env.NODE_ENV === 'test' || process.platform === 'win32' ? '>' : '\u276F';\n\n return (\n <Box marginRight={1} {...props}>\n <Text>{isSelected ? selectIndicator : ' '}</Text>\n </Box>\n );\n}\n", "import { Box, Text } from 'ink';\nimport { ComponentProps } from 'react';\n\nexport default function CustomSelectInputItem({\n isSelected,\n label,\n ...props\n}: {\n isSelected?: boolean;\n label: string;\n} & ComponentProps<typeof Box>) {\n return (\n <Text bold={isSelected} color={isSelected ? undefined : 'gray'} {...props}>\n {label}\n </Text>\n );\n}\n", "// libs\nimport { Text } from 'ink';\nimport PropTypes from 'prop-types';\nimport { useEffect, useState } from 'react';\n\n// components\nimport BuildProgress from './BuildProgress';\nimport ErrorDisplay from './ErrorDisplay';\nimport MainLayout from './MainLayout';\n\n// utils\nimport getLatestBuildId from '../utilities/getLatestBuildId';\nimport getProjectConfig from '../utilities/projectConfig/getProjectConfig';\nimport logForCI from '../utilities/logForCI';\nimport shouldExitOnBuildFailure from '../utilities/shouldExitOnBuildFailure';\nimport subscribeToBuild from '../utilities/subscribeToBuild';\nimport useExit from '../utilities/useExit';\nimport findAppUserId from '../utilities/findAppUserId';\nimport LoadingText from './LoadingText';\n\ninterface ViewBuildProps {\n commandUsed: string;\n id?: string;\n // eslint-disable-next-line react/no-unused-prop-types\n shouldViewLatest?: boolean;\n configPath?: string;\n}\n\nconst ViewBuild = ({ commandUsed, id, configPath }: ViewBuildProps) => {\n const exit = useExit();\n const [\n {\n appId,\n arbitraryMessageComponent,\n build,\n error,\n hasBuildEverFailed,\n isLoading,\n },\n setState,\n ] = useState({\n appId: null,\n arbitraryMessageComponent: null,\n build: null,\n error: null,\n hasBuildEverFailed: false,\n isLoading: true,\n });\n\n const onError = (e) => {\n const error = e.response ? e.response.data : e;\n logForCI(error);\n setState((prevState) => ({\n ...prevState,\n error,\n }));\n };\n\n useEffect(() => {\n let firebaseUnsubscribe;\n\n async function viewBuild() {\n let config;\n try {\n // This will throw if validation fails:\n config = getProjectConfig(configPath).config;\n } catch (e) {\n setState((previousState) => ({ ...previousState, error: e }));\n return;\n }\n\n const { id: userId } = await findAppUserId(config.id);\n\n const subscribe = (buildId) => {\n subscribeToBuild({\n appId: config.id,\n buildId,\n onDataReceived: (data) => {\n if (!data) {\n onError(\n new Error(\n `No such build exists (${buildId}). Please contact us if this is an error`,\n ),\n );\n }\n setState((prevState) => ({\n ...prevState,\n appId: config.id,\n build: data,\n isLoading: false,\n }));\n },\n userId,\n })\n .then((firebaseUnsubscribeResult) => {\n firebaseUnsubscribe = firebaseUnsubscribeResult;\n })\n .catch(onError);\n };\n\n if (id) {\n subscribe(id);\n } else {\n getLatestBuildId({ appId: config.id, userId })\n .catch(onError)\n .then((latestBuildId) => {\n if (!latestBuildId) {\n setState((previousState) => ({\n ...previousState,\n arbitraryMessageComponent: <Text>There are no builds yet</Text>,\n }));\n return;\n }\n return subscribe(latestBuildId);\n });\n }\n }\n\n viewBuild();\n\n return () => {\n if (firebaseUnsubscribe) {\n firebaseUnsubscribe();\n }\n };\n }, [id, configPath]);\n\n // Exit if the build has errored and settled\n useEffect(() => {\n if (hasBuildEverFailed && shouldExitOnBuildFailure(build)) {\n setTimeout(() => exit(new Error('Build has failed')), 10);\n }\n }, [build, exit, hasBuildEverFailed]);\n\n // Exit once an arbitrary message exists\n useEffect(() => {\n if (arbitraryMessageComponent) {\n setTimeout(() => exit(new Error('Validation failed')), 10);\n }\n }, [arbitraryMessageComponent, exit]);\n\n if (error) {\n return <ErrorDisplay commandUsed={commandUsed} error={error} />;\n }\n\n if (arbitraryMessageComponent) {\n return arbitraryMessageComponent;\n }\n\n if (isLoading) {\n return <LoadingText />;\n }\n\n const onBuildFailure = () => {\n if (hasBuildEverFailed) {\n return;\n }\n setState((prevState) => ({\n ...prevState,\n hasBuildEverFailed: true,\n }));\n };\n\n return (\n <MainLayout\n appId={appId}\n appName={build.appName}\n appVersion={build.appVersion}\n build={build}\n commandUsed={commandUsed}\n hasBuildEverFailed={hasBuildEverFailed}\n >\n <BuildProgress build={build} onBuildFailure={onBuildFailure} />\n </MainLayout>\n );\n};\n\nViewBuild.propTypes = {\n id: (props, _propName, componentName) => {\n if ([props.id, props.shouldViewLatest].filter(Boolean).length !== 1) {\n return new Error(\n `Exactly one of 'id' and 'shouldViewLatest' must be specified in '${componentName}'`,\n );\n }\n\n const type = typeof props.id;\n if (!['string', 'undefined'].includes(type)) {\n return new Error(\n `'id' is a '${type}', not a string, in '${componentName}'.`,\n );\n }\n },\n commandUsed: PropTypes.string.isRequired,\n configPath: PropTypes.string,\n};\n\nexport default ViewBuild;\n", "import {\n doc,\n getDoc,\n collection,\n query,\n orderBy,\n limit,\n getDocs,\n} from 'firebase/firestore';\nimport firestore from './firestore';\nimport logger from './logger';\n\nexport default async function getLatestBuildId({\n appId,\n userId,\n}: {\n appId: string;\n userId: string;\n}): Promise<string | undefined> {\n logger.debug({ appId }, 'getLatestBuildId');\n const appRef = doc(firestore, `users/${userId}/applications/${appId}`);\n const appSnapshot = await getDoc(appRef);\n\n if (!appSnapshot.exists()) {\n throw new Error(`Application with ID of ${appId} doesn't exist.`);\n }\n\n const buildsQuery = query(\n collection(firestore, `users/${userId}/applications/${appId}/builds`),\n orderBy('createdAt', 'desc'),\n limit(1),\n );\n const buildsResult = await getDocs(buildsQuery);\n\n return buildsResult.empty ? undefined : buildsResult.docs[0].id;\n}\n", "import type { DocData, DocSnapshot } from '../types';\nimport { doc, onSnapshot } from 'firebase/firestore';\nimport firestore from './firestore';\nimport { readDocumentSnapshot } from './firestoreData';\nimport logger from './logger';\n\nexport default async function subscribeToFirebaseDoc<T extends DocData>(\n key: string,\n receiver: (data: { snapshot: DocSnapshot<T>; data: T | undefined }) => void,\n) {\n return new Promise<() => void>((resolve, reject) => {\n logger.debug({ key }, 'subscribeToFirebaseDoc');\n const unsubscribe = onSnapshot(\n doc(firestore, key),\n (snapshot) => {\n receiver({\n snapshot: snapshot as DocSnapshot<T>,\n data: readDocumentSnapshot<T>(snapshot),\n });\n\n resolve(unsubscribe);\n },\n (err) => {\n reject(err);\n },\n );\n });\n}\n", "import subscribeToFirebaseDoc from './subscribeToFirebaseDoc';\n\nexport default async ({ appId, buildId, onDataReceived, userId }) => {\n try {\n return await subscribeToFirebaseDoc(\n `users/${userId}/applications/${appId}/builds/${buildId}`,\n async ({ data }) => {\n onDataReceived(data);\n },\n );\n } catch (e) {\n e.message = `Failed while subscribing to build; ${e.message}`;\n throw e;\n }\n};\n", "import {\n collection,\n getDocs,\n doc,\n getDoc,\n type CollectionReference,\n type DocumentData,\n} from 'firebase/firestore';\nimport firestore, { currentUser } from './firestore';\nimport { readQuerySnapshot } from './firestoreData';\n\nconst getCollection = async <T>(\n collectionRef: CollectionReference<DocumentData>,\n): Promise<T[]> => {\n const resp = await getDocs(collectionRef);\n return readQuerySnapshot<T>(resp);\n};\n\nconst acceptedUsersCollection = (id) =>\n collection(firestore, `users/${id}/acceptedUsers`);\n\nconst findAppUserId = async (appId): Promise<User> => {\n const authUser = currentUser();\n if (!authUser?.uid) {\n throw new Error('A signed-in Firebase user is required');\n }\n\n const acceptedUsers = await getCollection<AcceptedUser>(\n acceptedUsersCollection(authUser.uid),\n );\n const primaryUser: User = {\n id: authUser.uid,\n label: authUser.email ?? authUser.uid,\n };\n\n const users = [\n primaryUser,\n ...acceptedUsers.map((user) => ({ id: user.id, label: user.email })),\n ];\n\n for (const user of users) {\n try {\n const docRef = doc(firestore, `users/${user.id}/applications/${appId}`);\n const docSnap = await getDoc(docRef);\n\n if (docSnap.exists()) return user;\n } catch (err) {\n // will throw an error if user doesn't have access\n console.error(err);\n }\n }\n\n return primaryUser;\n};\n\ninterface User {\n id: string;\n label: string;\n}\n\ninterface AcceptedUser {\n email: string;\n id: string;\n}\n\nexport default findAppUserId;\n", "import { useEffect, useState } from 'react';\n\nimport { onUserAuth } from './firestore';\nimport { identify, track, ANALYTICS_EVENT } from './analytics';\nimport logger from './logger';\nimport getProjectConfig from './projectConfig/getProjectConfig';\n\nexport const useAnalyticsCommand = (\n command,\n flags: any = {},\n properties = {},\n) => {\n const [hasAttemptedTracking, setTrackingAttempt] = useState(false);\n\n logger.info({ command, flags, properties }, 'useAnalyticsCommand');\n\n try {\n if (flags.projectPath) {\n properties = {\n ...properties,\n ...getProjectConfig(),\n };\n }\n } catch {\n // do nothing\n }\n\n useEffect(() => {\n const authUnsubscribe = onUserAuth(async (user) => {\n /**\n * Only identify if there's a user id (stops use of anon id).\n * Subsequent track callback will thus always be tied to a user.\n */\n if (user.uid) {\n identify(\n user.uid,\n {\n email: user.email,\n displayName: user.displayName,\n },\n () => {\n track(\n ANALYTICS_EVENT.CLI_COMMAND,\n {\n ...properties,\n flags,\n command,\n },\n () => setTrackingAttempt(true),\n );\n authUnsubscribe?.();\n },\n );\n }\n });\n\n // if it takes longer than 5 secs to identify a user, just set the\n // tracking attempt to true so that other commands aren't waiting\n // forever to terminate (see whoami component)\n setTimeout(() => setTrackingAttempt(true), 5000);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // leave empty - this should only ever execute once (on mount)\n\n return { hasAttemptedTracking };\n};\n", "import Build from './components/Build';\nimport LoginHOC from '../../components/LoginHOC';\nimport ErrorBoundary from '../../components/ErrorBoundary';\nimport OngoingBuildGuard from './components/OngoingBuildGuard';\nimport { useAnalyticsCommand } from '../../utilities/useAnalytics';\nimport { BuildFlags } from './utilities/types';\n\nexport default function BuildCommand({\n configPath,\n flags,\n}: {\n configPath?: string;\n flags: BuildFlags;\n}) {\n useAnalyticsCommand('build', {\n async: flags.exitAfterUploading,\n codeSign: flags.shouldCodeSign,\n config: configPath,\n webhook: flags.onBuildFinishedWebhook,\n });\n\n const commandUsed = 'todesktop build';\n\n return (\n <ErrorBoundary>\n <LoginHOC>\n <OngoingBuildGuard configPath={configPath} commandUsed={commandUsed}>\n <Build\n commandUsed={commandUsed}\n configPath={configPath}\n flags={flags}\n />\n </OngoingBuildGuard>\n </LoginHOC>\n </ErrorBoundary>\n );\n}\n", "import { Box, Text } from 'ink';\nimport PropTypes from 'prop-types';\nimport { useEffect, useState } from 'react';\nimport ErrorDisplay from './ErrorDisplay';\nimport Table from './Table';\nimport capitalize from '../utilities/capitalize';\nimport getBuilds from '../utilities/getBuilds';\nimport getProjectConfig from '../utilities/projectConfig/getProjectConfig';\nimport getRelativeDateFromDateString from '../utilities/getRelativeDateFromDateString';\nimport logForCI from '../utilities/logForCI';\nimport useInput from '../utilities/useInput';\nimport useExit from '../utilities/useExit';\nimport findAppUserId from '../utilities/findAppUserId';\nimport SyntaxHighlight from './SyntaxHighlight';\nimport LoadingText from './LoadingText';\n\nconst ViewBuilds = ({\n commandUsed,\n configPath,\n count,\n format,\n exit: shouldExitAfterViewingBuilds = false,\n}) => {\n const exit = useExit();\n const [\n {\n builds,\n error,\n hasMoreToLoad,\n isInitialLoadComplete,\n isLoading,\n projectConfig,\n startAfter,\n user,\n },\n setState,\n ] = useState({\n builds: [],\n error: null,\n hasMoreToLoad: true,\n isInitialLoadComplete: false,\n isLoading: false,\n projectConfig: null,\n startAfter: null,\n user: null,\n });\n\n useInput((input, key) => {\n if (key.escape) {\n exit();\n }\n\n if (input === ' ' || key.downArrow || key.pageDown || key.return) {\n if (!isInitialLoadComplete || !hasMoreToLoad) {\n return;\n }\n\n setState((previousState) => ({\n ...previousState,\n startAfter: builds[builds.length - 1].createdAt,\n }));\n }\n });\n\n useEffect(() => {\n async function viewBuilds() {\n if (\n error ||\n isLoading ||\n (isInitialLoadComplete && (!hasMoreToLoad || !startAfter))\n ) {\n return;\n }\n\n if (!['table', 'json'].includes(format)) {\n setState((previousState) => ({\n ...previousState,\n error: new Error(\n `Invalid output format \"${format}\". Valid formats are \"table\" and \"json\".`,\n ),\n }));\n return;\n }\n\n setState((previousState) => ({\n ...previousState,\n isLoading: true,\n }));\n\n let config;\n try {\n // This will throw if validation fails:\n config = projectConfig || getProjectConfig(configPath).config;\n } catch (e) {\n setState((previousState) => ({ ...previousState, error: e }));\n return;\n }\n\n const pageSize = count || 5;\n const user = await findAppUserId(config.id);\n\n getBuilds({\n appId: config.id,\n limit: pageSize + 1,\n startAfter,\n userId: user.id,\n })\n .then((buildsResult) => {\n setState((previousState) => {\n const stateUpdates = {\n builds: [],\n hasMoreToLoad: buildsResult.length > pageSize,\n isInitialLoadComplete: true,\n isLoading: false,\n projectConfig: config,\n startAfter: null,\n user,\n };\n\n if (buildsResult.length) {\n stateUpdates.builds = [\n ...previousState.builds,\n ...buildsResult.slice(0, pageSize),\n ];\n }\n return {\n ...previousState,\n ...stateUpdates,\n };\n });\n })\n .catch((e) => {\n logForCI(e);\n setState((previousState) => ({\n ...previousState,\n error: e,\n isLoading: false,\n }));\n });\n }\n\n viewBuilds();\n }, [\n error,\n hasMoreToLoad,\n isInitialLoadComplete,\n isLoading,\n projectConfig,\n startAfter,\n configPath,\n format,\n count,\n ]);\n\n // Exit once all are loaded\n useEffect(() => {\n if (!hasMoreToLoad) {\n setTimeout(exit, 10);\n }\n }, [exit, hasMoreToLoad]);\n\n // Exit the process once the initial build data has been displayed if user has set the `--exit` flag\n useEffect(() => {\n if (!isLoading && isInitialLoadComplete && shouldExitAfterViewingBuilds) {\n setTimeout(exit, 10);\n }\n }, [exit, isLoading, shouldExitAfterViewingBuilds, isInitialLoadComplete]);\n\n if (error) {\n return <ErrorDisplay commandUsed={commandUsed} error={error} />;\n }\n\n if (!isInitialLoadComplete) {\n return <LoadingText />;\n }\n\n if (builds.length) {\n const formatData = (builds) =>\n builds.map((build) => ({\n 'ID': build.id,\n 'Version': build.appVersion || 'n/a',\n 'Creation date': getRelativeDateFromDateString(build.createdAt),\n 'Status': capitalize(build.status),\n 'Release date': build.releasedAt\n ? getRelativeDateFromDateString(build.releasedAt)\n : 'Unreleased',\n 'Owner': user ? user.label : 'unknown',\n }));\n\n const getCellTextProps = ({ key, props, value }) => {\n const result = { ...props };\n\n if (key === 'Status') {\n const status = value.toLowerCase();\n if (status === 'succeeded') {\n result.color = 'green';\n } else if (status === 'failed') {\n result.color = 'red';\n } else if (status === 'cancelled') {\n result.dimColor = true;\n }\n } else if (key === 'Version' && value.toLowerCase() === 'n/a') {\n result.dimColor = true;\n } else if (\n key === 'Release date' &&\n value.toLowerCase() === 'unreleased'\n ) {\n result.dimColor = true;\n }\n\n return result;\n };\n\n return (\n <>\n {format === 'table' ? (\n <Table\n getCellTextProps={getCellTextProps}\n data={formatData(builds)}\n />\n ) : null}\n {format === 'json' ? (\n <SyntaxHighlight object={removeAppBuilderLibConfig(builds)} />\n ) : null}\n {!shouldExitAfterViewingBuilds && builds.length > 0 ? (\n <Box>\n <Text color=\"gray\" dimColor>\n {isLoading\n ? 'Loading more...'\n : hasMoreToLoad\n ? `Showing the latest ${builds.length} builds. Press space/down to load more.`\n : `Showing all (${builds.length}) builds`}\n </Text>\n </Box>\n ) : null}\n </>\n );\n } else {\n return <Text>There are no builds yet</Text>;\n }\n};\n\nconst removeAppBuilderLibConfig = (builds) => {\n // Remove the appBuilderLib config from the builds because it's difficult to display\n // and not very useful to the user.\n return builds.map((build) => {\n if (build.mac && build.mac.appBuilderLibConfig) {\n delete build.mac.appBuilderLibConfig;\n }\n if (build.windows && build.windows.appBuilderLibConfig) {\n delete build.windows.appBuilderLibConfig;\n }\n if (build.linux && build.linux.appBuilderLibConfig) {\n delete build.linux.appBuilderLibConfig;\n }\n return build;\n });\n};\n\nViewBuilds.propTypes = {\n commandUsed: PropTypes.string.isRequired,\n configPath: PropTypes.string,\n count: PropTypes.number,\n format: PropTypes.string,\n exit: PropTypes.bool,\n};\n\nexport default ViewBuilds;\n", "import { Box } from 'ink';\nimport PropTypes from 'prop-types';\nimport TableEnd from './TableEnd';\nimport TableHead from './TableHead';\nimport TableBody from './TableBody';\nimport getKeyDetails from '../utilities/getKeyDetails';\n\n/*\n This component prints (the array of objects given) in a table.\n The array must not be empty.\n The keys are used as headers.\n Column widths are based on the longest value (object key or value).\n It is assumed that the same keys exist in all items.\n*/\nconst Table = ({ data, getCellTextProps }) => {\n const keyDetails = getKeyDetails(data);\n\n return (\n <Box flexDirection=\"column\">\n <TableHead keyDetails={keyDetails} />\n <TableBody\n data={data}\n getCellTextProps={getCellTextProps}\n keyDetails={keyDetails}\n />\n <TableEnd keyDetails={keyDetails} />\n </Box>\n );\n};\n\nTable.propTypes = {\n data: (props, _propName, componentName) => {\n const type = typeof props.data;\n if (Array.isArray('array')) {\n return new Error(\n `'data' prop must be an array ('${type}' given) in ${componentName} component`,\n );\n }\n\n if (props.data.length === 0) {\n return new Error(\n `'data' prop must not be empty, in ${componentName} component`,\n );\n }\n },\n getCellTextProps: PropTypes.func,\n};\n\nexport default Table;\n", "import { Box, Text } from 'ink';\nimport PropTypes from 'prop-types';\n\n/*\n See Table component\n*/\nconst TableEnd = ({ keyDetails, ...props }) => {\n let content = '\u2514';\n content += Object.values(keyDetails)\n .map(({ width }) => '\u2500'.repeat(width + 2))\n .join('\u2534');\n content += '\u2518';\n\n return (\n <Box {...props}>\n <Text>{content}</Text>\n </Box>\n );\n};\n\nTableEnd.propTypes = {\n keyDetails: PropTypes.object.isRequired,\n};\n\nexport default TableEnd;\n", "import { Box, Text } from 'ink';\nimport PropTypes from 'prop-types';\nimport { Fragment } from 'react';\n\n/*\n See Table component\n*/\nconst TableHead = ({ keyDetails, ...props }) => {\n let topLine = '\u250C';\n topLine += Object.values(keyDetails)\n .map(({ width }) => '\u2500'.repeat(width + 2))\n .join('\u252C');\n topLine += '\u2510';\n\n const contentLineElements = Object.values(keyDetails).map(\n ({ key, width }, index) => {\n return (\n <Fragment key={key}>\n {index > 0 ? <Text> \u2502 </Text> : null}\n <Box width={width}>\n <Text bold>{key}</Text>\n </Box>\n </Fragment>\n );\n },\n );\n\n return (\n <Box flexDirection=\"column\" {...props}>\n <Box>\n <Text>{topLine}</Text>\n </Box>\n <Box>\n <Box>\n <Text>\u2502 </Text>\n {contentLineElements}\n <Text> \u2502</Text>\n </Box>\n </Box>\n </Box>\n );\n};\n\nTableHead.propTypes = {\n bottomLinePrefix: PropTypes.string,\n keyDetails: PropTypes.object.isRequired,\n};\n\nexport default TableHead;\n", "/* eslint-disable react/no-array-index-key */\n\nimport PropTypes from 'prop-types';\nimport TableRow from './TableRow';\n\n/*\n See Table component\n*/\nconst TableBody = ({ data, getCellTextProps, keyDetails }) => {\n return (\n <>\n {data.map((rowData, index) => (\n <TableRow\n data={rowData}\n getCellTextProps={getCellTextProps}\n key={index}\n keyDetails={keyDetails}\n />\n ))}\n </>\n );\n};\n\nTableBody.propTypes = {\n data: (props, _propName, componentName) => {\n const type = typeof props.data;\n if (Array.isArray('array')) {\n return new Error(\n `'data' prop must be an array ('${type}' given) in ${componentName} component`,\n );\n }\n\n if (props.data.length === 0) {\n return new Error(\n `'data' prop must not be empty, in ${componentName} component`,\n );\n }\n },\n getCellTextProps: PropTypes.func,\n keyDetails: PropTypes.object.isRequired,\n};\n\nexport default TableBody;\n", "import { Box, Text } from 'ink';\nimport PropTypes from 'prop-types';\n\n/*\n See Table component\n*/\nconst TableRow = ({\n data,\n getCellTextProps = ({ props }) => props,\n keyDetails,\n textProps = {},\n}: {\n data: object;\n getCellTextProps?: (...args: any[]) => any;\n keyDetails: object;\n textProps?: object;\n}) => {\n let topLine = '\u251C';\n topLine += Object.values(keyDetails)\n .map(({ width }) => '\u2500'.repeat(width + 2))\n .join('\u253C');\n topLine += '\u2524';\n\n const content = (\n <>\n <Text>\u2502 </Text>\n {Object.entries(data).map(([key, value], index) => {\n return (\n <Box key={key}>\n {index > 0 ? <Text> \u2502 </Text> : null}\n <Box width={keyDetails[key].width}>\n <Text\n {...getCellTextProps({\n key,\n props: textProps,\n rowData: data,\n value,\n })}\n >\n {value}\n </Text>\n </Box>\n </Box>\n );\n })}\n <Text> \u2502</Text>\n </>\n );\n\n return (\n <Box flexDirection=\"column\">\n <Text>{topLine}</Text>\n <Box>{content}</Box>\n </Box>\n );\n};\n\nTableRow.propTypes = {\n data: PropTypes.object.isRequired,\n getCellTextProps: PropTypes.func,\n keyDetails: PropTypes.object.isRequired,\n textProps: PropTypes.object,\n};\n\nexport default TableRow;\n", "// This is used to get the column widths for tables\nexport default (data) => {\n const result = {};\n Object.keys(data[0]).forEach((key) => {\n result[key] = {\n key,\n width: Math.max(\n key.length,\n data\n .map((item) => item[key].toString().length)\n .sort((a, b) => b - a)[0],\n ),\n };\n });\n return result;\n};\n", "export default (input) => {\n if (typeof input !== 'string') {\n return '';\n }\n return input.charAt(0).toUpperCase() + input.slice(1);\n};\n", "import { Build } from '../types';\nimport {\n doc,\n getDoc,\n collection,\n query as firestoreQuery,\n orderBy,\n startAfter as firestoreStartAfter,\n limit as firestoreLimit,\n getDocs,\n QueryConstraint,\n} from 'firebase/firestore';\nimport firestore from './firestore';\nimport { readQuerySnapshot } from './firestoreData';\nimport logger from './logger';\n\nexport default async function getBuilds({\n addWhereClauses = () => [],\n userId,\n appId,\n limit = 5,\n startAfter = null,\n}: {\n addWhereClauses?: () => QueryConstraint[];\n userId: string;\n appId: string;\n limit?: number;\n startAfter?: string;\n}): Promise<Build[]> {\n logger.debug({ appId, limit, startAfter }, 'getBuilds');\n const appRef = doc(firestore, `users/${userId}/applications/${appId}`);\n const appSnapshot = await getDoc(appRef);\n\n if (!appSnapshot.exists()) {\n throw new Error(`Application with ID of ${appId} doesn't exist.`);\n }\n\n const buildsCollection = collection(\n firestore,\n `users/${userId}/applications/${appId}/builds`,\n );\n const constraints = [...addWhereClauses(), orderBy('createdAt', 'desc')];\n\n if (startAfter) {\n constraints.push(firestoreStartAfter(startAfter));\n }\n\n constraints.push(firestoreLimit(limit));\n\n const query = firestoreQuery(buildsCollection, ...constraints);\n const buildsResult = await getDocs(query);\n\n if (buildsResult.empty) {\n return [];\n }\n\n return readQuerySnapshot<Build>(buildsResult);\n}\n", "import * as dateFns from 'date-fns';\n\nexport default (input) =>\n dateFns.formatDistance(new Date(input), new Date()) + ' ago';\n", "import chalk, { ColorSupport } from 'chalk';\nimport * as React from 'react';\nimport { Text, useStdout } from 'ink';\nimport util from 'util';\n\nconst supportsColor = chalk.stderr.supportsColor as ColorSupport;\n\nconst SyntaxHighlight = ({\n object,\n colors = supportsColor?.hasBasic,\n}: {\n object: object;\n colors?: boolean;\n}) => {\n const { stdout } = useStdout();\n\n const highlightedCode = React.useMemo(() => {\n return stdout.isTTY\n ? util.inspect(object, { colors, depth: 6 })\n : JSON.stringify(object, null, 2);\n }, [colors, object, stdout.isTTY]);\n\n return <Text wrap=\"end\">{highlightedCode}</Text>;\n};\n\nexport default SyntaxHighlight;\n", "import LoginHOC from '../components/LoginHOC';\nimport ErrorBoundary from '../components/ErrorBoundary';\nimport ViewBuild from '../components/ViewBuild';\nimport ViewBuilds from '../components/ViewBuilds';\nimport { useAnalyticsCommand } from '../utilities/useAnalytics';\n\nconst BuildsCommand = ({\n id,\n shouldViewLatest,\n configPath = null,\n count,\n format = 'table',\n exit,\n}: {\n id?: string;\n shouldViewLatest?: boolean;\n configPath?: string;\n count?: number;\n format?: 'table' | 'json';\n exit?: boolean;\n}) => {\n useAnalyticsCommand('builds', {\n id,\n shouldViewLatest,\n configPath,\n count,\n format,\n exit,\n });\n\n const getContents = () => {\n let commandUsed = 'todesktop builds';\n if (id) {\n commandUsed += ' <id>';\n return (\n <ViewBuild commandUsed={commandUsed} id={id} configPath={configPath} />\n );\n } else if (shouldViewLatest) {\n commandUsed += ' --latest';\n return (\n <ViewBuild\n commandUsed={commandUsed}\n shouldViewLatest\n configPath={configPath}\n />\n );\n } else {\n return (\n <ViewBuilds\n commandUsed={commandUsed}\n configPath={configPath}\n count={count}\n format={format}\n exit={exit}\n />\n );\n }\n };\n\n return (\n <ErrorBoundary>\n <LoginHOC>{getContents()}</LoginHOC>\n </ErrorBoundary>\n );\n};\n\nexport default BuildsCommand;\n", "import { useState } from 'react';\nimport ErrorBoundary from '../../components/ErrorBoundary';\nimport LoginHOC from '../../components/LoginHOC';\nimport IntrospectSession from './components/IntrospectSession';\nimport BuildSelector from './components/BuildSelector';\nimport PlatformSelector from './components/PlatformSelector';\nimport LatestBuildLoader from './components/LatestBuildLoader';\nimport { useAnalyticsCommand } from '../../utilities/useAnalytics';\nimport { normalizePlatform } from './utilities/sessionManager';\n\nexport default function IntrospectCommand({\n buildId: initialBuildId,\n platform: initialPlatform,\n verbose,\n latest,\n configPath,\n}: {\n buildId?: string;\n platform?: string;\n verbose?: boolean;\n latest?: boolean;\n configPath?: string;\n}) {\n const [buildId, setBuildId] = useState<string | undefined>(initialBuildId);\n const [platform, setPlatform] = useState<string | undefined>(initialPlatform);\n\n useAnalyticsCommand('introspect', {\n buildId,\n platform,\n latest,\n hasInitialBuildId: !!initialBuildId,\n hasInitialPlatform: !!initialPlatform,\n });\n\n const renderContent = () => {\n if (latest && !buildId) {\n return (\n <LatestBuildLoader\n configPath={configPath}\n onBuildFound={(id) => setBuildId(id)}\n />\n );\n }\n\n if (!buildId) {\n return (\n <BuildSelector\n configPath={configPath}\n onSelect={(id) => setBuildId(id)}\n />\n );\n }\n\n if (!platform) {\n return (\n <PlatformSelector\n buildId={buildId}\n configPath={configPath}\n onSelect={(p) => setPlatform(p)}\n />\n );\n }\n\n const normalizedPlatform = normalizePlatform(platform);\n\n return (\n <IntrospectSession\n buildId={buildId}\n platform={normalizedPlatform}\n verbose={verbose ?? false}\n />\n );\n };\n\n return (\n <ErrorBoundary>\n <LoginHOC>{renderContent()}</LoginHOC>\n </ErrorBoundary>\n );\n}\n", "import { Box, Text } from 'ink';\nimport { useEffect, useRef, useState } from 'react';\nimport { doc, onSnapshot } from 'firebase/firestore';\nimport type { User } from 'firebase/auth';\nimport WebSocket from 'ws';\nimport LoadingText from '../../../components/LoadingText';\nimport { currentUser } from '../../../utilities/firestore';\nimport db from '../../../utilities/firestore';\nimport {\n startIntrospectionSession,\n SessionResponse,\n} from '../utilities/sessionManager';\nimport {\n connectToTunnel as createWebSocketConnection,\n isControlMessage,\n parseControlMessage,\n} from '../utilities/websocketClient';\nimport {\n enterInteractiveMode,\n restoreTerminal,\n} from '../utilities/terminalManager';\nimport { startTokenRefreshMonitoring } from '../utilities/tokenRefresh';\nimport useExit from '../../../utilities/useExit';\n\ntype SessionStatus =\n | 'starting-session'\n | 'waiting'\n | 'connecting'\n | 'connected'\n | 'error'\n | 'closed';\n\nexport default function IntrospectSession({\n buildId,\n platform,\n verbose,\n}: {\n buildId: string;\n platform: 'mac' | 'windows' | 'linux';\n verbose: boolean;\n}) {\n const exit = useExit();\n const exitRef = useRef(exit);\n useEffect(() => {\n exitRef.current = exit;\n }, [exit]);\n const [status, setStatus] = useState<SessionStatus>('starting-session');\n const [error, setError] = useState<string>('');\n const [tunnelUrl, setTunnelUrl] = useState<string>('');\n const [jti, setJti] = useState<string>('');\n const socketRef = useRef<WebSocket | null>(null);\n const pingIntervalRef = useRef<NodeJS.Timeout | null>(null);\n const tokenRefreshIntervalRef = useRef<NodeJS.Timeout | null>(null);\n const retryCountRef = useRef(0);\n const retryTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const isRetryingRef = useRef(false);\n const hasEndedRef = useRef(false);\n\n useEffect(() => {\n let unsubscribe: (() => void) | null = null;\n let timeoutTimer: NodeJS.Timeout | null = null;\n\n function cleanup() {\n if (timeoutTimer) {\n clearTimeout(timeoutTimer);\n timeoutTimer = null;\n }\n if (pingIntervalRef.current) {\n clearInterval(pingIntervalRef.current);\n pingIntervalRef.current = null;\n }\n if (tokenRefreshIntervalRef.current) {\n clearInterval(tokenRefreshIntervalRef.current);\n tokenRefreshIntervalRef.current = null;\n }\n if (retryTimeoutRef.current) {\n clearTimeout(retryTimeoutRef.current);\n retryTimeoutRef.current = null;\n }\n retryCountRef.current = 0;\n isRetryingRef.current = false;\n if (unsubscribe) {\n unsubscribe();\n unsubscribe = null;\n }\n const socket = socketRef.current;\n if (socket) {\n socket.removeAllListeners();\n socket.once('error', () => {});\n try {\n if (socket.readyState === WebSocket.OPEN) {\n socket.close();\n } else if (socket.readyState === WebSocket.CONNECTING) {\n socket.once('open', () => {\n try {\n socket.close();\n } catch {\n // ignore\n }\n });\n socket.terminate();\n } else {\n socket.terminate();\n }\n } catch {\n // ignore\n }\n socketRef.current = null;\n }\n restoreTerminal();\n }\n\n function exitSession({\n message,\n isError = false,\n }: {\n message?: string;\n isError?: boolean;\n } = {}) {\n if (hasEndedRef.current) {\n return;\n }\n\n hasEndedRef.current = true;\n cleanup();\n\n if (message) {\n const output = `\\n${message}`;\n if (isError) {\n console.error(output);\n } else {\n console.log(output);\n }\n }\n\n const exitFn = exitRef.current;\n if (isError) {\n exitFn(\n new Error(message ?? 'Introspection session ended with an error'),\n );\n } else {\n exitFn();\n }\n }\n\n async function startSession() {\n try {\n const user = currentUser();\n if (!user) {\n throw new Error('Not authenticated. Please run: todesktop login');\n }\n\n setStatus('starting-session');\n\n const sessionResponse = await startIntrospectionSession(\n buildId,\n platform,\n );\n\n setJti(sessionResponse.jti);\n\n if (verbose) {\n console.log(\n `\\nSession started (JTI: ${\n sessionResponse.jti\n }, expires: ${new Date(\n sessionResponse.expiresAt * 1000,\n ).toISOString()})\\n`,\n );\n }\n\n if (sessionResponse.tunnelUrl) {\n await connectToTunnel(\n { ...sessionResponse, tunnelUrl: sessionResponse.tunnelUrl },\n user as User,\n );\n } else {\n setStatus('waiting');\n\n const buildDocRef = doc(db, sessionResponse.buildPath);\n\n timeoutTimer = setTimeout(\n () => {\n exitSession({\n message:\n `Timeout waiting for ${platform} introspection to be ready.\\n` +\n `The ${platform} build may not have started yet.`,\n isError: true,\n });\n },\n 5 * 60 * 1000,\n );\n\n unsubscribe = onSnapshot(buildDocRef, async (snapshot) => {\n const data = snapshot.data();\n const platformData = data?.introspect?.[platform];\n\n if (!platformData || hasEndedRef.current) return;\n\n const { breakpointStatus } = platformData;\n const { shellStatus } = platformData;\n\n if (\n (shellStatus === 'ready' || shellStatus === 'disconnected') &&\n platformData.tunnelUrl\n ) {\n if (timeoutTimer) {\n clearTimeout(timeoutTimer);\n timeoutTimer = null;\n }\n await connectToTunnel(\n { ...sessionResponse, tunnelUrl: platformData.tunnelUrl },\n user as User,\n );\n } else if (\n shellStatus === 'error' ||\n breakpointStatus === 'error'\n ) {\n exitSession({\n message: `Introspection error: ${\n platformData.error ?? 'Unknown error'\n }`,\n isError: true,\n });\n } else if (breakpointStatus === 'finished') {\n exitSession({\n message: 'Build has finished; introspection unavailable',\n isError: true,\n });\n }\n });\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n setError(message);\n setStatus('error');\n exitSession({ message, isError: true });\n }\n }\n\n async function connectToTunnel(\n sessionResponse: SessionResponse & { tunnelUrl: string },\n user: User,\n ) {\n const tunnelUrlValue = sessionResponse.tunnelUrl;\n setTunnelUrl(tunnelUrlValue);\n\n const maxRetries = 5;\n const baseRetryDelayMs = 1000;\n const retryableErrorCodes = new Set([\n 'ENOTFOUND',\n 'EAI_AGAIN',\n 'ECONNREFUSED',\n 'ECONNRESET',\n 'ETIMEDOUT',\n ]);\n\n const shouldRetry = (error: NodeJS.ErrnoException) => {\n if (retryCountRef.current >= maxRetries) {\n return false;\n }\n\n const code = error.code?.toUpperCase();\n if (code && retryableErrorCodes.has(code)) {\n return true;\n }\n\n const message = error.message?.toLowerCase?.() ?? '';\n return ['enotfound', 'eai_again', 'econnrefused', 'etimedout'].some(\n (indicator) => message.includes(indicator),\n );\n };\n\n const attemptConnection = (attempt: number) => {\n setStatus('connecting');\n retryCountRef.current = attempt;\n\n if (verbose) {\n const attemptLabel = attempt === 1 ? 'initial' : `retry ${attempt}`;\n console.log(\n `[Introspect] Starting ${attemptLabel} connection attempt to ${tunnelUrlValue}`,\n );\n }\n\n const socket = createWebSocketConnection(tunnelUrlValue);\n socketRef.current = socket;\n\n socket.on('open', async () => {\n retryCountRef.current = 0;\n socket.send(\n JSON.stringify({\n type: 'auth',\n idToken: await user.getIdToken(true),\n jti: sessionResponse.jti,\n buildId,\n platform,\n userId: user.uid,\n appId: sessionResponse.appId,\n }),\n );\n });\n\n socket.on('message', async (data) => {\n const dataStr = data.toString();\n\n if (isControlMessage(dataStr)) {\n const message = parseControlMessage(dataStr);\n\n if (message.type === 'auth-ack') {\n if (message.status === 'ok') {\n setStatus('connected');\n pingIntervalRef.current = enterInteractiveMode(socket);\n tokenRefreshIntervalRef.current = startTokenRefreshMonitoring(\n user,\n verbose,\n );\n } else {\n const authMessage = `Authentication failed: ${message.message}`;\n setError(authMessage);\n setStatus('error');\n exitSession({ message: authMessage, isError: true });\n }\n } else if (message.type === 'error') {\n if (message.fatal) {\n const fatalMessage = message.message ?? 'Server error';\n setError(fatalMessage);\n setStatus('error');\n exitSession({ message: fatalMessage, isError: true });\n } else {\n console.error(`\\n[Server error] ${message.message}\\n`);\n }\n } else if (message.type === 'state') {\n if (verbose) {\n console.log(\n `\\n[Server state] Platform: ${message.platform}, WD: ${message.workingDirectory}, Shell: ${message.shell}\\n`,\n );\n }\n }\n } else {\n process.stdout.write(dataStr);\n }\n });\n\n socket.on('error', (err) => {\n const error = err as NodeJS.ErrnoException;\n\n if (shouldRetry(error)) {\n const nextAttempt = retryCountRef.current + 1;\n const delay = Math.min(5000, baseRetryDelayMs * nextAttempt);\n isRetryingRef.current = true;\n\n if (verbose) {\n console.log(\n `[Introspect] Connection attempt ${\n retryCountRef.current\n } failed (${\n error.code ?? error.message\n }). Retrying in ${delay}ms...`,\n );\n } else {\n console.log(\n `Connection failed (${\n error.code ?? error.message\n }). Retrying (${nextAttempt}/${maxRetries})...`,\n );\n }\n\n if (retryTimeoutRef.current) {\n clearTimeout(retryTimeoutRef.current);\n }\n\n if (socketRef.current) {\n socketRef.current.removeAllListeners();\n try {\n socketRef.current.terminate();\n } catch {\n // ignore\n }\n }\n\n retryTimeoutRef.current = setTimeout(() => {\n isRetryingRef.current = false;\n attemptConnection(nextAttempt);\n }, delay);\n\n return;\n }\n\n const errorMessage = `WebSocket error: ${error.message}`;\n setError(errorMessage);\n setStatus('error');\n exitSession({ message: errorMessage, isError: true });\n });\n\n socket.on('close', (code, reason) => {\n if (isRetryingRef.current || hasEndedRef.current) {\n return;\n }\n\n setStatus('closed');\n\n const reasonText = reason?.toString().trim();\n const message =\n reasonText && reasonText.length > 0\n ? `Connection closed (code ${code}): ${reasonText}`\n : 'Connection closed';\n\n exitSession({ message });\n });\n };\n\n try {\n attemptConnection(1);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n setError(message);\n setStatus('error');\n exitSession({ message, isError: true });\n }\n }\n\n startSession();\n\n return () => {\n if (!hasEndedRef.current) {\n cleanup();\n }\n };\n }, [buildId, platform, verbose]);\n\n if (status === 'starting-session') {\n return (\n <Box>\n <LoadingText text=\"Starting introspection session\" />\n </Box>\n );\n }\n\n if (status === 'waiting') {\n return (\n <Box flexDirection=\"column\">\n <Text color=\"green\">\u2713 Session started</Text>\n {verbose && jti && <Text color=\"gray\">JTI: {jti}</Text>}\n <LoadingText\n text={`Waiting for ${platform} introspection to be ready`}\n />\n <Text color=\"gray\">(timeout in 5 minutes)</Text>\n </Box>\n );\n }\n\n if (status === 'connecting') {\n return (\n <Box flexDirection=\"column\">\n <Text color=\"green\">\u2713 Session started</Text>\n {verbose && jti && <Text color=\"gray\">JTI: {jti}</Text>}\n {verbose && tunnelUrl && <Text color=\"gray\">Tunnel: {tunnelUrl}</Text>}\n <LoadingText text=\"Connecting to build environment\" />\n </Box>\n );\n }\n\n if (status === 'connected') {\n return (\n <Box flexDirection=\"column\">\n <Text color=\"green\">\u2713 Connected to {platform} build agent</Text>\n <Text color=\"gray\">Press Ctrl+D or type 'exit' to disconnect</Text>\n </Box>\n );\n }\n\n if (status === 'error') {\n return (\n <Box>\n <Text color=\"red\">\u2717 Error: {error}</Text>\n </Box>\n );\n }\n\n if (status === 'closed') {\n return (\n <Box>\n <Text color=\"yellow\">Connection closed</Text>\n </Box>\n );\n }\n\n return null;\n}\n", "import { FunctionsError } from 'firebase/functions';\nimport getCallableFirebaseFunction from '../../../utilities/getCallableFirebaseFunction';\n\nexport interface SessionResponse {\n jti: string;\n expiresAt: number;\n platform: string;\n buildPath: string;\n appId: string;\n tunnelUrl?: string;\n}\n\nconst startIntrospectionSessionFn = getCallableFirebaseFunction(\n 'startIntrospectionSession',\n);\n\nfunction isFirebaseFunctionError(error: unknown): error is FunctionsError {\n return Boolean(\n typeof error === 'object' &&\n error &&\n 'code' in error &&\n typeof (error as any).code === 'string',\n );\n}\n\nexport async function startIntrospectionSession(\n buildId: string,\n platform: string,\n): Promise<SessionResponse> {\n try {\n const result = await startIntrospectionSessionFn({\n buildId,\n platform,\n });\n return result.data as SessionResponse;\n } catch (error) {\n if (isFirebaseFunctionError(error)) {\n throw new Error(error.message);\n }\n throw error;\n }\n}\n\nexport function normalizePlatform(input: string): 'mac' | 'windows' | 'linux' {\n const normalized = input.toLowerCase();\n\n if (['mac', 'macos', 'darwin'].includes(normalized)) return 'mac';\n if (['windows', 'win'].includes(normalized)) return 'windows';\n if (normalized === 'linux') return 'linux';\n\n throw new Error(\n `Invalid platform: ${input}. Must be one of: mac, windows, linux`,\n );\n}\n", "import WebSocket from 'ws';\n\nexport function connectToTunnel(tunnelUrl: string): WebSocket {\n const wsUrl = tunnelUrl.replace('https://', 'wss://') + '/term';\n return new WebSocket(wsUrl);\n}\n\nexport interface AuthMessage {\n type: 'auth';\n idToken: string;\n jti: string;\n buildId: string;\n platform: string;\n userId: string;\n appId: string;\n}\n\nexport interface AuthAckMessage {\n type: 'auth-ack';\n status: 'ok' | 'error';\n message?: string;\n}\n\nexport interface StateMessage {\n type: 'state';\n status: string;\n platform: string;\n workingDirectory: string;\n shell: string;\n}\n\nexport interface ErrorMessage {\n type: 'error';\n message: string;\n fatal: boolean;\n}\n\nexport interface PongMessage {\n type: 'pong';\n timestamp: number;\n}\n\nexport interface ResizeMessage {\n type: 'resize';\n cols: number;\n rows: number;\n}\n\nexport interface PingMessage {\n type: 'ping';\n timestamp: number;\n}\n\nexport interface CloseMessage {\n type: 'close';\n code?: number;\n reason?: string;\n}\n\nexport type ControlMessage =\n | AuthAckMessage\n | StateMessage\n | ErrorMessage\n | PongMessage\n | ResizeMessage\n | PingMessage\n | CloseMessage;\n\nexport function isControlMessage(data: string): boolean {\n try {\n const parsed = JSON.parse(data);\n return parsed && typeof parsed === 'object' && 'type' in parsed;\n } catch {\n return false;\n }\n}\n\nexport function parseControlMessage(data: string): ControlMessage {\n return JSON.parse(data) as ControlMessage;\n}\n", "import WebSocket from 'ws';\n\nlet originalRawMode: boolean | undefined;\nlet isRawModeSet = false;\n\nexport function enterInteractiveMode(\n socket: WebSocket,\n onResize?: () => void,\n): NodeJS.Timeout {\n if (process.stdin.setRawMode) {\n originalRawMode = process.stdin.isRaw;\n process.stdin.setRawMode(true);\n isRawModeSet = true;\n }\n process.stdin.resume();\n\n process.stdin.on('data', (data) => {\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(data);\n }\n });\n\n const resizeHandler = () => {\n if (onResize) {\n onResize();\n }\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(\n JSON.stringify({\n type: 'resize',\n cols: process.stdout.columns,\n rows: process.stdout.rows,\n }),\n );\n }\n };\n\n process.stdout.on('resize', resizeHandler);\n\n const pingInterval = setInterval(() => {\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(\n JSON.stringify({\n type: 'ping',\n timestamp: Date.now(),\n }),\n );\n }\n }, 30 * 1000);\n\n const sigintHandler = () => {\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(\n JSON.stringify({\n type: 'close',\n reason: 'user_exit',\n }),\n );\n socket.close();\n }\n };\n\n process.on('SIGINT', sigintHandler);\n\n return pingInterval;\n}\n\nexport function restoreTerminal(): void {\n if (process.stdin.setRawMode && isRawModeSet) {\n process.stdin.setRawMode(originalRawMode || false);\n isRawModeSet = false;\n }\n process.stdin.pause();\n\n process.stdin.removeAllListeners('data');\n process.stdout.removeAllListeners('resize');\n process.removeAllListeners('SIGINT');\n}\n", "import type { User } from 'firebase/auth';\n\nfunction parseJwt(token: string): { exp: number; [key: string]: any } {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(\n Buffer.from(base64, 'base64')\n .toString('binary')\n .split('')\n .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join(''),\n );\n return JSON.parse(jsonPayload);\n}\n\nexport function startTokenRefreshMonitoring(\n user: User,\n verbose: boolean,\n): NodeJS.Timeout {\n return setInterval(async () => {\n try {\n const currentToken = await user.getIdToken(false);\n const decoded = parseJwt(currentToken);\n const timeUntilExpiry = decoded.exp * 1000 - Date.now();\n\n if (timeUntilExpiry < 5 * 60 * 1000) {\n if (verbose) {\n console.log('[Token refresh] ID token expiring soon, refreshing...');\n }\n await user.getIdToken(true);\n if (verbose) {\n console.log('[Token refresh] ID token refreshed successfully');\n }\n }\n } catch (err) {\n console.error('[Token refresh] Failed to refresh token:', err);\n }\n }, 60 * 1000);\n}\n", "import { Box, Text } from 'ink';\nimport { useCallback, useMemo } from 'react';\nimport BuildTableLayout from '../../../components/BuildTableLayout';\nimport useBuildTableState from '../../../components/useBuildTableState';\nimport getRelativeDateFromDateString from '../../../utilities/getRelativeDateFromDateString';\nimport {\n getRunningBuildsWithIntrospection,\n BuildWithIntrospection,\n} from '../utilities/buildQueries';\n\ninterface BuildDisplayItem {\n 'ID': string;\n 'Version': string;\n 'Creation date': string;\n 'Platforms': string;\n [key: string]: string;\n}\n\nexport default function BuildSelector({\n configPath,\n onSelect,\n}: {\n configPath?: string;\n onSelect: (buildId: string) => void;\n}) {\n const load = useCallback(async () => {\n const builds = await getRunningBuildsWithIntrospection(configPath);\n\n if (builds.length === 0) {\n return { status: 'no-builds' } as const;\n }\n\n const displayBuilds = builds.map((build) => ({\n 'ID': build.id,\n 'Version': build.appVersion || 'unknown',\n 'Creation date': getRelativeDateFromDateString(build.createdAt),\n 'Platforms': getEnabledPlatforms(build),\n }));\n\n return { status: 'builds', builds: displayBuilds } as const;\n }, [configPath]);\n\n const { status, builds, error, selectItem } =\n useBuildTableState<BuildDisplayItem>({\n load,\n });\n\n const header = useMemo(\n () => (\n <Box marginBottom={1}>\n <Text>Select a build to introspect:</Text>\n </Box>\n ),\n [],\n );\n\n const footer = useMemo(() => {\n if (status !== 'show-builds') {\n return null;\n }\n\n return (\n <Box marginTop={1}>\n <Text dimColor>\n Showing {builds.length} running build\n {builds.length === 1 ? '' : 's'} with introspection enabled\n </Text>\n </Box>\n );\n }, [builds.length, status]);\n\n const noBuildsContent = useMemo(\n () => (\n <Box flexDirection=\"column\">\n <Text color=\"yellow\">No running builds with introspection found</Text>\n <Text dimColor>\n Start a build with --introspect flag to enable interactive debugging\n </Text>\n </Box>\n ),\n [],\n );\n\n if (status === 'selected') {\n return null;\n }\n\n function getEnabledPlatforms(build: BuildWithIntrospection): string {\n const platforms: string[] = [];\n\n if (build.introspect.mac?.enabled) platforms.push('mac');\n if (build.introspect.windows?.enabled) platforms.push('win');\n if (build.introspect.linux?.enabled) platforms.push('linux');\n\n return platforms.join(', ');\n }\n\n return (\n <BuildTableLayout\n builds={builds}\n commandUsed=\"todesktop introspect\"\n error={error}\n footer={footer}\n header={header}\n loadingText=\"Loading builds with introspection enabled\"\n noBuildsContent={noBuildsContent}\n onSelect={({ value }) => {\n selectItem(value.ID);\n onSelect(value.ID);\n }}\n status={status}\n />\n );\n}\n", "import { Box } from 'ink';\nimport { ReactNode } from 'react';\nimport ErrorDisplay from './ErrorDisplay';\nimport LoadingText from './LoadingText';\nimport SelectTable from './SelectTable';\n\ntype Status = 'loading' | 'show-builds' | 'no-builds' | 'error' | 'selected';\n\ntype BuildTableLayoutProps<T extends Record<string, string>> = {\n builds: T[];\n commandUsed: string;\n error: Error | null;\n header?: ReactNode;\n footer?: ReactNode;\n loadingText?: string;\n noBuildsContent: ReactNode;\n onSelect: (item: { value: T }) => void;\n status: Status;\n};\n\nexport default function BuildTableLayout<T extends Record<string, string>>({\n builds,\n commandUsed,\n error,\n footer,\n header,\n loadingText,\n noBuildsContent,\n onSelect,\n status,\n}: BuildTableLayoutProps<T>) {\n switch (status) {\n case 'loading':\n return <LoadingText text={loadingText} />;\n\n case 'error':\n return (\n <ErrorDisplay\n commandUsed={commandUsed}\n error={error ?? new Error('Unknown error')}\n />\n );\n\n case 'no-builds':\n return <>{noBuildsContent}</>;\n\n case 'show-builds':\n return (\n <Box flexDirection=\"column\">\n {header}\n <SelectTable data={builds} onSelect={onSelect} />\n {footer}\n </Box>\n );\n\n case 'selected':\n return null;\n\n default:\n return null;\n }\n}\n", "import { Box } from 'ink';\nimport SelectInput from 'ink-select-input';\nimport PropTypes from 'prop-types';\nimport CustomSelectInputIndicator from './CustomSelectInputIndicator';\nimport TableEnd from './TableEnd';\nimport TableHead from './TableHead';\nimport TableRow from './TableRow';\nimport getKeyDetails from '../utilities/getKeyDetails';\n\nconst CustomIndicator = (props) => (\n <CustomSelectInputIndicator marginTop={1} {...props} />\n);\n\n/*\n This is like if <Table/> and ink-select-input had a baby.\n Read the block comment at the top of <Table/> first.\n*/\nconst SelectTable = ({ data, onSelect }) => {\n const keyDetails = getKeyDetails(data);\n\n const getSelectItems = () => {\n return data.map((rowData, index) => {\n return {\n index,\n key: index,\n value: rowData,\n };\n });\n };\n\n // eslint-disable-next-line react/no-unstable-nested-components\n const ItemComponent = ({\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n label, // Make it compatible to SelectInput type, not used actually\n index,\n isSelected,\n }: {\n label: string;\n index?: number;\n isSelected?: boolean;\n }) => {\n return (\n <TableRow\n data={data[index]}\n key={index}\n keyDetails={keyDetails}\n textProps={{ bold: isSelected, color: isSelected ? undefined : 'gray' }}\n />\n );\n };\n\n return (\n <Box flexDirection=\"column\">\n <TableHead keyDetails={keyDetails} marginLeft={2} />\n <SelectInput\n indicatorComponent={CustomIndicator}\n itemComponent={ItemComponent}\n items={getSelectItems()}\n onSelect={onSelect}\n />\n <TableEnd keyDetails={keyDetails} marginLeft={2} />\n </Box>\n );\n};\n\nSelectTable.propTypes = {\n data: (props, _propName, componentName) => {\n const type = typeof props.data;\n if (Array.isArray('array')) {\n return new Error(\n `'data' prop must be an array ('${type}' given) in ${componentName} component`,\n );\n }\n\n if (props.data.length === 0) {\n return new Error(\n `'data' prop must not be empty, in ${componentName} component`,\n );\n }\n },\n onSelect: PropTypes.func,\n};\n\nexport default SelectTable;\n", "import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport CliError from '../utilities/CliError';\nimport useExit from '../utilities/useExit';\nimport useInput from '../utilities/useInput';\n\ntype BuildTableStatus =\n | 'loading'\n | 'show-builds'\n | 'no-builds'\n | 'error'\n | 'selected';\n\ntype ExitState = Extract<BuildTableStatus, 'loading' | 'show-builds'>;\n\nconst DEFAULT_EXIT_STATES: ExitState[] = ['loading', 'show-builds'];\n\ntype LoadResult<T> =\n | T[]\n | {\n status: 'builds';\n builds: T[];\n }\n | {\n status: 'no-builds';\n }\n | {\n status: 'selected';\n selectedId: string;\n };\n\ntype HookState<T> = {\n builds: T[];\n error: Error | null;\n status: BuildTableStatus;\n selectedId?: string;\n};\n\nexport type UseBuildTableStateOptions<T> = {\n exitOnError?: boolean;\n exitOnNoData?: boolean;\n exitStates?: ExitState[];\n load: () => Promise<LoadResult<T>>;\n};\n\nexport type UseBuildTableStateResult<T> = {\n builds: T[];\n error: Error | null;\n selectItem: (id: string) => void;\n selectedId?: string;\n status: BuildTableStatus;\n};\n\nexport default function useBuildTableState<T extends Record<string, string>>({\n exitOnError = true,\n exitOnNoData = true,\n exitStates = DEFAULT_EXIT_STATES,\n load,\n}: UseBuildTableStateOptions<T>): UseBuildTableStateResult<T> {\n const exit = useExit();\n const [state, setState] = useState<HookState<T>>({\n builds: [],\n error: null,\n status: 'loading',\n });\n const exitRef = useRef(exit);\n useEffect(() => {\n exitRef.current = exit;\n }, [exit]);\n const handleInput = useCallback(\n (_: unknown, key: { escape?: boolean }) => {\n if (key.escape && exitStates.includes(state.status as ExitState)) {\n exitRef.current();\n }\n },\n [exitStates, state.status],\n );\n\n useInput(handleInput);\n\n useEffect(() => {\n let isMounted = true;\n\n const run = async () => {\n setState((previous) => ({\n ...previous,\n error: null,\n status: 'loading',\n }));\n\n try {\n const result = await load();\n if (!isMounted) {\n return;\n }\n\n if (Array.isArray(result)) {\n const builds = result;\n if (builds.length === 0) {\n setState({\n builds: [],\n error: null,\n status: 'no-builds',\n });\n if (exitOnNoData) {\n setTimeout(() => exitRef.current(), 10);\n }\n return;\n }\n\n setState({\n builds,\n error: null,\n status: 'show-builds',\n });\n return;\n }\n\n switch (result.status) {\n case 'builds': {\n const { builds } = result;\n if (builds.length === 0) {\n setState({\n builds: [],\n error: null,\n status: 'no-builds',\n });\n if (exitOnNoData) {\n setTimeout(() => exitRef.current(), 10);\n }\n } else {\n setState({\n builds,\n error: null,\n status: 'show-builds',\n });\n }\n break;\n }\n case 'no-builds':\n setState({\n builds: [],\n error: null,\n status: 'no-builds',\n });\n if (exitOnNoData) {\n setTimeout(() => exitRef.current(), 10);\n }\n break;\n case 'selected':\n setState({\n builds: [],\n error: null,\n selectedId: result.selectedId,\n status: 'selected',\n });\n break;\n default:\n setState({\n builds: [],\n error: CliError.from(\n new Error('Unexpected load result from useBuildTableState'),\n ),\n status: 'error',\n });\n if (exitOnError) {\n setTimeout(() => exitRef.current(), 10);\n }\n }\n } catch (error) {\n if (!isMounted) {\n return;\n }\n const cliError = CliError.from(error);\n setState({\n builds: [],\n error: cliError,\n status: 'error',\n });\n if (exitOnError) {\n setTimeout(() => exitRef.current(), 10);\n }\n }\n };\n\n run();\n\n return () => {\n isMounted = false;\n };\n }, [exitOnError, exitOnNoData, load]);\n\n const selectItem = useCallback((id: string) => {\n setState((previous) => ({\n ...previous,\n selectedId: id,\n status: 'selected',\n }));\n }, []);\n\n return useMemo(\n () => ({\n builds: state.builds,\n error: state.error,\n selectItem,\n selectedId: state.selectedId,\n status: state.status,\n }),\n [selectItem, state],\n );\n}\n", "import {\n collection,\n query as firestoreQuery,\n where,\n orderBy,\n limit as firestoreLimit,\n getDocs,\n doc,\n getDoc,\n} from 'firebase/firestore';\nimport {\n Build,\n BuildStatus,\n IntrospectBreakpointStatus,\n IntrospectShellStatus,\n} from '@todesktop/shared';\nimport firestore from '../../../utilities/firestore';\nimport findAppUserId from '../../../utilities/findAppUserId';\nimport getProjectConfig from '../../../utilities/projectConfig/getProjectConfig';\nimport logger from '../../../utilities/logger';\n\nexport interface BuildWithIntrospection extends Build {\n introspect: NonNullable<Build['introspect']>;\n}\n\nexport async function getRunningBuildsWithIntrospection(\n configPath?: string,\n): Promise<BuildWithIntrospection[]> {\n const { id: appId } = getProjectConfig(configPath).config;\n const { id: userId } = await findAppUserId(appId);\n\n logger.debug({ appId, userId }, 'getRunningBuildsWithIntrospection');\n\n const buildsCollection = collection(\n firestore,\n `users/${userId}/applications/${appId}/builds`,\n );\n\n const q = firestoreQuery(\n buildsCollection,\n where('status', 'in', [BuildStatus.building, BuildStatus.preparation]),\n orderBy('createdAt', 'desc'),\n firestoreLimit(10),\n );\n\n const snapshot = await getDocs(q);\n\n if (snapshot.empty) {\n return [];\n }\n\n const builds = snapshot.docs\n .map((doc) => doc.data() as Build)\n .filter((build) => {\n if (!build.introspect) return false;\n\n const hasEnabledPlatform =\n build.introspect.mac?.enabled ||\n build.introspect.windows?.enabled ||\n build.introspect.linux?.enabled;\n\n return hasEnabledPlatform;\n }) as BuildWithIntrospection[];\n\n return builds;\n}\n\nexport async function getLatestBuildWithIntrospection(\n configPath?: string,\n): Promise<BuildWithIntrospection | null> {\n const { id: appId } = getProjectConfig(configPath).config;\n const { id: userId } = await findAppUserId(appId);\n\n logger.debug({ appId, userId }, 'getLatestBuildWithIntrospection');\n\n const buildsCollection = collection(\n firestore,\n `users/${userId}/applications/${appId}/builds`,\n );\n\n const q = firestoreQuery(\n buildsCollection,\n orderBy('createdAt', 'desc'),\n firestoreLimit(20),\n );\n\n const snapshot = await getDocs(q);\n\n if (snapshot.empty) {\n return null;\n }\n\n for (const docSnapshot of snapshot.docs) {\n const build = docSnapshot.data() as Build;\n\n if (build.introspect) {\n const hasEnabledPlatform =\n build.introspect.mac?.enabled ||\n build.introspect.windows?.enabled ||\n build.introspect.linux?.enabled;\n\n if (hasEnabledPlatform) {\n return build as BuildWithIntrospection;\n }\n }\n }\n\n return null;\n}\n\nexport type PlatformInfo = {\n platform: 'mac' | 'windows' | 'linux';\n enabled: boolean;\n breakpointStatus: IntrospectBreakpointStatus;\n shellStatus: IntrospectShellStatus;\n displayName: string;\n};\n\nexport async function getAvailablePlatforms(\n buildId: string,\n configPath?: string,\n): Promise<PlatformInfo[]> {\n const { id: appId } = getProjectConfig(configPath).config;\n const { id: userId } = await findAppUserId(appId);\n\n logger.debug({ appId, userId, buildId }, 'getAvailablePlatforms');\n\n const buildRef = doc(\n firestore,\n `users/${userId}/applications/${appId}/builds/${buildId}`,\n );\n const buildSnapshot = await getDoc(buildRef);\n\n if (!buildSnapshot.exists()) {\n throw new Error(`Build ${buildId} not found`);\n }\n\n const build = buildSnapshot.data() as Build;\n\n if (!build.introspect) {\n throw new Error(\n `Build ${buildId} does not have introspection enabled. Please rebuild with --introspect`,\n );\n }\n\n const platforms: PlatformInfo[] = [];\n\n const platformMap: Array<['mac' | 'windows' | 'linux', string]> = [\n ['mac', 'macOS'],\n ['windows', 'Windows'],\n ['linux', 'Linux'],\n ];\n\n for (const [platform, displayName] of platformMap) {\n const platformData = build.introspect[platform];\n if (platformData?.enabled) {\n platforms.push({\n platform,\n enabled: platformData.enabled,\n breakpointStatus: platformData.breakpointStatus,\n shellStatus: platformData.shellStatus,\n displayName,\n });\n }\n }\n\n if (platforms.length === 0) {\n throw new Error(\n `No platforms with introspection enabled for build ${buildId}`,\n );\n }\n\n return platforms;\n}\n", "import { Box, Text } from 'ink';\nimport SelectInput from 'ink-select-input';\nimport { useEffect, useState } from 'react';\nimport LoadingText from '../../../components/LoadingText';\nimport ErrorDisplay from '../../../components/ErrorDisplay';\nimport CustomSelectInputIndicator from '../../../components/CustomSelectInputIndicator';\nimport CliError from '../../../utilities/CliError';\nimport useExit from '../../../utilities/useExit';\nimport useInput from '../../../utilities/useInput';\nimport { getAvailablePlatforms, PlatformInfo } from '../utilities/buildQueries';\nimport {\n formatIntrospectionStatus,\n getIntrospectionStatusIndicator,\n} from '../../../utilities/introspectionStatus';\n\ntype State =\n | { status: 'loading' }\n | { status: 'error'; error: Error }\n | { status: 'show-platforms'; platforms: PlatformInfo[] };\n\ninterface SelectItem {\n label: string;\n value: 'mac' | 'windows' | 'linux';\n}\n\nfunction PlatformItem({\n label,\n isSelected,\n}: {\n label: string;\n isSelected: boolean;\n}) {\n return (\n <Box>\n <Text bold={isSelected} color={isSelected ? undefined : 'gray'}>\n {label}\n </Text>\n </Box>\n );\n}\n\nexport default function PlatformSelector({\n buildId,\n configPath,\n onSelect,\n}: {\n buildId: string;\n configPath?: string;\n onSelect: (platform: 'mac' | 'windows' | 'linux') => void;\n}) {\n const exit = useExit();\n const [state, setState] = useState<State>({ status: 'loading' });\n\n useEffect(() => {\n loadPlatforms();\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n useInput((_, key) => {\n if (key.escape && ['show-platforms', 'loading'].includes(state.status)) {\n exit();\n }\n });\n\n async function loadPlatforms() {\n try {\n const platforms = await getAvailablePlatforms(buildId, configPath);\n setState({ status: 'show-platforms', platforms });\n } catch (e) {\n setState({ status: 'error', error: CliError.from(e) });\n setTimeout(() => exit(), 10);\n }\n }\n\n function handleSelect(item: SelectItem) {\n onSelect(item.value);\n }\n\n switch (state.status) {\n case 'loading':\n return <LoadingText text=\"Loading available platforms\" />;\n\n case 'error':\n return (\n <ErrorDisplay commandUsed=\"todesktop introspect\" error={state.error} />\n );\n\n case 'show-platforms': {\n const items: SelectItem[] = state.platforms.map((platform) => {\n const statusLabel = formatIntrospectionStatus(\n platform.breakpointStatus,\n platform.shellStatus,\n );\n return {\n label: `${getIntrospectionStatusIndicator(\n platform.breakpointStatus,\n platform.shellStatus,\n )} ${platform.displayName} (${statusLabel})`,\n value: platform.platform,\n };\n });\n\n return (\n <Box flexDirection=\"column\">\n <Box marginBottom={1}>\n <Text>Select a platform to introspect:</Text>\n </Box>\n <SelectInput\n items={items}\n onSelect={handleSelect}\n indicatorComponent={CustomSelectInputIndicator}\n itemComponent={PlatformItem}\n />\n <Box marginTop={1}>\n <Text dimColor>\n {state.platforms.length} platform\n {state.platforms.length === 1 ? '' : 's'} available\n </Text>\n </Box>\n </Box>\n );\n }\n }\n}\n", "import { useEffect, useState } from 'react';\nimport LoadingText from '../../../components/LoadingText';\nimport ErrorDisplay from '../../../components/ErrorDisplay';\nimport CliError from '../../../utilities/CliError';\nimport { getLatestBuildWithIntrospection } from '../utilities/buildQueries';\nimport useExit from '../../../utilities/useExit';\n\nexport default function LatestBuildLoader({\n configPath,\n onBuildFound,\n}: {\n configPath?: string;\n onBuildFound: (buildId: string) => void;\n}) {\n const exit = useExit();\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n loadLatestBuild();\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n async function loadLatestBuild() {\n try {\n const latestBuild = await getLatestBuildWithIntrospection(configPath);\n if (latestBuild) {\n onBuildFound(latestBuild.id);\n } else {\n setError(\n new Error(\n 'No builds with introspection found. Please run a build with --introspect',\n ),\n );\n setTimeout(() => exit(), 10);\n }\n } catch (e) {\n setError(CliError.from(e));\n setTimeout(() => exit(), 10);\n }\n }\n\n if (error) {\n return <ErrorDisplay commandUsed=\"todesktop introspect\" error={error} />;\n }\n\n return <LoadingText text=\"Finding latest build with introspection\" />;\n}\n", "import { useEffect } from 'react';\nimport { Text } from 'ink';\n\nimport { deleteAuthConfig } from '../utilities/configStore';\nimport ErrorBoundary from '../components/ErrorBoundary';\nimport LoginHOC from '../components/LoginHOC';\nimport { useAnalyticsCommand } from '../utilities/useAnalytics';\nimport useExit from '../utilities/useExit';\n\nconst Logout = () => {\n const exit = useExit();\n const { hasAttemptedTracking } = useAnalyticsCommand('logout');\n\n // delete auth config deletes the credentials stored on disk\n deleteAuthConfig();\n\n // exits the program once tracking of the \"logout\" command has been attempted\n useEffect(() => {\n if (hasAttemptedTracking) {\n exit();\n }\n }, [exit, hasAttemptedTracking]);\n\n return <Text>Log out successful</Text>;\n};\n\nconst LogoutWrapper = () => {\n return (\n <ErrorBoundary>\n <LoginHOC isInteractive={false}>\n <Logout />\n </LoginHOC>\n </ErrorBoundary>\n );\n};\n\nexport default LogoutWrapper;\n", "import { Box, Text } from 'ink';\nimport { useCallback, useEffect, useMemo, useState, type JSX } from 'react';\nimport { where } from 'firebase/firestore';\nimport BuildTableLayout from './BuildTableLayout';\nimport useBuildTableState from './useBuildTableState';\nimport { Build } from '../types';\nimport findAppUserId from '../utilities/findAppUserId';\nimport getBuilds from '../utilities/getBuilds';\nimport getLatestBuildId from '../utilities/getLatestBuildId';\nimport getLatestReleasedBuild from '../utilities/getLatestReleasedBuild';\nimport getRelativeDateFromDateString from '../utilities/getRelativeDateFromDateString';\nimport getProjectConfig from '../utilities/projectConfig/getProjectConfig';\n\nexport default function BuildPicker({\n buildFilter,\n buildId,\n children,\n commandUsed,\n configPath,\n loadData = loadPickerData,\n noBuildsDescription = null,\n question = 'Which build would you like to test?',\n}: {\n buildFilter?: BuildFilter;\n buildId?: string;\n children: (buildId: string) => JSX.Element;\n commandUsed: string;\n configPath?: string;\n loadData?: typeof loadPickerData;\n noBuildsDescription?: string | null | JSX.Element;\n question?: string | JSX.Element;\n}) {\n const [selectedBuildId, setSelectedBuildId] = useState<string | undefined>(\n buildId && buildId !== 'latest' ? buildId : undefined,\n );\n\n const load = useCallback(async () => {\n return loadData({\n buildFilter,\n buildId,\n configPath,\n });\n }, [buildFilter, buildId, configPath, loadData]);\n\n const { status, builds, error, selectedId, selectItem } =\n useBuildTableState<BuildDisplayItem>({\n load,\n });\n\n useEffect(() => {\n if (selectedId) {\n setSelectedBuildId(selectedId);\n }\n }, [selectedId]);\n\n const noBuildsContent = useMemo(\n () => (\n <Box>\n <Text>No eligible builds found </Text>\n {noBuildsDescription && <Text dimColor>{noBuildsDescription}</Text>}\n </Box>\n ),\n [noBuildsDescription],\n );\n\n const header = useMemo(\n () => (\n <Box>\n <Text>{question}</Text>\n </Box>\n ),\n [question],\n );\n\n const footer = useMemo(() => {\n if (status !== 'show-builds') {\n return null;\n }\n return (\n <Box>\n <Text dimColor>\n Showing the latest {builds.length} unreleased successful builds\n </Text>\n </Box>\n );\n }, [builds.length, status]);\n\n if (selectedBuildId) {\n return children(selectedBuildId);\n }\n\n return (\n <BuildTableLayout\n builds={builds}\n commandUsed={commandUsed}\n error={error}\n footer={footer}\n header={header}\n noBuildsContent={noBuildsContent}\n onSelect={({ value }) => {\n selectItem(value.ID);\n setSelectedBuildId(value.ID);\n }}\n status={status}\n />\n );\n}\n\nasync function loadPickerData({\n buildFilter,\n buildId,\n configPath,\n}: {\n buildFilter?: BuildFilter;\n buildId?: string;\n configPath?: string;\n}): Promise<LoadPickerDataResult> {\n if (buildId && buildId !== 'latest') {\n return { status: 'selected', selectedId: buildId };\n }\n\n if (buildId === 'latest') {\n const latestBuildId = await getLatestBuild({ configPath });\n if (latestBuildId) {\n return { status: 'selected', selectedId: latestBuildId };\n }\n return { status: 'no-builds' };\n }\n\n const builds = await getBuildItems({ buildFilter, configPath });\n if (builds.length === 0) {\n return { status: 'no-builds' };\n }\n return { status: 'builds', builds };\n}\n\nasync function getLatestBuild({\n configPath,\n}: {\n configPath?: string;\n}): Promise<string | undefined> {\n const { id: appId } = getProjectConfig(configPath).config;\n const { id: userId } = await findAppUserId(appId);\n return getLatestBuildId({ appId, userId });\n}\n\nasync function getBuildItems({\n buildFilter = () => true,\n configPath,\n}: {\n buildFilter?: BuildFilter;\n configPath?: string;\n}): Promise<BuildDisplayItem[]> {\n const { id: appId } = getProjectConfig(configPath).config;\n const { id: userId, label: userName } = await findAppUserId(appId);\n const latestReleasedBuild = await getLatestReleasedBuild({ appId, userId });\n const rawBuilds = await getBuilds({\n addWhereClauses: () => [where('status', '==', 'succeeded')],\n appId,\n limit: 50,\n userId,\n });\n\n return rawBuilds\n .filter((build) => buildFilter({ build, latestReleasedBuild }))\n .slice(0, 5)\n .map((build) => ({\n 'ID': build.id,\n 'Version': build.appVersion || 'unknown',\n 'Creation date': getRelativeDateFromDateString(build.createdAt),\n 'Owner': userName || 'unknown',\n }));\n}\n\ninterface BuildDisplayItem {\n 'Creation date': string;\n 'ID': string;\n 'Owner': string;\n 'Version': string;\n [key: string]: string;\n}\n\nexport type BuildFilter = (args: {\n build: Build;\n latestReleasedBuild?: Build;\n}) => boolean;\n\ntype LoadPickerDataResult =\n | { status: 'builds'; builds: BuildDisplayItem[] }\n | { status: 'no-builds' }\n | { status: 'selected'; selectedId: string };\n", "import type { Build, IApp } from '@todesktop/shared';\nimport {\n doc,\n getDoc,\n collection,\n query,\n orderBy,\n limit,\n getDocs,\n} from 'firebase/firestore';\nimport firestore from './firestore';\nimport { readDocumentSnapshot, readQueryDocument } from './firestoreData';\nimport getBuildById from './getBuildById';\n\nexport default async function getLatestReleasedBuild({\n appId,\n userId,\n}: {\n appId: string;\n userId: string;\n}): Promise<Build | undefined> {\n const appRef = doc(firestore, `users/${userId}/applications/${appId}`);\n const appSnapshot = await getDoc(appRef);\n const app = readDocumentSnapshot<IApp>(appSnapshot);\n\n if (!app) {\n throw new Error(`Application with ID of ${appId} doesn't exist.`);\n }\n\n if (app.meta?.latestReleaseBuildId) {\n return (\n (await getBuildById({\n buildId: app.meta?.latestReleaseBuildId,\n appId,\n userId,\n })) || undefined\n );\n }\n\n const buildsQuery = query(\n collection(firestore, `users/${userId}/applications/${appId}/builds`),\n orderBy('releasedAt', 'desc'),\n limit(1),\n );\n const buildsResult = await getDocs(buildsQuery);\n\n return buildsResult.empty\n ? undefined\n : readQueryDocument<Build>(buildsResult.docs[0]);\n}\n", "import { Build } from '../types';\nimport { doc, getDoc } from 'firebase/firestore';\nimport firestore from './firestore';\nimport { readDocumentSnapshot } from './firestoreData';\nimport logger from './logger';\n\nexport default async function getBuildById({\n appId,\n buildId,\n userId,\n}: {\n appId: string;\n buildId: string;\n userId: string;\n}): Promise<Build | null> {\n logger.debug({ appId, buildId }, 'getBuildById');\n const snapshot = await getDoc(\n doc(firestore, `users/${userId}/applications/${appId}/builds/${buildId}`),\n );\n\n if (!snapshot.exists()) {\n return null;\n }\n\n return readDocumentSnapshot<Build>(snapshot) ?? null;\n}\n", "import { useEffect, useState } from 'react';\nimport CliError from '../../../utilities/CliError';\nimport getBuildAttributes from '../../../utilities/getBuildAttributes';\nimport logForCI from '../../../utilities/logForCI';\nimport logger from '../../../utilities/logger';\nimport releaseBuild from '../utilities/releaseBuild';\nimport useExit from '../../../utilities/useExit';\nimport { ReleaseBuildState } from '../utilities/types';\nimport ReleaseBuildView from './ReleaseBuildView';\n\nexport default function ReleaseBuildLogic({\n buildId,\n commandUsed,\n configPath,\n}: {\n buildId: string;\n commandUsed: string;\n configPath?: string;\n}) {\n const exit = useExit();\n const [state, setState] = useState<ReleaseBuildState>({ state: 'loading' });\n\n useEffect(() => {\n releaseBuildWorkflow({ configPath, buildId, updateState }).catch(\n logger.error,\n );\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n function updateState(changes: Partial<ReleaseBuildState>) {\n setState(\n (previousState) =>\n ({ ...previousState, ...changes }) as ReleaseBuildState,\n );\n if (changes.state && ['build-error', 'complete'].includes(changes.state)) {\n setTimeout(() => exit(), 10);\n }\n }\n\n return <ReleaseBuildView commandUsed={commandUsed} state={state} />;\n}\n\nasync function releaseBuildWorkflow({\n buildId,\n configPath,\n updateState,\n}: {\n buildId: string;\n configPath?: string;\n updateState: (changes: Partial<ReleaseBuildState>) => void;\n}) {\n try {\n const { appId, build } = await getBuildAttributes({\n buildId,\n configPath,\n });\n updateState({ build });\n\n updateState({ state: 'releasing' });\n await releaseBuild({ appId, buildId });\n\n logForCI('Released!');\n updateState({ state: 'complete' });\n } catch (e) {\n const error = CliError.from(e);\n updateState({ error, state: error.type });\n }\n}\n", "import { Build } from '@todesktop/shared';\nimport findAppUserId from './findAppUserId';\nimport getBuildById from './getBuildById';\nimport getProjectConfig from './projectConfig/getProjectConfig';\nimport { currentUser } from './firestore';\n\nexport default async function getBuildAttributes({\n buildId,\n configPath,\n}: {\n buildId: string;\n configPath?: string;\n}): Promise<BuildAttributes> {\n const {\n id: appId,\n nodeVersion,\n npmVersion,\n pnpmVersion,\n } = getProjectConfig(configPath).config;\n const { id: userId } = await findAppUserId(appId);\n const contextUserId = currentUser()?.uid;\n const build = await fetchBuild({ appId, buildId, userId });\n\n return {\n appId,\n build,\n buildId,\n contextUserId,\n nodeVersion,\n npmVersion,\n pnpmVersion,\n userId,\n };\n}\n\nasync function fetchBuild({\n appId,\n buildId,\n userId,\n}: {\n appId: string;\n buildId: string;\n userId: string;\n}): Promise<Build> {\n const build = await getBuildById({ appId, buildId, userId });\n if (!build) {\n throw new Error(`No such build ${buildId} for application ${appId}`);\n }\n\n return build;\n}\n\ninterface BuildAttributes {\n appId: string;\n buildId: string;\n build: Build;\n contextUserId?: string;\n nodeVersion: string;\n npmVersion: string;\n pnpmVersion: string;\n userId: string;\n}\n", "import { FunctionsError } from 'firebase/functions';\nimport CliError from '../../../utilities/CliError';\nimport getCallableFirebaseFunction from '../../../utilities/getCallableFirebaseFunction';\n\nexport default async function releaseBuild({\n appId,\n buildId,\n}: {\n appId: string;\n buildId: string;\n}): Promise<void> {\n try {\n await getCallableFirebaseFunction('releaseBuild')({ appId, buildId });\n } catch (e) {\n if (isFirebaseFunctionError(e)) {\n // Preserve the original Firebase error message\n const errorType =\n e.code === 'failed-precondition' || e.code === 'not-found'\n ? 'build-error'\n : 'error';\n throw CliError.from(e, errorType);\n } else {\n throw new CliError('Unexpected internal error while releasing build');\n }\n }\n}\n\nfunction isFirebaseFunctionError(error: unknown): error is FunctionsError {\n return Boolean(\n typeof error === 'object' &&\n error &&\n 'code' in error &&\n typeof (error as any).code === 'string',\n );\n}\n", "import { Text } from 'ink';\nimport BuildError from '../../../components/BuildError';\nimport ErrorDisplay from '../../../components/ErrorDisplay';\nimport LoadingText from '../../../components/LoadingText';\nimport { ReleaseBuildState } from '../utilities/types';\n\nexport default function ReleaseBuildView({\n commandUsed,\n state,\n}: {\n commandUsed?: string;\n state: ReleaseBuildState;\n}) {\n switch (state.state) {\n case 'build-error': {\n return (\n <BuildError\n build={state.build}\n description=\"Can't release build\"\n message={state.error?.message || 'Internal build error'}\n />\n );\n }\n\n case 'complete':\n return (\n <Text bold color=\"greenBright\">\n Released!\n </Text>\n );\n\n case 'error':\n return (\n <ErrorDisplay\n commandUsed={commandUsed}\n error={{ stack: state.error?.stack }}\n />\n );\n\n case 'loading':\n return <LoadingText />;\n\n case 'releasing':\n return <LoadingText text=\"Releasing\" />;\n\n default:\n return (\n <ErrorDisplay\n commandUsed={commandUsed}\n error={new Error(`Unknown state ${state}`)}\n />\n );\n }\n}\n", "import { Box, Text } from 'ink';\nimport Link from 'ink-link';\nimport type { Build } from '../types';\n\nexport default function BuildError({\n build,\n description = \"Can't release\",\n message,\n}: {\n build: Build;\n description?: string;\n message: string;\n}) {\n return (\n <Box flexDirection=\"column\">\n <Text bold color=\"red\">\n {description} {build.appName} v{build.appVersion}\n </Text>\n\n <Box marginBottom={1} marginTop={1}>\n <Text>{message}</Text>\n </Box>\n\n <Text bold>See web UI for more information: </Text>\n <Text>\n <Link fallback={false} url={build.url}>\n {build.url}\n </Link>\n </Text>\n </Box>\n );\n}\n", "import { Build } from '@todesktop/shared';\nimport { Text } from 'ink';\nimport { useEffect, useState, type JSX } from 'react';\nimport BuildError from '../../../components/BuildError';\nimport ErrorDisplay from '../../../components/ErrorDisplay';\nimport LoadingText from '../../../components/LoadingText';\nimport CliError from '../../../utilities/CliError';\nimport getBuildAttributes from '../../../utilities/getBuildAttributes';\nimport getLatestReleasedBuild from '../../../utilities/getLatestReleasedBuild';\nimport logger from '../../../utilities/logger';\nimport {\n isBuildTestable,\n makeProgress,\n} from '../../smoke-test/utilities/build';\nimport analyzeRelease, { AnalyzeResult } from '../utilities/analyzeRelease';\nimport DowngradeConfirmation from './DowngradeConfirmation';\nimport YesNoConfirmation from './YesNoConfirmation';\n\nexport default function ReleaseConfirmation({\n buildId,\n children,\n configPath,\n disabled = false,\n loadData = loadBuildsData,\n}: {\n buildId: string;\n configPath?: string;\n children: JSX.Element;\n disabled?: boolean;\n\n /** @internal For test */\n loadData?: typeof loadBuildsData;\n}) {\n const [state, setState] = useState<ConfirmationState>({\n state: disabled ? 'bypass' : 'loading',\n });\n\n useEffect(() => {\n confirmationWorkflow({\n buildId,\n configPath,\n loadData,\n state,\n updateState,\n }).catch(logger.error);\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n function updateState(changes: Partial<ConfirmationState>) {\n setState(\n (previousState) =>\n ({\n ...previousState,\n ...changes,\n }) as ConfirmationState,\n );\n }\n\n switch (state.state) {\n case 'build-error': {\n return (\n <BuildError\n build={state.build}\n description=\"Can't release build\"\n message={state.error?.message || 'Internal build error'}\n />\n );\n }\n\n case 'bypass':\n return children;\n\n case 'confirm-downgrade':\n return (\n <DowngradeConfirmation\n build={state.build}\n latestReleasedBuild={state.latestReleasedBuild}\n confirmDowngrade={state.onConfirm}\n />\n );\n\n case 'confirm-release':\n if (!state.build) {\n return <ErrorDisplay error={new Error('state.build is empty')} />;\n }\n\n return (\n <YesNoConfirmation\n title={\n <>\n <Text>This will release build {state.build.id} as </Text>\n <Text bold>\n {state.build.appName} v{state.build.appVersion}\n </Text>\n <Text>, are you sure?</Text>\n </>\n }\n onYes={state.onConfirm}\n />\n );\n\n case 'confirm-test':\n return (\n <YesNoConfirmation\n title={state.confirmationText}\n onYes={state.onConfirm}\n />\n );\n\n case 'error':\n return <ErrorDisplay error={state.error} />;\n\n case 'loading':\n return <LoadingText />;\n\n default:\n return (\n <ErrorDisplay\n error={\n new Error(`Unknown state ${(state as ConfirmationState).state}`)\n }\n />\n );\n }\n}\n\nasync function confirmationWorkflow({\n buildId,\n configPath,\n loadData,\n updateState,\n state,\n}: {\n buildId: string;\n configPath?: string;\n loadData: typeof loadBuildsData;\n updateState: (state: Partial<ConfirmationState>) => void;\n state: ConfirmationState;\n}) {\n try {\n const { build, latestReleasedBuild } = await loadData({\n buildId,\n configPath,\n });\n updateState({ build, latestReleasedBuild });\n\n const report = analyzeRelease({ build, latestReleasedBuild });\n if (!report.isReleasable) {\n updateState({ error: new Error(report.error), state: 'build-error' });\n return;\n }\n\n if (state.state !== 'bypass') {\n await confirmDowngrade({ report, updateState });\n await confirmSmokeTest({ build, updateState });\n await confirmRelease({ updateState });\n }\n\n updateState({ state: 'bypass' });\n } catch (e) {\n updateState({ state: 'error', error: CliError.from(e) });\n }\n}\n\nasync function confirmDowngrade({\n report,\n updateState,\n}: {\n report: AnalyzeResult;\n updateState: (state: Partial<ConfirmationState>) => void;\n}) {\n if (!report.isOlderThanLatest) {\n return;\n }\n\n let onConfirm;\n const downgradePromise = new Promise((r) => (onConfirm = r));\n\n updateState({ onConfirm, state: 'confirm-downgrade' });\n\n await downgradePromise;\n}\n\nasync function confirmSmokeTest({\n build,\n updateState,\n}: {\n build: Build;\n updateState: (state: Partial<ConfirmationState>) => void;\n}) {\n const confirmationText = getTestConfirmation(build);\n if (confirmationText === '') {\n return;\n }\n\n let onConfirm;\n const downgradePromise = new Promise((r) => (onConfirm = r));\n\n updateState({ onConfirm, state: 'confirm-test', confirmationText });\n\n await downgradePromise;\n}\n\nasync function confirmRelease({\n updateState,\n}: {\n updateState: (state: Partial<ConfirmationState>) => void;\n}) {\n let onConfirm;\n const downgradePromise = new Promise((r) => (onConfirm = r));\n\n updateState({ onConfirm, state: 'confirm-release' });\n\n await downgradePromise;\n}\n\nfunction getTestConfirmation(build: Build): string {\n const continueText = 'Are you sure you want to release?';\n\n if (!build.todesktopRuntimeVersionSpecified || !isBuildTestable(build)) {\n return '';\n }\n\n if (!build.smokeTest) {\n return `Smoke test hasn't been run for this build. ${continueText}`;\n }\n\n const { total } = makeProgress(build);\n\n switch (total.state) {\n case 'error':\n return `Smoke test failed for this build. ${continueText}`;\n case 'canceled':\n return `Smoke test was canceled for this build. ${continueText}`;\n case 'progress':\n return `Smoke test is currently running for this build. ${continueText}`;\n default:\n return '';\n }\n}\n\nasync function loadBuildsData({\n buildId,\n configPath,\n}: {\n buildId: string;\n configPath?: string;\n}): Promise<{ build: Build; latestReleasedBuild?: Build }> {\n const { appId, build, userId } = await getBuildAttributes({\n buildId,\n configPath,\n });\n\n const latestReleasedBuild = await getLatestReleasedBuild({ appId, userId });\n\n return { build, latestReleasedBuild };\n}\n\ntype ConfirmationState =\n | { state: 'loading' }\n | { state: 'bypass' }\n | {\n state: 'confirm-downgrade';\n build: Build;\n latestReleasedBuild: Build;\n onConfirm: () => void;\n }\n | {\n state: 'confirm-test';\n build: Build;\n confirmationText: string;\n onConfirm: () => void;\n }\n | {\n state: 'confirm-release';\n build: Build;\n onConfirm: () => void;\n }\n | { state: 'error'; error: Error }\n | { state: 'build-error'; build: Build; error: Error };\n", "import { Build, SmokeTestProgress } from '@todesktop/shared/src/desktopify';\nimport semver from 'semver';\nimport CliError from '../../../utilities/CliError';\n\nconst MIN_RUNTIME_VERSION = '1.2.3-0';\n\nexport function isBuildTestable(build: Partial<Build>): boolean {\n try {\n validateBuild(build);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isTestRunning(build: Build): boolean {\n if (!build.smokeTest) {\n return false;\n }\n\n const { isFinished } = makeProgress(build);\n return !isFinished;\n}\n\nexport const defaultVM = {\n cpu: '',\n agentVersion: '',\n image: '',\n imageVersion: '',\n};\n\nexport function makeProgress(build: Build): CliTestProgress {\n const defaultProgress: OsTestProgress = {\n message: 'Starting',\n progress: 0,\n state: 'progress',\n shouldSkip: false,\n vm: defaultVM,\n };\n\n const linux: OsTestProgress = {\n ...defaultProgress,\n ...build.smokeTest?.linux,\n shouldSkip: build.linux?.shouldSkip || false,\n };\n const mac: OsTestProgress = {\n ...defaultProgress,\n ...build.smokeTest?.mac,\n shouldSkip: build.mac?.shouldSkip || false,\n };\n const windows: OsTestProgress = {\n ...defaultProgress,\n ...build.smokeTest?.windows,\n shouldSkip: build.windows?.shouldSkip || false,\n };\n\n const platforms: OsTestProgress[] = [linux, mac, windows].filter(\n (p) => !p.shouldSkip && p.state !== 'skipped',\n );\n\n const isCanceled = Boolean(build.smokeTest?.isCanceled);\n const isFinished =\n isCanceled || platforms.every((p) => p.state !== 'progress');\n\n let totalState: TotalTestProgress['state'] = 'progress';\n if (isCanceled) {\n totalState = 'canceled';\n } else if (platforms.every((p) => p.state === 'done')) {\n totalState = 'done';\n } else if (isFinished && platforms.some((p) => p.state === 'error')) {\n totalState = 'error';\n }\n\n return {\n isFinished,\n linux,\n mac,\n windows,\n total: {\n error: platforms\n .filter((p) => p.state === 'error')\n .map((p) => p.message)\n .join('\\n\\n'),\n state: totalState,\n },\n };\n}\n\nexport function validateBuild(build: Partial<Build>) {\n if (build.status !== 'succeeded') {\n throw new CliError(\n `The build must be completed successfully. ` +\n `Actual build status: ${build.status}`,\n );\n }\n\n if (!build.todesktopRuntimeVersionSpecified) {\n throw new CliError(\n 'The build has no todesktopRuntimeVersionSpecified set. ' +\n 'Please make sure @todesktop/runtime is installed as a dependency ' +\n 'and make a new build',\n );\n }\n\n if (!isRuntimeVerRangeAllowed(build.todesktopRuntimeVersionSpecified)) {\n throw new CliError(\n `This build should have @todesktop/runtime version ${MIN_RUNTIME_VERSION} or later to run smoke tests.`,\n );\n }\n}\n\nfunction isRuntimeVerRangeAllowed(runtimeVerRange) {\n const minRuntimeVersionForApp = semver.minVersion(runtimeVerRange, {\n loose: true,\n });\n\n return semver.gte(minRuntimeVersionForApp, MIN_RUNTIME_VERSION, {\n loose: true,\n });\n}\n\nexport interface CliTestProgress {\n isFinished: boolean;\n linux: OsTestProgress;\n mac: OsTestProgress;\n windows: OsTestProgress;\n total: TotalTestProgress;\n}\n\nexport interface OsTestProgress extends SmokeTestProgress {\n shouldSkip?: boolean;\n}\n\nexport interface TotalTestProgress {\n error: string;\n state: 'progress' | 'done' | 'error' | 'canceled';\n}\n", "import type { Build } from '@todesktop/shared';\nimport semver from 'semver';\n\nexport const MIN_RUNTIME_VERSION_FOR_DOWNGRADE = '1.4.1-1';\n\nexport default function analyzeRelease({\n build,\n latestReleasedBuild,\n}: {\n build: Build;\n latestReleasedBuild?: Build;\n}): AnalyzeResult {\n const result: AnalyzeResult = {\n downgradeAllowed: Boolean(\n latestReleasedBuild?.todesktopRuntimeVersionUsed &&\n semver.gte(\n latestReleasedBuild.todesktopRuntimeVersionUsed,\n MIN_RUNTIME_VERSION_FOR_DOWNGRADE,\n ),\n ),\n error: '',\n isAlreadyReleased: Boolean(build.releasedAt),\n isAlreadyTheLatest: build.id === latestReleasedBuild?.id,\n isOlderThanLatest: Boolean(\n latestReleasedBuild &&\n latestReleasedBuild.appVersion &&\n build.appVersion &&\n semver.gt(latestReleasedBuild.appVersion, build.appVersion),\n ),\n isReleasable: false,\n isSucceeded: build.status === 'succeeded',\n isTheSameVersionAsLatest: Boolean(\n build.appVersion && build.appVersion === latestReleasedBuild?.appVersion,\n ),\n };\n\n if (!result.isSucceeded) {\n return {\n ...result,\n error:\n 'The build must have completed successfully. ' +\n `Actual build status: ${build.status}.`,\n };\n }\n\n if (result.isAlreadyTheLatest) {\n return {\n ...result,\n error: 'This build is already the latest released build.',\n };\n }\n\n if (result.isTheSameVersionAsLatest) {\n return {\n ...result,\n error:\n `This build has the same version as the latest released build ` +\n `(build ID: ${latestReleasedBuild?.id}, version: ${build.appVersion}).`,\n };\n }\n\n if (!result.downgradeAllowed && result.isAlreadyReleased) {\n return { ...result, error: 'This build has already been released.' };\n }\n\n if (\n !result.downgradeAllowed &&\n result.isOlderThanLatest &&\n latestReleasedBuild\n ) {\n return {\n ...result,\n error:\n `App version (${build.appVersion}) is not newer than latest released ` +\n `version (${latestReleasedBuild.appVersion}) ` +\n `(build ID: ${latestReleasedBuild.id}).`,\n };\n }\n\n return { ...result, isReleasable: true };\n}\n\nexport interface AnalyzeResult {\n downgradeAllowed: boolean;\n error: string;\n isAlreadyReleased: boolean;\n isAlreadyTheLatest: boolean;\n isOlderThanLatest: boolean;\n isReleasable: boolean;\n isSucceeded: boolean;\n isTheSameVersionAsLatest: boolean;\n}\n", "import { Build } from '@todesktop/shared';\nimport { Box, Text } from 'ink';\nimport TextInput from 'ink-text-input';\nimport { useState } from 'react';\nimport { MIN_RUNTIME_VERSION_FOR_DOWNGRADE } from '../utilities/analyzeRelease';\n\nexport default function DowngradeConfirmation({\n build,\n latestReleasedBuild,\n confirmDowngrade,\n}: {\n build: Build;\n latestReleasedBuild: Build;\n confirmDowngrade: () => void;\n}) {\n const [confirmText, setConfirmText] = useState('');\n const [showError, setShowError] = useState(false);\n\n const buildVersion = build.appVersion;\n const latestVersion = latestReleasedBuild.appVersion;\n\n function onType(text: string) {\n setShowError(false);\n setConfirmText(text);\n }\n\n function onSubmit(text: string) {\n if (text.trim() === buildVersion) {\n confirmDowngrade();\n } else {\n setShowError(true);\n }\n }\n\n return (\n <Box flexDirection=\"column\">\n <Box borderColor=\"red\" borderStyle=\"double\" paddingX={1}>\n <Text>\n You're trying to release the build {buildVersion}, which is older than\n the latest published version {latestVersion}. This may cause issues if\n your customers are using a version of your desktop app that contains a\n version of @todesktop/runtime that is earlier than v\n {MIN_RUNTIME_VERSION_FOR_DOWNGRADE}.\n </Text>\n </Box>\n\n <Box marginTop={1}>\n <Text>Are you sure that you wish to release this build?</Text>\n </Box>\n\n <Box marginTop={1}>\n <Text>\n To continue, type the text <Text bold>{buildVersion}</Text> below to\n confirm:\n </Text>\n </Box>\n\n <Box>\n <Box marginRight={1}>\n <Text>Confirm new version:</Text>\n </Box>\n\n <TextInput value={confirmText} onChange={onType} onSubmit={onSubmit} />\n </Box>\n\n {showError && (\n <Box>\n <Text color=\"red\">You've entered the wrong version</Text>\n </Box>\n )}\n </Box>\n );\n}\n", "import { Box, Text } from 'ink';\nimport SelectInput from 'ink-select-input';\nimport CustomSelectInputIndicator from '../../../components/CustomSelectInputIndicator';\nimport CustomSelectInputItem from '../../../components/CustomSelectInputItem';\nimport useExit from '../../../utilities/useExit';\n\nimport type { JSX } from 'react';\n\nexport default function YesNoConfirmation({\n onYes,\n title,\n footer = 'Your users will be auto-updated to this version. You can use ' +\n '--force to bypass this confirmation in future',\n}: {\n onYes: () => void;\n title: string | JSX.Element;\n footer?: string;\n}) {\n const exit = useExit();\n\n const items = [\n { label: 'Yes', value: 'yes' },\n { label: 'No', value: 'no' },\n ];\n\n function onSelect(item: { value: string }) {\n if (item.value === 'yes') {\n onYes();\n } else if (item.value === 'no') {\n setTimeout(() => exit(), 10);\n }\n }\n\n return (\n <Box flexDirection=\"column\">\n <Box>{typeof title === 'string' ? <Text>{title}</Text> : title}</Box>\n\n <Box marginBottom={1} marginTop={1}>\n <SelectInput\n indicatorComponent={CustomSelectInputIndicator}\n initialIndex={1}\n itemComponent={CustomSelectInputItem}\n items={items}\n onSelect={onSelect}\n />\n </Box>\n\n <Text dimColor>{footer}</Text>\n </Box>\n );\n}\n", "import { Build } from '@todesktop/shared';\nimport BuildPicker from '../../components/BuildPicker';\nimport ErrorBoundary from '../../components/ErrorBoundary';\nimport LoginHOC from '../../components/LoginHOC';\nimport { useAnalyticsCommand } from '../../utilities/useAnalytics';\nimport ReleaseBuildLogic from './components/ReleaseBuildLogic';\nimport ReleaseConfirmation from './components/ReleaseConfirmation';\nimport analyzeRelease from './utilities/analyzeRelease';\n\nexport default function ReleaseCommand({\n buildId,\n configPath,\n shouldConfirm,\n}: {\n buildId: string;\n configPath?: string;\n shouldConfirm: boolean;\n}) {\n useAnalyticsCommand('release', {\n buildId,\n shouldConfirm,\n config: configPath,\n });\n\n let command = 'todesktop release';\n if (buildId) {\n command += ' ' + (buildId === 'latest' ? '--latest' : '<id>');\n }\n\n return (\n <ErrorBoundary>\n <LoginHOC>\n <BuildPicker\n buildFilter={isBuildReleasable}\n buildId={buildId}\n commandUsed={command}\n configPath={configPath}\n noBuildsDescription=\"(i.e. unreleased and successful)\"\n question=\"Which build would you like to release?\"\n >\n {(id) => (\n <ReleaseConfirmation\n buildId={id}\n configPath={configPath}\n disabled={!shouldConfirm}\n >\n <ReleaseBuildLogic\n buildId={id}\n commandUsed={command}\n configPath={configPath}\n />\n </ReleaseConfirmation>\n )}\n </BuildPicker>\n </LoginHOC>\n </ErrorBoundary>\n );\n}\n\nfunction isBuildReleasable(opts: {\n build: Build;\n latestReleasedBuild?: Build;\n}) {\n return analyzeRelease(opts).isReleasable;\n}\n", "import { Build } from '@todesktop/shared';\nimport { useEffect, useState } from 'react';\nimport ErrorBoundary from '../../components/ErrorBoundary';\nimport LoginHOC from '../../components/LoginHOC';\nimport CliError from '../../utilities/CliError';\nimport getBuildAttributes from '../../utilities/getBuildAttributes';\nimport logger from '../../utilities/logger';\nimport { useAnalyticsCommand } from '../../utilities/useAnalytics';\nimport useExit from '../../utilities/useExit';\nimport BuildPicker from '../../components/BuildPicker';\nimport Cancellation from './components/Cancellation';\nimport SmokeTestView from './components/SmokeTestView';\nimport {\n isBuildTestable,\n isTestRunning,\n TotalTestProgress,\n validateBuild,\n} from './utilities/build';\nimport cancelSmokeTest from './utilities/cancelSmokeTest';\nimport queueSmokeTest from './utilities/queueSmokeTest';\nimport SmokeState from './utilities/SmokeState';\n\nimport waitUntilFinished from './utilities/waitUntilFinished';\n\nexport default function SmokeTestCommand({\n buildId,\n configPath,\n}: {\n buildId?: string;\n configPath?: string;\n}) {\n useAnalyticsCommand('smoke-test', { buildId, configPath });\n\n const command = `todesktop smoke-test ${\n buildId === 'latest' ? '--latest' : '<id>'\n }`;\n\n return (\n <ErrorBoundary>\n <LoginHOC>\n <BuildPicker\n buildFilter={({ build }) => isBuildTestable(build)}\n buildId={buildId}\n commandUsed={command}\n configPath={configPath}\n noBuildsDescription=\"(candidates for smoke-test must be built with @todesktop/runtime@1.2.3-0 or later)\"\n >\n {(id) => (\n <SmokeTestContainer\n commandUsed={command}\n buildId={id}\n configPath={configPath}\n />\n )}\n </BuildPicker>\n </LoginHOC>\n </ErrorBoundary>\n );\n}\n\nfunction SmokeTestContainer({\n buildId,\n commandUsed,\n configPath,\n}: {\n buildId: string;\n commandUsed: string;\n configPath?: string;\n}) {\n const exit = useExit();\n const [state, setState] = useState<SmokeState>({\n buildId,\n state: 'loading',\n });\n const [abortController] = useState(new AbortController());\n const abortSignal = abortController.signal;\n\n useEffect(() => {\n smokeTestWorkflow({ abortSignal, buildId, configPath, updateState }).catch(\n logger.error,\n );\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n function updateState(changes: Partial<SmokeState>) {\n setState((previousState) => ({ ...previousState, ...changes }));\n if (\n changes.state &&\n ['build-error', 'complete', 'progress-error'].includes(changes.state)\n ) {\n setTimeout(() => exit(), 10);\n }\n }\n\n async function onCancel() {\n abortController.abort();\n if (state.state === 'progress' && buildCanBeCanceled(state.build)) {\n await cancelSmokeTest(state as Required<SmokeState>);\n }\n }\n\n return (\n <Cancellation\n disabled={!isCancelable(state)}\n onCancel={onCancel}\n subject=\"smoke test\"\n >\n <SmokeTestView commandUsed={commandUsed} state={state} />\n </Cancellation>\n );\n}\n\nasync function smokeTestWorkflow({\n abortSignal,\n buildId,\n configPath,\n updateState,\n}: {\n abortSignal: AbortSignal;\n buildId: string;\n configPath?: string;\n updateState: (changes: Partial<SmokeState>) => void;\n}) {\n try {\n const {\n appId,\n build,\n contextUserId,\n nodeVersion,\n npmVersion,\n pnpmVersion,\n userId,\n } = await getBuildAttributes({\n buildId,\n configPath,\n });\n\n updateState({ appId, build, userId });\n validateBuild(build);\n\n if (!abortSignal.aborted && !isTestRunning(build)) {\n await queueSmokeTest({\n appId,\n buildId,\n nodeVersion,\n npmVersion,\n pnpmVersion,\n userId,\n contextUserId,\n });\n }\n\n updateState({ state: 'progress' });\n const { total } = await waitUntilFinished({\n appId,\n buildId,\n userId,\n onProgress: (progress) => updateState({ progress }),\n });\n\n const stateMap: Record<TotalTestProgress['state'], SmokeState['state']> = {\n done: 'complete',\n progress: 'complete', // Not actually used, just for TS\n error: 'progress-error',\n canceled: 'canceled',\n };\n updateState({ state: stateMap[total.state] });\n } catch (e) {\n const error = CliError.from(e);\n updateState({ error, state: error.type });\n }\n}\n\nfunction buildCanBeCanceled(build?: Build) {\n if (build?.smokeTest?.isCanceled) {\n return false;\n }\n\n return Boolean(build?.smokeTest?.buildServerExecutionId);\n}\n\nfunction isCancelable(state: SmokeState) {\n const cancelableStates: Array<SmokeState['state']> = ['loading', 'progress'];\n return cancelableStates.includes(state.state);\n}\n", "import { Box, Text } from 'ink';\nimport { useState, type JSX } from 'react';\nimport ErrorDisplay from '../../../components/ErrorDisplay';\nimport LoadingText from '../../../components/LoadingText';\nimport logger from '../../../utilities/logger';\nimport useExit from '../../../utilities/useExit';\nimport useInput from '../../../utilities/useInput';\n\nexport default function Cancellation({\n children,\n disabled = false,\n exitWhenCanceled = true,\n onCancel,\n renderCanceling = () => <LoadingText text={`Canceling ${subject}`} />,\n renderCanceled = () => <Text>{upperCaseFirstChar(subject)} canceled.</Text>,\n renderCancelText = () => (\n <Text color=\"gray\">\n <Text bold>[esc]:</Text> cancel {subject}\n </Text>\n ),\n renderError = (e: Error) => <ErrorDisplay error={e} />,\n subject,\n}: {\n children?: JSX.Element;\n disabled?: boolean;\n exitWhenCanceled?: boolean;\n onCancel: () => Promise<any>;\n renderCanceled?: () => JSX.Element;\n renderCanceling?: () => JSX.Element;\n renderCancelText?: () => JSX.Element;\n renderError?: (e: Error) => JSX.Element;\n subject: string;\n}) {\n const [state, setState] = useState<CancellationState>('normal');\n const [error, setError] = useState<Error>();\n\n const exit = useExit();\n\n useInput(async (_input, key) => {\n if (key.escape) {\n cancel();\n }\n });\n\n function cancel() {\n if (disabled) {\n return;\n }\n\n logger.debug(`esc pressed, cancelling ${subject}`);\n setState('cancelling');\n\n onCancel()\n .then(() => {\n setState('cancelled');\n if (exitWhenCanceled) {\n setTimeout(() => exit(), 10);\n }\n })\n .catch((e) => {\n setError(e);\n setState('error');\n });\n }\n\n switch (state) {\n case 'cancelled':\n return renderCanceled();\n case 'cancelling':\n return renderCanceling();\n case 'error':\n return renderError(error);\n default:\n return (\n <>\n {children}\n {!disabled && <Box>{renderCancelText()}</Box>}\n </>\n );\n }\n}\n\ntype CancellationState = 'normal' | 'cancelling' | 'cancelled' | 'error';\n\nfunction upperCaseFirstChar(str: string): string {\n return str[0].toUpperCase() + str.slice(1);\n}\n", "import { Text } from 'ink';\nimport ErrorDisplay from '../../../components/ErrorDisplay';\nimport LoadingText from '../../../components/LoadingText';\nimport SmokeState from '../utilities/SmokeState';\nimport BuildError from '../../../components/BuildError';\nimport TestProgress from './TestProgress';\n\nexport default function SmokeTestView({\n commandUsed = '',\n state,\n}: {\n commandUsed?: string;\n state: SmokeState;\n}) {\n switch (state.state) {\n case 'build-error': {\n return (\n <BuildError\n build={state.build}\n description=\"Can't finish smoke test\"\n message={state.error?.message}\n />\n );\n }\n\n case 'canceled':\n return <Text>Smoke test canceled.</Text>;\n\n case 'complete':\n return (\n <Text bold color=\"greenBright\">\n Smoke test passed.\n </Text>\n );\n\n case 'error':\n return (\n <ErrorDisplay\n commandUsed={commandUsed}\n error={{ stack: state.error?.stack }}\n />\n );\n\n case 'loading':\n return <LoadingText text=\"Preparing smoke test\" />;\n\n case 'progress':\n return <TestProgress progress={state.progress} />;\n\n case 'progress-error':\n return (\n <>\n <TestProgress progress={state.progress} />\n <BuildError\n build={state.build}\n description=\"Can't finish smoke test\"\n message={state.progress?.total?.error}\n />\n </>\n );\n\n default:\n return (\n <ErrorDisplay\n commandUsed={commandUsed}\n error={new Error(`Unknown state ${state}`)}\n />\n );\n }\n}\n", "import { ForegroundColor } from 'chalk';\nimport { Box, Text } from 'ink';\n\nexport default function ProgressBar({\n color = 'white',\n label,\n labelWidth = 9,\n marginBottom = 1,\n progress,\n text = '',\n}: {\n color?: typeof ForegroundColor;\n label: string;\n labelWidth?: number;\n marginBottom?: number;\n progress: number;\n text?: string;\n}) {\n const percentage =\n progress > 0 ? Math.round(progress).toString().padStart(2, '0') + '%' : '';\n\n const displayedText = (text || '')\n .replace(/(?:\\r\\n|\\r|\\n)\\s*/g, '\u21B5 ')\n .replace(/(.{63}).+/, '$1\u2026');\n\n return (\n <Box marginBottom={marginBottom}>\n <Box width={labelWidth}>\n <Text>{label}:</Text>\n </Box>\n <Box width={6} justifyContent=\"flex-end\" marginRight={1}>\n {Boolean(percentage) && (\n <Text backgroundColor={color} color=\"black\">\n {` ${percentage} `}\n </Text>\n )}\n </Box>\n <Box>\n <Text>{displayedText}</Text>\n </Box>\n </Box>\n );\n}\n", "import { ForegroundColor } from 'chalk';\nimport LoadingText from '../../../components/LoadingText';\nimport { CliTestProgress, OsTestProgress } from '../utilities/build';\nimport ProgressBar from './ProgressBar';\n\nexport default function TestProgress({\n progress,\n}: {\n progress?: CliTestProgress;\n}) {\n if (!progress) {\n return <LoadingText text=\"Loading test stats\" />;\n }\n\n return (\n <>\n {!progress.windows.shouldSkip && (\n <OsProgress os=\"Windows\" progress={progress.windows} />\n )}\n {!progress.mac.shouldSkip && (\n <OsProgress os=\"macOS\" progress={progress.mac} />\n )}\n {!progress.linux.shouldSkip && (\n <OsProgress os=\"Linux\" progress={progress.linux} />\n )}\n </>\n );\n}\n\nfunction OsProgress({\n os,\n progress,\n}: {\n os: string;\n progress: OsTestProgress;\n}) {\n const colors: Record<OsTestProgress['state'], typeof ForegroundColor> = {\n progress: 'white',\n error: 'red',\n done: 'green',\n skipped: 'yellow', // Not used actually, just for type matching\n };\n const text = progress.message + (progress.state === 'progress' ? '...' : '');\n\n return (\n <ProgressBar\n color={colors[progress.state]}\n label={os}\n progress={progress.progress}\n text={text}\n />\n );\n}\n", "import { currentUser } from '../../../utilities/firestore';\nimport postToFirebaseFunction from '../../../utilities/postToFirebaseFunction';\nexport default async function cancelSmokeTest({\n appId,\n buildId,\n userId,\n}: {\n appId: string;\n buildId: string;\n userId: string;\n}) {\n await postToFirebaseFunction('cancelSmokeTest_HTTP', {\n appId,\n buildId,\n userId,\n idToken: await currentUser()?.getIdToken(),\n });\n}\n", "import axios from 'axios';\nimport CliError from '../../../utilities/CliError';\nimport { currentUser } from '../../../utilities/firestore';\nimport logger from '../../../utilities/logger';\nimport postToFirebaseFunction from '../../../utilities/postToFirebaseFunction';\n\nexport default async function queueSmokeTest({\n appId,\n buildId,\n contextUserId,\n nodeVersion,\n npmVersion,\n pnpmVersion,\n userId,\n}: {\n appId: string;\n buildId: string;\n contextUserId?: string;\n nodeVersion: string;\n npmVersion: string;\n pnpmVersion: string;\n userId: string;\n}) {\n try {\n await postToFirebaseFunction('queueSmokeTest_HTTP', {\n appId,\n buildId,\n nodeVersion,\n npmVersion,\n pnpmVersion,\n userId,\n contextUserId,\n idToken: await currentUser()?.getIdToken(),\n });\n } catch (e) {\n logger.error({ error: e });\n throw buildQueueSmokeTestError(e);\n }\n}\n\nfunction buildQueueSmokeTestError(e: unknown): CliError {\n let detail = 'Unexpected internal error while testing build';\n if (axios.isAxiosError(e) && e.response?.data?.message) {\n detail = `${detail}; ${e.response.data.message}`;\n } else if (e instanceof Error) {\n detail = `${detail}; ${e.message}`;\n } else if (e && typeof e === 'object') {\n detail = `${detail}; ${JSON.stringify(e)}`;\n } else if (e) {\n detail = `${detail}; ${String(e)}`;\n }\n\n return new CliError(detail, { cause: e instanceof Error ? e : undefined });\n}\n", "import { Build } from '@todesktop/shared';\nimport { doc, onSnapshot } from 'firebase/firestore';\nimport firestore from '../../../utilities/firestore';\nimport { readDocumentSnapshot } from '../../../utilities/firestoreData';\nimport { makeProgress, CliTestProgress } from './build';\n\nexport default async function waitUntilFinished({\n appId,\n buildId,\n onProgress,\n userId,\n}: {\n appId: string;\n buildId: string;\n onProgress: (progress: CliTestProgress) => void;\n userId: string;\n}) {\n const docPath = `users/${userId}/applications/${appId}/builds/${buildId}`;\n\n return new Promise<CliTestProgress>((resolve, reject) => {\n const unsubscribe = onSnapshot(\n doc(firestore, docPath),\n (snapshot) => {\n const data = readDocumentSnapshot<Build>(snapshot);\n if (!data) {\n return;\n }\n const progress = makeProgress(data);\n\n onProgress(progress);\n\n if (progress.isFinished) {\n unsubscribe();\n resolve(progress);\n }\n },\n (err) => {\n unsubscribe();\n reject(err);\n },\n );\n });\n}\n", "import { useEffect } from 'react';\nimport { Text } from 'ink';\n\nimport { getAuthConfig } from '../utilities/configStore';\nimport ErrorBoundary from '../components/ErrorBoundary';\nimport LoginHOC from '../components/LoginHOC';\nimport { useAnalyticsCommand } from '../utilities/useAnalytics';\nimport useExit from '../utilities/useExit';\n\nconst WhoAmI = () => {\n const exit = useExit();\n const auth = getAuthConfig();\n const { hasAttemptedTracking } = useAnalyticsCommand('whoami', {}, {});\n\n // exits the program once tracking of the \"whoami\" command has been attempted\n useEffect(() => {\n if (hasAttemptedTracking) {\n exit();\n }\n }, [exit, hasAttemptedTracking]);\n\n if (!auth || !auth.email) {\n return <Text>You're not signed in</Text>;\n }\n return <Text>{auth.email}</Text>;\n};\n\nconst WhoAmIWrapper = () => (\n <ErrorBoundary>\n <LoginHOC isInteractive={false}>\n <WhoAmI />\n </LoginHOC>\n </ErrorBoundary>\n);\n\nexport default WhoAmIWrapper;\n", "import chalk from 'chalk';\nimport isInstalledGlobally from 'is-installed-globally';\nimport latestVersion from 'latest-version';\nimport semver from 'semver';\nimport getToDesktopPackageJson from './getToDesktopPackageJson';\n\nexport default () => {\n // Ignore during tests\n if (process.env.AVA_PATH) {\n return;\n }\n\n const pkg = getToDesktopPackageJson();\n latestVersion(pkg.name).then((latest) => {\n if (semver.gt(latest, pkg.version)) {\n const commandToUpdate = chalk.greenBright(\n `npm install ${\n isInstalledGlobally ? '-g' : '--save-dev'\n } @todesktop/cli`,\n );\n console.warn(\n `Your version of @todesktop/cli is out of date.\\nRun ${commandToUpdate} to update to v${latest}.`,\n );\n if (!semver.satisfies(latest, `^${pkg.version}`)) {\n console.error(`CLI is exiting because it is out out of date.`);\n process.exit(1);\n }\n }\n });\n};\n", "import * as Sentry from '@sentry/node';\nimport os from 'os';\nimport pkgJson from '../../package.json';\nimport { getAuthConfig } from './configStore';\nimport getProjectConfig from './projectConfig/getProjectConfig';\nimport getEnvironmentVariables from './getEnvironmentVariables';\n\nexport default () => {\n const { TODESKTOP_CLI_SENTRY_DSN } = getEnvironmentVariables();\n if (!TODESKTOP_CLI_SENTRY_DSN) {\n // Don't initialise Sentry\n return;\n }\n Sentry.init({\n dsn: TODESKTOP_CLI_SENTRY_DSN,\n });\n\n const scope = Sentry.getCurrentScope();\n try {\n scope.setUser({ email: getAuthConfig().email as string });\n } catch {\n // nothing\n }\n try {\n scope.setContext('os', {\n name: os.platform(),\n version: os.release(),\n });\n } catch {\n // nothing\n }\n\n try {\n scope.setContext('runtime', {\n name: 'Node.js',\n version: process.version,\n });\n } catch {\n // nothing\n }\n\n try {\n scope.setContext('app', {\n app_name: pkgJson.name,\n app_version: pkgJson.version,\n });\n } catch {\n // nothing\n }\n\n try {\n const configResult = getProjectConfig();\n scope.setExtra('config', configResult);\n } catch {\n // nothing\n }\n};\n", "{\n \"private\": false,\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"name\": \"@todesktop/cli\",\n \"version\": \"1.19.0-3\",\n \"license\": \"MIT\",\n \"author\": \"Dave Jeffery <dave@todesktop.com> (http://www.todesktop.com/)\",\n \"homepage\": \"https://todesktop.com/cli\",\n \"bugs\": {\n \"email\": \"dave@todesktop.com\"\n },\n \"bin\": {\n \"todesktop\": \"./dist/cli.js\"\n },\n \"types\": \"./dist/types.d.ts\",\n \"engines\": {\n \"node\": \">=16\"\n },\n \"scripts\": {\n \"build\": \"node scripts/esbuild.js\",\n \"dev\": \"node scripts/esbuild.js --link --watch --stage dev\",\n \"dev:local:prod\": \"node scripts/esbuild.js --link --watch --stage prod-local\",\n \"dev:prod\": \"node scripts/esbuild.js --link --watch\",\n \"docs:generate\": \"node scripts/generate-readme.js\",\n \"format\": \"prettier . --write && eslint --fix\",\n \"lint\": \"prettier . --check && eslint\",\n \"types:generate\": \"node scripts/generate-types.js\",\n \"release\": \"npm run docs:generate && npm run build && pnpx np --tag=latest\",\n \"release-beta\": \"npm run docs:generate && npm run build && npx np --any-branch --no-tests --tag=beta\",\n \"test\": \"ava\",\n \"test:e2e\": \"node test/output-snapshots/output.test.js\",\n \"test--watch\": \"npm test -- --watch\",\n \"typecheck\": \"tsc --noEmit && tsc-strict\"\n },\n \"files\": [\n \"scripts/postinstall.js\",\n \"schemas\",\n \"dist\",\n \".env\"\n ],\n \"dependencies\": {\n \"@segment/analytics-node\": \"^2.3.0\",\n \"@sentry/node\": \"^10.29.0\",\n \"ajv\": \"^8.17.1\",\n \"ajv-formats\": \"^3.0.1\",\n \"archiver\": \"^7.0.1\",\n \"axios\": \"^1.13.2\",\n \"better-ajv-errors\": \"^2.0.2\",\n \"bunyan\": \"^1.8.15\",\n \"chalk\": \"^4.1.2\",\n \"commander\": \"^14.0.2\",\n \"conf\": \"^10.2.0\",\n \"date-fns\": \"^4.1.0\",\n \"del\": \"^6.1.1\",\n \"dotenv\": \"^17.2.3\",\n \"du\": \"^1.0.0\",\n \"email-regex\": \"^4.0.0\",\n \"fast-glob\": \"^3.3.3\",\n \"final-form\": \"^5.0.0\",\n \"find-up\": \"^5.0.0\",\n \"firebase\": \"^12.6.0\",\n \"git-rev-sync\": \"^3.0.2\",\n \"ink\": \"^3.2.0\",\n \"ink-gradient\": \"^2.0.0\",\n \"ink-link\": \"^2.0.1\",\n \"ink-select-input\": \"^4.2.2\",\n \"ink-text-input\": \"^4.0.3\",\n \"is-ci\": \"^4.1.0\",\n \"is-installed-globally\": \"^0.4.0\",\n \"js-yaml\": \"^4.1.1\",\n \"latest-version\": \"^5.1.0\",\n \"lodash.merge\": \"^4.6.2\",\n \"lodash.throttle\": \"^4.1.1\",\n \"parse-author\": \"^2.0.0\",\n \"pkg-up\": \"^3.1.0\",\n \"pretty-bytes\": \"^5.6.0\",\n \"prop-types\": \"^15.8.1\",\n \"react\": \"^17.0.2\",\n \"react-final-form\": \"^7.0.0\",\n \"semver\": \"^7.7.3\",\n \"source-map-support\": \"^0.5.21\",\n \"stream-to-array\": \"^2.3.0\",\n \"superagent\": \"^10.2.3\",\n \"uuid\": \"^11.1.0\",\n \"ws\": \"^8.18.3\",\n \"xdg-basedir\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@todesktop/dev-config\": \"workspace:*\",\n \"@todesktop/shared\": \"^7.193.0\",\n \"@types/bunyan\": \"^1.8.11\",\n \"@types/ink-testing-library\": \"^1.0.4\",\n \"@types/is-ci\": \"^3.0.4\",\n \"@types/node\": \"^24.10.2\",\n \"@types/react\": \"^17.0.90\",\n \"@types/semver\": \"^7.7.1\",\n \"@types/ws\": \"^8.18.1\",\n \"ava\": \"^5.3.1\",\n \"cp-cli\": \"^2.0.0\",\n \"esbuild\": \"^0.27.1\",\n \"esbuild-register\": \"^3.6.0\",\n \"eslint\": \"catalog:\",\n \"execa\": \"^5.1.1\",\n \"extract-zip\": \"^2.0.1\",\n \"fs-extra\": \"^11.3.2\",\n \"ink-testing-library\": \"^4.0.0\",\n \"json-schema-to-typescript\": \"^15.0.4\",\n \"package-json-type\": \"^1.0.3\",\n \"prettier\": \"catalog:\",\n \"proxyquire\": \"^2.1.3\",\n \"sinon\": \"^21.0.0\",\n \"typescript\": \"catalog:\",\n \"typescript-strict-plugin\": \"^2.4.4\"\n },\n \"ava\": {\n \"extensions\": [\n \"ts\",\n \"tsx\"\n ],\n \"files\": [\n \"test/**/*.ts\",\n \"**/*.test.ts\",\n \"**/*.test.tsx\",\n \"!build/**/*\",\n \"!test/fixtures/**/*\",\n \"!test/utilities/**/*\",\n \"!worktrees/**/*\"\n ],\n \"require\": [\n \"esbuild-register\",\n \"./test/unit-test-init\"\n ],\n \"timeout\": \"10m\"\n },\n \"packageExtensions\": {\n \"ink-progress-bar@*\": {\n \"dependencies\": {\n \"react\": \"*\",\n \"ink\": \"*\"\n }\n }\n }\n}\n", "import exitIfCLIOutOfDate from './exitIfCLIOutOfDate';\nimport initSentry from './initSentry';\n\nexport default ({ sentry = true, exitIfOutOfDate = true } = {}) => {\n if (sentry) {\n initSentry();\n }\n\n if (exitIfOutOfDate) {\n exitIfCLIOutOfDate();\n }\n};\n", "import { PlatformName } from '@todesktop/shared';\nimport { currentUser } from '../../../utilities/firestore';\nimport getCallableFirebaseFunction from '../../../utilities/getCallableFirebaseFunction';\nimport getProjectConfig from '../../../utilities/projectConfig/getProjectConfig';\n\nexport interface ContinueBreakpointOptions {\n buildId: string;\n platform: PlatformName;\n configPath?: string;\n ignoreExtendsErrors?: boolean;\n}\n\nexport async function continueBreakpoint({\n buildId,\n platform,\n configPath,\n ignoreExtendsErrors,\n}: ContinueBreakpointOptions) {\n const projectConfigFlags =\n ignoreExtendsErrors === true\n ? { build: { ignoreExtendsErrors: true } }\n : undefined;\n\n const { config } = getProjectConfig(configPath, projectConfigFlags);\n const appId = config.id;\n\n if (!buildId) {\n throw new Error('A build ID is required when using --continue');\n }\n\n const user = currentUser();\n if (!user) {\n throw new Error('Not authenticated. Please run: todesktop login');\n }\n\n const idToken = await user.getIdToken(true);\n\n const resumeBuildBreakpoint = getCallableFirebaseFunction(\n 'resumeBuildBreakpoint',\n );\n\n await resumeBuildBreakpoint({\n appId,\n buildId,\n platform,\n idToken,\n });\n\n console.log(\n `Sent resume command for build ${buildId} (${platform}). Check the original terminal for progress.`,\n );\n}\n\nexport function isValidPlatform(\n value: string | undefined,\n): value is PlatformName {\n return (\n typeof value === 'string' &&\n Object.values(PlatformName).includes(value as PlatformName)\n );\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["
|
|
3
|
+
"sources": ["../src/index.ts", "../src/commands/build/components/Build.tsx", "../src/components/BreakpointNotice.tsx", "../src/utilities/introspectionBreakpoints.ts", "../src/commands/build/utilities/breakpoints.ts", "../src/components/BreakpointPrompt.tsx", "../src/utilities/useInput.ts", "../src/utilities/useExit.ts", "../src/utilities/analytics.ts", "../src/utilities/getEnvironmentVariables.ts", "../src/utilities/firestore.ts", "../src/utilities/configStore.ts", "../src/utilities/getToDesktopPackageJson.ts", "../src/utilities/readJson.ts", "../src/utilities/getCliVersion.ts", "../src/utilities/logger.ts", "../src/utilities/getCallableFirebaseFunction.ts", "../src/utilities/introspectionStatus.ts", "../src/components/BuildProgress.tsx", "../src/components/BuildCompleteMessage.tsx", "../src/utilities/logForCI.ts", "../src/utilities/fixMacUrl.ts", "../src/components/PlatformProgress.tsx", "../src/components/IntrospectionNotice.tsx", "../src/utilities/buildStatus.ts", "../src/components/ErrorDisplay.tsx", "../src/utilities/CliError.ts", "../src/components/MainLayout.tsx", "../src/components/CancelBuild.tsx", "../src/components/Footer.tsx", "../src/components/Header.tsx", "../src/commands/build/components/Preparation.tsx", "../src/commands/build/components/ProgressBar.tsx", "../src/libs/ink-progress-bar/index.tsx", "../src/commands/build/utilities/runBuild.ts", "../src/utilities/postToFirebaseFunction.ts", "../src/utilities/projectConfig/getProjectConfig.ts", "../src/utilities/projectConfig/loadConfig.ts", "../src/utilities/projectConfig/loadTypeScriptConfig.ts", "../src/utilities/projectConfig/resolveConfigPaths.ts", "../src/utilities/projectConfig/validateConfig.ts", "../src/utilities/projectConfig/addCustomKeywords.ts", "../src/utilities/projectConfig/validatePackageJSON.ts", "../src/utilities/projectConfig/schema/packageJSON.ts", "../schemas/schema.json", "../src/utilities/projectConfig/schema/full.ts", "../src/utilities/projectConfig/computeFullProjectConfig.ts", "../src/utilities/shouldExitOnBuildFailure.ts", "../src/commands/build/utilities/getPackageJson.ts", "../src/commands/build/utilities/getVersionControlInfo.ts", "../src/commands/build/utilities/spyBuild.ts", "../src/utilities/firestoreData.ts", "../src/commands/build/utilities/uploadApplicationSource.ts", "../src/commands/build/utilities/generateS3Key.ts", "../src/commands/build/utilities/uploadToS3.ts", "../src/commands/build/utilities/zip.ts", "../src/commands/build/utilities/workspace/index.ts", "../src/components/LoginHOC.tsx", "../src/components/Login.tsx", "../src/components/TextInput.tsx", "../src/components/LoadingText.tsx", "../src/components/ErrorBoundary.tsx", "../src/commands/build/components/OngoingBuildGuard.tsx", "../src/components/CustomSelectInputIndicator.tsx", "../src/components/CustomSelectInputItem.tsx", "../src/components/ViewBuild.tsx", "../src/utilities/getLatestBuildId.ts", "../src/utilities/subscribeToFirebaseDoc.ts", "../src/utilities/subscribeToBuild.ts", "../src/utilities/findAppUserId.ts", "../src/utilities/useAnalytics.ts", "../src/commands/build/BuildCommand.tsx", "../src/components/ViewBuilds.tsx", "../src/components/Table.tsx", "../src/components/TableEnd.tsx", "../src/components/TableHead.tsx", "../src/components/TableBody.tsx", "../src/components/TableRow.tsx", "../src/utilities/getKeyDetails.ts", "../src/utilities/capitalize.ts", "../src/utilities/getBuilds.ts", "../src/utilities/getRelativeDateFromDateString.ts", "../src/components/SyntaxHighlight.tsx", "../src/commands/BuildsCommand.tsx", "../src/commands/introspect/IntrospectCommand.tsx", "../src/commands/introspect/components/IntrospectSession.tsx", "../src/commands/introspect/utilities/sessionManager.ts", "../src/commands/introspect/utilities/websocketClient.ts", "../src/commands/introspect/utilities/terminalManager.ts", "../src/commands/introspect/utilities/tokenRefresh.ts", "../src/commands/introspect/components/BuildSelector.tsx", "../src/components/BuildTableLayout.tsx", "../src/components/SelectTable.tsx", "../src/components/useBuildTableState.ts", "../src/commands/introspect/utilities/buildQueries.ts", "../src/commands/introspect/components/PlatformSelector.tsx", "../src/commands/introspect/components/LatestBuildLoader.tsx", "../src/commands/LogoutCommand.tsx", "../src/components/BuildPicker.tsx", "../src/utilities/getLatestReleasedBuild.ts", "../src/utilities/getBuildById.ts", "../src/commands/release/components/ReleaseBuildLogic.tsx", "../src/utilities/getBuildAttributes.ts", "../src/commands/release/utilities/releaseBuild.ts", "../src/commands/release/components/ReleaseBuildView.tsx", "../src/components/BuildError.tsx", "../src/commands/release/components/ReleaseConfirmation.tsx", "../src/commands/smoke-test/utilities/build.ts", "../src/commands/release/utilities/analyzeRelease.ts", "../src/commands/release/components/DowngradeConfirmation.tsx", "../src/commands/release/components/YesNoConfirmation.tsx", "../src/commands/release/ReleaseCommand.tsx", "../src/commands/smoke-test/SmokeTestCommand.tsx", "../src/commands/smoke-test/components/Cancellation.tsx", "../src/commands/smoke-test/components/SmokeTestView.tsx", "../src/commands/smoke-test/components/ProgressBar.tsx", "../src/commands/smoke-test/components/TestProgress.tsx", "../src/commands/smoke-test/utilities/cancelSmokeTest.ts", "../src/commands/smoke-test/utilities/queueSmokeTest.ts", "../src/commands/smoke-test/utilities/waitUntilFinished.ts", "../src/commands/WhoamiCommand.tsx", "../src/utilities/exitIfCLIOutOfDate.ts", "../src/utilities/initSentry.ts", "../package.json", "../src/utilities/onCommand.ts", "../src/commands/build/utilities/continueBreakpoint.ts"],
|
|
4
|
+
"sourcesContent": ["#!/usr/bin/env node\nimport { InvalidArgumentError, Option, program } from 'commander';\nimport { render } from 'ink';\nimport { FC, createElement } from 'react';\nimport 'source-map-support/register';\n\nimport BuildCommand from './commands/build/BuildCommand';\nimport BuildsCommand from './commands/BuildsCommand';\nimport IntrospectCommand from './commands/introspect/IntrospectCommand';\nimport LogoutCommand from './commands/LogoutCommand';\nimport ReleaseCommand from './commands/release/ReleaseCommand';\nimport SmokeTestCommand from './commands/smoke-test/SmokeTestCommand';\nimport WhoamiCommand from './commands/WhoamiCommand';\nimport getCliVersion from './utilities/getCliVersion';\nimport onCommand from './utilities/onCommand';\nimport { setConfigDir, setEphemeralMode } from './utilities/configStore';\nimport {\n BreakpointResolution,\n formatBreakpointCatalog,\n resolveBreakpointInput,\n} from './commands/build/utilities/breakpoints';\nimport {\n continueBreakpoint,\n isValidPlatform,\n} from './commands/build/utilities/continueBreakpoint';\nimport { PlatformName } from '@todesktop/shared';\n\nfunction parseCount(value: string): number {\n const parsedValue = Number.parseInt(value, 10);\n if (parsedValue > 0) {\n return parsedValue;\n }\n\n throw new InvalidArgumentError('Should be a positive number');\n}\n\nconst configOption = new Option(\n '--config [string]',\n 'Path to a different configuration file. If not specified, ' +\n '`todesktop.json` in the project root will be used',\n).argParser((value?: string): string | undefined => {\n if (typeof value === 'string' && value === '') {\n throw new InvalidArgumentError('Provided config path is empty');\n }\n\n return value;\n});\n\nprogram\n .name('todesktop')\n .version(getCliVersion())\n .option(\n '--config-dir <path>',\n 'Custom directory for storing CLI configuration and credentials. ' +\n 'Can also be set via TODESKTOP_CONFIG_DIR environment variable',\n )\n .option(\n '--ephemeral',\n 'Do not persist any configuration or credentials to disk. ' +\n 'Useful for CI environments where credentials are provided via environment variables',\n )\n .hook('preAction', (thisCommand) => {\n const opts = thisCommand.opts();\n if (opts.configDir) {\n setConfigDir(opts.configDir);\n }\n if (opts.ephemeral) {\n setEphemeralMode(true);\n }\n });\n\nprogram\n .command('build')\n .description(\n 'Build an Electron app with native installers, code signing baked-in, ' +\n \"etc. but without releasing it (existing users won't get an \" +\n 'auto-update). For quicker builds, you can append `--code-sign=false` ' +\n 'to disable code-signing and notarization.',\n )\n .option(\n '--code-sign [bool]',\n 'Whether or not code-signing and notarization should be performed. ' +\n 'Disable this for quicker builds',\n )\n .option(\n '--async',\n 'Upload your app for building on our servers but exit after the upload ' +\n 'is complete. Do not wait until the app is actually built',\n )\n .option(\n '--webhook [string]',\n 'Send POST request to the webhook URL after building is finished',\n )\n .option(\n '--ignore-extends-errors [bool]',\n 'Ignore `id` and `appId` validation errors when extending another todesktop.json file',\n )\n .option('--introspect', 'Enable interactive debugging for this build')\n .option(\n '--breakpoints <list>',\n 'Comma-separated list of build breakpoints (requires --introspect). Use `--breakpoints=list` to show supported names',\n )\n .option(\n '--continue <buildId>',\n 'Resume a paused introspection breakpoint for an existing build',\n )\n .option(\n '--platform <platform>',\n 'Platform to target when using --continue (mac, windows, linux)',\n )\n .addOption(configOption)\n .action(\n async ({\n async,\n codeSign,\n config,\n webhook,\n ignoreExtendsErrors,\n introspect,\n breakpoints,\n continue: continueBuildId,\n platform,\n }) => {\n if (continueBuildId) {\n if (!platform) {\n console.error(\n '--continue requires a valid --platform option (mac, windows, linux).',\n );\n process.exit(1);\n }\n\n if (!isValidPlatform(platform)) {\n console.error(\n '--continue requires a valid --platform option (mac, windows, linux).',\n );\n process.exit(1);\n }\n\n try {\n const resolvedPlatform: PlatformName = platform;\n await continueBreakpoint({\n buildId: continueBuildId,\n platform: resolvedPlatform,\n configPath: config,\n ignoreExtendsErrors: ignoreExtendsErrors === true,\n });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n console.error(message);\n process.exit(1);\n }\n\n return;\n }\n\n if (platform) {\n console.error('--platform is only valid when used with --continue');\n process.exit(1);\n }\n\n if (breakpoints === 'list') {\n console.log(formatBreakpointCatalog());\n return;\n }\n\n let breakpointPlan: BreakpointResolution | undefined;\n if (typeof breakpoints === 'string') {\n if (introspect !== true) {\n console.error(\n '--breakpoints requires --introspect. Re-run with --introspect to enable pause points.',\n );\n process.exit(1);\n }\n\n const resolution = resolveBreakpointInput(breakpoints);\n if ('error' in resolution) {\n console.error(resolution.error);\n process.exit(1);\n }\n breakpointPlan = resolution;\n }\n\n runCommand(BuildCommand, {\n configPath: config,\n flags: {\n exitAfterUploading: async === true,\n shouldCodeSign: codeSign !== 'false',\n ignoreExtendsErrors: ignoreExtendsErrors === true,\n onBuildFinishedWebhook: webhook,\n introspect: introspect === true,\n breakpointPlan,\n },\n });\n },\n );\n\nprogram\n .command('builds')\n .description('View your builds')\n .argument('[id]', 'View a specific build by ID')\n .option('--latest', 'View the latest build')\n .addOption(configOption)\n .option('--count [number]', 'Number of builds to show per page', parseCount)\n .addOption(\n new Option('--format <type>', 'Format to output the build details in')\n .choices(['json', 'table'])\n .default('table'),\n )\n .option(\n '--exit',\n 'Disable dynamic pagination and exit the process once the build data ' +\n 'has been displayed',\n )\n .action((id, { config, count, exit, format, latest }) => {\n runCommand(BuildsCommand, {\n configPath: config,\n count,\n exit,\n format,\n id,\n shouldViewLatest: latest,\n });\n });\n\nprogram\n .command('logout')\n .description('Logs you out')\n .action(() => {\n runCommand(LogoutCommand, null, { exitIfOutOfDate: false });\n });\n\nprogram\n .command('release')\n .description('Release a build')\n .argument('[id]', 'A specific build ID to release')\n .option('--force', 'Skips interactive confirmation step')\n .option('--latest', 'Release the latest build')\n .addOption(configOption)\n .action((id, { config, force, latest }) => {\n runCommand(ReleaseCommand, {\n configPath: config,\n shouldConfirm: !force,\n buildId: latest ? 'latest' : id,\n });\n });\n\nprogram\n .command('smoke-test')\n .description('Check whether the build works and can be successfully updated')\n .argument('[id]', 'A specific build ID to test')\n .option('--latest', 'Release the latest build')\n .addOption(configOption)\n .action((id, { config, latest }) => {\n runCommand(SmokeTestCommand, {\n configPath: config,\n buildId: latest ? 'latest' : id,\n });\n });\n\nprogram\n .command('introspect [buildId]')\n .description('Connect to an ongoing build for interactive debugging')\n .option(\n '--platform <platform>',\n 'Platform to introspect (mac, windows, linux)',\n )\n .option('--latest', 'Connect to the latest build with introspection enabled')\n .option('--verbose', 'Show detailed connection information')\n .addOption(configOption)\n .action(\n (\n buildId?: string,\n options?: {\n platform?: string;\n latest?: boolean;\n verbose?: boolean;\n config?: string;\n },\n ) => {\n runCommand(IntrospectCommand, {\n buildId,\n platform: options?.platform,\n verbose: options?.verbose,\n latest: options?.latest,\n configPath: options?.config,\n });\n },\n )\n .command('whoami')\n .description(\"Prints the email of the account you're signed into\")\n .action(() => {\n runCommand(WhoamiCommand);\n });\n\nconst runCommand = <T extends FC<Props>, Props extends object>(\n component: T,\n props: Props | null = null,\n { exitIfOutOfDate = true } = {},\n) => {\n onCommand({ exitIfOutOfDate });\n\n const { waitUntilExit } = render(createElement(component, props));\n\n waitUntilExit().catch((error) => {\n console.error(error.stack);\n });\n};\n\n// Don't exist with status 1 if no command specified\nconst args = [...process.argv];\nif (args.length === 2) {\n args.push('help');\n}\n\nprogram.parse(args);\n", "// libs\nimport { Text } from 'ink';\nimport { useEffect, useState } from 'react';\n\n// components\nimport BreakpointNotice from '../../../components/BreakpointNotice';\nimport BreakpointPrompt from '../../../components/BreakpointPrompt';\nimport BuildProgress from '../../../components/BuildProgress';\nimport ErrorDisplay from '../../../components/ErrorDisplay';\nimport MainLayout from '../../../components/MainLayout';\nimport Preparation from './Preparation';\n\n// utils\nimport logForCI from '../../../utilities/logForCI';\nimport runBuild from '../utilities/runBuild';\nimport type { BuildFlags, BuildState } from '../utilities/types';\nimport useExit from '../../../utilities/useExit';\n\nexport default function Build({\n commandUsed,\n configPath,\n flags,\n}: {\n commandUsed: string;\n configPath?: string;\n flags: BuildFlags;\n}) {\n const exit = useExit();\n const [state, setState] = useState<BuildState>({ state: 'initializing' });\n\n useEffect(() => {\n runBuild({ configPath, flags, updateState }).catch((e) => {\n const error = e.response ? e.response.data : e;\n logForCI(error);\n updateState({ state: 'error', error });\n });\n\n return () => state.onUnmount?.();\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n function updateState(changes: Partial<BuildState>) {\n setState(\n (previousState) => ({ ...previousState, ...changes }) as BuildState,\n );\n\n if (changes.state === 'exit-after-uploading') {\n setTimeout(() => exit(), 10);\n }\n\n if (changes.state === 'build-failed') {\n setTimeout(() => exit(new Error('Build has failed')), 10);\n }\n }\n\n switch (state.state) {\n case 'build-failed':\n case 'building': {\n if (!state.build) {\n return (\n <ErrorDisplay commandUsed={commandUsed} error=\"No build is set\" />\n );\n }\n\n return (\n <MainLayout\n appName={state.build.appName || state.appPkg?.name || ''}\n appVersion={state.build.appVersion || state.appPkg?.version || ''}\n build={state.build}\n commandUsed={commandUsed}\n hasBuildEverFailed={state.state === 'build-failed'}\n >\n <BreakpointNotice plan={state.breakpointPlan} />\n <BreakpointPrompt appId={state.appId} build={state.build} />\n <BuildProgress build={state.build} onBuildFailure={() => {}} />\n </MainLayout>\n );\n }\n\n case 'error':\n return <ErrorDisplay commandUsed={commandUsed} error={state.error} />;\n\n case 'exit-after-uploading':\n return (\n <Text>\n App is building on ToDesktop. Exit since the --async flag is passed.\n </Text>\n );\n\n case 'initializing':\n return <Text>Getting app info...</Text>;\n\n case 'preparing':\n return (\n <MainLayout\n appName={state.build?.appName || state.appPkg?.name || ''}\n appVersion={state.build?.appVersion || state.appPkg?.version || ''}\n build={state.build}\n commandUsed={commandUsed}\n hasBuildEverFailed={false}\n >\n <BreakpointNotice plan={state.breakpointPlan} />\n <Preparation\n progressPercentage={state.preparationProgress || 0}\n stageLabel={state.preparationStageLabel || 'Preparing'}\n uploadedSize={state.preparationUploadedSize}\n />\n </MainLayout>\n );\n\n default:\n return (\n <ErrorDisplay\n commandUsed={commandUsed}\n error={new Error(`Unknown state ${(state as BuildState).state}`)}\n />\n );\n }\n}\n", "import { Box, Text } from 'ink';\nimport { BreakpointPlan } from '../commands/build/utilities/types';\nimport { formatResolvedQueueMessage } from '../commands/build/utilities/breakpoints';\n\nexport interface BreakpointNoticeProps {\n plan?: BreakpointPlan;\n}\n\nexport default function BreakpointNotice({ plan }: BreakpointNoticeProps) {\n if (!plan) {\n return null;\n }\n\n const lines = formatResolvedQueueMessage(\n plan.breakpoints,\n plan.warnings,\n plan.expansions,\n );\n\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n {lines.map((line) => (\n <Text key={line}>{line}</Text>\n ))}\n </Box>\n );\n}\n", "import { BreakpointConfig, HookBreakpointName } from '@todesktop/shared';\n\nexport interface BreakpointDefinition {\n config: BreakpointConfig;\n value: string;\n label: string;\n description: string;\n aliases?: string[];\n}\n\nexport interface BreakpointParseResult {\n breakpoints: BreakpointConfig[];\n errors: string[];\n warnings: string[];\n expansions: Array<{ input: string; outputs: BreakpointConfig[] }>;\n}\n\nconst phaseBreakpointDefinitions: BreakpointDefinition[] = [\n {\n config: { type: 'phase', id: 'afterSourcePrep' },\n value: 'afterSourcePrep',\n label: 'After Source Prep',\n description:\n 'Pause once sources are unpacked, hooks ran, and postProcessApplicationSource completed.',\n },\n {\n config: { type: 'phase', id: 'beforeInstall' },\n value: 'beforeInstall',\n label: 'Before Install',\n description: 'Pause immediately before dependency installation begins.',\n },\n {\n config: { type: 'phase', id: 'afterInstall' },\n value: 'afterInstall',\n label: 'After Install',\n description:\n 'Pause after dependencies and plugins install and before resource writes.',\n },\n {\n config: { type: 'phase', id: 'beforePack' },\n value: 'beforePack',\n label: 'Before Pack',\n description:\n 'Pause after Electron Builder configuration is ready but before Packager.build() executes.',\n },\n {\n config: { type: 'phase', id: 'afterPack' },\n value: 'afterPack',\n label: 'After Pack',\n description: 'Pause once packaging completes and artifacts exist locally.',\n },\n {\n config: { type: 'phase', id: 'beforeUpload' },\n value: 'beforeUpload',\n label: 'Before Upload',\n description:\n 'Pause when manifests and metadata are generated before uploads start.',\n },\n {\n config: { type: 'phase', id: 'afterUpload' },\n value: 'afterUpload',\n label: 'After Upload',\n description:\n 'Pause after uploads finish but before CDN invalidation or bookkeeping.',\n },\n {\n config: { type: 'phase', id: 'beforeFinalize' },\n value: 'beforeFinalize',\n label: 'Before Finalize',\n description:\n 'Pause prior to sendBuildEvent.done() and cleanup completing the build.',\n },\n];\n\nconst hookBreakpointDefinitions: BreakpointDefinition[] = [\n {\n config: {\n type: 'hook',\n id: 'todesktop:beforeInstall',\n position: 'before',\n },\n value: 'hook:todesktop:beforeInstall:before',\n label: 'Before todesktop:beforeInstall',\n description: 'Pause just before the todesktop:beforeInstall hook runs.',\n aliases: ['todesktop:beforeInstall.before'],\n },\n {\n config: {\n type: 'hook',\n id: 'todesktop:beforeInstall',\n position: 'after',\n },\n value: 'hook:todesktop:beforeInstall:after',\n label: 'After todesktop:beforeInstall',\n description: 'Pause immediately after the todesktop:beforeInstall hook.',\n aliases: ['todesktop:beforeInstall.after'],\n },\n {\n config: {\n type: 'hook',\n id: 'todesktop:beforeBuild',\n position: 'before',\n },\n value: 'hook:todesktop:beforeBuild:before',\n label: 'Before todesktop:beforeBuild',\n description: 'Pause before the todesktop:beforeBuild hook executes.',\n aliases: ['todesktop:beforeBuild.before'],\n },\n {\n config: {\n type: 'hook',\n id: 'todesktop:beforeBuild',\n position: 'after',\n },\n value: 'hook:todesktop:beforeBuild:after',\n label: 'After todesktop:beforeBuild',\n description: 'Pause after the todesktop:beforeBuild hook.',\n aliases: ['todesktop:beforeBuild.after'],\n },\n {\n config: {\n type: 'hook',\n id: 'todesktop:afterPack',\n position: 'before',\n },\n value: 'hook:todesktop:afterPack:before',\n label: 'Before todesktop:afterPack',\n description: 'Pause prior to the todesktop:afterPack hook.',\n aliases: ['todesktop:afterPack.before'],\n },\n {\n config: {\n type: 'hook',\n id: 'todesktop:afterPack',\n position: 'after',\n },\n value: 'hook:todesktop:afterPack:after',\n label: 'After todesktop:afterPack',\n description: 'Pause after the todesktop:afterPack hook completes.',\n aliases: ['todesktop:afterPack.after'],\n },\n];\n\nconst breakpointDefinitions: BreakpointDefinition[] = [\n ...phaseBreakpointDefinitions,\n ...hookBreakpointDefinitions,\n];\n\nconst hookNames: HookBreakpointName[] = [\n 'todesktop:beforeInstall',\n 'todesktop:beforeBuild',\n 'todesktop:afterPack',\n];\n\nconst aliasMap: Record<string, BreakpointDefinition[]> = (() => {\n const map: Record<string, BreakpointDefinition[]> = {};\n for (const definition of breakpointDefinitions) {\n const aliases = new Set<string>([\n definition.value,\n ...(definition.aliases || []),\n ]);\n\n if (definition.config.type === 'hook') {\n const hookAlias = `${definition.config.id}:${definition.config.position}`;\n aliases.add(hookAlias);\n }\n\n for (const alias of aliases) {\n if (!map[alias]) {\n map[alias] = [];\n }\n map[alias].push(definition);\n }\n }\n\n return map;\n})();\n\nconst allSuggestionTokens = Array.from(\n new Set([\n ...Object.keys(aliasMap),\n 'hook:todesktop:beforeInstall:*',\n 'hook:todesktop:beforeBuild:*',\n 'hook:todesktop:afterPack:*',\n ]),\n);\n\nfunction canonicalKey(config: BreakpointConfig): string {\n if (config.type === 'phase') {\n return `phase:${config.id}`;\n }\n\n return `hook:${config.id}:${config.position}`;\n}\n\nfunction levenshtein(a: string, b: string): number {\n if (a === b) {\n return 0;\n }\n if (!a.length) {\n return b.length;\n }\n if (!b.length) {\n return a.length;\n }\n\n const matrix = Array.from({ length: a.length + 1 }, () =>\n Array(b.length + 1).fill(0),\n );\n\n for (let i = 0; i <= a.length; i += 1) {\n matrix[i][0] = i;\n }\n for (let j = 0; j <= b.length; j += 1) {\n matrix[0][j] = j;\n }\n\n for (let i = 1; i <= a.length; i += 1) {\n for (let j = 1; j <= b.length; j += 1) {\n const cost = a[i - 1] === b[j - 1] ? 0 : 1;\n matrix[i][j] = Math.min(\n matrix[i - 1][j] + 1,\n matrix[i][j - 1] + 1,\n matrix[i - 1][j - 1] + cost,\n );\n }\n }\n\n return matrix[a.length][b.length];\n}\n\nfunction expandWildcardHook(\n hookName: HookBreakpointName,\n): BreakpointDefinition[] {\n return hookBreakpointDefinitions.filter(\n (definition) => definition.config.id === hookName,\n );\n}\n\nexport function parseBreakpointList(input: string): BreakpointParseResult {\n const tokens = input\n .split(',')\n .map((token) => token.trim())\n .filter(Boolean);\n\n const seen = new Set<string>();\n const breakpoints: BreakpointConfig[] = [];\n const errors: string[] = [];\n const warnings: string[] = [];\n const expansions: BreakpointParseResult['expansions'] = [];\n\n const pushDefinition = (definition: BreakpointDefinition, source: string) => {\n const key = canonicalKey(definition.config);\n if (seen.has(key)) {\n warnings.push(\n `Duplicate breakpoint \"${definition.value}\" ignored (from \"${source}\").`,\n );\n return;\n }\n seen.add(key);\n breakpoints.push(definition.config);\n };\n\n const suggest = (token: string): string | null => {\n let best: { token: string; distance: number } | null = null;\n for (const candidate of allSuggestionTokens) {\n const distance = levenshtein(token, candidate);\n if (!best || distance < best.distance) {\n best = { token: candidate, distance };\n }\n }\n if (best && best.distance <= Math.max(2, Math.floor(token.length / 2))) {\n return best.token;\n }\n return null;\n };\n\n for (const token of tokens) {\n if (token.startsWith('hook:') && token.endsWith(':*')) {\n const hookNameCandidate = token.slice(5, -2);\n if (!isHookBreakpointName(hookNameCandidate)) {\n const suggestion = suggest(token);\n errors.push(\n suggestion\n ? `Unknown breakpoint \"${token}\". Did you mean \"${suggestion}\"?`\n : `Unknown breakpoint \"${token}\".`,\n );\n continue;\n }\n const definitions = expandWildcardHook(hookNameCandidate);\n\n expansions.push({\n input: token,\n outputs: definitions.map((definition) => definition.config),\n });\n\n for (const definition of definitions) {\n pushDefinition(definition, token);\n }\n continue;\n }\n\n if (token.endsWith('.*')) {\n const hookNameCandidate = token.substring(0, token.length - 2);\n if (isHookBreakpointName(hookNameCandidate)) {\n const definitions = expandWildcardHook(hookNameCandidate);\n expansions.push({\n input: token,\n outputs: definitions.map((definition) => definition.config),\n });\n for (const definition of definitions) {\n pushDefinition(definition, token);\n }\n continue;\n }\n }\n\n const definitions = aliasMap[token];\n if (!definitions || definitions.length === 0) {\n const suggestion = suggest(token);\n errors.push(\n suggestion\n ? `Unknown breakpoint \"${token}\". Did you mean \"${suggestion}\"?`\n : `Unknown breakpoint \"${token}\".`,\n );\n continue;\n }\n\n if (definitions.length > 1) {\n expansions.push({\n input: token,\n outputs: definitions.map((definition) => definition.config),\n });\n }\n\n for (const definition of definitions) {\n pushDefinition(definition, token);\n }\n }\n\n return { breakpoints, errors, warnings, expansions };\n}\n\nexport function listBreakpointDefinitions(): BreakpointDefinition[] {\n return breakpointDefinitions.slice();\n}\n\nexport function formatBreakpoint(config: BreakpointConfig): string {\n if (config.type === 'phase') {\n return config.id;\n }\n return `hook:${config.id}:${config.position}`;\n}\n\nfunction isHookBreakpointName(value: string): value is HookBreakpointName {\n return (hookNames as string[]).includes(value);\n}\n", "import { BreakpointConfig } from '@todesktop/shared';\nimport {\n formatBreakpoint,\n listBreakpointDefinitions,\n parseBreakpointList,\n} from '../../../utilities/introspectionBreakpoints';\n\nexport interface BreakpointResolution {\n breakpoints: BreakpointConfig[];\n warnings: string[];\n expansions: Array<{ input: string; outputs: BreakpointConfig[] }>;\n}\n\nexport function resolveBreakpointInput(\n input: string,\n): BreakpointResolution | { error: string } {\n const result = parseBreakpointList(input);\n\n if (result.errors.length > 0) {\n return { error: result.errors.join('\\n') };\n }\n\n return {\n breakpoints: result.breakpoints,\n warnings: result.warnings,\n expansions: result.expansions,\n };\n}\n\nexport function formatBreakpointCatalog(): string {\n const definitions = listBreakpointDefinitions();\n const lines: string[] = [];\n lines.push('Supported breakpoints:');\n for (const definition of definitions) {\n lines.push(\n ` - ${definition.value} \u2014 ${definition.description} (${\n definition.config.type === 'phase'\n ? 'phase'\n : `${definition.config.id} ${definition.config.position}`\n })`,\n );\n }\n return lines.join('\\n');\n}\n\nexport function formatResolvedQueueMessage(\n breakpoints: BreakpointConfig[],\n warnings: string[],\n expansions: Array<{ input: string; outputs: BreakpointConfig[] }>,\n): string[] {\n const lines: string[] = [];\n\n if (!breakpoints.length) {\n lines.push(\n 'Breakpoints were requested but no valid entries were provided. Build will continue without pause points.',\n );\n return lines;\n }\n\n lines.push(`Breakpoints enabled:`);\n breakpoints.forEach((breakpoint, index) => {\n lines.push(` ${index + 1}. ${formatBreakpoint(breakpoint)}`);\n });\n\n if (expansions.length) {\n lines.push('');\n for (const expansion of expansions) {\n lines.push(\n ` \u2139 \"${expansion.input}\" expands to ${expansion.outputs\n .map((bp) => formatBreakpoint(bp))\n .join(', ')}`,\n );\n }\n }\n\n if (warnings.length) {\n lines.push('');\n lines.push(...warnings.map((warning) => ` ! ${warning}`));\n }\n\n return lines;\n}\n", "import { Box, Text } from 'ink';\nimport { useEffect, useMemo, useState } from 'react';\nimport {\n BREAKPOINT_MAX_REMAINING_MS,\n BreakpointConfig,\n BreakpointPauseLease,\n BreakpointRenewal,\n CurrentBreakpointState,\n HookBreakpointName,\n HookBreakpointPosition,\n IntrospectPlatformData,\n PhaseBreakpointId,\n PlatformName,\n} from '@todesktop/shared';\nimport { formatBreakpoint } from '../utilities/introspectionBreakpoints';\nimport { Build } from '../types';\nimport useInput from '../utilities/useInput';\nimport getCallableFirebaseFunction from '../utilities/getCallableFirebaseFunction';\nimport { currentUser } from '../utilities/firestore';\nimport { formatIntrospectionStatus } from '../utilities/introspectionStatus';\n\ninterface BreakpointPromptProps {\n appId?: string;\n build: Build;\n}\n\nfunction formatRemaining(remainingMs: number): string {\n if (Number.isNaN(remainingMs)) {\n return 'unknown';\n }\n\n if (remainingMs <= 0) {\n return 'expired';\n }\n\n const totalSeconds = Math.floor(remainingMs / 1000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n if (minutes <= 0) {\n return `${seconds}s`;\n }\n return `${minutes}m ${seconds.toString().padStart(2, '0')}s`;\n}\n\nfunction describeLeaseOwner(lease?: BreakpointPauseLease): string {\n if (!lease) {\n return 'Unknown';\n }\n return lease.createdByUserId;\n}\n\nfunction describeRenewals(renewals?: BreakpointRenewal[]): string {\n if (!renewals || renewals.length === 0) {\n return 'none';\n }\n return `${renewals.length}`;\n}\n\nexport default function BreakpointPrompt({\n appId,\n build,\n}: BreakpointPromptProps) {\n const [now, setNow] = useState(() => Date.now());\n const [error, setError] = useState<string | null>(null);\n const [inFlight, setInFlight] = useState<null | {\n platform: PlatformName;\n action: 'resume' | 'renew' | 'skip';\n }>(null);\n\n useEffect(() => {\n const timer = setInterval(() => setNow(Date.now()), 1000);\n return () => clearInterval(timer);\n }, []);\n\n const primary = useMemo<{\n platform: PlatformName;\n data: IntrospectPlatformData;\n } | null>(() => {\n const { introspect } = build;\n if (!introspect) return null;\n\n const pausedEntry = (\n Object.entries(introspect) as [PlatformName, IntrospectPlatformData][]\n ).find(([, data]) => data?.breakpointStatus === 'paused');\n\n if (!pausedEntry) {\n return null;\n }\n\n const [platform, data] = pausedEntry;\n return { platform, data };\n }, [build.introspect]);\n\n const isActive = Boolean(primary && !inFlight);\n\n useInput(\n async (input, key) => {\n if (!primary || !appId || inFlight) {\n return;\n }\n\n const lower = input.toLowerCase();\n const { platform } = primary;\n const actionLabel = (type: (typeof inFlight)['action']) =>\n `${type} (${platform})`;\n\n async function invoke(action: 'resume' | 'renew' | 'skip') {\n setError(null);\n setInFlight({ platform, action });\n try {\n const user = currentUser();\n if (!user) {\n throw new Error('Not authenticated. Please run: todesktop login');\n }\n\n const idToken = await user.getIdToken(true);\n const actionMap: Record<\n typeof action,\n | 'resumeBuildBreakpoint'\n | 'renewBuildBreakpoint'\n | 'skipBuildBreakpoints'\n > = {\n resume: 'resumeBuildBreakpoint',\n renew: 'renewBuildBreakpoint',\n skip: 'skipBuildBreakpoints',\n };\n const functionName = actionMap[action];\n if (!functionName) {\n throw new Error(`Unknown breakpoint action: ${action}`);\n }\n\n const callFunction = getCallableFirebaseFunction(functionName);\n\n await callFunction({\n appId,\n buildId: build.id,\n platform,\n idToken,\n });\n } catch (err) {\n const message =\n err instanceof Error ? err.message : JSON.stringify(err);\n setError(`${actionLabel(action)} failed: ${message}`);\n } finally {\n setInFlight(null);\n }\n }\n\n if (key.return) {\n await invoke('resume');\n } else if (lower === 'x') {\n await invoke('skip');\n } else if (!key.ctrl && !key.meta && lower === ' ') {\n if (!canRenew) {\n return;\n }\n await invoke('renew');\n }\n },\n { isActive },\n );\n\n if (!primary) {\n return null;\n }\n\n const { platform, data } = primary;\n const breakpoint = data.currentBreakpoint;\n if (!breakpoint) {\n return null;\n }\n const { breakpointStatus } = data;\n const { shellStatus } = data;\n\n const expiresAtMs = toDateSafe(breakpoint.expiresAt)?.getTime() ?? NaN;\n const remainingMs = expiresAtMs - now;\n const canRenew = remainingMs < BREAKPOINT_MAX_REMAINING_MS;\n\n const formattedBreakpoint = formatBreakpoint(toBreakpointConfig(breakpoint));\n\n const renewalsDescription = describeRenewals(breakpoint.renewals);\n\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text color=\"yellow\">\n {platform} {formatIntrospectionStatus(breakpointStatus, shellStatus)} at{' '}\n {formattedBreakpoint} (lease expires in {formatRemaining(remainingMs)}).\n </Text>\n <Text color=\"gray\">\n Lease owner: {describeLeaseOwner(data.pauseLease)} \u00B7 renewals:{' '}\n {renewalsDescription}\n </Text>\n <Text>\n Press <Text bold>Enter</Text> to continue, <Text bold>x</Text> to skip\n remaining breakpoints, <Text bold>space</Text> to renew lease\n {canRenew ? '' : ' (limit reached)'}, <Text bold>Ctrl+C</Text> to\n detach.\n </Text>\n {inFlight ? (\n <Text color=\"cyan\">\n {inFlight.action === 'renew'\n ? 'Renewing lease'\n : inFlight.action === 'skip'\n ? 'Skipping remaining breakpoints'\n : 'Resuming build'}\n \u2026\n </Text>\n ) : null}\n {error ? <Text color=\"red\">{error}</Text> : null}\n </Box>\n );\n}\n\nfunction toDateSafe(value: unknown): Date | null {\n try {\n return toDate(value);\n } catch {\n return null;\n }\n}\n\nfunction toBreakpointConfig(state: CurrentBreakpointState): BreakpointConfig {\n if (state.type === 'hook') {\n return {\n type: 'hook',\n id: state.id as HookBreakpointName,\n position: (state.position ?? 'before') as HookBreakpointPosition,\n };\n }\n\n return {\n type: 'phase',\n id: state.id as PhaseBreakpointId,\n };\n}\n\nfunction toDate(value: unknown): Date {\n if (!value) {\n throw new Error('Missing timestamp value');\n }\n\n if (value instanceof Date) {\n return value;\n }\n\n if (typeof value === 'string') {\n return new Date(value);\n }\n\n if (\n typeof value === 'object' &&\n (value as { toDate?: () => Date }).toDate instanceof Function\n ) {\n return (value as { toDate: () => Date }).toDate();\n }\n\n throw new Error('Unsupported timestamp value');\n}\n", "import isCi from 'is-ci';\nimport { useCallback, useEffect, useRef } from 'react';\nimport { useInput as useInkInput, useStdin } from 'ink';\nimport useExit from './useExit';\n\ntype Handler = Parameters<typeof useInkInput>[0];\ntype Options = Parameters<typeof useInkInput>[1];\n\ntype Extras = {\n onCtrlCPressed?: () => void;\n};\n\ntype Subscription = {\n handler: Handler;\n isActive?: boolean;\n};\n\nconst ctrlCSubscriptions = new Set<() => void>();\nconst exitHandlers = new Set<() => void>();\n\nlet activeStdin: NodeJS.ReadStream | null = null;\nlet stdinListenerCount = 0;\n\nconst onStdin = (data: Buffer) => {\n let input = String(data);\n let wasCtrlPressed = false;\n\n if (input <= '\\u001A' && input !== '\\r') {\n input = String.fromCharCode(input.charCodeAt(0) + 'a'.charCodeAt(0) - 1);\n wasCtrlPressed = true;\n }\n\n if (wasCtrlPressed && input === 'c') {\n ctrlCSubscriptions.forEach((subscription) => subscription());\n\n const { value: exit } = exitHandlers.values().next();\n if (exit) {\n setTimeout(exit, 10);\n }\n }\n};\n\nfunction normaliseOptions(options?: Options): Options {\n if (!options) {\n return {};\n }\n\n if ('isActive' in options) {\n return { isActive: options.isActive };\n }\n\n return {};\n}\n\nfunction normaliseExtras(extras?: Extras): Extras {\n if (!extras) {\n return {};\n }\n\n if ('onCtrlCPressed' in extras) {\n return { onCtrlCPressed: extras.onCtrlCPressed };\n }\n\n return {};\n}\n\n/*\n See https://github.com/vadimdemedes/pastel/issues/38\n*/\nexport default function useInput(\n handler?: Handler,\n options: Options = {},\n extras: Extras = {},\n) {\n const exit = useExit();\n const { stdin, isRawModeSupported } = useStdin();\n const subscriptionRef = useRef<Subscription[]>([]);\n\n const canUseRawInput = !isCi && Boolean(isRawModeSupported && stdin);\n\n const register = useCallback(\n (\n nextHandler: Handler,\n nextOptions: Options = {},\n nextExtras: Extras = {},\n ) => {\n if (!canUseRawInput) {\n return () => {};\n }\n\n const normalisedOptions = normaliseOptions(nextOptions);\n const normalisedExtras = normaliseExtras(nextExtras);\n\n const subscription: Subscription = {\n handler: nextHandler,\n isActive: normalisedOptions.isActive,\n };\n\n subscriptionRef.current = [...subscriptionRef.current, subscription];\n\n if (normalisedExtras.onCtrlCPressed) {\n ctrlCSubscriptions.add(normalisedExtras.onCtrlCPressed);\n }\n\n return () => {\n subscriptionRef.current = subscriptionRef.current.filter(\n (item) => item !== subscription,\n );\n\n if (normalisedExtras.onCtrlCPressed) {\n ctrlCSubscriptions.delete(normalisedExtras.onCtrlCPressed);\n }\n };\n },\n [canUseRawInput],\n );\n\n useEffect(() => {\n if (!canUseRawInput || !stdin) {\n return;\n }\n\n exitHandlers.add(exit);\n const onStdinData = (data: Buffer) => onStdin(data);\n\n if (stdinListenerCount === 0) {\n activeStdin = stdin;\n activeStdin.on('data', onStdinData);\n }\n\n stdinListenerCount += 1;\n\n return () => {\n exitHandlers.delete(exit);\n stdinListenerCount = Math.max(stdinListenerCount - 1, 0);\n\n if (stdinListenerCount === 0 && activeStdin) {\n activeStdin.off('data', onStdinData);\n activeStdin = null;\n }\n };\n }, [canUseRawInput, exit, stdin]);\n\n useInkInput(\n useCallback(\n (input, key) => {\n if (!canUseRawInput) {\n return;\n }\n\n for (const subscription of subscriptionRef.current) {\n if (subscription.isActive === false) {\n continue;\n }\n\n subscription.handler(input, key);\n }\n },\n [canUseRawInput],\n ),\n {\n isActive: canUseRawInput,\n },\n );\n\n useEffect(() => {\n if (!handler) {\n return;\n }\n\n const unsubscribe = register(handler, options, extras);\n\n return () => {\n unsubscribe();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [extras?.onCtrlCPressed, handler, options?.isActive, register]);\n\n if (handler) {\n return;\n }\n\n return register;\n}\n", "import { useApp } from 'ink';\nimport { flush } from './analytics';\nimport logger from './logger';\n\nexport default () => {\n const { exit } = useApp();\n\n return (error?: Error) => {\n logger.debug({ error }, 'Exit called');\n\n /*\n First, destroy connections.\n Why do we need to do this if we're going to call process.exit\n below anyway? Just to be safe in case a Firestore subscription\n triggers a state update after the React app is exited.\n */\n // Firebase v9+ doesn't require manual termination for most cases\n // If you need to terminate connections, use terminate() from firebase/firestore\n // TODO: Uncomment this when we've been on Firebase v11 for a while and are confident this is no longer needed\n // import { terminate } from \"firebase/firestore\";\n // terminate(firestore).catch((e) => logger.error(e));\n\n let timeoutId;\n Promise.race([\n // flush the analytics to make sure all outstanding events are pushed to segment\n flush(),\n // If it takes longer than 1 second, resolve early to proceed with program exit\n new Promise<void>(\n (resolve) => (timeoutId = setTimeout(() => resolve(), 1000)),\n ),\n ])\n .catch(() => {})\n .finally(() => {\n clearTimeout(timeoutId);\n /*\n Then, exit the React app. We don't pass the error because:\n 1. We don't want it displayed. We could give it a dummy error but\n that will output an empty line.\n 2. It doesn't exit with the correct code anyway, see\n https://github.com/vadimdemedes/pastel/issues/39.\n\n Side note: your component must not perform state updates after\n calling this, it will error.\n\n The try-catch shouldn't be needed here, but let's be safe\n */\n try {\n exit();\n } catch (e) {\n logger.error(e);\n // Ignore\n }\n\n /*\n Then exit the process.\n It should happen if all connections, etc. are destroyed. We manually\n exit with a code because:\n 1. We might not clean up properly, it could fail or take a long time.\n 2. The exit function above doesn't exit the CLI with the correct\n code anyway.\n\n If we had a way to detect when the app exits, we would use that\n and then call process.exit / destroy connections appropriately\n (https://github.com/vadimdemedes/pastel/issues/38).\n */\n setTimeout(() => process.exit(error ? 1 : 0), 10);\n });\n };\n};\n", "import { Analytics } from '@segment/analytics-node';\nimport os from 'os';\nimport { v4 as uuidv4 } from 'uuid';\nimport getEnvironmentVariables from './getEnvironmentVariables';\nimport { currentUser } from './firestore';\nimport { getAuthConfig } from './configStore';\nimport getCliVersion from './getCliVersion';\n\nconst environmentVariables = getEnvironmentVariables();\n\nlet analytics: Analytics | undefined = new Analytics({\n flushAt: 1,\n flushInterval: 1,\n writeKey: environmentVariables.SEGMENT_WRITE_KEY,\n});\n\nexport const ANALYTICS_EVENT = {\n CLI_COMMAND: 'CLI Command',\n};\n\nexport function disableAnalytics() {\n analytics = undefined;\n}\n\nfunction getAnalyticsBaseProperties() {\n const baseProps = {\n app: {\n cliVersion: '',\n },\n client: 'cli',\n user: {\n email: '',\n },\n os: {\n name: '',\n version: '',\n },\n runtime: {\n name: 'Node.js',\n version: '',\n },\n };\n try {\n baseProps.os = {\n name: os.platform(),\n version: os.release(),\n };\n } catch {\n // nothing\n }\n\n try {\n baseProps.user = {\n email: getAuthConfig().email as string,\n };\n } catch {\n // nothing\n }\n\n try {\n baseProps.app = {\n cliVersion: getCliVersion(),\n };\n } catch {\n // nothing\n }\n\n try {\n baseProps.runtime = {\n name: 'Node.js',\n version: process.version,\n };\n } catch {\n // nothing\n }\n\n return baseProps;\n}\n\nconst anonymousId = uuidv4();\nexport const track = (event: string, properties = {}, callback = () => {}) => {\n try {\n const user = currentUser();\n analytics?.track(\n {\n event,\n userId: user?.uid,\n anonymousId,\n properties: {\n ...properties,\n ...getAnalyticsBaseProperties(),\n },\n },\n callback,\n );\n } catch {\n // nothing\n }\n};\n\nexport const identify = (id: string, traits = {}, callback = () => {}) => {\n try {\n analytics?.identify({ userId: id, anonymousId, traits }, callback);\n } catch {\n // nothing\n }\n};\n\nexport const flush = () => analytics?.flush({ close: true });\n", "import dotenv from 'dotenv';\nimport path from 'path';\n\nlet hasInitialized = false;\n\nconst init = () => {\n if (hasInitialized) {\n return;\n }\n\n // In test environment, load test-specific environment variables\n const envFile = process.env.NODE_ENV === 'test' ? '../.env.test' : '../.env';\n\n dotenv.config({\n path: path.resolve(__dirname, envFile),\n quiet: true,\n });\n hasInitialized = true;\n};\n\ntype EnvVars = {\n TODESKTOP_CLI_ENV: string;\n TODESKTOP_CLI_S3_BUCKET: string;\n TODESKTOP_CLI_FIREBASE_FUNCTIONS_BASE: string;\n TODESKTOP_CLI_FIREBASE_API_KEY: string;\n TODESKTOP_CLI_FIREBASE_AUTH_DOMAIN: string;\n TODESKTOP_CLI_FIREBASE_DATABASE_URL: string;\n TODESKTOP_CLI_FIRESTORE_HOST?: string;\n TODESKTOP_CLI_FIREBASE_PROJECT_ID: string;\n TODESKTOP_CLI_FIREBASE_STORAGE_BUCKET: string;\n TODESKTOP_CLI_FIREBASE_MESSAGING_SENDER_ID: string;\n TODESKTOP_CLI_FIREBASE_ID: string;\n TODESKTOP_CLI_SENTRY_DSN: string;\n SEGMENT_WRITE_KEY: string;\n};\n\nexport default () => {\n init();\n return process.env as NodeJS.ProcessEnv & EnvVars;\n};\n", "import { initializeApp } from 'firebase/app';\nimport { connectFirestoreEmulator, getFirestore } from 'firebase/firestore';\nimport {\n getAuth,\n signInWithCustomToken as authSignInWithCustomToken,\n onAuthStateChanged,\n} from 'firebase/auth';\nimport getEnvironmentVariables from './getEnvironmentVariables';\n\nconst environmentVariables = getEnvironmentVariables();\n\n// if (environmentVariables.NODE_ENV === \"development\") {\n// if (true) {\n// setLogLevel(\"debug\");\n// }\n\nconst firebaseApp = initializeApp({\n apiKey: environmentVariables.TODESKTOP_CLI_FIREBASE_API_KEY,\n authDomain: environmentVariables.TODESKTOP_CLI_FIREBASE_AUTH_DOMAIN,\n databaseURL: environmentVariables.TODESKTOP_CLI_FIREBASE_DATABASE_URL,\n projectId: environmentVariables.TODESKTOP_CLI_FIREBASE_PROJECT_ID,\n storageBucket: environmentVariables.TODESKTOP_CLI_FIREBASE_STORAGE_BUCKET,\n messagingSenderId:\n environmentVariables.TODESKTOP_CLI_FIREBASE_MESSAGING_SENDER_ID,\n appId: environmentVariables.TODESKTOP_CLI_FIREBASE_ID,\n});\n\nconst auth = getAuth(firebaseApp);\nconst db = getFirestore(firebaseApp);\n\nconst [host, port] =\n environmentVariables.TODESKTOP_CLI_FIRESTORE_HOST?.split(':') || [];\nif (host && port) {\n connectFirestoreEmulator(db, host, Number.parseInt(port, 10));\n}\n\ninterface FirebaseUser {\n displayName: string | null;\n email: string | null;\n getIdToken(forceRefresh?: boolean): Promise<string>;\n uid: string;\n}\n\nexport const currentUser = (): FirebaseUser | null => {\n return auth.currentUser as FirebaseUser | null;\n};\nexport const signInWithCustomToken = async (token: string) => {\n return authSignInWithCustomToken(auth, token);\n};\n\n/**\n * onUserAuth is only triggered on sign-in. This\n * happens once signInWithCustomToken is successful.\n *\n * It technically also triggers on sign-out but there's\n * no concept of signing out of firebase with the CLI app.\n * (See logout command which just deletes a local file)\n */\nexport const onUserAuth = (\n handler: (user: Partial<FirebaseUser>) => void,\n): (() => void) =>\n onAuthStateChanged(auth, (user) => {\n handler(((user as FirebaseUser | null) ?? {}) as Partial<FirebaseUser>);\n });\n\nexport default db;\n", "import Conf from 'conf';\n\n// Configuration for lazy initialization\nlet customCwd: string | undefined = process.env.TODESKTOP_CONFIG_DIR;\nlet ephemeralMode = false;\nconst memoryStore = new Map<string, string>();\nlet configInstance: Conf<Record<string, unknown>> | null = null;\n\n/**\n * Set a custom directory for the config store.\n * Must be called before any config operations.\n */\nexport const setConfigDir = (cwd: string) => {\n customCwd = cwd;\n};\n\n/**\n * Enable ephemeral mode - config will only be stored in memory\n * and not persisted to disk.\n */\nexport const setEphemeralMode = (enabled: boolean) => {\n ephemeralMode = enabled;\n};\n\nconst getConfigInstance = () => {\n if (!configInstance) {\n configInstance = new Conf({\n configName: 'todesktop-cli',\n ...(customCwd && { cwd: customCwd }),\n });\n }\n return configInstance;\n};\n\nexport const accessTokenConfigKey = 'accessToken';\nexport const emailConfigKey = 'email';\nexport const jwtTokenConfigKey = 'jwtToken';\n\nexport const setConfig = (key: string, value: string) => {\n if (ephemeralMode) {\n memoryStore.set(key, value);\n } else {\n getConfigInstance().set(key, value);\n }\n};\n\nexport const getConfig = (key: string) => {\n if (ephemeralMode) {\n return memoryStore.get(key);\n }\n return getConfigInstance().get(key) as string;\n};\n\nexport const setAuthConfig = (email, accessToken, jwtToken) => {\n setConfig(emailConfigKey, email);\n setConfig(accessTokenConfigKey, accessToken);\n setConfig(jwtTokenConfigKey, jwtToken);\n};\n\nexport const getAuthConfig = () => {\n const accessToken = getConfig(accessTokenConfigKey);\n const jwtToken = getConfig(jwtTokenConfigKey);\n const email = getConfig(emailConfigKey);\n\n return { accessToken, jwtToken, email };\n};\n\nexport const deleteAuthConfig = () => {\n if (ephemeralMode) {\n memoryStore.delete(emailConfigKey);\n memoryStore.delete(accessTokenConfigKey);\n memoryStore.delete(jwtTokenConfigKey);\n } else {\n const config = getConfigInstance();\n config.delete(emailConfigKey);\n config.delete(accessTokenConfigKey);\n config.delete(jwtTokenConfigKey);\n }\n};\n\n/**\n * Reset the config store state. Only for testing purposes.\n * @internal\n */\nexport const resetConfigStoreForTesting = () => {\n customCwd = undefined;\n ephemeralMode = false;\n memoryStore.clear();\n configInstance = null;\n};\n", "import pkgUp from 'pkg-up';\nimport type toDesktopPackageJson from '../../package.json';\nimport readJson from './readJson';\n\ntype ToDesktopPackageJson = typeof toDesktopPackageJson;\n\nconst packageJson = readJson<ToDesktopPackageJson>(\n pkgUp.sync({ cwd: __dirname }),\n);\n\nexport default function getToDesktopPackageJson(): ToDesktopPackageJson {\n return packageJson;\n}\n", "// This exists so it can be mocked in tests\nexport default function readJson<T>(filePath: string): T {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require(filePath);\n}\n", "import getToDesktopPackageJson from './getToDesktopPackageJson';\n\nconst cliVersion = getToDesktopPackageJson().version;\n\nexport default () => cliVersion;\n", "import bunyan from 'bunyan';\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport * as Sentry from '@sentry/node';\n\nlet logger: Logger;\n\nconst SENSITIVE_FIELD_KEY_SUBSTRINGS = [\n 'token',\n 'password',\n 'secret',\n 'credentials',\n 'environmentVariable',\n];\n\nfunction isJWT(str: string): boolean {\n // JWT typically follows the pattern: xxx.yyy.zzz\n // where each part is base64url encoded\n const jwtPattern = /^[A-Za-z0-9_-]{2,}(?:\\.[A-Za-z0-9_-]{2,}){2}$/;\n\n // We specify a minimum length of 20 characters because JWT strings\n // are usually longer than that and we want to avoid false positives.\n return typeof str === 'string' && str.length > 20 && jwtPattern.test(str);\n}\n\nfunction sanitizeFields(obj: any): any {\n if (!obj || typeof obj !== 'object') {\n if (typeof obj === 'string' && isJWT(obj)) {\n return '[REDACTED JWT]';\n }\n return obj;\n }\n\n // Create a deep copy of the object so that we don't mutate the original object\n const copy = Array.isArray(obj) ? [...obj] : { ...obj };\n\n for (const key of Object.keys(copy)) {\n const lowerKey = key.toLowerCase();\n const value = copy[key];\n\n if (\n SENSITIVE_FIELD_KEY_SUBSTRINGS.some(\n (substring) =>\n // Fields that start with `$` are references to secrets (and not secrets themselves) so keep them in logs because they are useful.\n lowerKey.includes(substring) && !lowerKey.startsWith('$'),\n )\n ) {\n copy[key] = '[REDACTED]';\n } else if (typeof value === 'string' && isJWT(value)) {\n copy[key] = '[REDACTED JWT]';\n } else if (typeof value === 'object') {\n copy[key] = sanitizeFields(value);\n }\n }\n\n return copy;\n}\n\ntry {\n const name = 'todesktop-cli';\n\n let parentDirectory: string;\n const homePath = os.homedir();\n if (process.platform === 'darwin') {\n parentDirectory = path.join(homePath, 'Library', 'Logs', name);\n } else if (process.platform === 'win32') {\n parentDirectory = path.join(\n process.env.APPDATA || path.join(homePath, 'AppData', 'Roaming'),\n name,\n 'logs',\n );\n } else {\n parentDirectory = path.join(\n process.env.XDG_CONFIG_HOME || path.join(homePath, '.config'),\n name,\n 'logs',\n );\n }\n\n fs.mkdirSync(parentDirectory, { recursive: true });\n\n logger = bunyan.createLogger({\n name,\n serializers: {\n scrub: (data: any) => sanitizeFields(data),\n },\n streams: [\n {\n level: 'debug',\n path: path.join(parentDirectory, 'main.log'),\n },\n ],\n });\n} catch (e) {\n // Ignore\n\n const noOp = () => {};\n logger = {\n debug: noOp,\n error: noOp,\n fatal: noOp,\n info: noOp,\n trace: noOp,\n warn: noOp,\n };\n\n try {\n Sentry.captureException(e);\n } catch {\n // Ignore\n }\n}\n\nexport default logger;\n\nexport interface Logger {\n debug: LogFn;\n error: LogFn;\n fatal: LogFn;\n info: LogFn;\n trace: LogFn;\n warn: LogFn;\n}\n\nexport type LogFn = (obj: Error | object | string, ...args: unknown[]) => void;\n", "import {\n getFunctions,\n httpsCallable,\n connectFunctionsEmulator,\n} from 'firebase/functions';\nimport { initializeApp } from 'firebase/app';\nimport getEnvironmentVariables from './getEnvironmentVariables';\n\nconst env = getEnvironmentVariables();\n\nconst app = initializeApp({\n apiKey: env.TODESKTOP_CLI_FIREBASE_API_KEY,\n authDomain: env.TODESKTOP_CLI_FIREBASE_AUTH_DOMAIN,\n databaseURL: env.TODESKTOP_CLI_FIREBASE_DATABASE_URL,\n projectId: env.TODESKTOP_CLI_FIREBASE_PROJECT_ID,\n storageBucket: env.TODESKTOP_CLI_FIREBASE_STORAGE_BUCKET,\n messagingSenderId: env.TODESKTOP_CLI_FIREBASE_MESSAGING_SENDER_ID,\n appId: env.TODESKTOP_CLI_FIREBASE_ID,\n});\n\nconst functions = getFunctions(app);\n\nconst firebaseFunctionsBase = env.TODESKTOP_CLI_FIREBASE_FUNCTIONS_BASE || '';\nif (firebaseFunctionsBase.includes('localhost')) {\n const firebaseUrl = new URL(firebaseFunctionsBase);\n connectFunctionsEmulator(\n functions,\n firebaseUrl.hostname,\n parseInt(firebaseUrl.port),\n );\n}\n\nexport default (functionName) => httpsCallable(functions, functionName);\n", "import {\n IntrospectBreakpointStatus,\n IntrospectShellStatus,\n formatIntrospectionStatus,\n} from '@todesktop/shared';\n\nexport { formatIntrospectionStatus };\n\nexport function getIntrospectionStatusIndicator(\n breakpointStatus?: IntrospectBreakpointStatus,\n shellStatus?: IntrospectShellStatus,\n): string {\n if (shellStatus === 'connected') {\n return '\u25C6';\n }\n\n if (breakpointStatus === 'paused') {\n return '\u23F8';\n }\n\n if (breakpointStatus === 'ready') {\n return '\u2713';\n }\n\n if (breakpointStatus === 'initializing' || shellStatus === 'initializing') {\n return '\u22EF';\n }\n\n if (breakpointStatus === 'finished') {\n return '\u25A0';\n }\n\n if (breakpointStatus === 'error' || shellStatus === 'error') {\n return '\u2717';\n }\n\n return '\u25CB';\n}\n", "import { Box, Text } from 'ink';\nimport PropTypes from 'prop-types';\nimport { useEffect, useState } from 'react';\nimport throttle from 'lodash.throttle';\nimport BuildCompleteMessage from './BuildCompleteMessage';\nimport PlatformProgress from './PlatformProgress';\nimport IntrospectionNotice from './IntrospectionNotice';\nimport { hasBuildKickedOff } from '../utilities/buildStatus';\nimport logForCI from '../utilities/logForCI';\nimport useExit from '../utilities/useExit';\n\nconst logForCIThrottled = throttle(logForCI, 60 * 1000, { trailing: true });\n\nconst BuildProgress = ({ build, onBuildFailure }) => {\n const exit = useExit();\n\n const [{ hasKickedOff }, setState] = useState({\n hasKickedOff: false,\n });\n const platformsNotSkipped = ['windows', 'mac', 'linux'].filter(\n (platform) => !build[platform].shouldSkip,\n );\n\n useEffect(() => {\n setState((previousState) => ({\n ...previousState,\n hasKickedOff: hasBuildKickedOff(build),\n }));\n }, [build]);\n\n useEffect(() => {\n if (build.status === 'failed') {\n onBuildFailure(build.errorMessage);\n } else if (build.status === 'cancelled') {\n setTimeout(exit, 10);\n } else {\n const ciPlatformProgress = platformsNotSkipped.map(\n (platform) =>\n `${platform.charAt(0).toUpperCase() + platform.slice(1)}: ${\n build[platform].progressActivityName\n } (${build[platform].progressPercentage}%)`,\n );\n logForCIThrottled(ciPlatformProgress.join(', '));\n }\n }, [build, exit, onBuildFailure, platformsNotSkipped]);\n\n if (build.status === 'succeeded') {\n return <BuildCompleteMessage build={build} />;\n }\n\n if (build.status === 'cancelled') {\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text>Build cancelled</Text>\n </Box>\n );\n }\n\n if (!hasKickedOff) {\n return null;\n }\n\n return (\n <>\n <IntrospectionNotice build={build} />\n <Box flexDirection=\"column\">\n {platformsNotSkipped.map((platform) => (\n <Box flexDirection=\"column\" key={platform}>\n <PlatformProgress\n activityName={\n build[platform].status === 'failed'\n ? build[platform].errorMessage\n : build[platform].progressActivityName\n }\n activityType={\n build[platform].status === 'failed'\n ? 'error'\n : build[platform].progressActivityType\n }\n downloadUrl={build[platform].standardDownloadUrl}\n percent={build[platform].progressPercentage}\n platform={platform}\n shouldShowReadyPrefix={\n !(build && ['failed', 'succeeded'].includes(build.status))\n }\n />\n </Box>\n ))}\n </Box>\n </>\n );\n};\n\nBuildProgress.propTypes = {\n build: PropTypes.object.isRequired,\n onBuildFailure: PropTypes.func.isRequired,\n};\n\nexport default BuildProgress;\n", "import { Box, Text } from 'ink';\nimport Link from 'ink-link';\nimport PropTypes from 'prop-types';\nimport { Build } from '@todesktop/shared';\nimport { useEffect } from 'react';\nimport logForCI from '../utilities/logForCI';\nimport useExit from '../utilities/useExit';\nimport fixMacUrl from '../utilities/fixMacUrl';\n\nconst BuildCompleteMessage = ({ build }: { build: Build }) => {\n const exit = useExit();\n let url = build.standardUniversalDownloadUrl;\n\n if (process.platform === 'darwin' && build.mac?.standardDownloadUrl) {\n // Otherwise the download link may link to a Intel file when on Apple Silicon\n url = fixMacUrl(build.mac.standardDownloadUrl);\n }\n\n logForCI(`Build complete! ${url}`);\n\n // On build completion, exit with non-error code\n useEffect(() => {\n if (url) {\n // Just to avoid updating state after exiting the React app\n setTimeout(exit, 10);\n }\n }, [exit, url]);\n\n return (\n <Box marginBottom={1}>\n <Text>\n <Text bold>Build complete!</Text>{' '}\n <Link fallback={false} url={url}>\n {url || ''}\n </Link>\n </Text>\n </Box>\n );\n};\n\nBuildCompleteMessage.propTypes = {\n build: PropTypes.object.isRequired,\n};\n\nexport default BuildCompleteMessage;\n", "import isCi from 'is-ci';\nimport logger from './logger';\n\nexport default function logForCI(...args: unknown[]) {\n logger.info({ args }, 'logForCI');\n\n if (isCi || !process.stdin.isTTY) {\n console.info(...args);\n }\n}\n", "/**\n * Fixes the Mac URL by adding the correct architecture to the URL.\n * @param url The URL to fix.\n * @returns The fixed URL.\n */\nexport default function fixMacUrl(url: string) {\n const baseUrl = new URL(url);\n baseUrl.pathname = `${baseUrl.pathname}/zip/${process.arch}`;\n return baseUrl.href;\n}\n", "import PropTypes from 'prop-types';\nimport { Box, Text } from 'ink';\nimport Link from 'ink-link';\nimport fixMacUrl from '../utilities/fixMacUrl';\n\nconst preLabelMaxWidth = 'More info: '.length;\n\nconst getProgressPercentageLabel = (\n percentage: number,\n activityType?: 'error',\n) => {\n let backgroundColor = 'white';\n let color = 'black';\n\n if (activityType === 'error') {\n backgroundColor = 'red';\n } else if (percentage === 100) {\n backgroundColor = 'green';\n color = 'black';\n }\n\n return (\n <>\n <Text backgroundColor={backgroundColor} color={color}>\n {' '}\n {Math.round(percentage).toString().padStart(2, '0')}%{' '}\n </Text>\n <Text> </Text>\n </>\n );\n};\n\nconst PlatformProgress = ({\n activityName,\n activityType,\n downloadUrl,\n percent,\n platform,\n shouldShowReadyPrefix,\n}) => {\n let progressIndicator;\n if (activityType === 'done') {\n if (platform === 'mac') {\n // Otherwise the download link may link to a Intel file when on Apple Silicon\n downloadUrl = fixMacUrl(downloadUrl);\n }\n progressIndicator = (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text>\n {getProgressPercentageLabel(100)}\n {shouldShowReadyPrefix ? 'Ready!' : ''}\n </Text>\n <Link fallback={false} url={downloadUrl}>\n {downloadUrl}\n </Link>\n </Box>\n );\n } else {\n let activityNameToDisplay = activityName.replace(\n /(?:\\r\\n|\\r|\\n)\\s*/g,\n '\u21B5 ',\n );\n if (activityNameToDisplay.length > 64) {\n activityNameToDisplay = `${activityNameToDisplay.substr(0, 61)}...`;\n }\n\n progressIndicator = (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text>\n {['preparation', 'queue'].includes(activityType)\n ? undefined\n : getProgressPercentageLabel(percent, activityType)}\n {activityNameToDisplay}\n {activityType === 'error' ? '' : <Text>...</Text>}\n </Text>\n </Box>\n );\n }\n return (\n <Box>\n <Box width={preLabelMaxWidth}>\n <Text>{platform[0].toUpperCase() + platform.substr(1)}: </Text>\n </Box>\n {progressIndicator}\n </Box>\n );\n};\n\nPlatformProgress.propTypes = {\n activityName: PropTypes.string.isRequired,\n activityType: PropTypes.string.isRequired,\n downloadUrl: PropTypes.string,\n percent: PropTypes.number.isRequired,\n platform: PropTypes.string.isRequired,\n shouldShowReadyPrefix: PropTypes.bool,\n};\n\nexport default PlatformProgress;\n", "import { Box, Text } from 'ink';\nimport { useEffect, useState } from 'react';\nimport { Build } from '@todesktop/shared';\n\ninterface IntrospectionNoticeProps {\n build: Build;\n}\n\nexport default function IntrospectionNotice({\n build,\n}: IntrospectionNoticeProps) {\n const [hasShownNotice, setHasShownNotice] = useState(false);\n\n useEffect(() => {\n if (hasShownNotice) return;\n\n const { introspect } = build;\n if (!introspect) return;\n\n const readyPlatforms = (['mac', 'windows', 'linux'] as const).filter(\n (platform) => {\n const platformData = introspect[platform];\n return (\n platformData?.enabled &&\n (platformData.shellStatus === 'ready' ||\n platformData.shellStatus === 'disconnected')\n );\n },\n );\n\n if (readyPlatforms.length > 0) {\n setHasShownNotice(true);\n }\n }, [build.introspect, hasShownNotice]);\n\n if (!hasShownNotice) {\n return null;\n }\n\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text color=\"green\">\n \uD83D\uDD0E Introspection tunnel available. Run{' '}\n <Text bold>todesktop introspect {build.id}</Text> in another terminal to\n connect.\n </Text>\n </Box>\n );\n}\n", "export const hasBuildKickedOff = (build) => {\n if (!build) {\n return false;\n }\n return build.status && build.status !== 'preparation';\n};\n\n// NOTE: this relies on Firestore solely\nexport const isBuildCancellable = (build) =>\n hasBuildKickedOff(build) && isBuildRunning(build);\n\nexport const isBuildRunning = (build) => {\n if (!build) {\n return false;\n }\n return (\n !['cancelled', 'succeeded'].includes(build.status) &&\n ['linux', 'mac', 'windows'].some((platform) =>\n isPlatformBuildRunning(build[platform]),\n )\n );\n};\n\nexport const isPlatformBuildRunning = (platformBuild) => {\n if (!platformBuild) {\n return false;\n }\n return (\n !platformBuild.shouldSkip && // <-- Noteworthy\n !['cancelled', 'succeeded'].includes(platformBuild.status) &&\n ('failed' !== platformBuild.status ||\n platformBuild.numberOfAttemptedBuilds < 2)\n );\n};\n", "import { Box, Text } from 'ink';\nimport { useEffect } from 'react';\nimport CliError from '../utilities/CliError';\nimport getCliVersion from '../utilities/getCliVersion';\nimport logger from '../utilities/logger';\nimport useExit from '../utilities/useExit';\n\nexport default function ErrorDisplay({\n commandUsed,\n error,\n}: {\n commandUsed?: string;\n error?: unknown;\n}) {\n const exit = useExit();\n\n const normalizedError = CliError.from(error);\n\n logger.error({ error });\n\n // After an error is set, exit\n useEffect(() => {\n if (!error) {\n return;\n }\n // Just to avoid updating state after exiting the React app\n setTimeout(() => exit(normalizedError), 10);\n }, [exit, error, normalizedError]);\n\n return (\n <>\n <Text backgroundColor=\"red\" color=\"white\">\n {' '}\n ERROR{' '}\n </Text>\n <Text>{normalizedError.message}</Text>\n\n <Box flexDirection=\"column\" marginTop={1}>\n {commandUsed ? (\n <Text dimColor color=\"gray\">\n Command: {commandUsed}\n </Text>\n ) : null}\n <Text dimColor color=\"gray\">\n @todesktop/cli: {getCliVersion()}\n </Text>\n <Text dimColor color=\"gray\">\n Node: {process.version}\n </Text>\n <Text dimColor color=\"gray\">\n cwd: {process.cwd()}\n </Text>\n </Box>\n </>\n );\n}\n", "export default class CliError extends Error {\n type: CliErrorType;\n constructor(\n message: string,\n { cause, type = 'error' }: { cause?: Error; type?: CliErrorType } = {},\n ) {\n super(message, { cause });\n this.type = type;\n }\n\n static from(e: unknown, type: CliErrorType = 'error'): CliError {\n if (e instanceof Error) {\n return new CliError(e.message, { cause: e, type });\n } else if (typeof e === 'string') {\n return new CliError(e, { type });\n } else {\n return new CliError(JSON.stringify(e), { type });\n }\n }\n}\n\nexport type CliErrorType = 'build-error' | 'error';\n", "// libs\nimport { Box, Text, useStdin } from 'ink';\nimport isCi from 'is-ci';\nimport { ReactNode, useEffect, useState } from 'react';\nimport { Build } from '../types';\n\n// components\nimport CancelBuild from './CancelBuild';\nimport Footer from './Footer';\nimport Header from './Header';\n\n// utilities\nimport {\n hasBuildKickedOff,\n isBuildCancellable,\n} from '../utilities/buildStatus';\nimport logger from '../utilities/logger';\nimport useInput from '../utilities/useInput';\n\nconst MainLayout = ({\n appId,\n appName,\n appVersion,\n build,\n children,\n commandUsed,\n hasBuildEverFailed,\n}: {\n appId?: string;\n appName: string;\n appVersion?: string;\n build?: Build;\n children?: ReactNode;\n commandUsed?: string;\n hasBuildEverFailed?: boolean;\n}) => {\n const { isRawModeSupported } = useStdin();\n\n const [\n { canCancelBuild, hasKickedOff, isCancellingBuild, wasCtrlCPressed },\n setState,\n ] = useState({\n canCancelBuild: null,\n hasKickedOff: false,\n isCancellingBuild: false,\n wasCtrlCPressed: false,\n });\n\n useEffect(() => {\n setState((previousState) => ({\n ...previousState,\n hasKickedOff: hasBuildKickedOff(build),\n }));\n }, [build]);\n\n useEffect(() => {\n setState((previousState) => ({\n ...previousState,\n canCancelBuild:\n !isCi &&\n isRawModeSupported &&\n !isCancellingBuild &&\n isBuildCancellable(build),\n }));\n }, [build, isCancellingBuild, isRawModeSupported]);\n\n useInput(\n async (_input, key) => {\n if (key.escape && canCancelBuild) {\n logger.debug('MainLayout component: esc pressed, cancelling build');\n\n setState((previousState) => ({\n ...previousState,\n isCancellingBuild: true,\n }));\n }\n },\n {},\n {\n onCtrlCPressed: () => {\n setState((previousState) => ({\n ...previousState,\n wasCtrlCPressed: true,\n }));\n },\n },\n );\n\n return (\n <>\n <Header build={build} name={appName} version={appVersion} />\n\n {isCancellingBuild ? (\n <Box flexDirection=\"column\" marginBottom={1}>\n <CancelBuild appId={appId} commandUsed={commandUsed} id={build.id} />\n </Box>\n ) : (\n children\n )}\n\n <Footer\n hasBuildEverFailed={hasBuildEverFailed}\n shouldShowCancelBuildInstructions={canCancelBuild && !wasCtrlCPressed}\n uiUrl={build ? build.url : null}\n />\n\n {wasCtrlCPressed && hasKickedOff ? (\n <>\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color=\"gray\">\n The build will continue in the background. To view it, run:\n </Text>\n </Box>\n <Box>\n <Text bold color=\"gray\">\n todesktop builds {build.id}\n </Text>\n </Box>\n </>\n ) : null}\n </>\n );\n};\n\nexport default MainLayout;\n", "// libs\nimport { Text } from 'ink';\nimport { ReactNode, useEffect, useState } from 'react';\n\n// components\nimport ErrorDisplay from './ErrorDisplay';\n\n// utils\nimport getCallableFirebaseFunction from '../utilities/getCallableFirebaseFunction';\nimport logForCI from '../utilities/logForCI';\nimport logger from '../utilities/logger';\nimport useExit from '../utilities/useExit';\n\nconst cancelBuild = getCallableFirebaseFunction('cancelBuild');\n\nconst CancelBuild = ({\n appId,\n children: postCancelContents,\n commandUsed,\n id,\n}: {\n appId: string;\n children?: ReactNode;\n commandUsed: string;\n id: string;\n}) => {\n logger.debug({ appId, buildId: id }, 'CancelBuild component: render');\n\n const exit = useExit();\n const [\n { arbitraryMessageComponent, error, hasCompleted, hasStarted },\n setState,\n ] = useState({\n arbitraryMessageComponent: null,\n error: null,\n hasCompleted: false,\n hasStarted: false,\n });\n\n useEffect(() => {\n if (hasCompleted || hasStarted) {\n return;\n }\n\n setState((previousState) => ({ ...previousState, hasStarted: true }));\n logForCI('Cancelling build...');\n cancelBuild({ appId, buildId: id })\n .then((result) => {\n logger.debug(\n { appId, buildId: id, result },\n 'CancelBuild component: cancellation request complete',\n );\n setState((previousState) => ({ ...previousState, hasCompleted: true }));\n })\n .catch((e) => {\n logger.debug(\n { appId, buildId: id, code: e.code },\n 'CancelBuild component: cancellation request failed',\n );\n logger.error(e);\n const stateUpdates = {\n arbitraryMessageComponent: undefined,\n error: undefined,\n hasCompleted: true,\n };\n\n if (e.code === 'internal') {\n stateUpdates.error = e;\n } else {\n stateUpdates.arbitraryMessageComponent = (\n <Text>\n <Text color=\"red\">Cannot cancel build ({id}).</Text> {e.message}\n </Text>\n );\n }\n\n setState((prevState) => ({\n ...prevState,\n ...stateUpdates,\n }));\n });\n }, [appId, id, hasStarted, hasCompleted]);\n\n // Exit when done, unless there are custom contents to display\n useEffect(() => {\n if (hasCompleted && !postCancelContents) {\n logger.debug(\n 'CancelBuild component: exiting now that build is cancelled',\n );\n exit();\n }\n }, [postCancelContents, exit, hasCompleted]);\n\n if (error) {\n error.message = `Failed to cancel build (${id}). ${error.message}`;\n return <ErrorDisplay commandUsed={commandUsed} error={error} />;\n }\n\n if (arbitraryMessageComponent) {\n return arbitraryMessageComponent;\n }\n\n if (hasCompleted) {\n return postCancelContents ? (\n <>{postCancelContents}</>\n ) : (\n <Text>Build cancelled</Text>\n );\n }\n\n return <Text>Cancelling build ({id})...</Text>;\n};\n\nexport default CancelBuild;\n", "import { Box, Text } from 'ink';\nimport Link from 'ink-link';\nimport PropTypes from 'prop-types';\n\nconst Footer = ({\n hasBuildEverFailed,\n shouldShowCancelBuildInstructions,\n uiUrl,\n}) => {\n if (!uiUrl) {\n return null;\n }\n\n let buildFailedMessage;\n if (hasBuildEverFailed) {\n buildFailedMessage = <Text color=\"red\">An error has occurred. </Text>;\n }\n\n return (\n <Box flexDirection=\"column\">\n <Box flexDirection=\"column\">\n <Text bold>{buildFailedMessage}See web UI for more information: </Text>\n <Text>\n <Link fallback={false} url={uiUrl}>\n {uiUrl}\n </Link>\n </Text>\n </Box>\n {shouldShowCancelBuildInstructions ? (\n <Text color=\"gray\">\n <Text bold>[esc]:</Text> cancel build\n </Text>\n ) : null}\n </Box>\n );\n};\n\nFooter.propTypes = {\n hasBuildEverFailed: PropTypes.bool,\n shouldShowCancelBuildInstructions: PropTypes.bool,\n uiUrl: PropTypes.string,\n};\n\nexport default Footer;\n", "import { Box, Text } from 'ink';\nimport PropTypes from 'prop-types';\n\nconst getText = (build, name, version) => {\n const suffix = name + (version ? ` v${version}` : '');\n\n if (build && ['cancelled', 'succeeded', 'failed'].includes(build.status)) {\n if (build.status === 'succeeded') {\n return <Text>\u2705 {suffix}</Text>;\n } else if (build.status === 'failed') {\n return <Text>\u274C {suffix}</Text>;\n } else if (build.status === 'cancelled') {\n return (\n <Text>\n <Text bold color=\"gray\">\n X\n </Text>{' '}\n {suffix}\n </Text>\n );\n }\n } else {\n return <Text>{suffix}</Text>;\n }\n};\n\nconst Header = ({ build, name, version }) => (\n <Box marginBottom={1}>{getText(build, name, version)}</Box>\n);\n\nHeader.propTypes = {\n build: PropTypes.object,\n name: PropTypes.string.isRequired,\n version: PropTypes.string,\n};\n\nexport default Header;\n", "import { Box, Text } from 'ink';\nimport ProgressBar from './ProgressBar';\nimport PropTypes from 'prop-types';\n\nconst Preparation = ({ progressPercentage, stageLabel, uploadedSize }) => {\n return (\n <Box marginBottom={1}>\n <Text>{stageLabel}: </Text>\n <Box flexDirection=\"column\">\n <ProgressBar left={11} percent={progressPercentage} />\n {uploadedSize ? <Text>{uploadedSize}</Text> : undefined}\n </Box>\n </Box>\n );\n};\n\nPreparation.propTypes = {\n progressPercentage: PropTypes.number.isRequired,\n stageLabel: PropTypes.string.isRequired,\n uploadedSize: PropTypes.string,\n};\n\nexport default Preparation;\n", "import PropTypes from 'prop-types';\nimport Gradient from 'ink-gradient';\nimport Bar from '../../../libs/ink-progress-bar';\n\ninterface ProgressBarProps {\n left?: number;\n right?: number;\n percent: number;\n}\n\nconst ProgressBar = ({ left, right, percent }: ProgressBarProps) => (\n <Gradient colors={['gray', 'white']}>\n <Bar left={left} right={right} percent={percent} />\n </Gradient>\n);\n\nProgressBar.propTypes = {\n left: PropTypes.number,\n right: PropTypes.number,\n // 0 -> 1\n percent: PropTypes.number.isRequired,\n};\n\nexport default ProgressBar;\n", "/**\n * Ported from https://github.com/brigand/ink-progress-bar/blob/master/src/index.js\n * `ink-progress-bar` doesn't list react or ink as a direct dependency which messes up\n * installation for users of yarn v2+.\n */\nimport { Text } from 'ink';\n\nconst Bar = ({\n percent = 1,\n columns = 0,\n left = 0,\n right = 0,\n character = '\u2588',\n rightPad = false,\n ...rest\n}: {\n percent?: number;\n columns?: number;\n left?: number;\n right?: number;\n character?: string;\n rightPad?: boolean;\n}) => {\n const getString = () => {\n const screen = columns || process.stdout.columns || 80;\n const space = screen - right - left;\n const max = Math.min(Math.floor(space * percent), space);\n const chars = character.repeat(max);\n\n if (!rightPad) {\n return chars;\n }\n\n return chars + ' '.repeat(space - max);\n };\n\n return <Text {...rest}>{getString()}</Text>;\n};\n\nexport default Bar;\n", "// libs\n\nimport axios from 'axios';\nimport prettyBytes from 'pretty-bytes';\n\n// utils\nimport { currentUser } from '../../../utilities/firestore';\nimport logForCI from '../../../utilities/logForCI';\nimport postToFirebaseFunction from '../../../utilities/postToFirebaseFunction';\nimport getProjectConfig from '../../../utilities/projectConfig/getProjectConfig';\nimport shouldExitOnBuildFailure from '../../../utilities/shouldExitOnBuildFailure';\nimport getAppPkgJson from './getPackageJson';\nimport getVersionControlInfo from './getVersionControlInfo';\nimport spyBuild from './spyBuild';\nimport { BuildFlags, BuildState } from './types';\nimport uploadApplicationSource from './uploadApplicationSource';\n\nexport default async function runBuild({\n configPath,\n updateState,\n flags,\n}: {\n configPath?: string;\n flags: BuildFlags;\n updateState: (state: Partial<BuildState>) => void;\n}) {\n logForCI('Getting application information...');\n\n if (flags.breakpointPlan) {\n updateState({ breakpointPlan: flags.breakpointPlan });\n }\n const primaryUserId = currentUser()?.uid;\n\n // This will throw if validation fails or project root can not be found:\n const { config, unprocessedConfig } = getProjectConfig(configPath, {\n build: flags,\n });\n const appId = config.id;\n const appPkgJson = getAppPkgJson({ config });\n\n const buildObserver = spyBuild();\n buildObserver.onUpdate(({ build }) => updateState({ build }));\n\n updateState({\n appId,\n appPkg: appPkgJson,\n onUnmount: () => buildObserver.unsubscribe(),\n preparationStageLabel: 'Preparing',\n preparationProgress: 0.02,\n state: 'preparing',\n });\n logForCI('Preparing...');\n\n // Create build in Firebase\n let buildId: string;\n try {\n const prepareResult = await postToFirebaseFunction('prepareNewBuild', {\n appPkgName: appPkgJson.name,\n appPkgProductName: appPkgJson.productName,\n appVersion: appPkgJson.version,\n id: config.id,\n onBuildFinishedWebhook: flags.onBuildFinishedWebhook,\n projectConfig: unprocessedConfig,\n shouldCodeSign: flags.shouldCodeSign !== false,\n shouldRelease: false,\n userId: primaryUserId,\n versionControlInfo: await getVersionControlInfo(config.appPath),\n introspect: flags.introspect,\n breakpoints: flags.breakpointPlan?.breakpoints,\n idToken: await currentUser()?.getIdToken(),\n });\n buildId = prepareResult.appData.meta.currentBuildProgress.id;\n\n buildObserver.subscribe({ appId, buildId, userId: prepareResult.userId });\n await buildObserver.whenFirstUpdate();\n } catch (e) {\n throw addErrorMessage(e, 'Failed while preparing new build');\n }\n\n logForCI(`Retrieved build ID: ${buildId}`);\n updateState({\n preparationProgress: 0.05,\n preparationStageLabel: 'Uploading',\n });\n logForCI('Uploading...');\n\n let sourceArchiveDetails: unknown;\n try {\n sourceArchiveDetails = await uploadApplicationSource({\n appId,\n appPkgJson,\n buildId,\n config,\n onProgress(progress: number, uploadedSize?: number) {\n // Upload is treated as 95% of preparation\n const preparationState = {\n preparationProgress: 0.05 + (progress / 100) * 0.95,\n preparationUploadedSize: '',\n };\n\n if (uploadedSize) {\n preparationState.preparationUploadedSize = prettyBytes(uploadedSize);\n }\n\n updateState(preparationState);\n },\n });\n } catch (e) {\n throw addErrorMessage(e, 'Failed while uploading application source');\n }\n\n updateState({ state: 'building' });\n logForCI('Kicking off build...');\n\n try {\n await postToFirebaseFunction('kickOffBuild', {\n appBuilderLibVersion: config.appBuilderLibVersion,\n appId,\n appPkgName: appPkgJson.name,\n appVersion: appPkgJson.version,\n buildId,\n idToken: await currentUser()?.getIdToken(),\n linuxImageVersion: config.linux?.imageVersion,\n nodeVersion: config.nodeVersion,\n npmVersion: config.npmVersion,\n pnpmVersion: config.pnpmVersion,\n sourceArchiveDetails,\n userId: primaryUserId,\n });\n } catch (e) {\n throw addErrorMessage(e, 'Failed while kicking off build');\n }\n\n if (flags.exitAfterUploading) {\n updateState({ state: 'exit-after-uploading' });\n return;\n }\n\n const build = await buildObserver.whenSettled();\n if (build?.status === 'failed' && shouldExitOnBuildFailure(build)) {\n updateState({ state: 'build-failed' });\n }\n}\n\nfunction addErrorMessage(e: unknown, message: string): Error {\n let originalMessage = '';\n if (axios.isAxiosError(e) && e.response?.data?.message) {\n originalMessage = e.response.data.message;\n } else if (e instanceof Error) {\n originalMessage = e.message;\n } else if (e && typeof e === 'object') {\n originalMessage = JSON.stringify(e);\n } else {\n originalMessage = String(e);\n }\n\n const newError = new Error(`${message}; ${originalMessage}`);\n if (e instanceof Error) {\n newError.stack = e.stack;\n }\n\n return newError;\n}\n", "import axios from 'axios';\nimport getEnvironmentVariables from './getEnvironmentVariables';\nimport logger from './logger';\n\nconst { TODESKTOP_CLI_FIREBASE_FUNCTIONS_BASE } = getEnvironmentVariables();\n\nexport default async function postToFirebaseFunction(\n functionName: string,\n body = {},\n config = {},\n) {\n logger.debug(\n { scrub: { functionName, body, config } },\n 'postToFirebaseFunction',\n );\n\n let baseUrl = TODESKTOP_CLI_FIREBASE_FUNCTIONS_BASE;\n if (!baseUrl.endsWith('/')) {\n baseUrl += '/';\n }\n\n try {\n const response = await axios.post(\n `${baseUrl}${functionName}`,\n body,\n config,\n );\n\n logger.debug(\n { scrub: { responseData: response.data } },\n 'postToFirebaseFunction: success',\n );\n return response.data;\n } catch (e) {\n logger.error({ error: e }, 'postToFirebaseFunction: error');\n throw e;\n }\n}\n", "import findUp from 'find-up';\nimport { existsSync } from 'fs';\nimport { dirname, resolve } from 'path';\nimport { BuildFlags } from '../../commands/build/utilities/types';\nimport { ProjectConfig } from '../../types';\nimport logger from '../logger';\nimport loadConfig from './loadConfig';\nimport resolveConfigPaths from './resolveConfigPaths';\nimport validateConfig from './validateConfig';\nimport computeFullProjectConfig from './computeFullProjectConfig';\n\nexport default function getProjectConfig(\n configPath?: string,\n flags?: { build?: Pick<BuildFlags, 'ignoreExtendsErrors'> },\n): {\n config: ProjectConfig;\n unprocessedConfig: ProjectConfig;\n projectRoot: string;\n} {\n // If no config path is provided, we'll try to find one\n if (!configPath) {\n logger.debug('No config path provided, searching for one');\n configPath = findUp.sync([\n 'todesktop.json',\n 'todesktop.js',\n 'todesktop.ts',\n ]);\n if (!configPath) {\n throw new Error(\n 'Can not find todesktop.json, todesktop.js, or todesktop.ts in this folder or any parent folders',\n );\n }\n } else {\n configPath = resolve(process.cwd(), configPath);\n\n // If the config path is provided\n if (!existsSync(configPath)) {\n logger.error('Provided config path does not exist');\n throw new Error(`Config file not found at ${configPath}`);\n }\n }\n\n const projectRoot = dirname(configPath);\n\n // This will throw if it's not valid JSON\n const partialConfig = loadConfig(configPath);\n\n // compute the full project config\n const config = computeFullProjectConfig(partialConfig, projectRoot, flags);\n\n // This will throw if invalid\n validateConfig({ config, projectRoot });\n\n const result = resolveConfigPaths({ config, projectRoot });\n\n // Used by `tdutils cli`\n if (process.env.TODESKTOP_CLI_APP_ID) {\n result.id = process.env.TODESKTOP_CLI_APP_ID;\n }\n\n return { config: result, unprocessedConfig: config, projectRoot };\n}\n", "// This is its own file just so we can mock it more easily\nimport { extname } from 'path';\nimport { PartialProjectConfig } from '../../types';\nimport loadTypeScriptConfig from './loadTypeScriptConfig';\n\nexport default function loadConfig(configPath: string): PartialProjectConfig {\n const extension = extname(configPath);\n\n if (extension === '.ts') {\n return loadTypeScriptConfig(configPath);\n }\n\n // For .json and .js files, use the standard require\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require(configPath);\n}\n", "/* eslint-disable @typescript-eslint/no-require-imports */\n\nimport { resolve } from 'path';\nimport { PartialProjectConfig } from '../../types';\nimport logger from '../logger';\n\n/**\n * Loads and compiles a TypeScript configuration file using the user's local TypeScript installation\n */\nexport default function loadTypeScriptConfig(\n configPath: string,\n): PartialProjectConfig {\n const projectRoot = process.cwd();\n\n try {\n logger.debug(`Attempting to load TypeScript config from: ${configPath}`);\n\n // Try to resolve TypeScript from the user's project\n let typescript: typeof import('typescript');\n try {\n // First try to require from the user's project directory\n const tsPath = resolve(projectRoot, 'node_modules', 'typescript');\n typescript = require(tsPath);\n logger.debug(`Found TypeScript in user's project at: ${tsPath}`);\n } catch {\n // Fall back to globally installed TypeScript or our dev dependency\n try {\n typescript = require('typescript');\n logger.debug('Using globally available TypeScript installation');\n } catch {\n throw new Error(\n `TypeScript is required to load .ts configuration files but was not found. ` +\n `Please install TypeScript in your project: npm install --save-dev typescript`,\n );\n }\n }\n\n // Read the TypeScript file\n\n const fs = require('fs');\n const sourceCode = fs.readFileSync(configPath, 'utf8');\n\n // Compile TypeScript to JavaScript\n const result = typescript.transpile(sourceCode, {\n target: typescript.ScriptTarget.ES2018,\n module: typescript.ModuleKind.CommonJS,\n moduleResolution: typescript.ModuleResolutionKind.NodeJs,\n esModuleInterop: true,\n allowSyntheticDefaultImports: true,\n resolveJsonModule: true,\n declaration: false,\n sourceMap: false,\n });\n\n // Create a temporary module to evaluate the compiled JavaScript\n const module = { exports: {} };\n const moduleWrapper = new Function(\n 'module',\n 'exports',\n 'require',\n '__filename',\n '__dirname',\n result,\n );\n\n // Execute the compiled code\n moduleWrapper(\n module,\n module.exports,\n (id: string) => {\n // Custom require function that resolves relative to the config file\n if (id.startsWith('.')) {\n return require(resolve(configPath, '..', id));\n }\n return require(id);\n },\n configPath,\n resolve(configPath, '..'),\n );\n\n // Extract the configuration\n const config = (module.exports as any).default || module.exports;\n\n if (!config || typeof config !== 'object') {\n throw new Error(\n `TypeScript configuration file must export a configuration object. ` +\n `Received: ${typeof config}`,\n );\n }\n\n logger.debug('Successfully loaded and compiled TypeScript configuration');\n return config as PartialProjectConfig;\n } catch (error) {\n logger.error(\n `Failed to load TypeScript configuration from ${configPath}:`,\n error,\n );\n\n if (error instanceof Error) {\n // Provide more helpful error messages for common issues\n if (error.message.includes('Cannot find module')) {\n throw new Error(\n `Failed to load TypeScript configuration: ${error.message}. ` +\n `Make sure all imported modules are installed.`,\n );\n } else if (error.message.includes('TypeScript is required')) {\n throw error; // Re-throw our custom TypeScript missing error\n } else {\n throw new Error(\n `Failed to compile TypeScript configuration: ${error.message}. ` +\n `Please check your todesktop.ts file for syntax errors.`,\n );\n }\n }\n\n throw error;\n }\n}\n", "import * as path from 'path';\nimport { ProjectConfig } from '../../types';\n\nexport default function resolveConfigPaths({\n config,\n projectRoot,\n}: {\n config: ProjectConfig;\n projectRoot: string;\n}): ProjectConfig {\n const appRoot = config.appPath\n ? path.isAbsolute(config.appPath)\n ? config.appPath\n : path.join(projectRoot, config.appPath)\n : projectRoot;\n\n const transformIfExists = (value, transformer) =>\n value ? transformer(value) : undefined;\n const resolvePath = (filePath) =>\n path.isAbsolute(filePath) ? filePath : path.join(projectRoot, filePath);\n\n const result = {\n ...config,\n appPath: appRoot,\n icon: resolvePath(config.icon),\n };\n\n if (config.extraContentFiles) {\n result.extraContentFiles = transformIfExists(\n config.extraContentFiles,\n (extraContentFiles) =>\n extraContentFiles.map((extraContentFile) => ({\n ...extraContentFile,\n from: resolvePath(extraContentFile.from),\n })),\n );\n }\n\n if (config.extraResources) {\n result.extraResources = transformIfExists(\n config.extraResources,\n (extraResources) =>\n extraResources.map((extraResource) => ({\n ...extraResource,\n from: resolvePath(extraResource.from),\n })),\n );\n }\n\n if (config.linux) {\n result.linux = { ...config.linux };\n\n if (config.linux.icon) {\n result.linux.icon = resolvePath(config.linux.icon);\n }\n }\n\n if (config.mac) {\n result.mac = { ...config.mac };\n\n if (config.mac.entitlements) {\n result.mac.entitlements = resolvePath(config.mac.entitlements);\n }\n\n if (config.mac.entitlementsInherit) {\n result.mac.entitlementsInherit = resolvePath(\n config.mac.entitlementsInherit,\n );\n }\n\n if (config.mac.requirements) {\n result.mac.requirements = resolvePath(config.mac.requirements);\n }\n\n if (config.mac.icon) {\n result.mac.icon = resolvePath(config.mac.icon);\n }\n }\n\n if (config.mas) {\n result.mas = { ...config.mas };\n\n if (config.mas.entitlements) {\n result.mas.entitlements = resolvePath(config.mas.entitlements);\n }\n\n if (config.mas.entitlementsInherit) {\n result.mas.entitlementsInherit = resolvePath(\n config.mas.entitlementsInherit,\n );\n }\n\n if (config.mas.provisioningProfile) {\n result.mas.provisioningProfile = resolvePath(\n config.mas.provisioningProfile,\n );\n }\n }\n\n if (config.dmg) {\n if (config.dmg.background) {\n result.dmg.background = resolvePath(config.dmg.background);\n }\n }\n\n if (config.windows) {\n result.windows = { ...config.windows };\n\n if (config.windows.icon) {\n result.windows.icon = resolvePath(config.windows.icon);\n }\n }\n\n return result;\n}\n", "import Ajv from 'ajv';\nimport addFormats from 'ajv-formats';\nimport betterAjvErrors from 'better-ajv-errors';\nimport { ProjectConfig } from '../../types';\nimport addCustomKeywords from './addCustomKeywords';\nimport getFullSchema from './schema/full';\n\nexport default function validateConfig({\n config,\n projectRoot,\n}: {\n config: ProjectConfig;\n projectRoot: string;\n}) {\n const context = { projectRoot };\n const schema = getFullSchema(context);\n\n const ajv = new Ajv({ allErrors: true });\n addFormats(ajv);\n addCustomKeywords(ajv, context);\n const validate = ajv.compile(schema);\n\n if (config.productName) {\n throw new Error(\n `todesktop.json invalid.\n\nThe \"productName\" property is no longer supported in todesktop.json. Please remove it and add it to your app's package.json instead.\n\nWe made this change because Electron also uses the \"productName\" if it exists in your app's package.json. If you do not add it to your package.json, your app name will default to the value of the \"name\" property in your package.json.`,\n );\n }\n\n if (!validate(config)) {\n const output = betterAjvErrors(schema, config, validate.errors, {\n indent: 2,\n });\n\n throw new Error(\n `todesktop.json invalid. \\nLearn more here: https://www.npmjs.com/package/@todesktop/cli#project-configuration-todesktopjson \\n\\n${output}`,\n );\n }\n}\n", "/*\n See https://ajv.js.org/keywords.html\n*/\nimport Ajv, {\n FuncKeywordDefinition,\n SchemaValidateFunction,\n ValidationError,\n} from 'ajv';\nimport emailRegex from 'email-regex';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport parseAuthor from 'parse-author';\nimport * as semver from 'semver';\nimport validatePackageJSON from './validatePackageJSON';\nimport semverValidRange from 'semver/ranges/valid';\n\nexport default (ajv: Ajv, context) => {\n const addKeyword = (def: FuncKeywordDefinition) => {\n const validate: SchemaValidateFunction = (schema, data) => {\n try {\n return (def.validate as SchemaValidateFunction)(schema, data);\n } catch (e) {\n if (e instanceof ValidationError) {\n validate.errors = e.errors;\n return false;\n }\n\n throw e;\n }\n };\n\n ajv.addKeyword({ ...def, validate });\n };\n\n addKeyword({\n keyword: 'validSemver',\n type: 'string',\n validate: (_schema, data) => {\n if (!semverValidRange(data)) {\n throw new ValidationError([\n {\n keyword: 'validSemver',\n message: `${data} must be a valid semantic version or version range`,\n },\n ]);\n }\n\n return true;\n },\n });\n\n // validate that dependencies object doesn't contain packageNames in the blacklist\n addKeyword({\n keyword: 'excludedDependencies',\n validate: (schema, data) => {\n const matchingPackages = schema.blacklist.filter(\n (packageName) => data[packageName],\n );\n\n if (matchingPackages.length) {\n throw new ValidationError([\n {\n keyword: 'Dependency',\n message: `${matchingPackages.join(', ')} should not be in ${\n schema.dependencyKey\n }`,\n instancePath: `/${schema.dependencyKey}`,\n },\n ]);\n }\n\n return true;\n },\n });\n\n // TODO: Remove if isn't used\n addKeyword({\n keyword: 'email',\n type: 'string',\n validate: (_schema, data) => {\n if (!emailRegex({ exact: true }).test(data)) {\n throw new ValidationError([\n {\n keyword: 'email',\n message: 'invalid',\n },\n ]);\n }\n return true;\n },\n });\n\n addKeyword({\n keyword: 'file',\n type: 'string',\n validate: (schema, data) => {\n const mustBeDirectory =\n schema.mustBeDirectory || schema.mustBeElectronApp;\n\n // Value is empty\n if (!data.trim().length) {\n if (schema.isOptional) {\n return true;\n }\n\n throw new ValidationError([\n {\n keyword: schema.mustBeDirectory ? 'Directory' : 'File',\n message: 'is empty',\n },\n ]);\n }\n\n const filePath = path.isAbsolute(data)\n ? data\n : path.join(schema.from, data);\n\n // Isn't in project\n if (path.relative(schema.from, filePath).startsWith('..')) {\n throw new ValidationError([\n {\n keyword: mustBeDirectory ? 'Directory' : 'File',\n message: `is not in project (${filePath})`,\n },\n ]);\n }\n\n // Extension isn't allowed\n if (\n schema.extensions &&\n !schema.extensions.includes(path.extname(filePath).substr(1))\n ) {\n throw new ValidationError([\n {\n keyword: 'File extension',\n message: `invalid. ${path.extname(data)} Must be${\n schema.extensions > 1 ? 'one of the following:' : ''\n } \"${schema.extensions.join('\", \"')}\"`,\n },\n ]);\n }\n\n // Doesn't exist\n if (!fs.existsSync(filePath)) {\n throw new ValidationError([\n {\n keyword: mustBeDirectory ? 'Directory' : 'File',\n message: `does not exist (${filePath})`,\n },\n ]);\n }\n\n const stats = fs.statSync(filePath);\n\n if (mustBeDirectory && stats.isFile()) {\n throw new ValidationError([\n {\n keyword: 'Directory',\n message: `must be a directory, not a file (${filePath})`,\n },\n ]);\n } else if (schema.mustBeFile && stats.isDirectory()) {\n throw new ValidationError([\n {\n keyword: 'File',\n message: `must be a file, not a directory (${filePath})`,\n },\n ]);\n }\n\n if (schema.mustBeElectronApp) {\n const appRoot = path.resolve(filePath);\n const pkgPath = path.join(appRoot, 'package.json');\n\n if (!fs.existsSync(pkgPath)) {\n throw new ValidationError([\n {\n keyword: 'App',\n message: `invalid. There is no package.json at ${pkgPath}`,\n },\n ]);\n }\n\n let pkg;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n pkg = require(pkgPath);\n } catch {\n throw new ValidationError([\n {\n keyword: 'App',\n message: `invalid. Invalid JSON in package.json (${pkgPath})`,\n },\n ]);\n }\n\n context.projectRoot = appRoot;\n // This throws and bubbles all the way up to the user\n validatePackageJSON(pkg, pkgPath, context);\n\n // Validate that either an index.js or valid \"main\" property exists\n const mainFilePath = pkg.main;\n if (mainFilePath) {\n const resolvedMainFilePath = path.join(appRoot, mainFilePath);\n if (!fs.existsSync(resolvedMainFilePath)) {\n throw new ValidationError([\n {\n keyword: 'App',\n message: `invalid. The \"main\" file specified in your package.json (${mainFilePath}) does not exist (${resolvedMainFilePath})`,\n },\n ]);\n }\n } else if (!fs.existsSync(path.join(appRoot, 'index.js'))) {\n throw new ValidationError([\n {\n keyword: 'App',\n message:\n 'invalid. There is neither a \"main\" property in your package.json nor an index.js at the root of your app',\n },\n ]);\n }\n }\n\n return true;\n },\n errors: true,\n });\n\n addKeyword({\n keyword: 'npmAuthor',\n validate: (_schema, data) => {\n const dataType = typeof data;\n if (dataType === 'undefined') {\n return true;\n } else if (dataType === 'string') {\n const parsedAuthor = parseAuthor(data);\n if (!parsedAuthor || !parsedAuthor.email) {\n throw new ValidationError([\n {\n keyword: 'author',\n message:\n 'invalid. If you\\'re using a string, it must look something like \"Barney Rubble <b@rubble.com>\", see https://docs.npmjs.com/files/package.json#people-fields-author-contributors',\n },\n ]);\n }\n } else if (dataType === 'object') {\n if (typeof data.name === 'undefined') {\n throw new ValidationError([\n {\n keyword: 'author',\n message: `invalid. \"name\" property is missing.`,\n },\n ]);\n } else {\n if (typeof data.name !== 'string') {\n throw new ValidationError([\n {\n keyword: 'author',\n message: `.name invalid. It must be a string`,\n },\n ]);\n }\n\n if (typeof data.email === 'undefined') {\n throw new ValidationError([\n {\n keyword: 'author',\n message: `invalid. \"email\" property is missing.`,\n },\n ]);\n } else if (typeof data.email === 'string') {\n if (!emailRegex({ exact: true }).test(data.email)) {\n throw new ValidationError([\n {\n keyword: 'author',\n message: `.email invalid. It does not look like an email.`,\n },\n ]);\n }\n } else {\n throw new ValidationError([\n {\n keyword: 'author',\n message: `.email invalid. It must be a string.`,\n },\n ]);\n }\n }\n } else {\n // Neither object nor string\n throw new ValidationError([\n {\n keyword: 'author',\n message:\n 'invalid. It must either be an object or string. See https://docs.npmjs.com/files/package.json#people-fields-author-contributors',\n },\n ]);\n }\n\n return true;\n },\n errors: true,\n });\n\n addKeyword({\n keyword: 'semanticVersion',\n type: 'string',\n validate: (schema, data) => {\n const keyword =\n (schema.packageName ? `${schema.packageName} ` : '') + 'version';\n\n if (!(semver.valid(data) || semver.validRange(data))) {\n throw new ValidationError([\n {\n keyword,\n message:\n 'invalid. It must be a semantic version (see https://semver.org/)',\n },\n ]);\n }\n\n if (\n schema.mustBeExact &&\n (data.startsWith('~') || data.startsWith('^'))\n ) {\n throw new ValidationError([\n {\n keyword,\n message:\n 'invalid. It must be an exact version. Good: 9.0.0. Bad: ^9.0.0',\n },\n ]);\n }\n return true;\n },\n });\n};\n", "import Ajv from 'ajv';\nimport addFormats from 'ajv-formats';\nimport betterAjvErrors from 'better-ajv-errors';\nimport addCustomKeywords from './addCustomKeywords';\nimport getPackageJsonSchema from './schema/packageJSON';\n\nexport default (pkg, pkgPath, context) => {\n const ajv = new Ajv({ allErrors: true });\n addFormats(ajv);\n addCustomKeywords(ajv, context);\n const schema = getPackageJsonSchema(context);\n const validate = ajv.compile(schema);\n if (!validate(pkg)) {\n const output = betterAjvErrors(schema, pkg, validate.errors, {\n indent: 2,\n });\n\n const error = new Error(`package.json invalid (${pkgPath}); \\n${output}`);\n (error as any).isValidationError = true;\n // This throws and bubbles all the way up to the user\n throw error;\n }\n};\n", "export default (context) => {\n return {\n type: 'object',\n required: [\n 'author',\n 'dependencies',\n 'devDependencies',\n 'homepage',\n 'name',\n 'version',\n ],\n properties: {\n author: {\n npmAuthor: {},\n },\n dependencies: {\n type: 'object',\n required: ['@todesktop/runtime'],\n // custom keyword that checks package names aren't included in dependencies\n excludedDependencies: {\n dependencyKey: 'dependencies',\n blacklist: ['@todesktop/cli'],\n },\n properties: {\n '@todesktop/runtime': {\n type: 'string',\n },\n },\n },\n devDependencies: {\n type: 'object',\n required: ['electron'],\n properties: {\n electron: {\n oneOf: [\n {\n type: 'string',\n semanticVersion: {\n packageName: 'electron',\n mustBeExact: true,\n },\n },\n {\n type: 'string',\n pattern: '^catalog:',\n },\n ],\n },\n },\n },\n name: {\n type: 'string',\n minLength: 1,\n },\n scripts: {\n type: 'object',\n properties: {\n 'todesktop:beforeInstall': {\n type: 'string',\n file: {\n from: context.projectRoot,\n mustBeFile: true,\n },\n },\n 'todesktop:beforeBuild': {\n type: 'string',\n file: {\n from: context.projectRoot,\n mustBeFile: true,\n },\n },\n 'todesktop:afterPack': {\n type: 'string',\n file: {\n from: context.projectRoot,\n mustBeFile: true,\n },\n },\n },\n },\n version: {\n type: 'string',\n semanticVersion: {},\n },\n },\n };\n};\n", "{\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"if\": {\n \"required\": [\"extends\"]\n },\n \"then\": {\n \"required\": [\"id\"]\n },\n \"else\": {\n \"required\": [\"id\", \"icon\", \"schemaVersion\"]\n },\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\",\n \"description\": \"To enable JSON validation and IntelliSense for your `todesktop.json` file in compatible code editors, your editor needs to know where the schema file is located. You can add a `$schema` property to the top of your `todesktop.json` file, pointing to a version of the schema. This can be a local path or a hosted URL.\",\n \"examples\": [\n \"https://unpkg.com/@todesktop/cli@1.12.5/schemas/schema.json\",\n \"./node_modules/@todesktop/cli/schemas/schema.json\"\n ]\n },\n \"appBuilderLibVersion\": {\n \"$ref\": \"#/definitions/appBuilderLibVersionProperty\"\n },\n \"appId\": { \"$ref\": \"#/definitions/appIdProperty\" },\n \"appFiles\": { \"$ref\": \"#/definitions/appFilesProperty\" },\n \"appProtocolScheme\": { \"$ref\": \"#/definitions/appProtocolSchemeProperty\" },\n \"appPath\": { \"$ref\": \"#/definitions/appPathProperty\" },\n \"bundleWorkspacePackages\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"Useful when your application is a monorepo (e.g. pnpm workspaces). You can configure whether the CLI bundles workspace packages alongside the app upload. When enabled, workspace dependencies referenced via `workspace:` or local `file:` specifiers are bundled with your application upload and dependency ranges are rewritten to `file:` paths so they install deterministically on the build servers.\",\n \"examples\": [\"{\\\"enabled\\\":true}\"],\n \"default\": { \"enabled\": false },\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Enable automatic bundling of workspace packages for this project.\"\n }\n }\n },\n \"bytenode\": { \"$ref\": \"#/definitions/bytenodeConfigProperty\" },\n \"asar\": { \"$ref\": \"#/definitions/asarProperty\" },\n \"asarUnpack\": { \"$ref\": \"#/definitions/asarUnpackProperty\" },\n \"buildVersion\": { \"$ref\": \"#/definitions/buildVersionProperty\" },\n \"copyright\": { \"$ref\": \"#/definitions/copyrightProperty\" },\n \"electronMirror\": { \"$ref\": \"#/definitions/electronMirrorProperty\" },\n \"electronVersion\": { \"$ref\": \"#/definitions/electronVersionProperty\" },\n \"extends\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"This is the path to a base configuration file (`.json` or `.js`). This is especially useful for configuration sharing between different environments (e.g., staging and production). The base configuration file can be a relative path from the project root or an absolute path.\",\n \"examples\": [\"./todesktop.base.json\", \"./todesktop.base.js\"],\n \"default\": null\n },\n \"extraContentFiles\": { \"$ref\": \"#/definitions/extraContentFilesProperty\" },\n \"extraResources\": { \"$ref\": \"#/definitions/extraResourcesProperty\" },\n \"fileAssociations\": { \"$ref\": \"#/definitions/fileAssociationsProperty\" },\n \"updateUrlBase\": { \"$ref\": \"#/definitions/updateUrlBaseProperty\" },\n \"filesForDistribution\": {\n \"$ref\": \"#/definitions/filesForDistributionProperty\"\n },\n \"icon\": {\n \"type\": \"string\",\n \"description\": \"The path to your application's desktop icon. It must be an ICNS or PNG.\",\n \"examples\": [\"./appIcon.png\"],\n \"file\": {\n \"extensions\": [\"icns\", \"png\"],\n \"mustBeFile\": true\n },\n \"minLength\": 3\n },\n \"linux\": { \"$ref\": \"#/definitions/linuxConfigProperty\" },\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Your ToDesktop application ID. This is used to identify your app. This would have been generated when you first created your ToDesktop application via the web interface.\",\n \"examples\": [\"2005223bd1nqpl7\"]\n },\n \"includeSubNodeModules\": {\n \"$ref\": \"#/definitions/includeSubNodeModulesProperty\"\n },\n \"mac\": { \"$ref\": \"#/definitions/macConfigProperty\" },\n \"mas\": { \"$ref\": \"#/definitions/masConfigProperty\" },\n \"dmg\": { \"$ref\": \"#/definitions/dmgConfigProperty\" },\n \"nodeVersion\": { \"$ref\": \"#/definitions/nodeVersionProperty\" },\n \"npmVersion\": { \"$ref\": \"#/definitions/npmVersionProperty\" },\n \"pnpmVersion\": { \"$ref\": \"#/definitions/pnpmVersionProperty\" },\n \"packageJson\": { \"$ref\": \"#/definitions/packageJsonProperty\" },\n \"packageManager\": { \"$ref\": \"#/definitions/packageManagerProperty\" },\n \"rebuildLibrary\": { \"$ref\": \"#/definitions/rebuildLibraryProperty\" },\n \"schemaVersion\": {\n \"type\": \"number\",\n \"minimum\": 1,\n \"maximum\": 1,\n \"description\": \"This is the `todesktop.json` schema version. This must be `1`.\",\n \"examples\": [1]\n },\n \"snap\": { \"$ref\": \"#/definitions/snapConfigProperty\" },\n \"uploadSizeLimit\": { \"$ref\": \"#/definitions/uploadSizeLimitProperty\" },\n \"windows\": { \"$ref\": \"#/definitions/windowsConfigProperty\" },\n \"platformOverrides\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"This option allows you to specify platform-specific configurations for Windows, macOS, and Linux builds. Most top-level configuration fields available in `todesktop.json` can be overridden within the `windows`, `mac`, or `linux` objects under `platformOverrides`.\",\n \"default\": {},\n \"properties\": {\n \"windows\": {\n \"$ref\": \"#/definitions/platformOverridableProperties\"\n },\n \"mac\": {\n \"$ref\": \"#/definitions/platformOverridableProperties\"\n },\n \"linux\": {\n \"$ref\": \"#/definitions/platformOverridableProperties\"\n }\n }\n }\n },\n \"definitions\": {\n \"appBuilderLibVersionProperty\": {\n \"type\": \"string\",\n \"validSemver\": {},\n \"minLength\": 1,\n \"description\": \"The version of app-builder-lib that ToDesktop should use for building your app. This can be useful if you need to use a specific version that includes certain features or fixes.\",\n \"examples\": [\"22.14.13\"]\n },\n \"appIdProperty\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Your application ID. Omit this unless you know what you're doing. It's used as the [CFBundleIdentifier](https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-102070) for MacOS and as the [Application User Model ID](<https://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx>) for Windows.\",\n \"examples\": [\"com.microsoft.word\"],\n \"default\": \"auto-generated\"\n },\n \"bytenodeConfigProperty\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"Compile selected source files to .jsc using Bytenode during the build. Provide glob patterns relative to your appPath.\",\n \"default\": { \"enabled\": false },\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Enable Bytenode compilation.\"\n },\n \"files\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\", \"minLength\": 1 },\n \"minItems\": 1,\n \"description\": \"Glob patterns relative to appPath for files to compile to Bytenode.\"\n }\n },\n \"allOf\": [\n {\n \"if\": {\n \"properties\": { \"enabled\": { \"const\": true } },\n \"required\": [\"enabled\"]\n },\n \"then\": { \"required\": [\"files\"] }\n }\n ]\n },\n \"appFilesProperty\": {\n \"type\": \"array\",\n \"description\": \"This option allows you to decide which files get uploaded to be built on the ToDesktop servers. By default, all files in your app path are included in your app, except for `node_modules` and `.git`. Dependencies are installed on our build servers as there could be platform-specific postinstall steps.\",\n \"default\": [\"**\"],\n \"examples\": [\"[\\\"dist/**\\\", \\\"!static/**\\\"]\"],\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n },\n \"minItems\": 1\n },\n \"appProtocolSchemeProperty\": {\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"minLength\": 1\n },\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n },\n \"minItems\": 1\n }\n ],\n \"description\": \"If you want to register a protocol for your application (e.g. `example://`) and or support deeplinking, you will need to use this option. If your desired protocol is `example://`, you would set `\\\"appProtocolScheme\\\": \\\"example\\\"`. NOTE: these features also require additional application logic.\",\n \"examples\": [\"word\", \"[\\\"word\\\", \\\"excel\\\"]\"],\n \"default\": \"no protocol scheme is registered\"\n },\n \"appPathProperty\": {\n \"type\": \"string\",\n \"description\": \"This is the path to your Electron application directory. Omit this unless your project setup is complicated. This is the directory that the CLI uploads.\",\n \"default\": \".\",\n \"examples\": [\"./dist\"],\n \"file\": {\n \"isOptional\": true,\n \"mustBeElectronApp\": true\n }\n },\n \"asarProperty\": {\n \"type\": \"boolean\",\n \"default\": true,\n \"description\": \"Whether to package your application's source code within an asar archive. You should only turn this off if you have a good reason to.\"\n },\n \"asarUnpackProperty\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n },\n \"minItems\": 1\n }\n ],\n \"description\": \"This option allows you to decide which files get unpacked from the asar archive. By default we unpack all native `*.node` files.\",\n \"default\": [\"**/*.node\"]\n },\n \"buildVersionProperty\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The build version. Maps to the CFBundleVersion on macOS, and FileVersion metadata property on Windows.\",\n \"default\": \"auto-generated from build id\"\n },\n \"copyrightProperty\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The human-readable copyright line for the app.\",\n \"examples\": [\"Copyright \u00A9 1995 Walt Disney\"],\n \"default\": \"The `package.json` [productName](#recommendations-for-app-packagejson) / `name`.\"\n },\n \"electronMirrorProperty\": {\n \"type\": \"string\",\n \"format\": \"uri\",\n \"description\": \"The base URL of the mirror to download Electron from. This may be a mirror geographically closer to you or even your own mirror which contains custom Electron builds. The version downloaded is the Electron version specified in `devDependencies` in your app's `package.json`. Alternatively you can explicitly specify an `electronVersion` in `todesktop.json` as described below.\",\n \"examples\": [\"https://cdn.npm.taobao.org/dist/electron/\"],\n \"default\": \"Electron is downloaded from the main official source.\"\n },\n \"electronVersionProperty\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The version of Electron to use. In most cases you should not specify an `electronVersion` property. Only specify this option if you wish to override the version that is specified in `package.json`.\",\n \"examples\": [\"12.0.7-beta.17\"],\n \"default\": \"Electron version specified in `devDependencies` in your app's `package.json`\"\n },\n \"extraContentFilesProperty\": {\n \"type\": \"array\",\n \"description\": \"This option allows you specify files to be copied into the application's content directory (`Contents` for MacOS, root directory for Linux and Windows).\",\n \"default\": [],\n \"items\": {\n \"type\": \"object\",\n \"required\": [\"from\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"from\": {\n \"type\": \"string\",\n \"file\": {}\n },\n \"to\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"extraResourcesProperty\": {\n \"type\": \"array\",\n \"description\": \"This option allows you to specify files to be copied into the application's resources directory (`Contents/Resources` for MacOS, `resources` for Linux and Windows). It works just like the `extraContentFiles` option, except the files go to a different directory.\",\n \"default\": [],\n \"items\": {\n \"type\": \"object\",\n \"required\": [\"from\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"from\": {\n \"type\": \"string\",\n \"file\": {\n \"from\": \"context.projectRoot\"\n }\n },\n \"to\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"fileAssociationsProperty\": {\n \"type\": \"array\",\n \"description\": \"Associate a file type with your Electron app.\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\"ext\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"ext\": {\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"minLength\": 1\n },\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n }\n ],\n \"description\": \"The extension (minus the leading period). e.g. png.\"\n },\n \"description\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"windows-only. The description.\"\n },\n \"name\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The name. e.g. PNG. Defaults to value of `ext`.\"\n },\n \"mimeType\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"linux-only. The mime-type.\"\n },\n \"icon\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"macOS and windows. Icon file name without extension. It points to ico file for Windows and icns for macOS. For example, if the `icon` value is `\\\"icons/py\\\"` then it will look for both `\\\"icons/py.ico\\\"` and `\\\"icons/py.icns\\\"` in your project directory.\"\n },\n \"role\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"macOS-only. The app's role with respect to the type. The value can be `Editor`, `Viewer`, `Shell`, or `None`. Corresponds to `CFBundleTypeRole`.\",\n \"default\": \"Editor\"\n },\n \"isPackage\": {\n \"type\": \"boolean\",\n \"description\": \"macOS-only. Whether the document is distributed as a bundle. If set to true, the bundle directory is treated as a file. Corresponds to `LSTypeIsPackage`.\"\n },\n \"rank\": {\n \"type\": \"string\",\n \"enum\": [\"Owner\", \"Default\", \"Alternate\", \"None\"],\n \"description\": \"macOS-only. Determines how Launch Services ranks this app among the apps that declare themselves editors or viewers of files of this type. The possible values are: `Owner` (this app is the primary creator of files of this type), `Default` (this app is an opener of files of this type; this value is also used if no rank is specified), `Alternate` (this app is a secondary viewer of files of this type), and `None` (this app is never selected to open files of this type, but it accepts drops of files of this type).\",\n \"default\": \"Default\"\n }\n }\n },\n \"minItems\": 1\n },\n \"updateUrlBaseProperty\": {\n \"type\": \"string\",\n \"format\": \"uri\",\n \"description\": \"The URL to check for updates. You should only set this if you want to use your own self-hosted update server instead of ToDesktop's built-in update service. See https://www.github.com/ToDesktop/self-hosted for more information.\",\n \"examples\": [\"https://example.com/updates\"],\n \"default\": \"ToDesktop's auto-update URL.\"\n },\n \"filesForDistributionProperty\": {\n \"type\": \"array\",\n \"description\": \"This option allows you to explicitly exclude or include certain files in the packaged version of your app. These files are filtered _after_ the build step which happens on the ToDesktop servers.\",\n \"examples\": [\n \"[\\\"!**/node_modules/realm/android/**\\\", \\\"!**/design/**\\\"]\"\n ],\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n },\n \"minItems\": 1\n },\n \"linuxConfigProperty\": {\n \"type\": \"object\",\n \"description\": \"This object contains some options that only apply to the building & releasing for Linux.\",\n \"examples\": [\"{ \\\"category\\\": \\\"Utility\\\"}\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"category\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The [application category](https://specifications.freedesktop.org/menu-spec/latest/apa.html#main-category-registry).\",\n \"examples\": [\"Utility\"]\n },\n \"icon\": {\n \"type\": \"string\",\n \"description\": \"The path to your application's Linux desktop icon. It must be an ICNS or PNG.\",\n \"examples\": [\"./linux-icon.png\"],\n \"file\": {\n \"extensions\": [\"icns\", \"png\"],\n \"mustBeFile\": true\n },\n \"minLength\": 3\n },\n \"imageVersion\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The version of the Linux image that ToDesktop should use to build your app.\",\n \"examples\": [\"0.1.0\"],\n \"default\": \"0.0.12\"\n },\n \"noSandbox\": {\n \"type\": \"boolean\",\n \"description\": \"This option allows you to configure whether your app should run in a sandboxed environment.\",\n \"default\": true\n }\n }\n },\n \"includeSubNodeModulesProperty\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Whether to include **all** of the submodules node_modules directories\"\n },\n \"macConfigProperty\": {\n \"type\": \"object\",\n \"description\": \"This object contains some options that only apply to the building & releasing for MacOS.\",\n \"examples\": [\"{ \\\"entitlements\\\": \\\"./entitlements.mac.plist\\\" }\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"category\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The application category type, as shown in the Finder via _View -> Arrange by Application Category_ when viewing the Applications directory.\",\n \"examples\": [\"public.app-category.productivity\"]\n },\n \"additionalBinariesToSign\": {\n \"type\": \"array\",\n \"description\": \"Paths of any extra binaries that need to be signed. These could be files in your own app code or `node_modules`.\",\n \"examples\": [\"[\\\"./node_modules/example-package/example-file\\\"]\"],\n \"default\": [],\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n },\n \"entitlements\": {\n \"type\": \"string\",\n \"description\": \"The path to an entitlements file for signing your application. It must be a plist file.\",\n \"examples\": [\"./entitlements.mac.plist\"],\n \"default\": \"A sane minimal entitlements file we've put together.\",\n \"file\": {\n \"extensions\": [\"plist\"],\n \"mustBeFile\": true\n },\n \"minLength\": 1\n },\n \"entitlementsInherit\": {\n \"type\": \"string\",\n \"description\": \"The path to a child entitlements file for signing your application. It must be a plist file.\",\n \"examples\": [\"./entitlementsInherit.mac.plist\"],\n \"default\": \"No entitlements file is provided by default.\",\n \"file\": {\n \"extensions\": [\"plist\"],\n \"mustBeFile\": true\n },\n \"minLength\": 1\n },\n \"extendInfo\": {\n \"type\": \"object\",\n \"description\": \"Extra entries for `Info.plist`.\",\n \"examples\": [\"{ \\\"NSUserNotificationAlertStyle\\\": \\\"alert\\\" }\"],\n \"default\": {}\n },\n \"icon\": {\n \"type\": \"string\",\n \"description\": \"The path to your application's Mac desktop icon. It must be an ICNS or PNG.\",\n \"examples\": [\"./mac-icon.png\"],\n \"file\": {\n \"extensions\": [\"icns\", \"png\"],\n \"mustBeFile\": true\n },\n \"minLength\": 3\n },\n \"requirements\": {\n \"type\": \"string\",\n \"description\": \"The path to the [requirements file](https://developer.apple.com/library/archive/documentation/Security/Conceptual/CodeSigningGuide/RequirementLang/RequirementLang.html) used when signing your application.\",\n \"examples\": [\"./requirements.txt\"],\n \"default\": \"No requirements file is used by default.\",\n \"file\": {\n \"extensions\": [\"txt\"],\n \"mustBeFile\": true\n },\n \"minLength\": 1\n }\n }\n },\n \"masConfigProperty\": {\n \"type\": \"object\",\n \"description\": \"This object contains options that only apply to building the application for Mac App Store.\",\n \"examples\": [\"{ \\\"type\\\": \\\"development\\\" }\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"entitlements\": {\n \"type\": \"string\",\n \"description\": \"The path to an entitlements file for signing your application. It must be a plist file.\",\n \"examples\": [\"./entitlements.mas.plist\"],\n \"default\": \"No entitlements file is provided by default.\",\n \"file\": {\n \"extensions\": [\"plist\"],\n \"mustBeFile\": true\n },\n \"minLength\": 1\n },\n \"entitlementsInherit\": {\n \"type\": \"string\",\n \"description\": \"The path to a child entitlements file for signing your application. It must be a plist file.\",\n \"examples\": [\"./entitlementsInherit.mas.plist\"],\n \"default\": \"No entitlements file is provided by default.\",\n \"file\": {\n \"extensions\": [\"plist\"],\n \"mustBeFile\": true\n },\n \"minLength\": 1\n },\n \"provisioningProfile\": {\n \"type\": \"string\",\n \"description\": \"The path to a provisioning profile for authorizing your application.\",\n \"examples\": [\"./mas.provisionprofile\"],\n \"default\": \"No provisioning profile is used by default.\",\n \"file\": {\n \"extensions\": [\"provisionprofile\"],\n \"mustBeFile\": true\n },\n \"minLength\": 1\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\"development\", \"distribution\"],\n \"description\": \"Whether to sign app for development or for distribution.\",\n \"examples\": [\"distribution\"],\n \"default\": \"development\"\n },\n \"minimumSystemVersion\": {\n \"type\": \"string\",\n \"description\": \"The minimum macOS version required to run the app. Set to '12.0' or higher for arm64-only Mac App Store submissions.\",\n \"examples\": [\"12.0\", \"11.0\", \"10.15\"],\n \"pattern\": \"^[0-9]+\\\\.[0-9]+(\\\\.[0-9]+)?$\"\n },\n \"x64ArchFiles\": {\n \"type\": \"string\",\n \"description\": \"Minimatch pattern of paths that are allowed to be x64 binaries in both ASAR files.\",\n \"examples\": [\"Contents/Resources/foobar/**\"],\n \"default\": \"not defined\"\n }\n }\n },\n \"dmgConfigProperty\": {\n \"type\": \"object\",\n \"description\": \"Options for customizing the macOS DMG (disk image) installer.\",\n \"additionalProperties\": false,\n \"properties\": {\n \"background\": {\n \"type\": \"string\",\n \"description\": \"The path to the DMG installer's background image. It must be a `.tiff` file. The resolution of this file determines the resolution of the installer window. Typically, backgrounds are 540x380.\",\n \"examples\": [\"./mac-dmg-background.tiff\"],\n \"default\": \"undefined\",\n \"file\": {\n \"extensions\": [\"tiff\"],\n \"mustBeFile\": true\n },\n \"minLength\": 1\n },\n \"artifactName\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The artifact name of the DMG file. Macros ${productName}, ${version}, ${name} are supported.\"\n },\n \"backgroundColor\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The background color (accepts css colors). Defaults to \\\"`#ffffff`\\\" (white) if no background image.\",\n \"default\": \"#ffffff\"\n },\n \"iconSize\": {\n \"type\": \"number\",\n \"description\": \"The size of all the icons inside the DMG. Defaults to `80`.\",\n \"default\": 80\n },\n \"iconTextSize\": {\n \"type\": \"number\",\n \"description\": \"The size of all the icon texts inside the DMG. Defaults to `12`.\",\n \"default\": 12\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The title of the produced DMG, which will be shown when mounted (volume name). Macro `${productName}`, `${version}` and `${name}` are supported.\",\n \"default\": \"${productName} ${version}\"\n },\n \"contents\": {\n \"type\": \"array\",\n \"description\": \"Customize icon locations. The x and y coordinates refer to the position of the center of the icon (at 1x scale), and do not take the label into account.\",\n \"items\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"x\": {\n \"type\": \"number\",\n \"description\": \"The device-independent pixel offset from the left of the window to the center of the icon.\"\n },\n \"y\": {\n \"type\": \"number\",\n \"description\": \"The device-independent pixel offset from the top of the window to the center of the icon.\"\n }\n }\n }\n },\n \"window\": {\n \"type\": \"object\",\n \"description\": \"The DMG windows position and size. In most cases, you will only want to specify a `height` and `width` value but not `x` and `y`.\",\n \"additionalProperties\": false,\n \"properties\": {\n \"x\": {\n \"type\": \"number\",\n \"description\": \"The X position relative to left of the screen.\"\n },\n \"y\": {\n \"type\": \"number\",\n \"description\": \"The Y position relative to top of the screen.\"\n },\n \"width\": {\n \"type\": \"number\",\n \"description\": \"The width. Defaults to background image width or 540.\"\n },\n \"height\": {\n \"type\": \"number\",\n \"description\": \"The height. Defaults to background image height or 380.\"\n }\n }\n }\n }\n },\n \"nodeVersionProperty\": {\n \"type\": \"string\",\n \"validSemver\": {},\n \"minLength\": 1,\n \"description\": \"The version of Node.js that ToDesktop should use to build your app.\",\n \"examples\": [\"18.12.1\"]\n },\n \"npmVersionProperty\": {\n \"type\": \"string\",\n \"validSemver\": {},\n \"minLength\": 1,\n \"description\": \"The version of NPM that ToDesktop should use for installation.\",\n \"examples\": [\"9.8.1\"]\n },\n \"pnpmVersionProperty\": {\n \"type\": \"string\",\n \"validSemver\": {},\n \"minLength\": 1,\n \"description\": \"The version of pnpm that ToDesktop should use for installation.\",\n \"examples\": [\"8.10.5\"]\n },\n \"packageJsonProperty\": {\n \"type\": \"object\",\n \"description\": \"If you want to override the default `package.json` configuration, use the `packageJson` property. For example, you can use this to override the `productName` or `version` properties.\",\n \"default\": {}\n },\n \"packageManagerProperty\": {\n \"type\": \"string\",\n \"enum\": [\"npm\", \"yarn\", \"pnpm\"],\n \"description\": \"The package manager to use when installing dependencies. Valid values are `npm`, `yarn` or `pnpm`.\",\n \"examples\": [\"yarn\"],\n \"default\": \"If `yarn.lock` exists, `yarn` is used. If `pnpm-lock.yaml` or `shrinkwrap.yaml` exists, `pnpm` is used. Otherwise, `npm` is used.\"\n },\n \"rebuildLibraryProperty\": {\n \"type\": \"string\",\n \"enum\": [\"app-builder\", \"@electron/rebuild\"],\n \"description\": \"The library that ToDesktop should use for rebuilding native modules. Valid values are `app-builder` or `@electron/rebuild`.\",\n \"default\": \"app-builder\"\n },\n \"snapConfigProperty\": {\n \"type\": \"object\",\n \"description\": \"This object contains some options that only apply to the building for the [Snap Store](https://snapcraft.io/store).\",\n \"examples\": [\"{ \\\"confinement\\\": \\\"classic\\\", \\\"grade\\\": \\\"devel\\\" }\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"after\": {\n \"type\": \"array\",\n \"description\": \"Ensures that all the part names listed are staged before the app part begins its [lifecycle](https://snapcraft.io/docs/parts-lifecycle#heading--steps).\",\n \"default\": [\"desktop-gtk2\"],\n \"examples\": [\"[\\\"launch-scripts\\\"]\"],\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n },\n \"appPartStage\": {\n \"type\": \"array\",\n \"description\": \"Specifies which files from the app part to stage and which to exclude. Individual files, directories, wildcards, globstars, and exclusions are accepted. See [Snapcraft filesets](https://snapcraft.io/docs/snapcraft-filesets) to learn more about the format.\",\n \"examples\": [\"[\\\"-usr/lib/python*\\\"]\"],\n \"default\": \"See [snap.ts](https://github.com/electron-userland/electron-builder/blob/master/packages/app-builder-lib/templates/snap/snapcraft.yaml#L29).\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n },\n \"assumes\": {\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"minLength\": 1\n },\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n }\n ],\n \"description\": \"The list of features that must be supported by the core in order for this snap to install. To learn more, see the [Snapcraft docs](https://snapcraft.io/docs/snapcraft-top-level-metadata#heading--assumes).\",\n \"examples\": [\"snapd2.38\"],\n \"default\": \"undefined\"\n },\n \"autoStart\": {\n \"type\": \"boolean\",\n \"description\": \"Whether or not the snap should automatically start on login.\",\n \"default\": false,\n \"examples\": [true]\n },\n \"base\": {\n \"type\": \"string\",\n \"description\": \"The base snap to use for building this snap.\",\n \"default\": \"core18\",\n \"examples\": [\"core20\"]\n },\n \"buildPackages\": {\n \"type\": \"array\",\n \"description\": \"The list of debian packages needs to be installed for building this snap.\",\n \"default\": [],\n \"examples\": [\n \"[\\\"libssl-dev\\\", \\\"libssh-dev\\\", \\\"libncursesw5-dev\\\"]\"\n ],\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n },\n \"confinement\": {\n \"type\": \"string\",\n \"enum\": [\"classic\", \"devmode\", \"strict\"],\n \"description\": \"The type of [confinement](https://snapcraft.io/docs/reference/confinement) supported by the snap. `devmode`, `strict`, or `classic`.\",\n \"default\": \"strict\",\n \"examples\": [\"classic\"]\n },\n \"environment\": {\n \"type\": \"object\",\n \"description\": \"The custom environment. If you set this, it will be merged with the default.\",\n \"default\": { \"TMPDIR\": \"$XDG_RUNTIME_DIR\" },\n \"examples\": [\"{\\\"TMPDIR\\\": \\\"$XDG_RUNTIME_DIR\\\"}\"]\n },\n \"grade\": {\n \"type\": \"string\",\n \"enum\": [\"devel\", \"stable\"],\n \"description\": \"The quality grade of the snap. It can be either `devel` (i.e. a development version of the snap, so not to be published to the \\\"stable\\\" or \\\"candidate\\\" channels) or `stable` (i.e. a stable release or release candidate, which can be released to all channels).\",\n \"default\": \"stable\",\n \"examples\": [\"devel\"]\n },\n \"layout\": {\n \"type\": \"object\",\n \"description\": \"Specifies any files to make accessible from locations such as `/usr`, `/var`, and `/etc`. See [snap layouts](https://snapcraft.io/docs/snap-layouts) to learn more.\",\n \"default\": \"undefined\",\n \"examples\": [\n \"{ \\\"/var/lib/foo\\\": { \\\"bind\\\": \\\"$SNAP_DATA/var/lib/foo\\\" } }\"\n ]\n },\n \"plugs\": {\n \"type\": \"array\",\n \"description\": \"The list of [plugs](https://snapcraft.io/docs/reference/interfaces). If list contains `default`, it will be replaced with the default list, so, `[\\\"default\\\", \\\"foo\\\"]` can be used to add a custom plug `foo` in addition to the default list.\",\n \"default\": [\n \"desktop\",\n \"desktop-legacy\",\n \"home\",\n \"x11\",\n \"unity7\",\n \"browser-support\",\n \"network\",\n \"gsettings\",\n \"pulseaudio\",\n \"opengl\"\n ],\n \"examples\": [\n \"[ \\\"default\\\", { \\\"browser-sandbox\\\": { \\\"interface\\\": \\\"browser-support\\\", \\\"allow-sandbox\\\": true } }, \\\"another-simple-plug-name\\\" ]\"\n ],\n \"items\": {\n \"anyOf\": [\n {\n \"type\": \"string\",\n \"minLength\": 1\n },\n {\n \"type\": \"object\"\n }\n ]\n }\n },\n \"stagePackages\": {\n \"type\": \"array\",\n \"description\": \"The list of Ubuntu packages to use that are needed to support the app part creation. Like `depends` for deb. If list contains `default`, it will be replaced with the default list, so, `[\\\"default\\\", \\\"foo\\\"]` can be used to add custom package `foo` in addition to the defaults.\",\n \"default\": [\n \"libasound2\",\n \"libgconf2-4\",\n \"libnotify4\",\n \"libnspr4\",\n \"libnss3\",\n \"libpcre3\",\n \"libpulse0\",\n \"libxss1\",\n \"libxtst6\"\n ],\n \"examples\": [\"[\\\"default\\\", \\\"depends\\\"]\"],\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n },\n \"summary\": {\n \"type\": \"string\",\n \"maxLength\": 78,\n \"description\": \"A sentence summarising the snap. Max len. 78 characters, describing the snap in short and simple terms.\",\n \"default\": \"The [productName](#recommendations-for-app-packagejson).\",\n \"examples\": [\"The super cat generator\"]\n },\n \"useTemplateApp\": {\n \"type\": \"boolean\",\n \"description\": \"Whether to use a template snap.\",\n \"default\": \"true if `stagePackages` is not specified.\",\n \"examples\": [false]\n }\n }\n },\n \"uploadSizeLimitProperty\": {\n \"type\": \"number\",\n \"description\": \"The max upload size (in MB). Before uploading your files to our servers, we check that the total file size is less than this number. If you are accidentally including unneccesary files in your app, check out the `appPath` and `appFiles` options.\",\n \"default\": 20,\n \"examples\": [35]\n },\n \"windowsConfigProperty\": {\n \"type\": \"object\",\n \"description\": \"This object contains some options that only apply to the building & releasing for Windows.\",\n \"examples\": [\"{ \\\"icon\\\": \\\"./icon.ico\\\" }\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"icon\": {\n \"type\": \"string\",\n \"description\": \"The path to your application's Windows desktop icon. It must be an ICO, ICNS, or PNG.\",\n \"examples\": [\"./icon.ico\"],\n \"file\": {\n \"extensions\": [\"icns\", \"png\", \"ico\"],\n \"mustBeFile\": true\n },\n \"minLength\": 3\n },\n \"nsisCustomBinary\": {\n \"type\": \"object\",\n \"description\": \"Allows you to provide your own makensis, such as one with support for debug logging via LogSet and LogText. (Logging also requires option debugLogging = true). It's not recommended to use it for production build.\",\n \"default\": \"undefined\",\n \"additionalProperties\": false,\n \"properties\": {\n \"checksum\": {\n \"type\": \"string\",\n \"description\": \"Checksum for the custom NSIS binary.\"\n },\n \"debugLogging\": {\n \"type\": \"boolean\",\n \"description\": \"Enable debug logging with the custom NSIS binary.\"\n },\n \"url\": {\n \"type\": \"string\",\n \"description\": \"URL to download the custom NSIS binary (e.g., a .7z archive).\"\n },\n \"version\": {\n \"type\": \"string\",\n \"description\": \"Version of the custom NSIS binary.\"\n }\n }\n },\n \"nsisInclude\": {\n \"type\": \"string\",\n \"description\": \"The path to NSIS script to customize installer.\",\n \"examples\": [\"build/installer.nsh\"],\n \"default\": \"undefined\",\n \"file\": {\n \"extensions\": [\"nsh\"],\n \"mustBeFile\": true\n }\n },\n \"publisherName\": {\n \"type\": \"array\",\n \"description\": \"The publisher name, exactly as in your code signing certificate. Several names can be provided. Defaults to common name from your code signing certificate. You should typically not include this property in your configuration unless you wish to transition to a new certificate in the future.\",\n \"examples\": [\"[\\\"ABC Limited\\\"]\"],\n \"default\": \"Default to the common name from your code signing certificate.\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n }\n }\n },\n \"platformOverridableProperties\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"Defines properties that can be overridden on a per-platform basis under the 'platformOverrides' field.\",\n \"properties\": {\n \"appBuilderLibVersion\": {\n \"$ref\": \"#/definitions/appBuilderLibVersionProperty\"\n },\n \"appId\": { \"$ref\": \"#/definitions/appIdProperty\" },\n \"appFiles\": { \"$ref\": \"#/definitions/appFilesProperty\" },\n \"appProtocolScheme\": {\n \"$ref\": \"#/definitions/appProtocolSchemeProperty\"\n },\n \"appPath\": { \"$ref\": \"#/definitions/appPathProperty\" },\n \"bytenode\": { \"$ref\": \"#/definitions/bytenodeConfigProperty\" },\n \"asar\": { \"$ref\": \"#/definitions/asarProperty\" },\n \"asarUnpack\": { \"$ref\": \"#/definitions/asarUnpackProperty\" },\n \"buildVersion\": { \"$ref\": \"#/definitions/buildVersionProperty\" },\n \"copyright\": { \"$ref\": \"#/definitions/copyrightProperty\" },\n \"electronMirror\": { \"$ref\": \"#/definitions/electronMirrorProperty\" },\n \"electronVersion\": { \"$ref\": \"#/definitions/electronVersionProperty\" },\n \"extraContentFiles\": {\n \"$ref\": \"#/definitions/extraContentFilesProperty\"\n },\n \"extraResources\": { \"$ref\": \"#/definitions/extraResourcesProperty\" },\n \"fileAssociations\": {\n \"$ref\": \"#/definitions/fileAssociationsProperty\"\n },\n \"updateUrlBase\": { \"$ref\": \"#/definitions/updateUrlBaseProperty\" },\n \"filesForDistribution\": {\n \"$ref\": \"#/definitions/filesForDistributionProperty\"\n },\n \"linux\": { \"$ref\": \"#/definitions/linuxConfigProperty\" },\n \"includeSubNodeModules\": {\n \"$ref\": \"#/definitions/includeSubNodeModulesProperty\"\n },\n \"mac\": { \"$ref\": \"#/definitions/macConfigProperty\" },\n \"mas\": { \"$ref\": \"#/definitions/masConfigProperty\" },\n \"dmg\": { \"$ref\": \"#/definitions/dmgConfigProperty\" },\n \"nodeVersion\": { \"$ref\": \"#/definitions/nodeVersionProperty\" },\n \"npmVersion\": { \"$ref\": \"#/definitions/npmVersionProperty\" },\n \"pnpmVersion\": { \"$ref\": \"#/definitions/pnpmVersionProperty\" },\n \"packageJson\": { \"$ref\": \"#/definitions/packageJsonProperty\" },\n \"packageManager\": { \"$ref\": \"#/definitions/packageManagerProperty\" },\n \"rebuildLibrary\": { \"$ref\": \"#/definitions/rebuildLibraryProperty\" },\n \"snap\": { \"$ref\": \"#/definitions/snapConfigProperty\" },\n \"uploadSizeLimit\": { \"$ref\": \"#/definitions/uploadSizeLimitProperty\" },\n \"windows\": { \"$ref\": \"#/definitions/windowsConfigProperty\" }\n }\n }\n }\n}\n", "import jsonSchema from '../../../../schemas/schema.json';\n\nexport default (context) => {\n function updateFileProperty(record: Record<string, any>) {\n for (const [key, value] of Object.entries(record)) {\n if (key === 'file' && typeof value === 'object') {\n value['from'] = context.projectRoot;\n } else if (typeof value === 'object' && value !== null) {\n updateFileProperty(value);\n }\n }\n }\n\n updateFileProperty(jsonSchema);\n return jsonSchema;\n};\n", "import merge from 'lodash.merge';\nimport { resolve } from 'path';\nimport { PartialProjectConfig, ProjectConfig } from '../../types';\nimport logger from '../logger';\nimport loadConfig from './loadConfig';\nimport { BuildFlags } from '../../commands/build/utilities/types';\n\nexport default function computeFullProjectConfig(\n partialConfig: PartialProjectConfig,\n projectRoot: string,\n flags?: { build?: Pick<BuildFlags, 'ignoreExtendsErrors'> },\n): ProjectConfig {\n if (!partialConfig.extends) {\n logger.debug('No extends field, returning partial config');\n return partialConfig as ProjectConfig;\n } else {\n logger.debug('Extends field found, resolving');\n const parentConfigPath = resolve(projectRoot, partialConfig.extends);\n const parentConfig = loadConfig(parentConfigPath);\n\n parentConfig.appPath = parentConfig.appPath || '.';\n\n const parentFullConfig = computeFullProjectConfig(\n parentConfig,\n projectRoot,\n flags,\n );\n\n // skip if `flags.build` isn't defined since --ignore-extends-errors is only available via todesktop-build.\n if (flags?.build && !flags.build.ignoreExtendsErrors) {\n const hasSameId = partialConfig.id === parentFullConfig.id;\n const hasSameAppId =\n partialConfig.appId &&\n parentFullConfig.appId &&\n partialConfig.appId === parentFullConfig.appId;\n\n if (hasSameId || hasSameAppId) {\n throw new Error(`\ntodesktop.json invalid. Cannot have the same \"id\" or \"appId\" as an extended todesktop.json file.\n\nYou can disable this error by running todesktop build with the --ignore-extends-errors flag.`);\n }\n\n // throw error in this case otherwise the child config will inherit the defined appId from the parent\n if (parentFullConfig.appId && !partialConfig.appId) {\n throw new Error(`\ntodesktop.json invalid. Please add \"appId\" to your todesktop.json or remove \"appId\" from the extended todesktop.json.\n\nYou can disable this error by running todesktop build with the --ignore-extends-errors flag.`);\n }\n }\n\n const result = merge({}, parentFullConfig, partialConfig);\n delete result.extends;\n return result;\n }\n}\n", "// X build has failed, should we exit? I.e. is it settled?\nexport default (build) => {\n const hasBuildSettled = ['linux', 'mac', 'windows'].every(\n (platform) =>\n build[platform].shouldSkip ||\n 'succeeded' === build[platform].status ||\n ('failed' === build[platform].status &&\n build[platform].numberOfAttemptedBuilds === 2),\n );\n\n const hasSettledWithError = ['linux', 'mac', 'windows'].some(\n (platform) => 'failed' === build[platform].status,\n );\n\n return hasBuildSettled && hasSettledWithError;\n};\n", "import merge from 'lodash.merge';\nimport path from 'path';\nimport readJson from '../../../utilities/readJson';\n\nfunction deleteNullDeps(dep) {\n Object.keys(dep).forEach((key) => {\n if (dep[key] === null) {\n delete dep[key];\n }\n });\n return dep;\n}\n\n/**\n * Remove any dependencies or devDependencies that have a version of null.\n * This is useful for removing dependencies that are not to be used when building\n * in ToDesktop. For example this will remove the `electron-builder` dev dependency\n * from the package.json file when building in ToDesktop:\n * {\n * \"devDependencies\": {\n * \"electron-builder\": null\n * }\n * }\n */\nfunction removeNullDependencies(pkgJson) {\n const { dependencies, devDependencies } = pkgJson;\n\n if (dependencies) {\n pkgJson.dependencies = deleteNullDeps(dependencies);\n }\n\n if (devDependencies) {\n pkgJson.devDependencies = deleteNullDeps(devDependencies);\n }\n\n return pkgJson;\n}\n\nfunction getAppPkgJson({ config }) {\n const packageJsonFromConfig = config.packageJson || {};\n const extendsFrom = packageJsonFromConfig.extends || 'package.json';\n const packageJsonFromFile = readJson(path.join(config.appPath, extendsFrom));\n\n return removeNullDependencies(\n merge({}, packageJsonFromFile, packageJsonFromConfig),\n );\n}\n\nexport default getAppPkgJson;\n", "import * as gitRevSync from 'git-rev-sync';\n\nexport default async (directory) => {\n let result = {};\n\n try {\n const gitCommitHash = gitRevSync.long(directory);\n\n if (gitCommitHash) {\n result = {\n branchName: gitRevSync.branch(directory),\n commitDate: gitRevSync.date().toISOString(),\n commitId: gitCommitHash,\n commitMessage: gitRevSync.message(),\n hasUncommittedChanges: gitRevSync.isDirty(),\n repositoryRemoteUrl: gitRevSync.remoteUrl(),\n versionControlSystemName: 'git',\n };\n }\n } catch {\n // Ignore\n }\n\n return result;\n};\n", "import { Build } from '@todesktop/shared';\nimport EventEmitter from 'events';\nimport type { DocSnapshot } from '../../../types';\nimport { doc, onSnapshot } from 'firebase/firestore';\nimport firestore from '../../../utilities/firestore';\nimport { readDocumentSnapshot } from '../../../utilities/firestoreData';\n\nexport default function spyBuild() {\n const emitter = new EventEmitter();\n\n let unsubscribeSnapshot: (() => void) | undefined;\n let latestBuildDoc: Build | undefined;\n\n function when(predicate: (build: Build) => boolean) {\n if (latestBuildDoc && predicate(latestBuildDoc)) {\n return Promise.resolve(latestBuildDoc);\n }\n\n return new Promise<Build>((resolve, reject) => {\n emitter\n .on('update', ({ build }) => {\n if (predicate(build)) {\n resolve(build);\n }\n })\n .once('error', (e) => reject(e));\n });\n }\n\n return {\n onUpdate(\n callback: (data: {\n build: Build | undefined;\n snapshot: DocSnapshot<Build>;\n }) => void,\n ) {\n emitter.on('update', callback);\n },\n\n subscribe({\n appId,\n buildId,\n userId,\n }: {\n appId: string;\n buildId: string;\n userId: string;\n }) {\n const buildPath = `users/${userId}/applications/${appId}/builds/${buildId}`;\n unsubscribeSnapshot = onSnapshot(\n doc(firestore, buildPath),\n (snapshot) => {\n latestBuildDoc = readDocumentSnapshot<Build>(snapshot);\n emitter.emit('update', {\n build: latestBuildDoc,\n snapshot: snapshot as unknown as DocSnapshot<Build>,\n });\n },\n (err) => {\n emitter.emit('error', err);\n },\n );\n },\n\n unsubscribe() {\n unsubscribeSnapshot?.();\n },\n\n async whenFirstUpdate() {\n if (latestBuildDoc) {\n return Promise.resolve(latestBuildDoc);\n }\n\n return new Promise<Build>((resolve, reject) => {\n emitter\n .once('update', (data) => resolve(data))\n .once('error', (e) => reject(e));\n });\n },\n\n async whenSettled() {\n return when((build) => buildHasSettled(build));\n },\n };\n}\n\nfunction buildHasSettled(build: Build) {\n return (['linux', 'mac', 'windows'] as const).every(\n (platform) =>\n build[platform]?.shouldSkip ||\n 'succeeded' === build[platform]?.status ||\n 'cancelled' === build[platform]?.status ||\n ('failed' === build[platform]?.status &&\n build[platform]?.numberOfAttemptedBuilds === 2),\n );\n}\n", "import type {\n DocumentData,\n DocumentSnapshot,\n QueryDocumentSnapshot,\n QuerySnapshot,\n} from 'firebase/firestore';\n\nexport const readQueryDocument = <T>(\n doc: QueryDocumentSnapshot<DocumentData>,\n): T => {\n return doc.data() as unknown as T;\n};\n\nexport const readDocumentSnapshot = <T>(\n snapshot: DocumentSnapshot<DocumentData>,\n): T | undefined => {\n return snapshot.exists() ? (snapshot.data() as unknown as T) : undefined;\n};\n\nexport const readQuerySnapshot = <T>(\n snapshot: QuerySnapshot<DocumentData>,\n): T[] => {\n return snapshot.docs.map((doc) => readQueryDocument<T>(doc));\n};\n", "import fastGlob from 'fast-glob';\nimport * as fs from 'fs';\nimport { IPackageJson } from 'package-json-type';\nimport * as path from 'path';\nimport type { ProjectConfig } from '../../../types';\nimport generateS3Key from './generateS3Key';\nimport logger from '../../../utilities/logger';\nimport uploadToS3 from './uploadToS3';\nimport zip from './zip';\nimport prepareWorkspaceBundle, { ZipEntry } from './workspace';\n\nconst getAppFiles = async (\n globsInput,\n appPath,\n appPkgJson,\n): Promise<ZipEntry[]> => {\n const globs = [\n '!node_modules',\n '!**/node_modules',\n '!.git',\n '!**/.git',\n '!.gitignore',\n '!**/.gitignore',\n ];\n\n if (globsInput && globsInput.length) {\n globs.push(\n ...globsInput,\n path.join(appPath, 'package.json'),\n path.join(appPath, 'package-lock.json'),\n path.join(appPath, 'yarn.lock'),\n path.join(appPath, 'pnpm-lock.yaml'),\n path.join(appPath, 'shrinkwrap.yaml'),\n );\n } else {\n globs.push('**');\n }\n\n // automatically add hooks to `appFiles` if they exist\n for (const hookName of [\n 'todesktop:beforeInstall',\n 'todesktop:beforeBuild',\n 'todesktop:afterPack',\n ]) {\n if (appPkgJson.scripts && appPkgJson.scripts[hookName]) {\n globs.push(path.join(appPath, appPkgJson.scripts[hookName]));\n }\n }\n\n const normalizedGlobs = globs\n .map((glob) => {\n // Make relative if it's not\n const globToUse = path.isAbsolute(glob)\n ? path.relative(appPath, glob)\n : glob;\n\n return (\n globToUse\n // Globs must always have forward slashes\n .replace(/\\\\/g, '/')\n // Remove trailing slash\n .replace(/\\/+$/, '')\n );\n })\n .filter((glob) => !glob.startsWith('..') && !glob.startsWith('!..'));\n\n let absolutePaths = await fastGlob(normalizedGlobs, {\n absolute: true,\n cwd: appPath,\n dot: true,\n followSymbolicLinks: false,\n onlyDirectories: false,\n onlyFiles: true,\n globstar: true,\n unique: true,\n });\n\n if (process.platform === 'win32') {\n absolutePaths = absolutePaths.map((absolutePath) =>\n absolutePath.replace(/\\//g, path.sep),\n );\n }\n\n if (!absolutePaths || !absolutePaths.length) {\n throw new Error('No files found to upload');\n } else if (\n !absolutePaths.filter(\n (absolutePath) =>\n absolutePath.endsWith('.js') || absolutePath.endsWith('.ts'),\n ).length\n ) {\n throw new Error(\n `No .js/.ts files found to upload (${absolutePaths[0]}). There's likely an issue with the appFiles option. Learn more at https://www.npmjs.com/package/@todesktop/cli#appfiles----optional-array-of-glob-patterns. If this is not the case, please contact us.`,\n );\n } else {\n let mainFilePath = appPath;\n if (appPkgJson.main) {\n mainFilePath = path.join(mainFilePath, appPkgJson.main);\n }\n\n if (fs.statSync(mainFilePath).isDirectory()) {\n mainFilePath = path.join(mainFilePath, 'index.js');\n }\n\n // Make sure the \"main\" file is included\n if (!absolutePaths.includes(mainFilePath)) {\n throw new Error(\n `The \"main\" file specified in your package.json (${\n appPkgJson.main\n ? path.relative(appPath, mainFilePath)\n : 'defaults to index.js'\n }) is not set to be uploaded to our servers. This is likely due to how you have configured the \\`appFiles\\` option. Learn more at https://www.npmjs.com/package/@todesktop/cli#appfiles----optional-array-of-glob-patterns. If this is not the case, please contact us.`,\n );\n }\n }\n\n return absolutePaths.map((absolutePath) => {\n return {\n from: absolutePath,\n to: path.join('app', path.relative(appPath, absolutePath)),\n } satisfies ZipEntry;\n });\n};\n\nexport default async function uploadApplicationSource({\n appId,\n appPkgJson,\n buildId,\n config,\n onProgress,\n}: {\n appId: string;\n appPkgJson: IPackageJson;\n buildId: string;\n config: ProjectConfig;\n onProgress: (progress: number, uploadedSize?: number) => void;\n}) {\n logger.debug(\n {\n scrub: {\n appId,\n appPkgJson,\n buildId,\n config,\n onProgress,\n },\n },\n 'uploadApplicationSource',\n );\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let totalBytes = 0;\n\n let effectiveAppPkgJson = appPkgJson;\n let workspaceEntries: ZipEntry[] = [];\n\n try {\n const workspaceBundle = await prepareWorkspaceBundle({\n appPath: config.appPath,\n appPkgJson,\n config,\n });\n effectiveAppPkgJson = workspaceBundle.appPackageJson;\n workspaceEntries = workspaceBundle.entries;\n } catch (error) {\n logger.error({ err: error }, 'Failed to prepare workspace bundle');\n throw error;\n }\n\n const files: ZipEntry[] = [\n /*\n App files (stored in app/ in the ZIP)\n */\n ...(await getAppFiles(\n config.appFiles,\n config.appPath,\n effectiveAppPkgJson,\n )),\n\n /*\n Optional extra content files (stored in extraContentFiles/ in the ZIP). Their\n paths within is the their relative path from the project root so\n there will be no issues with clashing filenames. We also don't\n also any file paths in our todesktop.json that are outside of the\n project directory\n */\n ...(config.extraContentFiles || []).map(({ from, to = '.' }) => {\n return {\n from,\n to: path.join('extraContentFiles', to, path.basename(from)),\n };\n }),\n\n /*\n Optional extra resources (stored in extraResources/ in the ZIP).\n Similar to extra content files above\n */\n ...(config.extraResources || []).map(({ from, to = '.' }) => {\n return {\n from,\n to: path.join('extraResources', to, path.basename(from)),\n };\n }),\n\n /*\n Icons (more may be added below)\n */\n {\n from: config.icon,\n to: path.join('icons', 'appIcon' + path.extname(config.icon)),\n },\n ];\n\n if (config.linux) {\n if (config.linux.icon) {\n files.push({\n from: config.linux.icon,\n to: path.join(\n 'icons',\n 'appIcon-linux' + path.extname(config.linux.icon),\n ),\n });\n }\n }\n\n if (Array.isArray(config.fileAssociations)) {\n const possibleIcons = [];\n for (const fa of config.fileAssociations) {\n if (fa.icon) {\n const icon = path.parse(fa.icon);\n // The right extension is set by electron-builder\n // https://github.com/electron-userland/electron-builder/blob/abf52eaf8dfba63eb9507c03032d8f7e2f26dd2b/packages/builder-util/src/util.ts#L320\n possibleIcons.push(\n { ext: fa.ext, icon: path.join(icon.dir, icon.name) + '.ico' },\n { ext: fa.ext, icon: path.join(icon.dir, icon.name) + '.icns' },\n );\n }\n }\n\n await Promise.all(\n possibleIcons.map(async ({ ext, icon }) => {\n if (await exists(icon)) {\n files.push({\n from: icon,\n to: path.join('icons', 'association-' + ext + path.extname(icon)),\n });\n }\n }),\n );\n }\n\n if (config.mac) {\n if (config.mac.entitlements) {\n files.push({\n from: config.mac.entitlements,\n to: path.join('other', 'mac', 'entitlements.mac.plist'),\n });\n }\n\n if (config.mac.entitlementsInherit) {\n files.push({\n from: config.mac.entitlementsInherit,\n to: path.join('other', 'mac', 'entitlementsInherit.mac.plist'),\n });\n }\n\n if (config.mac.icon) {\n files.push({\n from: config.mac.icon,\n to: path.join('icons', 'appIcon-mac' + path.extname(config.mac.icon)),\n });\n }\n\n if (config.mac.requirements) {\n files.push({\n from: config.mac.requirements,\n to: path.join('other', 'mac', 'requirements.txt'),\n });\n }\n }\n\n if (config.mas) {\n if (config.mas.entitlements) {\n files.push({\n from: config.mas.entitlements,\n to: path.join('other', 'mac', 'entitlements.mas.plist'),\n });\n }\n\n if (config.mas.entitlementsInherit) {\n files.push({\n from: config.mas.entitlementsInherit,\n to: path.join('other', 'mac', 'entitlementsInherit.mas.plist'),\n });\n }\n\n if (config.mas.provisioningProfile) {\n files.push({\n from: config.mas.provisioningProfile,\n to: path.join('other', 'mac', 'mas.provisionprofile'),\n });\n }\n }\n\n if (config.dmg) {\n if (config.dmg.background) {\n files.push({\n from: config.dmg.background,\n to: path.join('other', 'mac', 'dmg-background.tiff'),\n });\n }\n }\n\n if (config.windows) {\n if (config.windows.icon) {\n files.push({\n from: config.windows.icon,\n to: path.join(\n 'icons',\n 'appIcon-windows' + path.extname(config.windows.icon),\n ),\n });\n }\n\n if (config.windows.nsisInclude) {\n files.push({\n from: config.windows.nsisInclude,\n to: path.join('other', 'installer.nsh'),\n });\n }\n }\n\n if (workspaceEntries.length) {\n files.push(...workspaceEntries);\n }\n\n return uploadToS3({\n bucket: config.bucket || undefined,\n inputStream: await zip({\n files,\n fileSizeLimit: config.uploadSizeLimit,\n onError: (e) => {\n throw e;\n },\n onProgress({ fs }) {\n totalBytes = fs.totalBytes;\n },\n appPkgJson: effectiveAppPkgJson,\n }),\n key: generateS3Key({\n appId,\n buildId,\n filenameSuffix: `${effectiveAppPkgJson.name?.replaceAll('/', '')}.zip`,\n }),\n onProgress({ loaded, total }) {\n onProgress((loaded / total) * 100, loaded);\n },\n });\n}\n\nasync function exists(filePath: string): Promise<boolean> {\n try {\n await fs.promises.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n", "export default ({ appId, buildId, filenameSuffix }) =>\n `${appId}/sourceArchives/${buildId}--${filenameSuffix}`;\n", "import superagent from 'superagent';\nimport streamToArray from 'stream-to-array';\nimport getEnvironmentVariables from '../../../utilities/getEnvironmentVariables';\nimport logger from '../../../utilities/logger';\nimport getCallableFirebaseFunction from '../../../utilities/getCallableFirebaseFunction';\n\nconst { TODESKTOP_CLI_S3_BUCKET } = getEnvironmentVariables();\nconst MAX_RETRIES = 3;\nconst RETRY_DELAY = 2000; // 2 seconds\n\nconst delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\ntype UploadParams = {\n bucket?: string;\n inputStream: NodeJS.ReadableStream;\n key: string;\n onProgress?: (event: { loaded: number; total: number }) => void;\n};\n\ntype UploadedResponse = {\n bucket: string;\n key: string;\n url: string;\n};\n\nconst uploadToS3WithRetry = async (\n input: UploadParams,\n retries = MAX_RETRIES,\n): Promise<any> => {\n try {\n return await uploadToS3(input);\n } catch (error) {\n if (retries > 0) {\n logger.warn(\n `Upload failed. Retrying... (${\n MAX_RETRIES - retries + 1\n } of ${MAX_RETRIES})`,\n );\n await delay(RETRY_DELAY);\n return uploadToS3WithRetry(input, retries - 1);\n } else {\n logger.error('All retries exhausted. Upload failed.');\n throw error;\n }\n }\n};\n\nconst uploadToS3 = async ({\n bucket = TODESKTOP_CLI_S3_BUCKET,\n inputStream,\n key,\n onProgress = () => {},\n}: UploadParams): Promise<UploadedResponse> => {\n const getSignedURL = getCallableFirebaseFunction('getSignedURL');\n const result = await getSignedURL({\n key,\n });\n const data = result.data as {\n signedURL: string;\n uploadURL: string;\n };\n\n const parts = await streamToArray(inputStream);\n const buffers = parts.map((part) =>\n Buffer.isBuffer(part) ? part : Buffer.from(part),\n );\n const body = Buffer.concat(buffers);\n\n return new Promise((resolve, reject) => {\n superagent\n .put(data.signedURL)\n .send(body)\n .set('content-type', 'application/zip')\n .on('progress', onProgress)\n .end((err) => {\n logger.debug({ bucket, key, url: data.uploadURL }, 'uploadToS3');\n if (err) {\n logger.error({ err }, 'uploadToS3');\n return reject(err);\n }\n return resolve({ bucket, key, url: data.uploadURL });\n });\n });\n};\n\nexport default uploadToS3WithRetry;\n", "import archiver from 'archiver';\nimport du from 'du';\nimport fs from 'fs';\nimport chalk from 'chalk';\nimport logger from '../../../utilities/logger';\nimport path from 'path';\n\nexport default async function zip({\n files,\n fileSizeLimit = 20,\n onError,\n onProgress,\n appPkgJson,\n}) {\n logger.debug({ files }, 'zip');\n const stream = archiver('zip');\n\n // good practice to catch warnings (ie stat failures and other non-blocking errors)\n stream.on('warning', (err) => {\n if (err.code === 'ENOENT') {\n console.warn(err);\n logger.warn({ err }, 'zip: stream warning ENOENT');\n } else {\n // throw error\n onError(err);\n }\n });\n\n // good practice to catch this error explicitly\n stream.on('error', (err) => {\n onError(err);\n });\n\n // Grab the file size and more\n const processedFiles = await Promise.all(\n files.map(async (file) => {\n if (file.content !== undefined && file.content !== null) {\n const buffer = Buffer.isBuffer(file.content)\n ? file.content\n : Buffer.from(file.content);\n\n return {\n ...file,\n contentBuffer: buffer,\n isDirectory: false,\n size: buffer.length,\n virtual: true,\n };\n }\n\n if (!file.from) {\n throw new Error(\n `Zip entry for ${file.to} must provide either a source path or in-memory content.`,\n );\n }\n\n const stats = fs.lstatSync(file.from);\n const isDirectory = stats.isDirectory();\n\n return {\n ...file,\n isDirectory,\n stats,\n size: isDirectory ? await du(file.from) : stats.size,\n virtual: false,\n };\n }),\n );\n\n const totalFileSize = processedFiles.reduce((sum, b) => sum + b.size, 0);\n // Does file size sum exceed limit?\n if (totalFileSize > fileSizeLimit * 1000000) {\n onError(\n new Error(\n [\n `\\n\\nYour app is larger than ${fileSizeLimit}MB. Your app is ${chalk.bold.red.underline(\n (totalFileSize / 1000000).toFixed(1) + 'MB',\n )}.\\n`,\n `You may be including unnecessary files in your app(see the \\`appPath\\` and \\`appFiles\\` options).`,\n `If not, this limit can be raised by setting the \\`uploadSizeLimit\\` option.`,\n `Learn more at https://www.npmjs.com/package/@todesktop/cli#uploadsizelimit---optional-number`,\n ].join('\\n'),\n ),\n );\n return stream;\n }\n\n // Add the files to the ZIP\n processedFiles.forEach((entry) => {\n const { from, isDirectory, stats, to, virtual, contentBuffer, mode } =\n entry;\n if (virtual) {\n stream.append(contentBuffer, {\n name: to,\n mode: mode ?? 0o644,\n });\n } else if (isDirectory) {\n stream.directory(from, to);\n } else if (appPkgJson && to === path.join('app', 'package.json')) {\n stream.append(JSON.stringify(appPkgJson), {\n name: to,\n });\n } else {\n stream.file(from, { name: to, mode: mode ?? stats.mode });\n }\n });\n\n // finalize the archive (ie we are done appending files but streams have to finish yet)\n // 'close', 'end' or 'finish' may be fired right after calling this method so register to them beforehand\n stream.finalize();\n\n stream.on('progress', (progress) =>\n onProgress({\n ...progress,\n percentage: (progress.entries.processed / progress.entries.total) * 100,\n }),\n );\n\n return stream;\n}\n", "import fastGlob from 'fast-glob';\nimport fs from 'fs';\nimport path from 'path';\nimport yaml from 'js-yaml';\nimport logger from '../../../../utilities/logger';\nimport type { ProjectConfig } from '../../../../types';\nimport type { IPackageJson } from 'package-json-type';\n\ntype WorkspaceType = 'npm' | 'pnpm';\n\ntype DependencySection =\n | 'dependencies'\n | 'optionalDependencies'\n | 'devDependencies';\n\ninterface WorkspacePackage {\n dir: string;\n manifest: IPackageJson;\n name: string;\n realDir: string;\n}\n\ninterface DependencyReference {\n name: string;\n spec: string;\n section: DependencySection;\n}\n\ninterface WorkspaceBundleInput {\n appPath: string;\n appPkgJson: IPackageJson;\n config: ProjectConfig;\n}\n\nexport interface ZipEntry {\n content?: string | Buffer;\n from?: string;\n mode?: number;\n to: string;\n}\n\nexport interface WorkspaceBundleResult {\n appPackageJson: IPackageJson;\n entries: ZipEntry[];\n shouldBundle: boolean;\n}\n\ninterface WorkspaceDefinition {\n globs: string[];\n rootDir: string;\n realRootDir: string;\n type: WorkspaceType;\n warning?: string;\n catalog?: Record<string, string>;\n}\n\ninterface PackageRewriteContext {\n bundlePath: string;\n packageName: string;\n}\n\nconst BUNDLED_ROOT = 'bundledPackages';\nconst DEFAULT_IGNORE_GLOBS = [\n '**/node_modules/**',\n '**/.git/**',\n '**/.hg/**',\n '**/.svn/**',\n '**/.DS_Store',\n '**/npm-debug.log',\n '**/yarn-error.log',\n];\n\nexport default async function prepareWorkspaceBundle(\n input: WorkspaceBundleInput,\n): Promise<WorkspaceBundleResult> {\n const { config, appPkgJson, appPath } = input;\n if (!config.bundleWorkspacePackages?.enabled) {\n return {\n appPackageJson: appPkgJson,\n entries: [],\n shouldBundle: false,\n };\n }\n\n const workspace = findWorkspaceDefinition(appPath, appPkgJson);\n if (!workspace) {\n throw new Error(\n 'Bundle workspace packages is enabled but no workspace root could be found.',\n );\n }\n\n if (workspace.warning) {\n logger.warn(workspace.warning);\n }\n\n const workspacePackages = collectWorkspacePackages(workspace);\n const bundledPackageNames = determineBundleClosure({\n appPath,\n appPkgJson,\n workspace,\n workspacePackages,\n });\n\n if (!bundledPackageNames.size) {\n logger.info('No workspace packages matched bundle criteria.');\n return {\n appPackageJson: appPkgJson,\n entries: [],\n shouldBundle: false,\n };\n }\n\n const bundleEntries: ZipEntry[] = [];\n const appRewriteMap: Record<string, string> = {};\n const bundledPackageContexts = new Map<string, PackageRewriteContext>();\n\n const sortedPackageNames = Array.from(bundledPackageNames).sort();\n for (const packageName of sortedPackageNames) {\n const pkg = workspacePackages.get(packageName);\n if (!pkg) {\n throw new Error(\n `Workspace package \"${packageName}\" referenced for bundling but not found in workspace map.`,\n );\n }\n const bundlePath = getBundlePath(packageName);\n bundledPackageContexts.set(packageName, { bundlePath, packageName });\n appRewriteMap[packageName] = `file:../${path.posix.join(\n BUNDLED_ROOT,\n bundlePath,\n )}`;\n\n const packageEntries = await buildPackageEntries({\n bundlePath,\n workspacePackage: pkg,\n bundledNames: bundledPackageNames,\n contexts: bundledPackageContexts,\n workspace,\n });\n bundleEntries.push(...packageEntries.files);\n bundleEntries.push(packageEntries.packageJsonEntry);\n }\n\n const rewrittenAppPkgJson = applyRewriteMap(\n appPkgJson,\n appRewriteMap,\n workspace.catalog,\n );\n\n logger.info(\n `Bundling ${sortedPackageNames.length} workspace package(s) from ${workspace.type} workspace at ${workspace.rootDir}`,\n );\n logger.info(`Bundled packages: ${sortedPackageNames.join(', ')}`);\n\n return {\n appPackageJson: rewrittenAppPkgJson,\n entries: bundleEntries,\n shouldBundle: true,\n };\n}\n\nfunction findWorkspaceDefinition(\n appPath: string,\n appPkgJson: IPackageJson,\n): WorkspaceDefinition | undefined {\n const appDir = path.resolve(appPath);\n let currentDir = appDir;\n let previousDir = '';\n const pnpmPreference = detectPnpmPreference(appPkgJson);\n\n while (currentDir !== previousDir) {\n const pnpmFile = path.join(currentDir, 'pnpm-workspace.yaml');\n const packageJsonPath = path.join(currentDir, 'package.json');\n\n const hasPnpm = fs.existsSync(pnpmFile);\n const packageJson = readPackageJsonIfExists(packageJsonPath);\n const npmWorkspaces = getNpmWorkspaces(packageJson);\n\n if (hasPnpm || npmWorkspaces.length) {\n const pnpmDefinition = hasPnpm\n ? createPnpmDefinition({ pnpmFile, rootDir: currentDir })\n : undefined;\n const npmDefinition = npmWorkspaces.length\n ? createNpmDefinition({ globs: npmWorkspaces, rootDir: currentDir })\n : undefined;\n\n const chosen = chooseWorkspaceDefinition({\n pnpmPreference,\n pnpmDefinition,\n npmDefinition,\n });\n\n if (chosen) {\n const includesApp = workspaceIncludesPath({\n appDir,\n globs: chosen.globs,\n rootDir: chosen.rootDir,\n });\n if (includesApp) {\n return chosen;\n }\n }\n }\n\n previousDir = currentDir;\n currentDir = path.dirname(currentDir);\n }\n\n return undefined;\n}\n\nfunction detectPnpmPreference(appPkgJson: IPackageJson): boolean {\n const pkgManager = appPkgJson.packageManager;\n if (typeof pkgManager !== 'string') {\n return false;\n }\n return pkgManager.startsWith('pnpm@');\n}\n\nfunction readPackageJsonIfExists(filePath: string): IPackageJson | undefined {\n if (!fs.existsSync(filePath)) {\n return undefined;\n }\n try {\n return JSON.parse(fs.readFileSync(filePath, 'utf8'));\n } catch (error) {\n throw new Error(`Unable to parse package.json at ${filePath}: ${error}`);\n }\n}\n\nfunction getNpmWorkspaces(packageJson?: IPackageJson): string[] {\n if (!packageJson) {\n return [];\n }\n const { workspaces } = packageJson as Record<string, any>;\n if (!workspaces) {\n return [];\n }\n if (Array.isArray(workspaces)) {\n return workspaces.filter(\n (value): value is string => typeof value === 'string',\n );\n }\n if (typeof workspaces === 'object' && Array.isArray(workspaces.packages)) {\n return workspaces.packages.filter(\n (value): value is string => typeof value === 'string',\n );\n }\n return [];\n}\n\nfunction createPnpmDefinition({\n pnpmFile,\n rootDir,\n}: {\n pnpmFile: string;\n rootDir: string;\n}): WorkspaceDefinition {\n const { packages, catalog } = parsePnpmWorkspaceFile(pnpmFile);\n if (!packages.length) {\n throw new Error(\n `pnpm workspace file at ${pnpmFile} does not define any packages.`,\n );\n }\n return {\n globs: packages,\n rootDir,\n realRootDir: fs.realpathSync(rootDir),\n type: 'pnpm',\n catalog,\n };\n}\n\nfunction createNpmDefinition({\n globs,\n rootDir,\n}: {\n globs: string[];\n rootDir: string;\n}): WorkspaceDefinition {\n return {\n globs,\n rootDir,\n realRootDir: fs.realpathSync(rootDir),\n type: 'npm',\n };\n}\n\nfunction chooseWorkspaceDefinition({\n pnpmPreference,\n pnpmDefinition,\n npmDefinition,\n}: {\n pnpmPreference: boolean;\n pnpmDefinition?: WorkspaceDefinition;\n npmDefinition?: WorkspaceDefinition;\n}): WorkspaceDefinition | undefined {\n if (pnpmDefinition && npmDefinition) {\n const warning =\n 'Both pnpm-workspace.yaml and package.json workspaces detected; defaulting to pnpm.';\n if (pnpmPreference) {\n return pnpmDefinition;\n }\n return { ...pnpmDefinition, warning };\n }\n return pnpmDefinition || npmDefinition;\n}\n\nfunction parsePnpmWorkspaceFile(filePath: string): {\n packages: string[];\n catalog: Record<string, string>;\n} {\n const content = fs.readFileSync(filePath, 'utf8');\n const parsed = yaml.load(content);\n\n let packagesField: unknown;\n let catalogField: unknown;\n let catalogsField: unknown;\n\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n const parsedObj = parsed as Record<string, unknown>;\n packagesField = parsedObj.packages;\n catalogField = parsedObj.catalog;\n catalogsField = parsedObj.catalogs;\n } else {\n packagesField = parsed;\n }\n\n if (!Array.isArray(packagesField)) {\n throw new Error(\n `pnpm workspace file at ${filePath} does not define any packages.`,\n );\n }\n\n const packages = packagesField\n .map((value) => (typeof value === 'string' ? value.trim() : ''))\n .filter((value): value is string => Boolean(value));\n\n if (!packages.length) {\n throw new Error(\n `pnpm workspace file at ${filePath} does not define any packages.`,\n );\n }\n\n // Parse catalog if it exists\n const catalog: Record<string, string> = {};\n if (\n catalogField &&\n typeof catalogField === 'object' &&\n !Array.isArray(catalogField)\n ) {\n for (const [key, value] of Object.entries(catalogField)) {\n if (typeof value === 'string') {\n catalog[key] = value;\n }\n }\n }\n\n // Parse and flatten named catalogs onto the main catalog\n // Named catalogs are flattened with the key format: \"catalogName:packageName\"\n if (\n catalogsField &&\n typeof catalogsField === 'object' &&\n !Array.isArray(catalogsField)\n ) {\n for (const [catalogName, catalogContent] of Object.entries(catalogsField)) {\n if (\n catalogContent &&\n typeof catalogContent === 'object' &&\n !Array.isArray(catalogContent)\n ) {\n for (const [packageName, version] of Object.entries(catalogContent)) {\n if (typeof version === 'string') {\n // Flatten named catalog entries with format \"catalogName:packageName\"\n catalog[`${catalogName}:${packageName}`] = version;\n }\n }\n }\n }\n }\n\n return { packages, catalog };\n}\n\nfunction workspaceIncludesPath({\n appDir,\n globs,\n rootDir,\n}: {\n appDir: string;\n globs: string[];\n rootDir: string;\n}) {\n const target = path.resolve(appDir);\n const matches = fastGlob.sync(globs, {\n absolute: true,\n cwd: rootDir,\n onlyDirectories: true,\n followSymbolicLinks: false,\n ignore: ['**/node_modules/**'],\n });\n return matches.some((dir) => path.resolve(dir) === target);\n}\n\nfunction collectWorkspacePackages(\n definition: WorkspaceDefinition,\n): Map<string, WorkspacePackage> {\n const { globs, rootDir } = definition;\n const directories = fastGlob.sync(globs, {\n absolute: true,\n cwd: rootDir,\n onlyDirectories: true,\n followSymbolicLinks: false,\n ignore: ['**/node_modules/**'],\n });\n\n const packages = new Map<string, WorkspacePackage>();\n\n for (const dir of directories) {\n const packageJsonPath = path.join(dir, 'package.json');\n if (!fs.existsSync(packageJsonPath)) {\n continue;\n }\n const manifest = readPackageJsonIfExists(packageJsonPath);\n if (!manifest || !manifest.name) {\n continue;\n }\n const { name } = manifest;\n if (packages.has(name)) {\n const existing = packages.get(name);\n throw new Error(\n `Duplicate workspace package name \"${name}\" found at ${existing?.dir} and ${dir}`,\n );\n }\n const absoluteDir = path.resolve(dir);\n const pkg: WorkspacePackage = {\n dir: absoluteDir,\n manifest,\n name,\n realDir: fs.realpathSync(absoluteDir),\n };\n packages.set(name, pkg);\n }\n\n return packages;\n}\n\nfunction determineBundleClosure({\n appPath,\n appPkgJson,\n workspace,\n workspacePackages,\n}: {\n appPath: string;\n appPkgJson: IPackageJson;\n workspace: WorkspaceDefinition;\n workspacePackages: Map<string, WorkspacePackage>;\n}): Set<string> {\n const bundled = new Set<string>();\n const queue: DependencyReference[] = [];\n\n collectDependencyReferences({\n manifest: appPkgJson,\n packageDir: appPath,\n queue,\n workspace,\n workspacePackages,\n sourceName: 'app',\n });\n\n while (queue.length) {\n const ref = queue.shift();\n if (!ref) {\n continue;\n }\n const targetPackage = workspacePackages.get(ref.name);\n if (!targetPackage) {\n throw new Error(\n `Dependency \"${ref.name}\" referenced via ${ref.section} is not part of the workspace.`,\n );\n }\n if (bundled.has(targetPackage.name)) {\n continue;\n }\n bundled.add(targetPackage.name);\n collectDependencyReferences({\n manifest: targetPackage.manifest,\n packageDir: targetPackage.dir,\n queue,\n workspace,\n workspacePackages,\n sourceName: targetPackage.name,\n });\n }\n\n return bundled;\n}\n\nfunction collectDependencyReferences({\n manifest,\n packageDir,\n queue,\n workspace,\n workspacePackages,\n sourceName,\n}: {\n manifest: IPackageJson;\n packageDir: string;\n queue: DependencyReference[];\n workspace: WorkspaceDefinition;\n workspacePackages: Map<string, WorkspacePackage>;\n sourceName: string;\n}) {\n const sections: DependencySection[] = [\n 'dependencies',\n 'optionalDependencies',\n 'devDependencies',\n ];\n\n for (const section of sections) {\n const deps = manifest[section];\n if (!deps) continue;\n for (const [depName, spec] of Object.entries(deps)) {\n if (typeof spec !== 'string') continue;\n const target = resolveWorkspaceTarget({\n depName,\n packageDir,\n spec,\n workspace,\n workspacePackages,\n sourceName,\n });\n if (target) {\n queue.push({ name: target, spec, section });\n }\n }\n }\n}\n\nfunction resolveWorkspaceTarget({\n depName,\n packageDir,\n spec,\n workspace,\n workspacePackages,\n sourceName,\n}: {\n depName: string;\n packageDir: string;\n spec: string;\n workspace: WorkspaceDefinition;\n workspacePackages: Map<string, WorkspacePackage>;\n sourceName: string;\n}): string | undefined {\n if (spec.startsWith('workspace:')) {\n if (!workspacePackages.has(depName)) {\n throw new Error(\n `Workspace dependency \"${depName}\" referenced by ${sourceName} is not declared in workspace globs.`,\n );\n }\n return depName;\n }\n\n if (spec.startsWith('file:')) {\n const targetPath = spec.slice('file:'.length);\n const resolved = path.resolve(packageDir, targetPath);\n const targetRealPath = fs.realpathSync(resolved);\n const relativeToRoot = path.relative(workspace.realRootDir, targetRealPath);\n if (relativeToRoot.startsWith('..') || path.isAbsolute(relativeToRoot)) {\n throw new Error(\n `Dependency \"${depName}\" from ${sourceName} resolves outside of workspace root via spec ${spec}.`,\n );\n }\n for (const pkg of workspacePackages.values()) {\n if (pkg.realDir === targetRealPath) {\n return pkg.name;\n }\n }\n throw new Error(\n `Dependency \"${depName}\" from ${sourceName} points to ${resolved}, which is not a known workspace package.`,\n );\n }\n\n return undefined;\n}\n\nfunction getBundlePath(packageName: string): string {\n if (packageName.startsWith('@')) {\n const [scope, ...rest] = packageName.split('/');\n return [scope, rest.join('/')].filter(Boolean).join('/');\n }\n return packageName;\n}\n\nfunction applyRewriteMap(\n manifest: IPackageJson,\n rewriteMap: Record<string, string>,\n catalog?: Record<string, string>,\n): IPackageJson {\n const clone = JSON.parse(JSON.stringify(manifest));\n const sections: DependencySection[] = [\n 'dependencies',\n 'optionalDependencies',\n 'devDependencies',\n ];\n\n for (const section of sections) {\n const sectionDeps = clone[section];\n if (!sectionDeps) continue;\n\n // Apply path rewrites for workspace packages\n for (const [depName, rewrite] of Object.entries(rewriteMap)) {\n if (sectionDeps[depName]) {\n sectionDeps[depName] = rewrite;\n }\n }\n\n // Resolve catalog references\n if (catalog) {\n for (const [depName, spec] of Object.entries(sectionDeps)) {\n if (typeof spec === 'string' && spec.startsWith('catalog:')) {\n let catalogKey: string;\n\n if (spec === 'catalog:') {\n // \"catalog:\" means use the default catalog with the package name\n catalogKey = depName;\n } else {\n // \"catalog:someName\" could be either:\n // 1. A named catalog reference (look for \"someName:depName\")\n // 2. A specific package in default catalog (look for \"someName\")\n const catalogRef = spec.slice('catalog:'.length);\n const namedCatalogKey = `${catalogRef}:${depName}`;\n\n // Try named catalog first (e.g., \"react17:react\")\n if (catalog[namedCatalogKey]) {\n catalogKey = namedCatalogKey;\n } else {\n // Fall back to direct catalog reference\n catalogKey = catalogRef;\n }\n }\n\n const resolvedVersion = catalog[catalogKey];\n if (resolvedVersion) {\n sectionDeps[depName] = resolvedVersion;\n } else {\n throw new Error(\n `Catalog reference \"${spec}\" for dependency \"${depName}\" not found in pnpm catalog. Available catalog entries: ${Object.keys(\n catalog,\n ).join(', ')}`,\n );\n }\n }\n }\n }\n }\n\n return clone;\n}\n\nasync function buildPackageEntries({\n bundlePath,\n workspacePackage,\n bundledNames,\n contexts,\n workspace,\n}: {\n bundlePath: string;\n workspacePackage: WorkspacePackage;\n bundledNames: Set<string>;\n contexts: Map<string, PackageRewriteContext>;\n workspace: WorkspaceDefinition;\n}): Promise<{\n files: ZipEntry[];\n packageJsonEntry: ZipEntry;\n}> {\n const packageDir = workspacePackage.dir;\n const { manifest } = workspacePackage;\n const filesToInclude = await gatherPackageFiles({ packageDir, manifest });\n const files: ZipEntry[] = filesToInclude.map((absolutePath) => {\n const relative = path.relative(packageDir, absolutePath);\n const posixRelative = toPosix(path.join(bundlePath, relative));\n return {\n from: absolutePath,\n to: path.posix.join(BUNDLED_ROOT, posixRelative),\n };\n });\n\n const rewrites = buildRewriteMapForPackage({\n bundlePath,\n manifest,\n bundledNames,\n contexts,\n });\n\n const packageJsonEntry: ZipEntry = {\n content: Buffer.from(\n `${JSON.stringify(\n applyRewriteMap(manifest, rewrites, workspace.catalog),\n null,\n 2,\n )}\\n`,\n ),\n to: path.posix.join(BUNDLED_ROOT, bundlePath, 'package.json'),\n };\n\n return { files, packageJsonEntry };\n}\n\nasync function gatherPackageFiles({\n packageDir,\n manifest,\n}: {\n packageDir: string;\n manifest: IPackageJson;\n}): Promise<string[]> {\n const declaredPatterns = Array.isArray((manifest as any).files)\n ? ((manifest as any).files as string[])\n : ['**/*'];\n\n const normalizedPatterns = declaredPatterns.flatMap((pattern) => {\n if (pattern.includes('*')) {\n return [pattern];\n }\n const absoluteCandidate = path.join(packageDir, pattern);\n try {\n const stats = fs.statSync(absoluteCandidate);\n if (stats.isDirectory()) {\n const posixPattern = pattern.replace(/\\\\/g, '/');\n return [pattern, `${posixPattern}/**/*`];\n }\n } catch (_error) {\n // ignore stat errors and treat as file pattern\n }\n return [pattern];\n });\n\n const matchedFiles = await fastGlob(normalizedPatterns, {\n absolute: true,\n cwd: packageDir,\n dot: true,\n onlyFiles: true,\n followSymbolicLinks: false,\n ignore: DEFAULT_IGNORE_GLOBS,\n });\n\n const extras = [\n 'README',\n 'README.md',\n 'README.txt',\n 'LICENSE',\n 'LICENCE',\n 'NOTICE',\n 'CHANGELOG',\n 'CHANGELOG.md',\n ];\n\n for (const extra of extras) {\n const extraPath = path.join(packageDir, extra);\n if (fs.existsSync(extraPath) && fs.statSync(extraPath).isFile()) {\n matchedFiles.push(extraPath);\n }\n }\n\n const uniqueFiles = Array.from(new Set(matchedFiles));\n\n return uniqueFiles.filter((filePath) => !filePath.endsWith('package.json'));\n}\n\nfunction buildRewriteMapForPackage({\n bundlePath,\n manifest,\n bundledNames,\n contexts,\n}: {\n bundlePath: string;\n manifest: IPackageJson;\n bundledNames: Set<string>;\n contexts: Map<string, PackageRewriteContext>;\n}): Record<string, string> {\n const rewriteMap: Record<string, string> = {};\n const sections: DependencySection[] = [\n 'dependencies',\n 'optionalDependencies',\n 'devDependencies',\n ];\n\n for (const section of sections) {\n const deps = manifest[section];\n if (!deps) continue;\n for (const [depName, spec] of Object.entries(deps)) {\n if (typeof spec !== 'string') continue;\n if (bundledNames.has(depName)) {\n const targetBundlePath =\n contexts.get(depName)?.bundlePath ?? getBundlePath(depName);\n const fromPath = path.posix.join(BUNDLED_ROOT, bundlePath);\n const toPath = path.posix.join(BUNDLED_ROOT, targetBundlePath);\n const relative = path.posix.relative(fromPath, toPath) || '.';\n rewriteMap[depName] = `file:${relative}`;\n }\n }\n }\n return rewriteMap;\n}\n\nfunction toPosix(targetPath: string) {\n return targetPath.split(path.sep).join(path.posix.sep);\n}\n", "import { useStdin } from 'ink';\nimport { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport isCi from 'is-ci';\n\n// components\nimport Login from './Login';\n\n// logic\nimport { signInWithCustomToken } from '../utilities/firestore';\nimport { getAuthConfig, setAuthConfig } from '../utilities/configStore';\nimport postToFirebaseFunction from '../utilities/postToFirebaseFunction';\nimport getEnvironmentVariables from '../utilities/getEnvironmentVariables';\nimport ErrorDisplay from './ErrorDisplay';\nimport LoadingText from './LoadingText';\n\nconst LoginHOC = ({ children, isInteractive = true }) => {\n const [isLoggedIn, setIsLoggedIn] = useState(false);\n const [isEffectDone, setEffectDone] = useState(false);\n const [error, setError] = useState(null);\n const { isRawModeSupported } = useStdin();\n\n // use effect for determining if tokens exist and are valid\n useEffect(() => {\n async function isAccessTokenValid() {\n const { accessToken, email, jwtToken } = getAuthConfig();\n let userCreds = null;\n\n const { TODESKTOP_ACCESS_TOKEN, TODESKTOP_EMAIL } =\n getEnvironmentVariables();\n\n // 1. attempt log in with environment variables if present\n try {\n if (TODESKTOP_ACCESS_TOKEN && TODESKTOP_EMAIL) {\n const newJwtToken = await postToFirebaseFunction(\n 'loginWithAccessToken',\n {\n email: TODESKTOP_EMAIL,\n accessToken: TODESKTOP_ACCESS_TOKEN,\n },\n );\n\n if (newJwtToken) {\n userCreds = await signInWithCustomToken(newJwtToken);\n if (userCreds.user) setIsLoggedIn(true);\n }\n // if no environment variables set and is in a CI, set alert message and exit\n } else if (!isRawModeSupported || isCi) {\n setError(\n new Error(\n 'ToDesktop environment variables not found. When automating builds with your CI provider, you need to specify environment variables for TODESKTOP_EMAIL and TODESKTOP_ACCESS_TOKEN.',\n ),\n );\n }\n } catch (err) {\n if (typeof err === 'object') {\n err.message = 'Log in with environment variables failed.';\n }\n setError(err);\n }\n\n // 2. attempt log in with jwtToken if present\n try {\n if (!userCreds && jwtToken) {\n userCreds = await signInWithCustomToken(jwtToken);\n if (userCreds.user) setIsLoggedIn(true);\n }\n } catch {\n // do nothing, attempt login with accessToken and email\n }\n\n // 3. attempt log in with accessToken and email on disk\n try {\n if (!userCreds && accessToken && email) {\n const newJwtToken = await postToFirebaseFunction(\n 'loginWithAccessToken',\n { email, accessToken },\n );\n\n if (newJwtToken) {\n userCreds = await signInWithCustomToken(newJwtToken);\n setAuthConfig(email, accessToken, newJwtToken);\n if (userCreds.user) setIsLoggedIn(true);\n }\n }\n } catch {\n // do nothing: no error state and not logged in state means render login\n }\n\n setEffectDone(true);\n }\n\n isAccessTokenValid();\n }, [isRawModeSupported]);\n\n if (error && isInteractive) {\n return <ErrorDisplay error={error} />;\n }\n\n if (!isEffectDone) {\n return <LoadingText />;\n }\n\n if (!isLoggedIn && isInteractive) {\n return <Login setIsLoggedIn={setIsLoggedIn} />;\n }\n\n return <>{children}</>;\n};\n\nLoginHOC.propTypes = {\n children: PropTypes.object,\n isInteractive: PropTypes.bool,\n};\n\nexport default LoginHOC;\n", "// modules\nimport { Box, Text } from 'ink';\nimport PropTypes from 'prop-types';\nimport { useState } from 'react';\nimport { Form, Field } from 'react-final-form';\n\n// components\nimport TextInput from './TextInput';\nimport ErrorDisplay from './ErrorDisplay';\n\n// logic\nimport postToFirebaseFunction from '../utilities/postToFirebaseFunction';\nimport { signInWithCustomToken } from '../utilities/firestore';\nimport { setAuthConfig } from '../utilities/configStore';\n\nconst loginFields = [\n {\n name: 'email',\n label: 'Your email',\n placeholder: 'name@email.com',\n Input: TextInput,\n validate: (value) => {\n if (!value) return 'Required';\n },\n },\n {\n name: 'accessToken',\n label: 'Your access token',\n placeholder: '********',\n Input: TextInput,\n validate: (value) => {\n if (!value) return 'Required';\n },\n mask: '*',\n },\n];\n\nconst Login = ({ setIsLoggedIn }) => {\n const [activeField, setActiveField] = useState(0);\n const [error, setError] = useState(null);\n const [failureMessage, setFailureMessage] = useState(null);\n const [isSubmittingForm, setIsSubmittingForm] = useState(false);\n\n const onFailure = (message) => {\n setIsSubmittingForm(false);\n setFailureMessage(message);\n setActiveField(0);\n };\n\n // login handler that verifies accessToken and email with that in firebase\n const onSubmitLogin = async ({ email, accessToken }) => {\n setFailureMessage(null);\n setIsSubmittingForm(true);\n\n try {\n const jwtToken = await postToFirebaseFunction('loginWithAccessToken', {\n email,\n accessToken,\n });\n\n if (jwtToken) {\n await signInWithCustomToken(jwtToken);\n setAuthConfig(email, accessToken, jwtToken);\n setIsLoggedIn(true);\n } else {\n onFailure('Incorrrect credentials. Try again');\n }\n } catch (err) {\n if (err.code === 500) {\n setError(err);\n } else {\n onFailure(\n `Login unsuccessful: ${err?.response?.data?.message || err.message}`,\n );\n }\n }\n };\n\n if (error) return <ErrorDisplay error={error} />;\n\n return (\n <>\n <Text>You are not currently logged in.</Text>\n <Text>Log in below:</Text>\n <Box marginBottom={1} />\n <Form onSubmit={onSubmitLogin}>\n {({ handleSubmit, validating }) => (\n <Box flexDirection=\"column\">\n {loginFields.map(\n ({ name, label, placeholder, validate, Input, mask }, index) => (\n <Field name={name} key={name} validate={validate}>\n {({ input, meta }) => (\n <Box flexDirection=\"column\">\n {activeField >= index ? (\n <Box>\n <Text bold={activeField === index}>{label}: </Text>\n {activeField === index ? (\n <Input\n {...input}\n mask={mask}\n placeholder={placeholder}\n onSubmit={() => {\n if (meta.valid && !validating) {\n setActiveField((value) => value + 1); // go to next field\n if (activeField === loginFields.length - 1) {\n // last field, so submit\n handleSubmit();\n }\n } else {\n input.onBlur(); // mark as touched to show error\n }\n }}\n />\n ) : (\n (input.value && (\n <Text>\n {name === 'accessToken'\n ? input.value.replace(/./gi, '*')\n : input.value}\n </Text>\n )) ||\n (placeholder && (\n <Text color=\"gray\">{placeholder}</Text>\n ))\n )}\n {meta.invalid && meta.touched && (\n <Box marginLeft={2} marginRight={1}>\n <Text color=\"red\">\u2716</Text>\n </Box>\n )}\n {meta.error && meta.touched && (\n <Error errorMessage={meta.error} />\n )}\n </Box>\n ) : null}\n </Box>\n )}\n </Field>\n ),\n )}\n </Box>\n )}\n </Form>\n\n {isSubmittingForm && (\n <Box marginTop={1}>\n <Text>Logging in...</Text>\n </Box>\n )}\n\n {failureMessage && <Error errorMessage={failureMessage} marginTop />}\n </>\n );\n};\n\nconst Error = ({\n errorMessage,\n marginTop,\n}: {\n errorMessage: string;\n marginTop?: boolean;\n}) => (\n <Box marginTop={marginTop ? 1 : 0}>\n <Text color=\"red\">{errorMessage}</Text>\n </Box>\n);\n\nError.propTypes = {\n errorMessage: PropTypes.string.isRequired,\n marginTop: PropTypes.bool,\n};\n\nLogin.propTypes = {\n setIsLoggedIn: PropTypes.func.isRequired,\n};\n\nexport default Login;\n", "import InkTextInput from 'ink-text-input';\nimport React from 'react';\n\nconst TextInput = ({ onBlur, onFocus, ...props }: TextInputProps) => {\n React.useEffect(() => {\n onFocus();\n return onBlur;\n }, [onFocus, onBlur]);\n return <InkTextInput {...props} showCursor />;\n};\n\nexport default TextInput;\n\ntype InkTextInputProps = React.ComponentProps<typeof InkTextInput>;\ninterface TextInputProps extends InkTextInputProps {\n onBlur: () => void;\n onFocus: () => void;\n}\n", "import { Text, useStdout } from 'ink';\n\nconst LoadingText = ({ text = 'Loading' }: { text?: string }) => {\n const { stdout } = useStdout();\n const stdOutRedirected = !stdout.isTTY;\n if (stdOutRedirected) {\n // Don't write Loading text if we're not in a TTY (e.g... redirected to a file)\n return null;\n }\n\n return <Text>{text}...</Text>;\n};\n\nexport default LoadingText;\n", "import * as Sentry from '@sentry/node';\nimport React, { ReactNode } from 'react';\n\nclass ErrorBoundary extends React.Component<\n { children: ReactNode },\n { error?: Error; eventId?: string }\n> {\n constructor(props) {\n super(props);\n this.state = { error: null };\n }\n\n static getDerivedStateFromError(error) {\n return { error };\n }\n\n componentDidCatch(error, errorInfo) {\n Sentry.withScope((scope) => {\n scope.setExtras(errorInfo);\n Sentry.captureException(error);\n });\n }\n\n render() {\n const { children } = this.props;\n const { error } = this.state;\n\n if (error) {\n throw error;\n }\n\n return children;\n }\n}\n\nexport default ErrorBoundary;\n", "import { Box, Text, useStdin } from 'ink';\nimport SelectInput from 'ink-select-input';\nimport PropTypes from 'prop-types';\nimport { ReactNode, useEffect, useState } from 'react';\nimport type { Build } from '@todesktop/shared';\nimport CancelBuild from '../../../components/CancelBuild';\nimport CustomSelectInputIndicator from '../../../components/CustomSelectInputIndicator';\nimport CustomSelectInputItem from '../../../components/CustomSelectInputItem';\nimport ErrorDisplay from '../../../components/ErrorDisplay';\nimport ViewBuild from '../../../components/ViewBuild';\nimport {\n isBuildCancellable,\n isBuildRunning,\n} from '../../../utilities/buildStatus';\nimport {\n collection,\n query,\n where,\n orderBy,\n limit,\n getDocs,\n} from 'firebase/firestore';\nimport firestore from '../../../utilities/firestore';\nimport getProjectConfig from '../../../utilities/projectConfig/getProjectConfig';\nimport logger from '../../../utilities/logger';\nimport useInput from '../../../utilities/useInput';\nimport useExit from '../../../utilities/useExit';\nimport isCi from 'is-ci';\nimport findAppUserId from '../../../utilities/findAppUserId';\nimport { readQueryDocument } from '../../../utilities/firestoreData';\n\nconst OngoingBuildGuard = ({\n children,\n commandUsed,\n configPath,\n}: {\n children: ReactNode;\n commandUsed: string;\n configPath?: string;\n}) => {\n const { isRawModeSupported } = useStdin();\n const exit = useExit();\n const [{ appId, builds, error, isLoading, itemChosen }, setState] = useState<{\n appId: string | null;\n builds: Build[];\n error: Error | null;\n isLoading: boolean;\n itemChosen: { value: string } | null;\n }>({\n appId: null,\n builds: [],\n error: null,\n isLoading: true,\n itemChosen: null,\n });\n\n useEffect(() => {\n if (!isLoading) {\n return;\n }\n\n (async () => {\n try {\n const applicationId = getProjectConfig(configPath).config.id;\n const { id } = await findAppUserId(applicationId);\n\n const now = new Date();\n const twentyFourHoursAgo = new Date(\n now.getTime() - 24 * 60 * 60 * 1000,\n );\n\n const buildsQuery = query(\n collection(\n firestore,\n `users/${id}/applications/${applicationId}/builds`,\n ),\n where('createdAt', '>=', twentyFourHoursAgo),\n orderBy('createdAt', 'desc'),\n limit(10),\n );\n const buildsResult = await getDocs(buildsQuery);\n\n const stateUpdates: {\n appId: string | null;\n isLoading: boolean;\n builds: Build[];\n } = {\n appId: applicationId,\n isLoading: false,\n builds: [],\n };\n\n if (!buildsResult.empty) {\n const latestBuild = readQueryDocument<Build>(buildsResult.docs[0]);\n const isRunning =\n isBuildRunning(latestBuild) && latestBuild.status !== 'preparation';\n logger.debug(\n { isRunning },\n 'OngoingBuildGuard component: got latest build',\n );\n\n stateUpdates.builds = buildsResult.docs\n .map((doc) => readQueryDocument<Build>(doc))\n .filter((build) => {\n if (isBuildRunning(build) && build.status !== 'preparation') {\n return true;\n }\n return false;\n });\n }\n\n setState((previousState) => ({\n ...previousState,\n ...stateUpdates,\n }));\n } catch (e) {\n setState((previousState) => ({\n ...previousState,\n error: e as Error,\n }));\n }\n })();\n }, [builds, itemChosen, isLoading, isRawModeSupported, configPath]);\n\n /*\n Because we're using <SelectInput/>, we need to explicitly handle when\n ctrl+c is pressed. `useInput` takes care of that.\n See https://github.com/vadimdemedes/pastel/issues/38\n */\n useInput(() => {}, { isActive: Boolean(isRawModeSupported) });\n\n if (error) {\n return <ErrorDisplay commandUsed={commandUsed} error={error} />;\n }\n\n if (isLoading) {\n return <Text>...</Text>;\n }\n\n if (itemChosen) {\n logger.debug({ itemChosen }, 'OngoingBuildGuard component: item chosen');\n const build = builds.find(Boolean);\n\n if (itemChosen.value === 'view' && build) {\n return <ViewBuild commandUsed={commandUsed} id={build.id} />;\n } else if (itemChosen.value === 'cancel' && build && appId) {\n return (\n <CancelBuild appId={appId} commandUsed={commandUsed} id={build.id}>\n {children}\n </CancelBuild>\n );\n } else if (itemChosen.value === 'concurrent') {\n return <>{children}</>;\n } else {\n setTimeout(exit, 10);\n }\n }\n\n if (builds.length && isCi === false && isRawModeSupported) {\n const latestBuild = builds.find(Boolean);\n const multiple = builds.length > 1;\n\n const items = [\n {\n label: `View ${multiple ? 'latest' : 'it'}`,\n value: 'view',\n },\n ];\n\n if (builds.some((build) => isBuildCancellable(build))) {\n items.push({\n label: `Cancel ${multiple ? 'latest' : 'it'} and start a new build`,\n value: 'cancel',\n });\n\n items.push({\n label: 'Start a concurrent build',\n value: 'concurrent',\n });\n }\n\n items.push({\n label: 'Exit',\n value: 'exit',\n });\n const handleSelect = (itemChosen: { value: string }) =>\n setState((previousState) => ({ ...previousState, itemChosen }));\n\n return (\n <>\n <Box marginBottom={1}>\n <Text bold>\n {multiple\n ? 'There are ongoing builds '\n : 'There is an ongoing build '}\n </Text>\n <Text>\n ({latestBuild?.appName}\n {latestBuild?.appVersion ? ` v${latestBuild.appVersion}` : ''})\n </Text>\n </Box>\n <SelectInput\n indicatorComponent={CustomSelectInputIndicator}\n itemComponent={CustomSelectInputItem}\n items={items}\n onSelect={handleSelect}\n />\n </>\n );\n } else {\n return <>{children}</>;\n }\n};\n\nOngoingBuildGuard.propTypes = {\n commandUsed: PropTypes.string.isRequired,\n children: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n configPath: PropTypes.string,\n};\n\nexport default OngoingBuildGuard;\n", "import { Box, Text } from 'ink';\nimport { ComponentProps } from 'react';\n\nexport default function CustomSelectInputIndicator({\n isSelected,\n ...props\n}: {\n isSelected?: boolean;\n} & ComponentProps<typeof Box>) {\n const selectIndicator =\n process.env.NODE_ENV === 'test' || process.platform === 'win32' ? '>' : '\u276F';\n\n return (\n <Box marginRight={1} {...props}>\n <Text>{isSelected ? selectIndicator : ' '}</Text>\n </Box>\n );\n}\n", "import { Box, Text } from 'ink';\nimport { ComponentProps } from 'react';\n\nexport default function CustomSelectInputItem({\n isSelected,\n label,\n ...props\n}: {\n isSelected?: boolean;\n label: string;\n} & ComponentProps<typeof Box>) {\n return (\n <Text bold={isSelected} color={isSelected ? undefined : 'gray'} {...props}>\n {label}\n </Text>\n );\n}\n", "// libs\nimport { Text } from 'ink';\nimport PropTypes from 'prop-types';\nimport { useEffect, useState } from 'react';\n\n// components\nimport BuildProgress from './BuildProgress';\nimport ErrorDisplay from './ErrorDisplay';\nimport MainLayout from './MainLayout';\n\n// utils\nimport getLatestBuildId from '../utilities/getLatestBuildId';\nimport getProjectConfig from '../utilities/projectConfig/getProjectConfig';\nimport logForCI from '../utilities/logForCI';\nimport shouldExitOnBuildFailure from '../utilities/shouldExitOnBuildFailure';\nimport subscribeToBuild from '../utilities/subscribeToBuild';\nimport useExit from '../utilities/useExit';\nimport findAppUserId from '../utilities/findAppUserId';\nimport LoadingText from './LoadingText';\n\ninterface ViewBuildProps {\n commandUsed: string;\n id?: string;\n // eslint-disable-next-line react/no-unused-prop-types\n shouldViewLatest?: boolean;\n configPath?: string;\n}\n\nconst ViewBuild = ({ commandUsed, id, configPath }: ViewBuildProps) => {\n const exit = useExit();\n const [\n {\n appId,\n arbitraryMessageComponent,\n build,\n error,\n hasBuildEverFailed,\n isLoading,\n },\n setState,\n ] = useState({\n appId: null,\n arbitraryMessageComponent: null,\n build: null,\n error: null,\n hasBuildEverFailed: false,\n isLoading: true,\n });\n\n const onError = (e) => {\n const error = e.response ? e.response.data : e;\n logForCI(error);\n setState((prevState) => ({\n ...prevState,\n error,\n }));\n };\n\n useEffect(() => {\n let firebaseUnsubscribe;\n\n async function viewBuild() {\n let config;\n try {\n // This will throw if validation fails:\n config = getProjectConfig(configPath).config;\n } catch (e) {\n setState((previousState) => ({ ...previousState, error: e }));\n return;\n }\n\n const { id: userId } = await findAppUserId(config.id);\n\n const subscribe = (buildId) => {\n subscribeToBuild({\n appId: config.id,\n buildId,\n onDataReceived: (data) => {\n if (!data) {\n onError(\n new Error(\n `No such build exists (${buildId}). Please contact us if this is an error`,\n ),\n );\n }\n setState((prevState) => ({\n ...prevState,\n appId: config.id,\n build: data,\n isLoading: false,\n }));\n },\n userId,\n })\n .then((firebaseUnsubscribeResult) => {\n firebaseUnsubscribe = firebaseUnsubscribeResult;\n })\n .catch(onError);\n };\n\n if (id) {\n subscribe(id);\n } else {\n getLatestBuildId({ appId: config.id, userId })\n .catch(onError)\n .then((latestBuildId) => {\n if (!latestBuildId) {\n setState((previousState) => ({\n ...previousState,\n arbitraryMessageComponent: <Text>There are no builds yet</Text>,\n }));\n return;\n }\n return subscribe(latestBuildId);\n });\n }\n }\n\n viewBuild();\n\n return () => {\n if (firebaseUnsubscribe) {\n firebaseUnsubscribe();\n }\n };\n }, [id, configPath]);\n\n // Exit if the build has errored and settled\n useEffect(() => {\n if (hasBuildEverFailed && shouldExitOnBuildFailure(build)) {\n setTimeout(() => exit(new Error('Build has failed')), 10);\n }\n }, [build, exit, hasBuildEverFailed]);\n\n // Exit once an arbitrary message exists\n useEffect(() => {\n if (arbitraryMessageComponent) {\n setTimeout(() => exit(new Error('Validation failed')), 10);\n }\n }, [arbitraryMessageComponent, exit]);\n\n if (error) {\n return <ErrorDisplay commandUsed={commandUsed} error={error} />;\n }\n\n if (arbitraryMessageComponent) {\n return arbitraryMessageComponent;\n }\n\n if (isLoading) {\n return <LoadingText />;\n }\n\n const onBuildFailure = () => {\n if (hasBuildEverFailed) {\n return;\n }\n setState((prevState) => ({\n ...prevState,\n hasBuildEverFailed: true,\n }));\n };\n\n return (\n <MainLayout\n appId={appId}\n appName={build.appName}\n appVersion={build.appVersion}\n build={build}\n commandUsed={commandUsed}\n hasBuildEverFailed={hasBuildEverFailed}\n >\n <BuildProgress build={build} onBuildFailure={onBuildFailure} />\n </MainLayout>\n );\n};\n\nViewBuild.propTypes = {\n id: (props, _propName, componentName) => {\n if ([props.id, props.shouldViewLatest].filter(Boolean).length !== 1) {\n return new Error(\n `Exactly one of 'id' and 'shouldViewLatest' must be specified in '${componentName}'`,\n );\n }\n\n const type = typeof props.id;\n if (!['string', 'undefined'].includes(type)) {\n return new Error(\n `'id' is a '${type}', not a string, in '${componentName}'.`,\n );\n }\n },\n commandUsed: PropTypes.string.isRequired,\n configPath: PropTypes.string,\n};\n\nexport default ViewBuild;\n", "import {\n doc,\n getDoc,\n collection,\n query,\n orderBy,\n limit,\n getDocs,\n} from 'firebase/firestore';\nimport firestore from './firestore';\nimport logger from './logger';\n\nexport default async function getLatestBuildId({\n appId,\n userId,\n}: {\n appId: string;\n userId: string;\n}): Promise<string | undefined> {\n logger.debug({ appId }, 'getLatestBuildId');\n const appRef = doc(firestore, `users/${userId}/applications/${appId}`);\n const appSnapshot = await getDoc(appRef);\n\n if (!appSnapshot.exists()) {\n throw new Error(`Application with ID of ${appId} doesn't exist.`);\n }\n\n const buildsQuery = query(\n collection(firestore, `users/${userId}/applications/${appId}/builds`),\n orderBy('createdAt', 'desc'),\n limit(1),\n );\n const buildsResult = await getDocs(buildsQuery);\n\n return buildsResult.empty ? undefined : buildsResult.docs[0].id;\n}\n", "import type { DocData, DocSnapshot } from '../types';\nimport { doc, onSnapshot } from 'firebase/firestore';\nimport firestore from './firestore';\nimport { readDocumentSnapshot } from './firestoreData';\nimport logger from './logger';\n\nexport default async function subscribeToFirebaseDoc<T extends DocData>(\n key: string,\n receiver: (data: { snapshot: DocSnapshot<T>; data: T | undefined }) => void,\n) {\n return new Promise<() => void>((resolve, reject) => {\n logger.debug({ key }, 'subscribeToFirebaseDoc');\n const unsubscribe = onSnapshot(\n doc(firestore, key),\n (snapshot) => {\n receiver({\n snapshot: snapshot as DocSnapshot<T>,\n data: readDocumentSnapshot<T>(snapshot),\n });\n\n resolve(unsubscribe);\n },\n (err) => {\n reject(err);\n },\n );\n });\n}\n", "import subscribeToFirebaseDoc from './subscribeToFirebaseDoc';\n\nexport default async ({ appId, buildId, onDataReceived, userId }) => {\n try {\n return await subscribeToFirebaseDoc(\n `users/${userId}/applications/${appId}/builds/${buildId}`,\n async ({ data }) => {\n onDataReceived(data);\n },\n );\n } catch (e) {\n e.message = `Failed while subscribing to build; ${e.message}`;\n throw e;\n }\n};\n", "import {\n collection,\n getDocs,\n doc,\n getDoc,\n type CollectionReference,\n type DocumentData,\n} from 'firebase/firestore';\nimport firestore, { currentUser } from './firestore';\nimport { readQuerySnapshot } from './firestoreData';\n\nconst getCollection = async <T>(\n collectionRef: CollectionReference<DocumentData>,\n): Promise<T[]> => {\n const resp = await getDocs(collectionRef);\n return readQuerySnapshot<T>(resp);\n};\n\nconst acceptedUsersCollection = (id) =>\n collection(firestore, `users/${id}/acceptedUsers`);\n\nconst findAppUserId = async (appId): Promise<User> => {\n const authUser = currentUser();\n if (!authUser?.uid) {\n throw new Error('A signed-in Firebase user is required');\n }\n\n const acceptedUsers = await getCollection<AcceptedUser>(\n acceptedUsersCollection(authUser.uid),\n );\n const primaryUser: User = {\n id: authUser.uid,\n label: authUser.email ?? authUser.uid,\n };\n\n const users = [\n primaryUser,\n ...acceptedUsers.map((user) => ({ id: user.id, label: user.email })),\n ];\n\n for (const user of users) {\n try {\n const docRef = doc(firestore, `users/${user.id}/applications/${appId}`);\n const docSnap = await getDoc(docRef);\n\n if (docSnap.exists()) return user;\n } catch (err) {\n // will throw an error if user doesn't have access\n console.error(err);\n }\n }\n\n return primaryUser;\n};\n\ninterface User {\n id: string;\n label: string;\n}\n\ninterface AcceptedUser {\n email: string;\n id: string;\n}\n\nexport default findAppUserId;\n", "import { useEffect, useState } from 'react';\n\nimport { onUserAuth } from './firestore';\nimport { identify, track, ANALYTICS_EVENT } from './analytics';\nimport logger from './logger';\nimport getProjectConfig from './projectConfig/getProjectConfig';\n\nexport const useAnalyticsCommand = (\n command,\n flags: any = {},\n properties = {},\n) => {\n const [hasAttemptedTracking, setTrackingAttempt] = useState(false);\n\n logger.info({ command, flags, properties }, 'useAnalyticsCommand');\n\n try {\n if (flags.projectPath) {\n properties = {\n ...properties,\n ...getProjectConfig(),\n };\n }\n } catch {\n // do nothing\n }\n\n useEffect(() => {\n const authUnsubscribe = onUserAuth(async (user) => {\n /**\n * Only identify if there's a user id (stops use of anon id).\n * Subsequent track callback will thus always be tied to a user.\n */\n if (user.uid) {\n identify(\n user.uid,\n {\n email: user.email,\n displayName: user.displayName,\n },\n () => {\n track(\n ANALYTICS_EVENT.CLI_COMMAND,\n {\n ...properties,\n flags,\n command,\n },\n () => setTrackingAttempt(true),\n );\n authUnsubscribe?.();\n },\n );\n }\n });\n\n // if it takes longer than 5 secs to identify a user, just set the\n // tracking attempt to true so that other commands aren't waiting\n // forever to terminate (see whoami component)\n setTimeout(() => setTrackingAttempt(true), 5000);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // leave empty - this should only ever execute once (on mount)\n\n return { hasAttemptedTracking };\n};\n", "import Build from './components/Build';\nimport LoginHOC from '../../components/LoginHOC';\nimport ErrorBoundary from '../../components/ErrorBoundary';\nimport OngoingBuildGuard from './components/OngoingBuildGuard';\nimport { useAnalyticsCommand } from '../../utilities/useAnalytics';\nimport { BuildFlags } from './utilities/types';\n\nexport default function BuildCommand({\n configPath,\n flags,\n}: {\n configPath?: string;\n flags: BuildFlags;\n}) {\n useAnalyticsCommand('build', {\n async: flags.exitAfterUploading,\n codeSign: flags.shouldCodeSign,\n config: configPath,\n webhook: flags.onBuildFinishedWebhook,\n });\n\n const commandUsed = 'todesktop build';\n\n return (\n <ErrorBoundary>\n <LoginHOC>\n <OngoingBuildGuard configPath={configPath} commandUsed={commandUsed}>\n <Build\n commandUsed={commandUsed}\n configPath={configPath}\n flags={flags}\n />\n </OngoingBuildGuard>\n </LoginHOC>\n </ErrorBoundary>\n );\n}\n", "import { Box, Text } from 'ink';\nimport PropTypes from 'prop-types';\nimport { useEffect, useState } from 'react';\nimport ErrorDisplay from './ErrorDisplay';\nimport Table from './Table';\nimport capitalize from '../utilities/capitalize';\nimport getBuilds from '../utilities/getBuilds';\nimport getProjectConfig from '../utilities/projectConfig/getProjectConfig';\nimport getRelativeDateFromDateString from '../utilities/getRelativeDateFromDateString';\nimport logForCI from '../utilities/logForCI';\nimport useInput from '../utilities/useInput';\nimport useExit from '../utilities/useExit';\nimport findAppUserId from '../utilities/findAppUserId';\nimport SyntaxHighlight from './SyntaxHighlight';\nimport LoadingText from './LoadingText';\n\nconst ViewBuilds = ({\n commandUsed,\n configPath,\n count,\n format,\n exit: shouldExitAfterViewingBuilds = false,\n}) => {\n const exit = useExit();\n const [\n {\n builds,\n error,\n hasMoreToLoad,\n isInitialLoadComplete,\n isLoading,\n projectConfig,\n startAfter,\n user,\n },\n setState,\n ] = useState({\n builds: [],\n error: null,\n hasMoreToLoad: true,\n isInitialLoadComplete: false,\n isLoading: false,\n projectConfig: null,\n startAfter: null,\n user: null,\n });\n\n useInput((input, key) => {\n if (key.escape) {\n exit();\n }\n\n if (input === ' ' || key.downArrow || key.pageDown || key.return) {\n if (!isInitialLoadComplete || !hasMoreToLoad) {\n return;\n }\n\n setState((previousState) => ({\n ...previousState,\n startAfter: builds[builds.length - 1].createdAt,\n }));\n }\n });\n\n useEffect(() => {\n async function viewBuilds() {\n if (\n error ||\n isLoading ||\n (isInitialLoadComplete && (!hasMoreToLoad || !startAfter))\n ) {\n return;\n }\n\n if (!['table', 'json'].includes(format)) {\n setState((previousState) => ({\n ...previousState,\n error: new Error(\n `Invalid output format \"${format}\". Valid formats are \"table\" and \"json\".`,\n ),\n }));\n return;\n }\n\n setState((previousState) => ({\n ...previousState,\n isLoading: true,\n }));\n\n let config;\n try {\n // This will throw if validation fails:\n config = projectConfig || getProjectConfig(configPath).config;\n } catch (e) {\n setState((previousState) => ({ ...previousState, error: e }));\n return;\n }\n\n const pageSize = count || 5;\n const user = await findAppUserId(config.id);\n\n getBuilds({\n appId: config.id,\n limit: pageSize + 1,\n startAfter,\n userId: user.id,\n })\n .then((buildsResult) => {\n setState((previousState) => {\n const stateUpdates = {\n builds: [],\n hasMoreToLoad: buildsResult.length > pageSize,\n isInitialLoadComplete: true,\n isLoading: false,\n projectConfig: config,\n startAfter: null,\n user,\n };\n\n if (buildsResult.length) {\n stateUpdates.builds = [\n ...previousState.builds,\n ...buildsResult.slice(0, pageSize),\n ];\n }\n return {\n ...previousState,\n ...stateUpdates,\n };\n });\n })\n .catch((e) => {\n logForCI(e);\n setState((previousState) => ({\n ...previousState,\n error: e,\n isLoading: false,\n }));\n });\n }\n\n viewBuilds();\n }, [\n error,\n hasMoreToLoad,\n isInitialLoadComplete,\n isLoading,\n projectConfig,\n startAfter,\n configPath,\n format,\n count,\n ]);\n\n // Exit once all are loaded\n useEffect(() => {\n if (!hasMoreToLoad) {\n setTimeout(exit, 10);\n }\n }, [exit, hasMoreToLoad]);\n\n // Exit the process once the initial build data has been displayed if user has set the `--exit` flag\n useEffect(() => {\n if (!isLoading && isInitialLoadComplete && shouldExitAfterViewingBuilds) {\n setTimeout(exit, 10);\n }\n }, [exit, isLoading, shouldExitAfterViewingBuilds, isInitialLoadComplete]);\n\n if (error) {\n return <ErrorDisplay commandUsed={commandUsed} error={error} />;\n }\n\n if (!isInitialLoadComplete) {\n return <LoadingText />;\n }\n\n if (builds.length) {\n const formatData = (builds) =>\n builds.map((build) => ({\n 'ID': build.id,\n 'Version': build.appVersion || 'n/a',\n 'Creation date': getRelativeDateFromDateString(build.createdAt),\n 'Status': capitalize(build.status),\n 'Release date': build.releasedAt\n ? getRelativeDateFromDateString(build.releasedAt)\n : 'Unreleased',\n 'Owner': user ? user.label : 'unknown',\n }));\n\n const getCellTextProps = ({ key, props, value }) => {\n const result = { ...props };\n\n if (key === 'Status') {\n const status = value.toLowerCase();\n if (status === 'succeeded') {\n result.color = 'green';\n } else if (status === 'failed') {\n result.color = 'red';\n } else if (status === 'cancelled') {\n result.dimColor = true;\n }\n } else if (key === 'Version' && value.toLowerCase() === 'n/a') {\n result.dimColor = true;\n } else if (\n key === 'Release date' &&\n value.toLowerCase() === 'unreleased'\n ) {\n result.dimColor = true;\n }\n\n return result;\n };\n\n return (\n <>\n {format === 'table' ? (\n <Table\n getCellTextProps={getCellTextProps}\n data={formatData(builds)}\n />\n ) : null}\n {format === 'json' ? (\n <SyntaxHighlight object={removeAppBuilderLibConfig(builds)} />\n ) : null}\n {!shouldExitAfterViewingBuilds && builds.length > 0 ? (\n <Box>\n <Text color=\"gray\" dimColor>\n {isLoading\n ? 'Loading more...'\n : hasMoreToLoad\n ? `Showing the latest ${builds.length} builds. Press space/down to load more.`\n : `Showing all (${builds.length}) builds`}\n </Text>\n </Box>\n ) : null}\n </>\n );\n } else {\n return <Text>There are no builds yet</Text>;\n }\n};\n\nconst removeAppBuilderLibConfig = (builds) => {\n // Remove the appBuilderLib config from the builds because it's difficult to display\n // and not very useful to the user.\n return builds.map((build) => {\n if (build.mac && build.mac.appBuilderLibConfig) {\n delete build.mac.appBuilderLibConfig;\n }\n if (build.windows && build.windows.appBuilderLibConfig) {\n delete build.windows.appBuilderLibConfig;\n }\n if (build.linux && build.linux.appBuilderLibConfig) {\n delete build.linux.appBuilderLibConfig;\n }\n return build;\n });\n};\n\nViewBuilds.propTypes = {\n commandUsed: PropTypes.string.isRequired,\n configPath: PropTypes.string,\n count: PropTypes.number,\n format: PropTypes.string,\n exit: PropTypes.bool,\n};\n\nexport default ViewBuilds;\n", "import { Box } from 'ink';\nimport PropTypes from 'prop-types';\nimport TableEnd from './TableEnd';\nimport TableHead from './TableHead';\nimport TableBody from './TableBody';\nimport getKeyDetails from '../utilities/getKeyDetails';\n\n/*\n This component prints (the array of objects given) in a table.\n The array must not be empty.\n The keys are used as headers.\n Column widths are based on the longest value (object key or value).\n It is assumed that the same keys exist in all items.\n*/\nconst Table = ({ data, getCellTextProps }) => {\n const keyDetails = getKeyDetails(data);\n\n return (\n <Box flexDirection=\"column\">\n <TableHead keyDetails={keyDetails} />\n <TableBody\n data={data}\n getCellTextProps={getCellTextProps}\n keyDetails={keyDetails}\n />\n <TableEnd keyDetails={keyDetails} />\n </Box>\n );\n};\n\nTable.propTypes = {\n data: (props, _propName, componentName) => {\n const type = typeof props.data;\n if (Array.isArray('array')) {\n return new Error(\n `'data' prop must be an array ('${type}' given) in ${componentName} component`,\n );\n }\n\n if (props.data.length === 0) {\n return new Error(\n `'data' prop must not be empty, in ${componentName} component`,\n );\n }\n },\n getCellTextProps: PropTypes.func,\n};\n\nexport default Table;\n", "import { Box, Text } from 'ink';\nimport PropTypes from 'prop-types';\n\n/*\n See Table component\n*/\nconst TableEnd = ({ keyDetails, ...props }) => {\n let content = '\u2514';\n content += Object.values(keyDetails)\n .map(({ width }) => '\u2500'.repeat(width + 2))\n .join('\u2534');\n content += '\u2518';\n\n return (\n <Box {...props}>\n <Text>{content}</Text>\n </Box>\n );\n};\n\nTableEnd.propTypes = {\n keyDetails: PropTypes.object.isRequired,\n};\n\nexport default TableEnd;\n", "import { Box, Text } from 'ink';\nimport PropTypes from 'prop-types';\nimport { Fragment } from 'react';\n\n/*\n See Table component\n*/\nconst TableHead = ({ keyDetails, ...props }) => {\n let topLine = '\u250C';\n topLine += Object.values(keyDetails)\n .map(({ width }) => '\u2500'.repeat(width + 2))\n .join('\u252C');\n topLine += '\u2510';\n\n const contentLineElements = Object.values(keyDetails).map(\n ({ key, width }, index) => {\n return (\n <Fragment key={key}>\n {index > 0 ? <Text> \u2502 </Text> : null}\n <Box width={width}>\n <Text bold>{key}</Text>\n </Box>\n </Fragment>\n );\n },\n );\n\n return (\n <Box flexDirection=\"column\" {...props}>\n <Box>\n <Text>{topLine}</Text>\n </Box>\n <Box>\n <Box>\n <Text>\u2502 </Text>\n {contentLineElements}\n <Text> \u2502</Text>\n </Box>\n </Box>\n </Box>\n );\n};\n\nTableHead.propTypes = {\n bottomLinePrefix: PropTypes.string,\n keyDetails: PropTypes.object.isRequired,\n};\n\nexport default TableHead;\n", "/* eslint-disable react/no-array-index-key */\n\nimport PropTypes from 'prop-types';\nimport TableRow from './TableRow';\n\n/*\n See Table component\n*/\nconst TableBody = ({ data, getCellTextProps, keyDetails }) => {\n return (\n <>\n {data.map((rowData, index) => (\n <TableRow\n data={rowData}\n getCellTextProps={getCellTextProps}\n key={index}\n keyDetails={keyDetails}\n />\n ))}\n </>\n );\n};\n\nTableBody.propTypes = {\n data: (props, _propName, componentName) => {\n const type = typeof props.data;\n if (Array.isArray('array')) {\n return new Error(\n `'data' prop must be an array ('${type}' given) in ${componentName} component`,\n );\n }\n\n if (props.data.length === 0) {\n return new Error(\n `'data' prop must not be empty, in ${componentName} component`,\n );\n }\n },\n getCellTextProps: PropTypes.func,\n keyDetails: PropTypes.object.isRequired,\n};\n\nexport default TableBody;\n", "import { Box, Text } from 'ink';\nimport PropTypes from 'prop-types';\n\n/*\n See Table component\n*/\nconst TableRow = ({\n data,\n getCellTextProps = ({ props }) => props,\n keyDetails,\n textProps = {},\n}: {\n data: object;\n getCellTextProps?: (...args: any[]) => any;\n keyDetails: object;\n textProps?: object;\n}) => {\n let topLine = '\u251C';\n topLine += Object.values(keyDetails)\n .map(({ width }) => '\u2500'.repeat(width + 2))\n .join('\u253C');\n topLine += '\u2524';\n\n const content = (\n <>\n <Text>\u2502 </Text>\n {Object.entries(data).map(([key, value], index) => {\n return (\n <Box key={key}>\n {index > 0 ? <Text> \u2502 </Text> : null}\n <Box width={keyDetails[key].width}>\n <Text\n {...getCellTextProps({\n key,\n props: textProps,\n rowData: data,\n value,\n })}\n >\n {value}\n </Text>\n </Box>\n </Box>\n );\n })}\n <Text> \u2502</Text>\n </>\n );\n\n return (\n <Box flexDirection=\"column\">\n <Text>{topLine}</Text>\n <Box>{content}</Box>\n </Box>\n );\n};\n\nTableRow.propTypes = {\n data: PropTypes.object.isRequired,\n getCellTextProps: PropTypes.func,\n keyDetails: PropTypes.object.isRequired,\n textProps: PropTypes.object,\n};\n\nexport default TableRow;\n", "// This is used to get the column widths for tables\nexport default (data) => {\n const result = {};\n Object.keys(data[0]).forEach((key) => {\n result[key] = {\n key,\n width: Math.max(\n key.length,\n data\n .map((item) => item[key].toString().length)\n .sort((a, b) => b - a)[0],\n ),\n };\n });\n return result;\n};\n", "export default (input) => {\n if (typeof input !== 'string') {\n return '';\n }\n return input.charAt(0).toUpperCase() + input.slice(1);\n};\n", "import { Build } from '../types';\nimport {\n doc,\n getDoc,\n collection,\n query as firestoreQuery,\n orderBy,\n startAfter as firestoreStartAfter,\n limit as firestoreLimit,\n getDocs,\n QueryConstraint,\n} from 'firebase/firestore';\nimport firestore from './firestore';\nimport { readQuerySnapshot } from './firestoreData';\nimport logger from './logger';\n\nexport default async function getBuilds({\n addWhereClauses = () => [],\n userId,\n appId,\n limit = 5,\n startAfter = null,\n}: {\n addWhereClauses?: () => QueryConstraint[];\n userId: string;\n appId: string;\n limit?: number;\n startAfter?: string;\n}): Promise<Build[]> {\n logger.debug({ appId, limit, startAfter }, 'getBuilds');\n const appRef = doc(firestore, `users/${userId}/applications/${appId}`);\n const appSnapshot = await getDoc(appRef);\n\n if (!appSnapshot.exists()) {\n throw new Error(`Application with ID of ${appId} doesn't exist.`);\n }\n\n const buildsCollection = collection(\n firestore,\n `users/${userId}/applications/${appId}/builds`,\n );\n const constraints = [...addWhereClauses(), orderBy('createdAt', 'desc')];\n\n if (startAfter) {\n constraints.push(firestoreStartAfter(startAfter));\n }\n\n constraints.push(firestoreLimit(limit));\n\n const query = firestoreQuery(buildsCollection, ...constraints);\n const buildsResult = await getDocs(query);\n\n if (buildsResult.empty) {\n return [];\n }\n\n return readQuerySnapshot<Build>(buildsResult);\n}\n", "import * as dateFns from 'date-fns';\n\nexport default (input) =>\n dateFns.formatDistance(new Date(input), new Date()) + ' ago';\n", "import chalk, { ColorSupport } from 'chalk';\nimport * as React from 'react';\nimport { Text, useStdout } from 'ink';\nimport util from 'util';\n\nconst supportsColor = chalk.stderr.supportsColor as ColorSupport;\n\nconst SyntaxHighlight = ({\n object,\n colors = supportsColor?.hasBasic,\n}: {\n object: object;\n colors?: boolean;\n}) => {\n const { stdout } = useStdout();\n\n const highlightedCode = React.useMemo(() => {\n return stdout.isTTY\n ? util.inspect(object, { colors, depth: 6 })\n : JSON.stringify(object, null, 2);\n }, [colors, object, stdout.isTTY]);\n\n return <Text wrap=\"end\">{highlightedCode}</Text>;\n};\n\nexport default SyntaxHighlight;\n", "import LoginHOC from '../components/LoginHOC';\nimport ErrorBoundary from '../components/ErrorBoundary';\nimport ViewBuild from '../components/ViewBuild';\nimport ViewBuilds from '../components/ViewBuilds';\nimport { useAnalyticsCommand } from '../utilities/useAnalytics';\n\nconst BuildsCommand = ({\n id,\n shouldViewLatest,\n configPath = null,\n count,\n format = 'table',\n exit,\n}: {\n id?: string;\n shouldViewLatest?: boolean;\n configPath?: string;\n count?: number;\n format?: 'table' | 'json';\n exit?: boolean;\n}) => {\n useAnalyticsCommand('builds', {\n id,\n shouldViewLatest,\n configPath,\n count,\n format,\n exit,\n });\n\n const getContents = () => {\n let commandUsed = 'todesktop builds';\n if (id) {\n commandUsed += ' <id>';\n return (\n <ViewBuild commandUsed={commandUsed} id={id} configPath={configPath} />\n );\n } else if (shouldViewLatest) {\n commandUsed += ' --latest';\n return (\n <ViewBuild\n commandUsed={commandUsed}\n shouldViewLatest\n configPath={configPath}\n />\n );\n } else {\n return (\n <ViewBuilds\n commandUsed={commandUsed}\n configPath={configPath}\n count={count}\n format={format}\n exit={exit}\n />\n );\n }\n };\n\n return (\n <ErrorBoundary>\n <LoginHOC>{getContents()}</LoginHOC>\n </ErrorBoundary>\n );\n};\n\nexport default BuildsCommand;\n", "import { useState } from 'react';\nimport ErrorBoundary from '../../components/ErrorBoundary';\nimport LoginHOC from '../../components/LoginHOC';\nimport IntrospectSession from './components/IntrospectSession';\nimport BuildSelector from './components/BuildSelector';\nimport PlatformSelector from './components/PlatformSelector';\nimport LatestBuildLoader from './components/LatestBuildLoader';\nimport { useAnalyticsCommand } from '../../utilities/useAnalytics';\nimport { normalizePlatform } from './utilities/sessionManager';\n\nexport default function IntrospectCommand({\n buildId: initialBuildId,\n platform: initialPlatform,\n verbose,\n latest,\n configPath,\n}: {\n buildId?: string;\n platform?: string;\n verbose?: boolean;\n latest?: boolean;\n configPath?: string;\n}) {\n const [buildId, setBuildId] = useState<string | undefined>(initialBuildId);\n const [platform, setPlatform] = useState<string | undefined>(initialPlatform);\n\n useAnalyticsCommand('introspect', {\n buildId,\n platform,\n latest,\n hasInitialBuildId: !!initialBuildId,\n hasInitialPlatform: !!initialPlatform,\n });\n\n const renderContent = () => {\n if (latest && !buildId) {\n return (\n <LatestBuildLoader\n configPath={configPath}\n onBuildFound={(id) => setBuildId(id)}\n />\n );\n }\n\n if (!buildId) {\n return (\n <BuildSelector\n configPath={configPath}\n onSelect={(id) => setBuildId(id)}\n />\n );\n }\n\n if (!platform) {\n return (\n <PlatformSelector\n buildId={buildId}\n configPath={configPath}\n onSelect={(p) => setPlatform(p)}\n />\n );\n }\n\n const normalizedPlatform = normalizePlatform(platform);\n\n return (\n <IntrospectSession\n buildId={buildId}\n platform={normalizedPlatform}\n verbose={verbose ?? false}\n />\n );\n };\n\n return (\n <ErrorBoundary>\n <LoginHOC>{renderContent()}</LoginHOC>\n </ErrorBoundary>\n );\n}\n", "import { Box, Text } from 'ink';\nimport { useEffect, useRef, useState } from 'react';\nimport { doc, onSnapshot } from 'firebase/firestore';\nimport type { User } from 'firebase/auth';\nimport WebSocket from 'ws';\nimport LoadingText from '../../../components/LoadingText';\nimport { currentUser } from '../../../utilities/firestore';\nimport db from '../../../utilities/firestore';\nimport {\n startIntrospectionSession,\n SessionResponse,\n} from '../utilities/sessionManager';\nimport {\n connectToTunnel as createWebSocketConnection,\n isControlMessage,\n parseControlMessage,\n} from '../utilities/websocketClient';\nimport {\n enterInteractiveMode,\n restoreTerminal,\n} from '../utilities/terminalManager';\nimport { startTokenRefreshMonitoring } from '../utilities/tokenRefresh';\nimport useExit from '../../../utilities/useExit';\n\ntype SessionStatus =\n | 'starting-session'\n | 'waiting'\n | 'connecting'\n | 'connected'\n | 'error'\n | 'closed';\n\nexport default function IntrospectSession({\n buildId,\n platform,\n verbose,\n}: {\n buildId: string;\n platform: 'mac' | 'windows' | 'linux';\n verbose: boolean;\n}) {\n const exit = useExit();\n const exitRef = useRef(exit);\n useEffect(() => {\n exitRef.current = exit;\n }, [exit]);\n const [status, setStatus] = useState<SessionStatus>('starting-session');\n const [error, setError] = useState<string>('');\n const [tunnelUrl, setTunnelUrl] = useState<string>('');\n const [jti, setJti] = useState<string>('');\n const socketRef = useRef<WebSocket | null>(null);\n const pingIntervalRef = useRef<NodeJS.Timeout | null>(null);\n const tokenRefreshIntervalRef = useRef<NodeJS.Timeout | null>(null);\n const retryCountRef = useRef(0);\n const retryTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const isRetryingRef = useRef(false);\n const hasEndedRef = useRef(false);\n\n useEffect(() => {\n let unsubscribe: (() => void) | null = null;\n let timeoutTimer: NodeJS.Timeout | null = null;\n\n function cleanup() {\n if (timeoutTimer) {\n clearTimeout(timeoutTimer);\n timeoutTimer = null;\n }\n if (pingIntervalRef.current) {\n clearInterval(pingIntervalRef.current);\n pingIntervalRef.current = null;\n }\n if (tokenRefreshIntervalRef.current) {\n clearInterval(tokenRefreshIntervalRef.current);\n tokenRefreshIntervalRef.current = null;\n }\n if (retryTimeoutRef.current) {\n clearTimeout(retryTimeoutRef.current);\n retryTimeoutRef.current = null;\n }\n retryCountRef.current = 0;\n isRetryingRef.current = false;\n if (unsubscribe) {\n unsubscribe();\n unsubscribe = null;\n }\n const socket = socketRef.current;\n if (socket) {\n socket.removeAllListeners();\n socket.once('error', () => {});\n try {\n if (socket.readyState === WebSocket.OPEN) {\n socket.close();\n } else if (socket.readyState === WebSocket.CONNECTING) {\n socket.once('open', () => {\n try {\n socket.close();\n } catch {\n // ignore\n }\n });\n socket.terminate();\n } else {\n socket.terminate();\n }\n } catch {\n // ignore\n }\n socketRef.current = null;\n }\n restoreTerminal();\n }\n\n function exitSession({\n message,\n isError = false,\n }: {\n message?: string;\n isError?: boolean;\n } = {}) {\n if (hasEndedRef.current) {\n return;\n }\n\n hasEndedRef.current = true;\n cleanup();\n\n if (message) {\n const output = `\\n${message}`;\n if (isError) {\n console.error(output);\n } else {\n console.log(output);\n }\n }\n\n const exitFn = exitRef.current;\n if (isError) {\n exitFn(\n new Error(message ?? 'Introspection session ended with an error'),\n );\n } else {\n exitFn();\n }\n }\n\n async function startSession() {\n try {\n const user = currentUser();\n if (!user) {\n throw new Error('Not authenticated. Please run: todesktop login');\n }\n\n setStatus('starting-session');\n\n const sessionResponse = await startIntrospectionSession(\n buildId,\n platform,\n );\n\n setJti(sessionResponse.jti);\n\n if (verbose) {\n console.log(\n `\\nSession started (JTI: ${\n sessionResponse.jti\n }, expires: ${new Date(\n sessionResponse.expiresAt * 1000,\n ).toISOString()})\\n`,\n );\n }\n\n if (sessionResponse.tunnelUrl) {\n await connectToTunnel(\n { ...sessionResponse, tunnelUrl: sessionResponse.tunnelUrl },\n user as User,\n );\n } else {\n setStatus('waiting');\n\n const buildDocRef = doc(db, sessionResponse.buildPath);\n\n timeoutTimer = setTimeout(\n () => {\n exitSession({\n message:\n `Timeout waiting for ${platform} introspection to be ready.\\n` +\n `The ${platform} build may not have started yet.`,\n isError: true,\n });\n },\n 5 * 60 * 1000,\n );\n\n unsubscribe = onSnapshot(buildDocRef, async (snapshot) => {\n const data = snapshot.data();\n const platformData = data?.introspect?.[platform];\n\n if (!platformData || hasEndedRef.current) return;\n\n const { breakpointStatus } = platformData;\n const { shellStatus } = platformData;\n\n if (\n (shellStatus === 'ready' || shellStatus === 'disconnected') &&\n platformData.tunnelUrl\n ) {\n if (timeoutTimer) {\n clearTimeout(timeoutTimer);\n timeoutTimer = null;\n }\n await connectToTunnel(\n { ...sessionResponse, tunnelUrl: platformData.tunnelUrl },\n user as User,\n );\n } else if (\n shellStatus === 'error' ||\n breakpointStatus === 'error'\n ) {\n exitSession({\n message: `Introspection error: ${\n platformData.error ?? 'Unknown error'\n }`,\n isError: true,\n });\n } else if (breakpointStatus === 'finished') {\n exitSession({\n message: 'Build has finished; introspection unavailable',\n isError: true,\n });\n }\n });\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n setError(message);\n setStatus('error');\n exitSession({ message, isError: true });\n }\n }\n\n async function connectToTunnel(\n sessionResponse: SessionResponse & { tunnelUrl: string },\n user: User,\n ) {\n const tunnelUrlValue = sessionResponse.tunnelUrl;\n setTunnelUrl(tunnelUrlValue);\n\n const maxRetries = 5;\n const baseRetryDelayMs = 1000;\n const retryableErrorCodes = new Set([\n 'ENOTFOUND',\n 'EAI_AGAIN',\n 'ECONNREFUSED',\n 'ECONNRESET',\n 'ETIMEDOUT',\n ]);\n\n const shouldRetry = (error: NodeJS.ErrnoException) => {\n if (retryCountRef.current >= maxRetries) {\n return false;\n }\n\n const code = error.code?.toUpperCase();\n if (code && retryableErrorCodes.has(code)) {\n return true;\n }\n\n const message = error.message?.toLowerCase?.() ?? '';\n return ['enotfound', 'eai_again', 'econnrefused', 'etimedout'].some(\n (indicator) => message.includes(indicator),\n );\n };\n\n const attemptConnection = (attempt: number) => {\n setStatus('connecting');\n retryCountRef.current = attempt;\n\n if (verbose) {\n const attemptLabel = attempt === 1 ? 'initial' : `retry ${attempt}`;\n console.log(\n `[Introspect] Starting ${attemptLabel} connection attempt to ${tunnelUrlValue}`,\n );\n }\n\n const socket = createWebSocketConnection(tunnelUrlValue);\n socketRef.current = socket;\n\n socket.on('open', async () => {\n retryCountRef.current = 0;\n socket.send(\n JSON.stringify({\n type: 'auth',\n idToken: await user.getIdToken(true),\n jti: sessionResponse.jti,\n buildId,\n platform,\n userId: user.uid,\n appId: sessionResponse.appId,\n }),\n );\n });\n\n socket.on('message', async (data) => {\n const dataStr = data.toString();\n\n if (isControlMessage(dataStr)) {\n const message = parseControlMessage(dataStr);\n\n if (message.type === 'auth-ack') {\n if (message.status === 'ok') {\n setStatus('connected');\n pingIntervalRef.current = enterInteractiveMode(socket);\n tokenRefreshIntervalRef.current = startTokenRefreshMonitoring(\n user,\n verbose,\n );\n } else {\n const authMessage = `Authentication failed: ${message.message}`;\n setError(authMessage);\n setStatus('error');\n exitSession({ message: authMessage, isError: true });\n }\n } else if (message.type === 'error') {\n if (message.fatal) {\n const fatalMessage = message.message ?? 'Server error';\n setError(fatalMessage);\n setStatus('error');\n exitSession({ message: fatalMessage, isError: true });\n } else {\n console.error(`\\n[Server error] ${message.message}\\n`);\n }\n } else if (message.type === 'state') {\n if (verbose) {\n console.log(\n `\\n[Server state] Platform: ${message.platform}, WD: ${message.workingDirectory}, Shell: ${message.shell}\\n`,\n );\n }\n }\n } else {\n process.stdout.write(dataStr);\n }\n });\n\n socket.on('error', (err) => {\n const error = err as NodeJS.ErrnoException;\n\n if (shouldRetry(error)) {\n const nextAttempt = retryCountRef.current + 1;\n const delay = Math.min(5000, baseRetryDelayMs * nextAttempt);\n isRetryingRef.current = true;\n\n if (verbose) {\n console.log(\n `[Introspect] Connection attempt ${\n retryCountRef.current\n } failed (${\n error.code ?? error.message\n }). Retrying in ${delay}ms...`,\n );\n } else {\n console.log(\n `Connection failed (${\n error.code ?? error.message\n }). Retrying (${nextAttempt}/${maxRetries})...`,\n );\n }\n\n if (retryTimeoutRef.current) {\n clearTimeout(retryTimeoutRef.current);\n }\n\n if (socketRef.current) {\n socketRef.current.removeAllListeners();\n try {\n socketRef.current.terminate();\n } catch {\n // ignore\n }\n }\n\n retryTimeoutRef.current = setTimeout(() => {\n isRetryingRef.current = false;\n attemptConnection(nextAttempt);\n }, delay);\n\n return;\n }\n\n const errorMessage = `WebSocket error: ${error.message}`;\n setError(errorMessage);\n setStatus('error');\n exitSession({ message: errorMessage, isError: true });\n });\n\n socket.on('close', (code, reason) => {\n if (isRetryingRef.current || hasEndedRef.current) {\n return;\n }\n\n setStatus('closed');\n\n const reasonText = reason?.toString().trim();\n const message =\n reasonText && reasonText.length > 0\n ? `Connection closed (code ${code}): ${reasonText}`\n : 'Connection closed';\n\n exitSession({ message });\n });\n };\n\n try {\n attemptConnection(1);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n setError(message);\n setStatus('error');\n exitSession({ message, isError: true });\n }\n }\n\n startSession();\n\n return () => {\n if (!hasEndedRef.current) {\n cleanup();\n }\n };\n }, [buildId, platform, verbose]);\n\n if (status === 'starting-session') {\n return (\n <Box>\n <LoadingText text=\"Starting introspection session\" />\n </Box>\n );\n }\n\n if (status === 'waiting') {\n return (\n <Box flexDirection=\"column\">\n <Text color=\"green\">\u2713 Session started</Text>\n {verbose && jti && <Text color=\"gray\">JTI: {jti}</Text>}\n <LoadingText\n text={`Waiting for ${platform} introspection to be ready`}\n />\n <Text color=\"gray\">(timeout in 5 minutes)</Text>\n </Box>\n );\n }\n\n if (status === 'connecting') {\n return (\n <Box flexDirection=\"column\">\n <Text color=\"green\">\u2713 Session started</Text>\n {verbose && jti && <Text color=\"gray\">JTI: {jti}</Text>}\n {verbose && tunnelUrl && <Text color=\"gray\">Tunnel: {tunnelUrl}</Text>}\n <LoadingText text=\"Connecting to build environment\" />\n </Box>\n );\n }\n\n if (status === 'connected') {\n return (\n <Box flexDirection=\"column\">\n <Text color=\"green\">\u2713 Connected to {platform} build agent</Text>\n <Text color=\"gray\">Press Ctrl+D or type 'exit' to disconnect</Text>\n </Box>\n );\n }\n\n if (status === 'error') {\n return (\n <Box>\n <Text color=\"red\">\u2717 Error: {error}</Text>\n </Box>\n );\n }\n\n if (status === 'closed') {\n return (\n <Box>\n <Text color=\"yellow\">Connection closed</Text>\n </Box>\n );\n }\n\n return null;\n}\n", "import { FunctionsError } from 'firebase/functions';\nimport getCallableFirebaseFunction from '../../../utilities/getCallableFirebaseFunction';\n\nexport interface SessionResponse {\n jti: string;\n expiresAt: number;\n platform: string;\n buildPath: string;\n appId: string;\n tunnelUrl?: string;\n}\n\nconst startIntrospectionSessionFn = getCallableFirebaseFunction(\n 'startIntrospectionSession',\n);\n\nfunction isFirebaseFunctionError(error: unknown): error is FunctionsError {\n return Boolean(\n typeof error === 'object' &&\n error &&\n 'code' in error &&\n typeof (error as any).code === 'string',\n );\n}\n\nexport async function startIntrospectionSession(\n buildId: string,\n platform: string,\n): Promise<SessionResponse> {\n try {\n const result = await startIntrospectionSessionFn({\n buildId,\n platform,\n });\n return result.data as SessionResponse;\n } catch (error) {\n if (isFirebaseFunctionError(error)) {\n throw new Error(error.message);\n }\n throw error;\n }\n}\n\nexport function normalizePlatform(input: string): 'mac' | 'windows' | 'linux' {\n const normalized = input.toLowerCase();\n\n if (['mac', 'macos', 'darwin'].includes(normalized)) return 'mac';\n if (['windows', 'win'].includes(normalized)) return 'windows';\n if (normalized === 'linux') return 'linux';\n\n throw new Error(\n `Invalid platform: ${input}. Must be one of: mac, windows, linux`,\n );\n}\n", "import WebSocket from 'ws';\n\nexport function connectToTunnel(tunnelUrl: string): WebSocket {\n const wsUrl = tunnelUrl.replace('https://', 'wss://') + '/term';\n return new WebSocket(wsUrl);\n}\n\nexport interface AuthMessage {\n type: 'auth';\n idToken: string;\n jti: string;\n buildId: string;\n platform: string;\n userId: string;\n appId: string;\n}\n\nexport interface AuthAckMessage {\n type: 'auth-ack';\n status: 'ok' | 'error';\n message?: string;\n}\n\nexport interface StateMessage {\n type: 'state';\n status: string;\n platform: string;\n workingDirectory: string;\n shell: string;\n}\n\nexport interface ErrorMessage {\n type: 'error';\n message: string;\n fatal: boolean;\n}\n\nexport interface PongMessage {\n type: 'pong';\n timestamp: number;\n}\n\nexport interface ResizeMessage {\n type: 'resize';\n cols: number;\n rows: number;\n}\n\nexport interface PingMessage {\n type: 'ping';\n timestamp: number;\n}\n\nexport interface CloseMessage {\n type: 'close';\n code?: number;\n reason?: string;\n}\n\nexport type ControlMessage =\n | AuthAckMessage\n | StateMessage\n | ErrorMessage\n | PongMessage\n | ResizeMessage\n | PingMessage\n | CloseMessage;\n\nexport function isControlMessage(data: string): boolean {\n try {\n const parsed = JSON.parse(data);\n return parsed && typeof parsed === 'object' && 'type' in parsed;\n } catch {\n return false;\n }\n}\n\nexport function parseControlMessage(data: string): ControlMessage {\n return JSON.parse(data) as ControlMessage;\n}\n", "import WebSocket from 'ws';\n\nlet originalRawMode: boolean | undefined;\nlet isRawModeSet = false;\n\nexport function enterInteractiveMode(\n socket: WebSocket,\n onResize?: () => void,\n): NodeJS.Timeout {\n if (process.stdin.setRawMode) {\n originalRawMode = process.stdin.isRaw;\n process.stdin.setRawMode(true);\n isRawModeSet = true;\n }\n process.stdin.resume();\n\n process.stdin.on('data', (data) => {\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(data);\n }\n });\n\n const resizeHandler = () => {\n if (onResize) {\n onResize();\n }\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(\n JSON.stringify({\n type: 'resize',\n cols: process.stdout.columns,\n rows: process.stdout.rows,\n }),\n );\n }\n };\n\n process.stdout.on('resize', resizeHandler);\n\n const pingInterval = setInterval(() => {\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(\n JSON.stringify({\n type: 'ping',\n timestamp: Date.now(),\n }),\n );\n }\n }, 30 * 1000);\n\n const sigintHandler = () => {\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(\n JSON.stringify({\n type: 'close',\n reason: 'user_exit',\n }),\n );\n socket.close();\n }\n };\n\n process.on('SIGINT', sigintHandler);\n\n return pingInterval;\n}\n\nexport function restoreTerminal(): void {\n if (process.stdin.setRawMode && isRawModeSet) {\n process.stdin.setRawMode(originalRawMode || false);\n isRawModeSet = false;\n }\n process.stdin.pause();\n\n process.stdin.removeAllListeners('data');\n process.stdout.removeAllListeners('resize');\n process.removeAllListeners('SIGINT');\n}\n", "import type { User } from 'firebase/auth';\n\nfunction parseJwt(token: string): { exp: number; [key: string]: any } {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(\n Buffer.from(base64, 'base64')\n .toString('binary')\n .split('')\n .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join(''),\n );\n return JSON.parse(jsonPayload);\n}\n\nexport function startTokenRefreshMonitoring(\n user: User,\n verbose: boolean,\n): NodeJS.Timeout {\n return setInterval(async () => {\n try {\n const currentToken = await user.getIdToken(false);\n const decoded = parseJwt(currentToken);\n const timeUntilExpiry = decoded.exp * 1000 - Date.now();\n\n if (timeUntilExpiry < 5 * 60 * 1000) {\n if (verbose) {\n console.log('[Token refresh] ID token expiring soon, refreshing...');\n }\n await user.getIdToken(true);\n if (verbose) {\n console.log('[Token refresh] ID token refreshed successfully');\n }\n }\n } catch (err) {\n console.error('[Token refresh] Failed to refresh token:', err);\n }\n }, 60 * 1000);\n}\n", "import { Box, Text } from 'ink';\nimport { useCallback, useMemo } from 'react';\nimport BuildTableLayout from '../../../components/BuildTableLayout';\nimport useBuildTableState from '../../../components/useBuildTableState';\nimport getRelativeDateFromDateString from '../../../utilities/getRelativeDateFromDateString';\nimport {\n getRunningBuildsWithIntrospection,\n BuildWithIntrospection,\n} from '../utilities/buildQueries';\n\ninterface BuildDisplayItem {\n 'ID': string;\n 'Version': string;\n 'Creation date': string;\n 'Platforms': string;\n [key: string]: string;\n}\n\nexport default function BuildSelector({\n configPath,\n onSelect,\n}: {\n configPath?: string;\n onSelect: (buildId: string) => void;\n}) {\n const load = useCallback(async () => {\n const builds = await getRunningBuildsWithIntrospection(configPath);\n\n if (builds.length === 0) {\n return { status: 'no-builds' } as const;\n }\n\n const displayBuilds = builds.map((build) => ({\n 'ID': build.id,\n 'Version': build.appVersion || 'unknown',\n 'Creation date': getRelativeDateFromDateString(build.createdAt),\n 'Platforms': getEnabledPlatforms(build),\n }));\n\n return { status: 'builds', builds: displayBuilds } as const;\n }, [configPath]);\n\n const { status, builds, error, selectItem } =\n useBuildTableState<BuildDisplayItem>({\n load,\n });\n\n const header = useMemo(\n () => (\n <Box marginBottom={1}>\n <Text>Select a build to introspect:</Text>\n </Box>\n ),\n [],\n );\n\n const footer = useMemo(() => {\n if (status !== 'show-builds') {\n return null;\n }\n\n return (\n <Box marginTop={1}>\n <Text dimColor>\n Showing {builds.length} running build\n {builds.length === 1 ? '' : 's'} with introspection enabled\n </Text>\n </Box>\n );\n }, [builds.length, status]);\n\n const noBuildsContent = useMemo(\n () => (\n <Box flexDirection=\"column\">\n <Text color=\"yellow\">No running builds with introspection found</Text>\n <Text dimColor>\n Start a build with --introspect flag to enable interactive debugging\n </Text>\n </Box>\n ),\n [],\n );\n\n if (status === 'selected') {\n return null;\n }\n\n function getEnabledPlatforms(build: BuildWithIntrospection): string {\n const platforms: string[] = [];\n\n if (build.introspect.mac?.enabled) platforms.push('mac');\n if (build.introspect.windows?.enabled) platforms.push('win');\n if (build.introspect.linux?.enabled) platforms.push('linux');\n\n return platforms.join(', ');\n }\n\n return (\n <BuildTableLayout\n builds={builds}\n commandUsed=\"todesktop introspect\"\n error={error}\n footer={footer}\n header={header}\n loadingText=\"Loading builds with introspection enabled\"\n noBuildsContent={noBuildsContent}\n onSelect={({ value }) => {\n selectItem(value.ID);\n onSelect(value.ID);\n }}\n status={status}\n />\n );\n}\n", "import { Box } from 'ink';\nimport { ReactNode } from 'react';\nimport ErrorDisplay from './ErrorDisplay';\nimport LoadingText from './LoadingText';\nimport SelectTable from './SelectTable';\n\ntype Status = 'loading' | 'show-builds' | 'no-builds' | 'error' | 'selected';\n\ntype BuildTableLayoutProps<T extends Record<string, string>> = {\n builds: T[];\n commandUsed: string;\n error: Error | null;\n header?: ReactNode;\n footer?: ReactNode;\n loadingText?: string;\n noBuildsContent: ReactNode;\n onSelect: (item: { value: T }) => void;\n status: Status;\n};\n\nexport default function BuildTableLayout<T extends Record<string, string>>({\n builds,\n commandUsed,\n error,\n footer,\n header,\n loadingText,\n noBuildsContent,\n onSelect,\n status,\n}: BuildTableLayoutProps<T>) {\n switch (status) {\n case 'loading':\n return <LoadingText text={loadingText} />;\n\n case 'error':\n return (\n <ErrorDisplay\n commandUsed={commandUsed}\n error={error ?? new Error('Unknown error')}\n />\n );\n\n case 'no-builds':\n return <>{noBuildsContent}</>;\n\n case 'show-builds':\n return (\n <Box flexDirection=\"column\">\n {header}\n <SelectTable data={builds} onSelect={onSelect} />\n {footer}\n </Box>\n );\n\n case 'selected':\n return null;\n\n default:\n return null;\n }\n}\n", "import { Box } from 'ink';\nimport SelectInput from 'ink-select-input';\nimport PropTypes from 'prop-types';\nimport CustomSelectInputIndicator from './CustomSelectInputIndicator';\nimport TableEnd from './TableEnd';\nimport TableHead from './TableHead';\nimport TableRow from './TableRow';\nimport getKeyDetails from '../utilities/getKeyDetails';\n\nconst CustomIndicator = (props) => (\n <CustomSelectInputIndicator marginTop={1} {...props} />\n);\n\n/*\n This is like if <Table/> and ink-select-input had a baby.\n Read the block comment at the top of <Table/> first.\n*/\nconst SelectTable = ({ data, onSelect }) => {\n const keyDetails = getKeyDetails(data);\n\n const getSelectItems = () => {\n return data.map((rowData, index) => {\n return {\n index,\n key: index,\n value: rowData,\n };\n });\n };\n\n // eslint-disable-next-line react/no-unstable-nested-components\n const ItemComponent = ({\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n label, // Make it compatible to SelectInput type, not used actually\n index,\n isSelected,\n }: {\n label: string;\n index?: number;\n isSelected?: boolean;\n }) => {\n return (\n <TableRow\n data={data[index]}\n key={index}\n keyDetails={keyDetails}\n textProps={{ bold: isSelected, color: isSelected ? undefined : 'gray' }}\n />\n );\n };\n\n return (\n <Box flexDirection=\"column\">\n <TableHead keyDetails={keyDetails} marginLeft={2} />\n <SelectInput\n indicatorComponent={CustomIndicator}\n itemComponent={ItemComponent}\n items={getSelectItems()}\n onSelect={onSelect}\n />\n <TableEnd keyDetails={keyDetails} marginLeft={2} />\n </Box>\n );\n};\n\nSelectTable.propTypes = {\n data: (props, _propName, componentName) => {\n const type = typeof props.data;\n if (Array.isArray('array')) {\n return new Error(\n `'data' prop must be an array ('${type}' given) in ${componentName} component`,\n );\n }\n\n if (props.data.length === 0) {\n return new Error(\n `'data' prop must not be empty, in ${componentName} component`,\n );\n }\n },\n onSelect: PropTypes.func,\n};\n\nexport default SelectTable;\n", "import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport CliError from '../utilities/CliError';\nimport useExit from '../utilities/useExit';\nimport useInput from '../utilities/useInput';\n\ntype BuildTableStatus =\n | 'loading'\n | 'show-builds'\n | 'no-builds'\n | 'error'\n | 'selected';\n\ntype ExitState = Extract<BuildTableStatus, 'loading' | 'show-builds'>;\n\nconst DEFAULT_EXIT_STATES: ExitState[] = ['loading', 'show-builds'];\n\ntype LoadResult<T> =\n | T[]\n | {\n status: 'builds';\n builds: T[];\n }\n | {\n status: 'no-builds';\n }\n | {\n status: 'selected';\n selectedId: string;\n };\n\ntype HookState<T> = {\n builds: T[];\n error: Error | null;\n status: BuildTableStatus;\n selectedId?: string;\n};\n\nexport type UseBuildTableStateOptions<T> = {\n exitOnError?: boolean;\n exitOnNoData?: boolean;\n exitStates?: ExitState[];\n load: () => Promise<LoadResult<T>>;\n};\n\nexport type UseBuildTableStateResult<T> = {\n builds: T[];\n error: Error | null;\n selectItem: (id: string) => void;\n selectedId?: string;\n status: BuildTableStatus;\n};\n\nexport default function useBuildTableState<T extends Record<string, string>>({\n exitOnError = true,\n exitOnNoData = true,\n exitStates = DEFAULT_EXIT_STATES,\n load,\n}: UseBuildTableStateOptions<T>): UseBuildTableStateResult<T> {\n const exit = useExit();\n const [state, setState] = useState<HookState<T>>({\n builds: [],\n error: null,\n status: 'loading',\n });\n const exitRef = useRef(exit);\n useEffect(() => {\n exitRef.current = exit;\n }, [exit]);\n const handleInput = useCallback(\n (_: unknown, key: { escape?: boolean }) => {\n if (key.escape && exitStates.includes(state.status as ExitState)) {\n exitRef.current();\n }\n },\n [exitStates, state.status],\n );\n\n useInput(handleInput);\n\n useEffect(() => {\n let isMounted = true;\n\n const run = async () => {\n setState((previous) => ({\n ...previous,\n error: null,\n status: 'loading',\n }));\n\n try {\n const result = await load();\n if (!isMounted) {\n return;\n }\n\n if (Array.isArray(result)) {\n const builds = result;\n if (builds.length === 0) {\n setState({\n builds: [],\n error: null,\n status: 'no-builds',\n });\n if (exitOnNoData) {\n setTimeout(() => exitRef.current(), 10);\n }\n return;\n }\n\n setState({\n builds,\n error: null,\n status: 'show-builds',\n });\n return;\n }\n\n switch (result.status) {\n case 'builds': {\n const { builds } = result;\n if (builds.length === 0) {\n setState({\n builds: [],\n error: null,\n status: 'no-builds',\n });\n if (exitOnNoData) {\n setTimeout(() => exitRef.current(), 10);\n }\n } else {\n setState({\n builds,\n error: null,\n status: 'show-builds',\n });\n }\n break;\n }\n case 'no-builds':\n setState({\n builds: [],\n error: null,\n status: 'no-builds',\n });\n if (exitOnNoData) {\n setTimeout(() => exitRef.current(), 10);\n }\n break;\n case 'selected':\n setState({\n builds: [],\n error: null,\n selectedId: result.selectedId,\n status: 'selected',\n });\n break;\n default:\n setState({\n builds: [],\n error: CliError.from(\n new Error('Unexpected load result from useBuildTableState'),\n ),\n status: 'error',\n });\n if (exitOnError) {\n setTimeout(() => exitRef.current(), 10);\n }\n }\n } catch (error) {\n if (!isMounted) {\n return;\n }\n const cliError = CliError.from(error);\n setState({\n builds: [],\n error: cliError,\n status: 'error',\n });\n if (exitOnError) {\n setTimeout(() => exitRef.current(), 10);\n }\n }\n };\n\n run();\n\n return () => {\n isMounted = false;\n };\n }, [exitOnError, exitOnNoData, load]);\n\n const selectItem = useCallback((id: string) => {\n setState((previous) => ({\n ...previous,\n selectedId: id,\n status: 'selected',\n }));\n }, []);\n\n return useMemo(\n () => ({\n builds: state.builds,\n error: state.error,\n selectItem,\n selectedId: state.selectedId,\n status: state.status,\n }),\n [selectItem, state],\n );\n}\n", "import {\n collection,\n query as firestoreQuery,\n where,\n orderBy,\n limit as firestoreLimit,\n getDocs,\n doc,\n getDoc,\n} from 'firebase/firestore';\nimport {\n Build,\n BuildStatus,\n IntrospectBreakpointStatus,\n IntrospectShellStatus,\n} from '@todesktop/shared';\nimport firestore from '../../../utilities/firestore';\nimport findAppUserId from '../../../utilities/findAppUserId';\nimport getProjectConfig from '../../../utilities/projectConfig/getProjectConfig';\nimport logger from '../../../utilities/logger';\n\nexport interface BuildWithIntrospection extends Build {\n introspect: NonNullable<Build['introspect']>;\n}\n\nexport async function getRunningBuildsWithIntrospection(\n configPath?: string,\n): Promise<BuildWithIntrospection[]> {\n const { id: appId } = getProjectConfig(configPath).config;\n const { id: userId } = await findAppUserId(appId);\n\n logger.debug({ appId, userId }, 'getRunningBuildsWithIntrospection');\n\n const buildsCollection = collection(\n firestore,\n `users/${userId}/applications/${appId}/builds`,\n );\n\n const q = firestoreQuery(\n buildsCollection,\n where('status', 'in', [BuildStatus.building, BuildStatus.preparation]),\n orderBy('createdAt', 'desc'),\n firestoreLimit(10),\n );\n\n const snapshot = await getDocs(q);\n\n if (snapshot.empty) {\n return [];\n }\n\n const builds = snapshot.docs\n .map((doc) => doc.data() as Build)\n .filter((build) => {\n if (!build.introspect) return false;\n\n const hasEnabledPlatform =\n build.introspect.mac?.enabled ||\n build.introspect.windows?.enabled ||\n build.introspect.linux?.enabled;\n\n return hasEnabledPlatform;\n }) as BuildWithIntrospection[];\n\n return builds;\n}\n\nexport async function getLatestBuildWithIntrospection(\n configPath?: string,\n): Promise<BuildWithIntrospection | null> {\n const { id: appId } = getProjectConfig(configPath).config;\n const { id: userId } = await findAppUserId(appId);\n\n logger.debug({ appId, userId }, 'getLatestBuildWithIntrospection');\n\n const buildsCollection = collection(\n firestore,\n `users/${userId}/applications/${appId}/builds`,\n );\n\n const q = firestoreQuery(\n buildsCollection,\n orderBy('createdAt', 'desc'),\n firestoreLimit(20),\n );\n\n const snapshot = await getDocs(q);\n\n if (snapshot.empty) {\n return null;\n }\n\n for (const docSnapshot of snapshot.docs) {\n const build = docSnapshot.data() as Build;\n\n if (build.introspect) {\n const hasEnabledPlatform =\n build.introspect.mac?.enabled ||\n build.introspect.windows?.enabled ||\n build.introspect.linux?.enabled;\n\n if (hasEnabledPlatform) {\n return build as BuildWithIntrospection;\n }\n }\n }\n\n return null;\n}\n\nexport type PlatformInfo = {\n platform: 'mac' | 'windows' | 'linux';\n enabled: boolean;\n breakpointStatus: IntrospectBreakpointStatus;\n shellStatus: IntrospectShellStatus;\n displayName: string;\n};\n\nexport async function getAvailablePlatforms(\n buildId: string,\n configPath?: string,\n): Promise<PlatformInfo[]> {\n const { id: appId } = getProjectConfig(configPath).config;\n const { id: userId } = await findAppUserId(appId);\n\n logger.debug({ appId, userId, buildId }, 'getAvailablePlatforms');\n\n const buildRef = doc(\n firestore,\n `users/${userId}/applications/${appId}/builds/${buildId}`,\n );\n const buildSnapshot = await getDoc(buildRef);\n\n if (!buildSnapshot.exists()) {\n throw new Error(`Build ${buildId} not found`);\n }\n\n const build = buildSnapshot.data() as Build;\n\n if (!build.introspect) {\n throw new Error(\n `Build ${buildId} does not have introspection enabled. Please rebuild with --introspect`,\n );\n }\n\n const platforms: PlatformInfo[] = [];\n\n const platformMap: Array<['mac' | 'windows' | 'linux', string]> = [\n ['mac', 'macOS'],\n ['windows', 'Windows'],\n ['linux', 'Linux'],\n ];\n\n for (const [platform, displayName] of platformMap) {\n const platformData = build.introspect[platform];\n if (platformData?.enabled) {\n platforms.push({\n platform,\n enabled: platformData.enabled,\n breakpointStatus: platformData.breakpointStatus,\n shellStatus: platformData.shellStatus,\n displayName,\n });\n }\n }\n\n if (platforms.length === 0) {\n throw new Error(\n `No platforms with introspection enabled for build ${buildId}`,\n );\n }\n\n return platforms;\n}\n", "import { Box, Text } from 'ink';\nimport SelectInput from 'ink-select-input';\nimport { useEffect, useState } from 'react';\nimport LoadingText from '../../../components/LoadingText';\nimport ErrorDisplay from '../../../components/ErrorDisplay';\nimport CustomSelectInputIndicator from '../../../components/CustomSelectInputIndicator';\nimport CliError from '../../../utilities/CliError';\nimport useExit from '../../../utilities/useExit';\nimport useInput from '../../../utilities/useInput';\nimport { getAvailablePlatforms, PlatformInfo } from '../utilities/buildQueries';\nimport {\n formatIntrospectionStatus,\n getIntrospectionStatusIndicator,\n} from '../../../utilities/introspectionStatus';\n\ntype State =\n | { status: 'loading' }\n | { status: 'error'; error: Error }\n | { status: 'show-platforms'; platforms: PlatformInfo[] };\n\ninterface SelectItem {\n label: string;\n value: 'mac' | 'windows' | 'linux';\n}\n\nfunction PlatformItem({\n label,\n isSelected,\n}: {\n label: string;\n isSelected: boolean;\n}) {\n return (\n <Box>\n <Text bold={isSelected} color={isSelected ? undefined : 'gray'}>\n {label}\n </Text>\n </Box>\n );\n}\n\nexport default function PlatformSelector({\n buildId,\n configPath,\n onSelect,\n}: {\n buildId: string;\n configPath?: string;\n onSelect: (platform: 'mac' | 'windows' | 'linux') => void;\n}) {\n const exit = useExit();\n const [state, setState] = useState<State>({ status: 'loading' });\n\n useEffect(() => {\n loadPlatforms();\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n useInput((_, key) => {\n if (key.escape && ['show-platforms', 'loading'].includes(state.status)) {\n exit();\n }\n });\n\n async function loadPlatforms() {\n try {\n const platforms = await getAvailablePlatforms(buildId, configPath);\n setState({ status: 'show-platforms', platforms });\n } catch (e) {\n setState({ status: 'error', error: CliError.from(e) });\n setTimeout(() => exit(), 10);\n }\n }\n\n function handleSelect(item: SelectItem) {\n onSelect(item.value);\n }\n\n switch (state.status) {\n case 'loading':\n return <LoadingText text=\"Loading available platforms\" />;\n\n case 'error':\n return (\n <ErrorDisplay commandUsed=\"todesktop introspect\" error={state.error} />\n );\n\n case 'show-platforms': {\n const items: SelectItem[] = state.platforms.map((platform) => {\n const statusLabel = formatIntrospectionStatus(\n platform.breakpointStatus,\n platform.shellStatus,\n );\n return {\n label: `${getIntrospectionStatusIndicator(\n platform.breakpointStatus,\n platform.shellStatus,\n )} ${platform.displayName} (${statusLabel})`,\n value: platform.platform,\n };\n });\n\n return (\n <Box flexDirection=\"column\">\n <Box marginBottom={1}>\n <Text>Select a platform to introspect:</Text>\n </Box>\n <SelectInput\n items={items}\n onSelect={handleSelect}\n indicatorComponent={CustomSelectInputIndicator}\n itemComponent={PlatformItem}\n />\n <Box marginTop={1}>\n <Text dimColor>\n {state.platforms.length} platform\n {state.platforms.length === 1 ? '' : 's'} available\n </Text>\n </Box>\n </Box>\n );\n }\n }\n}\n", "import { useEffect, useState } from 'react';\nimport LoadingText from '../../../components/LoadingText';\nimport ErrorDisplay from '../../../components/ErrorDisplay';\nimport CliError from '../../../utilities/CliError';\nimport { getLatestBuildWithIntrospection } from '../utilities/buildQueries';\nimport useExit from '../../../utilities/useExit';\n\nexport default function LatestBuildLoader({\n configPath,\n onBuildFound,\n}: {\n configPath?: string;\n onBuildFound: (buildId: string) => void;\n}) {\n const exit = useExit();\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n loadLatestBuild();\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n async function loadLatestBuild() {\n try {\n const latestBuild = await getLatestBuildWithIntrospection(configPath);\n if (latestBuild) {\n onBuildFound(latestBuild.id);\n } else {\n setError(\n new Error(\n 'No builds with introspection found. Please run a build with --introspect',\n ),\n );\n setTimeout(() => exit(), 10);\n }\n } catch (e) {\n setError(CliError.from(e));\n setTimeout(() => exit(), 10);\n }\n }\n\n if (error) {\n return <ErrorDisplay commandUsed=\"todesktop introspect\" error={error} />;\n }\n\n return <LoadingText text=\"Finding latest build with introspection\" />;\n}\n", "import { useEffect } from 'react';\nimport { Text } from 'ink';\n\nimport { deleteAuthConfig } from '../utilities/configStore';\nimport ErrorBoundary from '../components/ErrorBoundary';\nimport LoginHOC from '../components/LoginHOC';\nimport { useAnalyticsCommand } from '../utilities/useAnalytics';\nimport useExit from '../utilities/useExit';\n\nconst Logout = () => {\n const exit = useExit();\n const { hasAttemptedTracking } = useAnalyticsCommand('logout');\n\n // delete auth config deletes the credentials stored on disk\n deleteAuthConfig();\n\n // exits the program once tracking of the \"logout\" command has been attempted\n useEffect(() => {\n if (hasAttemptedTracking) {\n exit();\n }\n }, [exit, hasAttemptedTracking]);\n\n return <Text>Log out successful</Text>;\n};\n\nconst LogoutWrapper = () => {\n return (\n <ErrorBoundary>\n <LoginHOC isInteractive={false}>\n <Logout />\n </LoginHOC>\n </ErrorBoundary>\n );\n};\n\nexport default LogoutWrapper;\n", "import { Box, Text } from 'ink';\nimport { useCallback, useEffect, useMemo, useState, type JSX } from 'react';\nimport { where } from 'firebase/firestore';\nimport BuildTableLayout from './BuildTableLayout';\nimport useBuildTableState from './useBuildTableState';\nimport { Build } from '../types';\nimport findAppUserId from '../utilities/findAppUserId';\nimport getBuilds from '../utilities/getBuilds';\nimport getLatestBuildId from '../utilities/getLatestBuildId';\nimport getLatestReleasedBuild from '../utilities/getLatestReleasedBuild';\nimport getRelativeDateFromDateString from '../utilities/getRelativeDateFromDateString';\nimport getProjectConfig from '../utilities/projectConfig/getProjectConfig';\n\nexport default function BuildPicker({\n buildFilter,\n buildId,\n children,\n commandUsed,\n configPath,\n loadData = loadPickerData,\n noBuildsDescription = null,\n question = 'Which build would you like to test?',\n}: {\n buildFilter?: BuildFilter;\n buildId?: string;\n children: (buildId: string) => JSX.Element;\n commandUsed: string;\n configPath?: string;\n loadData?: typeof loadPickerData;\n noBuildsDescription?: string | null | JSX.Element;\n question?: string | JSX.Element;\n}) {\n const [selectedBuildId, setSelectedBuildId] = useState<string | undefined>(\n buildId && buildId !== 'latest' ? buildId : undefined,\n );\n\n const load = useCallback(async () => {\n return loadData({\n buildFilter,\n buildId,\n configPath,\n });\n }, [buildFilter, buildId, configPath, loadData]);\n\n const { status, builds, error, selectedId, selectItem } =\n useBuildTableState<BuildDisplayItem>({\n load,\n });\n\n useEffect(() => {\n if (selectedId) {\n setSelectedBuildId(selectedId);\n }\n }, [selectedId]);\n\n const noBuildsContent = useMemo(\n () => (\n <Box>\n <Text>No eligible builds found </Text>\n {noBuildsDescription && <Text dimColor>{noBuildsDescription}</Text>}\n </Box>\n ),\n [noBuildsDescription],\n );\n\n const header = useMemo(\n () => (\n <Box>\n <Text>{question}</Text>\n </Box>\n ),\n [question],\n );\n\n const footer = useMemo(() => {\n if (status !== 'show-builds') {\n return null;\n }\n return (\n <Box>\n <Text dimColor>\n Showing the latest {builds.length} unreleased successful builds\n </Text>\n </Box>\n );\n }, [builds.length, status]);\n\n if (selectedBuildId) {\n return children(selectedBuildId);\n }\n\n return (\n <BuildTableLayout\n builds={builds}\n commandUsed={commandUsed}\n error={error}\n footer={footer}\n header={header}\n noBuildsContent={noBuildsContent}\n onSelect={({ value }) => {\n selectItem(value.ID);\n setSelectedBuildId(value.ID);\n }}\n status={status}\n />\n );\n}\n\nasync function loadPickerData({\n buildFilter,\n buildId,\n configPath,\n}: {\n buildFilter?: BuildFilter;\n buildId?: string;\n configPath?: string;\n}): Promise<LoadPickerDataResult> {\n if (buildId && buildId !== 'latest') {\n return { status: 'selected', selectedId: buildId };\n }\n\n if (buildId === 'latest') {\n const latestBuildId = await getLatestBuild({ configPath });\n if (latestBuildId) {\n return { status: 'selected', selectedId: latestBuildId };\n }\n return { status: 'no-builds' };\n }\n\n const builds = await getBuildItems({ buildFilter, configPath });\n if (builds.length === 0) {\n return { status: 'no-builds' };\n }\n return { status: 'builds', builds };\n}\n\nasync function getLatestBuild({\n configPath,\n}: {\n configPath?: string;\n}): Promise<string | undefined> {\n const { id: appId } = getProjectConfig(configPath).config;\n const { id: userId } = await findAppUserId(appId);\n return getLatestBuildId({ appId, userId });\n}\n\nasync function getBuildItems({\n buildFilter = () => true,\n configPath,\n}: {\n buildFilter?: BuildFilter;\n configPath?: string;\n}): Promise<BuildDisplayItem[]> {\n const { id: appId } = getProjectConfig(configPath).config;\n const { id: userId, label: userName } = await findAppUserId(appId);\n const latestReleasedBuild = await getLatestReleasedBuild({ appId, userId });\n const rawBuilds = await getBuilds({\n addWhereClauses: () => [where('status', '==', 'succeeded')],\n appId,\n limit: 50,\n userId,\n });\n\n return rawBuilds\n .filter((build) => buildFilter({ build, latestReleasedBuild }))\n .slice(0, 5)\n .map((build) => ({\n 'ID': build.id,\n 'Version': build.appVersion || 'unknown',\n 'Creation date': getRelativeDateFromDateString(build.createdAt),\n 'Owner': userName || 'unknown',\n }));\n}\n\ninterface BuildDisplayItem {\n 'Creation date': string;\n 'ID': string;\n 'Owner': string;\n 'Version': string;\n [key: string]: string;\n}\n\nexport type BuildFilter = (args: {\n build: Build;\n latestReleasedBuild?: Build;\n}) => boolean;\n\ntype LoadPickerDataResult =\n | { status: 'builds'; builds: BuildDisplayItem[] }\n | { status: 'no-builds' }\n | { status: 'selected'; selectedId: string };\n", "import type { Build, IApp } from '@todesktop/shared';\nimport {\n doc,\n getDoc,\n collection,\n query,\n orderBy,\n limit,\n getDocs,\n} from 'firebase/firestore';\nimport firestore from './firestore';\nimport { readDocumentSnapshot, readQueryDocument } from './firestoreData';\nimport getBuildById from './getBuildById';\n\nexport default async function getLatestReleasedBuild({\n appId,\n userId,\n}: {\n appId: string;\n userId: string;\n}): Promise<Build | undefined> {\n const appRef = doc(firestore, `users/${userId}/applications/${appId}`);\n const appSnapshot = await getDoc(appRef);\n const app = readDocumentSnapshot<IApp>(appSnapshot);\n\n if (!app) {\n throw new Error(`Application with ID of ${appId} doesn't exist.`);\n }\n\n if (app.meta?.latestReleaseBuildId) {\n return (\n (await getBuildById({\n buildId: app.meta?.latestReleaseBuildId,\n appId,\n userId,\n })) || undefined\n );\n }\n\n const buildsQuery = query(\n collection(firestore, `users/${userId}/applications/${appId}/builds`),\n orderBy('releasedAt', 'desc'),\n limit(1),\n );\n const buildsResult = await getDocs(buildsQuery);\n\n return buildsResult.empty\n ? undefined\n : readQueryDocument<Build>(buildsResult.docs[0]);\n}\n", "import { Build } from '../types';\nimport { doc, getDoc } from 'firebase/firestore';\nimport firestore from './firestore';\nimport { readDocumentSnapshot } from './firestoreData';\nimport logger from './logger';\n\nexport default async function getBuildById({\n appId,\n buildId,\n userId,\n}: {\n appId: string;\n buildId: string;\n userId: string;\n}): Promise<Build | null> {\n logger.debug({ appId, buildId }, 'getBuildById');\n const snapshot = await getDoc(\n doc(firestore, `users/${userId}/applications/${appId}/builds/${buildId}`),\n );\n\n if (!snapshot.exists()) {\n return null;\n }\n\n return readDocumentSnapshot<Build>(snapshot) ?? null;\n}\n", "import { useEffect, useState } from 'react';\nimport CliError from '../../../utilities/CliError';\nimport getBuildAttributes from '../../../utilities/getBuildAttributes';\nimport logForCI from '../../../utilities/logForCI';\nimport logger from '../../../utilities/logger';\nimport releaseBuild from '../utilities/releaseBuild';\nimport useExit from '../../../utilities/useExit';\nimport { ReleaseBuildState } from '../utilities/types';\nimport ReleaseBuildView from './ReleaseBuildView';\n\nexport default function ReleaseBuildLogic({\n buildId,\n commandUsed,\n configPath,\n}: {\n buildId: string;\n commandUsed: string;\n configPath?: string;\n}) {\n const exit = useExit();\n const [state, setState] = useState<ReleaseBuildState>({ state: 'loading' });\n\n useEffect(() => {\n releaseBuildWorkflow({ configPath, buildId, updateState }).catch(\n logger.error,\n );\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n function updateState(changes: Partial<ReleaseBuildState>) {\n setState(\n (previousState) =>\n ({ ...previousState, ...changes }) as ReleaseBuildState,\n );\n if (changes.state && ['build-error', 'complete'].includes(changes.state)) {\n setTimeout(() => exit(), 10);\n }\n }\n\n return <ReleaseBuildView commandUsed={commandUsed} state={state} />;\n}\n\nasync function releaseBuildWorkflow({\n buildId,\n configPath,\n updateState,\n}: {\n buildId: string;\n configPath?: string;\n updateState: (changes: Partial<ReleaseBuildState>) => void;\n}) {\n try {\n const { appId, build } = await getBuildAttributes({\n buildId,\n configPath,\n });\n updateState({ build });\n\n updateState({ state: 'releasing' });\n await releaseBuild({ appId, buildId });\n\n logForCI('Released!');\n updateState({ state: 'complete' });\n } catch (e) {\n const error = CliError.from(e);\n updateState({ error, state: error.type });\n }\n}\n", "import { Build } from '@todesktop/shared';\nimport findAppUserId from './findAppUserId';\nimport getBuildById from './getBuildById';\nimport getProjectConfig from './projectConfig/getProjectConfig';\nimport { currentUser } from './firestore';\n\nexport default async function getBuildAttributes({\n buildId,\n configPath,\n}: {\n buildId: string;\n configPath?: string;\n}): Promise<BuildAttributes> {\n const {\n id: appId,\n nodeVersion,\n npmVersion,\n pnpmVersion,\n } = getProjectConfig(configPath).config;\n const { id: userId } = await findAppUserId(appId);\n const contextUserId = currentUser()?.uid;\n const build = await fetchBuild({ appId, buildId, userId });\n\n return {\n appId,\n build,\n buildId,\n contextUserId,\n nodeVersion,\n npmVersion,\n pnpmVersion,\n userId,\n };\n}\n\nasync function fetchBuild({\n appId,\n buildId,\n userId,\n}: {\n appId: string;\n buildId: string;\n userId: string;\n}): Promise<Build> {\n const build = await getBuildById({ appId, buildId, userId });\n if (!build) {\n throw new Error(`No such build ${buildId} for application ${appId}`);\n }\n\n return build;\n}\n\ninterface BuildAttributes {\n appId: string;\n buildId: string;\n build: Build;\n contextUserId?: string;\n nodeVersion: string;\n npmVersion: string;\n pnpmVersion: string;\n userId: string;\n}\n", "import { FunctionsError } from 'firebase/functions';\nimport CliError from '../../../utilities/CliError';\nimport getCallableFirebaseFunction from '../../../utilities/getCallableFirebaseFunction';\n\nexport default async function releaseBuild({\n appId,\n buildId,\n}: {\n appId: string;\n buildId: string;\n}): Promise<void> {\n try {\n await getCallableFirebaseFunction('releaseBuild')({ appId, buildId });\n } catch (e) {\n if (isFirebaseFunctionError(e)) {\n // Preserve the original Firebase error message\n const errorType =\n e.code === 'failed-precondition' || e.code === 'not-found'\n ? 'build-error'\n : 'error';\n throw CliError.from(e, errorType);\n } else {\n throw new CliError('Unexpected internal error while releasing build');\n }\n }\n}\n\nfunction isFirebaseFunctionError(error: unknown): error is FunctionsError {\n return Boolean(\n typeof error === 'object' &&\n error &&\n 'code' in error &&\n typeof (error as any).code === 'string',\n );\n}\n", "import { Text } from 'ink';\nimport BuildError from '../../../components/BuildError';\nimport ErrorDisplay from '../../../components/ErrorDisplay';\nimport LoadingText from '../../../components/LoadingText';\nimport { ReleaseBuildState } from '../utilities/types';\n\nexport default function ReleaseBuildView({\n commandUsed,\n state,\n}: {\n commandUsed?: string;\n state: ReleaseBuildState;\n}) {\n switch (state.state) {\n case 'build-error': {\n return (\n <BuildError\n build={state.build}\n description=\"Can't release build\"\n message={state.error?.message || 'Internal build error'}\n />\n );\n }\n\n case 'complete':\n return (\n <Text bold color=\"greenBright\">\n Released!\n </Text>\n );\n\n case 'error':\n return (\n <ErrorDisplay\n commandUsed={commandUsed}\n error={{ stack: state.error?.stack }}\n />\n );\n\n case 'loading':\n return <LoadingText />;\n\n case 'releasing':\n return <LoadingText text=\"Releasing\" />;\n\n default:\n return (\n <ErrorDisplay\n commandUsed={commandUsed}\n error={new Error(`Unknown state ${state}`)}\n />\n );\n }\n}\n", "import { Box, Text } from 'ink';\nimport Link from 'ink-link';\nimport type { Build } from '../types';\n\nexport default function BuildError({\n build,\n description = \"Can't release\",\n message,\n}: {\n build: Build;\n description?: string;\n message: string;\n}) {\n return (\n <Box flexDirection=\"column\">\n <Text bold color=\"red\">\n {description} {build.appName} v{build.appVersion}\n </Text>\n\n <Box marginBottom={1} marginTop={1}>\n <Text>{message}</Text>\n </Box>\n\n <Text bold>See web UI for more information: </Text>\n <Text>\n <Link fallback={false} url={build.url}>\n {build.url}\n </Link>\n </Text>\n </Box>\n );\n}\n", "import { Build } from '@todesktop/shared';\nimport { Text } from 'ink';\nimport { useEffect, useState, type JSX } from 'react';\nimport BuildError from '../../../components/BuildError';\nimport ErrorDisplay from '../../../components/ErrorDisplay';\nimport LoadingText from '../../../components/LoadingText';\nimport CliError from '../../../utilities/CliError';\nimport getBuildAttributes from '../../../utilities/getBuildAttributes';\nimport getLatestReleasedBuild from '../../../utilities/getLatestReleasedBuild';\nimport logger from '../../../utilities/logger';\nimport {\n isBuildTestable,\n makeProgress,\n} from '../../smoke-test/utilities/build';\nimport analyzeRelease, { AnalyzeResult } from '../utilities/analyzeRelease';\nimport DowngradeConfirmation from './DowngradeConfirmation';\nimport YesNoConfirmation from './YesNoConfirmation';\n\nexport default function ReleaseConfirmation({\n buildId,\n children,\n configPath,\n disabled = false,\n loadData = loadBuildsData,\n}: {\n buildId: string;\n configPath?: string;\n children: JSX.Element;\n disabled?: boolean;\n\n /** @internal For test */\n loadData?: typeof loadBuildsData;\n}) {\n const [state, setState] = useState<ConfirmationState>({\n state: disabled ? 'bypass' : 'loading',\n });\n\n useEffect(() => {\n confirmationWorkflow({\n buildId,\n configPath,\n loadData,\n state,\n updateState,\n }).catch(logger.error);\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n function updateState(changes: Partial<ConfirmationState>) {\n setState(\n (previousState) =>\n ({\n ...previousState,\n ...changes,\n }) as ConfirmationState,\n );\n }\n\n switch (state.state) {\n case 'build-error': {\n return (\n <BuildError\n build={state.build}\n description=\"Can't release build\"\n message={state.error?.message || 'Internal build error'}\n />\n );\n }\n\n case 'bypass':\n return children;\n\n case 'confirm-downgrade':\n return (\n <DowngradeConfirmation\n build={state.build}\n latestReleasedBuild={state.latestReleasedBuild}\n confirmDowngrade={state.onConfirm}\n />\n );\n\n case 'confirm-release':\n if (!state.build) {\n return <ErrorDisplay error={new Error('state.build is empty')} />;\n }\n\n return (\n <YesNoConfirmation\n title={\n <>\n <Text>This will release build {state.build.id} as </Text>\n <Text bold>\n {state.build.appName} v{state.build.appVersion}\n </Text>\n <Text>, are you sure?</Text>\n </>\n }\n onYes={state.onConfirm}\n />\n );\n\n case 'confirm-test':\n return (\n <YesNoConfirmation\n title={state.confirmationText}\n onYes={state.onConfirm}\n />\n );\n\n case 'error':\n return <ErrorDisplay error={state.error} />;\n\n case 'loading':\n return <LoadingText />;\n\n default:\n return (\n <ErrorDisplay\n error={\n new Error(`Unknown state ${(state as ConfirmationState).state}`)\n }\n />\n );\n }\n}\n\nasync function confirmationWorkflow({\n buildId,\n configPath,\n loadData,\n updateState,\n state,\n}: {\n buildId: string;\n configPath?: string;\n loadData: typeof loadBuildsData;\n updateState: (state: Partial<ConfirmationState>) => void;\n state: ConfirmationState;\n}) {\n try {\n const { build, latestReleasedBuild } = await loadData({\n buildId,\n configPath,\n });\n updateState({ build, latestReleasedBuild });\n\n const report = analyzeRelease({ build, latestReleasedBuild });\n if (!report.isReleasable) {\n updateState({ error: new Error(report.error), state: 'build-error' });\n return;\n }\n\n if (state.state !== 'bypass') {\n await confirmDowngrade({ report, updateState });\n await confirmSmokeTest({ build, updateState });\n await confirmRelease({ updateState });\n }\n\n updateState({ state: 'bypass' });\n } catch (e) {\n updateState({ state: 'error', error: CliError.from(e) });\n }\n}\n\nasync function confirmDowngrade({\n report,\n updateState,\n}: {\n report: AnalyzeResult;\n updateState: (state: Partial<ConfirmationState>) => void;\n}) {\n if (!report.isOlderThanLatest) {\n return;\n }\n\n let onConfirm;\n const downgradePromise = new Promise((r) => (onConfirm = r));\n\n updateState({ onConfirm, state: 'confirm-downgrade' });\n\n await downgradePromise;\n}\n\nasync function confirmSmokeTest({\n build,\n updateState,\n}: {\n build: Build;\n updateState: (state: Partial<ConfirmationState>) => void;\n}) {\n const confirmationText = getTestConfirmation(build);\n if (confirmationText === '') {\n return;\n }\n\n let onConfirm;\n const downgradePromise = new Promise((r) => (onConfirm = r));\n\n updateState({ onConfirm, state: 'confirm-test', confirmationText });\n\n await downgradePromise;\n}\n\nasync function confirmRelease({\n updateState,\n}: {\n updateState: (state: Partial<ConfirmationState>) => void;\n}) {\n let onConfirm;\n const downgradePromise = new Promise((r) => (onConfirm = r));\n\n updateState({ onConfirm, state: 'confirm-release' });\n\n await downgradePromise;\n}\n\nfunction getTestConfirmation(build: Build): string {\n const continueText = 'Are you sure you want to release?';\n\n if (!build.todesktopRuntimeVersionSpecified || !isBuildTestable(build)) {\n return '';\n }\n\n if (!build.smokeTest) {\n return `Smoke test hasn't been run for this build. ${continueText}`;\n }\n\n const { total } = makeProgress(build);\n\n switch (total.state) {\n case 'error':\n return `Smoke test failed for this build. ${continueText}`;\n case 'canceled':\n return `Smoke test was canceled for this build. ${continueText}`;\n case 'progress':\n return `Smoke test is currently running for this build. ${continueText}`;\n default:\n return '';\n }\n}\n\nasync function loadBuildsData({\n buildId,\n configPath,\n}: {\n buildId: string;\n configPath?: string;\n}): Promise<{ build: Build; latestReleasedBuild?: Build }> {\n const { appId, build, userId } = await getBuildAttributes({\n buildId,\n configPath,\n });\n\n const latestReleasedBuild = await getLatestReleasedBuild({ appId, userId });\n\n return { build, latestReleasedBuild };\n}\n\ntype ConfirmationState =\n | { state: 'loading' }\n | { state: 'bypass' }\n | {\n state: 'confirm-downgrade';\n build: Build;\n latestReleasedBuild: Build;\n onConfirm: () => void;\n }\n | {\n state: 'confirm-test';\n build: Build;\n confirmationText: string;\n onConfirm: () => void;\n }\n | {\n state: 'confirm-release';\n build: Build;\n onConfirm: () => void;\n }\n | { state: 'error'; error: Error }\n | { state: 'build-error'; build: Build; error: Error };\n", "import { Build, SmokeTestProgress } from '@todesktop/shared/src/desktopify';\nimport semver from 'semver';\nimport CliError from '../../../utilities/CliError';\n\nconst MIN_RUNTIME_VERSION = '1.2.3-0';\n\nexport function isBuildTestable(build: Partial<Build>): boolean {\n try {\n validateBuild(build);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isTestRunning(build: Build): boolean {\n if (!build.smokeTest) {\n return false;\n }\n\n const { isFinished } = makeProgress(build);\n return !isFinished;\n}\n\nexport const defaultVM = {\n cpu: '',\n agentVersion: '',\n image: '',\n imageVersion: '',\n};\n\nexport function makeProgress(build: Build): CliTestProgress {\n const defaultProgress: OsTestProgress = {\n message: 'Starting',\n progress: 0,\n state: 'progress',\n shouldSkip: false,\n vm: defaultVM,\n };\n\n const linux: OsTestProgress = {\n ...defaultProgress,\n ...build.smokeTest?.linux,\n shouldSkip: build.linux?.shouldSkip || false,\n };\n const mac: OsTestProgress = {\n ...defaultProgress,\n ...build.smokeTest?.mac,\n shouldSkip: build.mac?.shouldSkip || false,\n };\n const windows: OsTestProgress = {\n ...defaultProgress,\n ...build.smokeTest?.windows,\n shouldSkip: build.windows?.shouldSkip || false,\n };\n\n const platforms: OsTestProgress[] = [linux, mac, windows].filter(\n (p) => !p.shouldSkip && p.state !== 'skipped',\n );\n\n const isCanceled = Boolean(build.smokeTest?.isCanceled);\n const isFinished =\n isCanceled || platforms.every((p) => p.state !== 'progress');\n\n let totalState: TotalTestProgress['state'] = 'progress';\n if (isCanceled) {\n totalState = 'canceled';\n } else if (platforms.every((p) => p.state === 'done')) {\n totalState = 'done';\n } else if (isFinished && platforms.some((p) => p.state === 'error')) {\n totalState = 'error';\n }\n\n return {\n isFinished,\n linux,\n mac,\n windows,\n total: {\n error: platforms\n .filter((p) => p.state === 'error')\n .map((p) => p.message)\n .join('\\n\\n'),\n state: totalState,\n },\n };\n}\n\nexport function validateBuild(build: Partial<Build>) {\n if (build.status !== 'succeeded') {\n throw new CliError(\n `The build must be completed successfully. ` +\n `Actual build status: ${build.status}`,\n );\n }\n\n if (!build.todesktopRuntimeVersionSpecified) {\n throw new CliError(\n 'The build has no todesktopRuntimeVersionSpecified set. ' +\n 'Please make sure @todesktop/runtime is installed as a dependency ' +\n 'and make a new build',\n );\n }\n\n if (!isRuntimeVerRangeAllowed(build.todesktopRuntimeVersionSpecified)) {\n throw new CliError(\n `This build should have @todesktop/runtime version ${MIN_RUNTIME_VERSION} or later to run smoke tests.`,\n );\n }\n}\n\nfunction isRuntimeVerRangeAllowed(runtimeVerRange) {\n const minRuntimeVersionForApp = semver.minVersion(runtimeVerRange, {\n loose: true,\n });\n\n return semver.gte(minRuntimeVersionForApp, MIN_RUNTIME_VERSION, {\n loose: true,\n });\n}\n\nexport interface CliTestProgress {\n isFinished: boolean;\n linux: OsTestProgress;\n mac: OsTestProgress;\n windows: OsTestProgress;\n total: TotalTestProgress;\n}\n\nexport interface OsTestProgress extends SmokeTestProgress {\n shouldSkip?: boolean;\n}\n\nexport interface TotalTestProgress {\n error: string;\n state: 'progress' | 'done' | 'error' | 'canceled';\n}\n", "import type { Build } from '@todesktop/shared';\nimport semver from 'semver';\n\nexport const MIN_RUNTIME_VERSION_FOR_DOWNGRADE = '1.4.1-1';\n\nexport default function analyzeRelease({\n build,\n latestReleasedBuild,\n}: {\n build: Build;\n latestReleasedBuild?: Build;\n}): AnalyzeResult {\n const result: AnalyzeResult = {\n downgradeAllowed: Boolean(\n latestReleasedBuild?.todesktopRuntimeVersionUsed &&\n semver.gte(\n latestReleasedBuild.todesktopRuntimeVersionUsed,\n MIN_RUNTIME_VERSION_FOR_DOWNGRADE,\n ),\n ),\n error: '',\n isAlreadyReleased: Boolean(build.releasedAt),\n isAlreadyTheLatest: build.id === latestReleasedBuild?.id,\n isOlderThanLatest: Boolean(\n latestReleasedBuild &&\n latestReleasedBuild.appVersion &&\n build.appVersion &&\n semver.gt(latestReleasedBuild.appVersion, build.appVersion),\n ),\n isReleasable: false,\n isSucceeded: build.status === 'succeeded',\n isTheSameVersionAsLatest: Boolean(\n build.appVersion && build.appVersion === latestReleasedBuild?.appVersion,\n ),\n };\n\n if (!result.isSucceeded) {\n return {\n ...result,\n error:\n 'The build must have completed successfully. ' +\n `Actual build status: ${build.status}.`,\n };\n }\n\n if (result.isAlreadyTheLatest) {\n return {\n ...result,\n error: 'This build is already the latest released build.',\n };\n }\n\n if (result.isTheSameVersionAsLatest) {\n return {\n ...result,\n error:\n `This build has the same version as the latest released build ` +\n `(build ID: ${latestReleasedBuild?.id}, version: ${build.appVersion}).`,\n };\n }\n\n if (!result.downgradeAllowed && result.isAlreadyReleased) {\n return { ...result, error: 'This build has already been released.' };\n }\n\n if (\n !result.downgradeAllowed &&\n result.isOlderThanLatest &&\n latestReleasedBuild\n ) {\n return {\n ...result,\n error:\n `App version (${build.appVersion}) is not newer than latest released ` +\n `version (${latestReleasedBuild.appVersion}) ` +\n `(build ID: ${latestReleasedBuild.id}).`,\n };\n }\n\n return { ...result, isReleasable: true };\n}\n\nexport interface AnalyzeResult {\n downgradeAllowed: boolean;\n error: string;\n isAlreadyReleased: boolean;\n isAlreadyTheLatest: boolean;\n isOlderThanLatest: boolean;\n isReleasable: boolean;\n isSucceeded: boolean;\n isTheSameVersionAsLatest: boolean;\n}\n", "import { Build } from '@todesktop/shared';\nimport { Box, Text } from 'ink';\nimport TextInput from 'ink-text-input';\nimport { useState } from 'react';\nimport { MIN_RUNTIME_VERSION_FOR_DOWNGRADE } from '../utilities/analyzeRelease';\n\nexport default function DowngradeConfirmation({\n build,\n latestReleasedBuild,\n confirmDowngrade,\n}: {\n build: Build;\n latestReleasedBuild: Build;\n confirmDowngrade: () => void;\n}) {\n const [confirmText, setConfirmText] = useState('');\n const [showError, setShowError] = useState(false);\n\n const buildVersion = build.appVersion;\n const latestVersion = latestReleasedBuild.appVersion;\n\n function onType(text: string) {\n setShowError(false);\n setConfirmText(text);\n }\n\n function onSubmit(text: string) {\n if (text.trim() === buildVersion) {\n confirmDowngrade();\n } else {\n setShowError(true);\n }\n }\n\n return (\n <Box flexDirection=\"column\">\n <Box borderColor=\"red\" borderStyle=\"double\" paddingX={1}>\n <Text>\n You're trying to release the build {buildVersion}, which is older than\n the latest published version {latestVersion}. This may cause issues if\n your customers are using a version of your desktop app that contains a\n version of @todesktop/runtime that is earlier than v\n {MIN_RUNTIME_VERSION_FOR_DOWNGRADE}.\n </Text>\n </Box>\n\n <Box marginTop={1}>\n <Text>Are you sure that you wish to release this build?</Text>\n </Box>\n\n <Box marginTop={1}>\n <Text>\n To continue, type the text <Text bold>{buildVersion}</Text> below to\n confirm:\n </Text>\n </Box>\n\n <Box>\n <Box marginRight={1}>\n <Text>Confirm new version:</Text>\n </Box>\n\n <TextInput value={confirmText} onChange={onType} onSubmit={onSubmit} />\n </Box>\n\n {showError && (\n <Box>\n <Text color=\"red\">You've entered the wrong version</Text>\n </Box>\n )}\n </Box>\n );\n}\n", "import { Box, Text } from 'ink';\nimport SelectInput from 'ink-select-input';\nimport CustomSelectInputIndicator from '../../../components/CustomSelectInputIndicator';\nimport CustomSelectInputItem from '../../../components/CustomSelectInputItem';\nimport useExit from '../../../utilities/useExit';\n\nimport type { JSX } from 'react';\n\nexport default function YesNoConfirmation({\n onYes,\n title,\n footer = 'Your users will be auto-updated to this version. You can use ' +\n '--force to bypass this confirmation in future',\n}: {\n onYes: () => void;\n title: string | JSX.Element;\n footer?: string;\n}) {\n const exit = useExit();\n\n const items = [\n { label: 'Yes', value: 'yes' },\n { label: 'No', value: 'no' },\n ];\n\n function onSelect(item: { value: string }) {\n if (item.value === 'yes') {\n onYes();\n } else if (item.value === 'no') {\n setTimeout(() => exit(), 10);\n }\n }\n\n return (\n <Box flexDirection=\"column\">\n <Box>{typeof title === 'string' ? <Text>{title}</Text> : title}</Box>\n\n <Box marginBottom={1} marginTop={1}>\n <SelectInput\n indicatorComponent={CustomSelectInputIndicator}\n initialIndex={1}\n itemComponent={CustomSelectInputItem}\n items={items}\n onSelect={onSelect}\n />\n </Box>\n\n <Text dimColor>{footer}</Text>\n </Box>\n );\n}\n", "import { Build } from '@todesktop/shared';\nimport BuildPicker from '../../components/BuildPicker';\nimport ErrorBoundary from '../../components/ErrorBoundary';\nimport LoginHOC from '../../components/LoginHOC';\nimport { useAnalyticsCommand } from '../../utilities/useAnalytics';\nimport ReleaseBuildLogic from './components/ReleaseBuildLogic';\nimport ReleaseConfirmation from './components/ReleaseConfirmation';\nimport analyzeRelease from './utilities/analyzeRelease';\n\nexport default function ReleaseCommand({\n buildId,\n configPath,\n shouldConfirm,\n}: {\n buildId: string;\n configPath?: string;\n shouldConfirm: boolean;\n}) {\n useAnalyticsCommand('release', {\n buildId,\n shouldConfirm,\n config: configPath,\n });\n\n let command = 'todesktop release';\n if (buildId) {\n command += ' ' + (buildId === 'latest' ? '--latest' : '<id>');\n }\n\n return (\n <ErrorBoundary>\n <LoginHOC>\n <BuildPicker\n buildFilter={isBuildReleasable}\n buildId={buildId}\n commandUsed={command}\n configPath={configPath}\n noBuildsDescription=\"(i.e. unreleased and successful)\"\n question=\"Which build would you like to release?\"\n >\n {(id) => (\n <ReleaseConfirmation\n buildId={id}\n configPath={configPath}\n disabled={!shouldConfirm}\n >\n <ReleaseBuildLogic\n buildId={id}\n commandUsed={command}\n configPath={configPath}\n />\n </ReleaseConfirmation>\n )}\n </BuildPicker>\n </LoginHOC>\n </ErrorBoundary>\n );\n}\n\nfunction isBuildReleasable(opts: {\n build: Build;\n latestReleasedBuild?: Build;\n}) {\n return analyzeRelease(opts).isReleasable;\n}\n", "import { Build } from '@todesktop/shared';\nimport { useEffect, useState } from 'react';\nimport ErrorBoundary from '../../components/ErrorBoundary';\nimport LoginHOC from '../../components/LoginHOC';\nimport CliError from '../../utilities/CliError';\nimport getBuildAttributes from '../../utilities/getBuildAttributes';\nimport logger from '../../utilities/logger';\nimport { useAnalyticsCommand } from '../../utilities/useAnalytics';\nimport useExit from '../../utilities/useExit';\nimport BuildPicker from '../../components/BuildPicker';\nimport Cancellation from './components/Cancellation';\nimport SmokeTestView from './components/SmokeTestView';\nimport {\n isBuildTestable,\n isTestRunning,\n TotalTestProgress,\n validateBuild,\n} from './utilities/build';\nimport cancelSmokeTest from './utilities/cancelSmokeTest';\nimport queueSmokeTest from './utilities/queueSmokeTest';\nimport SmokeState from './utilities/SmokeState';\n\nimport waitUntilFinished from './utilities/waitUntilFinished';\n\nexport default function SmokeTestCommand({\n buildId,\n configPath,\n}: {\n buildId?: string;\n configPath?: string;\n}) {\n useAnalyticsCommand('smoke-test', { buildId, configPath });\n\n const command = `todesktop smoke-test ${\n buildId === 'latest' ? '--latest' : '<id>'\n }`;\n\n return (\n <ErrorBoundary>\n <LoginHOC>\n <BuildPicker\n buildFilter={({ build }) => isBuildTestable(build)}\n buildId={buildId}\n commandUsed={command}\n configPath={configPath}\n noBuildsDescription=\"(candidates for smoke-test must be built with @todesktop/runtime@1.2.3-0 or later)\"\n >\n {(id) => (\n <SmokeTestContainer\n commandUsed={command}\n buildId={id}\n configPath={configPath}\n />\n )}\n </BuildPicker>\n </LoginHOC>\n </ErrorBoundary>\n );\n}\n\nfunction SmokeTestContainer({\n buildId,\n commandUsed,\n configPath,\n}: {\n buildId: string;\n commandUsed: string;\n configPath?: string;\n}) {\n const exit = useExit();\n const [state, setState] = useState<SmokeState>({\n buildId,\n state: 'loading',\n });\n const [abortController] = useState(new AbortController());\n const abortSignal = abortController.signal;\n\n useEffect(() => {\n smokeTestWorkflow({ abortSignal, buildId, configPath, updateState }).catch(\n logger.error,\n );\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n function updateState(changes: Partial<SmokeState>) {\n setState((previousState) => ({ ...previousState, ...changes }));\n if (\n changes.state &&\n ['build-error', 'complete', 'progress-error'].includes(changes.state)\n ) {\n setTimeout(() => exit(), 10);\n }\n }\n\n async function onCancel() {\n abortController.abort();\n if (state.state === 'progress' && buildCanBeCanceled(state.build)) {\n await cancelSmokeTest(state as Required<SmokeState>);\n }\n }\n\n return (\n <Cancellation\n disabled={!isCancelable(state)}\n onCancel={onCancel}\n subject=\"smoke test\"\n >\n <SmokeTestView commandUsed={commandUsed} state={state} />\n </Cancellation>\n );\n}\n\nasync function smokeTestWorkflow({\n abortSignal,\n buildId,\n configPath,\n updateState,\n}: {\n abortSignal: AbortSignal;\n buildId: string;\n configPath?: string;\n updateState: (changes: Partial<SmokeState>) => void;\n}) {\n try {\n const {\n appId,\n build,\n contextUserId,\n nodeVersion,\n npmVersion,\n pnpmVersion,\n userId,\n } = await getBuildAttributes({\n buildId,\n configPath,\n });\n\n updateState({ appId, build, userId });\n validateBuild(build);\n\n if (!abortSignal.aborted && !isTestRunning(build)) {\n await queueSmokeTest({\n appId,\n buildId,\n nodeVersion,\n npmVersion,\n pnpmVersion,\n userId,\n contextUserId,\n });\n }\n\n updateState({ state: 'progress' });\n const { total } = await waitUntilFinished({\n appId,\n buildId,\n userId,\n onProgress: (progress) => updateState({ progress }),\n });\n\n const stateMap: Record<TotalTestProgress['state'], SmokeState['state']> = {\n done: 'complete',\n progress: 'complete', // Not actually used, just for TS\n error: 'progress-error',\n canceled: 'canceled',\n };\n updateState({ state: stateMap[total.state] });\n } catch (e) {\n const error = CliError.from(e);\n updateState({ error, state: error.type });\n }\n}\n\nfunction buildCanBeCanceled(build?: Build) {\n if (build?.smokeTest?.isCanceled) {\n return false;\n }\n\n return Boolean(build?.smokeTest?.buildServerExecutionId);\n}\n\nfunction isCancelable(state: SmokeState) {\n const cancelableStates: Array<SmokeState['state']> = ['loading', 'progress'];\n return cancelableStates.includes(state.state);\n}\n", "import { Box, Text } from 'ink';\nimport { useState, type JSX } from 'react';\nimport ErrorDisplay from '../../../components/ErrorDisplay';\nimport LoadingText from '../../../components/LoadingText';\nimport logger from '../../../utilities/logger';\nimport useExit from '../../../utilities/useExit';\nimport useInput from '../../../utilities/useInput';\n\nexport default function Cancellation({\n children,\n disabled = false,\n exitWhenCanceled = true,\n onCancel,\n renderCanceling = () => <LoadingText text={`Canceling ${subject}`} />,\n renderCanceled = () => <Text>{upperCaseFirstChar(subject)} canceled.</Text>,\n renderCancelText = () => (\n <Text color=\"gray\">\n <Text bold>[esc]:</Text> cancel {subject}\n </Text>\n ),\n renderError = (e: Error) => <ErrorDisplay error={e} />,\n subject,\n}: {\n children?: JSX.Element;\n disabled?: boolean;\n exitWhenCanceled?: boolean;\n onCancel: () => Promise<any>;\n renderCanceled?: () => JSX.Element;\n renderCanceling?: () => JSX.Element;\n renderCancelText?: () => JSX.Element;\n renderError?: (e: Error) => JSX.Element;\n subject: string;\n}) {\n const [state, setState] = useState<CancellationState>('normal');\n const [error, setError] = useState<Error>();\n\n const exit = useExit();\n\n useInput(async (_input, key) => {\n if (key.escape) {\n cancel();\n }\n });\n\n function cancel() {\n if (disabled) {\n return;\n }\n\n logger.debug(`esc pressed, cancelling ${subject}`);\n setState('cancelling');\n\n onCancel()\n .then(() => {\n setState('cancelled');\n if (exitWhenCanceled) {\n setTimeout(() => exit(), 10);\n }\n })\n .catch((e) => {\n setError(e);\n setState('error');\n });\n }\n\n switch (state) {\n case 'cancelled':\n return renderCanceled();\n case 'cancelling':\n return renderCanceling();\n case 'error':\n return renderError(error);\n default:\n return (\n <>\n {children}\n {!disabled && <Box>{renderCancelText()}</Box>}\n </>\n );\n }\n}\n\ntype CancellationState = 'normal' | 'cancelling' | 'cancelled' | 'error';\n\nfunction upperCaseFirstChar(str: string): string {\n return str[0].toUpperCase() + str.slice(1);\n}\n", "import { Text } from 'ink';\nimport ErrorDisplay from '../../../components/ErrorDisplay';\nimport LoadingText from '../../../components/LoadingText';\nimport SmokeState from '../utilities/SmokeState';\nimport BuildError from '../../../components/BuildError';\nimport TestProgress from './TestProgress';\n\nexport default function SmokeTestView({\n commandUsed = '',\n state,\n}: {\n commandUsed?: string;\n state: SmokeState;\n}) {\n switch (state.state) {\n case 'build-error': {\n return (\n <BuildError\n build={state.build}\n description=\"Can't finish smoke test\"\n message={state.error?.message}\n />\n );\n }\n\n case 'canceled':\n return <Text>Smoke test canceled.</Text>;\n\n case 'complete':\n return (\n <Text bold color=\"greenBright\">\n Smoke test passed.\n </Text>\n );\n\n case 'error':\n return (\n <ErrorDisplay\n commandUsed={commandUsed}\n error={{ stack: state.error?.stack }}\n />\n );\n\n case 'loading':\n return <LoadingText text=\"Preparing smoke test\" />;\n\n case 'progress':\n return <TestProgress progress={state.progress} />;\n\n case 'progress-error':\n return (\n <>\n <TestProgress progress={state.progress} />\n <BuildError\n build={state.build}\n description=\"Can't finish smoke test\"\n message={state.progress?.total?.error}\n />\n </>\n );\n\n default:\n return (\n <ErrorDisplay\n commandUsed={commandUsed}\n error={new Error(`Unknown state ${state}`)}\n />\n );\n }\n}\n", "import { ForegroundColor } from 'chalk';\nimport { Box, Text } from 'ink';\n\nexport default function ProgressBar({\n color = 'white',\n label,\n labelWidth = 9,\n marginBottom = 1,\n progress,\n text = '',\n}: {\n color?: typeof ForegroundColor;\n label: string;\n labelWidth?: number;\n marginBottom?: number;\n progress: number;\n text?: string;\n}) {\n const percentage =\n progress > 0 ? Math.round(progress).toString().padStart(2, '0') + '%' : '';\n\n const displayedText = (text || '')\n .replace(/(?:\\r\\n|\\r|\\n)\\s*/g, '\u21B5 ')\n .replace(/(.{63}).+/, '$1\u2026');\n\n return (\n <Box marginBottom={marginBottom}>\n <Box width={labelWidth}>\n <Text>{label}:</Text>\n </Box>\n <Box width={6} justifyContent=\"flex-end\" marginRight={1}>\n {Boolean(percentage) && (\n <Text backgroundColor={color} color=\"black\">\n {` ${percentage} `}\n </Text>\n )}\n </Box>\n <Box>\n <Text>{displayedText}</Text>\n </Box>\n </Box>\n );\n}\n", "import { ForegroundColor } from 'chalk';\nimport LoadingText from '../../../components/LoadingText';\nimport { CliTestProgress, OsTestProgress } from '../utilities/build';\nimport ProgressBar from './ProgressBar';\n\nexport default function TestProgress({\n progress,\n}: {\n progress?: CliTestProgress;\n}) {\n if (!progress) {\n return <LoadingText text=\"Loading test stats\" />;\n }\n\n return (\n <>\n {!progress.windows.shouldSkip && (\n <OsProgress os=\"Windows\" progress={progress.windows} />\n )}\n {!progress.mac.shouldSkip && (\n <OsProgress os=\"macOS\" progress={progress.mac} />\n )}\n {!progress.linux.shouldSkip && (\n <OsProgress os=\"Linux\" progress={progress.linux} />\n )}\n </>\n );\n}\n\nfunction OsProgress({\n os,\n progress,\n}: {\n os: string;\n progress: OsTestProgress;\n}) {\n const colors: Record<OsTestProgress['state'], typeof ForegroundColor> = {\n progress: 'white',\n error: 'red',\n done: 'green',\n skipped: 'yellow', // Not used actually, just for type matching\n };\n const text = progress.message + (progress.state === 'progress' ? '...' : '');\n\n return (\n <ProgressBar\n color={colors[progress.state]}\n label={os}\n progress={progress.progress}\n text={text}\n />\n );\n}\n", "import { currentUser } from '../../../utilities/firestore';\nimport postToFirebaseFunction from '../../../utilities/postToFirebaseFunction';\nexport default async function cancelSmokeTest({\n appId,\n buildId,\n userId,\n}: {\n appId: string;\n buildId: string;\n userId: string;\n}) {\n await postToFirebaseFunction('cancelSmokeTest_HTTP', {\n appId,\n buildId,\n userId,\n idToken: await currentUser()?.getIdToken(),\n });\n}\n", "import axios from 'axios';\nimport CliError from '../../../utilities/CliError';\nimport { currentUser } from '../../../utilities/firestore';\nimport logger from '../../../utilities/logger';\nimport postToFirebaseFunction from '../../../utilities/postToFirebaseFunction';\n\nexport default async function queueSmokeTest({\n appId,\n buildId,\n contextUserId,\n nodeVersion,\n npmVersion,\n pnpmVersion,\n userId,\n}: {\n appId: string;\n buildId: string;\n contextUserId?: string;\n nodeVersion: string;\n npmVersion: string;\n pnpmVersion: string;\n userId: string;\n}) {\n try {\n await postToFirebaseFunction('queueSmokeTest_HTTP', {\n appId,\n buildId,\n nodeVersion,\n npmVersion,\n pnpmVersion,\n userId,\n contextUserId,\n idToken: await currentUser()?.getIdToken(),\n });\n } catch (e) {\n logger.error({ error: e });\n throw buildQueueSmokeTestError(e);\n }\n}\n\nfunction buildQueueSmokeTestError(e: unknown): CliError {\n let detail = 'Unexpected internal error while testing build';\n if (axios.isAxiosError(e) && e.response?.data?.message) {\n detail = `${detail}; ${e.response.data.message}`;\n } else if (e instanceof Error) {\n detail = `${detail}; ${e.message}`;\n } else if (e && typeof e === 'object') {\n detail = `${detail}; ${JSON.stringify(e)}`;\n } else if (e) {\n detail = `${detail}; ${String(e)}`;\n }\n\n return new CliError(detail, { cause: e instanceof Error ? e : undefined });\n}\n", "import { Build } from '@todesktop/shared';\nimport { doc, onSnapshot } from 'firebase/firestore';\nimport firestore from '../../../utilities/firestore';\nimport { readDocumentSnapshot } from '../../../utilities/firestoreData';\nimport { makeProgress, CliTestProgress } from './build';\n\nexport default async function waitUntilFinished({\n appId,\n buildId,\n onProgress,\n userId,\n}: {\n appId: string;\n buildId: string;\n onProgress: (progress: CliTestProgress) => void;\n userId: string;\n}) {\n const docPath = `users/${userId}/applications/${appId}/builds/${buildId}`;\n\n return new Promise<CliTestProgress>((resolve, reject) => {\n const unsubscribe = onSnapshot(\n doc(firestore, docPath),\n (snapshot) => {\n const data = readDocumentSnapshot<Build>(snapshot);\n if (!data) {\n return;\n }\n const progress = makeProgress(data);\n\n onProgress(progress);\n\n if (progress.isFinished) {\n unsubscribe();\n resolve(progress);\n }\n },\n (err) => {\n unsubscribe();\n reject(err);\n },\n );\n });\n}\n", "import { useEffect } from 'react';\nimport { Text } from 'ink';\n\nimport { getAuthConfig } from '../utilities/configStore';\nimport ErrorBoundary from '../components/ErrorBoundary';\nimport LoginHOC from '../components/LoginHOC';\nimport { useAnalyticsCommand } from '../utilities/useAnalytics';\nimport useExit from '../utilities/useExit';\n\nconst WhoAmI = () => {\n const exit = useExit();\n const auth = getAuthConfig();\n const { hasAttemptedTracking } = useAnalyticsCommand('whoami', {}, {});\n\n // exits the program once tracking of the \"whoami\" command has been attempted\n useEffect(() => {\n if (hasAttemptedTracking) {\n exit();\n }\n }, [exit, hasAttemptedTracking]);\n\n if (!auth || !auth.email) {\n return <Text>You're not signed in</Text>;\n }\n return <Text>{auth.email}</Text>;\n};\n\nconst WhoAmIWrapper = () => (\n <ErrorBoundary>\n <LoginHOC isInteractive={false}>\n <WhoAmI />\n </LoginHOC>\n </ErrorBoundary>\n);\n\nexport default WhoAmIWrapper;\n", "import chalk from 'chalk';\nimport isInstalledGlobally from 'is-installed-globally';\nimport latestVersion from 'latest-version';\nimport semver from 'semver';\nimport getToDesktopPackageJson from './getToDesktopPackageJson';\n\nexport default () => {\n // Ignore during tests\n if (process.env.AVA_PATH) {\n return;\n }\n\n const pkg = getToDesktopPackageJson();\n latestVersion(pkg.name).then((latest) => {\n if (semver.gt(latest, pkg.version)) {\n const commandToUpdate = chalk.greenBright(\n `npm install ${\n isInstalledGlobally ? '-g' : '--save-dev'\n } @todesktop/cli`,\n );\n console.warn(\n `Your version of @todesktop/cli is out of date.\\nRun ${commandToUpdate} to update to v${latest}.`,\n );\n if (!semver.satisfies(latest, `^${pkg.version}`)) {\n console.error(`CLI is exiting because it is out out of date.`);\n process.exit(1);\n }\n }\n });\n};\n", "import * as Sentry from '@sentry/node';\nimport os from 'os';\nimport pkgJson from '../../package.json';\nimport { getAuthConfig } from './configStore';\nimport getProjectConfig from './projectConfig/getProjectConfig';\nimport getEnvironmentVariables from './getEnvironmentVariables';\n\nexport default () => {\n const { TODESKTOP_CLI_SENTRY_DSN } = getEnvironmentVariables();\n if (!TODESKTOP_CLI_SENTRY_DSN) {\n // Don't initialise Sentry\n return;\n }\n Sentry.init({\n dsn: TODESKTOP_CLI_SENTRY_DSN,\n });\n\n const scope = Sentry.getCurrentScope();\n try {\n scope.setUser({ email: getAuthConfig().email as string });\n } catch {\n // nothing\n }\n try {\n scope.setContext('os', {\n name: os.platform(),\n version: os.release(),\n });\n } catch {\n // nothing\n }\n\n try {\n scope.setContext('runtime', {\n name: 'Node.js',\n version: process.version,\n });\n } catch {\n // nothing\n }\n\n try {\n scope.setContext('app', {\n app_name: pkgJson.name,\n app_version: pkgJson.version,\n });\n } catch {\n // nothing\n }\n\n try {\n const configResult = getProjectConfig();\n scope.setExtra('config', configResult);\n } catch {\n // nothing\n }\n};\n", "{\n \"private\": false,\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"name\": \"@todesktop/cli\",\n \"version\": \"1.19.0-1\",\n \"license\": \"MIT\",\n \"author\": \"Dave Jeffery <dave@todesktop.com> (http://www.todesktop.com/)\",\n \"homepage\": \"https://todesktop.com/cli\",\n \"bugs\": {\n \"email\": \"dave@todesktop.com\"\n },\n \"bin\": {\n \"todesktop\": \"./dist/cli.js\"\n },\n \"types\": \"./dist/types.d.ts\",\n \"engines\": {\n \"node\": \">=16\"\n },\n \"scripts\": {\n \"build\": \"node scripts/esbuild.js\",\n \"dev\": \"node scripts/esbuild.js --link --watch --stage dev\",\n \"dev:local:prod\": \"node scripts/esbuild.js --link --watch --stage prod-local\",\n \"dev:prod\": \"node scripts/esbuild.js --link --watch\",\n \"docs:generate\": \"node scripts/generate-readme.js\",\n \"format\": \"prettier . --write && eslint --fix\",\n \"lint\": \"prettier . --check && eslint\",\n \"types:generate\": \"node scripts/generate-types.js\",\n \"release\": \"npm run docs:generate && npm run build && pnpx np --tag=latest\",\n \"release-beta\": \"npm run docs:generate && npm run build && npx np --any-branch --no-tests --tag=beta\",\n \"test\": \"ava\",\n \"test:e2e\": \"node test/output-snapshots/output.test.js\",\n \"test--watch\": \"npm test -- --watch\",\n \"typecheck\": \"tsc --noEmit && tsc-strict\"\n },\n \"files\": [\n \"scripts/postinstall.js\",\n \"schemas\",\n \"dist\",\n \".env\"\n ],\n \"dependencies\": {\n \"@segment/analytics-node\": \"^2.3.0\",\n \"@sentry/node\": \"^10.29.0\",\n \"ajv\": \"^8.17.1\",\n \"ajv-formats\": \"^3.0.1\",\n \"archiver\": \"^7.0.1\",\n \"axios\": \"^1.13.2\",\n \"better-ajv-errors\": \"^2.0.2\",\n \"bunyan\": \"^1.8.15\",\n \"chalk\": \"^4.1.2\",\n \"commander\": \"^14.0.2\",\n \"conf\": \"^10.2.0\",\n \"date-fns\": \"^4.1.0\",\n \"del\": \"^6.1.1\",\n \"dotenv\": \"^17.2.3\",\n \"du\": \"^1.0.0\",\n \"email-regex\": \"^4.0.0\",\n \"fast-glob\": \"^3.3.3\",\n \"final-form\": \"^5.0.0\",\n \"find-up\": \"^5.0.0\",\n \"firebase\": \"^12.6.0\",\n \"git-rev-sync\": \"^3.0.2\",\n \"ink\": \"^3.2.0\",\n \"ink-gradient\": \"^2.0.0\",\n \"ink-link\": \"^2.0.1\",\n \"ink-select-input\": \"^4.2.2\",\n \"ink-text-input\": \"^4.0.3\",\n \"is-ci\": \"^4.1.0\",\n \"is-installed-globally\": \"^0.4.0\",\n \"js-yaml\": \"^4.1.1\",\n \"latest-version\": \"^5.1.0\",\n \"lodash.merge\": \"^4.6.2\",\n \"lodash.throttle\": \"^4.1.1\",\n \"parse-author\": \"^2.0.0\",\n \"pkg-up\": \"^3.1.0\",\n \"pretty-bytes\": \"^5.6.0\",\n \"prop-types\": \"^15.8.1\",\n \"react\": \"^17.0.2\",\n \"react-final-form\": \"^7.0.0\",\n \"semver\": \"^7.7.3\",\n \"source-map-support\": \"^0.5.21\",\n \"stream-to-array\": \"^2.3.0\",\n \"superagent\": \"^10.2.3\",\n \"uuid\": \"^11.1.0\",\n \"ws\": \"^8.18.3\",\n \"xdg-basedir\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@todesktop/dev-config\": \"workspace:*\",\n \"@todesktop/shared\": \"^7.193.0\",\n \"@types/bunyan\": \"^1.8.11\",\n \"@types/ink-testing-library\": \"^1.0.4\",\n \"@types/is-ci\": \"^3.0.4\",\n \"@types/node\": \"^24.10.2\",\n \"@types/react\": \"^17.0.90\",\n \"@types/semver\": \"^7.7.1\",\n \"@types/ws\": \"^8.18.1\",\n \"ava\": \"^5.3.1\",\n \"cp-cli\": \"^2.0.0\",\n \"esbuild\": \"^0.27.1\",\n \"esbuild-register\": \"^3.6.0\",\n \"eslint\": \"catalog:\",\n \"execa\": \"^5.1.1\",\n \"extract-zip\": \"^2.0.1\",\n \"fs-extra\": \"^11.3.2\",\n \"ink-testing-library\": \"^4.0.0\",\n \"json-schema-to-typescript\": \"^15.0.4\",\n \"package-json-type\": \"^1.0.3\",\n \"prettier\": \"catalog:\",\n \"proxyquire\": \"^2.1.3\",\n \"sinon\": \"^21.0.0\",\n \"typescript\": \"catalog:\",\n \"typescript-strict-plugin\": \"^2.4.4\"\n },\n \"ava\": {\n \"extensions\": [\n \"ts\",\n \"tsx\"\n ],\n \"files\": [\n \"test/**/*.ts\",\n \"**/*.test.ts\",\n \"**/*.test.tsx\",\n \"!build/**/*\",\n \"!test/fixtures/**/*\",\n \"!test/utilities/**/*\",\n \"!worktrees/**/*\"\n ],\n \"require\": [\n \"esbuild-register\",\n \"./test/unit-test-init\"\n ],\n \"timeout\": \"10m\"\n },\n \"packageExtensions\": {\n \"ink-progress-bar@*\": {\n \"dependencies\": {\n \"react\": \"*\",\n \"ink\": \"*\"\n }\n }\n }\n}\n", "import exitIfCLIOutOfDate from './exitIfCLIOutOfDate';\nimport initSentry from './initSentry';\n\nexport default ({ sentry = true, exitIfOutOfDate = true } = {}) => {\n if (sentry) {\n initSentry();\n }\n\n if (exitIfOutOfDate) {\n exitIfCLIOutOfDate();\n }\n};\n", "import { PlatformName } from '@todesktop/shared';\nimport { currentUser } from '../../../utilities/firestore';\nimport getCallableFirebaseFunction from '../../../utilities/getCallableFirebaseFunction';\nimport getProjectConfig from '../../../utilities/projectConfig/getProjectConfig';\n\nexport interface ContinueBreakpointOptions {\n buildId: string;\n platform: PlatformName;\n configPath?: string;\n ignoreExtendsErrors?: boolean;\n}\n\nexport async function continueBreakpoint({\n buildId,\n platform,\n configPath,\n ignoreExtendsErrors,\n}: ContinueBreakpointOptions) {\n const projectConfigFlags =\n ignoreExtendsErrors === true\n ? { build: { ignoreExtendsErrors: true } }\n : undefined;\n\n const { config } = getProjectConfig(configPath, projectConfigFlags);\n const appId = config.id;\n\n if (!buildId) {\n throw new Error('A build ID is required when using --continue');\n }\n\n const user = currentUser();\n if (!user) {\n throw new Error('Not authenticated. Please run: todesktop login');\n }\n\n const idToken = await user.getIdToken(true);\n\n const resumeBuildBreakpoint = getCallableFirebaseFunction(\n 'resumeBuildBreakpoint',\n );\n\n await resumeBuildBreakpoint({\n appId,\n buildId,\n platform,\n idToken,\n });\n\n console.log(\n `Sent resume command for build ${buildId} (${platform}). Check the original terminal for progress.`,\n );\n}\n\nexport function isValidPlatform(\n value: string | undefined,\n): value is PlatformName {\n return (\n typeof value === 'string' &&\n Object.values(PlatformName).includes(value as PlatformName)\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_ink", "import_react", "import_ink", "import_react", "definitions", "import_ink", "import_react", "import_shared", "import_ink", "import_ink", "dotenv", "path", "authSignInWithCustomToken", "Conf", "pkgUp", "environmentVariables", "os", "uuidv4", "os", "path", "bunyan", "resolve", "isCi", "useInkInput", "import_app", "import_jsx_runtime", "_a", "data", "platform", "message", "import_ink", "import_prop_types", "import_react", "import_ink", "import_react", "import_is_ci", "args", "isCi", "import_jsx_runtime", "_a", "Link", "PropTypes", "import_prop_types", "import_ink", "import_ink_link", "import_jsx_runtime", "Link", "PropTypes", "import_ink", "import_react", "import_jsx_runtime", "import_jsx_runtime", "throttle", "PropTypes", "import_ink", "import_react", "message", "import_jsx_runtime", "import_ink", "import_is_ci", "import_react", "import_ink", "import_react", "import_jsx_runtime", "import_ink", "import_ink_link", "import_prop_types", "import_jsx_runtime", "Link", "PropTypes", "import_ink", "import_prop_types", "import_jsx_runtime", "PropTypes", "import_jsx_runtime", "isCi", "import_ink", "import_prop_types", "import_ink", "import_jsx_runtime", "import_jsx_runtime", "Gradient", "PropTypes", "import_prop_types", "import_jsx_runtime", "PropTypes", "import_axios", "axios", "import_path", "import_path", "import_path", "fs", "module", "path", "import_ajv", "import_ajv_formats", "import_better_ajv_errors", "import_ajv", "fs", "path", "Ajv", "addFormats", "betterAjvErrors", "semverValidRange", "emailRegex", "parseAuthor", "Ajv", "addFormats", "betterAjvErrors", "import_lodash", "import_path", "merge", "findUp", "import_lodash", "import_path", "path", "merge", "import_firestore", "doc", "EventEmitter", "resolve", "_a", "import_fast_glob", "fs", "path", "resolve", "streamToArray", "superagent", "import_fs", "import_path", "archiver", "fs", "du", "chalk", "path", "import_fs", "import_path", "_a", "path", "fs", "packageJson", "yaml", "fastGlob", "relative", "fastGlob", "_a", "fs", "_a", "build", "prettyBytes", "message", "axios", "import_jsx_runtime", "_a", "import_ink", "import_react", "import_prop_types", "import_is_ci", "import_ink", "import_prop_types", "import_react", "import_react", "import_jsx_runtime", "React", "InkTextInput", "import_jsx_runtime", "message", "_a", "Error", "PropTypes", "import_ink", "import_jsx_runtime", "import_jsx_runtime", "isCi", "PropTypes", "Sentry", "import_react", "React", "import_ink", "import_prop_types", "import_react", "import_ink", "import_jsx_runtime", "import_ink", "import_jsx_runtime", "import_ink", "import_prop_types", "import_react", "import_firestore", "import_firestore", "resolve", "import_firestore", "import_jsx_runtime", "error", "PropTypes", "import_firestore", "import_is_ci", "import_jsx_runtime", "doc", "isCi", "itemChosen", "SelectInput", "PropTypes", "import_react", "import_jsx_runtime", "import_ink", "import_prop_types", "import_react", "import_ink", "import_prop_types", "import_ink", "import_prop_types", "import_jsx_runtime", "PropTypes", "import_ink", "import_prop_types", "import_react", "import_jsx_runtime", "PropTypes", "import_prop_types", "import_ink", "import_prop_types", "import_jsx_runtime", "PropTypes", "import_jsx_runtime", "PropTypes", "import_jsx_runtime", "PropTypes", "import_firestore", "limit", "firestoreStartAfter", "firestoreLimit", "query", "firestoreQuery", "import_chalk", "React", "import_ink", "import_jsx_runtime", "chalk", "util", "import_jsx_runtime", "user", "builds", "PropTypes", "import_jsx_runtime", "import_react", "import_ink", "import_react", "import_firestore", "import_ws", "WebSocket", "import_ws", "WebSocket", "import_jsx_runtime", "WebSocket", "message", "connectToTunnel", "_a", "error", "delay", "import_ink", "import_react", "import_ink", "import_ink", "import_ink_select_input", "import_prop_types", "import_jsx_runtime", "SelectInput", "PropTypes", "import_jsx_runtime", "import_react", "import_firestore", "import_shared", "firestoreQuery", "firestoreLimit", "doc", "_a", "import_jsx_runtime", "builds", "_a", "import_ink", "import_ink_select_input", "import_react", "import_jsx_runtime", "SelectInput", "import_react", "import_jsx_runtime", "import_jsx_runtime", "import_react", "import_ink", "import_jsx_runtime", "import_ink", "import_react", "import_firestore", "import_firestore", "import_firestore", "_a", "app", "import_jsx_runtime", "import_react", "_a", "isFirebaseFunctionError", "import_ink", "import_ink", "import_ink_link", "import_jsx_runtime", "message", "Link", "import_jsx_runtime", "_a", "import_jsx_runtime", "import_ink", "import_react", "_a", "semver", "import_semver", "semver", "import_ink", "import_ink_text_input", "import_react", "import_jsx_runtime", "confirmDowngrade", "latestVersion", "TextInput", "import_ink", "import_ink_select_input", "import_jsx_runtime", "SelectInput", "import_jsx_runtime", "_a", "import_jsx_runtime", "import_react", "import_ink", "import_react", "import_jsx_runtime", "import_ink", "import_ink", "import_jsx_runtime", "ProgressBar", "import_jsx_runtime", "os", "ProgressBar", "import_jsx_runtime", "_a", "_a", "import_axios", "_a", "axios", "import_firestore", "resolve", "import_jsx_runtime", "_a", "import_react", "import_ink", "import_jsx_runtime", "auth", "import_chalk", "import_semver", "latestVersion", "semver", "chalk", "isInstalledGlobally", "Sentry", "import_os", "os", "import_shared", "message"]
|
|
7
7
|
}
|