@brightchain/brightchain-lib 0.24.1 → 0.25.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.
Files changed (164) hide show
  1. package/package.json +1 -1
  2. package/src/lib/brightChain.d.ts +16 -2
  3. package/src/lib/brightChain.d.ts.map +1 -1
  4. package/src/lib/brightChain.js +26 -4
  5. package/src/lib/brightChain.js.map +1 -1
  6. package/src/lib/constants.d.ts +8 -0
  7. package/src/lib/constants.d.ts.map +1 -1
  8. package/src/lib/constants.js +12 -3
  9. package/src/lib/constants.js.map +1 -1
  10. package/src/lib/documents/member/memberDocument.js +1 -1
  11. package/src/lib/documents/member/memberDocument.js.map +1 -1
  12. package/src/lib/documents/member/memberProfileDocument.js +1 -1
  13. package/src/lib/documents/member/memberProfileDocument.js.map +1 -1
  14. package/src/lib/documents/member/memberProfileHydration.d.ts.map +1 -1
  15. package/src/lib/documents/member/memberProfileHydration.js +18 -0
  16. package/src/lib/documents/member/memberProfileHydration.js.map +1 -1
  17. package/src/lib/enumerations/brightChainStrings.d.ts.map +1 -1
  18. package/src/lib/enumerations/brightChainStrings.js.map +1 -1
  19. package/src/lib/enumerations/brightPassStrings.d.ts +24 -11
  20. package/src/lib/enumerations/brightPassStrings.d.ts.map +1 -1
  21. package/src/lib/enumerations/brightPassStrings.js +25 -11
  22. package/src/lib/enumerations/brightPassStrings.js.map +1 -1
  23. package/src/lib/enumerations/index.d.ts +2 -1
  24. package/src/lib/enumerations/index.d.ts.map +1 -1
  25. package/src/lib/enumerations/index.js +3 -1
  26. package/src/lib/enumerations/index.js.map +1 -1
  27. package/src/lib/enumerations/writeMode.d.ts +22 -0
  28. package/src/lib/enumerations/writeMode.d.ts.map +1 -0
  29. package/src/lib/enumerations/writeMode.js +26 -0
  30. package/src/lib/enumerations/writeMode.js.map +1 -0
  31. package/src/lib/errors/index.d.ts +12 -0
  32. package/src/lib/errors/index.d.ts.map +1 -1
  33. package/src/lib/errors/index.js +15 -0
  34. package/src/lib/errors/index.js.map +1 -1
  35. package/src/lib/errors/writeAclErrors.d.ts +98 -0
  36. package/src/lib/errors/writeAclErrors.d.ts.map +1 -0
  37. package/src/lib/errors/writeAclErrors.js +159 -0
  38. package/src/lib/errors/writeAclErrors.js.map +1 -0
  39. package/src/lib/factories/blockStoreFactory.d.ts +4 -4
  40. package/src/lib/factories/blockStoreFactory.d.ts.map +1 -1
  41. package/src/lib/factories/blockStoreFactory.js +10 -4
  42. package/src/lib/factories/blockStoreFactory.js.map +1 -1
  43. package/src/lib/i18n/strings/brightpass/englishUK.d.ts +2 -2
  44. package/src/lib/i18n/strings/brightpass/englishUK.d.ts.map +1 -1
  45. package/src/lib/i18n/strings/brightpass/englishUs.d.ts +2 -2
  46. package/src/lib/i18n/strings/brightpass/englishUs.d.ts.map +1 -1
  47. package/src/lib/i18n/strings/brightpass/englishUs.js +25 -11
  48. package/src/lib/i18n/strings/brightpass/englishUs.js.map +1 -1
  49. package/src/lib/i18n/strings/brightpass/french.d.ts +2 -2
  50. package/src/lib/i18n/strings/brightpass/french.d.ts.map +1 -1
  51. package/src/lib/i18n/strings/brightpass/french.js +46 -17
  52. package/src/lib/i18n/strings/brightpass/french.js.map +1 -1
  53. package/src/lib/i18n/strings/brightpass/german.d.ts +2 -2
  54. package/src/lib/i18n/strings/brightpass/german.d.ts.map +1 -1
  55. package/src/lib/i18n/strings/brightpass/german.js +46 -17
  56. package/src/lib/i18n/strings/brightpass/german.js.map +1 -1
  57. package/src/lib/i18n/strings/brightpass/japanese.d.ts +2 -2
  58. package/src/lib/i18n/strings/brightpass/japanese.d.ts.map +1 -1
  59. package/src/lib/i18n/strings/brightpass/japanese.js +46 -17
  60. package/src/lib/i18n/strings/brightpass/japanese.js.map +1 -1
  61. package/src/lib/i18n/strings/brightpass/mandarin.d.ts +2 -2
  62. package/src/lib/i18n/strings/brightpass/mandarin.d.ts.map +1 -1
  63. package/src/lib/i18n/strings/brightpass/mandarin.js +46 -17
  64. package/src/lib/i18n/strings/brightpass/mandarin.js.map +1 -1
  65. package/src/lib/i18n/strings/brightpass/spanish.d.ts +2 -2
  66. package/src/lib/i18n/strings/brightpass/spanish.d.ts.map +1 -1
  67. package/src/lib/i18n/strings/brightpass/spanish.js +46 -17
  68. package/src/lib/i18n/strings/brightpass/spanish.js.map +1 -1
  69. package/src/lib/i18n/strings/brightpass/ukrainian.d.ts +2 -2
  70. package/src/lib/i18n/strings/brightpass/ukrainian.d.ts.map +1 -1
  71. package/src/lib/i18n/strings/brightpass/ukrainian.js +46 -17
  72. package/src/lib/i18n/strings/brightpass/ukrainian.js.map +1 -1
  73. package/src/lib/i18n/strings/french.d.ts.map +1 -1
  74. package/src/lib/i18n/strings/french.js +5 -5
  75. package/src/lib/i18n/strings/french.js.map +1 -1
  76. package/src/lib/i18n/strings/german.d.ts.map +1 -1
  77. package/src/lib/i18n/strings/german.js.map +1 -1
  78. package/src/lib/i18n/strings/japanese.d.ts.map +1 -1
  79. package/src/lib/i18n/strings/japanese.js.map +1 -1
  80. package/src/lib/i18n/strings/mandarin.d.ts.map +1 -1
  81. package/src/lib/i18n/strings/mandarin.js.map +1 -1
  82. package/src/lib/i18n/strings/spanish.d.ts.map +1 -1
  83. package/src/lib/i18n/strings/spanish.js.map +1 -1
  84. package/src/lib/i18n/strings/ukrainian.d.ts.map +1 -1
  85. package/src/lib/i18n/strings/ukrainian.js +1 -1
  86. package/src/lib/i18n/strings/ukrainian.js.map +1 -1
  87. package/src/lib/interfaces/auth/aclDocument.d.ts +32 -0
  88. package/src/lib/interfaces/auth/aclDocument.d.ts.map +1 -0
  89. package/src/lib/interfaces/auth/aclDocument.js +13 -0
  90. package/src/lib/interfaces/auth/aclDocument.js.map +1 -0
  91. package/src/lib/interfaces/auth/aclDocumentSerialization.d.ts +63 -0
  92. package/src/lib/interfaces/auth/aclDocumentSerialization.d.ts.map +1 -0
  93. package/src/lib/interfaces/auth/aclDocumentSerialization.js +99 -0
  94. package/src/lib/interfaces/auth/aclDocumentSerialization.js.map +1 -0
  95. package/src/lib/interfaces/auth/capabilityToken.d.ts +35 -0
  96. package/src/lib/interfaces/auth/capabilityToken.d.ts.map +1 -0
  97. package/src/lib/interfaces/auth/capabilityToken.js +14 -0
  98. package/src/lib/interfaces/auth/capabilityToken.js.map +1 -0
  99. package/src/lib/interfaces/auth/capabilityTokenSerialization.d.ts +55 -0
  100. package/src/lib/interfaces/auth/capabilityTokenSerialization.d.ts.map +1 -0
  101. package/src/lib/interfaces/auth/capabilityTokenSerialization.js +78 -0
  102. package/src/lib/interfaces/auth/capabilityTokenSerialization.js.map +1 -0
  103. package/src/lib/interfaces/auth/index.d.ts +10 -0
  104. package/src/lib/interfaces/auth/index.d.ts.map +1 -1
  105. package/src/lib/interfaces/auth/index.js +9 -1
  106. package/src/lib/interfaces/auth/index.js.map +1 -1
  107. package/src/lib/interfaces/auth/writeAcl.d.ts +44 -0
  108. package/src/lib/interfaces/auth/writeAcl.d.ts.map +1 -0
  109. package/src/lib/interfaces/auth/writeAcl.js +12 -0
  110. package/src/lib/interfaces/auth/writeAcl.js.map +1 -0
  111. package/src/lib/interfaces/auth/writeAclAuditLogger.d.ts +83 -0
  112. package/src/lib/interfaces/auth/writeAclAuditLogger.d.ts.map +1 -0
  113. package/src/lib/interfaces/auth/writeAclAuditLogger.js +13 -0
  114. package/src/lib/interfaces/auth/writeAclAuditLogger.js.map +1 -0
  115. package/src/lib/interfaces/auth/writeProof.d.ts +35 -0
  116. package/src/lib/interfaces/auth/writeProof.d.ts.map +1 -0
  117. package/src/lib/interfaces/auth/writeProof.js +13 -0
  118. package/src/lib/interfaces/auth/writeProof.js.map +1 -0
  119. package/src/lib/interfaces/auth/writeProofUtils.d.ts +34 -0
  120. package/src/lib/interfaces/auth/writeProofUtils.d.ts.map +1 -0
  121. package/src/lib/interfaces/auth/writeProofUtils.js +42 -0
  122. package/src/lib/interfaces/auth/writeProofUtils.js.map +1 -0
  123. package/src/lib/interfaces/availability/gossipService.d.ts +22 -2
  124. package/src/lib/interfaces/availability/gossipService.d.ts.map +1 -1
  125. package/src/lib/interfaces/availability/gossipService.js.map +1 -1
  126. package/src/lib/interfaces/member/memberData.d.ts +5 -0
  127. package/src/lib/interfaces/member/memberData.d.ts.map +1 -1
  128. package/src/lib/interfaces/member/profileStorage.d.ts +9 -0
  129. package/src/lib/interfaces/member/profileStorage.d.ts.map +1 -1
  130. package/src/lib/interfaces/services/index.d.ts +1 -0
  131. package/src/lib/interfaces/services/index.d.ts.map +1 -1
  132. package/src/lib/interfaces/services/writeAclService.d.ts +98 -0
  133. package/src/lib/interfaces/services/writeAclService.d.ts.map +1 -0
  134. package/src/lib/interfaces/services/writeAclService.js +13 -0
  135. package/src/lib/interfaces/services/writeAclService.js.map +1 -0
  136. package/src/lib/interfaces/storage/blockStore.d.ts +12 -3
  137. package/src/lib/interfaces/storage/blockStore.d.ts.map +1 -1
  138. package/src/lib/interfaces/storage/cloudBlockStoreConfig.d.ts +2 -2
  139. package/src/lib/interfaces/storage/cloudBlockStoreConfig.d.ts.map +1 -1
  140. package/src/lib/interfaces/storage/headRegistry.d.ts +7 -3
  141. package/src/lib/interfaces/storage/headRegistry.d.ts.map +1 -1
  142. package/src/lib/interfaces/storage/index.d.ts +1 -1
  143. package/src/lib/interfaces/storage/index.d.ts.map +1 -1
  144. package/src/lib/interfaces/storage/index.js.map +1 -1
  145. package/src/lib/interfaces/storage/universalBlockStore.d.ts +2 -1
  146. package/src/lib/interfaces/storage/universalBlockStore.d.ts.map +1 -1
  147. package/src/lib/services/member/memberCblService.d.ts.map +1 -1
  148. package/src/lib/services/member/memberCblService.js +1 -1
  149. package/src/lib/services/member/memberCblService.js.map +1 -1
  150. package/src/lib/services/memberStore.d.ts.map +1 -1
  151. package/src/lib/services/memberStore.js +4 -0
  152. package/src/lib/services/memberStore.js.map +1 -1
  153. package/src/lib/stores/blockStoreAdapter.d.ts +2 -1
  154. package/src/lib/stores/blockStoreAdapter.d.ts.map +1 -1
  155. package/src/lib/stores/blockStoreAdapter.js +4 -2
  156. package/src/lib/stores/blockStoreAdapter.js.map +1 -1
  157. package/src/lib/stores/memoryBlockStore.d.ts +38 -12
  158. package/src/lib/stores/memoryBlockStore.d.ts.map +1 -1
  159. package/src/lib/stores/memoryBlockStore.js +170 -70
  160. package/src/lib/stores/memoryBlockStore.js.map +1 -1
  161. package/src/lib/stores/pooledMemoryBlockStore.d.ts +1 -1
  162. package/src/lib/stores/pooledMemoryBlockStore.d.ts.map +1 -1
  163. package/src/lib/stores/pooledMemoryBlockStore.js +1 -1
  164. package/src/lib/stores/pooledMemoryBlockStore.js.map +1 -1
