@buoy-gg/storage 7.0.40 → 7.0.42

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 (215) hide show
  1. package/README.md +11 -86
  2. package/lib/commonjs/index.js +1 -346
  3. package/lib/commonjs/preset.js +1 -80
  4. package/lib/commonjs/storage/components/DiffViewer/TreeDiffViewer.js +1 -36
  5. package/lib/commonjs/storage/components/DiffViewer/modes/ThemedSplitView.js +1 -12
  6. package/lib/commonjs/storage/components/DiffViewer/themes/diffThemes.js +1 -24
  7. package/lib/commonjs/storage/components/GameUIStorageBrowser.js +3 -1258
  8. package/lib/commonjs/storage/components/MMKVInstanceInfoPanel.js +1 -257
  9. package/lib/commonjs/storage/components/MMKVInstanceSelector.js +1 -418
  10. package/lib/commonjs/storage/components/SelectionActionBar.js +1 -207
  11. package/lib/commonjs/storage/components/StorageActionButtons.js +1 -241
  12. package/lib/commonjs/storage/components/StorageBrowserMode.js +1 -61
  13. package/lib/commonjs/storage/components/StorageEventActionButton.js +1 -121
  14. package/lib/commonjs/storage/components/StorageEventCard.js +1 -117
  15. package/lib/commonjs/storage/components/StorageEventDetailContent.js +1 -494
  16. package/lib/commonjs/storage/components/StorageEventFilterView.js +1 -159
  17. package/lib/commonjs/storage/components/StorageEventsSection.js +1 -24
  18. package/lib/commonjs/storage/components/StorageFilterCards.js +1 -231
  19. package/lib/commonjs/storage/components/StorageKeyCard.js +1 -520
  20. package/lib/commonjs/storage/components/StorageKeyDetailScreen.js +1 -579
  21. package/lib/commonjs/storage/components/StorageKeyRow.js +1 -559
  22. package/lib/commonjs/storage/components/StorageKeySection.js +1 -160
  23. package/lib/commonjs/storage/components/StorageKeyStats.js +1 -344
  24. package/lib/commonjs/storage/components/StorageModalWithTabs.js +1 -954
  25. package/lib/commonjs/storage/components/StorageSaveNotice.js +1 -171
  26. package/lib/commonjs/storage/components/StorageSection.js +1 -43
  27. package/lib/commonjs/storage/components/StorageTypeFilterBar.js +1 -143
  28. package/lib/commonjs/storage/hooks/useAsyncStorageKeys.js +1 -141
  29. package/lib/commonjs/storage/hooks/useMMKVInstances.js +1 -210
  30. package/lib/commonjs/storage/hooks/useMMKVKeys.js +1 -376
  31. package/lib/commonjs/storage/hooks/useSecureStoreKeys.js +1 -159
  32. package/lib/commonjs/storage/hooks/useStorageEvents.js +1 -61
  33. package/lib/commonjs/storage/stores/storageEventStore.js +1 -312
  34. package/lib/commonjs/storage/sync/storageSyncAdapter.js +1 -478
  35. package/lib/commonjs/storage/types.js +1 -5
  36. package/lib/commonjs/storage/utils/AsyncStorageListener.js +1 -691
  37. package/lib/commonjs/storage/utils/AsyncStorageListener.web.js +1 -0
  38. package/lib/commonjs/storage/utils/MMKVInstanceRegistry.js +1 -203
  39. package/lib/commonjs/storage/utils/MMKVListener.js +1 -416
  40. package/lib/commonjs/storage/utils/SecureStoreRegistry.js +1 -200
  41. package/lib/commonjs/storage/utils/asyncStorageCompat.js +1 -89
  42. package/lib/commonjs/storage/utils/browserStorageLifecycle.js +1 -0
  43. package/lib/commonjs/storage/utils/browserStorageLifecycle.web.js +1 -0
  44. package/lib/commonjs/storage/utils/clearAllStorage.js +1 -48
  45. package/lib/commonjs/storage/utils/deleteStorageKeys.js +1 -82
  46. package/lib/commonjs/storage/utils/lineDiff.js +1 -30
  47. package/lib/commonjs/storage/utils/mmkvAvailability.js +1 -62
  48. package/lib/commonjs/storage/utils/mmkvAvailability.web.js +1 -0
  49. package/lib/commonjs/storage/utils/mmkvTypeDetection.js +1 -154
  50. package/lib/commonjs/storage/utils/requiredStorageKeyScope.js +1 -17
  51. package/lib/commonjs/storage/utils/setStorageValue.js +1 -218
  52. package/lib/commonjs/storage/utils/snapshotProvider.js +1 -382
  53. package/lib/commonjs/storage/utils/storageActionHelpers.js +1 -46
  54. package/lib/commonjs/storage/utils/storageBrowserRefresh.js +1 -49
  55. package/lib/commonjs/storage/utils/storageLabels.js +1 -0
  56. package/lib/commonjs/storage/utils/storageLabels.web.js +1 -0
  57. package/lib/commonjs/storage/utils/storageOps.js +1 -53
  58. package/lib/commonjs/storage/utils/storageQueryUtils.js +1 -35
  59. package/lib/commonjs/storage/utils/storageTimeTravelUtils.js +1 -288
  60. package/lib/commonjs/storage/utils/valueType.js +1 -83
  61. package/lib/module/index.js +1 -112
  62. package/lib/module/preset.js +1 -76
  63. package/lib/module/storage/components/DiffViewer/TreeDiffViewer.js +1 -32
  64. package/lib/module/storage/components/DiffViewer/modes/ThemedSplitView.js +1 -9
  65. package/lib/module/storage/components/DiffViewer/themes/diffThemes.js +1 -10
  66. package/lib/module/storage/components/GameUIStorageBrowser.js +3 -1256
  67. package/lib/module/storage/components/MMKVInstanceInfoPanel.js +1 -253
  68. package/lib/module/storage/components/MMKVInstanceSelector.js +1 -414
  69. package/lib/module/storage/components/SelectionActionBar.js +1 -204
  70. package/lib/module/storage/components/StorageActionButtons.js +1 -237
  71. package/lib/module/storage/components/StorageBrowserMode.js +1 -57
  72. package/lib/module/storage/components/StorageEventActionButton.js +1 -118
  73. package/lib/module/storage/components/StorageEventCard.js +1 -112
  74. package/lib/module/storage/components/StorageEventDetailContent.js +1 -490
  75. package/lib/module/storage/components/StorageEventFilterView.js +1 -155
  76. package/lib/module/storage/components/StorageEventsSection.js +1 -20
  77. package/lib/module/storage/components/StorageFilterCards.js +1 -227
  78. package/lib/module/storage/components/StorageKeyCard.js +1 -517
  79. package/lib/module/storage/components/StorageKeyDetailScreen.js +1 -577
  80. package/lib/module/storage/components/StorageKeyRow.js +1 -554
  81. package/lib/module/storage/components/StorageKeySection.js +1 -155
  82. package/lib/module/storage/components/StorageKeyStats.js +1 -341
  83. package/lib/module/storage/components/StorageModalWithTabs.js +1 -949
  84. package/lib/module/storage/components/StorageSaveNotice.js +1 -168
  85. package/lib/module/storage/components/StorageSection.js +1 -40
  86. package/lib/module/storage/components/StorageTypeFilterBar.js +1 -138
  87. package/lib/module/storage/hooks/useAsyncStorageKeys.js +1 -136
  88. package/lib/module/storage/hooks/useMMKVInstances.js +1 -204
  89. package/lib/module/storage/hooks/useMMKVKeys.js +1 -371
  90. package/lib/module/storage/hooks/useSecureStoreKeys.js +1 -156
  91. package/lib/module/storage/hooks/useStorageEvents.js +1 -58
  92. package/lib/module/storage/stores/storageEventStore.js +1 -301
  93. package/lib/module/storage/sync/storageSyncAdapter.js +1 -474
  94. package/lib/module/storage/types.js +1 -3
  95. package/lib/module/storage/utils/AsyncStorageListener.js +1 -679
  96. package/lib/module/storage/utils/AsyncStorageListener.web.js +1 -0
  97. package/lib/module/storage/utils/MMKVInstanceRegistry.js +1 -197
  98. package/lib/module/storage/utils/MMKVListener.js +1 -403
  99. package/lib/module/storage/utils/SecureStoreRegistry.js +1 -194
  100. package/lib/module/storage/utils/asyncStorageCompat.js +1 -81
  101. package/lib/module/storage/utils/browserStorageLifecycle.js +1 -0
  102. package/lib/module/storage/utils/browserStorageLifecycle.web.js +1 -0
  103. package/lib/module/storage/utils/clearAllStorage.js +1 -43
  104. package/lib/module/storage/utils/deleteStorageKeys.js +1 -78
  105. package/lib/module/storage/utils/lineDiff.js +1 -12
  106. package/lib/module/storage/utils/mmkvAvailability.js +1 -56
  107. package/lib/module/storage/utils/mmkvAvailability.web.js +1 -0
  108. package/lib/module/storage/utils/mmkvTypeDetection.js +1 -148
  109. package/lib/module/storage/utils/requiredStorageKeyScope.js +1 -13
  110. package/lib/module/storage/utils/setStorageValue.js +1 -209
  111. package/lib/module/storage/utils/snapshotProvider.js +1 -380
  112. package/lib/module/storage/utils/storageActionHelpers.js +1 -42
  113. package/lib/module/storage/utils/storageBrowserRefresh.js +1 -44
  114. package/lib/module/storage/utils/storageLabels.js +1 -0
  115. package/lib/module/storage/utils/storageLabels.web.js +1 -0
  116. package/lib/module/storage/utils/storageOps.js +1 -46
  117. package/lib/module/storage/utils/storageQueryUtils.js +1 -30
  118. package/lib/module/storage/utils/storageTimeTravelUtils.js +1 -281
  119. package/lib/module/storage/utils/valueType.js +1 -76
  120. package/lib/typescript/index.d.ts +1 -0
  121. package/lib/typescript/storage/components/MMKVInstanceSelector.d.ts +0 -8
  122. package/lib/typescript/storage/components/StorageEventCard.d.ts +0 -7
  123. package/lib/typescript/storage/components/StorageKeyRow.d.ts +2 -6
  124. package/lib/typescript/storage/components/StorageTypeFilterBar.d.ts +0 -15
  125. package/lib/typescript/storage/hooks/useSecureStoreKeys.d.ts +2 -2
  126. package/lib/typescript/storage/sync/storageSyncAdapter.d.ts +7 -13
  127. package/lib/typescript/storage/utils/AsyncStorageListener.web.d.ts +24 -0
  128. package/lib/typescript/storage/utils/browserStorageLifecycle.d.ts +3 -0
  129. package/lib/typescript/storage/utils/browserStorageLifecycle.web.d.ts +2 -0
  130. package/lib/typescript/storage/utils/mmkvAvailability.web.d.ts +4 -0
  131. package/lib/typescript/storage/utils/storageLabels.d.ts +8 -0
  132. package/lib/typescript/storage/utils/storageLabels.web.d.ts +8 -0
  133. package/lib/web/index.mjs +4 -0
  134. package/package.json +40 -14
  135. package/lib/commonjs/storage/components/DiffViewer/DiffOptionsPanel.js +0 -356
  136. package/lib/commonjs/storage/components/DiffViewer/components/DiffSummary.js +0 -122
  137. package/lib/commonjs/storage/components/StorageKeyEditorScreen.js +0 -414
  138. package/lib/commonjs/storage/components/StorageScalarKeyEditor.js +0 -61
  139. package/lib/commonjs/storage/components/StorageValueEditModal.js +0 -24
  140. package/lib/commonjs/storage/hooks/useKeyEditor.js +0 -31
  141. package/lib/commonjs/storage/hooks/useTreeDraft.js +0 -25
  142. package/lib/module/storage/components/DiffViewer/DiffOptionsPanel.js +0 -352
  143. package/lib/module/storage/components/DiffViewer/components/DiffSummary.js +0 -118
  144. package/lib/module/storage/components/StorageKeyEditorScreen.js +0 -410
  145. package/lib/module/storage/components/StorageScalarKeyEditor.js +0 -57
  146. package/lib/module/storage/components/StorageValueEditModal.js +0 -20
  147. package/lib/module/storage/hooks/useKeyEditor.js +0 -27
  148. package/lib/module/storage/hooks/useTreeDraft.js +0 -21
  149. package/lib/typescript/index.d.ts.map +0 -1
  150. package/lib/typescript/preset.d.ts.map +0 -1
  151. package/lib/typescript/storage/components/DiffViewer/DiffOptionsPanel.d.ts +0 -18
  152. package/lib/typescript/storage/components/DiffViewer/DiffOptionsPanel.d.ts.map +0 -1
  153. package/lib/typescript/storage/components/DiffViewer/TreeDiffViewer.d.ts.map +0 -1
  154. package/lib/typescript/storage/components/DiffViewer/components/DiffSummary.d.ts +0 -12
  155. package/lib/typescript/storage/components/DiffViewer/components/DiffSummary.d.ts.map +0 -1
  156. package/lib/typescript/storage/components/DiffViewer/modes/ThemedSplitView.d.ts.map +0 -1
  157. package/lib/typescript/storage/components/DiffViewer/themes/diffThemes.d.ts.map +0 -1
  158. package/lib/typescript/storage/components/GameUIStorageBrowser.d.ts.map +0 -1
  159. package/lib/typescript/storage/components/MMKVInstanceInfoPanel.d.ts.map +0 -1
  160. package/lib/typescript/storage/components/MMKVInstanceSelector.d.ts.map +0 -1
  161. package/lib/typescript/storage/components/SelectionActionBar.d.ts.map +0 -1
  162. package/lib/typescript/storage/components/StorageActionButtons.d.ts.map +0 -1
  163. package/lib/typescript/storage/components/StorageBrowserMode.d.ts.map +0 -1
  164. package/lib/typescript/storage/components/StorageEventActionButton.d.ts.map +0 -1
  165. package/lib/typescript/storage/components/StorageEventCard.d.ts.map +0 -1
  166. package/lib/typescript/storage/components/StorageEventDetailContent.d.ts.map +0 -1
  167. package/lib/typescript/storage/components/StorageEventFilterView.d.ts.map +0 -1
  168. package/lib/typescript/storage/components/StorageEventsSection.d.ts.map +0 -1
  169. package/lib/typescript/storage/components/StorageFilterCards.d.ts.map +0 -1
  170. package/lib/typescript/storage/components/StorageKeyCard.d.ts.map +0 -1
  171. package/lib/typescript/storage/components/StorageKeyDetailScreen.d.ts.map +0 -1
  172. package/lib/typescript/storage/components/StorageKeyEditorScreen.d.ts +0 -42
  173. package/lib/typescript/storage/components/StorageKeyEditorScreen.d.ts.map +0 -1
  174. package/lib/typescript/storage/components/StorageKeyRow.d.ts.map +0 -1
  175. package/lib/typescript/storage/components/StorageKeySection.d.ts.map +0 -1
  176. package/lib/typescript/storage/components/StorageKeyStats.d.ts.map +0 -1
  177. package/lib/typescript/storage/components/StorageModalWithTabs.d.ts.map +0 -1
  178. package/lib/typescript/storage/components/StorageSaveNotice.d.ts.map +0 -1
  179. package/lib/typescript/storage/components/StorageScalarKeyEditor.d.ts +0 -24
  180. package/lib/typescript/storage/components/StorageScalarKeyEditor.d.ts.map +0 -1
  181. package/lib/typescript/storage/components/StorageSection.d.ts.map +0 -1
  182. package/lib/typescript/storage/components/StorageTypeFilterBar.d.ts.map +0 -1
  183. package/lib/typescript/storage/components/StorageValueEditModal.d.ts +0 -14
  184. package/lib/typescript/storage/components/StorageValueEditModal.d.ts.map +0 -1
  185. package/lib/typescript/storage/hooks/useAsyncStorageKeys.d.ts.map +0 -1
  186. package/lib/typescript/storage/hooks/useKeyEditor.d.ts +0 -27
  187. package/lib/typescript/storage/hooks/useKeyEditor.d.ts.map +0 -1
  188. package/lib/typescript/storage/hooks/useMMKVInstances.d.ts.map +0 -1
  189. package/lib/typescript/storage/hooks/useMMKVKeys.d.ts.map +0 -1
  190. package/lib/typescript/storage/hooks/useSecureStoreKeys.d.ts.map +0 -1
  191. package/lib/typescript/storage/hooks/useStorageEvents.d.ts.map +0 -1
  192. package/lib/typescript/storage/hooks/useTreeDraft.d.ts +0 -16
  193. package/lib/typescript/storage/hooks/useTreeDraft.d.ts.map +0 -1
  194. package/lib/typescript/storage/stores/storageEventStore.d.ts.map +0 -1
  195. package/lib/typescript/storage/sync/storageSyncAdapter.d.ts.map +0 -1
  196. package/lib/typescript/storage/types.d.ts.map +0 -1
  197. package/lib/typescript/storage/utils/AsyncStorageListener.d.ts.map +0 -1
  198. package/lib/typescript/storage/utils/MMKVInstanceRegistry.d.ts.map +0 -1
  199. package/lib/typescript/storage/utils/MMKVListener.d.ts.map +0 -1
  200. package/lib/typescript/storage/utils/SecureStoreRegistry.d.ts.map +0 -1
  201. package/lib/typescript/storage/utils/asyncStorageCompat.d.ts.map +0 -1
  202. package/lib/typescript/storage/utils/clearAllStorage.d.ts.map +0 -1
  203. package/lib/typescript/storage/utils/deleteStorageKeys.d.ts.map +0 -1
  204. package/lib/typescript/storage/utils/lineDiff.d.ts.map +0 -1
  205. package/lib/typescript/storage/utils/mmkvAvailability.d.ts.map +0 -1
  206. package/lib/typescript/storage/utils/mmkvTypeDetection.d.ts.map +0 -1
  207. package/lib/typescript/storage/utils/requiredStorageKeyScope.d.ts.map +0 -1
  208. package/lib/typescript/storage/utils/setStorageValue.d.ts.map +0 -1
  209. package/lib/typescript/storage/utils/snapshotProvider.d.ts.map +0 -1
  210. package/lib/typescript/storage/utils/storageActionHelpers.d.ts.map +0 -1
  211. package/lib/typescript/storage/utils/storageBrowserRefresh.d.ts.map +0 -1
  212. package/lib/typescript/storage/utils/storageOps.d.ts.map +0 -1
  213. package/lib/typescript/storage/utils/storageQueryUtils.d.ts.map +0 -1
  214. package/lib/typescript/storage/utils/storageTimeTravelUtils.d.ts.map +0 -1
  215. package/lib/typescript/storage/utils/valueType.d.ts.map +0 -1
