fix: require Interface instead of class
feat: duplicate code removed