From f757549132e66298a5d18360cd318fda72583594 Mon Sep 17 00:00:00 2001 From: Richard Cotrina Date: Sun, 17 May 2015 20:27:59 -0500 Subject: [PATCH] Interfaz Cliente Administrador --- assets/icon.png | Bin 0 -> 7849 bytes assets/icon.svg | 11 + assets/js/components/angular/angular.js | 0 icon.png | Bin 0 -> 7849 bytes icon.svg | 11 + platforms/desktop/src/clients/admin/main.js | 93 +- .../clients/admin/static/assets/css/app.css | 6 + .../clients/admin/static/assets/img/icon.png | Bin 0 -> 7849 bytes .../clients/admin/static/assets/img/icon.svg | 11 + .../src/clients/admin/static/assets/js/app.js | 79 +- .../static/assets/js/controllers/login.js | 61 + .../admin/static/assets/js/services/auth.js | 50 + .../admin/static/assets/js/services/db.js | 42 + .../static/assets/js/services/storage.js | 20 + .../src/clients/admin/static/login.html | 8 +- src/citasalud/apps/api/serializers.py | 38 +- src/citasalud/apps/api/views.py | 13 + src/citasalud/apps/api/viewsets.py | 11 +- src/citasalud/apps/main/admin.py | 8 +- src/citasalud/apps/main/models.py | 20 +- src/citasalud/apps/main/tests.py | 3 - src/citasalud/apps/main/views.py | 3 - src/citasalud/db.sqlite3 | Bin 82944 -> 86016 bytes src/citasalud/settings/__init__.py | 12 + src/citasalud/settings/djrf.py | 5 +- src/citasalud/urls.py | 10 +- typings/node/node.d.ts | 1520 +++++++++++++++++ 27 files changed, 1905 insertions(+), 130 deletions(-) create mode 100644 assets/icon.png create mode 100644 assets/icon.svg delete mode 100644 assets/js/components/angular/angular.js create mode 100644 icon.png create mode 100644 icon.svg create mode 100644 platforms/desktop/src/clients/admin/static/assets/img/icon.png create mode 100644 platforms/desktop/src/clients/admin/static/assets/img/icon.svg create mode 100644 platforms/desktop/src/clients/admin/static/assets/js/controllers/login.js create mode 100644 platforms/desktop/src/clients/admin/static/assets/js/services/db.js create mode 100644 platforms/desktop/src/clients/admin/static/assets/js/services/storage.js create mode 100644 src/citasalud/apps/api/views.py delete mode 100644 src/citasalud/apps/main/tests.py delete mode 100644 src/citasalud/apps/main/views.py create mode 100644 typings/node/node.d.ts diff --git a/assets/icon.png b/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fa11629d55cb7f248305ed7cb5974268a0379140 GIT binary patch literal 7849 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 K`3hOfu>Syv`FAt` literal 0 HcmV?d00001 diff --git a/assets/icon.svg b/assets/icon.svg new file mode 100644 index 0000000..aa05b95 --- /dev/null +++ b/assets/icon.svg @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/assets/js/components/angular/angular.js b/assets/js/components/angular/angular.js deleted file mode 100644 index e69de29..0000000 diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fa11629d55cb7f248305ed7cb5974268a0379140 GIT binary patch literal 7849 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 K`3hOfu>Syv`FAt` literal 0 HcmV?d00001 diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..aa05b95 --- /dev/null +++ b/icon.svg @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/platforms/desktop/src/clients/admin/main.js b/platforms/desktop/src/clients/admin/main.js index e9a9bfe..107430c 100644 --- a/platforms/desktop/src/clients/admin/main.js +++ b/platforms/desktop/src/clients/admin/main.js @@ -1,50 +1,89 @@ -var app = require('app'); // Module to control application life. -var ipc = require('ipc'); +/// -var BrowserWindow = require('browser-window'); // Module to create native browser window. -var APP_DIR = 'file://' + __dirname; -var STATIC_DIR = APP_DIR + '/static/'; +var app = require('app'); // Módulo para controlar la app. +var ipc = require('ipc'); // Un intercomunicador del proceso principal (app.js) con el renderer +// var dialog = require('dialog'); // Mostrar diálogos del Sistema. +var BrowserWindow = require('browser-window'); // Módulo para crear ventanas -// Report crashes to our server. +var APP_DIR = 'file://' + __dirname; // Ruta base de la app. +var STATIC_DIR = APP_DIR + '/static/'; // Ruta base de archivos estáticos. + +var Cache = (function(){ // Caché para almacenar datos compartidos entre ventanas de la app. + var data = {}; + return { + save: function(key, value){ data[key] = value; }, /// FIXME: Si existe, sobreescribe. + get: function(key){ return data[key]; } + }; +})(); + +// Un proxy de los errores a Electron require('crash-reporter').start(); -// Keep a global reference of the window object, if you don't, the window will -// be closed automatically when the javascript object is GCed. +// Referencia global al objeto Window, para evitar que la aplicación +// sea cerrada por el GarbageCollection de Javascript. var mainWindow = null; -// Quit when all windows are closed. +// Cerrar la aplicación cuando todas las ventanas estén cerradas app.on('window-all-closed', function() { if (process.platform != 'darwin'){ app.quit(); } }); -// This method will be called when Electron has done everything -// initialization and ready for creating browser windows. +// Éste método se llamará cuando Electron acabe su incialización +// y esté listo para crear ventanas. app.on('ready', function() { - // Create the browser window. - mainWindow = new BrowserWindow({width: 640, height: 380, frame:false, show:false}); - // and load the index.html of the app. - mainWindow.loadUrl(STATIC_DIR + 'login.html'); + var SCREEN = require('screen'); + var APP_ICON_PATH = '/home/rc/webapps/citasalud/platforms/desktop/src/clients/admin/static/assets/img/icon.png'; + var SCREEN_SIZE = SCREEN.getPrimaryDisplay().workAreaSize; - mainWindow.webContents.on('did-finish-load', function() { - mainWindow.show(); - mainWindow.webContents.send('ping', 'whoooooooh!'); + var w_login_options = { // Opciones para la ventana de login. + width: 515, // Ancho + height: 365, // Alto + frame: false, // Ventana sin borde + show: false, // No mostrar ventana al crear. + resizable: false, // No se podrá cambiar el tamaño. + icon:APP_ICON_PATH // Ícono de la ventana. + } + // Crear una ventana de navegador con las opciones w_login_options + mainWindow = new BrowserWindow(w_login_options); + mainWindow.loadUrl(STATIC_DIR + 'login.html'); // Carga login.html en la ventana. + mainWindow.webContents.on('did-finish-load', function() { + mainWindow.show(); // Mostrar la ventana sólamente cuando se haya cargado login.html }); - mainWindow.openDevTools(); - - // Emitted when the window is closed. mainWindow.on('closed', function() { - // Dereference the window object, usually you would store windows - // in an array if your app supports multi windows, this is the time - // when you should delete the corresponding element. - mainWindow = null; + mainWindow = null; // Al cerrar la ventana, vacía la referencia. + }); + + ipc.on('window-evt', function(event, action) { // Intercomunicador + mainWindow[action](); // Al cerrar, maximizar o minimzar. }); - ipc.on('window-evt', function(event, action) { - mainWindow[action](); + ipc.on('login', function(event, authorized) { // Intercomunicador + if (authorized){ // Al iniciar sesión, si está autorizado + Cache.save('access_token', authorized); + mainWindow.close(); + var delta = Number.parseInt(SCREEN_SIZE.height*0.2); + + var rec_s = { + width : SCREEN_SIZE.width - delta, + height : SCREEN_SIZE.height - delta + } +// rec_s.width = 1600; +// rec_s.height = 900; + rec_s.title = 'citaSalud - Administración'; + rec_s.fullscreen = false; + console.log(SCREEN_SIZE); + console.log(rec_s); + mainWindow = new BrowserWindow(rec_s); + + } else { + // Código para manejar cuando las credenciales son incorrectas. + /// OJO: Ya existe manejo de error en la ventana interna. + dialog.showErrorBox('xD', 'WHYYYYY'); + } }); }); diff --git a/platforms/desktop/src/clients/admin/static/assets/css/app.css b/platforms/desktop/src/clients/admin/static/assets/css/app.css index cbcfb89..c665766 100644 --- a/platforms/desktop/src/clients/admin/static/assets/css/app.css +++ b/platforms/desktop/src/clients/admin/static/assets/css/app.css @@ -4,6 +4,12 @@ html, body { height:100%; margin: 0px; padding: 0px; + overflow: hidden; +} + +#internalw{ + box-sizing:border-box; + border: solid 1px rgba(200,200,200,1); } body#login md-input-container.md-icon-float > md-icon { diff --git a/platforms/desktop/src/clients/admin/static/assets/img/icon.png b/platforms/desktop/src/clients/admin/static/assets/img/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fa11629d55cb7f248305ed7cb5974268a0379140 GIT binary patch literal 7849 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 K`3hOfu>Syv`FAt` literal 0 HcmV?d00001 diff --git a/platforms/desktop/src/clients/admin/static/assets/img/icon.svg b/platforms/desktop/src/clients/admin/static/assets/img/icon.svg new file mode 100644 index 0000000..aa05b95 --- /dev/null +++ b/platforms/desktop/src/clients/admin/static/assets/img/icon.svg @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/platforms/desktop/src/clients/admin/static/assets/js/app.js b/platforms/desktop/src/clients/admin/static/assets/js/app.js index 8591cc7..cc7f3f9 100644 --- a/platforms/desktop/src/clients/admin/static/assets/js/app.js +++ b/platforms/desktop/src/clients/admin/static/assets/js/app.js @@ -1,5 +1,6 @@ - var app = angular.module('citaSalud', ['ngMaterial', 'users']) - .config(function($mdThemingProvider, $mdIconProvider){ + var app = angular.module('citaSalud', ['ngMaterial', 'users']); + + app.config(function($mdThemingProvider, $mdIconProvider){ $mdIconProvider .iconSet("action", "assets/components/svg-material-icons/svg-sprite-action.svg", 24) .iconSet("alert", "assets/components/svg-material-icons/svg-sprite-alert.svg", 24) @@ -18,59 +19,27 @@ .iconSet("toggle", "assets/components/svg-material-icons/svg-sprite-toggle.svg", 24); $mdThemingProvider.theme('default') - .primaryPalette('blue') - .accentPalette('blue-grey'); + .primaryPalette('indigo') + .accentPalette('blue'); }); -app.controller('mainCtrl', function($scope, $mdDialog){ - - var ipc = require('ipc'); - var messenger = { - send : function(event, action) { - ipc.send(event, action); - } - }; - - $scope.loginData = { - 'username' : 'admin', - 'password' : 'admin', - 'remember_pwd' : true - }; - - $scope.closeW = function(){ - messenger.send('window-evt', 'close'); - }; - $scope.minW = function(){ - messenger.send('window-evt', 'minimize'); - $scope.hide(); - }; - - $scope.doLogin = function(){ - $scope.loading(); - }; - - $scope.loading = function() { - var parentEl = angular.element(document.querySelector('#internalw')); - $mdDialog.show({ - parent : parentEl, - controller: DialogController, - template: '', - }) - .then(function(answer) { - $scope.alert = 'You said the information was "' + answer + '".'; - }, function() { - $scope.alert = 'You cancelled the dialog.'; - }); - - }; - - function DialogController(scope, $mdDialog) { - scope.closeDialog = function() { - $mdDialog.hide(); - } - } - - $scope.hide = function(){ - $mdDialog.cancel(); +//app.config(['$httpProvider', function ($httpProvider) { +// // Intercept POST requests, convert to standard form encoding +// $httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded"; +// $httpProvider.defaults.transformRequest.unshift(function (data, headersGetter) { +// var key, result = []; +// for (key in data) { +// if (data.hasOwnProperty(key)) { +// result.push(encodeURIComponent(key) + "=" + encodeURIComponent(data[key])); +// } +// } +// return result.join("&"); +// }); +//}]) + +var ipc = require('ipc'); +var messenger = { + send : function(event, action) { + ipc.send(event, action); } -}); \ No newline at end of file +}; \ No newline at end of file diff --git a/platforms/desktop/src/clients/admin/static/assets/js/controllers/login.js b/platforms/desktop/src/clients/admin/static/assets/js/controllers/login.js new file mode 100644 index 0000000..fbfee54 --- /dev/null +++ b/platforms/desktop/src/clients/admin/static/assets/js/controllers/login.js @@ -0,0 +1,61 @@ +app.controller('loginCtrl', function($scope, $mdDialog, Auth, $storage, $timeout){ + + $scope.loginData = { + 'username' : 'admin', + 'password' : 'admin', + 'remember_pwd' : true + }; + + $scope.closeW = function(){ + messenger.send('window-evt', 'close'); + }; + $scope.minW = function(){ + messenger.send('window-evt', 'minimize'); + $scope.hide(); + }; + + $scope.doLogin = function(){ + $scope.loading(); + }; + + $scope.loading = function() { + $mdDialog.show({ + clickOutsideToClose: true, + escapeToClose: true, + scope: $scope, + preserveScope: true, + template: '' + + ''+ + '' + + '  Iniciando Sesión...'+ + '', + controller : function($scope, $mdDialog){ + Auth.login($scope.loginData, function(token){ + $timeout(function() { /// simular carga servidor + messenger.send('login', token); + console.log(token); + }, 500); + }, function(error){ + $mdDialog.cancel(); + + $timeout(function() { /// simular carga servidor + console.log(Object.keys(error)); + messenger.send('login', false); + + var alert = $mdDialog.alert({ + title: 'Error', + content: 'Los credenciales ingresados son incorrectos.', + ok: 'Cerrar' + }); + + $mdDialog.show(alert) + .finally(function() { + // finally what? + }); + }, 500); + }); + } + }); + }; + +}); \ No newline at end of file diff --git a/platforms/desktop/src/clients/admin/static/assets/js/services/auth.js b/platforms/desktop/src/clients/admin/static/assets/js/services/auth.js index e69de29..832e77b 100644 --- a/platforms/desktop/src/clients/admin/static/assets/js/services/auth.js +++ b/platforms/desktop/src/clients/admin/static/assets/js/services/auth.js @@ -0,0 +1,50 @@ +app.factory('Auth', function($http, $q, $window, $storage){ + var getTokenURL = 'http://localhost:8000/api-auth-token/'; + var accessToken; + + var doLogin = function(loginData){ + var deferred = $q.defer(); + + var req = { + method: 'POST', + url: getTokenURL, + data: loginData + }; + + $http(req).then(function(result){ + accessToken = result.data.token; + deferred.resolve(accessToken); + + }, function(error){ + deferred.reject(error); + }); + + return deferred.promise; + + } + + var login = function(credentials, success_handler, error_handler){ + doLogin(credentials).then(function (response_token){ + $storage.set('accessToken', response_token); + return success_handler(response_token); + }, function (e){ + if (typeof error_handler == 'function'){ + if (e.status == 401 || e.status == 400){ + return error_handler({ + invalid : true + }); + } else { + return e; + } + } + }); + }; + + return { + login : login, + getToken : function(){ + return $storage.get('accessToken'); + } + } + +}) diff --git a/platforms/desktop/src/clients/admin/static/assets/js/services/db.js b/platforms/desktop/src/clients/admin/static/assets/js/services/db.js new file mode 100644 index 0000000..311ad4e --- /dev/null +++ b/platforms/desktop/src/clients/admin/static/assets/js/services/db.js @@ -0,0 +1,42 @@ +app.factory('$db', function($http, $q, Auth){ + var baseURL = 'http://localhost:8000/api/'; + + var token_header = function(){ + return { 'Authorization' : 'Token ' + Auth.getToken() }; + }; + var Request = { + get : function(url, params){ + var userInfo; + + var deferred = $q.defer(); + + var req = { + method: 'GET', + headers : token_header, + url: baseURL + url + } + if (params){ + req['params'] = params + } + + $http(req).then(function(result){ + userInfo = result.data; + deferred.resolve(userInfo); + + }, function(error){ + console.log(error) + deferred.reject(error); + }); + + return deferred.promise; + } + }; + + var userProfile = function(user_id){ + r = Request.get('user/') + } + + return { + profile : userProfile + } +}); \ No newline at end of file diff --git a/platforms/desktop/src/clients/admin/static/assets/js/services/storage.js b/platforms/desktop/src/clients/admin/static/assets/js/services/storage.js new file mode 100644 index 0000000..5024f05 --- /dev/null +++ b/platforms/desktop/src/clients/admin/static/assets/js/services/storage.js @@ -0,0 +1,20 @@ +app.factory('$storage', ['$window', function($window) { + return { + set: function(key, value) { + $window.localStorage[key] = value; + }, + get: function(key, defaultValue) { + return $window.localStorage[key] || defaultValue; + }, + setObject: function(key, value) { + $window.localStorage[key] = JSON.stringify(value); + }, + getObject: function(key) { + var obj = $window.localStorage[key] + return obj?JSON.parse(obj || '{}'):false; + }, + clear: function(){ + $window.localStorage.clear(); + } + }; +}]); \ No newline at end of file diff --git a/platforms/desktop/src/clients/admin/static/login.html b/platforms/desktop/src/clients/admin/static/login.html index c58fb27..becde44 100644 --- a/platforms/desktop/src/clients/admin/static/login.html +++ b/platforms/desktop/src/clients/admin/static/login.html @@ -12,7 +12,7 @@ - +

