@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.
Files changed (66) hide show
  1. package/README.md +3 -1
  2. package/index.mjs +3 -2
  3. package/package.json +5 -2
  4. package/types/client/Calendar.d.ts +4 -4
  5. package/types/client/Color.d.ts +3 -3
  6. package/types/client/DataTiler.d.ts +2 -2
  7. package/types/client/GlObj.d.ts +1 -1
  8. package/types/client/Layer.d.ts +11 -11
  9. package/types/client/Metric.d.ts +5 -5
  10. package/types/client/Product.d.ts +6 -6
  11. package/types/client/Renderer.d.ts +4 -4
  12. package/types/client/Webcams.d.ts +4 -4
  13. package/types/client/d.ts.files/Calendar.d.ts +87 -0
  14. package/types/client/d.ts.files/CanvasLayer.d.ts +70 -0
  15. package/types/client/d.ts.files/Color.d.ts +82 -0
  16. package/types/client/d.ts.files/DataTiler.d.ts +45 -0
  17. package/types/client/d.ts.files/GlObj.d.ts +92 -0
  18. package/types/client/d.ts.files/LabelsLayer.d.ts +51 -0
  19. package/types/client/d.ts.files/LandMask.d.ts +17 -0
  20. package/types/client/d.ts.files/Layer.d.ts +184 -0
  21. package/types/client/d.ts.files/Metric.d.ts +192 -0
  22. package/types/client/d.ts.files/PoisOverlay.d.ts +27 -0
  23. package/types/client/d.ts.files/Product.d.ts +37 -0
  24. package/types/client/d.ts.files/Renderer.d.ts +23 -0
  25. package/types/client/d.ts.files/TileLayerCanvas.d.ts +78 -0
  26. package/types/client/d.ts.files/TileLayerMultiPatch.d.ts +13 -0
  27. package/types/client/d.ts.files/Webcams.d.ts +160 -0
  28. package/types/client/d.ts.files/broadcast.d.ts +177 -0
  29. package/types/client/d.ts.files/dataSpecifications.d.ts +943 -0
  30. package/types/client/d.ts.files/errorLogger.d.ts +35 -0
  31. package/types/client/d.ts.files/format.d.ts +48 -0
  32. package/types/client/d.ts.files/http.d.ts +87 -0
  33. package/types/client/d.ts.files/incomingMessages.d.ts +88 -0
  34. package/types/client/d.ts.files/lib.d.ts +74 -0
  35. package/types/client/d.ts.files/notifications.d.ts +39 -0
  36. package/types/client/d.ts.files/outgoingMessages.d.ts +75 -0
  37. package/types/client/d.ts.files/plugin-params.d.ts +236 -0
  38. package/types/client/d.ts.files/plugins.d.ts +132 -0
  39. package/types/client/d.ts.files/pois.d.ts +11 -0
  40. package/types/client/d.ts.files/products.d.ts +44 -0
  41. package/types/client/d.ts.files/rootScope.d.ts +43 -0
  42. package/types/client/d.ts.files/satellite.d.ts +50 -0
  43. package/types/client/d.ts.files/singleclick.d.ts +31 -0
  44. package/types/client/d.ts.files/storage.d.ts +120 -0
  45. package/types/client/d.ts.files/store.d.ts +61 -0
  46. package/types/client/d.ts.files/tileInterpolator.d.ts +35 -0
  47. package/types/client/d.ts.files/trans.d.ts +55 -0
  48. package/types/client/d.ts.files/user.d.ts +58 -0
  49. package/types/client/dataSpecifications.d.ts +1 -1
  50. package/types/client/embed2.d.ts +3 -4
  51. package/types/client/errorLogger.d.ts +1 -1
  52. package/types/client/fetch.d.ts +30 -3
  53. package/types/client/format.d.ts +2 -2
  54. package/types/client/http.d.ts +1 -1
  55. package/types/client/notifications.d.ts +2 -2
  56. package/types/client/plugins.d.ts +1 -1
  57. package/types/client/pois.d.ts +1 -1
  58. package/types/client/products.d.ts +1 -1
  59. package/types/client/rootScope.d.ts +4 -4
  60. package/types/client/singleclick.d.ts +2 -2
  61. package/types/client/storage.d.ts +1 -1
  62. package/types/client/store.d.ts +2 -2
  63. package/types/client/tileInterpolator.d.ts +3 -3
  64. package/types/client/trans.d.ts +3 -3
  65. package/types/client/user.d.ts +3 -3
  66. 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 };