Compare commits

25 Commits
Author SHA1 Message Date
marc c8dbf631c0 fix 2023-01-21 22:48:07 +01:00
marc 6f38de9a14 fix conflict 2023-01-21 22:46:54 +01:00
marc 3eb5992ee9 Merge branch 'main' into marc 2023-01-21 22:40:09 +01:00
efaviere d3f7f1ab43 fix get image size 2023-01-21 19:37:16 +01:00
efaviere 7656a362d7 fix image size 2023-01-21 19:34:35 +01:00
efaviere f4a72a3ad3 fix services 2023-01-21 19:32:00 +01:00
Etienne Faviere 16550589ec get it on playstore readme 2023-01-21 12:47:34 +01:00
efaviere 031a211cad master 2023-01-20 13:10:17 +01:00
Etienne Faviere bc535e411c Update README.md
add docker badge
2023-01-19 01:24:04 +01:00
Etienne Faviere f17bbb2b60 Update README.md 2023-01-19 01:18:50 +01:00
Etienne Faviere a6f59f7257 Update docker-image.yml 2023-01-19 01:16:41 +01:00
Etienne Faviere 40603fc453 Merge pull request #5 from Crakleurs/dependabot/npm_and_yarn/tsconfig-paths-4.1.2
Bump tsconfig-paths from 4.1.1 to 4.1.2
2023-01-19 01:05:56 +01:00
Etienne Faviere a0e6a26cf0 Merge pull request #4 from Crakleurs/dependabot/npm_and_yarn/types/node-18.11.18
Bump @types/node from 18.11.11 to 18.11.18
2023-01-19 01:05:45 +01:00
dependabot[bot] cc11095792 Merge pull request #6 from Crakleurs/dependabot/npm_and_yarn/sequelize-6.28.0 2023-01-19 00:04:19 +00:00
dependabot[bot] 99871fe3a9 Merge pull request #7 from Crakleurs/dependabot/npm_and_yarn/types/express-4.17.15 2023-01-19 00:03:49 +00:00
Etienne Faviere a73aaf5958 Merge pull request #8 from Crakleurs/dependabot/npm_and_yarn/typescript-4.9.4
Bump typescript from 4.9.3 to 4.9.4
2023-01-19 01:03:03 +01:00
Etienne Faviere d90a13f50e Create docker-image.yml 2023-01-19 00:51:53 +01:00
dependabot[bot] c83f6d495a Bump typescript from 4.9.3 to 4.9.4
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.9.3 to 4.9.4.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.9.3...v4.9.4)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-18 23:36:33 +00:00
dependabot[bot] 45c3748745 Bump @types/express from 4.17.14 to 4.17.15
Bumps [@types/express](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/express) from 4.17.14 to 4.17.15.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/express)

