@aguacerowx/react-native 0.0.52 → 0.0.53

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 (36) hide show
  1. package/android/src/main/cpp/satellite_ktx_jni.cpp +6 -1
  2. package/android/src/main/java/com/aguacerowx/reactnative/SatelliteLayer.java +121 -1
  3. package/android/src/main/java/com/aguacerowx/reactnative/SatelliteLayerView.java +556 -392
  4. package/ios/SatelliteLayerView.swift +517 -517
  5. package/lib/commonjs/WeatherLayerManager.js +21 -1
  6. package/lib/commonjs/WeatherLayerManager.js.map +1 -1
  7. package/lib/commonjs/aguaceroRnDebug.js +1 -0
  8. package/lib/commonjs/aguaceroRnDebug.js.map +1 -1
  9. package/lib/commonjs/index.js +37 -0
  10. package/lib/commonjs/index.js.map +1 -1
  11. package/lib/commonjs/satellite/satelliteAndroidController.js +17 -9
  12. package/lib/commonjs/satellite/satelliteAndroidController.js.map +1 -1
  13. package/lib/commonjs/satelliteRnDebug.js +261 -0
  14. package/lib/commonjs/satelliteRnDebug.js.map +1 -0
  15. package/lib/module/WeatherLayerManager.js +21 -1
  16. package/lib/module/WeatherLayerManager.js.map +1 -1
  17. package/lib/module/aguaceroRnDebug.js +1 -0
  18. package/lib/module/aguaceroRnDebug.js.map +1 -1
  19. package/lib/module/index.js +1 -0
  20. package/lib/module/index.js.map +1 -1
  21. package/lib/module/satellite/satelliteAndroidController.js +17 -9
  22. package/lib/module/satellite/satelliteAndroidController.js.map +1 -1
  23. package/lib/module/satelliteRnDebug.js +248 -0
  24. package/lib/module/satelliteRnDebug.js.map +1 -0
  25. package/lib/typescript/WeatherLayerManager.d.ts.map +1 -1
  26. package/lib/typescript/aguaceroRnDebug.d.ts.map +1 -1
  27. package/lib/typescript/index.d.ts +1 -0
  28. package/lib/typescript/satellite/satelliteAndroidController.d.ts.map +1 -1
  29. package/lib/typescript/satelliteRnDebug.d.ts +81 -0
  30. package/lib/typescript/satelliteRnDebug.d.ts.map +1 -0
  31. package/package.json +2 -2
  32. package/src/WeatherLayerManager.js +20 -0
  33. package/src/aguaceroRnDebug.js +1 -0
  34. package/src/index.js +8 -0
  35. package/src/satellite/satelliteAndroidController.js +20 -8
  36. package/src/satelliteRnDebug.js +269 -0
