promidas 2.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 +179 -0
- package/dist/builder.d.ts +158 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +255 -0
- package/dist/builder.js.map +1 -0
- package/dist/factory.d.ts +154 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +243 -0
- package/dist/factory.js.map +1 -0
- package/dist/fetcher/client/config.d.ts +140 -0
- package/dist/fetcher/client/config.d.ts.map +1 -0
- package/dist/fetcher/client/config.js +2 -0
- package/dist/fetcher/client/config.js.map +1 -0
- package/dist/fetcher/client/fetch-with-progress.d.ts +156 -0
- package/dist/fetcher/client/fetch-with-progress.d.ts.map +1 -0
- package/dist/fetcher/client/fetch-with-progress.js +313 -0
- package/dist/fetcher/client/fetch-with-progress.js.map +1 -0
- package/dist/fetcher/client/fetch-with-timeout.d.ts +6 -0
- package/dist/fetcher/client/fetch-with-timeout.d.ts.map +1 -0
- package/dist/fetcher/client/fetch-with-timeout.js +48 -0
- package/dist/fetcher/client/fetch-with-timeout.js.map +1 -0
- package/dist/fetcher/client/protopedia-api-custom-client.d.ts +141 -0
- package/dist/fetcher/client/protopedia-api-custom-client.d.ts.map +1 -0
- package/dist/fetcher/client/protopedia-api-custom-client.js +268 -0
- package/dist/fetcher/client/protopedia-api-custom-client.js.map +1 -0
- package/dist/fetcher/client/select-custom-fetch.d.ts +58 -0
- package/dist/fetcher/client/select-custom-fetch.d.ts.map +1 -0
- package/dist/fetcher/client/select-custom-fetch.js +58 -0
- package/dist/fetcher/client/select-custom-fetch.js.map +1 -0
- package/dist/fetcher/errors/fetcher-error.d.ts +10 -0
- package/dist/fetcher/errors/fetcher-error.d.ts.map +1 -0
- package/dist/fetcher/errors/fetcher-error.js +15 -0
- package/dist/fetcher/errors/fetcher-error.js.map +1 -0
- package/dist/fetcher/index.d.ts +73 -0
- package/dist/fetcher/index.d.ts.map +1 -0
- package/dist/fetcher/index.js +70 -0
- package/dist/fetcher/index.js.map +1 -0
- package/dist/fetcher/types/index.d.ts +9 -0
- package/dist/fetcher/types/index.d.ts.map +1 -0
- package/dist/fetcher/types/index.js +7 -0
- package/dist/fetcher/types/index.js.map +1 -0
- package/dist/fetcher/types/progress-event.types.d.ts +221 -0
- package/dist/fetcher/types/progress-event.types.d.ts.map +1 -0
- package/dist/fetcher/types/progress-event.types.js +10 -0
- package/dist/fetcher/types/progress-event.types.js.map +1 -0
- package/dist/fetcher/types/prototype-api.types.d.ts +106 -0
- package/dist/fetcher/types/prototype-api.types.d.ts.map +1 -0
- package/dist/fetcher/types/prototype-api.types.js +2 -0
- package/dist/fetcher/types/prototype-api.types.js.map +1 -0
- package/dist/fetcher/types/result.types.d.ts +75 -0
- package/dist/fetcher/types/result.types.d.ts.map +1 -0
- package/dist/fetcher/types/result.types.js +2 -0
- package/dist/fetcher/types/result.types.js.map +1 -0
- package/dist/fetcher/utils/create-client-fetch.d.ts +63 -0
- package/dist/fetcher/utils/create-client-fetch.d.ts.map +1 -0
- package/dist/fetcher/utils/create-client-fetch.js +89 -0
- package/dist/fetcher/utils/create-client-fetch.js.map +1 -0
- package/dist/fetcher/utils/create-fetch-with-stripped-headers.d.ts +6 -0
- package/dist/fetcher/utils/create-fetch-with-stripped-headers.d.ts.map +1 -0
- package/dist/fetcher/utils/create-fetch-with-stripped-headers.js +40 -0
- package/dist/fetcher/utils/create-fetch-with-stripped-headers.js.map +1 -0
- package/dist/fetcher/utils/errors/handler.d.ts +58 -0
- package/dist/fetcher/utils/errors/handler.d.ts.map +1 -0
- package/dist/fetcher/utils/errors/handler.js +243 -0
- package/dist/fetcher/utils/errors/handler.js.map +1 -0
- package/dist/fetcher/utils/errors/messages.d.ts +75 -0
- package/dist/fetcher/utils/errors/messages.d.ts.map +1 -0
- package/dist/fetcher/utils/errors/messages.js +88 -0
- package/dist/fetcher/utils/errors/messages.js.map +1 -0
- package/dist/fetcher/utils/index.d.ts +13 -0
- package/dist/fetcher/utils/index.d.ts.map +1 -0
- package/dist/fetcher/utils/index.js +12 -0
- package/dist/fetcher/utils/index.js.map +1 -0
- package/dist/fetcher/utils/log-timestamp-normalization-warnings.d.ts +10 -0
- package/dist/fetcher/utils/log-timestamp-normalization-warnings.d.ts.map +1 -0
- package/dist/fetcher/utils/log-timestamp-normalization-warnings.js +32 -0
- package/dist/fetcher/utils/log-timestamp-normalization-warnings.js.map +1 -0
- package/dist/fetcher/utils/normalize-protopedia-timestamp.d.ts +59 -0
- package/dist/fetcher/utils/normalize-protopedia-timestamp.d.ts.map +1 -0
- package/dist/fetcher/utils/normalize-protopedia-timestamp.js +81 -0
- package/dist/fetcher/utils/normalize-protopedia-timestamp.js.map +1 -0
- package/dist/fetcher/utils/normalize-prototype.d.ts +56 -0
- package/dist/fetcher/utils/normalize-prototype.d.ts.map +1 -0
- package/dist/fetcher/utils/normalize-prototype.js +113 -0
- package/dist/fetcher/utils/normalize-prototype.js.map +1 -0
- package/dist/fetcher/utils/sanitize-options.d.ts +14 -0
- package/dist/fetcher/utils/sanitize-options.d.ts.map +1 -0
- package/dist/fetcher/utils/sanitize-options.js +16 -0
- package/dist/fetcher/utils/sanitize-options.js.map +1 -0
- package/dist/fetcher/utils/string-parsers.d.ts +45 -0
- package/dist/fetcher/utils/string-parsers.d.ts.map +1 -0
- package/dist/fetcher/utils/string-parsers.js +53 -0
- package/dist/fetcher/utils/string-parsers.js.map +1 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +70 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/console-logger.d.ts +74 -0
- package/dist/logger/console-logger.d.ts.map +1 -0
- package/dist/logger/console-logger.js +113 -0
- package/dist/logger/console-logger.js.map +1 -0
- package/dist/logger/factory.d.ts +88 -0
- package/dist/logger/factory.d.ts.map +1 -0
- package/dist/logger/factory.js +94 -0
- package/dist/logger/factory.js.map +1 -0
- package/dist/logger/index.d.ts +42 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +41 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/logger/logger.types.d.ts +49 -0
- package/dist/logger/logger.types.d.ts.map +1 -0
- package/dist/logger/logger.types.js +2 -0
- package/dist/logger/logger.types.js.map +1 -0
- package/dist/repository/errors/validation-error.d.ts +24 -0
- package/dist/repository/errors/validation-error.d.ts.map +1 -0
- package/dist/repository/errors/validation-error.js +26 -0
- package/dist/repository/errors/validation-error.js.map +1 -0
- package/dist/repository/index.d.ts +122 -0
- package/dist/repository/index.d.ts.map +1 -0
- package/dist/repository/index.js +44 -0
- package/dist/repository/index.js.map +1 -0
- package/dist/repository/protopedia-in-memory-repository.d.ts +560 -0
- package/dist/repository/protopedia-in-memory-repository.d.ts.map +1 -0
- package/dist/repository/protopedia-in-memory-repository.js +929 -0
- package/dist/repository/protopedia-in-memory-repository.js.map +1 -0
- package/dist/repository/schemas/index.d.ts +9 -0
- package/dist/repository/schemas/index.d.ts.map +1 -0
- package/dist/repository/schemas/index.js +11 -0
- package/dist/repository/schemas/index.js.map +1 -0
- package/dist/repository/schemas/params.d.ts +44 -0
- package/dist/repository/schemas/params.d.ts.map +1 -0
- package/dist/repository/schemas/params.js +44 -0
- package/dist/repository/schemas/params.js.map +1 -0
- package/dist/repository/schemas/serializable-snapshot.d.ts +33 -0
- package/dist/repository/schemas/serializable-snapshot.d.ts.map +1 -0
- package/dist/repository/schemas/serializable-snapshot.js +45 -0
- package/dist/repository/schemas/serializable-snapshot.js.map +1 -0
- package/dist/repository/types/analysis.types.d.ts +89 -0
- package/dist/repository/types/analysis.types.d.ts.map +1 -0
- package/dist/repository/types/analysis.types.js +2 -0
- package/dist/repository/types/analysis.types.js.map +1 -0
- package/dist/repository/types/index.d.ts +12 -0
- package/dist/repository/types/index.d.ts.map +1 -0
- package/dist/repository/types/index.js +7 -0
- package/dist/repository/types/index.js.map +1 -0
- package/dist/repository/types/repository-events.types.d.ts +110 -0
- package/dist/repository/types/repository-events.types.d.ts.map +1 -0
- package/dist/repository/types/repository-events.types.js +2 -0
- package/dist/repository/types/repository-events.types.js.map +1 -0
- package/dist/repository/types/repository.types.d.ts +330 -0
- package/dist/repository/types/repository.types.d.ts.map +1 -0
- package/dist/repository/types/repository.types.js +2 -0
- package/dist/repository/types/repository.types.js.map +1 -0
- package/dist/repository/types/result.types.d.ts +55 -0
- package/dist/repository/types/result.types.d.ts.map +1 -0
- package/dist/repository/types/result.types.js +2 -0
- package/dist/repository/types/result.types.js.map +1 -0
- package/dist/repository/types/serialization.types.d.ts +61 -0
- package/dist/repository/types/serialization.types.d.ts.map +1 -0
- package/dist/repository/types/serialization.types.js +2 -0
- package/dist/repository/types/serialization.types.js.map +1 -0
- package/dist/repository/types/snapshot-operation.types.d.ts +140 -0
- package/dist/repository/types/snapshot-operation.types.d.ts.map +1 -0
- package/dist/repository/types/snapshot-operation.types.js +2 -0
- package/dist/repository/types/snapshot-operation.types.js.map +1 -0
- package/dist/repository/utils/convert-fetch-result.d.ts +46 -0
- package/dist/repository/utils/convert-fetch-result.d.ts.map +1 -0
- package/dist/repository/utils/convert-fetch-result.js +59 -0
- package/dist/repository/utils/convert-fetch-result.js.map +1 -0
- package/dist/repository/utils/convert-store-result.d.ts +36 -0
- package/dist/repository/utils/convert-store-result.d.ts.map +1 -0
- package/dist/repository/utils/convert-store-result.js +36 -0
- package/dist/repository/utils/convert-store-result.js.map +1 -0
- package/dist/repository/utils/emit-repository-event-safely.d.ts +5 -0
- package/dist/repository/utils/emit-repository-event-safely.d.ts.map +1 -0
- package/dist/repository/utils/emit-repository-event-safely.js +17 -0
- package/dist/repository/utils/emit-repository-event-safely.js.map +1 -0
- package/dist/repository/utils/index.d.ts +3 -0
- package/dist/repository/utils/index.d.ts.map +1 -0
- package/dist/repository/utils/index.js +3 -0
- package/dist/repository/utils/index.js.map +1 -0
- package/dist/repository/validation/index.d.ts +9 -0
- package/dist/repository/validation/index.d.ts.map +1 -0
- package/dist/repository/validation/index.js +10 -0
- package/dist/repository/validation/index.js.map +1 -0
- package/dist/repository/validation/params-validators.d.ts +46 -0
- package/dist/repository/validation/params-validators.d.ts.map +1 -0
- package/dist/repository/validation/params-validators.js +68 -0
- package/dist/repository/validation/params-validators.js.map +1 -0
- package/dist/repository/validation/serializable-snapshot.d.ts +47 -0
- package/dist/repository/validation/serializable-snapshot.d.ts.map +1 -0
- package/dist/repository/validation/serializable-snapshot.js +104 -0
- package/dist/repository/validation/serializable-snapshot.js.map +1 -0
- package/dist/schemas/index.d.ts +8 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +8 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/normalized-prototype.d.ts +56 -0
- package/dist/schemas/normalized-prototype.d.ts.map +1 -0
- package/dist/schemas/normalized-prototype.js +123 -0
- package/dist/schemas/normalized-prototype.js.map +1 -0
- package/dist/store/errors/store-error.d.ts +148 -0
- package/dist/store/errors/store-error.d.ts.map +1 -0
- package/dist/store/errors/store-error.js +156 -0
- package/dist/store/errors/store-error.js.map +1 -0
- package/dist/store/index.d.ts +84 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +83 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/store.d.ts +295 -0
- package/dist/store/store.d.ts.map +1 -0
- package/dist/store/store.js +411 -0
- package/dist/store/store.js.map +1 -0
- package/dist/store/types/index.d.ts +2 -0
- package/dist/store/types/index.d.ts.map +1 -0
- package/dist/store/types/index.js +2 -0
- package/dist/store/types/index.js.map +1 -0
- package/dist/store/types/result.types.d.ts +67 -0
- package/dist/store/types/result.types.d.ts.map +1 -0
- package/dist/store/types/result.types.js +2 -0
- package/dist/store/types/result.types.js.map +1 -0
- package/dist/types/codes.d.ts +44 -0
- package/dist/types/codes.d.ts.map +1 -0
- package/dist/types/codes.js +9 -0
- package/dist/types/codes.js.map +1 -0
- package/dist/types/index.d.ts +61 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +60 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/normalized-prototype.d.ts +95 -0
- package/dist/types/normalized-prototype.d.ts.map +1 -0
- package/dist/types/normalized-prototype.js +2 -0
- package/dist/types/normalized-prototype.js.map +1 -0
- package/dist/utils/converters/index.d.ts +15 -0
- package/dist/utils/converters/index.d.ts.map +1 -0
- package/dist/utils/converters/index.js +15 -0
- package/dist/utils/converters/index.js.map +1 -0
- package/dist/utils/converters/license-type.d.ts +23 -0
- package/dist/utils/converters/license-type.d.ts.map +1 -0
- package/dist/utils/converters/license-type.js +38 -0
- package/dist/utils/converters/license-type.js.map +1 -0
- package/dist/utils/converters/release-flag.d.ts +24 -0
- package/dist/utils/converters/release-flag.d.ts.map +1 -0
- package/dist/utils/converters/release-flag.js +40 -0
- package/dist/utils/converters/release-flag.js.map +1 -0
- package/dist/utils/converters/status.d.ts +23 -0
- package/dist/utils/converters/status.d.ts.map +1 -0
- package/dist/utils/converters/status.js +40 -0
- package/dist/utils/converters/status.js.map +1 -0
- package/dist/utils/converters/thanks-flag.d.ts +25 -0
- package/dist/utils/converters/thanks-flag.d.ts.map +1 -0
- package/dist/utils/converters/thanks-flag.js +41 -0
- package/dist/utils/converters/thanks-flag.js.map +1 -0
- package/dist/utils/deep-merge.d.ts +38 -0
- package/dist/utils/deep-merge.d.ts.map +1 -0
- package/dist/utils/deep-merge.js +85 -0
- package/dist/utils/deep-merge.js.map +1 -0
- package/dist/utils/index.d.ts +80 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +85 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger-utils.d.ts +100 -0
- package/dist/utils/logger-utils.d.ts.map +1 -0
- package/dist/utils/logger-utils.js +265 -0
- package/dist/utils/logger-utils.js.map +1 -0
- package/dist/utils/time/constants.d.ts +14 -0
- package/dist/utils/time/constants.d.ts.map +1 -0
- package/dist/utils/time/constants.js +14 -0
- package/dist/utils/time/constants.js.map +1 -0
- package/dist/utils/time/index.d.ts +28 -0
- package/dist/utils/time/index.d.ts.map +1 -0
- package/dist/utils/time/index.js +28 -0
- package/dist/utils/time/index.js.map +1 -0
- package/dist/utils/time/parser.d.ts +91 -0
- package/dist/utils/time/parser.d.ts.map +1 -0
- package/dist/utils/time/parser.js +143 -0
- package/dist/utils/time/parser.js.map +1 -0
- package/dist/utils/validation/index.d.ts +8 -0
- package/dist/utils/validation/index.d.ts.map +1 -0
- package/dist/utils/validation/index.js +7 -0
- package/dist/utils/validation/index.js.map +1 -0
- package/dist/utils/validation/normalized-prototype.d.ts +64 -0
- package/dist/utils/validation/normalized-prototype.d.ts.map +1 -0
- package/dist/utils/validation/normalized-prototype.js +97 -0
- package/dist/utils/validation/normalized-prototype.js.map +1 -0
- package/dist/utils/validation/types.d.ts +62 -0
- package/dist/utils/validation/types.d.ts.map +1 -0
- package/dist/utils/validation/types.js +8 -0
- package/dist/utils/validation/types.js.map +1 -0
- package/dist/version.d.ts +6 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/package.json +138 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory functions for creating {@link ProtopediaInMemoryRepository} instances.
|
|
3
|
+
*
|
|
4
|
+
* This module provides convenience factory functions that simplify the setup
|
|
5
|
+
* of ProtopediaInMemoryRepository for common use cases.
|
|
6
|
+
*
|
|
7
|
+
* ## About This Implementation
|
|
8
|
+
*
|
|
9
|
+
* These factory functions serve as **sample implementations** and are intentionally
|
|
10
|
+
* verbose to demonstrate the pattern. Users are encouraged to create their own
|
|
11
|
+
* custom factory functions optimized for their specific use cases.
|
|
12
|
+
*
|
|
13
|
+
* The current implementations are simple wrappers around {@link PromidasRepositoryBuilder},
|
|
14
|
+
* but can be extended with environment-specific defaults (e.g., different TTL values,
|
|
15
|
+
* log levels, or API client configurations).
|
|
16
|
+
*
|
|
17
|
+
* @example Creating a custom factory
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import { PromidasRepositoryBuilder } from 'promidas';
|
|
20
|
+
* import type { ProtopediaInMemoryRepository } from 'promidas';
|
|
21
|
+
*
|
|
22
|
+
* export function createMyCustomRepository(): ProtopediaInMemoryRepository {
|
|
23
|
+
* return new PromidasRepositoryBuilder()
|
|
24
|
+
* .setStoreConfig({ ttlMs: 60 * 60 * 1000, logLevel: 'warn' }) // 1 hour TTL
|
|
25
|
+
* .build();
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @module
|
|
30
|
+
*/
|
|
31
|
+
import type { LogLevel } from './logger/index.js';
|
|
32
|
+
import type { ProtopediaInMemoryRepository } from './repository/types/index.js';
|
|
33
|
+
/**
|
|
34
|
+
* Creates a PromidasRepository instance optimized for local execution environments.
|
|
35
|
+
*
|
|
36
|
+
* This factory function is designed for personal computers, local scripts,
|
|
37
|
+
* and development environments where the TOKEN can be safely stored.
|
|
38
|
+
*
|
|
39
|
+
* ## Pre-configured Settings
|
|
40
|
+
*
|
|
41
|
+
* This function automatically configures the following settings:
|
|
42
|
+
*
|
|
43
|
+
* **Logger:**
|
|
44
|
+
* - Log Level: `'info'` (records normal operations for development monitoring)
|
|
45
|
+
*
|
|
46
|
+
* **Store:**
|
|
47
|
+
* - TTL: 30 minutes (1,800,000 ms)
|
|
48
|
+
* - Max Data Size: 30 MiB (hard limit)
|
|
49
|
+
*
|
|
50
|
+
* **API Client:**
|
|
51
|
+
* - Timeout: 90 seconds (accommodates 1-2 Mbps connections)
|
|
52
|
+
* - User-Agent: `PromidasForLocal/{version}`
|
|
53
|
+
*
|
|
54
|
+
* ## Use Cases
|
|
55
|
+
*
|
|
56
|
+
* - Local development and testing
|
|
57
|
+
* - Command-line scripts
|
|
58
|
+
* - Personal automation tools
|
|
59
|
+
* - Data analysis scripts
|
|
60
|
+
*
|
|
61
|
+
* @param config - Configuration options
|
|
62
|
+
* @param config.protopediaApiToken - ProtoPedia API v2 token
|
|
63
|
+
* @param config.logLevel - Log level for all components (optional, default: 'info')
|
|
64
|
+
* @returns A configured PromidasRepository instance
|
|
65
|
+
*
|
|
66
|
+
* @example Basic usage
|
|
67
|
+
* ```typescript
|
|
68
|
+
* import { createPromidasForLocal } from "promidas";
|
|
69
|
+
*
|
|
70
|
+
* const repository = createPromidasForLocal({
|
|
71
|
+
* protopediaApiToken: 'your-api-token',
|
|
72
|
+
* });
|
|
73
|
+
*
|
|
74
|
+
* // Setup snapshot with 100 prototypes
|
|
75
|
+
* await repository.setupSnapshot({ limit: 100 });
|
|
76
|
+
*
|
|
77
|
+
* // Get random prototype
|
|
78
|
+
* const prototype = await repository.getRandomPrototypeFromSnapshot();
|
|
79
|
+
* console.log(prototype?.prototypeNm);
|
|
80
|
+
* ```
|
|
81
|
+
*
|
|
82
|
+
* @example With custom log level
|
|
83
|
+
* ```typescript
|
|
84
|
+
* const repository = createPromidasForLocal({
|
|
85
|
+
* protopediaApiToken: process.env.PROTOPEDIA_API_V2_TOKEN!,
|
|
86
|
+
* logLevel: 'warn', // Only show warnings and errors
|
|
87
|
+
* });
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
export declare function createPromidasForLocal(config: {
|
|
91
|
+
protopediaApiToken: string;
|
|
92
|
+
logLevel?: LogLevel;
|
|
93
|
+
}): ProtopediaInMemoryRepository;
|
|
94
|
+
/**
|
|
95
|
+
* Creates a PromidasRepository instance optimized for server backend environments.
|
|
96
|
+
*
|
|
97
|
+
* This factory function is designed for Node.js server applications
|
|
98
|
+
* where the TOKEN is managed securely via environment variables.
|
|
99
|
+
*
|
|
100
|
+
* ## Pre-configured Settings
|
|
101
|
+
*
|
|
102
|
+
* This function automatically configures the following settings:
|
|
103
|
+
*
|
|
104
|
+
* **Environment Variable:**
|
|
105
|
+
* - Token Source: `PROTOPEDIA_API_V2_TOKEN` (required)
|
|
106
|
+
*
|
|
107
|
+
* **Logger:**
|
|
108
|
+
* - Log Level: `'warn'` (production-ready, warnings and errors only)
|
|
109
|
+
*
|
|
110
|
+
* **Store:**
|
|
111
|
+
* - TTL: 10 minutes (600,000 ms)
|
|
112
|
+
* - Max Data Size: 30 MiB (hard limit)
|
|
113
|
+
*
|
|
114
|
+
* **API Client:**
|
|
115
|
+
* - Timeout: 30 seconds (server-grade connection)
|
|
116
|
+
* - User-Agent: `PromidasForServer/{version}`
|
|
117
|
+
*
|
|
118
|
+
* ## Use Cases
|
|
119
|
+
*
|
|
120
|
+
* - REST API servers
|
|
121
|
+
* - Background job processors
|
|
122
|
+
* - Serverless functions (AWS Lambda, Cloud Functions)
|
|
123
|
+
* - Microservices
|
|
124
|
+
*
|
|
125
|
+
* @param config - Configuration options
|
|
126
|
+
* @param config.logLevel - Log level for all components (optional, default: 'warn')
|
|
127
|
+
* @returns A configured PromidasRepository instance
|
|
128
|
+
* @throws {Error} If PROTOPEDIA_API_V2_TOKEN environment variable is not set
|
|
129
|
+
*
|
|
130
|
+
* @example Basic usage
|
|
131
|
+
* ```typescript
|
|
132
|
+
* import { createPromidasForServer } from "promidas";
|
|
133
|
+
*
|
|
134
|
+
* // TOKEN is read from PROTOPEDIA_API_V2_TOKEN environment variable
|
|
135
|
+
* const repository = createPromidasForServer();
|
|
136
|
+
*
|
|
137
|
+
* // Setup snapshot with 1000 prototypes
|
|
138
|
+
* await repository.setupSnapshot({ limit: 1000 });
|
|
139
|
+
*
|
|
140
|
+
* // Get prototype by ID
|
|
141
|
+
* const prototype = await repository.getPrototypeFromSnapshotByPrototypeId(123);
|
|
142
|
+
* ```
|
|
143
|
+
*
|
|
144
|
+
* @example With custom log level
|
|
145
|
+
* ```typescript
|
|
146
|
+
* const repository = createPromidasForServer({
|
|
147
|
+
* logLevel: 'error', // Only show errors in production
|
|
148
|
+
* });
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
export declare function createPromidasForServer(config?: {
|
|
152
|
+
logLevel?: LogLevel;
|
|
153
|
+
}): ProtopediaInMemoryRepository;
|
|
154
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../lib/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EACV,4BAA4B,EAE7B,MAAM,6BAA6B,CAAC;AAKrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,GAAG,4BAA4B,CAqD/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,CAAC,EAAE;IAC/C,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,GAAG,4BAA4B,CAsD/B"}
|
package/dist/factory.js
ADDED
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory functions for creating {@link ProtopediaInMemoryRepository} instances.
|
|
3
|
+
*
|
|
4
|
+
* This module provides convenience factory functions that simplify the setup
|
|
5
|
+
* of ProtopediaInMemoryRepository for common use cases.
|
|
6
|
+
*
|
|
7
|
+
* ## About This Implementation
|
|
8
|
+
*
|
|
9
|
+
* These factory functions serve as **sample implementations** and are intentionally
|
|
10
|
+
* verbose to demonstrate the pattern. Users are encouraged to create their own
|
|
11
|
+
* custom factory functions optimized for their specific use cases.
|
|
12
|
+
*
|
|
13
|
+
* The current implementations are simple wrappers around {@link PromidasRepositoryBuilder},
|
|
14
|
+
* but can be extended with environment-specific defaults (e.g., different TTL values,
|
|
15
|
+
* log levels, or API client configurations).
|
|
16
|
+
*
|
|
17
|
+
* @example Creating a custom factory
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import { PromidasRepositoryBuilder } from 'promidas';
|
|
20
|
+
* import type { ProtopediaInMemoryRepository } from 'promidas';
|
|
21
|
+
*
|
|
22
|
+
* export function createMyCustomRepository(): ProtopediaInMemoryRepository {
|
|
23
|
+
* return new PromidasRepositoryBuilder()
|
|
24
|
+
* .setStoreConfig({ ttlMs: 60 * 60 * 1000, logLevel: 'warn' }) // 1 hour TTL
|
|
25
|
+
* .build();
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @module
|
|
30
|
+
*/
|
|
31
|
+
import { PromidasRepositoryBuilder } from './builder.js';
|
|
32
|
+
import { ConsoleLogger } from './logger/console-logger.js';
|
|
33
|
+
import { LIMIT_DATA_SIZE_BYTES as STORE_MAX_DATA_SIZE_BYTES_LIMIT } from './store/index.js';
|
|
34
|
+
import { VERSION } from './version.js';
|
|
35
|
+
/**
|
|
36
|
+
* Creates a PromidasRepository instance optimized for local execution environments.
|
|
37
|
+
*
|
|
38
|
+
* This factory function is designed for personal computers, local scripts,
|
|
39
|
+
* and development environments where the TOKEN can be safely stored.
|
|
40
|
+
*
|
|
41
|
+
* ## Pre-configured Settings
|
|
42
|
+
*
|
|
43
|
+
* This function automatically configures the following settings:
|
|
44
|
+
*
|
|
45
|
+
* **Logger:**
|
|
46
|
+
* - Log Level: `'info'` (records normal operations for development monitoring)
|
|
47
|
+
*
|
|
48
|
+
* **Store:**
|
|
49
|
+
* - TTL: 30 minutes (1,800,000 ms)
|
|
50
|
+
* - Max Data Size: 30 MiB (hard limit)
|
|
51
|
+
*
|
|
52
|
+
* **API Client:**
|
|
53
|
+
* - Timeout: 90 seconds (accommodates 1-2 Mbps connections)
|
|
54
|
+
* - User-Agent: `PromidasForLocal/{version}`
|
|
55
|
+
*
|
|
56
|
+
* ## Use Cases
|
|
57
|
+
*
|
|
58
|
+
* - Local development and testing
|
|
59
|
+
* - Command-line scripts
|
|
60
|
+
* - Personal automation tools
|
|
61
|
+
* - Data analysis scripts
|
|
62
|
+
*
|
|
63
|
+
* @param config - Configuration options
|
|
64
|
+
* @param config.protopediaApiToken - ProtoPedia API v2 token
|
|
65
|
+
* @param config.logLevel - Log level for all components (optional, default: 'info')
|
|
66
|
+
* @returns A configured PromidasRepository instance
|
|
67
|
+
*
|
|
68
|
+
* @example Basic usage
|
|
69
|
+
* ```typescript
|
|
70
|
+
* import { createPromidasForLocal } from "promidas";
|
|
71
|
+
*
|
|
72
|
+
* const repository = createPromidasForLocal({
|
|
73
|
+
* protopediaApiToken: 'your-api-token',
|
|
74
|
+
* });
|
|
75
|
+
*
|
|
76
|
+
* // Setup snapshot with 100 prototypes
|
|
77
|
+
* await repository.setupSnapshot({ limit: 100 });
|
|
78
|
+
*
|
|
79
|
+
* // Get random prototype
|
|
80
|
+
* const prototype = await repository.getRandomPrototypeFromSnapshot();
|
|
81
|
+
* console.log(prototype?.prototypeNm);
|
|
82
|
+
* ```
|
|
83
|
+
*
|
|
84
|
+
* @example With custom log level
|
|
85
|
+
* ```typescript
|
|
86
|
+
* const repository = createPromidasForLocal({
|
|
87
|
+
* protopediaApiToken: process.env.PROTOPEDIA_API_V2_TOKEN!,
|
|
88
|
+
* logLevel: 'warn', // Only show warnings and errors
|
|
89
|
+
* });
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export function createPromidasForLocal(config) {
|
|
93
|
+
// Create a builder instance
|
|
94
|
+
const builder = new PromidasRepositoryBuilder();
|
|
95
|
+
// Determine log level
|
|
96
|
+
// Note: 'info' level records normal operations for development monitoring
|
|
97
|
+
const logLevel = config.logLevel ?? 'info';
|
|
98
|
+
// Create a shared logger instance for memory efficiency
|
|
99
|
+
//
|
|
100
|
+
// Design Decision: We create one ConsoleLogger and share it across all components
|
|
101
|
+
// instead of passing logLevel to each component's config. This reduces memory
|
|
102
|
+
// footprint and ensures consistent logging behavior across the repository.
|
|
103
|
+
const logger = new ConsoleLogger(logLevel);
|
|
104
|
+
// Configure store with default TTL for local development
|
|
105
|
+
const storeConfig = {
|
|
106
|
+
ttlMs: 30 * 60 * 1000, // 30 minutes
|
|
107
|
+
maxDataSizeBytes: STORE_MAX_DATA_SIZE_BYTES_LIMIT, // 30 MiB
|
|
108
|
+
logger, // Shared logger - logLevel is NOT set because logger already contains it
|
|
109
|
+
};
|
|
110
|
+
builder.setStoreConfig(storeConfig);
|
|
111
|
+
// Configure API client wrapper
|
|
112
|
+
const apiClientConfig = {
|
|
113
|
+
protoPediaApiClientOptions: {
|
|
114
|
+
token: config.protopediaApiToken,
|
|
115
|
+
// Timeout for API requests (SDK default: 15000ms = 15s)
|
|
116
|
+
// Reference: 20MB download time by connection speed:
|
|
117
|
+
// - 10 Mbps: ~16s
|
|
118
|
+
// - 5 Mbps: ~32s
|
|
119
|
+
// - 1 Mbps: ~160s (2m40s)
|
|
120
|
+
// - 0.5 Mbps: ~320s (5m20s)
|
|
121
|
+
timeoutMs: 90 * 1_000, // 90 seconds (accommodates 1-2 Mbps)
|
|
122
|
+
userAgent: `PromidasForLocal/${VERSION}`,
|
|
123
|
+
// Ensure SDK-level network logs are controlled consistently.
|
|
124
|
+
// Note: The SDK logger interface is compatible with promidas logger.
|
|
125
|
+
logger,
|
|
126
|
+
logLevel,
|
|
127
|
+
},
|
|
128
|
+
logger, // Shared logger - logLevel is NOT set because logger already contains it
|
|
129
|
+
progressLog: true,
|
|
130
|
+
};
|
|
131
|
+
builder.setApiClientConfig(apiClientConfig);
|
|
132
|
+
// Configure repository
|
|
133
|
+
const repositoryConfig = {
|
|
134
|
+
logger, // Shared logger - logLevel is NOT set because logger already contains it
|
|
135
|
+
};
|
|
136
|
+
builder.setRepositoryConfig(repositoryConfig);
|
|
137
|
+
// Build and return the repository instance
|
|
138
|
+
return builder.build();
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Creates a PromidasRepository instance optimized for server backend environments.
|
|
142
|
+
*
|
|
143
|
+
* This factory function is designed for Node.js server applications
|
|
144
|
+
* where the TOKEN is managed securely via environment variables.
|
|
145
|
+
*
|
|
146
|
+
* ## Pre-configured Settings
|
|
147
|
+
*
|
|
148
|
+
* This function automatically configures the following settings:
|
|
149
|
+
*
|
|
150
|
+
* **Environment Variable:**
|
|
151
|
+
* - Token Source: `PROTOPEDIA_API_V2_TOKEN` (required)
|
|
152
|
+
*
|
|
153
|
+
* **Logger:**
|
|
154
|
+
* - Log Level: `'warn'` (production-ready, warnings and errors only)
|
|
155
|
+
*
|
|
156
|
+
* **Store:**
|
|
157
|
+
* - TTL: 10 minutes (600,000 ms)
|
|
158
|
+
* - Max Data Size: 30 MiB (hard limit)
|
|
159
|
+
*
|
|
160
|
+
* **API Client:**
|
|
161
|
+
* - Timeout: 30 seconds (server-grade connection)
|
|
162
|
+
* - User-Agent: `PromidasForServer/{version}`
|
|
163
|
+
*
|
|
164
|
+
* ## Use Cases
|
|
165
|
+
*
|
|
166
|
+
* - REST API servers
|
|
167
|
+
* - Background job processors
|
|
168
|
+
* - Serverless functions (AWS Lambda, Cloud Functions)
|
|
169
|
+
* - Microservices
|
|
170
|
+
*
|
|
171
|
+
* @param config - Configuration options
|
|
172
|
+
* @param config.logLevel - Log level for all components (optional, default: 'warn')
|
|
173
|
+
* @returns A configured PromidasRepository instance
|
|
174
|
+
* @throws {Error} If PROTOPEDIA_API_V2_TOKEN environment variable is not set
|
|
175
|
+
*
|
|
176
|
+
* @example Basic usage
|
|
177
|
+
* ```typescript
|
|
178
|
+
* import { createPromidasForServer } from "promidas";
|
|
179
|
+
*
|
|
180
|
+
* // TOKEN is read from PROTOPEDIA_API_V2_TOKEN environment variable
|
|
181
|
+
* const repository = createPromidasForServer();
|
|
182
|
+
*
|
|
183
|
+
* // Setup snapshot with 1000 prototypes
|
|
184
|
+
* await repository.setupSnapshot({ limit: 1000 });
|
|
185
|
+
*
|
|
186
|
+
* // Get prototype by ID
|
|
187
|
+
* const prototype = await repository.getPrototypeFromSnapshotByPrototypeId(123);
|
|
188
|
+
* ```
|
|
189
|
+
*
|
|
190
|
+
* @example With custom log level
|
|
191
|
+
* ```typescript
|
|
192
|
+
* const repository = createPromidasForServer({
|
|
193
|
+
* logLevel: 'error', // Only show errors in production
|
|
194
|
+
* });
|
|
195
|
+
* ```
|
|
196
|
+
*/
|
|
197
|
+
export function createPromidasForServer(config) {
|
|
198
|
+
// Read TOKEN from environment variable
|
|
199
|
+
const protopediaApiToken = process.env.PROTOPEDIA_API_V2_TOKEN;
|
|
200
|
+
if (!protopediaApiToken) {
|
|
201
|
+
throw new Error('PROTOPEDIA_API_V2_TOKEN environment variable is required for server environments');
|
|
202
|
+
}
|
|
203
|
+
// Create a builder instance
|
|
204
|
+
const builder = new PromidasRepositoryBuilder();
|
|
205
|
+
// Determine log level for server environment
|
|
206
|
+
// Note: 'warn' level is recommended for server environments to reduce log volume
|
|
207
|
+
const logLevel = config?.logLevel ?? 'warn';
|
|
208
|
+
// Create a shared logger instance for memory efficiency
|
|
209
|
+
//
|
|
210
|
+
// Design Decision: We create one ConsoleLogger and share it across all components
|
|
211
|
+
// instead of passing logLevel to each component's config. This reduces memory
|
|
212
|
+
// footprint and ensures consistent logging behavior across the repository.
|
|
213
|
+
const logger = new ConsoleLogger(logLevel);
|
|
214
|
+
// Configure store for server environments (shorter TTL for memory efficiency)
|
|
215
|
+
const storeConfig = {
|
|
216
|
+
ttlMs: 10 * 60 * 1000, // 10 minutes
|
|
217
|
+
maxDataSizeBytes: STORE_MAX_DATA_SIZE_BYTES_LIMIT, // 30 MiB
|
|
218
|
+
logger, // Shared logger - logLevel is NOT set because logger already contains it
|
|
219
|
+
};
|
|
220
|
+
builder.setStoreConfig(storeConfig);
|
|
221
|
+
// Configure API client for server environments (stable, high-speed connections)
|
|
222
|
+
const apiClientConfig = {
|
|
223
|
+
protoPediaApiClientOptions: {
|
|
224
|
+
token: protopediaApiToken,
|
|
225
|
+
timeoutMs: 30 * 1_000, // 30 seconds
|
|
226
|
+
userAgent: `PromidasForServer/${VERSION}`,
|
|
227
|
+
// Ensure SDK-level network logs are controlled consistently.
|
|
228
|
+
logger,
|
|
229
|
+
logLevel,
|
|
230
|
+
},
|
|
231
|
+
logger, // Shared logger - logLevel is NOT set because logger already contains it
|
|
232
|
+
progressLog: true,
|
|
233
|
+
};
|
|
234
|
+
builder.setApiClientConfig(apiClientConfig);
|
|
235
|
+
// Configure repository
|
|
236
|
+
const repositoryConfig = {
|
|
237
|
+
logger, // Shared logger - logLevel is NOT set because logger already contains it
|
|
238
|
+
};
|
|
239
|
+
builder.setRepositoryConfig(repositoryConfig);
|
|
240
|
+
// Build and return the repository instance
|
|
241
|
+
return builder.build();
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../lib/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAM3D,OAAO,EAAE,qBAAqB,IAAI,+BAA+B,EAAE,MAAM,kBAAkB,CAAC;AAE5F,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAGtC;IACC,4BAA4B;IAC5B,MAAM,OAAO,GAAG,IAAI,yBAAyB,EAAE,CAAC;IAEhD,sBAAsB;IACtB,0EAA0E;IAC1E,MAAM,QAAQ,GAAa,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC;IAErD,wDAAwD;IACxD,EAAE;IACF,kFAAkF;IAClF,8EAA8E;IAC9E,2EAA2E;IAC3E,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;IAE3C,yDAAyD;IACzD,MAAM,WAAW,GAAiC;QAChD,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,aAAa;QACpC,gBAAgB,EAAE,+BAA+B,EAAE,SAAS;QAC5D,MAAM,EAAE,yEAAyE;KAClF,CAAC;IACF,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAEpC,+BAA+B;IAC/B,MAAM,eAAe,GAAoC;QACvD,0BAA0B,EAAE;YAC1B,KAAK,EAAE,MAAM,CAAC,kBAAkB;YAChC,wDAAwD;YACxD,qDAAqD;YACrD,oBAAoB;YACpB,mBAAmB;YACnB,4BAA4B;YAC5B,8BAA8B;YAC9B,SAAS,EAAE,EAAE,GAAG,KAAK,EAAE,qCAAqC;YAC5D,SAAS,EAAE,oBAAoB,OAAO,EAAE;YACxC,6DAA6D;YAC7D,qEAAqE;YACrE,MAAM;YACN,QAAQ;SACT;QACD,MAAM,EAAE,yEAAyE;QACjF,WAAW,EAAE,IAAI;KAClB,CAAC;IACF,OAAO,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAE5C,uBAAuB;IACvB,MAAM,gBAAgB,GAAuC;QAC3D,MAAM,EAAE,yEAAyE;KAClF,CAAC;IACF,OAAO,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IAE9C,2CAA2C;IAC3C,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAEvC;IACC,uCAAuC;IACvC,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAC/D,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAC;IACJ,CAAC;IAED,4BAA4B;IAC5B,MAAM,OAAO,GAAG,IAAI,yBAAyB,EAAE,CAAC;IAEhD,6CAA6C;IAC7C,iFAAiF;IACjF,MAAM,QAAQ,GAAa,MAAM,EAAE,QAAQ,IAAI,MAAM,CAAC;IAEtD,wDAAwD;IACxD,EAAE;IACF,kFAAkF;IAClF,8EAA8E;IAC9E,2EAA2E;IAC3E,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;IAE3C,8EAA8E;IAC9E,MAAM,WAAW,GAAiC;QAChD,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,aAAa;QACpC,gBAAgB,EAAE,+BAA+B,EAAE,SAAS;QAC5D,MAAM,EAAE,yEAAyE;KAClF,CAAC;IACF,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAEpC,gFAAgF;IAChF,MAAM,eAAe,GAAoC;QACvD,0BAA0B,EAAE;YAC1B,KAAK,EAAE,kBAAkB;YACzB,SAAS,EAAE,EAAE,GAAG,KAAK,EAAE,aAAa;YACpC,SAAS,EAAE,qBAAqB,OAAO,EAAE;YACzC,6DAA6D;YAC7D,MAAM;YACN,QAAQ;SACT;QACD,MAAM,EAAE,yEAAyE;QACjF,WAAW,EAAE,IAAI;KAClB,CAAC;IACF,OAAO,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAE5C,uBAAuB;IACvB,MAAM,gBAAgB,GAAuC;QAC3D,MAAM,EAAE,yEAAyE;KAClF,CAAC;IACF,OAAO,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IAE9C,2CAA2C;IAC3C,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration types for ProtopediaApiCustomClient.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import type { ProtoPediaApiClientOptions } from 'protopedia-api-v2-client';
|
|
7
|
+
import type { Logger, LogLevel } from '../../logger/index.js';
|
|
8
|
+
import type { FetchProgressEvent } from '../types/progress-event.types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Configuration options for ProtopediaApiCustomClient.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // Pattern 1: logLevel only (creates ConsoleLogger internally)
|
|
15
|
+
* const config1: ProtopediaApiCustomClientConfig = {
|
|
16
|
+
* protoPediaApiClientOptions: {
|
|
17
|
+
* token: process.env.PROTOPEDIA_API_TOKEN,
|
|
18
|
+
* },
|
|
19
|
+
* logLevel: 'debug',
|
|
20
|
+
* };
|
|
21
|
+
*
|
|
22
|
+
* // Pattern 2: Custom logger with logLevel
|
|
23
|
+
* import { createConsoleLogger } from 'promidas/logger';
|
|
24
|
+
* const config2: ProtopediaApiCustomClientConfig = {
|
|
25
|
+
* protoPediaApiClientOptions: {
|
|
26
|
+
* token: process.env.PROTOPEDIA_API_TOKEN,
|
|
27
|
+
* },
|
|
28
|
+
* logger: createConsoleLogger(),
|
|
29
|
+
* logLevel: 'warn', // Updates logger's level if mutable
|
|
30
|
+
* };
|
|
31
|
+
*
|
|
32
|
+
* // Pattern 3: Custom logger only
|
|
33
|
+
* const config3: ProtopediaApiCustomClientConfig = {
|
|
34
|
+
* protoPediaApiClientOptions: {
|
|
35
|
+
* token: process.env.PROTOPEDIA_API_TOKEN,
|
|
36
|
+
* },
|
|
37
|
+
* logger: createConsoleLogger(), // Uses logger's existing level
|
|
38
|
+
* };
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export type ProtopediaApiCustomClientConfig = {
|
|
42
|
+
/**
|
|
43
|
+
* Options passed to the underlying protopedia-api-v2-client.
|
|
44
|
+
*
|
|
45
|
+
* @remarks
|
|
46
|
+
* This allows full control over the official client's configuration,
|
|
47
|
+
* including token, baseUrl, fetch implementation, and timeout settings.
|
|
48
|
+
*/
|
|
49
|
+
protoPediaApiClientOptions?: ProtoPediaApiClientOptions;
|
|
50
|
+
/**
|
|
51
|
+
* Custom logger instance.
|
|
52
|
+
*
|
|
53
|
+
* @remarks
|
|
54
|
+
* - If provided, the logger will be used as-is
|
|
55
|
+
* - If provided with logLevel, the level will be updated if logger is mutable
|
|
56
|
+
* - If not provided, creates a ConsoleLogger with the specified logLevel
|
|
57
|
+
*
|
|
58
|
+
* @default undefined (creates ConsoleLogger with 'info' level)
|
|
59
|
+
*/
|
|
60
|
+
logger?: Logger;
|
|
61
|
+
/**
|
|
62
|
+
* Log level for creating a default ConsoleLogger.
|
|
63
|
+
*
|
|
64
|
+
* @remarks
|
|
65
|
+
* - Only used when `logger` is NOT provided
|
|
66
|
+
* - Creates a new ConsoleLogger with this level
|
|
67
|
+
* - If logger is provided and mutable, updates its level property
|
|
68
|
+
*
|
|
69
|
+
* @default 'info'
|
|
70
|
+
*/
|
|
71
|
+
logLevel?: LogLevel;
|
|
72
|
+
/**
|
|
73
|
+
* Enable download progress logging.
|
|
74
|
+
*
|
|
75
|
+
* @remarks
|
|
76
|
+
* - When enabled, logs download progress to logger
|
|
77
|
+
* - Requires logger to be configured to show info level logs
|
|
78
|
+
* - Useful for monitoring large data downloads on slow connections
|
|
79
|
+
* - Works independently of progressCallback
|
|
80
|
+
*
|
|
81
|
+
* @default true
|
|
82
|
+
*/
|
|
83
|
+
progressLog?: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Download progress callback.
|
|
86
|
+
*
|
|
87
|
+
* Receives events for all phases of the fetch request lifecycle:
|
|
88
|
+
* - `request-start`: Fired when fetch() is called
|
|
89
|
+
* - `response-received`: Fired when response headers are received
|
|
90
|
+
* - `download-progress`: Fired periodically during body download (throttled to 500ms)
|
|
91
|
+
* - `complete`: Fired when download completes successfully
|
|
92
|
+
*
|
|
93
|
+
* @remarks
|
|
94
|
+
* - All events are fired regardless of progressLog setting
|
|
95
|
+
* - Use TypeScript's discriminated union for type-safe event handling
|
|
96
|
+
* - Events are fired in order: request-start → response-received → download-progress (0+) → complete
|
|
97
|
+
*
|
|
98
|
+
* @example Complete lifecycle handling
|
|
99
|
+
* ```typescript
|
|
100
|
+
* const client = new ProtopediaApiCustomClient({
|
|
101
|
+
* progressCallback: (event) => {
|
|
102
|
+
* switch (event.type) {
|
|
103
|
+
* case 'request-start':
|
|
104
|
+
* console.log('🚀 Request initiated...');
|
|
105
|
+
* break;
|
|
106
|
+
* case 'response-received':
|
|
107
|
+
* console.log(`✓ Headers received (${event.prepareTimeMs}ms)`);
|
|
108
|
+
* console.log(` Estimated: ${event.estimatedTotal} bytes`);
|
|
109
|
+
* break;
|
|
110
|
+
* case 'download-progress':
|
|
111
|
+
* console.log(`📥 ${event.percentage.toFixed(1)}%`);
|
|
112
|
+
* break;
|
|
113
|
+
* case 'complete':
|
|
114
|
+
* console.log(`✅ Complete (${event.totalTimeMs}ms total)`);
|
|
115
|
+
* break;
|
|
116
|
+
* }
|
|
117
|
+
* },
|
|
118
|
+
* });
|
|
119
|
+
* ```
|
|
120
|
+
*
|
|
121
|
+
* @example Progress bar integration
|
|
122
|
+
* ```typescript
|
|
123
|
+
* let progressBar: ProgressBar | null = null;
|
|
124
|
+
*
|
|
125
|
+
* const client = new ProtopediaApiCustomClient({
|
|
126
|
+
* progressCallback: (event) => {
|
|
127
|
+
* if (event.type === 'response-received') {
|
|
128
|
+
* progressBar = new ProgressBar({ total: event.estimatedTotal });
|
|
129
|
+
* } else if (event.type === 'download-progress' && progressBar) {
|
|
130
|
+
* progressBar.update(event.percentage);
|
|
131
|
+
* } else if (event.type === 'complete' && progressBar) {
|
|
132
|
+
* progressBar.finish();
|
|
133
|
+
* }
|
|
134
|
+
* },
|
|
135
|
+
* });
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
progressCallback?: (event: FetchProgressEvent) => void;
|
|
139
|
+
};
|
|
140
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../lib/fetcher/client/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAE3E,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,MAAM,+BAA+B,GAAG;IAC5C;;;;;;OAMG;IACH,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;IAExD;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqDG;IACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACxD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../lib/fetcher/client/config.ts"],"names":[],"mappings":""}
|