---
updated-dependencies:
- dependency-name: "@types/express"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-18 23:36:12 +00:00
dependabot[bot] 2a2f236d4b Bump sequelize from 6.26.0 to 6.28.0
Bumps [sequelize](https://github.com/sequelize/sequelize) from 6.26.0 to 6.28.0.
- [Release notes](https://github.com/sequelize/sequelize/releases)
- [Commits](https://github.com/sequelize/sequelize/compare/v6.26.0...v6.28.0)

---
updated-dependencies:
- dependency-name: sequelize
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-18 23:36:00 +00:00
dependabot[bot] 29e1b9a4b9 Bump tsconfig-paths from 4.1.1 to 4.1.2
Bumps [tsconfig-paths](https://github.com/dividab/tsconfig-paths) from 4.1.1 to 4.1.2.
- [Release notes](https://github.com/dividab/tsconfig-paths/releases)
- [Changelog](https://github.com/dividab/tsconfig-paths/blob/master/CHANGELOG.md)
- [Commits](https://github.com/dividab/tsconfig-paths/compare/v4.1.1...v4.1.2)

---
updated-dependencies:
- dependency-name: tsconfig-paths
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-18 23:35:43 +00:00
dependabot[bot] 460559178e Bump @types/node from 18.11.11 to 18.11.18
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 18.11.11 to 18.11.18.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-18 23:35:26 +00:00
Etienne Faviere 1d83500b12 Create dependabot.yml 2023-01-19 00:25:38 +01:00
marc b29bc3e9f8 Merge branch 'main' into marc 2023-01-18 12:16:42 +01:00
marc cb47966418 docker node api 2023-01-17 22:25:21 +01:00
15 changed files with 647 additions and 120 deletions
+11
View File
@@ -0,0 +1,11 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "npm" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
+34
View File
@@ -0,0 +1,34 @@
name: Publish Docker image
on:
release:
types: [published]
workflow_dispatch:
jobs:
push_to_registry:
name: Push Docker image to Docker Hub
runs-on: ubuntu-latest
steps:
- name: Check out the repo
uses: actions/checkout@v3
- name: Log in to Docker Hub
uses: docker/login-action@v2.1.0
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v4.3.0
with:
images: efaviere/mob-whale-api
- name: Build and push Docker image
uses: docker/build-push-action@v3.3.0
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
+1 -3
View File
@@ -1,7 +1,5 @@
FROM node:16.3.0-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . .
@@ -9,6 +7,6 @@ COPY . .
RUN npm install
RUN npm run build
EXPOSE 8080
EXPOSE 8080 8000
CMD ["npm", "run", "start"]
+5
View File
@@ -1,4 +1,9 @@
[![Publish Docker image](https://github.com/Crakleurs/docker-node-api/actions/workflows/docker-image.yml/badge.svg)](https://github.com/Crakleurs/docker-node-api/actions/workflows/docker-image.yml)
# docker-node-api
## Download
<a href='https://play.google.com/store/apps/details?id=fr.isep.mobwhale&gl=FR&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png' height="150"/></a>
## Overview
+2 -5
View File
@@ -10,12 +10,8 @@ services:
POSTGRES_PASSWORD: d3kTrklm54208
POSTGRES_DB: docker
api:
image: docker-api
image: marcpartensky/docker-node-api
build: .
depends_on:
- db
container_name: docker-api
restart: unless-stopped
environment:
NODE_ENV: docker
ADMIN_NAME: etienne
@@ -30,3 +26,4 @@ services:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- "8080:8080"
- "8000:8000"
+384 -54
View File
@@ -16,20 +16,22 @@
"jsonwebtoken": "^9.0.0",
"pg": "^8.8.0",
"pg-hstore": "^2.3.4",
"sequelize": "^6.26.0"
"sequelize": "^6.26.0",
"socket.io": "^4.5.4"
},
"devDependencies": {
"@types/bcrypt": "^5.0.0",
"@types/cors": "^2.8.13",
"@types/dockerode": "^3.3.14",
"@types/express": "^4.17.14",
"@types/express-ws": "^3.0.1",
"@types/jsonwebtoken": "^9.0.0",
"@types/node": "^18.11.11",
"@types/node": "^18.11.18",
"nodemon": "^2.0.20",
"ts-node": "^10.9.1",
"tsconfig-paths": "^4.1.1",
"tsconfig-paths": "^4.1.2",
"tsup": "^6.5.0",
"typescript": "^4.9.3"
"typescript": "^4.9.4"
}
},
"node_modules/@balena/dockerignore": {
@@ -188,6 +190,11 @@
"node": ">= 8"
}
},
"node_modules/@socket.io/component-emitter": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
"integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
},
"node_modules/@tsconfig/node10": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
@@ -240,11 +247,15 @@
"@types/node": "*"
}
},
"node_modules/@types/cookie": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
"integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
},
"node_modules/@types/cors": {
"version": "2.8.13",
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz",
"integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==",
"dev": true,
"dependencies": {
"@types/node": "*"
}
@@ -278,13 +289,13 @@
}
},
"node_modules/@types/express": {
"version": "4.17.14",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz",
"integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==",
"version": "4.17.15",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.15.tgz",
"integrity": "sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==",
"dev": true,
"dependencies": {
"@types/body-parser": "*",
"@types/express-serve-static-core": "^4.17.18",
"@types/express-serve-static-core": "^4.17.31",
"@types/qs": "*",
"@types/serve-static": "*"
}
@@ -300,6 +311,17 @@
"@types/range-parser": "*"
}
},
"node_modules/@types/express-ws": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@types/express-ws/-/express-ws-3.0.1.tgz",
"integrity": "sha512-VguRXzcpPBF0IggIGpUoM65cZJDfMQxoc6dKoCz1yLzcwcXW7ft60yhq3ygKhyEhEIQFtLrWjyz4AJ1qjmzCFw==",
"dev": true,
"dependencies": {
"@types/express": "*",
"@types/express-serve-static-core": "*",
"@types/ws": "*"
}
},
"node_modules/@types/jsonwebtoken": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz",
@@ -321,9 +343,9 @@
"integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
},
"node_modules/@types/node": {
"version": "18.11.11",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.11.tgz",
"integrity": "sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g=="
"version": "18.11.18",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
"integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA=="
},
"node_modules/@types/qs": {
"version": "6.9.7",
@@ -361,6 +383,15 @@
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.10.tgz",
"integrity": "sha512-t1yxFAR2n0+VO6hd/FJ9F2uezAZVWHLmpmlJzm1eX03+H7+HsuTAp7L8QJs+2pQCfWkP1+EXsGK9Z9v7o/qPVQ=="
},
"node_modules/@types/ws": {
"version": "8.5.4",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz",
"integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==",
"dev": true,
"dependencies": {
"@types/node": "*"
}
},
"node_modules/abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -527,6 +558,14 @@
}
]
},
"node_modules/base64id": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
"integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
"engines": {
"node": "^4.5.0 || >= 5.9"
}
},
"node_modules/bcrypt": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.0.tgz",
@@ -997,6 +1036,63 @@
"once": "^1.4.0"
}
},
"node_modules/engine.io": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz",
"integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==",
"dependencies": {
"@types/cookie": "^0.4.1",
"@types/cors": "^2.8.12",
"@types/node": ">=10.0.0",
"accepts": "~1.3.4",
"base64id": "2.0.0",
"cookie": "~0.4.1",
"cors": "~2.8.5",
"debug": "~4.3.1",
"engine.io-parser": "~5.0.3",
"ws": "~8.2.3"
},
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/engine.io-parser": {
"version": "5.0.6",
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz",
"integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==",
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/engine.io/node_modules/cookie": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
"integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/engine.io/node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/engine.io/node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/esbuild": {
"version": "0.15.18",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz",
@@ -1919,9 +2015,9 @@
}
},
"node_modules/json5": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
"integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
"bin": {
"json5": "lib/cli.js"
@@ -2768,9 +2864,9 @@
}
},
"node_modules/retry-as-promised": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-6.1.0.tgz",
"integrity": "sha512-Hj/jY+wFC+SB9SDlIIFWiGOHnNG0swYbGYsOj2BJ8u2HKUaobNKab0OIC0zOLYzDy0mb7A4xA5BMo4LMz5YtEA=="
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.3.tgz",
"integrity": "sha512-SEvMa4khHvpU/o6zgh7sK24qm6rxVgKnrSyzb5POeDvZx5N9Bf0s5sQsQ4Fl+HjRp0X+w2UzACGfUnXtx6cJ9Q=="
},
"node_modules/reusify": {
"version": "1.0.4",
@@ -2905,9 +3001,9 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"node_modules/sequelize": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.26.0.tgz",
"integrity": "sha512-Xv82z1FdSn/qwB1IObSxIHV519cFk/vSD28vWs8Y0VucQLn7pK2x2jYjf2Qg/rBUQbCVprDdU7RPf+55rrkc0A==",
"version": "6.28.0",
"resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.28.0.tgz",
"integrity": "sha512-+WHqvUQgTp19GLkt+gyQ+F6qg+FIEO2O5F9C0TOYV/PjZ2a/XwWvVkL1NCkS4VSIjVVvAUutiW6Wv9ofveGaVw==",
"funding": [
{
"type": "opencollective",
@@ -2924,7 +3020,7 @@
"moment": "^2.29.1",
"moment-timezone": "^0.5.34",
"pg-connection-string": "^2.5.0",
"retry-as-promised": "^6.1.0",
"retry-as-promised": "^7.0.3",
"semver": "^7.3.5",
"sequelize-pool": "^7.1.0",
"toposort-class": "^1.0.1",
@@ -3101,6 +3197,81 @@
"node": ">=8"
}
},
"node_modules/socket.io": {
"version": "4.5.4",
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.4.tgz",
"integrity": "sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ==",
"dependencies": {
"accepts": "~1.3.4",
"base64id": "~2.0.0",
"debug": "~4.3.2",
"engine.io": "~6.2.1",
"socket.io-adapter": "~2.4.0",
"socket.io-parser": "~4.2.1"
},
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/socket.io-adapter": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz",
"integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg=="
},
"node_modules/socket.io-parser": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz",
"integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==",
"dependencies": {
"@socket.io/component-emitter": "~3.1.0",
"debug": "~4.3.1"
},
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/socket.io-parser/node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/socket.io-parser/node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/socket.io/node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/socket.io/node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/source-map": {
"version": "0.8.0-beta.0",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz",
@@ -3410,12 +3581,12 @@
}
},
"node_modules/tsconfig-paths": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.1.tgz",
"integrity": "sha512-VgPrtLKpRgEAJsMj5Q/I/mXouC6A/7eJ/X4Nuk6o0cRPwBtznYxTCU4FodbexbzH9somBPEXYi0ZkUViUpJ21Q==",
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.2.tgz",
"integrity": "sha512-uhxiMgnXQp1IR622dUXI+9Ehnws7i/y6xvpZB9IbUVOPy0muvdvgXeZOn88UcGPiT98Vp3rJPTa8bFoalZ3Qhw==",
"dev": true,
"dependencies": {
"json5": "^2.2.1",
"json5": "^2.2.2",
"minimist": "^1.2.6",
"strip-bom": "^3.0.0"
},
@@ -3509,9 +3680,9 @@
}
},
"node_modules/typescript": {
"version": "4.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz",
"integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==",
"version": "4.9.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
"integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
@@ -3636,6 +3807,26 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"node_modules/ws": {
"version": "8.2.3",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
"integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
"utf-8-validate": "^5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
"optional": true
},
"utf-8-validate": {
"optional": true
}
}
},
"node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
@@ -3779,6 +3970,11 @@
"fastq": "^1.6.0"
}
},
"@socket.io/component-emitter": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
"integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
},
"@tsconfig/node10": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
@@ -3831,11 +4027,15 @@
"@types/node": "*"
}
},
"@types/cookie": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
"integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
},
"@types/cors": {
"version": "2.8.13",
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz",
"integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==",
"dev": true,
"requires": {
"@types/node": "*"
}
@@ -3869,13 +4069,13 @@
}
},
"@types/express": {
"version": "4.17.14",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz",
"integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==",
"version": "4.17.15",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.15.tgz",
"integrity": "sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==",
"dev": true,
"requires": {
"@types/body-parser": "*",
"@types/express-serve-static-core": "^4.17.18",
"@types/express-serve-static-core": "^4.17.31",
"@types/qs": "*",
"@types/serve-static": "*"
}
@@ -3891,6 +4091,17 @@
"@types/range-parser": "*"
}
},
"@types/express-ws": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@types/express-ws/-/express-ws-3.0.1.tgz",
"integrity": "sha512-VguRXzcpPBF0IggIGpUoM65cZJDfMQxoc6dKoCz1yLzcwcXW7ft60yhq3ygKhyEhEIQFtLrWjyz4AJ1qjmzCFw==",
"dev": true,
"requires": {
"@types/express": "*",
"@types/express-serve-static-core": "*",
"@types/ws": "*"
}
},
"@types/jsonwebtoken": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz",
@@ -3912,9 +4123,9 @@
"integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
},
"@types/node": {
"version": "18.11.11",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.11.tgz",
"integrity": "sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g=="
"version": "18.11.18",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
"integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA=="
},
"@types/qs": {
"version": "6.9.7",
@@ -3952,6 +4163,15 @@
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.10.tgz",
"integrity": "sha512-t1yxFAR2n0+VO6hd/FJ9F2uezAZVWHLmpmlJzm1eX03+H7+HsuTAp7L8QJs+2pQCfWkP1+EXsGK9Z9v7o/qPVQ=="
},
"@types/ws": {
"version": "8.5.4",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz",
"integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==",
"dev": true,
"requires": {
"@types/node": "*"
}
},
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -4071,6 +4291,11 @@
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"base64id": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
"integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
},
"bcrypt": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.0.tgz",
@@ -4427,6 +4652,48 @@
"once": "^1.4.0"
}
},
"engine.io": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz",
"integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==",
"requires": {
"@types/cookie": "^0.4.1",
"@types/cors": "^2.8.12",
"@types/node": ">=10.0.0",
"accepts": "~1.3.4",
"base64id": "2.0.0",
"cookie": "~0.4.1",
"cors": "~2.8.5",
"debug": "~4.3.1",
"engine.io-parser": "~5.0.3",
"ws": "~8.2.3"
},
"dependencies": {
"cookie": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
"integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
},
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"engine.io-parser": {
"version": "5.0.6",
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz",
"integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw=="
},
"esbuild": {
"version": "0.15.18",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz",
@@ -5024,9 +5291,9 @@
"dev": true
},
"json5": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
"integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true
},
"jsonwebtoken": {
@@ -5627,9 +5894,9 @@
"dev": true
},
"retry-as-promised": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-6.1.0.tgz",
"integrity": "sha512-Hj/jY+wFC+SB9SDlIIFWiGOHnNG0swYbGYsOj2BJ8u2HKUaobNKab0OIC0zOLYzDy0mb7A4xA5BMo4LMz5YtEA=="
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.3.tgz",
"integrity": "sha512-SEvMa4khHvpU/o6zgh7sK24qm6rxVgKnrSyzb5POeDvZx5N9Bf0s5sQsQ4Fl+HjRp0X+w2UzACGfUnXtx6cJ9Q=="
},
"reusify": {
"version": "1.0.4",
@@ -5717,9 +5984,9 @@
}
},
"sequelize": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.26.0.tgz",
"integrity": "sha512-Xv82z1FdSn/qwB1IObSxIHV519cFk/vSD28vWs8Y0VucQLn7pK2x2jYjf2Qg/rBUQbCVprDdU7RPf+55rrkc0A==",
"version": "6.28.0",
"resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.28.0.tgz",
"integrity": "sha512-+WHqvUQgTp19GLkt+gyQ+F6qg+FIEO2O5F9C0TOYV/PjZ2a/XwWvVkL1NCkS4VSIjVVvAUutiW6Wv9ofveGaVw==",
"requires": {
"@types/debug": "^4.1.7",
"@types/validator": "^13.7.1",
@@ -5730,7 +5997,7 @@
"moment": "^2.29.1",
"moment-timezone": "^0.5.34",
"pg-connection-string": "^2.5.0",
"retry-as-promised": "^6.1.0",
"retry-as-promised": "^7.0.3",
"semver": "^7.3.5",
"sequelize-pool": "^7.1.0",
"toposort-class": "^1.0.1",
@@ -5841,6 +6108,63 @@
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
},
"socket.io": {
"version": "4.5.4",
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.4.tgz",
"integrity": "sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ==",
"requires": {
"accepts": "~1.3.4",
"base64id": "~2.0.0",
"debug": "~4.3.2",
"engine.io": "~6.2.1",
"socket.io-adapter": "~2.4.0",
"socket.io-parser": "~4.2.1"
},
"dependencies": {
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"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-adapter": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz",
"integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg=="
},
"socket.io-parser": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz",
"integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==",
"requires": {
"@socket.io/component-emitter": "~3.1.0",
"debug": "~4.3.1"
},
"dependencies": {
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"source-map": {
"version": "0.8.0-beta.0",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz",
@@ -6069,12 +6393,12 @@
}
},
"tsconfig-paths": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.1.tgz",
"integrity": "sha512-VgPrtLKpRgEAJsMj5Q/I/mXouC6A/7eJ/X4Nuk6o0cRPwBtznYxTCU4FodbexbzH9somBPEXYi0ZkUViUpJ21Q==",
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.2.tgz",
"integrity": "sha512-uhxiMgnXQp1IR622dUXI+9Ehnws7i/y6xvpZB9IbUVOPy0muvdvgXeZOn88UcGPiT98Vp3rJPTa8bFoalZ3Qhw==",
"dev": true,
"requires": {
"json5": "^2.2.1",
"json5": "^2.2.2",
"minimist": "^1.2.6",
"strip-bom": "^3.0.0"
}
@@ -6133,9 +6457,9 @@
}
},
"typescript": {
"version": "4.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz",
"integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==",
"version": "4.9.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
"integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==",
"dev": true
},
"undefsafe": {
@@ -6232,6 +6556,12 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"ws": {
"version": "8.2.3",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
"integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
"requires": {}
},
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+6 -4
View File
@@ -16,13 +16,14 @@
"@types/cors": "^2.8.13",
"@types/dockerode": "^3.3.14",
"@types/express": "^4.17.14",
"@types/express-ws": "^3.0.1",
"@types/jsonwebtoken": "^9.0.0",
"@types/node": "^18.11.11",
"@types/node": "^18.11.18",
"nodemon": "^2.0.20",
"ts-node": "^10.9.1",
"tsconfig-paths": "^4.1.1",
"tsconfig-paths": "^4.1.2",
"tsup": "^6.5.0",
"typescript": "^4.9.3"
"typescript": "^4.9.4"
},
"dependencies": {
"bcrypt": "^5.1.0",
@@ -32,6 +33,7 @@
"jsonwebtoken": "^9.0.0",
"pg": "^8.8.0",
"pg-hstore": "^2.3.4",
"sequelize": "^6.26.0"
"sequelize": "^6.26.0",
"socket.io": "^4.5.4"
}
}
+1
View File
@@ -1,5 +1,6 @@
export const config = {
API_PORT: 8080,
WS_PORT: 8000,
PRODUCTION: false,
database: {
USERNAME: process.env.DB_USER || "root",
+11 -8
View File
@@ -1,19 +1,19 @@
import cors from 'cors'
import express from 'express'
import { config } from '~/config'
import { ExceptionsHandler } from '~/middlewares/exceptions.handler'
import { UnknownRoutesHandler } from '~/middlewares/unknownRoutes.handler'
import {config} from '~/config'
import {ExceptionsHandler} from '~/middlewares/exceptions.handler'
import {UnknownRoutesHandler} from '~/middlewares/unknownRoutes.handler'
import {UsersController} from "~/resources/users/users.controller";
import {ContainersController} from "~/resources/containers/containers.controller";
import {ImagesController} from "~/resources/images/images.controller";
import dbInit from "~/database/init";
import {AuthController} from "~/resources/auth/auth.controller";
import {JwtHandler} from "~/middlewares/jwt.handler";
import * as console from "console";
import {io, server} from "~/utils/sockets";
const app = express()
app.use(express.json())
app.use(cors())
@@ -23,11 +23,11 @@ app.use('/containers', JwtHandler, ContainersController)
app.use('/images', JwtHandler, ImagesController)
app.use('/auth', AuthController)
io.on('connection', (socket) => {
console.log(socket.id)
})
app.get('/', (req, res) => res.send('API DOCKER-android'))
/**
* Pour toutes les autres routes non définies, on retourne une erreur
*/
app.all('*', UnknownRoutesHandler)
@@ -36,3 +36,6 @@ dbInit()
app.use(ExceptionsHandler)
app.listen(config.API_PORT, () => console.log("Server running on port " + config.API_PORT))
server.listen(config.WS_PORT, () => console.log("Websocket server running on port " + config.WS_PORT))
@@ -3,7 +3,6 @@ import {NotFoundException} from "~/utils/exception";
import {ContainersService} from "~/resources/containers/containers.service";
import {UserHandler} from "~/middlewares/jwt.handler";
import * as console from "console";
const ContainersController = Router()
const service = new ContainersService()
@@ -11,7 +10,6 @@ const service = new ContainersService()
ContainersController.get('/', async (req, res, next) => {
try {
return res
.status(200)
.json(await service.findAll())
+98 -29
View File
@@ -1,57 +1,126 @@
import Docker from 'dockerode'
import {sockets} from "~/utils/sockets";
import {asyncEmit} from "~/utils/async-emit";
export class ContainersService {
async findAll() {
const docker = new Docker();
return await docker.listContainers({'all': true});
const result: Docker.ContainerInfo[] = [];
for (const socket of sockets) {
try {
const containers = await asyncEmit<Docker.ContainerInfo[]>(socket, "containers-all");
result.push(...containers);
} catch (e) {
console.log(e)
}
}
return result;
}
async count() {
const docker = new Docker();
const containers = await docker.listContainers({'all': true});
return {"count": containers.length};
let result = 0;
for (const socket of sockets) {
try {
const {count} = await asyncEmit<{ count: number }>(socket, "containers-count");
result += count;
} catch (e) {
console.log(e)
}
}
return {"count": result};
}
async countRunning() {
const docker = new Docker();
const containers = await docker.listContainers();
return {"count": containers.length};
}
let result = 0;
for (const socket of sockets) {
try {
const {count} = await asyncEmit<{ count: number }>(socket, "containers-count-running");
result += count;
} catch (e) {
console.log(e)
}
}
async findOne(id: string) {
const docker = new Docker();
return docker.getContainer(id);
return {"count": result};
}
async remove(id: string) {
const docker = new Docker();
const container = docker.getContainer(id);
await container.remove()
for (const socket of sockets) {
try {
const containers = await asyncEmit<Docker.ContainerInfo[]>(socket, "containers-all");
for (const container of containers) {
if (container.Id === id) {
return await asyncEmit(socket, "containers-delete", id);
}
}
} catch (e) {
console.log(e)
}
}
}
async stop(id: string) {
const docker = new Docker();
const container = docker.getContainer(id);
await container.stop()
for (const socket of sockets) {
try {
const containers = await asyncEmit<Docker.ContainerInfo[]>(socket, "containers-all");
for (const container of containers) {
if (container.Id === id) {
return await asyncEmit(socket, "containers-stop", id);
}
}
} catch (e) {
console.log(e)
}
}
}
async restart(id: string) {
const docker = new Docker();
const container = docker.getContainer(id);
await container.restart()
for (const socket of sockets) {
try {
const containers = await asyncEmit<Docker.ContainerInfo[]>(socket, "containers-all");
for (const container of containers) {
if (container.Id === id) {
return await asyncEmit(socket, "containers-restart", id);
}
}
} catch (e) {
console.log(e)
}
}
}
async start(id: string) {
const docker = new Docker();
const container = docker.getContainer(id);
await container.start()
for (const socket of sockets) {
try {
const containers = await asyncEmit<Docker.ContainerInfo[]>(socket, "containers-all");
for (const container of containers) {
if (container.Id === id) {
return await asyncEmit(socket, "containers-start", id);
}
}
} catch (e) {
console.log(e)
}
}
}
async getContainerInfo(id: string) {
const docker = new Docker();
let containers = await docker.listContainers({'all': true});
return containers.find((container) => {
return container.Id === id
});
for (const socket of sockets) {
try {
const containers = await asyncEmit<Docker.ContainerInfo[]>(socket, "containers-all");
for (const container of containers) {
if (container.Id === id) {
return await asyncEmit(socket, "container", id);
}
}
} catch (e) {
console.log(e)
}
}
}
}
@@ -1,5 +1,4 @@
import { Router } from 'express'
import {NotFoundException} from "~/utils/exception";
import {ImagesService} from "~/resources/images/images.service";
import {UserHandler} from "~/middlewares/jwt.handler";
import * as console from "console";
+55 -14
View File
@@ -1,33 +1,74 @@
import Docker from 'dockerode'
import {sockets} from "~/utils/sockets";
import {asyncEmit} from "~/utils/async-emit";
export class ImagesService {
async findAll() {
const docker = new Docker();
return await docker.listImages();
const result: Docker.ImageInfo[] = [];
for (const socket of sockets) {
try {
const images = await asyncEmit<Docker.ImageInfo[]>(socket, "images-all");
result.push(...images);
} catch (e) {
console.log(e)
}
}
return result;
}
async count() {
const docker = new Docker();
const images = await docker.listImages();
return {"count": images.length};
let result = 0;
for (const socket of sockets) {
try {
const {count} = await asyncEmit<{ count: number }>(socket, "images-count");
result += count;
} catch (e) {
console.log(e)
}
}
return {"count": result};
}
async remove(id: string) {
const docker = new Docker();
const image = docker.getImage(id);
await image.remove()
for (const socket of sockets) {
try {
const images = await asyncEmit<Docker.ImageInfo[]>(socket, "images-all");
for (const image of images) {
if (image.Id === id) {
return await asyncEmit(socket,"images-remove", id);
}
}
} catch (e) {
console.log(e)
}
}
}
async prune() {
const docker = new Docker();
return await docker.pruneImages();
for (const socket of sockets) {
try {
await asyncEmit<Docker.ImageInfo[]>(socket, "images-prune");
} catch (e) {
console.log(e)
}
}
}
async totalSize() {
const docker = new Docker();
const images = await docker.listImages();
let result = 0;
for (const socket of sockets) {
try {
const {size} = await asyncEmit<{ size: number }>(socket, "images-size");
result += size;
} catch (e) {
console.log(e)
}
}
const size = images.reduce((accumulator, currentValue) => accumulator + currentValue.Size, 0);
return {size: size}
return {"size": result};
}
}
+14
View File
@@ -0,0 +1,14 @@
import {DefaultEventsMap} from "socket.io/dist/typed-events";
import {Socket} from "socket.io";
function asyncEmit<Type>(socket: Socket<DefaultEventsMap, DefaultEventsMap>, eventName: string, ...args: any[]) : Promise<Type> {
return new Promise(function (resolve, reject) {
socket.emit(eventName, ...args);
socket.once(eventName, (result) => {
resolve(result);
});
setTimeout(reject, 10000);
});
}
export {asyncEmit}
+25
View File
@@ -0,0 +1,25 @@
import {Server, Socket} from "socket.io";
import * as console from "console";
import {createServer} from "http";
import {DefaultEventsMap} from "socket.io/dist/typed-events";
let sockets: Socket<DefaultEventsMap, DefaultEventsMap, DefaultEventsMap, any>[] = []
const server = createServer();
const io = new Server(server)
io.on('connection', (socket) => {
sockets.push(socket)
socket.on('oui', (string: string) => {
console.log(string)
})
socket.on('disconnect', () => {
sockets = sockets.filter((element) => {
return element.id !== socket.id
})
})
})
export {io, server, sockets}