@xyo-network/sdk 7.4.2 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/neutral/api-location-diviner.mjs +1 -1
  2. package/dist/neutral/api-location-diviner.mjs.map +2 -2
  3. package/dist/neutral/archivist-abstract.mjs +30 -25
  4. package/dist/neutral/archivist-abstract.mjs.map +2 -2
  5. package/dist/neutral/archivist-generic.mjs +4 -2
  6. package/dist/neutral/archivist-generic.mjs.map +2 -2
  7. package/dist/neutral/archivist-memory.mjs +5 -4
  8. package/dist/neutral/archivist-memory.mjs.map +2 -2
  9. package/dist/neutral/archivist-model.mjs +10 -5
  10. package/dist/neutral/archivist-model.mjs.map +2 -2
  11. package/dist/neutral/archivist-view.mjs +5 -3
  12. package/dist/neutral/archivist-view.mjs.map +2 -2
  13. package/dist/neutral/boundwitness-loader.mjs +11 -6
  14. package/dist/neutral/boundwitness-loader.mjs.map +2 -2
  15. package/dist/neutral/bridge-abstract.mjs +39 -26
  16. package/dist/neutral/bridge-abstract.mjs.map +2 -2
  17. package/dist/neutral/bridge-http.mjs +19 -15
  18. package/dist/neutral/bridge-http.mjs.map +2 -2
  19. package/dist/neutral/bridge-wrapper.mjs +4 -2
  20. package/dist/neutral/bridge-wrapper.mjs.map +2 -2
  21. package/dist/neutral/diviner-abstract.mjs +2 -2
  22. package/dist/neutral/diviner-abstract.mjs.map +2 -2
  23. package/dist/neutral/diviner-boundwitness.memory.mjs +4 -5
  24. package/dist/neutral/diviner-boundwitness.memory.mjs.map +2 -2
  25. package/dist/neutral/diviner-boundwitness.mjs +4 -5
  26. package/dist/neutral/diviner-boundwitness.mjs.map +2 -2
  27. package/dist/neutral/diviner-payload-generic.mjs +13 -15
  28. package/dist/neutral/diviner-payload-generic.mjs.map +2 -2
  29. package/dist/neutral/manifest-wrapper.mjs +4 -2
  30. package/dist/neutral/manifest-wrapper.mjs.map +2 -2
  31. package/dist/neutral/module-abstract.mjs +43 -46
  32. package/dist/neutral/module-abstract.mjs.map +3 -3
  33. package/dist/neutral/module-model.mjs +18 -1
  34. package/dist/neutral/module-model.mjs.map +2 -2
  35. package/dist/neutral/module-resolver.mjs +59 -51
  36. package/dist/neutral/module-resolver.mjs.map +3 -3
  37. package/dist/neutral/module-wrapper.mjs +11 -6
  38. package/dist/neutral/module-wrapper.mjs.map +2 -2
  39. package/dist/neutral/modules/archivist-abstract/AbstractArchivist.d.ts.map +1 -1
  40. package/dist/neutral/modules/archivist-generic/Archivist.d.ts.map +1 -1
  41. package/dist/neutral/modules/archivist-memory/MemoryDriver.d.ts.map +1 -1
  42. package/dist/neutral/modules/archivist-model/lib/getBoundWitness.d.ts.map +1 -1
  43. package/dist/neutral/modules/archivist-model/lib/hydrateBoundWitness.d.ts.map +1 -1
  44. package/dist/neutral/modules/archivist-view/ViewArchivist.d.ts.map +1 -1
  45. package/dist/neutral/modules/boundwitness-loader/Loader.d.ts.map +1 -1
  46. package/dist/neutral/modules/bridge-abstract/AbstractBridge.d.ts.map +1 -1
  47. package/dist/neutral/modules/bridge-abstract/AbstractModuleProxy/AbstractModuleProxy.d.ts.map +1 -1
  48. package/dist/neutral/modules/bridge-http/HttpBridge.d.ts.map +1 -1
  49. package/dist/neutral/modules/bridge-http/ModuleProxy/ModuleProxy.d.ts.map +1 -1
  50. package/dist/neutral/modules/bridge-wrapper/BridgeWrapper.d.ts.map +1 -1
  51. package/dist/neutral/modules/diviner-boundwitness/MemoryBoundWitnessDiviner.d.ts.map +1 -1
  52. package/dist/neutral/modules/diviner-payload-generic/Diviner.d.ts.map +1 -1
  53. package/dist/neutral/modules/manifest-wrapper/Wrapper.d.ts.map +1 -1
  54. package/dist/neutral/modules/manifest-wrapper/WrapperEx.d.ts.map +1 -1
  55. package/dist/neutral/modules/module-abstract/AbstractModule.d.ts +0 -1
  56. package/dist/neutral/modules/module-abstract/AbstractModule.d.ts.map +1 -1
  57. package/dist/neutral/modules/module-abstract/AbstractModuleInstance.d.ts.map +1 -1
  58. package/dist/neutral/modules/module-abstract/QueryValidator/ModuleConfigQueryValidator.d.ts.map +1 -1
  59. package/dist/neutral/modules/module-model/QueryableModule/IsQueryableModuleFactory.d.ts.map +1 -1
  60. package/dist/neutral/modules/module-resolver/CompositeModuleResolver.d.ts.map +1 -1
  61. package/dist/neutral/modules/module-resolver/ResolveHelper/ResolveHelper.d.ts.map +1 -1
  62. package/dist/neutral/modules/module-resolver/ResolveHelper/resolveAll.d.ts.map +1 -1
  63. package/dist/neutral/modules/module-resolver/ResolveHelper/resolveLocalNameToAddress.d.ts.map +1 -1
  64. package/dist/neutral/modules/module-resolver/ResolveHelper/resolvePathToAddress.d.ts.map +1 -1
  65. package/dist/neutral/modules/module-resolver/SimpleModuleResolver.d.ts.map +1 -1
  66. package/dist/neutral/modules/module-wrapper/ModuleWrapper.d.ts.map +1 -1
  67. package/dist/neutral/modules/node-abstract/AbstractNode.d.ts.map +1 -1
  68. package/dist/neutral/modules/node-memory/MemoryNode.d.ts.map +1 -1
  69. package/dist/neutral/modules/node-memory/NodeHelper/flatAttachToExistingNode.d.ts.map +1 -1
  70. package/dist/neutral/modules/node-view/ViewNode.d.ts.map +1 -1
  71. package/dist/neutral/modules/node-wrapper/NodeWrapper.d.ts.map +1 -1
  72. package/dist/neutral/modules/payloadset-plugin/Resolver.d.ts.map +1 -1
  73. package/dist/neutral/modules/sentinel-abstract/AbstractSentinel.d.ts.map +1 -1
  74. package/dist/neutral/modules/sentinel-memory/MemorySentinel.d.ts.map +1 -1
  75. package/dist/neutral/modules/sentinel-memory/SentinelRunner.d.ts.map +1 -1
  76. package/dist/neutral/modules/witness-abstract/AbstractWitness.d.ts.map +1 -1
  77. package/dist/neutral/node-abstract.mjs +8 -4
  78. package/dist/neutral/node-abstract.mjs.map +2 -2
  79. package/dist/neutral/node-memory.mjs +6 -4
  80. package/dist/neutral/node-memory.mjs.map +2 -2
  81. package/dist/neutral/node-view.mjs +2 -1
  82. package/dist/neutral/node-view.mjs.map +2 -2
  83. package/dist/neutral/node-wrapper.mjs +16 -7
  84. package/dist/neutral/node-wrapper.mjs.map +2 -2
  85. package/dist/neutral/payloadset-plugin.mjs +11 -10
  86. package/dist/neutral/payloadset-plugin.mjs.map +2 -2
  87. package/dist/neutral/sentinel-abstract.mjs +4 -3
  88. package/dist/neutral/sentinel-abstract.mjs.map +2 -2
  89. package/dist/neutral/sentinel-memory.mjs +12 -7
  90. package/dist/neutral/sentinel-memory.mjs.map +2 -2
  91. package/dist/neutral/witness-abstract.mjs +4 -3
  92. package/dist/neutral/witness-abstract.mjs.map +2 -2
  93. package/dist/node/modules/archivist-abstract/AbstractArchivist.d.ts.map +1 -1
  94. package/dist/node/modules/archivist-generic/Archivist.d.ts.map +1 -1
  95. package/dist/node/modules/archivist-memory/MemoryDriver.d.ts.map +1 -1
  96. package/dist/node/modules/archivist-model/lib/getBoundWitness.d.ts.map +1 -1
  97. package/dist/node/modules/archivist-model/lib/hydrateBoundWitness.d.ts.map +1 -1
  98. package/dist/node/modules/archivist-view/ViewArchivist.d.ts.map +1 -1
  99. package/dist/node/modules/boundwitness-loader/Loader.d.ts.map +1 -1
  100. package/dist/node/modules/bridge-abstract/AbstractBridge.d.ts.map +1 -1
  101. package/dist/node/modules/bridge-abstract/AbstractModuleProxy/AbstractModuleProxy.d.ts.map +1 -1
  102. package/dist/node/modules/bridge-http/HttpBridge.d.ts.map +1 -1
  103. package/dist/node/modules/bridge-http/ModuleProxy/ModuleProxy.d.ts.map +1 -1
  104. package/dist/node/modules/bridge-wrapper/BridgeWrapper.d.ts.map +1 -1
  105. package/dist/node/modules/diviner-boundwitness/MemoryBoundWitnessDiviner.d.ts.map +1 -1
  106. package/dist/node/modules/diviner-payload-generic/Diviner.d.ts.map +1 -1
  107. package/dist/node/modules/manifest-wrapper/Wrapper.d.ts.map +1 -1
  108. package/dist/node/modules/manifest-wrapper/WrapperEx.d.ts.map +1 -1
  109. package/dist/node/modules/module-abstract/AbstractModule.d.ts +0 -1
  110. package/dist/node/modules/module-abstract/AbstractModule.d.ts.map +1 -1
  111. package/dist/node/modules/module-abstract/AbstractModuleInstance.d.ts.map +1 -1
  112. package/dist/node/modules/module-abstract/QueryValidator/ModuleConfigQueryValidator.d.ts.map +1 -1
  113. package/dist/node/modules/module-model/QueryableModule/IsQueryableModuleFactory.d.ts.map +1 -1
  114. package/dist/node/modules/module-resolver/CompositeModuleResolver.d.ts.map +1 -1
  115. package/dist/node/modules/module-resolver/ResolveHelper/ResolveHelper.d.ts.map +1 -1
  116. package/dist/node/modules/module-resolver/ResolveHelper/resolveAll.d.ts.map +1 -1
  117. package/dist/node/modules/module-resolver/ResolveHelper/resolveLocalNameToAddress.d.ts.map +1 -1
  118. package/dist/node/modules/module-resolver/ResolveHelper/resolvePathToAddress.d.ts.map +1 -1
  119. package/dist/node/modules/module-resolver/SimpleModuleResolver.d.ts.map +1 -1
  120. package/dist/node/modules/module-wrapper/ModuleWrapper.d.ts.map +1 -1
  121. package/dist/node/modules/node-abstract/AbstractNode.d.ts.map +1 -1
  122. package/dist/node/modules/node-memory/MemoryNode.d.ts.map +1 -1
  123. package/dist/node/modules/node-memory/NodeHelper/flatAttachToExistingNode.d.ts.map +1 -1
  124. package/dist/node/modules/node-view/ViewNode.d.ts.map +1 -1
  125. package/dist/node/modules/node-wrapper/NodeWrapper.d.ts.map +1 -1
  126. package/dist/node/modules/payloadset-plugin/Resolver.d.ts.map +1 -1
  127. package/dist/node/modules/sentinel-abstract/AbstractSentinel.d.ts.map +1 -1
  128. package/dist/node/modules/sentinel-memory/MemorySentinel.d.ts.map +1 -1
  129. package/dist/node/modules/sentinel-memory/SentinelRunner.d.ts.map +1 -1
  130. package/dist/node/modules/witness-abstract/AbstractWitness.d.ts.map +1 -1
  131. package/package.json +11 -11
@@ -97,7 +97,7 @@ var locationQuerySchemas = {
97
97
  "network.xyo.location.range.query": true
98
98
  };
99
99
  var isSupportedLocationQuerySchema = (schema) => {
100
- return locationQuerySchemas[schema] || false;
100
+ return locationQuerySchemas[schema];
101
101
  };
102
102
 
