@necrolab/dashboard 0.4.61 → 0.4.209

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.
Files changed (133) hide show
  1. package/.prettierrc +1 -27
  2. package/.vscode/extensions.json +1 -1
  3. package/README.md +2 -64
  4. package/backend/api.js +48 -40
  5. package/backend/auth.js +3 -3
  6. package/backend/batching.js +1 -1
  7. package/backend/endpoints.js +76 -12
  8. package/backend/index.js +2 -2
  9. package/backend/mock-data.js +36 -27
  10. package/backend/mock-src/classes/logger.js +8 -8
  11. package/backend/mock-src/classes/utils.js +3 -7
  12. package/backend/mock-src/database.js +0 -0
  13. package/backend/mock-src/ticketmaster.js +79 -79
  14. package/backend/validator.js +2 -2
  15. package/config/configs.json +3 -2
  16. package/config/filter.json +3 -2
  17. package/index.html +8 -79
  18. package/index.js +1 -1
  19. package/package.json +25 -40
  20. package/postcss.config.js +1 -1
  21. package/postinstall.js +17 -98
  22. package/public/android-chrome-192x192.png +0 -0
  23. package/public/android-chrome-512x512.png +0 -0
  24. package/public/apple-touch-icon.png +0 -0
  25. package/public/favicon-16x16.png +0 -0
  26. package/public/favicon-32x32.png +0 -0
  27. package/public/favicon.ico +0 -0
  28. package/public/manifest.json +7 -12
  29. package/public/sw.js +2 -0
  30. package/public/workbox-49fdaf31.js +2 -0
  31. package/public/workbox-49fdaf31.js.map +1 -0
  32. package/public/workbox-88575b92.js +2 -0
  33. package/public/workbox-88575b92.js.map +1 -0
  34. package/public/workbox-a67a7b11.js +2 -0
  35. package/public/workbox-a67a7b11.js.map +1 -0
  36. package/public/workbox-d4314735.js +2 -0
  37. package/public/workbox-d4314735.js.map +1 -0
  38. package/public/workbox-e0f89ef3.js +2 -0
  39. package/public/workbox-e0f89ef3.js.map +1 -0
  40. package/run +9 -176
  41. package/src/App.vue +85 -498
  42. package/src/assets/css/_input.scss +99 -144
  43. package/src/assets/css/main.scss +99 -450
  44. package/src/assets/img/background.svg +2 -2
  45. package/src/assets/img/logo_icon.png +0 -0
  46. package/src/components/Auth/LoginForm.vue +11 -62
  47. package/src/components/Editors/Account/Account.vue +40 -116
  48. package/src/components/Editors/Account/AccountCreator.vue +39 -88
  49. package/src/components/Editors/Account/AccountView.vue +34 -102
  50. package/src/components/Editors/Account/CreateAccount.vue +32 -80
  51. package/src/components/Editors/Profile/CreateProfile.vue +83 -269
  52. package/src/components/Editors/Profile/Profile.vue +47 -132
  53. package/src/components/Editors/Profile/ProfileCountryChooser.vue +20 -82
  54. package/src/components/Editors/Profile/ProfileView.vue +34 -91
  55. package/src/components/Editors/TagLabel.vue +6 -67
  56. package/src/components/Filter/Filter.vue +72 -289
  57. package/src/components/Filter/FilterPreview.vue +30 -171
  58. package/src/components/Filter/PriceSortToggle.vue +4 -74
  59. package/src/components/Table/Header.vue +1 -1
  60. package/src/components/Table/Row.vue +1 -1
  61. package/src/components/Table/Table.vue +2 -19
  62. package/src/components/Tasks/CheckStock.vue +13 -28
  63. package/src/components/Tasks/Controls/DesktopControls.vue +17 -17
  64. package/src/components/Tasks/Controls/MobileControls.vue +45 -8
  65. package/src/components/Tasks/CreateTaskAXS.vue +73 -79
  66. package/src/components/Tasks/CreateTaskTM.vue +142 -94
  67. package/src/components/Tasks/MassEdit.vue +7 -9
  68. package/src/components/Tasks/QuickSettings.vue +55 -169
  69. package/src/components/Tasks/ScrapeVenue.vue +4 -7
  70. package/src/components/Tasks/Stats.vue +23 -52
  71. package/src/components/Tasks/Task.vue +135 -377
  72. package/src/components/Tasks/TaskView.vue +47 -107
  73. package/src/components/Tasks/Utilities.vue +6 -5
  74. package/src/components/icons/Bag.vue +1 -1
  75. package/src/components/icons/Loyalty.vue +1 -1
  76. package/src/components/icons/Mail.vue +2 -2
  77. package/src/components/icons/Play.vue +2 -2
  78. package/src/components/icons/Reload.vue +5 -4
  79. package/src/components/icons/Sandclock.vue +2 -2
  80. package/src/components/icons/Stadium.vue +1 -1
  81. package/src/components/icons/index.js +1 -24
  82. package/src/components/ui/Modal.vue +13 -105
  83. package/src/components/ui/Navbar.vue +37 -170
  84. package/src/components/ui/ReconnectIndicator.vue +55 -351
  85. package/src/components/ui/Splash.vue +35 -5
  86. package/src/components/ui/controls/CountryChooser.vue +62 -200
  87. package/src/components/ui/controls/atomic/Checkbox.vue +10 -119
  88. package/src/components/ui/controls/atomic/Dropdown.vue +39 -208
  89. package/src/components/ui/controls/atomic/MultiDropdown.vue +37 -300
  90. package/src/libs/Filter.js +170 -200
  91. package/src/registerServiceWorker.js +1 -1
  92. package/src/stores/connection.js +53 -51
  93. package/src/stores/logger.js +3 -11
  94. package/src/stores/sampleData.js +201 -173
  95. package/src/stores/ui.js +44 -112
  96. package/src/stores/utils.js +6 -90
  97. package/src/views/Accounts.vue +35 -44
  98. package/src/views/Console.vue +90 -341
  99. package/src/views/Editor.vue +123 -1176
  100. package/src/views/FilterBuilder.vue +251 -607
  101. package/src/views/Login.vue +14 -76
  102. package/src/views/Profiles.vue +25 -44
  103. package/src/views/Tasks.vue +100 -187
  104. package/static/offline.html +50 -192
  105. package/tailwind.config.js +26 -104
  106. package/vite.config.js +16 -73
  107. package/vue.config.js +32 -0
  108. package/workbox-config.js +11 -0
  109. package/artwork/image.png +0 -0
  110. package/dev-server.js +0 -136
  111. package/exit +0 -209
  112. package/jsconfig.json +0 -16
  113. package/src/assets/css/_utilities.scss +0 -388
  114. package/src/assets/img/background.svg.backup +0 -11
  115. package/src/components/icons/Check.vue +0 -5
  116. package/src/components/icons/Close.vue +0 -21
  117. package/src/components/icons/CloseX.vue +0 -5
  118. package/src/components/icons/Key.vue +0 -21
  119. package/src/components/icons/Pencil.vue +0 -21
  120. package/src/components/icons/Profile.vue +0 -18
  121. package/src/components/icons/Sell.vue +0 -21
  122. package/src/components/icons/Spinner.vue +0 -42
  123. package/src/components/icons/SquareCheck.vue +0 -18
  124. package/src/components/icons/SquareUncheck.vue +0 -18
  125. package/src/components/icons/Wildcard.vue +0 -18
  126. package/src/components/ui/controls/atomic/LoadingButton.vue +0 -45
  127. package/src/composables/useClickOutside.js +0 -21
  128. package/src/composables/useDropdownPosition.js +0 -174
  129. package/src/types/index.js +0 -41
  130. package/src/utils/debug.js +0 -1
  131. package/switch-branch.sh +0 -41
  132. package/workbox-config.cjs +0 -63
  133. /package/src/assets/img/{logo_icon-old.png → logo_icon_2.png} +0 -0
