├── .editorconfig
├── .gitignore
├── README.md
├── config.xml
├── demo
├── demo1.gif
├── demo2.gif
├── img1.PNG
├── img2.PNG
├── img3.PNG
├── img4.PNG
└── mobile_demo.gif
├── ionic.config.json
├── ionic.starter.json
├── package-lock.json
├── package.json
├── resources
├── README.md
├── android
│ ├── icon
│ │ ├── drawable-hdpi-icon.png
│ │ ├── drawable-ldpi-icon.png
│ │ ├── drawable-mdpi-icon.png
│ │ ├── drawable-xhdpi-icon.png
│ │ ├── drawable-xxhdpi-icon.png
│ │ └── drawable-xxxhdpi-icon.png
│ └── splash
│ │ ├── drawable-land-hdpi-screen.png
│ │ ├── drawable-land-ldpi-screen.png
│ │ ├── drawable-land-mdpi-screen.png
│ │ ├── drawable-land-xhdpi-screen.png
│ │ ├── drawable-land-xxhdpi-screen.png
│ │ ├── drawable-land-xxxhdpi-screen.png
│ │ ├── drawable-port-hdpi-screen.png
│ │ ├── drawable-port-ldpi-screen.png
│ │ ├── drawable-port-mdpi-screen.png
│ │ ├── drawable-port-xhdpi-screen.png
│ │ ├── drawable-port-xxhdpi-screen.png
│ │ └── drawable-port-xxxhdpi-screen.png
├── icon.png
├── ios
│ ├── icon
│ │ ├── icon-1024.png
│ │ ├── icon-40.png
│ │ ├── icon-40@2x.png
│ │ ├── icon-40@3x.png
│ │ ├── icon-50.png
│ │ ├── icon-50@2x.png
│ │ ├── icon-60.png
│ │ ├── icon-60@2x.png
│ │ ├── icon-60@3x.png
│ │ ├── icon-72.png
│ │ ├── icon-72@2x.png
│ │ ├── icon-76.png
│ │ ├── icon-76@2x.png
│ │ ├── icon-83.5@2x.png
│ │ ├── icon-small.png
│ │ ├── icon-small@2x.png
│ │ ├── icon-small@3x.png
│ │ ├── icon.png
│ │ └── icon@2x.png
│ └── splash
│ │ ├── Default-568h@2x~iphone.png
│ │ ├── Default-667h.png
│ │ ├── Default-736h.png
│ │ ├── Default-Landscape-736h.png
│ │ ├── Default-Landscape@2x~ipad.png
│ │ ├── Default-Landscape@~ipadpro.png
│ │ ├── Default-Landscape~ipad.png
│ │ ├── Default-Portrait@2x~ipad.png
│ │ ├── Default-Portrait@~ipadpro.png
│ │ ├── Default-Portrait~ipad.png
│ │ ├── Default@2x~iphone.png
│ │ ├── Default@2x~universal~anyany.png
│ │ └── Default~iphone.png
└── splash.png
├── server
├── datamodel.graphql
├── docker-compose.yml
├── package-lock.json
├── package.json
├── prisma.yml
└── server.js
├── src
├── app
│ ├── app.component.ts
│ ├── app.html
│ ├── app.module.ts
│ ├── app.scss
│ └── main.ts
├── assets
│ ├── icon
│ │ └── favicon.ico
│ └── imgs
│ │ └── logo.png
├── index.html
├── manifest.json
├── pages
│ ├── comment
│ │ ├── comment.html
│ │ ├── comment.module.ts
│ │ ├── comment.scss
│ │ └── comment.ts
│ ├── create-post
│ │ ├── create-post.html
│ │ ├── create-post.module.ts
│ │ ├── create-post.scss
│ │ └── create-post.ts
│ ├── home
│ │ ├── home.html
│ │ ├── home.module.ts
│ │ ├── home.scss
│ │ └── home.ts
│ ├── profile
│ │ ├── profile.html
│ │ ├── profile.module.ts
│ │ ├── profile.scss
│ │ └── profile.ts
│ └── tabs
│ │ ├── tabs.html
│ │ └── tabs.ts
├── providers
│ └── pusher-service
│ │ └── pusher-service.ts
├── service-worker.js
└── theme
│ └── variables.scss
├── tsconfig.json
└── tslint.json
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig helps developers define and maintain consistent coding styles between different editors and IDEs
2 | # editorconfig.org
3 |
4 | root = true
5 |
6 | [*]
7 | indent_style = space
8 | indent_size = 2
9 |
10 | # We recommend you to keep these unchanged
11 | end_of_line = lf
12 | charset = utf-8
13 | trim_trailing_whitespace = true
14 | insert_final_newline = true
15 |
16 | [*.md]
17 | trim_trailing_whitespace = false
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Specifies intentionally untracked files to ignore when using Git
2 | # http://git-scm.com/docs/gitignore
3 |
4 | *~
5 | *.sw[mnpcod]
6 | *.log
7 | *.tmp
8 | *.tmp.*
9 | log.txt
10 | *.sublime-project
11 | *.sublime-workspace
12 | .vscode/
13 | npm-debug.log*
14 |
15 | .idea/
16 | .sourcemaps/
17 | .sass-cache/
18 | .tmp/
19 | .versions/
20 | coverage/
21 | dist/
22 | node_modules/
23 | tmp/
24 | temp/
25 | hooks/
26 | platforms/
27 | plugins/
28 | plugins/android.json
29 | plugins/ios.json
30 | www/
31 | $RECYCLE.BIN/
32 |
33 | .DS_Store
34 | Thumbs.db
35 | UserInterfaceState.xcuserstate
36 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Ionic Instagram Clone
2 |
3 | [Link to Part 1 of Tutorial Series](https://pusher.com/tutorials/instagram-clone-ionic-part-1)
4 |
5 | [Link to Part 2 of Tutorial Series](https://pusher.com/tutorials/instagram-clone-ionic-part-2)
6 |
7 | [Link to Part 3 of Tutorial Series](https://pusher.com/tutorials/instagram-clone-ionic-part-3)
8 |
9 | [Link to Part 4 of Tutorial Series](https://pusher.com/tutorials/instagram-clone-ionic-part-4)
10 |
11 | 
12 |
13 | 
14 | 
15 |
16 |
17 | ## Prerequisite
18 | - [Ionic](https://ionicframework.com) installed on your machine, you can read up on how to do that here [] add link
19 | - [NodeJS](https://nodejs.org) installed on your machine
20 | - [Yarn](https://yarnpkg.com) Installed on your machine
21 | - [Docker](https://www.docker.com/) Installed on your machine
22 |
23 | ## Getting Started
24 | - Install the necessary node modules
25 |
26 | ```bash
27 | npm install
28 | ```
29 |
30 | - [Obtain Cloudinary Credentials](https://cloudinary.com/signup)
31 |
32 | - Enter Cloudinary Credentials in the `src/pages/create-post/create-post.ts`
33 |
34 | - [Obtain Pusher Crendtials](https://pusher.com)
35 |
36 | - Enter Pusher Credentials in `src/providers/pusher-service/pusher-service.ts` and `server/server.js`
37 |
38 |
39 | ## Setting Up the Backend
40 | - Change Directory and install node modules
41 |
42 | ```bash
43 | cd server
44 | npm install
45 | ```
46 |
47 | - Start Backend Server
48 |
49 | ```bash
50 | node server,js
51 | ```
52 |
53 | ## Update Ionic Application
54 | - Enter Backend Server URLs in `src/pages/create-post/create-post.ts` and `src/pages/comment/comment.ts`
55 |
56 | ## Create docker server
57 | - In the `server/` directory, create docker container:
58 |
59 | ```
60 | docker-compose up -d
61 | ```
62 |
63 | ## Start Ionic Application
64 | - Run the command
65 | ```bash
66 | ionic serve
67 | ```
68 |
69 | ## Built with
70 | - [Pusher](https://pusher.com) - APIs to allow you add realtime functionality and online presence features to your applications
71 | - [Cloudinary](https://cloudinary.com) - Image and video management full stack platform
72 | - [Prisma](https://prisma.io) - Prisma makes it easy to implement GraphQL servers.
73 | - [Ionic](https://ionicframework.com) - Ionic lets web developers build, test, and deploy cross-platform hybrid mobile apps easier than ever.
74 |
--------------------------------------------------------------------------------
/config.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/config.xml
--------------------------------------------------------------------------------
/demo/demo1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/demo/demo1.gif
--------------------------------------------------------------------------------
/demo/demo2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/demo/demo2.gif
--------------------------------------------------------------------------------
/demo/img1.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/demo/img1.PNG
--------------------------------------------------------------------------------
/demo/img2.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/demo/img2.PNG
--------------------------------------------------------------------------------
/demo/img3.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/demo/img3.PNG
--------------------------------------------------------------------------------
/demo/img4.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/demo/img4.PNG
--------------------------------------------------------------------------------
/demo/mobile_demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/demo/mobile_demo.gif
--------------------------------------------------------------------------------
/ionic.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "instagram-ionic",
3 | "integrations": {
4 | "cordova": {}
5 | },
6 | "type": "ionic-angular"
7 | }
--------------------------------------------------------------------------------
/ionic.starter.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Tabs Starter",
3 | "baseref": "master",
4 | "tarignore": [
5 | ".sourcemaps",
6 | "node_modules",
7 | "package-lock.json",
8 | "www"
9 | ],
10 | "scripts": {
11 | "test": "npm run build"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "instagram-ionic-clone",
3 | "version": "0.0.1",
4 | "author": "Oreoluwa Ogundipe",
5 | "homepage": "http://ionicframework.com/",
6 | "private": true,
7 | "scripts": {
8 | "clean": "ionic-app-scripts clean",
9 | "build": "ionic-app-scripts build",
10 | "lint": "ionic-app-scripts lint",
11 | "ionic:build": "ionic-app-scripts build",
12 | "ionic:serve": "ionic-app-scripts serve"
13 | },
14 | "dependencies": {
15 | "@angular/animations": "5.2.11",
16 | "@angular/common": "5.2.11",
17 | "@angular/compiler": "5.2.11",
18 | "@angular/compiler-cli": "5.2.11",
19 | "@angular/core": "5.2.11",
20 | "@angular/forms": "5.2.11",
21 | "@angular/http": "5.2.11",
22 | "@angular/platform-browser": "5.2.11",
23 | "@angular/platform-browser-dynamic": "5.2.11",
24 | "@ionic-native/core": "4.7.0",
25 | "@ionic-native/splash-screen": "4.7.0",
26 | "@ionic-native/status-bar": "4.7.0",
27 | "@ionic/storage": "2.1.3",
28 | "@types/pluralize": "0.0.29",
29 | "apollo-angular": "^1.1.2",
30 | "apollo-angular-link-http": "^1.1.1",
31 | "apollo-cache-inmemory": "^1.2.7",
32 | "apollo-client": "^2.3.8",
33 | "cordova-android": "7.0.0",
34 | "cordova-ios": "4.5.4",
35 | "cordova-plugin-device": "^2.0.2",
36 | "cordova-plugin-ionic-keyboard": "^2.0.5",
37 | "cordova-plugin-ionic-webview": "^1.1.19",
38 | "cordova-plugin-splashscreen": "^5.0.2",
39 | "cordova-plugin-whitelist": "^1.3.3",
40 | "graphql": "^0.13.2",
41 | "graphql-tag": "^2.9.2",
42 | "ionic-angular": "3.9.2",
43 | "ionicons": "3.0.0",
44 | "pluralize": "^7.0.0",
45 | "pusher-js": "^4.4.0",
46 | "rxjs": "5.5.11",
47 | "sw-toolbox": "3.6.0",
48 | "zone.js": "0.8.26"
49 | },
50 | "devDependencies": {
51 | "@ionic/app-scripts": "^3.2.3",
52 | "typescript": "~3.0.0"
53 | },
54 | "description": "An Ionic project",
55 | "cordova": {
56 | "plugins": {
57 | "cordova-plugin-whitelist": {},
58 | "cordova-plugin-device": {},
59 | "cordova-plugin-splashscreen": {},
60 | "cordova-plugin-ionic-webview": {},
61 | "cordova-plugin-ionic-keyboard": {}
62 | },
63 | "platforms": [
64 | "ios",
65 | "android"
66 | ]
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/resources/README.md:
--------------------------------------------------------------------------------
1 | These are Cordova resources. You can replace icon.png and splash.png and run
2 | `ionic cordova resources` to generate custom icons and splash screens for your
3 | app. See `ionic cordova resources --help` for details.
4 |
5 | Cordova reference documentation:
6 |
7 | - Icons: https://cordova.apache.org/docs/en/latest/config_ref/images.html
8 | - Splash Screens: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-splashscreen/
9 |
--------------------------------------------------------------------------------
/resources/android/icon/drawable-hdpi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/android/icon/drawable-hdpi-icon.png
--------------------------------------------------------------------------------
/resources/android/icon/drawable-ldpi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/android/icon/drawable-ldpi-icon.png
--------------------------------------------------------------------------------
/resources/android/icon/drawable-mdpi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/android/icon/drawable-mdpi-icon.png
--------------------------------------------------------------------------------
/resources/android/icon/drawable-xhdpi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/android/icon/drawable-xhdpi-icon.png
--------------------------------------------------------------------------------
/resources/android/icon/drawable-xxhdpi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/android/icon/drawable-xxhdpi-icon.png
--------------------------------------------------------------------------------
/resources/android/icon/drawable-xxxhdpi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/android/icon/drawable-xxxhdpi-icon.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-land-hdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/android/splash/drawable-land-hdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-land-ldpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/android/splash/drawable-land-ldpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-land-mdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/android/splash/drawable-land-mdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-land-xhdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/android/splash/drawable-land-xhdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-land-xxhdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/android/splash/drawable-land-xxhdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-land-xxxhdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/android/splash/drawable-land-xxxhdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-port-hdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/android/splash/drawable-port-hdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-port-ldpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/android/splash/drawable-port-ldpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-port-mdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/android/splash/drawable-port-mdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-port-xhdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/android/splash/drawable-port-xhdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-port-xxhdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/android/splash/drawable-port-xxhdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-port-xxxhdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/android/splash/drawable-port-xxxhdpi-screen.png
--------------------------------------------------------------------------------
/resources/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/icon.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon-1024.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon-40.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon-40@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon-40@3x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon-50.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon-50@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon-60.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon-60@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon-60@3x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon-72.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-72@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon-72@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon-76.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon-76@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon-83.5@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon-small.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-small@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon-small@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-small@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon-small@3x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/icon/icon@2x.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-568h@2x~iphone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/splash/Default-568h@2x~iphone.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-667h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/splash/Default-667h.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-736h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/splash/Default-736h.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Landscape-736h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/splash/Default-Landscape-736h.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Landscape@2x~ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/splash/Default-Landscape@2x~ipad.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Landscape@~ipadpro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/splash/Default-Landscape@~ipadpro.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Landscape~ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/splash/Default-Landscape~ipad.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Portrait@2x~ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/splash/Default-Portrait@2x~ipad.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Portrait@~ipadpro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/splash/Default-Portrait@~ipadpro.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Portrait~ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/splash/Default-Portrait~ipad.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default@2x~iphone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/splash/Default@2x~iphone.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default@2x~universal~anyany.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/splash/Default@2x~universal~anyany.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default~iphone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/ios/splash/Default~iphone.png
--------------------------------------------------------------------------------
/resources/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oreHGA/ionic-insta-clone/4acd7917a1ebc6104efee37e3b952122a954e785/resources/splash.png
--------------------------------------------------------------------------------
/server/datamodel.graphql:
--------------------------------------------------------------------------------
1 | type User {
2 | id: ID! @unique @id
3 | username: String! @unique
4 | fullname: String!
5 | avatar: String!
6 | bio: String!
7 | followers: Int!
8 | following: Int!
9 | posts: [Post!]! @relation(name: "UserPosts")
10 | comments: [Comment!]! @relation(name: "UserComments")
11 | }
12 |
13 | type Comment{
14 | id: ID! @unique @id
15 | message: String
16 | postedAt: DateTime!
17 | user: User! @relation(name: "UserComments")
18 | post: Post! @relation(name: "PostComments")
19 | }
20 |
21 | type Post{
22 | id: ID! @unique @id
23 | image_url: String!
24 | description: String,
25 | likes: Int @default(value: 0)
26 | postedAt: DateTime!
27 | user: User! @relation(name: "UserPosts")
28 | comments: [Comment!]! @relation(name: "PostComments")
29 | }
30 |
--------------------------------------------------------------------------------
/server/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3'
2 | services:
3 | prisma:
4 | image: prismagraphql/prisma:1.31
5 | restart: always
6 | ports:
7 | - "4466:4466"
8 | environment:
9 | PRISMA_CONFIG: |
10 | port: 4466
11 | databases:
12 | default:
13 | connector: mysql
14 | host: mysql
15 | port: 3306
16 | user: root
17 | password: prisma
18 | migrations: true
19 | mysql:
20 | image: mysql:5.7
21 | restart: always
22 | environment:
23 | MYSQL_ROOT_PASSWORD: prisma
24 | volumes:
25 | - mysql:/var/lib/mysql
26 | volumes:
27 | mysql:
28 |
--------------------------------------------------------------------------------
/server/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "server",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@types/caseless": {
8 | "version": "0.12.2",
9 | "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz",
10 | "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w=="
11 | },
12 | "@types/form-data": {
13 | "version": "2.2.1",
14 | "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz",
15 | "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==",
16 | "requires": {
17 | "@types/node": "*"
18 | }
19 | },
20 | "@types/node": {
21 | "version": "11.13.6",
22 | "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.6.tgz",
23 | "integrity": "sha512-Xoo/EBzEe8HxTSwaZNLZjaW6M6tA/+GmD3/DZ6uo8qSaolE/9Oarko0oV1fVfrLqOz0tx0nXJB4rdD5c+vixLw=="
24 | },
25 | "@types/request": {
26 | "version": "2.48.1",
27 | "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.1.tgz",
28 | "integrity": "sha512-ZgEZ1TiD+KGA9LiAAPPJL68Id2UWfeSO62ijSXZjFJArVV+2pKcsVHmrcu+1oiE3q6eDGiFiSolRc4JHoerBBg==",
29 | "requires": {
30 | "@types/caseless": "*",
31 | "@types/form-data": "*",
32 | "@types/node": "*",
33 | "@types/tough-cookie": "*"
34 | }
35 | },
36 | "@types/tough-cookie": {
37 | "version": "2.3.5",
38 | "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.5.tgz",
39 | "integrity": "sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg=="
40 | },
41 | "accepts": {
42 | "version": "1.3.5",
43 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
44 | "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
45 | "requires": {
46 | "mime-types": "~2.1.18",
47 | "negotiator": "0.6.1"
48 | }
49 | },
50 | "ajv": {
51 | "version": "6.10.0",
52 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
53 | "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
54 | "requires": {
55 | "fast-deep-equal": "^2.0.1",
56 | "fast-json-stable-stringify": "^2.0.0",
57 | "json-schema-traverse": "^0.4.1",
58 | "uri-js": "^4.2.2"
59 | }
60 | },
61 | "array-flatten": {
62 | "version": "1.1.1",
63 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
64 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
65 | },
66 | "asn1": {
67 | "version": "0.2.4",
68 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
69 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
70 | "requires": {
71 | "safer-buffer": "~2.1.0"
72 | }
73 | },
74 | "assert-plus": {
75 | "version": "1.0.0",
76 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
77 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
78 | },
79 | "asynckit": {
80 | "version": "0.4.0",
81 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
82 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
83 | },
84 | "aws-sign2": {
85 | "version": "0.7.0",
86 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
87 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
88 | },
89 | "aws4": {
90 | "version": "1.8.0",
91 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
92 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
93 | },
94 | "bcrypt-pbkdf": {
95 | "version": "1.0.2",
96 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
97 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
98 | "requires": {
99 | "tweetnacl": "^0.14.3"
100 | },
101 | "dependencies": {
102 | "tweetnacl": {
103 | "version": "0.14.5",
104 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
105 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
106 | }
107 | }
108 | },
109 | "body-parser": {
110 | "version": "1.18.3",
111 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
112 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
113 | "requires": {
114 | "bytes": "3.0.0",
115 | "content-type": "~1.0.4",
116 | "debug": "2.6.9",
117 | "depd": "~1.1.2",
118 | "http-errors": "~1.6.3",
119 | "iconv-lite": "0.4.23",
120 | "on-finished": "~2.3.0",
121 | "qs": "6.5.2",
122 | "raw-body": "2.3.3",
123 | "type-is": "~1.6.16"
124 | }
125 | },
126 | "bytes": {
127 | "version": "3.0.0",
128 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
129 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
130 | },
131 | "caseless": {
132 | "version": "0.12.0",
133 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
134 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
135 | },
136 | "combined-stream": {
137 | "version": "1.0.7",
138 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
139 | "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
140 | "requires": {
141 | "delayed-stream": "~1.0.0"
142 | }
143 | },
144 | "content-disposition": {
145 | "version": "0.5.2",
146 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
147 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
148 | },
149 | "content-type": {
150 | "version": "1.0.4",
151 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
152 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
153 | },
154 | "cookie": {
155 | "version": "0.3.1",
156 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
157 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
158 | },
159 | "cookie-signature": {
160 | "version": "1.0.6",
161 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
162 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
163 | },
164 | "core-util-is": {
165 | "version": "1.0.2",
166 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
167 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
168 | },
169 | "dashdash": {
170 | "version": "1.14.1",
171 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
172 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
173 | "requires": {
174 | "assert-plus": "^1.0.0"
175 | }
176 | },
177 | "debug": {
178 | "version": "2.6.9",
179 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
180 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
181 | "requires": {
182 | "ms": "2.0.0"
183 | }
184 | },
185 | "delayed-stream": {
186 | "version": "1.0.0",
187 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
188 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
189 | },
190 | "depd": {
191 | "version": "1.1.2",
192 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
193 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
194 | },
195 | "destroy": {
196 | "version": "1.0.4",
197 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
198 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
199 | },
200 | "ecc-jsbn": {
201 | "version": "0.1.2",
202 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
203 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
204 | "requires": {
205 | "jsbn": "~0.1.0",
206 | "safer-buffer": "^2.1.0"
207 | }
208 | },
209 | "ee-first": {
210 | "version": "1.1.1",
211 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
212 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
213 | },
214 | "encodeurl": {
215 | "version": "1.0.2",
216 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
217 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
218 | },
219 | "escape-html": {
220 | "version": "1.0.3",
221 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
222 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
223 | },
224 | "etag": {
225 | "version": "1.8.1",
226 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
227 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
228 | },
229 | "express": {
230 | "version": "4.16.4",
231 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
232 | "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
233 | "requires": {
234 | "accepts": "~1.3.5",
235 | "array-flatten": "1.1.1",
236 | "body-parser": "1.18.3",
237 | "content-disposition": "0.5.2",
238 | "content-type": "~1.0.4",
239 | "cookie": "0.3.1",
240 | "cookie-signature": "1.0.6",
241 | "debug": "2.6.9",
242 | "depd": "~1.1.2",
243 | "encodeurl": "~1.0.2",
244 | "escape-html": "~1.0.3",
245 | "etag": "~1.8.1",
246 | "finalhandler": "1.1.1",
247 | "fresh": "0.5.2",
248 | "merge-descriptors": "1.0.1",
249 | "methods": "~1.1.2",
250 | "on-finished": "~2.3.0",
251 | "parseurl": "~1.3.2",
252 | "path-to-regexp": "0.1.7",
253 | "proxy-addr": "~2.0.4",
254 | "qs": "6.5.2",
255 | "range-parser": "~1.2.0",
256 | "safe-buffer": "5.1.2",
257 | "send": "0.16.2",
258 | "serve-static": "1.13.2",
259 | "setprototypeof": "1.1.0",
260 | "statuses": "~1.4.0",
261 | "type-is": "~1.6.16",
262 | "utils-merge": "1.0.1",
263 | "vary": "~1.1.2"
264 | },
265 | "dependencies": {
266 | "statuses": {
267 | "version": "1.4.0",
268 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
269 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
270 | }
271 | }
272 | },
273 | "extend": {
274 | "version": "3.0.2",
275 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
276 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
277 | },
278 | "extsprintf": {
279 | "version": "1.3.0",
280 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
281 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
282 | },
283 | "fast-deep-equal": {
284 | "version": "2.0.1",
285 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
286 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
287 | },
288 | "fast-json-stable-stringify": {
289 | "version": "2.0.0",
290 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
291 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
292 | },
293 | "finalhandler": {
294 | "version": "1.1.1",
295 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
296 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
297 | "requires": {
298 | "debug": "2.6.9",
299 | "encodeurl": "~1.0.2",
300 | "escape-html": "~1.0.3",
301 | "on-finished": "~2.3.0",
302 | "parseurl": "~1.3.2",
303 | "statuses": "~1.4.0",
304 | "unpipe": "~1.0.0"
305 | },
306 | "dependencies": {
307 | "statuses": {
308 | "version": "1.4.0",
309 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
310 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
311 | }
312 | }
313 | },
314 | "forever-agent": {
315 | "version": "0.6.1",
316 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
317 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
318 | },
319 | "form-data": {
320 | "version": "2.3.3",
321 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
322 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
323 | "requires": {
324 | "asynckit": "^0.4.0",
325 | "combined-stream": "^1.0.6",
326 | "mime-types": "^2.1.12"
327 | }
328 | },
329 | "forwarded": {
330 | "version": "0.1.2",
331 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
332 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
333 | },
334 | "fresh": {
335 | "version": "0.5.2",
336 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
337 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
338 | },
339 | "getpass": {
340 | "version": "0.1.7",
341 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
342 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
343 | "requires": {
344 | "assert-plus": "^1.0.0"
345 | }
346 | },
347 | "har-schema": {
348 | "version": "2.0.0",
349 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
350 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
351 | },
352 | "har-validator": {
353 | "version": "5.1.3",
354 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
355 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
356 | "requires": {
357 | "ajv": "^6.5.5",
358 | "har-schema": "^2.0.0"
359 | }
360 | },
361 | "http-errors": {
362 | "version": "1.6.3",
363 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
364 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
365 | "requires": {
366 | "depd": "~1.1.2",
367 | "inherits": "2.0.3",
368 | "setprototypeof": "1.1.0",
369 | "statuses": ">= 1.4.0 < 2"
370 | }
371 | },
372 | "http-signature": {
373 | "version": "1.2.0",
374 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
375 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
376 | "requires": {
377 | "assert-plus": "^1.0.0",
378 | "jsprim": "^1.2.2",
379 | "sshpk": "^1.7.0"
380 | }
381 | },
382 | "iconv-lite": {
383 | "version": "0.4.23",
384 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
385 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
386 | "requires": {
387 | "safer-buffer": ">= 2.1.2 < 3"
388 | }
389 | },
390 | "inherits": {
391 | "version": "2.0.3",
392 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
393 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
394 | },
395 | "ipaddr.js": {
396 | "version": "1.9.0",
397 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
398 | "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
399 | },
400 | "is-typedarray": {
401 | "version": "1.0.0",
402 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
403 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
404 | },
405 | "isstream": {
406 | "version": "0.1.2",
407 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
408 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
409 | },
410 | "jsbn": {
411 | "version": "0.1.1",
412 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
413 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
414 | },
415 | "json-schema": {
416 | "version": "0.2.3",
417 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
418 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
419 | },
420 | "json-schema-traverse": {
421 | "version": "0.4.1",
422 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
423 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
424 | },
425 | "json-stringify-safe": {
426 | "version": "5.0.1",
427 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
428 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
429 | },
430 | "jsprim": {
431 | "version": "1.4.1",
432 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
433 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
434 | "requires": {
435 | "assert-plus": "1.0.0",
436 | "extsprintf": "1.3.0",
437 | "json-schema": "0.2.3",
438 | "verror": "1.10.0"
439 | }
440 | },
441 | "media-typer": {
442 | "version": "0.3.0",
443 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
444 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
445 | },
446 | "merge-descriptors": {
447 | "version": "1.0.1",
448 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
449 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
450 | },
451 | "methods": {
452 | "version": "1.1.2",
453 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
454 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
455 | },
456 | "mime": {
457 | "version": "1.4.1",
458 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
459 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
460 | },
461 | "mime-db": {
462 | "version": "1.40.0",
463 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
464 | "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
465 | },
466 | "mime-types": {
467 | "version": "2.1.24",
468 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
469 | "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
470 | "requires": {
471 | "mime-db": "1.40.0"
472 | }
473 | },
474 | "ms": {
475 | "version": "2.0.0",
476 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
477 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
478 | },
479 | "negotiator": {
480 | "version": "0.6.1",
481 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
482 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
483 | },
484 | "oauth-sign": {
485 | "version": "0.9.0",
486 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
487 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
488 | },
489 | "on-finished": {
490 | "version": "2.3.0",
491 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
492 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
493 | "requires": {
494 | "ee-first": "1.1.1"
495 | }
496 | },
497 | "parseurl": {
498 | "version": "1.3.3",
499 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
500 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
501 | },
502 | "path-to-regexp": {
503 | "version": "0.1.7",
504 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
505 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
506 | },
507 | "performance-now": {
508 | "version": "2.1.0",
509 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
510 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
511 | },
512 | "proxy-addr": {
513 | "version": "2.0.5",
514 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
515 | "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
516 | "requires": {
517 | "forwarded": "~0.1.2",
518 | "ipaddr.js": "1.9.0"
519 | }
520 | },
521 | "psl": {
522 | "version": "1.1.31",
523 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
524 | "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw=="
525 | },
526 | "punycode": {
527 | "version": "2.1.1",
528 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
529 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
530 | },
531 | "pusher": {
532 | "version": "2.2.0",
533 | "resolved": "https://registry.npmjs.org/pusher/-/pusher-2.2.0.tgz",
534 | "integrity": "sha512-Q1cWC63KTSl36EFVjDpn5MtIWh2sYusUOY3unyQIXyATPJi2VPV4X7YvZHM5HXw9cXJgjO9FW1niv+vcCMfHvA==",
535 | "requires": {
536 | "@types/request": "^2.47.1",
537 | "request": "2.88.0",
538 | "tweetnacl": "^1.0.0",
539 | "tweetnacl-util": "^0.15.0"
540 | }
541 | },
542 | "qs": {
543 | "version": "6.5.2",
544 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
545 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
546 | },
547 | "range-parser": {
548 | "version": "1.2.0",
549 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
550 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
551 | },
552 | "raw-body": {
553 | "version": "2.3.3",
554 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
555 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
556 | "requires": {
557 | "bytes": "3.0.0",
558 | "http-errors": "1.6.3",
559 | "iconv-lite": "0.4.23",
560 | "unpipe": "1.0.0"
561 | }
562 | },
563 | "request": {
564 | "version": "2.88.0",
565 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
566 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
567 | "requires": {
568 | "aws-sign2": "~0.7.0",
569 | "aws4": "^1.8.0",
570 | "caseless": "~0.12.0",
571 | "combined-stream": "~1.0.6",
572 | "extend": "~3.0.2",
573 | "forever-agent": "~0.6.1",
574 | "form-data": "~2.3.2",
575 | "har-validator": "~5.1.0",
576 | "http-signature": "~1.2.0",
577 | "is-typedarray": "~1.0.0",
578 | "isstream": "~0.1.2",
579 | "json-stringify-safe": "~5.0.1",
580 | "mime-types": "~2.1.19",
581 | "oauth-sign": "~0.9.0",
582 | "performance-now": "^2.1.0",
583 | "qs": "~6.5.2",
584 | "safe-buffer": "^5.1.2",
585 | "tough-cookie": "~2.4.3",
586 | "tunnel-agent": "^0.6.0",
587 | "uuid": "^3.3.2"
588 | }
589 | },
590 | "safe-buffer": {
591 | "version": "5.1.2",
592 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
593 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
594 | },
595 | "safer-buffer": {
596 | "version": "2.1.2",
597 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
598 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
599 | },
600 | "send": {
601 | "version": "0.16.2",
602 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
603 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
604 | "requires": {
605 | "debug": "2.6.9",
606 | "depd": "~1.1.2",
607 | "destroy": "~1.0.4",
608 | "encodeurl": "~1.0.2",
609 | "escape-html": "~1.0.3",
610 | "etag": "~1.8.1",
611 | "fresh": "0.5.2",
612 | "http-errors": "~1.6.2",
613 | "mime": "1.4.1",
614 | "ms": "2.0.0",
615 | "on-finished": "~2.3.0",
616 | "range-parser": "~1.2.0",
617 | "statuses": "~1.4.0"
618 | },
619 | "dependencies": {
620 | "statuses": {
621 | "version": "1.4.0",
622 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
623 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
624 | }
625 | }
626 | },
627 | "serve-static": {
628 | "version": "1.13.2",
629 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
630 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
631 | "requires": {
632 | "encodeurl": "~1.0.2",
633 | "escape-html": "~1.0.3",
634 | "parseurl": "~1.3.2",
635 | "send": "0.16.2"
636 | }
637 | },
638 | "setprototypeof": {
639 | "version": "1.1.0",
640 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
641 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
642 | },
643 | "sshpk": {
644 | "version": "1.16.1",
645 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
646 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
647 | "requires": {
648 | "asn1": "~0.2.3",
649 | "assert-plus": "^1.0.0",
650 | "bcrypt-pbkdf": "^1.0.0",
651 | "dashdash": "^1.12.0",
652 | "ecc-jsbn": "~0.1.1",
653 | "getpass": "^0.1.1",
654 | "jsbn": "~0.1.0",
655 | "safer-buffer": "^2.0.2",
656 | "tweetnacl": "~0.14.0"
657 | },
658 | "dependencies": {
659 | "tweetnacl": {
660 | "version": "0.14.5",
661 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
662 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
663 | }
664 | }
665 | },
666 | "statuses": {
667 | "version": "1.5.0",
668 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
669 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
670 | },
671 | "tough-cookie": {
672 | "version": "2.4.3",
673 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
674 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
675 | "requires": {
676 | "psl": "^1.1.24",
677 | "punycode": "^1.4.1"
678 | },
679 | "dependencies": {
680 | "punycode": {
681 | "version": "1.4.1",
682 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
683 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
684 | }
685 | }
686 | },
687 | "tunnel-agent": {
688 | "version": "0.6.0",
689 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
690 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
691 | "requires": {
692 | "safe-buffer": "^5.0.1"
693 | }
694 | },
695 | "tweetnacl": {
696 | "version": "1.0.1",
697 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.1.tgz",
698 | "integrity": "sha512-kcoMoKTPYnoeS50tzoqjPY3Uv9axeuuFAZY9M/9zFnhoVvRfxz9K29IMPD7jGmt2c8SW7i3gT9WqDl2+nV7p4A=="
699 | },
700 | "tweetnacl-util": {
701 | "version": "0.15.0",
702 | "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.0.tgz",
703 | "integrity": "sha1-RXbBzuXi1j0gf+5S8boCgZSAvHU="
704 | },
705 | "type-is": {
706 | "version": "1.6.16",
707 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
708 | "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
709 | "requires": {
710 | "media-typer": "0.3.0",
711 | "mime-types": "~2.1.18"
712 | }
713 | },
714 | "unpipe": {
715 | "version": "1.0.0",
716 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
717 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
718 | },
719 | "uri-js": {
720 | "version": "4.2.2",
721 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
722 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
723 | "requires": {
724 | "punycode": "^2.1.0"
725 | }
726 | },
727 | "utils-merge": {
728 | "version": "1.0.1",
729 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
730 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
731 | },
732 | "uuid": {
733 | "version": "3.3.2",
734 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
735 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
736 | },
737 | "vary": {
738 | "version": "1.1.2",
739 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
740 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
741 | },
742 | "verror": {
743 | "version": "1.10.0",
744 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
745 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
746 | "requires": {
747 | "assert-plus": "^1.0.0",
748 | "core-util-is": "1.0.2",
749 | "extsprintf": "^1.2.0"
750 | }
751 | }
752 | }
753 | }
754 |
--------------------------------------------------------------------------------
/server/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "server",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "server.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "start": "node server.js"
9 | },
10 | "keywords": [],
11 | "author": "",
12 | "license": "ISC",
13 | "dependencies": {
14 | "body-parser": "^1.18.3",
15 | "express": "^4.16.4",
16 | "pusher": "^2.2.0"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/server/prisma.yml:
--------------------------------------------------------------------------------
1 | endpoint: http://localhost:4466
2 | datamodel: datamodel.graphql
--------------------------------------------------------------------------------
/server/server.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const bodyParser = require('body-parser')
3 | const Pusher = require('pusher');
4 |
5 | const app = express();
6 |
7 | let pusher = new Pusher({
8 | appId: 'PUSHER_APP_ID',
9 | key: 'PUSHER_APP_KEY',
10 | secret: 'PUSHER_APP_SECRET',
11 | cluster: 'PUSHER_APP_CLUSTER',
12 | useTLS: true
13 | });
14 |
15 | app.use(bodyParser.json());
16 | app.use(bodyParser.urlencoded({ extended: false }));
17 | app.use((req, res, next) => {
18 | res.header('Access-Control-Allow-Origin', '*');
19 | res.header(
20 | 'Access-Control-Allow-Headers',
21 | 'Origin, X-Requested-With, Content-Type, Accept'
22 | );
23 | next();
24 | });
25 |
26 | app.post('/trigger-post-event', (req, res) => {
27 | // trigger a new post event via pusher
28 | pusher.trigger('post-channel', 'new-post', {
29 | 'post': req.body
30 | })
31 |
32 | res.json({ 'status': 200 });
33 | });
34 |
35 | app.post('/trigger-comment-event', (req, res) => {
36 | // trigger a new comment event via pusher
37 | pusher.trigger('comment-channel', 'new-comment', {
38 | 'comment': req.body
39 | });
40 |
41 | res.json({ 'status': 200 });
42 | })
43 |
44 | let port = 3128;
45 | app.listen(port, () => {
46 | console.log('App listening on port' + port);
47 | });
--------------------------------------------------------------------------------
/src/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { Platform } from 'ionic-angular';
3 | import { StatusBar } from '@ionic-native/status-bar';
4 | import { SplashScreen } from '@ionic-native/splash-screen';
5 |
6 | import { TabsPage } from '../pages/tabs/tabs';
7 |
8 | @Component({
9 | templateUrl: 'app.html'
10 | })
11 | export class MyApp {
12 | rootPage:any = TabsPage;
13 |
14 | constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen) {
15 | platform.ready().then(() => {
16 | // Okay, so the platform is ready and our plugins are available.
17 | // Here you can do any higher level native things you might need.
18 | statusBar.styleDefault();
19 | splashScreen.hide();
20 | });
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/app/app.html:
--------------------------------------------------------------------------------
1 |
21 | {{username}} {{post_desc}} 22 |
23 |36 | {{comment?.user.username}} {{ comment?.message }} 37 |
38 |Enter a post description and hit Capture Image to create a post
11 |22 | {{post.user.username}} {{post.description}}
23 |
27 | {{ user?.posts.length }}
28 | {{ this.plural('post', user?.posts.length) }}
29 |
33 | {{ user?.followers }}
34 | {{ this.plural('follower', user?.followers) }}
35 |
39 | {{ user?.following }}
40 | following
41 |
{{ user?.fullname }}
53 |{{ user?.bio }}
54 |