/******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ "./node_modules/eventemitter3/index.js": /*!*********************************************!*\ !*** ./node_modules/eventemitter3/index.js ***! \*********************************************/ /***/ ((module) => { var has = Object.prototype.hasOwnProperty , prefix = '~'; /** * Constructor to create a storage for our `EE` objects. * An `Events` instance is a plain object whose properties are event names. * * @constructor * @private */ function Events() {} // // We try to not inherit from `Object.prototype`. In some engines creating an // instance in this way is faster than calling `Object.create(null)` directly. // If `Object.create(null)` is not supported we prefix the event names with a // character to make sure that the built-in object properties are not // overridden or used as an attack vector. // if (Object.create) { Events.prototype = Object.create(null); // // This hack is needed because the `__proto__` property is still inherited in // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5. // if (!new Events().__proto__) prefix = false; } /** * Representation of a single event listener. * * @param {Function} fn The listener function. * @param {*} context The context to invoke the listener with. * @param {Boolean} [once=false] Specify if the listener is a one-time listener. * @constructor * @private */ function EE(fn, context, once) { this.fn = fn; this.context = context; this.once = once || false; } /** * Add a listener for a given event. * * @param {EventEmitter} emitter Reference to the `EventEmitter` instance. * @param {(String|Symbol)} event The event name. * @param {Function} fn The listener function. * @param {*} context The context to invoke the listener with. * @param {Boolean} once Specify if the listener is a one-time listener. * @returns {EventEmitter} * @private */ function addListener(emitter, event, fn, context, once) { if (typeof fn !== 'function') { throw new TypeError('The listener must be a function'); } var listener = new EE(fn, context || emitter, once) , evt = prefix ? prefix + event : event; if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++; else if (!emitter._events[evt].fn) emitter._events[evt].push(listener); else emitter._events[evt] = [emitter._events[evt], listener]; return emitter; } /** * Clear event by name. * * @param {EventEmitter} emitter Reference to the `EventEmitter` instance. * @param {(String|Symbol)} evt The Event name. * @private */ function clearEvent(emitter, evt) { if (--emitter._eventsCount === 0) emitter._events = new Events(); else delete emitter._events[evt]; } /** * Minimal `EventEmitter` interface that is molded against the Node.js * `EventEmitter` interface. * * @constructor * @public */ function EventEmitter() { this._events = new Events(); this._eventsCount = 0; } /** * Return an array listing the events for which the emitter has registered * listeners. * * @returns {Array} * @public */ EventEmitter.prototype.eventNames = function eventNames() { var names = [] , events , name; if (this._eventsCount === 0) return names; for (name in (events = this._events)) { if (has.call(events, name)) names.push(prefix ? name.slice(1) : name); } if (Object.getOwnPropertySymbols) { return names.concat(Object.getOwnPropertySymbols(events)); } return names; }; /** * Return the listeners registered for a given event. * * @param {(String|Symbol)} event The event name. * @returns {Array} The registered listeners. * @public */ EventEmitter.prototype.listeners = function listeners(event) { var evt = prefix ? prefix + event : event , handlers = this._events[evt]; if (!handlers) return []; if (handlers.fn) return [handlers.fn]; for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) { ee[i] = handlers[i].fn; } return ee; }; /** * Return the number of listeners listening to a given event. * * @param {(String|Symbol)} event The event name. * @returns {Number} The number of listeners. * @public */ EventEmitter.prototype.listenerCount = function listenerCount(event) { var evt = prefix ? prefix + event : event , listeners = this._events[evt]; if (!listeners) return 0; if (listeners.fn) return 1; return listeners.length; }; /** * Calls each of the listeners registered for a given event. * * @param {(String|Symbol)} event The event name. * @returns {Boolean} `true` if the event had listeners, else `false`. * @public */ EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) { var evt = prefix ? prefix + event : event; if (!this._events[evt]) return false; var listeners = this._events[evt] , len = arguments.length , args , i; if (listeners.fn) { if (listeners.once) this.removeListener(event, listeners.fn, undefined, true); switch (len) { case 1: return listeners.fn.call(listeners.context), true; case 2: return listeners.fn.call(listeners.context, a1), true; case 3: return listeners.fn.call(listeners.context, a1, a2), true; case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true; case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true; case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true; } for (i = 1, args = new Array(len -1); i < len; i++) { args[i - 1] = arguments[i]; } listeners.fn.apply(listeners.context, args); } else { var length = listeners.length , j; for (i = 0; i < length; i++) { if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true); switch (len) { case 1: listeners[i].fn.call(listeners[i].context); break; case 2: listeners[i].fn.call(listeners[i].context, a1); break; case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break; case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break; default: if (!args) for (j = 1, args = new Array(len -1); j < len; j++) { args[j - 1] = arguments[j]; } listeners[i].fn.apply(listeners[i].context, args); } } } return true; }; /** * Add a listener for a given event. * * @param {(String|Symbol)} event The event name. * @param {Function} fn The listener function. * @param {*} [context=this] The context to invoke the listener with. * @returns {EventEmitter} `this`. * @public */ EventEmitter.prototype.on = function on(event, fn, context) { return addListener(this, event, fn, context, false); }; /** * Add a one-time listener for a given event. * * @param {(String|Symbol)} event The event name. * @param {Function} fn The listener function. * @param {*} [context=this] The context to invoke the listener with. * @returns {EventEmitter} `this`. * @public */ EventEmitter.prototype.once = function once(event, fn, context) { return addListener(this, event, fn, context, true); }; /** * Remove the listeners of a given event. * * @param {(String|Symbol)} event The event name. * @param {Function} fn Only remove the listeners that match this function. * @param {*} context Only remove the listeners that have this context. * @param {Boolean} once Only remove one-time listeners. * @returns {EventEmitter} `this`. * @public */ EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) { var evt = prefix ? prefix + event : event; if (!this._events[evt]) return this; if (!fn) { clearEvent(this, evt); return this; } var listeners = this._events[evt]; if (listeners.fn) { if ( listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context) ) { clearEvent(this, evt); } } else { for (var i = 0, events = [], length = listeners.length; i < length; i++) { if ( listeners[i].fn !== fn || (once && !listeners[i].once) || (context && listeners[i].context !== context) ) { events.push(listeners[i]); } } // // Reset the array, or remove it completely if we have no more listeners. // if (events.length) this._events[evt] = events.length === 1 ? events[0] : events; else clearEvent(this, evt); } return this; }; /** * Remove all listeners, or those of the specified event. * * @param {(String|Symbol)} [event] The event name. * @returns {EventEmitter} `this`. * @public */ EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) { var evt; if (event) { evt = prefix ? prefix + event : event; if (this._events[evt]) clearEvent(this, evt); } else { this._events = new Events(); this._eventsCount = 0; } return this; }; // // Alias methods names because people roll like that. // EventEmitter.prototype.off = EventEmitter.prototype.removeListener; EventEmitter.prototype.addListener = EventEmitter.prototype.on; // // Expose the prefix. // EventEmitter.prefixed = prefix; // // Allow `EventEmitter` to be imported as module namespace. // EventEmitter.EventEmitter = EventEmitter; // // Expose the module. // if (true) { module.exports = EventEmitter; } /***/ }), /***/ "./src/extensions/formTypeEx.ts": /*!**************************************!*\ !*** ./src/extensions/formTypeEx.ts ***! \**************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ FormTypeEx: () => (/* binding */ FormTypeEx) /* harmony export */ }); var FormTypeEx = /** @class */ (function () { function FormTypeEx() { } FormTypeEx.isItem = function (type) { return type === 42 /* FormType.Ammo */ || type === 26 /* FormType.Armor */ || type === 27 /* FormType.Book */ || type === 30 /* FormType.Ingredient */ || type === 31 /* FormType.Light */ || type === 46 /* FormType.Potion */ || type === 23 /* FormType.ScrollItem */ || type === 52 /* FormType.SoulGem */ || type === 41 /* FormType.Weapon */ || type === 32 /* FormType.Misc */; }; return FormTypeEx; }()); /***/ }), /***/ "./src/extensions/objectReferenceEx.ts": /*!*********************************************!*\ !*** ./src/extensions/objectReferenceEx.ts ***! \*********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ObjectReferenceEx: () => (/* binding */ ObjectReferenceEx) /* harmony export */ }); /* harmony import */ var skyrimPlatform__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! skyrimPlatform */ "skyrimPlatform"); /* harmony import */ var skyrimPlatform__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(skyrimPlatform__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _formTypeEx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formTypeEx */ "./src/extensions/formTypeEx.ts"); var ObjectReferenceEx = /** @class */ (function () { function ObjectReferenceEx() { } ObjectReferenceEx.getWorldOrCell = function (self) { var world = self.getWorldSpace(); if (world) { return world.getFormID(); } var cell = self.getParentCell(); if (cell) { return cell.getFormID(); } return 0; }; ObjectReferenceEx.getPos = function (self) { return [self.getPositionX(), self.getPositionY(), self.getPositionZ()]; }; ; ObjectReferenceEx.getDistance = function (a, b) { var deltaX = a[0] - b[0]; var deltaY = a[1] - b[1]; var deltaZ = a[2] - b[2]; return Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ); }; ; ObjectReferenceEx.getDistanceNoZ = function (a, b) { var deltaX = a[0] - b[0]; var deltaY = a[1] - b[1]; return Math.sqrt(deltaX * deltaX + deltaY * deltaY); }; ; ObjectReferenceEx.dealWithRef = function (self, base) { var _a, _b; var t = base.getType(); var isItem = _formTypeEx__WEBPACK_IMPORTED_MODULE_1__.FormTypeEx.isItem(t); // BlackFallsBarrow02, door isn't opening via SetOpen so we're hacking it. // Not blocking activation & asking parent to activate until will be in the correct state // See also modelApplyUtils.ts var caveGSecretDoor01 = 0x6f703; // You can also block for t === FormType.Flora || t === FormType.Tree, but I don't think it's necessary. if (t === 40 /* FormType.Furniture */ || t === 24 /* FormType.Activator */ || t === 28 /* FormType.Container */ || isItem || t === 43 /* FormType.NPC */ || (t === 29 /* FormType.Door */ && ((_a = self.getBaseObject()) === null || _a === void 0 ? void 0 : _a.getFormID()) !== caveGSecretDoor01)) { self.blockActivation(true); } else { self.blockActivation(false); } if (self.isLocked()) { self.lock(false, false); } if (isItem) { self.setMotionType(4 /* MotionType.Keyframed */, false); } // https://github.com/skyrim-multiplayer/issue-tracker/issues/36 if (t === 39 /* FormType.Flora */ && ((_b = skyrimPlatform__WEBPACK_IMPORTED_MODULE_0__.Flora.from(base)) === null || _b === void 0 ? void 0 : _b.getIngredient())) { self.setMotionType(4 /* MotionType.Keyframed */, false); } }; return ObjectReferenceEx; }()); /***/ }), /***/ "./src/features/authModel.ts": /*!***********************************!*\ !*** ./src/features/authModel.ts ***! \***********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ authGameDataStorageKey: () => (/* binding */ authGameDataStorageKey) /* harmony export */ }); ; ; ; var authGameDataStorageKey = "authGameData"; /***/ }), /***/ "./src/lib/errors.ts": /*!***************************!*\ !*** ./src/lib/errors.ts ***! \***************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ NeverError: () => (/* binding */ NeverError), /* harmony export */ RespawnNeededError: () => (/* binding */ RespawnNeededError) /* harmony export */ }); var __extends = (undefined && undefined.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var RespawnNeededError = /** @class */ (function (_super) { __extends(RespawnNeededError, _super); function RespawnNeededError(message) { var _this = _super.call(this, message) || this; Object.setPrototypeOf(_this, RespawnNeededError.prototype); return _this; } return RespawnNeededError; }(Error)); var NeverError = /** @class */ (function (_super) { __extends(NeverError, _super); function NeverError(message) { var _this = _super.call(this, "NeverError: ".concat(JSON.stringify(message))) || this; Object.setPrototypeOf(_this, NeverError.prototype); return _this; } return NeverError; }(Error)); /***/ }), /***/ "./src/lib/functionInfo.ts": /*!*********************************!*\ !*** ./src/lib/functionInfo.ts ***! \*********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ FunctionInfo: () => (/* binding */ FunctionInfo) /* harmony export */ }); var FunctionInfo = /** @class */ (function () { function FunctionInfo(f) { this.f = f; } Object.defineProperty(FunctionInfo.prototype, "text", { get: function () { // this part is different to functionInfo.ts used in skymp5-functions-lib return this.getTextWithoutErrorHandling(); }, enumerable: false, configurable: true }); FunctionInfo.prototype.getText = function (args) { if (!args) { return this.text; } return "(function(){const {".concat(Object.keys(args).join(','), "} = ").concat(JSON.stringify(args), ";").concat(this.text, "})()"); }; FunctionInfo.prototype.getTextWithoutErrorHandling = function () { var funcString = this.f.toString().substring(0, this.f.toString().length - 1); return funcString.replace(new RegExp('^.+?{', 'm'), '').trim(); }; return FunctionInfo; }()); /***/ }), /***/ "./src/lib/idManager.ts": /*!******************************!*\ !*** ./src/lib/idManager.ts ***! \******************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ IdManager: () => (/* binding */ IdManager) /* harmony export */ }); var IdManager = /** @class */ (function () { function IdManager() { this.idByValue = new Array(); this.valueById = new Array(); this.minimumUnusedId = 0; } IdManager.prototype.allocateIdFor = function (value) { if (this.idByValue.length <= value) { this.idByValue.length = value + 1; } this.idByValue[value] = this.minimumUnusedId; if (this.valueById.length <= this.minimumUnusedId) { this.valueById.length = this.minimumUnusedId + 1; } this.valueById[this.minimumUnusedId] = value; var res = this.minimumUnusedId; this.minimumUnusedId++; while (this.valueById.length > this.minimumUnusedId && typeof this.valueById[this.minimumUnusedId] === "number") { this.minimumUnusedId++; } return res; }; IdManager.prototype.freeIdFor = function (value) { var id = this.idByValue[value]; if (id < this.minimumUnusedId) { this.minimumUnusedId = id; } this.idByValue[value] = undefined; this.valueById[id] = undefined; return; }; IdManager.prototype.getId = function (value) { var r = this.idByValue[value]; return typeof r === "number" ? r : -1; }; IdManager.prototype.getValueById = function (id) { return this.valueById[id]; }; return IdManager; }()); /***/ }), /***/ "./src/lib/nameof.ts": /*!***************************!*\ !*** ./src/lib/nameof.ts ***! \***************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ nameof: () => (/* binding */ nameof) /* harmony export */ }); function nameof(key) { return key; } /***/ }), /***/ "./src/logging.ts": /*!************************!*\ !*** ./src/logging.ts ***! \************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ logError: () => (/* binding */ logError), /* harmony export */ logTrace: () => (/* binding */ logTrace) /* harmony export */ }); /* harmony import */ var _skyrim_platform_skyrim_platform__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @skyrim-platform/skyrim-platform */ "skyrimPlatform"); /* harmony import */ var _skyrim_platform_skyrim_platform__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_skyrim_platform_skyrim_platform__WEBPACK_IMPORTED_MODULE_0__); var __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; // TODO: redirect this to spdlog function logError(service) { var rest = []; for (var _i = 1; _i < arguments.length; _i++) { rest[_i - 1] = arguments[_i]; } var restProcessed = rest.map(function (item) { if (item instanceof Error) { return item.stack || item.message; } return item; }); _skyrim_platform_skyrim_platform__WEBPACK_IMPORTED_MODULE_0__.printConsole.apply(void 0, __spreadArray(["Error in ".concat(typeof service !== "string" ? service.constructor.name : service, ":")], restProcessed, false)); } // TODO: redirect this to spdlog function logTrace(service) { var rest = []; for (var _i = 1; _i < arguments.length; _i++) { rest[_i - 1] = arguments[_i]; } var restProcessed = rest.map(function (item) { if (item instanceof Error) { return item.stack || item.message; } return item; }); _skyrim_platform_skyrim_platform__WEBPACK_IMPORTED_MODULE_0__.printConsole.apply(void 0, __spreadArray(["Trace in ".concat(typeof service !== "string" ? service.constructor.name : service, ":")], restProcessed, false)); } /***/ }), /***/ "./src/messages.ts": /*!*************************!*\ !*** ./src/messages.ts ***! \*************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ MsgType: () => (/* binding */ MsgType) /* harmony export */ }); var MsgType; (function (MsgType) { MsgType[MsgType["CustomPacket"] = 1] = "CustomPacket"; MsgType[MsgType["UpdateMovement"] = 2] = "UpdateMovement"; MsgType[MsgType["UpdateAnimation"] = 3] = "UpdateAnimation"; MsgType[MsgType["UpdateAppearance"] = 4] = "UpdateAppearance"; MsgType[MsgType["UpdateEquipment"] = 5] = "UpdateEquipment"; MsgType[MsgType["Activate"] = 6] = "Activate"; MsgType[MsgType["UpdateProperty"] = 7] = "UpdateProperty"; MsgType[MsgType["PutItem"] = 8] = "PutItem"; MsgType[MsgType["TakeItem"] = 9] = "TakeItem"; MsgType[MsgType["FinishSpSnippet"] = 10] = "FinishSpSnippet"; MsgType[MsgType["OnEquip"] = 11] = "OnEquip"; MsgType[MsgType["ConsoleCommand"] = 12] = "ConsoleCommand"; MsgType[MsgType["CraftItem"] = 13] = "CraftItem"; MsgType[MsgType["Host"] = 14] = "Host"; MsgType[MsgType["CustomEvent"] = 15] = "CustomEvent"; MsgType[MsgType["ChangeValues"] = 16] = "ChangeValues"; MsgType[MsgType["OnHit"] = 17] = "OnHit"; MsgType[MsgType["DeathStateContainer"] = 18] = "DeathStateContainer"; MsgType[MsgType["DropItem"] = 19] = "DropItem"; MsgType[MsgType["Teleport"] = 20] = "Teleport"; MsgType[MsgType["OpenContainer"] = 21] = "OpenContainer"; MsgType[MsgType["PlayerBowShot"] = 22] = "PlayerBowShot"; MsgType[MsgType["SpellCast"] = 23] = "SpellCast"; MsgType[MsgType["UpdateAnimVariables"] = 24] = "UpdateAnimVariables"; // ex-strings MsgType[MsgType["DestroyActor"] = 25] = "DestroyActor"; MsgType[MsgType["HostStart"] = 26] = "HostStart"; MsgType[MsgType["HostStop"] = 27] = "HostStop"; MsgType[MsgType["SetInventory"] = 28] = "SetInventory"; MsgType[MsgType["SetRaceMenuOpen"] = 29] = "SetRaceMenuOpen"; MsgType[MsgType["SpSnippet"] = 30] = "SpSnippet"; MsgType[MsgType["Teleport2"] = 31] = "Teleport2"; MsgType[MsgType["UpdateGamemodeData"] = 32] = "UpdateGamemodeData"; MsgType[MsgType["CreateActor"] = 33] = "CreateActor"; })(MsgType || (MsgType = {})); /***/ }), /***/ "./src/services/events/events.ts": /*!***************************************!*\ !*** ./src/services/events/events.ts ***! \***************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ EventEmitterFactory: () => (/* binding */ EventEmitterFactory) /* harmony export */ }); /* harmony import */ var eventemitter3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! eventemitter3 */ "./node_modules/eventemitter3/index.mjs"); var EventEmitterFactory = /** @class */ (function () { function EventEmitterFactory() { } EventEmitterFactory.makeEventEmitter = function () { return (new eventemitter3__WEBPACK_IMPORTED_MODULE_0__.EventEmitter()); }; return EventEmitterFactory; }()); /***/ }), /***/ "./src/services/services/activationService.ts": /*!****************************************************!*\ !*** ./src/services/services/activationService.ts ***! \****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ActivationService: () => (/* binding */ ActivationService) /* harmony export */ }); /* harmony import */ var _clientListener__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clientListener */ "./src/services/services/clientListener.ts"); /* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../messages */ "./src/messages.ts"); /* harmony import */ var _sync_inventory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../sync/inventory */ "./src/sync/inventory.ts"); /* harmony import */ var _view_worldViewMisc__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../view/worldViewMisc */ "./src/view/worldViewMisc.ts"); /* harmony import */ var _lastInvService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lastInvService */ "./src/services/services/lastInvService.ts"); /* harmony import */ var _logging__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../logging */ "./src/logging.ts"); /* harmony import */ var _extensions_formTypeEx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../extensions/formTypeEx */ "./src/extensions/formTypeEx.ts"); var __extends = (undefined && undefined.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); // TODO: refactor this out var ActivationService = /** @class */ (function (_super) { __extends(ActivationService, _super); function ActivationService(sp, controller) { var _this = _super.call(this) || this; _this.sp = sp; _this.controller = controller; _this.controller.on("activate", function (e) { return _this.onActivate(e); }); return _this; } ActivationService.prototype.onActivate = function (e) { var lastInvService = this.controller.lookupListener(_lastInvService__WEBPACK_IMPORTED_MODULE_4__.LastInvService); lastInvService.lastInv = (0,_sync_inventory__WEBPACK_IMPORTED_MODULE_2__.getInventory)(this.sp.Game.getPlayer()); var caster = e.caster ? e.caster.getFormID() : 0; var target = e.target ? e.target.getFormID() : 0; if (!target || !caster) { return; } // Bloquear el "agarre" de items sueltos del mundo: si el target es // un item (clutter de la ciudad, etc.), no mandamos el Activate al // server, asi nunca pasa al inventario. La activacion vanilla ya // esta bloqueada por ObjectReferenceEx.dealWithRef, asi que apretar // E sobre el item no hace nada. Puertas / contenedores / NPCs no se // ven afectados — solo los FormType de item (FormTypeEx.isItem). var targetBase = e.target ? e.target.getBaseObject() : null; if (targetBase && _extensions_formTypeEx__WEBPACK_IMPORTED_MODULE_6__.FormTypeEx.isItem(targetBase.getType())) { return; } // Actors never have non-ff ids locally in skymp if (caster !== 0x14 && caster < 0xff000000) { return; } target = (0,_view_worldViewMisc__WEBPACK_IMPORTED_MODULE_3__.localIdToRemoteId)(target); if (!target) { (0,_logging__WEBPACK_IMPORTED_MODULE_5__.logError)(this, 'localIdToRemoteId returned 0 (target) in on(\'activate\')'); return; } caster = (0,_view_worldViewMisc__WEBPACK_IMPORTED_MODULE_3__.localIdToRemoteId)(caster); if (!caster) { (0,_logging__WEBPACK_IMPORTED_MODULE_5__.logError)(this, 'localIdToRemoteId returned 0 (caster) in on(\'activate\')'); return; } var openState = e.target.getOpenState(); if (openState === 2 /* OpenState.Opening */ || openState === 4 /* OpenState.Closing */) { (0,_logging__WEBPACK_IMPORTED_MODULE_5__.logTrace)(this, "Ignoring activation of door because it's already opening or closing"); return; } this.controller.emitter.emit("sendMessage", { message: { t: _messages__WEBPACK_IMPORTED_MODULE_1__.MsgType.Activate, data: { caster: caster, target: target, isSecondActivation: false } }, reliability: "reliable" }); (0,_logging__WEBPACK_IMPORTED_MODULE_5__.logTrace)(this, "Sent activation for caster=", caster.toString(16), "and target=", target.toString(16)); }; return ActivationService; }(_clientListener__WEBPACK_IMPORTED_MODULE_0__.ClientListener)); ; /***/ }), /***/ "./src/services/services/animDebugService.ts": /*!***************************************************!*\ !*** ./src/services/services/animDebugService.ts ***! \***************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AnimDebugService: () => (/* binding */ AnimDebugService) /* harmony export */ }); /* harmony import */ var _logging__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../logging */ "./src/logging.ts"); /* harmony import */ var _clientListener__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./clientListener */ "./src/services/services/clientListener.ts"); /* harmony import */ var skyrimPlatform__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! skyrimPlatform */ "skyrimPlatform"); /* harmony import */ var skyrimPlatform__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(skyrimPlatform__WEBPACK_IMPORTED_MODULE_2__); var __extends = (undefined && undefined.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __assign = (undefined && undefined.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var playerId = 0x14; var AnimDebugService = /** @class */ (function (_super) { __extends(AnimDebugService, _super); function AnimDebugService(sp, controller) { var _this = this; var _a; _this = _super.call(this) || this; _this.sp = sp; _this.controller = controller; _this.settings = _this.sp.settings["skymp5-client"]["animDebug"]; // clear previous texts in case of hotreload if (_this.sp.storage[AnimQueueCollection.Name] && _this.sp.storage[AnimQueueCollection.Name].clearSPText) { (0,_logging__WEBPACK_IMPORTED_MODULE_0__.logTrace)(_this, "Destroying old AnimQueueCollection"); try { _this.sp.storage[AnimQueueCollection.Name].clearSPText(); } catch (e) { (0,_logging__WEBPACK_IMPORTED_MODULE_0__.logError)(_this, "Failed to destroy old AnimQueueCollection:", e); } } var self = _this; _this.sp.hooks.sendAnimationEvent.add({ enter: function (ctx) { }, leave: function (ctx) { self.onSendAnimationEventLeave(ctx); } }, playerId, playerId); if (!_this.settings || !_this.settings.isActive) { return _this; } if ((_a = _this.settings.textOutput) === null || _a === void 0 ? void 0 : _a.isActive) { _this.queue = new AnimQueueCollection(_this.sp, _this.settings); _this.sp.storage[AnimQueueCollection.name] = _this.queue; } return _this; } AnimDebugService.prototype.onSendAnimationEventLeave = function (ctx) { if (this.queue === undefined) { return; } this.queue.push(ctx.animEventName, ctx.animationSucceeded ? animationSucceededTextColor : animationNotSucceededTextColor); }; return AnimDebugService; }(_clientListener__WEBPACK_IMPORTED_MODULE_1__.ClientListener)); var animationSucceededTextColor = [255, 255, 255, 1]; var animationNotSucceededTextColor = [255, 0, 0, 1]; var AnimQueueCollection = /** @class */ (function () { function AnimQueueCollection(sp, settings) { var _a, _b, _c, _d, _e, _f; this.sp = sp; var arrayLength = (_b = (_a = settings === null || settings === void 0 ? void 0 : settings.textOutput) === null || _a === void 0 ? void 0 : _a.itemCount) !== null && _b !== void 0 ? _b : 5; var startPos = (_d = (_c = settings === null || settings === void 0 ? void 0 : settings.textOutput) === null || _c === void 0 ? void 0 : _c.startPos) !== null && _d !== void 0 ? _d : { x: 650, y: 600 }; ; var yPosDelta = (_f = (_e = settings === null || settings === void 0 ? void 0 : settings.textOutput) === null || _e === void 0 ? void 0 : _e.yPosDelta) !== null && _f !== void 0 ? _f : 32; var y = startPos.y; this.list = new Array(arrayLength); for (var idx = 0; idx < arrayLength; ++idx) { this.list[idx] = { name: "", textId: sp.createText(startPos.x, y, "", animationSucceededTextColor), color: animationSucceededTextColor }; (0,skyrimPlatform__WEBPACK_IMPORTED_MODULE_2__.setTextSize)(this.list[idx].textId, 0.5); y += yPosDelta; } } AnimQueueCollection.prototype.clearSPText = function () { var _this = this; if (this.list.length === 0) { return; } this.list.forEach(function (item) { return _this.sp.destroyText(item.textId); }); }; AnimQueueCollection.prototype.push = function (animName, color) { var prevItem = null; for (var idx = this.list.length - 1; idx >= 0; --idx) { var item = this.list[idx]; prevItem = __assign({}, item); item.name = animName; item.color = color; this.sp.setTextString(item.textId, item.name); this.sp.setTextColor(item.textId, item.color); animName = prevItem.name; color = prevItem.color; } }; AnimQueueCollection.Name = "AnimQueueCollection"; return AnimQueueCollection; }()); /***/ }), /***/ "./src/services/services/authBranding.ts": /*!***********************************************!*\ !*** ./src/services/services/authBranding.ts ***! \***********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ELDERVALE_LOGO_DATA_URI: () => (/* binding */ ELDERVALE_LOGO_DATA_URI), /* harmony export */ ELDERVALE_THEME: () => (/* binding */ ELDERVALE_THEME) /* harmony export */ }); // Eldervale Realm — branding assets for the authorization window. // The emblem is inlined as a base64 data URI so the auth theme requires no // extra files distributed through the launcher manifest (everything ships // inside skymp5-client.js). Source: skymp-admin/public/brand/emblem.png, // downscaled to 300px (headroom so it stays crisp when the frame is scaled up). // Regenerate with: // convert emblem.png -resize 300x300 -strip out.png && base64 -w0 out.png var ELDERVALE_LOGO_DATA_URI = "data:image/png;base64,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"; // Eldervale palette (silver emblem + warm gold accents) matching the admin panel. var ELDERVALE_THEME = { gold: "#d8c08a", goldBright: "#e8d09a", goldLine: "#c9a86a", glow: "rgba(201, 168, 106, 0.20)", glowStrong: "rgba(201, 168, 106, 0.55)", logoWidth: 148, logoHeight: 190, }; /***/ }), /***/ "./src/services/services/authService.ts": /*!**********************************************!*\ !*** ./src/services/services/authService.ts ***! \**********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AuthService: () => (/* binding */ AuthService) /* harmony export */ }); /* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! crypto */ "crypto"); /* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(crypto__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fs */ "fs"); /* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _features_authModel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../features/authModel */ "./src/features/authModel.ts"); /* harmony import */ var _lib_functionInfo__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../lib/functionInfo */ "./src/lib/functionInfo.ts"); /* harmony import */ var _clientListener__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./clientListener */ "./src/services/services/clientListener.ts"); /* harmony import */ var skyrimPlatform__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! skyrimPlatform */ "skyrimPlatform"); /* harmony import */ var skyrimPlatform__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(skyrimPlatform__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _timersService__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./timersService */ "./src/services/services/timersService.ts"); /* harmony import */ var _logging__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../logging */ "./src/logging.ts"); /* harmony import */ var _networkingService__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./networkingService */ "./src/services/services/networkingService.ts"); /* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../messages */ "./src/messages.ts"); /* harmony import */ var _settingsService__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./settingsService */ "./src/services/services/settingsService.ts"); /* harmony import */ var _authBranding__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./authBranding */ "./src/services/services/authBranding.ts"); var __extends = (undefined && undefined.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); // Module-scope aliases (NOT the imported names) used by eldervaleThemeSetter. // The widget setters are serialized via FunctionInfo.toString() and re-run in // the browser; their free variables are re-supplied by getText() keyed by name. // Imported bindings get rewritten by webpack to namespace accesses // (authBranding_1.ELDERVALE_*), which would not match the destructured keys, so // we reference plain local consts here — same convention as events/strings. var logo = _authBranding__WEBPACK_IMPORTED_MODULE_11__.ELDERVALE_LOGO_DATA_URI; var theme = _authBranding__WEBPACK_IMPORTED_MODULE_11__.ELDERVALE_THEME; // Constants used on both client and browser side (see browsersideWidgetSetter) var events = { openDiscordOauth: 'openDiscordOauth', authAttempt: 'authAttemptEvent', openGithub: 'openGithub', openPatreon: 'openPatreon', clearAuthData: 'clearAuthData', updateRequired: 'updateRequired', backToLogin: 'backToLogin', joinDiscord: 'joinDiscord' }; // Vaiables used on both client and browser side (see browsersideWidgetSetter) var browserState = { comment: '', failCount: 9000, loginFailedReason: '', }; var authData = null; var translations = { "ru": { loginViaDiscord: 'войдите через discord', joinDiscordServer: 'вступите в discord сервер', banned: 'вы забанены', whatWasThat: 'что это было?', openingBrowser: 'открываем браузер...', loginFirst: 'сначала войдите', linkedSuccessfully: 'привязан успешно', connecting: 'подключение', technicalIssues: 'технические шоколадки\nпопробуйте еще раз\nпожалуйста\nили напишите нам в discord', authorization: 'Авторизация', notAuthorized: 'не авторизирован', changeAccount: 'сменить аккаунт', loginViaSkymp: 'войти через skymp', play: 'Играть', loginOrChangeHint: 'Вы можете войти или поменять аккаунт', connectToServer: 'Подключиться к игровому серверу', updateCaption: 'новинка', updateAvailable: 'ура! вышло обновление', downloadAt: 'спешите скачать на', openSkympNet: 'открыть skymp.net', updateDownloadHint: 'Перейти на страницу скачивания обновления', oops: 'упс', join: 'вступить', back: 'назад', }, // Eldervale Realm — textos de la ventana de autorización (locale activo "en"). "en": { loginViaDiscord: 'inicia sesión con Discord', joinDiscordServer: 'únete al servidor de Discord', banned: 'estás baneado', whatWasThat: '¿qué fue eso?', openingBrowser: 'abriendo el navegador...', loginFirst: 'inicia sesión primero', linkedSuccessfully: 'cuenta vinculada', connecting: 'conectando', technicalIssues: 'problemas técnicos\nintenta de nuevo\no escríbenos en Discord', authorization: 'Eldervale Realm', notAuthorized: 'sin iniciar sesión', changeAccount: 'cambiar cuenta', loginViaSkymp: 'iniciar sesión', play: 'Entrar al mundo', loginOrChangeHint: 'Inicia sesión o cambia de cuenta', connectToServer: 'Conectar al servidor', updateCaption: 'Actualización', updateAvailable: '¡hay una nueva actualización!', downloadAt: 'descárgala en', openSkympNet: 'abrir página de descarga', updateDownloadHint: 'Ir a la página de descarga', oops: 'ups', join: 'unirse', back: 'volver', }, }; var strings = translations['en']; try { var lang = fs__WEBPACK_IMPORTED_MODULE_1__.readFileSync('./Data/Platform/Distribution/locale', 'utf8').trim(); if (lang in translations) { strings = translations[lang]; var src = "window.setLanguage(".concat(lang, ")"); skyrimPlatform__WEBPACK_IMPORTED_MODULE_5__.browser.executeJavaScript(src); } } catch (_a) { // locale file not found or unreadable, default to 'en' } var AuthService = /** @class */ (function (_super) { __extends(AuthService, _super); function AuthService(sp, controller) { var _this = _super.call(this) || this; _this.sp = sp; _this.controller = controller; _this.eldervaleThemeSetter = function () { var id = 'eldervale-auth-theme'; if (document.getElementById(id)) { return; } var style = document.createElement('style'); style.id = id; style.textContent = "\n /* Reset so the cinematic backdrop reaches every edge of the CEF surface. */\n html, body { margin: 0 !important; padding: 0 !important; }\n\n /* Full-screen backdrop covering the vanilla Skyrim main menu behind the\n transparent CEF layer (dragon logo, \"Skyrim Updates\" panel, the\n Continue/New/Load/... list, Bethesda logo, anniversary toast). Opaque\n dark base + soft centered fog glow + heavy vignette toward the edges. */\n body::before {\n content: '';\n position: fixed;\n inset: 0;\n z-index: 0;\n background:\n radial-gradient(ellipse 68% 54% at 50% 40%, rgba(48,43,36,0.55) 0%, rgba(20,18,15,0.88) 46%, rgba(7,6,5,1) 100%),\n linear-gradient(180deg, #0a0908 0%, #0c0a09 55%, #060504 100%);\n }\n /* Slow drifting fog for a cinematic feel \u2014 monochrome, never bright. */\n body::after {\n content: '';\n position: fixed;\n inset: -12%;\n z-index: 0;\n pointer-events: none;\n background:\n radial-gradient(38% 30% at 32% 34%, rgba(125,116,103,0.05), transparent 70%),\n radial-gradient(42% 32% at 70% 58%, rgba(125,116,103,0.045), transparent 72%);\n animation: eldervaleFog 28s ease-in-out infinite alternate;\n }\n @keyframes eldervaleFog {\n from { transform: translate3d(-2%, -1%, 0) scale(1.06); opacity: 0.75; }\n to { transform: translate3d(2%, 1%, 0) scale(1.13); opacity: 1; }\n }\n\n /* Keep the Eldervale frame centered above the backdrop. */\n .login { position: relative !important; z-index: 1 !important; }\n .login-form {\n filter: drop-shadow(0 0 34px rgba(0,0,0,0.75)) drop-shadow(0 0 24px ".concat(theme.glow, ");\n }\n .login-form--content { position: relative !important; }\n\n /* Hero header: large emblem + server name with breathing room. The\n text-indent offsets the trailing letter-spacing so it stays centered. */\n /* Emblem + name are pinned to the top, OUT of normal flow, so they do not\n push the body past the frame. content_main reserves the same height via\n padding-top, and since the front sizes the frame from content_main's\n height, the frame grows tall enough to contain everything. */\n .login-form--content_header {\n position: absolute !important;\n top: 0 !important;\n left: 0 !important;\n right: 0 !important;\n margin: 0 !important;\n padding-top: ").concat(theme.logoHeight + 18, "px !important;\n font-size: 30px !important;\n letter-spacing: 9px !important;\n text-indent: 9px !important;\n text-transform: uppercase !important;\n white-space: nowrap !important;\n text-align: center !important;\n color: ").concat(theme.gold, " !important;\n text-shadow: 0 0 16px ").concat(theme.glow, ", 0 2px 6px rgba(0,0,0,0.85) !important;\n }\n .login-form--content_header::before {\n content: '';\n position: absolute;\n top: 0;\n left: 50%;\n transform: translateX(-50%);\n width: ").concat(theme.logoWidth, "px;\n height: ").concat(theme.logoHeight, "px;\n background: url(\"").concat(logo, "\") center / contain no-repeat;\n filter: drop-shadow(0 0 14px ").concat(theme.glowStrong, ");\n }\n .login-form--content_header::after {\n content: '';\n display: block;\n width: 76%;\n height: 2px;\n margin: 18px auto 2px;\n background: linear-gradient(90deg, transparent, ").concat(theme.goldLine, ", transparent);\n }\n\n /* Centered body. The top padding both reserves room for the pinned header\n (emblem + name + divider) and feeds the frame's auto-height so the box\n ends up tall enough to wrap the whole composition. */\n .login-form--content_main {\n align-items: center !important;\n padding-top: ").concat(theme.logoHeight + 104, "px !important;\n }\n .login-form--content_main .container {\n justify-content: center !important;\n text-align: center !important;\n margin-top: 22px !important;\n }\n\n /* Username + status text: readable warm silver. */\n .skyrimText span {\n color: #d9d3c6 !important;\n letter-spacing: 3px !important;\n font-size: 21px !important;\n text-shadow: 0 1px 4px rgba(0,0,0,0.8) !important;\n }\n\n /* \"change account\" button: legible, aligned. */\n .skymp-input-button_text {\n letter-spacing: 2px !important;\n font-size: 19px !important;\n }\n\n /* \"Play\" button (ornate frame): warm gold, legible. */\n .skymp-button .button-middle { letter-spacing: 3px !important; }\n .skymp-button .button-middle * {\n color: ").concat(theme.goldBright, " !important;\n text-shadow: 0 0 10px ").concat(theme.glowStrong, " !important;\n }\n "); document.head.appendChild(style); }; _this.deniedWidgetSetter = function () { var widget = { type: "form", id: 2, caption: strings.updateCaption, elements: [ { type: "text", text: strings.updateAvailable, tags: [] }, { type: "text", text: strings.downloadAt, tags: [] }, { type: "text", text: "skymp.net", tags: [] }, { type: "button", text: strings.openSkympNet, tags: ["ELEMENT_STYLE_MARGIN_EXTENDED"], click: function () { return window.skyrimPlatform.sendMessage(events.updateRequired); }, hint: strings.updateDownloadHint, } ] }; window.skyrimPlatform.widgets.set([widget]); // Make sure gamemode will not be able to update widgets anymore window.skyrimPlatform.widgets = null; }; _this.loginFailedWidgetSetter = function () { var splitParts = browserState.loginFailedReason.split('\n'); var textElements = splitParts.map(function (part) { return ({ type: "text", text: part, tags: [], }); }); var widget = { type: "form", id: 2, caption: strings.oops, elements: new Array() }; textElements.forEach(function (element) { return widget.elements.push(element); }); if (browserState.loginFailedReason === strings.joinDiscordServer) { widget.elements.push({ type: "button", text: strings.join, tags: ["ELEMENT_STYLE_MARGIN_EXTENDED"], click: function () { return window.skyrimPlatform.sendMessage(events.joinDiscord); }, hint: null }); } widget.elements.push({ type: "button", text: strings.back, tags: ["ELEMENT_STYLE_MARGIN_EXTENDED"], click: function () { return window.skyrimPlatform.sendMessage(events.backToLogin); }, hint: undefined }); window.skyrimPlatform.widgets.set([widget]); }; _this.browsersideWidgetSetter = function () { var loginWidget = { type: "form", id: 1, caption: strings.authorization, elements: [ // { // type: "button", // tags: ["BUTTON_STYLE_GITHUB"], // hint: "get a colored nickname and mention in news", // click: () => window.skyrimPlatform.sendMessage(events.openGithub), // }, // { // type: "button", // tags: ["BUTTON_STYLE_PATREON", "ELEMENT_SAME_LINE", "HINT_STYLE_RIGHT"], // hint: "get a colored nickname and other bonuses for patrons", // click: () => window.skyrimPlatform.sendMessage(events.openPatreon), // }, // { // type: "icon", // text: "username", // tags: ["ICON_STYLE_SKYMP"], // }, // { // type: "icon", // text: "", // tags: ["ICON_STYLE_DISCORD"], // }, { type: "text", text: (authData ? (authData.discordUsername ? "".concat(authData.discordUsername) : "id: ".concat(authData.masterApiId)) : strings.notAuthorized), tags: [ /*"ELEMENT_SAME_LINE", "ELEMENT_STYLE_MARGIN_EXTENDED"*/], }, // { // type: "icon", // text: "discord", // tags: ["ICON_STYLE_DISCORD"], // }, { type: "button", text: authData ? strings.changeAccount : strings.loginViaSkymp, tags: [ /*"ELEMENT_SAME_LINE"*/], click: function () { return window.skyrimPlatform.sendMessage(events.openDiscordOauth); }, hint: strings.loginOrChangeHint, }, { type: "button", text: strings.play, tags: ["BUTTON_STYLE_FRAME", "ELEMENT_STYLE_MARGIN_EXTENDED"], click: function () { return window.skyrimPlatform.sendMessage(events.authAttempt); }, hint: strings.connectToServer, }, { type: "text", text: browserState.comment, tags: [], }, ] }; window.skyrimPlatform.widgets.set([loginWidget]); }; _this._isListenBrowserMessage = false; _this.trigger = { authNeededFired: false, browserWindowLoadedFired: false, get conditionMet() { return this.authNeededFired && this.browserWindowLoadedFired; } }; _this.discordAuthState = crypto__WEBPACK_IMPORTED_MODULE_0__.randomBytes(32).toString('hex'); _this.authDialogOpen = false; _this.loggingStartMoment = 0; _this.authAttemptProgressIndicator = false; _this.authAttemptProgressIndicatorCounter = 0; _this.playerEverSawActualGameplay = false; _this.githubUrl = "https://github.com/skyrim-multiplayer/skymp"; _this.patreonUrl = "https://www.patreon.com/skymp"; _this.pluginAuthDataName = "auth-data-no-load"; _this.controller.emitter.on("authNeeded", function (e) { return _this.onAuthNeeded(e); }); _this.controller.emitter.on("browserWindowLoaded", function (e) { return _this.onBrowserWindowLoaded(e); }); _this.controller.emitter.on("createActorMessage", function (e) { return _this.onCreateActorMessage(e); }); _this.controller.emitter.on("connectionAccepted", function () { return _this.handleConnectionAccepted(); }); _this.controller.emitter.on("connectionDenied", function (e) { return _this.handleConnectionDenied(e); }); _this.controller.emitter.on("customPacketMessage", function (e) { return _this.onCustomPacketMessage(e); }); _this.controller.on("browserMessage", function (e) { return _this.onBrowserMessage(e); }); _this.controller.on("tick", function () { return _this.onTick(); }); _this.controller.once("update", function () { return _this.onceUpdate(); }); return _this; } AuthService.prototype.onAuthNeeded = function (e) { (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logTrace)(this, "Received authNeeded event"); var settingsGameData = this.sp.settings["skymp5-client"]["gameData"]; var isOfflineMode = Number.isInteger(settingsGameData === null || settingsGameData === void 0 ? void 0 : settingsGameData.profileId); if (isOfflineMode) { (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logTrace)(this, "Offline mode detected in settings, emitting auth event with authGameData.local"); this.controller.emitter.emit("authAttempt", { authGameData: { local: { profileId: settingsGameData.profileId } } }); } else { (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logTrace)(this, "No offline mode detectted in settings, regular auth needed"); this.setListenBrowserMessage(true, 'authNeeded event received'); this.trigger.authNeededFired = true; if (this.trigger.conditionMet) { this.onBrowserWindowLoadedAndOnlineAuthNeeded(); } } }; AuthService.prototype.onBrowserWindowLoaded = function (e) { (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logTrace)(this, "Received browserWindowLoaded event"); this.trigger.browserWindowLoadedFired = true; if (this.trigger.conditionMet) { this.onBrowserWindowLoadedAndOnlineAuthNeeded(); } }; AuthService.prototype.onCreateActorMessage = function (e) { if (e.message.isMe) { this.removeEldervaleTheme(); if (this.authDialogOpen) { (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logTrace)(this, "Received createActorMessage for self, resetting widgets"); this.sp.browser.executeJavaScript('window.skyrimPlatform.widgets.set([]);'); this.authDialogOpen = false; } else { (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logTrace)(this, "Received createActorMessage for self, but auth dialog was not open so not resetting widgets"); } } this.loggingStartMoment = 0; this.authAttemptProgressIndicator = false; }; AuthService.prototype.onCustomPacketMessage = function (event) { var msg = event.message; var msgContent = {}; try { msgContent = JSON.parse(msg.contentJsonDump); } catch (e) { if (e instanceof SyntaxError) { (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logError)(this, "onCustomPacketMessage failed to parse JSON", e.message, "json:", msg.contentJsonDump); return; } else { throw e; } } switch (msgContent["customPacketType"]) { // case 'loginRequired': // logTrace(this, 'loginRequired received'); // this.loginWithSkympIoCredentials(); // break; case 'loginFailedNotLoggedViaDiscord': this.authAttemptProgressIndicator = false; this.controller.lookupListener(_networkingService__WEBPACK_IMPORTED_MODULE_8__.NetworkingService).close(); (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logTrace)(this, 'loginFailedNotLoggedViaDiscord received'); browserState.loginFailedReason = strings.loginViaDiscord; browserState.comment = ''; this.setListenBrowserMessage(true, 'loginFailedNotLoggedViaDiscord received'); this.loggingStartMoment = 0; this.sp.browser.executeJavaScript(new _lib_functionInfo__WEBPACK_IMPORTED_MODULE_3__.FunctionInfo(this.loginFailedWidgetSetter).getText({ events: events, browserState: browserState, authData: authData, strings: strings })); break; case 'loginFailedNotInTheDiscordServer': this.authAttemptProgressIndicator = false; this.controller.lookupListener(_networkingService__WEBPACK_IMPORTED_MODULE_8__.NetworkingService).close(); (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logTrace)(this, 'loginFailedNotInTheDiscordServer received'); browserState.loginFailedReason = strings.joinDiscordServer; browserState.comment = ''; this.setListenBrowserMessage(true, 'loginFailedNotInTheDiscordServer received'); this.loggingStartMoment = 0; this.sp.browser.executeJavaScript(new _lib_functionInfo__WEBPACK_IMPORTED_MODULE_3__.FunctionInfo(this.loginFailedWidgetSetter).getText({ events: events, browserState: browserState, authData: authData, strings: strings })); break; case 'loginFailedBanned': this.authAttemptProgressIndicator = false; this.controller.lookupListener(_networkingService__WEBPACK_IMPORTED_MODULE_8__.NetworkingService).close(); (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logTrace)(this, 'loginFailedBanned received'); browserState.loginFailedReason = strings.banned; browserState.comment = ''; this.setListenBrowserMessage(true, 'loginFailedBanned received'); this.loggingStartMoment = 0; this.sp.browser.executeJavaScript(new _lib_functionInfo__WEBPACK_IMPORTED_MODULE_3__.FunctionInfo(this.loginFailedWidgetSetter).getText({ events: events, browserState: browserState, authData: authData, strings: strings })); break; case 'loginFailedIpMismatch': this.authAttemptProgressIndicator = false; this.controller.lookupListener(_networkingService__WEBPACK_IMPORTED_MODULE_8__.NetworkingService).close(); (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logTrace)(this, 'loginFailedIpMismatch received'); browserState.loginFailedReason = strings.whatWasThat; browserState.comment = ''; this.setListenBrowserMessage(true, 'loginFailedIpMismatch received'); this.loggingStartMoment = 0; this.sp.browser.executeJavaScript(new _lib_functionInfo__WEBPACK_IMPORTED_MODULE_3__.FunctionInfo(this.loginFailedWidgetSetter).getText({ events: events, browserState: browserState, authData: authData, strings: strings })); break; } }; AuthService.prototype.onBrowserWindowLoadedAndOnlineAuthNeeded = function () { var _this = this; if (!this.isListenBrowserMessage) { (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logError)(this, "isListenBrowserMessage was false for some reason, aborting auth"); return; } (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logTrace)(this, "Showing widgets and starting loop"); authData = this.readAuthDataFromDisk(); this.refreshWidgets(); this.sp.browser.setVisible(true); this.sp.browser.setFocused(true); var timersService = this.controller.lookupListener(_timersService__WEBPACK_IMPORTED_MODULE_6__.TimersService); (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logTrace)(this, "Calling setTimeout for testing"); try { timersService.setTimeout(function () { (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logTrace)(_this, "Test timeout fired"); }, 1); } catch (e) { (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logError)(this, "Failed to call setTimeout"); } }; AuthService.prototype.onBrowserMessage = function (e) { if (!this.isListenBrowserMessage) { (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logTrace)(this, "onBrowserMessage: isListenBrowserMessage was false, ignoring message", JSON.stringify(e.arguments)); return; } var settingsService = this.controller.lookupListener(_settingsService__WEBPACK_IMPORTED_MODULE_10__.SettingsService); (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logTrace)(this, "onBrowserMessage:", JSON.stringify(e.arguments)); var eventKey = e.arguments[0]; switch (eventKey) { case events.openDiscordOauth: browserState.comment = strings.openingBrowser; this.refreshWidgets(); this.sp.win32.loadUrl("".concat(settingsService.getMasterUrl(), "/api/users/login-discord?state=").concat(this.discordAuthState)); // Launch checkLoginState loop this.checkLoginState(); break; case events.authAttempt: if (authData === null) { browserState.comment = strings.loginFirst; this.refreshWidgets(); break; } this.writeAuthDataToDisk(authData); this.controller.emitter.emit("authAttempt", { authGameData: { remote: authData } }); this.authAttemptProgressIndicator = true; break; case events.clearAuthData: // Doesn't seem to be used this.writeAuthDataToDisk(null); break; case events.openGithub: this.sp.win32.loadUrl(this.githubUrl); break; case events.openPatreon: this.sp.win32.loadUrl(this.patreonUrl); break; case events.updateRequired: this.sp.win32.loadUrl("https://skymp.net/UpdInstall"); break; case events.backToLogin: this.sp.browser.executeJavaScript(new _lib_functionInfo__WEBPACK_IMPORTED_MODULE_3__.FunctionInfo(this.browsersideWidgetSetter).getText({ events: events, browserState: browserState, authData: authData, strings: strings })); break; case events.joinDiscord: this.sp.win32.loadUrl("https://discord.gg/9KhSZ6zjGT"); break; default: break; } }; AuthService.prototype.createPlaySession = function (token, callback) { var settingsService = this.controller.lookupListener(_settingsService__WEBPACK_IMPORTED_MODULE_10__.SettingsService); var client = new this.sp.HttpClient(settingsService.getMasterUrl()); var route = "/api/users/me/play/".concat(settingsService.getServerMasterKey()); (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logTrace)(this, "Creating play session ".concat(route)); client.post(route, { body: '{}', contentType: 'application/json', headers: { 'authorization': token, }, // @ts-ignore }, function (res) { if (res.status != 200) { callback('', 'status code ' + res.status); } else { // TODO: handle JSON.parse failure? callback(JSON.parse(res.body).session, ''); } }); }; AuthService.prototype.checkLoginState = function () { var _this = this; if (!this.isListenBrowserMessage) { (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logTrace)(this, "checkLoginState: isListenBrowserMessage was false, aborting check"); return; } var settingsService = this.controller.lookupListener(_settingsService__WEBPACK_IMPORTED_MODULE_10__.SettingsService); var timersService = this.controller.lookupListener(_timersService__WEBPACK_IMPORTED_MODULE_6__.TimersService); // Social engineering protection, don't show the full state var halfDiscordAuthState = this.discordAuthState.slice(0, 16); (0,_logging__WEBPACK_IMPORTED_MODULE_7__.logTrace)(this, "Checking login state", halfDiscordAuthState, '...'); new this.sp.HttpClient(settingsService.getMasterUrl()) .get("/api/users/login-discord/status?state=" + this.discordAuthState, undefined, // @ts-ignore function (response) { switch (response.status) { case 200: var _a = JSON.parse(response.body), token = _a.token, masterApiId_1 = _a.masterApiId, discordUsername_1 = _a.discordUsername, discordDiscriminator_1 = _a.discordDiscriminator, discordAvatar_1 = _a.discordAvatar; browserState.failCount = 0; _this.createPlaySession(token, function (playSession, error) { if (error) { browserState.failCount = 0; browserState.comment = (error); timersService.setTimeout(function () { return _this.checkLoginState(); }, Math.floor((1.5 + Math.random() * 2) * 1000)); _this.refreshWidgets(); return; } authData = { session: playSession, masterApiId: masterApiId_1, discordUsername: discordUsername_1, discordDiscriminator: discordDiscriminator_1, discordAvatar: discordAvatar_1, }; browserState.comment = strings.linkedSuccessfully; _this.refreshWidgets(); }); break; case 401: // Unauthorized browserState.failCount = 0; browserState.comment = ''; //(`Still waiting...`); timersService.setTimeout(function () { return _this.checkLoginState(); }, Math.floor((1.5 + Math.random() * 2) * 1000)); break; case 403: // Forbidden case 404: // Not found browserState.failCount = 9000; browserState.comment = ("Fail: ".concat(response.body)); break; default: ++browserState.failCount; browserState.comment = "Server returned ".concat(response.status.toString() || "???", " \"").concat(response.body || response.error, "\""); timersService.setTimeout(function () { return _this.checkLoginState(); }, Math.floor((1.5 + Math.random() * 2) * 1000)); } }); }; ; AuthService.prototype.refreshWidgets = function () { this.applyEldervaleTheme(); this.sp.browser.executeJavaScript(new _lib_functionInfo__WEBPACK_IMPORTED_MODULE_3__.FunctionInfo(this.browsersideWidgetSetter).getText({ events: events, browserState: browserState, authData: authData, strings: strings })); this.authDialogOpen = true; }; ; // Injects the Eldervale Realm look (silver emblem + warm gold accents) as a // persistent