{"version":3,"sources":["webpack:///./src async","webpack:///./src/main.ts","webpack:///./src/app/app.component.ts","webpack:///./src/app/app.module.ts","webpack:///./src/app/base-keys.pipe.ts","webpack:///./src/app/filter-type.pipe.ts","webpack:///./src/app/login-form.component.ts","webpack:///./src/app/login.ts","webpack:///./src/environments/environment.ts","webpack:///./src/app/app.component.css","webpack:///./src/app/app.component.html","webpack:///./src/app/login-form.component.html"],"names":[],"mappings":"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","file":"main.bundle.js","sourcesContent":["function webpackEmptyContext(req) {\n\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 374;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src async\n// module id = 374\n// module chunks = 1","import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { enableProdMode } from '@angular/core';\nimport { environment } from './environments/environment';\nimport { AppModule } from './app/app.module';\n\nif (environment.production) {\n  enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule);\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.ts","import { Component } from '@angular/core';\nimport { AngularFire, FirebaseObjectObservable } from 'angularfire2';\n//import { Router } from '@angular/router';\n\n\n\n@Component( {\n    selector: 'app-root',\n    templateUrl: './app.component.html',\n    styleUrls: ['./app.component.css']\n})\nexport class AppComponent {\n\n    sensorLastValue: FirebaseObjectObservable<any>;\n    gateway: FirebaseObjectObservable<any>;\n    gatewayStatus: FirebaseObjectObservable<any>;\n    node: FirebaseObjectObservable<any>;\n    sensor: FirebaseObjectObservable<any>;\n    operation: FirebaseObjectObservable<any>;\n\n\n\n    error: String;\n\n    authState: String = \"not authenticated\"\n\n\n    constructor( public af: AngularFire ) {\n        let that = this;\n        af.auth.subscribe( function( auth ) {\n            console.log( \"auth state is: \", auth );\n            if ( auth != null ) {\n                this.authState = \"authenticated as \" + auth.google.displayName\n                // FIXME : can not work (reference replaced): need to mutate inside an object\n                that.displayValues();\n            } else {\n                this.authState = \"not authenticated\"\n                console.log( \"not authenticated\" )\n            }\n\n        })\n    };\n\n    public displayValues() {\n        console.log( \"displayValues\" )\n        //this.sensorLastValue = this.af.database.object( '/sensorLastValue' );\n        this.gateway = this.af.database.object( '/gateway' );\n        this.gatewayStatus = this.af.database.object( '/status/gateway' );\n        this.node = this.af.database.object( '/node' );\n        this.sensor = this.af.database.object( '/sensor' );\n        this.operation = this.af.database.object( '/operation' );\n        this.af.auth.subscribe( auth => console.log( auth ) );\n\n    };\n\n    login() {\n        console.log( \"login\" )\n        this.af.auth.login()\n        //        .then(\n        //            ( success ) => {\n        //                console.log( success );\n        //                //this.router.navigate( ['/dashboard'] );\n        //                this.displayValues();\n        //            }).catch(\n        //            ( err ) => {\n        //                console.log( err );\n        //                this.error = err.message;\n        //                //this.router.navigate( ['/dashboard'] );\n        //            })\n    }\n\n\n\n    logout() {\n        console.log( \"logout\" )\n        this.af.auth.logout();\n    }\n\n    signOut() {\n        //this.af.auth.signOut();\n    }\n\n    sendMessage(m:Object) {\n        console.log(\"m is : \",m);\n        let ts = + new Date() + 2000;\n        let msgToSend = {exp:ts,m:m};\n        console.log(\"vmsgToSend is : \",msgToSend);\n\n\n        const messagesToSendRef = this.af.database.list('/messagesToSend/'+m['dst']['gw']);\n        messagesToSendRef.push(msgToSend);\n\n        //TODO write/push to  /messagesToSend/$gwId\n        // exp is currentTimeMillis + marge\n        //{exp:Long, m: {dst:{gw: String, n: Int, s: Int}, t: Int, ack: Boolean, st: Int, p: String }}\n    }\n\n  isRecent(ts): Boolean {\n    //console.log(\"isRecent\");\n    let margin = 3600 * 1000 //ms - 1h\n    return (+ new Date() - ts) < margin;\n  }\n\n  getLastNodeTimestamp(gw:String,node:Number) {\n      //TODO (or on grafana ?)\n    return 42;\n  }\n\n\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/app.component.ts","import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { AngularFireModule, AuthProviders, AuthMethods  } from 'angularfire2';\nimport { enableProdMode } from '@angular/core';\n\n\nimport { AppComponent } from './app.component';\nimport { LoginFormComponent } from './login-form.component';\nimport { BaseKeysPipe } from './base-keys.pipe';\nimport { FilterTypePipe } from './filter-type.pipe';\n\n\n// Must export the config\nexport const firebaseConfig = {\n    apiKey: \"AIzaSyBS9z5ng9nblVJ8sfXZ5mvX_GEu6OI1xBg\",\n    authDomain: \"gdomo2-684e3.firebaseapp.com\",\n    databaseURL: \"https://gdomo2-684e3.firebaseio.com\",\n    storageBucket: \"gdomo2-684e3.appspot.com\",\n    messagingSenderId: \"261828511771\"\n};\n\nconst myFirebaseAuthConfig = {\n  provider: AuthProviders.Google,\n  method: AuthMethods.Redirect\n};\n\n@NgModule({\n  declarations: [\n    AppComponent,\n    LoginFormComponent,\n    BaseKeysPipe,\n    FilterTypePipe\n  ],\n  imports: [\n    BrowserModule,\n    FormsModule,\n    HttpModule,\n    AngularFireModule.initializeApp(firebaseConfig,myFirebaseAuthConfig)\n  ],\n  providers: [],\n  bootstrap: [AppComponent]\n})\nexport class AppModule { }\n\n\n//Enable production mode unless running locally\nif (!/localhost/.test(document.location.host)) {\n  enableProdMode();\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/app.module.ts","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({name: 'baseKeys'})\nexport class BaseKeysPipe implements PipeTransform {\n  transform(value, args:string[]) : any {\n    let keys = [];\n    for (let key in value) {\n      keys.push({key: key, value: value[key]});\n    }\n    return keys;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/base-keys.pipe.ts","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({name: 'filterType',pure: false})\nexport class FilterTypePipe implements PipeTransform {\n    transform(items: any[], args: any[]): any {\n        // filter items array, items which match and return true will be kept, false will be filtered out\n        //if(items[0]) console.log(\"item 1 t is\",items[0].value.t); \n        //if( args[0]) console.log(\" args is \", args);\n        return items.filter(item => item.value.t === args);\n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/app/filter-type.pipe.ts","\nimport { Component } from '@angular/core';\n\nimport { Login }    from './login';\n\n@Component({\n  moduleId: module.id,\n  selector: 'login-form',\n  templateUrl: './login-form.component.html'\n})\nexport class LoginFormComponent {\n\n\n  model = new Login('toto@titi.com', 'secretpass');\n\n  submitted = false;\n\n  onSubmit() { this.submitted = true; }\n\n  // TODO: Remove this when we're done\n  get diagnostic() { return JSON.stringify(this.model); }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/login-form.component.ts","\nexport class Login {\n  constructor(\n    public email: string,\n    public password: string,\n  ) {  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/login.ts","// The file contents for the current environment will overwrite these during build.\n// The build system defaults to the dev environment which uses `environment.ts`, but if you do\n// `ng build --env=prod` then `environment.prod.ts` will be used instead.\n// The list of which env maps to which file can be found in `angular-cli.json`.\n\nexport const environment = {\n  production: false\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/environments/environment.ts","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/app.component.css\n// module id = 658\n// module chunks = 1","module.exports = \"<h1>Domotic viewer</h1>\\n\\n<!--\\n<ul>\\n  <li class=\\\"text\\\" *ngFor=\\\"let item of items | async\\\">\\n    {{item.$value}}\\n  </li>\\n</ul>\\n-->\\n\\n<!--\\n<login-form></login-form>\\n-->\\n\\n<!--<div>Auth state (maybe) = {{ authState }} </div>-->\\n<div>Auth state = {{ !(af.auth | async) ? \\\"not authenticated\\\" : \\\"auth ok\\\" }}</div>\\n<div>uid: {{ (af.auth | async)?.uid }}</div>\\n<div>name: {{ (af.auth | async)?.auth.displayName }}</div>\\n<div>email: {{ (af.auth | async)?.auth.email }}</div>\\n<button type=\\\"submit\\\" class=\\\"btn btn-success\\\" (click)=\\\"login()\\\">Login\\n  with google\\n</button>\\n<button type=\\\"submit\\\" class=\\\"btn btn-success\\\" (click)=\\\"logout()\\\">Logout</button>\\n\\n\\n<!--\\n<button (click)=\\\"signOut()\\\">signOut</button>\\n-->\\n\\n\\n\\n<!--\\n<h1>Gateways:</h1>\\n\\n<table class=\\\"table table-bordered\\\">\\n\\t<thead class=\\\"thead-inverse\\\">\\n\\t\\t<tr>\\n\\t\\t\\t<th>Key</th>\\n\\t\\t\\t<th>Name</th>\\n\\t\\t\\t<th>Type</th>\\n\\t\\t\\t<th>DEBUG</th>\\n\\t\\t</tr>\\n\\t</thead>\\n\\t<tbody>\\n\\t\\t<tr *ngFor=\\\"let entry of (gateway | async) | baseKeys\\\">\\n\\t\\t\\t<td>{{entry.key}}</td>\\n\\t\\t\\t<td>{{entry.value.name}}</td>\\n\\t\\t\\t<td>{{entry.value.t}}</td>\\n\\t\\t\\t<td>{{entry.value | json}}</td>\\n\\t\\t</tr>\\n\\t</tbody>\\n</table>\\n-->\\n\\n<h1>Operations</h1>\\n\\n<div class=\\\"grid\\\">\\n  <div class=\\\"row\\\">\\n    <div class=\\\"col-xs-6 col-sm-3 col-md-3 col-lg-2\\\"\\n         *ngFor=\\\"let op of (operation | async ) | baseKeys | filterType:'sendMsg'\\\">\\n      <button type=\\\"button\\\" class=\\\"btn btn-info\\\" (click)=\\\"sendMessage(op.value.m)\\\">{{!!op.value.name ? op.value.name :\\n        op.key}}\\n      </button>\\n    </div>\\n  </div>\\n\\n</div>\\n\\n\\n<!-- <table class=\\\"table table-bordered\\\">-->\\n<!-- \\t<thead class=\\\"thead-inverse\\\">-->\\n<!--\\t\\t<tr>-->\\n<!--\\t\\t\\t<th>Key</th>-->\\n<!--\\t\\t\\t<th>Name</th>-->\\n<!--\\t\\t\\t<th>Type</th>-->\\n<!--\\t\\t\\t<th>Launch</th>-->\\n<!--\\t\\t</tr>-->\\n<!--\\t</thead>-->\\n<!--\\t<tbody>-->\\n<!--\\t\\t<tr *ngFor=\\\"let op of (operation | async ) | baseKeys | filterType:'sendMsg'\\\">-->\\n<!--\\t\\t\\t<td>{{op.key}}</td>-->\\n<!--\\t\\t\\t<td>{{op.value.name}}</td>-->\\n<!--\\t\\t\\t<td>{{op.value.t}}</td>-->\\n<!--\\t\\t\\t&lt;!&ndash; <td>{{op.value | json}}</td> &ndash;&gt;-->\\n<!--\\t\\t\\t<td><button (click)=\\\"sendMessage(op.value.m)\\\">{{op.key}} {{op.value.name}}</button></td>-->\\n<!--\\t\\t</tr>-->\\n<!--\\t</tbody>-->\\n<!-- </table>-->\\n\\n\\n<h1>Gateway status:</h1>\\n\\n<table class=\\\"table table-bordered\\\">\\n  <thead class=\\\"thead-inverse\\\">\\n  <tr>\\n    <th>Key</th>\\n    <th>Status</th>\\n  </tr>\\n  </thead>\\n  <tbody>\\n  <tr *ngFor=\\\"let entry of (gatewayStatus | async) | baseKeys\\\">\\n    <td>{{entry.key}}</td>\\n    <!--    <td>{{ (gateway | async | baseKeys)[entry.key]?.name}}</td>-->\\n    <td>{{entry.value.s}}</td>\\n  </tr>\\n  </tbody>\\n</table>\\n\\n\\n<!--<h1>Sensors:</h1>-->\\n<!--<div *ngFor=\\\"let gw of (sensorLastValue | async) | baseKeys\\\">-->\\n<!--\\t<div-->\\n<!--\\t\\t*ngFor=\\\"let lvnode of (sensorLastValue | async)[gw.key] | baseKeys\\\">-->\\n\\n<!--\\t\\t<p>Gateway id = {{gw.key}}- name={{ (gateway | async) && (gateway-->\\n<!--\\t\\t\\t| async)[gw.key] && (gateway | async)[gw.key]?.name }}</p>-->\\n<!--\\t\\t<p>Node id = {{ gw.key}}- node={{lvnode.key}} - sketchName= {{-->\\n<!--\\t\\t\\t(node | async) && (node | async)[gw.key] && (node |-->\\n<!--\\t\\t\\tasync)[gw.key][lvnode.key] && (node |-->\\n<!--\\t\\t\\tasync)[gw.key][lvnode.key]?.sketchName }}</p>-->\\n<!--\\t\\t<table class=\\\"table table-bordered\\\">-->\\n<!--\\t\\t\\t<thead class=\\\"thead-inverse\\\">-->\\n<!--\\t\\t\\t\\t<th>Id</th>-->\\n<!--\\t\\t\\t\\t<th>Type</th>-->\\n<!--\\t\\t\\t\\t<th>date</th>-->\\n<!--\\t\\t\\t\\t<th>Value</th>-->\\n<!--\\t\\t\\t\\t<th>desc</th>-->\\n<!--\\t\\t\\t</thead>-->\\n<!--\\t\\t\\t<tbody>-->\\n<!--\\t\\t\\t\\t<tr-->\\n<!--\\t\\t\\t\\t\\t*ngFor=\\\"let lvsensor of (sensorLastValue | async)[gw.key][lvnode.key] | baseKeys\\\">-->\\n<!--\\t\\t\\t\\t\\t<td>{{lvsensor.key}}</td>-->\\n<!--\\t\\t\\t\\t\\t<td>{{lvsensor.value.t}}</td>-->\\n<!--\\t\\t\\t\\t\\t<td>{{lvsensor.value.ts | date:'yyyy-MM-dd HH:mm:ss'}}</td>-->\\n<!--\\t\\t\\t\\t\\t<td>{{lvsensor.value.v}}</td>-->\\n<!--\\t\\t\\t\\t\\t<td>{{ (sensor | async) && (sensor | async)[gw.key] && (sensor-->\\n<!--\\t\\t\\t\\t\\t\\t| async)[gw.key][lvnode.key] && (sensor |-->\\n<!--\\t\\t\\t\\t\\t\\tasync)[gw.key][lvnode.key][lvsensor.key] && (sensor |-->\\n<!--\\t\\t\\t\\t\\t\\tasync)[gw.key][lvnode.key][lvsensor.key]?.desc }}</td>-->\\n<!--\\t\\t\\t\\t</tr>-->\\n<!--\\t\\t\\t</tbody>-->\\n<!--\\t\\t</table>-->\\n<!--\\t</div>-->\\n<!--</div>-->\\n\\n\\n\\n\\n\\n\\n\\n<h1>Nodes</h1>\\n\\n<table class=\\\"table table-striped table-condensed\\\">\\n  <thead class=\\\"thead-inverse\\\">\\n  <tr>\\n    <th>Key</th>\\n    <th>Node id</th>\\n    <th>Protocol</th>\\n    <th>Sketch name</th>\\n    <th>Sketch version</th>\\n    <th>Timestamp</th>\\n    <th>Last sensor activity</th>\\n  </tr>\\n  </thead>\\n  <!--  <tbody>-->\\n  <tbody *ngFor=\\\"let nodeGw of (node | async) | baseKeys\\\">\\n\\n  <tr *ngFor=\\\"let nodeEntry of (node | async)[nodeGw.key] | baseKeys\\\"  [ngClass]=\\\"{'success': isRecent(nodeEntry.value.ts) }\\\">\\n    <td>{{nodeGw.key}}</td>\\n    <td>{{nodeEntry.key}}</td>\\n    <!--    <td>{{ (gateway | async | baseKeys)[entry.key]?.name}}</td>-->\\n    <td>{{nodeEntry.value.protocol}}</td>\\n    <td>{{nodeEntry.value.sketchName}}</td>\\n    <td>{{nodeEntry.value.sketchVersion}}</td>\\n    <td>{{ nodeEntry.value.ts | date:'yyyy-MM-dd HH:mm:ss' }}</td>\\n    <td>{{getLastNodeTimestamp(nodeGw.key,nodeEntry.key) | date:'yyyy-MM-dd HH:mm:ss' }}</td>\\n  </tr>\\n\\n  </tbody>\\n  <!--  </tbody>-->\\n</table>\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/app.component.html\n// module id = 659\n// module chunks = 1","module.exports = \"{{diagnostic}}\\n<div class=\\\"container\\\" [hidden]=\\\"submitted\\\">\\n    <h1>Login Form 2</h1>\\n    <form (ngSubmit)=\\\"onSubmit()\\\" #loginForm=\\\"ngForm\\\">\\n      <div class=\\\"form-group\\\">\\n        <label for=\\\"email\\\">Email</label>\\n        <input type=\\\"text\\\" class=\\\"form-control\\\" id=\\\"email\\\" required [(ngModel)]=\\\"model.email\\\" name=\\\"email\\\" #name=\\\"ngModel\\\">\\n        <div [hidden]=\\\"name.valid || name.pristine\\\" class=\\\"alert alert-danger\\\">\\n          Email is required\\n        </div>\\n      </div>\\n      <div class=\\\"form-group\\\">\\n        <label for=\\\"password\\\">Password</label>\\n        <input type=\\\"password\\\" class=\\\"form-control\\\" id=\\\"password\\\" required [(ngModel)]=\\\"model.password\\\" name=\\\"password\\\">\\n      </div>\\n      <button type=\\\"submit\\\" class=\\\"btn btn-success\\\" [disabled]=\\\"!loginForm.form.valid\\\">Login</button>\\n    </form>\\n</div>\\n<div [hidden]=\\\"!submitted\\\">\\n  <h2>You submitted the following:</h2>\\n  <div class=\\\"row\\\">\\n    <div class=\\\"col-xs-3\\\">Email</div>\\n    <div class=\\\"col-xs-9  pull-left\\\">{{ model.email }}</div>\\n  </div>\\n  <div class=\\\"row\\\">\\n    <div class=\\\"col-xs-3\\\">Password</div>\\n    <div class=\\\"col-xs-9 pull-left\\\">{{ model.password }}</div>\\n  </div>\\n  <br>\\n  <button class=\\\"btn btn-primary\\\" (click)=\\\"submitted=false\\\">Edit</button>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/login-form.component.html\n// module id = 660\n// module chunks = 1"],"sourceRoot":""}