(feat) add auth factory