@zappzarapp/browser-utils 1.0.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.
- package/LICENSE +21 -0
- package/README.md +220 -0
- package/dist/a11y/AriaUtils.d.ts +11 -0
- package/dist/a11y/AriaUtils.d.ts.map +1 -0
- package/dist/a11y/AriaUtils.js +179 -0
- package/dist/a11y/AriaUtils.js.map +1 -0
- package/dist/a11y/LiveAnnouncer.d.ts +10 -0
- package/dist/a11y/LiveAnnouncer.d.ts.map +1 -0
- package/dist/a11y/LiveAnnouncer.js +54 -0
- package/dist/a11y/LiveAnnouncer.js.map +1 -0
- package/dist/a11y/ReducedMotion.d.ts +6 -0
- package/dist/a11y/ReducedMotion.d.ts.map +1 -0
- package/dist/a11y/ReducedMotion.js +23 -0
- package/dist/a11y/ReducedMotion.js.map +1 -0
- package/dist/a11y/SkipLink.d.ts +10 -0
- package/dist/a11y/SkipLink.d.ts.map +1 -0
- package/dist/a11y/SkipLink.js +73 -0
- package/dist/a11y/SkipLink.js.map +1 -0
- package/dist/a11y/index.d.ts +7 -0
- package/dist/a11y/index.d.ts.map +1 -0
- package/dist/a11y/index.js +5 -0
- package/dist/a11y/index.js.map +1 -0
- package/dist/battery/BatteryManager.d.ts +15 -0
- package/dist/battery/BatteryManager.d.ts.map +1 -0
- package/dist/battery/BatteryManager.js +82 -0
- package/dist/battery/BatteryManager.js.map +1 -0
- package/dist/battery/index.d.ts +3 -0
- package/dist/battery/index.d.ts.map +1 -0
- package/dist/battery/index.js +2 -0
- package/dist/battery/index.js.map +1 -0
- package/dist/broadcast/BroadcastManager.d.ts +22 -0
- package/dist/broadcast/BroadcastManager.d.ts.map +1 -0
- package/dist/broadcast/BroadcastManager.js +102 -0
- package/dist/broadcast/BroadcastManager.js.map +1 -0
- package/dist/broadcast/index.d.ts +2 -0
- package/dist/broadcast/index.d.ts.map +1 -0
- package/dist/broadcast/index.js +2 -0
- package/dist/broadcast/index.js.map +1 -0
- package/dist/cache/CacheManager.d.ts +72 -0
- package/dist/cache/CacheManager.d.ts.map +1 -0
- package/dist/cache/CacheManager.js +429 -0
- package/dist/cache/CacheManager.js.map +1 -0
- package/dist/cache/index.d.ts +3 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +2 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/clipboard/ClipboardManager.d.ts +14 -0
- package/dist/clipboard/ClipboardManager.d.ts.map +1 -0
- package/dist/clipboard/ClipboardManager.js +136 -0
- package/dist/clipboard/ClipboardManager.js.map +1 -0
- package/dist/clipboard/index.d.ts +2 -0
- package/dist/clipboard/index.d.ts.map +1 -0
- package/dist/clipboard/index.js +2 -0
- package/dist/clipboard/index.js.map +1 -0
- package/dist/cookie/CookieManager.d.ts +16 -0
- package/dist/cookie/CookieManager.d.ts.map +1 -0
- package/dist/cookie/CookieManager.js +119 -0
- package/dist/cookie/CookieManager.js.map +1 -0
- package/dist/cookie/CookieOptions.d.ts +31 -0
- package/dist/cookie/CookieOptions.d.ts.map +1 -0
- package/dist/cookie/CookieOptions.js +94 -0
- package/dist/cookie/CookieOptions.js.map +1 -0
- package/dist/cookie/index.d.ts +4 -0
- package/dist/cookie/index.d.ts.map +1 -0
- package/dist/cookie/index.js +3 -0
- package/dist/cookie/index.js.map +1 -0
- package/dist/core/Debounce.d.ts +13 -0
- package/dist/core/Debounce.d.ts.map +1 -0
- package/dist/core/Debounce.js +121 -0
- package/dist/core/Debounce.js.map +1 -0
- package/dist/core/Throttle.d.ts +12 -0
- package/dist/core/Throttle.d.ts.map +1 -0
- package/dist/core/Throttle.js +81 -0
- package/dist/core/Throttle.js.map +1 -0
- package/dist/core/crypto.d.ts +9 -0
- package/dist/core/crypto.d.ts.map +1 -0
- package/dist/core/crypto.js +32 -0
- package/dist/core/crypto.js.map +1 -0
- package/dist/core/errors/BroadcastError.d.ts +11 -0
- package/dist/core/errors/BroadcastError.d.ts.map +1 -0
- package/dist/core/errors/BroadcastError.js +21 -0
- package/dist/core/errors/BroadcastError.js.map +1 -0
- package/dist/core/errors/BrowserUtilsError.d.ts +7 -0
- package/dist/core/errors/BrowserUtilsError.d.ts.map +1 -0
- package/dist/core/errors/BrowserUtilsError.js +13 -0
- package/dist/core/errors/BrowserUtilsError.js.map +1 -0
- package/dist/core/errors/ClipboardError.d.ts +12 -0
- package/dist/core/errors/ClipboardError.d.ts.map +1 -0
- package/dist/core/errors/ClipboardError.js +24 -0
- package/dist/core/errors/ClipboardError.js.map +1 -0
- package/dist/core/errors/CookieError.d.ts +12 -0
- package/dist/core/errors/CookieError.d.ts.map +1 -0
- package/dist/core/errors/CookieError.js +23 -0
- package/dist/core/errors/CookieError.js.map +1 -0
- package/dist/core/errors/CspError.d.ts +8 -0
- package/dist/core/errors/CspError.d.ts.map +1 -0
- package/dist/core/errors/CspError.js +12 -0
- package/dist/core/errors/CspError.js.map +1 -0
- package/dist/core/errors/EncryptionError.d.ts +16 -0
- package/dist/core/errors/EncryptionError.d.ts.map +1 -0
- package/dist/core/errors/EncryptionError.js +38 -0
- package/dist/core/errors/EncryptionError.js.map +1 -0
- package/dist/core/errors/FullscreenError.d.ts +12 -0
- package/dist/core/errors/FullscreenError.d.ts.map +1 -0
- package/dist/core/errors/FullscreenError.js +24 -0
- package/dist/core/errors/FullscreenError.js.map +1 -0
- package/dist/core/errors/GeolocationError.d.ts +12 -0
- package/dist/core/errors/GeolocationError.d.ts.map +1 -0
- package/dist/core/errors/GeolocationError.js +33 -0
- package/dist/core/errors/GeolocationError.js.map +1 -0
- package/dist/core/errors/IndexedDBError.d.ts +14 -0
- package/dist/core/errors/IndexedDBError.d.ts.map +1 -0
- package/dist/core/errors/IndexedDBError.js +30 -0
- package/dist/core/errors/IndexedDBError.js.map +1 -0
- package/dist/core/errors/NetworkError.d.ts +13 -0
- package/dist/core/errors/NetworkError.d.ts.map +1 -0
- package/dist/core/errors/NetworkError.js +26 -0
- package/dist/core/errors/NetworkError.js.map +1 -0
- package/dist/core/errors/NotificationError.d.ts +11 -0
- package/dist/core/errors/NotificationError.d.ts.map +1 -0
- package/dist/core/errors/NotificationError.js +21 -0
- package/dist/core/errors/NotificationError.js.map +1 -0
- package/dist/core/errors/StorageError.d.ts +14 -0
- package/dist/core/errors/StorageError.d.ts.map +1 -0
- package/dist/core/errors/StorageError.js +32 -0
- package/dist/core/errors/StorageError.js.map +1 -0
- package/dist/core/errors/UrlError.d.ts +12 -0
- package/dist/core/errors/UrlError.d.ts.map +1 -0
- package/dist/core/errors/UrlError.js +23 -0
- package/dist/core/errors/UrlError.js.map +1 -0
- package/dist/core/errors/ValidationError.d.ts +17 -0
- package/dist/core/errors/ValidationError.d.ts.map +1 -0
- package/dist/core/errors/ValidationError.js +49 -0
- package/dist/core/errors/ValidationError.js.map +1 -0
- package/dist/core/errors/WebSocketError.d.ts +12 -0
- package/dist/core/errors/WebSocketError.d.ts.map +1 -0
- package/dist/core/errors/WebSocketError.js +24 -0
- package/dist/core/errors/WebSocketError.js.map +1 -0
- package/dist/core/errors/index.d.ts +29 -0
- package/dist/core/errors/index.d.ts.map +1 -0
- package/dist/core/errors/index.js +16 -0
- package/dist/core/errors/index.js.map +1 -0
- package/dist/core/index.d.ts +16 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +8 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/logger.d.ts +8 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +7 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/result/Result.d.ts +31 -0
- package/dist/core/result/Result.d.ts.map +1 -0
- package/dist/core/result/Result.js +98 -0
- package/dist/core/result/Result.js.map +1 -0
- package/dist/core/result/index.d.ts +3 -0
- package/dist/core/result/index.d.ts.map +1 -0
- package/dist/core/result/index.js +2 -0
- package/dist/core/result/index.js.map +1 -0
- package/dist/core/types.d.ts +2 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/validation/CacheValidator.d.ts +6 -0
- package/dist/core/validation/CacheValidator.d.ts.map +1 -0
- package/dist/core/validation/CacheValidator.js +24 -0
- package/dist/core/validation/CacheValidator.js.map +1 -0
- package/dist/core/validation/CommonValidator.d.ts +11 -0
- package/dist/core/validation/CommonValidator.d.ts.map +1 -0
- package/dist/core/validation/CommonValidator.js +47 -0
- package/dist/core/validation/CommonValidator.js.map +1 -0
- package/dist/core/validation/CookieValidator.d.ts +8 -0
- package/dist/core/validation/CookieValidator.d.ts.map +1 -0
- package/dist/core/validation/CookieValidator.js +43 -0
- package/dist/core/validation/CookieValidator.js.map +1 -0
- package/dist/core/validation/FilenameValidator.d.ts +9 -0
- package/dist/core/validation/FilenameValidator.d.ts.map +1 -0
- package/dist/core/validation/FilenameValidator.js +84 -0
- package/dist/core/validation/FilenameValidator.js.map +1 -0
- package/dist/core/validation/StorageValidator.d.ts +8 -0
- package/dist/core/validation/StorageValidator.d.ts.map +1 -0
- package/dist/core/validation/StorageValidator.js +48 -0
- package/dist/core/validation/StorageValidator.js.map +1 -0
- package/dist/core/validation/UrlValidator.d.ts +10 -0
- package/dist/core/validation/UrlValidator.d.ts.map +1 -0
- package/dist/core/validation/UrlValidator.js +52 -0
- package/dist/core/validation/UrlValidator.js.map +1 -0
- package/dist/core/validation/Validator.d.ts +33 -0
- package/dist/core/validation/Validator.d.ts.map +1 -0
- package/dist/core/validation/Validator.js +39 -0
- package/dist/core/validation/Validator.js.map +1 -0
- package/dist/core/validation/index.d.ts +8 -0
- package/dist/core/validation/index.d.ts.map +1 -0
- package/dist/core/validation/index.js +8 -0
- package/dist/core/validation/index.js.map +1 -0
- package/dist/csp/CspUtils.d.ts +24 -0
- package/dist/csp/CspUtils.d.ts.map +1 -0
- package/dist/csp/CspUtils.js +181 -0
- package/dist/csp/CspUtils.js.map +1 -0
- package/dist/csp/NonceManager.d.ts +21 -0
- package/dist/csp/NonceManager.d.ts.map +1 -0
- package/dist/csp/NonceManager.js +96 -0
- package/dist/csp/NonceManager.js.map +1 -0
- package/dist/csp/index.d.ts +4 -0
- package/dist/csp/index.d.ts.map +1 -0
- package/dist/csp/index.js +4 -0
- package/dist/csp/index.js.map +1 -0
- package/dist/device/DeviceInfo.d.ts +37 -0
- package/dist/device/DeviceInfo.d.ts.map +1 -0
- package/dist/device/DeviceInfo.js +224 -0
- package/dist/device/DeviceInfo.js.map +1 -0
- package/dist/device/index.d.ts +3 -0
- package/dist/device/index.d.ts.map +1 -0
- package/dist/device/index.js +2 -0
- package/dist/device/index.js.map +1 -0
- package/dist/download/DownloadOptions.d.ts +19 -0
- package/dist/download/DownloadOptions.d.ts.map +1 -0
- package/dist/download/DownloadOptions.js +75 -0
- package/dist/download/DownloadOptions.js.map +1 -0
- package/dist/download/Downloader.d.ts +12 -0
- package/dist/download/Downloader.d.ts.map +1 -0
- package/dist/download/Downloader.js +54 -0
- package/dist/download/Downloader.js.map +1 -0
- package/dist/download/index.d.ts +4 -0
- package/dist/download/index.d.ts.map +1 -0
- package/dist/download/index.js +3 -0
- package/dist/download/index.js.map +1 -0
- package/dist/encryption/EncryptedStorage.d.ts +56 -0
- package/dist/encryption/EncryptedStorage.d.ts.map +1 -0
- package/dist/encryption/EncryptedStorage.js +287 -0
- package/dist/encryption/EncryptedStorage.js.map +1 -0
- package/dist/encryption/index.d.ts +3 -0
- package/dist/encryption/index.d.ts.map +1 -0
- package/dist/encryption/index.js +2 -0
- package/dist/encryption/index.js.map +1 -0
- package/dist/events/Debounce.d.ts +13 -0
- package/dist/events/Debounce.d.ts.map +1 -0
- package/dist/events/Debounce.js +121 -0
- package/dist/events/Debounce.js.map +1 -0
- package/dist/events/EventUtils.d.ts +19 -0
- package/dist/events/EventUtils.d.ts.map +1 -0
- package/dist/events/EventUtils.js +95 -0
- package/dist/events/EventUtils.js.map +1 -0
- package/dist/events/Throttle.d.ts +12 -0
- package/dist/events/Throttle.d.ts.map +1 -0
- package/dist/events/Throttle.js +81 -0
- package/dist/events/Throttle.js.map +1 -0
- package/dist/events/index.d.ts +6 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +4 -0
- package/dist/events/index.js.map +1 -0
- package/dist/features/FeatureDetect.d.ts +46 -0
- package/dist/features/FeatureDetect.d.ts.map +1 -0
- package/dist/features/FeatureDetect.js +145 -0
- package/dist/features/FeatureDetect.js.map +1 -0
- package/dist/features/index.d.ts +3 -0
- package/dist/features/index.d.ts.map +1 -0
- package/dist/features/index.js +2 -0
- package/dist/features/index.js.map +1 -0
- package/dist/focus/FocusTrap.d.ts +19 -0
- package/dist/focus/FocusTrap.d.ts.map +1 -0
- package/dist/focus/FocusTrap.js +130 -0
- package/dist/focus/FocusTrap.js.map +1 -0
- package/dist/focus/FocusUtils.d.ts +14 -0
- package/dist/focus/FocusUtils.d.ts.map +1 -0
- package/dist/focus/FocusUtils.js +109 -0
- package/dist/focus/FocusUtils.js.map +1 -0
- package/dist/focus/index.d.ts +4 -0
- package/dist/focus/index.d.ts.map +1 -0
- package/dist/focus/index.js +3 -0
- package/dist/focus/index.js.map +1 -0
- package/dist/form/FormSerializer.d.ts +22 -0
- package/dist/form/FormSerializer.d.ts.map +1 -0
- package/dist/form/FormSerializer.js +216 -0
- package/dist/form/FormSerializer.js.map +1 -0
- package/dist/form/FormUtils.d.ts +14 -0
- package/dist/form/FormUtils.d.ts.map +1 -0
- package/dist/form/FormUtils.js +226 -0
- package/dist/form/FormUtils.js.map +1 -0
- package/dist/form/FormValidator.d.ts +56 -0
- package/dist/form/FormValidator.d.ts.map +1 -0
- package/dist/form/FormValidator.js +428 -0
- package/dist/form/FormValidator.js.map +1 -0
- package/dist/form/index.d.ts +6 -0
- package/dist/form/index.d.ts.map +1 -0
- package/dist/form/index.js +4 -0
- package/dist/form/index.js.map +1 -0
- package/dist/fullscreen/Fullscreen.d.ts +13 -0
- package/dist/fullscreen/Fullscreen.d.ts.map +1 -0
- package/dist/fullscreen/Fullscreen.js +119 -0
- package/dist/fullscreen/Fullscreen.js.map +1 -0
- package/dist/fullscreen/index.d.ts +2 -0
- package/dist/fullscreen/index.d.ts.map +1 -0
- package/dist/fullscreen/index.js +2 -0
- package/dist/fullscreen/index.js.map +1 -0
- package/dist/geolocation/GeolocationManager.d.ts +14 -0
- package/dist/geolocation/GeolocationManager.d.ts.map +1 -0
- package/dist/geolocation/GeolocationManager.js +47 -0
- package/dist/geolocation/GeolocationManager.js.map +1 -0
- package/dist/geolocation/index.d.ts +3 -0
- package/dist/geolocation/index.d.ts.map +1 -0
- package/dist/geolocation/index.js +2 -0
- package/dist/geolocation/index.js.map +1 -0
- package/dist/html/DomHelper.d.ts +20 -0
- package/dist/html/DomHelper.d.ts.map +1 -0
- package/dist/html/DomHelper.js +88 -0
- package/dist/html/DomHelper.js.map +1 -0
- package/dist/html/HtmlEscaper.d.ts +9 -0
- package/dist/html/HtmlEscaper.d.ts.map +1 -0
- package/dist/html/HtmlEscaper.js +129 -0
- package/dist/html/HtmlEscaper.js.map +1 -0
- package/dist/html/index.d.ts +3 -0
- package/dist/html/index.d.ts.map +1 -0
- package/dist/html/index.js +3 -0
- package/dist/html/index.js.map +1 -0
- package/dist/idle/IdleCallback.d.ts +26 -0
- package/dist/idle/IdleCallback.d.ts.map +1 -0
- package/dist/idle/IdleCallback.js +138 -0
- package/dist/idle/IdleCallback.js.map +1 -0
- package/dist/idle/index.d.ts +2 -0
- package/dist/idle/index.d.ts.map +1 -0
- package/dist/idle/index.js +2 -0
- package/dist/idle/index.js.map +1 -0
- package/dist/index.d.ts +68 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/indexeddb/IndexedDBManager.d.ts +47 -0
- package/dist/indexeddb/IndexedDBManager.d.ts.map +1 -0
- package/dist/indexeddb/IndexedDBManager.js +183 -0
- package/dist/indexeddb/IndexedDBManager.js.map +1 -0
- package/dist/indexeddb/index.d.ts +2 -0
- package/dist/indexeddb/index.d.ts.map +1 -0
- package/dist/indexeddb/index.js +2 -0
- package/dist/indexeddb/index.js.map +1 -0
- package/dist/keyboard/KeyboardShortcut.d.ts +27 -0
- package/dist/keyboard/KeyboardShortcut.d.ts.map +1 -0
- package/dist/keyboard/KeyboardShortcut.js +89 -0
- package/dist/keyboard/KeyboardShortcut.js.map +1 -0
- package/dist/keyboard/ShortcutManager.d.ts +23 -0
- package/dist/keyboard/ShortcutManager.d.ts.map +1 -0
- package/dist/keyboard/ShortcutManager.js +66 -0
- package/dist/keyboard/ShortcutManager.js.map +1 -0
- package/dist/keyboard/index.d.ts +5 -0
- package/dist/keyboard/index.d.ts.map +1 -0
- package/dist/keyboard/index.js +3 -0
- package/dist/keyboard/index.js.map +1 -0
- package/dist/logging/LogLevel.d.ts +10 -0
- package/dist/logging/LogLevel.d.ts.map +1 -0
- package/dist/logging/LogLevel.js +22 -0
- package/dist/logging/LogLevel.js.map +1 -0
- package/dist/logging/Logger.d.ts +32 -0
- package/dist/logging/Logger.d.ts.map +1 -0
- package/dist/logging/Logger.js +97 -0
- package/dist/logging/Logger.js.map +1 -0
- package/dist/logging/LoggerConfig.d.ts +28 -0
- package/dist/logging/LoggerConfig.d.ts.map +1 -0
- package/dist/logging/LoggerConfig.js +73 -0
- package/dist/logging/LoggerConfig.js.map +1 -0
- package/dist/logging/index.d.ts +6 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +4 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/media/MediaQuery.d.ts +27 -0
- package/dist/media/MediaQuery.d.ts.map +1 -0
- package/dist/media/MediaQuery.js +125 -0
- package/dist/media/MediaQuery.js.map +1 -0
- package/dist/media/index.d.ts +3 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +2 -0
- package/dist/media/index.js.map +1 -0
- package/dist/network/NetworkStatus.d.ts +37 -0
- package/dist/network/NetworkStatus.d.ts.map +1 -0
- package/dist/network/NetworkStatus.js +103 -0
- package/dist/network/NetworkStatus.js.map +1 -0
- package/dist/network/RetryQueue.d.ts +54 -0
- package/dist/network/RetryQueue.d.ts.map +1 -0
- package/dist/network/RetryQueue.js +222 -0
- package/dist/network/RetryQueue.js.map +1 -0
- package/dist/network/index.d.ts +5 -0
- package/dist/network/index.d.ts.map +1 -0
- package/dist/network/index.js +3 -0
- package/dist/network/index.js.map +1 -0
- package/dist/notification/BrowserNotification.d.ts +20 -0
- package/dist/notification/BrowserNotification.d.ts.map +1 -0
- package/dist/notification/BrowserNotification.js +120 -0
- package/dist/notification/BrowserNotification.js.map +1 -0
- package/dist/notification/index.d.ts +2 -0
- package/dist/notification/index.d.ts.map +1 -0
- package/dist/notification/index.js +2 -0
- package/dist/notification/index.js.map +1 -0
- package/dist/observe/IntersectionObserverWrapper.d.ts +21 -0
- package/dist/observe/IntersectionObserverWrapper.d.ts.map +1 -0
- package/dist/observe/IntersectionObserverWrapper.js +134 -0
- package/dist/observe/IntersectionObserverWrapper.js.map +1 -0
- package/dist/observe/MutationObserverWrapper.d.ts +26 -0
- package/dist/observe/MutationObserverWrapper.d.ts.map +1 -0
- package/dist/observe/MutationObserverWrapper.js +122 -0
- package/dist/observe/MutationObserverWrapper.js.map +1 -0
- package/dist/observe/ResizeObserverWrapper.d.ts +23 -0
- package/dist/observe/ResizeObserverWrapper.d.ts.map +1 -0
- package/dist/observe/ResizeObserverWrapper.js +136 -0
- package/dist/observe/ResizeObserverWrapper.js.map +1 -0
- package/dist/observe/index.d.ts +4 -0
- package/dist/observe/index.d.ts.map +1 -0
- package/dist/observe/index.js +4 -0
- package/dist/observe/index.js.map +1 -0
- package/dist/offline/OfflineQueue.d.ts +66 -0
- package/dist/offline/OfflineQueue.d.ts.map +1 -0
- package/dist/offline/OfflineQueue.js +339 -0
- package/dist/offline/OfflineQueue.js.map +1 -0
- package/dist/offline/index.d.ts +2 -0
- package/dist/offline/index.d.ts.map +1 -0
- package/dist/offline/index.js +2 -0
- package/dist/offline/index.js.map +1 -0
- package/dist/performance/PerformanceMonitor.d.ts +29 -0
- package/dist/performance/PerformanceMonitor.d.ts.map +1 -0
- package/dist/performance/PerformanceMonitor.js +259 -0
- package/dist/performance/PerformanceMonitor.js.map +1 -0
- package/dist/performance/index.d.ts +3 -0
- package/dist/performance/index.d.ts.map +1 -0
- package/dist/performance/index.js +2 -0
- package/dist/performance/index.js.map +1 -0
- package/dist/request/RequestAuth.d.ts +8 -0
- package/dist/request/RequestAuth.d.ts.map +1 -0
- package/dist/request/RequestAuth.js +53 -0
- package/dist/request/RequestAuth.js.map +1 -0
- package/dist/request/RequestInterceptor.d.ts +103 -0
- package/dist/request/RequestInterceptor.d.ts.map +1 -0
- package/dist/request/RequestInterceptor.js +286 -0
- package/dist/request/RequestInterceptor.js.map +1 -0
- package/dist/request/RequestMiddleware.d.ts +7 -0
- package/dist/request/RequestMiddleware.d.ts.map +1 -0
- package/dist/request/RequestMiddleware.js +50 -0
- package/dist/request/RequestMiddleware.js.map +1 -0
- package/dist/request/RequestValidation.d.ts +4 -0
- package/dist/request/RequestValidation.d.ts.map +1 -0
- package/dist/request/RequestValidation.js +120 -0
- package/dist/request/RequestValidation.js.map +1 -0
- package/dist/request/index.d.ts +3 -0
- package/dist/request/index.d.ts.map +1 -0
- package/dist/request/index.js +2 -0
- package/dist/request/index.js.map +1 -0
- package/dist/sanitize/HtmlSanitizer.d.ts +44 -0
- package/dist/sanitize/HtmlSanitizer.d.ts.map +1 -0
- package/dist/sanitize/HtmlSanitizer.js +146 -0
- package/dist/sanitize/HtmlSanitizer.js.map +1 -0
- package/dist/sanitize/index.d.ts +2 -0
- package/dist/sanitize/index.d.ts.map +1 -0
- package/dist/sanitize/index.js +2 -0
- package/dist/sanitize/index.js.map +1 -0
- package/dist/scroll/ScrollUtils.d.ts +48 -0
- package/dist/scroll/ScrollUtils.d.ts.map +1 -0
- package/dist/scroll/ScrollUtils.js +199 -0
- package/dist/scroll/ScrollUtils.js.map +1 -0
- package/dist/scroll/index.d.ts +3 -0
- package/dist/scroll/index.d.ts.map +1 -0
- package/dist/scroll/index.js +2 -0
- package/dist/scroll/index.js.map +1 -0
- package/dist/session/SessionStorageManager.d.ts +11 -0
- package/dist/session/SessionStorageManager.d.ts.map +1 -0
- package/dist/session/SessionStorageManager.js +22 -0
- package/dist/session/SessionStorageManager.js.map +1 -0
- package/dist/session/index.d.ts +3 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +2 -0
- package/dist/session/index.js.map +1 -0
- package/dist/storage/BaseStorageManager.d.ts +37 -0
- package/dist/storage/BaseStorageManager.d.ts.map +1 -0
- package/dist/storage/BaseStorageManager.js +245 -0
- package/dist/storage/BaseStorageManager.js.map +1 -0
- package/dist/storage/MemoryStorage.d.ts +23 -0
- package/dist/storage/MemoryStorage.d.ts.map +1 -0
- package/dist/storage/MemoryStorage.js +62 -0
- package/dist/storage/MemoryStorage.js.map +1 -0
- package/dist/storage/StorageConfig.d.ts +25 -0
- package/dist/storage/StorageConfig.d.ts.map +1 -0
- package/dist/storage/StorageConfig.js +60 -0
- package/dist/storage/StorageConfig.js.map +1 -0
- package/dist/storage/StorageManager.d.ts +19 -0
- package/dist/storage/StorageManager.d.ts.map +1 -0
- package/dist/storage/StorageManager.js +58 -0
- package/dist/storage/StorageManager.js.map +1 -0
- package/dist/storage/index.d.ts +9 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +5 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/url/HistoryManager.d.ts +24 -0
- package/dist/url/HistoryManager.d.ts.map +1 -0
- package/dist/url/HistoryManager.js +134 -0
- package/dist/url/HistoryManager.js.map +1 -0
- package/dist/url/QueryParams.d.ts +32 -0
- package/dist/url/QueryParams.d.ts.map +1 -0
- package/dist/url/QueryParams.js +130 -0
- package/dist/url/QueryParams.js.map +1 -0
- package/dist/url/UrlBuilder.d.ts +38 -0
- package/dist/url/UrlBuilder.d.ts.map +1 -0
- package/dist/url/UrlBuilder.js +159 -0
- package/dist/url/UrlBuilder.js.map +1 -0
- package/dist/url/index.d.ts +6 -0
- package/dist/url/index.d.ts.map +1 -0
- package/dist/url/index.js +4 -0
- package/dist/url/index.js.map +1 -0
- package/dist/visibility/VisibilityManager.d.ts +10 -0
- package/dist/visibility/VisibilityManager.d.ts.map +1 -0
- package/dist/visibility/VisibilityManager.js +61 -0
- package/dist/visibility/VisibilityManager.js.map +1 -0
- package/dist/visibility/index.d.ts +2 -0
- package/dist/visibility/index.d.ts.map +1 -0
- package/dist/visibility/index.js +2 -0
- package/dist/visibility/index.js.map +1 -0
- package/dist/websocket/WebSocketManager.d.ts +43 -0
- package/dist/websocket/WebSocketManager.d.ts.map +1 -0
- package/dist/websocket/WebSocketManager.js +250 -0
- package/dist/websocket/WebSocketManager.js.map +1 -0
- package/dist/websocket/index.d.ts +2 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/dist/websocket/index.js +2 -0
- package/dist/websocket/index.js.map +1 -0
- package/package.json +254 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export interface EncryptedStorageConfig {
|
|
2
|
+
readonly password: string;
|
|
3
|
+
readonly prefix?: string;
|
|
4
|
+
readonly iterations?: number;
|
|
5
|
+
readonly minCharacterClasses?: number;
|
|
6
|
+
readonly storage?: Storage;
|
|
7
|
+
}
|
|
8
|
+
export interface EncryptedStorageStats {
|
|
9
|
+
readonly count: number;
|
|
10
|
+
readonly prefix: string;
|
|
11
|
+
readonly iterations: number;
|
|
12
|
+
readonly isDestroyed: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface EncryptedStorageInstance {
|
|
15
|
+
set<T>(key: string, value: T): Promise<void>;
|
|
16
|
+
get<T>(key: string): Promise<T | null>;
|
|
17
|
+
has(key: string): boolean;
|
|
18
|
+
remove(key: string): void;
|
|
19
|
+
clear(): void;
|
|
20
|
+
keys(): readonly string[];
|
|
21
|
+
stats(): EncryptedStorageStats;
|
|
22
|
+
destroy(): void;
|
|
23
|
+
}
|
|
24
|
+
export declare class EncryptedStorage implements EncryptedStorageInstance {
|
|
25
|
+
private readonly storage;
|
|
26
|
+
private readonly prefix;
|
|
27
|
+
private readonly iterations;
|
|
28
|
+
private cryptoKey;
|
|
29
|
+
private destroyed;
|
|
30
|
+
private constructor();
|
|
31
|
+
static create(config: EncryptedStorageConfig): Promise<EncryptedStorage>;
|
|
32
|
+
static isCryptoAvailable(): boolean;
|
|
33
|
+
set<T>(key: string, value: T): Promise<void>;
|
|
34
|
+
get<T>(key: string): Promise<T | null>;
|
|
35
|
+
has(key: string): boolean;
|
|
36
|
+
remove(key: string): void;
|
|
37
|
+
clear(): void;
|
|
38
|
+
keys(): readonly string[];
|
|
39
|
+
stats(): EncryptedStorageStats;
|
|
40
|
+
destroy(): void;
|
|
41
|
+
private ensureNotDestroyed;
|
|
42
|
+
private validateKey;
|
|
43
|
+
private getFullKey;
|
|
44
|
+
private getSaltKey;
|
|
45
|
+
private static validateConfig;
|
|
46
|
+
private static countCharacterClasses;
|
|
47
|
+
private static getDefaultStorage;
|
|
48
|
+
private static getOrCreateSalt;
|
|
49
|
+
private static deriveKey;
|
|
50
|
+
private static isValidEntry;
|
|
51
|
+
private static isQuotaError;
|
|
52
|
+
private static arrayBufferToBase64;
|
|
53
|
+
private static base64ToArrayBuffer;
|
|
54
|
+
private static toBufferSource;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=EncryptedStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EncryptedStorage.d.ts","sourceRoot":"","sources":["../../src/encryption/EncryptedStorage.ts"],"names":[],"mappings":"AAyEA,MAAM,WAAW,sBAAsB;IAKrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAM1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAOzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAQ7B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAMtC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAiBD,MAAM,WAAW,qBAAqB;IAEpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAKD,MAAM,WAAW,wBAAwB;IAIvC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAK7C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAKvC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAK1B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAK1B,KAAK,IAAI,IAAI,CAAC;IAKd,IAAI,IAAI,SAAS,MAAM,EAAE,CAAC;IAK1B,KAAK,IAAI,qBAAqB,CAAC;IAK/B,OAAO,IAAI,IAAI,CAAC;CACjB;AAMD,qBAAa,gBAAiB,YAAW,wBAAwB;IAC/D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,SAAS,CAAkB;IAEnC,OAAO;WAmBM,MAAM,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAyB9E,MAAM,CAAC,iBAAiB,IAAI,OAAO;IAsB7B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAsD5C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAkD5C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAczB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAWzB,KAAK,IAAI,IAAI;IAwBb,IAAI,IAAI,SAAS,MAAM,EAAE;IAmBzB,KAAK,IAAI,qBAAqB;IAmB9B,OAAO,IAAI,IAAI;IAUf,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,MAAM,CAAC,cAAc;IAmC7B,OAAO,CAAC,MAAM,CAAC,qBAAqB;IASpC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IA4BhC,OAAO,CAAC,MAAM,CAAC,eAAe;mBAkBT,SAAS;IAkC9B,OAAO,CAAC,MAAM,CAAC,YAAY;IAa3B,OAAO,CAAC,MAAM,CAAC,YAAY;IAY3B,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAYlC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAalC,OAAO,CAAC,MAAM,CAAC,cAAc;CAM9B"}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { EncryptionError, Validator, ValidationError } from '../core';
|
|
2
|
+
const DEFAULT_ITERATIONS = 600_000;
|
|
3
|
+
const MIN_ITERATIONS = 10_000;
|
|
4
|
+
const SALT_LENGTH = 16;
|
|
5
|
+
const IV_LENGTH = 12;
|
|
6
|
+
const AES_KEY_LENGTH = 256;
|
|
7
|
+
const SALT_SUFFIX = '__salt__';
|
|
8
|
+
export class EncryptedStorage {
|
|
9
|
+
storage;
|
|
10
|
+
prefix;
|
|
11
|
+
iterations;
|
|
12
|
+
cryptoKey;
|
|
13
|
+
destroyed = false;
|
|
14
|
+
constructor(storage, prefix, iterations, cryptoKey) {
|
|
15
|
+
this.storage = storage;
|
|
16
|
+
this.prefix = prefix;
|
|
17
|
+
this.iterations = iterations;
|
|
18
|
+
this.cryptoKey = cryptoKey;
|
|
19
|
+
}
|
|
20
|
+
static async create(config) {
|
|
21
|
+
if (!EncryptedStorage.isCryptoAvailable()) {
|
|
22
|
+
throw EncryptionError.cryptoUnavailable();
|
|
23
|
+
}
|
|
24
|
+
EncryptedStorage.validateConfig(config);
|
|
25
|
+
const storage = config.storage ?? EncryptedStorage.getDefaultStorage();
|
|
26
|
+
const prefix = config.prefix ?? 'encrypted';
|
|
27
|
+
const iterations = config.iterations ?? DEFAULT_ITERATIONS;
|
|
28
|
+
const salt = EncryptedStorage.getOrCreateSalt(storage, prefix);
|
|
29
|
+
const cryptoKey = await EncryptedStorage.deriveKey(config.password, salt, iterations);
|
|
30
|
+
return new EncryptedStorage(storage, prefix, iterations, cryptoKey);
|
|
31
|
+
}
|
|
32
|
+
static isCryptoAvailable() {
|
|
33
|
+
const cryptoApi = globalThis.crypto;
|
|
34
|
+
if (typeof cryptoApi === 'undefined') {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
return (typeof cryptoApi.subtle !== 'undefined' && typeof cryptoApi.getRandomValues === 'function');
|
|
38
|
+
}
|
|
39
|
+
async set(key, value) {
|
|
40
|
+
this.ensureNotDestroyed();
|
|
41
|
+
this.validateKey(key);
|
|
42
|
+
try {
|
|
43
|
+
const plaintext = JSON.stringify(value);
|
|
44
|
+
const iv = crypto.getRandomValues(new Uint8Array(IV_LENGTH));
|
|
45
|
+
const encodedPlaintext = new TextEncoder().encode(plaintext);
|
|
46
|
+
const ciphertext = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, this.cryptoKey, encodedPlaintext);
|
|
47
|
+
const entry = {
|
|
48
|
+
iv: EncryptedStorage.arrayBufferToBase64(iv),
|
|
49
|
+
data: EncryptedStorage.arrayBufferToBase64(ciphertext),
|
|
50
|
+
timestamp: Date.now(),
|
|
51
|
+
};
|
|
52
|
+
const fullKey = this.getFullKey(key);
|
|
53
|
+
try {
|
|
54
|
+
this.storage.setItem(fullKey, JSON.stringify(entry));
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
if (EncryptedStorage.isQuotaError(error)) {
|
|
58
|
+
throw EncryptionError.quotaExceeded(key, error);
|
|
59
|
+
}
|
|
60
|
+
throw error;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
if (error instanceof EncryptionError) {
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
throw EncryptionError.encryptionFailed(key, error);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async get(key) {
|
|
71
|
+
this.ensureNotDestroyed();
|
|
72
|
+
this.validateKey(key);
|
|
73
|
+
const fullKey = this.getFullKey(key);
|
|
74
|
+
const raw = this.storage.getItem(fullKey);
|
|
75
|
+
if (raw === null) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
const entry = JSON.parse(raw);
|
|
80
|
+
if (!EncryptedStorage.isValidEntry(entry)) {
|
|
81
|
+
throw EncryptionError.invalidDataFormat(key, 'missing required fields');
|
|
82
|
+
}
|
|
83
|
+
const ivBytes = EncryptedStorage.base64ToArrayBuffer(entry.iv);
|
|
84
|
+
const ciphertextBytes = EncryptedStorage.base64ToArrayBuffer(entry.data);
|
|
85
|
+
const plaintext = await crypto.subtle.decrypt({ name: 'AES-GCM', iv: EncryptedStorage.toBufferSource(ivBytes) }, this.cryptoKey, EncryptedStorage.toBufferSource(ciphertextBytes));
|
|
86
|
+
const decoded = new TextDecoder().decode(plaintext);
|
|
87
|
+
return JSON.parse(decoded);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
if (error instanceof EncryptionError) {
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
throw EncryptionError.decryptionFailed(key, error);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
has(key) {
|
|
97
|
+
this.ensureNotDestroyed();
|
|
98
|
+
this.validateKey(key);
|
|
99
|
+
const fullKey = this.getFullKey(key);
|
|
100
|
+
return this.storage.getItem(fullKey) !== null;
|
|
101
|
+
}
|
|
102
|
+
remove(key) {
|
|
103
|
+
this.ensureNotDestroyed();
|
|
104
|
+
this.validateKey(key);
|
|
105
|
+
const fullKey = this.getFullKey(key);
|
|
106
|
+
this.storage.removeItem(fullKey);
|
|
107
|
+
}
|
|
108
|
+
clear() {
|
|
109
|
+
this.ensureNotDestroyed();
|
|
110
|
+
const keysToRemove = [];
|
|
111
|
+
const prefixWithDot = `${this.prefix}.`;
|
|
112
|
+
const saltKey = this.getSaltKey();
|
|
113
|
+
for (let i = 0; i < this.storage.length; i++) {
|
|
114
|
+
const key = this.storage.key(i);
|
|
115
|
+
if (key !== null && key.startsWith(prefixWithDot) && key !== saltKey) {
|
|
116
|
+
keysToRemove.push(key);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
for (const key of keysToRemove) {
|
|
120
|
+
this.storage.removeItem(key);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
keys() {
|
|
124
|
+
this.ensureNotDestroyed();
|
|
125
|
+
const result = [];
|
|
126
|
+
const prefixWithDot = `${this.prefix}.`;
|
|
127
|
+
for (let i = 0; i < this.storage.length; i++) {
|
|
128
|
+
const key = this.storage.key(i);
|
|
129
|
+
if (key !== null && key.startsWith(prefixWithDot) && !key.endsWith(SALT_SUFFIX)) {
|
|
130
|
+
result.push(key.slice(prefixWithDot.length));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return result;
|
|
134
|
+
}
|
|
135
|
+
stats() {
|
|
136
|
+
return {
|
|
137
|
+
count: this.destroyed ? 0 : this.keys().length,
|
|
138
|
+
prefix: this.prefix,
|
|
139
|
+
iterations: this.iterations,
|
|
140
|
+
isDestroyed: this.destroyed,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
destroy() {
|
|
144
|
+
this.cryptoKey = null;
|
|
145
|
+
this.destroyed = true;
|
|
146
|
+
}
|
|
147
|
+
ensureNotDestroyed() {
|
|
148
|
+
if (this.destroyed) {
|
|
149
|
+
throw EncryptionError.alreadyDestroyed();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
validateKey(key) {
|
|
153
|
+
Validator.storageKey(key);
|
|
154
|
+
}
|
|
155
|
+
getFullKey(key) {
|
|
156
|
+
return `${this.prefix}.${key}`;
|
|
157
|
+
}
|
|
158
|
+
getSaltKey() {
|
|
159
|
+
return `${this.prefix}${SALT_SUFFIX}`;
|
|
160
|
+
}
|
|
161
|
+
static validateConfig(config) {
|
|
162
|
+
if (config.password.length < 12) {
|
|
163
|
+
throw ValidationError.invalidFormat('password', '(hidden)', 'at least 12 characters');
|
|
164
|
+
}
|
|
165
|
+
const minClasses = config.minCharacterClasses ?? 2;
|
|
166
|
+
if (!Number.isInteger(minClasses) || minClasses < 1 || minClasses > 4) {
|
|
167
|
+
throw ValidationError.outOfRange('minCharacterClasses', minClasses, 1, 4);
|
|
168
|
+
}
|
|
169
|
+
const classCount = EncryptedStorage.countCharacterClasses(config.password);
|
|
170
|
+
if (classCount < minClasses) {
|
|
171
|
+
throw ValidationError.insufficientComplexity('password', classCount, minClasses);
|
|
172
|
+
}
|
|
173
|
+
if (config.prefix !== undefined) {
|
|
174
|
+
Validator.storagePrefix(config.prefix);
|
|
175
|
+
}
|
|
176
|
+
if (config.iterations !== undefined &&
|
|
177
|
+
(!Number.isInteger(config.iterations) || config.iterations < MIN_ITERATIONS)) {
|
|
178
|
+
throw ValidationError.outOfRange('iterations', config.iterations, MIN_ITERATIONS, Infinity);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
static countCharacterClasses(value) {
|
|
182
|
+
let count = 0;
|
|
183
|
+
if (/[a-z]/.test(value))
|
|
184
|
+
count++;
|
|
185
|
+
if (/[A-Z]/.test(value))
|
|
186
|
+
count++;
|
|
187
|
+
if (/\d/.test(value))
|
|
188
|
+
count++;
|
|
189
|
+
if (/[^a-zA-Z\d]/.test(value))
|
|
190
|
+
count++;
|
|
191
|
+
return count;
|
|
192
|
+
}
|
|
193
|
+
static getDefaultStorage() {
|
|
194
|
+
let storage;
|
|
195
|
+
try {
|
|
196
|
+
storage = localStorage;
|
|
197
|
+
if (typeof storage === 'undefined') {
|
|
198
|
+
throw EncryptionError.storageUnavailable('localStorage is not available');
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
if (error instanceof EncryptionError) {
|
|
203
|
+
throw error;
|
|
204
|
+
}
|
|
205
|
+
throw EncryptionError.storageUnavailable('localStorage is not available');
|
|
206
|
+
}
|
|
207
|
+
try {
|
|
208
|
+
const testKey = '__encryption_test__';
|
|
209
|
+
storage.setItem(testKey, '1');
|
|
210
|
+
storage.removeItem(testKey);
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
throw EncryptionError.storageUnavailable('localStorage is not accessible');
|
|
214
|
+
}
|
|
215
|
+
return storage;
|
|
216
|
+
}
|
|
217
|
+
static getOrCreateSalt(storage, prefix) {
|
|
218
|
+
const saltKey = `${prefix}${SALT_SUFFIX}`;
|
|
219
|
+
const existingSalt = storage.getItem(saltKey);
|
|
220
|
+
if (existingSalt !== null) {
|
|
221
|
+
try {
|
|
222
|
+
return EncryptedStorage.base64ToArrayBuffer(existingSalt);
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
const salt = crypto.getRandomValues(new Uint8Array(SALT_LENGTH));
|
|
228
|
+
storage.setItem(saltKey, EncryptedStorage.arrayBufferToBase64(salt));
|
|
229
|
+
return salt;
|
|
230
|
+
}
|
|
231
|
+
static async deriveKey(password, salt, iterations) {
|
|
232
|
+
try {
|
|
233
|
+
const passwordBuffer = new TextEncoder().encode(password);
|
|
234
|
+
const keyMaterial = await crypto.subtle.importKey('raw', EncryptedStorage.toBufferSource(passwordBuffer), 'PBKDF2', false, ['deriveKey']);
|
|
235
|
+
return await crypto.subtle.deriveKey({
|
|
236
|
+
name: 'PBKDF2',
|
|
237
|
+
salt: EncryptedStorage.toBufferSource(salt),
|
|
238
|
+
iterations,
|
|
239
|
+
hash: 'SHA-256',
|
|
240
|
+
}, keyMaterial, { name: 'AES-GCM', length: AES_KEY_LENGTH }, false, ['encrypt', 'decrypt']);
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
throw EncryptionError.keyDerivationFailed(error);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
static isValidEntry(entry) {
|
|
247
|
+
if (typeof entry !== 'object' || entry === null) {
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
const obj = entry;
|
|
251
|
+
return (typeof obj.iv === 'string' &&
|
|
252
|
+
typeof obj.data === 'string' &&
|
|
253
|
+
typeof obj.timestamp === 'number');
|
|
254
|
+
}
|
|
255
|
+
static isQuotaError(error) {
|
|
256
|
+
if (!(error instanceof Error)) {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
return (error.name === 'QuotaExceededError' ||
|
|
260
|
+
error.name === 'NS_ERROR_DOM_QUOTA_REACHED' ||
|
|
261
|
+
error.message.toLowerCase().includes('quota'));
|
|
262
|
+
}
|
|
263
|
+
static arrayBufferToBase64(buffer) {
|
|
264
|
+
const bytes = ArrayBuffer.isView(buffer)
|
|
265
|
+
? new Uint8Array(buffer.buffer)
|
|
266
|
+
: new Uint8Array(buffer);
|
|
267
|
+
let binary = '';
|
|
268
|
+
for (let i = 0; i < bytes.byteLength; i++) {
|
|
269
|
+
binary += String.fromCharCode(bytes[i]);
|
|
270
|
+
}
|
|
271
|
+
return btoa(binary);
|
|
272
|
+
}
|
|
273
|
+
static base64ToArrayBuffer(base64) {
|
|
274
|
+
const binary = atob(base64);
|
|
275
|
+
const bytes = new Uint8Array(binary.length);
|
|
276
|
+
for (let i = 0; i < binary.length; i++) {
|
|
277
|
+
bytes[i] = binary.charCodeAt(i);
|
|
278
|
+
}
|
|
279
|
+
return bytes;
|
|
280
|
+
}
|
|
281
|
+
static toBufferSource(data) {
|
|
282
|
+
const buffer = new ArrayBuffer(data.byteLength);
|
|
283
|
+
new Uint8Array(buffer).set(data);
|
|
284
|
+
return buffer;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=EncryptedStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EncryptedStorage.js","sourceRoot":"","sources":["../../src/encryption/EncryptedStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/encryption/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/encryption/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface DebounceOptions {
|
|
2
|
+
readonly leading?: boolean;
|
|
3
|
+
readonly trailing?: boolean;
|
|
4
|
+
readonly maxWait?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface DebouncedFunction<T extends (...args: any[]) => any> {
|
|
7
|
+
(...args: Parameters<T>): ReturnType<T> | undefined;
|
|
8
|
+
cancel(): void;
|
|
9
|
+
flush(): ReturnType<T> | undefined;
|
|
10
|
+
pending(): boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function debounce<T extends (...args: any[]) => any>(fn: T, wait: number, options?: DebounceOptions): DebouncedFunction<T>;
|
|
13
|
+
//# sourceMappingURL=Debounce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Debounce.d.ts","sourceRoot":"","sources":["../../src/events/Debounce.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,eAAe;IAK9B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAM3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAM5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAGD,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG;IAIlE,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAKpD,MAAM,IAAI,IAAI,CAAC;IAMf,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAKnC,OAAO,IAAI,OAAO,CAAC;CACpB;AAWD,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,EAAE,EAAE,CAAC,EACL,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB,GAC5B,iBAAiB,CAAC,CAAC,CAAC,CAsKtB"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
export function debounce(fn, wait, options = {}) {
|
|
2
|
+
const { leading = false, trailing = true, maxWait } = options;
|
|
3
|
+
let timeoutId;
|
|
4
|
+
let maxTimeoutId;
|
|
5
|
+
let lastArgs;
|
|
6
|
+
let lastThis;
|
|
7
|
+
let result;
|
|
8
|
+
let lastCallTime;
|
|
9
|
+
let lastInvokeTime = 0;
|
|
10
|
+
const invokeFunc = (time) => {
|
|
11
|
+
const args = lastArgs;
|
|
12
|
+
const thisArg = lastThis;
|
|
13
|
+
lastArgs = undefined;
|
|
14
|
+
lastThis = undefined;
|
|
15
|
+
lastInvokeTime = time;
|
|
16
|
+
if (args !== undefined) {
|
|
17
|
+
result = fn.apply(thisArg, args);
|
|
18
|
+
}
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
const startTimer = (pendingFunc, waitTime) => {
|
|
22
|
+
return setTimeout(pendingFunc, waitTime);
|
|
23
|
+
};
|
|
24
|
+
const cancelTimer = (id) => {
|
|
25
|
+
if (id !== undefined) {
|
|
26
|
+
clearTimeout(id);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const leadingEdge = (time) => {
|
|
30
|
+
lastInvokeTime = time;
|
|
31
|
+
timeoutId = startTimer(timerExpired, wait);
|
|
32
|
+
if (maxWait !== undefined) {
|
|
33
|
+
maxTimeoutId = startTimer(maxWaitExpired, maxWait);
|
|
34
|
+
}
|
|
35
|
+
return leading ? invokeFunc(time) : result;
|
|
36
|
+
};
|
|
37
|
+
const remainingWait = (time) => {
|
|
38
|
+
const timeSinceLastCall = time - (lastCallTime ?? 0);
|
|
39
|
+
const timeSinceLastInvoke = time - lastInvokeTime;
|
|
40
|
+
const timeWaiting = wait - timeSinceLastCall;
|
|
41
|
+
if (maxWait !== undefined) {
|
|
42
|
+
return Math.min(timeWaiting, maxWait - timeSinceLastInvoke);
|
|
43
|
+
}
|
|
44
|
+
return timeWaiting;
|
|
45
|
+
};
|
|
46
|
+
const shouldInvoke = (time) => {
|
|
47
|
+
const timeSinceLastCall = time - (lastCallTime ?? 0);
|
|
48
|
+
const timeSinceLastInvoke = time - lastInvokeTime;
|
|
49
|
+
return (lastCallTime === undefined ||
|
|
50
|
+
timeSinceLastCall >= wait ||
|
|
51
|
+
timeSinceLastCall < 0 ||
|
|
52
|
+
(maxWait !== undefined && timeSinceLastInvoke >= maxWait));
|
|
53
|
+
};
|
|
54
|
+
const timerExpired = () => {
|
|
55
|
+
const time = Date.now();
|
|
56
|
+
if (shouldInvoke(time)) {
|
|
57
|
+
trailingEdge(time);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
timeoutId = startTimer(timerExpired, remainingWait(time));
|
|
61
|
+
};
|
|
62
|
+
const maxWaitExpired = () => {
|
|
63
|
+
const time = Date.now();
|
|
64
|
+
trailingEdge(time);
|
|
65
|
+
};
|
|
66
|
+
const trailingEdge = (time) => {
|
|
67
|
+
cancelTimer(timeoutId);
|
|
68
|
+
cancelTimer(maxTimeoutId);
|
|
69
|
+
timeoutId = undefined;
|
|
70
|
+
maxTimeoutId = undefined;
|
|
71
|
+
if (trailing && lastArgs !== undefined) {
|
|
72
|
+
return invokeFunc(time);
|
|
73
|
+
}
|
|
74
|
+
lastArgs = undefined;
|
|
75
|
+
lastThis = undefined;
|
|
76
|
+
return result;
|
|
77
|
+
};
|
|
78
|
+
const cancel = () => {
|
|
79
|
+
cancelTimer(timeoutId);
|
|
80
|
+
cancelTimer(maxTimeoutId);
|
|
81
|
+
lastInvokeTime = 0;
|
|
82
|
+
lastArgs = undefined;
|
|
83
|
+
lastCallTime = undefined;
|
|
84
|
+
lastThis = undefined;
|
|
85
|
+
timeoutId = undefined;
|
|
86
|
+
maxTimeoutId = undefined;
|
|
87
|
+
};
|
|
88
|
+
const flush = () => {
|
|
89
|
+
if (timeoutId === undefined) {
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
return trailingEdge(Date.now());
|
|
93
|
+
};
|
|
94
|
+
const pending = () => {
|
|
95
|
+
return timeoutId !== undefined;
|
|
96
|
+
};
|
|
97
|
+
const debounced = function (...args) {
|
|
98
|
+
const time = Date.now();
|
|
99
|
+
const isInvoking = shouldInvoke(time);
|
|
100
|
+
lastArgs = args;
|
|
101
|
+
lastThis = this;
|
|
102
|
+
lastCallTime = time;
|
|
103
|
+
if (isInvoking) {
|
|
104
|
+
if (timeoutId === undefined) {
|
|
105
|
+
return leadingEdge(lastCallTime);
|
|
106
|
+
}
|
|
107
|
+
if (maxWait !== undefined) {
|
|
108
|
+
cancelTimer(timeoutId);
|
|
109
|
+
timeoutId = startTimer(timerExpired, wait);
|
|
110
|
+
return invokeFunc(lastCallTime);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
timeoutId ??= startTimer(timerExpired, wait);
|
|
114
|
+
return result;
|
|
115
|
+
};
|
|
116
|
+
debounced.cancel = cancel;
|
|
117
|
+
debounced.flush = flush;
|
|
118
|
+
debounced.pending = pending;
|
|
119
|
+
return debounced;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=Debounce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Debounce.js","sourceRoot":"","sources":["../../src/events/Debounce.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CleanupFn } from '../core/types.js';
|
|
2
|
+
export declare const EventUtils: {
|
|
3
|
+
readonly once: (target: EventTarget, event: string, handler: (event: Event) => void, options?: AddEventListenerOptions) => CleanupFn;
|
|
4
|
+
readonly delegate: (container: Element, selector: string, event: string, handler: (event: Event, target: Element) => void, options?: AddEventListenerOptions) => CleanupFn;
|
|
5
|
+
readonly onOutsideClick: (element: Element, handler: (event: MouseEvent) => void, options?: {
|
|
6
|
+
touch?: boolean;
|
|
7
|
+
exclude?: Element[];
|
|
8
|
+
}) => CleanupFn;
|
|
9
|
+
readonly onKey: (target: EventTarget, key: string, handler: (event: KeyboardEvent) => void, options?: {
|
|
10
|
+
capture?: boolean;
|
|
11
|
+
ctrl?: boolean;
|
|
12
|
+
shift?: boolean;
|
|
13
|
+
alt?: boolean;
|
|
14
|
+
meta?: boolean;
|
|
15
|
+
preventDefault?: boolean;
|
|
16
|
+
}) => CleanupFn;
|
|
17
|
+
readonly on: (target: EventTarget, events: string[], handler: (event: Event) => void, options?: AddEventListenerOptions) => CleanupFn;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=EventUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventUtils.d.ts","sourceRoot":"","sources":["../../src/events/EventUtils.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,eAAO,MAAM,UAAU;4BAcX,WAAW,SACZ,MAAM,WACJ,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,YACrB,uBAAuB,KAChC,SAAS;mCA2BC,OAAO,YACR,MAAM,SACT,MAAM,WACJ,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,YACtC,uBAAuB,KAChC,SAAS;uCA+BD,OAAO,WACP,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,YAC1B;QACR,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;KACrB,KACA,SAAS;6BAgEF,WAAW,OACd,MAAM,WACF,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,YAC7B;QACR,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,KACA,SAAS;0BAkDF,WAAW,UACX,MAAM,EAAE,WACP,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,YACrB,uBAAuB,KAChC,SAAS;CAWJ,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
export const EventUtils = {
|
|
2
|
+
once(target, event, handler, options) {
|
|
3
|
+
const wrappedHandler = (e) => {
|
|
4
|
+
target.removeEventListener(event, wrappedHandler, options);
|
|
5
|
+
handler(e);
|
|
6
|
+
};
|
|
7
|
+
target.addEventListener(event, wrappedHandler, options);
|
|
8
|
+
return () => {
|
|
9
|
+
target.removeEventListener(event, wrappedHandler, options);
|
|
10
|
+
};
|
|
11
|
+
},
|
|
12
|
+
delegate(container, selector, event, handler, options) {
|
|
13
|
+
const delegateHandler = (e) => {
|
|
14
|
+
const eventTarget = e.target;
|
|
15
|
+
const matchedTarget = eventTarget?.closest(selector);
|
|
16
|
+
if (matchedTarget != null && container.contains(matchedTarget)) {
|
|
17
|
+
handler(e, matchedTarget);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
container.addEventListener(event, delegateHandler, options);
|
|
21
|
+
return () => {
|
|
22
|
+
container.removeEventListener(event, delegateHandler, options);
|
|
23
|
+
};
|
|
24
|
+
},
|
|
25
|
+
onOutsideClick(element, handler, options) {
|
|
26
|
+
const { touch = false, exclude = [] } = options ?? {};
|
|
27
|
+
const isOutside = (event) => {
|
|
28
|
+
const target = event.target;
|
|
29
|
+
if (target === null)
|
|
30
|
+
return false;
|
|
31
|
+
if (element.contains(target))
|
|
32
|
+
return false;
|
|
33
|
+
for (const excluded of exclude) {
|
|
34
|
+
if (excluded.contains(target))
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
return true;
|
|
38
|
+
};
|
|
39
|
+
const clickHandler = (event) => {
|
|
40
|
+
if (isOutside(event)) {
|
|
41
|
+
handler(event);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const touchHandler = (event) => {
|
|
45
|
+
if (isOutside(event)) {
|
|
46
|
+
handler(event);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
document.addEventListener('click', clickHandler, true);
|
|
50
|
+
if (touch) {
|
|
51
|
+
document.addEventListener('touchstart', touchHandler, true);
|
|
52
|
+
}
|
|
53
|
+
return () => {
|
|
54
|
+
document.removeEventListener('click', clickHandler, true);
|
|
55
|
+
if (touch) {
|
|
56
|
+
document.removeEventListener('touchstart', touchHandler, true);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
onKey(target, key, handler, options) {
|
|
61
|
+
const { capture = false, ctrl = false, shift = false, alt = false, meta = false, preventDefault = false, } = options ?? {};
|
|
62
|
+
const keyHandler = (e) => {
|
|
63
|
+
const event = e;
|
|
64
|
+
if (event.key !== key)
|
|
65
|
+
return;
|
|
66
|
+
if (ctrl && !event.ctrlKey)
|
|
67
|
+
return;
|
|
68
|
+
if (shift && !event.shiftKey)
|
|
69
|
+
return;
|
|
70
|
+
if (alt && !event.altKey)
|
|
71
|
+
return;
|
|
72
|
+
if (meta && !event.metaKey)
|
|
73
|
+
return;
|
|
74
|
+
if (preventDefault) {
|
|
75
|
+
event.preventDefault();
|
|
76
|
+
}
|
|
77
|
+
handler(event);
|
|
78
|
+
};
|
|
79
|
+
target.addEventListener('keydown', keyHandler, { capture });
|
|
80
|
+
return () => {
|
|
81
|
+
target.removeEventListener('keydown', keyHandler, { capture });
|
|
82
|
+
};
|
|
83
|
+
},
|
|
84
|
+
on(target, events, handler, options) {
|
|
85
|
+
for (const event of events) {
|
|
86
|
+
target.addEventListener(event, handler, options);
|
|
87
|
+
}
|
|
88
|
+
return () => {
|
|
89
|
+
for (const event of events) {
|
|
90
|
+
target.removeEventListener(event, handler, options);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=EventUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventUtils.js","sourceRoot":"","sources":["../../src/events/EventUtils.ts"],"names":[],"mappings":"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"}
|