@grupalia/rn-ui-kit 1.4.0 → 1.5.0

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 (43) hide show
  1. package/lib/commonjs/UIKitProvider.js +4 -0
  2. package/lib/commonjs/UIKitProvider.js.map +1 -1
  3. package/lib/commonjs/clock.js +146 -0
  4. package/lib/commonjs/clock.js.map +1 -0
  5. package/lib/commonjs/hooks/useTimezonedDate.js +5 -2
  6. package/lib/commonjs/hooks/useTimezonedDate.js.map +1 -1
  7. package/lib/commonjs/index.js +12 -0
  8. package/lib/commonjs/index.js.map +1 -1
  9. package/lib/commonjs/utils/timeConstants.js +2 -1
  10. package/lib/commonjs/utils/timeConstants.js.map +1 -1
  11. package/lib/module/UIKitProvider.js +5 -1
  12. package/lib/module/UIKitProvider.js.map +1 -1
  13. package/lib/module/clock.js +135 -0
  14. package/lib/module/clock.js.map +1 -0
  15. package/lib/module/hooks/useTimezonedDate.js +5 -2
  16. package/lib/module/hooks/useTimezonedDate.js.map +1 -1
  17. package/lib/module/index.js +1 -0
  18. package/lib/module/index.js.map +1 -1
  19. package/lib/module/utils/timeConstants.js +2 -1
  20. package/lib/module/utils/timeConstants.js.map +1 -1
  21. package/lib/typescript/commonjs/UIKitProvider.d.ts +2 -0
  22. package/lib/typescript/commonjs/UIKitProvider.d.ts.map +1 -1
  23. package/lib/typescript/commonjs/__tests__/clock.test.d.ts +2 -0
  24. package/lib/typescript/commonjs/__tests__/clock.test.d.ts.map +1 -0
  25. package/lib/typescript/commonjs/clock.d.ts +59 -0
  26. package/lib/typescript/commonjs/clock.d.ts.map +1 -0
  27. package/lib/typescript/commonjs/hooks/useTimezonedDate.d.ts.map +1 -1
  28. package/lib/typescript/commonjs/index.d.ts +1 -0
  29. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  30. package/lib/typescript/commonjs/utils/timeConstants.d.ts +2 -1
  31. package/lib/typescript/commonjs/utils/timeConstants.d.ts.map +1 -1
  32. package/lib/typescript/module/UIKitProvider.d.ts +2 -0
  33. package/lib/typescript/module/UIKitProvider.d.ts.map +1 -1
  34. package/lib/typescript/module/__tests__/clock.test.d.ts +2 -0
  35. package/lib/typescript/module/__tests__/clock.test.d.ts.map +1 -0
  36. package/lib/typescript/module/clock.d.ts +59 -0
  37. package/lib/typescript/module/clock.d.ts.map +1 -0
  38. package/lib/typescript/module/hooks/useTimezonedDate.d.ts.map +1 -1
  39. package/lib/typescript/module/index.d.ts +1 -0
  40. package/lib/typescript/module/index.d.ts.map +1 -1
  41. package/lib/typescript/module/utils/timeConstants.d.ts +2 -1
  42. package/lib/typescript/module/utils/timeConstants.d.ts.map +1 -1
  43. package/package.json +5 -3
@@ -7,6 +7,7 @@ exports.UIKitProvider = UIKitProvider;
7
7
  exports.useTimezone = useTimezone;
8
8
  exports.useUIKitConfig = useUIKitConfig;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
+ var _clock = require("./clock");
10
11
  var _jsxRuntime = require("react/jsx-runtime");