@@ -0,0 +1,248 @@
1
+ /**
2
+ * Satellite-specific RN diagnostics (Metro + native events → Metro when `debug` is on).
3
+ *
4
+ * Filter Metro: `[AguaceroRN][satellite]`
5
+ * Filter logcat: `AguaceroRN`, `AguaceroSatelliteView`, `AguaceroSatellite`, `AguaceroSatKtx`
6
+ */
7
+ import { NativeEventEmitter, NativeModules, Platform, UIManager } from 'react-native';
8
+ import { aguaceroDebug, aguaceroDebugWarn, getAguaceroAuthDiagnosticSnapshot, isAguaceroRnDebugEnabled, redactApiKeyFromUrl } from './aguaceroRnDebug';
9
+ export const SATELLITE_DIAGNOSTIC_EVENT = 'AguaceroSatelliteDiagnostic';
10
+ const LOG = '[AguaceroRN][satellite]';
11
+
12
+ /** @type {import('react-native').EmitterSubscription | null} */
13
+ let diagSubscription = null;
14
+ const BASIS_FORMAT_NAMES = {
15
+ 1: 'ETC2_RGBA (preferred Android)',
16
+ 10: 'ASTC_LDR_4x4 (black tiles if GPU cannot sample ASTC)',
17
+ 13: 'RGBA32 (universal fallback)'
18
+ };
19
+
20
+ /**
21
+ * @param {number | undefined} ordinal
22
+ */
23
+ export function basisFormatLabel(ordinal) {
24
+ if (ordinal == null || Number.isNaN(Number(ordinal))) return 'unknown';
25
+ return BASIS_FORMAT_NAMES[Number(ordinal)] ?? `ordinal_${ordinal}`;
26
+ }
27
+
28
+ /**
29
+ * Actionable hints when imagery is black but JS sync looks healthy.
30
+ * @param {Record<string, unknown>} ctx
31
+ */
32
+ export function interpretSatelliteBlackScreenHints(ctx) {
33
+ const hints = [];
34
+ const frameCount = Number(ctx.frameCount ?? 0);
35
+ const nativeCached = Number(ctx.nativeCachedFrames ?? ctx.cachedFrameCount ?? NaN);
36
+ const targetUnix = ctx.targetUnix;
37
+ const activeUnix = ctx.activeUnix;
38
+ const visible = ctx.visible;
39
+ const opacity = ctx.opacity;
40
+ const basisFormat = ctx.basisFormatOrdinal ?? ctx.transcodeFormatOrdinal;
41
+ if (frameCount === 0) {
42
+ hints.push('JS built zero frame URLs — check satellite listing, channel (geocolor), and sector.');
43
+ }
44
+ if (visible === false) {
45
+ hints.push('Layer visible=false — imagery is hidden by state/UI.');
46
+ }
47
+ if (typeof opacity === 'number' && opacity <= 0) {
48
+ hints.push('Layer opacity=0 — increase opacity in WeatherLayerManager state.');
49
+ }
50
+ if (targetUnix != null && nativeCached === 0 && !Number.isNaN(nativeCached)) {
51
+ hints.push('targetUnix is set but native GPU cache is empty — KTX fetch/decode/upload failed; check native diagnostic events or logcat (AguaceroSatelliteView).');
52
+ }
53
+ if (activeUnix == null && targetUnix != null) {
54
+ hints.push('targetUnix set but no active frame on GPU yet — wait for decode or prior frame failed upload (ASTC on unsupported GPU is common).');
55
+ }
56
+ if (Number(basisFormat) === 10) {
57
+ hints.push('Transcoded to ASTC — if the map footprint is black, rebuild SDK with ETC2-first transcode or check AguaceroSatellite for GPU upload GL errors.');
58
+ }
59
+ if (ctx.bundleIdPresent === false) {
60
+ hints.push('bundleId missing — install react-native-device-info; some keys require x-app-identifier (usually 403, not black tiles).');
61
+ }
62
+ if (ctx.mapLayerAdded === false) {
63
+ hints.push('Mapbox custom satellite layer not attached — ensure WeatherLayerManager is a child of MapManager.');
64
+ }
65
+ if (ctx.satelliteNativeMissing === true) {
66
+ hints.push('SatelliteLayer native view manager not registered — rebuild app / link @aguacerowx/react-native android.');
67
+ }
68
+ if (hints.length === 0) {
69
+ hints.push('JS pipeline looks healthy — inspect native events below (fetch bytes, transcode format, GPU upload). Filter logcat: AguaceroSatelliteView AguaceroSatellite AguaceroSatKtx');
70
+ }
71
+ return hints;
72
+ }
73
+
74
+ /**
75
+ * One-shot integration audit (call when WeatherLayerManager mounts with debug).
76
+ * @param {{ core?: import('@aguacerowx/javascript-sdk').AguaceroCore; satelliteLayerRef?: React.RefObject<unknown> }} opts
77
+ */
78
+ export function auditSatelliteIntegration(opts = {}) {
79
+ if (!isAguaceroRnDebugEnabled()) return;
80
+ const {
81
+ core,
82
+ satelliteLayerRef
83
+ } = opts;
84
+ let satCmdKeys = [];
85
+ let gridCmdKeys = [];
86
+ let satManagerError = null;
87
+ try {
88
+ satCmdKeys = Object.keys(UIManager.getViewManagerConfig?.('SatelliteLayer')?.Commands ?? {});
89
+ } catch (e) {
90
+ satManagerError = String(e?.message ?? e);
91
+ satCmdKeys = [];
92
+ }
93
+ try {
94
+ gridCmdKeys = Object.keys(UIManager.getViewManagerConfig?.('GridRenderLayer')?.Commands ?? {});
95
+ } catch {
96
+ gridCmdKeys = [];
97
+ }
98
+ let deviceInfoOk = false;
99
+ let deviceInfoBundleId = null;
100
+ try {
101
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, global-require
102
+ const DeviceInfo = require('react-native-device-info');
103
+ deviceInfoOk = true;
104
+ try {
105
+ deviceInfoBundleId = DeviceInfo.getBundleId?.() ?? null;
106
+ } catch {
107
+ deviceInfoBundleId = null;
108
+ }
109
+ } catch {
110
+ deviceInfoOk = false;
111
+ }
112
+ const snapshot = {
113
+ platform: Platform.OS,
114
+ satelliteNativeCommands: satCmdKeys,
115
+ satelliteNativeMissing: satCmdKeys.length === 0,
116
+ satelliteManagerError: satManagerError,
117
+ gridNativeCommands: gridCmdKeys,
118
+ satelliteRefAttached: Boolean(satelliteLayerRef?.current),
119
+ satelliteRefMethods: satelliteLayerRef?.current ? Object.keys(satelliteLayerRef.current) : [],
120
+ reactNativeDeviceInfo: deviceInfoOk ? {
121
+ installed: true,
122
+ bundleId: deviceInfoBundleId
123
+ } : {
124
+ installed: false,
125
+ hint: 'npm install react-native-device-info — required for core.bundleId / x-app-identifier'
126
+ },
127
+ mapboxNote: 'Requires @rnmapbox/maps v11; WeatherLayerManager must be nested inside MapManager',
128
+ nativeLibraries: ['aguacero_satellite_ktx (KTX2 Basis transcoder JNI)'],
129
+ auth: core ? getAguaceroAuthDiagnosticSnapshot(core) : undefined
130
+ };
131
+ aguaceroDebug('integration.audit', snapshot);
132
+ if (satCmdKeys.length === 0) {
133
+ aguaceroDebugWarn('integration.satelliteNativeMissing', {
134
+ hint: 'SatelliteLayer ViewManager has no commands — satellite will never render on Android.'
135
+ });
136
+ }
137
+ if (core && !core.bundleId && Platform.OS !== 'web') {
138
+ aguaceroDebugWarn('integration.bundleIdMissing', {
139
+ hint: 'core.bundleId is null — CDN may still work; some API keys require react-native-device-info.',
140
+ deviceInfoInstalled: deviceInfoOk
141
+ });
142
+ }
143
+ return snapshot;
144
+ }
145
+
146
+ /**
147
+ * @param {object} params
148
+ */
149
+ export function logSatelliteSyncReport(params) {
150
+ if (!isAguaceroRnDebugEnabled()) return;
151
+ const {
152
+ state,
153
+ core,
154
+ frames,
155
+ targetUnix,
156
+ runKey,
157
+ timelineKeyCount,
158
+ runKeyChanged,
159
+ timelineChanged,
160
+ stylePayload
161
+ } = params;
162
+ const first = frames?.[0];
163
+ const last = frames?.length ? frames[frames.length - 1] : null;
164
+ const report = {
165
+ runKey,
166
+ runKeyChanged,
167
+ timelineChanged,
168
+ timelineKeyCount,
169
+ builtFrameCount: frames?.length ?? 0,
170
+ targetUnix,
171
+ satelliteTimestamp: state?.satelliteTimestamp ?? null,
172
+ style: stylePayload,
173
+ instrument: state?.satelliteInstrumentId,
174
+ sector: state?.satelliteSectorLabel,
175
+ channel: state?.satelliteChannel,
176
+ availableSatelliteTimestamps: state?.availableSatelliteTimestamps?.length ?? 0,
177
+ sampleShaderFileName: first?.shaderFileName ?? null,
178
+ sampleFrameUrl: first?.url ? redactApiKeyFromUrl(first.url) : null,
179
+ firstUnix: first?.unix ?? null,
180
+ lastUnix: last?.unix ?? null,
181
+ auth: core ? getAguaceroAuthDiagnosticSnapshot(core) : undefined,
182
+ blackScreenHints: interpretSatelliteBlackScreenHints({
183
+ frameCount: frames?.length ?? 0,
184
+ targetUnix,
185
+ visible: stylePayload?.visible,
186
+ opacity: stylePayload?.opacity,
187
+ bundleIdPresent: Boolean(core?.bundleId)
188
+ })
189
+ };
190
+ aguaceroDebug('sync.report', report);
191
+ }
192
+
193
+ /**
194
+ * Subscribe to native → JS diagnostic events (Android). Returns unsubscribe.
195
+ * @returns {() => void}
196
+ */
197
+ export function installSatelliteDiagnosticListener() {
198
+ if (!isAguaceroRnDebugEnabled()) return () => {};
199
+ if (Platform.OS !== 'android') {
200
+ aguaceroDebug('nativeEvents.skipped', {
201
+ reason: 'only Android emits AguaceroSatelliteDiagnostic today'
202
+ });
203
+ return () => {};
204
+ }
205
+ if (diagSubscription) {
206
+ diagSubscription.remove();
207
+ diagSubscription = null;
208
+ }
209
+ const emitter = new NativeEventEmitter();
210
+ diagSubscription = emitter.addListener(SATELLITE_DIAGNOSTIC_EVENT, payload => {
211
+ if (!payload || typeof payload !== 'object') return;
212
+ const phase = payload.phase ?? 'unknown';
213
+ const detail = {
214
+ ...payload
215
+ };
216
+ delete detail.phase;
217
+ if (detail.basisFormatOrdinal != null) {
218
+ detail.basisFormat = basisFormatLabel(detail.basisFormatOrdinal);
219
+ }
220
+ if (detail.transcodeFormatOrdinal != null) {
221
+ detail.transcodeFormat = basisFormatLabel(detail.transcodeFormatOrdinal);
222
+ }
223
+ if (phase.includes('fail') || phase.includes('error') || phase === 'render.noDraw' || phase === 'render.poll' && (detail.cachedFrameCount === 0 || detail.activeUnix == null)) {
224
+ detail.blackScreenHints = interpretSatelliteBlackScreenHints(detail);
225
+ aguaceroDebugWarn(`native.${phase}`, detail);
226
+ } else {
227
+ aguaceroDebug(`native.${phase}`, detail);
228
+ }
229
+ });
230
+ aguaceroDebug('nativeEvents.installed', {
231
+ event: SATELLITE_DIAGNOSTIC_EVENT,
232
+ hint: 'Native fetch/decode/GPU logs will appear here when debug=true on WeatherLayerManager'
233
+ });
234
+ return () => {
235
+ diagSubscription?.remove();
236
+ diagSubscription = null;
237
+ };
238
+ }
239
+
240
+ /**
241
+ * @param {Record<string, unknown>} nativePayload
242
+ */
243
+ export function logSatelliteNativeDiagnostic(nativePayload) {
244
+ if (!isAguaceroRnDebugEnabled() || !nativePayload) return;
245
+ const phase = nativePayload.phase ?? 'event';
246
+ aguaceroDebug(`native.${phase}`, nativePayload);
247
+ }
248
+ //# sourceMappingURL=satelliteRnDebug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeEventEmitter","NativeModules","Platform","UIManager","aguaceroDebug","aguaceroDebugWarn","getAguaceroAuthDiagnosticSnapshot","isAguaceroRnDebugEnabled","redactApiKeyFromUrl","SATELLITE_DIAGNOSTIC_EVENT","LOG","diagSubscription","BASIS_FORMAT_NAMES","basisFormatLabel","ordinal","Number","isNaN","interpretSatelliteBlackScreenHints","ctx","hints","frameCount","nativeCached","nativeCachedFrames","cachedFrameCount","NaN","targetUnix","activeUnix","visible","opacity","basisFormat","basisFormatOrdinal","transcodeFormatOrdinal","push","bundleIdPresent","mapLayerAdded","satelliteNativeMissing","length","auditSatelliteIntegration","opts","core","satelliteLayerRef","satCmdKeys","gridCmdKeys","satManagerError","Object","keys","getViewManagerConfig","Commands","e","String","message","deviceInfoOk","deviceInfoBundleId","DeviceInfo","require","getBundleId","snapshot","platform","OS","satelliteNativeCommands","satelliteManagerError","gridNativeCommands","satelliteRefAttached","Boolean","current","satelliteRefMethods","reactNativeDeviceInfo","installed","bundleId","hint","mapboxNote","nativeLibraries","auth","undefined","deviceInfoInstalled","logSatelliteSyncReport","params","state","frames","runKey","timelineKeyCount","runKeyChanged","timelineChanged","stylePayload","first","last","report","builtFrameCount","satelliteTimestamp","style","instrument","satelliteInstrumentId","sector","satelliteSectorLabel","channel","satelliteChannel","availableSatelliteTimestamps","sampleShaderFileName","shaderFileName","sampleFrameUrl","url","firstUnix","unix","lastUnix","blackScreenHints","installSatelliteDiagnosticListener","reason","remove","emitter","addListener","payload","phase","detail","transcodeFormat","includes","event","logSatelliteNativeDiagnostic","nativePayload"],"sourceRoot":"..\\..\\src","sources":["satelliteRnDebug.js"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"WeatherLayerManager.d.ts","sourceRoot":"","sources":["../../src/WeatherLayerManager.js"],"names":[],"mappings":"AAyQA,sCAutDG"}
1
+ {"version":3,"file":"WeatherLayerManager.d.ts","sourceRoot":"","sources":["../../src/WeatherLayerManager.js"],"names":[],"mappings":"AA0QA,sCA0uDG"}
@@ -1 +1 @@
1
- {"version":3,"file":"aguaceroRnDebug.d.ts","sourceRoot":"","sources":["../../src/aguaceroRnDebug.js"],"names":[],"mappings":"AAuCA;;GAEG;AACH,mDAFW,OAAO,QAIjB;AAED;;GAEG;AACH,gDAFW;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,QAwB/B;AAED;;;GAGG;AACH,4CAFa,OAAO,CAqBnB;AAUD;;;GAGG;AACH,uCAHW,MAAM,GAAG,IAAI,GAAG,SAAS,GACvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBnC;AAED;;;GAGG;AACH,qCAHW,MAAM,GACJ,MAAM,CAMlB;AAED;;;GAGG;AACH,uCAHW,MAAM,GACJ,MAAM,CAKlB;AAED;;;GAGG;AACH,0CAHW,MAAM,GACJ,OAAO,CAMnB;AAED;;;GAGG;AACH,mCAHW,MAAM,UACN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,QAS7C;AAED;;;;GAIG;AACH,uCAHW,MAAM,UACN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,QAS7C;AAED;;;GAGG;AACH,wDAHW,GAAiD,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,UACvL,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBjC;AAED;;;;GAIG;AACH,4DAJW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,eAErB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBnC;AA4BD;;GAEG;AACH,iDAiEC"}
1
+ {"version":3,"file":"aguaceroRnDebug.d.ts","sourceRoot":"","sources":["../../src/aguaceroRnDebug.js"],"names":[],"mappings":"AAwCA;;GAEG;AACH,mDAFW,OAAO,QAIjB;AAED;;GAEG;AACH,gDAFW;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,QAwB/B;AAED;;;GAGG;AACH,4CAFa,OAAO,CAqBnB;AAUD;;;GAGG;AACH,uCAHW,MAAM,GAAG,IAAI,GAAG,SAAS,GACvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBnC;AAED;;;GAGG;AACH,qCAHW,MAAM,GACJ,MAAM,CAMlB;AAED;;;GAGG;AACH,uCAHW,MAAM,GACJ,MAAM,CAKlB;AAED;;;GAGG;AACH,0CAHW,MAAM,GACJ,OAAO,CAMnB;AAED;;;GAGG;AACH,mCAHW,MAAM,UACN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,QAS7C;AAED;;;;GAIG;AACH,uCAHW,MAAM,UACN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,QAS7C;AAED;;;GAGG;AACH,wDAHW,GAAiD,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,UACvL,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBjC;AAED;;;;GAIG;AACH,4DAJW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,eAErB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBnC;AA4BD;;GAEG;AACH,iDAiEC"}
@@ -2,6 +2,7 @@ export { MapManager } from "./MapManager";
2
2
  export { WeatherLayerManager } from "./WeatherLayerManager";
