@ozdao/martyrs 0.2.498 → 0.2.500
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/dist/martyrs/src/components/Block/Block.vue.cjs +1 -1
- package/dist/martyrs/src/components/Block/Block.vue.js +1 -1
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.cjs → Dropdown.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.js.map → Dropdown.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.js → Dropdown.vue.js} +2 -2
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue.js.map +1 -0
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +1 -1
- package/dist/martyrs/src/components/Tooltip/{Tooltip.vue2.cjs → Tooltip.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Tooltip/{Tooltip.vue2.js.map → Tooltip.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Tooltip/{Tooltip.vue2.js → Tooltip.vue.js} +2 -2
- package/dist/martyrs/src/components/Tooltip/Tooltip.vue.js.map +1 -0
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.js +2 -2
- package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +1 -1
- package/dist/martyrs/src/modules/music/router/music.cjs +2 -2
- package/dist/martyrs/src/modules/music/router/music.js +2 -2
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +2 -2
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +2 -2
- package/package.json +1 -1
- package/src/modules/globals/views/classes/globals.websocket.js +3 -3
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Tooltip/Tooltip.vue2.cjs.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const vue = require("vue");
|
|
4
|
-
const Tooltip = require("../Tooltip/Tooltip.
|
|
4
|
+
const Tooltip = require("../Tooltip/Tooltip.vue.cjs");
|
|
5
5
|
const _hoisted_1 = { class: "bg-light pd-medium radius-medium" };
|
|
6
6
|
const _hoisted_2 = {
|
|
7
7
|
key: 0,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useSlots, createElementBlock, openBlock, createCommentVNode, renderSlot, createBlock, toDisplayString, Fragment, renderList, normalizeClass, withCtx, createElementVNode, Comment } from "vue";
|
|
2
|
-
import _sfc_main$1 from "../Tooltip/Tooltip.
|
|
2
|
+
import _sfc_main$1 from "../Tooltip/Tooltip.vue.js";
|
|
3
3
|
const _hoisted_1 = { class: "bg-light pd-medium radius-medium" };
|
|
4
4
|
const _hoisted_2 = {
|
|
5
5
|
key: 0,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const vue = require("vue");
|
|
4
4
|
const clickOutside = require("../FieldPhone/click-outside.cjs");
|
|
5
|
-
;/* empty css
|
|
5
|
+
;/* empty css */
|
|
6
6
|
const _hoisted_1 = {
|
|
7
7
|
key: 0,
|
|
8
8
|
class: "w-100 h-100 flex-center flex"
|
|
@@ -61,4 +61,4 @@ const _sfc_main = {
|
|
|
61
61
|
}
|
|
62
62
|
};
|
|
63
63
|
exports.default = _sfc_main;
|
|
64
|
-
//# sourceMappingURL=Dropdown.
|
|
64
|
+
//# sourceMappingURL=Dropdown.vue.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropdown.
|
|
1
|
+
{"version":3,"file":"Dropdown.vue.cjs","sources":["../../../../../src/components/Dropdown/Dropdown.vue"],"sourcesContent":["<template>\n <div class=\"dropdown pos-relative\" v-click-outside=\"clickedOutside\" @click.stop=\"isOpen = !isOpen\">\n <div v-if=\"isComponentLabel\" class=\"w-100 h-100 flex-center flex\">\n <component :is=\"label.component\" v-bind=\"label.props\" :class=\"label.class\"></component>\n </div>\n <div v-else>\n {{ label }}\n </div>\n <transition name=\"TransitionTranslateY\" mode=\"out-in\">\n <div \n v-show=\"isOpen\" \n :style=\"{ left: align === 'left' ? '0' : 'auto', right: align === 'right' ? '0' : 'auto' }\" \n class=\"dropdown-content radius-big\" \n >\n <slot></slot>\n </div>\n </transition>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed } from 'vue';\nimport clickOutside from '../FieldPhone/click-outside.js';\n\nlet vClickOutside = clickOutside\n\nconst props = defineProps({\n label: {\n type: [String, Object],\n default: 'Open'\n },\n align: {\n type: String,\n default: 'left'\n }\n})\n\nconst isOpen = ref(false);\nconst isComponentLabel = computed(() => typeof props.label === 'object');\n\nfunction clickedOutside () {\n isOpen.value = false\n}\n</script>\n\n<style >\n.dropdown-content {\n display: block;\n position: absolute;\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n z-index: 1;\n}\n\n/*.dropdown:hover .dropdown-content {\n display: block;\n}*/\n</style>\n"],"names":["clickOutside","ref","computed"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAwBA,QAAI,gBAAgBA,aAAAA;AAEpB,UAAM,QAAQ;AAWd,UAAM,SAASC,IAAAA,IAAI,KAAK;AACxB,UAAM,mBAAmBC,IAAAA,SAAS,MAAM,OAAO,MAAM,UAAU,QAAQ;AAEvE,aAAS,iBAAkB;AACzB,aAAO,QAAQ;AAAA,IACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ref, computed, withDirectives, createElementBlock, openBlock, withModifiers, createVNode, createBlock, resolveDynamicComponent, mergeProps, toDisplayString, Transition, withCtx, createElementVNode, normalizeStyle, renderSlot, vShow, unref } from "vue";
|
|
2
2
|
import clickOutside from "../FieldPhone/click-outside.js";
|
|
3
|
-
/* empty css
|
|
3
|
+
/* empty css */
|
|
4
4
|
const _hoisted_1 = {
|
|
5
5
|
key: 0,
|
|
6
6
|
class: "w-100 h-100 flex-center flex"
|
|
@@ -61,4 +61,4 @@ const _sfc_main = {
|
|
|
61
61
|
export {
|
|
62
62
|
_sfc_main as default
|
|
63
63
|
};
|
|
64
|
-
//# sourceMappingURL=Dropdown.
|
|
64
|
+
//# sourceMappingURL=Dropdown.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dropdown.vue.js","sources":["../../../../../src/components/Dropdown/Dropdown.vue"],"sourcesContent":["<template>\n <div class=\"dropdown pos-relative\" v-click-outside=\"clickedOutside\" @click.stop=\"isOpen = !isOpen\">\n <div v-if=\"isComponentLabel\" class=\"w-100 h-100 flex-center flex\">\n <component :is=\"label.component\" v-bind=\"label.props\" :class=\"label.class\"></component>\n </div>\n <div v-else>\n {{ label }}\n </div>\n <transition name=\"TransitionTranslateY\" mode=\"out-in\">\n <div \n v-show=\"isOpen\" \n :style=\"{ left: align === 'left' ? '0' : 'auto', right: align === 'right' ? '0' : 'auto' }\" \n class=\"dropdown-content radius-big\" \n >\n <slot></slot>\n </div>\n </transition>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed } from 'vue';\nimport clickOutside from '../FieldPhone/click-outside.js';\n\nlet vClickOutside = clickOutside\n\nconst props = defineProps({\n label: {\n type: [String, Object],\n default: 'Open'\n },\n align: {\n type: String,\n default: 'left'\n }\n})\n\nconst isOpen = ref(false);\nconst isComponentLabel = computed(() => typeof props.label === 'object');\n\nfunction clickedOutside () {\n isOpen.value = false\n}\n</script>\n\n<style >\n.dropdown-content {\n display: block;\n position: absolute;\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n z-index: 1;\n}\n\n/*.dropdown:hover .dropdown-content {\n display: block;\n}*/\n</style>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAwBA,QAAI,gBAAgB;AAEpB,UAAM,QAAQ;AAWd,UAAM,SAAS,IAAI,KAAK;AACxB,UAAM,mBAAmB,SAAS,MAAM,OAAO,MAAM,UAAU,QAAQ;AAEvE,aAAS,iBAAkB;AACzB,aAAO,QAAQ;AAAA,IACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -4,7 +4,7 @@ const vue = require("vue");
|
|
|
4
4
|
const Loader = require("../Loader/Loader.vue2.cjs");
|
|
5
5
|
const Skeleton = require("../Skeleton/Skeleton.vue2.cjs");
|
|
6
6
|
const EmptyState = require("../EmptyState/EmptyState.vue.cjs");
|
|
7
|
-
const Dropdown = require("../Dropdown/Dropdown.
|
|
7
|
+
const Dropdown = require("../Dropdown/Dropdown.vue.cjs");
|
|
8
8
|
const Calendar = require("../Calendar/Calendar.vue2.cjs");
|
|
9
9
|
const BottomSheet = require("../BottomSheet/BottomSheet.vue.cjs");
|
|
10
10
|
const BlockSearch = require("../../modules/globals/views/components/blocks/BlockSearch.vue.cjs");
|
|
@@ -2,7 +2,7 @@ import { mergeModels, useModel, ref, computed, watch, onMounted, onUnmounted, cr
|
|
|
2
2
|
import Loader from "../Loader/Loader.vue2.js";
|
|
3
3
|
import Skeleton from "../Skeleton/Skeleton.vue2.js";
|
|
4
4
|
import _sfc_main$9 from "../EmptyState/EmptyState.vue.js";
|
|
5
|
-
import _sfc_main$2 from "../Dropdown/Dropdown.
|
|
5
|
+
import _sfc_main$2 from "../Dropdown/Dropdown.vue.js";
|
|
6
6
|
import Calendar from "../Calendar/Calendar.vue2.js";
|
|
7
7
|
import _sfc_main$5 from "../BottomSheet/BottomSheet.vue.js";
|
|
8
8
|
import _sfc_main$1 from "../../modules/globals/views/components/blocks/BlockSearch.vue.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const vue = require("vue");
|
|
4
|
-
;/* empty css
|
|
4
|
+
;/* empty css */
|
|
5
5
|
const _sfc_main = {
|
|
6
6
|
__name: "Tooltip",
|
|
7
7
|
props: {
|
|
@@ -51,4 +51,4 @@ const _sfc_main = {
|
|
|
51
51
|
}
|
|
52
52
|
};
|
|
53
53
|
exports.default = _sfc_main;
|
|
54
|
-
//# sourceMappingURL=Tooltip.
|
|
54
|
+
//# sourceMappingURL=Tooltip.vue.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.
|
|
1
|
+
{"version":3,"file":"Tooltip.vue.cjs","sources":["../../../../../src/components/Tooltip/Tooltip.vue"],"sourcesContent":["<template>\n <div class=\"cursor-pointer tooltip-container\" @mouseover=\"showTooltip\" @mouseleave=\"hideTooltip\">\n <slot></slot>\n <div class=\"tooltip-content\" :style=\"tooltipStyle\">\n <span>{{ text }}</span>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, reactive } from 'vue';\n\nconst props = defineProps({\n text: {\n type: String,\n required: true\n }\n});\n\nconst visible = ref(false);\n\nconst tooltipStyle = reactive({\n position: 'absolute',\n width: 'max-content',\n zIndex: 1000,\n background: '#333',\n color: '#fff',\n padding: '5px',\n borderRadius: '3px',\n fontSize: '14px',\n display: 'none',\n});\n\nfunction showTooltip(event) {\n visible.value = true;\n tooltipStyle.left = `${(event.clientX / 100) + 10 }px`;\n tooltipStyle.top = `${(event.clientY / 100) + 10 }px`;\n tooltipStyle.display = 'block';\n}\n\nfunction hideTooltip() {\n visible.value = false;\n tooltipStyle.display = 'none';\n}\n</script>\n\n<style >\n.tooltip-container {\n position: relative;\n display: inline-block;\n}\n\n.tooltip-content {\n pointer-events: none;\n}\n</style>"],"names":["ref","reactive"],"mappings":";;;;;;;;;;;;;AAmBA,UAAM,UAAUA,IAAAA,IAAI,KAAK;AAEzB,UAAM,eAAeC,IAAAA,SAAS;AAAA,MAC5B,UAAU;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,SAAS;AAAA,MACT,cAAc;AAAA,MACd,UAAU;AAAA,MACV,SAAS;AAAA,IACX,CAAC;AAED,aAAS,YAAY,OAAO;AAC1B,cAAQ,QAAQ;AAChB,mBAAa,OAAO,GAAI,MAAM,UAAU,MAAO,EAAE;AACjD,mBAAa,MAAM,GAAI,MAAM,UAAU,MAAO,EAAE;AAChD,mBAAa,UAAU;AAAA,IACzB;AAEA,aAAS,cAAc;AACrB,cAAQ,QAAQ;AAChB,mBAAa,UAAU;AAAA,IACzB;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ref, reactive, createElementBlock, openBlock, renderSlot, createElementVNode, normalizeStyle, toDisplayString } from "vue";
|
|
2
|
-
/* empty css
|
|
2
|
+
/* empty css */
|
|
3
3
|
const _sfc_main = {
|
|
4
4
|
__name: "Tooltip",
|
|
5
5
|
props: {
|
|
@@ -51,4 +51,4 @@ const _sfc_main = {
|
|
|
51
51
|
export {
|
|
52
52
|
_sfc_main as default
|
|
53
53
|
};
|
|
54
|
-
//# sourceMappingURL=Tooltip.
|
|
54
|
+
//# sourceMappingURL=Tooltip.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tooltip.vue.js","sources":["../../../../../src/components/Tooltip/Tooltip.vue"],"sourcesContent":["<template>\n <div class=\"cursor-pointer tooltip-container\" @mouseover=\"showTooltip\" @mouseleave=\"hideTooltip\">\n <slot></slot>\n <div class=\"tooltip-content\" :style=\"tooltipStyle\">\n <span>{{ text }}</span>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, reactive } from 'vue';\n\nconst props = defineProps({\n text: {\n type: String,\n required: true\n }\n});\n\nconst visible = ref(false);\n\nconst tooltipStyle = reactive({\n position: 'absolute',\n width: 'max-content',\n zIndex: 1000,\n background: '#333',\n color: '#fff',\n padding: '5px',\n borderRadius: '3px',\n fontSize: '14px',\n display: 'none',\n});\n\nfunction showTooltip(event) {\n visible.value = true;\n tooltipStyle.left = `${(event.clientX / 100) + 10 }px`;\n tooltipStyle.top = `${(event.clientY / 100) + 10 }px`;\n tooltipStyle.display = 'block';\n}\n\nfunction hideTooltip() {\n visible.value = false;\n tooltipStyle.display = 'none';\n}\n</script>\n\n<style >\n.tooltip-container {\n position: relative;\n display: inline-block;\n}\n\n.tooltip-content {\n pointer-events: none;\n}\n</style>"],"names":[],"mappings":";;;;;;;;;;;AAmBA,UAAM,UAAU,IAAI,KAAK;AAEzB,UAAM,eAAe,SAAS;AAAA,MAC5B,UAAU;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,SAAS;AAAA,MACT,cAAc;AAAA,MACd,UAAU;AAAA,MACV,SAAS;AAAA,IACX,CAAC;AAED,aAAS,YAAY,OAAO;AAC1B,cAAQ,QAAQ;AAChB,mBAAa,OAAO,GAAI,MAAM,UAAU,MAAO,EAAE;AACjD,mBAAa,MAAM,GAAI,MAAM,UAAU,MAAO,EAAE;AAChD,mBAAa,UAAU;AAAA,IACzB;AAEA,aAAS,cAAc;AACrB,cAAQ,QAAQ;AAChB,mBAAa,UAAU;AAAA,IACzB;;;;;;;;;;;;;;;;;;"}
|
|
@@ -4,7 +4,7 @@ const vue = require("vue");
|
|
|
4
4
|
;/* empty css */
|
|
5
5
|
;/* empty css */
|
|
6
6
|
;/* empty css */
|
|
7
|
-
const Dropdown = require("../../../../../components/Dropdown/Dropdown.
|
|
7
|
+
const Dropdown = require("../../../../../components/Dropdown/Dropdown.vue.cjs");
|
|
8
8
|
const Menu = require("../../../../../components/Menu/Menu.vue2.cjs");
|
|
9
9
|
const MenuItem = require("../../../../../components/Menu/MenuItem.vue.cjs");
|
|
10
10
|
const ButtonToggleMembership = require("../../../../organizations/components/elements/ButtonToggleMembership.vue.cjs");
|
|
@@ -2,7 +2,7 @@ import { ref, inject, computed, onMounted, resolveComponent, createElementBlock,
|
|
|
2
2
|
/* empty css */
|
|
3
3
|
/* empty css */
|
|
4
4
|
/* empty css */
|
|
5
|
-
import _sfc_main$5 from "../../../../../components/Dropdown/Dropdown.
|
|
5
|
+
import _sfc_main$5 from "../../../../../components/Dropdown/Dropdown.vue.js";
|
|
6
6
|
import _sfc_main$a from "../../../../../components/Menu/Menu.vue2.js";
|
|
7
7
|
import _sfc_main$b from "../../../../../components/Menu/MenuItem.vue.js";
|
|
8
8
|
import _sfc_main$7 from "../../../../organizations/components/elements/ButtonToggleMembership.vue.js";
|
|
@@ -13,7 +13,7 @@ const vueRouter = require("vue-router");
|
|
|
13
13
|
;/* empty css */
|
|
14
14
|
const SkeletonEvent = require("../../../icons/skeletons/SkeletonEvent.vue.cjs");
|
|
15
15
|
;/* empty css */
|
|
16
|
-
;/* empty css
|
|
16
|
+
;/* empty css */
|
|
17
17
|
;/* empty css */
|
|
18
18
|
;/* empty css */
|
|
19
19
|
;/* empty css */
|
|
@@ -21,8 +21,8 @@ class GlobalWebSocket {
|
|
|
21
21
|
initialize(options = {}) {
|
|
22
22
|
console.log("WSS initialize options:", options);
|
|
23
23
|
console.log("options.wsUrl:", options.wsUrl);
|
|
24
|
-
console.log("window.location.protocol:", window.location.protocol);
|
|
25
|
-
console.log("window.location.host:", window.location.host);
|
|
24
|
+
if (typeof window !== "undefined") console.log("window.location.protocol:", window.location.protocol);
|
|
25
|
+
if (typeof window !== "undefined") console.log("window.location.host:", window.location.host);
|
|
26
26
|
this.maxReconnectAttempts = options.maxReconnectAttempts || this.maxReconnectAttempts;
|
|
27
27
|
this.reconnectDelay = options.reconnectDelay || this.reconnectDelay;
|
|
28
28
|
this.baseUrl = options.wsUrl || this._getDefaultWsUrl();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globals.websocket.cjs","sources":["../../../../../../../src/modules/globals/views/classes/globals.websocket.js"],"sourcesContent":["class GlobalWebSocket {\n constructor() {\n this.socket = null;\n this.isConnected = false;\n this.reconnectAttempts = 0;\n this.maxReconnectAttempts = 5;\n this.reconnectDelay = 3000;\n this.baseUrl = null;\n this.pingInterval = null;\n this.pingIntervalTime = 30000;\n this.listeners = {};\n this.userId = null;\n this.connectPromise = null;\n this.subscribedModules = new Set();\n\n // RPC-специфичные свойства\n this.rpcCallbacks = new Map();\n this.rpcTimeout = 30000; // 30 секунд таймаут по умолчанию\n this.rpcIdCounter = 0;\n }\n\n initialize(options = {}) {\n console.log('WSS initialize options:', options);\n console.log('options.wsUrl:', options.wsUrl);\n console.log('window.location.protocol:', window.location.protocol);\n console.log('window.location.host:', window.location.host);\n \n this.maxReconnectAttempts = options.maxReconnectAttempts || this.maxReconnectAttempts;\n this.reconnectDelay = options.reconnectDelay || this.reconnectDelay;\n this.baseUrl = options.wsUrl || this._getDefaultWsUrl();\n this.pingIntervalTime = options.pingInterval || this.pingIntervalTime;\n this.rpcTimeout = options.rpcTimeout || this.rpcTimeout;\n }\n\n _getDefaultWsUrl() {\n if (typeof window === 'undefined') return '/api/ws';\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const host = window.location.hostname;\n return `${protocol}//${host}/api/ws`;\n }\n\n connect(userId) {\n if (typeof window === 'undefined') return Promise.resolve(false);\n this.userId = userId;\n\n // Проверяем существующее соединение\n if (this.isConnected && this.socket?.readyState === WebSocket.OPEN) {\n return Promise.resolve(this.socket);\n }\n\n // Предотвращаем создание множества промисов при параллельных вызовах\n if (this.connectPromise) {\n return this.connectPromise;\n }\n\n this.connectPromise = new Promise((resolve, reject) => {\n this.disconnect();\n\n // Используем baseUrl без параметров, так как аутентификация через cookie\n this.socket = new WebSocket(this.baseUrl);\n\n this.socket.onopen = () => {\n this._handleOpen();\n resolve(this.socket);\n };\n\n this.socket.onmessage = this._handleMessage.bind(this);\n this.socket.onerror = err => {\n this._handleError(err);\n reject(err);\n };\n this.socket.onclose = this._handleClose.bind(this);\n\n setTimeout(() => {\n if (!this.isConnected) {\n reject(new Error('WebSocket connection timeout'));\n }\n }, 10000);\n }).finally(() => {\n this.connectPromise = null;\n });\n\n return this.connectPromise;\n }\n\n disconnect() {\n if (typeof window === 'undefined') return;\n\n if (this.socket) {\n this.socket.onopen = null;\n this.socket.onmessage = null;\n this.socket.onerror = null;\n this.socket.onclose = null;\n if (this.socket.readyState === WebSocket.OPEN || this.socket.readyState === WebSocket.CONNECTING) {\n this.socket.close();\n }\n this.socket = null;\n }\n\n if (this.pingInterval) {\n clearInterval(this.pingInterval);\n this.pingInterval = null;\n }\n\n // Отменяем все ожидающие RPC вызовы\n for (const [id, { reject }] of this.rpcCallbacks.entries()) {\n reject(new Error('WebSocket disconnected'));\n this.rpcCallbacks.delete(id);\n }\n\n this.isConnected = false;\n this.userId = null;\n this.subscribedModules.clear(); // Очищаем подписки при отключении\n }\n\n async send(data) {\n if (!this.socket || this.socket.readyState !== WebSocket.OPEN) {\n console.error('Cannot send message: WebSocket is not connected');\n return false;\n }\n\n try {\n const msg = typeof data === 'string' ? data : JSON.stringify(data);\n this.socket.send(msg);\n return true;\n } catch (err) {\n console.error('Error sending message:', err);\n return false;\n }\n }\n\n /**\n * Выполняет RPC вызов на сервере\n * @param {string} module - Имя модуля\n * @param {string} method - Имя метода\n * @param {object} params - Параметры метода\n * @param {object} [options] - Опции вызова\n * @param {number} [options.timeout] - Таймаут в миллисекундах\n * @returns {Promise<any>} - Результат вызова\n */\n rpc(module, method, params = {}, options = {}) {\n if (!this.isConnected || this.socket?.readyState !== WebSocket.OPEN) {\n return Promise.reject(new Error('WebSocket is not connected'));\n }\n\n if (!module || !method) {\n return Promise.reject(new Error('Module and method are required'));\n }\n\n // Генерируем уникальный ID для вызова\n const id = `${++this.rpcIdCounter}`;\n const timeout = options.timeout || this.rpcTimeout;\n\n return new Promise((resolve, reject) => {\n // Записываем информацию о вызове для последующей обработки ответа\n this.rpcCallbacks.set(id, {\n resolve,\n reject,\n timeoutId: setTimeout(() => {\n if (this.rpcCallbacks.has(id)) {\n this.rpcCallbacks.delete(id);\n reject(new Error(`RPC call to ${module}.${method} timed out after ${timeout}ms`));\n }\n }, timeout),\n });\n\n // Отправляем RPC запрос\n this.send({\n type: 'rpc',\n module,\n method,\n params,\n id,\n }).catch(err => {\n if (this.rpcCallbacks.has(id)) {\n clearTimeout(this.rpcCallbacks.get(id).timeoutId);\n this.rpcCallbacks.delete(id);\n reject(err);\n }\n });\n });\n }\n\n addEventListener(eventType, callback, options = {}) {\n const listenerId = `${options.module || 'global'}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n if (!this.listeners[eventType]) this.listeners[eventType] = {};\n this.listeners[eventType][listenerId] = callback;\n return listenerId;\n }\n\n removeEventListener(eventType, listenerId) {\n if (this.listeners[eventType]?.[listenerId]) {\n delete this.listeners[eventType][listenerId];\n }\n }\n\n removeModuleListeners(moduleName) {\n Object.keys(this.listeners).forEach(eventType => {\n Object.keys(this.listeners[eventType]).forEach(listenerId => {\n if (listenerId.startsWith(`${moduleName}_`)) {\n delete this.listeners[eventType][listenerId];\n }\n });\n });\n }\n\n async subscribeModule(moduleName) {\n if (!moduleName || this.subscribedModules.has(moduleName)) return;\n const success = await this.send({ type: 'subscribe', module: moduleName });\n if (success) {\n this.subscribedModules.add(moduleName);\n }\n }\n\n async unsubscribeModule(moduleName) {\n if (!moduleName || !this.subscribedModules.has(moduleName)) return;\n const success = await this.send({ type: 'unsubscribe', module: moduleName });\n if (success) {\n this.subscribedModules.delete(moduleName);\n }\n }\n\n _resubscribeAllModules() {\n for (const moduleName of this.subscribedModules) {\n this.send({ type: 'subscribe', module: moduleName });\n }\n }\n\n _handleOpen() {\n this.isConnected = true;\n this.reconnectAttempts = 0;\n\n this.pingInterval = setInterval(() => {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'ping' }));\n }\n }, this.pingIntervalTime);\n\n this._resubscribeAllModules();\n this._notifyListeners('open', { isConnected: true });\n }\n\n _handleMessage(event) {\n // Проверка на типы сообщений - пропускаем бинарные сообщения\n if (typeof event.data !== 'string') {\n console.warn('Received binary message, but only JSON is supported');\n return;\n }\n\n try {\n const data = JSON.parse(event.data);\n\n // Обрабатываем ответы на RPC вызовы\n if (data.type === 'rpc_response' && data.id && this.rpcCallbacks.has(data.id)) {\n const { resolve, reject, timeoutId } = this.rpcCallbacks.get(data.id);\n clearTimeout(timeoutId);\n this.rpcCallbacks.delete(data.id);\n\n if (data.error) {\n reject(Object.assign(new Error(data.error.message), data.error));\n } else {\n resolve(data.result);\n }\n\n return;\n }\n\n // Обрабатываем обычные сообщения\n this._notifyListeners('message', data);\n if (data.type) {\n this._notifyListeners(data.type, data);\n }\n } catch (err) {\n console.error('WebSocket message error:', err);\n }\n }\n\n _handleError(error) {\n console.error('WebSocket error:', error);\n this._notifyListeners('error', { error });\n\n // Отменяем все RPC вызовы с ошибкой соединения\n for (const [id, { reject, timeoutId }] of this.rpcCallbacks.entries()) {\n clearTimeout(timeoutId);\n reject(new Error('WebSocket connection error'));\n this.rpcCallbacks.delete(id);\n }\n }\n\n _handleClose(event) {\n this.isConnected = false;\n if (this.pingInterval) {\n clearInterval(this.pingInterval);\n this.pingInterval = null;\n }\n\n // Отменяем все RPC вызовы при закрытии соединения\n for (const [id, { reject, timeoutId }] of this.rpcCallbacks.entries()) {\n clearTimeout(timeoutId);\n reject(new Error('WebSocket connection closed'));\n this.rpcCallbacks.delete(id);\n }\n\n this._notifyListeners('close', { code: event.code, reason: event.reason });\n\n if (event.code !== 1000 && this.userId && this.reconnectAttempts < this.maxReconnectAttempts) {\n this.reconnectAttempts++;\n const delay = this.reconnectDelay * this.reconnectAttempts;\n setTimeout(() => {\n this.connect(this.userId).catch(err => {\n console.error('Reconnection failed:', err);\n });\n }, delay);\n }\n }\n\n _notifyListeners(eventType, data) {\n Object.values(this.listeners[eventType] || {}).forEach(fn => {\n try {\n fn(data);\n } catch (err) {\n console.error(`Listener for ${eventType} failed:`, err);\n }\n });\n }\n\n isSocketConnected() {\n return this.isConnected && this.socket?.readyState === WebSocket.OPEN;\n }\n}\n\nconst globalWebSocket = new GlobalWebSocket();\nexport default globalWebSocket;\n"],"names":["module"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"globals.websocket.cjs","sources":["../../../../../../../src/modules/globals/views/classes/globals.websocket.js"],"sourcesContent":["class GlobalWebSocket {\n constructor() {\n this.socket = null;\n this.isConnected = false;\n this.reconnectAttempts = 0;\n this.maxReconnectAttempts = 5;\n this.reconnectDelay = 3000;\n this.baseUrl = null;\n this.pingInterval = null;\n this.pingIntervalTime = 30000;\n this.listeners = {};\n this.userId = null;\n this.connectPromise = null;\n this.subscribedModules = new Set();\n\n // RPC-специфичные свойства\n this.rpcCallbacks = new Map();\n this.rpcTimeout = 30000; // 30 секунд таймаут по умолчанию\n this.rpcIdCounter = 0;\n }\n\n initialize(options = {}) {\n console.log('WSS initialize options:', options);\n console.log('options.wsUrl:', options.wsUrl);\n if (typeof window !== 'undefined') console.log('window.location.protocol:', window.location.protocol);\n if (typeof window !== 'undefined') console.log('window.location.host:', window.location.host);\n\n this.maxReconnectAttempts = options.maxReconnectAttempts || this.maxReconnectAttempts;\n this.reconnectDelay = options.reconnectDelay || this.reconnectDelay;\n this.baseUrl = options.wsUrl || this._getDefaultWsUrl();\n this.pingIntervalTime = options.pingInterval || this.pingIntervalTime;\n this.rpcTimeout = options.rpcTimeout || this.rpcTimeout;\n }\n\n _getDefaultWsUrl() {\n if (typeof window === 'undefined') return '/api/ws';\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const host = window.location.hostname;\n return `${protocol}//${host}/api/ws`;\n }\n\n connect(userId) {\n if (typeof window === 'undefined') return Promise.resolve(false);\n this.userId = userId;\n\n // Проверяем существующее соединение\n if (this.isConnected && this.socket?.readyState === WebSocket.OPEN) {\n return Promise.resolve(this.socket);\n }\n\n // Предотвращаем создание множества промисов при параллельных вызовах\n if (this.connectPromise) {\n return this.connectPromise;\n }\n\n this.connectPromise = new Promise((resolve, reject) => {\n this.disconnect();\n\n // Используем baseUrl без параметров, так как аутентификация через cookie\n this.socket = new WebSocket(this.baseUrl);\n\n this.socket.onopen = () => {\n this._handleOpen();\n resolve(this.socket);\n };\n\n this.socket.onmessage = this._handleMessage.bind(this);\n this.socket.onerror = err => {\n this._handleError(err);\n reject(err);\n };\n this.socket.onclose = this._handleClose.bind(this);\n\n setTimeout(() => {\n if (!this.isConnected) {\n reject(new Error('WebSocket connection timeout'));\n }\n }, 10000);\n }).finally(() => {\n this.connectPromise = null;\n });\n\n return this.connectPromise;\n }\n\n disconnect() {\n if (typeof window === 'undefined') return;\n\n if (this.socket) {\n this.socket.onopen = null;\n this.socket.onmessage = null;\n this.socket.onerror = null;\n this.socket.onclose = null;\n if (this.socket.readyState === WebSocket.OPEN || this.socket.readyState === WebSocket.CONNECTING) {\n this.socket.close();\n }\n this.socket = null;\n }\n\n if (this.pingInterval) {\n clearInterval(this.pingInterval);\n this.pingInterval = null;\n }\n\n // Отменяем все ожидающие RPC вызовы\n for (const [id, { reject }] of this.rpcCallbacks.entries()) {\n reject(new Error('WebSocket disconnected'));\n this.rpcCallbacks.delete(id);\n }\n\n this.isConnected = false;\n this.userId = null;\n this.subscribedModules.clear(); // Очищаем подписки при отключении\n }\n\n async send(data) {\n if (!this.socket || this.socket.readyState !== WebSocket.OPEN) {\n console.error('Cannot send message: WebSocket is not connected');\n return false;\n }\n\n try {\n const msg = typeof data === 'string' ? data : JSON.stringify(data);\n this.socket.send(msg);\n return true;\n } catch (err) {\n console.error('Error sending message:', err);\n return false;\n }\n }\n\n /**\n * Выполняет RPC вызов на сервере\n * @param {string} module - Имя модуля\n * @param {string} method - Имя метода\n * @param {object} params - Параметры метода\n * @param {object} [options] - Опции вызова\n * @param {number} [options.timeout] - Таймаут в миллисекундах\n * @returns {Promise<any>} - Результат вызова\n */\n rpc(module, method, params = {}, options = {}) {\n if (!this.isConnected || this.socket?.readyState !== WebSocket.OPEN) {\n return Promise.reject(new Error('WebSocket is not connected'));\n }\n\n if (!module || !method) {\n return Promise.reject(new Error('Module and method are required'));\n }\n\n // Генерируем уникальный ID для вызова\n const id = `${++this.rpcIdCounter}`;\n const timeout = options.timeout || this.rpcTimeout;\n\n return new Promise((resolve, reject) => {\n // Записываем информацию о вызове для последующей обработки ответа\n this.rpcCallbacks.set(id, {\n resolve,\n reject,\n timeoutId: setTimeout(() => {\n if (this.rpcCallbacks.has(id)) {\n this.rpcCallbacks.delete(id);\n reject(new Error(`RPC call to ${module}.${method} timed out after ${timeout}ms`));\n }\n }, timeout),\n });\n\n // Отправляем RPC запрос\n this.send({\n type: 'rpc',\n module,\n method,\n params,\n id,\n }).catch(err => {\n if (this.rpcCallbacks.has(id)) {\n clearTimeout(this.rpcCallbacks.get(id).timeoutId);\n this.rpcCallbacks.delete(id);\n reject(err);\n }\n });\n });\n }\n\n addEventListener(eventType, callback, options = {}) {\n const listenerId = `${options.module || 'global'}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n if (!this.listeners[eventType]) this.listeners[eventType] = {};\n this.listeners[eventType][listenerId] = callback;\n return listenerId;\n }\n\n removeEventListener(eventType, listenerId) {\n if (this.listeners[eventType]?.[listenerId]) {\n delete this.listeners[eventType][listenerId];\n }\n }\n\n removeModuleListeners(moduleName) {\n Object.keys(this.listeners).forEach(eventType => {\n Object.keys(this.listeners[eventType]).forEach(listenerId => {\n if (listenerId.startsWith(`${moduleName}_`)) {\n delete this.listeners[eventType][listenerId];\n }\n });\n });\n }\n\n async subscribeModule(moduleName) {\n if (!moduleName || this.subscribedModules.has(moduleName)) return;\n const success = await this.send({ type: 'subscribe', module: moduleName });\n if (success) {\n this.subscribedModules.add(moduleName);\n }\n }\n\n async unsubscribeModule(moduleName) {\n if (!moduleName || !this.subscribedModules.has(moduleName)) return;\n const success = await this.send({ type: 'unsubscribe', module: moduleName });\n if (success) {\n this.subscribedModules.delete(moduleName);\n }\n }\n\n _resubscribeAllModules() {\n for (const moduleName of this.subscribedModules) {\n this.send({ type: 'subscribe', module: moduleName });\n }\n }\n\n _handleOpen() {\n this.isConnected = true;\n this.reconnectAttempts = 0;\n\n this.pingInterval = setInterval(() => {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'ping' }));\n }\n }, this.pingIntervalTime);\n\n this._resubscribeAllModules();\n this._notifyListeners('open', { isConnected: true });\n }\n\n _handleMessage(event) {\n // Проверка на типы сообщений - пропускаем бинарные сообщения\n if (typeof event.data !== 'string') {\n console.warn('Received binary message, but only JSON is supported');\n return;\n }\n\n try {\n const data = JSON.parse(event.data);\n\n // Обрабатываем ответы на RPC вызовы\n if (data.type === 'rpc_response' && data.id && this.rpcCallbacks.has(data.id)) {\n const { resolve, reject, timeoutId } = this.rpcCallbacks.get(data.id);\n clearTimeout(timeoutId);\n this.rpcCallbacks.delete(data.id);\n\n if (data.error) {\n reject(Object.assign(new Error(data.error.message), data.error));\n } else {\n resolve(data.result);\n }\n\n return;\n }\n\n // Обрабатываем обычные сообщения\n this._notifyListeners('message', data);\n if (data.type) {\n this._notifyListeners(data.type, data);\n }\n } catch (err) {\n console.error('WebSocket message error:', err);\n }\n }\n\n _handleError(error) {\n console.error('WebSocket error:', error);\n this._notifyListeners('error', { error });\n\n // Отменяем все RPC вызовы с ошибкой соединения\n for (const [id, { reject, timeoutId }] of this.rpcCallbacks.entries()) {\n clearTimeout(timeoutId);\n reject(new Error('WebSocket connection error'));\n this.rpcCallbacks.delete(id);\n }\n }\n\n _handleClose(event) {\n this.isConnected = false;\n if (this.pingInterval) {\n clearInterval(this.pingInterval);\n this.pingInterval = null;\n }\n\n // Отменяем все RPC вызовы при закрытии соединения\n for (const [id, { reject, timeoutId }] of this.rpcCallbacks.entries()) {\n clearTimeout(timeoutId);\n reject(new Error('WebSocket connection closed'));\n this.rpcCallbacks.delete(id);\n }\n\n this._notifyListeners('close', { code: event.code, reason: event.reason });\n\n if (event.code !== 1000 && this.userId && this.reconnectAttempts < this.maxReconnectAttempts) {\n this.reconnectAttempts++;\n const delay = this.reconnectDelay * this.reconnectAttempts;\n setTimeout(() => {\n this.connect(this.userId).catch(err => {\n console.error('Reconnection failed:', err);\n });\n }, delay);\n }\n }\n\n _notifyListeners(eventType, data) {\n Object.values(this.listeners[eventType] || {}).forEach(fn => {\n try {\n fn(data);\n } catch (err) {\n console.error(`Listener for ${eventType} failed:`, err);\n }\n });\n }\n\n isSocketConnected() {\n return this.isConnected && this.socket?.readyState === WebSocket.OPEN;\n }\n}\n\nconst globalWebSocket = new GlobalWebSocket();\nexport default globalWebSocket;\n"],"names":["module"],"mappings":";;AAAA,MAAM,gBAAgB;AAAA,EACpB,cAAc;AACZ,SAAK,SAAS;AACd,SAAK,cAAc;AACnB,SAAK,oBAAoB;AACzB,SAAK,uBAAuB;AAC5B,SAAK,iBAAiB;AACtB,SAAK,UAAU;AACf,SAAK,eAAe;AACpB,SAAK,mBAAmB;AACxB,SAAK,YAAY,CAAA;AACjB,SAAK,SAAS;AACd,SAAK,iBAAiB;AACtB,SAAK,oBAAoB,oBAAI,IAAG;AAGhC,SAAK,eAAe,oBAAI,IAAG;AAC3B,SAAK,aAAa;AAClB,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,WAAW,UAAU,IAAI;AACvB,YAAQ,IAAI,2BAA2B,OAAO;AAC9C,YAAQ,IAAI,kBAAkB,QAAQ,KAAK;AAC3C,QAAI,OAAO,WAAW,YAAa,SAAQ,IAAI,6BAA6B,OAAO,SAAS,QAAQ;AACpG,QAAI,OAAO,WAAW,YAAa,SAAQ,IAAI,yBAAyB,OAAO,SAAS,IAAI;AAE5F,SAAK,uBAAuB,QAAQ,wBAAwB,KAAK;AACjE,SAAK,iBAAiB,QAAQ,kBAAkB,KAAK;AACrD,SAAK,UAAU,QAAQ,SAAS,KAAK,iBAAgB;AACrD,SAAK,mBAAmB,QAAQ,gBAAgB,KAAK;AACrD,SAAK,aAAa,QAAQ,cAAc,KAAK;AAAA,EAC/C;AAAA,EAEA,mBAAmB;AACjB,QAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,UAAM,WAAW,OAAO,SAAS,aAAa,WAAW,SAAS;AAClE,UAAM,OAAO,OAAO,SAAS;AAC7B,WAAO,GAAG,QAAQ,KAAK,IAAI;AAAA,EAC7B;AAAA,EAEA,QAAQ,QAAQ;AACd,QAAI,OAAO,WAAW,YAAa,QAAO,QAAQ,QAAQ,KAAK;AAC/D,SAAK,SAAS;AAGd,QAAI,KAAK,eAAe,KAAK,QAAQ,eAAe,UAAU,MAAM;AAClE,aAAO,QAAQ,QAAQ,KAAK,MAAM;AAAA,IACpC;AAGA,QAAI,KAAK,gBAAgB;AACvB,aAAO,KAAK;AAAA,IACd;AAEA,SAAK,iBAAiB,IAAI,QAAQ,CAAC,SAAS,WAAW;AACrD,WAAK,WAAU;AAGf,WAAK,SAAS,IAAI,UAAU,KAAK,OAAO;AAExC,WAAK,OAAO,SAAS,MAAM;AACzB,aAAK,YAAW;AAChB,gBAAQ,KAAK,MAAM;AAAA,MACrB;AAEA,WAAK,OAAO,YAAY,KAAK,eAAe,KAAK,IAAI;AACrD,WAAK,OAAO,UAAU,SAAO;AAC3B,aAAK,aAAa,GAAG;AACrB,eAAO,GAAG;AAAA,MACZ;AACA,WAAK,OAAO,UAAU,KAAK,aAAa,KAAK,IAAI;AAEjD,iBAAW,MAAM;AACf,YAAI,CAAC,KAAK,aAAa;AACrB,iBAAO,IAAI,MAAM,8BAA8B,CAAC;AAAA,QAClD;AAAA,MACF,GAAG,GAAK;AAAA,IACV,CAAC,EAAE,QAAQ,MAAM;AACf,WAAK,iBAAiB;AAAA,IACxB,CAAC;AAED,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,aAAa;AACX,QAAI,OAAO,WAAW,YAAa;AAEnC,QAAI,KAAK,QAAQ;AACf,WAAK,OAAO,SAAS;AACrB,WAAK,OAAO,YAAY;AACxB,WAAK,OAAO,UAAU;AACtB,WAAK,OAAO,UAAU;AACtB,UAAI,KAAK,OAAO,eAAe,UAAU,QAAQ,KAAK,OAAO,eAAe,UAAU,YAAY;AAChG,aAAK,OAAO,MAAK;AAAA,MACnB;AACA,WAAK,SAAS;AAAA,IAChB;AAEA,QAAI,KAAK,cAAc;AACrB,oBAAc,KAAK,YAAY;AAC/B,WAAK,eAAe;AAAA,IACtB;AAGA,eAAW,CAAC,IAAI,EAAE,OAAM,CAAE,KAAK,KAAK,aAAa,WAAW;AAC1D,aAAO,IAAI,MAAM,wBAAwB,CAAC;AAC1C,WAAK,aAAa,OAAO,EAAE;AAAA,IAC7B;AAEA,SAAK,cAAc;AACnB,SAAK,SAAS;AACd,SAAK,kBAAkB;EACzB;AAAA,EAEA,MAAM,KAAK,MAAM;AACf,QAAI,CAAC,KAAK,UAAU,KAAK,OAAO,eAAe,UAAU,MAAM;AAC7D,cAAQ,MAAM,iDAAiD;AAC/D,aAAO;AAAA,IACT;AAEA,QAAI;AACF,YAAM,MAAM,OAAO,SAAS,WAAW,OAAO,KAAK,UAAU,IAAI;AACjE,WAAK,OAAO,KAAK,GAAG;AACpB,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,cAAQ,MAAM,0BAA0B,GAAG;AAC3C,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,IAAIA,SAAQ,QAAQ,SAAS,CAAA,GAAI,UAAU,IAAI;AAC7C,QAAI,CAAC,KAAK,eAAe,KAAK,QAAQ,eAAe,UAAU,MAAM;AACnE,aAAO,QAAQ,OAAO,IAAI,MAAM,4BAA4B,CAAC;AAAA,IAC/D;AAEA,QAAI,CAACA,WAAU,CAAC,QAAQ;AACtB,aAAO,QAAQ,OAAO,IAAI,MAAM,gCAAgC,CAAC;AAAA,IACnE;AAGA,UAAM,KAAK,GAAG,EAAE,KAAK,YAAY;AACjC,UAAM,UAAU,QAAQ,WAAW,KAAK;AAExC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAEtC,WAAK,aAAa,IAAI,IAAI;AAAA,QACxB;AAAA,QACA;AAAA,QACA,WAAW,WAAW,MAAM;AAC1B,cAAI,KAAK,aAAa,IAAI,EAAE,GAAG;AAC7B,iBAAK,aAAa,OAAO,EAAE;AAC3B,mBAAO,IAAI,MAAM,eAAeA,OAAM,IAAI,MAAM,oBAAoB,OAAO,IAAI,CAAC;AAAA,UAClF;AAAA,QACF,GAAG,OAAO;AAAA,MAClB,CAAO;AAGD,WAAK,KAAK;AAAA,QACR,MAAM;AAAA,QACN,QAAAA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACR,CAAO,EAAE,MAAM,SAAO;AACd,YAAI,KAAK,aAAa,IAAI,EAAE,GAAG;AAC7B,uBAAa,KAAK,aAAa,IAAI,EAAE,EAAE,SAAS;AAChD,eAAK,aAAa,OAAO,EAAE;AAC3B,iBAAO,GAAG;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,iBAAiB,WAAW,UAAU,UAAU,CAAA,GAAI;AAClD,UAAM,aAAa,GAAG,QAAQ,UAAU,QAAQ,IAAI,KAAK,IAAG,CAAE,IAAI,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC;AACzG,QAAI,CAAC,KAAK,UAAU,SAAS,EAAG,MAAK,UAAU,SAAS,IAAI,CAAA;AAC5D,SAAK,UAAU,SAAS,EAAE,UAAU,IAAI;AACxC,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,WAAW,YAAY;AACzC,QAAI,KAAK,UAAU,SAAS,IAAI,UAAU,GAAG;AAC3C,aAAO,KAAK,UAAU,SAAS,EAAE,UAAU;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,sBAAsB,YAAY;AAChC,WAAO,KAAK,KAAK,SAAS,EAAE,QAAQ,eAAa;AAC/C,aAAO,KAAK,KAAK,UAAU,SAAS,CAAC,EAAE,QAAQ,gBAAc;AAC3D,YAAI,WAAW,WAAW,GAAG,UAAU,GAAG,GAAG;AAC3C,iBAAO,KAAK,UAAU,SAAS,EAAE,UAAU;AAAA,QAC7C;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,gBAAgB,YAAY;AAChC,QAAI,CAAC,cAAc,KAAK,kBAAkB,IAAI,UAAU,EAAG;AAC3D,UAAM,UAAU,MAAM,KAAK,KAAK,EAAE,MAAM,aAAa,QAAQ,YAAY;AACzE,QAAI,SAAS;AACX,WAAK,kBAAkB,IAAI,UAAU;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,YAAY;AAClC,QAAI,CAAC,cAAc,CAAC,KAAK,kBAAkB,IAAI,UAAU,EAAG;AAC5D,UAAM,UAAU,MAAM,KAAK,KAAK,EAAE,MAAM,eAAe,QAAQ,YAAY;AAC3E,QAAI,SAAS;AACX,WAAK,kBAAkB,OAAO,UAAU;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,yBAAyB;AACvB,eAAW,cAAc,KAAK,mBAAmB;AAC/C,WAAK,KAAK,EAAE,MAAM,aAAa,QAAQ,YAAY;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,cAAc;AACZ,SAAK,cAAc;AACnB,SAAK,oBAAoB;AAEzB,SAAK,eAAe,YAAY,MAAM;AACpC,UAAI,KAAK,QAAQ,eAAe,UAAU,MAAM;AAC9C,aAAK,OAAO,KAAK,KAAK,UAAU,EAAE,MAAM,OAAM,CAAE,CAAC;AAAA,MACnD;AAAA,IACF,GAAG,KAAK,gBAAgB;AAExB,SAAK,uBAAsB;AAC3B,SAAK,iBAAiB,QAAQ,EAAE,aAAa,KAAI,CAAE;AAAA,EACrD;AAAA,EAEA,eAAe,OAAO;AAEpB,QAAI,OAAO,MAAM,SAAS,UAAU;AAClC,cAAQ,KAAK,qDAAqD;AAClE;AAAA,IACF;AAEA,QAAI;AACF,YAAM,OAAO,KAAK,MAAM,MAAM,IAAI;AAGlC,UAAI,KAAK,SAAS,kBAAkB,KAAK,MAAM,KAAK,aAAa,IAAI,KAAK,EAAE,GAAG;AAC7E,cAAM,EAAE,SAAS,QAAQ,UAAS,IAAK,KAAK,aAAa,IAAI,KAAK,EAAE;AACpE,qBAAa,SAAS;AACtB,aAAK,aAAa,OAAO,KAAK,EAAE;AAEhC,YAAI,KAAK,OAAO;AACd,iBAAO,OAAO,OAAO,IAAI,MAAM,KAAK,MAAM,OAAO,GAAG,KAAK,KAAK,CAAC;AAAA,QACjE,OAAO;AACL,kBAAQ,KAAK,MAAM;AAAA,QACrB;AAEA;AAAA,MACF;AAGA,WAAK,iBAAiB,WAAW,IAAI;AACrC,UAAI,KAAK,MAAM;AACb,aAAK,iBAAiB,KAAK,MAAM,IAAI;AAAA,MACvC;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,MAAM,4BAA4B,GAAG;AAAA,IAC/C;AAAA,EACF;AAAA,EAEA,aAAa,OAAO;AAClB,YAAQ,MAAM,oBAAoB,KAAK;AACvC,SAAK,iBAAiB,SAAS,EAAE,MAAK,CAAE;AAGxC,eAAW,CAAC,IAAI,EAAE,QAAQ,UAAS,CAAE,KAAK,KAAK,aAAa,WAAW;AACrE,mBAAa,SAAS;AACtB,aAAO,IAAI,MAAM,4BAA4B,CAAC;AAC9C,WAAK,aAAa,OAAO,EAAE;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,aAAa,OAAO;AAClB,SAAK,cAAc;AACnB,QAAI,KAAK,cAAc;AACrB,oBAAc,KAAK,YAAY;AAC/B,WAAK,eAAe;AAAA,IACtB;AAGA,eAAW,CAAC,IAAI,EAAE,QAAQ,UAAS,CAAE,KAAK,KAAK,aAAa,WAAW;AACrE,mBAAa,SAAS;AACtB,aAAO,IAAI,MAAM,6BAA6B,CAAC;AAC/C,WAAK,aAAa,OAAO,EAAE;AAAA,IAC7B;AAEA,SAAK,iBAAiB,SAAS,EAAE,MAAM,MAAM,MAAM,QAAQ,MAAM,QAAQ;AAEzE,QAAI,MAAM,SAAS,OAAQ,KAAK,UAAU,KAAK,oBAAoB,KAAK,sBAAsB;AAC5F,WAAK;AACL,YAAM,QAAQ,KAAK,iBAAiB,KAAK;AACzC,iBAAW,MAAM;AACf,aAAK,QAAQ,KAAK,MAAM,EAAE,MAAM,SAAO;AACrC,kBAAQ,MAAM,wBAAwB,GAAG;AAAA,QAC3C,CAAC;AAAA,MACH,GAAG,KAAK;AAAA,IACV;AAAA,EACF;AAAA,EAEA,iBAAiB,WAAW,MAAM;AAChC,WAAO,OAAO,KAAK,UAAU,SAAS,KAAK,CAAA,CAAE,EAAE,QAAQ,QAAM;AAC3D,UAAI;AACF,WAAG,IAAI;AAAA,MACT,SAAS,KAAK;AACZ,gBAAQ,MAAM,gBAAgB,SAAS,YAAY,GAAG;AAAA,MACxD;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,oBAAoB;AAClB,WAAO,KAAK,eAAe,KAAK,QAAQ,eAAe,UAAU;AAAA,EACnE;AACF;AAEK,MAAC,kBAAkB,IAAI,gBAAe;;"}
|
|
@@ -19,8 +19,8 @@ class GlobalWebSocket {
|
|
|
19
19
|
initialize(options = {}) {
|
|
20
20
|
console.log("WSS initialize options:", options);
|
|
21
21
|
console.log("options.wsUrl:", options.wsUrl);
|
|
22
|
-
console.log("window.location.protocol:", window.location.protocol);
|
|
23
|
-
console.log("window.location.host:", window.location.host);
|
|
22
|
+
if (typeof window !== "undefined") console.log("window.location.protocol:", window.location.protocol);
|
|
23
|
+
if (typeof window !== "undefined") console.log("window.location.host:", window.location.host);
|
|
24
24
|
this.maxReconnectAttempts = options.maxReconnectAttempts || this.maxReconnectAttempts;
|
|
25
25
|
this.reconnectDelay = options.reconnectDelay || this.reconnectDelay;
|
|
26
26
|
this.baseUrl = options.wsUrl || this._getDefaultWsUrl();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globals.websocket.js","sources":["../../../../../../../src/modules/globals/views/classes/globals.websocket.js"],"sourcesContent":["class GlobalWebSocket {\n constructor() {\n this.socket = null;\n this.isConnected = false;\n this.reconnectAttempts = 0;\n this.maxReconnectAttempts = 5;\n this.reconnectDelay = 3000;\n this.baseUrl = null;\n this.pingInterval = null;\n this.pingIntervalTime = 30000;\n this.listeners = {};\n this.userId = null;\n this.connectPromise = null;\n this.subscribedModules = new Set();\n\n // RPC-специфичные свойства\n this.rpcCallbacks = new Map();\n this.rpcTimeout = 30000; // 30 секунд таймаут по умолчанию\n this.rpcIdCounter = 0;\n }\n\n initialize(options = {}) {\n console.log('WSS initialize options:', options);\n console.log('options.wsUrl:', options.wsUrl);\n console.log('window.location.protocol:', window.location.protocol);\n console.log('window.location.host:', window.location.host);\n \n this.maxReconnectAttempts = options.maxReconnectAttempts || this.maxReconnectAttempts;\n this.reconnectDelay = options.reconnectDelay || this.reconnectDelay;\n this.baseUrl = options.wsUrl || this._getDefaultWsUrl();\n this.pingIntervalTime = options.pingInterval || this.pingIntervalTime;\n this.rpcTimeout = options.rpcTimeout || this.rpcTimeout;\n }\n\n _getDefaultWsUrl() {\n if (typeof window === 'undefined') return '/api/ws';\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const host = window.location.hostname;\n return `${protocol}//${host}/api/ws`;\n }\n\n connect(userId) {\n if (typeof window === 'undefined') return Promise.resolve(false);\n this.userId = userId;\n\n // Проверяем существующее соединение\n if (this.isConnected && this.socket?.readyState === WebSocket.OPEN) {\n return Promise.resolve(this.socket);\n }\n\n // Предотвращаем создание множества промисов при параллельных вызовах\n if (this.connectPromise) {\n return this.connectPromise;\n }\n\n this.connectPromise = new Promise((resolve, reject) => {\n this.disconnect();\n\n // Используем baseUrl без параметров, так как аутентификация через cookie\n this.socket = new WebSocket(this.baseUrl);\n\n this.socket.onopen = () => {\n this._handleOpen();\n resolve(this.socket);\n };\n\n this.socket.onmessage = this._handleMessage.bind(this);\n this.socket.onerror = err => {\n this._handleError(err);\n reject(err);\n };\n this.socket.onclose = this._handleClose.bind(this);\n\n setTimeout(() => {\n if (!this.isConnected) {\n reject(new Error('WebSocket connection timeout'));\n }\n }, 10000);\n }).finally(() => {\n this.connectPromise = null;\n });\n\n return this.connectPromise;\n }\n\n disconnect() {\n if (typeof window === 'undefined') return;\n\n if (this.socket) {\n this.socket.onopen = null;\n this.socket.onmessage = null;\n this.socket.onerror = null;\n this.socket.onclose = null;\n if (this.socket.readyState === WebSocket.OPEN || this.socket.readyState === WebSocket.CONNECTING) {\n this.socket.close();\n }\n this.socket = null;\n }\n\n if (this.pingInterval) {\n clearInterval(this.pingInterval);\n this.pingInterval = null;\n }\n\n // Отменяем все ожидающие RPC вызовы\n for (const [id, { reject }] of this.rpcCallbacks.entries()) {\n reject(new Error('WebSocket disconnected'));\n this.rpcCallbacks.delete(id);\n }\n\n this.isConnected = false;\n this.userId = null;\n this.subscribedModules.clear(); // Очищаем подписки при отключении\n }\n\n async send(data) {\n if (!this.socket || this.socket.readyState !== WebSocket.OPEN) {\n console.error('Cannot send message: WebSocket is not connected');\n return false;\n }\n\n try {\n const msg = typeof data === 'string' ? data : JSON.stringify(data);\n this.socket.send(msg);\n return true;\n } catch (err) {\n console.error('Error sending message:', err);\n return false;\n }\n }\n\n /**\n * Выполняет RPC вызов на сервере\n * @param {string} module - Имя модуля\n * @param {string} method - Имя метода\n * @param {object} params - Параметры метода\n * @param {object} [options] - Опции вызова\n * @param {number} [options.timeout] - Таймаут в миллисекундах\n * @returns {Promise<any>} - Результат вызова\n */\n rpc(module, method, params = {}, options = {}) {\n if (!this.isConnected || this.socket?.readyState !== WebSocket.OPEN) {\n return Promise.reject(new Error('WebSocket is not connected'));\n }\n\n if (!module || !method) {\n return Promise.reject(new Error('Module and method are required'));\n }\n\n // Генерируем уникальный ID для вызова\n const id = `${++this.rpcIdCounter}`;\n const timeout = options.timeout || this.rpcTimeout;\n\n return new Promise((resolve, reject) => {\n // Записываем информацию о вызове для последующей обработки ответа\n this.rpcCallbacks.set(id, {\n resolve,\n reject,\n timeoutId: setTimeout(() => {\n if (this.rpcCallbacks.has(id)) {\n this.rpcCallbacks.delete(id);\n reject(new Error(`RPC call to ${module}.${method} timed out after ${timeout}ms`));\n }\n }, timeout),\n });\n\n // Отправляем RPC запрос\n this.send({\n type: 'rpc',\n module,\n method,\n params,\n id,\n }).catch(err => {\n if (this.rpcCallbacks.has(id)) {\n clearTimeout(this.rpcCallbacks.get(id).timeoutId);\n this.rpcCallbacks.delete(id);\n reject(err);\n }\n });\n });\n }\n\n addEventListener(eventType, callback, options = {}) {\n const listenerId = `${options.module || 'global'}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n if (!this.listeners[eventType]) this.listeners[eventType] = {};\n this.listeners[eventType][listenerId] = callback;\n return listenerId;\n }\n\n removeEventListener(eventType, listenerId) {\n if (this.listeners[eventType]?.[listenerId]) {\n delete this.listeners[eventType][listenerId];\n }\n }\n\n removeModuleListeners(moduleName) {\n Object.keys(this.listeners).forEach(eventType => {\n Object.keys(this.listeners[eventType]).forEach(listenerId => {\n if (listenerId.startsWith(`${moduleName}_`)) {\n delete this.listeners[eventType][listenerId];\n }\n });\n });\n }\n\n async subscribeModule(moduleName) {\n if (!moduleName || this.subscribedModules.has(moduleName)) return;\n const success = await this.send({ type: 'subscribe', module: moduleName });\n if (success) {\n this.subscribedModules.add(moduleName);\n }\n }\n\n async unsubscribeModule(moduleName) {\n if (!moduleName || !this.subscribedModules.has(moduleName)) return;\n const success = await this.send({ type: 'unsubscribe', module: moduleName });\n if (success) {\n this.subscribedModules.delete(moduleName);\n }\n }\n\n _resubscribeAllModules() {\n for (const moduleName of this.subscribedModules) {\n this.send({ type: 'subscribe', module: moduleName });\n }\n }\n\n _handleOpen() {\n this.isConnected = true;\n this.reconnectAttempts = 0;\n\n this.pingInterval = setInterval(() => {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'ping' }));\n }\n }, this.pingIntervalTime);\n\n this._resubscribeAllModules();\n this._notifyListeners('open', { isConnected: true });\n }\n\n _handleMessage(event) {\n // Проверка на типы сообщений - пропускаем бинарные сообщения\n if (typeof event.data !== 'string') {\n console.warn('Received binary message, but only JSON is supported');\n return;\n }\n\n try {\n const data = JSON.parse(event.data);\n\n // Обрабатываем ответы на RPC вызовы\n if (data.type === 'rpc_response' && data.id && this.rpcCallbacks.has(data.id)) {\n const { resolve, reject, timeoutId } = this.rpcCallbacks.get(data.id);\n clearTimeout(timeoutId);\n this.rpcCallbacks.delete(data.id);\n\n if (data.error) {\n reject(Object.assign(new Error(data.error.message), data.error));\n } else {\n resolve(data.result);\n }\n\n return;\n }\n\n // Обрабатываем обычные сообщения\n this._notifyListeners('message', data);\n if (data.type) {\n this._notifyListeners(data.type, data);\n }\n } catch (err) {\n console.error('WebSocket message error:', err);\n }\n }\n\n _handleError(error) {\n console.error('WebSocket error:', error);\n this._notifyListeners('error', { error });\n\n // Отменяем все RPC вызовы с ошибкой соединения\n for (const [id, { reject, timeoutId }] of this.rpcCallbacks.entries()) {\n clearTimeout(timeoutId);\n reject(new Error('WebSocket connection error'));\n this.rpcCallbacks.delete(id);\n }\n }\n\n _handleClose(event) {\n this.isConnected = false;\n if (this.pingInterval) {\n clearInterval(this.pingInterval);\n this.pingInterval = null;\n }\n\n // Отменяем все RPC вызовы при закрытии соединения\n for (const [id, { reject, timeoutId }] of this.rpcCallbacks.entries()) {\n clearTimeout(timeoutId);\n reject(new Error('WebSocket connection closed'));\n this.rpcCallbacks.delete(id);\n }\n\n this._notifyListeners('close', { code: event.code, reason: event.reason });\n\n if (event.code !== 1000 && this.userId && this.reconnectAttempts < this.maxReconnectAttempts) {\n this.reconnectAttempts++;\n const delay = this.reconnectDelay * this.reconnectAttempts;\n setTimeout(() => {\n this.connect(this.userId).catch(err => {\n console.error('Reconnection failed:', err);\n });\n }, delay);\n }\n }\n\n _notifyListeners(eventType, data) {\n Object.values(this.listeners[eventType] || {}).forEach(fn => {\n try {\n fn(data);\n } catch (err) {\n console.error(`Listener for ${eventType} failed:`, err);\n }\n });\n }\n\n isSocketConnected() {\n return this.isConnected && this.socket?.readyState === WebSocket.OPEN;\n }\n}\n\nconst globalWebSocket = new GlobalWebSocket();\nexport default globalWebSocket;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"globals.websocket.js","sources":["../../../../../../../src/modules/globals/views/classes/globals.websocket.js"],"sourcesContent":["class GlobalWebSocket {\n constructor() {\n this.socket = null;\n this.isConnected = false;\n this.reconnectAttempts = 0;\n this.maxReconnectAttempts = 5;\n this.reconnectDelay = 3000;\n this.baseUrl = null;\n this.pingInterval = null;\n this.pingIntervalTime = 30000;\n this.listeners = {};\n this.userId = null;\n this.connectPromise = null;\n this.subscribedModules = new Set();\n\n // RPC-специфичные свойства\n this.rpcCallbacks = new Map();\n this.rpcTimeout = 30000; // 30 секунд таймаут по умолчанию\n this.rpcIdCounter = 0;\n }\n\n initialize(options = {}) {\n console.log('WSS initialize options:', options);\n console.log('options.wsUrl:', options.wsUrl);\n if (typeof window !== 'undefined') console.log('window.location.protocol:', window.location.protocol);\n if (typeof window !== 'undefined') console.log('window.location.host:', window.location.host);\n\n this.maxReconnectAttempts = options.maxReconnectAttempts || this.maxReconnectAttempts;\n this.reconnectDelay = options.reconnectDelay || this.reconnectDelay;\n this.baseUrl = options.wsUrl || this._getDefaultWsUrl();\n this.pingIntervalTime = options.pingInterval || this.pingIntervalTime;\n this.rpcTimeout = options.rpcTimeout || this.rpcTimeout;\n }\n\n _getDefaultWsUrl() {\n if (typeof window === 'undefined') return '/api/ws';\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const host = window.location.hostname;\n return `${protocol}//${host}/api/ws`;\n }\n\n connect(userId) {\n if (typeof window === 'undefined') return Promise.resolve(false);\n this.userId = userId;\n\n // Проверяем существующее соединение\n if (this.isConnected && this.socket?.readyState === WebSocket.OPEN) {\n return Promise.resolve(this.socket);\n }\n\n // Предотвращаем создание множества промисов при параллельных вызовах\n if (this.connectPromise) {\n return this.connectPromise;\n }\n\n this.connectPromise = new Promise((resolve, reject) => {\n this.disconnect();\n\n // Используем baseUrl без параметров, так как аутентификация через cookie\n this.socket = new WebSocket(this.baseUrl);\n\n this.socket.onopen = () => {\n this._handleOpen();\n resolve(this.socket);\n };\n\n this.socket.onmessage = this._handleMessage.bind(this);\n this.socket.onerror = err => {\n this._handleError(err);\n reject(err);\n };\n this.socket.onclose = this._handleClose.bind(this);\n\n setTimeout(() => {\n if (!this.isConnected) {\n reject(new Error('WebSocket connection timeout'));\n }\n }, 10000);\n }).finally(() => {\n this.connectPromise = null;\n });\n\n return this.connectPromise;\n }\n\n disconnect() {\n if (typeof window === 'undefined') return;\n\n if (this.socket) {\n this.socket.onopen = null;\n this.socket.onmessage = null;\n this.socket.onerror = null;\n this.socket.onclose = null;\n if (this.socket.readyState === WebSocket.OPEN || this.socket.readyState === WebSocket.CONNECTING) {\n this.socket.close();\n }\n this.socket = null;\n }\n\n if (this.pingInterval) {\n clearInterval(this.pingInterval);\n this.pingInterval = null;\n }\n\n // Отменяем все ожидающие RPC вызовы\n for (const [id, { reject }] of this.rpcCallbacks.entries()) {\n reject(new Error('WebSocket disconnected'));\n this.rpcCallbacks.delete(id);\n }\n\n this.isConnected = false;\n this.userId = null;\n this.subscribedModules.clear(); // Очищаем подписки при отключении\n }\n\n async send(data) {\n if (!this.socket || this.socket.readyState !== WebSocket.OPEN) {\n console.error('Cannot send message: WebSocket is not connected');\n return false;\n }\n\n try {\n const msg = typeof data === 'string' ? data : JSON.stringify(data);\n this.socket.send(msg);\n return true;\n } catch (err) {\n console.error('Error sending message:', err);\n return false;\n }\n }\n\n /**\n * Выполняет RPC вызов на сервере\n * @param {string} module - Имя модуля\n * @param {string} method - Имя метода\n * @param {object} params - Параметры метода\n * @param {object} [options] - Опции вызова\n * @param {number} [options.timeout] - Таймаут в миллисекундах\n * @returns {Promise<any>} - Результат вызова\n */\n rpc(module, method, params = {}, options = {}) {\n if (!this.isConnected || this.socket?.readyState !== WebSocket.OPEN) {\n return Promise.reject(new Error('WebSocket is not connected'));\n }\n\n if (!module || !method) {\n return Promise.reject(new Error('Module and method are required'));\n }\n\n // Генерируем уникальный ID для вызова\n const id = `${++this.rpcIdCounter}`;\n const timeout = options.timeout || this.rpcTimeout;\n\n return new Promise((resolve, reject) => {\n // Записываем информацию о вызове для последующей обработки ответа\n this.rpcCallbacks.set(id, {\n resolve,\n reject,\n timeoutId: setTimeout(() => {\n if (this.rpcCallbacks.has(id)) {\n this.rpcCallbacks.delete(id);\n reject(new Error(`RPC call to ${module}.${method} timed out after ${timeout}ms`));\n }\n }, timeout),\n });\n\n // Отправляем RPC запрос\n this.send({\n type: 'rpc',\n module,\n method,\n params,\n id,\n }).catch(err => {\n if (this.rpcCallbacks.has(id)) {\n clearTimeout(this.rpcCallbacks.get(id).timeoutId);\n this.rpcCallbacks.delete(id);\n reject(err);\n }\n });\n });\n }\n\n addEventListener(eventType, callback, options = {}) {\n const listenerId = `${options.module || 'global'}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n if (!this.listeners[eventType]) this.listeners[eventType] = {};\n this.listeners[eventType][listenerId] = callback;\n return listenerId;\n }\n\n removeEventListener(eventType, listenerId) {\n if (this.listeners[eventType]?.[listenerId]) {\n delete this.listeners[eventType][listenerId];\n }\n }\n\n removeModuleListeners(moduleName) {\n Object.keys(this.listeners).forEach(eventType => {\n Object.keys(this.listeners[eventType]).forEach(listenerId => {\n if (listenerId.startsWith(`${moduleName}_`)) {\n delete this.listeners[eventType][listenerId];\n }\n });\n });\n }\n\n async subscribeModule(moduleName) {\n if (!moduleName || this.subscribedModules.has(moduleName)) return;\n const success = await this.send({ type: 'subscribe', module: moduleName });\n if (success) {\n this.subscribedModules.add(moduleName);\n }\n }\n\n async unsubscribeModule(moduleName) {\n if (!moduleName || !this.subscribedModules.has(moduleName)) return;\n const success = await this.send({ type: 'unsubscribe', module: moduleName });\n if (success) {\n this.subscribedModules.delete(moduleName);\n }\n }\n\n _resubscribeAllModules() {\n for (const moduleName of this.subscribedModules) {\n this.send({ type: 'subscribe', module: moduleName });\n }\n }\n\n _handleOpen() {\n this.isConnected = true;\n this.reconnectAttempts = 0;\n\n this.pingInterval = setInterval(() => {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'ping' }));\n }\n }, this.pingIntervalTime);\n\n this._resubscribeAllModules();\n this._notifyListeners('open', { isConnected: true });\n }\n\n _handleMessage(event) {\n // Проверка на типы сообщений - пропускаем бинарные сообщения\n if (typeof event.data !== 'string') {\n console.warn('Received binary message, but only JSON is supported');\n return;\n }\n\n try {\n const data = JSON.parse(event.data);\n\n // Обрабатываем ответы на RPC вызовы\n if (data.type === 'rpc_response' && data.id && this.rpcCallbacks.has(data.id)) {\n const { resolve, reject, timeoutId } = this.rpcCallbacks.get(data.id);\n clearTimeout(timeoutId);\n this.rpcCallbacks.delete(data.id);\n\n if (data.error) {\n reject(Object.assign(new Error(data.error.message), data.error));\n } else {\n resolve(data.result);\n }\n\n return;\n }\n\n // Обрабатываем обычные сообщения\n this._notifyListeners('message', data);\n if (data.type) {\n this._notifyListeners(data.type, data);\n }\n } catch (err) {\n console.error('WebSocket message error:', err);\n }\n }\n\n _handleError(error) {\n console.error('WebSocket error:', error);\n this._notifyListeners('error', { error });\n\n // Отменяем все RPC вызовы с ошибкой соединения\n for (const [id, { reject, timeoutId }] of this.rpcCallbacks.entries()) {\n clearTimeout(timeoutId);\n reject(new Error('WebSocket connection error'));\n this.rpcCallbacks.delete(id);\n }\n }\n\n _handleClose(event) {\n this.isConnected = false;\n if (this.pingInterval) {\n clearInterval(this.pingInterval);\n this.pingInterval = null;\n }\n\n // Отменяем все RPC вызовы при закрытии соединения\n for (const [id, { reject, timeoutId }] of this.rpcCallbacks.entries()) {\n clearTimeout(timeoutId);\n reject(new Error('WebSocket connection closed'));\n this.rpcCallbacks.delete(id);\n }\n\n this._notifyListeners('close', { code: event.code, reason: event.reason });\n\n if (event.code !== 1000 && this.userId && this.reconnectAttempts < this.maxReconnectAttempts) {\n this.reconnectAttempts++;\n const delay = this.reconnectDelay * this.reconnectAttempts;\n setTimeout(() => {\n this.connect(this.userId).catch(err => {\n console.error('Reconnection failed:', err);\n });\n }, delay);\n }\n }\n\n _notifyListeners(eventType, data) {\n Object.values(this.listeners[eventType] || {}).forEach(fn => {\n try {\n fn(data);\n } catch (err) {\n console.error(`Listener for ${eventType} failed:`, err);\n }\n });\n }\n\n isSocketConnected() {\n return this.isConnected && this.socket?.readyState === WebSocket.OPEN;\n }\n}\n\nconst globalWebSocket = new GlobalWebSocket();\nexport default globalWebSocket;\n"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const vue = require("vue");
|
|
4
4
|
const vueRouter = require("vue-router");
|
|
5
|
-
const Tooltip = require("../../../../../components/Tooltip/Tooltip.
|
|
6
|
-
const Dropdown = require("../../../../../components/Dropdown/Dropdown.
|
|
5
|
+
const Tooltip = require("../../../../../components/Tooltip/Tooltip.vue.cjs");
|
|
6
|
+
const Dropdown = require("../../../../../components/Dropdown/Dropdown.vue.cjs");
|
|
7
7
|
const PlaceholderUserpic = require("../../../../icons/placeholders/PlaceholderUserpic.vue.cjs");
|
|
8
8
|
const PlaceholderOrganizationPic = require("../../../../icons/placeholders/PlaceholderOrganizationPic.vue.cjs");
|
|
9
9
|
const IconEllipsis = require("../../../../icons/navigation/IconEllipsis.vue.cjs");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { resolveComponent, createElementBlock, createCommentVNode, openBlock, createElementVNode, createBlock, withModifiers, resolveDynamicComponent, toDisplayString, withCtx, createTextVNode, Fragment, renderList, normalizeClass } from "vue";
|
|
2
2
|
import { useRouter } from "vue-router";
|
|
3
|
-
import _sfc_main$1 from "../../../../../components/Tooltip/Tooltip.
|
|
4
|
-
import _sfc_main$3 from "../../../../../components/Dropdown/Dropdown.
|
|
3
|
+
import _sfc_main$1 from "../../../../../components/Tooltip/Tooltip.vue.js";
|
|
4
|
+
import _sfc_main$3 from "../../../../../components/Dropdown/Dropdown.vue.js";
|
|
5
5
|
import PlaceholderUserpic from "../../../../icons/placeholders/PlaceholderUserpic.vue.js";
|
|
6
6
|
import PlaceholderOrganizationPic from "../../../../icons/placeholders/PlaceholderOrganizationPic.vue.js";
|
|
7
7
|
import _sfc_main$4 from "../../../../icons/navigation/IconEllipsis.vue.js";
|
|
@@ -5,7 +5,7 @@ const vueRouter = require("vue-router");
|
|
|
5
5
|
const IconChevronBottom = require("../../../../icons/navigation/IconChevronBottom.vue.cjs");
|
|
6
6
|
const globals = require("../../store/globals.cjs");
|
|
7
7
|
const auth = require("../../../../auth/views/store/auth.cjs");
|
|
8
|
-
;/* empty css
|
|
8
|
+
;/* empty css */
|
|
9
9
|
;/* empty css */
|
|
10
10
|
;/* empty css */
|
|
11
11
|
const _pluginVue_exportHelper = require("../../../../../../../_virtual/_plugin-vue_export-helper.cjs");
|
|
@@ -3,7 +3,7 @@ import { useRouter, useRoute } from "vue-router";
|
|
|
3
3
|
import IconChevronBottom from "../../../../icons/navigation/IconChevronBottom.vue.js";
|
|
4
4
|
import { state } from "../../store/globals.js";
|
|
5
5
|
import { state as state$1 } from "../../../../auth/views/store/auth.js";
|
|
6
|
-
/* empty css
|
|
6
|
+
/* empty css */
|
|
7
7
|
/* empty css */
|
|
8
8
|
/* empty css */
|
|
9
9
|
import _export_sfc from "../../../../../../../_virtual/_plugin-vue_export-helper.js";
|
|
@@ -6,7 +6,7 @@ const mixins = require("../../../globals/views/mixins/mixins.cjs");
|
|
|
6
6
|
const Table = require("../../../../components/Table/Table.vue.cjs");
|
|
7
7
|
const Feed = require("../../../../components/Feed/Feed.vue.cjs");
|
|
8
8
|
const PlaceholderImage = require("../../../icons/placeholders/PlaceholderImage.vue.cjs");
|
|
9
|
-
const Dropdown = require("../../../../components/Dropdown/Dropdown.
|
|
9
|
+
const Dropdown = require("../../../../components/Dropdown/Dropdown.vue.cjs");
|
|
10
10
|
const Popup = require("../../../../components/Popup/Popup.vue.cjs");
|
|
11
11
|
const IconSettings = require("../../../icons/entities/IconSettings.vue.cjs");
|
|
12
12
|
const IconEllipsis = require("../../../icons/navigation/IconEllipsis.vue.cjs");
|
|
@@ -4,7 +4,7 @@ import { useGlobalMixins } from "../../../globals/views/mixins/mixins.js";
|
|
|
4
4
|
import Table from "../../../../components/Table/Table.vue.js";
|
|
5
5
|
import _sfc_main$1 from "../../../../components/Feed/Feed.vue.js";
|
|
6
6
|
import PlaceholderImage from "../../../icons/placeholders/PlaceholderImage.vue.js";
|
|
7
|
-
import _sfc_main$3 from "../../../../components/Dropdown/Dropdown.
|
|
7
|
+
import _sfc_main$3 from "../../../../components/Dropdown/Dropdown.vue.js";
|
|
8
8
|
import _sfc_main$5 from "../../../../components/Popup/Popup.vue.js";
|
|
9
9
|
import _sfc_main$2 from "../../../icons/entities/IconSettings.vue.js";
|
|
10
10
|
import _sfc_main$4 from "../../../icons/navigation/IconEllipsis.vue.js";
|
|
@@ -6,7 +6,7 @@ const Button = require("../../../../components/Button/Button.vue2.cjs");
|
|
|
6
6
|
const Field = require("../../../../components/Field/Field.vue.cjs");
|
|
7
7
|
const Feed = require("../../../../components/Feed/Feed.vue.cjs");
|
|
8
8
|
;/* empty css */
|
|
9
|
-
;/* empty css
|
|
9
|
+
;/* empty css */
|
|
10
10
|
const Popup = require("../../../../components/Popup/Popup.vue.cjs");
|
|
11
11
|
const CardOrderItem = require("../../../orders/components/blocks/CardOrderItem.vue.cjs");
|
|
12
12
|
const CardSpot = require("../../../spots/components/blocks/CardSpot.vue.cjs");
|
|
@@ -4,7 +4,7 @@ import _sfc_main$7 from "../../../../components/Button/Button.vue2.js";
|
|
|
4
4
|
import Field from "../../../../components/Field/Field.vue.js";
|
|
5
5
|
import _sfc_main$2 from "../../../../components/Feed/Feed.vue.js";
|
|
6
6
|
/* empty css */
|
|
7
|
-
/* empty css
|
|
7
|
+
/* empty css */
|
|
8
8
|
import _sfc_main$1 from "../../../../components/Popup/Popup.vue.js";
|
|
9
9
|
import _sfc_main$3 from "../../../orders/components/blocks/CardOrderItem.vue.js";
|
|
10
10
|
import CardSpot from "../../../spots/components/blocks/CardSpot.vue.js";
|
|
@@ -5,7 +5,7 @@ const vueRouter = require("vue-router");
|
|
|
5
5
|
const Button = require("../../../../components/Button/Button.vue2.cjs");
|
|
6
6
|
const Loader = require("../../../../components/Loader/Loader.vue2.cjs");
|
|
7
7
|
const Media = require("../../../../components/Media/Media.vue.cjs");
|
|
8
|
-
const Dropdown = require("../../../../components/Dropdown/Dropdown.
|
|
8
|
+
const Dropdown = require("../../../../components/Dropdown/Dropdown.vue.cjs");
|
|
9
9
|
const Feed = require("../../../../components/Feed/Feed.vue.cjs");
|
|
10
10
|
const IconPlay = require("../../../icons/navigation/IconPlay.vue.cjs");
|
|
11
11
|
const IconLike = require("../../../icons/navigation/IconLike.vue.cjs");
|
|
@@ -3,7 +3,7 @@ import { useRoute, useRouter } from "vue-router";
|
|
|
3
3
|
import _sfc_main$1 from "../../../../components/Button/Button.vue2.js";
|
|
4
4
|
import Loader from "../../../../components/Loader/Loader.vue2.js";
|
|
5
5
|
import Media from "../../../../components/Media/Media.vue.js";
|
|
6
|
-
import _sfc_main$5 from "../../../../components/Dropdown/Dropdown.
|
|
6
|
+
import _sfc_main$5 from "../../../../components/Dropdown/Dropdown.vue.js";
|
|
7
7
|
import _sfc_main$a from "../../../../components/Feed/Feed.vue.js";
|
|
8
8
|
import _sfc_main$2 from "../../../icons/navigation/IconPlay.vue.js";
|
|
9
9
|
import _sfc_main$4 from "../../../icons/navigation/IconLike.vue.js";
|
|
@@ -5,7 +5,7 @@ const vueRouter = require("vue-router");
|
|
|
5
5
|
const Button = require("../../../../components/Button/Button.vue2.cjs");
|
|
6
6
|
;/* empty css */
|
|
7
7
|
const Media = require("../../../../components/Media/Media.vue.cjs");
|
|
8
|
-
const Dropdown = require("../../../../components/Dropdown/Dropdown.
|
|
8
|
+
const Dropdown = require("../../../../components/Dropdown/Dropdown.vue.cjs");
|
|
9
9
|
const Feed = require("../../../../components/Feed/Feed.vue.cjs");
|
|
10
10
|
const Popup = require("../../../../components/Popup/Popup.vue.cjs");
|
|
11
11
|
const IconPlay = require("../../../icons/navigation/IconPlay.vue.cjs");
|
|
@@ -3,7 +3,7 @@ import { useRoute, useRouter } from "vue-router";
|
|
|
3
3
|
import _sfc_main$1 from "../../../../components/Button/Button.vue2.js";
|
|
4
4
|
/* empty css */
|
|
5
5
|
import Media from "../../../../components/Media/Media.vue.js";
|
|
6
|
-
import _sfc_main$4 from "../../../../components/Dropdown/Dropdown.
|
|
6
|
+
import _sfc_main$4 from "../../../../components/Dropdown/Dropdown.vue.js";
|
|
7
7
|
import _sfc_main$9 from "../../../../components/Feed/Feed.vue.js";
|
|
8
8
|
import _sfc_main$b from "../../../../components/Popup/Popup.vue.js";
|
|
9
9
|
import _sfc_main$2 from "../../../icons/navigation/IconPlay.vue.js";
|
|
@@ -5,7 +5,7 @@ const vueRouter = require("vue-router");
|
|
|
5
5
|
const Button = require("../../../../components/Button/Button.vue2.cjs");
|
|
6
6
|
const Loader = require("../../../../components/Loader/Loader.vue2.cjs");
|
|
7
7
|
const Media = require("../../../../components/Media/Media.vue.cjs");
|
|
8
|
-
const Dropdown = require("../../../../components/Dropdown/Dropdown.
|
|
8
|
+
const Dropdown = require("../../../../components/Dropdown/Dropdown.vue.cjs");
|
|
9
9
|
const Popup = require("../../../../components/Popup/Popup.vue.cjs");
|
|
10
10
|
const Feed = require("../../../../components/Feed/Feed.vue.cjs");
|
|
11
11
|
const IconPlay = require("../../../icons/navigation/IconPlay.vue.cjs");
|
|
@@ -3,7 +3,7 @@ import { useRoute, useRouter } from "vue-router";
|
|
|
3
3
|
import _sfc_main$1 from "../../../../components/Button/Button.vue2.js";
|
|
4
4
|
import Loader from "../../../../components/Loader/Loader.vue2.js";
|
|
5
5
|
import Media from "../../../../components/Media/Media.vue.js";
|
|
6
|
-
import _sfc_main$6 from "../../../../components/Dropdown/Dropdown.
|
|
6
|
+
import _sfc_main$6 from "../../../../components/Dropdown/Dropdown.vue.js";
|
|
7
7
|
import _sfc_main$d from "../../../../components/Popup/Popup.vue.js";
|
|
8
8
|
import _sfc_main$b from "../../../../components/Feed/Feed.vue.js";
|
|
9
9
|
import _sfc_main$2 from "../../../icons/navigation/IconPlay.vue.js";
|
|
@@ -8,7 +8,7 @@ require("../../globals/views/store/globals.cjs");
|
|
|
8
8
|
;/* empty css */
|
|
9
9
|
;/* empty css */
|
|
10
10
|
;/* empty css */
|
|
11
|
-
;/* empty css
|
|
11
|
+
;/* empty css */
|
|
12
12
|
;/* empty css */
|
|
13
13
|
;/* empty css */
|
|
14
14
|
;/* empty css */
|
|
@@ -16,7 +16,7 @@ require("../../globals/views/store/globals.cjs");
|
|
|
16
16
|
;/* empty css */
|
|
17
17
|
;/* empty css */
|
|
18
18
|
;/* empty css */
|
|
19
|
-
;/* empty css
|
|
19
|
+
;/* empty css */
|
|
20
20
|
require("axios");
|
|
21
21
|
;/* empty css */
|
|
22
22
|
require("../store/playlists.cjs");
|
|
@@ -6,7 +6,7 @@ import "../../globals/views/store/globals.js";
|
|
|
6
6
|
/* empty css */
|
|
7
7
|
/* empty css */
|
|
8
8
|
/* empty css */
|
|
9
|
-
/* empty css
|
|
9
|
+
/* empty css */
|
|
10
10
|
/* empty css */
|
|
11
11
|
/* empty css */
|
|
12
12
|
/* empty css */
|
|
@@ -14,7 +14,7 @@ import "../../globals/views/store/globals.js";
|
|
|
14
14
|
/* empty css */
|
|
15
15
|
/* empty css */
|
|
16
16
|
/* empty css */
|
|
17
|
-
/* empty css
|
|
17
|
+
/* empty css */
|
|
18
18
|
import "axios";
|
|
19
19
|
/* empty css */
|
|
20
20
|
import "../store/playlists.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const vue = require("vue");
|
|
4
|
-
const Tooltip = require("../../../../components/Tooltip/Tooltip.
|
|
4
|
+
const Tooltip = require("../../../../components/Tooltip/Tooltip.vue.cjs");
|
|
5
5
|
const IconStatusCreated = require("../icons/IconStatusCreated.vue.cjs");
|
|
6
6
|
const IconStatusConfirmed = require("../icons/IconStatusConfirmed.vue.cjs");
|
|
7
7
|
const IconStatusInUse = require("../icons/IconStatusInUse.vue.cjs");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { computed, createElementBlock, openBlock, createElementVNode, createCommentVNode, normalizeClass, Fragment, renderList, toDisplayString, createVNode, withCtx, createBlock, resolveDynamicComponent } from "vue";
|
|
2
|
-
import _sfc_main$7 from "../../../../components/Tooltip/Tooltip.
|
|
2
|
+
import _sfc_main$7 from "../../../../components/Tooltip/Tooltip.vue.js";
|
|
3
3
|
import _sfc_main$6 from "../icons/IconStatusCreated.vue.js";
|
|
4
4
|
import _sfc_main$5 from "../icons/IconStatusConfirmed.vue.js";
|
|
5
5
|
import _sfc_main$2 from "../icons/IconStatusInUse.vue.js";
|
|
@@ -10,7 +10,7 @@ const CardOrderItem = require("../blocks/CardOrderItem.vue.cjs");
|
|
|
10
10
|
const CardOrganization = require("../../../organizations/components/blocks/CardOrganization.vue.cjs");
|
|
11
11
|
const ChatPage = require("../../../chats/components/pages/ChatPage.vue.cjs");
|
|
12
12
|
const PriceTotal = require("../elements/PriceTotal.vue.cjs");
|
|
13
|
-
;/* empty css
|
|
13
|
+
;/* empty css */
|
|
14
14
|
const globals = require("../../../globals/views/store/globals.cjs");
|
|
15
15
|
const auth = require("../../../auth/views/store/auth.cjs");
|
|
16
16
|
const orders = require("../../store/orders.cjs");
|
|
@@ -8,7 +8,7 @@ import _sfc_main$3 from "../blocks/CardOrderItem.vue.js";
|
|
|
8
8
|
import _sfc_main$5 from "../../../organizations/components/blocks/CardOrganization.vue.js";
|
|
9
9
|
import _sfc_main$6 from "../../../chats/components/pages/ChatPage.vue.js";
|
|
10
10
|
import _sfc_main$4 from "../elements/PriceTotal.vue.js";
|
|
11
|
-
/* empty css
|
|
11
|
+
/* empty css */
|
|
12
12
|
import { state } from "../../../globals/views/store/globals.js";
|
|
13
13
|
import { state as state$1 } from "../../../auth/views/store/auth.js";
|
|
14
14
|
import { actions, state as state$2, getters, mutations } from "../../store/orders.js";
|
|
@@ -4,7 +4,7 @@ const vue = require("vue");
|
|
|
4
4
|
const vueRouter = require("vue-router");
|
|
5
5
|
;/* empty css */
|
|
6
6
|
;/* empty css */
|
|
7
|
-
;/* empty css
|
|
7
|
+
;/* empty css */
|
|
8
8
|
;/* empty css */
|
|
9
9
|
const Field = require("../../../../components/Field/Field.vue.cjs");
|
|
10
10
|
const Radio = require("../../../../components/Radio/Radio.vue.cjs");
|
|
@@ -2,7 +2,7 @@ import { watch, onMounted, computed, createBlock, openBlock, withCtx, createElem
|
|
|
2
2
|
import { useRoute } from "vue-router";
|
|
3
3
|
/* empty css */
|
|
4
4
|
/* empty css */
|
|
5
|
-
/* empty css
|
|
5
|
+
/* empty css */
|
|
6
6
|
/* empty css */
|
|
7
7
|
import Field from "../../../../components/Field/Field.vue.js";
|
|
8
8
|
import _sfc_main$2 from "../../../../components/Radio/Radio.vue.js";
|
|
@@ -4,7 +4,7 @@ const vue = require("vue");
|
|
|
4
4
|
const vueRouter = require("vue-router");
|
|
5
5
|
const Feed = require("../../../../components/Feed/Feed.vue.cjs");
|
|
6
6
|
;/* empty css */
|
|
7
|
-
;/* empty css
|
|
7
|
+
;/* empty css */
|
|
8
8
|
const Popup = require("../../../../components/Popup/Popup.vue.cjs");
|
|
9
9
|
const SectionPageTitle = require("../../../globals/views/components/sections/SectionPageTitle.vue.cjs");
|
|
10
10
|
const MembersAdd = require("../sections/MembersAdd.vue.cjs");
|
|
@@ -2,7 +2,7 @@ import { ref, onMounted, computed, resolveComponent, createElementBlock, openBlo
|
|
|
2
2
|
import { useRoute, useRouter } from "vue-router";
|
|
3
3
|
import _sfc_main$4 from "../../../../components/Feed/Feed.vue.js";
|
|
4
4
|
/* empty css */
|
|
5
|
-
/* empty css
|
|
5
|
+
/* empty css */
|
|
6
6
|
import _sfc_main$2 from "../../../../components/Popup/Popup.vue.js";
|
|
7
7
|
import _sfc_main$1 from "../../../globals/views/components/sections/SectionPageTitle.vue.js";
|
|
8
8
|
import _sfc_main$3 from "../sections/MembersAdd.vue.js";
|
package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.cjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const vue = require("vue");
|
|
4
4
|
const vueRouter = require("vue-router");
|
|
5
|
-
const Dropdown = require("../../../../components/Dropdown/Dropdown.
|
|
5
|
+
const Dropdown = require("../../../../components/Dropdown/Dropdown.vue.cjs");
|
|
6
6
|
const Text = require("../../../../components/Text/Text.vue.cjs");
|
|
7
7
|
const Chips = require("../../../../components/Chips/Chips.vue2.cjs");
|
|
8
8
|
const IconFollowing = require("../../../icons/entities/IconFollowing.vue.cjs");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { resolveComponent, createElementBlock, openBlock, createBlock, createCommentVNode, createElementVNode, createVNode, renderSlot, withCtx, toDisplayString, unref } from "vue";
|
|
2
2
|
import { useRoute } from "vue-router";
|
|
3
|
-
import _sfc_main$1 from "../../../../components/Dropdown/Dropdown.
|
|
3
|
+
import _sfc_main$1 from "../../../../components/Dropdown/Dropdown.vue.js";
|
|
4
4
|
import _sfc_main$7 from "../../../../components/Text/Text.vue.js";
|
|
5
5
|
import _sfc_main$8 from "../../../../components/Chips/Chips.vue2.js";
|
|
6
6
|
import _sfc_main$6 from "../../../icons/entities/IconFollowing.vue.js";
|
|
@@ -7,7 +7,7 @@ const pages = require("../../store/pages.cjs");
|
|
|
7
7
|
const Button = require("../../../../../components/Button/Button.vue2.cjs");
|
|
8
8
|
;/* empty css */
|
|
9
9
|
;/* empty css */
|
|
10
|
-
;/* empty css
|
|
10
|
+
;/* empty css */
|
|
11
11
|
const Constructor = require("../../../../constructor/components/sections/Constructor.vue.cjs");
|
|
12
12
|
const _hoisted_1 = { key: 0 };
|
|
13
13
|
const _hoisted_2 = {
|
|
@@ -5,7 +5,7 @@ import { actions, state } from "../../store/pages.js";
|
|
|
5
5
|
import _sfc_main$2 from "../../../../../components/Button/Button.vue2.js";
|
|
6
6
|
/* empty css */
|
|
7
7
|
/* empty css */
|
|
8
|
-
/* empty css
|
|
8
|
+
/* empty css */
|
|
9
9
|
import _sfc_main$1 from "../../../../constructor/components/sections/Constructor.vue.js";
|
|
10
10
|
const _hoisted_1 = { key: 0 };
|
|
11
11
|
const _hoisted_2 = {
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
3
3
|
const vue = require("vue");
|
|
4
4
|
const IconDiscount = require("../../../icons/entities/IconDiscount.vue.cjs");
|
|
5
5
|
const Chips = require("../../../../components/Chips/Chips.vue2.cjs");
|
|
6
|
-
const Tooltip = require("../../../../components/Tooltip/Tooltip.
|
|
6
|
+
const Tooltip = require("../../../../components/Tooltip/Tooltip.vue.cjs");
|
|
7
7
|
;/* empty css */
|
|
8
8
|
const _pluginVue_exportHelper = require("../../../../../../_virtual/_plugin-vue_export-helper.cjs");
|
|
9
9
|
const _hoisted_1 = { key: 0 };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { computed, createElementBlock, createCommentVNode, openBlock, createElementVNode, createVNode, Fragment, renderList, withCtx, toDisplayString } from "vue";
|
|
2
2
|
import _sfc_main$1 from "../../../icons/entities/IconDiscount.vue.js";
|
|
3
3
|
import _sfc_main$3 from "../../../../components/Chips/Chips.vue2.js";
|
|
4
|
-
import _sfc_main$2 from "../../../../components/Tooltip/Tooltip.
|
|
4
|
+
import _sfc_main$2 from "../../../../components/Tooltip/Tooltip.vue.js";
|
|
5
5
|
/* empty css */
|
|
6
6
|
import _export_sfc from "../../../../../../_virtual/_plugin-vue_export-helper.js";
|
|
7
7
|
const _hoisted_1 = { key: 0 };
|
|
@@ -9,7 +9,7 @@ const UploadImage = require("../../../../components/UploadImage/UploadImage.vue.
|
|
|
9
9
|
const Field = require("../../../../components/Field/Field.vue.cjs");
|
|
10
10
|
;/* empty css */
|
|
11
11
|
;/* empty css */
|
|
12
|
-
;/* empty css
|
|
12
|
+
;/* empty css */
|
|
13
13
|
;/* empty css */
|
|
14
14
|
const IconCheckmark = require("../../../icons/navigation/IconCheckmark.vue.cjs");
|
|
15
15
|
;/* empty css */
|
|
@@ -7,7 +7,7 @@ import _sfc_main$4 from "../../../../components/UploadImage/UploadImage.vue.js";
|
|
|
7
7
|
import Field from "../../../../components/Field/Field.vue.js";
|
|
8
8
|
/* empty css */
|
|
9
9
|
/* empty css */
|
|
10
|
-
/* empty css
|
|
10
|
+
/* empty css */
|
|
11
11
|
/* empty css */
|
|
12
12
|
import _sfc_main$1 from "../../../icons/navigation/IconCheckmark.vue.js";
|
|
13
13
|
/* empty css */
|
|
@@ -4,7 +4,7 @@ const vue = require("vue");
|
|
|
4
4
|
const dayjs_min = require("../../../../../../../../_virtual/dayjs.min.cjs");
|
|
5
5
|
const Tab = require("../../../../../../components/Tab/Tab.vue2.cjs");
|
|
6
6
|
const Button = require("../../../../../../components/Button/Button.vue2.cjs");
|
|
7
|
-
const Dropdown = require("../../../../../../components/Dropdown/Dropdown.
|
|
7
|
+
const Dropdown = require("../../../../../../components/Dropdown/Dropdown.vue.cjs");
|
|
8
8
|
const Calendar = require("../../../../../../components/Calendar/Calendar.vue2.cjs");
|
|
9
9
|
const DateLabel = require("./DateLabel.vue.cjs");
|
|
10
10
|
const IconChevronRight = require("../../../../../icons/navigation/IconChevronRight.vue.cjs");
|
|
@@ -2,7 +2,7 @@ import { computed, ref, watch, createElementBlock, openBlock, createElementVNode
|
|
|
2
2
|
import dayjs from "../../../../../../../../_virtual/dayjs.min.js";
|
|
3
3
|
import _sfc_main$2 from "../../../../../../components/Tab/Tab.vue2.js";
|
|
4
4
|
import _sfc_main$3 from "../../../../../../components/Button/Button.vue2.js";
|
|
5
|
-
import _sfc_main$4 from "../../../../../../components/Dropdown/Dropdown.
|
|
5
|
+
import _sfc_main$4 from "../../../../../../components/Dropdown/Dropdown.vue.js";
|
|
6
6
|
import Calendar from "../../../../../../components/Calendar/Calendar.vue2.js";
|
|
7
7
|
import _sfc_main$1 from "./DateLabel.vue.js";
|
|
8
8
|
import IconNext from "../../../../../icons/navigation/IconChevronRight.vue.js";
|
|
@@ -6,7 +6,7 @@ const vueI18n = require("vue-i18n");
|
|
|
6
6
|
;/* empty css */
|
|
7
7
|
;/* empty css */
|
|
8
8
|
;/* empty css */
|
|
9
|
-
;/* empty css
|
|
9
|
+
;/* empty css */
|
|
10
10
|
const globals = require("../../../globals/views/store/globals.cjs");
|
|
11
11
|
const categories = require("../../../products/store/categories.cjs");
|
|
12
12
|
const marketplace = require("../../../marketplace/views/store/marketplace.cjs");
|
|
@@ -4,7 +4,7 @@ import { useI18n } from "vue-i18n";
|
|
|
4
4
|
/* empty css */
|
|
5
5
|
/* empty css */
|
|
6
6
|
/* empty css */
|
|
7
|
-
/* empty css
|
|
7
|
+
/* empty css */
|
|
8
8
|
import { state as state$1 } from "../../../globals/views/store/globals.js";
|
|
9
9
|
import { actions, state as state$2 } from "../../../products/store/categories.js";
|
|
10
10
|
import { state } from "../../../marketplace/views/store/marketplace.js";
|
|
@@ -8,8 +8,8 @@ const wallet = require("../../localization/wallet.json.cjs");
|
|
|
8
8
|
const Popup = require("../../../../../components/Popup/Popup.vue.cjs");
|
|
9
9
|
const Button = require("../../../../../components/Button/Button.vue2.cjs");
|
|
10
10
|
require("vue-router");
|
|
11
|
-
;/* empty css
|
|
12
|
-
;/* empty css
|
|
11
|
+
;/* empty css */
|
|
12
|
+
;/* empty css */
|
|
13
13
|
;/* empty css */
|
|
14
14
|
require("../../../../reports/store/reports.cjs");
|
|
15
15
|
require("../../../../auth/views/store/auth.cjs");
|
|
@@ -6,8 +6,8 @@ import text from "../../localization/wallet.json.js";
|
|
|
6
6
|
import _sfc_main$3 from "../../../../../components/Popup/Popup.vue.js";
|
|
7
7
|
import _sfc_main$1 from "../../../../../components/Button/Button.vue2.js";
|
|
8
8
|
import "vue-router";
|
|
9
|
-
/* empty css
|
|
10
|
-
/* empty css
|
|
9
|
+
/* empty css */
|
|
10
|
+
/* empty css */
|
|
11
11
|
/* empty css */
|
|
12
12
|
import "../../../../reports/store/reports.js";
|
|
13
13
|
import "../../../../auth/views/store/auth.js";
|
package/package.json
CHANGED
|
@@ -22,9 +22,9 @@ class GlobalWebSocket {
|
|
|
22
22
|
initialize(options = {}) {
|
|
23
23
|
console.log('WSS initialize options:', options);
|
|
24
24
|
console.log('options.wsUrl:', options.wsUrl);
|
|
25
|
-
console.log('window.location.protocol:', window.location.protocol);
|
|
26
|
-
console.log('window.location.host:', window.location.host);
|
|
27
|
-
|
|
25
|
+
if (typeof window !== 'undefined') console.log('window.location.protocol:', window.location.protocol);
|
|
26
|
+
if (typeof window !== 'undefined') console.log('window.location.host:', window.location.host);
|
|
27
|
+
|
|
28
28
|
this.maxReconnectAttempts = options.maxReconnectAttempts || this.maxReconnectAttempts;
|
|
29
29
|
this.reconnectDelay = options.reconnectDelay || this.reconnectDelay;
|
|
30
30
|
this.baseUrl = options.wsUrl || this._getDefaultWsUrl();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Dropdown.vue2.cjs","sources":["../../../../../src/components/Dropdown/Dropdown.vue"],"sourcesContent":["<template>\n <div class=\"dropdown pos-relative\" v-click-outside=\"clickedOutside\" @click.stop=\"isOpen = !isOpen\">\n <div v-if=\"isComponentLabel\" class=\"w-100 h-100 flex-center flex\">\n <component :is=\"label.component\" v-bind=\"label.props\" :class=\"label.class\"></component>\n </div>\n <div v-else>\n {{ label }}\n </div>\n <transition name=\"TransitionTranslateY\" mode=\"out-in\">\n <div \n v-show=\"isOpen\" \n :style=\"{ left: align === 'left' ? '0' : 'auto', right: align === 'right' ? '0' : 'auto' }\" \n class=\"dropdown-content radius-big\" \n >\n <slot></slot>\n </div>\n </transition>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed } from 'vue';\nimport clickOutside from '../FieldPhone/click-outside.js';\n\nlet vClickOutside = clickOutside\n\nconst props = defineProps({\n label: {\n type: [String, Object],\n default: 'Open'\n },\n align: {\n type: String,\n default: 'left'\n }\n})\n\nconst isOpen = ref(false);\nconst isComponentLabel = computed(() => typeof props.label === 'object');\n\nfunction clickedOutside () {\n isOpen.value = false\n}\n</script>\n\n<style >\n.dropdown-content {\n display: block;\n position: absolute;\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n z-index: 1;\n}\n\n/*.dropdown:hover .dropdown-content {\n display: block;\n}*/\n</style>\n"],"names":["clickOutside","ref","computed"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAwBA,QAAI,gBAAgBA,aAAAA;AAEpB,UAAM,QAAQ;AAWd,UAAM,SAASC,IAAAA,IAAI,KAAK;AACxB,UAAM,mBAAmBC,IAAAA,SAAS,MAAM,OAAO,MAAM,UAAU,QAAQ;AAEvE,aAAS,iBAAkB;AACzB,aAAO,QAAQ;AAAA,IACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.vue2.cjs","sources":["../../../../../src/components/Tooltip/Tooltip.vue"],"sourcesContent":["<template>\n <div class=\"cursor-pointer tooltip-container\" @mouseover=\"showTooltip\" @mouseleave=\"hideTooltip\">\n <slot></slot>\n <div class=\"tooltip-content\" :style=\"tooltipStyle\">\n <span>{{ text }}</span>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, reactive } from 'vue';\n\nconst props = defineProps({\n text: {\n type: String,\n required: true\n }\n});\n\nconst visible = ref(false);\n\nconst tooltipStyle = reactive({\n position: 'absolute',\n width: 'max-content',\n zIndex: 1000,\n background: '#333',\n color: '#fff',\n padding: '5px',\n borderRadius: '3px',\n fontSize: '14px',\n display: 'none',\n});\n\nfunction showTooltip(event) {\n visible.value = true;\n tooltipStyle.left = `${(event.clientX / 100) + 10 }px`;\n tooltipStyle.top = `${(event.clientY / 100) + 10 }px`;\n tooltipStyle.display = 'block';\n}\n\nfunction hideTooltip() {\n visible.value = false;\n tooltipStyle.display = 'none';\n}\n</script>\n\n<style >\n.tooltip-container {\n position: relative;\n display: inline-block;\n}\n\n.tooltip-content {\n pointer-events: none;\n}\n</style>"],"names":["ref","reactive"],"mappings":";;;;;;;;;;;;;AAmBA,UAAM,UAAUA,IAAAA,IAAI,KAAK;AAEzB,UAAM,eAAeC,IAAAA,SAAS;AAAA,MAC5B,UAAU;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,SAAS;AAAA,MACT,cAAc;AAAA,MACd,UAAU;AAAA,MACV,SAAS;AAAA,IACX,CAAC;AAED,aAAS,YAAY,OAAO;AAC1B,cAAQ,QAAQ;AAChB,mBAAa,OAAO,GAAI,MAAM,UAAU,MAAO,EAAE;AACjD,mBAAa,MAAM,GAAI,MAAM,UAAU,MAAO,EAAE;AAChD,mBAAa,UAAU;AAAA,IACzB;AAEA,aAAS,cAAc;AACrB,cAAQ,QAAQ;AAChB,mBAAa,UAAU;AAAA,IACzB;;;;;;;;;;;;;;;;;;;"}
|