@originals/sdk 1.1.0 → 1.4.2
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/package.json +3 -2
- package/src/did/DIDManager.ts +1 -1
- package/src/did/WebVHManager.ts +11 -2
- package/src/examples/create-module-original.ts +435 -0
- package/src/examples/full-lifecycle-flow.ts +514 -0
- package/src/examples/run.ts +59 -4
- package/src/index.ts +69 -3
- package/src/kinds/KindRegistry.ts +290 -0
- package/src/kinds/index.ts +74 -0
- package/src/kinds/types.ts +470 -0
- package/src/kinds/validators/AgentValidator.ts +257 -0
- package/src/kinds/validators/AppValidator.ts +211 -0
- package/src/kinds/validators/DatasetValidator.ts +242 -0
- package/src/kinds/validators/DocumentValidator.ts +311 -0
- package/src/kinds/validators/MediaValidator.ts +269 -0
- package/src/kinds/validators/ModuleValidator.ts +225 -0
- package/src/kinds/validators/base.ts +276 -0
- package/src/kinds/validators/index.ts +12 -0
- package/src/lifecycle/LifecycleManager.ts +909 -1
- package/src/resources/ResourceManager.ts +655 -0
- package/src/resources/index.ts +21 -0
- package/src/resources/types.ts +202 -0
- package/src/types/common.ts +1 -1
- package/src/vc/CredentialManager.ts +647 -2
- package/tests/integration/createTypedOriginal.test.ts +379 -0
- package/tests/performance/BatchOperations.perf.test.ts +2 -2
- package/tests/unit/kinds/KindRegistry.test.ts +329 -0
- package/tests/unit/kinds/types.test.ts +409 -0
- package/tests/unit/kinds/validators.test.ts +651 -0
- package/tests/unit/lifecycle/LifecycleManager.cleanapi.test.ts +441 -0
- package/tests/unit/resources/ResourceManager.test.ts +740 -0
- package/tests/unit/vc/CredentialManager.helpers.test.ts +527 -0
- package/tsconfig.json +0 -1
- package/.turbo/turbo-build.log +0 -1
- package/.turbo/turbo-test.log +0 -68353
- package/dist/adapters/FeeOracleMock.d.ts +0 -6
- package/dist/adapters/FeeOracleMock.js +0 -8
- package/dist/adapters/index.d.ts +0 -4
- package/dist/adapters/index.js +0 -4
- package/dist/adapters/providers/OrdHttpProvider.d.ts +0 -56
- package/dist/adapters/providers/OrdHttpProvider.js +0 -110
- package/dist/adapters/providers/OrdMockProvider.d.ts +0 -70
- package/dist/adapters/providers/OrdMockProvider.js +0 -75
- package/dist/adapters/types.d.ts +0 -71
- package/dist/adapters/types.js +0 -1
- package/dist/bitcoin/BitcoinManager.d.ts +0 -15
- package/dist/bitcoin/BitcoinManager.js +0 -262
- package/dist/bitcoin/BroadcastClient.d.ts +0 -30
- package/dist/bitcoin/BroadcastClient.js +0 -35
- package/dist/bitcoin/OrdinalsClient.d.ts +0 -21
- package/dist/bitcoin/OrdinalsClient.js +0 -105
- package/dist/bitcoin/PSBTBuilder.d.ts +0 -24
- package/dist/bitcoin/PSBTBuilder.js +0 -80
- package/dist/bitcoin/fee-calculation.d.ts +0 -14
- package/dist/bitcoin/fee-calculation.js +0 -31
- package/dist/bitcoin/providers/OrdNodeProvider.d.ts +0 -38
- package/dist/bitcoin/providers/OrdNodeProvider.js +0 -67
- package/dist/bitcoin/providers/OrdinalsProvider.d.ts +0 -33
- package/dist/bitcoin/providers/OrdinalsProvider.js +0 -50
- package/dist/bitcoin/providers/types.d.ts +0 -63
- package/dist/bitcoin/providers/types.js +0 -1
- package/dist/bitcoin/transactions/commit.d.ts +0 -89
- package/dist/bitcoin/transactions/commit.js +0 -311
- package/dist/bitcoin/transactions/index.d.ts +0 -7
- package/dist/bitcoin/transactions/index.js +0 -8
- package/dist/bitcoin/transfer.d.ts +0 -9
- package/dist/bitcoin/transfer.js +0 -26
- package/dist/bitcoin/utxo-selection.d.ts +0 -78
- package/dist/bitcoin/utxo-selection.js +0 -237
- package/dist/bitcoin/utxo.d.ts +0 -26
- package/dist/bitcoin/utxo.js +0 -78
- package/dist/contexts/credentials-v1.json +0 -195
- package/dist/contexts/credentials-v2-examples.json +0 -5
- package/dist/contexts/credentials-v2.json +0 -301
- package/dist/contexts/credentials.json +0 -195
- package/dist/contexts/data-integrity-v2.json +0 -81
- package/dist/contexts/dids.json +0 -57
- package/dist/contexts/ed255192020.json +0 -93
- package/dist/contexts/ordinals-plus.json +0 -23
- package/dist/contexts/originals.json +0 -22
- package/dist/core/OriginalsSDK.d.ts +0 -158
- package/dist/core/OriginalsSDK.js +0 -274
- package/dist/crypto/Multikey.d.ts +0 -30
- package/dist/crypto/Multikey.js +0 -149
- package/dist/crypto/Signer.d.ts +0 -21
- package/dist/crypto/Signer.js +0 -196
- package/dist/crypto/noble-init.d.ts +0 -18
- package/dist/crypto/noble-init.js +0 -106
- package/dist/did/BtcoDidResolver.d.ts +0 -57
- package/dist/did/BtcoDidResolver.js +0 -166
- package/dist/did/DIDManager.d.ts +0 -101
- package/dist/did/DIDManager.js +0 -493
- package/dist/did/Ed25519Verifier.d.ts +0 -30
- package/dist/did/Ed25519Verifier.js +0 -59
- package/dist/did/KeyManager.d.ts +0 -17
- package/dist/did/KeyManager.js +0 -207
- package/dist/did/WebVHManager.d.ts +0 -100
- package/dist/did/WebVHManager.js +0 -304
- package/dist/did/createBtcoDidDocument.d.ts +0 -10
- package/dist/did/createBtcoDidDocument.js +0 -42
- package/dist/did/providers/OrdinalsClientProviderAdapter.d.ts +0 -23
- package/dist/did/providers/OrdinalsClientProviderAdapter.js +0 -51
- package/dist/events/EventEmitter.d.ts +0 -115
- package/dist/events/EventEmitter.js +0 -198
- package/dist/events/index.d.ts +0 -7
- package/dist/events/index.js +0 -6
- package/dist/events/types.d.ts +0 -286
- package/dist/events/types.js +0 -9
- package/dist/examples/basic-usage.d.ts +0 -3
- package/dist/examples/basic-usage.js +0 -62
- package/dist/examples/run.d.ts +0 -1
- package/dist/examples/run.js +0 -4
- package/dist/index.d.ts +0 -39
- package/dist/index.js +0 -47
- package/dist/lifecycle/BatchOperations.d.ts +0 -147
- package/dist/lifecycle/BatchOperations.js +0 -251
- package/dist/lifecycle/LifecycleManager.d.ts +0 -116
- package/dist/lifecycle/LifecycleManager.js +0 -971
- package/dist/lifecycle/OriginalsAsset.d.ts +0 -164
- package/dist/lifecycle/OriginalsAsset.js +0 -380
- package/dist/lifecycle/ProvenanceQuery.d.ts +0 -126
- package/dist/lifecycle/ProvenanceQuery.js +0 -220
- package/dist/lifecycle/ResourceVersioning.d.ts +0 -73
- package/dist/lifecycle/ResourceVersioning.js +0 -127
- package/dist/migration/MigrationManager.d.ts +0 -86
- package/dist/migration/MigrationManager.js +0 -412
- package/dist/migration/audit/AuditLogger.d.ts +0 -51
- package/dist/migration/audit/AuditLogger.js +0 -156
- package/dist/migration/checkpoint/CheckpointManager.d.ts +0 -31
- package/dist/migration/checkpoint/CheckpointManager.js +0 -96
- package/dist/migration/checkpoint/CheckpointStorage.d.ts +0 -26
- package/dist/migration/checkpoint/CheckpointStorage.js +0 -89
- package/dist/migration/index.d.ts +0 -22
- package/dist/migration/index.js +0 -27
- package/dist/migration/operations/BaseMigration.d.ts +0 -48
- package/dist/migration/operations/BaseMigration.js +0 -83
- package/dist/migration/operations/PeerToBtcoMigration.d.ts +0 -25
- package/dist/migration/operations/PeerToBtcoMigration.js +0 -67
- package/dist/migration/operations/PeerToWebvhMigration.d.ts +0 -19
- package/dist/migration/operations/PeerToWebvhMigration.js +0 -46
- package/dist/migration/operations/WebvhToBtcoMigration.d.ts +0 -25
- package/dist/migration/operations/WebvhToBtcoMigration.js +0 -67
- package/dist/migration/rollback/RollbackManager.d.ts +0 -29
- package/dist/migration/rollback/RollbackManager.js +0 -146
- package/dist/migration/state/StateMachine.d.ts +0 -25
- package/dist/migration/state/StateMachine.js +0 -76
- package/dist/migration/state/StateTracker.d.ts +0 -36
- package/dist/migration/state/StateTracker.js +0 -123
- package/dist/migration/types.d.ts +0 -306
- package/dist/migration/types.js +0 -33
- package/dist/migration/validation/BitcoinValidator.d.ts +0 -13
- package/dist/migration/validation/BitcoinValidator.js +0 -83
- package/dist/migration/validation/CredentialValidator.d.ts +0 -13
- package/dist/migration/validation/CredentialValidator.js +0 -46
- package/dist/migration/validation/DIDCompatibilityValidator.d.ts +0 -16
- package/dist/migration/validation/DIDCompatibilityValidator.js +0 -127
- package/dist/migration/validation/LifecycleValidator.d.ts +0 -10
- package/dist/migration/validation/LifecycleValidator.js +0 -52
- package/dist/migration/validation/StorageValidator.d.ts +0 -10
- package/dist/migration/validation/StorageValidator.js +0 -65
- package/dist/migration/validation/ValidationPipeline.d.ts +0 -29
- package/dist/migration/validation/ValidationPipeline.js +0 -180
- package/dist/storage/LocalStorageAdapter.d.ts +0 -11
- package/dist/storage/LocalStorageAdapter.js +0 -53
- package/dist/storage/MemoryStorageAdapter.d.ts +0 -6
- package/dist/storage/MemoryStorageAdapter.js +0 -21
- package/dist/storage/StorageAdapter.d.ts +0 -16
- package/dist/storage/StorageAdapter.js +0 -1
- package/dist/storage/index.d.ts +0 -2
- package/dist/storage/index.js +0 -2
- package/dist/types/bitcoin.d.ts +0 -84
- package/dist/types/bitcoin.js +0 -1
- package/dist/types/common.d.ts +0 -82
- package/dist/types/common.js +0 -1
- package/dist/types/credentials.d.ts +0 -75
- package/dist/types/credentials.js +0 -1
- package/dist/types/did.d.ts +0 -26
- package/dist/types/did.js +0 -1
- package/dist/types/index.d.ts +0 -5
- package/dist/types/index.js +0 -5
- package/dist/types/network.d.ts +0 -78
- package/dist/types/network.js +0 -145
- package/dist/utils/EventLogger.d.ts +0 -71
- package/dist/utils/EventLogger.js +0 -232
- package/dist/utils/Logger.d.ts +0 -106
- package/dist/utils/Logger.js +0 -257
- package/dist/utils/MetricsCollector.d.ts +0 -110
- package/dist/utils/MetricsCollector.js +0 -264
- package/dist/utils/bitcoin-address.d.ts +0 -38
- package/dist/utils/bitcoin-address.js +0 -113
- package/dist/utils/cbor.d.ts +0 -2
- package/dist/utils/cbor.js +0 -9
- package/dist/utils/encoding.d.ts +0 -37
- package/dist/utils/encoding.js +0 -120
- package/dist/utils/hash.d.ts +0 -1
- package/dist/utils/hash.js +0 -5
- package/dist/utils/retry.d.ts +0 -10
- package/dist/utils/retry.js +0 -35
- package/dist/utils/satoshi-validation.d.ts +0 -60
- package/dist/utils/satoshi-validation.js +0 -156
- package/dist/utils/serialization.d.ts +0 -14
- package/dist/utils/serialization.js +0 -76
- package/dist/utils/telemetry.d.ts +0 -17
- package/dist/utils/telemetry.js +0 -24
- package/dist/utils/validation.d.ts +0 -5
- package/dist/utils/validation.js +0 -98
- package/dist/vc/CredentialManager.d.ts +0 -22
- package/dist/vc/CredentialManager.js +0 -227
- package/dist/vc/Issuer.d.ts +0 -27
- package/dist/vc/Issuer.js +0 -70
- package/dist/vc/Verifier.d.ts +0 -16
- package/dist/vc/Verifier.js +0 -50
- package/dist/vc/cryptosuites/bbs.d.ts +0 -44
- package/dist/vc/cryptosuites/bbs.js +0 -213
- package/dist/vc/cryptosuites/bbsSimple.d.ts +0 -9
- package/dist/vc/cryptosuites/bbsSimple.js +0 -12
- package/dist/vc/cryptosuites/eddsa.d.ts +0 -30
- package/dist/vc/cryptosuites/eddsa.js +0 -81
- package/dist/vc/documentLoader.d.ts +0 -16
- package/dist/vc/documentLoader.js +0 -59
- package/dist/vc/proofs/data-integrity.d.ts +0 -21
- package/dist/vc/proofs/data-integrity.js +0 -15
- package/dist/vc/utils/jsonld.d.ts +0 -2
- package/dist/vc/utils/jsonld.js +0 -15
- package/test/logs/did_webvh_QmQsRNhXxPSCSeLjpbKYcNMZj8b1kBQAoC6cZmkFAgmpHt_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmSQkpD58qxcqMWHYcEmDUn3wk7hHvJwzYTrZmhh6zjPQ8_example_com_users_alice123_profile.jsonl +0 -1
- package/test/logs/did_webvh_QmTMda6VW3cUPdKk5Yc3onnv1vdgEumvWWdP2noAYFSjeG_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmTkb8KnCYcsnKKDCY4eUQuKQdKJLrCinvhw13v3zETxpE_example_com_users_etc_passwd.jsonl +0 -1
- package/test/logs/did_webvh_QmTn9FdCfpXFDrxHH52pwB4iNrDFVvNDjJ5FQTcDbmM3Fg_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmUCQUi1xjtJjnSQ1XJZgKqcWgErx1v7E2dz4DAPraAyJP_example_com_etc_passwd.jsonl +0 -1
- package/test/logs/did_webvh_QmUENQJCDKBJVRS5BkL6zjaUvcRjkb9xHmy7foCgRjmv3W_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmUPdGyjYBEnQ3aQUkmqyyBKTyjvCP5RZQGiaEDeTtf6dc_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmUoHTuHMWzQM29ZFrE9VLtMxkZ5u869yqee8LwcCLN39M_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmUrnms8G65ggVKsr9oQeWrLUBuGChwQPPb2LCFvaoNxaw_example_com_users_alice.jsonl +0 -1
- package/test/logs/did_webvh_QmUwiw3eSXdHG1hPvoAGu3cuK5jF4aXRYDLBAjPXfv1qzb_example_com_level1_level2.jsonl +0 -1
- package/test/logs/did_webvh_QmW7bzKh6yFEKNAtmVsrPGvvsMHTUQdzJSNsTZkbuGFpbj_example_com_secret.jsonl +0 -1
- package/test/logs/did_webvh_QmXbFTFBBJ8zpjdz9WE1DNN44A2wprFmdvAubjSffeyoAG_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmXyVXFPCTffGb2mTUFDeMCsScjnpLWkyUkVkB6q6QoeBf_example_com_C_Windows_System32.jsonl +0 -1
- package/test/logs/did_webvh_QmZK9B81gxZtvo5fYHYKDtKt8zZfZZPhmCMhbujBJuRRzE_example_com_etc_passwd.jsonl +0 -1
- package/test/logs/did_webvh_QmbNLCVSdXSVLrwFBvCBQPAabjtRb1SGHjkGVyw3QUbfBL_example_com_users_etc_passwd.jsonl +0 -1
- package/test/logs/did_webvh_QmbeaicmGW3Q7Yzbqmftc8a9jLBngokveb5A2KVKfVGZRb_example_com_my_org_user_name_test_123.jsonl +0 -1
- package/test/logs/did_webvh_Qmdv7c7AjUreUfoKyvkN2UpAWTozxKsv99srQetPJMJEnp_example_com_users_etc_passwd.jsonl +0 -1
- package/test/logs/did_webvh_QmeioWY3uypYLkYpCXe9eCYnn4xBVruP9C1d79azMrTEHG_example_com.jsonl +0 -1
- package/test/logs/did_webvh_Qmf4QH5dsA6Ecr5HJ6KaJL9uJRyY8RxrQdqoRCM25DzvPi_example_com_users_alice.jsonl +0 -1
- package/tests/e2e/README.md +0 -97
- package/tests/e2e/example.spec.ts +0 -78
- package/tsconfig.tsbuildinfo +0 -1
package/dist/utils/Logger.d.ts
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Enhanced Logger for Originals SDK
|
|
3
|
-
*
|
|
4
|
-
* Features:
|
|
5
|
-
* - Multiple log levels (debug, info, warn, error)
|
|
6
|
-
* - Child loggers with hierarchical context
|
|
7
|
-
* - Performance timing with startTimer
|
|
8
|
-
* - Multiple output destinations
|
|
9
|
-
* - Data sanitization for sensitive information
|
|
10
|
-
* - Async-safe operations
|
|
11
|
-
*/
|
|
12
|
-
import type { OriginalsConfig } from '../types';
|
|
13
|
-
/**
|
|
14
|
-
* Log level type
|
|
15
|
-
*/
|
|
16
|
-
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
17
|
-
/**
|
|
18
|
-
* Structured log entry
|
|
19
|
-
*/
|
|
20
|
-
export interface LogEntry {
|
|
21
|
-
timestamp: string;
|
|
22
|
-
level: LogLevel;
|
|
23
|
-
context: string;
|
|
24
|
-
message: string;
|
|
25
|
-
data?: any;
|
|
26
|
-
duration?: number;
|
|
27
|
-
traceId?: string;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Log output interface for custom outputs
|
|
31
|
-
*/
|
|
32
|
-
export interface LogOutput {
|
|
33
|
-
write(entry: LogEntry): void | Promise<void>;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Console log output implementation
|
|
37
|
-
*/
|
|
38
|
-
export declare class ConsoleLogOutput implements LogOutput {
|
|
39
|
-
write(entry: LogEntry): void;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* File log output implementation (async)
|
|
43
|
-
*/
|
|
44
|
-
export declare class FileLogOutput implements LogOutput {
|
|
45
|
-
private filePath;
|
|
46
|
-
private buffer;
|
|
47
|
-
private flushTimeout;
|
|
48
|
-
private readonly flushInterval;
|
|
49
|
-
constructor(filePath: string);
|
|
50
|
-
write(entry: LogEntry): Promise<void>;
|
|
51
|
-
private flush;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Main Logger class
|
|
55
|
-
*/
|
|
56
|
-
export declare class Logger {
|
|
57
|
-
private context;
|
|
58
|
-
private outputs;
|
|
59
|
-
private minLevel;
|
|
60
|
-
private includeTimestamps;
|
|
61
|
-
private includeContext;
|
|
62
|
-
private sanitizeLogs;
|
|
63
|
-
private static readonly LEVEL_PRIORITY;
|
|
64
|
-
constructor(context: string, config: OriginalsConfig);
|
|
65
|
-
/**
|
|
66
|
-
* Log a debug message
|
|
67
|
-
*/
|
|
68
|
-
debug(message: string, data?: any): void;
|
|
69
|
-
/**
|
|
70
|
-
* Log an info message
|
|
71
|
-
*/
|
|
72
|
-
info(message: string, data?: any): void;
|
|
73
|
-
/**
|
|
74
|
-
* Log a warning message
|
|
75
|
-
*/
|
|
76
|
-
warn(message: string, data?: any): void;
|
|
77
|
-
/**
|
|
78
|
-
* Log an error message
|
|
79
|
-
*/
|
|
80
|
-
error(message: string, error?: Error, data?: any): void;
|
|
81
|
-
/**
|
|
82
|
-
* Start a timer for performance tracking
|
|
83
|
-
* Returns a function that stops the timer and logs the duration
|
|
84
|
-
*/
|
|
85
|
-
startTimer(operation: string): () => void;
|
|
86
|
-
/**
|
|
87
|
-
* Create a child logger with nested context
|
|
88
|
-
*/
|
|
89
|
-
child(childContext: string): Logger;
|
|
90
|
-
/**
|
|
91
|
-
* Set a single output (replaces existing outputs)
|
|
92
|
-
*/
|
|
93
|
-
setOutput(output: LogOutput): void;
|
|
94
|
-
/**
|
|
95
|
-
* Add an output to the existing outputs
|
|
96
|
-
*/
|
|
97
|
-
addOutput(output: LogOutput): void;
|
|
98
|
-
/**
|
|
99
|
-
* Internal log method
|
|
100
|
-
*/
|
|
101
|
-
private log;
|
|
102
|
-
/**
|
|
103
|
-
* Sanitize sensitive data from logs
|
|
104
|
-
*/
|
|
105
|
-
private sanitize;
|
|
106
|
-
}
|
package/dist/utils/Logger.js
DELETED
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Enhanced Logger for Originals SDK
|
|
3
|
-
*
|
|
4
|
-
* Features:
|
|
5
|
-
* - Multiple log levels (debug, info, warn, error)
|
|
6
|
-
* - Child loggers with hierarchical context
|
|
7
|
-
* - Performance timing with startTimer
|
|
8
|
-
* - Multiple output destinations
|
|
9
|
-
* - Data sanitization for sensitive information
|
|
10
|
-
* - Async-safe operations
|
|
11
|
-
*/
|
|
12
|
-
/**
|
|
13
|
-
* Console log output implementation
|
|
14
|
-
*/
|
|
15
|
-
export class ConsoleLogOutput {
|
|
16
|
-
write(entry) {
|
|
17
|
-
const timestamp = entry.timestamp;
|
|
18
|
-
const level = entry.level.toUpperCase().padEnd(5);
|
|
19
|
-
const context = entry.context;
|
|
20
|
-
const message = entry.message;
|
|
21
|
-
const durationStr = entry.duration !== undefined ? ` (${entry.duration.toFixed(2)}ms)` : '';
|
|
22
|
-
const dataStr = entry.data ? ` ${JSON.stringify(entry.data)}` : '';
|
|
23
|
-
const logMessage = `[${timestamp}] ${level} [${context}] ${message}${durationStr}${dataStr}`;
|
|
24
|
-
switch (entry.level) {
|
|
25
|
-
case 'debug':
|
|
26
|
-
console.debug(logMessage);
|
|
27
|
-
break;
|
|
28
|
-
case 'info':
|
|
29
|
-
console.info(logMessage);
|
|
30
|
-
break;
|
|
31
|
-
case 'warn':
|
|
32
|
-
console.warn(logMessage);
|
|
33
|
-
break;
|
|
34
|
-
case 'error':
|
|
35
|
-
console.error(logMessage);
|
|
36
|
-
break;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* File log output implementation (async)
|
|
42
|
-
*/
|
|
43
|
-
export class FileLogOutput {
|
|
44
|
-
constructor(filePath) {
|
|
45
|
-
this.filePath = filePath;
|
|
46
|
-
this.buffer = [];
|
|
47
|
-
this.flushTimeout = null;
|
|
48
|
-
this.flushInterval = 1000; // Flush every 1 second
|
|
49
|
-
}
|
|
50
|
-
async write(entry) {
|
|
51
|
-
// Format as JSON line
|
|
52
|
-
const line = JSON.stringify(entry) + '\n';
|
|
53
|
-
this.buffer.push(line);
|
|
54
|
-
// Schedule flush
|
|
55
|
-
if (!this.flushTimeout) {
|
|
56
|
-
this.flushTimeout = setTimeout(() => this.flush(), this.flushInterval);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
async flush() {
|
|
60
|
-
if (this.buffer.length === 0) {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
const lines = this.buffer.join('');
|
|
64
|
-
this.buffer = [];
|
|
65
|
-
this.flushTimeout = null;
|
|
66
|
-
try {
|
|
67
|
-
// Use Bun's file API for efficient file writing
|
|
68
|
-
const file = Bun.file(this.filePath);
|
|
69
|
-
const exists = await file.exists();
|
|
70
|
-
if (exists) {
|
|
71
|
-
// Append to existing file
|
|
72
|
-
const content = await file.text();
|
|
73
|
-
await Bun.write(this.filePath, content + lines);
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
// Create new file
|
|
77
|
-
await Bun.write(this.filePath, lines);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
catch (err) {
|
|
81
|
-
// Fallback to console on file write error
|
|
82
|
-
console.error('Failed to write log file:', err);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Main Logger class
|
|
88
|
-
*/
|
|
89
|
-
export class Logger {
|
|
90
|
-
constructor(context, config) {
|
|
91
|
-
this.context = context;
|
|
92
|
-
this.outputs = [];
|
|
93
|
-
this.minLevel = config.logging?.level || 'info';
|
|
94
|
-
this.includeTimestamps = config.logging?.includeTimestamps !== false;
|
|
95
|
-
this.includeContext = config.logging?.includeContext !== false;
|
|
96
|
-
this.sanitizeLogs = config.logging?.sanitizeLogs !== false;
|
|
97
|
-
// Set up default outputs
|
|
98
|
-
if (config.logging?.outputs && config.logging.outputs.length > 0) {
|
|
99
|
-
this.outputs = [...config.logging.outputs];
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
// Default to console output
|
|
103
|
-
this.outputs = [new ConsoleLogOutput()];
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Log a debug message
|
|
108
|
-
*/
|
|
109
|
-
debug(message, data) {
|
|
110
|
-
this.log('debug', message, data);
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Log an info message
|
|
114
|
-
*/
|
|
115
|
-
info(message, data) {
|
|
116
|
-
this.log('info', message, data);
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Log a warning message
|
|
120
|
-
*/
|
|
121
|
-
warn(message, data) {
|
|
122
|
-
this.log('warn', message, data);
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Log an error message
|
|
126
|
-
*/
|
|
127
|
-
error(message, error, data) {
|
|
128
|
-
const errorData = error ? {
|
|
129
|
-
...data,
|
|
130
|
-
error: {
|
|
131
|
-
name: error.name,
|
|
132
|
-
message: error.message,
|
|
133
|
-
stack: error.stack
|
|
134
|
-
}
|
|
135
|
-
} : data;
|
|
136
|
-
this.log('error', message, errorData);
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Start a timer for performance tracking
|
|
140
|
-
* Returns a function that stops the timer and logs the duration
|
|
141
|
-
*/
|
|
142
|
-
startTimer(operation) {
|
|
143
|
-
const startTime = performance.now();
|
|
144
|
-
return () => {
|
|
145
|
-
const duration = performance.now() - startTime;
|
|
146
|
-
this.log('debug', `${operation} completed`, undefined, duration);
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Create a child logger with nested context
|
|
151
|
-
*/
|
|
152
|
-
child(childContext) {
|
|
153
|
-
const newLogger = Object.create(Logger.prototype);
|
|
154
|
-
newLogger.context = `${this.context}:${childContext}`;
|
|
155
|
-
newLogger.outputs = this.outputs;
|
|
156
|
-
newLogger.minLevel = this.minLevel;
|
|
157
|
-
newLogger.includeTimestamps = this.includeTimestamps;
|
|
158
|
-
newLogger.includeContext = this.includeContext;
|
|
159
|
-
newLogger.sanitizeLogs = this.sanitizeLogs;
|
|
160
|
-
return newLogger;
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Set a single output (replaces existing outputs)
|
|
164
|
-
*/
|
|
165
|
-
setOutput(output) {
|
|
166
|
-
this.outputs = [output];
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Add an output to the existing outputs
|
|
170
|
-
*/
|
|
171
|
-
addOutput(output) {
|
|
172
|
-
this.outputs.push(output);
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Internal log method
|
|
176
|
-
*/
|
|
177
|
-
log(level, message, data, duration) {
|
|
178
|
-
// Check if we should log this level
|
|
179
|
-
if (Logger.LEVEL_PRIORITY[level] < Logger.LEVEL_PRIORITY[this.minLevel]) {
|
|
180
|
-
return;
|
|
181
|
-
}
|
|
182
|
-
// Sanitize data if needed
|
|
183
|
-
const sanitizedData = this.sanitizeLogs ? this.sanitize(data) : data;
|
|
184
|
-
// Create log entry
|
|
185
|
-
const entry = {
|
|
186
|
-
timestamp: this.includeTimestamps ? new Date().toISOString() : '',
|
|
187
|
-
level,
|
|
188
|
-
context: this.includeContext ? this.context : '',
|
|
189
|
-
message,
|
|
190
|
-
data: sanitizedData,
|
|
191
|
-
duration
|
|
192
|
-
};
|
|
193
|
-
// Write to all outputs (fire and forget for async outputs)
|
|
194
|
-
for (const output of this.outputs) {
|
|
195
|
-
try {
|
|
196
|
-
const result = output.write(entry);
|
|
197
|
-
// If result is a promise, don't await it (non-blocking)
|
|
198
|
-
if (result instanceof Promise) {
|
|
199
|
-
result.catch(err => {
|
|
200
|
-
// Silently fail for async outputs to avoid blocking
|
|
201
|
-
if (typeof console !== 'undefined' && console.error) {
|
|
202
|
-
console.error('Log output error:', err);
|
|
203
|
-
}
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
catch (err) {
|
|
208
|
-
// Continue even if one output fails
|
|
209
|
-
if (typeof console !== 'undefined' && console.error) {
|
|
210
|
-
console.error('Log output error:', err);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Sanitize sensitive data from logs
|
|
217
|
-
*/
|
|
218
|
-
sanitize(data) {
|
|
219
|
-
if (!data) {
|
|
220
|
-
return data;
|
|
221
|
-
}
|
|
222
|
-
// Handle arrays
|
|
223
|
-
if (Array.isArray(data)) {
|
|
224
|
-
return data.map(item => this.sanitize(item));
|
|
225
|
-
}
|
|
226
|
-
// Handle objects
|
|
227
|
-
if (typeof data === 'object') {
|
|
228
|
-
const sanitized = {};
|
|
229
|
-
for (const [key, value] of Object.entries(data)) {
|
|
230
|
-
const lowerKey = key.toLowerCase();
|
|
231
|
-
// Sanitize sensitive keys
|
|
232
|
-
if (lowerKey.includes('private') ||
|
|
233
|
-
lowerKey.includes('key') ||
|
|
234
|
-
lowerKey.includes('secret') ||
|
|
235
|
-
lowerKey.includes('password') ||
|
|
236
|
-
lowerKey.includes('token') ||
|
|
237
|
-
lowerKey.includes('credential')) {
|
|
238
|
-
sanitized[key] = '[REDACTED]';
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
241
|
-
// Recursively sanitize nested objects
|
|
242
|
-
sanitized[key] = this.sanitize(value);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
return sanitized;
|
|
246
|
-
}
|
|
247
|
-
// Return primitive values as-is
|
|
248
|
-
return data;
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
// Log level priorities
|
|
252
|
-
Logger.LEVEL_PRIORITY = {
|
|
253
|
-
debug: 0,
|
|
254
|
-
info: 1,
|
|
255
|
-
warn: 2,
|
|
256
|
-
error: 3
|
|
257
|
-
};
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Metrics Collector for Originals SDK
|
|
3
|
-
*
|
|
4
|
-
* Features:
|
|
5
|
-
* - Track operation counts and performance
|
|
6
|
-
* - Asset lifecycle metrics (created, migrated, transferred)
|
|
7
|
-
* - Error tracking by error code
|
|
8
|
-
* - Cache statistics (optional)
|
|
9
|
-
* - Export in JSON and Prometheus formats
|
|
10
|
-
* - Memory-efficient storage
|
|
11
|
-
*/
|
|
12
|
-
import type { LayerType } from '../types';
|
|
13
|
-
/**
|
|
14
|
-
* Operation-specific metrics
|
|
15
|
-
*/
|
|
16
|
-
export interface OperationMetrics {
|
|
17
|
-
count: number;
|
|
18
|
-
totalTime: number;
|
|
19
|
-
avgTime: number;
|
|
20
|
-
minTime: number;
|
|
21
|
-
maxTime: number;
|
|
22
|
-
errorCount: number;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Complete metrics snapshot
|
|
26
|
-
*/
|
|
27
|
-
export interface Metrics {
|
|
28
|
-
assetsCreated: number;
|
|
29
|
-
assetsMigrated: Record<string, number>;
|
|
30
|
-
assetsTransferred: number;
|
|
31
|
-
operationTimes: Record<string, OperationMetrics>;
|
|
32
|
-
errors: Record<string, number>;
|
|
33
|
-
cacheStats?: {
|
|
34
|
-
hits: number;
|
|
35
|
-
misses: number;
|
|
36
|
-
hitRate: number;
|
|
37
|
-
};
|
|
38
|
-
startTime: string;
|
|
39
|
-
uptime: number;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* MetricsCollector class
|
|
43
|
-
*/
|
|
44
|
-
export declare class MetricsCollector {
|
|
45
|
-
private assetsCreatedCount;
|
|
46
|
-
private assetsMigratedMap;
|
|
47
|
-
private assetsTransferredCount;
|
|
48
|
-
private operationMetrics;
|
|
49
|
-
private errorCounts;
|
|
50
|
-
private cacheHits;
|
|
51
|
-
private cacheMisses;
|
|
52
|
-
private readonly startTime;
|
|
53
|
-
constructor();
|
|
54
|
-
/**
|
|
55
|
-
* Record an operation with timing and success status
|
|
56
|
-
*/
|
|
57
|
-
recordOperation(operation: string, duration: number, success: boolean): void;
|
|
58
|
-
/**
|
|
59
|
-
* Start tracking an operation, returns completion function
|
|
60
|
-
*/
|
|
61
|
-
startOperation(operation: string): () => void;
|
|
62
|
-
/**
|
|
63
|
-
* Record an asset creation
|
|
64
|
-
*/
|
|
65
|
-
recordAssetCreated(): void;
|
|
66
|
-
/**
|
|
67
|
-
* Record an asset migration between layers
|
|
68
|
-
*/
|
|
69
|
-
recordMigration(from: LayerType, to: LayerType): void;
|
|
70
|
-
/**
|
|
71
|
-
* Record an asset transfer
|
|
72
|
-
*/
|
|
73
|
-
recordTransfer(): void;
|
|
74
|
-
/**
|
|
75
|
-
* Record an error by error code
|
|
76
|
-
*/
|
|
77
|
-
recordError(code: string, operation?: string): void;
|
|
78
|
-
/**
|
|
79
|
-
* Record a cache hit
|
|
80
|
-
*/
|
|
81
|
-
recordCacheHit(): void;
|
|
82
|
-
/**
|
|
83
|
-
* Record a cache miss
|
|
84
|
-
*/
|
|
85
|
-
recordCacheMiss(): void;
|
|
86
|
-
/**
|
|
87
|
-
* Get a snapshot of all metrics
|
|
88
|
-
*/
|
|
89
|
-
getMetrics(): Metrics;
|
|
90
|
-
/**
|
|
91
|
-
* Get metrics for a specific operation
|
|
92
|
-
*/
|
|
93
|
-
getOperationMetrics(operation: string): OperationMetrics | null;
|
|
94
|
-
/**
|
|
95
|
-
* Reset all metrics
|
|
96
|
-
*/
|
|
97
|
-
reset(): void;
|
|
98
|
-
/**
|
|
99
|
-
* Export metrics in the specified format
|
|
100
|
-
*/
|
|
101
|
-
export(format: 'json' | 'prometheus'): string;
|
|
102
|
-
/**
|
|
103
|
-
* Export metrics as JSON
|
|
104
|
-
*/
|
|
105
|
-
private exportJSON;
|
|
106
|
-
/**
|
|
107
|
-
* Export metrics in Prometheus format
|
|
108
|
-
*/
|
|
109
|
-
private exportPrometheus;
|
|
110
|
-
}
|