diff --git a/node-gcm/node-gcm-tests.ts b/node-gcm/node-gcm-tests.ts
new file mode 100644
index 000000000..b184949ed
--- /dev/null
+++ b/node-gcm/node-gcm-tests.ts
@@ -0,0 +1,72 @@
+///
+
+import gcm = require('node-gcm');
+
+// Create a message
+// ... with default values
+var message = new gcm.Message();
+
+// ... or some given values
+var message = new gcm.Message({
+ collapseKey: 'demo',
+ delayWhileIdle: true,
+ timeToLive: 3,
+ data: {
+ key1: 'message1',
+ key2: 'message2'
+ }
+});
+
+// Change the message data
+// ... as key-value
+message.addData('key1','message1');
+message.addData('key2','message2');
+
+// ... or as a data object (overwrites previous data object)
+message.addData({
+ key1: 'message1',
+ key2: 'message2'
+});
+
+// Change the message variables
+message.collapseKey = 'demo';
+message.delayWhileIdle = true;
+message.timeToLive = 3;
+message.dryRun = true;
+
+// Set up the sender with you API key
+var sender = new gcm.Sender('insert Google Server API Key here');
+
+// Add the registration IDs of the devices you want to send to
+var registrationIds: string[] = [];
+registrationIds.push('regId1');
+registrationIds.push('regId2');
+
+// Send the message
+// ... trying only once
+sender.sendNoRetry(message, registrationIds, (err, result) => {
+ if (err) {
+ console.error(err);
+ } else {
+ console.log(result);
+ }
+});
+
+// ... or retrying
+sender.send(message, registrationIds, (err, result) => {
+ if (err) {
+ console.error(err);
+ } else {
+ console.log(result);
+ }
+});
+
+// ... or retrying a specific number of times (10)
+sender.send(message, registrationIds, 10, (err, result) => {
+ if (err) {
+ console.error(err);
+ } else {
+ console.log(result);
+ }
+});
+
diff --git a/node-gcm/node-gcm.d.ts b/node-gcm/node-gcm.d.ts
new file mode 100644
index 000000000..3272acac4
--- /dev/null
+++ b/node-gcm/node-gcm.d.ts
@@ -0,0 +1,62 @@
+// Type definitions for node-gcm 0.9.15
+// Project: https://www.npmjs.org/package/node-gcm
+// Definitions by: Hiroki Horiuchi
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare module "node-gcm" {
+
+ export interface IMessageOptions {
+ collapseKey?: string;
+ delayWhileIdle?: boolean;
+ timeToLive?: number;
+ dryRun?: boolean;
+ }
+
+ export class Message {
+ constructor(options?: IMessageOptions);
+ collapseKey: string;
+ delayWhileIdle: boolean;
+ timeToLive: number;
+ dryRun: boolean;
+
+ addData(key: string, value: string): void;
+ addData(data: any): void;
+ }
+
+
+ export interface ISenderOptions {
+ proxy?: any;
+ maxSockets?: number;
+ timeout?: number;
+ }
+ export interface ISenderSendOptions {
+ retries?: number;
+ backoff?: number;
+ }
+
+ export class Sender {
+ constructor(key: string, options?: ISenderOptions);
+ key: string;
+ options: ISenderOptions;
+
+ send(message: Message, registrationIds: string|string[], callback: (err: any, resJson: IResponseBody) => void): void;
+ send(message: Message, registrationIds: string|string[], retries: number, callback: (err: any, resJson: IResponseBody) => void): void;
+ send(message: Message, registrationIds: string|string[], options: ISenderSendOptions, callback: (err: any, resJson: IResponseBody) => void): void;
+ sendNoRetry(message: Message, registrationIds: string|string[], callback: (err: any, resJson: IResponseBody) => void): void;
+ }
+
+
+ export interface IResponseBody {
+ success: number;
+ failure: number;
+ canonical_ids: number;
+ multicast_id?: number;
+ results?: {
+ message_id?: string;
+ registration_id?: string;
+ error?: string;
+ }[];
+ }
+
+}
+