@windycom/plugin-devtools 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/index.mjs +3 -2
- package/package.json +5 -2
- package/types/client/Calendar.d.ts +4 -4
- package/types/client/Color.d.ts +3 -3
- package/types/client/DataTiler.d.ts +2 -2
- package/types/client/GlObj.d.ts +1 -1
- package/types/client/Layer.d.ts +11 -11
- package/types/client/Metric.d.ts +5 -5
- package/types/client/Product.d.ts +6 -6
- package/types/client/Renderer.d.ts +4 -4
- package/types/client/Webcams.d.ts +4 -4
- package/types/client/d.ts.files/Calendar.d.ts +87 -0
- package/types/client/d.ts.files/CanvasLayer.d.ts +70 -0
- package/types/client/d.ts.files/Color.d.ts +82 -0
- package/types/client/d.ts.files/DataTiler.d.ts +45 -0
- package/types/client/d.ts.files/GlObj.d.ts +92 -0
- package/types/client/d.ts.files/LabelsLayer.d.ts +51 -0
- package/types/client/d.ts.files/LandMask.d.ts +17 -0
- package/types/client/d.ts.files/Layer.d.ts +184 -0
- package/types/client/d.ts.files/Metric.d.ts +192 -0
- package/types/client/d.ts.files/PoisOverlay.d.ts +27 -0
- package/types/client/d.ts.files/Product.d.ts +37 -0
- package/types/client/d.ts.files/Renderer.d.ts +23 -0
- package/types/client/d.ts.files/TileLayerCanvas.d.ts +78 -0
- package/types/client/d.ts.files/TileLayerMultiPatch.d.ts +13 -0
- package/types/client/d.ts.files/Webcams.d.ts +160 -0
- package/types/client/d.ts.files/broadcast.d.ts +177 -0
- package/types/client/d.ts.files/dataSpecifications.d.ts +943 -0
- package/types/client/d.ts.files/errorLogger.d.ts +35 -0
- package/types/client/d.ts.files/format.d.ts +48 -0
- package/types/client/d.ts.files/http.d.ts +87 -0
- package/types/client/d.ts.files/incomingMessages.d.ts +88 -0
- package/types/client/d.ts.files/lib.d.ts +74 -0
- package/types/client/d.ts.files/notifications.d.ts +39 -0
- package/types/client/d.ts.files/outgoingMessages.d.ts +75 -0
- package/types/client/d.ts.files/plugin-params.d.ts +236 -0
- package/types/client/d.ts.files/plugins.d.ts +132 -0
- package/types/client/d.ts.files/pois.d.ts +11 -0
- package/types/client/d.ts.files/products.d.ts +44 -0
- package/types/client/d.ts.files/rootScope.d.ts +43 -0
- package/types/client/d.ts.files/satellite.d.ts +50 -0
- package/types/client/d.ts.files/singleclick.d.ts +31 -0
- package/types/client/d.ts.files/storage.d.ts +120 -0
- package/types/client/d.ts.files/store.d.ts +61 -0
- package/types/client/d.ts.files/tileInterpolator.d.ts +35 -0
- package/types/client/d.ts.files/trans.d.ts +55 -0
- package/types/client/d.ts.files/user.d.ts +58 -0
- package/types/client/dataSpecifications.d.ts +1 -1
- package/types/client/embed2.d.ts +3 -4
- package/types/client/errorLogger.d.ts +1 -1
- package/types/client/fetch.d.ts +30 -3
- package/types/client/format.d.ts +2 -2
- package/types/client/http.d.ts +1 -1
- package/types/client/notifications.d.ts +2 -2
- package/types/client/plugins.d.ts +1 -1
- package/types/client/pois.d.ts +1 -1
- package/types/client/products.d.ts +1 -1
- package/types/client/rootScope.d.ts +4 -4
- package/types/client/singleclick.d.ts +2 -2
- package/types/client/storage.d.ts +1 -1
- package/types/client/store.d.ts +2 -2
- package/types/client/tileInterpolator.d.ts +3 -3
- package/types/client/trans.d.ts +3 -3
- package/types/client/user.d.ts +3 -3
- package/types/client/utils.d.ts +1 -1
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { HttpError } from '@windy/http';
|
|
2
|
+
|
|
3
|
+
/** Payload sent to backend */
|
|
4
|
+
export interface ErrorPayload {
|
|
5
|
+
timestamp: number;
|
|
6
|
+
runningMs: number;
|
|
7
|
+
type: string;
|
|
8
|
+
module: string | null | undefined;
|
|
9
|
+
msg: string;
|
|
10
|
+
line: number | null | undefined;
|
|
11
|
+
col: number | null | undefined;
|
|
12
|
+
url: string | undefined;
|
|
13
|
+
script: string | null | undefined;
|
|
14
|
+
ver: string;
|
|
15
|
+
target: string;
|
|
16
|
+
stack: string | undefined;
|
|
17
|
+
error: string;
|
|
18
|
+
isOnline: boolean;
|
|
19
|
+
repeated?: number;
|
|
20
|
+
scriptLine?: string;
|
|
21
|
+
latestBcast?: string;
|
|
22
|
+
sessionName?: string;
|
|
23
|
+
sessionCounter?: number;
|
|
24
|
+
lang?: string;
|
|
25
|
+
size?: string;
|
|
26
|
+
platform?: string;
|
|
27
|
+
errorID?: string;
|
|
28
|
+
beta?: boolean;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface CustomError {
|
|
32
|
+
msg: string;
|
|
33
|
+
moduleName: string;
|
|
34
|
+
errorObject?: Error | HttpError | Event | ErrorEvent;
|
|
35
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Timestamp } from '@windy/types.d';
|
|
2
|
+
|
|
3
|
+
export type TimeFormatFunction = (hour: number, min?: number) => string;
|
|
4
|
+
|
|
5
|
+
export type DirectionFunction = (dir: number | string) => string;
|
|
6
|
+
|
|
7
|
+
// at lease one of them is required, that is why it is an interface intersection and union
|
|
8
|
+
export type HowOldOptions = (
|
|
9
|
+
| {
|
|
10
|
+
/**
|
|
11
|
+
* Already calculated time difference in minutes (optional)
|
|
12
|
+
*/
|
|
13
|
+
diffMin: number;
|
|
14
|
+
}
|
|
15
|
+
| {
|
|
16
|
+
/**
|
|
17
|
+
* Timestamp
|
|
18
|
+
*/
|
|
19
|
+
ts: Timestamp;
|
|
20
|
+
}
|
|
21
|
+
| {
|
|
22
|
+
/**
|
|
23
|
+
* Timestamp in minutes (who the FUCK uses this?)
|
|
24
|
+
*/
|
|
25
|
+
min: number;
|
|
26
|
+
}
|
|
27
|
+
| {
|
|
28
|
+
/**
|
|
29
|
+
* UNIX timestamp
|
|
30
|
+
*/
|
|
31
|
+
ux: number;
|
|
32
|
+
}
|
|
33
|
+
) & {
|
|
34
|
+
/**
|
|
35
|
+
* Should we localize output?
|
|
36
|
+
*/
|
|
37
|
+
translate?: boolean;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Use 'ago' string for output
|
|
41
|
+
*/
|
|
42
|
+
useAgo?: boolean;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* (default: true) Future timestamps are displayed with `in ...`. If false, `now` string is used instead
|
|
46
|
+
*/
|
|
47
|
+
useFuture?: boolean;
|
|
48
|
+
};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Timestamp } from '@windy/types.d';
|
|
2
|
+
|
|
3
|
+
export type QueryStringSource = Record<
|
|
4
|
+
string | number,
|
|
5
|
+
string | number | undefined | null | boolean
|
|
6
|
+
>;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Options for http requests
|
|
10
|
+
*/
|
|
11
|
+
export interface HttpOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Signal from `AbortController` used to abort the request.
|
|
14
|
+
*/
|
|
15
|
+
abortSignal?: AbortSignal;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Query string as object of 🔐 value pairs
|
|
19
|
+
*/
|
|
20
|
+
qs?: QueryStringSource;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* By default all responses are considered JSON and parsed
|
|
24
|
+
* Use binary option to fetch data via arrayBuffer and use it as binary data
|
|
25
|
+
*/
|
|
26
|
+
binary?: boolean;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Should we use out internal LRU cache (default true)
|
|
30
|
+
*/
|
|
31
|
+
cache?: boolean;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Always treat http response as JSON
|
|
35
|
+
*/
|
|
36
|
+
json?: boolean;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Any object to be sent via POST method
|
|
40
|
+
*/
|
|
41
|
+
data?: unknown;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Add login credentials/cookies or preflight request
|
|
45
|
+
*/
|
|
46
|
+
withCredentials?: boolean;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* TTL of cache object (in ms)
|
|
50
|
+
*/
|
|
51
|
+
ttl?: Timestamp;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Request timeout (in ms)
|
|
55
|
+
*/
|
|
56
|
+
timeout?: Timestamp;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Custom headers object
|
|
60
|
+
*/
|
|
61
|
+
customHeaders?: Record<string, string>;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Standard result payload
|
|
66
|
+
*/
|
|
67
|
+
export interface HttpPayload<T> {
|
|
68
|
+
/**
|
|
69
|
+
* Status code
|
|
70
|
+
*/
|
|
71
|
+
status: number;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Is the response JSON? Internal flag for caching purpose, do not use
|
|
75
|
+
*/
|
|
76
|
+
isJSON?: boolean;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Expiration time. Internal value for caching purpose.
|
|
80
|
+
*/
|
|
81
|
+
expire?: Timestamp;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Payload.
|
|
85
|
+
*/
|
|
86
|
+
data: T;
|
|
87
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keep this file in-sync with outgoingMessages in the embed repo.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { MetricItem } from '@windy/Metric.d';
|
|
6
|
+
import type { Levels, Overlays, Products } from '@windy/rootScope.d';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Values parsed from the query string.
|
|
10
|
+
*/
|
|
11
|
+
export interface QueryStringEmbedParams {
|
|
12
|
+
/**
|
|
13
|
+
* @deprecated Deleted from the embed config (2023-09-20).
|
|
14
|
+
*/
|
|
15
|
+
calendar: string;
|
|
16
|
+
detailLat: number;
|
|
17
|
+
detailLon: number;
|
|
18
|
+
embedMake: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated Not sent from the old embed config.
|
|
21
|
+
*/
|
|
22
|
+
forecast?: string;
|
|
23
|
+
/**
|
|
24
|
+
* @deprecated Menu constantly shown in the old embed config.
|
|
25
|
+
*/
|
|
26
|
+
hideMenu: boolean;
|
|
27
|
+
hideMessage: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Used in `rootScope.ts`.
|
|
30
|
+
*/
|
|
31
|
+
lang?: string;
|
|
32
|
+
lat: number;
|
|
33
|
+
/**
|
|
34
|
+
* @deprecated Currently not sent from the embed config (2023-09-20).
|
|
35
|
+
*/
|
|
36
|
+
level?: Levels;
|
|
37
|
+
lon: number;
|
|
38
|
+
/**
|
|
39
|
+
* @deprecated Location constantly set to `coordinates` in the old embed config.
|
|
40
|
+
*/
|
|
41
|
+
location: string;
|
|
42
|
+
metricRain?: MetricItem;
|
|
43
|
+
metricTemp?: MetricItem;
|
|
44
|
+
metricWind?: MetricItem;
|
|
45
|
+
/**
|
|
46
|
+
* @deprecated Currently not sent from the embed config (2023-09-20).
|
|
47
|
+
*/
|
|
48
|
+
overlay?: Overlays;
|
|
49
|
+
pressure: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* @deprecated Currently not sent from the embed config (2023-09-20).
|
|
52
|
+
*/
|
|
53
|
+
product?: Products;
|
|
54
|
+
showDetail: boolean;
|
|
55
|
+
showMarker: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* @deprecated Only used for query string of type=alert
|
|
58
|
+
*/
|
|
59
|
+
timestamps?: string;
|
|
60
|
+
type: 'map' | 'alert' | 'forecast';
|
|
61
|
+
zoom: number;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Values received from the embed config via window.onMessage.
|
|
66
|
+
* Subset of {@link QueryStringEmbedParams} with support for default units.
|
|
67
|
+
*/
|
|
68
|
+
export interface UpdateEmbedPayload {
|
|
69
|
+
detailLat: number;
|
|
70
|
+
detailLon: number;
|
|
71
|
+
hideMessage: boolean;
|
|
72
|
+
metricRain: QueryStringEmbedParams['metricRain'] | 'default';
|
|
73
|
+
metricTemp: QueryStringEmbedParams['metricTemp'] | 'default';
|
|
74
|
+
metricWind: QueryStringEmbedParams['metricWind'] | 'default';
|
|
75
|
+
pressure: boolean;
|
|
76
|
+
showDetail: boolean;
|
|
77
|
+
showMarker: boolean;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface UpdateEmbedMessageData {
|
|
81
|
+
type: 'updateEmbed';
|
|
82
|
+
payload: UpdateEmbedPayload;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Message data that is possible to receive via `window.onMessage`.
|
|
87
|
+
*/
|
|
88
|
+
export type IncomingMessageData = UpdateEmbedMessageData | unknown;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
// @ts-ignore
|
|
3
|
+
// @ts-nocheck
|
|
4
|
+
|
|
5
|
+
import type { DataSpecifications } from '@windy/dataSpecifications.d';
|
|
6
|
+
import type { LatLon } from '@windy/interfaces';
|
|
7
|
+
import type { PluginsOpenParams } from '@windy/plugin-params';
|
|
8
|
+
|
|
9
|
+
export type LibHtml = string;
|
|
10
|
+
|
|
11
|
+
type AllowedDataSpecifications = Pick<
|
|
12
|
+
DataSpecifications,
|
|
13
|
+
| 'overlay'
|
|
14
|
+
| 'level'
|
|
15
|
+
| 'particles'
|
|
16
|
+
| 'numDirection'
|
|
17
|
+
| 'lang'
|
|
18
|
+
| 'disableWebGL'
|
|
19
|
+
| 'graticule'
|
|
20
|
+
| 'particlesAnim'
|
|
21
|
+
| 'timestamp'
|
|
22
|
+
| 'isolines'
|
|
23
|
+
| 'isImperial'
|
|
24
|
+
| 'latlon'
|
|
25
|
+
| 'hourFormat'
|
|
26
|
+
| 'favOverlays'
|
|
27
|
+
| 'expertMode'
|
|
28
|
+
| 'product'
|
|
29
|
+
>;
|
|
30
|
+
export type WindyAPIOptions = Partial<{
|
|
31
|
+
[P in keyof AllowedDataSpecifications]: AllowedDataSpecifications[P]['def'];
|
|
32
|
+
}>;
|
|
33
|
+
|
|
34
|
+
export interface InitOptions extends WindyAPIOptions {
|
|
35
|
+
key?: string;
|
|
36
|
+
verbose?: boolean;
|
|
37
|
+
|
|
38
|
+
lat?: number;
|
|
39
|
+
lon?: number;
|
|
40
|
+
lng?: number;
|
|
41
|
+
zoom?: number;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
type ApiPicker =
|
|
45
|
+
| typeof import('@windy/picker') & {
|
|
46
|
+
open: (latLon: LatLon) => void;
|
|
47
|
+
close: () => void;
|
|
48
|
+
getParams: () => PluginsOpenParams['picker'];
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export type InitCb = (windyAPI: {
|
|
52
|
+
map: WModules['map']['map'];
|
|
53
|
+
store: WModules['store'];
|
|
54
|
+
picker: ApiPicker;
|
|
55
|
+
utils: WModules['utils'];
|
|
56
|
+
broadcast: WModules['broadcast'];
|
|
57
|
+
overlays: WModules['overlays'];
|
|
58
|
+
colors: WModules['colors'];
|
|
59
|
+
}) => void;
|
|
60
|
+
|
|
61
|
+
export interface ApiAuthResponse {
|
|
62
|
+
domains: string;
|
|
63
|
+
paid: boolean;
|
|
64
|
+
apiUser: string;
|
|
65
|
+
id: string;
|
|
66
|
+
name: string;
|
|
67
|
+
type: string;
|
|
68
|
+
exceeded: boolean;
|
|
69
|
+
auth: string;
|
|
70
|
+
features: {
|
|
71
|
+
intersucho?: boolean;
|
|
72
|
+
ecmwf?: boolean;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { QueryStringSource } from '@windy/http.d';
|
|
2
|
+
|
|
3
|
+
export interface NotifHttpQsOptions extends QueryStringSource {
|
|
4
|
+
pageSize: number;
|
|
5
|
+
current: number;
|
|
6
|
+
markAsViewed?: boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface DeliveryInfo {
|
|
10
|
+
deviceID: string;
|
|
11
|
+
platform: string;
|
|
12
|
+
type: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface NotificationObject {
|
|
16
|
+
created: number;
|
|
17
|
+
delivery: DeliveryInfo[];
|
|
18
|
+
other: {
|
|
19
|
+
fav: string;
|
|
20
|
+
firstTimestamp: number;
|
|
21
|
+
};
|
|
22
|
+
type: string;
|
|
23
|
+
updated: number;
|
|
24
|
+
userID: string;
|
|
25
|
+
wasReceived: boolean;
|
|
26
|
+
wasViewed: boolean;
|
|
27
|
+
_id: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface NotificationInfo {
|
|
31
|
+
totalCount: number;
|
|
32
|
+
newNotifications: unknown;
|
|
33
|
+
newCount: number;
|
|
34
|
+
data: NotificationObject[];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface NotificationTypes {
|
|
38
|
+
canReceiveNotif: void;
|
|
39
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keep this file in-sync with incomingMessages in the embed repo.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { MetricItem } from '@windy/Metric.d';
|
|
6
|
+
import type { LatLon } from '../../types/interfaces';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Types of valid messages sent to the embed config via window.postMessage.
|
|
10
|
+
*/
|
|
11
|
+
export type OutgoingMessageType = 'updateDetail' | 'updateValues';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Payload of the updateDetail message.
|
|
15
|
+
*/
|
|
16
|
+
export interface UpdateDetailPayload {
|
|
17
|
+
coordinates: LatLon;
|
|
18
|
+
rainUnit: MetricItem;
|
|
19
|
+
showDetail: boolean;
|
|
20
|
+
showMarker: boolean;
|
|
21
|
+
temperatureUnit: MetricItem;
|
|
22
|
+
windUnit: MetricItem;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Payload of the updateValues message.
|
|
27
|
+
*/
|
|
28
|
+
export interface UpdateValuesPayload {
|
|
29
|
+
/**
|
|
30
|
+
* Coordinates.
|
|
31
|
+
*/
|
|
32
|
+
coordinates: LatLon;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Level.
|
|
36
|
+
*/
|
|
37
|
+
level: string;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* User-friendly text of the level value.
|
|
41
|
+
*/
|
|
42
|
+
levelText: string;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Overlay identifier.
|
|
46
|
+
*/
|
|
47
|
+
overlay: string;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Overlay name.
|
|
51
|
+
*/
|
|
52
|
+
overlayName: string;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Product identifier.
|
|
56
|
+
*/
|
|
57
|
+
product: string;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Product name.
|
|
61
|
+
*/
|
|
62
|
+
productName: string;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Zoom level.
|
|
66
|
+
*/
|
|
67
|
+
zoom: number;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Valid message data sent to the embed config via window.postMessage.
|
|
72
|
+
*/
|
|
73
|
+
export type OutgoingMessageData =
|
|
74
|
+
| { type: 'updateDetail'; payload: Partial<UpdateDetailPayload> }
|
|
75
|
+
| { type: 'updateValues'; payload: UpdateValuesPayload };
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { OpenOptions } from '@capacitor/browser';
|
|
2
|
+
import { PublicationParams } from '@plugins/articles/articles.d';
|
|
3
|
+
import { FavEventTypes } from '@plugins/favs/favs.d';
|
|
4
|
+
import { ProviderConstructorParams } from '@plugins/_shared/subscription-services/subscription-services.d';
|
|
5
|
+
import { HiddenReasonType, ReasonTypes } from '@plugins/subscription/subscription';
|
|
6
|
+
import { FullRenderParameters } from '@windy/Layer.d';
|
|
7
|
+
import { WebcamCategoryType } from '@windy/Webcams.d';
|
|
8
|
+
import { HttpPayload } from '@windy/http.d';
|
|
9
|
+
import {
|
|
10
|
+
CapAlertHeadline,
|
|
11
|
+
GeolocationInfo,
|
|
12
|
+
HomeLocation,
|
|
13
|
+
LatLon,
|
|
14
|
+
PickerCoords,
|
|
15
|
+
SavedAlertFav,
|
|
16
|
+
SavedFav,
|
|
17
|
+
SummaryDataHash,
|
|
18
|
+
WeatherDataPayload,
|
|
19
|
+
} from '@windy/interfaces.d';
|
|
20
|
+
import { Pois, Products } from '@windy/rootScope.d';
|
|
21
|
+
import { SingleClickParams } from '@windy/singleclick.d';
|
|
22
|
+
import {
|
|
23
|
+
DetailDisplayType,
|
|
24
|
+
RouteType,
|
|
25
|
+
StationOrPoiType,
|
|
26
|
+
type ExternalPluginIdent,
|
|
27
|
+
} from '@windy/types.d';
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Type of source event, that led to opening any plugin
|
|
31
|
+
*/
|
|
32
|
+
export type PluginOpenEventSource =
|
|
33
|
+
| 'contextmenu'
|
|
34
|
+
| 'hp'
|
|
35
|
+
| 'url'
|
|
36
|
+
| 'sigleclick'
|
|
37
|
+
| 'poi-icon'
|
|
38
|
+
| 'search'
|
|
39
|
+
| 'detail'
|
|
40
|
+
| 'singleclick'
|
|
41
|
+
| 'favs-page'
|
|
42
|
+
| 'picker'
|
|
43
|
+
| 'meta'
|
|
44
|
+
| 'fallback'
|
|
45
|
+
| 'gps'
|
|
46
|
+
| 'ip'
|
|
47
|
+
| 'uploader'
|
|
48
|
+
| 'api'
|
|
49
|
+
| 'last'
|
|
50
|
+
| 'back-button'
|
|
51
|
+
| 'label';
|
|
52
|
+
|
|
53
|
+
export interface PluginSource {
|
|
54
|
+
source?: PluginOpenEventSource;
|
|
55
|
+
poiType?: StationOrPoiType | Pois | 'stations';
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
interface DetailOpenParams extends PluginSource, LatLon {
|
|
59
|
+
/**
|
|
60
|
+
* How to display detail
|
|
61
|
+
*/
|
|
62
|
+
display?: DetailDisplayType;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Product to open
|
|
66
|
+
*/
|
|
67
|
+
product?: Products;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Name of locality
|
|
71
|
+
*/
|
|
72
|
+
name?: string;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* ID of POI icon that was clicked to open detail
|
|
76
|
+
*/
|
|
77
|
+
id?: string;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* If detail is opened by clicking on label
|
|
81
|
+
*/
|
|
82
|
+
sourceEl?: HTMLElement;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Detail was opened by clicking on Alert neotification so detail table should be scrolled to
|
|
86
|
+
* particular timestamp
|
|
87
|
+
*/
|
|
88
|
+
moveToTimestamp?: boolean;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Array of times, when Alert was triggered in a form of 897987987,098908089,09809098
|
|
92
|
+
* where numbers are timestamps / tsHour
|
|
93
|
+
*/
|
|
94
|
+
hrTimestamps?: string;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
type WebcamDetailOpenParams =
|
|
98
|
+
| (PluginSource & {
|
|
99
|
+
id: number | string;
|
|
100
|
+
})
|
|
101
|
+
| undefined;
|
|
102
|
+
|
|
103
|
+
type RplannerDistanceParams =
|
|
104
|
+
| { view?: RouteType; coords: string; id?: string } // Opening from URL
|
|
105
|
+
| SavedFav
|
|
106
|
+
// | RplannerOpeningAsFavs // Clicking on route stored as fav
|
|
107
|
+
| LatLon[] // User puts two airports is search bar
|
|
108
|
+
| (LatLon & {
|
|
109
|
+
source: 'contextmenu';
|
|
110
|
+
}) // Click with RH mouse and activate from contextmenu
|
|
111
|
+
| {
|
|
112
|
+
import: boolean;
|
|
113
|
+
content: string;
|
|
114
|
+
}; // Uploaded GPX
|
|
115
|
+
|
|
116
|
+
export type PickerOpenParams =
|
|
117
|
+
| (PluginSource &
|
|
118
|
+
PickerCoords & {
|
|
119
|
+
noEmit?: boolean;
|
|
120
|
+
})
|
|
121
|
+
| SingleClickParams;
|
|
122
|
+
|
|
123
|
+
export type PluginsOpenParams = {
|
|
124
|
+
detail: DetailOpenParams;
|
|
125
|
+
picker: PickerOpenParams;
|
|
126
|
+
'picker-mobile': PickerOpenParams;
|
|
127
|
+
favs:
|
|
128
|
+
| (PluginSource & {
|
|
129
|
+
msg?: FavEventTypes;
|
|
130
|
+
})
|
|
131
|
+
| undefined;
|
|
132
|
+
|
|
133
|
+
station: PluginSource & { id?: string; stationId?: string };
|
|
134
|
+
multimodel: LatLon & PluginSource & { name?: string | null };
|
|
135
|
+
webcams: (PluginSource & { category: WebcamCategoryType }) | undefined;
|
|
136
|
+
'webcams-detail': PluginSource & WebcamDetailOpenParams;
|
|
137
|
+
'webcams-edit': PluginSource & WebcamDetailOpenParams;
|
|
138
|
+
'webcams-embed':
|
|
139
|
+
| PluginSource & {
|
|
140
|
+
id: string | number;
|
|
141
|
+
forcedPois?: boolean;
|
|
142
|
+
};
|
|
143
|
+
'webcams-remove': PluginSource & WebcamDetailOpenParams;
|
|
144
|
+
//settings: (PluginSource & { id: string }) | undefined;
|
|
145
|
+
settings: (PluginSource & { section?: 'notificationPreferences' }) | undefined;
|
|
146
|
+
articles: (PluginSource & { id: number }) | (PluginSource & PublicationParams) | undefined;
|
|
147
|
+
'article-publisher': (PluginSource & { pane?: '' | 'list' | 'detail' }) | null;
|
|
148
|
+
upload: PluginSource & { id: string };
|
|
149
|
+
uploader: PluginSource & { id?: string };
|
|
150
|
+
'cap-alert': PluginSource &
|
|
151
|
+
LatLon & {
|
|
152
|
+
/**
|
|
153
|
+
* Name of locality
|
|
154
|
+
*/
|
|
155
|
+
name?: string;
|
|
156
|
+
};
|
|
157
|
+
contextmenu: PluginSource & LatLon & { containerPoint?: L.Point };
|
|
158
|
+
subscription:
|
|
159
|
+
| (PluginSource & {
|
|
160
|
+
fscNext?: string;
|
|
161
|
+
promote?: ReasonTypes | HiddenReasonType;
|
|
162
|
+
pendingError?: Error & { responseText: string };
|
|
163
|
+
})
|
|
164
|
+
| undefined;
|
|
165
|
+
alerts:
|
|
166
|
+
| (PluginSource & {
|
|
167
|
+
id?: string;
|
|
168
|
+
name?: string;
|
|
169
|
+
title?: string;
|
|
170
|
+
action?: 'new';
|
|
171
|
+
lat?: string | number;
|
|
172
|
+
lon?: string | number;
|
|
173
|
+
})
|
|
174
|
+
| (PluginSource & SavedAlertFav);
|
|
175
|
+
distance: PluginSource & RplannerDistanceParams;
|
|
176
|
+
rplanner: PluginSource & RplannerDistanceParams;
|
|
177
|
+
airport: PluginSource & {
|
|
178
|
+
// Airport plugin can receive ICAO code as id || icao property
|
|
179
|
+
icao?: string;
|
|
180
|
+
id?: string;
|
|
181
|
+
};
|
|
182
|
+
'save-password': PluginSource & {
|
|
183
|
+
username: string;
|
|
184
|
+
password: string;
|
|
185
|
+
};
|
|
186
|
+
share: undefined;
|
|
187
|
+
'nearest-stations': PluginSource & LatLon & { compactVersion?: boolean; includeAirq?: boolean };
|
|
188
|
+
'nearest-airq': PluginSource & LatLon;
|
|
189
|
+
'nearest-webcams-mobile': PluginSource & LatLon;
|
|
190
|
+
'nearest-webcams': PluginSource & LatLon;
|
|
191
|
+
'external-plugins':
|
|
192
|
+
| (PluginSource & { id?: string; qs?: PluginsQsParams['external-plugins'] })
|
|
193
|
+
| undefined;
|
|
194
|
+
browser: PluginSource & {
|
|
195
|
+
options: OpenOptions;
|
|
196
|
+
onFinished?: () => void;
|
|
197
|
+
};
|
|
198
|
+
sounding: PluginSource & LatLon & { name?: string };
|
|
199
|
+
radiosonde: PluginSource & { id: string; lat?: number; lon?: number };
|
|
200
|
+
'hp-weather': PluginSource & {
|
|
201
|
+
coords: HomeLocation | GeolocationInfo;
|
|
202
|
+
promises: {
|
|
203
|
+
wx: Promise<HttpPayload<WeatherDataPayload<SummaryDataHash>>>;
|
|
204
|
+
capAlerts: Promise<HttpPayload<CapAlertHeadline[]>>;
|
|
205
|
+
};
|
|
206
|
+
};
|
|
207
|
+
login:
|
|
208
|
+
| (PluginSource & {
|
|
209
|
+
reason?: 'login' | 'register';
|
|
210
|
+
})
|
|
211
|
+
| undefined;
|
|
212
|
+
isolines: PluginSource & FullRenderParameters;
|
|
213
|
+
screenshot: (PluginSource & { params?: string }) | undefined;
|
|
214
|
+
hurricanes: (PluginSource & { id: string }) | undefined;
|
|
215
|
+
'app-review-dialog':
|
|
216
|
+
| (PluginSource & {
|
|
217
|
+
sessionsPerDay?: number;
|
|
218
|
+
showSystemDialog?: boolean;
|
|
219
|
+
})
|
|
220
|
+
| undefined;
|
|
221
|
+
offline: PluginSource;
|
|
222
|
+
'developer-mode': (PluginSource & { qs: Record<string, string> | undefined }) | undefined;
|
|
223
|
+
'windy-external-plugin': PluginSource & LatLon;
|
|
224
|
+
} & {
|
|
225
|
+
[external: ExternalPluginIdent]:
|
|
226
|
+
| (PluginSource & { query: Record<string, string> | undefined })
|
|
227
|
+
| (PluginSource & LatLon)
|
|
228
|
+
| undefined;
|
|
229
|
+
} & { [others: string]: undefined };
|
|
230
|
+
|
|
231
|
+
export type PluginsQsParams = {
|
|
232
|
+
subscription: ProviderConstructorParams | undefined;
|
|
233
|
+
'external-plugins': Record<string, string> | undefined;
|
|
234
|
+
'developer-mode': Record<string, string> | undefined;
|
|
235
|
+
detail: { hrTimestamps?: string; name?: string; moveToTimestamp?: string };
|
|
236
|
+
} & { [others: string]: undefined };
|