@@ -1,200 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.registerSecureStoreKeys = registerSecureStoreKeys;
7
- exports.secureStoreRegistry = void 0;
8
- exports.unregisterSecureStoreKey = unregisterSecureStoreKey;
9
- /**
10
- * Expo SecureStore Registry
11
- *
12
- * SecureStore (iOS Keychain / Android KeyStore) has NO key-enumeration API —
13
- * unlike AsyncStorage (`getAllKeys`) and MMKV (`getAllKeys()`), there is no way
14
- * to ask "what's stored?". Apps must therefore register the keys they want
15
- * visible in the Storage tool.
16
- *
17
- * The SecureStore module itself is passed in at registration (never imported
18
- * here) — the same Metro-safe pattern as `registerMMKVInstance`: this package
19
- * has zero dependency on `expo-secure-store`, so bare RN apps without it
20
- * bundle fine.
21
- *
22
- * @module SecureStoreRegistry
23
- */
24
-
25
- /**
26
- * Subset of expo-secure-store's SecureStoreOptions that the tool tracks.
27
- * `keychainService` MUST match what the value was written with, or reads
28
- * return null. `requireAuthentication` keys trigger a biometric prompt on
29
- * read, so the tool never auto-reads them.
30
- *
31
- * @public
32
- */
33
-
34
- /**
35
- * Structural type for the expo-secure-store module. Matches
36
- * `import * as SecureStore from "expo-secure-store"` without depending on it.
37
- *
38
- * @public
39
- */
40
-
41
- /**
42
- * A key to expose in the Storage tool: either a bare key name, or a key with
43
- * the SecureStore options it was written with (+ optional description shown
44
- * in the expanded card).
45
- *
46
- * @public
47
- */
48
-
49
- /**
50
- * Normalized info for a registered SecureStore key.
51
- *
52
- * @public
53
- */
54
-
55
- class SecureStoreRegistry {
56
- module = null;
57
- keys = new Map();
58
- listeners = new Set();
59
-
60
- /**
61
- * Register the SecureStore module and the keys to expose. Callable multiple
62
- * times — keys accumulate, the latest module wins.
63
- */
64
- register(module, descriptors) {
65
- const before = this.signature();
66
- this.module = module;
67
- for (const d of descriptors) {
68
- const entry = typeof d === "string" ? {
69
- key: d,
70
- options: {}
71
- } : {
72
- key: d.key,
73
- description: d.description,
74
- options: {
75
- keychainService: d.keychainService,
76
- requireAuthentication: d.requireAuthentication,
77
- authenticationPrompt: d.authenticationPrompt
78
- }
79
- };
80
- this.keys.set(entry.key, entry);
81
- }
82
- // Only announce a real change. The desktop dashboard re-registers the same
83
- // key set on every device snapshot, and subscribers re-read the keychain on
84
- // notify — signature-comparing keeps that from turning into a read storm.
85
- if (this.signature() !== before) this.notify();
86
- }
87
-
88
- /** Remove a key from the registry (does not delete the stored value). */
89
- unregister(key) {
90
- if (this.keys.delete(key)) this.notify();
91
- }
92
-
93
- /**
94
- * Subscribe to registry changes (keys registered/unregistered). Lets the
95
- * browser pick up keys that register after the tool is already open.
96
- * Returns an unsubscribe function.
97
- */
98
- subscribe(listener) {
99
- this.listeners.add(listener);
100
- return () => {
101
- this.listeners.delete(listener);
102
- };
103
- }
104
-
105
- /** Content signature of the registered entries (module identity excluded). */
106
- signature() {
107
- return JSON.stringify(Array.from(this.keys.values()));
108
- }
109
- notify() {
110
- this.listeners.forEach(listener => {
111
- try {
112
- listener();
113
- } catch {
114
- // Listener errors are not ours
115
- }
116
- });
117
- }
118
-
119
- /** The registered SecureStore module, or null if none registered yet. */
120
- getModule() {
121
- return this.module;
122
- }
123
-
124
- /** All registered key entries. */
125
- getAll() {
126
- return Array.from(this.keys.values());
127
- }
128
-
129
- /** Number of registered keys. */
130
- count() {
131
- return this.keys.size;
132
- }
133
-
134
- /**
135
- * Delete a stored value via the registered module, using the options the
136
- * key was registered with (required for keychainService-scoped keys).
137
- */
138
- async deleteValue(key) {
139
- const entry = this.keys.get(key);
140
- if (!this.module || !entry) return;
141
- await this.module.deleteItemAsync(key, entry.options);
142
- }
143
-
144
- /**
145
- * Write a stored value via the registered module, using the options the key
146
- * was registered with — writing with different `keychainService` options than
147
- * the value was created with silently creates a SECOND entry the app can't
148
- * read, so the registered options are the only safe ones to use.
149
- *
150
- * Throws rather than no-ops: unlike a delete, a write that quietly did
151
- * nothing would leave the UI showing a value that was never stored.
152
- */
153
- async setValue(key, value) {
154
- const entry = this.keys.get(key);
155
- if (!this.module) throw new Error("No SecureStore module is registered");
156
- if (!entry) throw new Error(`SecureStore key "${key}" is not registered`);
157
- if (entry.options.requireAuthentication) {
158
- throw new Error(`SecureStore key "${key}" is biometric-protected — DevTools never writes it`);
159
- }
160
- await this.module.setItemAsync(key, value, entry.options);
161
- }
162
- }
163
-
164
- /**
165
- * Singleton registry instance (advanced usage — most apps only need
166
- * {@link registerSecureStoreKeys}).
167
- */
168
- const secureStoreRegistry = exports.secureStoreRegistry = new SecureStoreRegistry();
169
-
170
- /**
171
- * Register Expo SecureStore keys with React Buoy DevTools.
172
- *
173
- * **⚠️ REQUIRED for SecureStore visibility**: SecureStore has no
174
- * key-enumeration API, so the tool can only show keys you declare here.
175
- * Pass the module itself so this package never has to import
176
- * `expo-secure-store`.
177
- *
178
- * @example
179
- * ```typescript
180
- * import * as SecureStore from "expo-secure-store";
181
- * import { registerSecureStoreKeys } from "@buoy-gg/storage";
182
- *
183
- * registerSecureStoreKeys(SecureStore, [
184
- * "auth.token",
185
- * { key: "session", keychainService: "com.myapp.auth" },
186
- * // Never auto-read; shown as biometric-protected:
187
- * { key: "pin", requireAuthentication: true },
188
- * ]);
189
- * ```
190
- */
191
- function registerSecureStoreKeys(module, keys) {
192
- secureStoreRegistry.register(module, keys);
193
- }
194
-
195
- /**
196
- * Remove a key from the DevTools registry (the stored value is untouched).
197
- */
198
- function unregisterSecureStoreKey(key) {
199
- secureStoreRegistry.unregister(key);
200
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.registerSecureStoreKeys=registerSecureStoreKeys;exports.secureStoreRegistry=void 0;exports.unregisterSecureStoreKey=unregisterSecureStoreKey;class SecureStoreRegistry{module=null;keys=new Map;listeners=new Set;register(e,r){const s=this.signature();this.module=e;for(const t of r){const o=typeof t==="string"?{key:t,options:{}}:{key:t.key,description:t.description,options:{keychainService:t.keychainService,requireAuthentication:t.requireAuthentication,authenticationPrompt:t.authenticationPrompt}};this.keys.set(o.key,o)}if(this.signature()!==s)this.notify()}unregister(e){if(this.keys.delete(e))this.notify()}subscribe(e){this.listeners.add(e);return()=>{this.listeners.delete(e)}}signature(){return JSON.stringify(Array.from(this.keys.values()))}notify(){this.listeners.forEach(e=>{try{e()}catch{}})}getModule(){return this.module}getAll(){return Array.from(this.keys.values())}count(){return this.keys.size}async deleteValue(e){const r=this.keys.get(e);if(!this.module||!r)return;await this.module.deleteItemAsync(e,r.options)}async setValue(e,r){const s=this.keys.get(e);if(!this.module)throw new Error("No SecureStore module is registered");if(!s)throw new Error(`SecureStore key "${e}" is not registered`);if(s.options.requireAuthentication){throw new Error(`SecureStore key "${e}" is biometric-protected \u2014 DevTools never writes it`)}await this.module.setItemAsync(e,r,s.options)}}const secureStoreRegistry=exports.secureStoreRegistry=new SecureStoreRegistry;function registerSecureStoreKeys(i,e){secureStoreRegistry.register(i,e)}function unregisterSecureStoreKey(i){secureStoreRegistry.unregister(i)}
@@ -1,89 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = exports.asyncStorageCaps = exports.asyncStorage = void 0;
7
- exports.readMany = readMany;
8
- exports.removeMany = removeMany;
9
- exports.writeMany = writeMany;
10
- var _asyncStorage = _interopRequireDefault(require("@react-native-async-storage/async-storage"));
11
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
- /**
13
- * AsyncStorage compatibility adapter (v2 + v3)
14
- *
15
- * `@react-native-async-storage/async-storage` 3.x reshaped the default-export
16
- * API. The single-item methods kept their v2 signatures, but the batch + merge
17
- * methods changed:
18
- *
19
- * v2 (what this package was written against) v3
20
- * ------------------------------------------ --------------------------------
21
- * multiGet(keys): [key, value|null][] getMany(keys): Record<key, value|null>
22
- * multiSet([[k, v]]): void setMany({ k: v }): void
23
- * multiRemove(keys): void removeMany(keys): void
24
- * mergeItem / multiMerge removed entirely
25
- *
26
- * This module is the single seam between the storage tool and whichever
27
- * async-storage version the host app installed. The rest of the package always
28
- * speaks the v2 tuple-shaped API; we translate to v3 here when needed.
29
- *
30
- * Reads (`readMany`) are routed through the *unswizzled* native methods, so the
31
- * event listener can safely call them while capturing previous values without
32
- * re-triggering itself.
33
- */
34
-
35
- // Loosely typed because the surface differs across major versions; callers go
36
- // through the helpers below rather than touching this directly.
37
-
38
- /** The live default-export object (methods may be swizzled by the listener). */
39
- const asyncStorage = exports.asyncStorage = _asyncStorage.default;
40
-
41
- /**
42
- * Capability flags describing which API surface the installed version exposes.
43
- * `multiGet` only exists on v2; `mergeItem` was removed in v3.
44
- */
45
- const asyncStorageCaps = exports.asyncStorageCaps = {
46
- /** v2 exposes multiGet/multiSet/multiRemove; v3 renamed these to *Many. */
47
- hasLegacyMultiApi: typeof asyncStorage?.multiGet === "function",
48
- /** v3 removed mergeItem/multiMerge with no replacement. */
49
- hasMergeApi: typeof asyncStorage?.mergeItem === "function"
50
- };
51
-
52
- /**
53
- * Batch-read keys, normalized to the v2 `[key, value|null][]` tuple shape and
54
- * preserving the requested key order regardless of installed version.
55
- */
56
- async function readMany(keys) {
57
- if (typeof asyncStorage.multiGet === "function") {
58
- return await asyncStorage.multiGet(keys);
59
- }
60
- // v3: getMany returns a Record; rebuild ordered tuples ("what you request is
61
- // what you get" — missing keys come back as null).
62
- const record = await asyncStorage.getMany(keys);
63
- return keys.map(key => [key, record[key] ?? null]);
64
- }
65
-
66
- /**
67
- * Batch-write key/value pairs. Calls the live method (which may be swizzled by
68
- * the listener on v2's `multiSet` / v3's `setMany`) so writes still emit events.
69
- */
70
- async function writeMany(pairs) {
71
- if (typeof asyncStorage.multiSet === "function") {
72
- return asyncStorage.multiSet(pairs);
73
- }
74
- const record = {};
75
- for (const [key, value] of pairs) record[key] = value;
76
- return asyncStorage.setMany(record);
77
- }
78
-
79
- /**
80
- * Batch-remove keys via the live method (swizzled on v2's `multiRemove` /
81
- * v3's `removeMany`).
82
- */
83
- async function removeMany(keys) {
84
- if (typeof asyncStorage.multiRemove === "function") {
85
- return asyncStorage.multiRemove(keys);
86
- }
87
- return asyncStorage.removeMany(keys);
88
- }
89
- var _default = exports.default = asyncStorage;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=exports.asyncStorageCaps=exports.asyncStorage=void 0;exports.readMany=readMany;exports.removeMany=removeMany;exports.writeMany=writeMany;var _asyncStorage=_interopRequireDefault(require("@react-native-async-storage/async-storage"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const asyncStorage=exports.asyncStorage=_asyncStorage.default;const asyncStorageCaps=exports.asyncStorageCaps={hasLegacyMultiApi:typeof asyncStorage?.multiGet==="function",hasMergeApi:typeof asyncStorage?.mergeItem==="function"};async function readMany(e){if(typeof asyncStorage.multiGet==="function"){return await asyncStorage.multiGet(e)}const t=await asyncStorage.getMany(e);return e.map(r=>[r,t[r]??null])}async function writeMany(e){if(typeof asyncStorage.multiSet==="function"){return asyncStorage.multiSet(e)}const t={};for(const[r,n]of e)t[r]=n;return asyncStorage.setMany(t)}async function removeMany(e){if(typeof asyncStorage.multiRemove==="function"){return asyncStorage.multiRemove(e)}return asyncStorage.removeMany(e)}var _default=exports.default=asyncStorage;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.startBrowserStorageCapture=startBrowserStorageCapture;function startBrowserStorageCapture(){return()=>{}}
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.startBrowserStorageCapture=startBrowserStorageCapture;var _utils=require("@buoy-gg/shared-ui/utils");var _MMKVInstanceRegistry=require("./MMKVInstanceRegistry");let owners=0;const storage=()=>(0,_utils.getBrowserStorage)("sessionStorage");const keys=()=>Array.from({length:storage().length},(e,r)=>storage().key(r)).filter(e=>e!==null);const sessionBackend={set(e,r){storage().setItem(e,String(r))},getString(e){return storage().getItem(e)??void 0},getNumber(){return void 0},getBoolean(){return void 0},getBuffer(){return void 0},contains(e){return storage().getItem(e)!==null},delete(e){const r=this.contains(e);storage().removeItem(e);return r},getAllKeys:keys,clearAll(){storage().clear()},get size(){return keys().reduce((e,r)=>e+2*(r.length+(storage().getItem(r)?.length??0)),0)},addOnValueChangedListener(e){return{remove:(0,_utils.subscribeToBrowserStorage)(r=>{if(r.area!=="sessionStorage")return;if(r.key!==void 0)e(r.key);else r.prevPairs?.forEach(([t])=>e(t))})}}};function startBrowserStorageCapture(){if(typeof window==="undefined")return()=>{};try{storage()}catch{return()=>{}}if(++owners===1)(0,_MMKVInstanceRegistry.registerMMKVInstance)("sessionStorage",sessionBackend);let e=true;return()=>{if(e){e=false;if(--owners===0)(0,_MMKVInstanceRegistry.unregisterMMKVInstance)("sessionStorage")}}}
@@ -1,48 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.clearAllAppStorage = clearAllAppStorage;
7
- exports.clearAllStorageIncludingDevTools = clearAllStorageIncludingDevTools;
8
- var _asyncStorage = _interopRequireDefault(require("@react-native-async-storage/async-storage"));
9
- var _asyncStorageCompat = require("./asyncStorageCompat");
10
- var _sharedUi = require("@buoy-gg/shared-ui");
11
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
- /**
13
- * Clear all storage data except dev tools keys
14
- * This preserves dev tool settings while clearing app data
15
- */
16
- async function clearAllAppStorage() {
17
- // Get all keys
18
- const allKeys = await _asyncStorage.default.getAllKeys();
19
- if (!allKeys || allKeys.length === 0) {
20
- // No keys to clear
21
- return;
22
- }
23
-
24
- // Filter out dev tool keys - we don't want to clear those
25
- const keysToRemove = allKeys.filter(key => !(0, _sharedUi.isDevToolsStorageKey)(key));
26
- if (keysToRemove.length === 0) {
27
- // No app keys to clear (only dev tool keys found)
28
- return;
29
- }
30
-
31
- // Clearing ${keysToRemove.length} app storage keys
32
-
33
- // Remove all non-dev-tool keys
34
- await (0, _asyncStorageCompat.removeMany)(keysToRemove);
35
-
36
- // Successfully cleared app storage
37
- }
38
-
39
- /**
40
- * Clear absolutely all storage data including dev tools
41
- * Use with caution - this will reset all dev tool settings
42
- */
43
- async function clearAllStorageIncludingDevTools() {
44
- // Clear everything
45
- await _asyncStorage.default.clear();
46
-
47
- // Successfully cleared all storage including dev tools
48
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.clearAllAppStorage=clearAllAppStorage;exports.clearAllStorageIncludingDevTools=clearAllStorageIncludingDevTools;var _asyncStorage=_interopRequireDefault(require("@react-native-async-storage/async-storage"));var _asyncStorageCompat=require("./asyncStorageCompat");var _sharedUi=require("@buoy-gg/shared-ui");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}async function clearAllAppStorage(){const e=await _asyncStorage.default.getAllKeys();if(!e||e.length===0){return}const a=e.filter(r=>!(0,_sharedUi.isDevToolsStorageKey)(r));if(a.length===0){return}await(0,_asyncStorageCompat.removeMany)(a)}async function clearAllStorageIncludingDevTools(){await _asyncStorage.default.clear()}
@@ -1,82 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.deleteStorageKeys = deleteStorageKeys;
7
- var _asyncStorageCompat = require("./asyncStorageCompat");
8
- var _SecureStoreRegistry = require("./SecureStoreRegistry");
9
- /**
10
- * Deleting storage keys, in one place.
11
- *
12
- * Each backend removes keys differently — AsyncStorage takes a batch,
13
- * SecureStore has to go through the registry (only it knows each key's
14
- * `keychainService` options), and MMKV deletes per registered instance. A
15
- * second copy of that fan-out is exactly how one backend quietly stops being
16
- * cleaned up — which is not hypothetical: the MMKV branch called a method
17
- * react-native-mmkv v4 had renamed, and deleting an MMKV key silently did
18
- * nothing until an e2e test deleted from all three backends at once.
19
- *
20
- * One call site today: the selection action bar. Deleting is deliberately not
21
- * an affordance on the row itself — see `StorageKeyRow`, whose expanded card
22
- * carries three actions and only one of them changes anything.
23
- *
24
- * Pro gating and confirmation are deliberately NOT here: they belong to the UI
25
- * that has the user's attention. This function assumes the caller already asked.
26
- */
27
-
28
- /**
29
- * Remove one key from an MMKV instance, whichever version it is.
30
- *
31
- * react-native-mmkv v4 renamed `delete(key)` to `remove(key)`. Calling the old
32
- * name on a v4 instance throws, and because the callers wrap deletion in a
33
- * try/catch that only surfaces an alert, the visible result was a key that
34
- * refused to delete — the same shape as a permissions problem or a read-only
35
- * instance, and nothing to point at the real cause.
36
- *
37
- * `storageSyncAdapter` and `snapshotProvider` already did this; this path was
38
- * the one that missed it.
39
- */
40
- function removeMMKVKey(instance, key) {
41
- if (typeof instance.remove === "function") {
42
- instance.remove(key);
43
- return;
44
- }
45
- if (typeof instance.delete === "function") {
46
- instance.delete(key);
47
- return;
48
- }
49
- throw new Error("MMKV instance exposes neither remove() nor delete()");
50
- }
51
-
52
- /**
53
- * Removes every key from whichever backend holds it. Rejects on the first
54
- * failure — callers surface that, rather than reporting a partial delete as
55
- * success.
56
- */
57
- async function deleteStorageKeys(keys, mmkvInstances) {
58
- if (keys.length === 0) return;
59
- const asyncKeys = keys.filter(k => k.storageType === "async");
60
- const mmkvKeys = keys.filter(k => k.storageType === "mmkv");
61
- const secureKeys = keys.filter(k => k.storageType === "secure");
62
- if (asyncKeys.length > 0) {
63
- await (0, _asyncStorageCompat.removeMany)(asyncKeys.map(k => k.key));
64
- }
65
- for (const k of secureKeys) {
66
- await _SecureStoreRegistry.secureStoreRegistry.deleteValue(k.key);
67
- }
68
- if (mmkvKeys.length > 0) {
69
- const byInstance = {};
70
- mmkvKeys.forEach(k => {
71
- const instanceId = k.instanceId || "default";
72
- if (!byInstance[instanceId]) byInstance[instanceId] = [];
73
- byInstance[instanceId].push(k.key);
74
- });
75
- Object.entries(byInstance).forEach(([instanceId, instanceKeys]) => {
76
- const inst = mmkvInstances.find(i => i.id === instanceId);
77
- if (inst) {
78
- instanceKeys.forEach(key => removeMMKVKey(inst.instance, key));
79
- }
80
- });
81
- }
82
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.deleteStorageKeys=deleteStorageKeys;var _asyncStorageCompat=require("./asyncStorageCompat");var _SecureStoreRegistry=require("./SecureStoreRegistry");function removeMMKVKey(t,o){if(typeof t.remove==="function"){t.remove(o);return}if(typeof t.delete==="function"){t.delete(o);return}throw new Error("MMKV instance exposes neither remove() nor delete()")}async function deleteStorageKeys(t,o){if(t.length===0)return;const a=t.filter(e=>e.storageType==="async");const c=t.filter(e=>e.storageType==="mmkv");const f=t.filter(e=>e.storageType==="secure");if(a.length>0){await(0,_asyncStorageCompat.removeMany)(a.map(e=>e.key))}for(const e of f){await _SecureStoreRegistry.secureStoreRegistry.deleteValue(e.key)}if(c.length>0){const e={};c.forEach(n=>{const r=n.instanceId||"default";if(!e[r])e[r]=[];e[r].push(n.key)});Object.entries(e).forEach(([n,r])=>{const i=o.find(s=>s.id===n);if(i){r.forEach(s=>removeMMKVKey(i.instance,s))}})}}
@@ -1,30 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "ABSENT_VALUE", {
7
- enumerable: true,
8
- get: function () {
9
- return _dataViewer.ABSENT_VALUE;
10
- }
11
- });
12
- Object.defineProperty(exports, "DiffType", {
13
- enumerable: true,
14
- get: function () {
15
- return _dataViewer.DiffType;
16
- }
17
- });
18
- Object.defineProperty(exports, "computeLineDiff", {
19
- enumerable: true,
20
- get: function () {
21
- return _dataViewer.computeLineDiff;
22
- }
23
- });
24
- Object.defineProperty(exports, "isAbsent", {
25
- enumerable: true,
26
- get: function () {
27
- return _dataViewer.isAbsent;
28
- }
29
- });
30
- var _dataViewer = require("@buoy-gg/shared-ui/dataViewer");
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"ABSENT_VALUE",{enumerable:true,get:function(){return _dataViewer.ABSENT_VALUE}});Object.defineProperty(exports,"DiffType",{enumerable:true,get:function(){return _dataViewer.DiffType}});Object.defineProperty(exports,"computeLineDiff",{enumerable:true,get:function(){return _dataViewer.computeLineDiff}});Object.defineProperty(exports,"isAbsent",{enumerable:true,get:function(){return _dataViewer.isAbsent}});var _dataViewer=require("@buoy-gg/shared-ui/dataViewer");
@@ -1,62 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.getMMKVClass = getMMKVClass;
7
- exports.getMMKVUnavailableMessage = getMMKVUnavailableMessage;
8
- exports.isMMKVAvailable = isMMKVAvailable;
9
- /**
10
- * MMKV Availability Detection
11
- *
12
- * Safely detects if react-native-mmkv is available in the current environment.
13
- * This allows the app to work in Expo Go where native modules aren't available.
14
- */
15
-
16
- let _isMMKVAvailable = null;
17
- let _MMKVClass = null;
18
-
19
- /**
20
- * Check if MMKV is available in the current environment
21
- *
22
- * @returns True if react-native-mmkv is installed and available
23
- */
24
- function isMMKVAvailable() {
25
- // Cache the result after first check
26
- if (_isMMKVAvailable !== null) {
27
- return _isMMKVAvailable;
28
- }
29
- try {
30
- // Attempt to require MMKV
31
- const MMKVModule = require('react-native-mmkv');
32
-
33
- // v4 uses createMMKV factory function, v3 used MMKV class
34
- // Try v4 API first (recommended), fall back to v3
35
- _MMKVClass = MMKVModule.createMMKV || MMKVModule.MMKV;
36
- _isMMKVAvailable = _MMKVClass !== undefined;
37
- return _isMMKVAvailable;
38
- } catch (error) {
39
- // MMKV is not available (e.g., Expo Go, not installed)
40
- _isMMKVAvailable = false;
41
- return false;
42
- }
43
- }
44
-
45
- /**
46
- * Get the MMKV class if available
47
- *
48
- * @returns MMKV class or null if not available
49
- */
50
- function getMMKVClass() {
51
- if (!isMMKVAvailable()) {
52
- return null;
53
- }
54
- return _MMKVClass;
55
- }
56
-
57
- /**
58
- * Get a user-friendly error message when MMKV is not available
59
- */
60
- function getMMKVUnavailableMessage() {
61
- return 'MMKV is not available in this environment. MMKV requires native modules and cannot run in Expo Go. Please use a development build or EAS Build.';
62
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getMMKVClass=getMMKVClass;exports.getMMKVUnavailableMessage=getMMKVUnavailableMessage;exports.isMMKVAvailable=isMMKVAvailable;let _isMMKVAvailable=null;let _MMKVClass=null;function isMMKVAvailable(){if(_isMMKVAvailable!==null){return _isMMKVAvailable}try{const e=require("react-native-mmkv");_MMKVClass=e.createMMKV||e.MMKV;_isMMKVAvailable=_MMKVClass!==void 0;return _isMMKVAvailable}catch(e){_isMMKVAvailable=false;return false}}function getMMKVClass(){if(!isMMKVAvailable()){return null}return _MMKVClass}function getMMKVUnavailableMessage(){return"MMKV is not available in this environment. MMKV requires native modules and cannot run in Expo Go. Please use a development build or EAS Build."}
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getMMKVClass=getMMKVClass;exports.getMMKVUnavailableMessage=getMMKVUnavailableMessage;exports.isMMKVAvailable=isMMKVAvailable;function isMMKVAvailable(){try{return typeof window!=="undefined"&&!!window.sessionStorage}catch{return false}}function getMMKVClass(){return null}function getMMKVUnavailableMessage(){return"Session storage is unavailable in this browser context."}