41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
import type { ResourcePurpose } from "@metis/resources/common";
|
|
import type { IResourceReferenceSession } from "@metis/resources/services";
|
|
import { UniqueID } from "@repo/rdx-ddd";
|
|
|
|
/** Proyecta referencias globales ya resueltas por Resources; no decide elegibilidad ni abre transacciones. */
|
|
export async function loadGlobalConfigurationReferences(
|
|
session: IResourceReferenceSession,
|
|
purpose: ResourcePurpose,
|
|
ids: readonly string[]
|
|
) {
|
|
const globalResources = [];
|
|
|
|
for (let offset = 0; offset < ids.length; offset += 100) {
|
|
const resolved = await session.resolve({
|
|
purpose,
|
|
ids: ids.slice(offset, offset + 100),
|
|
});
|
|
|
|
if (resolved.purpose !== purpose) {
|
|
throw new Error("Propósito de referencia incompatible.");
|
|
}
|
|
for (const item of resolved.items) {
|
|
if (item.status === "resolved" && item.reference.scope === "global") {
|
|
const identity = UniqueID.create(item.reference.id);
|
|
|
|
if (!identity.isSuccess) {
|
|
throw new Error("Identidad global persistida inválida.");
|
|
}
|
|
globalResources.push({
|
|
id: identity.data,
|
|
active: item.reference.active,
|
|
usage: item.reference.kind,
|
|
expiresOn: null,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
return globalResources;
|
|
}
|