diff --git a/fill-pdf/fill-pdf-tests.ts b/fill-pdf/fill-pdf-tests.ts
new file mode 100644
index 0000000000..e5b34cd943
--- /dev/null
+++ b/fill-pdf/fill-pdf-tests.ts
@@ -0,0 +1,17 @@
+///
+
+import * as fillPdf from 'fill-pdf';
+
+var formData: fillPdf.FormData = { FieldName: 'Text to put into form field' };
+var pdfTemplatePath = 'templates.pdf';
+var extendArgs: string[] = [];
+
+fillPdf.generatePdf(formData, pdfTemplatePath, extendArgs, (err: Error, output: Buffer) => {
+ if ( !err ) {
+ console.log('Success!');
+ // output is a buffer
+ }
+});
+
+var result = fillPdf.generateFdf(formData);
+// result is a buffer
diff --git a/fill-pdf/fill-pdf.d.ts b/fill-pdf/fill-pdf.d.ts
new file mode 100644
index 0000000000..d35057f934
--- /dev/null
+++ b/fill-pdf/fill-pdf.d.ts
@@ -0,0 +1,16 @@
+// Type definitions for fill-pdf v0.5.0
+// Project: https://github.com/dommmel/fill-pdf
+// Definitions by: Seth Westphal
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+///
+
+declare module 'fill-pdf' {
+
+ export interface FormData {
+ [name: string]: string;
+ }
+
+ export function generatePdf(data: FormData, templatePath: string, extendArgs: string[], callback?: (err: Error, output: Buffer) => void): void;
+ export function generateFdf(data: FormData): Buffer;
+}
diff --git a/html-pdf/html-pdf-tests.ts b/html-pdf/html-pdf-tests.ts
new file mode 100644
index 0000000000..6a214ef231
--- /dev/null
+++ b/html-pdf/html-pdf-tests.ts
@@ -0,0 +1,13 @@
+///
+///
+
+import * as fs from 'fs';
+import * as pdf from 'html-pdf';
+
+var html = fs.readFileSync('./test/businesscard.html', 'utf8');
+var options: pdf.CreateOptions = { format: 'Letter' };
+
+pdf.create(html, options).toFile('./businesscard.pdf', (err: Error, res: pdf.FileInfo) => {
+ if (err) return console.log(err);
+ console.log(res); // { filename: '/app/businesscard.pdf' }
+});
diff --git a/html-pdf/html-pdf.d.ts b/html-pdf/html-pdf.d.ts
new file mode 100644
index 0000000000..07c4be9f71
--- /dev/null
+++ b/html-pdf/html-pdf.d.ts
@@ -0,0 +1,80 @@
+// Type definitions for html-pdf v2.1.0
+// Project: https://github.com/marcbachmann/node-html-pdf
+// Definitions by: Seth Westphal
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+///
+
+declare module 'html-pdf' {
+
+ import * as fs from 'fs';
+
+ export interface CreateOptions {
+
+ // Export options
+ directory?: string;
+
+ // Papersize Options: http://phantomjs.org/api/webpage/property/paper-size.html
+ height?: string;
+ width?: string;
+ format?: 'A3' | 'A4' | 'A5' | 'Legal' | 'Letter' | 'Tabloid';
+ orientation?: 'portrait' | 'landscape';
+
+ // Page options
+ border?: string | {
+ top?: string;
+ right?: string;
+ bottom?: string;
+ left?: string;
+ };
+
+ header?: {
+ height?: string;
+ contents?: string;
+ };
+ footer?: {
+ height?: string;
+ contents?: {
+ first?: string;
+ [page: number]: string;
+ default?: string;
+ last?: string;
+ };
+ };
+
+ // Rendering options
+ base?: string;
+
+ // Zooming option, can be used to scale images if `options.type` is not pdf
+ zoomFactor?: string;
+
+ // File options
+ type?: 'png' | 'jpeg' | 'pdf';
+ quality?: string;
+
+ // Script options
+ phantomPath?: string;
+ phantomArgs?: string[];
+ script?: string;
+ timeout?: number;
+
+ // HTTP Headers that are used for requests
+ httpHeaders?: {
+ [header: string]: string;
+ };
+
+ }
+
+ export interface FileInfo {
+ filename: string;
+ }
+
+ export interface CreateResult {
+ toBuffer(callback: (err: Error, buffer: Buffer) => void): void;
+ toFile(callback: (err: Error, res: FileInfo) => void): void;
+ toFile(filename?: string, callback?: (err: Error, res: FileInfo) => void): void;
+ toStream(callback: (err: Error, stream: fs.ReadStream) => void): void;
+ }
+
+ export function create(html: string, options?: CreateOptions): CreateResult;
+}
diff --git a/opentok/opentok-tests.ts b/opentok/opentok-tests.ts
new file mode 100644
index 0000000000..dcbb1f8aa0
--- /dev/null
+++ b/opentok/opentok-tests.ts
@@ -0,0 +1,65 @@
+///
+
+import * as OpenTok from 'opentok';
+
+const client = new OpenTok('API_KEY', 'API_SECRET');
+
+const sessionOptions: OpenTok.SessionOptions = {
+ mediaMode: 'routed',
+ archiveMode: 'manual',
+ location: '12.34.56.78',
+};
+
+client.createSession(sessionOptions, (err: Error, session: OpenTok.Session) => {
+ if (err) return console.log(err);
+ console.log(session.sessionId);
+});
+
+const tokenOptions: OpenTok.TokenOptions = {
+ role: 'subscriber',
+ data: 'name=Seth',
+ expireTime: 123456,
+};
+
+const token = client.generateToken('SESSION_ID', tokenOptions);
+
+const archiveOptions: OpenTok.ArchiveOptions = {
+ name: 'name',
+ hasAudio: true,
+ hasVideo: true,
+ outputMode: 'individual',
+};
+
+client.startArchive('SESSION_ID', archiveOptions, (err: Error, archive: OpenTok.Archive) => {
+ if (err) return console.log(err);
+ console.log(archive.id);
+});
+
+client.stopArchive('ARCHIVE_ID', (err: Error, archive: OpenTok.Archive) => {
+ if (err) return console.log(err);
+ console.log('Stopped archive:' + archive.id);
+});
+
+client.getArchive('ARCHIVE_ID', (err: Error, archive: OpenTok.Archive) => {
+ if (err) return console.log(err);
+ console.log(archive);
+});
+
+client.deleteArchive('ARCHIVE_ID', (err: Error) => {
+ if (err) return console.log(err);
+ console.log('success');
+});
+
+const listArchivesOptions: OpenTok.ListArchivesOptions = {
+ count: 10,
+ offset: 5,
+}
+
+client.listArchives(listArchivesOptions, (err: Error, archives: OpenTok.Archive[], totalCount: number) => {
+ if (err) return console.log(err);
+
+ console.log(totalCount + ' archives');
+ for (var i = 0; i < archives.length; i++) {
+ console.log(archives[i].id);
+ }
+});
diff --git a/opentok/opentok.d.ts b/opentok/opentok.d.ts
new file mode 100644
index 0000000000..d41e50b3e5
--- /dev/null
+++ b/opentok/opentok.d.ts
@@ -0,0 +1,80 @@
+// Type definitions for opentok v2.3.2
+// Project: https://github.com/opentok/opentok-node
+// Definitions by: Seth Westphal
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+declare module 'opentok' {
+
+ namespace OpenTok {
+
+ export type OutputMode = 'composed' | 'individual';
+
+ export type ArchiveStatus = 'available' | 'expired' | 'failed' | 'paused' | 'started' | 'stopped' | 'uploaded';
+
+ export interface Archive {
+ createdAt: number;
+ duration: string;
+ id: string;
+ name: string;
+ partnerId: string;
+ reason: string;
+ sessionId: string;
+ size: number;
+ status: ArchiveStatus;
+ hasAudio: boolean;
+ hasVideo: boolean;
+ outputMode: OutputMode;
+ url: string;
+ }
+
+ export interface ArchiveOptions {
+ name?: string;
+ hasAudio?: boolean;
+ hasVideo?: boolean;
+ outputMode?: OutputMode;
+ }
+
+ export type MediaMode = 'relayed' | 'routed';
+
+ export type ArchiveMode = 'manual' | 'always';
+
+ export interface SessionOptions {
+ mediaMode?: MediaMode;
+ archiveMode?: ArchiveMode;
+ location?: string;
+ }
+
+ export interface Session {
+ sessionId: string;
+ }
+
+ export type Token = string;
+
+ export type Role = 'subscriber' | 'publisher' | 'moderator';
+
+ export interface TokenOptions {
+ role?: Role;
+ data?: string;
+ expireTime?: number;
+ }
+
+ export interface ListArchivesOptions {
+ count?: number;
+ offset?: number;
+ }
+ }
+
+ class OpenTok {
+ constructor(apiKey: string, apiSecret: string);
+
+ public createSession(options: OpenTok.SessionOptions, callback: (err: Error, session: OpenTok.Session) => void): void;
+ public generateToken(sessionId: string, options: OpenTok.TokenOptions): OpenTok.Token;
+ public startArchive(sessionId: string, options: OpenTok.ArchiveOptions, callback: (err: Error, archive: OpenTok.Archive) => void): void;
+ public stopArchive(archiveId: string, callback: (err: Error, archive: OpenTok.Archive) => void): void;
+ public getArchive(archiveId: string, callback: (err: Error, archive: OpenTok.Archive) => void): void;
+ public deleteArchive(archiveId: string, callback: (err: Error) => void): void;
+ public listArchives(options: OpenTok.ListArchivesOptions, callback: (err: Error, archives: OpenTok.Archive[], totalCount: number) => void): void;
+ }
+
+ export = OpenTok;
+}
diff --git a/phone-formatter/phone-formatter-tests.ts b/phone-formatter/phone-formatter-tests.ts
new file mode 100644
index 0000000000..89b84c04a0
--- /dev/null
+++ b/phone-formatter/phone-formatter-tests.ts
@@ -0,0 +1,9 @@
+///
+
+import * as phoneFormatter from 'phone-formatter';
+
+phoneFormatter.normalize('212.555.1212');
+phoneFormatter.normalize('+1 (212) 555-1212');
+
+phoneFormatter.format('(212) 555-1212', 'NNN.NNN.NNNN');
+phoneFormatter.format('(212) 555-1212', 'NNN.NNN.NNNN', {normalize: false});
diff --git a/phone-formatter/phone-formatter.d.ts b/phone-formatter/phone-formatter.d.ts
new file mode 100644
index 0000000000..2626616657
--- /dev/null
+++ b/phone-formatter/phone-formatter.d.ts
@@ -0,0 +1,14 @@
+// Type definitions for phone-formatter v0.0.2
+// Project: https://github.com/stevekinney/node-phone-formatter
+// Definitions by: Seth Westphal
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+declare module 'phone-formatter' {
+
+ export interface FormatOptions {
+ normalize: boolean;
+ }
+
+ export function normalize(digits: string): string;
+ export function format(digits: string, format: string, options?: FormatOptions): string;
+}