@@ -1,61 +1,76 @@
1
1
  <template>
2
- <Modal class="max-w-screen overflow-y-scroll">
2
+ <Modal class="overflow-y-scroll max-w-screen">
3
3
  <template #header>
4
4
  Create Task
5
5
  <img src="@/assets/img/pencil.svg" class="ml-4" />
6
6
  </template>
7
7
 
8
+ <!-- <div v-if="displayConfigSelector" class="w-3/12 input-wrapper z-inf2 mt-4">
9
+ <div class="dropdown input-default p-2">
10
+ <span class="flex justify-between items-center z-inf2 text-white">
11
+ <span class="text-sm">Load config</span>
12
+ <DownIcon class="absolute right-5" />
13
+ </span>
14
+ <div class="dropdown-content z-inf2">
15
+ <div
16
+ v-bind:key="opt.name"
17
+ class="py-1 my-1 cursor-pointer"
18
+ v-for="opt in addTaskConfigs"
19
+ @click="useConfig(opt.config)"
20
+ >
21
+ <p>{{ opt.name }}</p>
22
+ </div>
23
+ </div>
24
+ </div>
25
+ </div> -->
26
+
8
27
  <!-- Task Form -->
9
- <div class="form-grid mb-4 mt-4">
28
+ <div class="grid grid-cols-2 gap-x-4 gap-y-4 mt-4 mb-4">
10
29
  <!-- Event ID -->
