@brightchain/brightchain-api-lib 0.15.0 → 0.17.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/package.json +4 -4
- package/src/browser.d.ts +13 -0
- package/src/browser.d.ts.map +1 -0
- package/src/browser.js +16 -0
- package/src/browser.js.map +1 -0
- package/src/index.d.ts +5 -1
- package/src/index.d.ts.map +1 -1
- package/src/index.js +7 -1
- package/src/index.js.map +1 -1
- package/src/lib/adapters/brightChainDbDocumentStoreAdapter.d.ts +24 -0
- package/src/lib/adapters/brightChainDbDocumentStoreAdapter.d.ts.map +1 -0
- package/src/lib/adapters/brightChainDbDocumentStoreAdapter.js +53 -0
- package/src/lib/adapters/brightChainDbDocumentStoreAdapter.js.map +1 -0
- package/src/lib/application-base.d.ts +8 -37
- package/src/lib/application-base.d.ts.map +1 -1
- package/src/lib/application-base.js +8 -80
- package/src/lib/application-base.js.map +1 -1
- package/src/lib/application.d.ts +56 -7
- package/src/lib/application.d.ts.map +1 -1
- package/src/lib/application.js +169 -134
- package/src/lib/application.js.map +1 -1
- package/src/lib/availability/gossipService.d.ts +20 -1
- package/src/lib/availability/gossipService.d.ts.map +1 -1
- package/src/lib/availability/gossipService.js +59 -0
- package/src/lib/availability/gossipService.js.map +1 -1
- package/src/lib/availability/index.d.ts +1 -0
- package/src/lib/availability/index.d.ts.map +1 -1
- package/src/lib/availability/index.js +1 -0
- package/src/lib/availability/index.js.map +1 -1
- package/src/lib/availability/poolDiscoveryService.d.ts +117 -0
- package/src/lib/availability/poolDiscoveryService.d.ts.map +1 -0
- package/src/lib/availability/poolDiscoveryService.js +218 -0
- package/src/lib/availability/poolDiscoveryService.js.map +1 -0
- package/src/lib/blockFetch/httpBlockFetchTransport.d.ts.map +1 -1
- package/src/lib/blockFetch/httpBlockFetchTransport.js.map +1 -1
- package/src/lib/constants.js +2 -2
- package/src/lib/constants.js.map +1 -1
- package/src/lib/controllers/api/blocks.d.ts.map +1 -1
- package/src/lib/controllers/api/blocks.js +290 -290
- package/src/lib/controllers/api/blocks.js.map +1 -1
- package/src/lib/controllers/api/brightpass.d.ts.map +1 -1
- package/src/lib/controllers/api/brightpass.js +270 -274
- package/src/lib/controllers/api/brightpass.js.map +1 -1
- package/src/lib/controllers/api/energy.d.ts.map +1 -1
- package/src/lib/controllers/api/energy.js +93 -93
- package/src/lib/controllers/api/energy.js.map +1 -1
- package/src/lib/controllers/api/health.d.ts +4 -4
- package/src/lib/controllers/api/health.d.ts.map +1 -1
- package/src/lib/controllers/api/health.js.map +1 -1
- package/src/lib/controllers/api/i18n.d.ts.map +1 -1
- package/src/lib/controllers/api/i18n.js +8 -8
- package/src/lib/controllers/api/i18n.js.map +1 -1
- package/src/lib/controllers/api/index.d.ts +1 -0
- package/src/lib/controllers/api/index.d.ts.map +1 -1
- package/src/lib/controllers/api/index.js +1 -0
- package/src/lib/controllers/api/index.js.map +1 -1
- package/src/lib/controllers/api/introspection.d.ts +60 -0
- package/src/lib/controllers/api/introspection.d.ts.map +1 -0
- package/src/lib/controllers/api/introspection.js +375 -0
- package/src/lib/controllers/api/introspection.js.map +1 -0
- package/src/lib/controllers/api/nodes.d.ts +7 -6
- package/src/lib/controllers/api/nodes.d.ts.map +1 -1
- package/src/lib/controllers/api/nodes.js.map +1 -1
- package/src/lib/controllers/api/quorum.d.ts.map +1 -1
- package/src/lib/controllers/api/quorum.js +483 -483
- package/src/lib/controllers/api/quorum.js.map +1 -1
- package/src/lib/controllers/api/sessions.d.ts.map +1 -1
- package/src/lib/controllers/api/sessions.js +8 -8
- package/src/lib/controllers/api/sessions.js.map +1 -1
- package/src/lib/controllers/api/sync.d.ts +6 -5
- package/src/lib/controllers/api/sync.d.ts.map +1 -1
- package/src/lib/controllers/api/sync.js.map +1 -1
- package/src/lib/controllers/api/user.d.ts.map +1 -1
- package/src/lib/controllers/api/user.js +260 -180
- package/src/lib/controllers/api/user.js.map +1 -1
- package/src/lib/controllers/base.d.ts +1 -2
- package/src/lib/controllers/base.d.ts.map +1 -1
- package/src/lib/controllers/base.js +0 -1
- package/src/lib/controllers/base.js.map +1 -1
- package/src/lib/databaseInit.d.ts +28 -0
- package/src/lib/databaseInit.d.ts.map +1 -0
- package/src/lib/databaseInit.js +107 -0
- package/src/lib/databaseInit.js.map +1 -0
- package/src/lib/enumerations/brightChainApiStrings.d.ts +4 -0
- package/src/lib/enumerations/brightChainApiStrings.d.ts.map +1 -1
- package/src/lib/enumerations/brightChainApiStrings.js +4 -0
- package/src/lib/enumerations/brightChainApiStrings.js.map +1 -1
- package/src/lib/enumerations/index.d.ts +1 -0
- package/src/lib/enumerations/index.d.ts.map +1 -1
- package/src/lib/enumerations/index.js +1 -0
- package/src/lib/enumerations/index.js.map +1 -1
- package/src/lib/enumerations/websocketMessageType.d.ts +5 -1
- package/src/lib/enumerations/websocketMessageType.d.ts.map +1 -1
- package/src/lib/enumerations/websocketMessageType.js +4 -0
- package/src/lib/enumerations/websocketMessageType.js.map +1 -1
- package/src/lib/environment.d.ts +5 -0
- package/src/lib/environment.d.ts.map +1 -1
- package/src/lib/environment.js +7 -0
- package/src/lib/environment.js.map +1 -1
- package/src/lib/errors/index.d.ts +1 -0
- package/src/lib/errors/index.d.ts.map +1 -1
- package/src/lib/errors/index.js +1 -0
- package/src/lib/errors/index.js.map +1 -1
- package/src/lib/errors/memberIndexSchemaValidationError.d.ts +6 -0
- package/src/lib/errors/memberIndexSchemaValidationError.d.ts.map +1 -0
- package/src/lib/errors/memberIndexSchemaValidationError.js +15 -0
- package/src/lib/errors/memberIndexSchemaValidationError.js.map +1 -0
- package/src/lib/factories/blockStoreFactory.d.ts +2 -13
- package/src/lib/factories/blockStoreFactory.d.ts.map +1 -1
- package/src/lib/factories/blockStoreFactory.js +5 -10
- package/src/lib/factories/blockStoreFactory.js.map +1 -1
- package/src/lib/interfaces/application.d.ts +7 -1
- package/src/lib/interfaces/application.d.ts.map +1 -1
- package/src/lib/interfaces/blocksHandlers.d.ts +3 -3
- package/src/lib/interfaces/blocksHandlers.d.ts.map +1 -1
- package/src/lib/interfaces/brightchain-init-result.d.ts +17 -0
- package/src/lib/interfaces/brightchain-init-result.d.ts.map +1 -0
- package/src/lib/interfaces/brightchain-init-result.js +9 -0
- package/src/lib/interfaces/brightchain-init-result.js.map +1 -0
- package/src/lib/interfaces/cblHandlers.d.ts +3 -2
- package/src/lib/interfaces/cblHandlers.d.ts.map +1 -1
- package/src/lib/interfaces/environment.d.ts +4 -0
- package/src/lib/interfaces/environment.d.ts.map +1 -1
- package/src/lib/interfaces/index.d.ts +5 -0
- package/src/lib/interfaces/index.d.ts.map +1 -1
- package/src/lib/interfaces/introspectionApiResponses.d.ts +66 -0
- package/src/lib/interfaces/introspectionApiResponses.d.ts.map +1 -0
- package/src/lib/interfaces/introspectionApiResponses.js +3 -0
- package/src/lib/interfaces/introspectionApiResponses.js.map +1 -0
- package/src/lib/interfaces/members-handlers.d.ts +11 -0
- package/src/lib/interfaces/members-handlers.d.ts.map +1 -0
- package/src/lib/interfaces/members-handlers.js +3 -0
- package/src/lib/interfaces/members-handlers.js.map +1 -0
- package/src/lib/interfaces/responses/api-backup-codes-response.d.ts +2 -5
- package/src/lib/interfaces/responses/api-backup-codes-response.d.ts.map +1 -1
- package/src/lib/interfaces/responses/api-challenge-response.d.ts +2 -5
- package/src/lib/interfaces/responses/api-challenge-response.d.ts.map +1 -1
- package/src/lib/interfaces/responses/api-code-count-response.d.ts +2 -5
- package/src/lib/interfaces/responses/api-code-count-response.d.ts.map +1 -1
- package/src/lib/interfaces/responses/api-detailed-health-response.d.ts +5 -0
- package/src/lib/interfaces/responses/api-detailed-health-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-detailed-health-response.js +3 -0
- package/src/lib/interfaces/responses/api-detailed-health-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-discover-block-response.d.ts +5 -0
- package/src/lib/interfaces/responses/api-discover-block-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-discover-block-response.js +3 -0
- package/src/lib/interfaces/responses/api-discover-block-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-error.d.ts +5 -0
- package/src/lib/interfaces/responses/api-error.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-error.js +3 -0
- package/src/lib/interfaces/responses/api-error.js.map +1 -0
- package/src/lib/interfaces/responses/api-express-validation-error.d.ts +7 -0
- package/src/lib/interfaces/responses/api-express-validation-error.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-express-validation-error.js +3 -0
- package/src/lib/interfaces/responses/api-express-validation-error.js.map +1 -0
- package/src/lib/interfaces/responses/api-get-block-response.d.ts +5 -0
- package/src/lib/interfaces/responses/api-get-block-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-get-block-response.js +3 -0
- package/src/lib/interfaces/responses/api-get-block-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-get-node-response.d.ts +5 -0
- package/src/lib/interfaces/responses/api-get-node-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-get-node-response.js +3 -0
- package/src/lib/interfaces/responses/api-get-node-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-health-response.d.ts +5 -0
- package/src/lib/interfaces/responses/api-health-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-health-response.js +3 -0
- package/src/lib/interfaces/responses/api-health-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-list-nodes-response.d.ts +5 -0
- package/src/lib/interfaces/responses/api-list-nodes-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-list-nodes-response.js +3 -0
- package/src/lib/interfaces/responses/api-list-nodes-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-login-response.d.ts +2 -14
- package/src/lib/interfaces/responses/api-login-response.d.ts.map +1 -1
- package/src/lib/interfaces/responses/api-members-response.d.ts +8 -0
- package/src/lib/interfaces/responses/api-members-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-members-response.js +3 -0
- package/src/lib/interfaces/responses/api-members-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-mnemonic-response.d.ts +2 -5
- package/src/lib/interfaces/responses/api-mnemonic-response.d.ts.map +1 -1
- package/src/lib/interfaces/responses/api-reconcile-response.d.ts +5 -0
- package/src/lib/interfaces/responses/api-reconcile-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-reconcile-response.js +3 -0
- package/src/lib/interfaces/responses/api-reconcile-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-register-node-response.d.ts +5 -0
- package/src/lib/interfaces/responses/api-register-node-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-register-node-response.js +3 -0
- package/src/lib/interfaces/responses/api-register-node-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-registration-response.d.ts +2 -10
- package/src/lib/interfaces/responses/api-registration-response.d.ts.map +1 -1
- package/src/lib/interfaces/responses/api-replicate-block-response.d.ts +5 -0
- package/src/lib/interfaces/responses/api-replicate-block-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-replicate-block-response.js +3 -0
- package/src/lib/interfaces/responses/api-replicate-block-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-request-user-response.d.ts +2 -6
- package/src/lib/interfaces/responses/api-request-user-response.d.ts.map +1 -1
- package/src/lib/interfaces/responses/api-status-code-response.d.ts +7 -0
- package/src/lib/interfaces/responses/api-status-code-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-status-code-response.js +3 -0
- package/src/lib/interfaces/responses/api-status-code-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-store-block-response.d.ts +5 -0
- package/src/lib/interfaces/responses/api-store-block-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-store-block-response.js +3 -0
- package/src/lib/interfaces/responses/api-store-block-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-store-cbl-response.d.ts +5 -0
- package/src/lib/interfaces/responses/api-store-cbl-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-store-cbl-response.js +3 -0
- package/src/lib/interfaces/responses/api-store-cbl-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-sync-request-response.d.ts +5 -0
- package/src/lib/interfaces/responses/api-sync-request-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-sync-request-response.js +3 -0
- package/src/lib/interfaces/responses/api-sync-request-response.js.map +1 -0
- package/src/lib/interfaces/responses/block-data-response.d.ts +11 -0
- package/src/lib/interfaces/responses/block-data-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/block-data-response.js +3 -0
- package/src/lib/interfaces/responses/block-data-response.js.map +1 -0
- package/src/lib/interfaces/responses/block-location-response.d.ts +11 -0
- package/src/lib/interfaces/responses/block-location-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/block-location-response.js +3 -0
- package/src/lib/interfaces/responses/block-location-response.js.map +1 -0
- package/src/lib/interfaces/responses/index.d.ts +18 -0
- package/src/lib/interfaces/responses/index.d.ts.map +1 -1
- package/src/lib/interfaces/status-code-response.d.ts +1 -6
- package/src/lib/interfaces/status-code-response.d.ts.map +1 -1
- package/src/lib/interfaces/storage/client-session.d.ts +8 -0
- package/src/lib/interfaces/storage/client-session.d.ts.map +1 -0
- package/src/lib/interfaces/storage/client-session.js +3 -0
- package/src/lib/interfaces/storage/client-session.js.map +1 -0
- package/src/lib/interfaces/storage/collection.d.ts +9 -0
- package/src/lib/interfaces/storage/collection.d.ts.map +1 -0
- package/src/lib/interfaces/storage/collection.js +3 -0
- package/src/lib/interfaces/storage/collection.js.map +1 -0
- package/src/lib/interfaces/storage/database-lifecycle-hooks.d.ts +8 -0
- package/src/lib/interfaces/storage/database-lifecycle-hooks.d.ts.map +1 -0
- package/src/lib/interfaces/storage/database-lifecycle-hooks.js +3 -0
- package/src/lib/interfaces/storage/database-lifecycle-hooks.js.map +1 -0
- package/src/lib/interfaces/storage/database.d.ts +9 -0
- package/src/lib/interfaces/storage/database.d.ts.map +1 -0
- package/src/lib/interfaces/storage/database.js +3 -0
- package/src/lib/interfaces/storage/database.js.map +1 -0
- package/src/lib/interfaces/storage/document-types.d.ts +9 -0
- package/src/lib/interfaces/storage/document-types.d.ts.map +1 -0
- package/src/lib/interfaces/storage/document-types.js +10 -0
- package/src/lib/interfaces/storage/document-types.js.map +1 -0
- package/src/lib/interfaces/storage/index.d.ts +7 -0
- package/src/lib/interfaces/storage/index.d.ts.map +1 -0
- package/src/lib/interfaces/storage/index.js +7 -0
- package/src/lib/interfaces/storage/index.js.map +1 -0
- package/src/lib/interfaces/storage/memberIndexSchema.d.ts +11 -0
- package/src/lib/interfaces/storage/memberIndexSchema.d.ts.map +1 -0
- package/src/lib/interfaces/storage/memberIndexSchema.js +26 -0
- package/src/lib/interfaces/storage/memberIndexSchema.js.map +1 -0
- package/src/lib/interfaces/userApiResponse.d.ts +17 -0
- package/src/lib/interfaces/userApiResponse.d.ts.map +1 -0
- package/src/lib/interfaces/userApiResponse.js +3 -0
- package/src/lib/interfaces/userApiResponse.js.map +1 -0
- package/src/lib/interfaces/websocketMessages.d.ts +64 -1
- package/src/lib/interfaces/websocketMessages.d.ts.map +1 -1
- package/src/lib/middleware/index.d.ts +2 -0
- package/src/lib/middleware/index.d.ts.map +1 -0
- package/src/lib/middleware/index.js +6 -0
- package/src/lib/middleware/index.js.map +1 -0
- package/src/lib/middleware/validateBody.d.ts +13 -0
- package/src/lib/middleware/validateBody.d.ts.map +1 -0
- package/src/lib/middleware/validateBody.js +35 -0
- package/src/lib/middleware/validateBody.js.map +1 -0
- package/src/lib/middlewares/authentication.d.ts +2 -0
- package/src/lib/middlewares/authentication.d.ts.map +1 -1
- package/src/lib/middlewares/authentication.js.map +1 -1
- package/src/lib/routers/api.d.ts +27 -0
- package/src/lib/routers/api.d.ts.map +1 -1
- package/src/lib/routers/api.js +44 -0
- package/src/lib/routers/api.js.map +1 -1
- package/src/lib/routers/app.d.ts +22 -14
- package/src/lib/routers/app.d.ts.map +1 -1
- package/src/lib/routers/app.js +28 -116
- package/src/lib/routers/app.js.map +1 -1
- package/src/lib/services/auth.d.ts +3 -1
- package/src/lib/services/auth.d.ts.map +1 -1
- package/src/lib/services/auth.js +51 -4
- package/src/lib/services/auth.js.map +1 -1
- package/src/lib/services/brightchain-member-init.service.d.ts +66 -0
- package/src/lib/services/brightchain-member-init.service.d.ts.map +1 -0
- package/src/lib/services/brightchain-member-init.service.js +152 -0
- package/src/lib/services/brightchain-member-init.service.js.map +1 -0
- package/src/lib/services/brightpass.property.helpers.d.ts +23 -0
- package/src/lib/services/brightpass.property.helpers.d.ts.map +1 -0
- package/src/lib/services/brightpass.property.helpers.js +113 -0
- package/src/lib/services/brightpass.property.helpers.js.map +1 -0
- package/src/lib/services/clientWebSocketServer.d.ts +147 -0
- package/src/lib/services/clientWebSocketServer.d.ts.map +1 -0
- package/src/lib/services/clientWebSocketServer.js +437 -0
- package/src/lib/services/clientWebSocketServer.js.map +1 -0
- package/src/lib/services/index.d.ts +2 -0
- package/src/lib/services/index.d.ts.map +1 -1
- package/src/lib/services/index.js +2 -0
- package/src/lib/services/index.js.map +1 -1
- package/src/lib/stores/diskBlockAsyncStore.d.ts +4 -4
- package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -1
- package/src/lib/stores/diskBlockAsyncStore.js.map +1 -1
- package/src/lib/stores/diskBlockStore.d.ts +82 -17
- package/src/lib/stores/diskBlockStore.d.ts.map +1 -1
- package/src/lib/stores/diskBlockStore.js +787 -19
- package/src/lib/stores/diskBlockStore.js.map +1 -1
- package/src/lib/stores/diskBlockSyncStore.d.ts +24 -5
- package/src/lib/stores/diskBlockSyncStore.d.ts.map +1 -1
- package/src/lib/stores/diskBlockSyncStore.js +30 -13
- package/src/lib/stores/diskBlockSyncStore.js.map +1 -1
- package/src/lib/upstream-stubs.d.ts +36 -0
- package/src/lib/upstream-stubs.d.ts.map +1 -0
- package/src/lib/upstream-stubs.js +43 -0
- package/src/lib/upstream-stubs.js.map +1 -0
- package/src/lib/validation/userValidation.d.ts +27 -0
- package/src/lib/validation/userValidation.d.ts.map +1 -0
- package/src/lib/validation/userValidation.js +70 -0
- package/src/lib/validation/userValidation.js.map +1 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview BrightChainMemberInitService — initialises BrightChainDb and
|
|
3
|
+
* persists system/admin/member users as IMemberIndexDocument entries.
|
|
4
|
+
*
|
|
5
|
+
* Design constraints:
|
|
6
|
+
* - NO imports from @digitaldefiance/node-express-suite (no Mongoose, no Express)
|
|
7
|
+
* - NO `any` / `unknown` in the public API surface
|
|
8
|
+
* - NO `as any` / `as unknown` casts
|
|
9
|
+
* - All writes go through BrightChainDb.withTransaction exclusively
|
|
10
|
+
*/
|
|
11
|
+
import { BlockSize, IBrightChainInitResult, IBrightChainMemberInitInput } from '@brightchain/brightchain-lib';
|
|
12
|
+
import { BrightChainDb, CBLIndex } from '@brightchain/db';
|
|
13
|
+
/**
|
|
14
|
+
* BrightChain-native configuration for BrightChainMemberInitService.
|
|
15
|
+
* Contains only what the service needs — no Mongoose, no Express.
|
|
16
|
+
*/
|
|
17
|
+
export interface IBrightChainMemberInitConfig {
|
|
18
|
+
/** Pool name used as the BrightChainDb name and poolId */
|
|
19
|
+
memberPoolName: string;
|
|
20
|
+
/**
|
|
21
|
+
* Filesystem path for the disk block store.
|
|
22
|
+
* When set (and useMemoryStore is false), a DiskBlockStore and
|
|
23
|
+
* PersistentHeadRegistry are used so data survives process restarts.
|
|
24
|
+
*/
|
|
25
|
+
blockStorePath?: string;
|
|
26
|
+
/** Force in-memory store even when blockStorePath is set */
|
|
27
|
+
useMemoryStore?: boolean;
|
|
28
|
+
/** Block size for the store (defaults to BlockSize.Small) */
|
|
29
|
+
blockSize?: BlockSize;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Initialises a BrightChainDb instance and persists system/admin/member users
|
|
33
|
+
* as IMemberIndexDocument entries in the member index collection.
|
|
34
|
+
*
|
|
35
|
+
* The service is idempotent: calling initialize() multiple times with the same
|
|
36
|
+
* users will not create duplicate entries.
|
|
37
|
+
*/
|
|
38
|
+
export declare class BrightChainMemberInitService {
|
|
39
|
+
private _db;
|
|
40
|
+
private _memberCblIndex;
|
|
41
|
+
/**
|
|
42
|
+
* The initialised BrightChainDb instance.
|
|
43
|
+
* @throws Error if initialize() has not been called yet.
|
|
44
|
+
*/
|
|
45
|
+
get db(): BrightChainDb;
|
|
46
|
+
/**
|
|
47
|
+
* The member pool CBLIndex.
|
|
48
|
+
* @throws Error if initialize() has not been called yet.
|
|
49
|
+
*/
|
|
50
|
+
get memberCblIndex(): CBLIndex;
|
|
51
|
+
/**
|
|
52
|
+
* Initialise the block store and BrightChainDb, then persist any missing
|
|
53
|
+
* member index entries.
|
|
54
|
+
*
|
|
55
|
+
* Steps:
|
|
56
|
+
* 1. Build the appropriate block store (disk or memory)
|
|
57
|
+
* 2. Create and connect BrightChainDb (with PersistentHeadRegistry when disk)
|
|
58
|
+
* 3. Create CBLIndex for the member pool
|
|
59
|
+
* 4. Build candidate IMemberIndexDocument entries
|
|
60
|
+
* 5. Validate all candidates against MEMBER_INDEX_SCHEMA (pre-transaction)
|
|
61
|
+
* 6. Check which candidates are already present (idempotency)
|
|
62
|
+
* 7. Insert missing entries in a single withTransaction call
|
|
63
|
+
*/
|
|
64
|
+
initialize(config: IBrightChainMemberInitConfig, input: IBrightChainMemberInitInput): Promise<IBrightChainInitResult<BrightChainDb>>;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=brightchain-member-init.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brightchain-member-init.service.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/brightchain-member-init.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACL,SAAS,EACT,sBAAsB,EACtB,2BAA2B,EAI5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,aAAa,EACb,QAAQ,EAGT,MAAM,iBAAiB,CAAC;AAWzB;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IAC3C,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAqDD;;;;;;GAMG;AACH,qBAAa,4BAA4B;IACvC,OAAO,CAAC,GAAG,CAA4B;IACvC,OAAO,CAAC,eAAe,CAAuB;IAE9C;;;OAGG;IACH,IAAI,EAAE,IAAI,aAAa,CAOtB;IAED;;;OAGG;IACH,IAAI,cAAc,IAAI,QAAQ,CAO7B;IAED;;;;;;;;;;;;OAYG;IACG,UAAU,CACd,MAAM,EAAE,4BAA4B,EACpC,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;CAgElD"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview BrightChainMemberInitService — initialises BrightChainDb and
|
|
4
|
+
* persists system/admin/member users as IMemberIndexDocument entries.
|
|
5
|
+
*
|
|
6
|
+
* Design constraints:
|
|
7
|
+
* - NO imports from @digitaldefiance/node-express-suite (no Mongoose, no Express)
|
|
8
|
+
* - NO `any` / `unknown` in the public API surface
|
|
9
|
+
* - NO `as any` / `as unknown` casts
|
|
10
|
+
* - All writes go through BrightChainDb.withTransaction exclusively
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.BrightChainMemberInitService = void 0;
|
|
14
|
+
const brightchain_lib_1 = require("@brightchain/brightchain-lib");
|
|
15
|
+
const db_1 = require("@brightchain/db");
|
|
16
|
+
const brightChainApiStrings_1 = require("../enumerations/brightChainApiStrings");
|
|
17
|
+
const memberIndexSchemaValidationError_1 = require("../errors/memberIndexSchemaValidationError");
|
|
18
|
+
const memberIndexSchema_1 = require("../interfaces/storage/memberIndexSchema");
|
|
19
|
+
const diskBlockStore_1 = require("../stores/diskBlockStore");
|
|
20
|
+
/** Well-known collection name for the member index. */
|
|
21
|
+
const MEMBER_INDEX_COLLECTION = 'member_index';
|
|
22
|
+
// ─── Block store helpers (not exported) ──────────────────────────────────────
|
|
23
|
+
function buildMemoryBlockStore() {
|
|
24
|
+
return new brightchain_lib_1.MemoryBlockStore(brightchain_lib_1.BlockSize.Small);
|
|
25
|
+
}
|
|
26
|
+
function buildDiskBlockStore(storePath, blockSize = brightchain_lib_1.BlockSize.Small) {
|
|
27
|
+
return new diskBlockStore_1.DiskBlockStore({ storePath, blockSize });
|
|
28
|
+
}
|
|
29
|
+
// ─── Validation helper (not exported) ────────────────────────────────────────
|
|
30
|
+
function validateDocumentSafe(doc) {
|
|
31
|
+
try {
|
|
32
|
+
(0, db_1.validateDocument)(doc, memberIndexSchema_1.MEMBER_INDEX_SCHEMA, MEMBER_INDEX_COLLECTION);
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
if (err instanceof db_1.ValidationError) {
|
|
37
|
+
return err.validationErrors;
|
|
38
|
+
}
|
|
39
|
+
throw err;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// ─── Candidate entry builder (not exported) ───────────────────────────────────
|
|
43
|
+
function buildCandidateEntries(input, poolId) {
|
|
44
|
+
const now = new Date().toISOString();
|
|
45
|
+
return [input.systemUser, input.adminUser, input.memberUser].map((user) => ({
|
|
46
|
+
id: user.id,
|
|
47
|
+
// Zero-filled sentinel — replaced when the member's actual CBL blocks are written
|
|
48
|
+
publicCBL: '0'.repeat(64),
|
|
49
|
+
privateCBL: '0'.repeat(64),
|
|
50
|
+
poolId,
|
|
51
|
+
type: user.type,
|
|
52
|
+
status: brightchain_lib_1.MemberStatusType.Active,
|
|
53
|
+
lastUpdate: now,
|
|
54
|
+
reputation: 0,
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
// ─── Service ─────────────────────────────────────────────────────────────────
|
|
58
|
+
/**
|
|
59
|
+
* Initialises a BrightChainDb instance and persists system/admin/member users
|
|
60
|
+
* as IMemberIndexDocument entries in the member index collection.
|
|
61
|
+
*
|
|
62
|
+
* The service is idempotent: calling initialize() multiple times with the same
|
|
63
|
+
* users will not create duplicate entries.
|
|
64
|
+
*/
|
|
65
|
+
class BrightChainMemberInitService {
|
|
66
|
+
/**
|
|
67
|
+
* The initialised BrightChainDb instance.
|
|
68
|
+
* @throws Error if initialize() has not been called yet.
|
|
69
|
+
*/
|
|
70
|
+
get db() {
|
|
71
|
+
if (!this._db) {
|
|
72
|
+
throw new Error(brightChainApiStrings_1.BrightChainApiStrings.BrightChainMemberInitServiceNotInitialized);
|
|
73
|
+
}
|
|
74
|
+
return this._db;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The member pool CBLIndex.
|
|
78
|
+
* @throws Error if initialize() has not been called yet.
|
|
79
|
+
*/
|
|
80
|
+
get memberCblIndex() {
|
|
81
|
+
if (!this._memberCblIndex) {
|
|
82
|
+
throw new Error(brightChainApiStrings_1.BrightChainApiStrings.BrightChainMemberInitServiceNotInitialized);
|
|
83
|
+
}
|
|
84
|
+
return this._memberCblIndex;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Initialise the block store and BrightChainDb, then persist any missing
|
|
88
|
+
* member index entries.
|
|
89
|
+
*
|
|
90
|
+
* Steps:
|
|
91
|
+
* 1. Build the appropriate block store (disk or memory)
|
|
92
|
+
* 2. Create and connect BrightChainDb (with PersistentHeadRegistry when disk)
|
|
93
|
+
* 3. Create CBLIndex for the member pool
|
|
94
|
+
* 4. Build candidate IMemberIndexDocument entries
|
|
95
|
+
* 5. Validate all candidates against MEMBER_INDEX_SCHEMA (pre-transaction)
|
|
96
|
+
* 6. Check which candidates are already present (idempotency)
|
|
97
|
+
* 7. Insert missing entries in a single withTransaction call
|
|
98
|
+
*/
|
|
99
|
+
async initialize(config, input) {
|
|
100
|
+
const useDisk = !!config.blockStorePath && !config.useMemoryStore;
|
|
101
|
+
// Steps 1-3: only run once per service instance.
|
|
102
|
+
if (!this._db) {
|
|
103
|
+
const blockStore = useDisk
|
|
104
|
+
? buildDiskBlockStore(config.blockStorePath, config.blockSize)
|
|
105
|
+
: buildMemoryBlockStore();
|
|
106
|
+
const db = new db_1.BrightChainDb(blockStore, {
|
|
107
|
+
name: config.memberPoolName,
|
|
108
|
+
poolId: config.memberPoolName,
|
|
109
|
+
// PersistentHeadRegistry when disk — ensures heads survive restarts
|
|
110
|
+
...(useDisk ? { dataDir: config.blockStorePath } : {}),
|
|
111
|
+
});
|
|
112
|
+
// Load persisted head pointers from disk (no-op for InMemoryHeadRegistry)
|
|
113
|
+
await db.getHeadRegistry().load();
|
|
114
|
+
await db.connect();
|
|
115
|
+
this._db = db;
|
|
116
|
+
this._memberCblIndex = new db_1.CBLIndex(db, blockStore);
|
|
117
|
+
}
|
|
118
|
+
const db = this._db;
|
|
119
|
+
// Step 4: build candidates
|
|
120
|
+
const candidates = buildCandidateEntries(input, config.memberPoolName);
|
|
121
|
+
// Step 5: validate before touching the DB
|
|
122
|
+
for (const candidate of candidates) {
|
|
123
|
+
const errors = validateDocumentSafe(candidate);
|
|
124
|
+
if (errors.length > 0) {
|
|
125
|
+
throw new memberIndexSchemaValidationError_1.MemberIndexSchemaValidationError(errors);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Step 6: idempotency check
|
|
129
|
+
const collection = db.collection(MEMBER_INDEX_COLLECTION);
|
|
130
|
+
const existing = await collection.find({}).toArray();
|
|
131
|
+
const existingIds = new Set(existing.map((e) => e.id));
|
|
132
|
+
const toInsert = candidates.filter((c) => !existingIds.has(c.id));
|
|
133
|
+
const skippedCount = candidates.length - toInsert.length;
|
|
134
|
+
if (toInsert.length === 0) {
|
|
135
|
+
return { alreadyInitialized: true, insertedCount: 0, skippedCount, db };
|
|
136
|
+
}
|
|
137
|
+
// Step 7: insert in a single transaction
|
|
138
|
+
await db.withTransaction(async (session) => {
|
|
139
|
+
for (const entry of toInsert) {
|
|
140
|
+
await collection.insertOne(entry, { session });
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
return {
|
|
144
|
+
alreadyInitialized: false,
|
|
145
|
+
insertedCount: toInsert.length,
|
|
146
|
+
skippedCount,
|
|
147
|
+
db,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.BrightChainMemberInitService = BrightChainMemberInitService;
|
|
152
|
+
//# sourceMappingURL=brightchain-member-init.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brightchain-member-init.service.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/brightchain-member-init.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared arbitraries and helpers for BrightPass property tests.
|
|
3
|
+
* Split from brightpass.property.spec.ts to avoid ts-jest compilation hang on large files.
|
|
4
|
+
*/
|
|
5
|
+
import { CreditCardEntry, IdentityEntry, LoginEntry, SecureNoteEntry, VaultEntry } from '@brightchain/brightchain-lib';
|
|
6
|
+
import fc from 'fast-check';
|
|
7
|
+
import { BrightPassService } from './brightpass';
|
|
8
|
+
export declare const memberIdArb: fc.Arbitrary<string>;
|
|
9
|
+
export declare const vaultNameArb: fc.Arbitrary<string>;
|
|
10
|
+
export declare const masterPasswordArb: fc.Arbitrary<string>;
|
|
11
|
+
export declare const arbitraryLoginEntry: () => fc.Arbitrary<LoginEntry>;
|
|
12
|
+
export declare const arbitrarySecureNoteEntry: () => fc.Arbitrary<SecureNoteEntry>;
|
|
13
|
+
export declare const arbitraryCreditCardEntry: () => fc.Arbitrary<CreditCardEntry>;
|
|
14
|
+
export declare const arbitraryIdentityEntry: () => fc.Arbitrary<IdentityEntry>;
|
|
15
|
+
export declare const arbitraryVaultEntry: () => fc.Arbitrary<VaultEntry>;
|
|
16
|
+
/** Helper: create a service with a vault and return both */
|
|
17
|
+
export declare function createServiceWithVault(): Promise<{
|
|
18
|
+
service: BrightPassService<Uint8Array<ArrayBufferLike>>;
|
|
19
|
+
memberId: string;
|
|
20
|
+
password: string;
|
|
21
|
+
vaultId: string;
|
|
22
|
+
}>;
|
|
23
|
+
//# sourceMappingURL=brightpass.property.helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brightpass.property.helpers.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/brightpass.property.helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,eAAe,EACf,aAAa,EACb,UAAU,EACV,eAAe,EACf,UAAU,EACX,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,eAAO,MAAM,WAAW,sBAAY,CAAC;AACrC,eAAO,MAAM,YAAY,sBAEY,CAAC;AACtC,eAAO,MAAM,iBAAiB,sBAEO,CAAC;AAEtC,eAAO,MAAM,mBAAmB,QAAO,EAAE,CAAC,SAAS,CAAC,UAAU,CAyB1D,CAAC;AAEL,eAAO,MAAM,wBAAwB,QAAO,EAAE,CAAC,SAAS,CAAC,eAAe,CAoBpE,CAAC;AAEL,eAAO,MAAM,wBAAwB,QAAO,EAAE,CAAC,SAAS,CAAC,eAAe,CAuBpE,CAAC;AAEL,eAAO,MAAM,sBAAsB,QAAO,EAAE,CAAC,SAAS,CAAC,aAAa,CA4BhE,CAAC;AAEL,eAAO,MAAM,mBAAmB,QAAO,EAAE,CAAC,SAAS,CAAC,UAAU,CAM3D,CAAC;AAEJ,4DAA4D;AAC5D,wBAAsB,sBAAsB;;;;;GAM3C"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.arbitraryVaultEntry = exports.arbitraryIdentityEntry = exports.arbitraryCreditCardEntry = exports.arbitrarySecureNoteEntry = exports.arbitraryLoginEntry = exports.masterPasswordArb = exports.vaultNameArb = exports.memberIdArb = void 0;
|
|
4
|
+
exports.createServiceWithVault = createServiceWithVault;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const fast_check_1 = tslib_1.__importDefault(require("fast-check"));
|
|
7
|
+
const brightpass_1 = require("./brightpass");
|
|
8
|
+
exports.memberIdArb = fast_check_1.default.uuid();
|
|
9
|
+
exports.vaultNameArb = fast_check_1.default
|
|
10
|
+
.string({ minLength: 1, maxLength: 64 })
|
|
11
|
+
.filter((s) => s.trim().length > 0);
|
|
12
|
+
exports.masterPasswordArb = fast_check_1.default
|
|
13
|
+
.string({ minLength: 4, maxLength: 128 })
|
|
14
|
+
.filter((s) => s.trim().length > 0);
|
|
15
|
+
const arbitraryLoginEntry = () => fast_check_1.default.record({
|
|
16
|
+
id: fast_check_1.default.uuid(),
|
|
17
|
+
type: fast_check_1.default.constant('login'),
|
|
18
|
+
title: fast_check_1.default.string({ minLength: 1, maxLength: 100 }),
|
|
19
|
+
notes: fast_check_1.default.option(fast_check_1.default.string({ maxLength: 200 }), { nil: undefined }),
|
|
20
|
+
tags: fast_check_1.default.option(fast_check_1.default.array(fast_check_1.default.string({ minLength: 1, maxLength: 30 }), { maxLength: 5 }), { nil: undefined }),
|
|
21
|
+
createdAt: fast_check_1.default.date({
|
|
22
|
+
min: new Date('2020-01-01'),
|
|
23
|
+
max: new Date('2030-01-01'),
|
|
24
|
+
}),
|
|
25
|
+
updatedAt: fast_check_1.default.date({
|
|
26
|
+
min: new Date('2020-01-01'),
|
|
27
|
+
max: new Date('2030-01-01'),
|
|
28
|
+
}),
|
|
29
|
+
favorite: fast_check_1.default.boolean(),
|
|
30
|
+
siteUrl: fast_check_1.default.webUrl(),
|
|
31
|
+
username: fast_check_1.default.string({ minLength: 1, maxLength: 100 }),
|
|
32
|
+
password: fast_check_1.default.string({ minLength: 8, maxLength: 128 }),
|
|
33
|
+
totpSecret: fast_check_1.default.option(fast_check_1.default.base64String({ minLength: 16, maxLength: 32 }), {
|
|
34
|
+
nil: undefined,
|
|
35
|
+
}),
|
|
36
|
+
});
|
|
37
|
+
exports.arbitraryLoginEntry = arbitraryLoginEntry;
|
|
38
|
+
const arbitrarySecureNoteEntry = () => fast_check_1.default.record({
|
|
39
|
+
id: fast_check_1.default.uuid(),
|
|
40
|
+
type: fast_check_1.default.constant('secure_note'),
|
|
41
|
+
title: fast_check_1.default.string({ minLength: 1, maxLength: 100 }),
|
|
42
|
+
notes: fast_check_1.default.option(fast_check_1.default.string({ maxLength: 200 }), { nil: undefined }),
|
|
43
|
+
tags: fast_check_1.default.option(fast_check_1.default.array(fast_check_1.default.string({ minLength: 1, maxLength: 30 }), { maxLength: 5 }), { nil: undefined }),
|
|
44
|
+
createdAt: fast_check_1.default.date({
|
|
45
|
+
min: new Date('2020-01-01'),
|
|
46
|
+
max: new Date('2030-01-01'),
|
|
47
|
+
}),
|
|
48
|
+
updatedAt: fast_check_1.default.date({
|
|
49
|
+
min: new Date('2020-01-01'),
|
|
50
|
+
max: new Date('2030-01-01'),
|
|
51
|
+
}),
|
|
52
|
+
favorite: fast_check_1.default.boolean(),
|
|
53
|
+
content: fast_check_1.default.string({ minLength: 1, maxLength: 500 }),
|
|
54
|
+
});
|
|
55
|
+
exports.arbitrarySecureNoteEntry = arbitrarySecureNoteEntry;
|
|
56
|
+
const arbitraryCreditCardEntry = () => fast_check_1.default.record({
|
|
57
|
+
id: fast_check_1.default.uuid(),
|
|
58
|
+
type: fast_check_1.default.constant('credit_card'),
|
|
59
|
+
title: fast_check_1.default.string({ minLength: 1, maxLength: 100 }),
|
|
60
|
+
notes: fast_check_1.default.option(fast_check_1.default.string({ maxLength: 200 }), { nil: undefined }),
|
|
61
|
+
tags: fast_check_1.default.option(fast_check_1.default.array(fast_check_1.default.string({ minLength: 1, maxLength: 30 }), { maxLength: 5 }), { nil: undefined }),
|
|
62
|
+
createdAt: fast_check_1.default.date({
|
|
63
|
+
min: new Date('2020-01-01'),
|
|
64
|
+
max: new Date('2030-01-01'),
|
|
65
|
+
}),
|
|
66
|
+
updatedAt: fast_check_1.default.date({
|
|
67
|
+
min: new Date('2020-01-01'),
|
|
68
|
+
max: new Date('2030-01-01'),
|
|
69
|
+
}),
|
|
70
|
+
favorite: fast_check_1.default.boolean(),
|
|
71
|
+
cardholderName: fast_check_1.default.string({ minLength: 1, maxLength: 100 }),
|
|
72
|
+
cardNumber: fast_check_1.default.stringMatching(/^\d{13,19}$/),
|
|
73
|
+
expirationDate: fast_check_1.default.stringMatching(/^(0[1-9]|1[0-2])\/\d{2}$/),
|
|
74
|
+
cvv: fast_check_1.default.stringMatching(/^\d{3,4}$/),
|
|
75
|
+
});
|
|
76
|
+
exports.arbitraryCreditCardEntry = arbitraryCreditCardEntry;
|
|
77
|
+
const arbitraryIdentityEntry = () => fast_check_1.default.record({
|
|
78
|
+
id: fast_check_1.default.uuid(),
|
|
79
|
+
type: fast_check_1.default.constant('identity'),
|
|
80
|
+
title: fast_check_1.default.string({ minLength: 1, maxLength: 100 }),
|
|
81
|
+
notes: fast_check_1.default.option(fast_check_1.default.string({ maxLength: 200 }), { nil: undefined }),
|
|
82
|
+
tags: fast_check_1.default.option(fast_check_1.default.array(fast_check_1.default.string({ minLength: 1, maxLength: 30 }), { maxLength: 5 }), { nil: undefined }),
|
|
83
|
+
createdAt: fast_check_1.default.date({
|
|
84
|
+
min: new Date('2020-01-01'),
|
|
85
|
+
max: new Date('2030-01-01'),
|
|
86
|
+
}),
|
|
87
|
+
updatedAt: fast_check_1.default.date({
|
|
88
|
+
min: new Date('2020-01-01'),
|
|
89
|
+
max: new Date('2030-01-01'),
|
|
90
|
+
}),
|
|
91
|
+
favorite: fast_check_1.default.boolean(),
|
|
92
|
+
firstName: fast_check_1.default.string({ minLength: 1, maxLength: 100 }),
|
|
93
|
+
lastName: fast_check_1.default.string({ minLength: 1, maxLength: 100 }),
|
|
94
|
+
email: fast_check_1.default.option(fast_check_1.default.emailAddress(), { nil: undefined }),
|
|
95
|
+
phone: fast_check_1.default.option(fast_check_1.default.string({ minLength: 10, maxLength: 20 }), {
|
|
96
|
+
nil: undefined,
|
|
97
|
+
}),
|
|
98
|
+
address: fast_check_1.default.option(fast_check_1.default.string({ minLength: 1, maxLength: 200 }), {
|
|
99
|
+
nil: undefined,
|
|
100
|
+
}),
|
|
101
|
+
});
|
|
102
|
+
exports.arbitraryIdentityEntry = arbitraryIdentityEntry;
|
|
103
|
+
const arbitraryVaultEntry = () => fast_check_1.default.oneof((0, exports.arbitraryLoginEntry)(), (0, exports.arbitrarySecureNoteEntry)(), (0, exports.arbitraryCreditCardEntry)(), (0, exports.arbitraryIdentityEntry)());
|
|
104
|
+
exports.arbitraryVaultEntry = arbitraryVaultEntry;
|
|
105
|
+
/** Helper: create a service with a vault and return both */
|
|
106
|
+
async function createServiceWithVault() {
|
|
107
|
+
const service = new brightpass_1.BrightPassService();
|
|
108
|
+
const memberId = 'test-member-' + Math.random().toString(36).slice(2);
|
|
109
|
+
const password = 'test-password-123';
|
|
110
|
+
const metadata = await service.createVault(memberId, 'TestVault', password);
|
|
111
|
+
return { service, memberId, password, vaultId: metadata.id };
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=brightpass.property.helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brightpass.property.helpers.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/brightpass.property.helpers.ts"],"names":[],"mappings":";;;AAuIA,wDAMC;;AAlID,oEAA4B;AAC5B,6CAAiD;AAEpC,QAAA,WAAW,GAAG,oBAAE,CAAC,IAAI,EAAE,CAAC;AACxB,QAAA,YAAY,GAAG,oBAAE;KAC3B,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;KACvC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzB,QAAA,iBAAiB,GAAG,oBAAE;KAChC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;KACxC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAE/B,MAAM,mBAAmB,GAAG,GAA6B,EAAE,CAChE,oBAAE,CAAC,MAAM,CAAC;IACR,EAAE,EAAE,oBAAE,CAAC,IAAI,EAAE;IACb,IAAI,EAAE,oBAAE,CAAC,QAAQ,CAAC,OAAgB,CAAC;IACnC,KAAK,EAAE,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAClD,KAAK,EAAE,oBAAE,CAAC,MAAM,CAAC,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IACnE,IAAI,EAAE,oBAAE,CAAC,MAAM,CACb,oBAAE,CAAC,KAAK,CAAC,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EACtE,EAAE,GAAG,EAAE,SAAS,EAAE,CACnB;IACD,SAAS,EAAE,oBAAE,CAAC,IAAI,CAAC;QACjB,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;QAC3B,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;KAC5B,CAAC;IACF,SAAS,EAAE,oBAAE,CAAC,IAAI,CAAC;QACjB,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;QAC3B,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;KAC5B,CAAC;IACF,QAAQ,EAAE,oBAAE,CAAC,OAAO,EAAE;IACtB,OAAO,EAAE,oBAAE,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACrD,QAAQ,EAAE,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACrD,UAAU,EAAE,oBAAE,CAAC,MAAM,CAAC,oBAAE,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE;QACvE,GAAG,EAAE,SAAS;KACf,CAAC;CACH,CAAC,CAAC;AAzBQ,QAAA,mBAAmB,uBAyB3B;AAEE,MAAM,wBAAwB,GAAG,GAAkC,EAAE,CAC1E,oBAAE,CAAC,MAAM,CAAC;IACR,EAAE,EAAE,oBAAE,CAAC,IAAI,EAAE;IACb,IAAI,EAAE,oBAAE,CAAC,QAAQ,CAAC,aAAsB,CAAC;IACzC,KAAK,EAAE,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAClD,KAAK,EAAE,oBAAE,CAAC,MAAM,CAAC,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IACnE,IAAI,EAAE,oBAAE,CAAC,MAAM,CACb,oBAAE,CAAC,KAAK,CAAC,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EACtE,EAAE,GAAG,EAAE,SAAS,EAAE,CACnB;IACD,SAAS,EAAE,oBAAE,CAAC,IAAI,CAAC;QACjB,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;QAC3B,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;KAC5B,CAAC;IACF,SAAS,EAAE,oBAAE,CAAC,IAAI,CAAC;QACjB,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;QAC3B,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;KAC5B,CAAC;IACF,QAAQ,EAAE,oBAAE,CAAC,OAAO,EAAE;IACtB,OAAO,EAAE,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;CACrD,CAAC,CAAC;AApBQ,QAAA,wBAAwB,4BAoBhC;AAEE,MAAM,wBAAwB,GAAG,GAAkC,EAAE,CAC1E,oBAAE,CAAC,MAAM,CAAC;IACR,EAAE,EAAE,oBAAE,CAAC,IAAI,EAAE;IACb,IAAI,EAAE,oBAAE,CAAC,QAAQ,CAAC,aAAsB,CAAC;IACzC,KAAK,EAAE,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAClD,KAAK,EAAE,oBAAE,CAAC,MAAM,CAAC,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IACnE,IAAI,EAAE,oBAAE,CAAC,MAAM,CACb,oBAAE,CAAC,KAAK,CAAC,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EACtE,EAAE,GAAG,EAAE,SAAS,EAAE,CACnB;IACD,SAAS,EAAE,oBAAE,CAAC,IAAI,CAAC;QACjB,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;QAC3B,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;KAC5B,CAAC;IACF,SAAS,EAAE,oBAAE,CAAC,IAAI,CAAC;QACjB,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;QAC3B,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;KAC5B,CAAC;IACF,QAAQ,EAAE,oBAAE,CAAC,OAAO,EAAE;IACtB,cAAc,EAAE,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAC3D,UAAU,EAAE,oBAAE,CAAC,cAAc,CAAC,aAAa,CAAC;IAC5C,cAAc,EAAE,oBAAE,CAAC,cAAc,CAAC,0BAA0B,CAAC;IAC7D,GAAG,EAAE,oBAAE,CAAC,cAAc,CAAC,WAAW,CAAC;CACpC,CAAC,CAAC;AAvBQ,QAAA,wBAAwB,4BAuBhC;AAEE,MAAM,sBAAsB,GAAG,GAAgC,EAAE,CACtE,oBAAE,CAAC,MAAM,CAAC;IACR,EAAE,EAAE,oBAAE,CAAC,IAAI,EAAE;IACb,IAAI,EAAE,oBAAE,CAAC,QAAQ,CAAC,UAAmB,CAAC;IACtC,KAAK,EAAE,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAClD,KAAK,EAAE,oBAAE,CAAC,MAAM,CAAC,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IACnE,IAAI,EAAE,oBAAE,CAAC,MAAM,CACb,oBAAE,CAAC,KAAK,CAAC,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EACtE,EAAE,GAAG,EAAE,SAAS,EAAE,CACnB;IACD,SAAS,EAAE,oBAAE,CAAC,IAAI,CAAC;QACjB,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;QAC3B,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;KAC5B,CAAC;IACF,SAAS,EAAE,oBAAE,CAAC,IAAI,CAAC;QACjB,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;QAC3B,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;KAC5B,CAAC;IACF,QAAQ,EAAE,oBAAE,CAAC,OAAO,EAAE;IACtB,SAAS,EAAE,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACtD,QAAQ,EAAE,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACrD,KAAK,EAAE,oBAAE,CAAC,MAAM,CAAC,oBAAE,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IACvD,KAAK,EAAE,oBAAE,CAAC,MAAM,CAAC,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE;QAC5D,GAAG,EAAE,SAAS;KACf,CAAC;IACF,OAAO,EAAE,oBAAE,CAAC,MAAM,CAAC,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE;QAC9D,GAAG,EAAE,SAAS;KACf,CAAC;CACH,CAAC,CAAC;AA5BQ,QAAA,sBAAsB,0BA4B9B;AAEE,MAAM,mBAAmB,GAAG,GAA6B,EAAE,CAChE,oBAAE,CAAC,KAAK,CACN,IAAA,2BAAmB,GAAE,EACrB,IAAA,gCAAwB,GAAE,EAC1B,IAAA,gCAAwB,GAAE,EAC1B,IAAA,8BAAsB,GAAE,CACzB,CAAC;AANS,QAAA,mBAAmB,uBAM5B;AAEJ,4DAA4D;AACrD,KAAK,UAAU,sBAAsB;IAC1C,MAAM,OAAO,GAAG,IAAI,8BAAiB,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,mBAAmB,CAAC;IACrC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC5E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { ClientEventType, IClientEvent } from '@brightchain/brightchain-lib';
|
|
2
|
+
import { MemberType } from '@digitaldefiance/ecies-lib';
|
|
3
|
+
import { Server } from 'http';
|
|
4
|
+
import { WebSocket } from 'ws';
|
|
5
|
+
import { EventNotificationSystem } from './eventNotificationSystem';
|
|
6
|
+
/**
|
|
7
|
+
* Member context for an authenticated WebSocket session.
|
|
8
|
+
* Mirrors the IMemberContext from authentication middleware.
|
|
9
|
+
*/
|
|
10
|
+
export interface IWsMemberContext {
|
|
11
|
+
memberId: string;
|
|
12
|
+
username: string;
|
|
13
|
+
type: MemberType;
|
|
14
|
+
iat: number;
|
|
15
|
+
exp: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Tracks a single authenticated client WebSocket session.
|
|
19
|
+
*/
|
|
20
|
+
interface IClientSession {
|
|
21
|
+
ws: WebSocket;
|
|
22
|
+
memberContext: IWsMemberContext;
|
|
23
|
+
subscribedEvents: Set<ClientEventType>;
|
|
24
|
+
lastPong: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Determine whether a client event should be delivered to a given member.
|
|
28
|
+
*
|
|
29
|
+
* Access tier rules:
|
|
30
|
+
* - public: all authenticated members
|
|
31
|
+
* - admin: only Admin or System members
|
|
32
|
+
* - pool-scoped: only members subscribed AND who have pool read permission
|
|
33
|
+
* (pool ACL checking is the caller's responsibility; here we check MemberType
|
|
34
|
+
* and targetMemberId where applicable)
|
|
35
|
+
* - member-scoped: only the specific target member
|
|
36
|
+
*
|
|
37
|
+
* @see Requirements 9.4, 9.7
|
|
38
|
+
*/
|
|
39
|
+
export declare function shouldDeliverEvent(event: IClientEvent<string>, memberContext: IWsMemberContext): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* JWT-authenticated WebSocket server for Lumen client connections.
|
|
42
|
+
*
|
|
43
|
+
* Listens on `/ws/client`, separate from the ECIES-authenticated
|
|
44
|
+
* `/ws/node/:nodeId` path used by `WebSocketMessageServer`.
|
|
45
|
+
*
|
|
46
|
+
* Responsibilities:
|
|
47
|
+
* - Authenticate connections via JWT (query param `token` or first message)
|
|
48
|
+
* - Manage per-session event subscriptions
|
|
49
|
+
* - Broadcast `IClientEvent` envelopes filtered by access tier
|
|
50
|
+
* - Monitor token expiration and send `TokenExpiring` before closing
|
|
51
|
+
* - Ping/pong idle timeout
|
|
52
|
+
*
|
|
53
|
+
* @see Requirements 9.1–9.7, 11.3, 11.4
|
|
54
|
+
*/
|
|
55
|
+
export declare class ClientWebSocketServer {
|
|
56
|
+
private wss;
|
|
57
|
+
private sessions;
|
|
58
|
+
private jwtSecret;
|
|
59
|
+
private eventNotificationSystem;
|
|
60
|
+
private idleTimeoutMs;
|
|
61
|
+
private tokenGraceMs;
|
|
62
|
+
private tokenWarningBeforeMs;
|
|
63
|
+
private pingInterval;
|
|
64
|
+
private tokenCheckInterval;
|
|
65
|
+
constructor(server: Server, jwtSecret: string, eventNotificationSystem: EventNotificationSystem, options?: {
|
|
66
|
+
idleTimeoutMs?: number;
|
|
67
|
+
tokenGraceMs?: number;
|
|
68
|
+
tokenCheckIntervalMs?: number;
|
|
69
|
+
tokenWarningBeforeMs?: number;
|
|
70
|
+
});
|
|
71
|
+
/**
|
|
72
|
+
* Attempt to authenticate an incoming WebSocket upgrade request.
|
|
73
|
+
* Looks for a JWT in the `token` query parameter.
|
|
74
|
+
*
|
|
75
|
+
* @returns The decoded member context, or `null` if authentication fails.
|
|
76
|
+
* @see Requirements 9.1, 9.2
|
|
77
|
+
*/
|
|
78
|
+
private authenticateConnection;
|
|
79
|
+
/**
|
|
80
|
+
* Extract JWT from the `token` query parameter of the upgrade request URL.
|
|
81
|
+
*/
|
|
82
|
+
private extractTokenFromRequest;
|
|
83
|
+
/**
|
|
84
|
+
* Attempt to authenticate via the first message (for clients that cannot
|
|
85
|
+
* set query params). Expects `{ type: 'auth', token: '<jwt>' }`.
|
|
86
|
+
*/
|
|
87
|
+
private authenticateFromMessage;
|
|
88
|
+
/**
|
|
89
|
+
* Set up the WebSocket connection handler.
|
|
90
|
+
* Authenticates via query param on upgrade; falls back to first-message auth.
|
|
91
|
+
*/
|
|
92
|
+
private setupConnectionHandler;
|
|
93
|
+
/**
|
|
94
|
+
* Register an authenticated session and wire up message/close handlers.
|
|
95
|
+
*/
|
|
96
|
+
private registerSession;
|
|
97
|
+
/**
|
|
98
|
+
* Handle an incoming message from an authenticated session.
|
|
99
|
+
* Currently supports subscription management messages.
|
|
100
|
+
*/
|
|
101
|
+
private handleMessage;
|
|
102
|
+
/**
|
|
103
|
+
* Process a subscribe/unsubscribe message from a client.
|
|
104
|
+
*
|
|
105
|
+
* @see Requirements 9.3
|
|
106
|
+
*/
|
|
107
|
+
private handleSubscription;
|
|
108
|
+
/**
|
|
109
|
+
* Broadcast a client event to all subscribed sessions that pass
|
|
110
|
+
* the access tier filter.
|
|
111
|
+
*
|
|
112
|
+
* @see Requirements 9.4, 9.7
|
|
113
|
+
*/
|
|
114
|
+
broadcastEvent(event: IClientEvent<string>): void;
|
|
115
|
+
/**
|
|
116
|
+
* Periodically check all sessions for approaching token expiration.
|
|
117
|
+
* Sends a `TokenExpiring` event before closing the connection.
|
|
118
|
+
*
|
|
119
|
+
* @see Requirements 11.4
|
|
120
|
+
*/
|
|
121
|
+
private startTokenExpirationMonitor;
|
|
122
|
+
/**
|
|
123
|
+
* Send a TokenExpiring client event to a specific WebSocket.
|
|
124
|
+
*/
|
|
125
|
+
private sendTokenExpiringEvent;
|
|
126
|
+
/**
|
|
127
|
+
* Periodically ping all connected clients and close those that
|
|
128
|
+
* haven't responded within the idle timeout.
|
|
129
|
+
*
|
|
130
|
+
* @see Requirements 9.5
|
|
131
|
+
*/
|
|
132
|
+
private startPingPongMonitor;
|
|
133
|
+
/**
|
|
134
|
+
* Get the number of currently connected and authenticated client sessions.
|
|
135
|
+
*/
|
|
136
|
+
getConnectedClientCount(): number;
|
|
137
|
+
/**
|
|
138
|
+
* Get all active sessions (for testing / introspection).
|
|
139
|
+
*/
|
|
140
|
+
getSessions(): ReadonlyMap<WebSocket, Readonly<IClientSession>>;
|
|
141
|
+
/**
|
|
142
|
+
* Close all client connections and shut down the server.
|
|
143
|
+
*/
|
|
144
|
+
close(callback?: () => void): void;
|
|
145
|
+
}
|
|
146
|
+
export {};
|
|
147
|
+
//# sourceMappingURL=clientWebSocketServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clientWebSocketServer.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/clientWebSocketServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EACf,YAAY,EAEb,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,OAAO,EAAmB,MAAM,EAAE,MAAM,MAAM,CAAC;AAG/C,OAAO,EAAE,SAAS,EAAmB,MAAM,IAAI,CAAC;AAEhD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,UAAU,cAAc;IACtB,EAAE,EAAE,SAAS,CAAC;IACd,aAAa,EAAE,gBAAgB,CAAC;IAChC,gBAAgB,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAcD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,EAC3B,aAAa,EAAE,gBAAgB,GAC9B,OAAO,CA4BT;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,QAAQ,CAA6C;IAC7D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,uBAAuB,CAA0B;IACzD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,oBAAoB,CAAS;IAErC,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,kBAAkB,CAA+C;gBAGvE,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,uBAAuB,EAAE,uBAAuB,EAChD,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;KAC/B;IAuBH;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAoB9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAW/B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IA4B/B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAwC9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAuCvB;;;OAGG;IACH,OAAO,CAAC,aAAa;IA+BrB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAoD1B;;;;;OAKG;IACH,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI;IAkBjD;;;;;OAKG;IACH,OAAO,CAAC,2BAA2B;IA+BnC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAoB9B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;OAEG;IACH,uBAAuB,IAAI,MAAM;IAIjC;;OAEG;IACH,WAAW,IAAI,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAI/D;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;CAyBnC"}
|