103
103
  // src/modules/api-location-diviner/LocationDiviner/Queries/LocationTimeRangeQuery/LocationTimeRangeQuery.ts
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/modules/api-location-diviner/LocationDiviner/LocationDivinerApi.ts", "../../src/modules/api-location-diviner/LocationDiviner/Queries/LocationHeatmapQuery/LocationHeatmapQuery.ts", "../../src/modules/api-location-diviner/LocationDiviner/Witnesses/CurrentLocationWitness.ts", "../../src/modules/api-location-diviner/LocationDiviner/Witnesses/LocationWitness.ts", "../../src/modules/api-location-diviner/LocationDiviner/Queries/LocationQuadkeyHeatmapQuery/LocationQuadkeyHeatmapQuery.ts", "../../src/modules/api-location-diviner/LocationDiviner/Queries/LocationQuerySchema.ts", "../../src/modules/api-location-diviner/LocationDiviner/Queries/LocationTimeRangeQuery/LocationTimeRangeQuery.ts", "../../src/modules/api-location-diviner/RemoteDivinerConfig.ts", "../../src/modules/api-location-diviner/RemoteDivinerError.ts"],
4
- "sourcesContent": ["import { assertEx, fetchJsonClient } from '@ariestools/sdk'\n\nimport type { GetLocationQueryResponse } from './models.ts'\nimport type { LocationQueryCreationResponse, SupportedLocationQueryCreationRequest } from './Queries/index.ts'\n\ninterface LocationDivinerApiConfig {\n apiDomain: string\n}\n\ninterface JsonDataEnvelope<T> {\n data?: T\n}\n\nclass LocationDivinerApi {\n config: LocationDivinerApiConfig\n constructor(config: LocationDivinerApiConfig) {\n this.config = config\n }\n\n async getLocationQuery(hash: string): Promise<GetLocationQueryResponse> {\n const response = await fetchJsonClient.get<JsonDataEnvelope<GetLocationQueryResponse>>(`${this.config.apiDomain}/location/query/${hash}`)\n return assertEx(response.data?.data, () => 'LocationDivinerApi.getLocationQuery: missing response data')\n }\n\n async postLocationQuery(request: SupportedLocationQueryCreationRequest): Promise<LocationQueryCreationResponse> {\n const response = await fetchJsonClient.post<JsonDataEnvelope<LocationQueryCreationResponse>>(`${this.config.apiDomain}/location/query`, { ...request })\n return assertEx(response.data?.data, () => 'LocationDivinerApi.postLocationQuery: missing response data')\n }\n}\n\nexport { LocationDivinerApi }\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { asSchema } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport { LocationWitnessSchema } from '../../Witnesses/index.ts'\n\nexport const LocationHeatmapQuerySchema: 'network.xyo.location.heatmap.query' & {\n readonly __schema: true\n} = asSchema('network.xyo.location.heatmap.query', true)\nexport type LocationHeatmapQuerySchema = typeof LocationHeatmapQuerySchema\n\nexport const LocationHeatmapAnswerSchema: 'network.xyo.location.heatmap.answer' & {\n readonly __schema: true\n} = asSchema('network.xyo.location.heatmap.answer', true)\nexport type LocationHeatmapAnswerSchema = typeof LocationHeatmapAnswerSchema\n\nexport const LocationHeatmapQueryZod: z.ZodMiniObject<{\n schema: z.ZodMiniLiteral<LocationWitnessSchema>\n startTime: z.ZodMiniOptional<z.ZodMiniString<string>>\n stopTime: z.ZodMiniOptional<z.ZodMiniString<string>>\n}, z.core.$strip> = z.object({\n schema: z.literal(LocationWitnessSchema),\n startTime: z.optional(z.string()),\n stopTime: z.optional(z.string()),\n})\n\nexport type LocationHeatmapQuery = z.infer<typeof LocationHeatmapQueryZod>\n\nexport const isLocationHeatmapQuery: ReturnType<typeof zodIsFactory<LocationHeatmapQuery>> = zodIsFactory(LocationHeatmapQueryZod)\nexport const asLocationHeatmapQuery: ReturnType<typeof zodAsFactory<LocationHeatmapQuery>> = zodAsFactory(LocationHeatmapQueryZod, 'asLocationHeatmapQuery')\nexport const toLocationHeatmapQuery: ReturnType<typeof zodToFactory<LocationHeatmapQuery>> = zodToFactory(LocationHeatmapQueryZod, 'toLocationHeatmapQuery')\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { asSchema, PayloadZodOfSchema } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nexport const CurrentLocationWitnessSchema: 'co.coinapp.currentlocationwitness' & {\n readonly __schema: true\n} = asSchema('co.coinapp.currentlocationwitness', true)\nexport type CurrentLocationWitnessSchema = typeof CurrentLocationWitnessSchema\n\nexport const CurrentLocationWitnessPayloadZod: z.ZodMiniObject<{\n altitudeMeters: z.ZodMiniNumber<number>\n directionDegrees: z.ZodMiniNumber<number>\n latitude: z.ZodMiniNumber<number>\n longitude: z.ZodMiniNumber<number>\n quadkey: z.ZodMiniString<string>\n schema: z.ZodMiniLiteral<CurrentLocationWitnessSchema>\n speedKph: z.ZodMiniNumber<number>\n}, z.core.$strip> = z.extend(PayloadZodOfSchema(CurrentLocationWitnessSchema), {\n altitudeMeters: z.number(),\n directionDegrees: z.number(),\n latitude: z.number(),\n longitude: z.number(),\n quadkey: z.string(),\n speedKph: z.number(),\n})\n\nexport type CurrentLocationWitnessPayload = z.infer<typeof CurrentLocationWitnessPayloadZod>\n\nexport const isCurrentLocationWitnessPayload: ReturnType<typeof zodIsFactory<CurrentLocationWitnessPayload>>\n = zodIsFactory(CurrentLocationWitnessPayloadZod)\nexport const asCurrentLocationWitnessPayload: ReturnType<typeof zodAsFactory<CurrentLocationWitnessPayload>>\n = zodAsFactory(CurrentLocationWitnessPayloadZod, 'asCurrentLocationWitnessPayload')\nexport const toCurrentLocationWitnessPayload: ReturnType<typeof zodToFactory<CurrentLocationWitnessPayload>>\n = zodToFactory(CurrentLocationWitnessPayloadZod, 'toCurrentLocationWitnessPayload')\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { asSchema, PayloadZodOfSchema } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nexport const LocationWitnessSchema: 'network.xyo.location' & {\n readonly __schema: true\n} = asSchema('network.xyo.location', true)\nexport type LocationWitnessSchema = typeof LocationWitnessSchema\n\nexport interface Coordinates {\n accuracy: number | null\n altitude: number | null\n altitudeAccuracy: number | null\n heading: number | null\n latitude: number\n longitude: number\n speed: number | null\n}\nexport interface CurrentLocation {\n coords: Coordinates\n timestamp: number\n}\n\nexport const LocationWitnessPayloadZod: z.ZodMiniObject<{\n currentLocation: z.ZodMiniCustom<CurrentLocation, CurrentLocation>\n schema: z.ZodMiniLiteral<LocationWitnessSchema>\n}, z.core.$strip> = z.extend(PayloadZodOfSchema(LocationWitnessSchema), { currentLocation: z.custom<CurrentLocation>() })\n\nexport type LocationWitnessPayload = z.infer<typeof LocationWitnessPayloadZod>\n\nexport const isLocationWitnessPayload: ReturnType<typeof zodIsFactory<LocationWitnessPayload>> = zodIsFactory(LocationWitnessPayloadZod)\nexport const asLocationWitnessPayload: ReturnType<typeof zodAsFactory<LocationWitnessPayload>> = zodAsFactory(LocationWitnessPayloadZod, 'asLocationWitnessPayload')\nexport const toLocationWitnessPayload: ReturnType<typeof zodToFactory<LocationWitnessPayload>> = zodToFactory(LocationWitnessPayloadZod, 'toLocationWitnessPayload')\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { asSchema } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport { LocationWitnessSchema } from '../../Witnesses/index.ts'\n\nexport const LocationQuadkeyHeatmapQuerySchema: 'network.xyo.location.heatmap.quadkey.query' & {\n readonly __schema: true\n} = asSchema('network.xyo.location.heatmap.quadkey.query', true)\nexport type LocationQuadkeyHeatmapQuerySchema = typeof LocationQuadkeyHeatmapQuerySchema\n\nexport const LocationQuadkeyHeatmapAnswerSchema: 'network.xyo.location.heatmap.quadkey.answer' & {\n readonly __schema: true\n} = asSchema('network.xyo.location.heatmap.quadkey.answer', true)\nexport type LocationQuadkeyHeatmapAnswerSchema = typeof LocationQuadkeyHeatmapAnswerSchema\n\nexport const LocationQuadkeyHeatmapQueryZod: z.ZodMiniObject<{\n schema: z.ZodMiniLiteral<LocationWitnessSchema>\n startTime: z.ZodMiniOptional<z.ZodMiniString<string>>\n stopTime: z.ZodMiniOptional<z.ZodMiniString<string>>\n}, z.core.$strip> = z.object({\n schema: z.literal(LocationWitnessSchema),\n startTime: z.optional(z.string()),\n stopTime: z.optional(z.string()),\n})\n\nexport type LocationQuadkeyHeatmapQuery = z.infer<typeof LocationQuadkeyHeatmapQueryZod>\n\nexport const isLocationQuadkeyHeatmapQuery: ReturnType<typeof zodIsFactory<LocationQuadkeyHeatmapQuery>>\n = zodIsFactory(LocationQuadkeyHeatmapQueryZod)\nexport const asLocationQuadkeyHeatmapQuery: ReturnType<typeof zodAsFactory<LocationQuadkeyHeatmapQuery>>\n = zodAsFactory(LocationQuadkeyHeatmapQueryZod, 'asLocationQuadkeyHeatmapQuery')\nexport const toLocationQuadkeyHeatmapQuery: ReturnType<typeof zodToFactory<LocationQuadkeyHeatmapQuery>>\n = zodToFactory(LocationQuadkeyHeatmapQueryZod, 'toLocationQuadkeyHeatmapQuery')\n", "import type { Schema } from '@xyo-network/sdk-protocol'\n\nimport type { LocationHeatmapQuerySchema } from './LocationHeatmapQuery/index.ts'\nimport type { LocationQuadkeyHeatmapQuerySchema } from './LocationQuadkeyHeatmapQuery/index.ts'\nimport type { LocationTimeRangeQuerySchema } from './LocationTimeRangeQuery/index.ts'\n\nexport type LocationQuerySchema = LocationQuadkeyHeatmapQuerySchema | LocationHeatmapQuerySchema | LocationTimeRangeQuerySchema\n\nconst locationQuerySchemas: Record<string, true> = {\n 'network.xyo.location.heatmap.quadkey.query': true,\n 'network.xyo.location.heatmap.query': true,\n 'network.xyo.location.range.query': true,\n}\n\nexport const isSupportedLocationQuerySchema = (schema: Schema): schema is LocationQuerySchema => {\n return locationQuerySchemas[schema as LocationQuerySchema] || false\n}\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { asSchema } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport { LocationWitnessSchema } from '../../Witnesses/index.ts'\n\nexport const LocationTimeRangeQuerySchema: 'network.xyo.location.range.query' & {\n readonly __schema: true\n} = asSchema('network.xyo.location.range.query', true)\nexport type LocationTimeRangeQuerySchema = typeof LocationTimeRangeQuerySchema\n\nexport const LocationTimeRangeAnswerSchema: 'network.xyo.location.range.answer' & {\n readonly __schema: true\n} = asSchema('network.xyo.location.range.answer', true)\nexport type LocationTimeRangeAnswerSchema = typeof LocationTimeRangeAnswerSchema\n\nexport const LocationTimeRangeQueryZod: z.ZodMiniObject<{\n schema: z.ZodMiniLiteral<LocationWitnessSchema>\n startTime: z.ZodMiniOptional<z.ZodMiniString<string>>\n stopTime: z.ZodMiniOptional<z.ZodMiniString<string>>\n}, z.core.$strip> = z.object({\n schema: z.literal(LocationWitnessSchema),\n startTime: z.optional(z.string()),\n // TODO: Bounding rectangle, etc.\n stopTime: z.optional(z.string()),\n})\n\nexport type LocationTimeRangeQuery = z.infer<typeof LocationTimeRangeQueryZod>\n\nexport const isLocationTimeRangeQuery: ReturnType<typeof zodIsFactory<LocationTimeRangeQuery>> = zodIsFactory(LocationTimeRangeQueryZod)\nexport const asLocationTimeRangeQuery: ReturnType<typeof zodAsFactory<LocationTimeRangeQuery>> = zodAsFactory(LocationTimeRangeQueryZod, 'asLocationTimeRangeQuery')\nexport const toLocationTimeRangeQuery: ReturnType<typeof zodToFactory<LocationTimeRangeQuery>> = zodToFactory(LocationTimeRangeQueryZod, 'toLocationTimeRangeQuery')\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { asSchema } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport { DivinerConfigZod } from '#diviner-model'\n\nexport const RemoteDivinerConfigSchema: 'network.xyo.diviner.remote.config' & {\n readonly __schema: true\n} = asSchema('network.xyo.diviner.remote.config', true)\nexport type RemoteDivinerConfigSchema = typeof RemoteDivinerConfigSchema\n\nexport const RemoteDivinerConfigZod: z.ZodMiniObject<\n Omit<(typeof DivinerConfigZod)['shape'], 'schema'> & {\n /** @deprecated use in params instead */\n api: z.ZodMiniOptional<z.ZodMiniCustom<object, object>>\n archive: z.ZodMiniOptional<z.ZodMiniString<string>>\n schema: z.ZodMiniLiteral<RemoteDivinerConfigSchema>\n },\n z.core.$strip\n> = z.extend(DivinerConfigZod, {\n /** @deprecated use in params instead */\n api: z.optional(z.custom<object>()),\n archive: z.optional(z.string()),\n schema: z.literal(RemoteDivinerConfigSchema),\n})\n\nexport type RemoteDivinerConfig = z.infer<typeof RemoteDivinerConfigZod>\n\nexport const isRemoteDivinerConfig: ReturnType<typeof zodIsFactory<RemoteDivinerConfig>> = zodIsFactory(RemoteDivinerConfigZod)\nexport const asRemoteDivinerConfig: ReturnType<typeof zodAsFactory<RemoteDivinerConfig>> = zodAsFactory(RemoteDivinerConfigZod, 'asRemoteDivinerConfig')\nexport const toRemoteDivinerConfig: ReturnType<typeof zodToFactory<RemoteDivinerConfig>> = zodToFactory(RemoteDivinerConfigZod, 'toRemoteDivinerConfig')\n", "import { isString } from '@ariestools/sdk'\n\nexport class RemoteDivinerError extends Error {\n isRemoteDivinerError = true\n constructor(action: string, error: Error['cause'], message?: string) {\n const messageString = isString(message) ? ` (${message})` : ''\n super(`Remote Diviner [${action}] failed${messageString}`, { cause: error })\n }\n\n static isRemoteDivinerError(error: unknown): RemoteDivinerError | undefined {\n return (error as RemoteDivinerError).isRemoteDivinerError ? (error as RemoteDivinerError) : undefined\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { assertEx, fetchJsonClient } from '@ariestools/sdk'\n\nimport type { GetLocationQueryResponse } from './models.ts'\nimport type { LocationQueryCreationResponse, SupportedLocationQueryCreationRequest } from './Queries/index.ts'\n\ninterface LocationDivinerApiConfig {\n apiDomain: string\n}\n\ninterface JsonDataEnvelope<T> {\n data?: T\n}\n\nclass LocationDivinerApi {\n config: LocationDivinerApiConfig\n constructor(config: LocationDivinerApiConfig) {\n this.config = config\n }\n\n async getLocationQuery(hash: string): Promise<GetLocationQueryResponse> {\n const response = await fetchJsonClient.get<JsonDataEnvelope<GetLocationQueryResponse>>(`${this.config.apiDomain}/location/query/${hash}`)\n return assertEx(response.data?.data, () => 'LocationDivinerApi.getLocationQuery: missing response data')\n }\n\n async postLocationQuery(request: SupportedLocationQueryCreationRequest): Promise<LocationQueryCreationResponse> {\n const response = await fetchJsonClient.post<JsonDataEnvelope<LocationQueryCreationResponse>>(`${this.config.apiDomain}/location/query`, { ...request })\n return assertEx(response.data?.data, () => 'LocationDivinerApi.postLocationQuery: missing response data')\n }\n}\n\nexport { LocationDivinerApi }\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { asSchema } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport { LocationWitnessSchema } from '../../Witnesses/index.ts'\n\nexport const LocationHeatmapQuerySchema: 'network.xyo.location.heatmap.query' & {\n readonly __schema: true\n} = asSchema('network.xyo.location.heatmap.query', true)\nexport type LocationHeatmapQuerySchema = typeof LocationHeatmapQuerySchema\n\nexport const LocationHeatmapAnswerSchema: 'network.xyo.location.heatmap.answer' & {\n readonly __schema: true\n} = asSchema('network.xyo.location.heatmap.answer', true)\nexport type LocationHeatmapAnswerSchema = typeof LocationHeatmapAnswerSchema\n\nexport const LocationHeatmapQueryZod: z.ZodMiniObject<{\n schema: z.ZodMiniLiteral<LocationWitnessSchema>\n startTime: z.ZodMiniOptional<z.ZodMiniString<string>>\n stopTime: z.ZodMiniOptional<z.ZodMiniString<string>>\n}, z.core.$strip> = z.object({\n schema: z.literal(LocationWitnessSchema),\n startTime: z.optional(z.string()),\n stopTime: z.optional(z.string()),\n})\n\nexport type LocationHeatmapQuery = z.infer<typeof LocationHeatmapQueryZod>\n\nexport const isLocationHeatmapQuery: ReturnType<typeof zodIsFactory<LocationHeatmapQuery>> = zodIsFactory(LocationHeatmapQueryZod)\nexport const asLocationHeatmapQuery: ReturnType<typeof zodAsFactory<LocationHeatmapQuery>> = zodAsFactory(LocationHeatmapQueryZod, 'asLocationHeatmapQuery')\nexport const toLocationHeatmapQuery: ReturnType<typeof zodToFactory<LocationHeatmapQuery>> = zodToFactory(LocationHeatmapQueryZod, 'toLocationHeatmapQuery')\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { asSchema, PayloadZodOfSchema } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nexport const CurrentLocationWitnessSchema: 'co.coinapp.currentlocationwitness' & {\n readonly __schema: true\n} = asSchema('co.coinapp.currentlocationwitness', true)\nexport type CurrentLocationWitnessSchema = typeof CurrentLocationWitnessSchema\n\nexport const CurrentLocationWitnessPayloadZod: z.ZodMiniObject<{\n altitudeMeters: z.ZodMiniNumber<number>\n directionDegrees: z.ZodMiniNumber<number>\n latitude: z.ZodMiniNumber<number>\n longitude: z.ZodMiniNumber<number>\n quadkey: z.ZodMiniString<string>\n schema: z.ZodMiniLiteral<CurrentLocationWitnessSchema>\n speedKph: z.ZodMiniNumber<number>\n}, z.core.$strip> = z.extend(PayloadZodOfSchema(CurrentLocationWitnessSchema), {\n altitudeMeters: z.number(),\n directionDegrees: z.number(),\n latitude: z.number(),\n longitude: z.number(),\n quadkey: z.string(),\n speedKph: z.number(),\n})\n\nexport type CurrentLocationWitnessPayload = z.infer<typeof CurrentLocationWitnessPayloadZod>\n\nexport const isCurrentLocationWitnessPayload: ReturnType<typeof zodIsFactory<CurrentLocationWitnessPayload>>\n = zodIsFactory(CurrentLocationWitnessPayloadZod)\nexport const asCurrentLocationWitnessPayload: ReturnType<typeof zodAsFactory<CurrentLocationWitnessPayload>>\n = zodAsFactory(CurrentLocationWitnessPayloadZod, 'asCurrentLocationWitnessPayload')\nexport const toCurrentLocationWitnessPayload: ReturnType<typeof zodToFactory<CurrentLocationWitnessPayload>>\n = zodToFactory(CurrentLocationWitnessPayloadZod, 'toCurrentLocationWitnessPayload')\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { asSchema, PayloadZodOfSchema } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nexport const LocationWitnessSchema: 'network.xyo.location' & {\n readonly __schema: true\n} = asSchema('network.xyo.location', true)\nexport type LocationWitnessSchema = typeof LocationWitnessSchema\n\nexport interface Coordinates {\n accuracy: number | null\n altitude: number | null\n altitudeAccuracy: number | null\n heading: number | null\n latitude: number\n longitude: number\n speed: number | null\n}\nexport interface CurrentLocation {\n coords: Coordinates\n timestamp: number\n}\n\nexport const LocationWitnessPayloadZod: z.ZodMiniObject<{\n currentLocation: z.ZodMiniCustom<CurrentLocation, CurrentLocation>\n schema: z.ZodMiniLiteral<LocationWitnessSchema>\n}, z.core.$strip> = z.extend(PayloadZodOfSchema(LocationWitnessSchema), { currentLocation: z.custom<CurrentLocation>() })\n\nexport type LocationWitnessPayload = z.infer<typeof LocationWitnessPayloadZod>\n\nexport const isLocationWitnessPayload: ReturnType<typeof zodIsFactory<LocationWitnessPayload>> = zodIsFactory(LocationWitnessPayloadZod)\nexport const asLocationWitnessPayload: ReturnType<typeof zodAsFactory<LocationWitnessPayload>> = zodAsFactory(LocationWitnessPayloadZod, 'asLocationWitnessPayload')\nexport const toLocationWitnessPayload: ReturnType<typeof zodToFactory<LocationWitnessPayload>> = zodToFactory(LocationWitnessPayloadZod, 'toLocationWitnessPayload')\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { asSchema } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport { LocationWitnessSchema } from '../../Witnesses/index.ts'\n\nexport const LocationQuadkeyHeatmapQuerySchema: 'network.xyo.location.heatmap.quadkey.query' & {\n readonly __schema: true\n} = asSchema('network.xyo.location.heatmap.quadkey.query', true)\nexport type LocationQuadkeyHeatmapQuerySchema = typeof LocationQuadkeyHeatmapQuerySchema\n\nexport const LocationQuadkeyHeatmapAnswerSchema: 'network.xyo.location.heatmap.quadkey.answer' & {\n readonly __schema: true\n} = asSchema('network.xyo.location.heatmap.quadkey.answer', true)\nexport type LocationQuadkeyHeatmapAnswerSchema = typeof LocationQuadkeyHeatmapAnswerSchema\n\nexport const LocationQuadkeyHeatmapQueryZod: z.ZodMiniObject<{\n schema: z.ZodMiniLiteral<LocationWitnessSchema>\n startTime: z.ZodMiniOptional<z.ZodMiniString<string>>\n stopTime: z.ZodMiniOptional<z.ZodMiniString<string>>\n}, z.core.$strip> = z.object({\n schema: z.literal(LocationWitnessSchema),\n startTime: z.optional(z.string()),\n stopTime: z.optional(z.string()),\n})\n\nexport type LocationQuadkeyHeatmapQuery = z.infer<typeof LocationQuadkeyHeatmapQueryZod>\n\nexport const isLocationQuadkeyHeatmapQuery: ReturnType<typeof zodIsFactory<LocationQuadkeyHeatmapQuery>>\n = zodIsFactory(LocationQuadkeyHeatmapQueryZod)\nexport const asLocationQuadkeyHeatmapQuery: ReturnType<typeof zodAsFactory<LocationQuadkeyHeatmapQuery>>\n = zodAsFactory(LocationQuadkeyHeatmapQueryZod, 'asLocationQuadkeyHeatmapQuery')\nexport const toLocationQuadkeyHeatmapQuery: ReturnType<typeof zodToFactory<LocationQuadkeyHeatmapQuery>>\n = zodToFactory(LocationQuadkeyHeatmapQueryZod, 'toLocationQuadkeyHeatmapQuery')\n", "import type { Schema } from '@xyo-network/sdk-protocol'\n\nimport type { LocationHeatmapQuerySchema } from './LocationHeatmapQuery/index.ts'\nimport type { LocationQuadkeyHeatmapQuerySchema } from './LocationQuadkeyHeatmapQuery/index.ts'\nimport type { LocationTimeRangeQuerySchema } from './LocationTimeRangeQuery/index.ts'\n\nexport type LocationQuerySchema = LocationQuadkeyHeatmapQuerySchema | LocationHeatmapQuerySchema | LocationTimeRangeQuerySchema\n\nconst locationQuerySchemas: Record<string, true> = {\n 'network.xyo.location.heatmap.quadkey.query': true,\n 'network.xyo.location.heatmap.query': true,\n 'network.xyo.location.range.query': true,\n}\n\nexport const isSupportedLocationQuerySchema = (schema: Schema): schema is LocationQuerySchema => {\n return locationQuerySchemas[schema as LocationQuerySchema]\n}\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { asSchema } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport { LocationWitnessSchema } from '../../Witnesses/index.ts'\n\nexport const LocationTimeRangeQuerySchema: 'network.xyo.location.range.query' & {\n readonly __schema: true\n} = asSchema('network.xyo.location.range.query', true)\nexport type LocationTimeRangeQuerySchema = typeof LocationTimeRangeQuerySchema\n\nexport const LocationTimeRangeAnswerSchema: 'network.xyo.location.range.answer' & {\n readonly __schema: true\n} = asSchema('network.xyo.location.range.answer', true)\nexport type LocationTimeRangeAnswerSchema = typeof LocationTimeRangeAnswerSchema\n\nexport const LocationTimeRangeQueryZod: z.ZodMiniObject<{\n schema: z.ZodMiniLiteral<LocationWitnessSchema>\n startTime: z.ZodMiniOptional<z.ZodMiniString<string>>\n stopTime: z.ZodMiniOptional<z.ZodMiniString<string>>\n}, z.core.$strip> = z.object({\n schema: z.literal(LocationWitnessSchema),\n startTime: z.optional(z.string()),\n // TODO: Bounding rectangle, etc.\n stopTime: z.optional(z.string()),\n})\n\nexport type LocationTimeRangeQuery = z.infer<typeof LocationTimeRangeQueryZod>\n\nexport const isLocationTimeRangeQuery: ReturnType<typeof zodIsFactory<LocationTimeRangeQuery>> = zodIsFactory(LocationTimeRangeQueryZod)\nexport const asLocationTimeRangeQuery: ReturnType<typeof zodAsFactory<LocationTimeRangeQuery>> = zodAsFactory(LocationTimeRangeQueryZod, 'asLocationTimeRangeQuery')\nexport const toLocationTimeRangeQuery: ReturnType<typeof zodToFactory<LocationTimeRangeQuery>> = zodToFactory(LocationTimeRangeQueryZod, 'toLocationTimeRangeQuery')\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { asSchema } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport { DivinerConfigZod } from '#diviner-model'\n\nexport const RemoteDivinerConfigSchema: 'network.xyo.diviner.remote.config' & {\n readonly __schema: true\n} = asSchema('network.xyo.diviner.remote.config', true)\nexport type RemoteDivinerConfigSchema = typeof RemoteDivinerConfigSchema\n\nexport const RemoteDivinerConfigZod: z.ZodMiniObject<\n Omit<(typeof DivinerConfigZod)['shape'], 'schema'> & {\n /** @deprecated use in params instead */\n api: z.ZodMiniOptional<z.ZodMiniCustom<object, object>>\n archive: z.ZodMiniOptional<z.ZodMiniString<string>>\n schema: z.ZodMiniLiteral<RemoteDivinerConfigSchema>\n },\n z.core.$strip\n> = z.extend(DivinerConfigZod, {\n /** @deprecated use in params instead */\n api: z.optional(z.custom<object>()),\n archive: z.optional(z.string()),\n schema: z.literal(RemoteDivinerConfigSchema),\n})\n\nexport type RemoteDivinerConfig = z.infer<typeof RemoteDivinerConfigZod>\n\nexport const isRemoteDivinerConfig: ReturnType<typeof zodIsFactory<RemoteDivinerConfig>> = zodIsFactory(RemoteDivinerConfigZod)\nexport const asRemoteDivinerConfig: ReturnType<typeof zodAsFactory<RemoteDivinerConfig>> = zodAsFactory(RemoteDivinerConfigZod, 'asRemoteDivinerConfig')\nexport const toRemoteDivinerConfig: ReturnType<typeof zodToFactory<RemoteDivinerConfig>> = zodToFactory(RemoteDivinerConfigZod, 'toRemoteDivinerConfig')\n", "import { isString } from '@ariestools/sdk'\n\nexport class RemoteDivinerError extends Error {\n isRemoteDivinerError = true\n constructor(action: string, error: Error['cause'], message?: string) {\n const messageString = isString(message) ? ` (${message})` : ''\n super(`Remote Diviner [${action}] failed${messageString}`, { cause: error })\n }\n\n static isRemoteDivinerError(error: unknown): RemoteDivinerError | undefined {\n return (error as RemoteDivinerError).isRemoteDivinerError ? (error as RemoteDivinerError) : undefined\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["zodAsFactory", "zodIsFactory", "zodToFactory", "asSchema", "z", "zodAsFactory", "zodIsFactory", "zodToFactory", "asSchema", "PayloadZodOfSchema", "z", "asSchema", "zodIsFactory", "zodAsFactory", "zodToFactory", "zodAsFactory", "zodIsFactory", "zodToFactory", "asSchema", "z", "asSchema", "zodIsFactory", "zodAsFactory", "zodToFactory", "zodAsFactory", "zodIsFactory", "zodToFactory", "asSchema", "z", "asSchema", "zodIsFactory", "zodAsFactory", "zodToFactory", "zodAsFactory", "zodIsFactory", "zodToFactory", "asSchema", "z"]
7
7
  }