11
30
  <div class="input-wrapper">
12
- <label class="label-override mb-2">
13
- Event ID
31
+ <label class="label-override mb-2"
32
+ >Event ID
14
33
  <StadiumIcon />
15
34
  </label>
16
- <div class="input-default required">
17
- <input placeholder="827474" v-model="task.eventId" required />
35
+ <div class="input-default">
36
+ <input placeholder="827474" v-model="task.eventId" />
37
+ <span class="text-red-400 my-auto mr-2 mt-3">* </span>
18
38
  </div>
19
39
  </div>
20
40
  <!-- Email -->
21
41
  <div class="input-wrapper">
22
- <label class="label-override mb-2">
23
- Email
42
+ <label class="label-override mb-2"
43
+ >Email
24
44
  <MailIcon />
25
45
  </label>
26
46
  <div class="input-default">
27
- <input
28
- placeholder="Email"
29
- v-model="task.email"
30
- autocomplete="off"
31
- data-form-type="other"
32
- name="axs_email_not_for_auth" />
47
+ <input placeholder="Email" v-model="task.email" />
33
48
  </div>
34
49
  </div>
35
50
  <!-- Proxy -->
36
51
  <div class="input-wrapper">
37
- <label class="label-override mb-2">
38
- Proxy
52
+ <label class="label-override mb-2"
53
+ >Proxy
39
54
  <CameraIcon />
40
55
  </label>
41
56
  <div class="input-default">
42
- <input placeholder="Proxy" v-model="task.proxy" autocomplete="off" />
57
+ <input placeholder="Proxy" v-model="task.proxy" />
43
58
  </div>
44
59
  </div>
45
60
  <!-- Presale Code -->
46
61
  <div class="input-wrapper">
47
- <label class="label-override mb-2">
48
- Presale Code
62
+ <label class="label-override mb-2"
63
+ >Presale Code
49
64
  <AwardIcon />
50
65
  </label>
51
66
  <div class="input-default">
52
- <input placeholder="Code" v-model="task.presaleCode" maxlength="15" autocomplete="off" />
67
+ <input placeholder="Code" v-model="task.presaleCode" maxlength="15" />
53
68
  </div>
54
69
  </div>
55
70
  <!-- Ticket Quantity -->
56
71
  <div class="input-wrapper">
57
- <label class="label-override mb-2">
58
- Ticket Quantity
72
+ <label class="label-override mb-2"
73
+ >Ticket Quantity
59
74
  <BagIcon />
60
75
  </label>
61
76
  <div class="input-default">
@@ -72,10 +87,7 @@
72
87
  </div>
73
88
  <!-- Ticket Quantity -->
74
89
  <div class="input-wrapper">
75
- <label class="label-override mb-2">
76
- Amount
77
- <span class="ml-2 h-[18px]">#</span>
78
- </label>
90
+ <label class="label-override mb-2">Amount <span class="ml-2" style="height: 18px">#</span></label>
79
91
  <div class="input-default">
80
92
  <input placeholder="20" min="1" type="number" pattern="\d*" v-model="task.taskQuantity" />
81
93
  <div class="input-incrementer">
@@ -90,26 +102,27 @@
90
102
  </div>
91
103
 
92
104
  <!-- Profile Tag(s) -->
93
- <div class="input-wrapper relative-positioned z-tooltip">
94
- <label class="label-override mb-2">
95
- Profile Tag(s)
105
+ <div class="input-wrapper" style="z-index: 50 !important">
106
+ <label class="label-override mb-2"
107
+ >Profile Tag(s)
96
108
  <TagIcon />
