add #promise to deferreds and publish on npm