diff --git a/ng6-seed/package-lock.json b/ng6-seed/package-lock.json index 91fb0fa6a..f9fa094cd 100755 --- a/ng6-seed/package-lock.json +++ b/ng6-seed/package-lock.json @@ -1551,7 +1551,6 @@ "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, "requires": { "mime-types": "~2.1.24", "negotiator": "0.6.2" @@ -1590,8 +1589,7 @@ "after": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" }, "agent-base": { "version": "4.3.0", @@ -1938,6 +1936,11 @@ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2151,8 +2154,7 @@ "backo2": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" }, "balanced-match": { "version": "1.0.0", @@ -2217,8 +2219,7 @@ "base64-arraybuffer": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" }, "base64-js": { "version": "1.3.1", @@ -2249,7 +2250,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, "requires": { "callsite": "1.0.0" } @@ -2642,8 +2642,7 @@ "callsite": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" }, "callsites": { "version": "2.0.0", @@ -2975,8 +2974,7 @@ "component-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" }, "component-emitter": { "version": "1.3.0", @@ -2987,8 +2985,7 @@ "component-inherit": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" }, "compressible": { "version": "2.0.18", @@ -6342,11 +6339,25 @@ } } }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, "has-cors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" }, "has-flag": { "version": "3.0.0", @@ -6758,8 +6769,7 @@ "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" }, "inflight": { "version": "1.0.6", @@ -8552,8 +8562,7 @@ "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "neo-async": { "version": "2.6.1", @@ -8651,6 +8660,213 @@ } } }, + "ngx-socket-io": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ngx-socket-io/-/ngx-socket-io-3.0.1.tgz", + "integrity": "sha512-6+99AULDEcdrsFSd9FVo5mUSpQMa2KL6twPbteoEv3qWO0Hh2kdrzTjvPdsC2jeTuEuqa8R9l5/3eGYdiLZyWQ==", + "requires": { + "core-js": "^3.0.0", + "reflect-metadata": "^0.1.10", + "socket.io": "^2.2.0", + "socket.io-client": "^2.2.0", + "tslib": "^1.9.0", + "zone.js": "^0.10.1" + }, + "dependencies": { + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "core-js": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "engine.io": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.1.tgz", + "integrity": "sha512-8MfIfF1/IIfxuc2gv5K+XlFZczw/BpTvqBdl0E2fBLkYQp4miv4LuDTVtYt4yMyaIFLEr4vtaSgV4mjvll8Crw==", + "requires": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "0.3.1", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "ws": "^7.1.2" + } + }, + "engine.io-client": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.1.tgz", + "integrity": "sha512-RJNmA+A9Js+8Aoq815xpGAsgWH1VoSYM//2VgIiu9lNOaHFfLpTjH4tOzktBpjIs5lvOfiNY1dwf+NuU6D38Mw==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~6.1.0", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "ws": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz", + "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "socket.io": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz", + "integrity": "sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==", + "requires": { + "debug": "~4.1.0", + "engine.io": "~3.4.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.3.0", + "socket.io-parser": "~3.4.0" + } + }, + "socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" + }, + "socket.io-client": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", + "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "engine.io-client": "~3.4.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "socket.io-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", + "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + } + } + }, + "socket.io-parser": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.0.tgz", + "integrity": "sha512-/G/VOI+3DBp0+DJKW4KesGnQkQPFmUCbA/oO2QGT6CWxU7hLGWqU3tyuzeSK/dqcyeHsQg1vTe9jiZI8GU9SCQ==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "isarray": "2.0.1" + } + }, + "ws": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz", + "integrity": "sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA==" + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, + "zone.js": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", + "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==" + } + } + }, "ngx-viewer": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/ngx-viewer/-/ngx-viewer-1.0.5.tgz", @@ -9011,8 +9227,7 @@ "object-component": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" }, "object-copy": { "version": "0.1.0", @@ -9522,7 +9737,6 @@ "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, "requires": { "better-assert": "~1.0.0" } @@ -9531,7 +9745,6 @@ "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, "requires": { "better-assert": "~1.0.0" } @@ -10253,6 +10466,11 @@ "readable-stream": "^2.0.2" } }, + "recordrtc": { + "version": "5.5.9", + "resolved": "https://registry.npmjs.org/recordrtc/-/recordrtc-5.5.9.tgz", + "integrity": "sha512-6T1tn80nRfsXrAoYWINwz+hBKk+pB5Im4I0BS52Og1ruQvrEdV3IUcm+AKwLMHNyBAhJ2DaVa+9pukTRxMF/uA==" + }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", @@ -10265,8 +10483,7 @@ "reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" }, "regenerate": { "version": "1.4.0", @@ -12071,8 +12288,7 @@ "to-array": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" }, "to-arraybuffer": { "version": "1.0.1", @@ -13311,8 +13527,7 @@ "yeast": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" }, "yn": { "version": "2.0.0", diff --git a/ng6-seed/package.json b/ng6-seed/package.json index 2713e1e27..8fe569a50 100755 --- a/ng6-seed/package.json +++ b/ng6-seed/package.json @@ -67,10 +67,12 @@ "ngx-mat-daterange-picker": "^1.1.4", "ngx-mat-select-search": "^1.8.0", "ngx-perfect-scrollbar": "5.0.0-7", + "ngx-socket-io": "^3.0.1", "ngx-viewer": "^1.0.5", "node-sass": "^4.13.0", "perfect-scrollbar": "^1.3.0", "quill": "^1.3.7", + "recordrtc": "^5.5.9", "rxjs": "^6.5.4", "rxjs-compat": "^6.5.4", "screenfull": "^3.2.2", diff --git a/ng6-seed/src/app/app.module.ts b/ng6-seed/src/app/app.module.ts index ff95f18ec..7e3234d79 100755 --- a/ng6-seed/src/app/app.module.ts +++ b/ng6-seed/src/app/app.module.ts @@ -34,7 +34,7 @@ import {MatSelectModule} from '@angular/material/select'; import {MatCardModule} from '@angular/material/card'; import {MatBadgeModule} from '@angular/material/badge'; import {ChangePasswordDialog} from './settings/users/user-profile/user-profile.component'; -import { MatFormFieldModule,MatProgressSpinnerModule } from '@angular/material'; +import { MatFormFieldModule,MatProgressSpinnerModule, MatDialogModule, MatTooltipModule, MatButtonModule } from '@angular/material'; import { AppRoutes } from './app.routing'; import { AppComponent } from './app.component'; import { AdminLayoutComponent } from './layouts/admin/admin-layout.component'; @@ -58,7 +58,9 @@ import { AsyncPipe } from '../../node_modules/@angular/common'; import { PdTrigerService } from './personal-discussion/pd-service/pd-triger.service'; import { HttpLoaderComponent } from './layouts/http-loader/http-loader.component'; import { LoaderService } from './shared/loaderService/loader.service'; - +import {SocketIoConfig, SocketIoModule} from 'ngx-socket-io'; +import { IncomingCallComponent } from './video-chat/incoming-call/incoming-call.component'; +import { VideoChatComponent } from './video-chat/video-chat.component' export function HttpLoaderFactory(http: HttpClient) { return new TranslateHttpLoader(http); @@ -72,14 +74,17 @@ const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = { suppressScrollX: true }; +const socketConfig: SocketIoConfig = { url: environment.socketServerUrl, options: {} }; + @NgModule({ declarations: [ AppComponent, AdminLayoutComponent, AuthLayoutComponent, - NewPasswordDialog,ForgotPass,ChangePasswordDialog, RoleMenuItemsPipe, HttpLoaderComponent + NewPasswordDialog,ForgotPass,ChangePasswordDialog, RoleMenuItemsPipe, HttpLoaderComponent, IncomingCallComponent, VideoChatComponent ], imports: [ + MatDialogModule, BrowserModule, BrowserAnimationsModule, SharedModule, @@ -89,12 +94,15 @@ const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = { MatSidenavModule, MatInputModule, MatIconModule, + MatButtonModule, MatListModule, MatMenuModule, MatToolbarModule, MatTabsModule, MatCheckboxModule, MatProgressBarModule,MatProgressSpinnerModule, + MatTooltipModule, + MatSelectModule, MatCardModule, MatBadgeModule, @@ -114,6 +122,7 @@ const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = { AngularFireAuthModule, AngularFireMessagingModule, AngularFireModule.initializeApp(environment.firebase), + SocketIoModule.forRoot(socketConfig) ], providers: [ { @@ -134,7 +143,7 @@ const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = { }, MessagingService, AsyncPipe,LoaderService ], - entryComponents: [NewPasswordDialog,ForgotPass,ChangePasswordDialog], + entryComponents: [NewPasswordDialog,ForgotPass,ChangePasswordDialog,IncomingCallComponent,VideoChatComponent], bootstrap: [AppComponent] }) export class AppModule { } diff --git a/ng6-seed/src/app/layouts/admin/admin-layout.component.ts b/ng6-seed/src/app/layouts/admin/admin-layout.component.ts index 6c06c0086..0a77775cc 100755 --- a/ng6-seed/src/app/layouts/admin/admin-layout.component.ts +++ b/ng6-seed/src/app/layouts/admin/admin-layout.component.ts @@ -15,6 +15,10 @@ import { AwsService } from '../../AwsService/aws.service'; import { RoleMenuItemsPipe } from './../role-menu-items.pipe'; import 'rxjs/add/observable/interval'; import { MessagingService } from 'app/shared/messaging.service'; +import { IncomingCallComponent } from '../../video-chat/incoming-call/incoming-call.component'; +import { Socket } from 'ngx-socket-io'; +import { MatDialog } from '@angular/material'; +import { VideoChatComponent } from 'app/video-chat/video-chat.component'; @@ -59,8 +63,8 @@ export class AdminLayoutComponent implements OnInit, OnDestroy { permissionDeined : boolean = true; alertTAT: any; countTAT: number; - - constructor(private router: Router, public menuItems: MenuItems, public horizontalMenuItems : HorizontalMenuItems, public translate: TranslateService,public aws:AwsService,public users:UserService,private _dashboardService: DashboardService,private messagingService:MessagingService) { + incomingDialogOpened:boolean = false + constructor(private router: Router, public menuItems: MenuItems, public horizontalMenuItems : HorizontalMenuItems, public translate: TranslateService,public aws:AwsService,public users:UserService,private _dashboardService: DashboardService,private messagingService:MessagingService,private socket:Socket,private matDialog:MatDialog) { const browserLang: string = translate.getBrowserLang(); translate.use(browserLang.match(/en|fr/) ? browserLang : 'en'); @@ -138,7 +142,8 @@ export class AdminLayoutComponent implements OnInit, OnDestroy { // Ps.update(elemContent); } }); - + this.listenForCalls() + this.openIncomingDialog(); } @HostListener('click', ['$event']) @@ -311,4 +316,51 @@ export class AdminLayoutComponent implements OnInit, OnDestroy { break; } } + // FOR LISTENING TO RECIEVE CALLS FROM CALLER + listenForCalls() { + // this.socket.on('BackOffer', this.connectPeer) + this.socket.fromEvent('BackOffer').subscribe(res=>{ + console.log(res) + this.connectPeer(res); + }) + } + connectPeer(offer) { + console.log(offer) + // alert("Offer is listened"); + this.openIncomingDialog(offer); + } + openIncomingDialog(offer?) { + if(this.incomingDialogOpened == true) { + return; + } + this.incomingDialogOpened = true + const dialogRef = this.matDialog.open(IncomingCallComponent,{ + // minWidth:'25%', + // maxWidth:'30%', + disableClose: true, + backdropClass: 'incoming-call-background' , + panelClass:'incoming-call-background' + }) + dialogRef.afterClosed().subscribe(data=>{ + console.log(data) + if(data == 'decline'){ + this.incomingDialogOpened = false + } + else { + this.incomingDialogOpened = false + this.openVideoChatDialog(offer) + } + }) + } + openVideoChatDialog(offer) { + let dialogRef = this.matDialog.open(VideoChatComponent,{ + data:{chat_info:'call_recieving',JSON_to_connect:offer}, + maxWidth: '100vw', + maxHeight: '100vh', + height: '100%', + width: '100%', + disableClose: true, + panelClass:'video-chat' + }) + } } diff --git a/ng6-seed/src/app/video-chat/incoming-call/incoming-call.component.html b/ng6-seed/src/app/video-chat/incoming-call/incoming-call.component.html new file mode 100644 index 000000000..e8579413c --- /dev/null +++ b/ng6-seed/src/app/video-chat/incoming-call/incoming-call.component.html @@ -0,0 +1,25 @@ +
+
+ Incoming Call +
+
+
+ Image +
+
+
+ +
User Name
+ +
+
+
+ +
+
+ +
+
+
diff --git a/ng6-seed/src/app/video-chat/incoming-call/incoming-call.component.scss b/ng6-seed/src/app/video-chat/incoming-call/incoming-call.component.scss new file mode 100644 index 000000000..2bb53444c --- /dev/null +++ b/ng6-seed/src/app/video-chat/incoming-call/incoming-call.component.scss @@ -0,0 +1,56 @@ +::ng-deep { .incoming-call-background > mat-dialog-container { + background: #71AFFF; + padding: 15px; + } +} + .label{ + margin-bottom: 5% !important; + color: white + } + .user-name { + margin: 8% !important; + h6{ + font-weight: bold; + } + color: white + } + .call-animation { + background: #fff; + width: 135px; + height: 135px; + position: relative; + margin: 0px auto !important; + border-radius: 100%; + border: solid 5px #fff; + animation: play 2s ease infinite; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + + } + img { + width: 135px; + height: 135px; + border-radius: 100%; + position: absolute; + left: 0px; + top: 0px; + } + @keyframes play { + + 0% { + transform: scale(1); + } + 15% { + box-shadow: 0 0 0 5px rgba(255, 255, 255, 0.4); + } + 25% { + box-shadow: 0 0 0 10px rgba(255, 255, 255, 0.4), 0 0 0 20px rgba(255, 255, 255, 0.2); + } + 25% { + box-shadow: 0 0 0 15px rgba(255, 255, 255, 0.4), 0 0 0 30px rgba(255, 255, 255, 0.2); + } + + } + \ No newline at end of file diff --git a/ng6-seed/src/app/video-chat/incoming-call/incoming-call.component.spec.ts b/ng6-seed/src/app/video-chat/incoming-call/incoming-call.component.spec.ts new file mode 100644 index 000000000..75d578676 --- /dev/null +++ b/ng6-seed/src/app/video-chat/incoming-call/incoming-call.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { IncomingCallComponent } from './incoming-call.component'; + +describe('IncomingCallComponent', () => { + let component: IncomingCallComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ IncomingCallComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(IncomingCallComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/ng6-seed/src/app/video-chat/incoming-call/incoming-call.component.ts b/ng6-seed/src/app/video-chat/incoming-call/incoming-call.component.ts new file mode 100644 index 000000000..14535384f --- /dev/null +++ b/ng6-seed/src/app/video-chat/incoming-call/incoming-call.component.ts @@ -0,0 +1,21 @@ +import { Component, OnInit } from '@angular/core'; +import { MatDialogRef } from '@angular/material'; + +@Component({ + selector: 'app-incoming-call', + templateUrl: './incoming-call.component.html', + styleUrls: ['./incoming-call.component.scss'] +}) +export class IncomingCallComponent implements OnInit { + + constructor(private dialogRef:MatDialogRef) { } + + ngOnInit() { + } + closeDialog(){ + this.dialogRef.close('decline'); + } + answer_call(){ + this.dialogRef.close('answered'); + } +} diff --git a/ng6-seed/src/app/video-chat/video-chat.component.html b/ng6-seed/src/app/video-chat/video-chat.component.html new file mode 100644 index 000000000..008d9fa3c --- /dev/null +++ b/ng6-seed/src/app/video-chat/video-chat.component.html @@ -0,0 +1,71 @@ +
+
+ +
+ + +
+ + + +
+ +
+ + + + + + +
+ + + + + + + + +
+
+
+
+
+ +
+ + +
+

Note : Make sure the Reciever is waiting for your call before start Calling

+
+ +
+
+ + \ No newline at end of file diff --git a/ng6-seed/src/app/video-chat/video-chat.component.scss b/ng6-seed/src/app/video-chat/video-chat.component.scss new file mode 100644 index 000000000..bc377e6ae --- /dev/null +++ b/ng6-seed/src/app/video-chat/video-chat.component.scss @@ -0,0 +1,73 @@ +::ng-deep { .video-chat > mat-dialog-container { + background: #71AFFF; + padding: 0; + } +} + +@media(max-width:500px) { + + video#myvideo { + max-width: 32%; + // min-width: 150px; + position: absolute; + border: 2px solid #9E9E9E; + top:0; + left: 0; + // /* top: 20px; +} + +video#peervideo { + /* height: 498px; */ + // position: relative; + // margin-top: 126px; + width: 100%; +} + +.peer_message{ + font-size: 20px; + position: absolute; + top: 11%; + float: right; + padding: 57px; + /* border: 2px solid lavender; */ + left: 8%; + p{ + text-align: center; + } +} + } + @media(min-width:500px) { + .peer_video{ + max-height: 80vh; + } + video#myvideo { + max-width: 22%; + // min-width: 150px; + position: absolute; + border: 2px solid #9E9E9E; + top:0; + left: 0; + // max-width: 45%; + // text-align: center; + // margin-left:3%; + // margin-top:1%; + // min-width: 150px; + // position: absolute; + // border: 2px solid #9E9E9E; + // /* top: 20px; +} + +video#peervideo { + /* height: 498px; */ + max-width: 100%; + text-align: center; + margin-left:3%; + margin-top:1%; + // position: relative; + // margin-top: 126px; + // width: 100%; +} +} +body{ + margin:10px !important; +} diff --git a/ng6-seed/src/app/video-chat/video-chat.component.spec.ts b/ng6-seed/src/app/video-chat/video-chat.component.spec.ts new file mode 100644 index 000000000..69efedd43 --- /dev/null +++ b/ng6-seed/src/app/video-chat/video-chat.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { VideoChatComponent } from './video-chat.component'; + +describe('VideoChatComponent', () => { + let component: VideoChatComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ VideoChatComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(VideoChatComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/ng6-seed/src/app/video-chat/video-chat.component.ts b/ng6-seed/src/app/video-chat/video-chat.component.ts new file mode 100644 index 000000000..35dbbb162 --- /dev/null +++ b/ng6-seed/src/app/video-chat/video-chat.component.ts @@ -0,0 +1,421 @@ +import { Component, OnInit, ChangeDetectorRef, ViewChild, Inject } from '@angular/core'; +import { Observable } from 'rxjs'; +import { PushNotifyService } from 'app/shared/push-notify.service'; +import { Socket } from 'ngx-socket-io'; +import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; + +@Component({ + selector: 'app-video-chat', + templateUrl: './video-chat.component.html', + styleUrls: ['./video-chat.component.scss'] +}) +export class VideoChatComponent implements OnInit { + MediaStream + title = 'simple-peer-video-chat'; + peer:any; + targetpeer: string; + enableBtn: boolean; + @ViewChild('myvideo') myVideo: any; + @ViewChild('peervideo') peervideo: any; + @ViewChild('camera_switch') camereSwitchBtn: any; + // @ViewChild('textToCopy',{static:true}) textCopyElement: any; + n = navigator.mediaDevices; + // public textToCopy:any; + myVideoEnable: boolean = false; + peerVideoEnable: boolean = false; + shouldFaceUser: boolean = true; + userCallType: any; + is_video_enable:boolean = false; + mic_mute: boolean = true; + video_mute: boolean = true; + constructor(private _notificationService:PushNotifyService, + private cdRef: ChangeDetectorRef,private socket: Socket, + private dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public chat_info:any) { + this._notificationService.requestPermission(); + // this.notify('Approval','This is First Alert -- By Debasis Saha') + console.log("Version #8") + } + notify(title,approval) { + let data: Array < any >= []; + data.push({ + 'title': title, + 'body': approval + }); + this._notificationService.generateNotification(data); +} + // ngOnInit() { + // setTimeout(()=>{ + // console.log("ngOninti") + // this.peer = new SimplePeer({ + // initiator: location.hash === '#init', + // trickle: false + // }) + // console.log(this.peer) + // this.peer.on('signal', function(data) { + // console.log(JSON.stringify(data)); + + // this.targetpeer = data; + // }) + // this.peer.on('error', err => console.log('error', err)) + // this.peer.on('data', function(data) { + // console.log('Recieved message:' + data); + // this.notify('notify',data) + // }) + // this.peer.on('connect', () => { + // console.log('CONNECT') + // this.peer.send('whatever' + Math.random()) + // }) + // setTimeout(()=>{ + // console.log("updated") + // this.enableBtn=true + // this.notify('notify','enabled') + // },1000) + // },3000) + // } + + ngOnInit() { + console.log(this.chat_info); + if(this.chat_info) { + if(this.chat_info.chat_info == 'call_recieving' && this.chat_info.hasOwnProperty('JSON_to_connect') && this.chat_info.JSON_to_connect) { + this.is_video_enable = true; + this.start_Calling('receive') + } + } + // this.start_Calling('receive') + } + start_Calling(option) { + this.userCallType = option + // let texk=this.textCopyElement.nativeElement + let video = this.myVideo.nativeElement; + let peerVideo = this.peervideo.nativeElement + let peerx: any; + let copyMessageText + this.n.getUserMedia = (this.n.getUserMedia || this.n.webkitGetUserMedia || this.n.mozGetUserMedia || this.n.msGetUserMedia); + if(this.n.getUserMedia == undefined || this.n.getUserMedia == null, this.n.getUserMedia == ''){ + alert("unable to get the camera access. please close the browser and come back again") + } + console.log(this.n) + let defaultsOpts = { audio: true, video: { + facingMode: this.shouldFaceUser ? 'user' : 'environment' + } + } + this.n.getUserMedia(defaultsOpts).then(stream=> { + this.socket.emit('NewClient') + video.load(); + video.muted = true; + this.fetchVideoAndPlay(stream,video); + this.myVideoEnable = true + this.MediaStream = stream + // let switchCameraBtn= this.camereSwitchBtn.nativeElement + let supports = navigator.mediaDevices.getSupportedConstraints(); + console.log(supports) + if( supports['facingMode'] === true ) { + // switchCameraBtn.disabled = false; +} + console.log("entered",stream); + peerx = new SimplePeer ({ + initiator: option === 'init', + stream: stream, + reconnectTimer: 1000, + iceTransportPolicy: 'relay', + trickle: false, + config: { + iceServers: [ + { + "urls": "stun:numb.viagenie.ca", + "username": 'fairojm@gmail.com', + "credential": 'fairojfai00' + }, + { + "urls": "turn:numb.viagenie.ca", + "username": "fairojm@gmail.com", + "credential": "fairojfai00" + } + ] + } + }) + + // function InitPeer(type) { + peerx.on('signal',(data)=> { + + console.log(JSON.stringify(data)); + if(data.hasOwnProperty('type') && data.type == 'offer'){ + console.log("entered!!!!!!!!!!!!!!!!1"); + this.socket.emit('Offer', data) + } + else if(data.type == 'answer'){ + this.socket.emit('Answer', data) + } + // copyMessage(JSON.stringify(data)) + copyMessageText = JSON.stringify(data); + // update() + this.copyMessage(copyMessageText,data.type) + // this.targetpeer = data; + }) + // } + peerx.on('data', function(data) { + console.log('Recieved message:' + data); + }) + peerx.on('close', (data) => { + console.log("Peer Connection is closed ",data); + this.disconnect(); + // alert("Peer Connection is closed " +JSON.stringify(data)) + this.notify("Connection Closed",'Peer Connection Closed'+JSON.stringify(data)) + }) + peerx.on('error', (err) => { + console.log("Fatal Error ",err); + + alert("Fatal Error" +JSON.stringify(err)) + }) + peerx.on('stream', (stream)=> { + console.log("@##################33",stream) + if ('srcObject' in peerVideo) { + peerVideo.srcObject = stream + } else { + peerVideo.src = window.URL.createObjectURL(stream) // for older browsers + } + // video.play(); + + // console.log(this.peerVideoEnable); + peerVideo.load(); + this. fetchVideoAndPlay(stream,peerVideo,true); + // setTimeout(()=>{ + // // this.peerVideoEnable = true; + // // console.log(this.peerVideoEnable) + // },2000) + // CreateVideo(stream) + }) + // fetchVideoAndPlay(stream,videotype) { + // fetch('') + // .then(response => response.blob()) + // .then(blob => { + // videotype.srcObject = stream; + // return videotype.play(); + // }) + // .then(_ => { + // // Video playback started ;) + // }) + // .catch(e => { + // // Video playback failed ;( + // }) + // } + + // function CreateVideo(stream) { + // // CreateDiv() + + // let video = document.createElement('video') + // video.id = 'peerVideo' + // video.srcObject = stream + // video.setAttribute('class', 'embed-responsive-item') + // document.querySelector('#peervideo').appendChild(video) + // video.play() + // //wait for 1 sec + // } + function connectPeer(answer) { + console.log("$$$$$$$$$$$$$$44"); + console.log(answer); + peerx.signal(answer); + } + function getPeer(){ + return JSON.stringify(copyMessageText) + } + // if(JSON.parse(copyMessageText).hasOwnProperty('type') && JSON.parse(copyMessageText).type == 'offer') + // { +// setTimeout(()=>{ +// this.socket.on('BackOffer', getPeer) +// },2000) + // } + if(this.chat_info.chat_info == 'call_recieving' && this.chat_info.JSON_to_connect && this.chat_info.JSON_to_connect != undefined) { + connectPeer(this.chat_info.JSON_to_connect) + } + let tt = this.socket.on('BackOffer', connectPeer) + console.log(tt); + this.socket.on('BackAnswer', connectPeer) + }, err=>{ + console.log('Failed to get stream', err); + alert('Failed to get stream '+err); + }); + // function update(){ + // console.log(copyMessageText) + // setTimeout(()=>{ + // // texk.value = copyMessageText + // },2000) + // } + setTimeout(() => { + this.peer = peerx; + + // this.copyMessage(JSON.stringify(this.targetpeer)) + console.log(this.peer); + // console.log(copyMessageText) + // this.targetpeer = copyMessageText + // this.textToCopy = copyMessageText + // this.copyMessage(copyMessageText) + }, 5000); + + // socket.on('SessionActive', SessionActive) + // socket.on('CreatePeer', MakePeer) + // socket.on('Disconnect', RemovePeer) + } + fetchVideoAndPlay(stream,videotype,enablePeerVideo?) { + console.log("12@@@@@@@@@2",enablePeerVideo) + if(enablePeerVideo) { + this.peerVideoEnable = enablePeerVideo + // this.camereSwitchBtn.nativeElement.disabled = true; + console.log(this.peerVideoEnable); + this.cdRef.detectChanges(); + // this.startRecording(stream) + } + fetch('') + .then(response => response.blob()) + .then(blob => { + videotype.srcObject = stream; + return videotype.play(); + }) + .then(_ => { + // Video playback started ;) + }) + .catch(e => { + // Video playback failed ;( + }) + } + startRecording(stream) { + let recorder = new RecordRTCPromisesHandler(stream, { + type: 'video', + mimeType: 'video/webm', // or video/webm\;codecs=h264 or video/webm\;codecs=vp9 + audioBitsPerSecond: 128000, + videoBitsPerSecond: 128000, + bitsPerSecond: 128000 // if this line is provided, skip above + }); + recorder.startRecording(); + const sleep = m => new Promise(r => setTimeout(r, m)); +sleep(3000); +setTimeout(()=>{ +recorder.stopRecording(); +console.log(recorder); +let blob = recorder.getBlob(); +recorder.getDataURL().then(dataURL=>{ +console.log("@@@@@",dataURL) +}); +// var file = new File([blob], 'video.mp4', { +// type: 'video/mp4' +// }); +// console.log(file) +// const fileURL = window.URL.createObjectURL(file); +// window.open(fileURL); +// videotype.srcObject = null; +// videotype.muted = false; +// videotype.volume = 1; +// videotype.srcObject = file; + + + // recorder.camera.stop(); + // recorder.destroy(); + // recorder = null; +// let recorder = RecordRTC(stream, { +// type: 'video' +// }); +// recorder.startRecording(); + +// const sleep = m => new Promise(r => setTimeout(r, m)); +// sleep(10000); + +// recorder.stopRecording(function() { +// let blob = recorder.getBlob(); +// // invokeSaveAsDialog(blob); +// console.log(blob); +// }); + +// blob.then(resul=>{ +// console.log(resul); +// }) +// const fileURL = window.URL.createObjectURL(blob); +// console.log(fileURL); +// window.open(fileURL); +},10000) +// invokeSaveAsDialog(blob); + } + connect() { + this.peer.signal(JSON.parse(this.targetpeer)); + } + RemovePeer() { + document.getElementById("peerVideo").remove(); + // document.getElementById("muteText").remove(); + // if (client.peer) { + // client.peer.destroy() + // } +} + + message() { + this.peer.send('Hello world'); + } + disconnect() { + console.log(this.peer) + this.peer.destroy(); + this.peerVideoEnable = false + this.targetpeer = '' + this.cdRef.detectChanges(); + this.peervideo.nativeElement.pause(); + console.log(this.MediaStream.getTracks()) + // this.MediaStream.stop() + // var track = this.MediaStream.getTracks()[0]; // if only one media track + // ... + // track.stop(); + this.MediaStream.getTracks().forEach(function(track) { + track.stop(); + }); + console.log(this.peervideo); + // this.peervideo.nativeElement.videoWidth = 0 + // this.peervideo.nativeElement.videoHeight = 0 + this.is_video_enable = false + this.cdRef.detectChanges(); + } + copyMessage(val: string,message?){ + const selBox = document.createElement('textarea'); + selBox.style.position = 'fixed'; + selBox.style.left = '0'; + selBox.style.top = '0'; + selBox.style.opacity = '0'; + selBox.value = val; + document.body.appendChild(selBox); + selBox.focus(); + selBox.select(); + document.execCommand('copy'); + document.body.removeChild(selBox); + // alert(message+ " JSON is copied to clipboard. Paste the JSON to another window") + this.notify("JSON copied to clipboard",message+ ' JSON'); + } + switch_camera() { + this.shouldFaceUser = !this.shouldFaceUser; + console.log(this.userCallType); + this.peer.destroy(); + this.start_Calling(this.userCallType) + } + close_all() { + if(this.peer) { + this.disconnect(); + } + if(this.MediaStream && this.MediaStream.active) { + console.log(this.MediaStream.getTracks()) + // this.MediaStream.stop() + // var track = this.MediaStream.getTracks()[0]; // if only one media track + // ... + // track.stop(); + this.MediaStream.getTracks().forEach(function(track) { + track.stop(); + }); + } + this.dialogRef.close(); + } + micMuteHandling(){ + this.mic_mute = !this.mic_mute + this.cdRef.detectChanges(); + this.MediaStream.getAudioTracks()[0].enabled = this.mic_mute; + } + videoHandling(){ + this.video_mute = !this.video_mute + this.cdRef.detectChanges(); + this.MediaStream.getVideoTracks()[0].enabled = this.video_mute; + } + +} diff --git a/ng6-seed/src/assets/spinner/notfound.jpg b/ng6-seed/src/assets/spinner/notfound.jpg new file mode 100644 index 000000000..900f35aeb Binary files /dev/null and b/ng6-seed/src/assets/spinner/notfound.jpg differ diff --git a/ng6-seed/src/assets/spinner/notfound2.jpg b/ng6-seed/src/assets/spinner/notfound2.jpg new file mode 100644 index 000000000..25a1d3348 Binary files /dev/null and b/ng6-seed/src/assets/spinner/notfound2.jpg differ diff --git a/ng6-seed/src/assets/spinner/notfound_blue.png b/ng6-seed/src/assets/spinner/notfound_blue.png new file mode 100644 index 000000000..cf1f5a7f3 Binary files /dev/null and b/ng6-seed/src/assets/spinner/notfound_blue.png differ diff --git a/ng6-seed/src/environments/environment.ts b/ng6-seed/src/environments/environment.ts index 3b8f9112f..55aaf3249 100755 --- a/ng6-seed/src/environments/environment.ts +++ b/ng6-seed/src/environments/environment.ts @@ -14,6 +14,7 @@ export const environment = { // apiEndpoint: 'https://demo.pdgenie.com/sparqapi/api/', apiEndpoint:'https://apitest.pdgenie.com/sparqtest/api/', // apiEndpoint:'http://localhost/sineEdge/sparqapi/api/', + socketServerUrl:'https://morning-garden-90282.herokuapp.com', authorization: 'sparqvenba2018', diff --git a/ng6-seed/src/index.html b/ng6-seed/src/index.html index 963d27c67..c97fe548d 100755 --- a/ng6-seed/src/index.html +++ b/ng6-seed/src/index.html @@ -9,6 +9,10 @@ + + + + PD Genie diff --git a/ng6-seed/src/typings.d.ts b/ng6-seed/src/typings.d.ts index a0786e36b..2c420c444 100755 --- a/ng6-seed/src/typings.d.ts +++ b/ng6-seed/src/typings.d.ts @@ -6,4 +6,7 @@ interface NodeModule { declare module 'quill'; declare module 'leaflet'; declare module 'perfect-scrollbar'; -declare module 'screenfull'; \ No newline at end of file +declare module 'screenfull'; +declare var SimplePeer: any; +declare var RecordRTCPromisesHandler:any; +declare var RecordRTC:any; \ No newline at end of file