@@ -20,8 +20,11 @@ import { MemoryBlockMetadataStore } from './memoryBlockMetadataStore';
20
20
  * @see IBlockStore for the interface definition
21
21
  */
22
22
  export declare class MemoryBlockStore implements IBlockStore {
23
+ /**
24
+ * Per-size block maps. Only maps for configured supportedBlockSizes are initialized.
25
+ */
23
26
  private readonly blocks;
24
- private readonly _blockSize;
27
+ private readonly _supportedBlockSizes;
25
28
  /**
26
29
  * Optional FEC service for parity generation and recovery.
27
30
  * If not provided, FEC operations will return errors or no-ops.
@@ -38,11 +41,16 @@ export declare class MemoryBlockStore implements IBlockStore {
38
41
  private readonly parityBlocks;
39
42
  /**
40
43
  * Create a new MemoryBlockStore.
41
- * @param blockSize - The block size for this store
44
+ * @param blockSizeOrSizes - A single BlockSize (backward compat) or an array of supported BlockSize values
42
45
  * @param fecService - Optional FEC service for parity generation and recovery
43
46
  * @param metadataStore - Optional metadata store (creates new one if not provided)
44
47
  */
45
- constructor(blockSize: BlockSize, fecService?: IFecService | null, metadataStore?: MemoryBlockMetadataStore);
48
+ constructor(blockSizeOrSizes: BlockSize | readonly BlockSize[], fecService?: IFecService | null, metadataStore?: MemoryBlockMetadataStore);
49
+ get supportedBlockSizes(): readonly BlockSize[];
50
+ /**
51
+ * Backward-compatible getter: returns the first supported block size.
52
+ * @deprecated Use supportedBlockSizes instead.
53
+ */
46
54
  get blockSize(): BlockSize;
47
55
  /**
48
56
  * Get the FEC service if available.
@@ -67,29 +75,47 @@ export declare class MemoryBlockStore implements IBlockStore {
67
75
  */
68
76
  private hexToChecksum;
69
77
  /**
70
- * Check if a block exists
78
+ * Find a block by key across all configured size maps.
79
+ * @returns The block if found, or undefined
80
+ */
81
+ private findBlock;
82
+ /**
83
+ * Check if a block exists in any size map (synchronous, no metadata).
84
+ */
85
+ private hasBlock;
86
+ /**
87
+ * Set a block directly in the correct size map (for internal use like recovery).
88
+ */
89
+ private setBlock;
90
+ /**
91
+ * Check if a block exists (searches across all configured size maps)
71
92
  */
72
93
  has(key: Checksum | string): Promise<boolean>;
73
94
  /**
74
- * Get a block's data
95
+ * Get a block's data (searches across all configured size maps)
75
96
  */
76
97
  getData(key: Checksum): Promise<RawDataBlock>;
77
98
  /**
78
99
  * Store a block's data with optional durability settings.
100
+ * Validates that block.blockSize is in supportedBlockSizes before accepting.
79
101
  * @param block - The block to store
80
102
  * @param options - Optional storage options including durability level and expiration
81
103
  */
82
104
  setData(block: RawDataBlock, options?: BlockStoreOptions): Promise<void>;
83
105
  /**
84
- * Delete a block's data (and associated parity blocks and metadata)
106
+ * Delete a block's data (and associated parity blocks and metadata).
107
+ * Searches across all configured size maps.
85
108
  */
86
109
  deleteData(key: Checksum): Promise<void>;
87
110
  /**
88
- * Get random block checksums from the store
111
+ * Get random block checksums from the store for a specific block size.
112
+ * @param count - Number of random block checksums to return
113
+ * @param blockSize - The block size pool to draw from (must be in supportedBlockSizes)
89
114
  */
90
- getRandomBlocks(count: number): Promise<Checksum[]>;
115
+ getRandomBlocks(count: number, blockSize: BlockSize): Promise<Checksum[]>;
91
116
  /**
92
- * Store a block's data (alias for setData)
117
+ * Store raw data with a key (convenience method).
118
+ * Uses the first supported block size for block creation.
93
119
  */
94
120
  put(key: Checksum | string, data: Uint8Array, options?: BlockStoreOptions): Promise<void>;
95
121
  /**
@@ -101,15 +127,15 @@ export declare class MemoryBlockStore implements IBlockStore {
101
127
  */
102
128
  static randomId(): string;
103
129
  /**
104
- * Clear all blocks, metadata, and parity data
130
+ * Clear all blocks, metadata, and parity data across all size maps
105
131
  */
106
132
  clear(): void;
107
133
  /**
108
- * Get total number of blocks
134
+ * Get total number of blocks across all size maps
109
135
  */
110
136
  size(): number;
111
137
  /**
112
- * Get a handle to a block
138
+ * Get a handle to a block (searches across all configured size maps)
113
139
  */
114
140
  get<T extends BaseBlock>(key: Checksum | string): BlockHandle<T>;
115
141
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"memoryBlockStore.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/stores/memoryBlockStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memoryBlockStore.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/stores/memoryBlockStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAqB,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAatD,OAAO,EAAE,WAAW,EAAc,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EACL,iBAAiB,EACjB,cAAc,EAEd,cAAc,EACd,cAAc,EACf,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAWtE;;;;;;;;;;GAUG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAClD;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmD;IAC1E,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAuB;IAE5D;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAEhD;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2B;IAEzD;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmC;IAEhE;;;;;OAKG;gBAED,gBAAgB,EAAE,SAAS,GAAG,SAAS,SAAS,EAAE,EAClD,UAAU,CAAC,EAAE,WAAW,GAAG,IAAI,EAC/B,aAAa,CAAC,EAAE,wBAAwB;IAa1C,IAAW,mBAAmB,IAAI,SAAS,SAAS,EAAE,CAErD;IAED;;;OAGG;IACH,IAAW,SAAS,IAAI,SAAS,CAEhC;IAED;;;OAGG;IACI,aAAa,IAAI,WAAW,GAAG,IAAI;IAI1C;;;OAGG;IACI,gBAAgB,IAAI,wBAAwB;IAInD;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAIhB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAIrB;;;OAGG;IACH,OAAO,CAAC,SAAS;IAQjB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAOhB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAOhB;;OAEG;IACU,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU1D;;OAEG;IACU,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;IAiB1D;;;;;OAKG;IACU,OAAO,CAClB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAkDhB;;;OAGG;IACU,UAAU,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBrD;;;;OAIG;IACU,eAAe,CAC1B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,QAAQ,EAAE,CAAC;IAsBtB;;;OAGG;IACU,GAAG,CACd,GAAG,EAAE,QAAQ,GAAG,MAAM,EACtB,IAAI,EAAE,UAAU,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAiBhB;;OAEG;IACU,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1D;;OAEG;WACW,QAAQ,IAAI,MAAM;IAQhC;;OAEG;IACI,KAAK,IAAI,IAAI;IAQpB;;OAEG;IACI,IAAI,IAAI,MAAM;IAQrB;;OAEG;IACI,GAAG,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;IAwBvE;;;;OAIG;IACU,WAAW,CACtB,GAAG,EAAE,QAAQ,GAAG,MAAM,GACrB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAKjC;;;;OAIG;IACU,cAAc,CACzB,GAAG,EAAE,QAAQ,GAAG,MAAM,EACtB,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC;IAYhB;;;;;;OAMG;IACU,oBAAoB,CAC/B,GAAG,EAAE,QAAQ,GAAG,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,QAAQ,EAAE,CAAC;IAsDtB;;;;OAIG;IACU,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAazE;;;;OAIG;IACU,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAiG1E;;;;OAIG;IACU,oBAAoB,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAsC3E;;;OAGG;IACU,2BAA2B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAU/D;;;OAGG;IACU,wBAAwB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAW5D;;;;OAIG;IACU,iBAAiB,CAC5B,GAAG,EAAE,QAAQ,GAAG,MAAM,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IA8BhB;;;;OAIG;IACU,iBAAiB,CAC5B,GAAG,EAAE,QAAQ,GAAG,MAAM,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IAmChB;;;;;;;;;OASG;IACU,aAAa,CACxB,GAAG,EAAE,QAAQ,GAAG,MAAM,EACtB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,cAAc,CAAC;IAmE1B;;;;;;;;;;;;;;;OAeG;IACU,qBAAqB,CAChC,OAAO,EAAE,UAAU,EACnB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,gBAAgB,CAAC;IAyG5B;;;;;;;;;;OAUG;YACW,0BAA0B;IAiCxC;;;;;;;;;;;;;;OAcG;IACU,WAAW,CACtB,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAC3B,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,EAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,GACzB,OAAO,CAAC,UAAU,CAAC;IA0DtB;;;;;;;;OAQG;IACI,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB;IAkFhE;;;;;;;;;;OAUG;IACI,oBAAoB,CACzB,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAC3B,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAC3B,SAAS,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE,MAAM,EAAE,EAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,EAC1B,WAAW,CAAC,EAAE,OAAO,GACpB,MAAM;CAyBV"}
@@ -39,8 +39,11 @@ function toStorageKey(hex) {
39
39
  * @see IBlockStore for the interface definition
40
40
  */
41
41
  class MemoryBlockStore {
42
+ /**
43
+ * Per-size block maps. Only maps for configured supportedBlockSizes are initialized.
44
+ */
42
45
  blocks = new Map();
43
- _blockSize;
46
+ _supportedBlockSizes;
44
47
  /**
45
48
  * Optional FEC service for parity generation and recovery.
46
49
  * If not provided, FEC operations will return errors or no-ops.
@@ -57,17 +60,30 @@ class MemoryBlockStore {
57
60
  parityBlocks = new Map();
58
61
  /**
59
62
  * Create a new MemoryBlockStore.
60
- * @param blockSize - The block size for this store
63
+ * @param blockSizeOrSizes - A single BlockSize (backward compat) or an array of supported BlockSize values
61
64
  * @param fecService - Optional FEC service for parity generation and recovery
62
65
  * @param metadataStore - Optional metadata store (creates new one if not provided)
63
66
  */
64
- constructor(blockSize, fecService, metadataStore) {
65
- this._blockSize = blockSize;
67
+ constructor(blockSizeOrSizes, fecService, metadataStore) {
68
+ this._supportedBlockSizes = Array.isArray(blockSizeOrSizes)
69
+ ? blockSizeOrSizes
70
+ : [blockSizeOrSizes];
71
+ // Initialize per-size maps only for configured sizes
72
+ for (const size of this._supportedBlockSizes) {
73
+ this.blocks.set(size, new Map());
74
+ }
66
75
  this.fecService = fecService ?? null;
67
76
  this.metadataStore = metadataStore ?? new memoryBlockMetadataStore_1.MemoryBlockMetadataStore();
68
77
  }
78
+ get supportedBlockSizes() {
79
+ return this._supportedBlockSizes;
80
+ }
81
+ /**
82
+ * Backward-compatible getter: returns the first supported block size.
83
+ * @deprecated Use supportedBlockSizes instead.
84
+ */
69
85
  get blockSize() {
70
- return this._blockSize;
86
+ return this._supportedBlockSizes[0];
71
87
  }
72
88
  /**
73
89
  * Get the FEC service if available.
@@ -100,37 +116,85 @@ class MemoryBlockStore {
100
116
  return checksum_1.Checksum.fromHex(hex);
101
117
  }
102
118
  /**
103
- * Check if a block exists
119
+ * Find a block by key across all configured size maps.
120
+ * @returns The block if found, or undefined
121
+ */
122
+ findBlock(keyHex) {
123
+ for (const sizeMap of this.blocks.values()) {
124
+ const block = sizeMap.get(keyHex);
125
+ if (block)
126
+ return block;
127
+ }
128
+ return undefined;
129
+ }
130
+ /**
131
+ * Check if a block exists in any size map (synchronous, no metadata).
132
+ */
133
+ hasBlock(keyHex) {
134
+ for (const sizeMap of this.blocks.values()) {
135
+ if (sizeMap.has(keyHex))
136
+ return true;
137
+ }
138
+ return false;
139
+ }
140
+ /**
141
+ * Set a block directly in the correct size map (for internal use like recovery).
142
+ */
143
+ setBlock(keyHex, block) {
144
+ const sizeMap = this.blocks.get(block.blockSize);
145
+ if (sizeMap) {
146
+ sizeMap.set(keyHex, block);
147
+ }
148
+ }
149
+ /**
150
+ * Check if a block exists (searches across all configured size maps)
104
151
  */
105
152
  async has(key) {
106
153
  const keyHex = this.keyToHex(key);
107
- return this.blocks.has(keyHex);
154
+ for (const sizeMap of this.blocks.values()) {
155
+ if (sizeMap.has(keyHex)) {
156
+ return true;
157
+ }
158
+ }
159
+ return false;
108
160
  }
109
161
  /**
110
- * Get a block's data
162
+ * Get a block's data (searches across all configured size maps)
111
163
  */
112
164
  async getData(key) {
113
165
  const keyHex = this.keyToHex(key);
114
- const block = this.blocks.get(keyHex);
115
- if (!block) {
116
- throw new storeError_1.StoreError(storeErrorType_1.StoreErrorType.KeyNotFound, undefined, {
117
- KEY: keyHex,
118
- });
119
- }
120
- // Record access in metadata
121
- if (this.metadataStore.has(keyHex)) {
122
- await this.metadataStore.recordAccess(toStorageKey(keyHex));
166
+ for (const sizeMap of this.blocks.values()) {
167
+ const block = sizeMap.get(keyHex);
168
+ if (block) {
169
+ // Record access in metadata
170
+ if (this.metadataStore.has(keyHex)) {
171
+ await this.metadataStore.recordAccess(toStorageKey(keyHex));
172
+ }
173
+ return block;
174
+ }
123
175
  }
124
- return block;
176
+ throw new storeError_1.StoreError(storeErrorType_1.StoreErrorType.KeyNotFound, undefined, {
177
+ KEY: keyHex,
178
+ });
125
179
  }
126
180
  /**
127
181
  * Store a block's data with optional durability settings.
182
+ * Validates that block.blockSize is in supportedBlockSizes before accepting.
128
183
  * @param block - The block to store
129
184
  * @param options - Optional storage options including durability level and expiration
130
185
  */
131
186
  async setData(block, options) {
187
+ // Validate block size membership
188
+ if (!this._supportedBlockSizes.includes(block.blockSize)) {
189
+ throw new storeError_1.StoreError(storeErrorType_1.StoreErrorType.BlockValidationFailed);
190
+ }
132
191
  const keyHex = block.idChecksum.toHex();
133
- if (this.blocks.has(keyHex)) {
192
+ // Check idempotency across all size maps
193
+ const sizeMap = this.blocks.get(block.blockSize);
194
+ if (!sizeMap) {
195
+ throw new storeError_1.StoreError(storeErrorType_1.StoreErrorType.BlockValidationFailed);
196
+ }
197
+ if (sizeMap.has(keyHex)) {
134
198
  return; // Idempotent - block already exists
135
199
  }
136
200
  try {
@@ -139,11 +203,9 @@ class MemoryBlockStore {
139
203
  catch {
140
204
  throw new storeError_1.StoreError(storeErrorType_1.StoreErrorType.BlockValidationFailed);
141
205
  }
142
- // Store the block
143
- this.blocks.set(keyHex, block);
206
+ // Store the block in the correct size-specific map
207
+ sizeMap.set(keyHex, block);
144
208
  // Create metadata for the block
145
- // keyHex is the SHA3-512 checksum hex (128 chars) used as the storage key.
146
- // We cast it directly to BlockId since it serves as an opaque storage key here.
147
209
  const metadata = (0, blockMetadata_1.createDefaultBlockMetadata)(keyHex, block.data.length, keyHex, options);
148
210
  await this.metadataStore.create(metadata);
149
211
  // Generate parity blocks based on durability level
@@ -160,15 +222,22 @@ class MemoryBlockStore {
160
222
  }
161
223
  }
162
224
  /**
163
- * Delete a block's data (and associated parity blocks and metadata)
225
+ * Delete a block's data (and associated parity blocks and metadata).
226
+ * Searches across all configured size maps.
164
227
  */
165
228
  async deleteData(key) {
166
229
  const keyHex = this.keyToHex(key);
167
- if (!this.blocks.has(keyHex)) {
230
+ let found = false;
231
+ for (const sizeMap of this.blocks.values()) {
232
+ if (sizeMap.has(keyHex)) {
233
+ sizeMap.delete(keyHex);
234
+ found = true;
235
+ break;
236
+ }
237
+ }
238
+ if (!found) {
168
239
  throw new storeError_1.StoreError(storeErrorType_1.StoreErrorType.KeyNotFound);
169
240
  }
170
- // Delete the block data
171
- this.blocks.delete(keyHex);
172
241
  // Delete parity blocks
173
242
  this.parityBlocks.delete(keyHex);
174
243
  // Delete metadata (if exists)
@@ -177,10 +246,19 @@ class MemoryBlockStore {
177
246
  }
178
247
  }
179
248
  /**
180
- * Get random block checksums from the store
249
+ * Get random block checksums from the store for a specific block size.
250
+ * @param count - Number of random block checksums to return
251
+ * @param blockSize - The block size pool to draw from (must be in supportedBlockSizes)
181
252
  */
182
- async getRandomBlocks(count) {
183
- const allKeys = Array.from(this.blocks.keys());
253
+ async getRandomBlocks(count, blockSize) {
254
+ if (!this._supportedBlockSizes.includes(blockSize)) {
255
+ throw new storeError_1.StoreError(storeErrorType_1.StoreErrorType.BlockValidationFailed);
256
+ }
257
+ const sizeMap = this.blocks.get(blockSize);
258
+ if (!sizeMap) {
259
+ return [];
260
+ }
261
+ const allKeys = Array.from(sizeMap.keys());
184
262
  const result = [];
185
263
  const actualCount = Math.min(count, allKeys.length);
186
264
  const shuffled = [...allKeys].sort(() => Math.random() - 0.5);
@@ -191,14 +269,17 @@ class MemoryBlockStore {
191
269
  return result;
192
270
  }
193
271
  /**
194
- * Store a block's data (alias for setData)
272
+ * Store raw data with a key (convenience method).
273
+ * Uses the first supported block size for block creation.
195
274
  */
196
275
  async put(key, data, options) {
197
- if (this._blockSize !== blockSize_1.BlockSize.Unknown &&
198
- data.length > this._blockSize) {
276
+ // Determine the appropriate block size for this data
277
+ const targetSize = this._supportedBlockSizes.find((size) => size === blockSize_1.BlockSize.Unknown || data.length <= size) ?? this._supportedBlockSizes[0];
278
+ if (targetSize !== blockSize_1.BlockSize.Unknown &&
279
+ data.length > targetSize) {
199
280
  throw new storeError_1.StoreError(storeErrorType_1.StoreErrorType.BlockValidationFailed);
200
281
  }
201
- const block = new rawData_1.RawDataBlock(this._blockSize, data);
282
+ const block = new rawData_1.RawDataBlock(targetSize, data);
202
283
  await this.setData(block, options);
203
284
  }
204
285
  /**
@@ -217,32 +298,40 @@ class MemoryBlockStore {
217
298
  return Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');
218
299
  }
219
300
  /**
220
- * Clear all blocks, metadata, and parity data
301
+ * Clear all blocks, metadata, and parity data across all size maps
221
302
  */
222
303
  clear() {
223
- this.blocks.clear();
304
+ for (const sizeMap of this.blocks.values()) {
305
+ sizeMap.clear();
306
+ }
224
307
  this.parityBlocks.clear();
225
308
  this.metadataStore.clear();
226
309
  }
227
310
  /**
228
- * Get total number of blocks
311
+ * Get total number of blocks across all size maps
229
312
  */
230
313
  size() {
231
- return this.blocks.size;
314
+ let total = 0;
315
+ for (const sizeMap of this.blocks.values()) {
316
+ total += sizeMap.size;
317
+ }
318
+ return total;
232
319
  }
233
320
  /**
234
- * Get a handle to a block
321
+ * Get a handle to a block (searches across all configured size maps)
235
322
  */
236
323
  get(key) {
237
324
  const keyHex = this.keyToHex(key);
238
- const block = this.blocks.get(keyHex);
239
- if (!block) {
240
- throw new storeError_1.StoreError(storeErrorType_1.StoreErrorType.KeyNotFound, undefined, {
241
- KEY: keyHex,
242
- });
325
+ for (const sizeMap of this.blocks.values()) {
326
+ const block = sizeMap.get(keyHex);
327
+ if (block) {
328
+ const checksum = typeof key === 'string' ? this.hexToChecksum(key) : key;
329
+ return (0, handle_1.createBlockHandle)(rawData_1.RawDataBlock, block.blockSize, block.data, checksum, block.canRead, block.canPersist);
330
+ }
243
331
  }
244
- const checksum = typeof key === 'string' ? this.hexToChecksum(key) : key;
245
- return (0, handle_1.createBlockHandle)(rawData_1.RawDataBlock, block.blockSize, block.data, checksum, block.canRead, block.canPersist);
332
+ throw new storeError_1.StoreError(storeErrorType_1.StoreErrorType.KeyNotFound, undefined, {
333
+ KEY: keyHex,
334
+ });
246
335
  }
247
336
  // === Metadata Operations ===
248
337
  /**
@@ -285,7 +374,7 @@ class MemoryBlockStore {
285
374
  });
286
375
  }
287
376
  // Check if block exists
288
- const block = this.blocks.get(keyHex);
377
+ const block = this.findBlock(keyHex);
289
378
  if (!block) {
290
379
  throw new storeError_1.StoreError(storeErrorType_1.StoreErrorType.KeyNotFound, undefined, {
291
380
  KEY: keyHex,
@@ -366,15 +455,19 @@ class MemoryBlockStore {
366
455
  }
367
456
  try {
368
457
  // Get corrupted data if block still exists
369
- const existingBlock = this.blocks.get(keyHex);
458
+ const existingBlock = this.findBlock(keyHex);
370
459
  const corruptedData = existingBlock ? existingBlock.data : null;
371
460
  // Attempt recovery
372
461
  const result = await this.fecService.recoverFileData(corruptedData, parityData, metadata.size);
373
462
  if (result.recovered) {
463
+ // Determine the block size from existing block or first supported size
464
+ const recoveryBlockSize = existingBlock
465
+ ? existingBlock.blockSize
466
+ : this._supportedBlockSizes[0];
374
467
  // Create a new block with recovered data
375
- const recoveredBlock = new rawData_1.RawDataBlock(this._blockSize, new Uint8Array(result.data));
376
- // Update the stored block
377
- this.blocks.set(keyHex, recoveredBlock);
468
+ const recoveredBlock = new rawData_1.RawDataBlock(recoveryBlockSize, new Uint8Array(result.data));
469
+ // Update the stored block in the correct size map
470
+ this.setBlock(keyHex, recoveredBlock);
378
471
  return {
379
472
  success: true,
380
473
  recoveredBlock,
@@ -404,16 +497,16 @@ class MemoryBlockStore {
404
497
  // Check if FEC service is available
405
498
  if (!this.fecService) {
406
499
  // Without FEC service, we can only verify the block exists
407
- return this.blocks.has(keyHex);
500
+ return this.hasBlock(keyHex);
408
501
  }
409
502
  // Check if FEC service is available in the environment
410
503
  const isAvailable = await this.fecService.isAvailable();
411
504
  if (!isAvailable) {
412
505
  // Without FEC service, we can only verify the block exists
413
- return this.blocks.has(keyHex);
506
+ return this.hasBlock(keyHex);
414
507
  }
415
508
  // Get block data
416
- const block = this.blocks.get(keyHex);
509
+ const block = this.findBlock(keyHex);
417
510
  if (!block) {
418
511
  return false;
419
512
  }
@@ -527,14 +620,14 @@ class MemoryBlockStore {
527
620
  async brightenBlock(key, randomBlockCount) {
528
621
  const keyHex = this.keyToHex(key);
529
622
  // Verify source block exists
530
- const sourceBlock = this.blocks.get(keyHex);
623
+ const sourceBlock = this.findBlock(keyHex);
531
624
  if (!sourceBlock) {
532
625
  throw new storeError_1.StoreError(storeErrorType_1.StoreErrorType.KeyNotFound, undefined, {
533
626
  KEY: keyHex,
534
627
  });
535
628
  }
536
- // Get random blocks for XOR operation
537
- const randomBlockChecksums = await this.getRandomBlocks(randomBlockCount);
629
+ // Get random blocks for XOR operation (same size as source block)
630
+ const randomBlockChecksums = await this.getRandomBlocks(randomBlockCount, sourceBlock.blockSize);
538
631
  // Check if we have enough random blocks
539
632
  if (randomBlockChecksums.length < randomBlockCount) {
540
633
  throw new storeError_1.StoreError(storeErrorType_1.StoreErrorType.InsufficientRandomBlocks, undefined, {
@@ -555,11 +648,11 @@ class MemoryBlockStore {
555
648
  ];
556
649
  // Perform XOR operation using XorService: source XOR random1 XOR random2 XOR ...
557
650
  const brightenedData = xor_1.XorService.xorMultiple(allBlockData);
558
- // Create the brightened block
559
- const brightenedBlock = new rawData_1.RawDataBlock(this._blockSize, brightenedData);
651
+ // Create the brightened block (same size as source)
652
+ const brightenedBlock = new rawData_1.RawDataBlock(sourceBlock.blockSize, brightenedData);
560
653
  const brightenedBlockId = brightenedBlock.idChecksum.toHex();
561
654
  // Store the brightened block if it doesn't already exist
562
- if (!this.blocks.has(brightenedBlockId)) {
655
+ if (!this.hasBlock(brightenedBlockId)) {
563
656
  await this.setData(brightenedBlock);
564
657
  }
565
658
  // Get the random block IDs as hex strings
@@ -595,13 +688,15 @@ class MemoryBlockStore {
595
688
  });
596
689
  }
597
690
  // 1. Pad CBL to block size (includes length prefix)
598
- const paddedCbl = (0, xorUtils_1.padToBlockSize)(cblData, this._blockSize);
691
+ // Use the first supported block size for CBL operations
692
+ const cblBlockSize = this._supportedBlockSizes[0];
693
+ const paddedCbl = (0, xorUtils_1.padToBlockSize)(cblData, cblBlockSize);
599
694
  // Validate that padded CBL fits within block size
600
- if (paddedCbl.length > this._blockSize) {
695
+ if (paddedCbl.length > cblBlockSize) {
601
696
  throw new storeError_1.StoreError(storeErrorType_1.StoreErrorType.BlockValidationFailed, undefined, {
602
697
  ERROR: (0, i18n_1.translate)(enumerations_1.BrightChainStrings.MemoryBlockStore_CBLDataTooLargeTemplate, {
603
698
  LENGTH: paddedCbl.length,
604
- BLOCK_SIZE: this._blockSize,
699
+ BLOCK_SIZE: cblBlockSize,
605
700
  }),
606
701
  });
607
702
  }
@@ -618,7 +713,7 @@ class MemoryBlockStore {
618
713
  // 4. Store first block (R - the randomizer block)
619
714
  // Note: If this was selected from existing blocks, it's already stored
620
715
  // We still create a block handle for it to get the ID
621
- const block1 = new rawData_1.RawDataBlock(this._blockSize, randomBlock);
716
+ const block1 = new rawData_1.RawDataBlock(cblBlockSize, randomBlock);
622
717
  const block1Checksum = block1.idChecksum;
623
718
  // Only store if not already in the store
624
719
  if (!(await this.has(block1Checksum))) {
@@ -627,7 +722,7 @@ class MemoryBlockStore {
627
722
  }
628
723
  block1Id = toStorageKey(block1Checksum.toHex());
629
724
  // 5. Store second block (CBL XOR R)
630
- const block2 = new rawData_1.RawDataBlock(this._blockSize, xorResult);
725
+ const block2 = new rawData_1.RawDataBlock(cblBlockSize, xorResult);
631
726
  await this.setData(block2, options);
632
727
  const block2Id = toStorageKey(block2.idChecksum.toHex());
633
728
  // 6. Get parity block IDs if FEC redundancy was applied
@@ -642,11 +737,11 @@ class MemoryBlockStore {
642
737
  block2ParityIds = block2Meta.parityBlockIds;
643
738
  }
644
739
  // 7. Generate magnet URL
645
- const magnetUrl = this.generateCBLMagnetUrl(block1Id, block2Id, this._blockSize, block1ParityIds, block2ParityIds, options?.isEncrypted);
740
+ const magnetUrl = this.generateCBLMagnetUrl(block1Id, block2Id, cblBlockSize, block1ParityIds, block2ParityIds, options?.isEncrypted);
646
741
  return {
647
742
  blockId1: block1Id,
648
743
  blockId2: block2Id,
649
- blockSize: this._blockSize,
744
+ blockSize: cblBlockSize,
650
745
  magnetUrl,
651
746
  block1ParityIds,
652
747
  block2ParityIds,
@@ -678,15 +773,20 @@ class MemoryBlockStore {
678
773
  * @returns A Uint8Array containing the randomizer data
679
774
  */
680
775
  async selectOrGenerateRandomizer(size) {
681
- // Get all block IDs from the store
682
- const blockIds = Array.from(this.blocks.keys());
776
+ // Collect all block keys across all size maps
777
+ const blockIds = [];
778
+ for (const sizeMap of this.blocks.values()) {
779
+ for (const key of sizeMap.keys()) {
780
+ blockIds.push(key);
781
+ }
782
+ }
683
783
  // If we have existing blocks, try to use one as a randomizer
684
784
  if (blockIds.length > 0) {
685
785
  // Select a random block from the existing blocks
686
786
  const randomIndex = Math.floor(Math.random() * blockIds.length);
687
787
  const selectedBlockId = blockIds[randomIndex];
688
788
  try {
689
- const block = this.blocks.get(selectedBlockId);
789
+ const block = this.findBlock(selectedBlockId);
690
790
  if (block && block.data.length >= size) {
691
791
  // Use the first 'size' bytes of the existing block as the randomizer
692
792
  return block.data.slice(0, size);