diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..c8d3f81 --- /dev/null +++ b/404.html @@ -0,0 +1,889 @@ + + + +
+ + + + + + + + + + + + + + + + +URL | +Use | +
---|---|
https://logs.browser-intake-datadoghq.com/api/v2/logs?ddsource=ios |
+DataDog application usage metrics and RUM | +
https://api2.amplitude.com/ |
+User journey tracking | +
https://region1.app-measurement.com/a |
+Firebase See here for info | +
https://api.onesignal.com/apps/91b217c4-7ad8-4fd1-a01c-f4ed5b2a4711/ios_params.js?player_id=<>> |
+Push messaging (Probably the notification going off) | +
https://fcmtoken.googleapis.com/register |
+Firebase Messaging (maybe also for push notifications, but authing?) | +
https://firebaselogging-pa.googleapis.com/v1/firelog/legacy/batchlog |
+Firebase Logging | +
unspecified
{
+ "_dd": {
+ "device": {
+ "architecture": "arm64e"
+ }
+ },
+ "date": "2023-05-22T17:39:51.607Z",
+ "ddtags": "env:prod,version:1.1.2",
+ "logger.name": "AlexisBarreyat.BeReal",
+ "logger.thread_name": "main",
+ "logger.version": "1.17.0",
+ "message": "[UploadPostWorker] restarting upload",
+ "network.client.available_interfaces": [
+ "cellular"
+ ],
+ "network.client.is_constrained": false,
+ "network.client.is_expensive": true,
+ "network.client.reachability": "yes",
+ "network.client.sim_carrier.allows_voip": true,
+ "network.client.sim_carrier.iso_country": "--",
+ "network.client.sim_carrier.name": "--",
+ "network.client.sim_carrier.technology": "LTE",
+ "network.client.supports_ipv4": true,
+ "network.client.supports_ipv6": true,
+ "service": "AlexisBarreyat.BeReal",
+ "status": "info",
+ "usr.id": "ID",
+ "usr.region": "europe-west",
+ "version": "1.1.2",
+ "version.build": "9854"
+ },
+
URL | +Use | +
---|---|
https://mobile.bereal.com/api/content/comments |
+Gets comments and creates them | +
https://mobile.bereal.com/api/content/posts/upload-url |
+Retrieves the Signed URL to the uploaded Image | +
https://mobile.bereal.com/api/content/posts |
+Finalizes image upload, sends front and back camera and storage location for images | +
https://mobile.bereal.com/api/content/posts/me |
+Gets your post | +
https://mobile.bereal.com/api/content/posts/caption |
+Creates a caption on your post | +
https://mobile.bereal.com/api/content/posts/visibility |
+Updates the visibility of a BeReal | +
https://mobile.bereal.com/api/content/realmojis |
+Gets a list of realmojis | +
https://mobile.bereal.com/api/content/realmojis/upload-url |
+Gets GCS Signed URL for Real Mojis | +
https://mobile.bereal.com/api/content/realmojis/instant |
+Puts an instant RealMoji on a post | +
https://mobile.bereal.com/api/content/screenshots |
+Updates when you screenshot a post | +
https://mobile.bereal.com/api/content/screenshots/me |
+Gets list of users who screenshot? | +
https://mobile.bereal.com/api/content/unblurs |
+Gets the unblurs and ubnlurs a users post and how many they can unblur | +
We don't know if these endpoints still exist or are used
+Because of the whole SSL pinning thing, we have no clue
+URL | +Use | +
---|---|
https://us-central1-alexisbarreyat-bereal.cloudfunctions.net/sendCaptureInProgressPush |
+Letting BeReal know you're taking a photo | +
https://firebasestorage.googleapis.com/v0/b/storage.bere.al/o/ |
+Uploads the photo to Firebase from what I can see | +
This is the API endpoint bereal posts to when it's finalizing the post
+Request
+{
+ "backCamera": {
+ "bucket": "storage.bere.al",
+ "height": 2000,
+ "path": "Photos/<me>/bereal/7c44d6e8-086b-4a18-b8b4-d3785f58cda8-1660122851.jpg",
+ "width": 1500
+ },
+ "frontCamera": {
+ "bucket": "storage.bere.al",
+ "height": 2000,
+ "path": "Photos/<me>/bereal/7c44d6e8-086b-4a18-b8b4-d3785f58cda8-1660122851-secondary.jpg",
+ "width": 1500
+ },
+ "isLate": true,
+ "isPublic": false,
+ "location": {
+ "latitude": <>,
+ "longitude": <>
+ },
+ "retakeCounter": 4,
+ "takenAt": "2022-08-10T09:14:11Z"
+}
+
Response
+{
+ "caption": null,
+ "comments": {
+ "sample": [],
+ "total": 0
+ },
+ "createdAt": "2006-01-02T15:04:05-0700",
+ "id": "<>-YKzhel",
+ "isLate": true,
+ "lateInSeconds": 1425,
+ "location": {
+ "latitude": <>,
+ "longitude": <>
+ },
+ "moment": {
+ "id": "dr6O-8wHaE4xRgnxLpY9M",
+ "region": "europe-west"
+ },
+ "primary": {
+ "height": 2000,
+ "url": "https://storage.bere.al/Photos/<me>/bereal/7c44d6e8-086b-4a18-b8b4-d3785f58cda8-1660122851.jpg",
+ "width": 1500
+ },
+ "realmojis": {
+ "sample": [],
+ "total": 0
+ },
+ "retakeCounter": 4,
+ "screenshots": {
+ "sample": [],
+ "total": 0
+ },
+ "secondary": {
+ "height": 2000,
+ "url": "https://storage.bere.al/Photos/<me>/bereal/7c44d6e8-086b-4a18-b8b4-d3785f58cda8-1660122851-secondary.jpg",
+ "width": 1500
+ },
+ "takenAt": "2006-01-02T15:04:05-0700",
+ "user": {
+ "id": "<me>",
+ "profilePicture": {
+ "height": 1000,
+ "url": "https://storage.bere.al/Photos/<me>/profile/<me>-1655905537-profile-picture.jpg",
+ "width": 1000
+ },
+ "username": "<>"
+ },
+ "visibility": [
+ "friends"
+ ]
+}
+
URL | +Use | +
---|---|
https://mobile.bereal.com/api/feeds/memories/video |
+Lists your years recap Video | +
https://mobile.bereal.com/api/feeds/memories |
+Lists all your memories | +
https://mobile.bereal.com/api/feeds/memories-v1 |
+assuming this is the new memories endpoint | +
https://mobile.bereal.com/api/feeds/people |
+Gets all the people | +
https://mobile.bereal.com/api/feeds/friends-of-friends |
+Gets the friends of Friends feed | +
https://mobile.bereal.com/api/feeds/user-stats |
+Returns user status for the logged in user (you) | +
https://mobile.bereal.com/api/feeds/friends-v1 |
+Loads all the images that you're friends with | +
{
+ "prev": "string",
+ "next": "string",
+ "data": [
+ {
+ "id": "string",
+ "thumbnail": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ },
+ "primary": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ },
+ "secondary": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ },
+ "isLate": true,
+ "memoryDay": "string",
+ "location": {
+ "latitude": 0,
+ "longitude": 0
+ }
+ }
+ ],
+ "memoriesSynchronized": true
+}
+
{
+ "prev": "string",
+ "next": "string",
+ "data": [
+ {
+ "memoryDay": "string",
+ "momentId": "string",
+ "mainPostMemoryId": "string",
+ "mainPostThumbnail": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ },
+ "mainPostPrimaryMedia": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ },
+ "mainPostSecondaryMedia": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ },
+ "isLate": true,
+ "numPostsForMoment": 0
+ }
+],
+ "memoriesSynchronized": true
+}
+
{
+ "prev": "string",
+ "next": "string",
+ "data": [
+ {
+ "user": [
+ {
+ "id": "string",
+ "username": "string",
+ "profilePicture": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ }
+ }
+ ],
+ "moment": {
+ "id": "string",
+ "region": "europe-west"
+ },
+ "isBirthday": true,
+ "posts": [
+ {
+ "id": "string",
+ "primary": {
+ "url": "string",
+ "width": 0,
+ "height": 0,
+ "blurHash": "string"
+ },
+ "secondary": {
+ "url": "string",
+ "width": 0,
+ "height": 0,
+ "blurHash": "string"
+ },
+ "realmoji": {
+ "id": "string",
+ "user": {
+ "id": "string",
+ "username": "string",
+ "profilePicture": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ }
+ },
+ "media": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ },
+ "emoji": "👍",
+ "type": "string",
+ "isInstant": true,
+ "postedAt": "2006-01-02T15:04:05-0700"
+ },
+ "music": {
+ "isrc": "<>",
+ "track": "string",
+ "artist": "string",
+ "artwork": "https://i.scdn.co/image/<>",
+ "preview": "https://p.scdn.co/mp3-preview/<>",
+ "openUrl": "https://open.spotify.com/track/<>",
+ "visibility": "public",
+ "provider": "spotify",
+ "providerId": "string",
+ "audioType": "track"
+ },
+ "caption": "string",
+ "location": {
+ "latitude": 0,
+ "longitude": 0
+ },
+ "retakeCounter": 0,
+ "takenAt": "2006-01-02T15:04:05-0700",
+ "lateInSeconds": 0,
+ "isLate": true,
+ "isMain": true,
+ "creationDate": "2006-01-02T15:04:05-0700",
+ "updatedAt": "2006-01-02T15:04:05-0700",
+ "realMojiSamples": [
+ {
+ "id": "string",
+ "user": {
+ "id": "string",
+ "username": "string",
+ "profilePicture": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ }
+ },
+ "media": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ },
+ "emoji": "👍",
+ "type": "string",
+ "isInstant": true,
+ "postedAt": "2006-01-02T15:04:05-0700"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
+
{
+ "prev": "string",
+ "next": "string",
+ "data": [
+ {
+ "id": "string",
+ "user": {
+ "id": "string",
+ "username": "string",
+ "profilePicture": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ },
+ "relationship": {
+ "status": "pending",
+ "commonFriends": [
+ {
+ "id": "string",
+ "username": "string",
+ "fullname": "string",
+ "profilePicture": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ }
+ }
+ ]
+ }
+ },
+ "moment": {
+ "id": "string",
+ "region": "europe-west"
+ },
+ "primary": {
+ "url": "string",
+ "width": 0,
+ "height": 0,
+ "blurHash": "string"
+ },
+ "secondary": {
+ "url": "string",
+ "width": 0,
+ "height": 0,
+ "blurHash": "string"
+ },
+ "location": {
+ "latitude": 0,
+ "longitude": 0
+ },
+ "caption": "string",
+ "takenAt": "2006-01-02T15:04:05-0700",
+ "postedAt": "2006-01-02T15:04:05-0700",
+ "lateInSeconds": 0,
+ "realmojis": {
+ "total": 0,
+ "self": {
+ "id": "string",
+ "user": {
+ "id": "string",
+ "username": "string"
+ },
+ "media": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ },
+ "emoji": "👍",
+ "isInstant": true,
+ "postedAt": "2006-01-02T15:04:05-0700"
+ },
+ "sample": [
+ {
+ "id": "string",
+ "user": {
+ "id": "string",
+ "username": "string"
+ },
+ "media": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ },
+ "emoji": "👍",
+ "isInstant": true,
+ "postedAt": "2006-01-02T15:04:05-0700"
+ }
+ ]
+ }
+ }
+ ]
+}
+
{
+ "userPosts": {
+ "user": {
+ "id": "string",
+ "username": "string",
+ "profilePicture": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ }
+ },
+ "momentId": "string",
+ "region": "europe-west",
+ "isBirthday": true,
+ "posts": [
+ {
+ "id": "string",
+ "primary": {
+ "url": "string",
+ "width": 0,
+ "height": 0,
+ "blurHash": "string"
+ },
+ "secondary": {
+ "url": "string",
+ "width": 0,
+ "height": 0,
+ "blurHash": "string"
+ },
+ "location": {
+ "latitude": 0,
+ "longitude": 0
+ },
+ "realMojis": [
+ {
+ "id": "string",
+ "user": {
+ "id": "string",
+ "username": "string",
+ "profilePicture": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ }
+ },
+ "media": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ },
+ "emoji": "👍",
+ "type": "string",
+ "isInstant": true,
+ "postedAt": "2006-01-02T15:04:05-0700"
+ }
+ ],
+ "comments": [
+ {
+ "id": "string",
+ "user": [
+ {
+ "id": "string",
+ "username": "string",
+ "profilePicture": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ }
+ }
+ ],
+ "content": "string",
+ "postedAt": "2006-01-02T15:04:05-0700"
+ }
+ ],
+ "caption": "string",
+ "retakeCounter": 0,
+ "takenAt": "2006-01-02T15:04:05-0700",
+ "music": {
+ "isrc": "<>",
+ "track": "string",
+ "artist": "string",
+ "artwork": "https://i.scdn.co/image/<>",
+ "preview": "https://p.scdn.co/mp3-preview/<>",
+ "openUrl": "https://open.spotify.com/track/<>",
+ "visibility": "public",
+ "provider": "spotify",
+ "providerId": "string",
+ "audioType": "track"
+ },
+ "lateInSeconds": 0,
+ "isLate": true,
+ "isMain": true,
+ "creationDate": "2006-01-02T15:04:05-0700",
+ "updatedAt": "2006-01-02T15:04:05-0700",
+ "screenshots": [
+ {
+ "id": "string",
+ "user": {
+ "id": "string",
+ "username": "string",
+ "profilePicture": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ }
+ },
+ "snappedAt": "2006-01-02T15:04:05-0700"
+ }
+ ],
+ "visibility": [
+ "friends"
+ ],
+ "stats": {
+ "realMojisCounters": {
+ "sum": 0,
+ "percentages": [
+ "string"
+ ]
+ }
+ },
+ "realMojiSamples": [
+ {
+ "id": "string",
+ "user": {
+ "id": "string",
+ "username": "string",
+ "profilePicture": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ }
+ },
+ "media": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ },
+ "emoji": "👍",
+ "type": "string",
+ "isInstant": true,
+ "postedAt": "2006-01-02T15:04:05-0700"
+ }
+ ],
+ "unblurCount": 0
+ }
+ ]
+ },
+ "friendsPosts": [
+ {
+ "user": [
+ {
+ "id": "string",
+ "username": "string",
+ "profilePicture": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ }
+ }
+ ],
+ "momentId": "string",
+ "region": "europe-west",
+ "isBirthday": false,
+ "posts": [
+ {
+ "id": "string",
+ "primary": {
+ "url": "string",
+ "width": 0,
+ "height": 0,
+ "blurHash": "string"
+ },
+ "secondary": {
+ "url": "string",
+ "width": 0,
+ "height": 0,
+ "blurHash": "string"
+ },
+ "location": {
+ "latitude": 0,
+ "longitude": 0
+ },
+ "realMojis": [
+ {
+ "id": "string",
+ "user": {
+ "id": "string",
+ "username": "string",
+ "profilePicture": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ }
+ },
+ "media": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ },
+ "emoji": "👍",
+ "type": "string",
+ "isInstant": true,
+ "postedAt": "2006-01-02T15:04:05-0700"
+ }
+ ],
+ "comments": [
+ {
+ "id": "string",
+ "user": [
+ {
+ "id": "string",
+ "username": "string",
+ "profilePicture": {
+ "url": "string",
+ "width": 0,
+ "height": 0
+ }
+ }
+ ],
+ "content": "string",
+ "postedAt": "2006-01-02T15:04:05-0700"
+ }
+ ],
+ "caption": "string",
+ "retakeCounter": 0,
+ "takenAt": "2006-01-02T15:04:05-0700",
+ "music": {
+ "isrc": "<>",
+ "track": "string",
+ "artist": "string",
+ "artwork": "https://i.scdn.co/image/<>",
+ "preview": "https://p.scdn.co/mp3-preview/1<>",
+ "openUrl": "https://open.spotify.com/track/<>",
+ "visibility": "public",
+ "provider": "spotify",
+ "providerId": "string",
+ "audioType": "track"
+ },
+ "lateInSeconds": 0,
+ "isLate": true,
+ "isMain": true,
+ "creationDate": "2006-01-02T15:04:05-0700",
+ "updatedAt": "2006-01-02T15:04:05-0700"
+ }
+ ]
+ }
+ ],
+ "remainingPosts": 0,
+ "maxPostsPerMoment": 0,
+ "unblur": {
+ "userId": "string",
+ "fullname": "string",
+ "username": "string",
+ "profileURL": "string",
+ "createdAt": "2006-01-02T15:04:05-0700"
+ }
+}
+
We have been able to locate alot of the API endpoints by using a network wide SSL scanning proxy, however BeReal has introduces SSL pinning.
+The endpoints are categorized as below
+All the API endpoints are against the domain:
+ +What about the API version
+From what I can see, BeReal does not have different API versions
+When ever we mention an endpoint (say the Spotify one) it will be noted like below
+ +You simply need to prepend the domain to it, so:
+ + + + + + + + + + + + + + + + + +URL | +Use | +
---|---|
https://ogma.bereal.team/chat.core.v1.ChatCoreService/SendMessage |
+POST message | +
https://ogma.bereal.team/chat.core.v1.ChatCoreService/GetMessages |
+GET message | +
https://ogma.bereal.team/chat.core.v1.ChatCoreService/GetConversationsById |
+GET message with the member id | +
https://ogma.bereal.team/chat.core.v1.ChatCoreService/GetConversationFeed |
+GET the conversation Feed | +
https://ogma.bereal.team/chat.core.v1.ChatCoreService/GetPendingInvites |
+GET the pending invitations | +
https://ogma.bereal.team/chat.core.v1.ChatCoreService/ClearConversation |
+POST clear message Feed | +
https://ogma.bereal.team/chat.core.v1.ChatCoreService/GetSentInvites |
+GET invitations | +
URL | +Use | +
---|---|
https://mobile.bereal.com/api/moderation/block-users |
+Gets block users | +
https://mobile.bereal.com/api/moderation/reports/profile |
+Reports a profile to the Moderation Team | +
https://mobile.bereal.com/api/moderation/reports/post |
+Reports a post to the Moderation team | +
https://mobile.bereal.com/api/moderation/reports/comment |
+Reports a comment to the Moderation team | +
https://mobile.bereal.com/api/moderation/reports/realmoji |
+Reports a Realmoji to the Moderation team | +
{"use strict";/*!
+ * escape-html
+ * Copyright(c) 2012-2013 TJ Holowaychuk
+ * Copyright(c) 2015 Andreas Lubbe
+ * Copyright(c) 2015 Tiancheng "Timothy" Gu
+ * MIT Licensed
+ */var Wa=/["'&<>]/;Vn.exports=Ua;function Ua(e){var t=""+e,r=Wa.exec(t);if(!r)return t;var o,n="",i=0,s=0;for(i=r.index;i