exports.nex_crafting:GetBenches()
-- returns: array of bench tables (id, name, type, coords, access, etc.)
exports.nex_crafting:GetBench(benchId)
-- returns: a single bench table, or nil
exports.nex_crafting:GetRecipeGroups()
-- returns: array of recipe groups, each with its recipes and ingredients
exports.nex_crafting:HasBenchAccess(source, benchId)
-- returns: boolean. Runs the same access check the player sees.
exports.nex_crafting:CraftForPlayer(source, benchId, recipeIndex, skillPassed?)
-- triggers a craft as if the player ran it themselves.
-- `recipeIndex` is the position of the recipe inside its group.
-- `skillPassed` is optional; pass true to skip the skill check.