3
3
  export { default as GridRenderLayer } from "./GridRenderLayerNativeComponent";
4
4
  export { configureAguaceroRnDebug, setAguaceroRnDebugEnabled, isAguaceroRnDebugEnabled, getAguaceroAuthDiagnosticSnapshot, aguaceroDebug, aguaceroDebugWarn } from "./aguaceroRnDebug";
5
+ export { SATELLITE_DIAGNOSTIC_EVENT, auditSatelliteIntegration, installSatelliteDiagnosticListener, logSatelliteSyncReport, interpretSatelliteBlackScreenHints, basisFormatLabel } from "./satelliteRnDebug";
5
6
  export { resolveGridRequestSiteOrigin, RN_DEFAULT_GRID_REQUEST_SITE_ORIGIN } from "./gridCdnAuth";
6
7
  export { AGUACERO_NEXRAD_MAP_LAYER_ID, AGUACERO_SATELLITE_MAP_LAYER_ID } from "./nws/nwsAndroidConstants";
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"satelliteAndroidController.d.ts","sourceRoot":"","sources":["../../../src/satellite/satelliteAndroidController.js"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,oDAHW;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,EAAE,cACvD,MAAM,GAAG,IAAI;UADL,MAAM;SAAO,MAAM;oBAAkB,MAAM;IAiB7D;AAED;;;GAGG;AACH,yEAFW,MAAM;;;;;SA4BhB;AAED;IACI;;;OAGG;IACH,0CAFW,KAAK,CAAC,SAAS,CAAC;QAAE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;QAAC,2BAA2B,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC,EAcvM;IAXG,UAAgB;IAChB;wBAJyC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;yBAAmB,MAAM,IAAI;sCAAgC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;+BAAyB,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;OAIvJ;IAC1C,oBAAuB;IACvB,iCAAiC;IACjC,eADW,MAAM,GAAG,SAAS,CACC;IAC9B,iCAAiC;IACjC,oBADW,MAAM,GAAG,SAAS,CACM;IACnC,wCAAwC;IACxC,iBADW,MAAM,GAAG,IAAI,GAAG,SAAS,CACJ;IAChC,iCAAiC;IACjC,gBADW,MAAM,GAAG,SAAS,CACE;IAGnC,gBAQC;IAED;;OAEG;IACH,uBAsJC;CACJ"}
1
+ {"version":3,"file":"satelliteAndroidController.d.ts","sourceRoot":"","sources":["../../../src/satellite/satelliteAndroidController.js"],"names":[],"mappings":"AASA;;;;GAIG;AACH,oDAHW;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,EAAE,cACvD,MAAM,GAAG,IAAI;UADL,MAAM;SAAO,MAAM;oBAAkB,MAAM;IAiB7D;AAED;;;GAGG;AACH,yEAFW,MAAM;;;;;SA4BhB;AAED;IACI;;;OAGG;IACH,0CAFW,KAAK,CAAC,SAAS,CAAC;QAAE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;QAAC,2BAA2B,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC,EAcvM;IAXG,UAAgB;IAChB;wBAJyC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;yBAAmB,MAAM,IAAI;sCAAgC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;+BAAyB,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;OAIvJ;IAC1C,oBAAuB;IACvB,iCAAiC;IACjC,eADW,MAAM,GAAG,SAAS,CACC;IAC9B,iCAAiC;IACjC,oBADW,MAAM,GAAG,SAAS,CACM;IACnC,wCAAwC;IACxC,iBADW,MAAM,GAAG,IAAI,GAAG,SAAS,CACJ;IAChC,iCAAiC;IACjC,gBADW,MAAM,GAAG,SAAS,CACE;IAGnC,gBAQC;IAED;;OAEG;IACH,uBAiKC;CACJ"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @param {number | undefined} ordinal
3
+ */
4
+ export function basisFormatLabel(ordinal: number | undefined): any;
5
+ /**
6
+ * Actionable hints when imagery is black but JS sync looks healthy.
7
+ * @param {Record<string, unknown>} ctx
8
+ */
9
+ export function interpretSatelliteBlackScreenHints(ctx: Record<string, unknown>): string[];
10
+ /**
11
+ * One-shot integration audit (call when WeatherLayerManager mounts with debug).
12
+ * @param {{ core?: import('@aguacerowx/javascript-sdk').AguaceroCore; satelliteLayerRef?: React.RefObject<unknown> }} opts
13
+ */
14
+ export function auditSatelliteIntegration(opts?: {
15
+ core?: any;
16
+ satelliteLayerRef?: React.RefObject<unknown>;
17
+ }): {
18
+ platform: "ios" | "android" | "windows" | "macos" | "web";
19
+ satelliteNativeCommands: any[];
20
+ satelliteNativeMissing: boolean;
21
+ satelliteManagerError: string | null;
22
+ gridNativeCommands: any[];
23
+ satelliteRefAttached: boolean;
24
+ satelliteRefMethods: string[];
25
+ reactNativeDeviceInfo: {
26
+ installed: boolean;
27
+ bundleId: string | null;
28
+ hint?: undefined;
29
+ } | {
30
+ installed: boolean;
31
+ hint: string;
32
+ bundleId?: undefined;
33
+ };
34
+ mapboxNote: string;
35
+ nativeLibraries: string[];
36
+ auth: {
37
+ platform: "ios" | "android" | "windows" | "macos" | "web";
38
+ isReactNative: boolean;
39
+ baseGridUrl: any;
40
+ apiKey: Record<string, unknown>;
41
+ bundleId: {
42
+ present: boolean;
43
+ value: string;
44
+ length: number;
45
+ hint?: undefined;
46
+ } | {
47
+ present: boolean;
48
+ hint: string;
49
+ value?: undefined;
50
+ length?: undefined;
51
+ };
52
+ gridRequestSiteOrigin: {
53
+ present: boolean;
54
+ value: string;
55
+ length: number;
56
+ hint?: undefined;
57
+ } | {
58
+ present: boolean;
59
+ hint: string;
60
+ value?: undefined;
61
+ length?: undefined;
62
+ };
63
+ willSendAppIdentifier: boolean;
64
+ willSendOriginHeaders: boolean;
65
+ } | undefined;
66
+ } | undefined;
67
+ /**
68
+ * @param {object} params
69
+ */
70
+ export function logSatelliteSyncReport(params: object): void;
71
+ /**
72
+ * Subscribe to native → JS diagnostic events (Android). Returns unsubscribe.
73
+ * @returns {() => void}
74
+ */
75
+ export function installSatelliteDiagnosticListener(): () => void;
76
+ /**
77
+ * @param {Record<string, unknown>} nativePayload
78
+ */
79
+ export function logSatelliteNativeDiagnostic(nativePayload: Record<string, unknown>): void;
80
+ export const SATELLITE_DIAGNOSTIC_EVENT: "AguaceroSatelliteDiagnostic";
81
+ //# sourceMappingURL=satelliteRnDebug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"satelliteRnDebug.d.ts","sourceRoot":"","sources":["../../src/satelliteRnDebug.js"],"names":[],"mappings":"AAsBA;;GAEG;AACH,0CAFW,MAAM,GAAG,SAAS,OAK5B;AAED;;;GAGG;AACH,wDAFW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAqDjC;AAED;;;GAGG;AACH,iDAFW;IAAE,IAAI,CAAC,EAAE,GAAiD,CAAC;IAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAqEpH;AAED;;GAEG;AACH,+CAFW,MAAM,QA+ChB;AAED;;;GAGG;AACH,sDAFa,MAAM,IAAI,CA+CtB;AAED;;GAEG;AACH,4DAFW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAMjC;AAnQD,yCAA0C,6BAA6B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aguacerowx/react-native",
3
- "version": "0.0.52",
3
+ "version": "0.0.53",
4
4
  "description": "Native weather rendering for React Native",
5
5
  "license": "ISC",
6
6
  "author": "Michael Barletta",
@@ -46,7 +46,7 @@
46
46
  "react-native-device-info": ">=10.0.0"
47
47
  },
48
48
  "dependencies": {
49
- "@aguacerowx/javascript-sdk": "^0.0.29",
49
+ "@aguacerowx/javascript-sdk": "^0.0.30",
50
50
  "base64-js": "^1.5.1"
51
51
  },
52
52
  "react-native-builder-bob": {
@@ -29,6 +29,7 @@ import {
29
29
  } from './aguaceroRnDebug';
30
30
  import { installAguaceroCoreDebugHooks, logProcessFrameAuthMismatch } from './aguaceroCoreDebugHooks';
31
31
  import { resolveGridRequestSiteOrigin } from './gridCdnAuth';
32
+ import { auditSatelliteIntegration, installSatelliteDiagnosticListener } from './satelliteRnDebug';
32
33
 
33
34
  const NEXRAD_NATIVE = Platform.OS === 'android' || Platform.OS === 'ios';
34
35
  const SATELLITE_NATIVE = Platform.OS === 'android' || Platform.OS === 'ios';
@@ -271,6 +272,12 @@ export const WeatherLayerManager = forwardRef((props, ref) => {
271
272
  customColormaps,
272
273
  initialMode,
273
274
  initialVariable,
275
+ /** GOES instrument when {@link initialMode} is `"satellite"` (default `GOES19-EAST`). */
276
+ initialSatelliteId,
277
+ /** Sector token or label when {@link initialMode} is `"satellite"` (default `conus` → GOES-EAST CONUS). */
278
+ initialSatelliteSector,
279
+ /** Product/band when {@link initialMode} is `"satellite"` (e.g. `geocolor`, `C13`). Falls back to {@link initialVariable}. */
280
+ initialSatelliteProduct,
274
281
  autoRefresh,
275
282
  autoRefreshInterval,
276
283
  initialModel,
@@ -289,6 +296,12 @@ export const WeatherLayerManager = forwardRef((props, ref) => {
289
296
  useEffect(() => {
290
297
  configureAguaceroRnDebug({ enabled: Boolean(debug) });
291
298
  }, [debug]);
299
+
300
+ useEffect(() => {
301
+ if (!debug) return undefined;
302
+ auditSatelliteIntegration({ core, satelliteLayerRef });
303
+ return installSatelliteDiagnosticListener();
304
+ }, [debug, core]);
292
305
  const context = useContext(AguaceroContext);
293
306
 
294
307
  // Create the core here instead of getting it from context
@@ -302,6 +315,13 @@ export const WeatherLayerManager = forwardRef((props, ref) => {
302
315
  mode: initialMode,
303
316
  variable: initialVariable,
304
317
  model: initialModel,
318
+ ...(initialMode === 'satellite'
319
+ ? {
320
+ satelliteId: initialSatelliteId,
321
+ sector: initialSatelliteSector,
322
+ satelliteProduct: initialSatelliteProduct ?? initialVariable,
323
+ }
324
+ : {}),
305
325
  },
306
326
  autoRefresh: false, // <-- add this
307
327
  }),
@@ -16,6 +16,7 @@
16
16
  * or: `globalThis.__AGUACERO_DEBUG__ = true` in your entry file.
17
17
  *
18
18
  * Logs use the prefix `[AguaceroRN][debug]` (Metro, Xcode, Logcat).
19
+ * Satellite imagery: also filter `[AguaceroRN][satellite]` and native `AguaceroSatelliteDiagnostic` events.
19
20
  * API keys are never printed in full — only length, fingerprint, and whitespace hints.
20
21
  */
21
22
 
package/src/index.js CHANGED
@@ -8,6 +8,14 @@ export {
8
8
  aguaceroDebug,
9
9
  aguaceroDebugWarn,
10
10
  } from './aguaceroRnDebug';
11
+ export {
12
+ SATELLITE_DIAGNOSTIC_EVENT,
13
+ auditSatelliteIntegration,
14
+ installSatelliteDiagnosticListener,
15
+ logSatelliteSyncReport,
16
+ interpretSatelliteBlackScreenHints,
17
+ basisFormatLabel,
18
+ } from './satelliteRnDebug';
11
19
  export {
12
20
  resolveGridRequestSiteOrigin,
13
21
  RN_DEFAULT_GRID_REQUEST_SITE_ORIGIN,
@@ -5,6 +5,7 @@
5
5
  import { resolveSatelliteS3FileName } from '@aguacerowx/javascript-sdk';
6
6
  import { satBridgeWarn } from '../satelliteBridgeDiag';
7
7
  import { aguaceroDebug, getAguaceroAuthDiagnosticSnapshot, isAguaceroRnDebugEnabled, redactApiKeyFromUrl } from '../aguaceroRnDebug';
8
+ import { logSatelliteSyncReport } from '../satelliteRnDebug';
8
9
 
9
10
  /**
10
11
  * Target frame first, then remaining frames by increasing temporal distance to {@code targetUnix}.
@@ -149,11 +150,18 @@ export class SatelliteAndroidController {
149
150
  timelineKeyCount: keys.length,
150
151
  hasApiKey: Boolean(mergedState.apiKey),
151
152
  satelliteChannel: mergedState.satelliteChannel,
153
+ gridRequestSiteOrigin:
154
+ mergedState.gridRequestSiteOrigin ?? this.core.gridRequestSiteOrigin ?? null,
155
+ bundleId: this.core.bundleId ?? null,
152
156
  mapKeys:
153
157
  mergedState.satelliteTimeToFileMap &&
154
158
  typeof mergedState.satelliteTimeToFileMap === 'object'
155
159
  ? Object.keys(mergedState.satelliteTimeToFileMap).length
156
160
  : 0,
161
+ hint:
162
+ keys.length === 0
163
+ ? 'Timeline empty — wait for core.initialize / listing, or check satelliteId/sector/product.'
164
+ : 'Timeline has keys but no resolvable frame URLs — check satelliteChannel vs listing (e.g. geocolor needs MULTI on CONUS).',
157
165
  });
158
166
  }
159
167
 
@@ -182,15 +190,18 @@ export class SatelliteAndroidController {
182
190
  const timelineChanged = timelineSig !== this._cachedTimelineSig;
183
191
 
184
192
  if (runKeyChanged || timelineChanged) {
185
- if (isAguaceroRnDebugEnabled()) {
186
- aguaceroDebug('satellite.sync.payload', {
187
- auth: getAguaceroAuthDiagnosticSnapshot(this.core),
188
- frameCount: frames.length,
189
- sampleFrameUrl: frames[0] ? redactApiKeyFromUrl(frames[0].url) : null,
190
- gridRequestSiteOrigin: mergedState.gridRequestSiteOrigin ?? this.core.gridRequestSiteOrigin ?? null,
191
- });
192
- }
193
193
  const sortedFrames = sortFramesByTargetProximity(frames, targetUnix);
194
+ logSatelliteSyncReport({
195
+ state: mergedState,
196
+ core: this.core,
197
+ frames: sortedFrames,
198
+ targetUnix,
199
+ runKey: satRunKey,
200
+ timelineKeyCount: keys.length,
201
+ runKeyChanged,
202
+ timelineChanged,
203
+ stylePayload,
204
+ });
194
205
  const payload = {
195
206
  runKey: satRunKey,
196
207
  // Must match query params on each frame URL (same merge as buildSatelliteFetchParts) and mapsgl fetch headers.
@@ -203,6 +214,7 @@ export class SatelliteAndroidController {
203
214
  visible: stylePayload.visible,
204
215
  opacity: stylePayload.opacity,
205
216
  fillSmoothing: stylePayload.fillSmoothing,
217
+ debug: isAguaceroRnDebugEnabled(),
206
218
  frames: sortedFrames,
207
219
  };
208
220
  if (targetUnix != null && Number.isFinite(targetUnix)) {