97
109
  </label>
98
110
  <MultiDropdown
99
- class="input-default w-full will-change-auto"
111
+ class="w-full will-change-auto input-default"
100
112
  :onSelect="(v) => (task.profileTags = v)"
101
113
  default="Any"
102
114
  :options="
103
115
  profileTagsOptions.map((opt) => {
104
116
  return { label: opt, value: opt };
105
117
  })
106
- " />
118
+ "
119
+ />
107
120
  </div>
108
121
 
109
122
  <!-- Account Tag -->
110
- <div class="input-wrapper relative-positioned z-dropdown">
111
- <label class="label-override mb-2">
112
- Account Tag
123
+ <div class="input-wrapper">
124
+ <label class="label-override mb-2"
125
+ >Account Tag
113
126
  <ScannerIcon />
114
127
  </label>
115
128
 
@@ -120,22 +133,20 @@
120
133
  :options="accountTagOptions"
121
134
  :allowDefault="false"
122
135
  :capitalize="true"
123
- class="input-default dropdown w-full p-4" />
136
+ class="input-default dropdown p-4 w-full"
137
+ />
124
138
  </div>
125
139
 
126
140
  <div class="input-wrapper">
127
- <label class="label-override mb-2">
128
- Start Offset (Minutes)
129
- <ShieldIcon />
130
- </label>
141
+ <label class="label-override mb-2">Start Offset (Minutes)<ShieldIcon /></label>
131
142
  <div class="input-default">
132
143
  <input placeholder="120" type="number" pattern="\d*" v-model="task.startOffset" />
133
144
  </div>
134
145
  </div>
135
146
 
136
147
  <div class="input-wrapper">
137
- <label class="label-override mb-2">
138
- Promo ID
148
+ <label class="label-override mb-2"
149
+ >Promo ID
139
150
  <AwardIcon />
140
151
  </label>
141
152
  <div class="input-default">
@@ -143,9 +154,9 @@
143
154
  </div>
144
155
  </div>
145
156
  </div>
146
- <div class="mb-3 border border-dark-650" />
157
+ <div class="border border-light-300 mb-3" />
147
158
  <!-- Task Switches -->
148
- <div class="task-switches mb-4 grid grid-cols-4 justify-between gap-y-4">
159
+ <div class="grid grid-cols-4 gap-y-4 mb-4 justify-between task-switches">
149
160
  <div class="switch-wrapper flex flex-col">
150
161
  <h4>
151
162
  <span class="hidden xs:block">Do Not Pay</span>
@@ -165,23 +176,24 @@
165
176
  <div class="switch-wrapper flex flex-col">
166
177
  <h4>
167
178
  <span class="hidden xs:block">Quick Queue</span>
168
- <span class="block xs:hidden">Quick Q.</span>
169
- <SkiIcon class="scale-90" />
179
+ <span class="block xs:hidden">Quick Q.</span> <SkiIcon class="scale-90" />
170
180
  </h4>
171
181
  <Switch class="mx-auto" v-model="task.quickQueue" />
172
182
  </div>
173
183
  <div class="switch-wrapper flex flex-col">
174
184
  <h4>
175
- Manual
176
- <HandIcon />
185
+ <span class="hidden xs:block">Manual</span>
177
186
  </h4>
178
187
  <Switch class="mx-auto" v-model="task.manual" />
179
188
  </div>
180
189
  </div>
181
190
 
182
191
  <!-- Task prefab -->
183
- <div class="my-3 border border-dark-650" />
184
- <button class="btn-action mx-auto" @click="createTask">
192
+ <div class="border border-light-300 my-3" />
193
+ <button
194
+ class="button-default hover:opacity-70 active:opacity-50 bg-dark-400 w-48 text-xs mx-auto flex items-center justify-center gap-x-2"
195
+ @click="createTask"
196
+ >
185
197
  Create
186
198
  <EditIcon />
187
199
  </button>
@@ -190,7 +202,6 @@
190
202
 
191
203
  <script setup>
192
204
  import { ref, watch } from "vue";
193
- import { countries } from "@/stores/countries";
194
205
  import Modal from "@/components/ui/Modal.vue";
195
206
  import Switch from "@/components/ui/controls/atomic/Switch.vue";