@@ -65,14 +65,14 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
65
65
  return this._payloadCountMeter ?? null;
66
66
  }
67
67
  get storeParentReads() {
68
- return !!this.config?.storeParentReads;
68
+ return this.config?.storeParentReads === true;
69
69
  }
70
70
  /** @deprecated use next or snapshot instead */
71
71
  async all() {
72
72
  this._noOverride("all");
73
73
  this.isSupportedQuery(ArchivistAllQuerySchema, "all");
74
74
  return await this.spanAsync(`${this.id}|all`, async () => {
75
- if (this.reentrancy?.scope === "global" && this.reentrancy.action === "skip" && this.globalReentrancyMutex?.isLocked()) {
75
+ if (this.reentrancy?.scope === "global" && this.reentrancy.action === "skip" && this.globalReentrancyMutex?.isLocked() === true) {
76
76
  return [];
77
77
  }
78
78
  try {
@@ -96,7 +96,7 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
96
96
  this._noOverride("clear");
97
97
  this.isSupportedQuery(ArchivistClearQuerySchema, "clear");
98
98
  return await this.spanAsync(`${this.id}|clear`, async () => {
99
- if (this.reentrancy?.scope === "global" && this.reentrancy.action === "skip" && this.globalReentrancyMutex?.isLocked()) {
99
+ if (this.reentrancy?.scope === "global" && this.reentrancy.action === "skip" && this.globalReentrancyMutex?.isLocked() === true) {
100
100
  return;
101
101
  }
102
102
  try {
@@ -119,7 +119,7 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
119
119
  this._noOverride("commit");
120
120
  this.isSupportedQuery(ArchivistCommitQuerySchema, "commit");
121
121
  return await this.spanAsync(`${this.id}commit`, async () => {
122
- if (this.reentrancy?.scope === "global" && this.reentrancy.action === "skip" && this.globalReentrancyMutex?.isLocked()) {
122
+ if (this.reentrancy?.scope === "global" && this.reentrancy.action === "skip" && this.globalReentrancyMutex?.isLocked() === true) {
123
123
  return [];
124
124
  }
125
125
  try {
@@ -142,7 +142,7 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
142
142
  this._noOverride("delete");
143
143
  this.isSupportedQuery(ArchivistDeleteQuerySchema, "delete");
144
144
  return await this.spanAsync(`${this.id}|delete`, async () => {
145
- if (this.reentrancy?.scope === "global" && this.reentrancy.action === "skip" && this.globalReentrancyMutex?.isLocked()) {
145
+ if (this.reentrancy?.scope === "global" && this.reentrancy.action === "skip" && this.globalReentrancyMutex?.isLocked() === true) {
146
146
  return [];
147
147
  }
148
148
  try {
@@ -165,7 +165,7 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
165
165
  this._noOverride("get");
166
166
  this.isSupportedQuery(ArchivistGetQuerySchema, "get");
167
167
  return await this.spanAsync(`${this.id}|get`, async () => {
168
- if (this.reentrancy?.scope === "global" && this.reentrancy.action === "skip" && this.globalReentrancyMutex?.isLocked()) {
168
+ if (this.reentrancy?.scope === "global" && this.reentrancy.action === "skip" && this.globalReentrancyMutex?.isLocked() === true) {
169
169
  return [];
170
170
  }
171
171
  try {
@@ -189,7 +189,7 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
189
189
  this.isSupportedQuery(ArchivistInsertQuerySchema, "insert");
190
190
  const snapshot = this.snapshotPayloads(payloads);
191
191
  return await this.spanAsync(`${this.id}|insert`, async () => {
192
- if (this.reentrancy?.scope === "global" && this.reentrancy.action === "skip" && this.globalReentrancyMutex?.isLocked()) {
192
+ if (this.reentrancy?.scope === "global" && this.reentrancy.action === "skip" && this.globalReentrancyMutex?.isLocked() === true) {
193
193
  return [];
194
194
  }
195
195
  try {
@@ -212,7 +212,7 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
212
212
  this._noOverride("next");
213
213
  this.isSupportedQuery(ArchivistNextQuerySchema, "next");
214
214
  return await this.spanAsync(`${this.id}|next`, async () => {
215
- if (this.reentrancy?.scope === "global" && this.reentrancy.action === "skip" && this.globalReentrancyMutex?.isLocked()) {
215
+ if (this.reentrancy?.scope === "global" && this.reentrancy.action === "skip" && this.globalReentrancyMutex?.isLocked() === true) {
216
216
  return [];
217
217
  }
218
218
  try {
@@ -236,7 +236,7 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
236
236
  this._noOverride("snapshot");
237
237
  this.isSupportedQuery(ArchivistSnapshotQuerySchema, "snapshot");
238
238
  return await this.spanAsync(`${this.id}|snapshot`, async () => {
239
- if (this.reentrancy?.scope === "global" && this.reentrancy.action === "skip" && this.globalReentrancyMutex?.isLocked()) {
239
+ if (this.reentrancy?.scope === "global" && this.reentrancy.action === "skip" && this.globalReentrancyMutex?.isLocked() === true) {
240
240
  throw new Error("Cannot take snapshot while in a global reentrancy lock");
241
241
  }
242
242
  try {
@@ -310,7 +310,8 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
310
310
  return [foundPayloads, hashes.filter((hash) => !foundHashes.has(hash))];
311
311
  }
312
312
  async getFromParents(hashes) {
313
- const parents = Object.values((await this.parentArchivists())?.read ?? {});
313
+ const parentArchivists = await this.parentArchivists();
314
+ const parents = Object.values(parentArchivists?.read ?? {});
314
315
  let remainingHashes = [...hashes];
315
316
  let parentIndex = 0;
316
317
  let result = [];
@@ -405,7 +406,7 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
405
406
  return PayloadBuilder.omitPrivateStorageMeta(foundPayloads);
406
407
  }
407
408
  async parentArchivists() {
408
- this._parentArchivists = this._parentArchivists ?? {
409
+ this._parentArchivists ??= {
409
410
  commit: { ...await this.resolveArchivists(this.config?.parents?.commit, this.params.parents?.commit) },
410
411
  read: { ...await this.resolveArchivists(this.config?.parents?.read) },
411
412
  write: { ...await this.resolveArchivists(this.config?.parents?.write) }
@@ -463,13 +464,13 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
463
464
  }
464
465
  default: {
465
466
  const result = await super.queryHandler(sanitizedQuery, sanitizedPayloads);
466
- if (this.config.storeQueries) {
467
+ if (this.config.storeQueries === true) {
467
468
  await this.insertWithConfig([sanitizedQuery]);
468
469
  }
469
470
  return PayloadBuilder.omitPrivateStorageMeta(result);
470
471
  }
471
472
  }
472
- if (this.config.storeQueries) {
473
+ if (this.config.storeQueries === true) {
473
474
  await this.insertWithConfig([sanitizedQuery]);
474
475
  }
475
476
  return PayloadBuilder.omitPrivateStorageMeta(resultPayloads);
@@ -528,11 +529,12 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
528
529
  }
529
530
  async writeToParents(payloads) {
530
531
  const parents = await this.parentArchivists();
531
- return (await Promise.all(
532
+ const results = await Promise.all(
532
533
  Object.values(parents.write ?? {}).map(async (parent) => {
533
534
  return parent ? await this.writeToParent(parent, payloads) : void 0;
534
535
  })
535
- )).filter(exists).flat();
536
+ );
537
+ return results.filter(exists).flat();
536
538
  }
537
539
  async exactRepresentations(payloads, hashes) {
538
540
  const requested = new Set(hashes);
@@ -552,30 +554,33 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
552
554
  if (requested.has(payload._hash) && !result.has(payload._hash)) result.set(payload._hash, payload);
553
555
  }
554
556
  for (const payload of sorted) {
555
- if (requested.has(payload._dataHash) && !result.has(payload._dataHash)) {
556
- const dataOnly = PayloadBuilder.omitClientMeta(payload);
557
- result.set(payload._dataHash, { ...dataOnly, _hash: payload._dataHash });
557
+ if (!requested.has(payload._dataHash) || result.has(payload._dataHash)) {
558
+ continue;
558
559
  }
560
+ const dataOnly = PayloadBuilder.omitClientMeta(payload);
561
+ result.set(payload._dataHash, { ...dataOnly, _hash: payload._dataHash });
559
562
  }
560
563
  return result.values().toArray();
561
564
  }
562
565
  async resolveArchivists(archivists = [], archivistInstances) {
563
- const archivistModules = (await Promise.all(archivists.map((archivist) => this.resolve(archivist)))).filter(exists).filter(duplicateModules);
566
+ const resolvedArchivists = await Promise.all(archivists.map((archivist) => this.resolve(archivist)));
567
+ const archivistModules = resolvedArchivists.filter(exists).filter(duplicateModules);
564
568
  assertEx(
565
569
  !this.requireAllParents || archivistModules.length === archivists.length,
566
570
  () => `Failed to find some archivists for ${this.modName} (set allRequired to false if ok)]`
567
571
  );
568
572
  const archivistInstancesMap = {};
569
- for (const archivistInstance of archivistInstances ?? []) {
573
+ const resolvedInstances = archivistInstances ?? [];
574
+ for (const archivistInstance of resolvedInstances) {
570
575
  archivistInstancesMap[archivistInstance.address] = archivistInstance;
571
576
  }
572
- return archivistModules.reduce((prev, mod) => {
573
- prev[mod.address] = asArchivistInstance(mod, () => {
577
+ for (const mod of archivistModules) {
578
+ archivistInstancesMap[mod.address] = asArchivistInstance(mod, () => {
574
579
  isArchivistInstance(mod, { log: console });
575
580
  return `Unable to cast resolved module to an archivist: [${mod.address}, ${mod.modName}, ${mod.config.schema})}]`;
576
581
  }, { required: true });
577
- return prev;
578
- }, archivistInstancesMap);
582
+ }
583
+ return archivistInstancesMap;
579
584
  }
580
585
  snapshotPayloads(payloads) {
581
586
  return JSON.parse(JSON.stringify(PayloadBuilder.omitStorageMeta(payloads)));
@@ -610,7 +615,7 @@ function validByteLimit(value) {
610
615
  return Number.isSafeInteger(value) && value > 0;
611
616
  }
612
617
  function validatePayloadAdmissionPolicy(policy) {
613
- if (!policy || !Array.isArray(policy.allowedSchemas) || policy.allowedSchemas.some((schema) => typeof schema !== "string" || schema.length === 0 || schema.trim() !== schema) || !validByteLimit(policy.maxPayloadBytes)) {
618
+ if (!Array.isArray(policy?.allowedSchemas) || policy.allowedSchemas.some((schema) => typeof schema !== "string" || schema.length === 0 || schema.trim() !== schema) || !validByteLimit(policy.maxPayloadBytes)) {
614
619
  throw new TypeError("Invalid payload admission policy");
615
620
  }
616
621
  if (policy.schemaMaxPayloadBytes !== void 0) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/modules/archivist-abstract/AbstractArchivist.ts", "../../src/modules/archivist-abstract/StorageClassLabel.ts", "../../src/modules/archivist-abstract/payloadAdmission.ts"],
4
- "sourcesContent": ["/* eslint-disable max-lines */\nimport type {\n Hash, Promisable, PromisableArray,\n} from '@ariestools/sdk'\nimport {\n assertEx,\n exists,\n isNull, isUndefined,\n} from '@ariestools/sdk'\nimport type {\n Attributes, Gauge, Meter,\n} from '@opentelemetry/api'\nimport type {\n AccountInstance, BoundWitness, Payload, QueryBoundWitness,\n Schema, WithStorageMeta, XyoAddress,\n} from '@xyo-network/sdk-protocol'\nimport { PayloadBuilder, QueryBoundWitnessWrapper } from '@xyo-network/sdk-protocol'\nimport { LRUCache } from 'lru-cache'\n\nimport type {\n ArchivistAllQuery,\n ArchivistClearQuery,\n ArchivistCommitQuery,\n ArchivistDeleteQuery,\n ArchivistGetQuery,\n ArchivistInsertQuery,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuery,\n ArchivistParams,\n ArchivistQueries,\n ArchivistSnapshotPayload,\n ArchivistSnapshotQuery,\n ArchivistStatsPayload,\n AttachableArchivistInstance,\n ReadArchivist,\n} from '#archivist-model'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistGetQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistNextQuerySchema,\n ArchivistSnapshotQuerySchema,\n ArchivistStatsPayloadSchema,\n asArchivistInstance,\n isArchivistInstance,\n} from '#archivist-model'\nimport { AbstractModuleInstance } from '#module-abstract'\nimport type {\n ModuleConfig, ModuleIdentifier, ModuleQueryHandlerResult, ModuleQueryResult,\n} from '#module-model'\nimport { duplicateModules } from '#module-model'\n\nimport { StorageClassLabel } from './StorageClassLabel.ts'\n\nconst NOT_IMPLEMENTED = 'Not implemented' as const\n\nexport interface ActionConfig {\n emitEvents?: boolean\n}\n\nexport interface InsertConfig extends ActionConfig {\n writeToParents?: boolean\n}\n\ninterface ArchivistParentInstanceMap {\n commit?: Partial<Record<ModuleIdentifier, ArchivistInstance>>\n read?: Partial<Record<ModuleIdentifier, ArchivistInstance>>\n write?: Partial<Record<ModuleIdentifier, ArchivistInstance>>\n}\n\nexport abstract class AbstractArchivist<\n TParams extends ArchivistParams = ArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n>\n extends AbstractModuleInstance<TParams, TEventData>\n implements AttachableArchivistInstance<TParams, TEventData, Payload> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = ArchivistConfigSchema\n static override readonly labels: {\n 'network.xyo.storage.class': string\n } = { ...super.labels, [StorageClassLabel]: 'unknown' }\n\n // override this if a specialized archivist should have a different default next limit\n protected static defaultNextLimitSetting = 100\n\n private _getCache?: LRUCache<Hash, WithStorageMeta<Payload>>\n private _parentArchivists?: ArchivistParentInstanceMap\n private _payloadCountGauge?: Gauge | null\n private _payloadCountMeter?: Meter | null\n\n private activeCacheMutations = 0\n private cacheGeneration = 0\n\n // do not override this! It is meant to get the this.defaultNextLimitSetting and work if it is overridden\n static get defaultNextLimit(): number {\n return this.defaultNextLimitSetting\n }\n\n override get queries(): Schema[] {\n return [ArchivistGetQuerySchema, ...super.queries]\n }\n\n get requireAllParents(): boolean {\n return this.config.requireAllParents ?? false\n }\n\n protected get payloadCountGauge(): Gauge<Attributes> | null | undefined {\n const meter = this.payloadCountMeter\n if (!isNull(meter)) {\n this._payloadCountGauge = meter?.createGauge('payloadCount', { description: 'Payloads in the archivist' })\n }\n return this._payloadCountGauge\n }\n\n protected get payloadCountMeter(): Meter | null {\n if (isUndefined(this._payloadCountMeter)) {\n this._payloadCountMeter = this.params?.meterProvider?.getMeter(this.id) ?? null\n }\n return this._payloadCountMeter ?? null\n }\n\n protected get storeParentReads(): boolean {\n return !!this.config?.storeParentReads\n }\n\n /** @deprecated use next or snapshot instead */\n async all(): Promise<WithStorageMeta<Payload>[]> {\n this._noOverride('all')\n this.isSupportedQuery(ArchivistAllQuerySchema, 'all')\n return await this.spanAsync(`${this.id}|all`, async () => {\n if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked()) {\n return []\n }\n try {\n await this.globalReentrancyMutex?.acquire()\n return await this.busy(async () => {\n await this.startedAsync('throw')\n return PayloadBuilder.omitPrivateStorageMeta(await this.allHandler()) as WithStorageMeta<Payload>[]\n })\n } finally {\n this.globalReentrancyMutex?.release()\n }\n }, { timeBudgetLimit: this.timeBudget })\n }\n\n /** deprecated use nextQuery or snapshotQuery instead */\n async allQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n this._noOverride('allQuery')\n const queryPayload: ArchivistAllQuery = { schema: ArchivistAllQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async clear(): Promise<void> {\n this._noOverride('clear')\n this.isSupportedQuery(ArchivistClearQuerySchema, 'clear')\n return await this.spanAsync(`${this.id}|clear`, async () => {\n if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked()) {\n return\n }\n try {\n await this.globalReentrancyMutex?.acquire()\n return await this.busy(async () => {\n await this.startedAsync('throw')\n await this.clearWithConfig()\n })\n } finally {\n this.globalReentrancyMutex?.release()\n }\n }, { timeBudgetLimit: this.timeBudget })\n }\n\n async clearQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n this._noOverride('clearQuery')\n const queryPayload: ArchivistClearQuery = { schema: ArchivistClearQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async commit(): Promise<BoundWitness[]> {\n this._noOverride('commit')\n this.isSupportedQuery(ArchivistCommitQuerySchema, 'commit')\n return await this.spanAsync(`${this.id}commit`, async () => {\n if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked()) {\n return []\n }\n try {\n await this.globalReentrancyMutex?.acquire()\n return await this.busy(async () => {\n await this.startedAsync('throw')\n return await this.commitHandler()\n })\n } finally {\n this.globalReentrancyMutex?.release()\n }\n }, { timeBudgetLimit: this.timeBudget })\n }\n\n async commitQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n this._noOverride('commitQuery')\n const queryPayload: ArchivistCommitQuery = { schema: ArchivistCommitQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async delete(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n this._noOverride('delete')\n this.isSupportedQuery(ArchivistDeleteQuerySchema, 'delete')\n return await this.spanAsync(`${this.id}|delete`, async () => {\n if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked()) {\n return []\n }\n try {\n await this.globalReentrancyMutex?.acquire()\n return await this.busy(async () => {\n await this.startedAsync('throw')\n return await this.deleteWithConfig(hashes)\n })\n } finally {\n this.globalReentrancyMutex?.release()\n }\n }, { timeBudgetLimit: this.timeBudget })\n }\n\n async deleteQuery(hashes: Hash[], account?: AccountInstance): Promise<ModuleQueryResult> {\n this._noOverride('deleteQuery')\n const queryPayload: ArchivistDeleteQuery = { hashes, schema: ArchivistDeleteQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async get(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n this._noOverride('get')\n this.isSupportedQuery(ArchivistGetQuerySchema, 'get')\n return await this.spanAsync(`${this.id}|get`, async () => {\n if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked()) {\n return []\n }\n try {\n await this.globalReentrancyMutex?.acquire()\n return await this.busy(async () => {\n await this.startedAsync('throw')\n return await this.getWithConfig(hashes)\n })\n } finally {\n this.globalReentrancyMutex?.release()\n }\n }, { timeBudgetLimit: this.timeBudget })\n }\n\n async getQuery(hashes: Hash[], account?: AccountInstance): Promise<ModuleQueryResult> {\n this._noOverride('getQuery')\n const queryPayload: ArchivistGetQuery = { hashes, schema: ArchivistGetQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async insert(payloads: Payload[]): Promise<WithStorageMeta<Payload>[]> {\n this._noOverride('insert')\n this.isSupportedQuery(ArchivistInsertQuerySchema, 'insert')\n const snapshot = this.snapshotPayloads(payloads)\n return await this.spanAsync(`${this.id}|insert`, async () => {\n if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked()) {\n return []\n }\n try {\n await this.globalReentrancyMutex?.acquire()\n return await this.busy(async () => {\n await this.startedAsync('throw')\n return await this.insertWithConfig(snapshot)\n })\n } finally {\n this.globalReentrancyMutex?.release()\n }\n }, { timeBudgetLimit: this.timeBudget })\n }\n\n async insertQuery(payloads: Payload[], account?: AccountInstance): Promise<ModuleQueryResult> {\n this._noOverride('insertQuery')\n const queryPayload: ArchivistInsertQuery = { schema: ArchivistInsertQuerySchema }\n return await this.sendQueryRaw(queryPayload, this.snapshotPayloads(payloads), account)\n }\n\n async next(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {\n this._noOverride('next')\n this.isSupportedQuery(ArchivistNextQuerySchema, 'next')\n return await this.spanAsync(`${this.id}|next`, async () => {\n if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked()) {\n return []\n }\n try {\n await this.globalReentrancyMutex?.acquire()\n return await this.busy(async () => {\n await this.startedAsync('throw')\n const { limit = AbstractArchivist.defaultNextLimit, ...otherOptions } = options ?? {}\n return await this.nextWithConfig({ limit, ...otherOptions })\n })\n } finally {\n this.globalReentrancyMutex?.release()\n }\n }, { timeBudgetLimit: this.timeBudget })\n }\n\n async nextQuery(options?: ArchivistNextOptions, account?: AccountInstance): Promise<ModuleQueryResult> {\n this._noOverride('nextQuery')\n const queryPayload: ArchivistNextQuery = { schema: ArchivistNextQuerySchema, ...options }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async snapshot(): Promise<ArchivistSnapshotPayload<WithStorageMeta<Payload>, Hash>[]> {\n this._noOverride('snapshot')\n this.isSupportedQuery(ArchivistSnapshotQuerySchema, 'snapshot')\n return await this.spanAsync(`${this.id}|snapshot`, async () => {\n if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked()) {\n throw new Error('Cannot take snapshot while in a global reentrancy lock')\n }\n try {\n await this.globalReentrancyMutex?.acquire()\n return await this.busy(async () => {\n await this.startedAsync('throw')\n return await this.snapshotHandler()\n })\n } finally {\n this.globalReentrancyMutex?.release()\n }\n }, { timeBudgetLimit: this.timeBudget })\n }\n\n async snapshotQuery(account?: AccountInstance): Promise<ModuleQueryResult> {\n this._noOverride('snapshotQuery')\n const queryPayload: ArchivistSnapshotQuery = { schema: ArchivistSnapshotQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n protected allHandler(): PromisableArray<WithStorageMeta<Payload>> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected clearHandler(): Promisable<void> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async clearWithConfig(config?: ActionConfig): Promise<void> {\n await this.withCacheMutation(async () => {\n await this.withStorageMutation(async () => await this.clearHandler())\n this.reportPayloadCount()\n if (config?.emitEvents ?? true) await this.emit('cleared', { mod: this })\n })\n }\n\n protected commitHandler(): Promisable<BoundWitness[]> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected deleteHandler(_hashes: Hash[]): PromisableArray<WithStorageMeta<Payload>> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async deleteWithConfig(hashes: Hash[], config?: ActionConfig): Promise<WithStorageMeta<Payload>[]> {\n return await this.withCacheMutation(async () => {\n const emitEvents = config?.emitEvents ?? true\n\n const payloads = await this.withStorageMutation(async () => await this.deleteHandler(hashes))\n const hashesDeleted = payloads.map(p => p._hash)\n\n if (emitEvents) {\n await this.emit('deleted', {\n hashes: hashesDeleted, payloads, mod: this,\n })\n }\n this.reportPayloadCount()\n return payloads\n })\n }\n\n protected generateStats(): Promisable<ArchivistStatsPayload> {\n return {\n payloadCount: this.payloadCountHandler(),\n schema: ArchivistStatsPayloadSchema,\n }\n }\n\n /**\n * Inspect local stored roots without consulting public projections, caches or\n * parents. Backends whose getHandler synthesizes views must override this hook\n * to read their primary record keys directly.\n */\n protected async getExistingLocalPayloads(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n return await this.exactRepresentations(await this.getHandler(hashes), hashes)\n }\n\n protected async getFromParent(hashes: Hash[], archivist: ReadArchivist): Promise<[WithStorageMeta<Payload>[], Hash[]]> {\n const foundPayloads = await this.requestedRepresentations(await archivist.get(hashes), hashes)\n const foundHashes = new Set(foundPayloads.map(payload => payload._hash))\n return [foundPayloads, hashes.filter(hash => !foundHashes.has(hash))]\n }\n\n protected async getFromParents(hashes: Hash[]): Promise<[WithStorageMeta<Payload>[], Hash[]]> {\n const parents = Object.values((await this.parentArchivists())?.read ?? {})\n let remainingHashes = [...hashes]\n let parentIndex = 0\n let result: WithStorageMeta<Payload>[] = []\n\n // Intentionally doing this serially\n while (parentIndex < parents.length && remainingHashes.length > 0) {\n const parent = parents[parentIndex]\n if (parent) {\n const [found, notfound] = await this.getFromParent(remainingHashes, parent)\n result = [...result, ...found]\n remainingHashes = notfound\n }\n parentIndex++\n }\n return [result, remainingHashes]\n }\n\n protected getHandler(_hashes: Hash[]): Promisable<WithStorageMeta<Payload>[]> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async getWithConfig(hashes: Hash[], _config?: InsertConfig): Promise<WithStorageMeta<Payload>[]> {\n const requestedHashes = [...new Set(hashes)]\n const generation = this.cacheGeneration\n const cache = this.activeCacheMutations === 0 ? this._getCache : undefined\n const fromCache = await this.requestedRepresentations(requestedHashes.map(hash => cache?.get(hash)).filter(exists), requestedHashes)\n const cachedHashes = new Set(fromCache.map(payload => payload._hash))\n const remainingHashes = requestedHashes.filter(hash => !cachedHashes.has(hash))\n const fromGet = await this.requestedRepresentations(await this.getHandler(remainingHashes), remainingHashes)\n const foundHashes = new Set([...fromCache, ...fromGet].map(payload => payload._hash))\n const [parentFoundPayloads] = await this.getFromParents(requestedHashes.filter(hash => !foundHashes.has(hash)))\n\n if (this.storeParentReads && parentFoundPayloads.length > 0) {\n await this.insertWithConfig(parentFoundPayloads)\n }\n // Cache only verified, requested representations. A data-only view must not\n // replace the root representation under its different full hash.\n if (this.activeCacheMutations === 0 && generation === this.cacheGeneration) {\n for (const payload of [...fromGet, ...parentFoundPayloads]) cache?.set(payload._hash, payload)\n }\n return PayloadBuilder.omitPrivateStorageMeta(\n [...fromCache, ...fromGet, ...parentFoundPayloads].toSorted(PayloadBuilder.compareStorageMeta),\n ) as WithStorageMeta<Payload>[]\n }\n\n protected insertHandler(_payloads: WithStorageMeta<Payload>[]): Promisable<WithStorageMeta<Payload>[]> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async insertQueryHandler<T extends QueryBoundWitnessWrapper = QueryBoundWitnessWrapper>(query: T, payloads?: Payload[]): Promise<WithStorageMeta<Payload>[]> {\n assertEx(payloads, () => `Missing payloads: ${JSON.stringify(query.payload, null, 2)}`)\n const resolvedPayloads = await PayloadBuilder.filterIncludeByEitherHash(payloads, query.payloadHashes)\n assertEx(\n resolvedPayloads.length === query.payloadHashes.length,\n () => `Could not find some passed hashes [${resolvedPayloads.length} != ${query.payloadHashes.length}]`,\n )\n const queryPayload = await query.getQuery()\n const payloadsWithoutQuery = await PayloadBuilder.filterExclude(resolvedPayloads, await PayloadBuilder.dataHash(queryPayload))\n const result = await this.insertWithConfig(payloadsWithoutQuery)\n return result\n }\n\n protected async insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<WithStorageMeta<Payload>[]> {\n const sanitizedPayloads = this.snapshotPayloads(payloads)\n return await this.withCacheMutation(async () => {\n const emitEvents = config?.emitEvents ?? true\n const writeToParents = config?.writeToParents ?? true\n\n await this.validateInsertPayloads(sanitizedPayloads)\n const withStorageMeta = await PayloadBuilder.addStorageMeta(sanitizedPayloads)\n const hashes = [...new Set(withStorageMeta.map(payload => payload._hash))]\n const { existingPayloads, insertedPayloads } = await this.withStorageMutation(async () => {\n const existingPayloads = await this.getExistingLocalPayloads(hashes)\n await this.repairExistingPayloads(existingPayloads)\n const existingHashes = new Set(existingPayloads.map(payload => payload._hash))\n const payloadsToInsert = withStorageMeta.filter((payload) => {\n if (existingHashes.has(payload._hash)) return false\n existingHashes.add(payload._hash)\n return true\n })\n return { existingPayloads, insertedPayloads: await this.insertHandler(payloadsToInsert) }\n })\n\n if (writeToParents) {\n // A previous attempt may have stored locally before a parent failed.\n // Retry the current request's existing roots as well as its new roots.\n await this.writeToParents([...existingPayloads, ...insertedPayloads])\n }\n if (emitEvents) {\n await this.emit('inserted', {\n mod: this, payloads: insertedPayloads, outPayloads: insertedPayloads, inPayloads: payloads,\n })\n }\n this.reportPayloadCount()\n return PayloadBuilder.omitPrivateStorageMeta(insertedPayloads) as WithStorageMeta<Payload>[]\n })\n }\n\n protected nextHandler(_options?: ArchivistNextOptions): Promisable<WithStorageMeta<Payload>[]> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async nextWithConfig(options?: ArchivistNextOptions, _config?: InsertConfig): Promise<WithStorageMeta<Payload>[]> {\n const foundPayloads = await this.nextHandler(options)\n return PayloadBuilder.omitPrivateStorageMeta(foundPayloads) as WithStorageMeta<Payload>[]\n }\n\n protected async parentArchivists(): Promise<ArchivistParentInstanceMap> {\n this._parentArchivists = this._parentArchivists ?? {\n commit: { ...await this.resolveArchivists(this.config?.parents?.commit, this.params.parents?.commit) },\n read: { ...await this.resolveArchivists(this.config?.parents?.read) },\n write: { ...await this.resolveArchivists(this.config?.parents?.write) },\n }\n return assertEx(this._parentArchivists)\n }\n\n // the number of payloads in the archivist, -1 if not implemented\n // the implementations of these must be fast, so they may not be promises and should read an auto updated value\n protected payloadCountHandler() {\n return -1\n }\n\n // eslint-disable-next-line max-statements\n protected override async queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(\n query: T,\n payloads: Payload[],\n queryConfig?: TConfig,\n ): Promise<ModuleQueryHandlerResult> {\n const sanitizedQuery = PayloadBuilder.omitStorageMeta(query) as T\n const sanitizedPayloads = this.snapshotPayloads(payloads)\n const wrappedQuery = QueryBoundWitnessWrapper.parseQuery<ArchivistQueries>(sanitizedQuery, sanitizedPayloads)\n const queryPayload = await wrappedQuery.getQuery()\n assertEx(await this.queryable(sanitizedQuery, sanitizedPayloads, queryConfig))\n const resultPayloads: Payload[] = []\n\n switch (queryPayload.schema) {\n case ArchivistAllQuerySchema: {\n resultPayloads.push(...(await this.allHandler()))\n break\n }\n case ArchivistClearQuerySchema: {\n await this.clearWithConfig()\n break\n }\n case ArchivistCommitQuerySchema: {\n resultPayloads.push(...(await this.commitHandler()))\n break\n }\n case ArchivistDeleteQuerySchema: {\n const typedQueryPayload = queryPayload as ArchivistDeleteQuery\n resultPayloads.push(...(await this.deleteWithConfig(typedQueryPayload.hashes)))\n break\n }\n case ArchivistGetQuerySchema: {\n const typedQueryPayload = queryPayload as ArchivistGetQuery\n resultPayloads.push(...(await this.getWithConfig(typedQueryPayload.hashes ?? [])))\n break\n }\n case ArchivistInsertQuerySchema: {\n resultPayloads.push(...(await this.insertQueryHandler(wrappedQuery, sanitizedPayloads)))\n break\n }\n case ArchivistNextQuerySchema: {\n const typedQueryPayload = queryPayload as ArchivistNextQuery\n resultPayloads.push(...(await this.nextHandler(typedQueryPayload)))\n break\n }\n case ArchivistSnapshotQuerySchema: {\n resultPayloads.push(...(await this.snapshotHandler()))\n break\n }\n default: {\n const result = await super.queryHandler(sanitizedQuery, sanitizedPayloads)\n if (this.config.storeQueries) {\n await this.insertWithConfig([sanitizedQuery])\n }\n return PayloadBuilder.omitPrivateStorageMeta(result)\n }\n }\n if (this.config.storeQueries) {\n await this.insertWithConfig([sanitizedQuery])\n }\n return PayloadBuilder.omitPrivateStorageMeta(resultPayloads)\n }\n\n /** Restore derived indexes for a stored root without rewriting its body. */\n protected repairExistingPayloads(_payloads: WithStorageMeta<Payload>[]): Promisable<void> {\n return undefined\n }\n\n protected reportPayloadCount(): void {\n this._noOverride('reportPayloadCount')\n const gauge = this.payloadCountGauge\n if (gauge) {\n gauge.record(this.payloadCountHandler())\n }\n }\n\n protected snapshotHandler(): PromisableArray<ArchivistSnapshotPayload<WithStorageMeta<Payload>, Hash>> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected override async startHandler(): Promise<void> {\n if (this.config.getCache?.enabled === true) {\n this._getCache = new LRUCache({\n max: this.config.getCache?.maxEntries ?? 10_000,\n allowStale: true,\n noDisposeOnSet: false,\n updateAgeOnGet: true,\n })\n }\n const result = await super.startHandler()\n this.reportPayloadCount()\n return result\n }\n\n protected override async stateHandler(): Promise<Payload[]> {\n return [...await super.stateHandler(), await this.generateStats()]\n }\n\n /** Enforce backend admission before lookup, repair, insertion or parent writes. */\n protected validateInsertPayloads(_payloads: Payload[]): Promisable<void> {\n return undefined\n }\n\n /** Serialize local storage changes without holding a lock across callbacks or parents. */\n protected async withStorageMutation<T>(operation: () => Promise<T>): Promise<T> {\n return await operation()\n }\n\n protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<Payload[]> {\n if (payloads.length === 0) return []\n const sanitized = PayloadBuilder.omitStorageMeta(payloads)\n const hashes = [...new Set(await Promise.all(sanitized.map(payload => PayloadBuilder.hash(payload))))]\n const inserted = await this.exactRepresentations(await parent.insert(sanitized), hashes)\n const insertedHashes = new Set(inserted.map(payload => payload._hash))\n const missing = hashes.filter(hash => !insertedHashes.has(hash))\n const existing = missing.length > 0 ? await this.exactRepresentations(await parent.get(missing), missing) : []\n const acknowledged = new Set([...inserted, ...existing].map(payload => payload._hash))\n if (hashes.some(hash => !acknowledged.has(hash))) {\n throw new Error('Write parent did not acknowledge all requested payloads')\n }\n return [...inserted, ...existing]\n }\n\n protected async writeToParents(payloads: Payload[]): Promise<Payload[]> {\n const parents = await this.parentArchivists()\n return (\n await Promise.all(\n Object.values(parents.write ?? {}).map(async (parent) => {\n return parent ? await this.writeToParent(parent, payloads) : undefined\n }),\n )\n ).filter(exists).flat()\n }\n\n private async exactRepresentations(payloads: WithStorageMeta<Payload>[], hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n const requested = new Set(hashes)\n const found = new Map<Hash, WithStorageMeta<Payload>>()\n for (const payload of payloads) {\n await this.verifyPayloadIdentity(payload)\n if (requested.has(payload._hash)) found.set(payload._hash, payload)\n }\n return found.values().toArray()\n }\n\n private async requestedRepresentations(payloads: WithStorageMeta<Payload>[], hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n const requested = new Set(hashes)\n const result = new Map<Hash, WithStorageMeta<Payload>>()\n const sorted = payloads.toSorted(PayloadBuilder.compareStorageMeta)\n // Prefer actual stored roots (including their original sequence) before\n // constructing data-only views from a different client-metadata variant.\n for (const payload of sorted) {\n await this.verifyPayloadIdentity(payload)\n if (requested.has(payload._hash) && !result.has(payload._hash)) result.set(payload._hash, payload)\n }\n for (const payload of sorted) {\n if (requested.has(payload._dataHash) && !result.has(payload._dataHash)) {\n const dataOnly = PayloadBuilder.omitClientMeta(payload) as WithStorageMeta<Payload>\n result.set(payload._dataHash, { ...dataOnly, _hash: payload._dataHash })\n }\n }\n return result.values().toArray()\n }\n\n private async resolveArchivists(archivists: ModuleIdentifier[] = [], archivistInstances?: ArchivistInstance[]) {\n const archivistModules = (await Promise.all(archivists.map(archivist => this.resolve(archivist)))).filter(exists).filter(duplicateModules)\n\n assertEx(\n !this.requireAllParents || (archivistModules.length === archivists.length),\n () =>\n `Failed to find some archivists for ${this.modName} (set allRequired to false if ok)]`,\n )\n\n const archivistInstancesMap: Record<XyoAddress, ArchivistInstance> = {}\n for (const archivistInstance of archivistInstances ?? []) {\n archivistInstancesMap[archivistInstance.address] = archivistInstance\n }\n\n return archivistModules.reduce<Record<XyoAddress, ArchivistInstance>>((prev, mod) => {\n prev[mod.address] = asArchivistInstance(mod, () => {\n isArchivistInstance(mod, { log: console })\n return `Unable to cast resolved module to an archivist: [${mod.address}, ${mod.modName}, ${mod.config.schema})}]`\n }, { required: true })\n\n return prev\n }, archivistInstancesMap)\n }\n\n private snapshotPayloads(payloads: Payload[]): Payload[] {\n // Payloads are JSON values. Capture their bytes before asynchronous work so\n // admission, identity computation and the backend see the same input.\n // JSON normalization is intentional; structuredClone preserves non-JSON values.\n // eslint-disable-next-line unicorn/prefer-structured-clone\n return JSON.parse(JSON.stringify(PayloadBuilder.omitStorageMeta(payloads))) as Payload[]\n }\n\n private async verifyPayloadIdentity(payload: WithStorageMeta<Payload>): Promise<void> {\n const canonicalPayload = PayloadBuilder.omitStorageMeta(payload)\n const [hash, dataHash] = await Promise.all([\n PayloadBuilder.hash(canonicalPayload), PayloadBuilder.dataHash(canonicalPayload),\n ])\n if (hash !== payload._hash || dataHash !== payload._dataHash) {\n throw new Error('Archivist returned payload with invalid hash metadata')\n }\n }\n\n private async withCacheMutation<T>(operation: () => Promise<T>): Promise<T> {\n this.activeCacheMutations++\n this.cacheGeneration++\n this._getCache?.clear()\n try {\n return await operation()\n } finally {\n // Even a failed mutation can have changed persistent state. In-flight reads\n // may finish, but their old generation must never repopulate the cache.\n this.activeCacheMutations--\n this.cacheGeneration++\n this._getCache?.clear()\n }\n }\n}\n", "export const StorageClassLabel = 'network.xyo.storage.class'\nexport type StorageClassLabelValue = 'memory' | 'disk' | 'network' | 'proxy' | 'unknown'\n", "import type { Payload } from '@xyo-network/sdk-protocol'\nimport { PayloadBuilder } from '@xyo-network/sdk-protocol'\n\n/** Exact schema admission and limits on UTF-8 JSON bytes before compression. */\nexport interface PayloadAdmissionPolicy {\n /** An empty allowlist admits nothing. */\n allowedSchemas: string[]\n maxPayloadBytes: number\n /** Per-schema limits can only tighten the global limit. */\n schemaMaxPayloadBytes?: Record<string, number>\n}\n\nfunction validByteLimit(value: number): boolean {\n return Number.isSafeInteger(value) && value > 0\n}\n\nexport function validatePayloadAdmissionPolicy(policy: PayloadAdmissionPolicy): void {\n if (!policy || !Array.isArray(policy.allowedSchemas)\n || policy.allowedSchemas.some(schema => typeof schema !== 'string' || schema.length === 0 || schema.trim() !== schema)\n || !validByteLimit(policy.maxPayloadBytes)) {\n throw new TypeError('Invalid payload admission policy')\n }\n if (policy.schemaMaxPayloadBytes !== undefined) {\n if (policy.schemaMaxPayloadBytes === null || typeof policy.schemaMaxPayloadBytes !== 'object' || Array.isArray(policy.schemaMaxPayloadBytes)) {\n throw new TypeError('Invalid schema payload byte limits')\n }\n for (const [schema, limit] of Object.entries(policy.schemaMaxPayloadBytes)) {\n if (!policy.allowedSchemas.includes(schema) || !validByteLimit(limit)) {\n throw new TypeError('Invalid schema payload byte limits')\n }\n }\n }\n}\n\n/** Reject the entire batch before any storage action if one payload is ineligible. */\nexport function validatePayloadAdmission(payloads: Payload[], policy: PayloadAdmissionPolicy): void {\n validatePayloadAdmissionPolicy(policy)\n const allowed = new Set(policy.allowedSchemas)\n for (const payload of payloads) {\n if (!allowed.has(payload.schema)) throw new Error('Payload schema is not admitted by this archivist')\n const schemaLimit = policy.schemaMaxPayloadBytes && Object.hasOwn(policy.schemaMaxPayloadBytes, payload.schema)\n ? policy.schemaMaxPayloadBytes[payload.schema]\n : policy.maxPayloadBytes\n const limit = Math.min(policy.maxPayloadBytes, schemaLimit)\n const json = JSON.stringify(PayloadBuilder.omitStorageMeta(payload))\n const textEncoder = new TextEncoder()\n if (textEncoder.encode(json).byteLength > limit) {\n throw new Error('Payload exceeds this archivist byte limit')\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/* eslint-disable max-lines */\nimport type {\n Hash, Promisable, PromisableArray,\n} from '@ariestools/sdk'\nimport {\n assertEx,\n exists,\n isNull, isUndefined,\n} from '@ariestools/sdk'\nimport type {\n Attributes, Gauge, Meter,\n} from '@opentelemetry/api'\nimport type {\n AccountInstance, BoundWitness, Payload, QueryBoundWitness,\n Schema, WithStorageMeta, XyoAddress,\n} from '@xyo-network/sdk-protocol'\nimport { PayloadBuilder, QueryBoundWitnessWrapper } from '@xyo-network/sdk-protocol'\nimport { LRUCache } from 'lru-cache'\n\nimport type {\n ArchivistAllQuery,\n ArchivistClearQuery,\n ArchivistCommitQuery,\n ArchivistDeleteQuery,\n ArchivistGetQuery,\n ArchivistInsertQuery,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuery,\n ArchivistParams,\n ArchivistQueries,\n ArchivistSnapshotPayload,\n ArchivistSnapshotQuery,\n ArchivistStatsPayload,\n AttachableArchivistInstance,\n ReadArchivist,\n} from '#archivist-model'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistGetQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistNextQuerySchema,\n ArchivistSnapshotQuerySchema,\n ArchivistStatsPayloadSchema,\n asArchivistInstance,\n isArchivistInstance,\n} from '#archivist-model'\nimport { AbstractModuleInstance } from '#module-abstract'\nimport type {\n ModuleConfig, ModuleIdentifier, ModuleQueryHandlerResult, ModuleQueryResult,\n} from '#module-model'\nimport { duplicateModules } from '#module-model'\n\nimport { StorageClassLabel } from './StorageClassLabel.ts'\n\nconst NOT_IMPLEMENTED = 'Not implemented' as const\n\nexport interface ActionConfig {\n emitEvents?: boolean\n}\n\nexport interface InsertConfig extends ActionConfig {\n writeToParents?: boolean\n}\n\ninterface ArchivistParentInstanceMap {\n commit?: Partial<Record<ModuleIdentifier, ArchivistInstance>>\n read?: Partial<Record<ModuleIdentifier, ArchivistInstance>>\n write?: Partial<Record<ModuleIdentifier, ArchivistInstance>>\n}\n\nexport abstract class AbstractArchivist<\n TParams extends ArchivistParams = ArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n>\n extends AbstractModuleInstance<TParams, TEventData>\n implements AttachableArchivistInstance<TParams, TEventData, Payload> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = ArchivistConfigSchema\n static override readonly labels: {\n 'network.xyo.storage.class': string\n } = { ...super.labels, [StorageClassLabel]: 'unknown' }\n\n // override this if a specialized archivist should have a different default next limit\n protected static defaultNextLimitSetting = 100\n\n private _getCache?: LRUCache<Hash, WithStorageMeta<Payload>>\n private _parentArchivists?: ArchivistParentInstanceMap\n private _payloadCountGauge?: Gauge | null\n private _payloadCountMeter?: Meter | null\n\n private activeCacheMutations = 0\n private cacheGeneration = 0\n\n // do not override this! It is meant to get the this.defaultNextLimitSetting and work if it is overridden\n static get defaultNextLimit(): number {\n return this.defaultNextLimitSetting\n }\n\n override get queries(): Schema[] {\n return [ArchivistGetQuerySchema, ...super.queries]\n }\n\n get requireAllParents(): boolean {\n return this.config.requireAllParents ?? false\n }\n\n protected get payloadCountGauge(): Gauge<Attributes> | null | undefined {\n const meter = this.payloadCountMeter\n if (!isNull(meter)) {\n this._payloadCountGauge = meter?.createGauge('payloadCount', { description: 'Payloads in the archivist' })\n }\n return this._payloadCountGauge\n }\n\n protected get payloadCountMeter(): Meter | null {\n if (isUndefined(this._payloadCountMeter)) {\n this._payloadCountMeter = this.params?.meterProvider?.getMeter(this.id) ?? null\n }\n return this._payloadCountMeter ?? null\n }\n\n protected get storeParentReads(): boolean {\n return this.config?.storeParentReads === true\n }\n\n /** @deprecated use next or snapshot instead */\n async all(): Promise<WithStorageMeta<Payload>[]> {\n this._noOverride('all')\n this.isSupportedQuery(ArchivistAllQuerySchema, 'all')\n return await this.spanAsync(`${this.id}|all`, async () => {\n if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked() === true) {\n return []\n }\n try {\n await this.globalReentrancyMutex?.acquire()\n return await this.busy(async () => {\n await this.startedAsync('throw')\n return PayloadBuilder.omitPrivateStorageMeta(await this.allHandler()) as WithStorageMeta<Payload>[]\n })\n } finally {\n this.globalReentrancyMutex?.release()\n }\n }, { timeBudgetLimit: this.timeBudget })\n }\n\n /** deprecated use nextQuery or snapshotQuery instead */\n async allQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n this._noOverride('allQuery')\n const queryPayload: ArchivistAllQuery = { schema: ArchivistAllQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async clear(): Promise<void> {\n this._noOverride('clear')\n this.isSupportedQuery(ArchivistClearQuerySchema, 'clear')\n return await this.spanAsync(`${this.id}|clear`, async () => {\n if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked() === true) {\n return\n }\n try {\n await this.globalReentrancyMutex?.acquire()\n return await this.busy(async () => {\n await this.startedAsync('throw')\n await this.clearWithConfig()\n })\n } finally {\n this.globalReentrancyMutex?.release()\n }\n }, { timeBudgetLimit: this.timeBudget })\n }\n\n async clearQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n this._noOverride('clearQuery')\n const queryPayload: ArchivistClearQuery = { schema: ArchivistClearQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async commit(): Promise<BoundWitness[]> {\n this._noOverride('commit')\n this.isSupportedQuery(ArchivistCommitQuerySchema, 'commit')\n return await this.spanAsync(`${this.id}commit`, async () => {\n if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked() === true) {\n return []\n }\n try {\n await this.globalReentrancyMutex?.acquire()\n return await this.busy(async () => {\n await this.startedAsync('throw')\n return await this.commitHandler()\n })\n } finally {\n this.globalReentrancyMutex?.release()\n }\n }, { timeBudgetLimit: this.timeBudget })\n }\n\n async commitQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n this._noOverride('commitQuery')\n const queryPayload: ArchivistCommitQuery = { schema: ArchivistCommitQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async delete(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n this._noOverride('delete')\n this.isSupportedQuery(ArchivistDeleteQuerySchema, 'delete')\n return await this.spanAsync(`${this.id}|delete`, async () => {\n if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked() === true) {\n return []\n }\n try {\n await this.globalReentrancyMutex?.acquire()\n return await this.busy(async () => {\n await this.startedAsync('throw')\n return await this.deleteWithConfig(hashes)\n })\n } finally {\n this.globalReentrancyMutex?.release()\n }\n }, { timeBudgetLimit: this.timeBudget })\n }\n\n async deleteQuery(hashes: Hash[], account?: AccountInstance): Promise<ModuleQueryResult> {\n this._noOverride('deleteQuery')\n const queryPayload: ArchivistDeleteQuery = { hashes, schema: ArchivistDeleteQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async get(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n this._noOverride('get')\n this.isSupportedQuery(ArchivistGetQuerySchema, 'get')\n return await this.spanAsync(`${this.id}|get`, async () => {\n if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked() === true) {\n return []\n }\n try {\n await this.globalReentrancyMutex?.acquire()\n return await this.busy(async () => {\n await this.startedAsync('throw')\n return await this.getWithConfig(hashes)\n })\n } finally {\n this.globalReentrancyMutex?.release()\n }\n }, { timeBudgetLimit: this.timeBudget })\n }\n\n async getQuery(hashes: Hash[], account?: AccountInstance): Promise<ModuleQueryResult> {\n this._noOverride('getQuery')\n const queryPayload: ArchivistGetQuery = { hashes, schema: ArchivistGetQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async insert(payloads: Payload[]): Promise<WithStorageMeta<Payload>[]> {\n this._noOverride('insert')\n this.isSupportedQuery(ArchivistInsertQuerySchema, 'insert')\n const snapshot = this.snapshotPayloads(payloads)\n return await this.spanAsync(`${this.id}|insert`, async () => {\n if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked() === true) {\n return []\n }\n try {\n await this.globalReentrancyMutex?.acquire()\n return await this.busy(async () => {\n await this.startedAsync('throw')\n return await this.insertWithConfig(snapshot)\n })\n } finally {\n this.globalReentrancyMutex?.release()\n }\n }, { timeBudgetLimit: this.timeBudget })\n }\n\n async insertQuery(payloads: Payload[], account?: AccountInstance): Promise<ModuleQueryResult> {\n this._noOverride('insertQuery')\n const queryPayload: ArchivistInsertQuery = { schema: ArchivistInsertQuerySchema }\n return await this.sendQueryRaw(queryPayload, this.snapshotPayloads(payloads), account)\n }\n\n async next(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {\n this._noOverride('next')\n this.isSupportedQuery(ArchivistNextQuerySchema, 'next')\n return await this.spanAsync(`${this.id}|next`, async () => {\n if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked() === true) {\n return []\n }\n try {\n await this.globalReentrancyMutex?.acquire()\n return await this.busy(async () => {\n await this.startedAsync('throw')\n const { limit = AbstractArchivist.defaultNextLimit, ...otherOptions } = options ?? {}\n return await this.nextWithConfig({ limit, ...otherOptions })\n })\n } finally {\n this.globalReentrancyMutex?.release()\n }\n }, { timeBudgetLimit: this.timeBudget })\n }\n\n async nextQuery(options?: ArchivistNextOptions, account?: AccountInstance): Promise<ModuleQueryResult> {\n this._noOverride('nextQuery')\n const queryPayload: ArchivistNextQuery = { schema: ArchivistNextQuerySchema, ...options }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async snapshot(): Promise<ArchivistSnapshotPayload<WithStorageMeta<Payload>, Hash>[]> {\n this._noOverride('snapshot')\n this.isSupportedQuery(ArchivistSnapshotQuerySchema, 'snapshot')\n return await this.spanAsync(`${this.id}|snapshot`, async () => {\n if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked() === true) {\n throw new Error('Cannot take snapshot while in a global reentrancy lock')\n }\n try {\n await this.globalReentrancyMutex?.acquire()\n return await this.busy(async () => {\n await this.startedAsync('throw')\n return await this.snapshotHandler()\n })\n } finally {\n this.globalReentrancyMutex?.release()\n }\n }, { timeBudgetLimit: this.timeBudget })\n }\n\n async snapshotQuery(account?: AccountInstance): Promise<ModuleQueryResult> {\n this._noOverride('snapshotQuery')\n const queryPayload: ArchivistSnapshotQuery = { schema: ArchivistSnapshotQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n protected allHandler(): PromisableArray<WithStorageMeta<Payload>> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected clearHandler(): Promisable<void> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async clearWithConfig(config?: ActionConfig): Promise<void> {\n await this.withCacheMutation(async () => {\n await this.withStorageMutation(async () => await this.clearHandler())\n this.reportPayloadCount()\n if (config?.emitEvents ?? true) await this.emit('cleared', { mod: this })\n })\n }\n\n protected commitHandler(): Promisable<BoundWitness[]> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected deleteHandler(_hashes: Hash[]): PromisableArray<WithStorageMeta<Payload>> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async deleteWithConfig(hashes: Hash[], config?: ActionConfig): Promise<WithStorageMeta<Payload>[]> {\n return await this.withCacheMutation(async () => {\n const emitEvents = config?.emitEvents ?? true\n\n const payloads = await this.withStorageMutation(async () => await this.deleteHandler(hashes))\n const hashesDeleted = payloads.map(p => p._hash)\n\n if (emitEvents) {\n await this.emit('deleted', {\n hashes: hashesDeleted, payloads, mod: this,\n })\n }\n this.reportPayloadCount()\n return payloads\n })\n }\n\n protected generateStats(): Promisable<ArchivistStatsPayload> {\n return {\n payloadCount: this.payloadCountHandler(),\n schema: ArchivistStatsPayloadSchema,\n }\n }\n\n /**\n * Inspect local stored roots without consulting public projections, caches or\n * parents. Backends whose getHandler synthesizes views must override this hook\n * to read their primary record keys directly.\n */\n protected async getExistingLocalPayloads(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n return await this.exactRepresentations(await this.getHandler(hashes), hashes)\n }\n\n protected async getFromParent(hashes: Hash[], archivist: ReadArchivist): Promise<[WithStorageMeta<Payload>[], Hash[]]> {\n const foundPayloads = await this.requestedRepresentations(await archivist.get(hashes), hashes)\n const foundHashes = new Set(foundPayloads.map(payload => payload._hash))\n return [foundPayloads, hashes.filter(hash => !foundHashes.has(hash))]\n }\n\n protected async getFromParents(hashes: Hash[]): Promise<[WithStorageMeta<Payload>[], Hash[]]> {\n const parentArchivists = await this.parentArchivists()\n const parents = Object.values(parentArchivists?.read ?? {})\n let remainingHashes = [...hashes]\n let parentIndex = 0\n let result: WithStorageMeta<Payload>[] = []\n\n // Intentionally doing this serially\n while (parentIndex < parents.length && remainingHashes.length > 0) {\n const parent = parents[parentIndex]\n if (parent) {\n const [found, notfound] = await this.getFromParent(remainingHashes, parent)\n result = [...result, ...found]\n remainingHashes = notfound\n }\n parentIndex++\n }\n return [result, remainingHashes]\n }\n\n protected getHandler(_hashes: Hash[]): Promisable<WithStorageMeta<Payload>[]> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async getWithConfig(hashes: Hash[], _config?: InsertConfig): Promise<WithStorageMeta<Payload>[]> {\n const requestedHashes = [...new Set(hashes)]\n const generation = this.cacheGeneration\n const cache = this.activeCacheMutations === 0 ? this._getCache : undefined\n const fromCache = await this.requestedRepresentations(requestedHashes.map(hash => cache?.get(hash)).filter(exists), requestedHashes)\n const cachedHashes = new Set(fromCache.map(payload => payload._hash))\n const remainingHashes = requestedHashes.filter(hash => !cachedHashes.has(hash))\n const fromGet = await this.requestedRepresentations(await this.getHandler(remainingHashes), remainingHashes)\n const foundHashes = new Set([...fromCache, ...fromGet].map(payload => payload._hash))\n const [parentFoundPayloads] = await this.getFromParents(requestedHashes.filter(hash => !foundHashes.has(hash)))\n\n if (this.storeParentReads && parentFoundPayloads.length > 0) {\n await this.insertWithConfig(parentFoundPayloads)\n }\n // Cache only verified, requested representations. A data-only view must not\n // replace the root representation under its different full hash.\n if (this.activeCacheMutations === 0 && generation === this.cacheGeneration) {\n for (const payload of [...fromGet, ...parentFoundPayloads]) cache?.set(payload._hash, payload)\n }\n return PayloadBuilder.omitPrivateStorageMeta(\n [...fromCache, ...fromGet, ...parentFoundPayloads].toSorted(PayloadBuilder.compareStorageMeta),\n ) as WithStorageMeta<Payload>[]\n }\n\n protected insertHandler(_payloads: WithStorageMeta<Payload>[]): Promisable<WithStorageMeta<Payload>[]> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async insertQueryHandler<T extends QueryBoundWitnessWrapper = QueryBoundWitnessWrapper>(query: T, payloads?: Payload[]): Promise<WithStorageMeta<Payload>[]> {\n assertEx(payloads, () => `Missing payloads: ${JSON.stringify(query.payload, null, 2)}`)\n const resolvedPayloads = await PayloadBuilder.filterIncludeByEitherHash(payloads, query.payloadHashes)\n assertEx(\n resolvedPayloads.length === query.payloadHashes.length,\n () => `Could not find some passed hashes [${resolvedPayloads.length} != ${query.payloadHashes.length}]`,\n )\n const queryPayload = await query.getQuery()\n const payloadsWithoutQuery = await PayloadBuilder.filterExclude(resolvedPayloads, await PayloadBuilder.dataHash(queryPayload))\n const result = await this.insertWithConfig(payloadsWithoutQuery)\n return result\n }\n\n protected async insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<WithStorageMeta<Payload>[]> {\n const sanitizedPayloads = this.snapshotPayloads(payloads)\n return await this.withCacheMutation(async () => {\n const emitEvents = config?.emitEvents ?? true\n const writeToParents = config?.writeToParents ?? true\n\n await this.validateInsertPayloads(sanitizedPayloads)\n const withStorageMeta = await PayloadBuilder.addStorageMeta(sanitizedPayloads)\n const hashes = [...new Set(withStorageMeta.map(payload => payload._hash))]\n const { existingPayloads, insertedPayloads } = await this.withStorageMutation(async () => {\n const existingPayloads = await this.getExistingLocalPayloads(hashes)\n await this.repairExistingPayloads(existingPayloads)\n const existingHashes = new Set(existingPayloads.map(payload => payload._hash))\n const payloadsToInsert = withStorageMeta.filter((payload) => {\n if (existingHashes.has(payload._hash)) return false\n existingHashes.add(payload._hash)\n return true\n })\n return { existingPayloads, insertedPayloads: await this.insertHandler(payloadsToInsert) }\n })\n\n if (writeToParents) {\n // A previous attempt may have stored locally before a parent failed.\n // Retry the current request's existing roots as well as its new roots.\n await this.writeToParents([...existingPayloads, ...insertedPayloads])\n }\n if (emitEvents) {\n await this.emit('inserted', {\n mod: this, payloads: insertedPayloads, outPayloads: insertedPayloads, inPayloads: payloads,\n })\n }\n this.reportPayloadCount()\n return PayloadBuilder.omitPrivateStorageMeta(insertedPayloads) as WithStorageMeta<Payload>[]\n })\n }\n\n protected nextHandler(_options?: ArchivistNextOptions): Promisable<WithStorageMeta<Payload>[]> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async nextWithConfig(options?: ArchivistNextOptions, _config?: InsertConfig): Promise<WithStorageMeta<Payload>[]> {\n const foundPayloads = await this.nextHandler(options)\n return PayloadBuilder.omitPrivateStorageMeta(foundPayloads) as WithStorageMeta<Payload>[]\n }\n\n protected async parentArchivists(): Promise<ArchivistParentInstanceMap> {\n this._parentArchivists ??= {\n commit: { ...await this.resolveArchivists(this.config?.parents?.commit, this.params.parents?.commit) },\n read: { ...await this.resolveArchivists(this.config?.parents?.read) },\n write: { ...await this.resolveArchivists(this.config?.parents?.write) },\n }\n return assertEx(this._parentArchivists)\n }\n\n // the number of payloads in the archivist, -1 if not implemented\n // the implementations of these must be fast, so they may not be promises and should read an auto updated value\n protected payloadCountHandler() {\n return -1\n }\n\n // eslint-disable-next-line max-statements\n protected override async queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(\n query: T,\n payloads: Payload[],\n queryConfig?: TConfig,\n ): Promise<ModuleQueryHandlerResult> {\n const sanitizedQuery = PayloadBuilder.omitStorageMeta(query) as T\n const sanitizedPayloads = this.snapshotPayloads(payloads)\n const wrappedQuery = QueryBoundWitnessWrapper.parseQuery<ArchivistQueries>(sanitizedQuery, sanitizedPayloads)\n const queryPayload = await wrappedQuery.getQuery()\n assertEx(await this.queryable(sanitizedQuery, sanitizedPayloads, queryConfig))\n const resultPayloads: Payload[] = []\n\n switch (queryPayload.schema) {\n case ArchivistAllQuerySchema: {\n resultPayloads.push(...(await this.allHandler()))\n break\n }\n case ArchivistClearQuerySchema: {\n await this.clearWithConfig()\n break\n }\n case ArchivistCommitQuerySchema: {\n resultPayloads.push(...(await this.commitHandler()))\n break\n }\n case ArchivistDeleteQuerySchema: {\n const typedQueryPayload = queryPayload as ArchivistDeleteQuery\n resultPayloads.push(...(await this.deleteWithConfig(typedQueryPayload.hashes)))\n break\n }\n case ArchivistGetQuerySchema: {\n const typedQueryPayload = queryPayload as ArchivistGetQuery\n resultPayloads.push(...(await this.getWithConfig(typedQueryPayload.hashes ?? [])))\n break\n }\n case ArchivistInsertQuerySchema: {\n resultPayloads.push(...(await this.insertQueryHandler(wrappedQuery, sanitizedPayloads)))\n break\n }\n case ArchivistNextQuerySchema: {\n const typedQueryPayload = queryPayload as ArchivistNextQuery\n resultPayloads.push(...(await this.nextHandler(typedQueryPayload)))\n break\n }\n case ArchivistSnapshotQuerySchema: {\n resultPayloads.push(...(await this.snapshotHandler()))\n break\n }\n default: {\n const result = await super.queryHandler(sanitizedQuery, sanitizedPayloads)\n if (this.config.storeQueries === true) {\n await this.insertWithConfig([sanitizedQuery])\n }\n return PayloadBuilder.omitPrivateStorageMeta(result)\n }\n }\n if (this.config.storeQueries === true) {\n await this.insertWithConfig([sanitizedQuery])\n }\n return PayloadBuilder.omitPrivateStorageMeta(resultPayloads)\n }\n\n /** Restore derived indexes for a stored root without rewriting its body. */\n protected repairExistingPayloads(_payloads: WithStorageMeta<Payload>[]): Promisable<void> {\n return undefined\n }\n\n protected reportPayloadCount(): void {\n this._noOverride('reportPayloadCount')\n const gauge = this.payloadCountGauge\n if (gauge) {\n gauge.record(this.payloadCountHandler())\n }\n }\n\n protected snapshotHandler(): PromisableArray<ArchivistSnapshotPayload<WithStorageMeta<Payload>, Hash>> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected override async startHandler(): Promise<void> {\n if (this.config.getCache?.enabled === true) {\n this._getCache = new LRUCache({\n max: this.config.getCache?.maxEntries ?? 10_000,\n allowStale: true,\n noDisposeOnSet: false,\n updateAgeOnGet: true,\n })\n }\n const result = await super.startHandler()\n this.reportPayloadCount()\n return result\n }\n\n protected override async stateHandler(): Promise<Payload[]> {\n return [...await super.stateHandler(), await this.generateStats()]\n }\n\n /** Enforce backend admission before lookup, repair, insertion or parent writes. */\n protected validateInsertPayloads(_payloads: Payload[]): Promisable<void> {\n return undefined\n }\n\n /** Serialize local storage changes without holding a lock across callbacks or parents. */\n protected async withStorageMutation<T>(operation: () => Promise<T>): Promise<T> {\n return await operation()\n }\n\n protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<Payload[]> {\n if (payloads.length === 0) return []\n const sanitized = PayloadBuilder.omitStorageMeta(payloads)\n const hashes = [...new Set(await Promise.all(sanitized.map(payload => PayloadBuilder.hash(payload))))]\n const inserted = await this.exactRepresentations(await parent.insert(sanitized), hashes)\n const insertedHashes = new Set(inserted.map(payload => payload._hash))\n const missing = hashes.filter(hash => !insertedHashes.has(hash))\n const existing = missing.length > 0 ? await this.exactRepresentations(await parent.get(missing), missing) : []\n const acknowledged = new Set([...inserted, ...existing].map(payload => payload._hash))\n if (hashes.some(hash => !acknowledged.has(hash))) {\n throw new Error('Write parent did not acknowledge all requested payloads')\n }\n return [...inserted, ...existing]\n }\n\n protected async writeToParents(payloads: Payload[]): Promise<Payload[]> {\n const parents = await this.parentArchivists()\n const results = await Promise.all(\n Object.values(parents.write ?? {}).map(async (parent) => {\n return parent ? await this.writeToParent(parent, payloads) : undefined\n }),\n )\n return results.filter(exists).flat()\n }\n\n private async exactRepresentations(payloads: WithStorageMeta<Payload>[], hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n const requested = new Set(hashes)\n const found = new Map<Hash, WithStorageMeta<Payload>>()\n for (const payload of payloads) {\n await this.verifyPayloadIdentity(payload)\n if (requested.has(payload._hash)) found.set(payload._hash, payload)\n }\n return found.values().toArray()\n }\n\n private async requestedRepresentations(payloads: WithStorageMeta<Payload>[], hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n const requested = new Set(hashes)\n const result = new Map<Hash, WithStorageMeta<Payload>>()\n const sorted = payloads.toSorted(PayloadBuilder.compareStorageMeta)\n // Prefer actual stored roots (including their original sequence) before\n // constructing data-only views from a different client-metadata variant.\n for (const payload of sorted) {\n await this.verifyPayloadIdentity(payload)\n if (requested.has(payload._hash) && !result.has(payload._hash)) result.set(payload._hash, payload)\n }\n for (const payload of sorted) {\n if (!requested.has(payload._dataHash) || result.has(payload._dataHash)) {\n continue\n }\n\n const dataOnly = PayloadBuilder.omitClientMeta(payload) as WithStorageMeta<Payload>\n result.set(payload._dataHash, { ...dataOnly, _hash: payload._dataHash })\n }\n return result.values().toArray()\n }\n\n private async resolveArchivists(archivists: ModuleIdentifier[] = [], archivistInstances?: ArchivistInstance[]) {\n const resolvedArchivists = await Promise.all(archivists.map(archivist => this.resolve(archivist)))\n const archivistModules = resolvedArchivists.filter(exists).filter(duplicateModules)\n\n assertEx(\n !this.requireAllParents || (archivistModules.length === archivists.length),\n () =>\n `Failed to find some archivists for ${this.modName} (set allRequired to false if ok)]`,\n )\n\n const archivistInstancesMap: Record<XyoAddress, ArchivistInstance> = {}\n const resolvedInstances = archivistInstances ?? []\n for (const archivistInstance of resolvedInstances) {\n archivistInstancesMap[archivistInstance.address] = archivistInstance\n }\n\n for (const mod of archivistModules) {\n archivistInstancesMap[mod.address] = asArchivistInstance(mod, () => {\n isArchivistInstance(mod, { log: console })\n return `Unable to cast resolved module to an archivist: [${mod.address}, ${mod.modName}, ${mod.config.schema})}]`\n }, { required: true })\n }\n return archivistInstancesMap\n }\n\n private snapshotPayloads(payloads: Payload[]): Payload[] {\n // Payloads are JSON values. Capture their bytes before asynchronous work so\n // admission, identity computation and the backend see the same input.\n // JSON normalization is intentional; structuredClone preserves non-JSON values.\n // eslint-disable-next-line unicorn/prefer-structured-clone\n return JSON.parse(JSON.stringify(PayloadBuilder.omitStorageMeta(payloads))) as Payload[]\n }\n\n private async verifyPayloadIdentity(payload: WithStorageMeta<Payload>): Promise<void> {\n const canonicalPayload = PayloadBuilder.omitStorageMeta(payload)\n const [hash, dataHash] = await Promise.all([\n PayloadBuilder.hash(canonicalPayload), PayloadBuilder.dataHash(canonicalPayload),\n ])\n if (hash !== payload._hash || dataHash !== payload._dataHash) {\n throw new Error('Archivist returned payload with invalid hash metadata')\n }\n }\n\n private async withCacheMutation<T>(operation: () => Promise<T>): Promise<T> {\n this.activeCacheMutations++\n this.cacheGeneration++\n this._getCache?.clear()\n try {\n return await operation()\n } finally {\n // Even a failed mutation can have changed persistent state. In-flight reads\n // may finish, but their old generation must never repopulate the cache.\n this.activeCacheMutations--\n this.cacheGeneration++\n this._getCache?.clear()\n }\n }\n}\n", "export const StorageClassLabel = 'network.xyo.storage.class'\nexport type StorageClassLabelValue = 'memory' | 'disk' | 'network' | 'proxy' | 'unknown'\n", "import type { Payload } from '@xyo-network/sdk-protocol'\nimport { PayloadBuilder } from '@xyo-network/sdk-protocol'\n\n/** Exact schema admission and limits on UTF-8 JSON bytes before compression. */\nexport interface PayloadAdmissionPolicy {\n /** An empty allowlist admits nothing. */\n allowedSchemas: string[]\n maxPayloadBytes: number\n /** Per-schema limits can only tighten the global limit. */\n schemaMaxPayloadBytes?: Record<string, number>\n}\n\nfunction validByteLimit(value: number): boolean {\n return Number.isSafeInteger(value) && value > 0\n}\n\nexport function validatePayloadAdmissionPolicy(policy: PayloadAdmissionPolicy): void {\n if (!Array.isArray(policy?.allowedSchemas)\n || policy.allowedSchemas.some(schema => typeof schema !== 'string' || schema.length === 0 || schema.trim() !== schema)\n || !validByteLimit(policy.maxPayloadBytes)) {\n throw new TypeError('Invalid payload admission policy')\n }\n if (policy.schemaMaxPayloadBytes !== undefined) {\n if (policy.schemaMaxPayloadBytes === null || typeof policy.schemaMaxPayloadBytes !== 'object' || Array.isArray(policy.schemaMaxPayloadBytes)) {\n throw new TypeError('Invalid schema payload byte limits')\n }\n for (const [schema, limit] of Object.entries(policy.schemaMaxPayloadBytes)) {\n if (!policy.allowedSchemas.includes(schema) || !validByteLimit(limit)) {\n throw new TypeError('Invalid schema payload byte limits')\n }\n }\n }\n}\n\n/** Reject the entire batch before any storage action if one payload is ineligible. */\nexport function validatePayloadAdmission(payloads: Payload[], policy: PayloadAdmissionPolicy): void {\n validatePayloadAdmissionPolicy(policy)\n const allowed = new Set(policy.allowedSchemas)\n for (const payload of payloads) {\n if (!allowed.has(payload.schema)) throw new Error('Payload schema is not admitted by this archivist')\n const schemaLimit = policy.schemaMaxPayloadBytes && Object.hasOwn(policy.schemaMaxPayloadBytes, payload.schema)\n ? policy.schemaMaxPayloadBytes[payload.schema]\n : policy.maxPayloadBytes\n const limit = Math.min(policy.maxPayloadBytes, schemaLimit)\n const json = JSON.stringify(PayloadBuilder.omitStorageMeta(payload))\n const textEncoder = new TextEncoder()\n if (textEncoder.encode(json).byteLength > limit) {\n throw new Error('Payload exceeds this archivist byte limit')\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["existingPayloads", "PayloadBuilder"]
7
7
  }
@@ -81,11 +81,13 @@ var GenericArchivist = class extends AbstractArchivist {
81
81
  }
82
82
  async commitHandler() {
83
83
  const payloads = assertEx(await this.allHandler(), () => "Nothing to commit");
84
+ const parentArchivists = await this.parentArchivists();
84
85
  const settled = await Promise.allSettled(
85
- Object.values((await this.parentArchivists()).commit ?? [])?.map(async (parent) => {
86
+ Object.values(parentArchivists.commit ?? [])?.map(async (parent) => {
86
87
  const queryPayload = { schema: ArchivistInsertQuerySchema };
87
88
  const query = await this.bindQuery(queryPayload, payloads);
88
- return (await parent?.query(query[0], query[1]))?.[0];
89
+ const result = await parent?.query(query[0], query[1]);
90
+ return result?.[0];
89
91
  }).filter(exists)
90
92
  );
91
93
  await this.clearHandler();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/modules/archivist-generic/Archivist.ts", "../../src/modules/archivist-generic/Config.ts"],
4
- "sourcesContent": ["import type {\n BrandedHash, Hash, Promisable, PromisableArray,\n} from '@ariestools/sdk'\nimport {\n assertEx,\n exists,\n fulfilled,\n} from '@ariestools/sdk'\nimport type {\n AccountInstance, BoundWitness,\n Payload, Schema, WithStorageMeta,\n} from '@xyo-network/sdk-protocol'\nimport { Account } from '@xyo-network/sdk-protocol'\n\nimport { AbstractArchivist, StorageClassLabel } from '#archivist-abstract'\nimport type {\n ArchivistDriver,\n ArchivistInsertQuery,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistParams,\n ArchivistSnapshotPayload,\n AttachableArchivistInstance,\n} from '#archivist-model'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistNextQuerySchema,\n} from '#archivist-model'\nimport type { AnyConfigSchema, ModuleInstance } from '#module-model'\nimport { creatableModule } from '#module-model'\n\nimport type { GenericArchivistConfig } from './Config.ts'\nimport { GenericArchivistConfigSchema } from './Config.ts'\n\nexport interface GenericArchivistParams<TConfig extends AnyConfigSchema<GenericArchivistConfig> = AnyConfigSchema<GenericArchivistConfig>>\n extends ArchivistParams<TConfig> {\n driver?: ArchivistDriver<Hash, Payload, WithStorageMeta<Payload>>\n}\n\n@creatableModule()\nexport class GenericArchivist<\n TParams extends GenericArchivistParams<AnyConfigSchema<GenericArchivistConfig>> = GenericArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n>\n extends AbstractArchivist<TParams, TEventData>\n implements AttachableArchivistInstance, ModuleInstance {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, GenericArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = GenericArchivistConfigSchema\n static override readonly labels: {\n 'network.xyo.storage.class': string\n } = { ...super.labels, [StorageClassLabel]: 'generic' }\n\n override get queries(): Schema[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistNextQuerySchema,\n ...super.queries,\n ]\n }\n\n protected get driver(): ArchivistDriver<BrandedHash, Payload, WithStorageMeta<Payload>> {\n return assertEx(this.params.driver, () => 'Driver is not set')\n }\n\n static async from(payloads: Payload[], account?: AccountInstance): Promise<GenericArchivist> {\n const archivist = await this.create({ account: account ?? await Account.random() })\n await archivist.insert(payloads)\n return archivist\n }\n\n protected override allHandler(): Promisable<WithStorageMeta<Payload>[]> {\n return this.driver.all()\n }\n\n protected override clearHandler(): Promisable<void> {\n return this.driver.clear()\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = assertEx(await this.allHandler(), () => 'Nothing to commit')\n const settled = await Promise.allSettled(\n Object.values((await this.parentArchivists()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = { schema: ArchivistInsertQuerySchema }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }).filter(exists),\n )\n await this.clearHandler()\n return settled.filter(fulfilled).map(result => result.value).filter(exists)\n }\n\n protected override deleteHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n return this.driver.delete(hashes)\n }\n\n protected override getHandler(hashes: Hash[]): Promisable<WithStorageMeta<Payload>[]> {\n return this.driver.get(hashes)\n }\n\n protected override insertHandler(payloads: WithStorageMeta<Payload>[]): WithStorageMeta<Payload>[] {\n return this.driver.insert(payloads)\n }\n\n protected override nextHandler(options?: ArchivistNextOptions): Promisable<WithStorageMeta<Payload>[]> {\n return this.driver.next(options)\n }\n\n protected override payloadCountHandler(): number {\n return this.driver.count()\n }\n\n protected override snapshotHandler(): PromisableArray<ArchivistSnapshotPayload<WithStorageMeta<Payload>, Hash>> {\n throw new Error('Snapshot is not supported by GenericArchivist')\n }\n}\n", "import type { EmptyObject, WithAdditional } from '@ariestools/sdk'\nimport {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport {\n asSchema, type Payload, type Schema,\n} from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport type { ArchivistConfig } from '#archivist-model'\nimport { ArchivistConfigZod } from '#archivist-model'\n\nexport const GenericArchivistConfigSchema: 'network.xyo.archivist.generic.config' & {\n readonly __schema: true\n} = asSchema('network.xyo.archivist.generic.config', true)\nexport type GenericArchivistConfigSchema = typeof GenericArchivistConfigSchema\n\nexport const GenericArchivistConfigZod: z.ZodMiniObject<\n & Omit<(typeof ArchivistConfigZod)['shape'], 'schema'>\n & {\n max: z.ZodMiniOptional<z.ZodMiniNumber<number>>\n schema: z.ZodMiniLiteral<GenericArchivistConfigSchema>\n },\n z.core.$strip\n> = z.extend(ArchivistConfigZod, {\n max: z.optional(z.number()),\n schema: z.literal(GenericArchivistConfigSchema),\n})\n\nexport type GenericArchivistConfigBase = z.infer<typeof GenericArchivistConfigZod>\n\nexport const isGenericArchivistConfig: ReturnType<typeof zodIsFactory<GenericArchivistConfigBase>> = zodIsFactory(GenericArchivistConfigZod)\nexport const asGenericArchivistConfig: ReturnType<typeof zodAsFactory<GenericArchivistConfigBase>> = zodAsFactory(GenericArchivistConfigZod, 'asGenericArchivistConfig')\nexport const toGenericArchivistConfig: ReturnType<typeof zodToFactory<GenericArchivistConfigBase>> = zodToFactory(GenericArchivistConfigZod, 'toGenericArchivistConfig')\n\nexport type GenericArchivistConfig<TConfig extends Payload | EmptyObject | void = void, TSchema extends Schema | void = void> = ArchivistConfig<\n WithAdditional<\n {\n max?: number\n },\n TConfig\n >,\n TSchema extends Schema ? TSchema : GenericArchivistConfigSchema | ArchivistConfig['schema']\n>\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type {\n BrandedHash, Hash, Promisable, PromisableArray,\n} from '@ariestools/sdk'\nimport {\n assertEx,\n exists,\n fulfilled,\n} from '@ariestools/sdk'\nimport type {\n AccountInstance, BoundWitness,\n Payload, Schema, WithStorageMeta,\n} from '@xyo-network/sdk-protocol'\nimport { Account } from '@xyo-network/sdk-protocol'\n\nimport { AbstractArchivist, StorageClassLabel } from '#archivist-abstract'\nimport type {\n ArchivistDriver,\n ArchivistInsertQuery,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistParams,\n ArchivistSnapshotPayload,\n AttachableArchivistInstance,\n} from '#archivist-model'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistNextQuerySchema,\n} from '#archivist-model'\nimport type { AnyConfigSchema, ModuleInstance } from '#module-model'\nimport { creatableModule } from '#module-model'\n\nimport type { GenericArchivistConfig } from './Config.ts'\nimport { GenericArchivistConfigSchema } from './Config.ts'\n\nexport interface GenericArchivistParams<TConfig extends AnyConfigSchema<GenericArchivistConfig> = AnyConfigSchema<GenericArchivistConfig>>\n extends ArchivistParams<TConfig> {\n driver?: ArchivistDriver<Hash, Payload, WithStorageMeta<Payload>>\n}\n\n@creatableModule()\nexport class GenericArchivist<\n TParams extends GenericArchivistParams<AnyConfigSchema<GenericArchivistConfig>> = GenericArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n>\n extends AbstractArchivist<TParams, TEventData>\n implements AttachableArchivistInstance, ModuleInstance {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, GenericArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = GenericArchivistConfigSchema\n static override readonly labels: {\n 'network.xyo.storage.class': string\n } = { ...super.labels, [StorageClassLabel]: 'generic' }\n\n override get queries(): Schema[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistNextQuerySchema,\n ...super.queries,\n ]\n }\n\n protected get driver(): ArchivistDriver<BrandedHash, Payload, WithStorageMeta<Payload>> {\n return assertEx(this.params.driver, () => 'Driver is not set')\n }\n\n static async from(payloads: Payload[], account?: AccountInstance): Promise<GenericArchivist> {\n const archivist = await this.create({ account: account ?? await Account.random() })\n await archivist.insert(payloads)\n return archivist\n }\n\n protected override allHandler(): Promisable<WithStorageMeta<Payload>[]> {\n return this.driver.all()\n }\n\n protected override clearHandler(): Promisable<void> {\n return this.driver.clear()\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = assertEx(await this.allHandler(), () => 'Nothing to commit')\n const parentArchivists = await this.parentArchivists()\n const settled = await Promise.allSettled(\n Object.values(parentArchivists.commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = { schema: ArchivistInsertQuerySchema }\n const query = await this.bindQuery(queryPayload, payloads)\n const result = await parent?.query(query[0], query[1])\n return result?.[0]\n }).filter(exists),\n )\n await this.clearHandler()\n return settled.filter(fulfilled).map(result => result.value).filter(exists)\n }\n\n protected override deleteHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n return this.driver.delete(hashes)\n }\n\n protected override getHandler(hashes: Hash[]): Promisable<WithStorageMeta<Payload>[]> {\n return this.driver.get(hashes)\n }\n\n protected override insertHandler(payloads: WithStorageMeta<Payload>[]): WithStorageMeta<Payload>[] {\n return this.driver.insert(payloads)\n }\n\n protected override nextHandler(options?: ArchivistNextOptions): Promisable<WithStorageMeta<Payload>[]> {\n return this.driver.next(options)\n }\n\n protected override payloadCountHandler(): number {\n return this.driver.count()\n }\n\n protected override snapshotHandler(): PromisableArray<ArchivistSnapshotPayload<WithStorageMeta<Payload>, Hash>> {\n throw new Error('Snapshot is not supported by GenericArchivist')\n }\n}\n", "import type { EmptyObject, WithAdditional } from '@ariestools/sdk'\nimport {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport {\n asSchema, type Payload, type Schema,\n} from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport type { ArchivistConfig } from '#archivist-model'\nimport { ArchivistConfigZod } from '#archivist-model'\n\nexport const GenericArchivistConfigSchema: 'network.xyo.archivist.generic.config' & {\n readonly __schema: true\n} = asSchema('network.xyo.archivist.generic.config', true)\nexport type GenericArchivistConfigSchema = typeof GenericArchivistConfigSchema\n\nexport const GenericArchivistConfigZod: z.ZodMiniObject<\n & Omit<(typeof ArchivistConfigZod)['shape'], 'schema'>\n & {\n max: z.ZodMiniOptional<z.ZodMiniNumber<number>>\n schema: z.ZodMiniLiteral<GenericArchivistConfigSchema>\n },\n z.core.$strip\n> = z.extend(ArchivistConfigZod, {\n max: z.optional(z.number()),\n schema: z.literal(GenericArchivistConfigSchema),\n})\n\nexport type GenericArchivistConfigBase = z.infer<typeof GenericArchivistConfigZod>\n\nexport const isGenericArchivistConfig: ReturnType<typeof zodIsFactory<GenericArchivistConfigBase>> = zodIsFactory(GenericArchivistConfigZod)\nexport const asGenericArchivistConfig: ReturnType<typeof zodAsFactory<GenericArchivistConfigBase>> = zodAsFactory(GenericArchivistConfigZod, 'asGenericArchivistConfig')\nexport const toGenericArchivistConfig: ReturnType<typeof zodToFactory<GenericArchivistConfigBase>> = zodToFactory(GenericArchivistConfigZod, 'toGenericArchivistConfig')\n\nexport type GenericArchivistConfig<TConfig extends Payload | EmptyObject | void = void, TSchema extends Schema | void = void> = ArchivistConfig<\n WithAdditional<\n {\n max?: number\n },\n TConfig\n >,\n TSchema extends Schema ? TSchema : GenericArchivistConfigSchema | ArchivistConfig['schema']\n>\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }