mcard-js 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +117 -0
- package/dist/__mocks__/better-sqlite3.js +20 -0
- package/dist/__mocks__/better-sqlite3.js.map +1 -0
- package/dist/config/config_constants.js +188 -0
- package/dist/config/config_constants.js.map +1 -0
- package/dist/config/env_parameters.js +62 -0
- package/dist/config/env_parameters.js.map +1 -0
- package/dist/content/model/content_type_detector.js +89 -0
- package/dist/content/model/content_type_detector.js.map +1 -0
- package/dist/core/card-collection.js +279 -0
- package/dist/core/card-collection.js.map +1 -0
- package/dist/core/event-producer.js +132 -0
- package/dist/core/event-producer.js.map +1 -0
- package/dist/core/g_time.js +201 -0
- package/dist/core/g_time.js.map +1 -0
- package/dist/core/hash/enums.js +19 -0
- package/dist/core/hash/enums.js.map +1 -0
- package/dist/core/hash/validator.js +260 -0
- package/dist/core/hash/validator.js.map +1 -0
- package/dist/core/mcard.js +205 -0
- package/dist/core/mcard.js.map +1 -0
- package/dist/engine/sqlite_engine.js +723 -0
- package/dist/engine/sqlite_engine.js.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/mcardPersistenceMiddleware.js +45 -0
- package/dist/middleware/mcardPersistenceMiddleware.js.map +1 -0
- package/dist/models/database_schemas.js +31 -0
- package/dist/models/database_schemas.js.map +1 -0
- package/dist/services/logger.js +80 -0
- package/dist/services/logger.js.map +1 -0
- package/dist/services/mcardStorageService.js +36 -0
- package/dist/services/mcardStorageService.js.map +1 -0
- package/dist/utils/actionHelpers.js +25 -0
- package/dist/utils/actionHelpers.js.map +1 -0
- package/dist/utils/bufferContentHelper.js +393 -0
- package/dist/utils/bufferContentHelper.js.map +1 -0
- package/dist/utils/bufferPolyfill.js +198 -0
- package/dist/utils/bufferPolyfill.js.map +1 -0
- package/dist/utils/content-detection.js +74 -0
- package/dist/utils/content-detection.js.map +1 -0
- package/dist/utils/content-utils.js +269 -0
- package/dist/utils/content-utils.js.map +1 -0
- package/dist/utils/content_type_detector copy.js +480 -0
- package/dist/utils/content_type_detector copy.js.map +1 -0
- package/dist/utils/content_type_detector.js +480 -0
- package/dist/utils/content_type_detector.js.map +1 -0
- package/dist/utils/cryptoPolyfill.js +166 -0
- package/dist/utils/cryptoPolyfill.js.map +1 -0
- package/dist/utils/dotenv-browser.js +35 -0
- package/dist/utils/dotenv-browser.js.map +1 -0
- package/dist/utils/environmentDetector.js +93 -0
- package/dist/utils/environmentDetector.js.map +1 -0
- package/dist/utils/logWriter.js +27 -0
- package/dist/utils/logWriter.js.map +1 -0
- package/dist/utils/serviceWorkerManager.js +118 -0
- package/dist/utils/serviceWorkerManager.js.map +1 -0
- package/dist/utils/test-content-detection.js +79 -0
- package/dist/utils/test-content-detection.js.map +1 -0
- package/dist/utils/test-detection-fix.js +121 -0
- package/dist/utils/test-detection-fix.js.map +1 -0
- package/dist/utils/test-format-conversion.js +170 -0
- package/dist/utils/test-format-conversion.js.map +1 -0
- package/dist/utils/test-mov-viewer.js +57 -0
- package/dist/utils/test-mov-viewer.js.map +1 -0
- package/dist/utils/testDetection.js +21 -0
- package/dist/utils/testDetection.js.map +1 -0
- package/dist/utils/textEncoderPolyfill.js +87 -0
- package/dist/utils/textEncoderPolyfill.js.map +1 -0
- package/package.json +74 -0
- package/src/__mocks__/better-sqlite3.js +14 -0
- package/src/config/config_constants.js +227 -0
- package/src/config/env_parameters.js +69 -0
- package/src/content/model/content_type_detector.js +87 -0
- package/src/core/card-collection.js +300 -0
- package/src/core/event-producer.js +160 -0
- package/src/core/g_time.js +215 -0
- package/src/core/hash/enums.js +13 -0
- package/src/core/hash/validator.js +271 -0
- package/src/core/mcard.js +203 -0
- package/src/engine/sqlite_engine.js +755 -0
- package/src/index.js +10 -0
- package/src/middleware/mcardPersistenceMiddleware.js +45 -0
- package/src/models/database_schemas.js +26 -0
- package/src/services/logger.js +74 -0
- package/src/services/mcardStorageService.js +34 -0
- package/src/utils/actionHelpers.js +13 -0
- package/src/utils/bufferContentHelper.js +436 -0
- package/src/utils/bufferPolyfill.js +202 -0
- package/src/utils/cn.ts +6 -0
- package/src/utils/content-detection.js +66 -0
- package/src/utils/content-utils.js +250 -0
- package/src/utils/content_type_detector copy.js +501 -0
- package/src/utils/content_type_detector.js +501 -0
- package/src/utils/cryptoPolyfill.js +180 -0
- package/src/utils/dateUtils.ts +18 -0
- package/src/utils/dbInitializer.ts +27 -0
- package/src/utils/dotenv-browser.js +29 -0
- package/src/utils/environmentDetector.js +92 -0
- package/src/utils/logWriter.js +20 -0
- package/src/utils/serviceWorkerManager.js +122 -0
- package/src/utils/stateWatcher.ts +78 -0
- package/src/utils/storeAdapter copy.ts +157 -0
- package/src/utils/storeAdapter.ts +157 -0
- package/src/utils/test-content-detection.js +71 -0
- package/src/utils/test-detection-fix.js +136 -0
- package/src/utils/test-format-conversion.js +165 -0
- package/src/utils/test-mov-viewer.js +59 -0
- package/src/utils/testDetection.js +16 -0
- package/src/utils/textEncoderPolyfill.js +88 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Ben Koo
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# MCard JS
|
|
2
|
+
|
|
3
|
+
A JavaScript implementation of MCard, a data model for persistently storing content with cryptographic hashing and timestamping.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
MCard JS provides a cross-environment implementation that works in both Node.js and browser environments. The library offers functionality for:
|
|
8
|
+
|
|
9
|
+
- Creating and managing content cards with cryptographic hashing
|
|
10
|
+
- Storing structured data with timestamps
|
|
11
|
+
- Searching and retrieving cards by various criteria
|
|
12
|
+
- Synchronizing data with persistence providers
|
|
13
|
+
- Redux middleware for persisting application state
|
|
14
|
+
|
|
15
|
+
## Key Components
|
|
16
|
+
|
|
17
|
+
### Core
|
|
18
|
+
|
|
19
|
+
- **MCard**: Core data structure that wraps content with hash, timestamp, and metadata
|
|
20
|
+
- **CardCollection**: Manages multiple MCards, providing search and retrieval capabilities
|
|
21
|
+
- **GTime**: Handles global timestamping with region-aware formatting
|
|
22
|
+
|
|
23
|
+
### Middleware
|
|
24
|
+
|
|
25
|
+
- **mcardPersistenceMiddleware**: Redux middleware for persisting actions and state snapshots
|
|
26
|
+
|
|
27
|
+
### Utilities
|
|
28
|
+
|
|
29
|
+
- **SafeBuffer**: Cross-environment Buffer implementation for Node.js and browsers
|
|
30
|
+
- **Content Type Detection**: Automated detection and handling of various content types
|
|
31
|
+
- **Cryptographic Utilities**: Hash generation and validation
|
|
32
|
+
|
|
33
|
+
## Cross-Environment Compatibility
|
|
34
|
+
|
|
35
|
+
MCard JS is designed to work in both Node.js and browser environments through:
|
|
36
|
+
|
|
37
|
+
- Buffer polyfills for browser compatibility
|
|
38
|
+
- Environment detection for optimal feature usage
|
|
39
|
+
- TextEncoder/TextDecoder polyfills
|
|
40
|
+
|
|
41
|
+
## Recent Updates
|
|
42
|
+
|
|
43
|
+
### Redux Middleware Improvements
|
|
44
|
+
|
|
45
|
+
- Enhanced middleware implementation following the Redux pattern (store => next => action)
|
|
46
|
+
- Support for both named and default exports for compatibility
|
|
47
|
+
- Graceful handling when storage service is unavailable
|
|
48
|
+
- Better test coverage (93.75% statements, 100% functions)
|
|
49
|
+
|
|
50
|
+
### Buffer Compatibility Fixes
|
|
51
|
+
|
|
52
|
+
- Cross-environment support for Buffer/Uint8Array content handling
|
|
53
|
+
- Improved content access and conversion
|
|
54
|
+
- Robust test suite for both Node.js and browser environments
|
|
55
|
+
|
|
56
|
+
## Getting Started
|
|
57
|
+
|
|
58
|
+
### Installation
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
npm install @benkoo/mcard
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Basic Usage
|
|
65
|
+
|
|
66
|
+
```javascript
|
|
67
|
+
import { MCard, CardCollection } from '@benkoo/mcard';
|
|
68
|
+
|
|
69
|
+
// Create a card with content
|
|
70
|
+
const card = new MCard('Hello, World!');
|
|
71
|
+
|
|
72
|
+
// Create a collection and add the card
|
|
73
|
+
const collection = new CardCollection();
|
|
74
|
+
collection.add(card);
|
|
75
|
+
|
|
76
|
+
// Retrieve by hash
|
|
77
|
+
const retrievedCard = collection.get(card.hash);
|
|
78
|
+
|
|
79
|
+
// Search by content
|
|
80
|
+
const searchResults = collection.search_by_string('Hello');
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Redux Integration
|
|
84
|
+
|
|
85
|
+
```javascript
|
|
86
|
+
import { createStore, applyMiddleware } from 'redux';
|
|
87
|
+
import { mcardPersistenceMiddleware } from '@benkoo/mcard';
|
|
88
|
+
import McardStorageService from './mcardStorageService';
|
|
89
|
+
import rootReducer from './reducers';
|
|
90
|
+
|
|
91
|
+
const store = createStore(
|
|
92
|
+
rootReducer,
|
|
93
|
+
applyMiddleware(
|
|
94
|
+
mcardPersistenceMiddleware(McardStorageService)
|
|
95
|
+
)
|
|
96
|
+
);
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Development
|
|
100
|
+
|
|
101
|
+
### Testing
|
|
102
|
+
|
|
103
|
+
Run the test suite with:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
npm test
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Building
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
npm run build
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## License
|
|
116
|
+
|
|
117
|
+
MIT
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
// Mock for better-sqlite3
|
|
8
|
+
const mockSqlite = jest.fn(() => ({
|
|
9
|
+
prepare: jest.fn().mockReturnValue({
|
|
10
|
+
run: jest.fn(),
|
|
11
|
+
get: jest.fn(),
|
|
12
|
+
all: jest.fn(() => []),
|
|
13
|
+
finalize: jest.fn()
|
|
14
|
+
}),
|
|
15
|
+
exec: jest.fn(),
|
|
16
|
+
close: jest.fn(),
|
|
17
|
+
transaction: fn => fn
|
|
18
|
+
}));
|
|
19
|
+
var _default = exports.default = mockSqlite;
|
|
20
|
+
//# sourceMappingURL=better-sqlite3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"better-sqlite3.js","names":["mockSqlite","jest","fn","prepare","mockReturnValue","run","get","all","finalize","exec","close","transaction","_default","exports","default"],"sources":["../../src/__mocks__/better-sqlite3.js"],"sourcesContent":["// Mock for better-sqlite3\nconst mockSqlite = jest.fn(() => ({\n prepare: jest.fn().mockReturnValue({\n run: jest.fn(),\n get: jest.fn(),\n all: jest.fn(() => []),\n finalize: jest.fn()\n }),\n exec: jest.fn(),\n close: jest.fn(),\n transaction: fn => fn\n}));\n\nexport default mockSqlite;\n"],"mappings":";;;;;;AAAA;AACA,MAAMA,UAAU,GAAGC,IAAI,CAACC,EAAE,CAAC,OAAO;EAChCC,OAAO,EAAEF,IAAI,CAACC,EAAE,CAAC,CAAC,CAACE,eAAe,CAAC;IACjCC,GAAG,EAAEJ,IAAI,CAACC,EAAE,CAAC,CAAC;IACdI,GAAG,EAAEL,IAAI,CAACC,EAAE,CAAC,CAAC;IACdK,GAAG,EAAEN,IAAI,CAACC,EAAE,CAAC,MAAM,EAAE,CAAC;IACtBM,QAAQ,EAAEP,IAAI,CAACC,EAAE,CAAC;EACpB,CAAC,CAAC;EACFO,IAAI,EAAER,IAAI,CAACC,EAAE,CAAC,CAAC;EACfQ,KAAK,EAAET,IAAI,CAACC,EAAE,CAAC,CAAC;EAChBS,WAAW,EAAET,EAAE,IAAIA;AACrB,CAAC,CAAC,CAAC;AAAC,IAAAU,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEWd,UAAU","ignoreList":[]}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.projectRoot = exports.default = exports.configConstants = exports.VALID_HASH_FUNCTIONS = exports.TEST_DB_PATH = exports.LOG_LEVEL = exports.HashAlgorithmMetadata = exports.HashAlgorithm = exports.HASH_ALGORITHM_HIERARCHY = exports.DEFAULT_PAGE_SIZE = exports.DEFAULT_LOG_LEVEL = exports.DEFAULT_HASH_LENGTH = exports.DEFAULT_HASH_ALGORITHM = exports.CARDS_DB_PATH = void 0;
|
|
7
|
+
// Check if we're in a browser environment
|
|
8
|
+
const isBrowser = typeof window !== 'undefined';
|
|
9
|
+
|
|
10
|
+
// Default empty values that will be replaced in Node.js environment
|
|
11
|
+
let projectRoot = exports.projectRoot = '';
|
|
12
|
+
let dotenv = null;
|
|
13
|
+
let path = null;
|
|
14
|
+
|
|
15
|
+
// Only import Node.js modules when in Node.js environment
|
|
16
|
+
// Use try/catch to make this safe in any environment
|
|
17
|
+
if (!isBrowser) {
|
|
18
|
+
try {
|
|
19
|
+
// Use dynamic import with eval to prevent browser parsing errors
|
|
20
|
+
// This code won't execute in the browser because of the isBrowser check
|
|
21
|
+
if (typeof process !== 'undefined') {
|
|
22
|
+
exports.projectRoot = projectRoot = process.cwd();
|
|
23
|
+
|
|
24
|
+
// Only attempt to load Node.js modules in a Node.js environment
|
|
25
|
+
try {
|
|
26
|
+
// Use a function wrapper to avoid direct require syntax that browsers will parse
|
|
27
|
+
const dynamicRequire = new Function('module', 'return require(module)');
|
|
28
|
+
dotenv = dynamicRequire('dotenv');
|
|
29
|
+
path = dynamicRequire('path');
|
|
30
|
+
|
|
31
|
+
// Configure dotenv if available
|
|
32
|
+
if (dotenv && dotenv.config) {
|
|
33
|
+
dotenv.config();
|
|
34
|
+
}
|
|
35
|
+
} catch (e) {
|
|
36
|
+
console.warn('Node.js modules not available:', e.message);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
} catch (e) {
|
|
40
|
+
console.warn('Unable to determine environment:', e.message);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Safe path join function that works in any environment
|
|
45
|
+
const safePath = (base, ...parts) => {
|
|
46
|
+
if (path && path.join) {
|
|
47
|
+
return path.join(base, ...parts);
|
|
48
|
+
} else {
|
|
49
|
+
return [base, ...parts].filter(Boolean).join('/');
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
// Database Configuration
|
|
54
|
+
const DEFAULT_PAGE_SIZE = exports.DEFAULT_PAGE_SIZE = isBrowser ? 10 : process.env?.DEFAULT_PAGE_SIZE || 10;
|
|
55
|
+
const CARDS_DB_PATH = exports.CARDS_DB_PATH = isBrowser ? '/data/cards.db' : process.env?.MCARD_DB_PATH || safePath(projectRoot, 'public', 'data', 'cards.db');
|
|
56
|
+
const TEST_DB_PATH = exports.TEST_DB_PATH = isBrowser ? '/test/db/test.db' : process.env?.TEST_DB_PATH || safePath(projectRoot, 'src', 'test', 'db', 'test.db');
|
|
57
|
+
|
|
58
|
+
// Default Configuration Values
|
|
59
|
+
const DEFAULT_HASH_ALGORITHM = exports.DEFAULT_HASH_ALGORITHM = isBrowser ? 'sha256' : process.env?.MCARD_HASH_ALGORITHM || 'sha256';
|
|
60
|
+
const DEFAULT_HASH_LENGTH = exports.DEFAULT_HASH_LENGTH = isBrowser ? 64 : process.env?.DEFAULT_HASH_LENGTH || 64;
|
|
61
|
+
|
|
62
|
+
// Logging Configuration
|
|
63
|
+
const DEFAULT_LOG_LEVEL = exports.DEFAULT_LOG_LEVEL = 'info';
|
|
64
|
+
const LOG_LEVEL = exports.LOG_LEVEL = isBrowser ? DEFAULT_LOG_LEVEL : process.env?.LOG_LEVEL || DEFAULT_LOG_LEVEL;
|
|
65
|
+
|
|
66
|
+
// Hash Algorithm Configuration
|
|
67
|
+
const HashAlgorithm = input => {
|
|
68
|
+
// Return default value for null or undefined
|
|
69
|
+
if (input === null || input === undefined) {
|
|
70
|
+
return HashAlgorithm.DEFAULT;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Normalize input to lowercase and trim
|
|
74
|
+
const normalizedInput = input.toString().toLowerCase().trim();
|
|
75
|
+
|
|
76
|
+
// Check if the input matches any of the predefined hash algorithms
|
|
77
|
+
return VALID_HASH_FUNCTIONS.includes(normalizedInput) ? normalizedInput : HashAlgorithm.DEFAULT;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
// Add the existing constants as properties
|
|
81
|
+
exports.HashAlgorithm = HashAlgorithm;
|
|
82
|
+
HashAlgorithm.MD5 = 'md5';
|
|
83
|
+
HashAlgorithm.SHA1 = 'sha1';
|
|
84
|
+
HashAlgorithm.SHA224 = 'sha224';
|
|
85
|
+
HashAlgorithm.SHA256 = 'sha256';
|
|
86
|
+
HashAlgorithm.SHA384 = 'sha384';
|
|
87
|
+
HashAlgorithm.SHA512 = 'sha512';
|
|
88
|
+
HashAlgorithm.CUSTOM = 'custom';
|
|
89
|
+
HashAlgorithm.DEFAULT = 'sha256';
|
|
90
|
+
|
|
91
|
+
// Hash Algorithm Hierarchy
|
|
92
|
+
const HASH_ALGORITHM_HIERARCHY = exports.HASH_ALGORITHM_HIERARCHY = {
|
|
93
|
+
[HashAlgorithm.MD5]: HashAlgorithm.SHA1,
|
|
94
|
+
[HashAlgorithm.SHA1]: HashAlgorithm.SHA224,
|
|
95
|
+
[HashAlgorithm.SHA224]: HashAlgorithm.SHA256,
|
|
96
|
+
[HashAlgorithm.SHA256]: HashAlgorithm.SHA384,
|
|
97
|
+
[HashAlgorithm.SHA384]: HashAlgorithm.SHA512
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
// Hash Algorithm Metadata
|
|
101
|
+
const HashAlgorithmMetadata = exports.HashAlgorithmMetadata = {
|
|
102
|
+
[HashAlgorithm.MD5]: {
|
|
103
|
+
name: HashAlgorithm.MD5,
|
|
104
|
+
description: 'MD5 hash function',
|
|
105
|
+
outputLength: 32,
|
|
106
|
+
isDefault: false
|
|
107
|
+
},
|
|
108
|
+
[HashAlgorithm.SHA1]: {
|
|
109
|
+
name: HashAlgorithm.SHA1,
|
|
110
|
+
description: 'SHA-1 hash function',
|
|
111
|
+
outputLength: 40,
|
|
112
|
+
isDefault: false
|
|
113
|
+
},
|
|
114
|
+
[HashAlgorithm.SHA224]: {
|
|
115
|
+
name: HashAlgorithm.SHA224,
|
|
116
|
+
description: 'SHA-224 hash function',
|
|
117
|
+
outputLength: 56,
|
|
118
|
+
isDefault: false
|
|
119
|
+
},
|
|
120
|
+
[HashAlgorithm.SHA256]: {
|
|
121
|
+
name: HashAlgorithm.SHA256,
|
|
122
|
+
description: 'SHA-256 hash function',
|
|
123
|
+
outputLength: 64,
|
|
124
|
+
isDefault: true
|
|
125
|
+
},
|
|
126
|
+
[HashAlgorithm.SHA384]: {
|
|
127
|
+
name: HashAlgorithm.SHA384,
|
|
128
|
+
description: 'SHA-384 hash function',
|
|
129
|
+
outputLength: 96,
|
|
130
|
+
isDefault: false
|
|
131
|
+
},
|
|
132
|
+
[HashAlgorithm.SHA512]: {
|
|
133
|
+
name: HashAlgorithm.SHA512,
|
|
134
|
+
description: 'SHA-512 hash function',
|
|
135
|
+
outputLength: 128,
|
|
136
|
+
isDefault: false
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
const VALID_HASH_FUNCTIONS = exports.VALID_HASH_FUNCTIONS = [HashAlgorithm.MD5, HashAlgorithm.SHA1, HashAlgorithm.SHA224, HashAlgorithm.SHA256, HashAlgorithm.SHA384, HashAlgorithm.SHA512, HashAlgorithm.CUSTOM];
|
|
140
|
+
|
|
141
|
+
// Export Strategy Notes:
|
|
142
|
+
// 1. Default Export: Allows importing the entire configuration object
|
|
143
|
+
// Example: import configConstants from './config_constants.js'
|
|
144
|
+
// Usage: configConstants.LOG_LEVEL
|
|
145
|
+
//
|
|
146
|
+
// 2. Named Exports: Allows importing specific constants directly
|
|
147
|
+
// Example: import { LOG_LEVEL, HashAlgorithm } from './config_constants.js'
|
|
148
|
+
// Usage: Directly use LOG_LEVEL or HashAlgorithm
|
|
149
|
+
//
|
|
150
|
+
// This approach provides maximum flexibility for importing and using constants
|
|
151
|
+
var _default = exports.default = {
|
|
152
|
+
// Database Constants
|
|
153
|
+
DEFAULT_PAGE_SIZE,
|
|
154
|
+
CARDS_DB_PATH,
|
|
155
|
+
// Store Constants
|
|
156
|
+
DEFAULT_HASH_ALGORITHM,
|
|
157
|
+
DEFAULT_HASH_LENGTH,
|
|
158
|
+
// Logging Constants
|
|
159
|
+
DEFAULT_LOG_LEVEL,
|
|
160
|
+
LOG_LEVEL,
|
|
161
|
+
// Hash-related Exports
|
|
162
|
+
HashAlgorithm,
|
|
163
|
+
HASH_ALGORITHM_HIERARCHY,
|
|
164
|
+
HashAlgorithmMetadata,
|
|
165
|
+
VALID_HASH_FUNCTIONS,
|
|
166
|
+
// Project Root
|
|
167
|
+
projectRoot
|
|
168
|
+
};
|
|
169
|
+
const configConstants = exports.configConstants = {
|
|
170
|
+
// Database Constants
|
|
171
|
+
DEFAULT_PAGE_SIZE,
|
|
172
|
+
CARDS_DB_PATH,
|
|
173
|
+
TEST_DB_PATH,
|
|
174
|
+
// Store Constants
|
|
175
|
+
DEFAULT_HASH_ALGORITHM,
|
|
176
|
+
DEFAULT_HASH_LENGTH,
|
|
177
|
+
// Logging Constants
|
|
178
|
+
DEFAULT_LOG_LEVEL,
|
|
179
|
+
LOG_LEVEL,
|
|
180
|
+
// Hash-related Exports
|
|
181
|
+
HashAlgorithm,
|
|
182
|
+
HASH_ALGORITHM_HIERARCHY,
|
|
183
|
+
HashAlgorithmMetadata,
|
|
184
|
+
VALID_HASH_FUNCTIONS,
|
|
185
|
+
// Project Root
|
|
186
|
+
projectRoot
|
|
187
|
+
};
|
|
188
|
+
//# sourceMappingURL=config_constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config_constants.js","names":["isBrowser","window","projectRoot","exports","dotenv","path","process","cwd","dynamicRequire","Function","config","e","console","warn","message","safePath","base","parts","join","filter","Boolean","DEFAULT_PAGE_SIZE","env","CARDS_DB_PATH","MCARD_DB_PATH","TEST_DB_PATH","DEFAULT_HASH_ALGORITHM","MCARD_HASH_ALGORITHM","DEFAULT_HASH_LENGTH","DEFAULT_LOG_LEVEL","LOG_LEVEL","HashAlgorithm","input","undefined","DEFAULT","normalizedInput","toString","toLowerCase","trim","VALID_HASH_FUNCTIONS","includes","MD5","SHA1","SHA224","SHA256","SHA384","SHA512","CUSTOM","HASH_ALGORITHM_HIERARCHY","HashAlgorithmMetadata","name","description","outputLength","isDefault","_default","default","configConstants"],"sources":["../../src/config/config_constants.js"],"sourcesContent":["// Check if we're in a browser environment\nconst isBrowser = typeof window !== 'undefined';\n\n// Default empty values that will be replaced in Node.js environment\nlet projectRoot = '';\nlet dotenv = null;\nlet path = null;\n\n// Only import Node.js modules when in Node.js environment\n// Use try/catch to make this safe in any environment\nif (!isBrowser) {\n try {\n // Use dynamic import with eval to prevent browser parsing errors\n // This code won't execute in the browser because of the isBrowser check\n if (typeof process !== 'undefined') {\n projectRoot = process.cwd();\n \n // Only attempt to load Node.js modules in a Node.js environment\n try {\n // Use a function wrapper to avoid direct require syntax that browsers will parse\n const dynamicRequire = new Function('module', 'return require(module)');\n dotenv = dynamicRequire('dotenv');\n path = dynamicRequire('path');\n \n // Configure dotenv if available\n if (dotenv && dotenv.config) {\n dotenv.config();\n }\n } catch (e) {\n console.warn('Node.js modules not available:', e.message);\n }\n }\n } catch (e) {\n console.warn('Unable to determine environment:', e.message);\n }\n}\n\n// Safe path join function that works in any environment\nconst safePath = (base, ...parts) => {\n if (path && path.join) {\n return path.join(base, ...parts);\n } else {\n return [base, ...parts].filter(Boolean).join('/');\n }\n};\n\n// Database Configuration\nconst DEFAULT_PAGE_SIZE = isBrowser ? 10 : (process.env?.DEFAULT_PAGE_SIZE || 10);\nconst CARDS_DB_PATH = isBrowser \n ? '/data/cards.db' \n : (process.env?.MCARD_DB_PATH || safePath(projectRoot, 'public', 'data', 'cards.db'));\nconst TEST_DB_PATH = isBrowser\n ? '/test/db/test.db'\n : (process.env?.TEST_DB_PATH || safePath(projectRoot, 'src', 'test', 'db', 'test.db'));\n\n// Default Configuration Values\nconst DEFAULT_HASH_ALGORITHM = isBrowser ? 'sha256' : (process.env?.MCARD_HASH_ALGORITHM || 'sha256');\nconst DEFAULT_HASH_LENGTH = isBrowser ? 64 : (process.env?.DEFAULT_HASH_LENGTH || 64);\n\n// Logging Configuration\nconst DEFAULT_LOG_LEVEL = 'info';\nconst LOG_LEVEL = isBrowser ? DEFAULT_LOG_LEVEL : (process.env?.LOG_LEVEL || DEFAULT_LOG_LEVEL);\n\n// Hash Algorithm Configuration\nconst HashAlgorithm = (input) => {\n // Return default value for null or undefined\n if (input === null || input === undefined) {\n return HashAlgorithm.DEFAULT;\n }\n\n // Normalize input to lowercase and trim\n const normalizedInput = input.toString().toLowerCase().trim();\n\n // Check if the input matches any of the predefined hash algorithms\n return VALID_HASH_FUNCTIONS.includes(normalizedInput) ? normalizedInput : HashAlgorithm.DEFAULT;\n};\n\n// Add the existing constants as properties\nHashAlgorithm.MD5 = 'md5';\nHashAlgorithm.SHA1 = 'sha1';\nHashAlgorithm.SHA224 = 'sha224';\nHashAlgorithm.SHA256 = 'sha256';\nHashAlgorithm.SHA384 = 'sha384';\nHashAlgorithm.SHA512 = 'sha512';\nHashAlgorithm.CUSTOM = 'custom';\nHashAlgorithm.DEFAULT = 'sha256';\n\n// Hash Algorithm Hierarchy\nconst HASH_ALGORITHM_HIERARCHY = {\n [HashAlgorithm.MD5]: HashAlgorithm.SHA1,\n [HashAlgorithm.SHA1]: HashAlgorithm.SHA224,\n [HashAlgorithm.SHA224]: HashAlgorithm.SHA256,\n [HashAlgorithm.SHA256]: HashAlgorithm.SHA384,\n [HashAlgorithm.SHA384]: HashAlgorithm.SHA512\n};\n\n// Hash Algorithm Metadata\nconst HashAlgorithmMetadata = {\n [HashAlgorithm.MD5]: {\n name: HashAlgorithm.MD5,\n description: 'MD5 hash function',\n outputLength: 32,\n isDefault: false\n },\n [HashAlgorithm.SHA1]: {\n name: HashAlgorithm.SHA1,\n description: 'SHA-1 hash function',\n outputLength: 40,\n isDefault: false\n },\n [HashAlgorithm.SHA224]: {\n name: HashAlgorithm.SHA224,\n description: 'SHA-224 hash function',\n outputLength: 56,\n isDefault: false\n },\n [HashAlgorithm.SHA256]: {\n name: HashAlgorithm.SHA256,\n description: 'SHA-256 hash function',\n outputLength: 64,\n isDefault: true\n },\n [HashAlgorithm.SHA384]: {\n name: HashAlgorithm.SHA384,\n description: 'SHA-384 hash function',\n outputLength: 96,\n isDefault: false\n },\n [HashAlgorithm.SHA512]: {\n name: HashAlgorithm.SHA512,\n description: 'SHA-512 hash function',\n outputLength: 128,\n isDefault: false\n }\n};\n\nconst VALID_HASH_FUNCTIONS = [\n HashAlgorithm.MD5,\n HashAlgorithm.SHA1,\n HashAlgorithm.SHA224,\n HashAlgorithm.SHA256,\n HashAlgorithm.SHA384,\n HashAlgorithm.SHA512,\n HashAlgorithm.CUSTOM\n];\n\n// Export Strategy Notes:\n// 1. Default Export: Allows importing the entire configuration object\n// Example: import configConstants from './config_constants.js'\n// Usage: configConstants.LOG_LEVEL\n//\n// 2. Named Exports: Allows importing specific constants directly\n// Example: import { LOG_LEVEL, HashAlgorithm } from './config_constants.js'\n// Usage: Directly use LOG_LEVEL or HashAlgorithm\n//\n// This approach provides maximum flexibility for importing and using constants\n\nexport default {\n // Database Constants\n DEFAULT_PAGE_SIZE,\n CARDS_DB_PATH,\n\n // Store Constants\n DEFAULT_HASH_ALGORITHM,\n DEFAULT_HASH_LENGTH,\n\n // Logging Constants\n DEFAULT_LOG_LEVEL,\n LOG_LEVEL,\n\n // Hash-related Exports\n HashAlgorithm,\n HASH_ALGORITHM_HIERARCHY,\n HashAlgorithmMetadata,\n VALID_HASH_FUNCTIONS,\n \n // Project Root\n projectRoot\n};\n\nexport const configConstants = {\n // Database Constants\n DEFAULT_PAGE_SIZE,\n CARDS_DB_PATH,\n TEST_DB_PATH,\n\n // Store Constants\n DEFAULT_HASH_ALGORITHM,\n DEFAULT_HASH_LENGTH,\n\n // Logging Constants\n DEFAULT_LOG_LEVEL,\n LOG_LEVEL,\n\n // Hash-related Exports\n HashAlgorithm,\n HASH_ALGORITHM_HIERARCHY,\n HashAlgorithmMetadata,\n VALID_HASH_FUNCTIONS,\n \n // Project Root\n projectRoot\n};\n\nexport {\n // Database Constants\n DEFAULT_PAGE_SIZE,\n CARDS_DB_PATH,\n TEST_DB_PATH,\n\n // Store Constants\n DEFAULT_HASH_ALGORITHM,\n DEFAULT_HASH_LENGTH,\n\n // Logging Constants\n DEFAULT_LOG_LEVEL,\n LOG_LEVEL,\n\n // Hash-related Exports\n HashAlgorithm,\n HASH_ALGORITHM_HIERARCHY,\n HashAlgorithmMetadata,\n VALID_HASH_FUNCTIONS,\n \n // Project Root\n projectRoot\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = exports.EnvParameters = void 0;
|
|
8
|
+
var _dotenv = _interopRequireDefault(require("dotenv"));
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
var _config_constants = require("./config_constants.js");
|
|
11
|
+
class EnvParameters {
|
|
12
|
+
static #instance = null;
|
|
13
|
+
constructor() {
|
|
14
|
+
// Load environment variables
|
|
15
|
+
_dotenv.default.config();
|
|
16
|
+
|
|
17
|
+
// Set values from environment or use defaults from config_constants
|
|
18
|
+
this.MCARD_DB_PATH = process.env.MCARD_DB_PATH;
|
|
19
|
+
this.MCARD_HASH_ALGORITHM = process.env.MCARD_HASH_ALGORITHM;
|
|
20
|
+
this.MCARD_HASH_CUSTOM_MODULE = process.env.MCARD_HASH_CUSTOM_MODULE;
|
|
21
|
+
this.MCARD_HASH_CUSTOM_FUNCTION = process.env.MCARD_HASH_CUSTOM_FUNCTION;
|
|
22
|
+
this.MCARD_HASH_LENGTH = parseInt(process.env.MCARD_HASH_LENGTH || _config_constants.DEFAULT_HASH_LENGTH, 10);
|
|
23
|
+
this.MCARD_LOG_LEVEL = process.env.MCARD_LOG_LEVEL || _config_constants.DEFAULT_LOG_LEVEL;
|
|
24
|
+
}
|
|
25
|
+
static getInstance() {
|
|
26
|
+
if (!EnvParameters.#instance) {
|
|
27
|
+
EnvParameters.#instance = new EnvParameters();
|
|
28
|
+
}
|
|
29
|
+
return EnvParameters.#instance;
|
|
30
|
+
}
|
|
31
|
+
static reset() {
|
|
32
|
+
EnvParameters.#instance = null;
|
|
33
|
+
}
|
|
34
|
+
getLogLevel() {
|
|
35
|
+
return this.MCARD_LOG_LEVEL;
|
|
36
|
+
}
|
|
37
|
+
get_log_level() {
|
|
38
|
+
return this.getLogLevel();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Getter methods matching Python implementation
|
|
42
|
+
get_db_path() {
|
|
43
|
+
return this.MCARD_DB_PATH;
|
|
44
|
+
}
|
|
45
|
+
get_hash_algorithm() {
|
|
46
|
+
return this.MCARD_HASH_ALGORITHM;
|
|
47
|
+
}
|
|
48
|
+
get_hash_custom_module() {
|
|
49
|
+
return this.MCARD_HASH_CUSTOM_MODULE;
|
|
50
|
+
}
|
|
51
|
+
get_hash_custom_function() {
|
|
52
|
+
return this.MCARD_HASH_CUSTOM_FUNCTION;
|
|
53
|
+
}
|
|
54
|
+
get_hash_custom_length() {
|
|
55
|
+
return this.MCARD_HASH_LENGTH;
|
|
56
|
+
}
|
|
57
|
+
get_default_db_path() {
|
|
58
|
+
return _path.default.resolve(process.cwd(), this.MCARD_DB_PATH);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.EnvParameters = exports.default = EnvParameters;
|
|
62
|
+
//# sourceMappingURL=env_parameters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env_parameters.js","names":["_dotenv","_interopRequireDefault","require","_path","_config_constants","EnvParameters","instance","constructor","dotenv","config","MCARD_DB_PATH","process","env","MCARD_HASH_ALGORITHM","MCARD_HASH_CUSTOM_MODULE","MCARD_HASH_CUSTOM_FUNCTION","MCARD_HASH_LENGTH","parseInt","DEFAULT_HASH_LENGTH","MCARD_LOG_LEVEL","DEFAULT_LOG_LEVEL","getInstance","reset","getLogLevel","get_log_level","get_db_path","get_hash_algorithm","get_hash_custom_module","get_hash_custom_function","get_hash_custom_length","get_default_db_path","path","resolve","cwd","exports","default"],"sources":["../../src/config/env_parameters.js"],"sourcesContent":["import dotenv from 'dotenv';\nimport path from 'path';\nimport {\n DEFAULT_HASH_LENGTH,\n DEFAULT_LOG_LEVEL\n} from './config_constants.js';\n\nclass EnvParameters {\n static #instance = null;\n\n constructor() {\n // Load environment variables\n dotenv.config();\n\n // Set values from environment or use defaults from config_constants\n this.MCARD_DB_PATH = process.env.MCARD_DB_PATH;\n this.MCARD_HASH_ALGORITHM = process.env.MCARD_HASH_ALGORITHM;\n this.MCARD_HASH_CUSTOM_MODULE = process.env.MCARD_HASH_CUSTOM_MODULE;\n this.MCARD_HASH_CUSTOM_FUNCTION = process.env.MCARD_HASH_CUSTOM_FUNCTION;\n this.MCARD_HASH_LENGTH = parseInt(process.env.MCARD_HASH_LENGTH || DEFAULT_HASH_LENGTH, 10);\n this.MCARD_LOG_LEVEL = process.env.MCARD_LOG_LEVEL || DEFAULT_LOG_LEVEL;\n }\n\n static getInstance() {\n if (!EnvParameters.#instance) {\n EnvParameters.#instance = new EnvParameters();\n }\n return EnvParameters.#instance;\n }\n\n static reset() {\n EnvParameters.#instance = null;\n }\n\n getLogLevel() {\n return this.MCARD_LOG_LEVEL;\n }\n\n get_log_level() {\n return this.getLogLevel();\n }\n\n // Getter methods matching Python implementation\n get_db_path() {\n return this.MCARD_DB_PATH;\n }\n\n get_hash_algorithm() {\n return this.MCARD_HASH_ALGORITHM;\n }\n\n get_hash_custom_module() {\n return this.MCARD_HASH_CUSTOM_MODULE;\n }\n\n get_hash_custom_function() {\n return this.MCARD_HASH_CUSTOM_FUNCTION;\n }\n\n get_hash_custom_length() {\n return this.MCARD_HASH_LENGTH;\n }\n\n get_default_db_path() {\n return path.resolve(process.cwd(), this.MCARD_DB_PATH);\n }\n}\n\nexport { EnvParameters as default, EnvParameters };\n"],"mappings":";;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,iBAAA,GAAAF,OAAA;AAKA,MAAMG,aAAa,CAAC;EAClB,OAAO,CAACC,QAAQ,GAAG,IAAI;EAEvBC,WAAWA,CAAA,EAAG;IACZ;IACAC,eAAM,CAACC,MAAM,CAAC,CAAC;;IAEf;IACA,IAAI,CAACC,aAAa,GAAGC,OAAO,CAACC,GAAG,CAACF,aAAa;IAC9C,IAAI,CAACG,oBAAoB,GAAGF,OAAO,CAACC,GAAG,CAACC,oBAAoB;IAC5D,IAAI,CAACC,wBAAwB,GAAGH,OAAO,CAACC,GAAG,CAACE,wBAAwB;IACpE,IAAI,CAACC,0BAA0B,GAAGJ,OAAO,CAACC,GAAG,CAACG,0BAA0B;IACxE,IAAI,CAACC,iBAAiB,GAAGC,QAAQ,CAACN,OAAO,CAACC,GAAG,CAACI,iBAAiB,IAAIE,qCAAmB,EAAE,EAAE,CAAC;IAC3F,IAAI,CAACC,eAAe,GAAGR,OAAO,CAACC,GAAG,CAACO,eAAe,IAAIC,mCAAiB;EACzE;EAEA,OAAOC,WAAWA,CAAA,EAAG;IACnB,IAAI,CAAChB,aAAa,CAAC,CAACC,QAAQ,EAAE;MAC5BD,aAAa,CAAC,CAACC,QAAQ,GAAG,IAAID,aAAa,CAAC,CAAC;IAC/C;IACA,OAAOA,aAAa,CAAC,CAACC,QAAQ;EAChC;EAEA,OAAOgB,KAAKA,CAAA,EAAG;IACbjB,aAAa,CAAC,CAACC,QAAQ,GAAG,IAAI;EAChC;EAEAiB,WAAWA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACJ,eAAe;EAC7B;EAEAK,aAAaA,CAAA,EAAG;IACd,OAAO,IAAI,CAACD,WAAW,CAAC,CAAC;EAC3B;;EAEA;EACAE,WAAWA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACf,aAAa;EAC3B;EAEAgB,kBAAkBA,CAAA,EAAG;IACnB,OAAO,IAAI,CAACb,oBAAoB;EAClC;EAEAc,sBAAsBA,CAAA,EAAG;IACvB,OAAO,IAAI,CAACb,wBAAwB;EACtC;EAEAc,wBAAwBA,CAAA,EAAG;IACzB,OAAO,IAAI,CAACb,0BAA0B;EACxC;EAEAc,sBAAsBA,CAAA,EAAG;IACvB,OAAO,IAAI,CAACb,iBAAiB;EAC/B;EAEAc,mBAAmBA,CAAA,EAAG;IACpB,OAAOC,aAAI,CAACC,OAAO,CAACrB,OAAO,CAACsB,GAAG,CAAC,CAAC,EAAE,IAAI,CAACvB,aAAa,CAAC;EACxD;AACF;AAACwB,OAAA,CAAA7B,aAAA,GAAA6B,OAAA,CAAAC,OAAA,GAAA9B,aAAA","ignoreList":[]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
// Simple content type detection utility
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Basic content type detector for MCard system
|
|
11
|
+
*/
|
|
12
|
+
class ContentTypeInterpreter {
|
|
13
|
+
/**
|
|
14
|
+
* Detect the content type of binary data
|
|
15
|
+
* @param {Buffer} data - Binary data to analyze
|
|
16
|
+
* @returns {string} Detected MIME type
|
|
17
|
+
*/
|
|
18
|
+
static detectType(data) {
|
|
19
|
+
if (!data || !Buffer.isBuffer(data)) {
|
|
20
|
+
return 'text/plain';
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Simple detection based on magic numbers/signatures
|
|
24
|
+
if (data.length < 4) return 'application/octet-stream';
|
|
25
|
+
|
|
26
|
+
// Check for common file signatures
|
|
27
|
+
const signatures = {
|
|
28
|
+
// Images
|
|
29
|
+
'image/jpeg': [[0xFF, 0xD8, 0xFF]],
|
|
30
|
+
'image/png': [[0x89, 0x50, 0x4E, 0x47]],
|
|
31
|
+
'image/gif': [[0x47, 0x49, 0x46, 0x38]],
|
|
32
|
+
'image/webp': [[0x52, 0x49, 0x46, 0x46]],
|
|
33
|
+
'image/bmp': [[0x42, 0x4D]],
|
|
34
|
+
// Documents
|
|
35
|
+
'application/pdf': [[0x25, 0x50, 0x44, 0x46]],
|
|
36
|
+
// Audio
|
|
37
|
+
'audio/mpeg': [[0x49, 0x44, 0x33], [0xFF, 0xFB]],
|
|
38
|
+
'audio/wav': [[0x52, 0x49, 0x46, 0x46]],
|
|
39
|
+
// Video
|
|
40
|
+
'video/mp4': [[0x00, 0x00, 0x00, 0x18, 0x66, 0x74, 0x79, 0x70]],
|
|
41
|
+
'video/webm': [[0x1A, 0x45, 0xDF, 0xA3]],
|
|
42
|
+
// Archives
|
|
43
|
+
'application/zip': [[0x50, 0x4B, 0x03, 0x04]],
|
|
44
|
+
'application/gzip': [[0x1F, 0x8B]]
|
|
45
|
+
};
|
|
46
|
+
for (const [mimeType, signatureList] of Object.entries(signatures)) {
|
|
47
|
+
for (const signature of signatureList) {
|
|
48
|
+
if (signature.every((byte, i) => data[i] === byte)) {
|
|
49
|
+
console.log('Detected by signature:', mimeType);
|
|
50
|
+
return mimeType;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Check for text content
|
|
56
|
+
const isText = ContentTypeInterpreter.isTextContent(data);
|
|
57
|
+
if (isText) return 'text/plain';
|
|
58
|
+
|
|
59
|
+
// Default fallback
|
|
60
|
+
return 'application/octet-stream';
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Check if data is likely to be text content
|
|
65
|
+
* @param {Buffer} data - Binary data to analyze
|
|
66
|
+
* @returns {boolean} True if likely text content
|
|
67
|
+
*/
|
|
68
|
+
static isTextContent(data) {
|
|
69
|
+
// Simple heuristic: check if most bytes are within ASCII printable range
|
|
70
|
+
// and no NUL bytes are present
|
|
71
|
+
if (!data || data.length === 0) return true;
|
|
72
|
+
|
|
73
|
+
// Check for NULL bytes which typically indicate binary data
|
|
74
|
+
if (data.includes(0)) return false;
|
|
75
|
+
const printableChars = data.filter(byte => byte >= 32 && byte <= 126 ||
|
|
76
|
+
// ASCII printable
|
|
77
|
+
byte === 9 ||
|
|
78
|
+
// Tab
|
|
79
|
+
byte === 10 ||
|
|
80
|
+
// LF
|
|
81
|
+
byte === 13 // CR
|
|
82
|
+
).length;
|
|
83
|
+
|
|
84
|
+
// If over 90% of bytes are printable characters, likely text
|
|
85
|
+
return printableChars / data.length > 0.9;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
var _default = exports.default = ContentTypeInterpreter;
|
|
89
|
+
//# sourceMappingURL=content_type_detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content_type_detector.js","names":["ContentTypeInterpreter","detectType","data","Buffer","isBuffer","length","signatures","mimeType","signatureList","Object","entries","signature","every","byte","i","console","log","isText","isTextContent","includes","printableChars","filter","_default","exports","default"],"sources":["../../../src/content/model/content_type_detector.js"],"sourcesContent":["// Simple content type detection utility\n\n/**\n * Basic content type detector for MCard system\n */\nclass ContentTypeInterpreter {\n /**\n * Detect the content type of binary data\n * @param {Buffer} data - Binary data to analyze\n * @returns {string} Detected MIME type\n */\n static detectType(data) {\n if (!data || !Buffer.isBuffer(data)) {\n return 'text/plain';\n }\n \n // Simple detection based on magic numbers/signatures\n if (data.length < 4) return 'application/octet-stream';\n \n // Check for common file signatures\n const signatures = {\n // Images\n 'image/jpeg': [[0xFF, 0xD8, 0xFF]],\n 'image/png': [[0x89, 0x50, 0x4E, 0x47]],\n 'image/gif': [[0x47, 0x49, 0x46, 0x38]],\n 'image/webp': [[0x52, 0x49, 0x46, 0x46]],\n 'image/bmp': [[0x42, 0x4D]],\n \n // Documents\n 'application/pdf': [[0x25, 0x50, 0x44, 0x46]],\n \n // Audio\n 'audio/mpeg': [[0x49, 0x44, 0x33], [0xFF, 0xFB]],\n 'audio/wav': [[0x52, 0x49, 0x46, 0x46]],\n \n // Video\n 'video/mp4': [[0x00, 0x00, 0x00, 0x18, 0x66, 0x74, 0x79, 0x70]],\n 'video/webm': [[0x1A, 0x45, 0xDF, 0xA3]],\n \n // Archives\n 'application/zip': [[0x50, 0x4B, 0x03, 0x04]],\n 'application/gzip': [[0x1F, 0x8B]],\n };\n \n for (const [mimeType, signatureList] of Object.entries(signatures)) {\n for (const signature of signatureList) {\n if (signature.every((byte, i) => data[i] === byte)) {\n console.log('Detected by signature:', mimeType);\n return mimeType;\n }\n }\n }\n \n // Check for text content\n const isText = ContentTypeInterpreter.isTextContent(data);\n if (isText) return 'text/plain';\n \n // Default fallback\n return 'application/octet-stream';\n }\n \n /**\n * Check if data is likely to be text content\n * @param {Buffer} data - Binary data to analyze\n * @returns {boolean} True if likely text content\n */\n static isTextContent(data) {\n // Simple heuristic: check if most bytes are within ASCII printable range\n // and no NUL bytes are present\n if (!data || data.length === 0) return true;\n \n // Check for NULL bytes which typically indicate binary data\n if (data.includes(0)) return false;\n \n const printableChars = data.filter(byte => \n (byte >= 32 && byte <= 126) || // ASCII printable\n byte === 9 || // Tab\n byte === 10 || // LF\n byte === 13 // CR\n ).length;\n \n // If over 90% of bytes are printable characters, likely text\n return (printableChars / data.length) > 0.9;\n }\n}\n\nexport default ContentTypeInterpreter;\n"],"mappings":"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","ignoreList":[]}
|