@@ -28,7 +28,7 @@

-
+
@@ -59,6 +59,10 @@

+ + + + diff --git a/src/citasalud/apps/api/serializers.py b/src/citasalud/apps/api/serializers.py index 5e24c13..7f4e2c8 100644 --- a/src/citasalud/apps/api/serializers.py +++ b/src/citasalud/apps/api/serializers.py @@ -1,35 +1,35 @@ # coding=utf-8 from rest_framework import serializers -from citasalud.apps.main.models import PerfilMedico, Especialidad +from citasalud.apps.main.models import PerfilUsuario, Medico, Especialidad +from django.contrib.auth.models import User -class DynamicFieldsModelSerializer(serializers.ModelSerializer): - """ - A ModelSerializer that takes an additional `fields` argument that - controls which fields should be displayed. - """ +class PerfilUsuarioSerializer(serializers.ModelSerializer): + """ Serializador para Perfil de Usuario """ + + class Meta: + model = PerfilUsuario - def __init__(self, *args, **kwargs): - # Don't pass the 'fields' arg up to the superclass - fields = kwargs.pop('fields', None) - # Instantiate the superclass normally - super(DynamicFieldsModelSerializer, self).__init__(*args, **kwargs) +class UsuarioSerializer(serializers.ModelSerializer): + profile = PerfilUsuarioSerializer() - if fields is not None: - # Drop any fields that are not specified in the `fields` argument. - allowed = set(fields) - existing = set(self.fields.keys()) - for field_name in existing - allowed: - self.fields.pop(field_name) + class Meta: + model = User + fields = ('username', 'email', 'profile', 'is_active') + def create(self, validated_data): + profile_data = validated_data.pop('profile') + user = User.objects.create(**validated_data) + Profile.objects.create(user=user, **profile_data) + return user -class MedicoSerializer(DynamicFieldsModelSerializer): +class MedicoSerializer(serializers.ModelSerializer): """ Serializador para Médico """ class Meta: - model = PerfilMedico + model = Medico # extra_kwargs = {'password': {'write_only': True}} diff --git a/src/citasalud/apps/api/views.py b/src/citasalud/apps/api/views.py new file mode 100644 index 0000000..6bf127f --- /dev/null +++ b/src/citasalud/apps/api/views.py @@ -0,0 +1,13 @@ +# coding=utf-8 +from rest_framework.views import APIView +from rest_framework.response import Response +from rest_framework import authentication, permissions +from .serializers import UsuarioSerializer + +class CurrentUserView(APIView): + authentication_classes = (authentication.TokenAuthentication,) + permission_classes = (permissions.IsAuthenticated,) + + def get(self, request): + serializer = UsuarioSerializer(request.user) + return Response(serializer.data) \ No newline at end of file diff --git a/src/citasalud/apps/api/viewsets.py b/src/citasalud/apps/api/viewsets.py index 2755c81..9e796d5 100644 --- a/src/citasalud/apps/api/viewsets.py +++ b/src/citasalud/apps/api/viewsets.py @@ -1,11 +1,16 @@ -from ..main.models import PerfilMedico, Especialidad -from .serializers import MedicoSerializer, EspecialidadSerializer +from ..main.models import Medico, Especialidad, User +from .serializers import UsuarioSerializer, MedicoSerializer, EspecialidadSerializer from rest_framework import viewsets +class UsuarioViewSet(viewsets.ModelViewSet): + serializer_class = UsuarioSerializer + queryset = User.objects.all() + + class MedicoViewSet(viewsets.ModelViewSet): serializer_class = MedicoSerializer - queryset = PerfilMedico.objects.all() + queryset = Medico.objects.all() class EspecialidadViewSet(viewsets.ModelViewSet): diff --git a/src/citasalud/apps/main/admin.py b/src/citasalud/apps/main/admin.py index be4f8a5..ee2b553 100644 --- a/src/citasalud/apps/main/admin.py +++ b/src/citasalud/apps/main/admin.py @@ -1,7 +1,7 @@ # coding=utf-8 from django.contrib import admin -from .models import PerfilUsuario, Especialidad, CitaMedica, PerfilMedico, PerfilPaciente, PerfilPersonal +from .models import PerfilUsuario, Especialidad, CitaMedica, Medico, Paciente, Personal # from django.contrib.auth.admin import UserAdmin @@ -13,9 +13,9 @@ # ) # ordering = [] admin.site.register(PerfilUsuario) -admin.site.register(PerfilPaciente) -admin.site.register(PerfilPersonal) -admin.site.register(PerfilMedico) +admin.site.register(Paciente) +admin.site.register(Personal) +admin.site.register(Medico) admin.site.register(CitaMedica) admin.site.register(Especialidad) # admin.site.register(Usuario, UsuarioAdmin) diff --git a/src/citasalud/apps/main/models.py b/src/citasalud/apps/main/models.py index 3dd9f64..438e356 100644 --- a/src/citasalud/apps/main/models.py +++ b/src/citasalud/apps/main/models.py @@ -6,7 +6,7 @@ class PerfilUsuario(models.Model): - usuario = models.OneToOneField(User) + usuario = models.OneToOneField(User, related_name="profile", null=True, blank=True) activado = models.BooleanField("Usuario activado") dni = DNIField("DNI", unique=True) @@ -41,25 +41,25 @@ def __unicode__(self): # return True -class PerfilPaciente(models.Model): +class Paciente(models.Model): usuario = models.OneToOneField('PerfilUsuario') nss = PrimaryNumberField("NSS", digits=9) def __unicode__(self): - return "%s, %s (%s)" % (self.apellidos, self.nombre, self.nss) + return "%s (%s)" % (self.usuario.get_short_name(), self.nss) class Meta: verbose_name = "Paciente" verbose_name_plural = "Pacientes" -class PerfilPersonal(models.Model): +class Personal(models.Model): usuario = models.OneToOneField('PerfilUsuario') nregistropersonal = PrimaryNumberField("N° Registro personal") departamento = models.CharField("Departamento", max_length=32) -class PerfilMedico(PerfilPersonal): +class Medico(Personal): ncolegiado = PrimaryNumberField("N° Colegiado") especialidades = models.ManyToManyField("Especialidad", blank=True, related_name='especialidades') @@ -68,7 +68,7 @@ def tipo(self): return TIPO_MEDICO.ESPECIALISTA if self.especialidades else TIPO_MEDICO.GENERAL def __unicode__(self): - return "%s, %s (%s)" % (self.apellidos, self.nombre, self.ncolegiado) + return "%s (%s)" % (self.usuario.get_short_name(), self.ncolegiado) class Meta: verbose_name = "Médico" @@ -78,7 +78,7 @@ class Meta: class Especialidad(models.Model): id = models.CharField("ID Especialidad", max_length=5, primary_key=True) - nombre = models.CharField("Nombre", max_length=32) + nombre = models.CharField("Nombre", max_length=64) def __unicode__(self): return "%s - %s" % (self.id, self.nombre) @@ -91,7 +91,7 @@ class Meta: class CitaMedica(models.Model): historia = models.ForeignKey("HistoriaClinica") - medico = models.ForeignKey("PerfilMedico") + medico = models.ForeignKey("Medico") horario = models.DateTimeField("Hora de cita") asistio = models.BooleanField() @@ -99,6 +99,6 @@ class Meta: verbose_name = u"Cita médica" verbose_name_plural = "Citas médicas" - + class HistoriaClinica(models.Model): - paciente = models.OneToOneField("PerfilPaciente") \ No newline at end of file + paciente = models.OneToOneField("Paciente") \ No newline at end of file diff --git a/src/citasalud/apps/main/tests.py b/src/citasalud/apps/main/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/src/citasalud/apps/main/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/src/citasalud/apps/main/views.py b/src/citasalud/apps/main/views.py deleted file mode 100644 index 91ea44a..0000000 --- a/src/citasalud/apps/main/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/src/citasalud/db.sqlite3 b/src/citasalud/db.sqlite3 index e336001fbf69264b04d97544ca013dfe0b0e512b..a32eee678fdd50b4c98a49ebc66a82f0ec3a10b1 100644 GIT binary patch delta 6172 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 diff --git a/src/citasalud/settings/__init__.py b/src/citasalud/settings/__init__.py index 3174739..66b9c25 100644 --- a/src/citasalud/settings/__init__.py +++ b/src/citasalud/settings/__init__.py @@ -39,6 +39,7 @@ 'django.contrib.staticfiles', 'localflavor', 'rest_framework', + 'rest_framework.authtoken', 'citasalud.apps.main', ) @@ -86,6 +87,17 @@ } } +#DATABASES = { +# 'default': { +# 'ENGINE': 'django.db.backends.mysql', +# 'NAME': 'citasalud', +# 'USER': 'root', +# 'PASSWORD': 'LU7412369', +# 'HOST': 'dev', +# 'PORT': '', +# } +#} + # Internationalization # https://docs.djangoproject.com/en/1.7/topics/i18n/ diff --git a/src/citasalud/settings/djrf.py b/src/citasalud/settings/djrf.py index 9b048c6..686549a 100644 --- a/src/citasalud/settings/djrf.py +++ b/src/citasalud/settings/djrf.py @@ -3,5 +3,8 @@ # or allow read-only access for unauthenticated users. 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' - ] + ], + 'DEFAULT_AUTHENTICATION_CLASSES': ( + 'rest_framework.authentication.TokenAuthentication', + ) } diff --git a/src/citasalud/urls.py b/src/citasalud/urls.py index fb5f374..1ccc1bb 100644 --- a/src/citasalud/urls.py +++ b/src/citasalud/urls.py @@ -1,22 +1,26 @@ from django.conf.urls import include, url from django.contrib import admin -from citasalud.apps.api.viewsets import MedicoViewSet, EspecialidadViewSet +from citasalud.apps.api.viewsets import MedicoViewSet, EspecialidadViewSet, UsuarioViewSet from rest_framework.routers import DefaultRouter - +from rest_framework.authtoken import views +from citasalud.apps.api.views import CurrentUserView admin.autodiscover() router = DefaultRouter() router.register(r'medicos', MedicoViewSet) router.register(r'especialidades', EspecialidadViewSet) +router.register(r'usuarios', UsuarioViewSet) urlpatterns = [ # Examples: # url(r'^$', 'citasalud.views.home', name='home'), # url(r'^blog/', include('blog.urls')), - url(r'^', include(router.urls)), + url(r'^api/currentuser', CurrentUserView.as_view() ), + url(r'^api/', include(router.urls)), url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), + url(r'^api-auth-token/', views.obtain_auth_token), url(r'^admin/', include(admin.site.urls)), ] diff --git a/typings/node/node.d.ts b/typings/node/node.d.ts new file mode 100644 index 0000000..2543cca --- /dev/null +++ b/typings/node/node.d.ts @@ -0,0 +1,1520 @@ +// Type definitions for Node.js v0.12.0 +// Project: http://nodejs.org/ +// Definitions by: Microsoft TypeScript , DefinitelyTyped +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/************************************************ +* * +* Node.js v0.12.0 API * +* * +************************************************/ + +/************************************************ +* * +* GLOBAL * +* * +************************************************/ +declare var process: NodeJS.Process; +declare var global: NodeJS.Global; + +declare var __filename: string; +declare var __dirname: string; + +declare function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer; +declare function clearTimeout(timeoutId: NodeJS.Timer): void; +declare function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer; +declare function clearInterval(intervalId: NodeJS.Timer): void; +declare function setImmediate(callback: (...args: any[]) => void, ...args: any[]): any; +declare function clearImmediate(immediateId: any): void; + +declare var require: { + (id: string): any; + resolve(id:string): string; + cache: any; + extensions: any; + main: any; +}; + +declare var module: { + exports: any; + require(id: string): any; + id: string; + filename: string; + loaded: boolean; + parent: any; + children: any[]; +}; + +// Same as module.exports +declare var exports: any; +declare var SlowBuffer: { + new (str: string, encoding?: string): Buffer; + new (size: number): Buffer; + new (size: Uint8Array): Buffer; + new (array: any[]): Buffer; + prototype: Buffer; + isBuffer(obj: any): boolean; + byteLength(string: string, encoding?: string): number; + concat(list: Buffer[], totalLength?: number): Buffer; +}; + + +// Buffer class +interface Buffer extends NodeBuffer {} +declare var Buffer: { + new (str: string, encoding?: string): Buffer; + new (size: number): Buffer; + new (size: Uint8Array): Buffer; + new (array: any[]): Buffer; + prototype: Buffer; + isBuffer(obj: any): boolean; + byteLength(string: string, encoding?: string): number; + concat(list: Buffer[], totalLength?: number): Buffer; +}; + +/************************************************ +* * +* GLOBAL INTERFACES * +* * +************************************************/ +declare module NodeJS { + export interface ErrnoException extends Error { + errno?: number; + code?: string; + path?: string; + syscall?: string; + } + + export interface EventEmitter { + addListener(event: string, listener: Function): EventEmitter; + on(event: string, listener: Function): EventEmitter; + once(event: string, listener: Function): EventEmitter; + removeListener(event: string, listener: Function): EventEmitter; + removeAllListeners(event?: string): EventEmitter; + setMaxListeners(n: number): void; + listeners(event: string): Function[]; + emit(event: string, ...args: any[]): boolean; + } + + export interface ReadableStream extends EventEmitter { + readable: boolean; + read(size?: number): string|Buffer; + setEncoding(encoding: string): void; + pause(): void; + resume(): void; + pipe(destination: T, options?: { end?: boolean; }): T; + unpipe(destination?: T): void; + unshift(chunk: string): void; + unshift(chunk: Buffer): void; + wrap(oldStream: ReadableStream): ReadableStream; + } + + export interface WritableStream extends EventEmitter { + writable: boolean; + write(buffer: Buffer, cb?: Function): boolean; + write(str: string, cb?: Function): boolean; + write(str: string, encoding?: string, cb?: Function): boolean; + end(): void; + end(buffer: Buffer, cb?: Function): void; + end(str: string, cb?: Function): void; + end(str: string, encoding?: string, cb?: Function): void; + } + + export interface ReadWriteStream extends ReadableStream, WritableStream {} + + export interface Process extends EventEmitter { + stdout: WritableStream; + stderr: WritableStream; + stdin: ReadableStream; + argv: string[]; + execPath: string; + abort(): void; + chdir(directory: string): void; + cwd(): string; + env: any; + exit(code?: number): void; + getgid(): number; + setgid(id: number): void; + setgid(id: string): void; + getuid(): number; + setuid(id: number): void; + setuid(id: string): void; + version: string; + versions: { + http_parser: string; + node: string; + v8: string; + ares: string; + uv: string; + zlib: string; + openssl: string; + }; + config: { + target_defaults: { + cflags: any[]; + default_configuration: string; + defines: string[]; + include_dirs: string[]; + libraries: string[]; + }; + variables: { + clang: number; + host_arch: string; + node_install_npm: boolean; + node_install_waf: boolean; + node_prefix: string; + node_shared_openssl: boolean; + node_shared_v8: boolean; + node_shared_zlib: boolean; + node_use_dtrace: boolean; + node_use_etw: boolean; + node_use_openssl: boolean; + target_arch: string; + v8_no_strict_aliasing: number; + v8_use_snapshot: boolean; + visibility: string; + }; + }; + kill(pid: number, signal?: string): void; + pid: number; + title: string; + arch: string; + platform: string; + memoryUsage(): { rss: number; heapTotal: number; heapUsed: number; }; + nextTick(callback: Function): void; + umask(mask?: number): number; + uptime(): number; + hrtime(time?:number[]): number[]; + + // Worker + send?(message: any, sendHandle?: any): void; + } + + export interface Global { + Array: typeof Array; + ArrayBuffer: typeof ArrayBuffer; + Boolean: typeof Boolean; + Buffer: typeof Buffer; + DataView: typeof DataView; + Date: typeof Date; + Error: typeof Error; + EvalError: typeof EvalError; + Float32Array: typeof Float32Array; + Float64Array: typeof Float64Array; + Function: typeof Function; + GLOBAL: Global; + Infinity: typeof Infinity; + Int16Array: typeof Int16Array; + Int32Array: typeof Int32Array; + Int8Array: typeof Int8Array; + Intl: typeof Intl; + JSON: typeof JSON; + Map: typeof Map; + Math: typeof Math; + NaN: typeof NaN; + Number: typeof Number; + Object: typeof Object; + Promise: Function; + RangeError: typeof RangeError; + ReferenceError: typeof ReferenceError; + RegExp: typeof RegExp; + Set: typeof Set; + String: typeof String; + Symbol: Function; + SyntaxError: typeof SyntaxError; + TypeError: typeof TypeError; + URIError: typeof URIError; + Uint16Array: typeof Uint16Array; + Uint32Array: typeof Uint32Array; + Uint8Array: typeof Uint8Array; + Uint8ClampedArray: Function; + WeakMap: typeof WeakMap; + WeakSet: Function; + clearImmediate: (immediateId: any) => void; + clearInterval: (intervalId: NodeJS.Timer) => void; + clearTimeout: (timeoutId: NodeJS.Timer) => void; + console: typeof console; + decodeURI: typeof decodeURI; + decodeURIComponent: typeof decodeURIComponent; + encodeURI: typeof encodeURI; + encodeURIComponent: typeof encodeURIComponent; + escape: (str: string) => string; + eval: typeof eval; + global: Global; + isFinite: typeof isFinite; + isNaN: typeof isNaN; + parseFloat: typeof parseFloat; + parseInt: typeof parseInt; + process: Process; + root: Global; + setImmediate: (callback: (...args: any[]) => void, ...args: any[]) => any; + setInterval: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => NodeJS.Timer; + setTimeout: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => NodeJS.Timer; + undefined: typeof undefined; + unescape: (str: string) => string; + gc: () => void; + } + + export interface Timer { + ref() : void; + unref() : void; + } +} + +/** + * @deprecated + */ +interface NodeBuffer { + [index: number]: number; + write(string: string, offset?: number, length?: number, encoding?: string): number; + toString(encoding?: string, start?: number, end?: number): string; + toJSON(): any; + length: number; + copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; + slice(start?: number, end?: number): Buffer; + readUInt8(offset: number, noAsset?: boolean): number; + readUInt16LE(offset: number, noAssert?: boolean): number; + readUInt16BE(offset: number, noAssert?: boolean): number; + readUInt32LE(offset: number, noAssert?: boolean): number; + readUInt32BE(offset: number, noAssert?: boolean): number; + readInt8(offset: number, noAssert?: boolean): number; + readInt16LE(offset: number, noAssert?: boolean): number; + readInt16BE(offset: number, noAssert?: boolean): number; + readInt32LE(offset: number, noAssert?: boolean): number; + readInt32BE(offset: number, noAssert?: boolean): number; + readFloatLE(offset: number, noAssert?: boolean): number; + readFloatBE(offset: number, noAssert?: boolean): number; + readDoubleLE(offset: number, noAssert?: boolean): number; + readDoubleBE(offset: number, noAssert?: boolean): number; + writeUInt8(value: number, offset: number, noAssert?: boolean): void; + writeUInt16LE(value: number, offset: number, noAssert?: boolean): void; + writeUInt16BE(value: number, offset: number, noAssert?: boolean): void; + writeUInt32LE(value: number, offset: number, noAssert?: boolean): void; + writeUInt32BE(value: number, offset: number, noAssert?: boolean): void; + writeInt8(value: number, offset: number, noAssert?: boolean): void; + writeInt16LE(value: number, offset: number, noAssert?: boolean): void; + writeInt16BE(value: number, offset: number, noAssert?: boolean): void; + writeInt32LE(value: number, offset: number, noAssert?: boolean): void; + writeInt32BE(value: number, offset: number, noAssert?: boolean): void; + writeFloatLE(value: number, offset: number, noAssert?: boolean): void; + writeFloatBE(value: number, offset: number, noAssert?: boolean): void; + writeDoubleLE(value: number, offset: number, noAssert?: boolean): void; + writeDoubleBE(value: number, offset: number, noAssert?: boolean): void; + fill(value: any, offset?: number, end?: number): void; +} + +/************************************************ +* * +* MODULES * +* * +************************************************/ +declare module "buffer" { + export var INSPECT_MAX_BYTES: number; +} + +declare module "querystring" { + export function stringify(obj: any, sep?: string, eq?: string): string; + export function parse(str: string, sep?: string, eq?: string, options?: { maxKeys?: number; }): any; + export function escape(str: string): string; + export function unescape(str: string): string; +} + +declare module "events" { + export class EventEmitter implements NodeJS.EventEmitter { + static listenerCount(emitter: EventEmitter, event: string): number; + + addListener(event: string, listener: Function): EventEmitter; + on(event: string, listener: Function): EventEmitter; + once(event: string, listener: Function): EventEmitter; + removeListener(event: string, listener: Function): EventEmitter; + removeAllListeners(event?: string): EventEmitter; + setMaxListeners(n: number): void; + listeners(event: string): Function[]; + emit(event: string, ...args: any[]): boolean; + } +} + +declare module "http" { + import events = require("events"); + import net = require("net"); + import stream = require("stream"); + + export interface Server extends events.EventEmitter { + listen(port: number, hostname?: string, backlog?: number, callback?: Function): Server; + listen(port: number, hostname?: string, callback?: Function): Server; + listen(path: string, callback?: Function): Server; + listen(handle: any, listeningListener?: Function): Server; + close(cb?: any): Server; + address(): { port: number; family: string; address: string; }; + maxHeadersCount: number; + } + /** + * @deprecated Use IncomingMessage + */ + export interface ServerRequest extends IncomingMessage { + connection: net.Socket; + } + export interface ServerResponse extends events.EventEmitter, stream.Writable { + // Extended base methods + write(buffer: Buffer): boolean; + write(buffer: Buffer, cb?: Function): boolean; + write(str: string, cb?: Function): boolean; + write(str: string, encoding?: string, cb?: Function): boolean; + write(str: string, encoding?: string, fd?: string): boolean; + + writeContinue(): void; + writeHead(statusCode: number, reasonPhrase?: string, headers?: any): void; + writeHead(statusCode: number, headers?: any): void; + statusCode: number; + setHeader(name: string, value: string): void; + sendDate: boolean; + getHeader(name: string): string; + removeHeader(name: string): void; + write(chunk: any, encoding?: string): any; + addTrailers(headers: any): void; + + // Extended base methods + end(): void; + end(buffer: Buffer, cb?: Function): void; + end(str: string, cb?: Function): void; + end(str: string, encoding?: string, cb?: Function): void; + end(data?: any, encoding?: string): void; + } + export interface ClientRequest extends events.EventEmitter, stream.Writable { + // Extended base methods + write(buffer: Buffer): boolean; + write(buffer: Buffer, cb?: Function): boolean; + write(str: string, cb?: Function): boolean; + write(str: string, encoding?: string, cb?: Function): boolean; + write(str: string, encoding?: string, fd?: string): boolean; + + write(chunk: any, encoding?: string): void; + abort(): void; + setTimeout(timeout: number, callback?: Function): void; + setNoDelay(noDelay?: boolean): void; + setSocketKeepAlive(enable?: boolean, initialDelay?: number): void; + + // Extended base methods + end(): void; + end(buffer: Buffer, cb?: Function): void; + end(str: string, cb?: Function): void; + end(str: string, encoding?: string, cb?: Function): void; + end(data?: any, encoding?: string): void; + } + export interface IncomingMessage extends events.EventEmitter, stream.Readable { + httpVersion: string; + headers: any; + rawHeaders: string[]; + trailers: any; + rawTrailers: any; + setTimeout(msecs: number, callback: Function): NodeJS.Timer; + /** + * Only valid for request obtained from http.Server. + */ + method?: string; + /** + * Only valid for request obtained from http.Server. + */ + url?: string; + /** + * Only valid for response obtained from http.ClientRequest. + */ + statusCode?: number; + /** + * Only valid for response obtained from http.ClientRequest. + */ + statusMessage?: string; + socket: net.Socket; + } + /** + * @deprecated Use IncomingMessage + */ + export interface ClientResponse extends IncomingMessage { } + + export interface AgentOptions { + /** + * Keep sockets around in a pool to be used by other requests in the future. Default = false + */ + keepAlive?: boolean; + /** + * When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000. + * Only relevant if keepAlive is set to true. + */ + keepAliveMsecs?: number; + /** + * Maximum number of sockets to allow per host. Default for Node 0.10 is 5, default for Node 0.12 is Infinity + */ + maxSockets?: number; + /** + * Maximum number of sockets to leave open in a free state. Only relevant if keepAlive is set to true. Default = 256. + */ + maxFreeSockets?: number; + } + + export class Agent { + maxSockets: number; + sockets: any; + requests: any; + + constructor(opts?: AgentOptions); + + /** + * Destroy any sockets that are currently in use by the agent. + * It is usually not necessary to do this. However, if you are using an agent with KeepAlive enabled, + * then it is best to explicitly shut down the agent when you know that it will no longer be used. Otherwise, + * sockets may hang open for quite a long time before the server terminates them. + */ + destroy(): void; + } + + export var STATUS_CODES: { + [errorCode: number]: string; + [errorCode: string]: string; + }; + export function createServer(requestListener?: (request: IncomingMessage, response: ServerResponse) =>void ): Server; + export function createClient(port?: number, host?: string): any; + export function request(options: any, callback?: (res: IncomingMessage) => void): ClientRequest; + export function get(options: any, callback?: (res: IncomingMessage) => void): ClientRequest; + export var globalAgent: Agent; +} + +declare module "cluster" { + import child = require("child_process"); + import events = require("events"); + + export interface ClusterSettings { + exec?: string; + args?: string[]; + silent?: boolean; + } + + export class Worker extends events.EventEmitter { + id: string; + process: child.ChildProcess; + suicide: boolean; + send(message: any, sendHandle?: any): void; + kill(signal?: string): void; + destroy(signal?: string): void; + disconnect(): void; + } + + export var settings: ClusterSettings; + export var isMaster: boolean; + export var isWorker: boolean; + export function setupMaster(settings?: ClusterSettings): void; + export function fork(env?: any): Worker; + export function disconnect(callback?: Function): void; + export var worker: Worker; + export var workers: Worker[]; + + // Event emitter + export function addListener(event: string, listener: Function): void; + export function on(event: string, listener: Function): any; + export function once(event: string, listener: Function): void; + export function removeListener(event: string, listener: Function): void; + export function removeAllListeners(event?: string): void; + export function setMaxListeners(n: number): void; + export function listeners(event: string): Function[]; + export function emit(event: string, ...args: any[]): boolean; +} + +declare module "zlib" { + import stream = require("stream"); + export interface ZlibOptions { chunkSize?: number; windowBits?: number; level?: number; memLevel?: number; strategy?: number; dictionary?: any; } + + export interface Gzip extends stream.Transform { } + export interface Gunzip extends stream.Transform { } + export interface Deflate extends stream.Transform { } + export interface Inflate extends stream.Transform { } + export interface DeflateRaw extends stream.Transform { } + export interface InflateRaw extends stream.Transform { } + export interface Unzip extends stream.Transform { } + + export function createGzip(options?: ZlibOptions): Gzip; + export function createGunzip(options?: ZlibOptions): Gunzip; + export function createDeflate(options?: ZlibOptions): Deflate; + export function createInflate(options?: ZlibOptions): Inflate; + export function createDeflateRaw(options?: ZlibOptions): DeflateRaw; + export function createInflateRaw(options?: ZlibOptions): InflateRaw; + export function createUnzip(options?: ZlibOptions): Unzip; + + export function deflate(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function deflateRaw(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function gzip(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function gunzip(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function inflate(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function inflateRaw(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function unzip(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + + // Constants + export var Z_NO_FLUSH: number; + export var Z_PARTIAL_FLUSH: number; + export var Z_SYNC_FLUSH: number; + export var Z_FULL_FLUSH: number; + export var Z_FINISH: number; + export var Z_BLOCK: number; + export var Z_TREES: number; + export var Z_OK: number; + export var Z_STREAM_END: number; + export var Z_NEED_DICT: number; + export var Z_ERRNO: number; + export var Z_STREAM_ERROR: number; + export var Z_DATA_ERROR: number; + export var Z_MEM_ERROR: number; + export var Z_BUF_ERROR: number; + export var Z_VERSION_ERROR: number; + export var Z_NO_COMPRESSION: number; + export var Z_BEST_SPEED: number; + export var Z_BEST_COMPRESSION: number; + export var Z_DEFAULT_COMPRESSION: number; + export var Z_FILTERED: number; + export var Z_HUFFMAN_ONLY: number; + export var Z_RLE: number; + export var Z_FIXED: number; + export var Z_DEFAULT_STRATEGY: number; + export var Z_BINARY: number; + export var Z_TEXT: number; + export var Z_ASCII: number; + export var Z_UNKNOWN: number; + export var Z_DEFLATED: number; + export var Z_NULL: number; +} + +declare module "os" { + export function tmpdir(): string; + export function hostname(): string; + export function type(): string; + export function platform(): string; + export function arch(): string; + export function release(): string; + export function uptime(): number; + export function loadavg(): number[]; + export function totalmem(): number; + export function freemem(): number; + export function cpus(): { model: string; speed: number; times: { user: number; nice: number; sys: number; idle: number; irq: number; }; }[]; + export function networkInterfaces(): any; + export var EOL: string; +} + +declare module "https" { + import tls = require("tls"); + import events = require("events"); + import http = require("http"); + + export interface ServerOptions { + pfx?: any; + key?: any; + passphrase?: string; + cert?: any; + ca?: any; + crl?: any; + ciphers?: string; + honorCipherOrder?: boolean; + requestCert?: boolean; + rejectUnauthorized?: boolean; + NPNProtocols?: any; + SNICallback?: (servername: string) => any; + } + + export interface RequestOptions { + host?: string; + hostname?: string; + port?: number; + path?: string; + method?: string; + headers?: any; + auth?: string; + agent?: any; + pfx?: any; + key?: any; + passphrase?: string; + cert?: any; + ca?: any; + ciphers?: string; + rejectUnauthorized?: boolean; + } + + export interface Agent { + maxSockets: number; + sockets: any; + requests: any; + } + export var Agent: { + new (options?: RequestOptions): Agent; + }; + export interface Server extends tls.Server { } + export function createServer(options: ServerOptions, requestListener?: Function): Server; + export function request(options: RequestOptions, callback?: (res: http.IncomingMessage) =>void ): http.ClientRequest; + export function get(options: RequestOptions, callback?: (res: http.IncomingMessage) =>void ): http.ClientRequest; + export var globalAgent: Agent; +} + +declare module "punycode" { + export function decode(string: string): string; + export function encode(string: string): string; + export function toUnicode(domain: string): string; + export function toASCII(domain: string): string; + export var ucs2: ucs2; + interface ucs2 { + decode(string: string): string; + encode(codePoints: number[]): string; + } + export var version: any; +} + +declare module "repl" { + import stream = require("stream"); + import events = require("events"); + + export interface ReplOptions { + prompt?: string; + input?: NodeJS.ReadableStream; + output?: NodeJS.WritableStream; + terminal?: boolean; + eval?: Function; + useColors?: boolean; + useGlobal?: boolean; + ignoreUndefined?: boolean; + writer?: Function; + } + export function start(options: ReplOptions): events.EventEmitter; +} + +declare module "readline" { + import events = require("events"); + import stream = require("stream"); + + export interface ReadLine extends events.EventEmitter { + setPrompt(prompt: string, length: number): void; + prompt(preserveCursor?: boolean): void; + question(query: string, callback: Function): void; + pause(): void; + resume(): void; + close(): void; + write(data: any, key?: any): void; + } + export interface ReadLineOptions { + input: NodeJS.ReadableStream; + output: NodeJS.WritableStream; + completer?: Function; + terminal?: boolean; + } + export function createInterface(options: ReadLineOptions): ReadLine; +} + +declare module "vm" { + export interface Context { } + export interface Script { + runInThisContext(): void; + runInNewContext(sandbox?: Context): void; + } + export function runInThisContext(code: string, filename?: string): void; + export function runInNewContext(code: string, sandbox?: Context, filename?: string): void; + export function runInContext(code: string, context: Context, filename?: string): void; + export function createContext(initSandbox?: Context): Context; + export function createScript(code: string, filename?: string): Script; +} + +declare module "child_process" { + import events = require("events"); + import stream = require("stream"); + + export interface ChildProcess extends events.EventEmitter { + stdin: stream.Writable; + stdout: stream.Readable; + stderr: stream.Readable; + pid: number; + kill(signal?: string): void; + send(message: any, sendHandle?: any): void; + disconnect(): void; + } + + export function spawn(command: string, args?: string[], options?: { + cwd?: string; + stdio?: any; + custom?: any; + env?: any; + detached?: boolean; + }): ChildProcess; + export function exec(command: string, options: { + cwd?: string; + stdio?: any; + customFds?: any; + env?: any; + encoding?: string; + timeout?: number; + maxBuffer?: number; + killSignal?: string; + }, callback?: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess; + export function exec(command: string, callback?: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess; + export function execFile(file: string, + callback?: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess; + export function execFile(file: string, args?: string[], + callback?: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess; + export function execFile(file: string, args?: string[], options?: { + cwd?: string; + stdio?: any; + customFds?: any; + env?: any; + encoding?: string; + timeout?: number; + maxBuffer?: string; + killSignal?: string; + }, callback?: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess; + export function fork(modulePath: string, args?: string[], options?: { + cwd?: string; + env?: any; + encoding?: string; + }): ChildProcess; + export function execSync(command: string, options?: { + cwd?: string; + input?: string|Buffer; + stdio?: any; + env?: any; + uid?: number; + gid?: number; + timeout?: number; + maxBuffer?: number; + killSignal?: string; + encoding?: string; + }): ChildProcess; + export function execFileSync(command: string, args?: string[], options?: { + cwd?: string; + input?: string|Buffer; + stdio?: any; + env?: any; + uid?: number; + gid?: number; + timeout?: number; + maxBuffer?: number; + killSignal?: string; + encoding?: string; + }): ChildProcess; +} + +declare module "url" { + export interface Url { + href: string; + protocol: string; + auth: string; + hostname: string; + port: string; + host: string; + pathname: string; + search: string; + query: any; // string | Object + slashes: boolean; + hash?: string; + path?: string; + } + + export interface UrlOptions { + protocol?: string; + auth?: string; + hostname?: string; + port?: string; + host?: string; + pathname?: string; + search?: string; + query?: any; + hash?: string; + path?: string; + } + + export function parse(urlStr: string, parseQueryString?: boolean , slashesDenoteHost?: boolean ): Url; + export function format(url: UrlOptions): string; + export function resolve(from: string, to: string): string; +} + +declare module "dns" { + export function lookup(domain: string, family: number, callback: (err: Error, address: string, family: number) =>void ): string; + export function lookup(domain: string, callback: (err: Error, address: string, family: number) =>void ): string; + export function resolve(domain: string, rrtype: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolve(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolve4(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolve6(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolveMx(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolveTxt(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolveSrv(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolveNs(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolveCname(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function reverse(ip: string, callback: (err: Error, domains: string[]) =>void ): string[]; +} + +declare module "net" { + import stream = require("stream"); + + export interface Socket extends stream.Duplex { + // Extended base methods + write(buffer: Buffer): boolean; + write(buffer: Buffer, cb?: Function): boolean; + write(str: string, cb?: Function): boolean; + write(str: string, encoding?: string, cb?: Function): boolean; + write(str: string, encoding?: string, fd?: string): boolean; + + connect(port: number, host?: string, connectionListener?: Function): void; + connect(path: string, connectionListener?: Function): void; + bufferSize: number; + setEncoding(encoding?: string): void; + write(data: any, encoding?: string, callback?: Function): void; + destroy(): void; + pause(): void; + resume(): void; + setTimeout(timeout: number, callback?: Function): void; + setNoDelay(noDelay?: boolean): void; + setKeepAlive(enable?: boolean, initialDelay?: number): void; + address(): { port: number; family: string; address: string; }; + unref(): void; + ref(): void; + + remoteAddress: string; + remoteFamily: string; + remotePort: number; + localAddress: string; + localPort: number; + bytesRead: number; + bytesWritten: number; + + // Extended base methods + end(): void; + end(buffer: Buffer, cb?: Function): void; + end(str: string, cb?: Function): void; + end(str: string, encoding?: string, cb?: Function): void; + end(data?: any, encoding?: string): void; + } + + export var Socket: { + new (options?: { fd?: string; type?: string; allowHalfOpen?: boolean; }): Socket; + }; + + export interface Server extends Socket { + listen(port: number, host?: string, backlog?: number, listeningListener?: Function): Server; + listen(path: string, listeningListener?: Function): Server; + listen(handle: any, listeningListener?: Function): Server; + close(callback?: Function): Server; + address(): { port: number; family: string; address: string; }; + maxConnections: number; + connections: number; + } + export function createServer(connectionListener?: (socket: Socket) =>void ): Server; + export function createServer(options?: { allowHalfOpen?: boolean; }, connectionListener?: (socket: Socket) =>void ): Server; + export function connect(options: { allowHalfOpen?: boolean; }, connectionListener?: Function): Socket; + export function connect(port: number, host?: string, connectionListener?: Function): Socket; + export function connect(path: string, connectionListener?: Function): Socket; + export function createConnection(options: { allowHalfOpen?: boolean; }, connectionListener?: Function): Socket; + export function createConnection(port: number, host?: string, connectionListener?: Function): Socket; + export function createConnection(path: string, connectionListener?: Function): Socket; + export function isIP(input: string): number; + export function isIPv4(input: string): boolean; + export function isIPv6(input: string): boolean; +} + +declare module "dgram" { + import events = require("events"); + + interface RemoteInfo { + address: string; + port: number; + size: number; + } + + interface AddressInfo { + address: string; + family: string; + port: number; + } + + export function createSocket(type: string, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; + + interface Socket extends events.EventEmitter { + send(buf: Buffer, offset: number, length: number, port: number, address: string, callback?: (error: Error, bytes: number) => void): void; + bind(port: number, address?: string, callback?: () => void): void; + close(): void; + address(): AddressInfo; + setBroadcast(flag: boolean): void; + setMulticastTTL(ttl: number): void; + setMulticastLoopback(flag: boolean): void; + addMembership(multicastAddress: string, multicastInterface?: string): void; + dropMembership(multicastAddress: string, multicastInterface?: string): void; + } +} + +declare module "fs" { + import stream = require("stream"); + import events = require("events"); + + interface Stats { + isFile(): boolean; + isDirectory(): boolean; + isBlockDevice(): boolean; + isCharacterDevice(): boolean; + isSymbolicLink(): boolean; + isFIFO(): boolean; + isSocket(): boolean; + dev: number; + ino: number; + mode: number; + nlink: number; + uid: number; + gid: number; + rdev: number; + size: number; + blksize: number; + blocks: number; + atime: Date; + mtime: Date; + ctime: Date; + } + + interface FSWatcher extends events.EventEmitter { + close(): void; + } + + export interface ReadStream extends stream.Readable { + close(): void; + } + export interface WriteStream extends stream.Writable { + close(): void; + } + + export function rename(oldPath: string, newPath: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function renameSync(oldPath: string, newPath: string): void; + export function truncate(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function truncate(path: string, len: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function truncateSync(path: string, len?: number): void; + export function ftruncate(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function ftruncate(fd: number, len: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function ftruncateSync(fd: number, len?: number): void; + export function chown(path: string, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function chownSync(path: string, uid: number, gid: number): void; + export function fchown(fd: number, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function fchownSync(fd: number, uid: number, gid: number): void; + export function lchown(path: string, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function lchownSync(path: string, uid: number, gid: number): void; + export function chmod(path: string, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function chmod(path: string, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function chmodSync(path: string, mode: number): void; + export function chmodSync(path: string, mode: string): void; + export function fchmod(fd: number, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function fchmod(fd: number, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function fchmodSync(fd: number, mode: number): void; + export function fchmodSync(fd: number, mode: string): void; + export function lchmod(path: string, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function lchmod(path: string, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function lchmodSync(path: string, mode: number): void; + export function lchmodSync(path: string, mode: string): void; + export function stat(path: string, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; + export function lstat(path: string, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; + export function fstat(fd: number, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; + export function statSync(path: string): Stats; + export function lstatSync(path: string): Stats; + export function fstatSync(fd: number): Stats; + export function link(srcpath: string, dstpath: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function linkSync(srcpath: string, dstpath: string): void; + export function symlink(srcpath: string, dstpath: string, type?: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function symlinkSync(srcpath: string, dstpath: string, type?: string): void; + export function readlink(path: string, callback?: (err: NodeJS.ErrnoException, linkString: string) => any): void; + export function readlinkSync(path: string): string; + export function realpath(path: string, callback?: (err: NodeJS.ErrnoException, resolvedPath: string) => any): void; + export function realpath(path: string, cache: {[path: string]: string}, callback: (err: NodeJS.ErrnoException, resolvedPath: string) =>any): void; + export function realpathSync(path: string, cache?: {[path: string]: string}): string; + export function unlink(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function unlinkSync(path: string): void; + export function rmdir(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function rmdirSync(path: string): void; + export function mkdir(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function mkdir(path: string, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function mkdir(path: string, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function mkdirSync(path: string, mode?: number): void; + export function mkdirSync(path: string, mode?: string): void; + export function readdir(path: string, callback?: (err: NodeJS.ErrnoException, files: string[]) => void): void; + export function readdirSync(path: string): string[]; + export function close(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function closeSync(fd: number): void; + export function open(path: string, flags: string, callback?: (err: NodeJS.ErrnoException, fd: number) => any): void; + export function open(path: string, flags: string, mode: number, callback?: (err: NodeJS.ErrnoException, fd: number) => any): void; + export function open(path: string, flags: string, mode: string, callback?: (err: NodeJS.ErrnoException, fd: number) => any): void; + export function openSync(path: string, flags: string, mode?: number): number; + export function openSync(path: string, flags: string, mode?: string): number; + export function utimes(path: string, atime: number, mtime: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function utimes(path: string, atime: Date, mtime: Date, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function utimesSync(path: string, atime: number, mtime: number): void; + export function utimesSync(path: string, atime: Date, mtime: Date): void; + export function futimes(fd: number, atime: number, mtime: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function futimes(fd: number, atime: Date, mtime: Date, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function futimesSync(fd: number, atime: number, mtime: number): void; + export function futimesSync(fd: number, atime: Date, mtime: Date): void; + export function fsync(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function fsyncSync(fd: number): void; + export function write(fd: number, buffer: Buffer, offset: number, length: number, position: number, callback?: (err: NodeJS.ErrnoException, written: number, buffer: Buffer) => void): void; + export function writeSync(fd: number, buffer: Buffer, offset: number, length: number, position: number): number; + export function read(fd: number, buffer: Buffer, offset: number, length: number, position: number, callback?: (err: NodeJS.ErrnoException, bytesRead: number, buffer: Buffer) => void): void; + export function readSync(fd: number, buffer: Buffer, offset: number, length: number, position: number): number; + export function readFile(filename: string, encoding: string, callback: (err: NodeJS.ErrnoException, data: string) => void): void; + export function readFile(filename: string, options: { encoding: string; flag?: string; }, callback: (err: NodeJS.ErrnoException, data: string) => void): void; + export function readFile(filename: string, options: { flag?: string; }, callback: (err: NodeJS.ErrnoException, data: Buffer) => void): void; + export function readFile(filename: string, callback: (err: NodeJS.ErrnoException, data: Buffer) => void ): void; + export function readFileSync(filename: string, encoding: string): string; + export function readFileSync(filename: string, options: { encoding: string; flag?: string; }): string; + export function readFileSync(filename: string, options?: { flag?: string; }): Buffer; + export function writeFile(filename: string, data: any, callback?: (err: NodeJS.ErrnoException) => void): void; + export function writeFile(filename: string, data: any, options: { encoding?: string; mode?: number; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; + export function writeFile(filename: string, data: any, options: { encoding?: string; mode?: string; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; + export function writeFileSync(filename: string, data: any, options?: { encoding?: string; mode?: number; flag?: string; }): void; + export function writeFileSync(filename: string, data: any, options?: { encoding?: string; mode?: string; flag?: string; }): void; + export function appendFile(filename: string, data: any, options: { encoding?: string; mode?: number; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; + export function appendFile(filename: string, data: any, options: { encoding?: string; mode?: string; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; + export function appendFile(filename: string, data: any, callback?: (err: NodeJS.ErrnoException) => void): void; + export function appendFileSync(filename: string, data: any, options?: { encoding?: string; mode?: number; flag?: string; }): void; + export function appendFileSync(filename: string, data: any, options?: { encoding?: string; mode?: string; flag?: string; }): void; + export function watchFile(filename: string, listener: (curr: Stats, prev: Stats) => void): void; + export function watchFile(filename: string, options: { persistent?: boolean; interval?: number; }, listener: (curr: Stats, prev: Stats) => void): void; + export function unwatchFile(filename: string, listener?: (curr: Stats, prev: Stats) => void): void; + export function watch(filename: string, listener?: (event: string, filename: string) => any): FSWatcher; + export function watch(filename: string, options: { persistent?: boolean; }, listener?: (event: string, filename: string) => any): FSWatcher; + export function exists(path: string, callback?: (exists: boolean) => void): void; + export function existsSync(path: string): boolean; + export function createReadStream(path: string, options?: { + flags?: string; + encoding?: string; + fd?: string; + mode?: number; + bufferSize?: number; + }): ReadStream; + export function createReadStream(path: string, options?: { + flags?: string; + encoding?: string; + fd?: string; + mode?: string; + bufferSize?: number; + }): ReadStream; + export function createWriteStream(path: string, options?: { + flags?: string; + encoding?: string; + string?: string; + }): WriteStream; +} + +declare module "path" { + + export interface ParsedPath { + root: string; + dir: string; + base: string; + ext: string; + name: string; + } + + export function normalize(p: string): string; + export function join(...paths: any[]): string; + export function resolve(...pathSegments: any[]): string; + export function isAbsolute(p: string): boolean; + export function relative(from: string, to: string): string; + export function dirname(p: string): string; + export function basename(p: string, ext?: string): string; + export function extname(p: string): string; + export var sep: string; + export var delimiter: string; + export function parse(p: string): ParsedPath; + export function format(pP: ParsedPath): string; + + export module posix { + export function normalize(p: string): string; + export function join(...paths: any[]): string; + export function resolve(...pathSegments: any[]): string; + export function isAbsolute(p: string): boolean; + export function relative(from: string, to: string): string; + export function dirname(p: string): string; + export function basename(p: string, ext?: string): string; + export function extname(p: string): string; + export var sep: string; + export var delimiter: string; + export function parse(p: string): ParsedPath; + export function format(pP: ParsedPath): string; + } + + export module win32 { + export function normalize(p: string): string; + export function join(...paths: any[]): string; + export function resolve(...pathSegments: any[]): string; + export function isAbsolute(p: string): boolean; + export function relative(from: string, to: string): string; + export function dirname(p: string): string; + export function basename(p: string, ext?: string): string; + export function extname(p: string): string; + export var sep: string; + export var delimiter: string; + export function parse(p: string): ParsedPath; + export function format(pP: ParsedPath): string; + } +} + +declare module "string_decoder" { + export interface NodeStringDecoder { + write(buffer: Buffer): string; + detectIncompleteChar(buffer: Buffer): number; + } + export var StringDecoder: { + new (encoding: string): NodeStringDecoder; + }; +} + +declare module "tls" { + import crypto = require("crypto"); + import net = require("net"); + import stream = require("stream"); + + var CLIENT_RENEG_LIMIT: number; + var CLIENT_RENEG_WINDOW: number; + + export interface TlsOptions { + pfx?: any; //string or buffer + key?: any; //string or buffer + passphrase?: string; + cert?: any; + ca?: any; //string or buffer + crl?: any; //string or string array + ciphers?: string; + honorCipherOrder?: any; + requestCert?: boolean; + rejectUnauthorized?: boolean; + NPNProtocols?: any; //array or Buffer; + SNICallback?: (servername: string) => any; + } + + export interface ConnectionOptions { + host?: string; + port?: number; + socket?: net.Socket; + pfx?: any; //string | Buffer + key?: any; //string | Buffer + passphrase?: string; + cert?: any; //string | Buffer + ca?: any; //Array of string | Buffer + rejectUnauthorized?: boolean; + NPNProtocols?: any; //Array of string | Buffer + servername?: string; + } + + export interface Server extends net.Server { + // Extended base methods + listen(port: number, host?: string, backlog?: number, listeningListener?: Function): Server; + listen(path: string, listeningListener?: Function): Server; + listen(handle: any, listeningListener?: Function): Server; + + listen(port: number, host?: string, callback?: Function): Server; + close(): Server; + address(): { port: number; family: string; address: string; }; + addContext(hostName: string, credentials: { + key: string; + cert: string; + ca: string; + }): void; + maxConnections: number; + connections: number; + } + + export interface ClearTextStream extends stream.Duplex { + authorized: boolean; + authorizationError: Error; + getPeerCertificate(): any; + getCipher: { + name: string; + version: string; + }; + address: { + port: number; + family: string; + address: string; + }; + remoteAddress: string; + remotePort: number; + } + + export interface SecurePair { + encrypted: any; + cleartext: any; + } + + export function createServer(options: TlsOptions, secureConnectionListener?: (cleartextStream: ClearTextStream) =>void ): Server; + export function connect(options: TlsOptions, secureConnectionListener?: () =>void ): ClearTextStream; + export function connect(port: number, host?: string, options?: ConnectionOptions, secureConnectListener?: () =>void ): ClearTextStream; + export function connect(port: number, options?: ConnectionOptions, secureConnectListener?: () =>void ): ClearTextStream; + export function createSecurePair(credentials?: crypto.Credentials, isServer?: boolean, requestCert?: boolean, rejectUnauthorized?: boolean): SecurePair; +} + +declare module "crypto" { + export interface CredentialDetails { + pfx: string; + key: string; + passphrase: string; + cert: string; + ca: any; //string | string array + crl: any; //string | string array + ciphers: string; + } + export interface Credentials { context?: any; } + export function createCredentials(details: CredentialDetails): Credentials; + export function createHash(algorithm: string): Hash; + export function createHmac(algorithm: string, key: string): Hmac; + export function createHmac(algorithm: string, key: Buffer): Hmac; + interface Hash { + update(data: any, input_encoding?: string): Hash; + digest(encoding: 'buffer'): Buffer; + digest(encoding: string): any; + digest(): Buffer; + } + interface Hmac { + update(data: any, input_encoding?: string): Hmac; + digest(encoding: 'buffer'): Buffer; + digest(encoding: string): any; + digest(): Buffer; + } + export function createCipher(algorithm: string, password: any): Cipher; + export function createCipheriv(algorithm: string, key: any, iv: any): Cipher; + interface Cipher { + update(data: Buffer): Buffer; + update(data: string, input_encoding?: string, output_encoding?: string): string; + final(): Buffer; + final(output_encoding: string): string; + setAutoPadding(auto_padding: boolean): void; + } + export function createDecipher(algorithm: string, password: any): Decipher; + export function createDecipheriv(algorithm: string, key: any, iv: any): Decipher; + interface Decipher { + update(data: Buffer): Buffer; + update(data: string, input_encoding?: string, output_encoding?: string): string; + final(): Buffer; + final(output_encoding: string): string; + setAutoPadding(auto_padding: boolean): void; + } + export function createSign(algorithm: string): Signer; + interface Signer { + update(data: any): void; + sign(private_key: string, output_format: string): string; + } + export function createVerify(algorith: string): Verify; + interface Verify { + update(data: any): void; + verify(object: string, signature: string, signature_format?: string): boolean; + } + export function createDiffieHellman(prime_length: number): DiffieHellman; + export function createDiffieHellman(prime: number, encoding?: string): DiffieHellman; + interface DiffieHellman { + generateKeys(encoding?: string): string; + computeSecret(other_public_key: string, input_encoding?: string, output_encoding?: string): string; + getPrime(encoding?: string): string; + getGenerator(encoding: string): string; + getPublicKey(encoding?: string): string; + getPrivateKey(encoding?: string): string; + setPublicKey(public_key: string, encoding?: string): void; + setPrivateKey(public_key: string, encoding?: string): void; + } + export function getDiffieHellman(group_name: string): DiffieHellman; + export function pbkdf2(password: string, salt: string, iterations: number, keylen: number, callback: (err: Error, derivedKey: Buffer) => any): void; + export function pbkdf2Sync(password: string, salt: string, iterations: number, keylen: number) : Buffer; + export function randomBytes(size: number): Buffer; + export function randomBytes(size: number, callback: (err: Error, buf: Buffer) =>void ): void; + export function pseudoRandomBytes(size: number): Buffer; + export function pseudoRandomBytes(size: number, callback: (err: Error, buf: Buffer) =>void ): void; +} + +declare module "stream" { + import events = require("events"); + + export interface Stream extends events.EventEmitter { + pipe(destination: T, options?: { end?: boolean; }): T; + } + + export interface ReadableOptions { + highWaterMark?: number; + encoding?: string; + objectMode?: boolean; + } + + export class Readable extends events.EventEmitter implements NodeJS.ReadableStream { + readable: boolean; + constructor(opts?: ReadableOptions); + _read(size: number): void; + read(size?: number): string|Buffer; + setEncoding(encoding: string): void; + pause(): void; + resume(): void; + pipe(destination: T, options?: { end?: boolean; }): T; + unpipe(destination?: T): void; + unshift(chunk: string): void; + unshift(chunk: Buffer): void; + wrap(oldStream: NodeJS.ReadableStream): NodeJS.ReadableStream; + push(chunk: any, encoding?: string): boolean; + } + + export interface WritableOptions { + highWaterMark?: number; + decodeStrings?: boolean; + } + + export class Writable extends events.EventEmitter implements NodeJS.WritableStream { + writable: boolean; + constructor(opts?: WritableOptions); + _write(data: Buffer, encoding: string, callback: Function): void; + _write(data: string, encoding: string, callback: Function): void; + write(buffer: Buffer, cb?: Function): boolean; + write(str: string, cb?: Function): boolean; + write(str: string, encoding?: string, cb?: Function): boolean; + end(): void; + end(buffer: Buffer, cb?: Function): void; + end(str: string, cb?: Function): void; + end(str: string, encoding?: string, cb?: Function): void; + } + + export interface DuplexOptions extends ReadableOptions, WritableOptions { + allowHalfOpen?: boolean; + } + + // Note: Duplex extends both Readable and Writable. + export class Duplex extends Readable implements NodeJS.ReadWriteStream { + writable: boolean; + constructor(opts?: DuplexOptions); + _write(data: Buffer, encoding: string, callback: Function): void; + _write(data: string, encoding: string, callback: Function): void; + write(buffer: Buffer, cb?: Function): boolean; + write(str: string, cb?: Function): boolean; + write(str: string, encoding?: string, cb?: Function): boolean; + end(): void; + end(buffer: Buffer, cb?: Function): void; + end(str: string, cb?: Function): void; + end(str: string, encoding?: string, cb?: Function): void; + } + + export interface TransformOptions extends ReadableOptions, WritableOptions {} + + // Note: Transform lacks the _read and _write methods of Readable/Writable. + export class Transform extends events.EventEmitter implements NodeJS.ReadWriteStream { + readable: boolean; + writable: boolean; + constructor(opts?: TransformOptions); + _transform(chunk: Buffer, encoding: string, callback: Function): void; + _transform(chunk: string, encoding: string, callback: Function): void; + _flush(callback: Function): void; + read(size?: number): any; + setEncoding(encoding: string): void; + pause(): void; + resume(): void; + pipe(destination: T, options?: { end?: boolean; }): T; + unpipe(destination?: T): void; + unshift(chunk: string): void; + unshift(chunk: Buffer): void; + wrap(oldStream: NodeJS.ReadableStream): NodeJS.ReadableStream; + push(chunk: any, encoding?: string): boolean; + write(buffer: Buffer, cb?: Function): boolean; + write(str: string, cb?: Function): boolean; + write(str: string, encoding?: string, cb?: Function): boolean; + end(): void; + end(buffer: Buffer, cb?: Function): void; + end(str: string, cb?: Function): void; + end(str: string, encoding?: string, cb?: Function): void; + } + + export class PassThrough extends Transform {} +} + +declare module "util" { + export interface InspectOptions { + showHidden?: boolean; + depth?: number; + colors?: boolean; + customInspect?: boolean; + } + + export function format(format: any, ...param: any[]): string; + export function debug(string: string): void; + export function error(...param: any[]): void; + export function puts(...param: any[]): void; + export function print(...param: any[]): void; + export function log(string: string): void; + export function inspect(object: any, showHidden?: boolean, depth?: number, color?: boolean): string; + export function inspect(object: any, options: InspectOptions): string; + export function isArray(object: any): boolean; + export function isRegExp(object: any): boolean; + export function isDate(object: any): boolean; + export function isError(object: any): boolean; + export function inherits(constructor: any, superConstructor: any): void; +} + +declare module "assert" { + function internal (value: any, message?: string): void; + module internal { + export class AssertionError implements Error { + name: string; + message: string; + actual: any; + expected: any; + operator: string; + generatedMessage: boolean; + + constructor(options?: {message?: string; actual?: any; expected?: any; + operator?: string; stackStartFunction?: Function}); + } + + export function fail(actual?: any, expected?: any, message?: string, operator?: string): void; + export function ok(value: any, message?: string): void; + export function equal(actual: any, expected: any, message?: string): void; + export function notEqual(actual: any, expected: any, message?: string): void; + export function deepEqual(actual: any, expected: any, message?: string): void; + export function notDeepEqual(acutal: any, expected: any, message?: string): void; + export function strictEqual(actual: any, expected: any, message?: string): void; + export function notStrictEqual(actual: any, expected: any, message?: string): void; + export var throws: { + (block: Function, message?: string): void; + (block: Function, error: Function, message?: string): void; + (block: Function, error: RegExp, message?: string): void; + (block: Function, error: (err: any) => boolean, message?: string): void; + }; + + export var doesNotThrow: { + (block: Function, message?: string): void; + (block: Function, error: Function, message?: string): void; + (block: Function, error: RegExp, message?: string): void; + (block: Function, error: (err: any) => boolean, message?: string): void; + }; + + export function ifError(value: any): void; + } + + export = internal; +} + +declare module "tty" { + import net = require("net"); + + export function isatty(fd: number): boolean; + export interface ReadStream extends net.Socket { + isRaw: boolean; + setRawMode(mode: boolean): void; + } + export interface WriteStream extends net.Socket { + columns: number; + rows: number; + } +} + +declare module "domain" { + import events = require("events"); + + export class Domain extends events.EventEmitter { + run(fn: Function): void; + add(emitter: events.EventEmitter): void; + remove(emitter: events.EventEmitter): void; + bind(cb: (err: Error, data: any) => any): any; + intercept(cb: (data: any) => any): any; + dispose(): void; + + addListener(event: string, listener: Function): Domain; + on(event: string, listener: Function): Domain; + once(event: string, listener: Function): Domain; + removeListener(event: string, listener: Function): Domain; + removeAllListeners(event?: string): Domain; + } + + export function create(): Domain; +}