diff --git a/winston-dynamodb/winston-dynamodb-tests.ts b/winston-dynamodb/winston-dynamodb-tests.ts
new file mode 100644
index 0000000000..00f5cdfa59
--- /dev/null
+++ b/winston-dynamodb/winston-dynamodb-tests.ts
@@ -0,0 +1,284 @@
+///
+///
+
+import winston = require('winston');
+require('winston-dynamodb').DynamoDB;
+
+var str: string;
+var bool: boolean;
+var num: number;
+var metadata: any;
+var obj: any = {};
+
+winston.level = 'debug';
+
+var queryOptions: winston.QueryOptions;
+var transportOptions: winston.TransportOptions;
+var loggerOptions: winston.LoggerOptions = {
+ transports: [new (winston.Transport)()],
+ rewriters: [new (winston.Transport)()],
+ exceptionHandlers: [new (winston.Transport)()],
+ handleExceptions: false
+};
+
+var options: any;
+var value: any;
+var transport: winston.TransportInstance;
+var logger: winston.LoggerInstance;
+var profiler: winston.ProfileHandler;
+
+var writeableStream: NodeJS.WritableStream;
+var readableStream: NodeJS.ReadableStream;
+
+
+var transportStatic: winston.TransportStatic = winston.Transport;
+
+
+var transportInstance: winston.TransportInstance = new (winston.Transport)(transportOptions);
+transportInstance = new (winston.Transport)();
+
+var containerInstance: winston.ContainerInstance = new (winston.Container)(loggerOptions);
+winston.loggers.options.transports = [
+ new (winston.Transport)()
+];
+winston.loggers.add('category1', {
+ console: {
+ level: 'silly',
+ colorize: 'true',
+ label: 'category one'
+ },
+ file: {
+ filename: '/path/to/some/file'
+ },
+ transports: [
+ new (winston.Transport)()
+ ]
+});
+logger = winston.loggers.get('category1');
+
+bool = containerInstance.has(str);
+logger = containerInstance.get(str, loggerOptions);
+containerInstance.close(str);
+
+transport = winston.transports.Console;
+transport = winston.transports.DailyRotateFile;
+transport = winston.transports.File;
+transport = winston.transports.Http;
+transport = winston.transports.Loggly;
+transport = winston.transports.Memory
+transport = winston.transports.Webhook;
+
+value = transport.formatQuery({});
+queryOptions = transport.normalizeQuery(queryOptions);
+value = transport.formatResults([], {});
+transport.logException(str, metadata, () => { });
+
+winston.exitOnError = bool;
+
+
+winston.log(str, str);
+winston.log(str, str, metadata);
+winston.log(str, str, metadata, metadata, metadata);
+winston.debug(str);
+winston.debug(str, metadata);
+winston.debug(str, metadata, metadata, metadata);
+winston.info(str);
+winston.info(str, metadata);
+winston.info(str, metadata, metadata, metadata);
+winston.warn(str);
+winston.warn(str, metadata);
+winston.warn(str, metadata, metadata, metadata);
+winston.error(str);
+winston.error(str, metadata);
+winston.error(str, metadata, metadata, metadata);
+
+winston.query(queryOptions, (err: Error, results: any): void => {
+
+});
+winston.query((err: Error, results: any): void => {
+
+});
+
+logger = winston.add(transport, transportOptions);
+logger = winston.remove(transport);
+logger = winston.add(transport, {filename: 'path/to/file.log'});
+
+winston.clear();
+logger = winston.profile(str, str, metadata, (err: Error, level: string, msg: string, meta: any):void => {
+
+});
+logger = winston.profile(str);
+profiler = winston.startTimer();
+winston.setLevels({});
+logger = winston.cli();
+
+winston.handleExceptions(transport);
+winston.unhandleExceptions(transport);
+
+readableStream = winston.stream(options);
+
+readableStream.on('log', function (log:any):void {
+ console.log(log);
+});
+
+
+
+logger = logger.extend(obj);
+logger.log(str, str);
+logger.log(str, str, metadata);
+logger.log(str, str, metadata, metadata, metadata);
+logger.debug(str);
+logger.debug(str, metadata);
+logger.debug(str, metadata, metadata, metadata);
+logger.info(str);
+logger.info(str, metadata);
+logger.info(str, metadata, metadata, metadata);
+logger.warn(str);
+logger.warn(str, metadata);
+logger.warn(str, metadata, metadata, metadata);
+logger.error(str);
+logger.error(str, metadata);
+logger.error(str, metadata, metadata, metadata);
+
+logger.query(queryOptions, (err: Error, results: any): void => {
+
+});
+logger.query((err: Error, results: any): void => {
+
+});
+
+readableStream = winston.stream(options);
+logger.close();
+logger.handleExceptions(transport);
+logger.unhandleExceptions(transport);
+logger = logger.add(transport, transportOptions, bool);
+logger = logger.add(transport);
+logger = logger.add(transport, {filename: 'path/to/file.log'});
+
+logger.clear();
+logger = logger.remove(transport);
+profiler = logger.startTimer();
+logger = logger.profile(str, str, metadata, (err: Error, level: string, msg: string, meta: any):void => {
+
+});
+value = logger.setLevels(value);
+logger = logger.cli();
+
+
+logger = profiler.done(str);
+logger = profiler.logger;
+profiler.start = new Date();
+
+let testRewriter : winston.MetadataRewriter;
+testRewriter = function(level: string, msg: string, meta: any) {
+ return meta;
+};
+
+logger.rewriters.push(testRewriter);
+
+/**
+ * DynamoDB-specific stuff
+ */
+let dynamoDBOptions = {
+ useEnvironment: bool,
+ level: str,
+ tableName: str,
+ accessKeyId: str,
+ secretAccessKey: str,
+ region: str,
+ dynamoDoc: bool,
+};
+
+winston.add(winston.transports.DynamoDB, dynamoDBOptions);
+
+/**
+ * New Logger instances with transports tests:
+ */
+
+var logger: winston.LoggerInstance = new (winston.Logger)({
+ transports: [
+ new (winston.transports.Console)({
+ level: str,
+ silent: bool,
+ json: bool,
+ colorize: bool,
+ timestamp: bool,
+ showLevel: bool,
+ label: str,
+ logstash: bool,
+ debugStdout: bool,
+ depth: num,
+ }),
+ new (winston.transports.DailyRotateFile)({
+ level: str,
+ silent: bool,
+ json: bool,
+ colorize: bool,
+ maxsize: num,
+ maxFiles: num,
+ maxRetries: num,
+ prettyPrint: bool,
+ timestamp: bool,
+ filename: str,
+ dirname: str,
+ datePattern: str,
+ eol: str,
+ stream: writeableStream,
+ }),
+ new (winston.transports.File)({
+ level: str,
+ silent: bool,
+ json: bool,
+ colorize: bool,
+ prettyPrint: bool,
+ timestamp: bool,
+ showLevel: bool,
+ logstash: bool,
+ rotationFormat: bool,
+ depth: num,
+ zippedArchive: bool,
+ eol: str,
+ tailable: bool,
+ maxRetries: num,
+ filename: str,
+ maxsize: num,
+ maxFiles: num,
+ stream: writeableStream,
+ }),
+ new (winston.transports.Http)({
+ level: str,
+ host: str,
+ port: num,
+ path: str,
+ auth: { username: str, password: str },
+ ssl: bool,
+ }),
+ new (winston.transports.Loggly)({
+ level: str,
+ subdomain: str,
+ auth: {},
+ inputName: str,
+ json: bool,
+ }),
+ new (winston.transports.Memory)({
+ level: str,
+ json: bool,
+ colorize: bool,
+ showLevel: bool,
+ depth: num,
+ timestamp: bool,
+ label: str,
+ }),
+ new (winston.transports.Webhook)({
+ level: str,
+ name: str,
+ host: str,
+ port: num,
+ method: str,
+ path: str,
+ auth: { username: str, password: str },
+ ssl: {ca: {}},
+ }),
+ new (winston.transports.DynamoDB)(dynamoDBOptions),
+ ]
+});
diff --git a/winston-dynamodb/winston-dynamodb.d.ts b/winston-dynamodb/winston-dynamodb.d.ts
new file mode 100644
index 0000000000..7d4c2e9544
--- /dev/null
+++ b/winston-dynamodb/winston-dynamodb.d.ts
@@ -0,0 +1,38 @@
+// Type definitions for winston-dynamodb
+// Project: https://github.com/inspiredjw/winston-dynamodb
+// Definitions by: nickiannone
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+///
+
+import * as winston from 'winston';
+import { TransportInstance } from 'winston';
+export interface DynamoDBTransportOptions {
+ useEnvironment?: boolean;
+ accessKeyId?: string;
+ secretAccessKey?: string;
+ region?: string;
+ tableName: string;
+ level: string;
+ dynamoDoc?: boolean;
+}
+export interface DynamoDBTransportInstance extends TransportInstance {
+ new (options?: DynamoDBTransportOptions): DynamoDBTransportInstance;
+}
+export declare class DynamoDB extends winston.Transport implements DynamoDBTransportInstance {
+ regions: string[];
+ name: string;
+ level: string;
+ db: any;
+ AWS: any;
+ region: string;
+ tableName: string;
+ dynamoDoc: boolean;
+ constructor(options?: DynamoDBTransportOptions);
+ log(level: any, msg: any, meta: any, callback: any): any;
+}
+declare module "winston" {
+ interface Transports {
+ DynamoDB: DynamoDB;
+ }
+}