import assert from "node:assert/strict"; import test from "node:test"; import { DEVICE_ADAPTER_CONTRACT_VERSION, createDeviceAdapterRegistry, defineDeviceAdapter, } from "../src/index.mjs"; function adapter(adapterRef = "generic-tracker", profileRef = "generic.tracker.v1") { return { contractVersion: DEVICE_ADAPTER_CONTRACT_VERSION, adapterRef, runtimePackageRef: `@nodedc/${adapterRef}-adapter`, profiles: [{ profileRef, framing: { maxBufferedBytes: 64 * 1024 }, }], createSession: () => ({}), }; } test("resolves only explicitly allowlisted adapter profiles", () => { const registry = createDeviceAdapterRegistry({ adapters: [adapter()], }); assert.deepEqual(registry.adapterRefs, ["generic-tracker"]); assert.deepEqual(registry.profileRefs, ["generic.tracker.v1"]); assert.equal( registry.resolveProfile("generic.tracker.v1").adapter.adapterRef, "generic-tracker", ); assert.throws( () => registry.resolveProfile("unknown.tracker.v1"), /device_adapter_profile_not_allowlisted/, ); }); test("rejects duplicate adapters and cross-adapter profile collisions", () => { assert.throws( () => createDeviceAdapterRegistry({ adapters: [adapter(), adapter()] }), /device_adapter_registry_adapter_duplicate/, ); assert.throws( () => createDeviceAdapterRegistry({ adapters: [ adapter("generic-tracker", "shared.profile.v1"), adapter("other-tracker", "shared.profile.v1"), ], }), /device_adapter_registry_profile_duplicate/, ); }); test("freezes adapter metadata but keeps the session factory callable", () => { const defined = defineDeviceAdapter(adapter()); assert.equal(Object.isFrozen(defined), true); assert.equal(Object.isFrozen(defined.profiles[0]), true); assert.equal(typeof defined.createSession, "function"); });