@betarena/ad-engine 0.0.6 → 0.0.7
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/.eslintrc.yaml +164 -0
- package/package.json +34 -14
- package/src/App.svelte +8 -0
- package/src/lib/Widget-AdEngine.svelte +492 -0
- package/src/lib/Widget-AdGeneral.svelte +284 -0
- package/src/lib/Widget-AdvertSlide.svelte +384 -0
- package/src/lib/assets/icon-close.svg +9 -0
- package/src/lib/assets/icon-external-link.svg +4 -0
- package/src/lib/constants/instance.ts +10 -0
- package/src/lib/store.ts +284 -0
- package/src/lib/types/ad-engine.d.ts +21 -0
- package/src/lib/types/geojs.d.ts +83 -0
- package/src/lib/types/global.d.ts +4 -0
- package/src/lib/types/vite-env.d.ts +2 -0
- package/src/lib/utils/device.ts +37 -0
- package/src/lib/utils/fetch.ts +107 -0
- package/src/lib/utils/geo.ts +34 -0
- package/src/main.ts +17 -0
- package/vite.config.ts +29 -3
- package/dist/assets/index-Cm9IxoHj.js +0 -24
- package/dist/index.html +0 -13
- package/dist/vite.svg +0 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<svg width="23" height="23" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
2
|
+
<rect width="23" height="23" fill="url(#pattern0)"/>
|
|
3
|
+
<defs>
|
|
4
|
+
<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
|
|
5
|
+
<use xlink:href="#image0_1860_172" transform="scale(0.005)"/>
|
|
6
|
+
</pattern>
|
|
7
|
+
<image id="image0_1860_172" width="200" height="200" xlink:href="data:image/png;base64,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"/>
|
|
8
|
+
</defs>
|
|
9
|
+
</svg>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg width="15" height="14" viewBox="0 0 15 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M13.1215 1.08392L1.64569 12.5597" stroke="white" stroke-width="1.73876" stroke-linecap="round" stroke-linejoin="round"/>
|
|
3
|
+
<path d="M5.06506 1.02606L13.1213 1.08286L13.1793 9.14027" stroke="white" stroke-width="1.73876" stroke-linecap="round" stroke-linejoin="round"/>
|
|
4
|
+
</svg>
|
package/src/lib/store.ts
ADDED
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
// ╭──────────────────────────────────────────────────────────────────────────────────╮
|
|
2
|
+
// │ 📌 High Order Component Overview │
|
|
3
|
+
// ┣──────────────────────────────────────────────────────────────────────────────────┫
|
|
4
|
+
// │ ➤ Internal Svelte Code Format :|: V.8.0 │
|
|
5
|
+
// │ ➤ Status :|: 🔒 LOCKED │
|
|
6
|
+
// │ ➤ Author(s) :|: @migbash │
|
|
7
|
+
// ┣──────────────────────────────────────────────────────────────────────────────────┫
|
|
8
|
+
// │ 📝 Description │
|
|
9
|
+
// ┣──────────────────────────────────────────────────────────────────────────────────┫
|
|
10
|
+
// │ > Client 'Svelte/Store' with 'LocalStorage' Persistance │
|
|
11
|
+
// ╰──────────────────────────────────────────────────────────────────────────────────╯
|
|
12
|
+
|
|
13
|
+
/* eslint-disable camelcase */
|
|
14
|
+
|
|
15
|
+
// #region ➤ 📦 Package Imports
|
|
16
|
+
|
|
17
|
+
import { writable } from 'svelte/store';
|
|
18
|
+
|
|
19
|
+
import type { IAdEngineStore } from './types/ad-engine.js';
|
|
20
|
+
|
|
21
|
+
// #endregion ➤ 📦 Package Imports
|
|
22
|
+
|
|
23
|
+
// #region ➤ 📌 VARIABLES
|
|
24
|
+
|
|
25
|
+
const
|
|
26
|
+
/**
|
|
27
|
+
* @description
|
|
28
|
+
* 📣 Target `data` store.
|
|
29
|
+
*/
|
|
30
|
+
userSettings: IAdEngineStore
|
|
31
|
+
= {
|
|
32
|
+
isBetarenaAdShownForToday: false,
|
|
33
|
+
advertDateLastShown: null
|
|
34
|
+
}
|
|
35
|
+
;
|
|
36
|
+
|
|
37
|
+
type IDataProp =
|
|
38
|
+
| 'toggleAdShownState'
|
|
39
|
+
;
|
|
40
|
+
|
|
41
|
+
// #endregion ➤ 📌 VARIABLES
|
|
42
|
+
|
|
43
|
+
// #region ➤ 🛠️ METHODS
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @author
|
|
47
|
+
* @migbash
|
|
48
|
+
* @summary
|
|
49
|
+
* 🟥 MAIN
|
|
50
|
+
* @description
|
|
51
|
+
* - 📣 Initializer of `svelte/stores` method.
|
|
52
|
+
* - 📣 Uses `localStorage` persistance.
|
|
53
|
+
* @param { string } key
|
|
54
|
+
* 💠 Target `key` to use for `svelte-stores` / `localStorage`.
|
|
55
|
+
* @return
|
|
56
|
+
* 📤 Store logic.
|
|
57
|
+
*/
|
|
58
|
+
function createLocalStore
|
|
59
|
+
(
|
|
60
|
+
key: string
|
|
61
|
+
)
|
|
62
|
+
{
|
|
63
|
+
const
|
|
64
|
+
/**
|
|
65
|
+
* @description
|
|
66
|
+
* 📣 Default 'svelte/store' exports.
|
|
67
|
+
*/
|
|
68
|
+
{
|
|
69
|
+
subscribe,
|
|
70
|
+
set,
|
|
71
|
+
update
|
|
72
|
+
} = writable
|
|
73
|
+
(
|
|
74
|
+
userSettings
|
|
75
|
+
),
|
|
76
|
+
/**
|
|
77
|
+
* @description
|
|
78
|
+
* 📣 complementary `store` added methods.
|
|
79
|
+
*/
|
|
80
|
+
methods
|
|
81
|
+
= {
|
|
82
|
+
// ╭──────────────────────────────────────────────────────────────────────────────────╮
|
|
83
|
+
// │ 🟦 Local Helper Logic │
|
|
84
|
+
// ╰──────────────────────────────────────────────────────────────────────────────────╯
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @author
|
|
88
|
+
* @migbash
|
|
89
|
+
* @summary
|
|
90
|
+
* - 🟥 MAIN
|
|
91
|
+
* - 🔹 HELPER
|
|
92
|
+
* - IMPORTANT
|
|
93
|
+
* @description
|
|
94
|
+
* 📣 Instantiate `localStorage` data for target `key`.
|
|
95
|
+
* @return { void }
|
|
96
|
+
*/
|
|
97
|
+
useLocalStorage:
|
|
98
|
+
(
|
|
99
|
+
): void =>
|
|
100
|
+
{
|
|
101
|
+
let
|
|
102
|
+
localStore = methods.parseLocalStorage()
|
|
103
|
+
;
|
|
104
|
+
|
|
105
|
+
// [🐞]
|
|
106
|
+
// console.log('localStore', localStore);
|
|
107
|
+
|
|
108
|
+
// ╭─────
|
|
109
|
+
// │ CHECK :|: for absent localstorage object.
|
|
110
|
+
// ╰─────
|
|
111
|
+
if (localStore == null)
|
|
112
|
+
localStore
|
|
113
|
+
= {
|
|
114
|
+
isBetarenaAdShownForToday: false,
|
|
115
|
+
advertDateLastShown: null,
|
|
116
|
+
}
|
|
117
|
+
;
|
|
118
|
+
;
|
|
119
|
+
|
|
120
|
+
// ╭─────
|
|
121
|
+
// │ CHECK :|: for already shown advert
|
|
122
|
+
// ╰─────
|
|
123
|
+
if
|
|
124
|
+
(
|
|
125
|
+
localStore.isBetarenaAdShownForToday
|
|
126
|
+
&& localStore.advertDateLastShown?.getDate() != new Date().getDate()
|
|
127
|
+
)
|
|
128
|
+
methods.updateData
|
|
129
|
+
(
|
|
130
|
+
[
|
|
131
|
+
['toggleAdShownState', undefined]
|
|
132
|
+
]
|
|
133
|
+
);
|
|
134
|
+
;
|
|
135
|
+
|
|
136
|
+
methods.setLocalStorage
|
|
137
|
+
(
|
|
138
|
+
localStore
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
return;
|
|
142
|
+
},
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* @author
|
|
146
|
+
* @migbash
|
|
147
|
+
* @summary
|
|
148
|
+
* - 🟥 MAIN
|
|
149
|
+
* - 🔹 HELPER
|
|
150
|
+
* - IMPORTANT
|
|
151
|
+
* @description
|
|
152
|
+
* 📣 Retrieves target `localStorage` for target `key`.
|
|
153
|
+
* @return { IAdEngineStore }
|
|
154
|
+
* 📤 Target `user` data object.
|
|
155
|
+
*/
|
|
156
|
+
parseLocalStorage:
|
|
157
|
+
(
|
|
158
|
+
): IAdEngineStore | NullUndef =>
|
|
159
|
+
{
|
|
160
|
+
const
|
|
161
|
+
localStore = localStorage.getItem(key)
|
|
162
|
+
;
|
|
163
|
+
|
|
164
|
+
if (!localStore) return null;
|
|
165
|
+
|
|
166
|
+
return JSON.parse
|
|
167
|
+
(
|
|
168
|
+
localStore
|
|
169
|
+
);
|
|
170
|
+
},
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* @author
|
|
174
|
+
* @migbash
|
|
175
|
+
* @summary
|
|
176
|
+
* - 🟥 MAIN
|
|
177
|
+
* - 🔹 HELPER
|
|
178
|
+
* - IMPORTANT
|
|
179
|
+
* @description
|
|
180
|
+
* 📣 Persists to `localStorage` target data for target `key`.
|
|
181
|
+
* @param { IAdEngineStore } data
|
|
182
|
+
* 💠 **[required]** Target `user` data to be persisted.
|
|
183
|
+
* @return { void }
|
|
184
|
+
*/
|
|
185
|
+
setLocalStorage:
|
|
186
|
+
(
|
|
187
|
+
data: IAdEngineStore
|
|
188
|
+
): void =>
|
|
189
|
+
{
|
|
190
|
+
localStorage.setItem
|
|
191
|
+
(
|
|
192
|
+
key,
|
|
193
|
+
JSON.stringify
|
|
194
|
+
(
|
|
195
|
+
data
|
|
196
|
+
)
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
set
|
|
200
|
+
(
|
|
201
|
+
data
|
|
202
|
+
);
|
|
203
|
+
|
|
204
|
+
return;
|
|
205
|
+
},
|
|
206
|
+
|
|
207
|
+
// ╭──────────────────────────────────────────────────────────────────────────────────╮
|
|
208
|
+
// │ 📣 Main Logic │
|
|
209
|
+
// ╰──────────────────────────────────────────────────────────────────────────────────╯
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* @author
|
|
213
|
+
* @migbash
|
|
214
|
+
* @summary
|
|
215
|
+
* - 🔹 HELPER
|
|
216
|
+
* - IMPORTANT
|
|
217
|
+
* @description
|
|
218
|
+
* 📣 Update **target** `list` data of target `properties` to update.
|
|
219
|
+
* @param { [IDataProp, any][] } data
|
|
220
|
+
* 💠 **[required]** Target data to update.
|
|
221
|
+
* @return { void }
|
|
222
|
+
*/
|
|
223
|
+
updateData:
|
|
224
|
+
(
|
|
225
|
+
data: [IDataProp, any][]
|
|
226
|
+
): void =>
|
|
227
|
+
{
|
|
228
|
+
const
|
|
229
|
+
localStore = methods.parseLocalStorage()
|
|
230
|
+
;
|
|
231
|
+
|
|
232
|
+
if (!localStore) return;
|
|
233
|
+
|
|
234
|
+
// ╭─────
|
|
235
|
+
// │ NOTE: |:| loop over data entries
|
|
236
|
+
// ╰─────
|
|
237
|
+
for (const iterator of data)
|
|
238
|
+
{
|
|
239
|
+
const
|
|
240
|
+
/**
|
|
241
|
+
* @description
|
|
242
|
+
* 📝 Data point `name` to be updated
|
|
243
|
+
*/
|
|
244
|
+
dataTarget = iterator[0],
|
|
245
|
+
/**
|
|
246
|
+
* @description
|
|
247
|
+
* 📝 Data point `value` to be set to
|
|
248
|
+
*/
|
|
249
|
+
dataPoint = iterator[1]
|
|
250
|
+
;
|
|
251
|
+
|
|
252
|
+
if (dataTarget == 'toggleAdShownState')
|
|
253
|
+
{
|
|
254
|
+
localStore.isBetarenaAdShownForToday = !localStore.isBetarenaAdShownForToday;
|
|
255
|
+
|
|
256
|
+
if (localStore.isBetarenaAdShownForToday)
|
|
257
|
+
localStore.advertDateLastShown = new Date()
|
|
258
|
+
else
|
|
259
|
+
localStore.advertDateLastShown = null;
|
|
260
|
+
;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
methods.setLocalStorage
|
|
265
|
+
(
|
|
266
|
+
localStore
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
;
|
|
273
|
+
|
|
274
|
+
return {
|
|
275
|
+
subscribe,
|
|
276
|
+
set,
|
|
277
|
+
update,
|
|
278
|
+
...methods,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// #endregion ➤ 🛠️ METHODS
|
|
283
|
+
|
|
284
|
+
export const betarenaAdEngineStore = createLocalStore('betarena-ad-engine');
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { IBetarenaUser } from "@betarena/scores-lib/types/_FIREBASE_.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @author
|
|
5
|
+
* @migbash
|
|
6
|
+
* @summary
|
|
7
|
+
* 🔹 INTERFACE
|
|
8
|
+
*/
|
|
9
|
+
export interface IAdEngineStore
|
|
10
|
+
{
|
|
11
|
+
/**
|
|
12
|
+
* @description
|
|
13
|
+
* 📝 Wether target `advert` has been shown for the `24h`
|
|
14
|
+
*/
|
|
15
|
+
isBetarenaAdShownForToday: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* @description
|
|
18
|
+
* 📝 Last `timestamp (date)` of shown advert and closed
|
|
19
|
+
*/
|
|
20
|
+
advertDateLastShown: Date | null;
|
|
21
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description
|
|
3
|
+
* 📝 GeoJs Interface
|
|
4
|
+
* @see https://www.geojs.io/docs/v1/endpoints/geo/
|
|
5
|
+
*/
|
|
6
|
+
export interface GeoJsResponse
|
|
7
|
+
{
|
|
8
|
+
/**
|
|
9
|
+
* @description
|
|
10
|
+
* 📝 approx. radius around location from IP
|
|
11
|
+
*/
|
|
12
|
+
accuracy: number;
|
|
13
|
+
/**
|
|
14
|
+
* @description
|
|
15
|
+
* 📝 autonomous system number associated with the IP
|
|
16
|
+
*/
|
|
17
|
+
asn: number;
|
|
18
|
+
/**
|
|
19
|
+
* @description
|
|
20
|
+
* 📝 3-letter continent code
|
|
21
|
+
*/
|
|
22
|
+
continent_code: string;
|
|
23
|
+
/**
|
|
24
|
+
* @description
|
|
25
|
+
* 📝 country name in English
|
|
26
|
+
*/
|
|
27
|
+
country: string;
|
|
28
|
+
/**
|
|
29
|
+
* @description
|
|
30
|
+
* 📝 2-letter country code
|
|
31
|
+
*/
|
|
32
|
+
country_code?: string;
|
|
33
|
+
/**
|
|
34
|
+
* @description
|
|
35
|
+
* 📝 3-letter country code
|
|
36
|
+
*/
|
|
37
|
+
country_code3: string;
|
|
38
|
+
/**
|
|
39
|
+
* @description
|
|
40
|
+
* 📝 requested IP
|
|
41
|
+
*/
|
|
42
|
+
ip: string;
|
|
43
|
+
/**
|
|
44
|
+
* @description
|
|
45
|
+
* 📝 IP latitude (Note: this is a string due to historic reasons)
|
|
46
|
+
*/
|
|
47
|
+
latitude: string;
|
|
48
|
+
/**
|
|
49
|
+
* @description
|
|
50
|
+
* 📝 IP longitude (Note: this is a string due to historic reasons)
|
|
51
|
+
*/
|
|
52
|
+
longitude: string;
|
|
53
|
+
/**
|
|
54
|
+
* @description
|
|
55
|
+
* 📝 The organization that the IP is registered to (Note: Unknown is returned when this field is unknown)
|
|
56
|
+
*/
|
|
57
|
+
organization: string;
|
|
58
|
+
/**
|
|
59
|
+
* @description
|
|
60
|
+
* 📝 The ASN and organization field combined (Note: this field is depricated)
|
|
61
|
+
*/
|
|
62
|
+
organization_name: string;
|
|
63
|
+
/**
|
|
64
|
+
* @description
|
|
65
|
+
* 📝 Area code of IP
|
|
66
|
+
*/
|
|
67
|
+
area_code?: string;
|
|
68
|
+
/**
|
|
69
|
+
* @description
|
|
70
|
+
* 📝 City name in English
|
|
71
|
+
*/
|
|
72
|
+
city?: string;
|
|
73
|
+
/**
|
|
74
|
+
* @description
|
|
75
|
+
* 📝 Subdivison of the country the IP is within (State, region etc)
|
|
76
|
+
*/
|
|
77
|
+
region?: string;
|
|
78
|
+
/**
|
|
79
|
+
* @description
|
|
80
|
+
* 📝 Time zone as specified by the IANA Time Zone Database
|
|
81
|
+
*/
|
|
82
|
+
timezone?: string;
|
|
83
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author
|
|
3
|
+
* @migbash
|
|
4
|
+
* @summary
|
|
5
|
+
* 🟥 MAIN
|
|
6
|
+
* @description
|
|
7
|
+
* 📝 Detect target device type, such as: `mobile` | `tablet` | `desktop`.
|
|
8
|
+
* @returns { string }
|
|
9
|
+
* 📤
|
|
10
|
+
*/
|
|
11
|
+
export function detectDeviceType
|
|
12
|
+
(
|
|
13
|
+
): string
|
|
14
|
+
{
|
|
15
|
+
const
|
|
16
|
+
/**
|
|
17
|
+
* @description
|
|
18
|
+
*/
|
|
19
|
+
userAgentObject = navigator.userAgent.toLowerCase(),
|
|
20
|
+
/**
|
|
21
|
+
* @description
|
|
22
|
+
*/
|
|
23
|
+
isUserAgentMobile = userAgentObject.includes('mobile'),
|
|
24
|
+
/**
|
|
25
|
+
* @description
|
|
26
|
+
*/
|
|
27
|
+
isUserAgentTablet = /tablet|ipad/.test(userAgentObject)
|
|
28
|
+
;
|
|
29
|
+
|
|
30
|
+
if (isUserAgentMobile)
|
|
31
|
+
return 'mobile';
|
|
32
|
+
else if (isUserAgentTablet)
|
|
33
|
+
return 'tablet';
|
|
34
|
+
else
|
|
35
|
+
return 'desktop';
|
|
36
|
+
;
|
|
37
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
// #region ➤ 📦 Package Imports
|
|
2
|
+
|
|
3
|
+
import { tryCatchAsyncV2 } from '@betarena/scores-lib/dist/util/util.common.js';
|
|
4
|
+
|
|
5
|
+
// #endregion ➤ 📦 Package Imports
|
|
6
|
+
|
|
7
|
+
interface IResponseError
|
|
8
|
+
{
|
|
9
|
+
/**
|
|
10
|
+
* @description
|
|
11
|
+
* 📝
|
|
12
|
+
*/
|
|
13
|
+
error: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* @description
|
|
16
|
+
* 📝
|
|
17
|
+
*/
|
|
18
|
+
errorLogs: unknown;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @author
|
|
23
|
+
* @migbash
|
|
24
|
+
* @summary
|
|
25
|
+
* - 🔹 HELPER
|
|
26
|
+
* - 🟥 IMPORTANT
|
|
27
|
+
* @description
|
|
28
|
+
* 📣 PROXY Fetch type POST
|
|
29
|
+
* @param { string } path
|
|
30
|
+
* 💠 **[required]** `endpoint/url` to fetch data from.
|
|
31
|
+
* @param { T2 } data
|
|
32
|
+
* 💠 [optional] Target data to pass as `body`.
|
|
33
|
+
* @returns { Promise < T1 | NullUndef | unknown | IResponseError > }
|
|
34
|
+
* 📤 Returns an `unkown`.
|
|
35
|
+
*/
|
|
36
|
+
export async function postMod
|
|
37
|
+
<
|
|
38
|
+
T1,
|
|
39
|
+
T2
|
|
40
|
+
>
|
|
41
|
+
(
|
|
42
|
+
path: string,
|
|
43
|
+
data: T1
|
|
44
|
+
): Promise < T2 | IResponseError >
|
|
45
|
+
{
|
|
46
|
+
console.log('path', path);
|
|
47
|
+
console.log('data', data);
|
|
48
|
+
|
|
49
|
+
return await tryCatchAsyncV2
|
|
50
|
+
<
|
|
51
|
+
T2
|
|
52
|
+
>
|
|
53
|
+
(
|
|
54
|
+
async (
|
|
55
|
+
): Promise < T2 > =>
|
|
56
|
+
{
|
|
57
|
+
const
|
|
58
|
+
/**
|
|
59
|
+
* @description
|
|
60
|
+
* 📝 Target endpoint response.
|
|
61
|
+
*/
|
|
62
|
+
res: Response
|
|
63
|
+
= await fetch
|
|
64
|
+
(
|
|
65
|
+
path,
|
|
66
|
+
{
|
|
67
|
+
method: 'POST',
|
|
68
|
+
credentials: 'include',
|
|
69
|
+
body: JSON.stringify(data),
|
|
70
|
+
mode: 'cors',
|
|
71
|
+
headers:
|
|
72
|
+
{
|
|
73
|
+
Accept: 'application/json',
|
|
74
|
+
'Content-Type': 'application/json'
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
),
|
|
78
|
+
/**
|
|
79
|
+
* @description
|
|
80
|
+
* 📝 Target `json` resonse from `endpoint`.
|
|
81
|
+
*/
|
|
82
|
+
resJson = await res.json()
|
|
83
|
+
;
|
|
84
|
+
|
|
85
|
+
if (!res.ok)
|
|
86
|
+
throw new Error
|
|
87
|
+
(
|
|
88
|
+
JSON.stringify(resJson) ?? 'network response was not ok'
|
|
89
|
+
);
|
|
90
|
+
;
|
|
91
|
+
|
|
92
|
+
return resJson;
|
|
93
|
+
},
|
|
94
|
+
(
|
|
95
|
+
ex: unknown
|
|
96
|
+
): IResponseError =>
|
|
97
|
+
{
|
|
98
|
+
// [🐞]
|
|
99
|
+
console.error(`💀 Unhandled :: ${ex}`);
|
|
100
|
+
|
|
101
|
+
return {
|
|
102
|
+
error: true,
|
|
103
|
+
errorLogs: ex
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
);
|
|
107
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { GeoJsResponse } from '../types/geojs.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @author
|
|
5
|
+
* @migbash
|
|
6
|
+
* @summary
|
|
7
|
+
* 🟥 MAIN
|
|
8
|
+
* @description
|
|
9
|
+
* 📝 Detect user `geo-location`.
|
|
10
|
+
* @returns { Promise <void> }
|
|
11
|
+
*/
|
|
12
|
+
export async function getUserLocation
|
|
13
|
+
(
|
|
14
|
+
): Promise < GeoJsResponse >
|
|
15
|
+
{
|
|
16
|
+
const
|
|
17
|
+
/**
|
|
18
|
+
* @description
|
|
19
|
+
* 📝 Response from `fetch`
|
|
20
|
+
*/
|
|
21
|
+
response = await fetch
|
|
22
|
+
(
|
|
23
|
+
'https://get.geojs.io/v1/ip/geo.json',
|
|
24
|
+
{
|
|
25
|
+
method: 'GET'
|
|
26
|
+
}
|
|
27
|
+
)
|
|
28
|
+
;
|
|
29
|
+
|
|
30
|
+
// [🐞]
|
|
31
|
+
// console.log('geoLocation', geoLocation);
|
|
32
|
+
|
|
33
|
+
return await response.json();
|
|
34
|
+
}
|
package/src/main.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import App from './App.svelte'
|
|
2
|
+
|
|
3
|
+
let app
|
|
4
|
+
|
|
5
|
+
if (typeof document === 'undefined') {
|
|
6
|
+
// during server evaluation
|
|
7
|
+
} else {
|
|
8
|
+
// during client's browser evaluation
|
|
9
|
+
app = new App
|
|
10
|
+
(
|
|
11
|
+
{
|
|
12
|
+
target: document.body
|
|
13
|
+
}
|
|
14
|
+
)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export default app
|
package/vite.config.ts
CHANGED
|
@@ -2,6 +2,32 @@ import { defineConfig } from 'vite'
|
|
|
2
2
|
import { svelte } from '@sveltejs/vite-plugin-svelte'
|
|
3
3
|
|
|
4
4
|
// https://vitejs.dev/config/
|
|
5
|
-
export default defineConfig
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
export default defineConfig
|
|
6
|
+
(
|
|
7
|
+
(
|
|
8
|
+
{
|
|
9
|
+
command,
|
|
10
|
+
mode
|
|
11
|
+
}
|
|
12
|
+
) =>
|
|
13
|
+
{
|
|
14
|
+
return {
|
|
15
|
+
plugins:
|
|
16
|
+
[
|
|
17
|
+
svelte()
|
|
18
|
+
],
|
|
19
|
+
|
|
20
|
+
build:
|
|
21
|
+
{
|
|
22
|
+
rollupOptions:
|
|
23
|
+
{
|
|
24
|
+
output:
|
|
25
|
+
{
|
|
26
|
+
entryFileNames: '[name].js',
|
|
27
|
+
assetFileNames: '[name].[ext]',
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
);
|