diff --git a/compose.yaml b/compose.yaml index 424e5dc..b3f0277 100644 --- a/compose.yaml +++ b/compose.yaml @@ -21,57 +21,10 @@ services: environment: - APP_ENV=${APP_ENV} - PORT=${PORT} - - DB_URL=${DB_URL} - - DB_NAME=${DB_NAME} - - REDIS_DB_HOST=redis - - REDIS_DB_PORT=${REDIS_DB_PORT} - - REDIS_DB_PASSWORD=${REDIS_DB_PASSWORD} - - REDIS_DB_DATABASE=${REDIS_DB_DATABASE} - - ACCESS_TOKEN_KEY=${ACCESS_TOKEN_KEY} - - REFRESH_TOKEN_KEY=${REFRESH_TOKEN_KEY} - - FIREBASE_JSON_STRING=${FIREBASE_JSON_STRING} - - FIREBASE_DATABASE_URL=${FIREBASE_DATABASE_URL} + - ALLOW_LOCAL_NO_AUTH=${ALLOW_LOCAL_NO_AUTH} + - AUTO_CONNECT_TO_WHATSAPP=${AUTO_CONNECT_TO_WHATSAPP} + - OPEN_BROWSER_FOR_SCAN=${OPEN_BROWSER_FOR_SCAN} ports: - 5000:${PORT} - redis: - image: redis:alpine - command: - - '--port ${REDIS_DB_PORT}' - - '--requirepass ${REDIS_DB_PASSWORD}' - ports: - - '${REDIS_DB_PORT}:${REDIS_DB_PORT}' - -# The commented out section below is an example of how to define a PostgreSQL -# database that your application can use. `depends_on` tells Docker Compose to -# start the database before your application. The `db-data` volume persists the -# database data between container restarts. The `db-password` secret is used -# to set the database password. You must create `db/password.txt` and add -# a password of your choosing to it before running `docker compose up`. -# depends_on: -# db: -# condition: service_healthy -# db: -# image: postgres -# restart: always -# user: postgres -# secrets: -# - db-password -# volumes: -# - db-data:/var/lib/postgresql/data -# environment: -# - POSTGRES_DB=example -# - POSTGRES_PASSWORD_FILE=/run/secrets/db-password -# expose: -# - 5432 -# healthcheck: -# test: [ "CMD", "pg_isready" ] -# interval: 10s -# timeout: 5s -# retries: 5 -# volumes: -# db-data: -# secrets: -# db-password: -# file: db/password.txt - + diff --git a/main.go b/main.go index dd8e5cd..38cde29 100644 --- a/main.go +++ b/main.go @@ -21,6 +21,7 @@ import ( ) var version string +var app *fiber.App func main() { println(version) @@ -38,6 +39,11 @@ func main() { os.Mkdir("./tmp", 0777) }() env.ServerConfig = ReadConfigFileAndReturnIt(env.CurrentDirectory) + outputLogFolderDir := filepath.Join(env.CurrentDirectory, "whatsapp_server_logs") + + if _, err := os.Stat(outputLogFolderDir); errors.Is(err, os.ErrNotExist) { + os.MkdirAll(outputLogFolderDir, 0777) + } whatsapp.OutPutFilePath = ReturnOutPutFilePath(env.CurrentDirectory) whatsapp.InitSqlContainer() if env.Env.AUTO_CONNECT_TO_WHATSAPP { @@ -121,7 +127,7 @@ func ReadConfigFileAndReturnIt(currentDir string) *env.IServerConfig { func ReturnOutPutFilePath(currentDir string) string { t := time.Now() today := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, t.Nanosecond(), t.Location()).Unix() - return filepath.Join(currentDir, "whatsapp_server_logs", fmt.Sprintf("%d.log.csv", today)) + return filepath.Join(currentDir, fmt.Sprintf("%d.log.csv", today)) } func check(e error) { if e != nil { diff --git a/swagger/index.html b/swagger/index.html new file mode 100644 index 0000000..32d5c19 --- /dev/null +++ b/swagger/index.html @@ -0,0 +1,23 @@ + + + + + + + SwaggerUI + + + +
+ + + + \ No newline at end of file diff --git a/swagger/swagger.json b/swagger/swagger.json new file mode 100644 index 0000000..66a246f --- /dev/null +++ b/swagger/swagger.json @@ -0,0 +1,508 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "WhatsApp API MultiDevice", + "version": "3.7.0", + "description": "This API is used for sending whatsapp via API" + }, + "servers": [ + { + "url": "http://localhost:3000/v1" + }, + { + "url": "http://localhost:4000/v1" + } + ], + "tags": [ + { + "name": "SendMessages", + "description": "Sending Text And Whatsapp Message Over Whatsapp" + } + ], + "paths":{ + "/send_message": { + "post": { + "operationId": "appLogin", + "tags": [ + "SendMessages" + ], + "summary": "Send Text Message", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "phone": { + "type": "string", + "example": "6289685028129@s.whatsapp.net", + "description": "Phone number with country code" + }, + "caption": { + "type": "string", + "example": "ini contoh caption video", + "description": "Caption to send" + }, + "view_once": { + "type": "boolean", + "example": "false", + "description": "View once" + }, + "video": { + "type": "string", + "format": "binary", + "description": "Video to send" + }, + "compress": { + "type": "boolean", + "example": "false", + "description": "Compress video" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SendResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorBadRequest" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorInternalServer" + } + } + } + } + } + } + }, + "/send_media": { + "post": { + "operationId": "sendMedia", + "tags": [ + "SendMessages" + ], + "summary": "Send Any Media File", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "required": [ + "to" + ], + "properties": { + "to": { + "type": "array", + "description": "Phone number with country code", + "items": { + "type": "string", + "example": "919999998888" + } + }, + "msg": { + "type": "string", + "example": "selamat malam", + "description": "Caption to send" + }, + "file": { + "type": "string", + "format": "binary", + "description": "Media To Be Send" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SendResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorBadRequest" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorInternalServer" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "UserGroupResponse": { + "type": "object", + "properties": { + "code": { + "type": "string", + "example": "SUCCESS" + }, + "message": { + "type": "string", + "example": "Success get list groups" + }, + "results": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "JID": { + "type": "string" + }, + "OwnerJID": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "NameSetAt": { + "type": "string" + }, + "NameSetBy": { + "type": "string" + }, + "GroupCreated": { + "type": "string" + }, + "ParticipantVersionID": { + "type": "string" + }, + "Participants": { + "type": "array", + "items": { + "properties": { + "JID": { + "type": "string" + }, + "IsAdmin": { + "type": "boolean" + }, + "IsSuperAdmin": { + "type": "boolean" + }, + "Error": { + "type": "number" + } + } + } + } + } + } + } + } + } + } + }, + "UserInfoResponse": { + "type": "object", + "properties": { + "code": { + "type": "string", + "example": "SUCCESS" + }, + "message": { + "type": "string", + "example": null + }, + "results": { + "type": "object", + "properties": { + "verified_name": { + "type": "string", + "example": "Aldino Kemal" + }, + "status": { + "type": "string", + "example": "Hello World" + }, + "picture_id": { + "type": "string", + "example": 1651459152 + }, + "devices": { + "type": "array", + "items": { + "type": "object", + "properties": { + "User": { + "type": "string", + "example": 6289685021291 + }, + "Agent": { + "type": "integer", + "example": 0 + }, + "Device": { + "type": "string", + "example": "UNKNOWN" + }, + "Server": { + "type": "string", + "example": "s.whatsapp.net" + }, + "AD": { + "type": "boolean", + "example": true + } + } + } + } + } + } + } + }, + "UserAvatarResponse": { + "type": "object", + "properties": { + "code": { + "type": "string", + "example": "SUCCESS" + }, + "message": { + "type": "string", + "example": "Success" + }, + "results": { + "type": "object", + "properties": { + "url": { + "type": "string", + "example": "https://pps.whatsapp.net/v/t61.24694-24/181358562_385581386633509_6230178822944778044_n.jpg?ccb=11-4&oh=df36c5b990497b8a5758a0f1ad8118a8&oe=620AA726" + }, + "id": { + "type": "string", + "example": "1635239861" + }, + "type": { + "type": "string", + "example": "image" + } + } + } + } + }, + "UserPrivacyResponse": { + "type": "object", + "properties": { + "code": { + "type": "string", + "example": "SUCCESS" + }, + "message": { + "type": "string", + "example": "Success get privacy" + }, + "results": { + "type": "object", + "properties": { + "group_add": { + "type": "string", + "example": "all" + }, + "last_seen": { + "type": "string", + "example": null + }, + "status": { + "type": "string", + "example": "all" + }, + "profile": { + "type": "string", + "example": "all" + }, + "read_receipts": { + "type": "string", + "example": "all" + } + } + } + } + }, + "SendResponse": { + "type": "object", + "properties": { + "code": { + "type": "string", + "example": "SUCCESS" + }, + "message": { + "type": "string", + "example": "Success" + }, + "results": { + "type": "object", + "properties": { + "message_id": { + "type": "string", + "example": "3EB0B430B6F8F1D0E053AC120E0A9E5C" + }, + "status": { + "type": "string", + "example": " success ...." + } + } + } + } + }, + "DeviceResponse": { + "type": "object", + "properties": { + "code": { + "type": "string", + "example": "SUCCESS" + }, + "message": { + "type": "string", + "example": "Fetch device success" + }, + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "Aldino Kemal" + }, + "device": { + "type": "string", + "example": "628960561XXX.0:64@s.whatsapp.net" + } + } + } + } + } + }, + "LoginResponse": { + "type": "object", + "properties": { + "code": { + "type": "string", + "example": "SUCCESS" + }, + "message": { + "type": "string", + "example": "Success" + }, + "results": { + "type": "object", + "properties": { + "qr_duration": { + "type": "integer", + "example": 30 + }, + "qr_link": { + "type": "string", + "example": "http://localhost:3000/statics/images/qrcode/scan-qr-b0b7bb43-9a22-455a-814f-5a225c743310.png" + } + } + } + } + }, + "GenericResponse": { + "type": "object", + "properties": { + "code": { + "type": "string", + "example": "SUCCESS" + }, + "message": { + "type": "string", + "example": "Success" + }, + "results": { + "type": "string", + "example": null + } + } + }, + "ErrorInternalServer": { + "type": "object", + "properties": { + "code": { + "type": "string", + "example": 101, + "description": "SYSTEM_CODE_ERROR" + }, + "message": { + "type": "string", + "example": "you are not loggin", + "description": "Detail error message" + }, + "results": { + "type": "object", + "example": null, + "description": "additional data" + } + } + }, + "ErrorBadRequest": { + "type": "object", + "properties": { + "code": { + "type": "string", + "example": 400, + "description": "HTTP Status Code" + }, + "message": { + "type": "string", + "example": "field cannot be blank", + "description": "Detail error message" + }, + "results": { + "type": "object", + "example": null, + "description": "additional data" + } + } + } + } + } + } \ No newline at end of file diff --git a/swagger/swagger.yml b/swagger/swagger.yml new file mode 100644 index 0000000..078e7b8 --- /dev/null +++ b/swagger/swagger.yml @@ -0,0 +1,972 @@ +openapi: 3.0.0 +info: + title: WhatsApp API MultiDevice + version: 3.7.0 + description: This API is used for sending whatsapp via API +servers: + - url: http://localhost:3000/v1 + - url: http://localhost:4000/v1 +tags: + - name: SendMessages + description: Sending Text And Whatsapp Message Over Whatsapp + +paths: + /send_message: + post: + operationId: appLogin + tags: + - SendMessages + summary: Send Text Message + requestBody: + content: + application/json: + schema: + type: object + properties: + phone: + type: string + example: '6289685028129@s.whatsapp.net' + description: Phone number with country code + caption: + type: string + example: ini contoh caption video + description: Caption to send + view_once: + type: boolean + example: 'false' + description: View once + video: + type: string + format: binary + description: Video to send + compress: + type: boolean + example: 'false' + description: Compress video + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SendResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBadRequest' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /send_media: + post: + operationId: sendMedia + tags: + - SendMessages + summary: Send Any Media File + requestBody: + content: + multipart/form-data: + schema: + type: object + required: ["to"] + properties: + to: + type: array + description: Phone number with country code + items: + type: string + example: "919999998888" + msg: + type: string + example: selamat malam + description: Caption to send + file: + type: string + format: binary + description: Media To Be Send + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SendResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBadRequest' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /app/logout: + get: + operationId: appLogout + tags: + - app + summary: Remove database and logout + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/GenericResponse' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /app/reconnect: + get: + operationId: appReconnect + tags: + - app + summary: Reconnecting to whatsapp server + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/GenericResponse' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /app/devices: + get: + operationId: appDevices + tags: + - app + summary: Get list connected devices + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/DeviceResponse' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /user/info: + get: + operationId: userInfo + tags: + - user + summary: User Info + parameters: + - name: phone + in: query + schema: + type: integer + example: '6289685028129@s.whatsapp.net' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/UserInfoResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBadRequest' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /user/avatar: + get: + operationId: userAvatar + tags: + - user + summary: User Avatar + parameters: + - name: phone + in: query + schema: + type: integer + example: '6289685028129@s.whatsapp.net' + - name: is_preview + in: query + schema: + type: boolean + example: true + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/UserAvatarResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBadRequest' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /user/my/privacy: + get: + operationId: userMyPrivacy + tags: + - user + summary: User My Privacy Setting + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/UserPrivacyResponse' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /user/my/groups: + get: + operationId: userMyGroups + tags: + - user + summary: User My List Groups + responses: + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /send/message: + post: + operationId: sendMessage + tags: + - send + summary: Send Message + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + phone: + type: string + example: '6289685028129@s.whatsapp.net' + description: Phone number with country code + message: + type: string + example: selamat malam + description: Message to send + reply_message_id: + type: string + example: 3EB089B9D6ADD58153C561 + description: Message ID that you want reply + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SendResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBadRequest' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /send/image: + post: + operationId: sendImage + tags: + - send + summary: Send Image + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + phone: + type: string + example: '6289685028129@s.whatsapp.net' + description: Phone number with country code + caption: + type: string + example: selamat malam + description: Caption to send + view_once: + type: boolean + example: false + description: View once + image: + type: string + format: binary + description: Image to send + compress: + type: boolean + example: false + description: Compress image + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SendResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBadRequest' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /send/file: + post: + operationId: sendFile + tags: + - send + summary: Send File + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + phone: + type: string + example: '6289685028129@s.whatsapp.net' + description: Phone number with country code + caption: + type: string + example: selamat malam + description: Caption to send + file: + type: string + format: binary + description: File to send + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SendResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBadRequest' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /send/video: + post: + operationId: sendVideo + tags: + - send + summary: Send Video + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + phone: + type: string + example: '6289685028129@s.whatsapp.net' + description: Phone number with country code + caption: + type: string + example: ini contoh caption video + description: Caption to send + view_once: + type: boolean + example: 'false' + description: View once + video: + type: string + format: binary + description: Video to send + compress: + type: boolean + example: 'false' + description: Compress video + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SendResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBadRequest' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /send/contact: + post: + operationId: sendContact + tags: + - send + summary: Send Contact + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + phone: + type: string + example: '6289685024051@s.whatsapp.net' + description: Phone number with country code + contact_name: + type: string + example: Aldino Kemal + description: Contact name + contact_phone: + type: string + example: '6289685024992' + description: Contact phone number + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SendResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBadRequest' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /send/link: + post: + operationId: sendLink + tags: + - send + summary: Send Link + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + phone: + type: string + example: '6289685024051@s.whatsapp.net' + description: Phone number with country code + link: + type: string + example: "https://google.com" + description: Link to send + caption: + type: string + example: 'Halo ini contoh caption' + description: Caption to send + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SendResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBadRequest' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /send/location: + post: + operationId: sendLocation + tags: + - send + summary: Send Location + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + phone: + type: string + example: '6289685024051@s.whatsapp.net' + description: Phone number with country code + latitude: + type: string + example: "-7.797068" + description: Latitude coordinate + longitude: + type: string + example: '110.370529' + description: Longitude coordinate + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SendResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBadRequest' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /message/{message_id}/revoke: + post: + operationId: revokeMessage + tags: + - message + summary: Revoke Message + parameters: + - in: path + name: message_id + schema: + type: string + required: true + description: Message ID + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + phone: + type: string + example: '6289685024051@s.whatsapp.net' + description: Phone number with country code + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SendResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBadRequest' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /message/{message_id}/reaction: + post: + operationId: reactMessage + tags: + - message + summary: Send reaction to message + parameters: + - in: path + name: message_id + schema: + type: string + required: true + description: Message ID + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + phone: + type: string + example: '6289685024051@s.whatsapp.net' + description: Phone number with country code + emoji: + type: string + example: "🙏" + description: Emoji to react + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SendResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBadRequest' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /group/join-with-link: + post: + operationId: joinGroupWithLink + tags: + - group + summary: Join group with link + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + link: + type: string + example: 'https://chat.whatsapp.com/whatsappKeyJoinGroup' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SendResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBadRequest' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + /group/leave: + post: + operationId: leaveGroup + tags: + - group + summary: Leave group + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + group_id: + type: string + example: '120363024512399999@g.us' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/GenericResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBadRequest' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInternalServer' + +components: + schemas: + UserGroupResponse: + type: object + properties: + code: + type: string + example: SUCCESS + message: + type: string + example: Success get list groups + results: + type: object + properties: + data: + type: array + items: + type: object + properties: + JID: + type: string + OwnerJID: + type: string + Name: + type: string + NameSetAt: + type: string + NameSetBy: + type: string + GroupCreated: + type: string + ParticipantVersionID: + type: string + Participants: + type: array + items: + properties: + JID: + type: string + IsAdmin: + type: boolean + IsSuperAdmin: + type: boolean + Error: + type: number + UserInfoResponse: + type: object + properties: + code: + type: string + example: SUCCESS + message: + type: string + example: + results: + type: object + properties: + verified_name: + type: string + example: Aldino Kemal + status: + type: string + example: Hello World + picture_id: + type: string + example: 1651459152 + devices: + type: array + items: + type: object + properties: + User: + type: string + example: 6289685021291 + Agent: + type: integer + example: 0 + Device: + type: string + example: UNKNOWN + Server: + type: string + example: s.whatsapp.net + AD: + type: boolean + example: true + UserAvatarResponse: + type: object + properties: + code: + type: string + example: SUCCESS + message: + type: string + example: Success + results: + type: object + properties: + url: + type: string + example: 'https://pps.whatsapp.net/v/t61.24694-24/181358562_385581386633509_6230178822944778044_n.jpg?ccb=11-4&oh=df36c5b990497b8a5758a0f1ad8118a8&oe=620AA726' + id: + type: string + example: '1635239861' + type: + type: string + example: 'image' + UserPrivacyResponse: + type: object + properties: + code: + type: string + example: SUCCESS + message: + type: string + example: Success get privacy + results: + type: object + properties: + group_add: + type: string + example: all + last_seen: + type: string + example: null + status: + type: string + example: all + profile: + type: string + example: all + read_receipts: + type: string + example: all + SendResponse: + type: object + properties: + code: + type: string + example: SUCCESS + message: + type: string + example: Success + results: + type: object + properties: + message_id: + type: string + example: '3EB0B430B6F8F1D0E053AC120E0A9E5C' + status: + type: string + example: ' success ....' + DeviceResponse: + type: object + properties: + code: + type: string + example: SUCCESS + message: + type: string + example: Fetch device success + results: + type: array + items: + type: object + properties: + name: + type: string + example: 'Aldino Kemal' + device: + type: string + example: '628960561XXX.0:64@s.whatsapp.net' + LoginResponse: + type: object + properties: + code: + type: string + example: SUCCESS + message: + type: string + example: Success + results: + type: object + properties: + qr_duration: + type: integer + example: 30 + qr_link: + type: string + example: 'http://localhost:3000/statics/images/qrcode/scan-qr-b0b7bb43-9a22-455a-814f-5a225c743310.png' + GenericResponse: + type: object + properties: + code: + type: string + example: SUCCESS + message: + type: string + example: Success + results: + type: string + example: null + ErrorInternalServer: + type: object + properties: + code: + type: string + example: INTERNAL_SERVER_ERROR + description: 'SYSTEM_CODE_ERROR' + message: + type: string + example: you are not loggin + description: 'Detail error message' + results: + type: object + example: null + description: 'additional data' + ErrorBadRequest: + type: object + properties: + code: + type: string + example: 400 + description: 'HTTP Status Code' + message: + type: string + example: field cannot be blank + description: 'Detail error message' + results: + type: object + example: null + description: 'additional data' \ No newline at end of file