196
207
  import {
@@ -216,16 +227,15 @@ import {
216
227
  import { useUIStore } from "@/stores/ui";
217
228
  import Dropdown from "@/components/ui/controls/atomic/Dropdown.vue";
218
229
  import MultiDropdown from "@/components/ui/controls/atomic/MultiDropdown.vue";
219
- import { firstUpper, parseAxsEventUrl, removeDuplicates } from "@/stores/utils";
230
+ import { isEU, removeDuplicates } from "@/stores/utils";
220
231
 
221
232
  const ui = useUIStore();
222
233
 
223
- const accountTagOptions = ref(ui.profile.tags);
234
+ const accountTagOptions = ref(ui.profile.accountTags);
224
235
  const defaultTags = ["Amex", "Visa", "Master"];
225
236
 
226
- const profileTagsOptions = ref(
227
- removeDuplicates(["Any", ...defaultTags, ...ui.profile.profileTags.map((x) => firstUpper(x))])
228
- );
237
+ const profileTagsOptions = ref(removeDuplicates(["Any", ...defaultTags, ...ui.profile.profileTags]));
238
+
229
239
  const baseTask = ref({
230
240
  selected: false,
231
241
  taskId: "",
@@ -251,7 +261,7 @@ const baseTask = ref({
251
261
  const task = ref(ui.modalData[`task_${ui.currentCountry.siteId}`] || baseTask);
252
262
 
253
263
  function createTask() {
254
- ui.logger.Info("Created new task", task.value.taskId);
264
+ ui.logger.Info("Created new task", task.value);
255
265
  const eventIds = task.value.eventId.split(",").map((t) => t.trim());
256
266
  const presaleCodes = task.value.presaleCode ? task.value.presaleCode.split(",").map((t) => t.trim()) : [undefined];
257
267
  eventIds.forEach((eventId) => {
@@ -274,28 +284,12 @@ watch(
274
284
  }
275
285
  );
276
286
 
277
- watch(
278
- () => task.value,
279
- () => (ui.modalData[`task_${ui.currentCountry.siteId}`] = task.value),
280
- { deep: true }
281
- );
287
+ watch(() => task.value, (ui.modalData[`task_${ui.currentCountry.siteId}`] = task.value));
282
288
 
283
289
  watch(
284
290
  () => task.value.eventId,
285
291
  (url) => {
286
292
  ui.logger.Info("URL changed", url);
287
- if (!url.includes("https://")) return;
288
- try {
289
- const parsed = parseAxsEventUrl(url);
290
- const country = countries.AXS.find((c) => c.siteId === parsed.siteId);
291
- if (country) ui.setCurrentCountry(country, false, ui.currentModule);
292
-
293
- task.value.eventId = parsed.eventId;
294
- debugger;
295
- if (parsed.promoId) task.value.promoId = parsed.promoId;
296
- } catch (ex) {
297
- ui.logger.Error("Could not parse url (2)", ex);
298
- }
299
293
  }
300
294
  );
301
295
 
@@ -305,7 +299,7 @@ watch(
305
299
  <style lang="scss" scoped>
306
300
  .label-override {
307
301
  @apply flex;
308
- color: #e1e1e4 !important;
302
+ color: #6e7084 !important;
309
303
 
310
304
  img {
311
305
  @apply ml-2;
@@ -314,8 +308,8 @@ watch(
314
308
 
315
309
  .task-switches {
316
310
  h4 {
317
- color: #e1e1e4;
318
- @apply mx-auto flex items-center gap-x-2 text-center text-xs;
311
+ color: #6e7084;
312
+ @apply text-xs text-center flex items-center gap-x-2 mx-auto;
319
313
  }
320
314
 
321
315
  .switch-wrapper {
@@ -331,13 +325,13 @@ watch(
331
325
  }
332
326
  }
333
327
  </style>
334
- <style lang="scss" scoped>
328
+ <style lang="scss">
335
329
  .label-override {
336
330
  svg {
337
331
  @apply ml-2;
338
332
 
339
333
  path {
340
- fill: #e1e1e4 !important;
334
+ fill: #6e7084 !important;
341
335
  }
342
336
  }
343
337
  @apply flex items-center;
@@ -346,7 +340,7 @@ watch(
346
340
  .switch-wrapper {
347
341
  svg {
348
342
  path {
349
- fill: #a0a0a6 !important;
343
+ fill: #6e7084 !important;
350
344
  }
351
345
  }
352
346
  }