xypriss 1.0.1 → 1.1.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/README.md +187 -84
- package/dist/cjs/ServerFactory.js +1 -1
- package/dist/cjs/cache/SecureCacheAdapter.js +2 -2
- package/dist/cjs/cluster/cluster-manager.js +1 -1
- package/dist/cjs/cluster/index.js +30 -30
- package/dist/cjs/cluster/modules/AutoScaler.js +2 -2
- package/dist/cjs/cluster/modules/ClusterPersistenceManager.js +3 -3
- package/dist/cjs/cluster/modules/HealthMonitor.js +2 -2
- package/dist/cjs/cluster/modules/IPCManager.js +2 -2
- package/dist/cjs/cluster/modules/MetricsCollector.js +1 -1
- package/dist/cjs/cluster/modules/WorkerManager.js +2 -2
- package/dist/cjs/encryption/EncryptionService.js +12 -12
- package/dist/cjs/encryption/EncryptionService.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/middleware/safe-json-middleware.js +1 -1
- package/dist/cjs/mods/security/src/algorithms/hash-algorithms.js +727 -0
- package/dist/cjs/mods/security/src/algorithms/hash-algorithms.js.map +1 -0
- package/dist/cjs/mods/security/src/algorithms/registry.js +83 -0
- package/dist/cjs/mods/security/src/algorithms/registry.js.map +1 -0
- package/dist/cjs/mods/security/src/components/attestation.js +1065 -0
- package/dist/cjs/mods/security/src/components/attestation.js.map +1 -0
- package/dist/cjs/mods/security/src/components/cache/FastLRU.js +323 -0
- package/dist/cjs/mods/security/src/components/cache/FastLRU.js.map +1 -0
- package/dist/cjs/mods/security/src/components/cache/UFSIMC.js +1131 -0
- package/dist/cjs/mods/security/src/components/cache/UFSIMC.js.map +1 -0
- package/dist/cjs/mods/security/src/components/cache/cacheSys.js +624 -0
- package/dist/cjs/mods/security/src/components/cache/cacheSys.js.map +1 -0
- package/dist/cjs/mods/security/src/components/cache/cacheSys.utils.js +136 -0
- package/dist/cjs/mods/security/src/components/cache/cacheSys.utils.js.map +1 -0
- package/dist/cjs/mods/security/src/components/cache/config/cache.config.js +39 -0
- package/dist/cjs/mods/security/src/components/cache/config/cache.config.js.map +1 -0
- package/dist/cjs/mods/security/src/components/cache/index.js +459 -0
- package/dist/cjs/mods/security/src/components/cache/index.js.map +1 -0
- package/dist/cjs/mods/security/src/components/cache/useCache.js +243 -0
- package/dist/cjs/mods/security/src/components/cache/useCache.js.map +1 -0
- package/dist/cjs/mods/security/src/components/canary-tokens.js +351 -0
- package/dist/cjs/mods/security/src/components/canary-tokens.js.map +1 -0
- package/dist/cjs/mods/security/src/components/entropy-augmentation.js +478 -0
- package/dist/cjs/mods/security/src/components/entropy-augmentation.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/UFA/ultra-fast-allocator.js +338 -0
- package/dist/cjs/mods/security/src/components/fortified-function/UFA/ultra-fast-allocator.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/UFA/ultra-fast-cache.js +536 -0
- package/dist/cjs/mods/security/src/components/fortified-function/UFA/ultra-fast-cache.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/UFA/ultra-fast-engine.js +631 -0
- package/dist/cjs/mods/security/src/components/fortified-function/UFA/ultra-fast-engine.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/const/exec.const.js +18 -0
- package/dist/cjs/mods/security/src/components/fortified-function/const/exec.const.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/fortified-config.js +356 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/fortified-config.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/fortified-function-core.js +520 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/fortified-function-core.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/fortified-logger.js +246 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/fortified-logger.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/mods/api-manager.js +189 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/mods/api-manager.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/mods/cache-manager.js +107 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/mods/cache-manager.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/mods/execution-context.js +105 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/mods/execution-context.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/mods/execution-engine.js +127 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/mods/execution-engine.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/mods/execution-router.js +93 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/mods/execution-router.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/mods/memory-manager.js +147 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/mods/memory-manager.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/mods/security-manager.js +102 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/mods/security-manager.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/mods/stats-manager.js +159 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/mods/stats-manager.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/mods/timing-manager.js +125 -0
- package/dist/cjs/mods/security/src/components/fortified-function/core/mods/timing-manager.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/engines/analytics-engine.js +370 -0
- package/dist/cjs/mods/security/src/components/fortified-function/engines/analytics-engine.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/engines/execution-engine.js +402 -0
- package/dist/cjs/mods/security/src/components/fortified-function/engines/execution-engine.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/index.js +172 -0
- package/dist/cjs/mods/security/src/components/fortified-function/index.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/performance/performance-monitor.js +240 -0
- package/dist/cjs/mods/security/src/components/fortified-function/performance/performance-monitor.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/performance/performance-timer.js +188 -0
- package/dist/cjs/mods/security/src/components/fortified-function/performance/performance-timer.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/security/security-handler.js +253 -0
- package/dist/cjs/mods/security/src/components/fortified-function/security/security-handler.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/serializer/safe-serializer.js +350 -0
- package/dist/cjs/mods/security/src/components/fortified-function/serializer/safe-serializer.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/smart-cache.js +693 -0
- package/dist/cjs/mods/security/src/components/fortified-function/smart-cache.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/types/types.js +16 -0
- package/dist/cjs/mods/security/src/components/fortified-function/types/types.js.map +1 -0
- package/dist/cjs/mods/security/src/components/fortified-function/utils/utils.js +68 -0
- package/dist/cjs/mods/security/src/components/fortified-function/utils/utils.js.map +1 -0
- package/dist/cjs/mods/security/src/components/memory-hard.js +922 -0
- package/dist/cjs/mods/security/src/components/memory-hard.js.map +1 -0
- package/dist/cjs/mods/security/src/components/post-quantum.js +323 -0
- package/dist/cjs/mods/security/src/components/post-quantum.js.map +1 -0
- package/dist/cjs/mods/security/src/components/runtime-verification.js +645 -0
- package/dist/cjs/mods/security/src/components/runtime-verification.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-array/core/secure-array-core.js +1572 -0
- package/dist/cjs/mods/security/src/components/secure-array/core/secure-array-core.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-array/crypto/ArrayCryptoHandler.js +330 -0
- package/dist/cjs/mods/security/src/components/secure-array/crypto/ArrayCryptoHandler.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-array/events/event-manager.js +270 -0
- package/dist/cjs/mods/security/src/components/secure-array/events/event-manager.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-array/index.js +66 -0
- package/dist/cjs/mods/security/src/components/secure-array/index.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-array/metadata/metadata-manager.js +331 -0
- package/dist/cjs/mods/security/src/components/secure-array/metadata/metadata-manager.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-array/serialization/ArraySerializationHandler.js +390 -0
- package/dist/cjs/mods/security/src/components/secure-array/serialization/ArraySerializationHandler.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-array/types/index.js +87 -0
- package/dist/cjs/mods/security/src/components/secure-array/types/index.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-array/utils/id-generator.js +80 -0
- package/dist/cjs/mods/security/src/components/secure-array/utils/id-generator.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-array/utils/validation.js +275 -0
- package/dist/cjs/mods/security/src/components/secure-array/utils/validation.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-memory.js +906 -0
- package/dist/cjs/mods/security/src/components/secure-memory.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-object/core/secure-object-core.js +1605 -0
- package/dist/cjs/mods/security/src/components/secure-object/core/secure-object-core.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-object/encryption/crypto-handler.js +362 -0
- package/dist/cjs/mods/security/src/components/secure-object/encryption/crypto-handler.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-object/encryption/sensitive-keys.js +206 -0
- package/dist/cjs/mods/security/src/components/secure-object/encryption/sensitive-keys.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-object/events/event-manager.js +197 -0
- package/dist/cjs/mods/security/src/components/secure-object/events/event-manager.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-object/index.js +67 -0
- package/dist/cjs/mods/security/src/components/secure-object/index.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-object/metadata/metadata-manager.js +183 -0
- package/dist/cjs/mods/security/src/components/secure-object/metadata/metadata-manager.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-object/serialization/serialization-handler.js +197 -0
- package/dist/cjs/mods/security/src/components/secure-object/serialization/serialization-handler.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-object/utils/id-generator.js +64 -0
- package/dist/cjs/mods/security/src/components/secure-object/utils/id-generator.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-object/utils/validation.js +239 -0
- package/dist/cjs/mods/security/src/components/secure-object/utils/validation.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-serialization.js +772 -0
- package/dist/cjs/mods/security/src/components/secure-serialization.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-string/advanced/entropy-analyzer.js +308 -0
- package/dist/cjs/mods/security/src/components/secure-string/advanced/entropy-analyzer.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-string/advanced/performance-monitor.js +335 -0
- package/dist/cjs/mods/security/src/components/secure-string/advanced/performance-monitor.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-string/advanced/quantum-safe.js +245 -0
- package/dist/cjs/mods/security/src/components/secure-string/advanced/quantum-safe.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-string/buffer/buffer-manager.js +205 -0
- package/dist/cjs/mods/security/src/components/secure-string/buffer/buffer-manager.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-string/core/secure-string-core.js +788 -0
- package/dist/cjs/mods/security/src/components/secure-string/core/secure-string-core.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-string/crypto/crypto-operations.js +319 -0
- package/dist/cjs/mods/security/src/components/secure-string/crypto/crypto-operations.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-string/operations/comparison-operations.js +221 -0
- package/dist/cjs/mods/security/src/components/secure-string/operations/comparison-operations.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-string/operations/string-operations.js +234 -0
- package/dist/cjs/mods/security/src/components/secure-string/operations/string-operations.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-string/types/index.js +41 -0
- package/dist/cjs/mods/security/src/components/secure-string/types/index.js.map +1 -0
- package/dist/cjs/mods/security/src/components/secure-string/validation/string-validator.js +334 -0
- package/dist/cjs/mods/security/src/components/secure-string/validation/string-validator.js.map +1 -0
- package/dist/cjs/mods/security/src/components/side-channel.js +146 -0
- package/dist/cjs/mods/security/src/components/side-channel.js.map +1 -0
- package/dist/cjs/mods/security/src/components/tamper-evident-logging.js +391 -0
- package/dist/cjs/mods/security/src/components/tamper-evident-logging.js.map +1 -0
- package/dist/cjs/mods/security/src/const/buffer.const.js +15 -0
- package/dist/cjs/mods/security/src/const/buffer.const.js.map +1 -0
- package/dist/cjs/mods/security/src/core/crypto.js +722 -0
- package/dist/cjs/mods/security/src/core/crypto.js.map +1 -0
- package/dist/cjs/mods/security/src/core/hash/hash-advanced.js +388 -0
- package/dist/cjs/mods/security/src/core/hash/hash-advanced.js.map +1 -0
- package/dist/cjs/mods/security/src/core/hash/hash-core.js +376 -0
- package/dist/cjs/mods/security/src/core/hash/hash-core.js.map +1 -0
- package/dist/cjs/mods/security/src/core/hash/hash-entropy.js +307 -0
- package/dist/cjs/mods/security/src/core/hash/hash-entropy.js.map +1 -0
- package/dist/cjs/mods/security/src/core/hash/hash-security.js +372 -0
- package/dist/cjs/mods/security/src/core/hash/hash-security.js.map +1 -0
- package/dist/cjs/mods/security/src/core/hash/hash-types.js +16 -0
- package/dist/cjs/mods/security/src/core/hash/hash-types.js.map +1 -0
- package/dist/cjs/mods/security/src/core/hash/hash-utils.js +328 -0
- package/dist/cjs/mods/security/src/core/hash/hash-utils.js.map +1 -0
- package/dist/cjs/mods/security/src/core/hash/hash-validator.js +312 -0
- package/dist/cjs/mods/security/src/core/hash/hash-validator.js.map +1 -0
- package/dist/cjs/mods/security/src/core/hash.js +25 -0
- package/dist/cjs/mods/security/src/core/hash.js.map +1 -0
- package/dist/cjs/mods/security/src/core/keys/algorithms/mods/Argon2Algo.js +135 -0
- package/dist/cjs/mods/security/src/core/keys/algorithms/mods/Argon2Algo.js.map +1 -0
- package/dist/cjs/mods/security/src/core/keys/algorithms/mods/PBKDF2Algo.js +293 -0
- package/dist/cjs/mods/security/src/core/keys/algorithms/mods/PBKDF2Algo.js.map +1 -0
- package/dist/cjs/mods/security/src/core/keys/algorithms/mods/ScryptAlgo.js +317 -0
- package/dist/cjs/mods/security/src/core/keys/algorithms/mods/ScryptAlgo.js.map +1 -0
- package/dist/cjs/mods/security/src/core/keys/keys-core.js +201 -0
- package/dist/cjs/mods/security/src/core/keys/keys-core.js.map +1 -0
- package/dist/cjs/mods/security/src/core/keys/keys-logger.js +234 -0
- package/dist/cjs/mods/security/src/core/keys/keys-logger.js.map +1 -0
- package/dist/cjs/mods/security/src/core/keys/keys-types.js +65 -0
- package/dist/cjs/mods/security/src/core/keys/keys-types.js.map +1 -0
- package/dist/cjs/mods/security/src/core/keys/keys-utils.js +322 -0
- package/dist/cjs/mods/security/src/core/keys/keys-utils.js.map +1 -0
- package/dist/cjs/mods/security/src/core/keys.js +136 -0
- package/dist/cjs/mods/security/src/core/keys.js.map +1 -0
- package/dist/cjs/mods/security/src/core/password/index.js +122 -0
- package/dist/cjs/mods/security/src/core/password/index.js.map +1 -0
- package/dist/cjs/mods/security/src/core/password/password-algorithms.js +397 -0
- package/dist/cjs/mods/security/src/core/password/password-algorithms.js.map +1 -0
- package/dist/cjs/mods/security/src/core/password/password-core.js +294 -0
- package/dist/cjs/mods/security/src/core/password/password-core.js.map +1 -0
- package/dist/cjs/mods/security/src/core/password/password-generator.js +365 -0
- package/dist/cjs/mods/security/src/core/password/password-generator.js.map +1 -0
- package/dist/cjs/mods/security/src/core/password/password-migration.js +237 -0
- package/dist/cjs/mods/security/src/core/password/password-migration.js.map +1 -0
- package/dist/cjs/mods/security/src/core/password/password-security.js +534 -0
- package/dist/cjs/mods/security/src/core/password/password-security.js.map +1 -0
- package/dist/cjs/mods/security/src/core/password/password-types.js +39 -0
- package/dist/cjs/mods/security/src/core/password/password-types.js.map +1 -0
- package/dist/cjs/mods/security/src/core/password/password-utils.js +651 -0
- package/dist/cjs/mods/security/src/core/password/password-utils.js.map +1 -0
- package/dist/cjs/mods/security/src/core/password/swlist.js +1122 -0
- package/dist/cjs/mods/security/src/core/password/swlist.js.map +1 -0
- package/dist/cjs/mods/security/src/core/random/random-core.js +328 -0
- package/dist/cjs/mods/security/src/core/random/random-core.js.map +1 -0
- package/dist/cjs/mods/security/src/core/random/random-crypto.js +339 -0
- package/dist/cjs/mods/security/src/core/random/random-crypto.js.map +1 -0
- package/dist/cjs/mods/security/src/core/random/random-entropy.js +388 -0
- package/dist/cjs/mods/security/src/core/random/random-entropy.js.map +1 -0
- package/dist/cjs/mods/security/src/core/random/random-generators.js +344 -0
- package/dist/cjs/mods/security/src/core/random/random-generators.js.map +1 -0
- package/dist/cjs/mods/security/src/core/random/random-sources.js +426 -0
- package/dist/cjs/mods/security/src/core/random/random-sources.js.map +1 -0
- package/dist/cjs/mods/security/src/core/random/random-tokens.js +309 -0
- package/dist/cjs/mods/security/src/core/random/random-tokens.js.map +1 -0
- package/dist/cjs/mods/security/src/core/random/random-types.js +36 -0
- package/dist/cjs/mods/security/src/core/random/random-types.js.map +1 -0
- package/dist/cjs/mods/security/src/core/validators.js +200 -0
- package/dist/cjs/mods/security/src/core/validators.js.map +1 -0
- package/dist/cjs/mods/security/src/helpers/Uint8Array.js +335 -0
- package/dist/cjs/mods/security/src/helpers/Uint8Array.js.map +1 -0
- package/dist/cjs/mods/security/src/helpers/createEnu.js +27 -0
- package/dist/cjs/mods/security/src/helpers/createEnu.js.map +1 -0
- package/dist/cjs/mods/security/src/index.js +417 -0
- package/dist/cjs/mods/security/src/index.js.map +1 -0
- package/dist/cjs/mods/security/src/types/global.js +51 -0
- package/dist/cjs/mods/security/src/types/global.js.map +1 -0
- package/dist/cjs/mods/security/src/types/secure-mem.type.js +100 -0
- package/dist/cjs/mods/security/src/types/secure-mem.type.js.map +1 -0
- package/dist/cjs/mods/security/src/types/secure-memory.js +20 -0
- package/dist/cjs/mods/security/src/types/secure-memory.js.map +1 -0
- package/dist/cjs/mods/security/src/types.js +63 -0
- package/dist/cjs/mods/security/src/types.js.map +1 -0
- package/dist/cjs/mods/security/src/utils/CryptoAlgorithmUtils.js +71 -0
- package/dist/cjs/mods/security/src/utils/CryptoAlgorithmUtils.js.map +1 -0
- package/dist/cjs/mods/security/src/utils/constants.js +111 -0
- package/dist/cjs/mods/security/src/utils/constants.js.map +1 -0
- package/dist/cjs/mods/security/src/utils/dataConverter.js +74 -0
- package/dist/cjs/mods/security/src/utils/dataConverter.js.map +1 -0
- package/dist/cjs/mods/security/src/utils/encoding.js +290 -0
- package/dist/cjs/mods/security/src/utils/encoding.js.map +1 -0
- package/dist/cjs/mods/security/src/utils/errorHandler.js +140 -0
- package/dist/cjs/mods/security/src/utils/errorHandler.js.map +1 -0
- package/dist/cjs/mods/security/src/utils/memory/config-manager.js +282 -0
- package/dist/cjs/mods/security/src/utils/memory/config-manager.js.map +1 -0
- package/dist/cjs/mods/security/src/utils/memory/event-manager.js +277 -0
- package/dist/cjs/mods/security/src/utils/memory/event-manager.js.map +1 -0
- package/dist/cjs/mods/security/src/utils/memory/index.js +162 -0
- package/dist/cjs/mods/security/src/utils/memory/index.js.map +1 -0
- package/dist/cjs/mods/security/src/utils/memory/memory-manager.js +888 -0
- package/dist/cjs/mods/security/src/utils/memory/memory-manager.js.map +1 -0
- package/dist/cjs/mods/security/src/utils/memory/memory-pool.js +356 -0
- package/dist/cjs/mods/security/src/utils/memory/memory-pool.js.map +1 -0
- package/dist/cjs/mods/security/src/utils/memory/reference-tracker.js +376 -0
- package/dist/cjs/mods/security/src/utils/memory/reference-tracker.js.map +1 -0
- package/dist/cjs/mods/security/src/utils/memory/types.js +56 -0
- package/dist/cjs/mods/security/src/utils/memory/types.js.map +1 -0
- package/dist/cjs/mods/security/src/utils/patterns.js +127 -0
- package/dist/cjs/mods/security/src/utils/patterns.js.map +1 -0
- package/dist/cjs/mods/security/src/utils/performanceMonitor.js +249 -0
- package/dist/cjs/mods/security/src/utils/performanceMonitor.js.map +1 -0
- package/dist/cjs/mods/security/src/utils/stats.js +182 -0
- package/dist/cjs/mods/security/src/utils/stats.js.map +1 -0
- package/dist/cjs/security-middleware.js +15 -15
- package/dist/cjs/server/components/fastapi/UltraFastRequestProcessor.js +1 -1
- package/dist/cjs/server/components/fastapi/console/ConsoleInterceptor.js +23 -23
- package/dist/cjs/server/components/fastapi/middlewares/MiddlewareAPI.js +1 -1
- package/dist/cjs/server/optimization/RequestPreCompiler.js +1 -1
- package/dist/cjs/server/plugins/PluginRegistry.js +1 -1
- package/dist/cjs/server/plugins/core/CachePlugin.js +7 -7
- package/dist/cjs/server/plugins/core/PerformancePlugin.js +2 -2
- package/dist/cjs/server/plugins/core/SecurityPlugin.js +10 -10
- package/dist/cjs/smart-routes.js +1 -1
- package/dist/esm/ServerFactory.js +1 -1
- package/dist/esm/cache/SecureCacheAdapter.js +2 -2
- package/dist/esm/cluster/cluster-manager.js +1 -1
- package/dist/esm/cluster/index.js +30 -30
- package/dist/esm/cluster/modules/AutoScaler.js +2 -2
- package/dist/esm/cluster/modules/ClusterPersistenceManager.js +3 -3
- package/dist/esm/cluster/modules/HealthMonitor.js +2 -2
- package/dist/esm/cluster/modules/IPCManager.js +2 -2
- package/dist/esm/cluster/modules/MetricsCollector.js +1 -1
- package/dist/esm/cluster/modules/WorkerManager.js +2 -2
- package/dist/esm/encryption/EncryptionService.js +12 -12
- package/dist/esm/encryption/EncryptionService.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/middleware/safe-json-middleware.js +1 -1
- package/dist/esm/mods/security/src/algorithms/hash-algorithms.js +705 -0
- package/dist/esm/mods/security/src/algorithms/hash-algorithms.js.map +1 -0
- package/dist/esm/mods/security/src/algorithms/registry.js +81 -0
- package/dist/esm/mods/security/src/algorithms/registry.js.map +1 -0
- package/dist/esm/mods/security/src/components/attestation.js +1059 -0
- package/dist/esm/mods/security/src/components/attestation.js.map +1 -0
- package/dist/esm/mods/security/src/components/cache/FastLRU.js +320 -0
- package/dist/esm/mods/security/src/components/cache/FastLRU.js.map +1 -0
- package/dist/esm/mods/security/src/components/cache/UFSIMC.js +1109 -0
- package/dist/esm/mods/security/src/components/cache/UFSIMC.js.map +1 -0
- package/dist/esm/mods/security/src/components/cache/cacheSys.js +622 -0
- package/dist/esm/mods/security/src/components/cache/cacheSys.js.map +1 -0
- package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js +111 -0
- package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js.map +1 -0
- package/dist/esm/mods/security/src/components/cache/config/cache.config.js +36 -0
- package/dist/esm/mods/security/src/components/cache/config/cache.config.js.map +1 -0
- package/dist/esm/mods/security/src/components/cache/index.js +449 -0
- package/dist/esm/mods/security/src/components/cache/index.js.map +1 -0
- package/dist/esm/mods/security/src/components/cache/useCache.js +240 -0
- package/dist/esm/mods/security/src/components/cache/useCache.js.map +1 -0
- package/dist/esm/mods/security/src/components/canary-tokens.js +346 -0
- package/dist/esm/mods/security/src/components/canary-tokens.js.map +1 -0
- package/dist/esm/mods/security/src/components/entropy-augmentation.js +476 -0
- package/dist/esm/mods/security/src/components/entropy-augmentation.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/UFA/ultra-fast-allocator.js +336 -0
- package/dist/esm/mods/security/src/components/fortified-function/UFA/ultra-fast-allocator.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/UFA/ultra-fast-cache.js +534 -0
- package/dist/esm/mods/security/src/components/fortified-function/UFA/ultra-fast-cache.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/UFA/ultra-fast-engine.js +629 -0
- package/dist/esm/mods/security/src/components/fortified-function/UFA/ultra-fast-engine.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/const/exec.const.js +11 -0
- package/dist/esm/mods/security/src/components/fortified-function/const/exec.const.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/fortified-config.js +351 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/fortified-config.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/fortified-function-core.js +518 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/fortified-function-core.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/fortified-logger.js +243 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/fortified-logger.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/mods/api-manager.js +187 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/mods/api-manager.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/mods/cache-manager.js +105 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/mods/cache-manager.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/mods/execution-context.js +103 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/mods/execution-context.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/mods/execution-engine.js +125 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/mods/execution-engine.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/mods/execution-router.js +91 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/mods/execution-router.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/mods/memory-manager.js +145 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/mods/memory-manager.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/mods/security-manager.js +100 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/mods/security-manager.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/mods/stats-manager.js +157 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/mods/stats-manager.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/mods/timing-manager.js +123 -0
- package/dist/esm/mods/security/src/components/fortified-function/core/mods/timing-manager.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/engines/analytics-engine.js +368 -0
- package/dist/esm/mods/security/src/components/fortified-function/engines/analytics-engine.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/engines/execution-engine.js +400 -0
- package/dist/esm/mods/security/src/components/fortified-function/engines/execution-engine.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/index.js +165 -0
- package/dist/esm/mods/security/src/components/fortified-function/index.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/performance/performance-monitor.js +238 -0
- package/dist/esm/mods/security/src/components/fortified-function/performance/performance-monitor.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/performance/performance-timer.js +186 -0
- package/dist/esm/mods/security/src/components/fortified-function/performance/performance-timer.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js +251 -0
- package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/serializer/safe-serializer.js +344 -0
- package/dist/esm/mods/security/src/components/fortified-function/serializer/safe-serializer.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/smart-cache.js +691 -0
- package/dist/esm/mods/security/src/components/fortified-function/smart-cache.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/types/types.js +14 -0
- package/dist/esm/mods/security/src/components/fortified-function/types/types.js.map +1 -0
- package/dist/esm/mods/security/src/components/fortified-function/utils/utils.js +66 -0
- package/dist/esm/mods/security/src/components/fortified-function/utils/utils.js.map +1 -0
- package/dist/esm/mods/security/src/components/memory-hard.js +919 -0
- package/dist/esm/mods/security/src/components/memory-hard.js.map +1 -0
- package/dist/esm/mods/security/src/components/post-quantum.js +316 -0
- package/dist/esm/mods/security/src/components/post-quantum.js.map +1 -0
- package/dist/esm/mods/security/src/components/runtime-verification.js +643 -0
- package/dist/esm/mods/security/src/components/runtime-verification.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-array/core/secure-array-core.js +1570 -0
- package/dist/esm/mods/security/src/components/secure-array/core/secure-array-core.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-array/crypto/ArrayCryptoHandler.js +328 -0
- package/dist/esm/mods/security/src/components/secure-array/crypto/ArrayCryptoHandler.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-array/events/event-manager.js +268 -0
- package/dist/esm/mods/security/src/components/secure-array/events/event-manager.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-array/index.js +61 -0
- package/dist/esm/mods/security/src/components/secure-array/index.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-array/metadata/metadata-manager.js +329 -0
- package/dist/esm/mods/security/src/components/secure-array/metadata/metadata-manager.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-array/serialization/ArraySerializationHandler.js +388 -0
- package/dist/esm/mods/security/src/components/secure-array/serialization/ArraySerializationHandler.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-array/types/index.js +84 -0
- package/dist/esm/mods/security/src/components/secure-array/types/index.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-array/utils/id-generator.js +78 -0
- package/dist/esm/mods/security/src/components/secure-array/utils/id-generator.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-array/utils/validation.js +273 -0
- package/dist/esm/mods/security/src/components/secure-array/utils/validation.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-memory.js +884 -0
- package/dist/esm/mods/security/src/components/secure-memory.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-object/core/secure-object-core.js +1603 -0
- package/dist/esm/mods/security/src/components/secure-object/core/secure-object-core.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-object/encryption/crypto-handler.js +360 -0
- package/dist/esm/mods/security/src/components/secure-object/encryption/crypto-handler.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-object/encryption/sensitive-keys.js +203 -0
- package/dist/esm/mods/security/src/components/secure-object/encryption/sensitive-keys.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-object/events/event-manager.js +195 -0
- package/dist/esm/mods/security/src/components/secure-object/events/event-manager.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-object/index.js +63 -0
- package/dist/esm/mods/security/src/components/secure-object/index.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-object/metadata/metadata-manager.js +181 -0
- package/dist/esm/mods/security/src/components/secure-object/metadata/metadata-manager.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-object/serialization/serialization-handler.js +195 -0
- package/dist/esm/mods/security/src/components/secure-object/serialization/serialization-handler.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-object/utils/id-generator.js +62 -0
- package/dist/esm/mods/security/src/components/secure-object/utils/id-generator.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-object/utils/validation.js +237 -0
- package/dist/esm/mods/security/src/components/secure-object/utils/validation.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-serialization.js +769 -0
- package/dist/esm/mods/security/src/components/secure-serialization.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-string/advanced/entropy-analyzer.js +306 -0
- package/dist/esm/mods/security/src/components/secure-string/advanced/entropy-analyzer.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-string/advanced/performance-monitor.js +333 -0
- package/dist/esm/mods/security/src/components/secure-string/advanced/performance-monitor.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-string/advanced/quantum-safe.js +243 -0
- package/dist/esm/mods/security/src/components/secure-string/advanced/quantum-safe.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-string/buffer/buffer-manager.js +203 -0
- package/dist/esm/mods/security/src/components/secure-string/buffer/buffer-manager.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-string/core/secure-string-core.js +786 -0
- package/dist/esm/mods/security/src/components/secure-string/core/secure-string-core.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-string/crypto/crypto-operations.js +298 -0
- package/dist/esm/mods/security/src/components/secure-string/crypto/crypto-operations.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-string/operations/comparison-operations.js +219 -0
- package/dist/esm/mods/security/src/components/secure-string/operations/comparison-operations.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-string/operations/string-operations.js +232 -0
- package/dist/esm/mods/security/src/components/secure-string/operations/string-operations.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-string/types/index.js +37 -0
- package/dist/esm/mods/security/src/components/secure-string/types/index.js.map +1 -0
- package/dist/esm/mods/security/src/components/secure-string/validation/string-validator.js +332 -0
- package/dist/esm/mods/security/src/components/secure-string/validation/string-validator.js.map +1 -0
- package/dist/esm/mods/security/src/components/side-channel.js +142 -0
- package/dist/esm/mods/security/src/components/side-channel.js.map +1 -0
- package/dist/esm/mods/security/src/components/tamper-evident-logging.js +389 -0
- package/dist/esm/mods/security/src/components/tamper-evident-logging.js.map +1 -0
- package/dist/esm/mods/security/src/const/buffer.const.js +13 -0
- package/dist/esm/mods/security/src/const/buffer.const.js.map +1 -0
- package/dist/esm/mods/security/src/core/crypto.js +720 -0
- package/dist/esm/mods/security/src/core/crypto.js.map +1 -0
- package/dist/esm/mods/security/src/core/hash/hash-advanced.js +367 -0
- package/dist/esm/mods/security/src/core/hash/hash-advanced.js.map +1 -0
- package/dist/esm/mods/security/src/core/hash/hash-core.js +355 -0
- package/dist/esm/mods/security/src/core/hash/hash-core.js.map +1 -0
- package/dist/esm/mods/security/src/core/hash/hash-entropy.js +286 -0
- package/dist/esm/mods/security/src/core/hash/hash-entropy.js.map +1 -0
- package/dist/esm/mods/security/src/core/hash/hash-security.js +351 -0
- package/dist/esm/mods/security/src/core/hash/hash-security.js.map +1 -0
- package/dist/esm/mods/security/src/core/hash/hash-types.js +16 -0
- package/dist/esm/mods/security/src/core/hash/hash-types.js.map +1 -0
- package/dist/esm/mods/security/src/core/hash/hash-utils.js +307 -0
- package/dist/esm/mods/security/src/core/hash/hash-utils.js.map +1 -0
- package/dist/esm/mods/security/src/core/hash/hash-validator.js +310 -0
- package/dist/esm/mods/security/src/core/hash/hash-validator.js.map +1 -0
- package/dist/esm/mods/security/src/core/hash.js +9 -0
- package/dist/esm/mods/security/src/core/hash.js.map +1 -0
- package/dist/esm/mods/security/src/core/keys/algorithms/mods/Argon2Algo.js +133 -0
- package/dist/esm/mods/security/src/core/keys/algorithms/mods/Argon2Algo.js.map +1 -0
- package/dist/esm/mods/security/src/core/keys/algorithms/mods/PBKDF2Algo.js +272 -0
- package/dist/esm/mods/security/src/core/keys/algorithms/mods/PBKDF2Algo.js.map +1 -0
- package/dist/esm/mods/security/src/core/keys/algorithms/mods/ScryptAlgo.js +296 -0
- package/dist/esm/mods/security/src/core/keys/algorithms/mods/ScryptAlgo.js.map +1 -0
- package/dist/esm/mods/security/src/core/keys/keys-core.js +199 -0
- package/dist/esm/mods/security/src/core/keys/keys-core.js.map +1 -0
- package/dist/esm/mods/security/src/core/keys/keys-logger.js +231 -0
- package/dist/esm/mods/security/src/core/keys/keys-logger.js.map +1 -0
- package/dist/esm/mods/security/src/core/keys/keys-types.js +63 -0
- package/dist/esm/mods/security/src/core/keys/keys-types.js.map +1 -0
- package/dist/esm/mods/security/src/core/keys/keys-utils.js +316 -0
- package/dist/esm/mods/security/src/core/keys/keys-utils.js.map +1 -0
- package/dist/esm/mods/security/src/core/keys.js +134 -0
- package/dist/esm/mods/security/src/core/keys.js.map +1 -0
- package/dist/esm/mods/security/src/core/password/index.js +110 -0
- package/dist/esm/mods/security/src/core/password/index.js.map +1 -0
- package/dist/esm/mods/security/src/core/password/password-algorithms.js +395 -0
- package/dist/esm/mods/security/src/core/password/password-algorithms.js.map +1 -0
- package/dist/esm/mods/security/src/core/password/password-core.js +292 -0
- package/dist/esm/mods/security/src/core/password/password-core.js.map +1 -0
- package/dist/esm/mods/security/src/core/password/password-generator.js +363 -0
- package/dist/esm/mods/security/src/core/password/password-generator.js.map +1 -0
- package/dist/esm/mods/security/src/core/password/password-migration.js +235 -0
- package/dist/esm/mods/security/src/core/password/password-migration.js.map +1 -0
- package/dist/esm/mods/security/src/core/password/password-security.js +532 -0
- package/dist/esm/mods/security/src/core/password/password-security.js.map +1 -0
- package/dist/esm/mods/security/src/core/password/password-types.js +34 -0
- package/dist/esm/mods/security/src/core/password/password-types.js.map +1 -0
- package/dist/esm/mods/security/src/core/password/password-utils.js +630 -0
- package/dist/esm/mods/security/src/core/password/password-utils.js.map +1 -0
- package/dist/esm/mods/security/src/core/password/swlist.js +1120 -0
- package/dist/esm/mods/security/src/core/password/swlist.js.map +1 -0
- package/dist/esm/mods/security/src/core/random/random-core.js +326 -0
- package/dist/esm/mods/security/src/core/random/random-core.js.map +1 -0
- package/dist/esm/mods/security/src/core/random/random-crypto.js +337 -0
- package/dist/esm/mods/security/src/core/random/random-crypto.js.map +1 -0
- package/dist/esm/mods/security/src/core/random/random-entropy.js +367 -0
- package/dist/esm/mods/security/src/core/random/random-entropy.js.map +1 -0
- package/dist/esm/mods/security/src/core/random/random-generators.js +323 -0
- package/dist/esm/mods/security/src/core/random/random-generators.js.map +1 -0
- package/dist/esm/mods/security/src/core/random/random-sources.js +405 -0
- package/dist/esm/mods/security/src/core/random/random-sources.js.map +1 -0
- package/dist/esm/mods/security/src/core/random/random-tokens.js +307 -0
- package/dist/esm/mods/security/src/core/random/random-tokens.js.map +1 -0
- package/dist/esm/mods/security/src/core/random/random-types.js +27 -0
- package/dist/esm/mods/security/src/core/random/random-types.js.map +1 -0
- package/dist/esm/mods/security/src/core/validators.js +198 -0
- package/dist/esm/mods/security/src/core/validators.js.map +1 -0
- package/dist/esm/mods/security/src/helpers/Uint8Array.js +333 -0
- package/dist/esm/mods/security/src/helpers/Uint8Array.js.map +1 -0
- package/dist/esm/mods/security/src/helpers/createEnu.js +25 -0
- package/dist/esm/mods/security/src/helpers/createEnu.js.map +1 -0
- package/dist/esm/mods/security/src/index.js +373 -0
- package/dist/esm/mods/security/src/index.js.map +1 -0
- package/dist/esm/mods/security/src/types/global.js +49 -0
- package/dist/esm/mods/security/src/types/global.js.map +1 -0
- package/dist/esm/mods/security/src/types/secure-mem.type.js +96 -0
- package/dist/esm/mods/security/src/types/secure-mem.type.js.map +1 -0
- package/dist/esm/mods/security/src/types/secure-memory.js +20 -0
- package/dist/esm/mods/security/src/types/secure-memory.js.map +1 -0
- package/dist/esm/mods/security/src/types.js +63 -0
- package/dist/esm/mods/security/src/types.js.map +1 -0
- package/dist/esm/mods/security/src/utils/CryptoAlgorithmUtils.js +69 -0
- package/dist/esm/mods/security/src/utils/CryptoAlgorithmUtils.js.map +1 -0
- package/dist/esm/mods/security/src/utils/constants.js +105 -0
- package/dist/esm/mods/security/src/utils/constants.js.map +1 -0
- package/dist/esm/mods/security/src/utils/dataConverter.js +72 -0
- package/dist/esm/mods/security/src/utils/dataConverter.js.map +1 -0
- package/dist/esm/mods/security/src/utils/encoding.js +279 -0
- package/dist/esm/mods/security/src/utils/encoding.js.map +1 -0
- package/dist/esm/mods/security/src/utils/errorHandler.js +137 -0
- package/dist/esm/mods/security/src/utils/errorHandler.js.map +1 -0
- package/dist/esm/mods/security/src/utils/memory/config-manager.js +280 -0
- package/dist/esm/mods/security/src/utils/memory/config-manager.js.map +1 -0
- package/dist/esm/mods/security/src/utils/memory/event-manager.js +275 -0
- package/dist/esm/mods/security/src/utils/memory/event-manager.js.map +1 -0
- package/dist/esm/mods/security/src/utils/memory/index.js +141 -0
- package/dist/esm/mods/security/src/utils/memory/index.js.map +1 -0
- package/dist/esm/mods/security/src/utils/memory/memory-manager.js +886 -0
- package/dist/esm/mods/security/src/utils/memory/memory-manager.js.map +1 -0
- package/dist/esm/mods/security/src/utils/memory/memory-pool.js +354 -0
- package/dist/esm/mods/security/src/utils/memory/memory-pool.js.map +1 -0
- package/dist/esm/mods/security/src/utils/memory/reference-tracker.js +374 -0
- package/dist/esm/mods/security/src/utils/memory/reference-tracker.js.map +1 -0
- package/dist/esm/mods/security/src/utils/memory/types.js +56 -0
- package/dist/esm/mods/security/src/utils/memory/types.js.map +1 -0
- package/dist/esm/mods/security/src/utils/patterns.js +124 -0
- package/dist/esm/mods/security/src/utils/patterns.js.map +1 -0
- package/dist/esm/mods/security/src/utils/performanceMonitor.js +246 -0
- package/dist/esm/mods/security/src/utils/performanceMonitor.js.map +1 -0
- package/dist/esm/mods/security/src/utils/stats.js +180 -0
- package/dist/esm/mods/security/src/utils/stats.js.map +1 -0
- package/dist/esm/security-middleware.js +15 -15
- package/dist/esm/server/components/fastapi/UltraFastRequestProcessor.js +1 -1
- package/dist/esm/server/components/fastapi/console/ConsoleInterceptor.js +23 -23
- package/dist/esm/server/components/fastapi/middlewares/MiddlewareAPI.js +1 -1
- package/dist/esm/server/optimization/RequestPreCompiler.js +1 -1
- package/dist/esm/server/plugins/PluginRegistry.js +1 -1
- package/dist/esm/server/plugins/core/CachePlugin.js +7 -7
- package/dist/esm/server/plugins/core/PerformancePlugin.js +2 -2
- package/dist/esm/server/plugins/core/SecurityPlugin.js +10 -10
- package/dist/esm/smart-routes.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,1572 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('../types/index.js');
|
|
4
|
+
var metadataManager = require('../metadata/metadata-manager.js');
|
|
5
|
+
var validation = require('../utils/validation.js');
|
|
6
|
+
var idGenerator = require('../utils/id-generator.js');
|
|
7
|
+
var secureMemory = require('../../secure-memory.js');
|
|
8
|
+
var index$1 = require('../../../utils/memory/index.js');
|
|
9
|
+
var eventManager = require('../events/event-manager.js');
|
|
10
|
+
var ArrayCryptoHandler = require('../crypto/ArrayCryptoHandler.js');
|
|
11
|
+
var ArraySerializationHandler = require('../serialization/ArraySerializationHandler.js');
|
|
12
|
+
require('../../../index.js');
|
|
13
|
+
var crypto = require('../../../core/crypto.js');
|
|
14
|
+
var types = require('../../../utils/memory/types.js');
|
|
15
|
+
|
|
16
|
+
/***************************************************************************
|
|
17
|
+
* XyPrissSecurity - Enhanced Secure Array Core Implementation
|
|
18
|
+
*
|
|
19
|
+
* security features and array methods
|
|
20
|
+
*
|
|
21
|
+
* @author Nehonix & Community
|
|
22
|
+
*
|
|
23
|
+
* @license MIT
|
|
24
|
+
***************************************************************************** */
|
|
25
|
+
/**
|
|
26
|
+
* A secure array that can store sensitive data with enhanced security features
|
|
27
|
+
* T represents the type of elements stored in the array
|
|
28
|
+
*/
|
|
29
|
+
class SecureArray {
|
|
30
|
+
/**
|
|
31
|
+
* Creates a new secure array
|
|
32
|
+
*/
|
|
33
|
+
constructor(initialData, options) {
|
|
34
|
+
// Core data storage
|
|
35
|
+
this.elements = [];
|
|
36
|
+
this.secureBuffers = new Map();
|
|
37
|
+
// State management
|
|
38
|
+
this._isDestroyed = false;
|
|
39
|
+
this._isReadOnly = false;
|
|
40
|
+
this._isFrozen = false;
|
|
41
|
+
this._version = 1;
|
|
42
|
+
this._lastModified = Date.now();
|
|
43
|
+
this._createdAt = Date.now();
|
|
44
|
+
// Memory management
|
|
45
|
+
this._memoryTracking = false;
|
|
46
|
+
// Snapshot functionality
|
|
47
|
+
this.snapshots = new Map();
|
|
48
|
+
this._id = idGenerator.ArrayIdGenerator.generate();
|
|
49
|
+
this.options = { ...index.DEFAULT_SECURE_ARRAY_OPTIONS, ...options };
|
|
50
|
+
this._isReadOnly = this.options.readOnly;
|
|
51
|
+
this._maxSize = this.options.maxSize;
|
|
52
|
+
// Initialize modular components
|
|
53
|
+
this.metadataManager = new metadataManager.ArrayMetadataManager();
|
|
54
|
+
this.eventManager = new eventManager.ArrayEventManager();
|
|
55
|
+
this.cryptoHandler = new ArrayCryptoHandler.ArrayCryptoHandler(this._id);
|
|
56
|
+
this.serializationHandler = new ArraySerializationHandler.ArraySerializationHandler(this.cryptoHandler, this.metadataManager);
|
|
57
|
+
// Set encryption key if provided
|
|
58
|
+
if (this.options.encryptionKey) {
|
|
59
|
+
this.cryptoHandler.setEncryptionKey(this.options.encryptionKey);
|
|
60
|
+
}
|
|
61
|
+
// Enable memory tracking
|
|
62
|
+
this._memoryTracking = this.options.enableMemoryTracking;
|
|
63
|
+
// Register with advanced memory manager if tracking is enabled
|
|
64
|
+
if (this._memoryTracking) {
|
|
65
|
+
index$1.memoryManager.registerObject(this, this._id);
|
|
66
|
+
// Listen to memory events for proactive management
|
|
67
|
+
index$1.memoryManager.on(types.MemoryEventType.MEMORY_PRESSURE, (event) => {
|
|
68
|
+
if (event.data?.pressure > 0.8) {
|
|
69
|
+
this.handleMemoryPressure();
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
index$1.memoryManager.on(types.MemoryEventType.LEAK_DETECTED, (event) => {
|
|
73
|
+
if (event.data?.leaks?.includes(this._id)) {
|
|
74
|
+
console.warn(`Potential memory leak detected in SecureArray ${this._id}`);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
// Initialize secure buffer pool
|
|
79
|
+
this.initializeSecureBufferPool();
|
|
80
|
+
// Set initial data
|
|
81
|
+
if (initialData) {
|
|
82
|
+
this.pushAll(initialData);
|
|
83
|
+
}
|
|
84
|
+
this.eventManager.emit("created", -1, undefined, { id: this._id });
|
|
85
|
+
}
|
|
86
|
+
// ===== MEMORY MANAGEMENT =====
|
|
87
|
+
/**
|
|
88
|
+
* Initialize secure buffer pool for efficient memory reuse
|
|
89
|
+
*/
|
|
90
|
+
initializeSecureBufferPool() {
|
|
91
|
+
if (!this.secureBufferPool) {
|
|
92
|
+
try {
|
|
93
|
+
this.secureBufferPool =
|
|
94
|
+
index$1.memoryManager.getPool("secure-array-buffer-pool") ||
|
|
95
|
+
index$1.memoryManager.createPool({
|
|
96
|
+
name: "secure-array-buffer-pool",
|
|
97
|
+
factory: () => new Uint8Array(1024), // 1KB buffers
|
|
98
|
+
reset: (buffer) => {
|
|
99
|
+
// Secure wipe before reuse
|
|
100
|
+
this.secureWipe(buffer);
|
|
101
|
+
},
|
|
102
|
+
capacity: 50,
|
|
103
|
+
strategy: "LRU",
|
|
104
|
+
validator: (buffer) => buffer instanceof Uint8Array,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
// Pool might already exist, try to get it
|
|
109
|
+
this.secureBufferPool = index$1.memoryManager.getPool("secure-array-buffer-pool");
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Handle memory pressure by cleaning up unused resources
|
|
115
|
+
*/
|
|
116
|
+
handleMemoryPressure() {
|
|
117
|
+
// Clean up unused secure buffers
|
|
118
|
+
for (const [index, buffer] of this.secureBuffers.entries()) {
|
|
119
|
+
if (index >= this.elements.length) {
|
|
120
|
+
buffer.destroy();
|
|
121
|
+
this.secureBuffers.delete(index);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Clear old snapshots (keep only the latest 3)
|
|
125
|
+
const sortedSnapshots = Array.from(this.snapshots.entries()).sort(([, a], [, b]) => b.timestamp - a.timestamp);
|
|
126
|
+
if (sortedSnapshots.length > 3) {
|
|
127
|
+
for (let i = 3; i < sortedSnapshots.length; i++) {
|
|
128
|
+
this.snapshots.delete(sortedSnapshots[i][0]);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// Trigger garbage collection if available
|
|
132
|
+
if (global.gc) {
|
|
133
|
+
global.gc();
|
|
134
|
+
}
|
|
135
|
+
this.eventManager.emit("gc", -1, undefined, {
|
|
136
|
+
operation: "memory_pressure_cleanup",
|
|
137
|
+
buffersCleared: this.secureBuffers.size,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Secure wipe of buffer contents
|
|
142
|
+
*/
|
|
143
|
+
secureWipe(buffer) {
|
|
144
|
+
return crypto.XyPrissSecurity.secureWipe(buffer);
|
|
145
|
+
}
|
|
146
|
+
// ===== UTILITY METHODS =====
|
|
147
|
+
/**
|
|
148
|
+
* Ensures the array is not destroyed
|
|
149
|
+
*/
|
|
150
|
+
ensureNotDestroyed() {
|
|
151
|
+
if (this._isDestroyed) {
|
|
152
|
+
console.error("Array has been destroyed and cannot be used.");
|
|
153
|
+
throw new Error("Cannot use destroyed fortified Array. ");
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Ensures the array is not read-only
|
|
158
|
+
*/
|
|
159
|
+
ensureNotReadOnly() {
|
|
160
|
+
if (this._isReadOnly) {
|
|
161
|
+
throw new Error("SecureArray is read-only");
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Ensures the array is not frozen
|
|
166
|
+
*/
|
|
167
|
+
ensureNotFrozen() {
|
|
168
|
+
if (this._isFrozen) {
|
|
169
|
+
throw new Error("SecureArray is frozen");
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Check if adding elements would exceed max size
|
|
174
|
+
*/
|
|
175
|
+
checkSizeLimit(additionalElements = 1) {
|
|
176
|
+
if (this._maxSize &&
|
|
177
|
+
this.elements.length + additionalElements > this._maxSize) {
|
|
178
|
+
throw new Error(`Operation would exceed maximum size limit of ${this._maxSize}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Updates the last modified timestamp and version
|
|
183
|
+
*/
|
|
184
|
+
updateLastModified() {
|
|
185
|
+
this._lastModified = Date.now();
|
|
186
|
+
this._version++;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Validates an index
|
|
190
|
+
*/
|
|
191
|
+
validateIndex(index) {
|
|
192
|
+
if (this.options.enableIndexValidation) {
|
|
193
|
+
if (!Number.isInteger(index) || index < 0) {
|
|
194
|
+
throw new Error(`Invalid index: ${index}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Validates a value
|
|
200
|
+
*/
|
|
201
|
+
validateValue(value) {
|
|
202
|
+
if (this.options.enableTypeValidation) {
|
|
203
|
+
validation.ArrayValidationUtils.validateSecureArrayValue(value);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// ===== CORE ARRAY OPERATIONS =====
|
|
207
|
+
/**
|
|
208
|
+
* Gets the length of the array
|
|
209
|
+
*/
|
|
210
|
+
get length() {
|
|
211
|
+
this.ensureNotDestroyed();
|
|
212
|
+
return this.elements.length;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Gets the unique identifier of this array
|
|
216
|
+
*/
|
|
217
|
+
get id() {
|
|
218
|
+
return this._id;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Gets the version number (increments on each mutation)
|
|
222
|
+
*/
|
|
223
|
+
get version() {
|
|
224
|
+
return this._version;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Gets when the array was last modified
|
|
228
|
+
*/
|
|
229
|
+
get lastModified() {
|
|
230
|
+
return this._lastModified;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Gets when the array was created
|
|
234
|
+
*/
|
|
235
|
+
get createdAt() {
|
|
236
|
+
return this._createdAt;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Check if the array is empty
|
|
240
|
+
*/
|
|
241
|
+
get isEmpty() {
|
|
242
|
+
return this.elements.length === 0;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Check if the array is read-only
|
|
246
|
+
*/
|
|
247
|
+
get isReadOnly() {
|
|
248
|
+
return this._isReadOnly;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Check if the array is frozen
|
|
252
|
+
*/
|
|
253
|
+
get isFrozen() {
|
|
254
|
+
return this._isFrozen;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Check if the array is destroyed
|
|
258
|
+
*/
|
|
259
|
+
get isDestroyed() {
|
|
260
|
+
return this._isDestroyed;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Gets an element at the specified index with automatic decryption
|
|
264
|
+
*/
|
|
265
|
+
get(index) {
|
|
266
|
+
this.ensureNotDestroyed();
|
|
267
|
+
this.validateIndex(index);
|
|
268
|
+
if (index >= this.elements.length) {
|
|
269
|
+
return undefined;
|
|
270
|
+
}
|
|
271
|
+
const value = this.elements[index];
|
|
272
|
+
// Update access metadata
|
|
273
|
+
if (this.metadataManager.has(index)) {
|
|
274
|
+
const metadata = this.metadataManager.get(index);
|
|
275
|
+
this.metadataManager.update(index, metadata.type, metadata.isSecure, true);
|
|
276
|
+
}
|
|
277
|
+
// Check if value is encrypted (starts with [ENCRYPTED:)
|
|
278
|
+
if (typeof value === "string" &&
|
|
279
|
+
this.cryptoHandler.isEncrypted(value)) {
|
|
280
|
+
try {
|
|
281
|
+
// Decrypt the value automatically
|
|
282
|
+
const decryptedValue = this.cryptoHandler.decryptValue(value);
|
|
283
|
+
this.eventManager.emit("get", index, decryptedValue);
|
|
284
|
+
return decryptedValue;
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
console.error(`Failed to decrypt value at index ${index}:`, error);
|
|
288
|
+
// Return the encrypted value if decryption fails
|
|
289
|
+
this.eventManager.emit("get", index, value);
|
|
290
|
+
return value;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// Convert SecureBuffer back to original type based on metadata
|
|
294
|
+
if (value instanceof secureMemory.SecureBuffer) {
|
|
295
|
+
const metadata = this.metadataManager.get(index);
|
|
296
|
+
if (metadata?.type === "string") {
|
|
297
|
+
// Convert SecureBuffer back to string
|
|
298
|
+
const buffer = value.getBuffer();
|
|
299
|
+
const result = new TextDecoder().decode(buffer);
|
|
300
|
+
this.eventManager.emit("get", index, result);
|
|
301
|
+
return result;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
this.eventManager.emit("get", index, value);
|
|
305
|
+
return value;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Gets element at index with bounds checking
|
|
309
|
+
*/
|
|
310
|
+
at(index) {
|
|
311
|
+
this.ensureNotDestroyed();
|
|
312
|
+
// Handle negative indices
|
|
313
|
+
if (index < 0) {
|
|
314
|
+
index = this.elements.length + index;
|
|
315
|
+
}
|
|
316
|
+
return this.get(index);
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Sets an element at the specified index
|
|
320
|
+
*/
|
|
321
|
+
set(index, value) {
|
|
322
|
+
this.ensureNotDestroyed();
|
|
323
|
+
this.ensureNotReadOnly();
|
|
324
|
+
this.ensureNotFrozen();
|
|
325
|
+
this.validateIndex(index);
|
|
326
|
+
this.validateValue(value);
|
|
327
|
+
// Check size limit for new indices
|
|
328
|
+
if (index >= this.elements.length) {
|
|
329
|
+
this.checkSizeLimit(index - this.elements.length + 1);
|
|
330
|
+
}
|
|
331
|
+
// Extend array if necessary
|
|
332
|
+
while (index >= this.elements.length) {
|
|
333
|
+
this.elements.push(undefined);
|
|
334
|
+
}
|
|
335
|
+
// Clean up any existing secure buffer for this index
|
|
336
|
+
this.cleanupIndex(index);
|
|
337
|
+
// Handle secure storage for strings
|
|
338
|
+
if (typeof value === "string") {
|
|
339
|
+
const secureBuffer = secureMemory.SecureBuffer.from(value);
|
|
340
|
+
this.secureBuffers.set(index, secureBuffer);
|
|
341
|
+
this.elements[index] = secureBuffer;
|
|
342
|
+
this.metadataManager.update(index, "string", true);
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
this.elements[index] = value;
|
|
346
|
+
this.metadataManager.update(index, typeof value, false);
|
|
347
|
+
}
|
|
348
|
+
this.updateLastModified();
|
|
349
|
+
this.eventManager.emit("set", index, value);
|
|
350
|
+
return this;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Cleans up resources associated with an index
|
|
354
|
+
*/
|
|
355
|
+
cleanupIndex(index) {
|
|
356
|
+
if (this.secureBuffers.has(index)) {
|
|
357
|
+
this.secureBuffers.get(index)?.destroy();
|
|
358
|
+
this.secureBuffers.delete(index);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Adds an element to the end of the array
|
|
363
|
+
*/
|
|
364
|
+
push(value) {
|
|
365
|
+
this.ensureNotDestroyed();
|
|
366
|
+
this.ensureNotReadOnly();
|
|
367
|
+
this.ensureNotFrozen();
|
|
368
|
+
this.validateValue(value);
|
|
369
|
+
this.checkSizeLimit(1);
|
|
370
|
+
const index = this.elements.length;
|
|
371
|
+
// Handle secure storage for strings
|
|
372
|
+
if (typeof value === "string") {
|
|
373
|
+
const secureBuffer = secureMemory.SecureBuffer.from(value);
|
|
374
|
+
this.secureBuffers.set(index, secureBuffer);
|
|
375
|
+
this.elements.push(secureBuffer);
|
|
376
|
+
this.metadataManager.update(index, "string", true);
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
this.elements.push(value);
|
|
380
|
+
this.metadataManager.update(index, typeof value, false);
|
|
381
|
+
}
|
|
382
|
+
this.updateLastModified();
|
|
383
|
+
this.eventManager.emit("push", index, value);
|
|
384
|
+
return this.elements.length;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Removes and returns the last element
|
|
388
|
+
*/
|
|
389
|
+
pop() {
|
|
390
|
+
this.ensureNotDestroyed();
|
|
391
|
+
this.ensureNotReadOnly();
|
|
392
|
+
this.ensureNotFrozen();
|
|
393
|
+
if (this.elements.length === 0) {
|
|
394
|
+
return undefined;
|
|
395
|
+
}
|
|
396
|
+
const index = this.elements.length - 1;
|
|
397
|
+
const value = this.get(index);
|
|
398
|
+
// Clean up resources
|
|
399
|
+
this.cleanupIndex(index);
|
|
400
|
+
this.elements.pop();
|
|
401
|
+
this.metadataManager.delete(index);
|
|
402
|
+
this.updateLastModified();
|
|
403
|
+
this.eventManager.emit("pop", index, value);
|
|
404
|
+
return value;
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Removes and returns the first element
|
|
408
|
+
*/
|
|
409
|
+
shift() {
|
|
410
|
+
this.ensureNotDestroyed();
|
|
411
|
+
this.ensureNotReadOnly();
|
|
412
|
+
this.ensureNotFrozen();
|
|
413
|
+
if (this.elements.length === 0) {
|
|
414
|
+
return undefined;
|
|
415
|
+
}
|
|
416
|
+
const value = this.get(0);
|
|
417
|
+
// Clean up resources for index 0
|
|
418
|
+
this.cleanupIndex(0);
|
|
419
|
+
this.elements.shift();
|
|
420
|
+
// Shift all metadata indices down by 1
|
|
421
|
+
this.metadataManager.shiftIndices(0, -1);
|
|
422
|
+
// Shift all secure buffer indices down by 1
|
|
423
|
+
const newSecureBuffers = new Map();
|
|
424
|
+
for (const [index, buffer] of this.secureBuffers.entries()) {
|
|
425
|
+
if (index > 0) {
|
|
426
|
+
newSecureBuffers.set(index - 1, buffer);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
this.secureBuffers = newSecureBuffers;
|
|
430
|
+
this.updateLastModified();
|
|
431
|
+
this.eventManager.emit("shift", 0, value);
|
|
432
|
+
return value;
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Adds elements to the beginning of the array
|
|
436
|
+
*/
|
|
437
|
+
unshift(...values) {
|
|
438
|
+
this.ensureNotDestroyed();
|
|
439
|
+
this.ensureNotReadOnly();
|
|
440
|
+
this.ensureNotFrozen();
|
|
441
|
+
this.checkSizeLimit(values.length);
|
|
442
|
+
for (const value of values) {
|
|
443
|
+
this.validateValue(value);
|
|
444
|
+
}
|
|
445
|
+
// Shift existing secure buffers and metadata
|
|
446
|
+
const shiftAmount = values.length;
|
|
447
|
+
this.metadataManager.shiftIndices(0, shiftAmount);
|
|
448
|
+
const newSecureBuffers = new Map();
|
|
449
|
+
for (const [index, buffer] of this.secureBuffers.entries()) {
|
|
450
|
+
newSecureBuffers.set(index + shiftAmount, buffer);
|
|
451
|
+
}
|
|
452
|
+
this.secureBuffers = newSecureBuffers;
|
|
453
|
+
// Add new values at the beginning
|
|
454
|
+
for (let i = 0; i < values.length; i++) {
|
|
455
|
+
const value = values[i];
|
|
456
|
+
if (typeof value === "string") {
|
|
457
|
+
const secureBuffer = secureMemory.SecureBuffer.from(value);
|
|
458
|
+
this.secureBuffers.set(i, secureBuffer);
|
|
459
|
+
this.metadataManager.update(i, "string", true);
|
|
460
|
+
}
|
|
461
|
+
else {
|
|
462
|
+
this.metadataManager.update(i, typeof value, false);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
this.elements.unshift(...values);
|
|
466
|
+
this.updateLastModified();
|
|
467
|
+
this.eventManager.emit("unshift", 0, values);
|
|
468
|
+
return this.elements.length;
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* Adds multiple elements to the array
|
|
472
|
+
*/
|
|
473
|
+
pushAll(values) {
|
|
474
|
+
this.ensureNotDestroyed();
|
|
475
|
+
this.ensureNotReadOnly();
|
|
476
|
+
this.ensureNotFrozen();
|
|
477
|
+
this.checkSizeLimit(values.length);
|
|
478
|
+
for (const value of values) {
|
|
479
|
+
this.push(value);
|
|
480
|
+
}
|
|
481
|
+
return this.elements.length;
|
|
482
|
+
}
|
|
483
|
+
// ===== ENHANCED ARRAY METHODS =====
|
|
484
|
+
/**
|
|
485
|
+
* Removes elements from array and optionally inserts new elements
|
|
486
|
+
*/
|
|
487
|
+
splice(start, deleteCount, ...items) {
|
|
488
|
+
this.ensureNotDestroyed();
|
|
489
|
+
this.ensureNotReadOnly();
|
|
490
|
+
this.ensureNotFrozen();
|
|
491
|
+
if (start < 0) {
|
|
492
|
+
start = Math.max(0, this.elements.length + start);
|
|
493
|
+
}
|
|
494
|
+
deleteCount =
|
|
495
|
+
deleteCount === undefined
|
|
496
|
+
? this.elements.length - start
|
|
497
|
+
: Math.max(0, deleteCount);
|
|
498
|
+
if (items.length > 0) {
|
|
499
|
+
this.checkSizeLimit(items.length - deleteCount);
|
|
500
|
+
for (const item of items) {
|
|
501
|
+
this.validateValue(item);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
// Create a new SecureArray for removed elements
|
|
505
|
+
const removedElements = new SecureArray();
|
|
506
|
+
// Get elements to be removed
|
|
507
|
+
for (let i = start; i < start + deleteCount && i < this.elements.length; i++) {
|
|
508
|
+
const value = this.get(i);
|
|
509
|
+
if (value !== undefined) {
|
|
510
|
+
removedElements.push(value);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
// Clean up secure buffers for removed elements
|
|
514
|
+
for (let i = start; i < start + deleteCount; i++) {
|
|
515
|
+
this.cleanupIndex(i);
|
|
516
|
+
}
|
|
517
|
+
// Perform the splice operation
|
|
518
|
+
const removed = this.elements.splice(start, deleteCount, ...items);
|
|
519
|
+
// Update metadata and secure buffers
|
|
520
|
+
this.metadataManager.splice(start, deleteCount, items.length);
|
|
521
|
+
// Handle secure storage for new items
|
|
522
|
+
for (let i = 0; i < items.length; i++) {
|
|
523
|
+
const value = items[i];
|
|
524
|
+
const index = start + i;
|
|
525
|
+
if (typeof value === "string") {
|
|
526
|
+
const secureBuffer = secureMemory.SecureBuffer.from(value);
|
|
527
|
+
this.secureBuffers.set(index, secureBuffer);
|
|
528
|
+
this.metadataManager.update(index, "string", true);
|
|
529
|
+
}
|
|
530
|
+
else {
|
|
531
|
+
this.metadataManager.update(index, typeof value, false);
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
this.updateLastModified();
|
|
535
|
+
this.eventManager.emit("splice", start, { removed, added: items });
|
|
536
|
+
return removedElements;
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* Returns a shallow copy of a portion of the array
|
|
540
|
+
*/
|
|
541
|
+
slice(start, end) {
|
|
542
|
+
this.ensureNotDestroyed();
|
|
543
|
+
const slicedElements = [];
|
|
544
|
+
const actualStart = start === undefined
|
|
545
|
+
? 0
|
|
546
|
+
: start < 0
|
|
547
|
+
? Math.max(0, this.elements.length + start)
|
|
548
|
+
: start;
|
|
549
|
+
const actualEnd = end === undefined
|
|
550
|
+
? this.elements.length
|
|
551
|
+
: end < 0
|
|
552
|
+
? this.elements.length + end
|
|
553
|
+
: end;
|
|
554
|
+
for (let i = actualStart; i < actualEnd && i < this.elements.length; i++) {
|
|
555
|
+
const value = this.get(i);
|
|
556
|
+
if (value !== undefined) {
|
|
557
|
+
slicedElements.push(value);
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
const newArray = new SecureArray(slicedElements, {
|
|
561
|
+
...this.options,
|
|
562
|
+
});
|
|
563
|
+
this.eventManager.emit("slice", actualStart, {
|
|
564
|
+
start: actualStart,
|
|
565
|
+
end: actualEnd,
|
|
566
|
+
result: newArray,
|
|
567
|
+
});
|
|
568
|
+
return newArray;
|
|
569
|
+
}
|
|
570
|
+
/**
|
|
571
|
+
* Concatenates arrays and returns a new SecureArray
|
|
572
|
+
*/
|
|
573
|
+
concat(...arrays) {
|
|
574
|
+
this.ensureNotDestroyed();
|
|
575
|
+
const newElements = [];
|
|
576
|
+
// Add current array elements
|
|
577
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
578
|
+
const value = this.get(i);
|
|
579
|
+
if (value !== undefined) {
|
|
580
|
+
newElements.push(value);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
// Add elements from other arrays
|
|
584
|
+
for (const arr of arrays) {
|
|
585
|
+
if (arr instanceof SecureArray) {
|
|
586
|
+
for (let i = 0; i < arr.length; i++) {
|
|
587
|
+
const value = arr.get(i);
|
|
588
|
+
if (value !== undefined) {
|
|
589
|
+
newElements.push(value);
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
else {
|
|
594
|
+
newElements.push(...arr);
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
return new SecureArray(newElements, { ...this.options });
|
|
598
|
+
}
|
|
599
|
+
/**
|
|
600
|
+
* Joins all elements into a string
|
|
601
|
+
*/
|
|
602
|
+
join(separator = ",") {
|
|
603
|
+
this.ensureNotDestroyed();
|
|
604
|
+
const stringElements = [];
|
|
605
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
606
|
+
const value = this.get(i);
|
|
607
|
+
stringElements.push(value?.toString() ?? "");
|
|
608
|
+
}
|
|
609
|
+
return stringElements.join(separator);
|
|
610
|
+
}
|
|
611
|
+
/**
|
|
612
|
+
* Reverses the array in place
|
|
613
|
+
*/
|
|
614
|
+
reverse() {
|
|
615
|
+
this.ensureNotDestroyed();
|
|
616
|
+
this.ensureNotReadOnly();
|
|
617
|
+
this.ensureNotFrozen();
|
|
618
|
+
// Create new mappings for secure buffers
|
|
619
|
+
const newSecureBuffers = new Map();
|
|
620
|
+
const length = this.elements.length;
|
|
621
|
+
for (const [index, buffer] of this.secureBuffers.entries()) {
|
|
622
|
+
newSecureBuffers.set(length - 1 - index, buffer);
|
|
623
|
+
}
|
|
624
|
+
this.secureBuffers = newSecureBuffers;
|
|
625
|
+
this.elements.reverse();
|
|
626
|
+
this.metadataManager.reverse(length);
|
|
627
|
+
this.updateLastModified();
|
|
628
|
+
this.eventManager.emit("reverse", -1, undefined);
|
|
629
|
+
return this;
|
|
630
|
+
}
|
|
631
|
+
/**
|
|
632
|
+
* Sorts the array in place
|
|
633
|
+
*/
|
|
634
|
+
sort(compareFn) {
|
|
635
|
+
this.ensureNotDestroyed();
|
|
636
|
+
this.ensureNotReadOnly();
|
|
637
|
+
this.ensureNotFrozen();
|
|
638
|
+
// Get actual values for sorting
|
|
639
|
+
const indexValuePairs = [];
|
|
640
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
641
|
+
const value = this.get(i);
|
|
642
|
+
if (value !== undefined) {
|
|
643
|
+
indexValuePairs.push({ index: i, value });
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
// Sort the pairs
|
|
647
|
+
indexValuePairs.sort((a, b) => {
|
|
648
|
+
if (compareFn) {
|
|
649
|
+
return compareFn(a.value, b.value);
|
|
650
|
+
}
|
|
651
|
+
const aStr = String(a.value);
|
|
652
|
+
const bStr = String(b.value);
|
|
653
|
+
return aStr < bStr ? -1 : aStr > bStr ? 1 : 0;
|
|
654
|
+
});
|
|
655
|
+
// Rebuild the array in sorted order
|
|
656
|
+
const newElements = [];
|
|
657
|
+
const newSecureBuffers = new Map();
|
|
658
|
+
for (let i = 0; i < indexValuePairs.length; i++) {
|
|
659
|
+
const { index: oldIndex, value } = indexValuePairs[i];
|
|
660
|
+
newElements[i] = this.elements[oldIndex];
|
|
661
|
+
if (this.secureBuffers.has(oldIndex)) {
|
|
662
|
+
newSecureBuffers.set(i, this.secureBuffers.get(oldIndex));
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
this.elements = newElements;
|
|
666
|
+
this.secureBuffers = newSecureBuffers;
|
|
667
|
+
this.metadataManager.reorder(indexValuePairs.map((p) => p.index));
|
|
668
|
+
this.updateLastModified();
|
|
669
|
+
this.eventManager.emit("sort", -1, undefined);
|
|
670
|
+
return this;
|
|
671
|
+
}
|
|
672
|
+
// ===== FUNCTIONAL PROGRAMMING METHODS =====
|
|
673
|
+
/**
|
|
674
|
+
* Calls a function for each element
|
|
675
|
+
*/
|
|
676
|
+
forEach(callback, thisArg) {
|
|
677
|
+
this.ensureNotDestroyed();
|
|
678
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
679
|
+
const value = this.get(i);
|
|
680
|
+
if (value !== undefined) {
|
|
681
|
+
callback.call(thisArg, value, i, this);
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
/**
|
|
686
|
+
* Creates a new array with results of calling a function for every element
|
|
687
|
+
*/
|
|
688
|
+
map(callback, thisArg) {
|
|
689
|
+
this.ensureNotDestroyed();
|
|
690
|
+
const mappedElements = [];
|
|
691
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
692
|
+
const value = this.get(i);
|
|
693
|
+
if (value !== undefined) {
|
|
694
|
+
mappedElements.push(callback.call(thisArg, value, i, this));
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
return new SecureArray(mappedElements, { ...this.options });
|
|
698
|
+
}
|
|
699
|
+
/**
|
|
700
|
+
* Creates a new array with elements that pass a test
|
|
701
|
+
*/
|
|
702
|
+
filter(predicate, thisArg) {
|
|
703
|
+
this.ensureNotDestroyed();
|
|
704
|
+
const filteredElements = [];
|
|
705
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
706
|
+
const value = this.get(i);
|
|
707
|
+
if (value !== undefined &&
|
|
708
|
+
predicate.call(thisArg, value, i, this)) {
|
|
709
|
+
filteredElements.push(value);
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
return new SecureArray(filteredElements, { ...this.options });
|
|
713
|
+
}
|
|
714
|
+
/**
|
|
715
|
+
* Reduces the array to a single value
|
|
716
|
+
*/
|
|
717
|
+
reduce(callback, initialValue) {
|
|
718
|
+
this.ensureNotDestroyed();
|
|
719
|
+
let accumulator = initialValue;
|
|
720
|
+
let startIndex = 0;
|
|
721
|
+
if (accumulator === undefined) {
|
|
722
|
+
if (this.elements.length === 0) {
|
|
723
|
+
throw new TypeError("Reduce of empty array with no initial value");
|
|
724
|
+
}
|
|
725
|
+
accumulator = this.get(0);
|
|
726
|
+
startIndex = 1;
|
|
727
|
+
}
|
|
728
|
+
for (let i = startIndex; i < this.elements.length; i++) {
|
|
729
|
+
const value = this.get(i);
|
|
730
|
+
if (value !== undefined) {
|
|
731
|
+
accumulator = callback(accumulator, value, i, this);
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
return accumulator;
|
|
735
|
+
}
|
|
736
|
+
/**
|
|
737
|
+
* Tests whether at least one element passes the test
|
|
738
|
+
*/
|
|
739
|
+
some(predicate, thisArg) {
|
|
740
|
+
this.ensureNotDestroyed();
|
|
741
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
742
|
+
const value = this.get(i);
|
|
743
|
+
if (value !== undefined &&
|
|
744
|
+
predicate.call(thisArg, value, i, this)) {
|
|
745
|
+
return true;
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
return false;
|
|
749
|
+
}
|
|
750
|
+
/**
|
|
751
|
+
* Tests whether all elements pass the test
|
|
752
|
+
*/
|
|
753
|
+
every(predicate, thisArg) {
|
|
754
|
+
this.ensureNotDestroyed();
|
|
755
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
756
|
+
const value = this.get(i);
|
|
757
|
+
if (value !== undefined &&
|
|
758
|
+
!predicate.call(thisArg, value, i, this)) {
|
|
759
|
+
return false;
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
return true;
|
|
763
|
+
}
|
|
764
|
+
/**
|
|
765
|
+
* Finds the first element that satisfies the predicate
|
|
766
|
+
*/
|
|
767
|
+
find(predicate, thisArg) {
|
|
768
|
+
this.ensureNotDestroyed();
|
|
769
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
770
|
+
const value = this.get(i);
|
|
771
|
+
if (value !== undefined &&
|
|
772
|
+
predicate.call(thisArg, value, i, this)) {
|
|
773
|
+
return value;
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
return undefined;
|
|
777
|
+
}
|
|
778
|
+
/**
|
|
779
|
+
* Finds the index of the first element that satisfies the predicate
|
|
780
|
+
*/
|
|
781
|
+
findIndex(predicate, thisArg) {
|
|
782
|
+
this.ensureNotDestroyed();
|
|
783
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
784
|
+
const value = this.get(i);
|
|
785
|
+
if (value !== undefined &&
|
|
786
|
+
predicate.call(thisArg, value, i, this)) {
|
|
787
|
+
return i;
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
return -1;
|
|
791
|
+
}
|
|
792
|
+
/**
|
|
793
|
+
* Finds the last element that satisfies the predicate
|
|
794
|
+
*/
|
|
795
|
+
findLast(predicate, thisArg) {
|
|
796
|
+
this.ensureNotDestroyed();
|
|
797
|
+
for (let i = this.elements.length - 1; i >= 0; i--) {
|
|
798
|
+
const value = this.get(i);
|
|
799
|
+
if (value !== undefined &&
|
|
800
|
+
predicate.call(thisArg, value, i, this)) {
|
|
801
|
+
return value;
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
return undefined;
|
|
805
|
+
}
|
|
806
|
+
/**
|
|
807
|
+
* Finds the index of the last element that satisfies the predicate
|
|
808
|
+
*/
|
|
809
|
+
findLastIndex(predicate, thisArg) {
|
|
810
|
+
this.ensureNotDestroyed();
|
|
811
|
+
for (let i = this.elements.length - 1; i >= 0; i--) {
|
|
812
|
+
const value = this.get(i);
|
|
813
|
+
if (value !== undefined &&
|
|
814
|
+
predicate.call(thisArg, value, i, this)) {
|
|
815
|
+
return i;
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
return -1;
|
|
819
|
+
}
|
|
820
|
+
/**
|
|
821
|
+
* Returns the first index of an element
|
|
822
|
+
*/
|
|
823
|
+
indexOf(searchElement, fromIndex = 0) {
|
|
824
|
+
this.ensureNotDestroyed();
|
|
825
|
+
const startIndex = fromIndex < 0
|
|
826
|
+
? Math.max(0, this.elements.length + fromIndex)
|
|
827
|
+
: fromIndex;
|
|
828
|
+
for (let i = startIndex; i < this.elements.length; i++) {
|
|
829
|
+
const value = this.get(i);
|
|
830
|
+
if (value === searchElement) {
|
|
831
|
+
return i;
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
return -1;
|
|
835
|
+
}
|
|
836
|
+
/**
|
|
837
|
+
* Returns the last index of an element
|
|
838
|
+
*/
|
|
839
|
+
lastIndexOf(searchElement, fromIndex) {
|
|
840
|
+
this.ensureNotDestroyed();
|
|
841
|
+
const startIndex = fromIndex === undefined
|
|
842
|
+
? this.elements.length - 1
|
|
843
|
+
: fromIndex < 0
|
|
844
|
+
? this.elements.length + fromIndex
|
|
845
|
+
: fromIndex;
|
|
846
|
+
for (let i = Math.min(startIndex, this.elements.length - 1); i >= 0; i--) {
|
|
847
|
+
const value = this.get(i);
|
|
848
|
+
if (value === searchElement) {
|
|
849
|
+
return i;
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
return -1;
|
|
853
|
+
}
|
|
854
|
+
/**
|
|
855
|
+
* Checks if an element exists in the array
|
|
856
|
+
*/
|
|
857
|
+
includes(searchElement, fromIndex = 0) {
|
|
858
|
+
return this.indexOf(searchElement, fromIndex) !== -1;
|
|
859
|
+
}
|
|
860
|
+
// ===== ENHANCED SECURITY METHODS =====
|
|
861
|
+
/**
|
|
862
|
+
* Creates a snapshot of the current array state
|
|
863
|
+
*/
|
|
864
|
+
createSnapshot(name) {
|
|
865
|
+
this.ensureNotDestroyed();
|
|
866
|
+
const snapshotId = name ||
|
|
867
|
+
`snapshot_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
868
|
+
// Deep copy elements
|
|
869
|
+
const elementsCopy = [];
|
|
870
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
871
|
+
const value = this.get(i);
|
|
872
|
+
if (value !== undefined) {
|
|
873
|
+
elementsCopy.push(value);
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
// Copy metadata
|
|
877
|
+
const metadataCopy = new Map(this.metadataManager.getAllMetadata());
|
|
878
|
+
this.snapshots.set(snapshotId, {
|
|
879
|
+
elements: elementsCopy,
|
|
880
|
+
metadata: metadataCopy,
|
|
881
|
+
timestamp: Date.now(),
|
|
882
|
+
});
|
|
883
|
+
this.eventManager.emit("snapshot_created", -1, undefined, {
|
|
884
|
+
snapshotId,
|
|
885
|
+
});
|
|
886
|
+
return snapshotId;
|
|
887
|
+
}
|
|
888
|
+
/**
|
|
889
|
+
* Restores the array from a snapshot
|
|
890
|
+
*/
|
|
891
|
+
restoreFromSnapshot(snapshotId) {
|
|
892
|
+
this.ensureNotDestroyed();
|
|
893
|
+
this.ensureNotReadOnly();
|
|
894
|
+
this.ensureNotFrozen();
|
|
895
|
+
const snapshot = this.snapshots.get(snapshotId);
|
|
896
|
+
if (!snapshot) {
|
|
897
|
+
return false;
|
|
898
|
+
}
|
|
899
|
+
// Clear current state
|
|
900
|
+
this.clear();
|
|
901
|
+
// Restore from snapshot
|
|
902
|
+
for (const element of snapshot.elements) {
|
|
903
|
+
this.push(element);
|
|
904
|
+
}
|
|
905
|
+
this.eventManager.emit("snapshot_restored", -1, undefined, {
|
|
906
|
+
snapshotId,
|
|
907
|
+
});
|
|
908
|
+
return true;
|
|
909
|
+
}
|
|
910
|
+
/**
|
|
911
|
+
* Lists available snapshots
|
|
912
|
+
*/
|
|
913
|
+
listSnapshots() {
|
|
914
|
+
return Array.from(this.snapshots.entries()).map(([id, snapshot]) => ({
|
|
915
|
+
id,
|
|
916
|
+
timestamp: snapshot.timestamp,
|
|
917
|
+
}));
|
|
918
|
+
}
|
|
919
|
+
/**
|
|
920
|
+
* Deletes a snapshot
|
|
921
|
+
*/
|
|
922
|
+
deleteSnapshot(snapshotId) {
|
|
923
|
+
return this.snapshots.delete(snapshotId);
|
|
924
|
+
}
|
|
925
|
+
/**
|
|
926
|
+
* Clears all elements from the array
|
|
927
|
+
*/
|
|
928
|
+
clear() {
|
|
929
|
+
this.ensureNotDestroyed();
|
|
930
|
+
this.ensureNotReadOnly();
|
|
931
|
+
this.ensureNotFrozen();
|
|
932
|
+
// Clean up all secure buffers
|
|
933
|
+
for (const buffer of this.secureBuffers.values()) {
|
|
934
|
+
buffer.destroy();
|
|
935
|
+
}
|
|
936
|
+
this.secureBuffers.clear();
|
|
937
|
+
// Clear elements and metadata
|
|
938
|
+
this.elements.length = 0;
|
|
939
|
+
this.metadataManager.clear();
|
|
940
|
+
this.updateLastModified();
|
|
941
|
+
this.eventManager.emit("clear", -1, undefined);
|
|
942
|
+
return this;
|
|
943
|
+
}
|
|
944
|
+
/**
|
|
945
|
+
* Freezes the array to prevent modifications
|
|
946
|
+
*/
|
|
947
|
+
freeze() {
|
|
948
|
+
this.ensureNotDestroyed();
|
|
949
|
+
this._isFrozen = true;
|
|
950
|
+
this.eventManager.emit("freeze", -1, undefined);
|
|
951
|
+
return this;
|
|
952
|
+
}
|
|
953
|
+
/**
|
|
954
|
+
* Unfreezes the array to allow modifications
|
|
955
|
+
*/
|
|
956
|
+
unfreeze() {
|
|
957
|
+
this.ensureNotDestroyed();
|
|
958
|
+
this._isFrozen = false;
|
|
959
|
+
this.eventManager.emit("unfreeze", -1, undefined);
|
|
960
|
+
return this;
|
|
961
|
+
}
|
|
962
|
+
/**
|
|
963
|
+
* Makes the array read-only
|
|
964
|
+
*/
|
|
965
|
+
makeReadOnly() {
|
|
966
|
+
this.ensureNotDestroyed();
|
|
967
|
+
this._isReadOnly = true;
|
|
968
|
+
this.eventManager.emit("readonly", -1, undefined);
|
|
969
|
+
return this;
|
|
970
|
+
}
|
|
971
|
+
/**
|
|
972
|
+
* Removes read-only restriction
|
|
973
|
+
*/
|
|
974
|
+
makeWritable() {
|
|
975
|
+
this.ensureNotDestroyed();
|
|
976
|
+
this._isReadOnly = false;
|
|
977
|
+
this.eventManager.emit("writable", -1, undefined);
|
|
978
|
+
return this;
|
|
979
|
+
}
|
|
980
|
+
/**
|
|
981
|
+
* Securely wipes all data and destroys the array
|
|
982
|
+
* @example
|
|
983
|
+
* //===================== correct ===========
|
|
984
|
+
const x = fArray([] as number[]);
|
|
985
|
+
x.push(12);
|
|
986
|
+
|
|
987
|
+
console.log(x._array);
|
|
988
|
+
x.destroy();
|
|
989
|
+
|
|
990
|
+
//================ incorrect ===============
|
|
991
|
+
const x = fArray([] as number[]);
|
|
992
|
+
x.destroy(); // will destroy the array
|
|
993
|
+
x.push(12); // x.push will throw an error
|
|
994
|
+
|
|
995
|
+
console.log(x._array); // will throw an error
|
|
996
|
+
*/
|
|
997
|
+
destroy() {
|
|
998
|
+
if (this._isDestroyed) {
|
|
999
|
+
return;
|
|
1000
|
+
}
|
|
1001
|
+
// Clean up all secure buffers
|
|
1002
|
+
for (const buffer of this.secureBuffers.values()) {
|
|
1003
|
+
buffer.destroy();
|
|
1004
|
+
}
|
|
1005
|
+
this.secureBuffers.clear();
|
|
1006
|
+
// Clear snapshots
|
|
1007
|
+
this.snapshots.clear();
|
|
1008
|
+
// Secure wipe of elements array
|
|
1009
|
+
if (this.elements.length > 0) {
|
|
1010
|
+
this.elements.fill(null);
|
|
1011
|
+
this.elements.length = 0;
|
|
1012
|
+
}
|
|
1013
|
+
// Clear metadata
|
|
1014
|
+
this.metadataManager.clear();
|
|
1015
|
+
// Unregister from memory manager
|
|
1016
|
+
if (this._memoryTracking) {
|
|
1017
|
+
index$1.memoryManager.unregisterObject(this._id);
|
|
1018
|
+
}
|
|
1019
|
+
this._isDestroyed = true;
|
|
1020
|
+
this.eventManager.emit("destroyed", -1, undefined);
|
|
1021
|
+
// Clear event listeners
|
|
1022
|
+
this.eventManager.removeAllListeners();
|
|
1023
|
+
}
|
|
1024
|
+
// ===== UTILITY AND STATISTICS METHODS =====
|
|
1025
|
+
/**
|
|
1026
|
+
* Gets comprehensive statistics about the array
|
|
1027
|
+
*/
|
|
1028
|
+
getStats() {
|
|
1029
|
+
this.ensureNotDestroyed();
|
|
1030
|
+
const typeCount = new Map();
|
|
1031
|
+
let secureElementCount = 0;
|
|
1032
|
+
let totalMemoryUsage = 0;
|
|
1033
|
+
let totalAccesses = 0;
|
|
1034
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
1035
|
+
const metadata = this.metadataManager.get(i);
|
|
1036
|
+
if (metadata) {
|
|
1037
|
+
const type = metadata.type;
|
|
1038
|
+
typeCount.set(type, (typeCount.get(type) || 0) + 1);
|
|
1039
|
+
if (metadata.isSecure) {
|
|
1040
|
+
secureElementCount++;
|
|
1041
|
+
}
|
|
1042
|
+
totalAccesses += metadata.accessCount;
|
|
1043
|
+
}
|
|
1044
|
+
// Estimate memory usage
|
|
1045
|
+
const value = this.get(i);
|
|
1046
|
+
if (value !== undefined) {
|
|
1047
|
+
if (typeof value === "string") {
|
|
1048
|
+
totalMemoryUsage += value.length * 2; // UTF-16
|
|
1049
|
+
}
|
|
1050
|
+
else if (typeof value === "number") {
|
|
1051
|
+
totalMemoryUsage += 8; // 64-bit number
|
|
1052
|
+
}
|
|
1053
|
+
else if (typeof value === "boolean") {
|
|
1054
|
+
totalMemoryUsage += 1;
|
|
1055
|
+
}
|
|
1056
|
+
else {
|
|
1057
|
+
totalMemoryUsage += 64; // Estimate for objects
|
|
1058
|
+
}
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
return {
|
|
1062
|
+
length: this.elements.length,
|
|
1063
|
+
secureElements: secureElementCount,
|
|
1064
|
+
totalAccesses,
|
|
1065
|
+
memoryUsage: totalMemoryUsage,
|
|
1066
|
+
lastModified: this._lastModified,
|
|
1067
|
+
version: this._version,
|
|
1068
|
+
createdAt: this._createdAt,
|
|
1069
|
+
isReadOnly: this._isReadOnly,
|
|
1070
|
+
isFrozen: this._isFrozen,
|
|
1071
|
+
typeDistribution: Object.fromEntries(typeCount),
|
|
1072
|
+
secureElementCount,
|
|
1073
|
+
estimatedMemoryUsage: totalMemoryUsage,
|
|
1074
|
+
snapshotCount: this.snapshots.size,
|
|
1075
|
+
encryptionEnabled: this.cryptoHandler.getEncryptionStatus().hasEncryptionKey,
|
|
1076
|
+
};
|
|
1077
|
+
}
|
|
1078
|
+
/**
|
|
1079
|
+
* Validates the integrity of the array
|
|
1080
|
+
*/
|
|
1081
|
+
validateIntegrity() {
|
|
1082
|
+
this.ensureNotDestroyed();
|
|
1083
|
+
const errors = [];
|
|
1084
|
+
// Check if elements length matches metadata count
|
|
1085
|
+
const metadataCount = this.metadataManager.size();
|
|
1086
|
+
if (this.elements.length !== metadataCount) {
|
|
1087
|
+
errors.push(`Element count (${this.elements.length}) doesn't match metadata count (${metadataCount})`);
|
|
1088
|
+
}
|
|
1089
|
+
// Check secure buffer consistency
|
|
1090
|
+
for (const [index, buffer] of this.secureBuffers.entries()) {
|
|
1091
|
+
if (index >= this.elements.length) {
|
|
1092
|
+
errors.push(`Secure buffer exists for invalid index: ${index}`);
|
|
1093
|
+
}
|
|
1094
|
+
const metadata = this.metadataManager.get(index);
|
|
1095
|
+
if (!metadata || !metadata.isSecure) {
|
|
1096
|
+
errors.push(`Secure buffer exists but metadata indicates non-secure element at index: ${index}`);
|
|
1097
|
+
}
|
|
1098
|
+
try {
|
|
1099
|
+
buffer.getBuffer(); // Test if buffer is still valid
|
|
1100
|
+
}
|
|
1101
|
+
catch (error) {
|
|
1102
|
+
errors.push(`Invalid secure buffer at index ${index}: ${error}`);
|
|
1103
|
+
}
|
|
1104
|
+
}
|
|
1105
|
+
// Check for memory leaks in metadata
|
|
1106
|
+
for (let i = 0; i < this.metadataManager.size(); i++) {
|
|
1107
|
+
if (!this.metadataManager.has(i) && i < this.elements.length) {
|
|
1108
|
+
errors.push(`Missing metadata for element at index: ${i}`);
|
|
1109
|
+
}
|
|
1110
|
+
}
|
|
1111
|
+
return {
|
|
1112
|
+
isValid: errors.length === 0,
|
|
1113
|
+
errors,
|
|
1114
|
+
};
|
|
1115
|
+
}
|
|
1116
|
+
/**
|
|
1117
|
+
* Compacts the array by removing undefined/null elements
|
|
1118
|
+
*/
|
|
1119
|
+
compact() {
|
|
1120
|
+
this.ensureNotDestroyed();
|
|
1121
|
+
this.ensureNotReadOnly();
|
|
1122
|
+
this.ensureNotFrozen();
|
|
1123
|
+
const compactedElements = [];
|
|
1124
|
+
const newSecureBuffers = new Map();
|
|
1125
|
+
let newIndex = 0;
|
|
1126
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
1127
|
+
const value = this.get(i);
|
|
1128
|
+
if (value !== null && value !== undefined) {
|
|
1129
|
+
compactedElements.push(this.elements[i]);
|
|
1130
|
+
if (this.secureBuffers.has(i)) {
|
|
1131
|
+
newSecureBuffers.set(newIndex, this.secureBuffers.get(i));
|
|
1132
|
+
}
|
|
1133
|
+
const metadata = this.metadataManager.get(i);
|
|
1134
|
+
if (metadata) {
|
|
1135
|
+
this.metadataManager.update(newIndex, metadata.type, metadata.isSecure);
|
|
1136
|
+
}
|
|
1137
|
+
newIndex++;
|
|
1138
|
+
}
|
|
1139
|
+
else {
|
|
1140
|
+
// Clean up secure buffer for removed element
|
|
1141
|
+
this.cleanupIndex(i);
|
|
1142
|
+
}
|
|
1143
|
+
}
|
|
1144
|
+
// Clean up old metadata
|
|
1145
|
+
this.metadataManager.clear();
|
|
1146
|
+
this.elements = compactedElements;
|
|
1147
|
+
this.secureBuffers = newSecureBuffers;
|
|
1148
|
+
this.updateLastModified();
|
|
1149
|
+
this.eventManager.emit("compact", -1, undefined, {
|
|
1150
|
+
originalLength: this.elements.length +
|
|
1151
|
+
(this.elements.length - compactedElements.length),
|
|
1152
|
+
newLength: compactedElements.length,
|
|
1153
|
+
});
|
|
1154
|
+
return this;
|
|
1155
|
+
}
|
|
1156
|
+
/**
|
|
1157
|
+
* Removes duplicate elements
|
|
1158
|
+
*/
|
|
1159
|
+
unique() {
|
|
1160
|
+
this.ensureNotDestroyed();
|
|
1161
|
+
this.ensureNotReadOnly();
|
|
1162
|
+
this.ensureNotFrozen();
|
|
1163
|
+
const seen = new Set();
|
|
1164
|
+
const uniqueElements = [];
|
|
1165
|
+
const newSecureBuffers = new Map();
|
|
1166
|
+
let newIndex = 0;
|
|
1167
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
1168
|
+
const value = this.get(i);
|
|
1169
|
+
if (value !== undefined && !seen.has(value)) {
|
|
1170
|
+
seen.add(value);
|
|
1171
|
+
uniqueElements.push(this.elements[i]);
|
|
1172
|
+
if (this.secureBuffers.has(i)) {
|
|
1173
|
+
newSecureBuffers.set(newIndex, this.secureBuffers.get(i));
|
|
1174
|
+
}
|
|
1175
|
+
const metadata = this.metadataManager.get(i);
|
|
1176
|
+
if (metadata) {
|
|
1177
|
+
this.metadataManager.update(newIndex, metadata.type, metadata.isSecure);
|
|
1178
|
+
}
|
|
1179
|
+
newIndex++;
|
|
1180
|
+
}
|
|
1181
|
+
else if (value !== undefined) {
|
|
1182
|
+
// Clean up duplicate's secure buffer
|
|
1183
|
+
this.cleanupIndex(i);
|
|
1184
|
+
}
|
|
1185
|
+
}
|
|
1186
|
+
// Clean up old metadata
|
|
1187
|
+
this.metadataManager.clear();
|
|
1188
|
+
this.elements = uniqueElements;
|
|
1189
|
+
this.secureBuffers = newSecureBuffers;
|
|
1190
|
+
this.updateLastModified();
|
|
1191
|
+
this.eventManager.emit("unique", -1, undefined, {
|
|
1192
|
+
originalLength: this.elements.length +
|
|
1193
|
+
(this.elements.length - uniqueElements.length),
|
|
1194
|
+
newLength: uniqueElements.length,
|
|
1195
|
+
});
|
|
1196
|
+
return this;
|
|
1197
|
+
}
|
|
1198
|
+
/**
|
|
1199
|
+
* Groups elements by a key function
|
|
1200
|
+
*/
|
|
1201
|
+
groupBy(keyFn) {
|
|
1202
|
+
this.ensureNotDestroyed();
|
|
1203
|
+
const groups = new Map();
|
|
1204
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
1205
|
+
const value = this.get(i);
|
|
1206
|
+
if (value !== undefined) {
|
|
1207
|
+
const key = keyFn(value, i);
|
|
1208
|
+
if (!groups.has(key)) {
|
|
1209
|
+
groups.set(key, new SecureArray([], { ...this.options }));
|
|
1210
|
+
}
|
|
1211
|
+
groups.get(key).push(value);
|
|
1212
|
+
}
|
|
1213
|
+
}
|
|
1214
|
+
return groups;
|
|
1215
|
+
}
|
|
1216
|
+
/**
|
|
1217
|
+
* Returns the minimum value
|
|
1218
|
+
*/
|
|
1219
|
+
min(compareFn) {
|
|
1220
|
+
this.ensureNotDestroyed();
|
|
1221
|
+
if (this.elements.length === 0) {
|
|
1222
|
+
return undefined;
|
|
1223
|
+
}
|
|
1224
|
+
let min = this.get(0);
|
|
1225
|
+
if (min === undefined) {
|
|
1226
|
+
return undefined;
|
|
1227
|
+
}
|
|
1228
|
+
for (let i = 1; i < this.elements.length; i++) {
|
|
1229
|
+
const value = this.get(i);
|
|
1230
|
+
if (value !== undefined) {
|
|
1231
|
+
if (compareFn) {
|
|
1232
|
+
if (compareFn(value, min) < 0) {
|
|
1233
|
+
min = value;
|
|
1234
|
+
}
|
|
1235
|
+
}
|
|
1236
|
+
else {
|
|
1237
|
+
if (value < min) {
|
|
1238
|
+
min = value;
|
|
1239
|
+
}
|
|
1240
|
+
}
|
|
1241
|
+
}
|
|
1242
|
+
}
|
|
1243
|
+
return min;
|
|
1244
|
+
}
|
|
1245
|
+
/**
|
|
1246
|
+
* Returns the maximum value
|
|
1247
|
+
*/
|
|
1248
|
+
max(compareFn) {
|
|
1249
|
+
this.ensureNotDestroyed();
|
|
1250
|
+
if (this.elements.length === 0) {
|
|
1251
|
+
return undefined;
|
|
1252
|
+
}
|
|
1253
|
+
let max = this.get(0);
|
|
1254
|
+
if (max === undefined) {
|
|
1255
|
+
return undefined;
|
|
1256
|
+
}
|
|
1257
|
+
for (let i = 1; i < this.elements.length; i++) {
|
|
1258
|
+
const value = this.get(i);
|
|
1259
|
+
if (value !== undefined) {
|
|
1260
|
+
if (compareFn) {
|
|
1261
|
+
if (compareFn(value, max) > 0) {
|
|
1262
|
+
max = value;
|
|
1263
|
+
}
|
|
1264
|
+
}
|
|
1265
|
+
else {
|
|
1266
|
+
if (value > max) {
|
|
1267
|
+
max = value;
|
|
1268
|
+
}
|
|
1269
|
+
}
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1272
|
+
return max;
|
|
1273
|
+
}
|
|
1274
|
+
/**
|
|
1275
|
+
* Shuffles the array in place using Fisher-Yates algorithm
|
|
1276
|
+
*/
|
|
1277
|
+
shuffle() {
|
|
1278
|
+
this.ensureNotDestroyed();
|
|
1279
|
+
this.ensureNotReadOnly();
|
|
1280
|
+
this.ensureNotFrozen();
|
|
1281
|
+
for (let i = this.elements.length - 1; i > 0; i--) {
|
|
1282
|
+
const j = Math.floor(Math.random() * (i + 1));
|
|
1283
|
+
// Swap elements
|
|
1284
|
+
[this.elements[i], this.elements[j]] = [
|
|
1285
|
+
this.elements[j],
|
|
1286
|
+
this.elements[i],
|
|
1287
|
+
];
|
|
1288
|
+
// Swap secure buffers if they exist
|
|
1289
|
+
const bufferI = this.secureBuffers.get(i);
|
|
1290
|
+
const bufferJ = this.secureBuffers.get(j);
|
|
1291
|
+
if (bufferI) {
|
|
1292
|
+
this.secureBuffers.set(j, bufferI);
|
|
1293
|
+
}
|
|
1294
|
+
else {
|
|
1295
|
+
this.secureBuffers.delete(j);
|
|
1296
|
+
}
|
|
1297
|
+
if (bufferJ) {
|
|
1298
|
+
this.secureBuffers.set(i, bufferJ);
|
|
1299
|
+
}
|
|
1300
|
+
else {
|
|
1301
|
+
this.secureBuffers.delete(i);
|
|
1302
|
+
}
|
|
1303
|
+
// Swap metadata
|
|
1304
|
+
const metaI = this.metadataManager.get(i);
|
|
1305
|
+
const metaJ = this.metadataManager.get(j);
|
|
1306
|
+
if (metaI && metaJ) {
|
|
1307
|
+
this.metadataManager.update(i, metaJ.type, metaJ.isSecure);
|
|
1308
|
+
this.metadataManager.update(j, metaI.type, metaI.isSecure);
|
|
1309
|
+
}
|
|
1310
|
+
}
|
|
1311
|
+
this.updateLastModified();
|
|
1312
|
+
this.eventManager.emit("shuffle", -1, undefined);
|
|
1313
|
+
return this;
|
|
1314
|
+
}
|
|
1315
|
+
/**
|
|
1316
|
+
* Returns a random sample of elements
|
|
1317
|
+
*/
|
|
1318
|
+
sample(count = 1) {
|
|
1319
|
+
this.ensureNotDestroyed();
|
|
1320
|
+
if (count <= 0 || this.elements.length === 0) {
|
|
1321
|
+
return new SecureArray([], { ...this.options });
|
|
1322
|
+
}
|
|
1323
|
+
const sampleCount = Math.min(count, this.elements.length);
|
|
1324
|
+
const indices = new Set();
|
|
1325
|
+
const sampledElements = [];
|
|
1326
|
+
while (indices.size < sampleCount) {
|
|
1327
|
+
const randomIndex = Math.floor(Math.random() * this.elements.length);
|
|
1328
|
+
if (!indices.has(randomIndex)) {
|
|
1329
|
+
indices.add(randomIndex);
|
|
1330
|
+
const value = this.get(randomIndex);
|
|
1331
|
+
if (value !== undefined) {
|
|
1332
|
+
sampledElements.push(value);
|
|
1333
|
+
}
|
|
1334
|
+
}
|
|
1335
|
+
}
|
|
1336
|
+
return new SecureArray(sampledElements, { ...this.options });
|
|
1337
|
+
}
|
|
1338
|
+
// ===== ITERATOR IMPLEMENTATION =====
|
|
1339
|
+
/**
|
|
1340
|
+
* Returns an iterator for the array
|
|
1341
|
+
*/
|
|
1342
|
+
*[Symbol.iterator]() {
|
|
1343
|
+
this.ensureNotDestroyed();
|
|
1344
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
1345
|
+
const value = this.get(i);
|
|
1346
|
+
if (value !== undefined) {
|
|
1347
|
+
yield value;
|
|
1348
|
+
}
|
|
1349
|
+
}
|
|
1350
|
+
}
|
|
1351
|
+
/**
|
|
1352
|
+
* Returns an iterator for array entries [index, value]
|
|
1353
|
+
*/
|
|
1354
|
+
*entries() {
|
|
1355
|
+
this.ensureNotDestroyed();
|
|
1356
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
1357
|
+
const value = this.get(i);
|
|
1358
|
+
if (value !== undefined) {
|
|
1359
|
+
yield [i, value];
|
|
1360
|
+
}
|
|
1361
|
+
}
|
|
1362
|
+
}
|
|
1363
|
+
/**
|
|
1364
|
+
* Returns an iterator for array indices
|
|
1365
|
+
*/
|
|
1366
|
+
*keys() {
|
|
1367
|
+
this.ensureNotDestroyed();
|
|
1368
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
1369
|
+
yield i;
|
|
1370
|
+
}
|
|
1371
|
+
}
|
|
1372
|
+
/**
|
|
1373
|
+
* Returns an iterator for array values
|
|
1374
|
+
*/
|
|
1375
|
+
*values() {
|
|
1376
|
+
return this[Symbol.iterator]();
|
|
1377
|
+
}
|
|
1378
|
+
// ===== EVENT MANAGEMENT =====
|
|
1379
|
+
/**
|
|
1380
|
+
* Adds an event listener
|
|
1381
|
+
*/
|
|
1382
|
+
on(event, listener) {
|
|
1383
|
+
this.eventManager.on(event, listener);
|
|
1384
|
+
return this;
|
|
1385
|
+
}
|
|
1386
|
+
/**
|
|
1387
|
+
* Removes an event listener
|
|
1388
|
+
*/
|
|
1389
|
+
off(event, listener) {
|
|
1390
|
+
this.eventManager.off(event, listener);
|
|
1391
|
+
return this;
|
|
1392
|
+
}
|
|
1393
|
+
/**
|
|
1394
|
+
* Adds a one-time event listener
|
|
1395
|
+
*/
|
|
1396
|
+
once(event, listener) {
|
|
1397
|
+
this.eventManager.once(event, listener);
|
|
1398
|
+
return this;
|
|
1399
|
+
}
|
|
1400
|
+
// ===== SERIALIZATION AND EXPORT =====
|
|
1401
|
+
/**
|
|
1402
|
+
* Serializes the SecureArray to a secure format
|
|
1403
|
+
*/
|
|
1404
|
+
serialize(options) {
|
|
1405
|
+
this.ensureNotDestroyed();
|
|
1406
|
+
return this.serializationHandler.serialize(this.elements, options);
|
|
1407
|
+
}
|
|
1408
|
+
/**
|
|
1409
|
+
* Exports the SecureArray data in various formats
|
|
1410
|
+
*/
|
|
1411
|
+
exportData(format = "json") {
|
|
1412
|
+
this.ensureNotDestroyed();
|
|
1413
|
+
// Get the actual values (not SecureBuffers)
|
|
1414
|
+
const actualElements = [];
|
|
1415
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
1416
|
+
const value = this.get(i);
|
|
1417
|
+
if (value !== undefined) {
|
|
1418
|
+
actualElements.push(value);
|
|
1419
|
+
}
|
|
1420
|
+
}
|
|
1421
|
+
return this.serializationHandler.exportData(actualElements, format);
|
|
1422
|
+
}
|
|
1423
|
+
/**
|
|
1424
|
+
* Converts to a regular JavaScript array (loses security features)
|
|
1425
|
+
*/
|
|
1426
|
+
toArray() {
|
|
1427
|
+
this.ensureNotDestroyed();
|
|
1428
|
+
const regularArray = [];
|
|
1429
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
1430
|
+
const value = this.get(i);
|
|
1431
|
+
if (value !== undefined) {
|
|
1432
|
+
regularArray.push(value);
|
|
1433
|
+
}
|
|
1434
|
+
}
|
|
1435
|
+
return regularArray;
|
|
1436
|
+
}
|
|
1437
|
+
/**
|
|
1438
|
+
* Converts to a regular JavaScript array (same as toArray method)
|
|
1439
|
+
*/
|
|
1440
|
+
get _array() {
|
|
1441
|
+
return this.toArray();
|
|
1442
|
+
}
|
|
1443
|
+
/**
|
|
1444
|
+
* Creates a SecureArray from a regular array
|
|
1445
|
+
*/
|
|
1446
|
+
static from(arrayLike, options) {
|
|
1447
|
+
const elements = Array.from(arrayLike);
|
|
1448
|
+
return new SecureArray(elements, options);
|
|
1449
|
+
}
|
|
1450
|
+
/**
|
|
1451
|
+
* Creates a SecureArray with specified length and fill value
|
|
1452
|
+
*/
|
|
1453
|
+
static of(...elements) {
|
|
1454
|
+
return new SecureArray(elements);
|
|
1455
|
+
}
|
|
1456
|
+
// ===== ENCRYPTION METHODS =====
|
|
1457
|
+
/**
|
|
1458
|
+
* Gets encryption status from the crypto handler
|
|
1459
|
+
*/
|
|
1460
|
+
getEncryptionStatus() {
|
|
1461
|
+
return this.cryptoHandler.getEncryptionStatus();
|
|
1462
|
+
}
|
|
1463
|
+
/**
|
|
1464
|
+
* Sets an encryption key for the array
|
|
1465
|
+
*/
|
|
1466
|
+
setEncryptionKey(key) {
|
|
1467
|
+
this.ensureNotDestroyed();
|
|
1468
|
+
this.cryptoHandler.setEncryptionKey(key);
|
|
1469
|
+
}
|
|
1470
|
+
/**
|
|
1471
|
+
* Gets the raw encrypted data without decryption (for verification)
|
|
1472
|
+
*/
|
|
1473
|
+
getRawEncryptedData() {
|
|
1474
|
+
this.ensureNotDestroyed();
|
|
1475
|
+
return [...this.elements];
|
|
1476
|
+
}
|
|
1477
|
+
/**
|
|
1478
|
+
* Gets a specific element's raw encrypted form (for verification)
|
|
1479
|
+
*/
|
|
1480
|
+
getRawEncryptedElement(index) {
|
|
1481
|
+
this.ensureNotDestroyed();
|
|
1482
|
+
this.validateIndex(index);
|
|
1483
|
+
if (index >= this.elements.length) {
|
|
1484
|
+
return undefined;
|
|
1485
|
+
}
|
|
1486
|
+
return this.elements[index];
|
|
1487
|
+
}
|
|
1488
|
+
/**
|
|
1489
|
+
* Encrypts all elements in the array using AES-256-CTR-HMAC encryption
|
|
1490
|
+
* with proper memory management and atomic operations
|
|
1491
|
+
*/
|
|
1492
|
+
encryptAll() {
|
|
1493
|
+
this.ensureNotDestroyed();
|
|
1494
|
+
this.ensureNotReadOnly();
|
|
1495
|
+
this.ensureNotFrozen();
|
|
1496
|
+
// Check if encryption key is set
|
|
1497
|
+
const encryptionStatus = this.cryptoHandler.getEncryptionStatus();
|
|
1498
|
+
if (!encryptionStatus.hasEncryptionKey) {
|
|
1499
|
+
throw new Error("Encryption key must be set before calling encryptAll()");
|
|
1500
|
+
}
|
|
1501
|
+
// Prepare temporary storage for atomic operation
|
|
1502
|
+
const encryptedValues = [];
|
|
1503
|
+
const originalMetadata = new Map();
|
|
1504
|
+
const indicesToProcess = [];
|
|
1505
|
+
try {
|
|
1506
|
+
// First pass: encrypt all values into temporary storage
|
|
1507
|
+
for (let i = 0; i < this.elements.length; i++) {
|
|
1508
|
+
const value = this.elements[i]; // Get raw value, not through get() method
|
|
1509
|
+
if (value !== undefined) {
|
|
1510
|
+
// Skip already encrypted values to avoid double encryption
|
|
1511
|
+
if (typeof value === "string" &&
|
|
1512
|
+
this.cryptoHandler.isEncrypted(value)) {
|
|
1513
|
+
continue;
|
|
1514
|
+
}
|
|
1515
|
+
// Store original metadata for rollback
|
|
1516
|
+
if (this.metadataManager.has(i)) {
|
|
1517
|
+
originalMetadata.set(i, this.metadataManager.get(i));
|
|
1518
|
+
}
|
|
1519
|
+
// Get the actual value to encrypt
|
|
1520
|
+
let valueToEncrypt = value;
|
|
1521
|
+
// If it's a SecureBuffer, convert it back to its original form
|
|
1522
|
+
if (value instanceof secureMemory.SecureBuffer) {
|
|
1523
|
+
const metadata = this.metadataManager.get(i);
|
|
1524
|
+
if (metadata?.type === "string") {
|
|
1525
|
+
valueToEncrypt = new TextDecoder().decode(value.getBuffer());
|
|
1526
|
+
}
|
|
1527
|
+
else if (metadata?.type === "Uint8Array") {
|
|
1528
|
+
valueToEncrypt = new Uint8Array(value.getBuffer());
|
|
1529
|
+
}
|
|
1530
|
+
else {
|
|
1531
|
+
valueToEncrypt = new TextDecoder().decode(value.getBuffer());
|
|
1532
|
+
}
|
|
1533
|
+
}
|
|
1534
|
+
// Encrypt the value
|
|
1535
|
+
const encryptedValue = this.cryptoHandler.encryptValue(valueToEncrypt);
|
|
1536
|
+
encryptedValues[i] = encryptedValue;
|
|
1537
|
+
indicesToProcess.push(i);
|
|
1538
|
+
}
|
|
1539
|
+
}
|
|
1540
|
+
// Second pass: atomically commit all changes
|
|
1541
|
+
for (const i of indicesToProcess) {
|
|
1542
|
+
const encryptedValue = encryptedValues[i];
|
|
1543
|
+
const originalValue = this.elements[i];
|
|
1544
|
+
// Clean up any existing SecureBuffer for this index
|
|
1545
|
+
this.cleanupIndex(i);
|
|
1546
|
+
// Store encrypted value
|
|
1547
|
+
this.elements[i] = encryptedValue;
|
|
1548
|
+
// Update metadata with correct type information
|
|
1549
|
+
// Store original type in the type field using special format
|
|
1550
|
+
const originalType = typeof originalValue;
|
|
1551
|
+
this.metadataManager.update(i, `encrypted:${originalType}`, true);
|
|
1552
|
+
}
|
|
1553
|
+
}
|
|
1554
|
+
catch (error) {
|
|
1555
|
+
// Rollback: restore original state on any failure
|
|
1556
|
+
for (const i of indicesToProcess) {
|
|
1557
|
+
if (originalMetadata.has(i)) {
|
|
1558
|
+
// Restore original metadata
|
|
1559
|
+
const original = originalMetadata.get(i);
|
|
1560
|
+
this.metadataManager.update(i, original.type, original.isSecure);
|
|
1561
|
+
}
|
|
1562
|
+
}
|
|
1563
|
+
throw new Error(`Encryption failed: ${error?.message || "Unknown error"}`);
|
|
1564
|
+
}
|
|
1565
|
+
this.updateLastModified();
|
|
1566
|
+
this.eventManager.emit("encrypt_all", -1, `${indicesToProcess.length}_elements_encrypted`);
|
|
1567
|
+
return this;
|
|
1568
|
+
}
|
|
1569
|
+
}
|
|
1570
|
+
|
|
1571
|
+
exports.SecureArray = SecureArray;
|
|
1572
|
+
//# sourceMappingURL=secure-array-core.js.map
|