11
12
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
12
13
  const UIKitContext = /*#__PURE__*/(0, _react.createContext)({
@@ -23,6 +24,9 @@ function UIKitProvider({
23
24
  const contextValue = _react.default.useMemo(() => ({
24
25
  config
25
26
  }), [config]);
27
+ (0, _react.useEffect)(() => {
28
+ (0, _clock.setClockConfig)(config.clock);
29
+ }, [config.clock]);
26
30
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(UIKitContext.Provider, {
27
31
  value: contextValue,
28
32
  children: children
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","UIKitContext","createContext","config","internetConnection","undefined","appVersionCheck","timezone","UIKitProvider","children","contextValue","React","useMemo","jsx","Provider","value","useUIKitConfig","context","useContext","Error","useTimezone"],"sourceRoot":"../../src","sources":["UIKitProvider.tsx"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAAoE,IAAAC,WAAA,GAAAD,OAAA;AAAA,SAAAD,wBAAAG,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAL,uBAAA,YAAAA,CAAAG,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAepE,MAAMkB,YAAY,gBAAG,IAAAC,oBAAa,EAAmB;EACnDC,MAAM,EAAE;IACNC,kBAAkB,EAAEC,SAAS;IAC7BC,eAAe,EAAED,SAAS;IAC1BE,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC;AAOK,SAASC,aAAaA,CAAC;EAAEC,QAAQ;EAAEN;AAA2B,CAAC,EAAE;EACtE,MAAMO,YAAY,GAAGC,cAAK,CAACC,OAAO,CAAC,OAAO;IAAET;EAAO,CAAC,CAAC,EAAE,CAACA,MAAM,CAAC,CAAC;EAEhE,oBACE,IAAAtB,WAAA,CAAAgC,GAAA,EAACZ,YAAY,CAACa,QAAQ;IAACC,KAAK,EAAEL,YAAa;IAAAD,QAAA,EACxCA;EAAQ,CACY,CAAC;AAE5B;AAEO,SAASO,cAAcA,CAAA,EAAgB;EAC5C,MAAMC,OAAO,GAAG,IAAAC,iBAAU,EAACjB,YAAY,CAAC;EACxC,IAAI,CAACgB,OAAO,EAAE;IACZ,MAAM,IAAIE,KAAK,CAAC,oDAAoD,CAAC;EACvE;EACA,OAAOF,OAAO,CAACd,MAAM;AACvB;AAEO,SAASiB,WAAWA,CAAA,EAAW;EACpC,MAAMjB,MAAM,GAAGa,cAAc,CAAC,CAAC;EAE/B,OAAOb,MAAM,CAACI,QAAQ;AACxB","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_clock","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","UIKitContext","createContext","config","internetConnection","undefined","appVersionCheck","timezone","UIKitProvider","children","contextValue","React","useMemo","useEffect","setClockConfig","clock","jsx","Provider","value","useUIKitConfig","context","useContext","Error","useTimezone"],"sourceRoot":"../../src","sources":["UIKitProvider.tsx"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAIA,IAAAC,MAAA,GAAAD,OAAA;AAAsD,IAAAE,WAAA,GAAAF,OAAA;AAAA,SAAAD,wBAAAI,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAN,uBAAA,YAAAA,CAAAI,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAetD,MAAMkB,YAAY,gBAAG,IAAAC,oBAAa,EAAmB;EACnDC,MAAM,EAAE;IACNC,kBAAkB,EAAEC,SAAS;IAC7BC,eAAe,EAAED,SAAS;IAC1BE,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC;AAOK,SAASC,aAAaA,CAAC;EAAEC,QAAQ;EAAEN;AAA2B,CAAC,EAAE;EACtE,MAAMO,YAAY,GAAGC,cAAK,CAACC,OAAO,CAAC,OAAO;IAAET;EAAO,CAAC,CAAC,EAAE,CAACA,MAAM,CAAC,CAAC;EAEhE,IAAAU,gBAAS,EAAC,MAAM;IACd,IAAAC,qBAAc,EAACX,MAAM,CAACY,KAAK,CAAC;EAC9B,CAAC,EAAE,CAACZ,MAAM,CAACY,KAAK,CAAC,CAAC;EAElB,oBACE,IAAAlC,WAAA,CAAAmC,GAAA,EAACf,YAAY,CAACgB,QAAQ;IAACC,KAAK,EAAER,YAAa;IAAAD,QAAA,EACxCA;EAAQ,CACY,CAAC;AAE5B;AAEO,SAASU,cAAcA,CAAA,EAAgB;EAC5C,MAAMC,OAAO,GAAG,IAAAC,iBAAU,EAACpB,YAAY,CAAC;EACxC,IAAI,CAACmB,OAAO,EAAE;IACZ,MAAM,IAAIE,KAAK,CAAC,oDAAoD,CAAC;EACvE;EACA,OAAOF,OAAO,CAACjB,MAAM;AACvB;AAEO,SAASoB,WAAWA,CAAA,EAAW;EACpC,MAAMpB,MAAM,GAAGgB,cAAc,CAAC,CAAC;EAE/B,OAAOhB,MAAM,CAACI,QAAQ;AACxB","ignoreList":[]}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.driftBucket = driftBucket;
7
+ exports.getClockOffsetMs = getClockOffsetMs;
8
+ exports.pruneDriftSamples = pruneDriftSamples;
9
+ exports.recordDriftSample = recordDriftSample;
10
+ exports.resetClockStateForTesting = resetClockStateForTesting;
11
+ exports.selectDriftEstimate = selectDriftEstimate;
12
+ exports.serverNow = serverNow;
13
+ exports.setClockConfig = setClockConfig;
14
+ exports.useClockStore = void 0;
15
+ var _asyncStorage = _interopRequireDefault(require("@react-native-async-storage/async-storage"));
16
+ var _zustand = require("zustand");
17
+ var _middleware = require("zustand/middleware");
18
+ var _log = _interopRequireDefault(require("./utils/log"));
19
+ var _timeConstants = require("./utils/timeConstants");
20
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
+ /**
22
+ *
23
+ * Some devices have a wrong UTC epoch even when the displayed clock looks right (manual clock
24
+ * set under a wrong GMT offset). The consumer app's response interceptor feeds
25
+ * `recordDriftSample` with the server time of every response; `getClockOffsetMs`/`serverNow`
26
+ * expose the corrected "now". Both are plain functions so they work outside React
27
+ * (interceptors, linking config).
28
+ *
29
+ */
30
+
31
+ const MAX_RTT_MS = 5 * _timeConstants.MS_IN_A_SECOND;
32
+ const NOISE_FLOOR_MS = 2 * _timeConstants.MS_IN_A_SECOND;
33
+ const SAMPLE_WINDOW_MS = 5 * _timeConstants.MS_IN_A_MINUTE;
34
+ const APPLY_THRESHOLD_MS = 30 * _timeConstants.MS_IN_A_SECOND;
35
+ const MAX_PLAUSIBLE_OFFSET_MS = 12 * _timeConstants.MS_IN_A_HOUR;
36
+ const STALE_AFTER_MS = 7 * _timeConstants.MS_IN_A_DAY;
37
+ const FRESHNESS_WRITE_INTERVAL_MS = _timeConstants.MS_IN_A_HOUR;
38
+ const useClockStore = exports.useClockStore = (0, _zustand.create)()((0, _middleware.persist)(set => ({
39
+ offsetMs: 0,
40
+ measuredAtMs: 0,
41
+ setOffset: (offsetMs, measuredAtMs) => set({
42
+ offsetMs,
43
+ measuredAtMs
44
+ })
45
+ }), {
46
+ name: 'clock-store',
47
+ storage: (0, _middleware.createJSONStorage)(() => _asyncStorage.default)
48
+ }));
49
+
50
+ // Raw samples are kept in memory only: after a restart the clock may have been changed, so
51
+ // samples from a previous session are not trustworthy.
52
+ let samples = [];
53
+ let clockConfig;
54
+ let hasReportedImplausibleSample = false;
55
+
56
+ /** Wired by UIKitProvider; not part of the public API. */
57
+ function setClockConfig(config) {
58
+ clockConfig = config;
59
+ }
60
+ function driftBucket(offsetMs) {
61
+ const absOffsetMs = Math.abs(offsetMs);
62
+ if (absOffsetMs < NOISE_FLOOR_MS) return 'none';
63
+ if (absOffsetMs < APPLY_THRESHOLD_MS) return '<30s';
64
+ if (absOffsetMs < 5 * _timeConstants.MS_IN_A_MINUTE) return '30s-5m';
65
+ if (absOffsetMs < _timeConstants.MINUTES_IN_A_HOUR * _timeConstants.MS_IN_A_MINUTE) return '5m-1h';
66
+ return '>1h';
67
+ }
68
+ function pruneDriftSamples(driftSamples, nowMs) {
69
+ return driftSamples.filter(sample => {
70
+ const ageMs = nowMs - sample.atMs;
71
+ return ageMs >= 0 && ageMs < SAMPLE_WINDOW_MS;
72
+ });
73
+ }
74
+
75
+ /**
76
+ * The lowest-RTT sample in the window carries the least network-asymmetry error, so it wins.
77
+ * Offsets below the noise floor are reported as 0.
78
+ */
79
+ function selectDriftEstimate(driftSamples) {
80
+ if (driftSamples.length === 0) return null;
81
+ const best = driftSamples.reduce((a, b) => b.rttMs < a.rttMs ? b : a);
82
+ return {
83
+ ...best,
84
+ offsetMs: Math.abs(best.offsetMs) < NOISE_FLOOR_MS ? 0 : best.offsetMs
85
+ };
86
+ }
87
+ function recordDriftSample(rawOffsetMs, rttMs) {
88
+ // A slow round trip makes the travel-time compensation too uncertain to be a useful sample,
89
+ // and a negative one means the clock was changed while the request was in flight.
90
+ if (rttMs < 0 || rttMs > MAX_RTT_MS) return;
91
+ const atMs = Date.now();
92
+ const offsetMs = Math.round(rawOffsetMs / _timeConstants.MS_IN_A_SECOND) * _timeConstants.MS_IN_A_SECOND;
93
+ if (Math.abs(offsetMs) > MAX_PLAUSIBLE_OFFSET_MS) {
94
+ if (!hasReportedImplausibleSample) {
95
+ hasReportedImplausibleSample = true;
96
+ (0, _log.default)('clock', `discarded implausible drift sample: ${offsetMs}ms`);
97
+ clockConfig?.onImplausibleSample?.(offsetMs);
98
+ }
99
+ return;
100
+ }
101
+ samples = [...pruneDriftSamples(samples, atMs), {
102
+ offsetMs,
103
+ rttMs,
104
+ atMs
105
+ }];
106
+ const estimate = selectDriftEstimate(samples);
107
+ if (!estimate) return;
108
+ const {
109
+ offsetMs: storedOffsetMs,
110
+ measuredAtMs
111
+ } = useClockStore.getState();
112
+ const estimateChanged = estimate.offsetMs !== storedOffsetMs;
113
+ const freshnessExpired = atMs - measuredAtMs > FRESHNESS_WRITE_INTERVAL_MS;
114
+ if (estimateChanged || freshnessExpired) {
115
+ useClockStore.getState().setOffset(estimate.offsetMs, atMs);
116
+ }
117
+ if (driftBucket(estimate.offsetMs) !== driftBucket(storedOffsetMs)) {
118
+ (0, _log.default)('clock', `drift estimate is now ${estimate.offsetMs}ms (${driftBucket(estimate.offsetMs)})`);
119
+ clockConfig?.onDriftEstimateChange?.(estimate.offsetMs, estimate.rttMs);
120
+ }
121
+ }
122
+ function getClockOffsetMs() {
123
+ if (clockConfig?.applyCorrection === false) return 0;
124
+ const {
125
+ offsetMs,
126
+ measuredAtMs
127
+ } = useClockStore.getState();
128
+ if (Math.abs(offsetMs) < APPLY_THRESHOLD_MS) return 0;
129
+ if (Date.now() - measuredAtMs > STALE_AFTER_MS) return 0;
130
+ return offsetMs;
131
+ }
132
+ function serverNow() {
133
+ return new Date(Date.now() + getClockOffsetMs());
134
+ }
135
+
136
+ /** Test helper: clears module state that would otherwise leak between examples. */
137
+ function resetClockStateForTesting() {
138
+ samples = [];
139
+ clockConfig = undefined;
140
+ hasReportedImplausibleSample = false;
141
+ useClockStore.setState({
142
+ offsetMs: 0,
143
+ measuredAtMs: 0
144
+ });
145
+ }
146
+ //# sourceMappingURL=clock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_asyncStorage","_interopRequireDefault","require","_zustand","_middleware","_log","_timeConstants","e","__esModule","default","MAX_RTT_MS","MS_IN_A_SECOND","NOISE_FLOOR_MS","SAMPLE_WINDOW_MS","MS_IN_A_MINUTE","APPLY_THRESHOLD_MS","MAX_PLAUSIBLE_OFFSET_MS","MS_IN_A_HOUR","STALE_AFTER_MS","MS_IN_A_DAY","FRESHNESS_WRITE_INTERVAL_MS","useClockStore","exports","create","persist","set","offsetMs","measuredAtMs","setOffset","name","storage","createJSONStorage","AsyncStorage","samples","clockConfig","hasReportedImplausibleSample","setClockConfig","config","driftBucket","absOffsetMs","Math","abs","MINUTES_IN_A_HOUR","pruneDriftSamples","driftSamples","nowMs","filter","sample","ageMs","atMs","selectDriftEstimate","length","best","reduce","a","b","rttMs","recordDriftSample","rawOffsetMs","Date","now","round","log","onImplausibleSample","estimate","storedOffsetMs","getState","estimateChanged","freshnessExpired","onDriftEstimateChange","getClockOffsetMs","applyCorrection","serverNow","resetClockStateForTesting","undefined","setState"],"sourceRoot":"../../src","sources":["clock.ts"],"mappings":"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","ignoreList":[]}
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.useTimezonedDate = useTimezonedDate;
7
7
  var _tz = require("@date-fns/tz");
8
8
  var _react = require("react");
9
+ var _clock = require("../clock");
9
10
  var _UIKitProvider = require("../UIKitProvider");
10
11
  var _log = _interopRequireDefault(require("../utils/log"));
11
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -111,9 +112,11 @@ function useTimezonedDate() {
111
112
  * @returns TZDate instance that works with all date-fns functions
112
113
  */
113
114
  const tz = (0, _react.useCallback)(date => {
114
- // Use appropriate timezone - real name if device is correct, generic offset if corrupted
115
+ // Use appropriate timezone - real name if device is correct, generic offset if corrupted.
116
+ // "Now" gets the measured server-clock offset applied (a no-op unless the app opted into
117
+ // clock.applyCorrection); explicit dates are data and are never shifted.
115
118
  if (date === undefined) {
116
- return _tz.TZDate.tz(appropriateTimezone);
119
+ return _tz.TZDate.tz(appropriateTimezone, new Date(Date.now() + (0, _clock.getClockOffsetMs)()));
117
120
  }
118
121
  if (date instanceof Date) {
119
122
  return _tz.TZDate.tz(appropriateTimezone, date);
@@ -1 +1 @@
1
- {"version":3,"names":["_tz","require","_react","_UIKitProvider","_log","_interopRequireDefault","e","__esModule","default","TIMEZONE_OFFSET_MAP","offsetToGenericTimezone","offset","offsetInMinutes","Math","abs","hourNum","floor","isWestOfGreenwich","etcSign","isDeviceTimezoneMappingCorrect","timezoneName","expectedOffsetInMinutes","deviceTestDate","TZDate","tz","deviceOffsetInMinutes","getTimezoneOffset","undefined","getAppropriateTimezone","log","useTimezonedDate","timezone","useTimezone","appropriateTimezone","useMemo","useCallback","date","Date","fromWallClock","fields","year","month","day","hour","minute","second","millisecond","fromDateString","split","Number"],"sourceRoot":"../../../src","sources":["hooks/useTimezonedDate.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_tz","require","_react","_clock","_UIKitProvider","_log","_interopRequireDefault","e","__esModule","default","TIMEZONE_OFFSET_MAP","offsetToGenericTimezone","offset","offsetInMinutes","Math","abs","hourNum","floor","isWestOfGreenwich","etcSign","isDeviceTimezoneMappingCorrect","timezoneName","expectedOffsetInMinutes","deviceTestDate","TZDate","tz","deviceOffsetInMinutes","getTimezoneOffset","undefined","getAppropriateTimezone","log","useTimezonedDate","timezone","useTimezone","appropriateTimezone","useMemo","useCallback","date","Date","now","getClockOffsetMs","fromWallClock","fields","year","month","day","hour","minute","second","millisecond","fromDateString","split","Number"],"sourceRoot":"../../../src","sources":["hooks/useTimezonedDate.ts"],"mappings":"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","ignoreList":[]}
@@ -57,6 +57,18 @@ var _backgroundColors = _interopRequireDefault(require("./styles/background-colo
57
57
  var _foregroundColors = _interopRequireDefault(require("./styles/foreground-colors"));
58
58
  var _utilityColors = _interopRequireDefault(require("./styles/utility-colors"));
59
59
  var _colors = _interopRequireDefault(require("./styles/colors"));
60
+ var _clock = require("./clock");
61
+ Object.keys(_clock).forEach(function (key) {
62
+ if (key === "default" || key === "__esModule") return;
63
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
64
+ if (key in exports && exports[key] === _clock[key]) return;
65
+ Object.defineProperty(exports, key, {
66
+ enumerable: true,
67
+ get: function () {
68
+ return _clock[key];
69
+ }
70
+ });
71
+ });
60
72
  var _hooks = require("./hooks");
61
73
  Object.keys(_hooks).forEach(function (key) {
62
74
  if (key === "default" || key === "__esModule") return;
@@ -1 +1 @@
1
- {"version":3,"names":["_components","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_preset","_interopRequireDefault","_backgroundColors","_foregroundColors","_utilityColors","_colors","_hooks","_UIKitProvider","_utils","_types","_jobRun","_createQueryKeys","_createResourceApi","_queriesFor","_line","e","__esModule","default"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_components","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_preset","_interopRequireDefault","_backgroundColors","_foregroundColors","_utilityColors","_colors","_clock","_hooks","_UIKitProvider","_utils","_types","_jobRun","_createQueryKeys","_createResourceApi","_queriesFor","_line","e","__esModule","default"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.SECONDS_IN_A_MINUTE = exports.MS_IN_A_WEEK = exports.MS_IN_A_SECOND = exports.MS_IN_A_MINUTE = exports.MS_IN_A_DAY = exports.MINUTES_IN_A_HOUR = exports.HOURS_IN_A_DAY = exports.DAYS_IN_A_WEEK = void 0;
6
+ exports.SECONDS_IN_A_MINUTE = exports.MS_IN_A_WEEK = exports.MS_IN_A_SECOND = exports.MS_IN_A_MINUTE = exports.MS_IN_A_HOUR = exports.MS_IN_A_DAY = exports.MINUTES_IN_A_HOUR = exports.HOURS_IN_A_DAY = exports.DAYS_IN_A_WEEK = void 0;
7
7
  const MS_IN_A_SECOND = exports.MS_IN_A_SECOND = 1_000;
8
8
  const HOURS_IN_A_DAY = exports.HOURS_IN_A_DAY = 24;
9
9
  const MINUTES_IN_A_HOUR = exports.MINUTES_IN_A_HOUR = 60;
@@ -11,5 +11,6 @@ const SECONDS_IN_A_MINUTE = exports.SECONDS_IN_A_MINUTE = 60;
11
11
  const DAYS_IN_A_WEEK = exports.DAYS_IN_A_WEEK = 7;
12
12
  const MS_IN_A_DAY = exports.MS_IN_A_DAY = MS_IN_A_SECOND * SECONDS_IN_A_MINUTE * MINUTES_IN_A_HOUR * HOURS_IN_A_DAY;
13
13
  const MS_IN_A_MINUTE = exports.MS_IN_A_MINUTE = MS_IN_A_SECOND * SECONDS_IN_A_MINUTE;
14
+ const MS_IN_A_HOUR = exports.MS_IN_A_HOUR = MS_IN_A_MINUTE * MINUTES_IN_A_HOUR;
14
15
  const MS_IN_A_WEEK = exports.MS_IN_A_WEEK = MS_IN_A_DAY * DAYS_IN_A_WEEK;
15
16
  //# sourceMappingURL=timeConstants.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MS_IN_A_SECOND","exports","HOURS_IN_A_DAY","MINUTES_IN_A_HOUR","SECONDS_IN_A_MINUTE","DAYS_IN_A_WEEK","MS_IN_A_DAY","MS_IN_A_MINUTE","MS_IN_A_WEEK"],"sourceRoot":"../../../src","sources":["utils/timeConstants.ts"],"mappings":";;;;;;AAAA,MAAMA,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG,KAAK;AAC5B,MAAME,cAAc,GAAAD,OAAA,CAAAC,cAAA,GAAG,EAAE;AACzB,MAAMC,iBAAiB,GAAAF,OAAA,CAAAE,iBAAA,GAAG,EAAE;AAC5B,MAAMC,mBAAmB,GAAAH,OAAA,CAAAG,mBAAA,GAAG,EAAE;AAC9B,MAAMC,cAAc,GAAAJ,OAAA,CAAAI,cAAA,GAAG,CAAC;AACxB,MAAMC,WAAW,GAAAL,OAAA,CAAAK,WAAA,GAAGN,cAAc,GAAGI,mBAAmB,GAAGD,iBAAiB,GAAGD,cAAc;AAC7F,MAAMK,cAAc,GAAAN,OAAA,CAAAM,cAAA,GAAGP,cAAc,GAAGI,mBAAmB;AAC3D,MAAMI,YAAY,GAAAP,OAAA,CAAAO,YAAA,GAAGF,WAAW,GAAGD,cAAc","ignoreList":[]}
1
+ {"version":3,"names":["MS_IN_A_SECOND","exports","HOURS_IN_A_DAY","MINUTES_IN_A_HOUR","SECONDS_IN_A_MINUTE","DAYS_IN_A_WEEK","MS_IN_A_DAY","MS_IN_A_MINUTE","MS_IN_A_HOUR","MS_IN_A_WEEK"],"sourceRoot":"../../../src","sources":["utils/timeConstants.ts"],"mappings":";;;;;;AAAA,MAAMA,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG,KAAK;AAC5B,MAAME,cAAc,GAAAD,OAAA,CAAAC,cAAA,GAAG,EAAE;AACzB,MAAMC,iBAAiB,GAAAF,OAAA,CAAAE,iBAAA,GAAG,EAAE;AAC5B,MAAMC,mBAAmB,GAAAH,OAAA,CAAAG,mBAAA,GAAG,EAAE;AAC9B,MAAMC,cAAc,GAAAJ,OAAA,CAAAI,cAAA,GAAG,CAAC;AACxB,MAAMC,WAAW,GAAAL,OAAA,CAAAK,WAAA,GAAGN,cAAc,GAAGI,mBAAmB,GAAGD,iBAAiB,GAAGD,cAAc;AAC7F,MAAMK,cAAc,GAAAN,OAAA,CAAAM,cAAA,GAAGP,cAAc,GAAGI,mBAAmB;AAC3D,MAAMI,YAAY,GAAAP,OAAA,CAAAO,YAAA,GAAGD,cAAc,GAAGJ,iBAAiB;AACvD,MAAMM,YAAY,GAAAR,OAAA,CAAAQ,YAAA,GAAGH,WAAW,GAAGD,cAAc","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
- import React, { createContext, useContext } from 'react';
3
+ import React, { createContext, useContext, useEffect } from 'react';
4
+ import { setClockConfig } from "./clock.js";
4
5
  import { jsx as _jsx } from "react/jsx-runtime";
5
6
  const UIKitContext = /*#__PURE__*/createContext({
6
7
  config: {
@@ -16,6 +17,9 @@ export function UIKitProvider({
16
17
  const contextValue = React.useMemo(() => ({
17
18
  config
18
19
  }), [config]);
20
+ useEffect(() => {
21
+ setClockConfig(config.clock);
22
+ }, [config.clock]);
19
23
  return /*#__PURE__*/_jsx(UIKitContext.Provider, {
20
24
  value: contextValue,
21
25
  children: children
@@ -1 +1 @@
1
- {"version":3,"names":["React","createContext","useContext","jsx","_jsx","UIKitContext","config","internetConnection","undefined","appVersionCheck","timezone","UIKitProvider","children","contextValue","useMemo","Provider","value","useUIKitConfig","context","Error","useTimezone"],"sourceRoot":"../../src","sources":["UIKitProvider.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,aAAa,EAAEC,UAAU,QAAmB,OAAO;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAepE,MAAMC,YAAY,gBAAGJ,aAAa,CAAmB;EACnDK,MAAM,EAAE;IACNC,kBAAkB,EAAEC,SAAS;IAC7BC,eAAe,EAAED,SAAS;IAC1BE,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC;AAOF,OAAO,SAASC,aAAaA,CAAC;EAAEC,QAAQ;EAAEN;AAA2B,CAAC,EAAE;EACtE,MAAMO,YAAY,GAAGb,KAAK,CAACc,OAAO,CAAC,OAAO;IAAER;EAAO,CAAC,CAAC,EAAE,CAACA,MAAM,CAAC,CAAC;EAEhE,oBACEF,IAAA,CAACC,YAAY,CAACU,QAAQ;IAACC,KAAK,EAAEH,YAAa;IAAAD,QAAA,EACxCA;EAAQ,CACY,CAAC;AAE5B;AAEA,OAAO,SAASK,cAAcA,CAAA,EAAgB;EAC5C,MAAMC,OAAO,GAAGhB,UAAU,CAACG,YAAY,CAAC;EACxC,IAAI,CAACa,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,oDAAoD,CAAC;EACvE;EACA,OAAOD,OAAO,CAACZ,MAAM;AACvB;AAEA,OAAO,SAASc,WAAWA,CAAA,EAAW;EACpC,MAAMd,MAAM,GAAGW,cAAc,CAAC,CAAC;EAE/B,OAAOX,MAAM,CAACI,QAAQ;AACxB","ignoreList":[]}
1
+ {"version":3,"names":["React","createContext","useContext","useEffect","setClockConfig","jsx","_jsx","UIKitContext","config","internetConnection","undefined","appVersionCheck","timezone","UIKitProvider","children","contextValue","useMemo","clock","Provider","value","useUIKitConfig","context","Error","useTimezone"],"sourceRoot":"../../src","sources":["UIKitProvider.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IACVC,aAAa,EAAEC,UAAU,EAAEC,SAAS,QAC/B,OAAO;AAEd,SAAsBC,cAAc,QAAQ,YAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAetD,MAAMC,YAAY,gBAAGN,aAAa,CAAmB;EACnDO,MAAM,EAAE;IACNC,kBAAkB,EAAEC,SAAS;IAC7BC,eAAe,EAAED,SAAS;IAC1BE,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC;AAOF,OAAO,SAASC,aAAaA,CAAC;EAAEC,QAAQ;EAAEN;AAA2B,CAAC,EAAE;EACtE,MAAMO,YAAY,GAAGf,KAAK,CAACgB,OAAO,CAAC,OAAO;IAAER;EAAO,CAAC,CAAC,EAAE,CAACA,MAAM,CAAC,CAAC;EAEhEL,SAAS,CAAC,MAAM;IACdC,cAAc,CAACI,MAAM,CAACS,KAAK,CAAC;EAC9B,CAAC,EAAE,CAACT,MAAM,CAACS,KAAK,CAAC,CAAC;EAElB,oBACEX,IAAA,CAACC,YAAY,CAACW,QAAQ;IAACC,KAAK,EAAEJ,YAAa;IAAAD,QAAA,EACxCA;EAAQ,CACY,CAAC;AAE5B;AAEA,OAAO,SAASM,cAAcA,CAAA,EAAgB;EAC5C,MAAMC,OAAO,GAAGnB,UAAU,CAACK,YAAY,CAAC;EACxC,IAAI,CAACc,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,oDAAoD,CAAC;EACvE;EACA,OAAOD,OAAO,CAACb,MAAM;AACvB;AAEA,OAAO,SAASe,WAAWA,CAAA,EAAW;EACpC,MAAMf,MAAM,GAAGY,cAAc,CAAC,CAAC;EAE/B,OAAOZ,MAAM,CAACI,QAAQ;AACxB","ignoreList":[]}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+
3
+ import AsyncStorage from '@react-native-async-storage/async-storage';
4
+ import { create } from 'zustand';
5
+ import { persist, createJSONStorage } from 'zustand/middleware';
6
+ import log from "./utils/log.js";
7
+ import { MINUTES_IN_A_HOUR, MS_IN_A_DAY, MS_IN_A_MINUTE, MS_IN_A_SECOND, MS_IN_A_HOUR } from "./utils/timeConstants.js";
8
+
9
+ /**
10
+ *
11
+ * Some devices have a wrong UTC epoch even when the displayed clock looks right (manual clock
12
+ * set under a wrong GMT offset). The consumer app's response interceptor feeds
13
+ * `recordDriftSample` with the server time of every response; `getClockOffsetMs`/`serverNow`
14
+ * expose the corrected "now". Both are plain functions so they work outside React
15
+ * (interceptors, linking config).
16
+ *
17
+ */
18
+
19
+ const MAX_RTT_MS = 5 * MS_IN_A_SECOND;
20
+ const NOISE_FLOOR_MS = 2 * MS_IN_A_SECOND;
21
+ const SAMPLE_WINDOW_MS = 5 * MS_IN_A_MINUTE;
22
+ const APPLY_THRESHOLD_MS = 30 * MS_IN_A_SECOND;
23
+ const MAX_PLAUSIBLE_OFFSET_MS = 12 * MS_IN_A_HOUR;
24
+ const STALE_AFTER_MS = 7 * MS_IN_A_DAY;
25
+ const FRESHNESS_WRITE_INTERVAL_MS = MS_IN_A_HOUR;
26
+ const useClockStore = create()(persist(set => ({
27
+ offsetMs: 0,
28
+ measuredAtMs: 0,
29
+ setOffset: (offsetMs, measuredAtMs) => set({
30
+ offsetMs,
31
+ measuredAtMs
32
+ })
33
+ }), {
34
+ name: 'clock-store',
35
+ storage: createJSONStorage(() => AsyncStorage)
36
+ }));
37
+
38
+ // Raw samples are kept in memory only: after a restart the clock may have been changed, so
39
+ // samples from a previous session are not trustworthy.
40
+ let samples = [];
41
+ let clockConfig;
42
+ let hasReportedImplausibleSample = false;
43
+
44
+ /** Wired by UIKitProvider; not part of the public API. */
45
+ export function setClockConfig(config) {
46
+ clockConfig = config;
47
+ }
48
+ export function driftBucket(offsetMs) {
49
+ const absOffsetMs = Math.abs(offsetMs);
50
+ if (absOffsetMs < NOISE_FLOOR_MS) return 'none';
51
+ if (absOffsetMs < APPLY_THRESHOLD_MS) return '<30s';
52
+ if (absOffsetMs < 5 * MS_IN_A_MINUTE) return '30s-5m';
53
+ if (absOffsetMs < MINUTES_IN_A_HOUR * MS_IN_A_MINUTE) return '5m-1h';
54
+ return '>1h';
55
+ }
56
+ export function pruneDriftSamples(driftSamples, nowMs) {
57
+ return driftSamples.filter(sample => {
58
+ const ageMs = nowMs - sample.atMs;
59
+ return ageMs >= 0 && ageMs < SAMPLE_WINDOW_MS;
60
+ });
61
+ }
62
+
63
+ /**
64
+ * The lowest-RTT sample in the window carries the least network-asymmetry error, so it wins.
65
+ * Offsets below the noise floor are reported as 0.
66
+ */
67
+ export function selectDriftEstimate(driftSamples) {
68
+ if (driftSamples.length === 0) return null;
69
+ const best = driftSamples.reduce((a, b) => b.rttMs < a.rttMs ? b : a);
70
+ return {
71
+ ...best,
72
+ offsetMs: Math.abs(best.offsetMs) < NOISE_FLOOR_MS ? 0 : best.offsetMs
73
+ };
74
+ }
75
+ export function recordDriftSample(rawOffsetMs, rttMs) {
76
+ // A slow round trip makes the travel-time compensation too uncertain to be a useful sample,
77
+ // and a negative one means the clock was changed while the request was in flight.
78
+ if (rttMs < 0 || rttMs > MAX_RTT_MS) return;
79
+ const atMs = Date.now();
80
+ const offsetMs = Math.round(rawOffsetMs / MS_IN_A_SECOND) * MS_IN_A_SECOND;
81
+ if (Math.abs(offsetMs) > MAX_PLAUSIBLE_OFFSET_MS) {
82
+ if (!hasReportedImplausibleSample) {
83
+ hasReportedImplausibleSample = true;
84
+ log('clock', `discarded implausible drift sample: ${offsetMs}ms`);
85
+ clockConfig?.onImplausibleSample?.(offsetMs);
86
+ }
87
+ return;
88
+ }
89
+ samples = [...pruneDriftSamples(samples, atMs), {
90
+ offsetMs,
91
+ rttMs,
92
+ atMs
93
+ }];
94
+ const estimate = selectDriftEstimate(samples);
95
+ if (!estimate) return;
96
+ const {
97
+ offsetMs: storedOffsetMs,
98
+ measuredAtMs
99
+ } = useClockStore.getState();
100
+ const estimateChanged = estimate.offsetMs !== storedOffsetMs;
101
+ const freshnessExpired = atMs - measuredAtMs > FRESHNESS_WRITE_INTERVAL_MS;
102
+ if (estimateChanged || freshnessExpired) {
103
+ useClockStore.getState().setOffset(estimate.offsetMs, atMs);
104
+ }
105
+ if (driftBucket(estimate.offsetMs) !== driftBucket(storedOffsetMs)) {
106
+ log('clock', `drift estimate is now ${estimate.offsetMs}ms (${driftBucket(estimate.offsetMs)})`);
107
+ clockConfig?.onDriftEstimateChange?.(estimate.offsetMs, estimate.rttMs);
108
+ }
109
+ }
110
+ export function getClockOffsetMs() {
111
+ if (clockConfig?.applyCorrection === false) return 0;
112
+ const {
113
+ offsetMs,
114
+ measuredAtMs
115
+ } = useClockStore.getState();
116
+ if (Math.abs(offsetMs) < APPLY_THRESHOLD_MS) return 0;
117
+ if (Date.now() - measuredAtMs > STALE_AFTER_MS) return 0;
118
+ return offsetMs;
119
+ }
120
+ export function serverNow() {
121
+ return new Date(Date.now() + getClockOffsetMs());
122
+ }
123
+
124
+ /** Test helper: clears module state that would otherwise leak between examples. */
125
+ export function resetClockStateForTesting() {
126
+ samples = [];
127
+ clockConfig = undefined;
128
+ hasReportedImplausibleSample = false;
129
+ useClockStore.setState({
130
+ offsetMs: 0,
131
+ measuredAtMs: 0
132
+ });
133
+ }
134
+ export { useClockStore };
135
+ //# sourceMappingURL=clock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AsyncStorage","create","persist","createJSONStorage","log","MINUTES_IN_A_HOUR","MS_IN_A_DAY","MS_IN_A_MINUTE","MS_IN_A_SECOND","MS_IN_A_HOUR","MAX_RTT_MS","NOISE_FLOOR_MS","SAMPLE_WINDOW_MS","APPLY_THRESHOLD_MS","MAX_PLAUSIBLE_OFFSET_MS","STALE_AFTER_MS","FRESHNESS_WRITE_INTERVAL_MS","useClockStore","set","offsetMs","measuredAtMs","setOffset","name","storage","samples","clockConfig","hasReportedImplausibleSample","setClockConfig","config","driftBucket","absOffsetMs","Math","abs","pruneDriftSamples","driftSamples","nowMs","filter","sample","ageMs","atMs","selectDriftEstimate","length","best","reduce","a","b","rttMs","recordDriftSample","rawOffsetMs","Date","now","round","onImplausibleSample","estimate","storedOffsetMs","getState","estimateChanged","freshnessExpired","onDriftEstimateChange","getClockOffsetMs","applyCorrection","serverNow","resetClockStateForTesting","undefined","setState"],"sourceRoot":"../../src","sources":["clock.ts"],"mappings":"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","ignoreList":[]}
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { TZDate } from '@date-fns/tz';
4
4
  import { useCallback, useMemo } from 'react';
5
+ import { getClockOffsetMs } from "../clock.js";
5
6
  import { useTimezone } from "../UIKitProvider.js";
6
7
  import log from "../utils/log.js";
7
8
 
@@ -107,9 +108,11 @@ export function useTimezonedDate() {
107
108
  * @returns TZDate instance that works with all date-fns functions
108
109
  */
109
110
  const tz = useCallback(date => {
110
- // Use appropriate timezone - real name if device is correct, generic offset if corrupted
111
+ // Use appropriate timezone - real name if device is correct, generic offset if corrupted.
112
+ // "Now" gets the measured server-clock offset applied (a no-op unless the app opted into
113
+ // clock.applyCorrection); explicit dates are data and are never shifted.
111
114
  if (date === undefined) {
112
- return TZDate.tz(appropriateTimezone);
115
+ return TZDate.tz(appropriateTimezone, new Date(Date.now() + getClockOffsetMs()));
113
116
  }
114
117
  if (date instanceof Date) {
115
118
  return TZDate.tz(appropriateTimezone, date);
@@ -1 +1 @@
1
- {"version":3,"names":["TZDate","useCallback","useMemo","useTimezone","log","TIMEZONE_OFFSET_MAP","offsetToGenericTimezone","offset","offsetInMinutes","Math","abs","hourNum","floor","isWestOfGreenwich","etcSign","isDeviceTimezoneMappingCorrect","timezoneName","expectedOffsetInMinutes","deviceTestDate","tz","deviceOffsetInMinutes","getTimezoneOffset","undefined","getAppropriateTimezone","useTimezonedDate","timezone","appropriateTimezone","date","Date","fromWallClock","fields","year","month","day","hour","minute","second","millisecond","fromDateString","split","Number"],"sourceRoot":"../../../src","sources":["hooks/useTimezonedDate.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["TZDate","useCallback","useMemo","getClockOffsetMs","useTimezone","log","TIMEZONE_OFFSET_MAP","offsetToGenericTimezone","offset","offsetInMinutes","Math","abs","hourNum","floor","isWestOfGreenwich","etcSign","isDeviceTimezoneMappingCorrect","timezoneName","expectedOffsetInMinutes","deviceTestDate","tz","deviceOffsetInMinutes","getTimezoneOffset","undefined","getAppropriateTimezone","useTimezonedDate","timezone","appropriateTimezone","date","Date","now","fromWallClock","fields","year","month","day","hour","minute","second","millisecond","fromDateString","split","Number"],"sourceRoot":"../../../src","sources":["hooks/useTimezonedDate.ts"],"mappings":"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","ignoreList":[]}
@@ -6,6 +6,7 @@ export { default as backgroundColors } from "./styles/background-colors.js";
6
6
  export { default as foregroundColors } from "./styles/foreground-colors.js";
7
7
  export { default as utilityColors } from "./styles/utility-colors.js";
8
8
  export { default as colors } from "./styles/colors.js";
9
+ export * from "./clock.js";
9
10
  export * from "./hooks/index.js";
10
11
  export * from "./UIKitProvider.js";
11
12
  export * from "./utils/index.js";
@@ -1 +1 @@
1
- {"version":3,"names":["default","preset","backgroundColors","foregroundColors","utilityColors","colors"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,cAAc,uBAAc;AAC5B,SAASA,OAAO,IAAIC,MAAM,QAAQ,aAAU;AAC5C,SAASD,OAAO,IAAIE,gBAAgB,QAAQ,+BAA4B;AACxE,SAASF,OAAO,IAAIG,gBAAgB,QAAQ,+BAA4B;AACxE,SAASH,OAAO,IAAII,aAAa,QAAQ,4BAAyB;AAClE,SAASJ,OAAO,IAAIK,MAAM,QAAQ,oBAAiB;AACnD,cAAc,kBAAS;AACvB,cAAc,oBAAiB;AAC/B,cAAc,kBAAS;AACvB,cAAc,gBAAa;AAC3B,cAAc,iBAAc;AAC5B,cAAc,0BAAuB;AACrC,cAAc,4BAAyB;AACvC,cAAc,qBAAkB;AAIhC,cAAc,6CAAoC","ignoreList":[]}
1
+ {"version":3,"names":["default","preset","backgroundColors","foregroundColors","utilityColors","colors"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,cAAc,uBAAc;AAC5B,SAASA,OAAO,IAAIC,MAAM,QAAQ,aAAU;AAC5C,SAASD,OAAO,IAAIE,gBAAgB,QAAQ,+BAA4B;AACxE,SAASF,OAAO,IAAIG,gBAAgB,QAAQ,+BAA4B;AACxE,SAASH,OAAO,IAAII,aAAa,QAAQ,4BAAyB;AAClE,SAASJ,OAAO,IAAIK,MAAM,QAAQ,oBAAiB;AACnD,cAAc,YAAS;AACvB,cAAc,kBAAS;AACvB,cAAc,oBAAiB;AAC/B,cAAc,kBAAS;AACvB,cAAc,gBAAa;AAC3B,cAAc,iBAAc;AAC5B,cAAc,0BAAuB;AACrC,cAAc,4BAAyB;AACvC,cAAc,qBAAkB;AAIhC,cAAc,6CAAoC","ignoreList":[]}
@@ -7,6 +7,7 @@ const SECONDS_IN_A_MINUTE = 60;
7
7
  const DAYS_IN_A_WEEK = 7;
8
8
  const MS_IN_A_DAY = MS_IN_A_SECOND * SECONDS_IN_A_MINUTE * MINUTES_IN_A_HOUR * HOURS_IN_A_DAY;
9
9
  const MS_IN_A_MINUTE = MS_IN_A_SECOND * SECONDS_IN_A_MINUTE;
10
+ const MS_IN_A_HOUR = MS_IN_A_MINUTE * MINUTES_IN_A_HOUR;
10
11
  const MS_IN_A_WEEK = MS_IN_A_DAY * DAYS_IN_A_WEEK;
11
- export { MS_IN_A_SECOND, HOURS_IN_A_DAY, MINUTES_IN_A_HOUR, SECONDS_IN_A_MINUTE, DAYS_IN_A_WEEK, MS_IN_A_DAY, MS_IN_A_MINUTE, MS_IN_A_WEEK };
12
+ export { MS_IN_A_SECOND, HOURS_IN_A_DAY, MINUTES_IN_A_HOUR, SECONDS_IN_A_MINUTE, DAYS_IN_A_WEEK, MS_IN_A_DAY, MS_IN_A_MINUTE, MS_IN_A_HOUR, MS_IN_A_WEEK };
12
13
  //# sourceMappingURL=timeConstants.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MS_IN_A_SECOND","HOURS_IN_A_DAY","MINUTES_IN_A_HOUR","SECONDS_IN_A_MINUTE","DAYS_IN_A_WEEK","MS_IN_A_DAY","MS_IN_A_MINUTE","MS_IN_A_WEEK"],"sourceRoot":"../../../src","sources":["utils/timeConstants.ts"],"mappings":";;AAAA,MAAMA,cAAc,GAAG,KAAK;AAC5B,MAAMC,cAAc,GAAG,EAAE;AACzB,MAAMC,iBAAiB,GAAG,EAAE;AAC5B,MAAMC,mBAAmB,GAAG,EAAE;AAC9B,MAAMC,cAAc,GAAG,CAAC;AACxB,MAAMC,WAAW,GAAGL,cAAc,GAAGG,mBAAmB,GAAGD,iBAAiB,GAAGD,cAAc;AAC7F,MAAMK,cAAc,GAAGN,cAAc,GAAGG,mBAAmB;AAC3D,MAAMI,YAAY,GAAGF,WAAW,GAAGD,cAAc;AAEjD,SACEJ,cAAc,EACdC,cAAc,EACdC,iBAAiB,EACjBC,mBAAmB,EACnBC,cAAc,EACdC,WAAW,EACXC,cAAc,EACdC,YAAY","ignoreList":[]}
1
+ {"version":3,"names":["MS_IN_A_SECOND","HOURS_IN_A_DAY","MINUTES_IN_A_HOUR","SECONDS_IN_A_MINUTE","DAYS_IN_A_WEEK","MS_IN_A_DAY","MS_IN_A_MINUTE","MS_IN_A_HOUR","MS_IN_A_WEEK"],"sourceRoot":"../../../src","sources":["utils/timeConstants.ts"],"mappings":";;AAAA,MAAMA,cAAc,GAAG,KAAK;AAC5B,MAAMC,cAAc,GAAG,EAAE;AACzB,MAAMC,iBAAiB,GAAG,EAAE;AAC5B,MAAMC,mBAAmB,GAAG,EAAE;AAC9B,MAAMC,cAAc,GAAG,CAAC;AACxB,MAAMC,WAAW,GAAGL,cAAc,GAAGG,mBAAmB,GAAGD,iBAAiB,GAAGD,cAAc;AAC7F,MAAMK,cAAc,GAAGN,cAAc,GAAGG,mBAAmB;AAC3D,MAAMI,YAAY,GAAGD,cAAc,GAAGJ,iBAAiB;AACvD,MAAMM,YAAY,GAAGH,WAAW,GAAGD,cAAc;AAEjD,SACEJ,cAAc,EACdC,cAAc,EACdC,iBAAiB,EACjBC,mBAAmB,EACnBC,cAAc,EACdC,WAAW,EACXC,cAAc,EACdC,YAAY,EACZC,YAAY","ignoreList":[]}
@@ -1,10 +1,12 @@
1
1
  import React, { ReactNode } from 'react';
2
+ import { ClockConfig } from './clock';
2
3
  import { AppVersionCheckConfig } from './hooks/useAppUpdateCheck';
3
4
  import { InternetConnectionStatusConfig } from './hooks/useInternetConnectionStatus';
4
5
  export interface UIKitConfig {
5
6
  internetConnection?: InternetConnectionStatusConfig;
6
7
  appVersionCheck?: AppVersionCheckConfig;
7
8
  timezone: string;
9
+ clock?: ClockConfig;
8
10
  }
9
11
  interface UIKitProviderProps {
10
12
  children: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"UIKitProvider.d.ts","sourceRoot":"","sources":["../../../src/UIKitProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAA6B,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AAErF,MAAM,WAAW,WAAW;IAC1B,kBAAkB,CAAC,EAAE,8BAA8B,CAAC;IACpD,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAcD,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,kBAAkB,qBAQrE;AAED,wBAAgB,cAAc,IAAI,WAAW,CAM5C;AAED,wBAAgB,WAAW,IAAI,MAAM,CAIpC"}
1
+ {"version":3,"file":"UIKitProvider.d.ts","sourceRoot":"","sources":["../../../src/UIKitProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAC0B,SAAS,EAChD,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,WAAW,EAAkB,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AAErF,MAAM,WAAW,WAAW;IAC1B,kBAAkB,CAAC,EAAE,8BAA8B,CAAC;IACpD,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAcD,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,kBAAkB,qBAYrE;AAED,wBAAgB,cAAc,IAAI,WAAW,CAM5C;AAED,wBAAgB,WAAW,IAAI,MAAM,CAIpC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=clock.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/clock.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ /**
2
+ *
3
+ * Some devices have a wrong UTC epoch even when the displayed clock looks right (manual clock
4
+ * set under a wrong GMT offset). The consumer app's response interceptor feeds
5
+ * `recordDriftSample` with the server time of every response; `getClockOffsetMs`/`serverNow`
6
+ * expose the corrected "now". Both are plain functions so they work outside React
7
+ * (interceptors, linking config).
8
+ *
9
+ */
10
+ type DriftBucket = 'none' | '<30s' | '30s-5m' | '5m-1h' | '>1h';
11
+ interface ClockConfig {
12
+ /** Called when the drift estimate moves to a different bucket. Send telemetry here. */
13
+ onDriftEstimateChange?: (estimateMs: number, rttMs: number) => void;
14
+ /** Called (once per session) when a sample is beyond any plausible clock error. */
15
+ onImplausibleSample?: (offsetMs: number) => void;
16
+ /** Apply the measured offset in tz()/useCurrentTime/serverNow. Defaults to true; set false
17
+ * for observe-only mode (drift is measured and reported but never applied). */
18
+ applyCorrection?: boolean;
19
+ }
20
+ interface ClockStoreState {
21
+ offsetMs: number;
22
+ measuredAtMs: number;
23
+ setOffset: (offsetMs: number, measuredAtMs: number) => void;
24
+ }
25
+ interface DriftSample {
26
+ offsetMs: number;
27
+ rttMs: number;
28
+ atMs: number;
29
+ }
30
+ declare const useClockStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<ClockStoreState>, "setState" | "persist"> & {
31
+ setState(partial: ClockStoreState | Partial<ClockStoreState> | ((state: ClockStoreState) => ClockStoreState | Partial<ClockStoreState>), replace?: false | undefined): unknown;
32
+ setState(state: ClockStoreState | ((state: ClockStoreState) => ClockStoreState), replace: true): unknown;
33
+ persist: {
34
+ setOptions: (options: Partial<import("zustand/middleware").PersistOptions<ClockStoreState, unknown, unknown>>) => void;
35
+ clearStorage: () => void;
36
+ rehydrate: () => void | Promise<void>;
37
+ hasHydrated: () => boolean;
38
+ onHydrate: (fn: (state: ClockStoreState) => void) => () => void;
39
+ onFinishHydration: (fn: (state: ClockStoreState) => void) => () => void;
40
+ getOptions: () => Partial<import("zustand/middleware").PersistOptions<ClockStoreState, unknown, unknown>>;
41
+ };
42
+ }>;
43
+ /** Wired by UIKitProvider; not part of the public API. */
44
+ export declare function setClockConfig(config: ClockConfig | undefined): void;
45
+ export declare function driftBucket(offsetMs: number): DriftBucket;
46
+ export declare function pruneDriftSamples(driftSamples: DriftSample[], nowMs: number): DriftSample[];
47
+ /**
48
+ * The lowest-RTT sample in the window carries the least network-asymmetry error, so it wins.
49
+ * Offsets below the noise floor are reported as 0.
50
+ */
51
+ export declare function selectDriftEstimate(driftSamples: DriftSample[]): DriftSample | null;
52
+ export declare function recordDriftSample(rawOffsetMs: number, rttMs: number): void;
53
+ export declare function getClockOffsetMs(): number;
54
+ export declare function serverNow(): Date;
55
+ /** Test helper: clears module state that would otherwise leak between examples. */
56
+ export declare function resetClockStateForTesting(): void;
57
+ export { useClockStore };
58
+ export type { ClockConfig, DriftBucket, DriftSample };
59
+ //# sourceMappingURL=clock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../../../src/clock.ts"],"names":[],"mappings":"AASA;;;;;;;;GAQG;AAEH,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;AAEhE,UAAU,WAAW;IACnB,uFAAuF;IACvF,qBAAqB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpE,mFAAmF;IACnF,mBAAmB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD;mFAC+E;IAC/E,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7D;AAED,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAUD,QAAA,MAAM,aAAa;;;;;;;;;;;;EAYlB,CAAC;AAQF,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAEpE;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CASzD;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAM3F;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,WAAW,GAAG,IAAI,CAMnF;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAkC1E;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CASzC;AAED,wBAAgB,SAAS,IAAI,IAAI,CAEhC;AAED,mFAAmF;AACnF,wBAAgB,yBAAyB,IAAI,IAAI,CAKhD;AAED,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTimezonedDate.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useTimezonedDate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA2EtC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB;gBAUC,IAAI,GAAG,MAAM,GAAG,MAAM,KAAG,MAAM;4BAyBnB;QACzC,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;2BAkByC,MAAM;;EAgBjD"}
1
+ {"version":3,"file":"useTimezonedDate.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useTimezonedDate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA4EtC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB;gBAUC,IAAI,GAAG,MAAM,GAAG,MAAM,KAAG,MAAM;4BA2BnB;QACzC,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;2BAkByC,MAAM;;EAgBjD"}
@@ -4,6 +4,7 @@ export { default as backgroundColors } from './styles/background-colors';
4
4
  export { default as foregroundColors } from './styles/foreground-colors';
5
5
  export { default as utilityColors } from './styles/utility-colors';
6
6
  export { default as colors } from './styles/colors';
7
+ export * from './clock';
7
8
  export * from './hooks';
8
9
  export * from './UIKitProvider';
9
10
  export * from './utils';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACjE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,cAAc,oCAAoC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACjE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,cAAc,oCAAoC,CAAC"}
@@ -5,6 +5,7 @@ declare const SECONDS_IN_A_MINUTE = 60;
5
5
  declare const DAYS_IN_A_WEEK = 7;
6
6
  declare const MS_IN_A_DAY: number;
7
7
  declare const MS_IN_A_MINUTE: number;
8
+ declare const MS_IN_A_HOUR: number;
8
9
  declare const MS_IN_A_WEEK: number;
9
- export { MS_IN_A_SECOND, HOURS_IN_A_DAY, MINUTES_IN_A_HOUR, SECONDS_IN_A_MINUTE, DAYS_IN_A_WEEK, MS_IN_A_DAY, MS_IN_A_MINUTE, MS_IN_A_WEEK, };
10
+ export { MS_IN_A_SECOND, HOURS_IN_A_DAY, MINUTES_IN_A_HOUR, SECONDS_IN_A_MINUTE, DAYS_IN_A_WEEK, MS_IN_A_DAY, MS_IN_A_MINUTE, MS_IN_A_HOUR, MS_IN_A_WEEK, };
10
11
  //# sourceMappingURL=timeConstants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"timeConstants.d.ts","sourceRoot":"","sources":["../../../../src/utils/timeConstants.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,cAAc,OAAQ,CAAC;AAC7B,QAAA,MAAM,cAAc,KAAK,CAAC;AAC1B,QAAA,MAAM,iBAAiB,KAAK,CAAC;AAC7B,QAAA,MAAM,mBAAmB,KAAK,CAAC;AAC/B,QAAA,MAAM,cAAc,IAAI,CAAC;AACzB,QAAA,MAAM,WAAW,QAA4E,CAAC;AAC9F,QAAA,MAAM,cAAc,QAAuC,CAAC;AAC5D,QAAA,MAAM,YAAY,QAA+B,CAAC;AAElD,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,cAAc,EACd,YAAY,GACb,CAAC"}
1
+ {"version":3,"file":"timeConstants.d.ts","sourceRoot":"","sources":["../../../../src/utils/timeConstants.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,cAAc,OAAQ,CAAC;AAC7B,QAAA,MAAM,cAAc,KAAK,CAAC;AAC1B,QAAA,MAAM,iBAAiB,KAAK,CAAC;AAC7B,QAAA,MAAM,mBAAmB,KAAK,CAAC;AAC/B,QAAA,MAAM,cAAc,IAAI,CAAC;AACzB,QAAA,MAAM,WAAW,QAA4E,CAAC;AAC9F,QAAA,MAAM,cAAc,QAAuC,CAAC;AAC5D,QAAA,MAAM,YAAY,QAAqC,CAAC;AACxD,QAAA,MAAM,YAAY,QAA+B,CAAC;AAElD,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,cAAc,EACd,YAAY,EACZ,YAAY,GACb,CAAC"}
@@ -1,10 +1,12 @@
1
1
  import React, { ReactNode } from 'react';
2
+ import { ClockConfig } from './clock';
2
3
  import { AppVersionCheckConfig } from './hooks/useAppUpdateCheck';
3
4
  import { InternetConnectionStatusConfig } from './hooks/useInternetConnectionStatus';
4
5
  export interface UIKitConfig {
5
6
  internetConnection?: InternetConnectionStatusConfig;
6
7
  appVersionCheck?: AppVersionCheckConfig;
7
8
  timezone: string;
9
+ clock?: ClockConfig;
8
10
  }
9
11
  interface UIKitProviderProps {
10
12
  children: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"UIKitProvider.d.ts","sourceRoot":"","sources":["../../../src/UIKitProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAA6B,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AAErF,MAAM,WAAW,WAAW;IAC1B,kBAAkB,CAAC,EAAE,8BAA8B,CAAC;IACpD,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAcD,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,kBAAkB,qBAQrE;AAED,wBAAgB,cAAc,IAAI,WAAW,CAM5C;AAED,wBAAgB,WAAW,IAAI,MAAM,CAIpC"}
1
+ {"version":3,"file":"UIKitProvider.d.ts","sourceRoot":"","sources":["../../../src/UIKitProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAC0B,SAAS,EAChD,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,WAAW,EAAkB,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AAErF,MAAM,WAAW,WAAW;IAC1B,kBAAkB,CAAC,EAAE,8BAA8B,CAAC;IACpD,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAcD,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,kBAAkB,qBAYrE;AAED,wBAAgB,cAAc,IAAI,WAAW,CAM5C;AAED,wBAAgB,WAAW,IAAI,MAAM,CAIpC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=clock.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/clock.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ /**
2
+ *
3
+ * Some devices have a wrong UTC epoch even when the displayed clock looks right (manual clock
4
+ * set under a wrong GMT offset). The consumer app's response interceptor feeds
5
+ * `recordDriftSample` with the server time of every response; `getClockOffsetMs`/`serverNow`
6
+ * expose the corrected "now". Both are plain functions so they work outside React
7
+ * (interceptors, linking config).
8
+ *
9
+ */
10
+ type DriftBucket = 'none' | '<30s' | '30s-5m' | '5m-1h' | '>1h';
11
+ interface ClockConfig {
12
+ /** Called when the drift estimate moves to a different bucket. Send telemetry here. */
13
+ onDriftEstimateChange?: (estimateMs: number, rttMs: number) => void;
14
+ /** Called (once per session) when a sample is beyond any plausible clock error. */
15
+ onImplausibleSample?: (offsetMs: number) => void;
16
+ /** Apply the measured offset in tz()/useCurrentTime/serverNow. Defaults to true; set false
17
+ * for observe-only mode (drift is measured and reported but never applied). */
18
+ applyCorrection?: boolean;
19
+ }
20
+ interface ClockStoreState {
21
+ offsetMs: number;
22
+ measuredAtMs: number;
23
+ setOffset: (offsetMs: number, measuredAtMs: number) => void;
24
+ }
25
+ interface DriftSample {
26
+ offsetMs: number;
27
+ rttMs: number;
28
+ atMs: number;
29
+ }
30
+ declare const useClockStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<ClockStoreState>, "setState" | "persist"> & {
31
+ setState(partial: ClockStoreState | Partial<ClockStoreState> | ((state: ClockStoreState) => ClockStoreState | Partial<ClockStoreState>), replace?: false | undefined): unknown;
32
+ setState(state: ClockStoreState | ((state: ClockStoreState) => ClockStoreState), replace: true): unknown;
33
+ persist: {
34
+ setOptions: (options: Partial<import("zustand/middleware").PersistOptions<ClockStoreState, unknown, unknown>>) => void;
35
+ clearStorage: () => void;
36
+ rehydrate: () => void | Promise<void>;
37
+ hasHydrated: () => boolean;
38
+ onHydrate: (fn: (state: ClockStoreState) => void) => () => void;
39
+ onFinishHydration: (fn: (state: ClockStoreState) => void) => () => void;
40
+ getOptions: () => Partial<import("zustand/middleware").PersistOptions<ClockStoreState, unknown, unknown>>;
41
+ };
42
+ }>;
43
+ /** Wired by UIKitProvider; not part of the public API. */
44
+ export declare function setClockConfig(config: ClockConfig | undefined): void;
45
+ export declare function driftBucket(offsetMs: number): DriftBucket;
46
+ export declare function pruneDriftSamples(driftSamples: DriftSample[], nowMs: number): DriftSample[];
47
+ /**
48
+ * The lowest-RTT sample in the window carries the least network-asymmetry error, so it wins.
49
+ * Offsets below the noise floor are reported as 0.
50
+ */
51
+ export declare function selectDriftEstimate(driftSamples: DriftSample[]): DriftSample | null;
52
+ export declare function recordDriftSample(rawOffsetMs: number, rttMs: number): void;
53
+ export declare function getClockOffsetMs(): number;
54
+ export declare function serverNow(): Date;
55
+ /** Test helper: clears module state that would otherwise leak between examples. */
56
+ export declare function resetClockStateForTesting(): void;
57
+ export { useClockStore };
58
+ export type { ClockConfig, DriftBucket, DriftSample };
59
+ //# sourceMappingURL=clock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../../../src/clock.ts"],"names":[],"mappings":"AASA;;;;;;;;GAQG;AAEH,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;AAEhE,UAAU,WAAW;IACnB,uFAAuF;IACvF,qBAAqB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpE,mFAAmF;IACnF,mBAAmB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD;mFAC+E;IAC/E,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7D;AAED,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAUD,QAAA,MAAM,aAAa;;;;;;;;;;;;EAYlB,CAAC;AAQF,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAEpE;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CASzD;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAM3F;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,WAAW,GAAG,IAAI,CAMnF;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAkC1E;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CASzC;AAED,wBAAgB,SAAS,IAAI,IAAI,CAEhC;AAED,mFAAmF;AACnF,wBAAgB,yBAAyB,IAAI,IAAI,CAKhD;AAED,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTimezonedDate.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useTimezonedDate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA2EtC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB;gBAUC,IAAI,GAAG,MAAM,GAAG,MAAM,KAAG,MAAM;4BAyBnB;QACzC,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;2BAkByC,MAAM;;EAgBjD"}
1
+ {"version":3,"file":"useTimezonedDate.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useTimezonedDate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA4EtC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB;gBAUC,IAAI,GAAG,MAAM,GAAG,MAAM,KAAG,MAAM;4BA2BnB;QACzC,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;2BAkByC,MAAM;;EAgBjD"}
@@ -4,6 +4,7 @@ export { default as backgroundColors } from './styles/background-colors';
4
4
  export { default as foregroundColors } from './styles/foreground-colors';
5
5
  export { default as utilityColors } from './styles/utility-colors';
6
6
  export { default as colors } from './styles/colors';
7
+ export * from './clock';
7
8
  export * from './hooks';
8
9
  export * from './UIKitProvider';
9
10
  export * from './utils';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACjE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,cAAc,oCAAoC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACjE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,cAAc,oCAAoC,CAAC"}
@@ -5,6 +5,7 @@ declare const SECONDS_IN_A_MINUTE = 60;
5
5
  declare const DAYS_IN_A_WEEK = 7;
6
6
  declare const MS_IN_A_DAY: number;
7
7
  declare const MS_IN_A_MINUTE: number;
8
+ declare const MS_IN_A_HOUR: number;
8
9
  declare const MS_IN_A_WEEK: number;
9
- export { MS_IN_A_SECOND, HOURS_IN_A_DAY, MINUTES_IN_A_HOUR, SECONDS_IN_A_MINUTE, DAYS_IN_A_WEEK, MS_IN_A_DAY, MS_IN_A_MINUTE, MS_IN_A_WEEK, };
10
+ export { MS_IN_A_SECOND, HOURS_IN_A_DAY, MINUTES_IN_A_HOUR, SECONDS_IN_A_MINUTE, DAYS_IN_A_WEEK, MS_IN_A_DAY, MS_IN_A_MINUTE, MS_IN_A_HOUR, MS_IN_A_WEEK, };
10
11
  //# sourceMappingURL=timeConstants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"timeConstants.d.ts","sourceRoot":"","sources":["../../../../src/utils/timeConstants.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,cAAc,OAAQ,CAAC;AAC7B,QAAA,MAAM,cAAc,KAAK,CAAC;AAC1B,QAAA,MAAM,iBAAiB,KAAK,CAAC;AAC7B,QAAA,MAAM,mBAAmB,KAAK,CAAC;AAC/B,QAAA,MAAM,cAAc,IAAI,CAAC;AACzB,QAAA,MAAM,WAAW,QAA4E,CAAC;AAC9F,QAAA,MAAM,cAAc,QAAuC,CAAC;AAC5D,QAAA,MAAM,YAAY,QAA+B,CAAC;AAElD,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,cAAc,EACd,YAAY,GACb,CAAC"}
1
+ {"version":3,"file":"timeConstants.d.ts","sourceRoot":"","sources":["../../../../src/utils/timeConstants.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,cAAc,OAAQ,CAAC;AAC7B,QAAA,MAAM,cAAc,KAAK,CAAC;AAC1B,QAAA,MAAM,iBAAiB,KAAK,CAAC;AAC7B,QAAA,MAAM,mBAAmB,KAAK,CAAC;AAC/B,QAAA,MAAM,cAAc,IAAI,CAAC;AACzB,QAAA,MAAM,WAAW,QAA4E,CAAC;AAC9F,QAAA,MAAM,cAAc,QAAuC,CAAC;AAC5D,QAAA,MAAM,YAAY,QAAqC,CAAC;AACxD,QAAA,MAAM,YAAY,QAA+B,CAAC;AAElD,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,cAAc,EACd,YAAY,EACZ,YAAY,GACb,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grupalia/rn-ui-kit",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "Grupalia React Native UI Kit",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/module/index.d.ts",
@@ -62,7 +62,8 @@
62
62
  "react-use-wizard": "^2.3.0",
63
63
  "tailwind-merge": "^2.5.0",
64
64
  "tailwindcss": "~3.3.2",
65
- "yup": "^1.7.1"
65
+ "yup": "^1.7.1",
66
+ "zustand": "^5.0.0"
66
67
  },
67
68
  "devDependencies": {
68
69
  "@babel/core": "^7.20.0",
@@ -122,7 +123,8 @@
122
123
  "tailwind-merge": "^2.5.0",
123
124
  "tailwindcss": "3.3.2",
124
125
  "typescript": "~5.3.3",
125
- "vitest": "^3.2.4"
126
+ "vitest": "^3.2.4",
127
+ "zustand": "^5.0.3"
126
128
  },
127
129
  "exports": {
128
130
  ".": {