
- Complete NestJS TypeScript implementation with WebSocket support - Direct messaging (DM) and group chat functionality - End-to-end encryption with AES encryption and key pairs - Media file support (images, videos, audio, documents) up to 100MB - Push notifications with Firebase Cloud Messaging integration - Mention alerts and real-time typing indicators - User authentication with JWT and Passport - SQLite database with TypeORM entities and relationships - Comprehensive API documentation with Swagger/OpenAPI - File upload handling with secure access control - Online/offline status tracking and presence management - Message editing, deletion, and reply functionality - Notification management with automatic cleanup - Health check endpoint for monitoring - CORS configuration for cross-origin requests - Environment-based configuration management - Structured for Flutter SDK integration Features implemented: ✅ Real-time messaging with Socket.IO ✅ User registration and authentication ✅ Direct messages and group chats ✅ Media file uploads and management ✅ End-to-end encryption ✅ Push notifications ✅ Mention alerts ✅ Typing indicators ✅ Message read receipts ✅ Online status tracking ✅ File access control ✅ Comprehensive API documentation Ready for Flutter SDK development and production deployment.
45 lines
1.1 KiB
JavaScript
45 lines
1.1 KiB
JavaScript
const get = require('simple-get')
|
|
const util = require('./util')
|
|
const proxy = require('./proxy')
|
|
|
|
function findAssetId (opts, cb) {
|
|
const downloadUrl = util.getDownloadUrl(opts)
|
|
const apiUrl = util.getApiUrl(opts)
|
|
const log = opts.log || util.noopLogger
|
|
|
|
log.http('request', 'GET ' + apiUrl)
|
|
const reqOpts = proxy({
|
|
url: apiUrl,
|
|
json: true,
|
|
headers: {
|
|
'User-Agent': 'simple-get',
|
|
Authorization: 'token ' + opts.token
|
|
}
|
|
}, opts)
|
|
|
|
const req = get.concat(reqOpts, function (err, res, data) {
|
|
if (err) return cb(err)
|
|
log.http(res.statusCode, apiUrl)
|
|
if (res.statusCode !== 200) return cb(err)
|
|
|
|
// Find asset id in release
|
|
for (const release of data) {
|
|
if (release.tag_name === opts['tag-prefix'] + opts.pkg.version) {
|
|
for (const asset of release.assets) {
|
|
if (asset.browser_download_url === downloadUrl) {
|
|
return cb(null, asset.id)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
cb(new Error('Could not find GitHub release for version'))
|
|
})
|
|
|
|
req.setTimeout(30 * 1000, function () {
|
|
req.abort()
|
|
})
|
|
}
|
|
|
|
module.exports = findAssetId
|