@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.
- package/dist/neutral/api-location-diviner.mjs +1 -1
- package/dist/neutral/api-location-diviner.mjs.map +2 -2
- package/dist/neutral/archivist-abstract.mjs +30 -25
- package/dist/neutral/archivist-abstract.mjs.map +2 -2
- package/dist/neutral/archivist-generic.mjs +4 -2
- package/dist/neutral/archivist-generic.mjs.map +2 -2
- package/dist/neutral/archivist-memory.mjs +5 -4
- package/dist/neutral/archivist-memory.mjs.map +2 -2
- package/dist/neutral/archivist-model.mjs +10 -5
- package/dist/neutral/archivist-model.mjs.map +2 -2
- package/dist/neutral/archivist-view.mjs +5 -3
- package/dist/neutral/archivist-view.mjs.map +2 -2
- package/dist/neutral/boundwitness-loader.mjs +11 -6
- package/dist/neutral/boundwitness-loader.mjs.map +2 -2
- package/dist/neutral/bridge-abstract.mjs +39 -26
- package/dist/neutral/bridge-abstract.mjs.map +2 -2
- package/dist/neutral/bridge-http.mjs +19 -15
- package/dist/neutral/bridge-http.mjs.map +2 -2
- package/dist/neutral/bridge-wrapper.mjs +4 -2
- package/dist/neutral/bridge-wrapper.mjs.map +2 -2
- package/dist/neutral/diviner-abstract.mjs +2 -2
- package/dist/neutral/diviner-abstract.mjs.map +2 -2
- package/dist/neutral/diviner-boundwitness.memory.mjs +4 -5
- package/dist/neutral/diviner-boundwitness.memory.mjs.map +2 -2
- package/dist/neutral/diviner-boundwitness.mjs +4 -5
- package/dist/neutral/diviner-boundwitness.mjs.map +2 -2
- package/dist/neutral/diviner-payload-generic.mjs +13 -15
- package/dist/neutral/diviner-payload-generic.mjs.map +2 -2
- package/dist/neutral/manifest-wrapper.mjs +4 -2
- package/dist/neutral/manifest-wrapper.mjs.map +2 -2
- package/dist/neutral/module-abstract.mjs +43 -46
- package/dist/neutral/module-abstract.mjs.map +3 -3
- package/dist/neutral/module-model.mjs +18 -1
- package/dist/neutral/module-model.mjs.map +2 -2
- package/dist/neutral/module-resolver.mjs +59 -51
- package/dist/neutral/module-resolver.mjs.map +3 -3
- package/dist/neutral/module-wrapper.mjs +11 -6
- package/dist/neutral/module-wrapper.mjs.map +2 -2
- package/dist/neutral/modules/archivist-abstract/AbstractArchivist.d.ts.map +1 -1
- package/dist/neutral/modules/archivist-generic/Archivist.d.ts.map +1 -1
- package/dist/neutral/modules/archivist-memory/MemoryDriver.d.ts.map +1 -1
- package/dist/neutral/modules/archivist-model/lib/getBoundWitness.d.ts.map +1 -1
- package/dist/neutral/modules/archivist-model/lib/hydrateBoundWitness.d.ts.map +1 -1
- package/dist/neutral/modules/archivist-view/ViewArchivist.d.ts.map +1 -1
- package/dist/neutral/modules/boundwitness-loader/Loader.d.ts.map +1 -1
- package/dist/neutral/modules/bridge-abstract/AbstractBridge.d.ts.map +1 -1
- package/dist/neutral/modules/bridge-abstract/AbstractModuleProxy/AbstractModuleProxy.d.ts.map +1 -1
- package/dist/neutral/modules/bridge-http/HttpBridge.d.ts.map +1 -1
- package/dist/neutral/modules/bridge-http/ModuleProxy/ModuleProxy.d.ts.map +1 -1
- package/dist/neutral/modules/bridge-wrapper/BridgeWrapper.d.ts.map +1 -1
- package/dist/neutral/modules/diviner-boundwitness/MemoryBoundWitnessDiviner.d.ts.map +1 -1
- package/dist/neutral/modules/diviner-payload-generic/Diviner.d.ts.map +1 -1
- package/dist/neutral/modules/manifest-wrapper/Wrapper.d.ts.map +1 -1
- package/dist/neutral/modules/manifest-wrapper/WrapperEx.d.ts.map +1 -1
- package/dist/neutral/modules/module-abstract/AbstractModule.d.ts +0 -1
- package/dist/neutral/modules/module-abstract/AbstractModule.d.ts.map +1 -1
- package/dist/neutral/modules/module-abstract/AbstractModuleInstance.d.ts.map +1 -1
- package/dist/neutral/modules/module-abstract/QueryValidator/ModuleConfigQueryValidator.d.ts.map +1 -1
- package/dist/neutral/modules/module-model/QueryableModule/IsQueryableModuleFactory.d.ts.map +1 -1
- package/dist/neutral/modules/module-resolver/CompositeModuleResolver.d.ts.map +1 -1
- package/dist/neutral/modules/module-resolver/ResolveHelper/ResolveHelper.d.ts.map +1 -1
- package/dist/neutral/modules/module-resolver/ResolveHelper/resolveAll.d.ts.map +1 -1
- package/dist/neutral/modules/module-resolver/ResolveHelper/resolveLocalNameToAddress.d.ts.map +1 -1
- package/dist/neutral/modules/module-resolver/ResolveHelper/resolvePathToAddress.d.ts.map +1 -1
- package/dist/neutral/modules/module-resolver/SimpleModuleResolver.d.ts.map +1 -1
- package/dist/neutral/modules/module-wrapper/ModuleWrapper.d.ts.map +1 -1
- package/dist/neutral/modules/node-abstract/AbstractNode.d.ts.map +1 -1
- package/dist/neutral/modules/node-memory/MemoryNode.d.ts.map +1 -1
- package/dist/neutral/modules/node-memory/NodeHelper/flatAttachToExistingNode.d.ts.map +1 -1
- package/dist/neutral/modules/node-view/ViewNode.d.ts.map +1 -1
- package/dist/neutral/modules/node-wrapper/NodeWrapper.d.ts.map +1 -1
- package/dist/neutral/modules/payloadset-plugin/Resolver.d.ts.map +1 -1
- package/dist/neutral/modules/sentinel-abstract/AbstractSentinel.d.ts.map +1 -1
- package/dist/neutral/modules/sentinel-memory/MemorySentinel.d.ts.map +1 -1
- package/dist/neutral/modules/sentinel-memory/SentinelRunner.d.ts.map +1 -1
- package/dist/neutral/modules/witness-abstract/AbstractWitness.d.ts.map +1 -1
- package/dist/neutral/node-abstract.mjs +8 -4
- package/dist/neutral/node-abstract.mjs.map +2 -2
- package/dist/neutral/node-memory.mjs +6 -4
- package/dist/neutral/node-memory.mjs.map +2 -2
- package/dist/neutral/node-view.mjs +2 -1
- package/dist/neutral/node-view.mjs.map +2 -2
- package/dist/neutral/node-wrapper.mjs +16 -7
- package/dist/neutral/node-wrapper.mjs.map +2 -2
- package/dist/neutral/payloadset-plugin.mjs +11 -10
- package/dist/neutral/payloadset-plugin.mjs.map +2 -2
- package/dist/neutral/sentinel-abstract.mjs +4 -3
- package/dist/neutral/sentinel-abstract.mjs.map +2 -2
- package/dist/neutral/sentinel-memory.mjs +12 -7
- package/dist/neutral/sentinel-memory.mjs.map +2 -2
- package/dist/neutral/witness-abstract.mjs +4 -3
- package/dist/neutral/witness-abstract.mjs.map +2 -2
- package/dist/node/modules/archivist-abstract/AbstractArchivist.d.ts.map +1 -1
- package/dist/node/modules/archivist-generic/Archivist.d.ts.map +1 -1
- package/dist/node/modules/archivist-memory/MemoryDriver.d.ts.map +1 -1
- package/dist/node/modules/archivist-model/lib/getBoundWitness.d.ts.map +1 -1
- package/dist/node/modules/archivist-model/lib/hydrateBoundWitness.d.ts.map +1 -1
- package/dist/node/modules/archivist-view/ViewArchivist.d.ts.map +1 -1
- package/dist/node/modules/boundwitness-loader/Loader.d.ts.map +1 -1
- package/dist/node/modules/bridge-abstract/AbstractBridge.d.ts.map +1 -1
- package/dist/node/modules/bridge-abstract/AbstractModuleProxy/AbstractModuleProxy.d.ts.map +1 -1
- package/dist/node/modules/bridge-http/HttpBridge.d.ts.map +1 -1
- package/dist/node/modules/bridge-http/ModuleProxy/ModuleProxy.d.ts.map +1 -1
- package/dist/node/modules/bridge-wrapper/BridgeWrapper.d.ts.map +1 -1
- package/dist/node/modules/diviner-boundwitness/MemoryBoundWitnessDiviner.d.ts.map +1 -1
- package/dist/node/modules/diviner-payload-generic/Diviner.d.ts.map +1 -1
- package/dist/node/modules/manifest-wrapper/Wrapper.d.ts.map +1 -1
- package/dist/node/modules/manifest-wrapper/WrapperEx.d.ts.map +1 -1
- package/dist/node/modules/module-abstract/AbstractModule.d.ts +0 -1
- package/dist/node/modules/module-abstract/AbstractModule.d.ts.map +1 -1
- package/dist/node/modules/module-abstract/AbstractModuleInstance.d.ts.map +1 -1
- package/dist/node/modules/module-abstract/QueryValidator/ModuleConfigQueryValidator.d.ts.map +1 -1
- package/dist/node/modules/module-model/QueryableModule/IsQueryableModuleFactory.d.ts.map +1 -1
- package/dist/node/modules/module-resolver/CompositeModuleResolver.d.ts.map +1 -1
- package/dist/node/modules/module-resolver/ResolveHelper/ResolveHelper.d.ts.map +1 -1
- package/dist/node/modules/module-resolver/ResolveHelper/resolveAll.d.ts.map +1 -1
- package/dist/node/modules/module-resolver/ResolveHelper/resolveLocalNameToAddress.d.ts.map +1 -1
- package/dist/node/modules/module-resolver/ResolveHelper/resolvePathToAddress.d.ts.map +1 -1
- package/dist/node/modules/module-resolver/SimpleModuleResolver.d.ts.map +1 -1
- package/dist/node/modules/module-wrapper/ModuleWrapper.d.ts.map +1 -1
- package/dist/node/modules/node-abstract/AbstractNode.d.ts.map +1 -1
- package/dist/node/modules/node-memory/MemoryNode.d.ts.map +1 -1
- package/dist/node/modules/node-memory/NodeHelper/flatAttachToExistingNode.d.ts.map +1 -1
- package/dist/node/modules/node-view/ViewNode.d.ts.map +1 -1
- package/dist/node/modules/node-wrapper/NodeWrapper.d.ts.map +1 -1
- package/dist/node/modules/payloadset-plugin/Resolver.d.ts.map +1 -1
- package/dist/node/modules/sentinel-abstract/AbstractSentinel.d.ts.map +1 -1
- package/dist/node/modules/sentinel-memory/MemorySentinel.d.ts.map +1 -1
- package/dist/node/modules/sentinel-memory/SentinelRunner.d.ts.map +1 -1
- package/dist/node/modules/witness-abstract/AbstractWitness.d.ts.map +1 -1
- 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]
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
)
|
|
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)
|
|
556
|
-
|
|
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
|
|
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
|
-
|
|
573
|
+
const resolvedInstances = archivistInstances ?? [];
|
|
574
|
+
for (const archivistInstance of resolvedInstances) {
|
|
570
575
|
archivistInstancesMap[archivistInstance.address] = archivistInstance;
|
|
571
576
|
}
|
|
572
|
-
|
|
573
|
-
|
|
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
|
-
|
|
578
|
-
|
|
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 (!
|
|
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(
|
|
86
|
+
Object.values(parentArchivists.commit ?? [])?.map(async (parent) => {
|
|
86
87
|
const queryPayload = { schema: ArchivistInsertQuerySchema };
|
|
87
88
|
const query = await this.bindQuery(queryPayload, payloads);
|
|
88
|
-
|
|
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(
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;AAGA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAKP,SAAS,eAAe;AAExB,SAAS,mBAAmB,yBAAyB;AAUrD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,uBAAuB;;;AChChC;AAAA,EACE;AAAA,EAAc;AAAA,EAAc;AAAA,OACvB;AACP;AAAA,EACE;AAAA,OACK;AACP,YAAY,OAAO;AAGnB,SAAS,0BAA0B;AAE5B,IAAM,+BAET,SAAS,wCAAwC,IAAI;AAGlD,IAAM,4BAOP,SAAO,oBAAoB;AAAA,EAC/B,KAAO,WAAW,SAAO,CAAC;AAAA,EAC1B,QAAU,UAAQ,4BAA4B;AAChD,CAAC;AAIM,IAAM,2BAAwF,aAAa,yBAAyB;AACpI,IAAM,2BAAwF,aAAa,2BAA2B,0BAA0B;AAChK,IAAM,2BAAwF,aAAa,2BAA2B,0BAA0B;;;ADWhK,IAAM,mBAAN,cAIG,kBAC+C;AAAA,EAOvD,IAAa,UAAoB;AAC/B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG,MAAM;AAAA,IACX;AAAA,EACF;AAAA,EAEA,IAAc,SAA0E;AACtF,WAAO,SAAS,KAAK,OAAO,QAAQ,MAAM,mBAAmB;AAAA,EAC/D;AAAA,EAEA,aAAa,KAAK,UAAqB,SAAsD;AAC3F,UAAM,YAAY,MAAM,KAAK,OAAO,EAAE,SAAS,WAAW,MAAM,QAAQ,OAAO,EAAE,CAAC;AAClF,UAAM,UAAU,OAAO,QAAQ;AAC/B,WAAO;AAAA,EACT;AAAA,EAEmB,aAAqD;AACtE,WAAO,KAAK,OAAO,IAAI;AAAA,EACzB;AAAA,EAEmB,eAAiC;AAClD,WAAO,KAAK,OAAO,MAAM;AAAA,EAC3B;AAAA,EAEA,MAAyB,gBAAyC;AAChE,UAAM,WAAW,SAAS,MAAM,KAAK,WAAW,GAAG,MAAM,mBAAmB;AAC5E,UAAM,UAAU,MAAM,QAAQ;AAAA,MAC5B,OAAO,
|
|
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
|
}
|