@xyo-network/archivist 2.31.4 → 2.32.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/dist/cjs/Archivist.d.ts +12 -7
  2. package/dist/cjs/Archivist.d.ts.map +1 -1
  3. package/dist/cjs/Config.d.ts +0 -8
  4. package/dist/cjs/Config.d.ts.map +1 -1
  5. package/dist/cjs/Config.js +0 -23
  6. package/dist/cjs/Config.js.map +1 -1
  7. package/dist/cjs/Queries/All.d.ts +7 -0
  8. package/dist/cjs/Queries/All.d.ts.map +1 -0
  9. package/dist/cjs/Queries/All.js +5 -0
  10. package/dist/cjs/Queries/All.js.map +1 -0
  11. package/dist/cjs/Queries/Clear.d.ts +7 -0
  12. package/dist/cjs/Queries/Clear.d.ts.map +1 -0
  13. package/dist/cjs/Queries/Clear.js +5 -0
  14. package/dist/cjs/Queries/Clear.js.map +1 -0
  15. package/dist/cjs/Queries/Commit.d.ts +7 -0
  16. package/dist/cjs/Queries/Commit.d.ts.map +1 -0
  17. package/dist/cjs/Queries/Commit.js +5 -0
  18. package/dist/cjs/Queries/Commit.js.map +1 -0
  19. package/dist/cjs/Queries/Delete.d.ts +8 -0
  20. package/dist/cjs/Queries/Delete.d.ts.map +1 -0
  21. package/dist/cjs/Queries/Delete.js +5 -0
  22. package/dist/cjs/Queries/Delete.js.map +1 -0
  23. package/dist/cjs/Queries/Find.d.ts +9 -0
  24. package/dist/cjs/Queries/Find.d.ts.map +1 -0
  25. package/dist/cjs/Queries/Find.js +5 -0
  26. package/dist/cjs/Queries/Find.js.map +1 -0
  27. package/dist/cjs/Queries/Get.d.ts +8 -0
  28. package/dist/cjs/Queries/Get.d.ts.map +1 -0
  29. package/dist/cjs/Queries/Get.js +5 -0
  30. package/dist/cjs/Queries/Get.js.map +1 -0
  31. package/dist/cjs/Queries/Insert.d.ts +9 -0
  32. package/dist/cjs/Queries/Insert.d.ts.map +1 -0
  33. package/dist/cjs/Queries/Insert.js +5 -0
  34. package/dist/cjs/Queries/Insert.js.map +1 -0
  35. package/dist/cjs/Queries/Payload.d.ts +10 -0
  36. package/dist/cjs/Queries/Payload.d.ts.map +1 -0
  37. package/dist/cjs/{Query → Queries}/Payload.js +0 -0
  38. package/dist/cjs/{Query → Queries}/Payload.js.map +1 -1
  39. package/dist/cjs/Queries/Schema.d.ts +10 -0
  40. package/dist/cjs/Queries/Schema.d.ts.map +1 -0
  41. package/dist/cjs/{Query → Queries}/Schema.js +0 -0
  42. package/dist/cjs/{Query → Queries}/Schema.js.map +1 -1
  43. package/dist/cjs/{Query → Queries}/index.d.ts +0 -0
  44. package/dist/cjs/Queries/index.d.ts.map +1 -0
  45. package/dist/cjs/{Query → Queries}/index.js +0 -0
  46. package/dist/cjs/Queries/index.js.map +1 -0
  47. package/dist/cjs/XyoArchivist.d.ts +43 -0
  48. package/dist/cjs/XyoArchivist.d.ts.map +1 -0
  49. package/dist/cjs/XyoArchivist.js +122 -0
  50. package/dist/cjs/XyoArchivist.js.map +1 -0
  51. package/dist/cjs/XyoArchivistWrapper.d.ts +5 -7
  52. package/dist/cjs/XyoArchivistWrapper.d.ts.map +1 -1
  53. package/dist/cjs/XyoArchivistWrapper.js +12 -17
  54. package/dist/cjs/XyoArchivistWrapper.js.map +1 -1
  55. package/dist/cjs/XyoCookieArchivist.d.ts +33 -0
  56. package/dist/cjs/XyoCookieArchivist.d.ts.map +1 -0
  57. package/dist/cjs/XyoCookieArchivist.js +158 -0
  58. package/dist/cjs/XyoCookieArchivist.js.map +1 -0
  59. package/dist/cjs/XyoMemoryArchivist.d.ts +7 -12
  60. package/dist/cjs/XyoMemoryArchivist.d.ts.map +1 -1
  61. package/dist/cjs/XyoMemoryArchivist.js +34 -37
  62. package/dist/cjs/XyoMemoryArchivist.js.map +1 -1
  63. package/dist/cjs/XyoStorageArchivist.d.ts +33 -0
  64. package/dist/cjs/XyoStorageArchivist.d.ts.map +1 -0
  65. package/dist/cjs/XyoStorageArchivist.js +150 -0
  66. package/dist/cjs/XyoStorageArchivist.js.map +1 -0
  67. package/dist/cjs/index.d.ts +5 -2
  68. package/dist/cjs/index.d.ts.map +1 -1
  69. package/dist/cjs/index.js +5 -2
  70. package/dist/cjs/index.js.map +1 -1
  71. package/dist/docs.json +17381 -5336
  72. package/dist/esm/Archivist.d.ts +12 -7
  73. package/dist/esm/Archivist.d.ts.map +1 -1
  74. package/dist/esm/Config.d.ts +0 -8
  75. package/dist/esm/Config.d.ts.map +1 -1
  76. package/dist/esm/Config.js +1 -18
  77. package/dist/esm/Config.js.map +1 -1
  78. package/dist/esm/Queries/All.d.ts +7 -0
  79. package/dist/esm/Queries/All.d.ts.map +1 -0
  80. package/dist/esm/Queries/All.js +2 -0
  81. package/dist/esm/Queries/All.js.map +1 -0
  82. package/dist/esm/Queries/Clear.d.ts +7 -0
  83. package/dist/esm/Queries/Clear.d.ts.map +1 -0
  84. package/dist/esm/Queries/Clear.js +2 -0
  85. package/dist/esm/Queries/Clear.js.map +1 -0
  86. package/dist/esm/Queries/Commit.d.ts +7 -0
  87. package/dist/esm/Queries/Commit.d.ts.map +1 -0
  88. package/dist/esm/Queries/Commit.js +2 -0
  89. package/dist/esm/Queries/Commit.js.map +1 -0
  90. package/dist/esm/Queries/Delete.d.ts +8 -0
  91. package/dist/esm/Queries/Delete.d.ts.map +1 -0
  92. package/dist/esm/Queries/Delete.js +2 -0
  93. package/dist/esm/Queries/Delete.js.map +1 -0
  94. package/dist/esm/Queries/Find.d.ts +9 -0
  95. package/dist/esm/Queries/Find.d.ts.map +1 -0
  96. package/dist/esm/Queries/Find.js +2 -0
  97. package/dist/esm/Queries/Find.js.map +1 -0
  98. package/dist/esm/Queries/Get.d.ts +8 -0
  99. package/dist/esm/Queries/Get.d.ts.map +1 -0
  100. package/dist/esm/Queries/Get.js +2 -0
  101. package/dist/esm/Queries/Get.js.map +1 -0
  102. package/dist/esm/Queries/Insert.d.ts +9 -0
  103. package/dist/esm/Queries/Insert.d.ts.map +1 -0
  104. package/dist/esm/Queries/Insert.js +2 -0
  105. package/dist/esm/Queries/Insert.js.map +1 -0
  106. package/dist/esm/Queries/Payload.d.ts +10 -0
  107. package/dist/esm/Queries/Payload.d.ts.map +1 -0
  108. package/dist/esm/{Query → Queries}/Payload.js +0 -0
  109. package/dist/esm/{Query → Queries}/Payload.js.map +1 -1
  110. package/dist/esm/Queries/Schema.d.ts +10 -0
  111. package/dist/esm/Queries/Schema.d.ts.map +1 -0
  112. package/dist/esm/{Query → Queries}/Schema.js +0 -0
  113. package/dist/esm/{Query → Queries}/Schema.js.map +1 -1
  114. package/dist/esm/{Query → Queries}/index.d.ts +0 -0
  115. package/dist/esm/Queries/index.d.ts.map +1 -0
  116. package/dist/esm/{Query → Queries}/index.js +0 -0
  117. package/dist/esm/Queries/index.js.map +1 -0
  118. package/dist/esm/XyoArchivist.d.ts +43 -0
  119. package/dist/esm/XyoArchivist.d.ts.map +1 -0
  120. package/dist/esm/XyoArchivist.js +102 -0
  121. package/dist/esm/XyoArchivist.js.map +1 -0
  122. package/dist/esm/XyoArchivistWrapper.d.ts +5 -7
  123. package/dist/esm/XyoArchivistWrapper.d.ts.map +1 -1
  124. package/dist/esm/XyoArchivistWrapper.js +12 -18
  125. package/dist/esm/XyoArchivistWrapper.js.map +1 -1
  126. package/dist/esm/XyoCookieArchivist.d.ts +33 -0
  127. package/dist/esm/XyoCookieArchivist.d.ts.map +1 -0
  128. package/dist/esm/XyoCookieArchivist.js +139 -0
  129. package/dist/esm/XyoCookieArchivist.js.map +1 -0
  130. package/dist/esm/XyoMemoryArchivist.d.ts +7 -12
  131. package/dist/esm/XyoMemoryArchivist.d.ts.map +1 -1
  132. package/dist/esm/XyoMemoryArchivist.js +22 -23
  133. package/dist/esm/XyoMemoryArchivist.js.map +1 -1
  134. package/dist/esm/XyoStorageArchivist.d.ts +33 -0
  135. package/dist/esm/XyoStorageArchivist.d.ts.map +1 -0
  136. package/dist/esm/XyoStorageArchivist.js +132 -0
  137. package/dist/esm/XyoStorageArchivist.js.map +1 -0
  138. package/dist/esm/index.d.ts +5 -2
  139. package/dist/esm/index.d.ts.map +1 -1
  140. package/dist/esm/index.js +5 -2
  141. package/dist/esm/index.js.map +1 -1
  142. package/package.json +11 -5
  143. package/src/Archivist.ts +32 -14
  144. package/src/Config.ts +0 -23
  145. package/src/Queries/All.ts +8 -0
  146. package/src/Queries/Clear.ts +8 -0
  147. package/src/Queries/Commit.ts +8 -0
  148. package/src/Queries/Delete.ts +9 -0
  149. package/src/Queries/Find.ts +11 -0
  150. package/src/Queries/Get.ts +9 -0
  151. package/src/Queries/Insert.ts +10 -0
  152. package/src/Queries/Payload.ts +19 -0
  153. package/src/Queries/Schema.ts +20 -0
  154. package/src/{Query → Queries}/index.ts +0 -0
  155. package/src/XyoArchivist.ts +147 -0
  156. package/src/XyoArchivistWrapper.ts +29 -38
  157. package/src/XyoCookieArchivist.ts +176 -0
  158. package/src/XyoMemoryArchivist.ts +33 -42
  159. package/src/XyoStorageArchivist.ts +169 -0
  160. package/src/index.ts +5 -2
  161. package/dist/cjs/Abstract.d.ts +0 -23
  162. package/dist/cjs/Abstract.d.ts.map +0 -1
  163. package/dist/cjs/Abstract.js +0 -83
  164. package/dist/cjs/Abstract.js.map +0 -1
  165. package/dist/cjs/Query/All.d.ts +0 -7
  166. package/dist/cjs/Query/All.d.ts.map +0 -1
  167. package/dist/cjs/Query/All.js +0 -5
  168. package/dist/cjs/Query/All.js.map +0 -1
  169. package/dist/cjs/Query/Clear.d.ts +0 -7
  170. package/dist/cjs/Query/Clear.d.ts.map +0 -1
  171. package/dist/cjs/Query/Clear.js +0 -5
  172. package/dist/cjs/Query/Clear.js.map +0 -1
  173. package/dist/cjs/Query/Commit.d.ts +0 -7
  174. package/dist/cjs/Query/Commit.d.ts.map +0 -1
  175. package/dist/cjs/Query/Commit.js +0 -5
  176. package/dist/cjs/Query/Commit.js.map +0 -1
  177. package/dist/cjs/Query/Delete.d.ts +0 -8
  178. package/dist/cjs/Query/Delete.d.ts.map +0 -1
  179. package/dist/cjs/Query/Delete.js +0 -5
  180. package/dist/cjs/Query/Delete.js.map +0 -1
  181. package/dist/cjs/Query/Find.d.ts +0 -9
  182. package/dist/cjs/Query/Find.d.ts.map +0 -1
  183. package/dist/cjs/Query/Find.js +0 -5
  184. package/dist/cjs/Query/Find.js.map +0 -1
  185. package/dist/cjs/Query/Get.d.ts +0 -8
  186. package/dist/cjs/Query/Get.d.ts.map +0 -1
  187. package/dist/cjs/Query/Get.js +0 -5
  188. package/dist/cjs/Query/Get.js.map +0 -1
  189. package/dist/cjs/Query/Insert.d.ts +0 -9
  190. package/dist/cjs/Query/Insert.d.ts.map +0 -1
  191. package/dist/cjs/Query/Insert.js +0 -5
  192. package/dist/cjs/Query/Insert.js.map +0 -1
  193. package/dist/cjs/Query/Payload.d.ts +0 -10
  194. package/dist/cjs/Query/Payload.d.ts.map +0 -1
  195. package/dist/cjs/Query/Schema.d.ts +0 -10
  196. package/dist/cjs/Query/Schema.d.ts.map +0 -1
  197. package/dist/cjs/Query/index.d.ts.map +0 -1
  198. package/dist/cjs/Query/index.js.map +0 -1
  199. package/dist/esm/Abstract.d.ts +0 -23
  200. package/dist/esm/Abstract.d.ts.map +0 -1
  201. package/dist/esm/Abstract.js +0 -75
  202. package/dist/esm/Abstract.js.map +0 -1
  203. package/dist/esm/Query/All.d.ts +0 -7
  204. package/dist/esm/Query/All.d.ts.map +0 -1
  205. package/dist/esm/Query/All.js +0 -2
  206. package/dist/esm/Query/All.js.map +0 -1
  207. package/dist/esm/Query/Clear.d.ts +0 -7
  208. package/dist/esm/Query/Clear.d.ts.map +0 -1
  209. package/dist/esm/Query/Clear.js +0 -2
  210. package/dist/esm/Query/Clear.js.map +0 -1
  211. package/dist/esm/Query/Commit.d.ts +0 -7
  212. package/dist/esm/Query/Commit.d.ts.map +0 -1
  213. package/dist/esm/Query/Commit.js +0 -2
  214. package/dist/esm/Query/Commit.js.map +0 -1
  215. package/dist/esm/Query/Delete.d.ts +0 -8
  216. package/dist/esm/Query/Delete.d.ts.map +0 -1
  217. package/dist/esm/Query/Delete.js +0 -2
  218. package/dist/esm/Query/Delete.js.map +0 -1
  219. package/dist/esm/Query/Find.d.ts +0 -9
  220. package/dist/esm/Query/Find.d.ts.map +0 -1
  221. package/dist/esm/Query/Find.js +0 -2
  222. package/dist/esm/Query/Find.js.map +0 -1
  223. package/dist/esm/Query/Get.d.ts +0 -8
  224. package/dist/esm/Query/Get.d.ts.map +0 -1
  225. package/dist/esm/Query/Get.js +0 -2
  226. package/dist/esm/Query/Get.js.map +0 -1
  227. package/dist/esm/Query/Insert.d.ts +0 -9
  228. package/dist/esm/Query/Insert.d.ts.map +0 -1
  229. package/dist/esm/Query/Insert.js +0 -2
  230. package/dist/esm/Query/Insert.js.map +0 -1
  231. package/dist/esm/Query/Payload.d.ts +0 -10
  232. package/dist/esm/Query/Payload.d.ts.map +0 -1
  233. package/dist/esm/Query/Schema.d.ts +0 -10
  234. package/dist/esm/Query/Schema.d.ts.map +0 -1
  235. package/dist/esm/Query/index.d.ts.map +0 -1
  236. package/dist/esm/Query/index.js.map +0 -1
  237. package/src/Abstract.ts +0 -108
  238. package/src/Query/All.ts +0 -8
  239. package/src/Query/Clear.ts +0 -8
  240. package/src/Query/Commit.ts +0 -8
  241. package/src/Query/Delete.ts +0 -9
  242. package/src/Query/Find.ts +0 -11
  243. package/src/Query/Get.ts +0 -9
  244. package/src/Query/Insert.ts +0 -10
  245. package/src/Query/Payload.ts +0 -19
  246. package/src/Query/Schema.ts +0 -20
package/src/Config.ts CHANGED
@@ -16,26 +16,3 @@ export type XyoArchivistConfig<TConfig extends XyoPayload = XyoPayload> = XyoMod
16
16
  writeThrough?: string
17
17
  } & TConfig
18
18
  >
19
-
20
- export class XyoArchivistConfigWrapper<C extends XyoArchivistConfig = XyoArchivistConfig> {
21
- protected config?: C
22
- constructor(config?: C) {
23
- this.config = config
24
- }
25
-
26
- public get parents() {
27
- return this.config?.parents
28
- }
29
-
30
- public get account() {
31
- return this.config?.account
32
- }
33
-
34
- public get writeThrough() {
35
- return this.config?.writeThrough
36
- }
37
-
38
- public get cacheParentReads() {
39
- return this.config?.cacheParentReads
40
- }
41
- }
@@ -0,0 +1,8 @@
1
+ import { XyoQuery } from '@xyo-network/module'
2
+
3
+ export type XyoArchivistAllQuerySchema = 'network.xyo.query.archivist.all'
4
+ export const XyoArchivistAllQuerySchema: XyoArchivistAllQuerySchema = 'network.xyo.query.archivist.all'
5
+
6
+ export type XyoArchivistAllQuery = XyoQuery<{
7
+ schema: XyoArchivistAllQuerySchema
8
+ }>
@@ -0,0 +1,8 @@
1
+ import { XyoQuery } from '@xyo-network/module'
2
+
3
+ export type XyoArchivistClearQuerySchema = 'network.xyo.query.archivist.clear'
4
+ export const XyoArchivistClearQuerySchema: XyoArchivistClearQuerySchema = 'network.xyo.query.archivist.clear'
5
+
6
+ export type XyoArchivistClearQuery = XyoQuery<{
7
+ schema: XyoArchivistClearQuerySchema
8
+ }>
@@ -0,0 +1,8 @@
1
+ import { XyoQuery } from '@xyo-network/module'
2
+
3
+ export type XyoArchivistCommitQuerySchema = 'network.xyo.query.archivist.commit'
4
+ export const XyoArchivistCommitQuerySchema: XyoArchivistCommitQuerySchema = 'network.xyo.query.archivist.commit'
5
+
6
+ export type XyoArchivistCommitQuery = XyoQuery<{
7
+ schema: XyoArchivistCommitQuerySchema
8
+ }>
@@ -0,0 +1,9 @@
1
+ import { XyoQuery } from '@xyo-network/module'
2
+
3
+ export type XyoArchivistDeleteQuerySchema = 'network.xyo.query.archivist.delete'
4
+ export const XyoArchivistDeleteQuerySchema: XyoArchivistDeleteQuerySchema = 'network.xyo.query.archivist.delete'
5
+
6
+ export type XyoArchivistDeleteQuery = XyoQuery<{
7
+ schema: XyoArchivistDeleteQuerySchema
8
+ hashes: string[]
9
+ }>
@@ -0,0 +1,11 @@
1
+ import { XyoQuery } from '@xyo-network/module'
2
+
3
+ import { XyoPayloadFindFilter } from '../XyoPayloadFindFilter'
4
+
5
+ export type XyoArchivistFindQuerySchema = 'network.xyo.query.archivist.find'
6
+ export const XyoArchivistFindQuerySchema: XyoArchivistFindQuerySchema = 'network.xyo.query.archivist.find'
7
+
8
+ export type XyoArchivistFindQuery = XyoQuery<{
9
+ schema: XyoArchivistFindQuerySchema
10
+ filter: XyoPayloadFindFilter
11
+ }>
@@ -0,0 +1,9 @@
1
+ import { XyoQuery } from '@xyo-network/module'
2
+
3
+ export type XyoArchivistGetQuerySchema = 'network.xyo.query.archivist.get'
4
+ export const XyoArchivistGetQuerySchema: XyoArchivistGetQuerySchema = 'network.xyo.query.archivist.get'
5
+
6
+ export type XyoArchivistGetQuery = XyoQuery<{
7
+ schema: XyoArchivistGetQuerySchema
8
+ hashes: string[]
9
+ }>
@@ -0,0 +1,10 @@
1
+ import { XyoQuery } from '@xyo-network/module'
2
+ import { XyoPayload } from '@xyo-network/payload'
3
+
4
+ export type XyoArchivistInsertQuerySchema = 'network.xyo.query.archivist.insert'
5
+ export const XyoArchivistInsertQuerySchema: XyoArchivistInsertQuerySchema = 'network.xyo.query.archivist.insert'
6
+
7
+ export type XyoArchivistInsertQuery = XyoQuery<{
8
+ schema: XyoArchivistInsertQuerySchema
9
+ payloads: XyoPayload[]
10
+ }>
@@ -0,0 +1,19 @@
1
+ import { XyoModuleQuery } from '@xyo-network/module'
2
+
3
+ import { XyoArchivistAllQuery } from './All'
4
+ import { XyoArchivistClearQuery } from './Clear'
5
+ import { XyoArchivistCommitQuery } from './Commit'
6
+ import { XyoArchivistDeleteQuery } from './Delete'
7
+ import { XyoArchivistFindQuery } from './Find'
8
+ import { XyoArchivistGetQuery } from './Get'
9
+ import { XyoArchivistInsertQuery } from './Insert'
10
+
11
+ export type XyoArchivistQuery =
12
+ | XyoModuleQuery
13
+ | XyoArchivistAllQuery
14
+ | XyoArchivistClearQuery
15
+ | XyoArchivistCommitQuery
16
+ | XyoArchivistDeleteQuery
17
+ | XyoArchivistFindQuery
18
+ | XyoArchivistGetQuery
19
+ | XyoArchivistInsertQuery
@@ -0,0 +1,20 @@
1
+ import { XyoModuleQuerySchema } from '@xyo-network/module'
2
+
3
+ import { XyoArchivistAllQuerySchema } from './All'
4
+ import { XyoArchivistClearQuerySchema } from './Clear'
5
+ import { XyoArchivistCommitQuerySchema } from './Commit'
6
+ import { XyoArchivistDeleteQuerySchema } from './Delete'
7
+ import { XyoArchivistFindQuerySchema } from './Find'
8
+ import { XyoArchivistGetQuerySchema } from './Get'
9
+ import { XyoArchivistInsertQuerySchema } from './Insert'
10
+
11
+ export type XyoArchivistQuerySchema<T extends string = never> =
12
+ | XyoArchivistAllQuerySchema
13
+ | XyoArchivistClearQuerySchema
14
+ | XyoArchivistCommitQuerySchema
15
+ | XyoArchivistDeleteQuerySchema
16
+ | XyoArchivistFindQuerySchema
17
+ | XyoArchivistGetQuerySchema
18
+ | XyoArchivistInsertQuerySchema
19
+ | XyoModuleQuerySchema
20
+ | T
File without changes
@@ -0,0 +1,147 @@
1
+ import { assertEx } from '@xylabs/sdk-js'
2
+ import { XyoBoundWitness } from '@xyo-network/boundwitness'
3
+ import { Module, XyoModule, XyoModuleInitializeQuerySchema, XyoModuleQueryResult, XyoModuleShutdownQuerySchema } from '@xyo-network/module'
4
+ import { XyoPayload, XyoPayloadWrapper } from '@xyo-network/payload'
5
+ import { NullablePromisableArray, Promisable, PromisableArray } from '@xyo-network/promisable'
6
+ import compact from 'lodash/compact'
7
+
8
+ import { Archivist } from './Archivist'
9
+ import { XyoArchivistConfig, XyoArchivistParents } from './Config'
10
+ import {
11
+ XyoArchivistAllQuerySchema,
12
+ XyoArchivistClearQuerySchema,
13
+ XyoArchivistCommitQuerySchema,
14
+ XyoArchivistDeleteQuerySchema,
15
+ XyoArchivistFindQuerySchema,
16
+ XyoArchivistGetQuery,
17
+ XyoArchivistGetQuerySchema,
18
+ XyoArchivistInsertQuery,
19
+ XyoArchivistInsertQuerySchema,
20
+ XyoArchivistQuery,
21
+ XyoArchivistQuerySchema,
22
+ } from './Queries'
23
+ import { XyoPayloadFindFilter } from './XyoPayloadFindFilter'
24
+
25
+ export abstract class XyoArchivist<TConfig extends XyoPayload = XyoPayload>
26
+ extends XyoModule<XyoArchivistConfig<TConfig>>
27
+ implements Archivist<XyoPayload, XyoPayload, XyoPayload, XyoPayload, XyoPayloadFindFilter>
28
+ {
29
+ public override get queries(): XyoArchivistQuerySchema[] {
30
+ return [XyoModuleInitializeQuerySchema, XyoModuleShutdownQuerySchema, XyoArchivistGetQuerySchema, XyoArchivistInsertQuerySchema]
31
+ }
32
+
33
+ public get cacheParentReads() {
34
+ return !!this.config?.cacheParentReads
35
+ }
36
+
37
+ public get writeThrough() {
38
+ return !!this.config?.writeThrough
39
+ }
40
+
41
+ public all(): PromisableArray<XyoPayload> {
42
+ throw Error('Not implemented')
43
+ }
44
+
45
+ public clear(): Promisable<void> {
46
+ throw Error('Not implemented')
47
+ }
48
+
49
+ public commit(): Promisable<XyoBoundWitness> {
50
+ throw Error('Not implemented')
51
+ }
52
+
53
+ public delete(_hashes: string[]): PromisableArray<boolean> {
54
+ throw Error('Not implemented')
55
+ }
56
+
57
+ public find(_filter: XyoPayloadFindFilter): PromisableArray<XyoPayload> {
58
+ throw Error('Not implemented')
59
+ }
60
+
61
+ abstract get(hashes: string[]): NullablePromisableArray<XyoPayload>
62
+
63
+ abstract insert(item: XyoPayload[]): Promisable<XyoBoundWitness>
64
+
65
+ async query(query: XyoArchivistQuery): Promise<XyoModuleQueryResult> {
66
+ if (!this.queries.find((schema) => schema === query.schema)) {
67
+ console.error(`Undeclared Module Query: ${query.schema}`)
68
+ }
69
+
70
+ const payloads: (XyoPayload | null)[] = []
71
+ switch (query.schema) {
72
+ case XyoArchivistAllQuerySchema:
73
+ payloads.push(...(await this.all()))
74
+ break
75
+ case XyoArchivistClearQuerySchema:
76
+ await this.clear()
77
+ break
78
+ case XyoArchivistCommitQuerySchema:
79
+ payloads.push(await this.commit())
80
+ break
81
+ case XyoArchivistDeleteQuerySchema:
82
+ await this.delete(query.hashes)
83
+ break
84
+ case XyoArchivistFindQuerySchema:
85
+ payloads.push(...(await this.find(query.filter)))
86
+ break
87
+ case XyoArchivistGetQuerySchema:
88
+ payloads.push(...(await this.get(query.hashes)))
89
+ break
90
+ case XyoArchivistInsertQuerySchema:
91
+ payloads.push(await this.insert(query.payloads), ...query.payloads)
92
+ break
93
+ }
94
+ return [this.bindPayloads(payloads), payloads]
95
+ }
96
+
97
+ private resolveArchivists(archivists?: Record<string, Module | null | undefined>) {
98
+ const resolved: Record<string, Module | null | undefined> = {}
99
+ if (archivists) {
100
+ Object.entries(archivists).forEach(([key, value]) => {
101
+ resolved[key] = value ?? this.resolver?.(key) ?? null
102
+ })
103
+ }
104
+ return resolved
105
+ }
106
+
107
+ protected async getFromParents(hash: string) {
108
+ return compact(
109
+ await Promise.all(
110
+ Object.values(this.parents?.read ?? {}).map(async (parent) => {
111
+ const query: XyoArchivistGetQuery = { hashes: [hash], schema: XyoArchivistGetQuerySchema }
112
+ const [, payloads] = (await parent?.query(query)) ?? []
113
+ const wrapper = payloads?.[0] ? new XyoPayloadWrapper(payloads?.[0]) : undefined
114
+ if (wrapper && wrapper.hash !== hash) {
115
+ console.warn(`Parent [${parent?.address}] returned payload with invalid hash [${hash} != ${wrapper.hash}]`)
116
+ return null
117
+ }
118
+ return wrapper?.payload
119
+ }),
120
+ ),
121
+ )[0]
122
+ }
123
+
124
+ protected async writeToParent(parent: Module, payloads: XyoPayload[]) {
125
+ const query: XyoArchivistInsertQuery = { payloads, schema: XyoArchivistInsertQuerySchema }
126
+ const [, writtenPayloads] = (await parent?.query(query)) ?? []
127
+ return writtenPayloads
128
+ }
129
+
130
+ protected async writeToParents(payloads: XyoPayload[]) {
131
+ return await Promise.all(
132
+ Object.values(this.parents?.write ?? {}).map(async (parent) => {
133
+ return parent ? await this.writeToParent(parent, payloads) : undefined
134
+ }),
135
+ )
136
+ }
137
+
138
+ private _parents?: XyoArchivistParents
139
+ get parents() {
140
+ this._parents = this._parents ?? {
141
+ commit: this.resolveArchivists(this.config?.parents?.commit),
142
+ read: this.resolveArchivists(this.config?.parents?.read),
143
+ write: this.resolveArchivists(this.config?.parents?.write),
144
+ }
145
+ return assertEx(this._parents)
146
+ }
147
+ }
@@ -1,68 +1,59 @@
1
- import { XyoModule } from '@xyo-network/module'
1
+ import { XyoBoundWitness } from '@xyo-network/boundwitness'
2
+ import { XyoModuleWrapper } from '@xyo-network/module'
2
3
  import { XyoPayload } from '@xyo-network/payload'
3
4
 
4
5
  import { Archivist } from './Archivist'
5
6
  import {
6
- XyoArchivistAllQueryPayload,
7
- XyoArchivistAllQueryPayloadSchema,
8
- XyoArchivistClearQueryPayload,
9
- XyoArchivistClearQueryPayloadSchema,
10
- XyoArchivistCommitQueryPayload,
11
- XyoArchivistCommitQueryPayloadSchema,
12
- XyoArchivistDeleteQueryPayload,
13
- XyoArchivistDeleteQueryPayloadSchema,
14
- XyoArchivistFindQueryPayload,
15
- XyoArchivistFindQueryPayloadSchema,
16
- XyoArchivistGetQueryPayload,
17
- XyoArchivistGetQueryPayloadSchema,
18
- XyoArchivistInsertQueryPayload,
19
- XyoArchivistInsertQueryPayloadSchema,
20
- } from './Query'
7
+ XyoArchivistAllQuery,
8
+ XyoArchivistAllQuerySchema,
9
+ XyoArchivistClearQuery,
10
+ XyoArchivistClearQuerySchema,
11
+ XyoArchivistCommitQuery,
12
+ XyoArchivistCommitQuerySchema,
13
+ XyoArchivistDeleteQuery,
14
+ XyoArchivistDeleteQuerySchema,
15
+ XyoArchivistFindQuery,
16
+ XyoArchivistFindQuerySchema,
17
+ XyoArchivistGetQuery,
18
+ XyoArchivistGetQuerySchema,
19
+ XyoArchivistInsertQuery,
20
+ XyoArchivistInsertQuerySchema,
21
+ } from './Queries'
21
22
  import { XyoPayloadFindFilter } from './XyoPayloadFindFilter'
22
23
 
23
- export class XyoArchivistWrapper implements Archivist<XyoPayload | null, XyoPayload | null, XyoPayload, XyoPayload | null, XyoPayloadFindFilter> {
24
- protected module: XyoModule
25
-
26
- constructor(module: XyoModule) {
27
- this.module = module
28
- }
29
-
30
- public get queries() {
31
- return this.module.queries
32
- }
33
-
24
+ export class XyoArchivistWrapper extends XyoModuleWrapper implements Archivist {
34
25
  public async delete(hashes: string[]) {
35
- const query: XyoArchivistDeleteQueryPayload = { hashes, schema: XyoArchivistDeleteQueryPayloadSchema }
26
+ const query: XyoArchivistDeleteQuery = { hashes, schema: XyoArchivistDeleteQuerySchema }
36
27
  return (await this.module.query(query))[0].payload_hashes.map(() => true)
37
28
  }
38
29
 
39
30
  public async clear(): Promise<void> {
40
- const query: XyoArchivistClearQueryPayload = { schema: XyoArchivistClearQueryPayloadSchema }
31
+ const query: XyoArchivistClearQuery = { schema: XyoArchivistClearQuerySchema }
41
32
  await this.module.query(query)
42
33
  }
43
34
 
44
35
  public async get(hashes: string[]): Promise<(XyoPayload | null)[]> {
45
- const query: XyoArchivistGetQueryPayload = { hashes, schema: XyoArchivistGetQueryPayloadSchema }
36
+ const query: XyoArchivistGetQuery = { hashes, schema: XyoArchivistGetQuerySchema }
46
37
  return (await this.module.query(query))[1]
47
38
  }
48
39
 
49
- public async insert(payloads: XyoPayload[]): Promise<(XyoPayload | null)[]> {
50
- const query: XyoArchivistInsertQueryPayload = { payloads, schema: XyoArchivistInsertQueryPayloadSchema }
51
- return (await this.module.query(query))[1]
40
+ public async insert(payloads: XyoPayload[]): Promise<XyoBoundWitness> {
41
+ const query: XyoArchivistInsertQuery = { payloads, schema: XyoArchivistInsertQuerySchema }
42
+ return (await this.module.query(query))[0]
52
43
  }
53
44
 
54
45
  public async find(filter: XyoPayloadFindFilter): Promise<(XyoPayload | null)[]> {
55
- const query: XyoArchivistFindQueryPayload = { filter, schema: XyoArchivistFindQueryPayloadSchema }
46
+ const query: XyoArchivistFindQuery = { filter, schema: XyoArchivistFindQuerySchema }
56
47
  return (await this.module.query(query))[1]
57
48
  }
58
49
 
59
50
  public async all(): Promise<(XyoPayload | null)[]> {
60
- const query: XyoArchivistAllQueryPayload = { schema: XyoArchivistAllQueryPayloadSchema }
51
+ const query: XyoArchivistAllQuery = { schema: XyoArchivistAllQuerySchema }
61
52
  return (await this.module.query(query))[1]
62
53
  }
63
54
 
64
- public async commit(): Promise<(XyoPayload | null)[]> {
65
- const query: XyoArchivistCommitQueryPayload = { schema: XyoArchivistCommitQueryPayloadSchema }
66
- return (await this.module.query(query))[1]
55
+ public async commit(): Promise<XyoBoundWitness> {
56
+ const query: XyoArchivistCommitQuery = { schema: XyoArchivistCommitQuerySchema }
57
+ return (await this.module.query(query))[0]
67
58
  }
68
59
  }
@@ -0,0 +1,176 @@
1
+ import { assertEx } from '@xylabs/sdk-js'
2
+ import { XyoBoundWitness } from '@xyo-network/boundwitness'
3
+ import { XyoPayload, XyoPayloadWrapper } from '@xyo-network/payload'
4
+ import { PromisableArray } from '@xyo-network/promisable'
5
+ import Cookies from 'js-cookie'
6
+ import compact from 'lodash/compact'
7
+
8
+ import { XyoArchivistConfig } from './Config'
9
+ import { PartialArchivistConfig } from './PartialArchivistConfig'
10
+ import {
11
+ XyoArchivistAllQuerySchema,
12
+ XyoArchivistClearQuerySchema,
13
+ XyoArchivistCommitQuerySchema,
14
+ XyoArchivistDeleteQuerySchema,
15
+ XyoArchivistFindQuerySchema,
16
+ XyoArchivistInsertQuery,
17
+ XyoArchivistInsertQuerySchema,
18
+ } from './Queries'
19
+ import { XyoArchivist } from './XyoArchivist'
20
+ import { XyoPayloadFindFilter } from './XyoPayloadFindFilter'
21
+
22
+ export type XyoCookieArchivistConfigSchema = 'network.xyo.module.config.archivist.cookie'
23
+ export const XyoCookieArchivistConfigSchema: XyoCookieArchivistConfigSchema = 'network.xyo.module.config.archivist.cookie'
24
+
25
+ export type XyoCookieArchivistConfig = XyoArchivistConfig<{
26
+ schema: XyoCookieArchivistConfigSchema
27
+ domain?: string
28
+ maxEntries?: number
29
+ maxEntrySize?: number
30
+ namespace?: string
31
+ }>
32
+
33
+ class CookieArchivistError extends Error {
34
+ constructor(action: string, error: Error['cause'], message?: string) {
35
+ super(`Cookie Archivist [${action}] failed${message ? ` (${message})` : ''}`, { cause: error })
36
+ }
37
+ }
38
+
39
+ export class XyoCookieArchivist extends XyoArchivist<XyoCookieArchivistConfig> {
40
+ public get domain() {
41
+ return this.config?.domain
42
+ }
43
+
44
+ public get namespace() {
45
+ return this.config?.namespace ?? 'xyoarch'
46
+ }
47
+
48
+ public get maxEntries() {
49
+ //all browsers support at least 60 cookies
50
+ return this.config?.maxEntries ?? 60
51
+ }
52
+
53
+ public get maxEntrySize() {
54
+ //all browsers support at least 4000 length per cookie
55
+ return this.config?.maxEntrySize ?? 4000
56
+ }
57
+
58
+ public override get queries() {
59
+ return [
60
+ ...super.queries,
61
+ XyoArchivistAllQuerySchema,
62
+ XyoArchivistDeleteQuerySchema,
63
+ XyoArchivistClearQuerySchema,
64
+ XyoArchivistFindQuerySchema,
65
+ XyoArchivistCommitQuerySchema,
66
+ ]
67
+ }
68
+
69
+ constructor(config?: PartialArchivistConfig<XyoCookieArchivistConfig>) {
70
+ super({ ...config, schema: XyoCookieArchivistConfigSchema })
71
+ }
72
+
73
+ private keyFromHash(hash: string) {
74
+ return `${this.namespace}-${hash}`
75
+ }
76
+
77
+ public delete(hashes: string[]): PromisableArray<boolean> {
78
+ try {
79
+ return hashes.map((hash) => {
80
+ Cookies.remove(this.keyFromHash(hash))
81
+ return true
82
+ })
83
+ } catch (ex) {
84
+ throw new CookieArchivistError('delete', ex, 'unexpected')
85
+ }
86
+ }
87
+
88
+ public override clear(): void | Promise<void> {
89
+ try {
90
+ Object.entries(Cookies.get()).map(([key]) => {
91
+ if (key.startsWith(`${this.namespace}-`)) {
92
+ Cookies.remove(key)
93
+ }
94
+ })
95
+ } catch (ex) {
96
+ throw new CookieArchivistError('clear', ex, 'unexpected')
97
+ }
98
+ }
99
+
100
+ public async get(hashes: string[]): Promise<(XyoPayload | null)[]> {
101
+ try {
102
+ return await Promise.all(
103
+ hashes.map(async (hash) => {
104
+ const cookieString = Cookies.get(this.keyFromHash(hash))
105
+ return cookieString ? JSON.parse(cookieString) : (await this.getFromParents(hash)) ?? null
106
+ }),
107
+ )
108
+ } catch (ex) {
109
+ throw new CookieArchivistError('get', ex, 'unexpected')
110
+ }
111
+ }
112
+
113
+ public async insert(payloads: XyoPayload[]): Promise<XyoBoundWitness> {
114
+ try {
115
+ const storedPayloads = payloads.map((payload) => {
116
+ const wrapper = new XyoPayloadWrapper(payload)
117
+ const key = this.keyFromHash(wrapper.hash)
118
+ const value = JSON.stringify(wrapper.payload)
119
+ assertEx(value.length < this.maxEntrySize, `Payload too large [${wrapper.hash}, ${value.length}]`)
120
+ Cookies.set(key, JSON.stringify(wrapper.payload))
121
+ return wrapper.payload
122
+ })
123
+ const boundwitness = this.bindPayloads(storedPayloads)
124
+ if (this.writeThrough) {
125
+ await this.writeToParents([boundwitness, ...storedPayloads])
126
+ }
127
+ return boundwitness
128
+ } catch (ex) {
129
+ throw new CookieArchivistError('insert', ex, 'unexpected')
130
+ }
131
+ }
132
+
133
+ public async find(filter: XyoPayloadFindFilter): Promise<XyoPayload[]> {
134
+ try {
135
+ const x = (await this.all()).filter((payload) => {
136
+ if (filter.schema && filter.schema !== payload.schema) {
137
+ return false
138
+ }
139
+ return true
140
+ })
141
+ return x
142
+ } catch (ex) {
143
+ throw new CookieArchivistError('find', ex, 'unexpected')
144
+ }
145
+ }
146
+
147
+ public all(): PromisableArray<XyoPayload> {
148
+ try {
149
+ return Object.entries(Cookies.get())
150
+ .filter(([key]) => key.startsWith(`${this.namespace}-`))
151
+ .map(([, value]) => JSON.parse(value))
152
+ } catch (ex) {
153
+ throw new CookieArchivistError('all', ex, 'unexpected')
154
+ }
155
+ }
156
+
157
+ public async commit(): Promise<XyoBoundWitness> {
158
+ try {
159
+ const payloads = await this.all()
160
+ assertEx(payloads.length > 0, 'Nothing to commit')
161
+ const block = this.bindPayloads(payloads)
162
+ await Promise.allSettled(
163
+ compact(
164
+ Object.values(this.parents?.commit ?? [])?.map(async (parent) => {
165
+ const query: XyoArchivistInsertQuery = { payloads: [block, ...payloads], schema: XyoArchivistInsertQuerySchema }
166
+ return await parent?.query(query)
167
+ }),
168
+ ),
169
+ )
170
+ await this.clear()
171
+ return block
172
+ } catch (ex) {
173
+ throw new CookieArchivistError('commit', ex, 'unexpected')
174
+ }
175
+ }
176
+ }