diff --git a/app-android/app/build.gradle b/app-android/app/build.gradle index 9394223a7af..7fa2a3f71e2 100644 --- a/app-android/app/build.gradle +++ b/app-android/app/build.gradle @@ -51,9 +51,11 @@ dependencies { androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - implementation "com.google.android.gms:play-services-gcm:10.2.1" implementation 'commons-io:commons-io:2.4' implementation 'org.jdeferred:jdeferred-core:1.2.4' + implementation 'com.android.support:support-compat:27.1.1' + implementation 'com.android.support:support-core-utils:27.1.1' + testImplementation 'junit:junit:4.12' testImplementation "org.robolectric:robolectric:3.3.2" androidTestImplementation 'org.codehaus.jackson:jackson-mapper-asl:1.9.2' diff --git a/app-android/app/src/main/AndroidManifest.xml b/app-android/app/src/main/AndroidManifest.xml index 912e77c1a27..02cdeabc330 100644 --- a/app-android/app/src/main/AndroidManifest.xml +++ b/app-android/app/src/main/AndroidManifest.xml @@ -1,71 +1,50 @@ + package="de.tutao.tutanota"> - - - - + + + + + android:allowBackup="false" + android:icon="@mipmap/ic_launcher" + android:label="@string/app_name" + android:supportsRtl="true" + android:theme="@style/AppTheme"> + android:name=".MainActivity" + android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" + android:launchMode="singleInstance" + android:theme="@style/SplashTheme"> - - + + - - + + - - + + + android:name="android.support.v4.content.FileProvider" + android:authorities="${contentProviderAuthority}" + android:exported="false" + android:grantUriPermissions="true"> + android:name="android.support.FILE_PROVIDER_PATHS" + android:resource="@xml/paths"/> - - - - - - - - - - - - - - - - + android:name=".push.PushNotificationService" + android:enabled="true" + android:exported="false" + android:process=":pushprocess"/> \ No newline at end of file diff --git a/app-android/app/src/main/java/de/tutao/tutanota/Crypto.java b/app-android/app/src/main/java/de/tutao/tutanota/Crypto.java index 33591c21a13..5cc4240150a 100644 --- a/app-android/app/src/main/java/de/tutao/tutanota/Crypto.java +++ b/app-android/app/src/main/java/de/tutao/tutanota/Crypto.java @@ -3,7 +3,6 @@ import android.content.Context; import android.net.Uri; import android.os.Build; -import android.util.Log; import org.apache.commons.io.IOUtils; import org.json.JSONException; @@ -59,15 +58,15 @@ public final class Crypto { private static final Integer ANDROID_6_SDK_VERSION = 23; - private final MainActivity activity; + private final Context context; static { // see: http://android-developers.blogspot.de/2013/08/some-securerandom-thoughts.html PRNGFixes.apply(); } - public Crypto(MainActivity activity) { - this.activity = activity; + public Crypto(Context context) { + this.context = context; this.randomizer = new SecureRandom(); } @@ -176,7 +175,6 @@ public static SecretKeySpec bytesToKey(byte[] key) { } String aesEncryptFile(final byte[] key, final String fileUrl, final byte[] iv) throws IOException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidAlgorithmParameterException { - Context context = activity.getWebView().getContext(); File inputFile = Utils.uriToFile(context, fileUrl); File encryptedDir = new File(Utils.getDir(context), TEMP_DIR_ENCRYPTED); encryptedDir.mkdirs(); @@ -213,7 +211,6 @@ private String aesDecrypt(final byte[] key, final byte[] cipherText) throws Inva } String aesDecryptFile(final byte[] key, final String fileUrl) throws IOException, InvalidKeyException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchPaddingException { - Context context = activity.getWebView().getContext(); File inputFile = Utils.uriToFile(context, fileUrl); File decryptedDir = new File(Utils.getDir(context), TEMP_DIR_DECRYPTED); decryptedDir.mkdirs(); @@ -244,6 +241,10 @@ public void aesDecrypt(final byte[] key, InputStream in, OutputStream out) throw } } + public SecureRandom getRandomizer() { + return randomizer; + } + private InputStream getCipherInputStream(InputStream in, Cipher cipher) { if (Build.VERSION.SDK_INT < ANDROID_6_SDK_VERSION) { // Use the tutao cipher suite implementation to increase download performance. diff --git a/app-android/app/src/main/java/de/tutao/tutanota/MainActivity.java b/app-android/app/src/main/java/de/tutao/tutanota/MainActivity.java index 2110119c48f..81dea59c21d 100644 --- a/app-android/app/src/main/java/de/tutao/tutanota/MainActivity.java +++ b/app-android/app/src/main/java/de/tutao/tutanota/MainActivity.java @@ -18,9 +18,6 @@ import android.webkit.WebView; import android.webkit.WebViewClient; -import com.google.android.gms.common.ConnectionResult; -import com.google.android.gms.common.GoogleApiAvailability; - import org.jdeferred.Deferred; import org.jdeferred.DoneCallback; import org.jdeferred.Promise; @@ -31,7 +28,7 @@ import java.io.FileNotFoundException; import java.util.HashMap; -import de.tutao.tutanota.push.GcmRegistrationService; +import de.tutao.tutanota.push.PushNotificationService; public class MainActivity extends Activity { @@ -48,6 +45,8 @@ public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + this.setupPushNotifications(); + webView = new WebView(this); webView.setBackgroundColor(getResources().getColor(android.R.color.transparent)); setContentView(webView); @@ -85,7 +84,6 @@ public boolean shouldOverrideUrlLoading(WebView view, String url) { }); this.webView.loadUrl(appUrl); nativeImpl.setup(); - } @Override @@ -157,23 +155,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } void setupPushNotifications() { - if (gcmIsAvailable()) { - // gcm registration - Intent intent = new Intent(MainActivity.this, GcmRegistrationService.class); - startService(intent); - } - } - - /** - * @return true, if the GCM is available. - */ - private boolean gcmIsAvailable() { - GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance(); - int resultCode = apiAvailability.isGooglePlayServicesAvailable(this); - if (resultCode != ConnectionResult.SUCCESS) { - return false; - } - return true; + startService(new Intent(this, PushNotificationService.class)); } public void bringToForeground() { diff --git a/app-android/app/src/main/java/de/tutao/tutanota/Native.java b/app-android/app/src/main/java/de/tutao/tutanota/Native.java index 795605769c6..75c56e1f15a 100644 --- a/app-android/app/src/main/java/de/tutao/tutanota/Native.java +++ b/app-android/app/src/main/java/de/tutao/tutanota/Native.java @@ -23,6 +23,8 @@ import java.util.HashMap; import java.util.Map; +import de.tutao.tutanota.push.SseStorage; + /** * Created by mpfau on 4/8/17. */ @@ -34,6 +36,7 @@ public final class Native { Crypto crypto; FileUtil files; Contact contact; + SseStorage sseStorage; Map> queue = new HashMap<>(); private final MainActivity activity; private volatile DeferredObject webAppInitialized = new DeferredObject<>(); @@ -44,6 +47,7 @@ public final class Native { crypto = new Crypto(activity); contact = new Contact(activity); files = new FileUtil(activity); + sseStorage = new SseStorage(activity); } public void setup() { @@ -219,6 +223,14 @@ private Promise invokeMethod(String method, JSONArray args) { case "openLink": promise.resolve(openLink(args.getString(0))); break; + case "getPushIdentifier": + promise.resolve(sseStorage.getPushIdentifier()); + break; + case "storePushIdentifierLocally": + sseStorage.storePushIdentifier(args.getString(0), args.getString(1), + args.getString(2)); + promise.resolve(true); + break; default: throw new Exception("unsupported method: " + method); } diff --git a/app-android/app/src/main/java/de/tutao/tutanota/Utils.java b/app-android/app/src/main/java/de/tutao/tutanota/Utils.java index 8660626e79c..239446235b4 100644 --- a/app-android/app/src/main/java/de/tutao/tutanota/Utils.java +++ b/app-android/app/src/main/java/de/tutao/tutanota/Utils.java @@ -26,6 +26,11 @@ public static byte[] base64ToBytes(String base64) { return Base64.decode(base64, Base64.NO_WRAP); } + public static String base64ToBase64Url(String base64) { + return base64.replaceAll("\\+", "-") + .replaceAll("/", "_") + .replaceAll("=", ""); + } diff --git a/app-android/app/src/main/java/de/tutao/tutanota/push/GcmListener.java b/app-android/app/src/main/java/de/tutao/tutanota/push/GcmListener.java deleted file mode 100644 index 983ad622d57..00000000000 --- a/app-android/app/src/main/java/de/tutao/tutanota/push/GcmListener.java +++ /dev/null @@ -1,21 +0,0 @@ -package de.tutao.tutanota.push; - -import android.content.Context; -import android.os.Bundle; -import android.os.Vibrator; - -import com.google.android.gms.gcm.GcmListenerService; - -/** - * Created by mpfau on 4/16/17. - */ - -public class GcmListener extends GcmListenerService { - - @Override - public void onMessageReceived(String s, Bundle data) { - super.onMessageReceived(s, data); - Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); - v.vibrate(300); - } -} diff --git a/app-android/app/src/main/java/de/tutao/tutanota/push/GcmRegistrationService.java b/app-android/app/src/main/java/de/tutao/tutanota/push/GcmRegistrationService.java deleted file mode 100644 index 8fcb98d87e1..00000000000 --- a/app-android/app/src/main/java/de/tutao/tutanota/push/GcmRegistrationService.java +++ /dev/null @@ -1,47 +0,0 @@ -package de.tutao.tutanota.push; - -import android.app.IntentService; -import android.content.Intent; -import android.support.annotation.Nullable; -import android.util.Log; - -import com.google.android.gms.gcm.GoogleCloudMessaging; -import com.google.android.gms.iid.InstanceID; - -import org.jdeferred.FailCallback; - -import java.io.IOException; - -import de.tutao.tutanota.JsRequest; - - -/** - * Created by mpfau on 4/16/17. - */ -public class GcmRegistrationService extends IntentService { - static String SenderId = "707517914653"; - static String TAG = "GcmRegistrationService"; - - public GcmRegistrationService() { - super("GcmRegistrationService"); - } - - @Override - protected void onHandleIntent(@Nullable Intent intent) { -// InstanceID instanceID = InstanceID.getInstance(this); -// try { -// String token = instanceID.getToken(SenderId, -// GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); -// activity.nativeImpl.sendRequest(JsRequest.updatePushIdentifier, new Object[] { token }).fail(new FailCallback() { -// @Override -// public void onFail(Exception e) { -// Log.e(TAG, "could not retrieve token", e); -// } -// }); -// } catch (IOException e) { -// Log.e(TAG, "could not retrieve token", e); -// } - } - - -} diff --git a/app-android/app/src/main/java/de/tutao/tutanota/push/PushInstanceIdListenerService.java b/app-android/app/src/main/java/de/tutao/tutanota/push/PushInstanceIdListenerService.java deleted file mode 100644 index 09f4c94d490..00000000000 --- a/app-android/app/src/main/java/de/tutao/tutanota/push/PushInstanceIdListenerService.java +++ /dev/null @@ -1,17 +0,0 @@ -package de.tutao.tutanota.push; - -import android.content.Intent; - -import com.google.android.gms.iid.InstanceIDListenerService; - -/** - * Created by mpfau on 4/16/17. - */ - -public class PushInstanceIdListenerService extends InstanceIDListenerService { - @Override - public void onTokenRefresh() { - Intent intent = new Intent(this, GcmRegistrationService.class); - startService(intent); - } -} diff --git a/app-android/app/src/main/java/de/tutao/tutanota/push/PushNotificationService.java b/app-android/app/src/main/java/de/tutao/tutanota/push/PushNotificationService.java new file mode 100644 index 00000000000..7e48cfd5cab --- /dev/null +++ b/app-android/app/src/main/java/de/tutao/tutanota/push/PushNotificationService.java @@ -0,0 +1,199 @@ +package de.tutao.tutanota.push; + +import android.app.Notification; +import android.app.NotificationManager; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.media.RingtoneManager; +import android.net.Uri; +import android.os.Handler; +import android.os.IBinder; +import android.os.Looper; +import android.text.TextUtils; +import android.util.Log; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.Charset; +import java.util.Base64; +import java.util.Collections; +import java.util.Random; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicReference; + +import de.tutao.tutanota.BuildConfig; +import de.tutao.tutanota.Crypto; +import de.tutao.tutanota.R; +import de.tutao.tutanota.Utils; + +public class PushNotificationService extends Service { + + private static final String TAG = "PushNotificationService"; + + private static final int NOTIFICATION_ID = 341; + private final LooperThread looperThread = new LooperThread(this::connect); + private final SseStorage sseStorage = new SseStorage(this); + + final AtomicReference httpsURLConnectionRef = new AtomicReference<>(null); + private final Crypto crypto = new Crypto(this); + private SseInfo connectedSseInfo; + + public PushNotificationService() { + } + + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + Log.d(TAG, "Received start"); + HttpURLConnection connection = httpsURLConnectionRef.get(); + if (this.looperThread.isAlive()) { + Log.d(TAG, "Reconnect onStartCommand"); + if (connection != null && this.connectedSseInfo != null && !this.connectedSseInfo.equals(sseStorage.getSseInfo())) { + connection.disconnect(); + }else { + this.looperThread.getHandler().post(this::connect); + } + } else { + Log.d(TAG, "Starting looperThread"); + looperThread.start(); + } + return Service.START_STICKY; + } + + private void connect() { + Log.d(TAG, "Starting SSE connection"); + Random random = new Random(); + BufferedReader reader = null; + SseInfo sseInfo = sseStorage.getSseInfo(); + if (sseInfo == null) { + Log.d(TAG, "sse info not available skip reconnect"); + return; + } + this.connectedSseInfo = sseInfo; + try { + URL url = new URL(sseInfo.getSseOrigin() + "/sse?_body=" + requestJson(sseInfo)); + HttpURLConnection httpsURLConnection = (HttpURLConnection) url.openConnection(); + this.httpsURLConnectionRef.set(httpsURLConnection); + httpsURLConnection.setRequestProperty("Content-Type", "application/json"); + httpsURLConnection.setRequestProperty("Connection", "Keep-Alive"); + httpsURLConnection.setRequestProperty("Keep-Alive", "header"); + httpsURLConnection.setRequestProperty("Connection", "close"); + httpsURLConnection.setRequestProperty("Accept", "text/event-stream"); + httpsURLConnection.setRequestMethod("GET"); + //httpsURLConnection.setConnectTimeout(70000); + httpsURLConnection.setReadTimeout((int) TimeUnit.SECONDS.toMillis(15)); + InputStream inputStream = new BufferedInputStream(httpsURLConnection.getInputStream()); + reader = new BufferedReader(new InputStreamReader(inputStream)); + String event; + while ((event = reader.readLine()) != null) { + if (!event.startsWith("data: ")) { + continue; + } + event = event.substring(6); + if (event.matches("^[0-9]{1,}$")) + continue; + + NotificationManager notificationManager = + (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + + Uri notificatoinUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + + Notification notification = new Notification.Builder(this) + .setContentTitle(event) + .setSmallIcon(R.drawable.ic_status) + .setSound(notificatoinUri) + .setVibrate(new long[]{3000}) + .build(); + //noinspection ConstantConditions + notificationManager.notify(NOTIFICATION_ID, notification); + } + } catch (Exception ignored) { + HttpURLConnection httpURLConnection = httpsURLConnectionRef.get(); + try { + // we get not authorized for the stored identifier and user ids, so remove them + if (httpURLConnection != null && httpURLConnection.getResponseCode() == 403) { + Log.e(TAG, "not authorized to connect, disable reconnect"); + sseStorage.clear(); + return; + } + } catch (IOException e) { + // ignore Exception when getting status code. + } + int delay = random.nextInt(15) + 15; + Log.e(TAG, "error opening sse, rescheduling after " + delay, ignored); + looperThread.getHandler().postDelayed(this::connect, + TimeUnit.SECONDS.toMillis(delay)); + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException ignored) { + } + } + } + } + + private String requestJson(SseInfo sseInfo) { + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("_format", "0"); + jsonObject.put("identifier", sseInfo.getPushIdentifier()); + JSONArray jsonArray = new JSONArray(); + for (String userId : sseInfo.getUserIds()) { + JSONObject userIdObject = new JSONObject(); + userIdObject.put("_id", generateId()); + userIdObject.put("value", userId); + jsonArray.put(userIdObject); + } + jsonObject.put("userIds", jsonArray); + return URLEncoder.encode(jsonObject.toString(), "UTF-8"); + } catch (JSONException | UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + + private String generateId() { + byte[] bytes = new byte[4]; + crypto.getRandomizer().nextBytes(bytes); + return Utils.base64ToBase64Url(Utils.bytesToBase64(bytes)); + } +} + +class LooperThread extends Thread { + + private Handler handler; + private Runnable initRunnable; + + LooperThread(Runnable initRunnable) { + this.initRunnable = initRunnable; + } + + @Override + public void run() { + Looper.prepare(); + handler = new Handler(); + handler.post(initRunnable); + Looper.loop(); + } + + public Handler getHandler() { + return handler; + } +} \ No newline at end of file diff --git a/app-android/app/src/main/java/de/tutao/tutanota/push/SseStorage.java b/app-android/app/src/main/java/de/tutao/tutanota/push/SseStorage.java new file mode 100644 index 00000000000..262e5524b9b --- /dev/null +++ b/app-android/app/src/main/java/de/tutao/tutanota/push/SseStorage.java @@ -0,0 +1,120 @@ +package de.tutao.tutanota.push; + +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; +import android.support.annotation.Nullable; +import android.util.Log; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.ByteArrayOutputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +public final class SseStorage { + public static final String PUSH_IDENTIFIER_JSON_KEY = "pushIdentifier"; + public static final String USER_IDS_JSON_KEY = "userIds"; + public static final String SSE_ORIGIN_JSON_KEY = "sseOrigin"; + + private static final String SSE_INFO_PREF = "sseInfo"; + private static final String TAG = SseStorage.class.getSimpleName(); + + + private Context context; + + public SseStorage(Context context) { + this.context = context; + } + + @Nullable + public String getPushIdentifier() { + SseInfo sseInfo = getSseInfo(); + if (sseInfo != null) { + return sseInfo.getPushIdentifier(); + } + return null; + } + + @Nullable + public SseInfo getSseInfo() { + String pushIdentifierPref = getPrefs().getString(SSE_INFO_PREF, null); + if (pushIdentifierPref == null) { + return null; + } + try { + JSONObject jsonObject = new JSONObject(pushIdentifierPref); + String identifier = jsonObject.getString(PUSH_IDENTIFIER_JSON_KEY); + JSONArray userIdsArray = jsonObject.getJSONArray(USER_IDS_JSON_KEY); + List userIds = new ArrayList<>(userIdsArray.length()); + for (int i = 0; i < userIdsArray.length(); i++) { + userIds.add(userIdsArray.getString(i)); + } + String sseOrigin = jsonObject.getString(SSE_ORIGIN_JSON_KEY); + return new SseInfo(identifier, userIds, sseOrigin); + } catch ( JSONException e) { + Log.w(TAG, "could read sse info", e); + return null; + } + } + + public void storePushIdentifier(String identifier, String userId, String sseOrigin) { + final SseInfo sseInfo = getSseInfo(); + SseInfo newInfo; + if (sseInfo == null) { + newInfo = new SseInfo(identifier, Collections.singletonList(userId), sseOrigin); + } else { + List userList = new ArrayList<>(sseInfo.getUserIds()); + if (!userList.contains(userId)) { + userList.add(userId); + } + newInfo = new SseInfo(identifier, userList, sseOrigin); + } + getPrefs().edit().putString(SSE_INFO_PREF, newInfo.toJSON()).apply(); + } + + public void clear() { + this.getPrefs().edit().clear().apply(); + } + + private SharedPreferences getPrefs() { + return PreferenceManager.getDefaultSharedPreferences(context); + } +} + +final class SseInfo { + final private String pushIdentifier; + final private List userIds; + final private String sseOrigin; + + SseInfo(String pushIdentifier, List userIds, String sseOrigin) { + this.pushIdentifier = pushIdentifier; + this.userIds = userIds; + this.sseOrigin = sseOrigin; + } + + public String getPushIdentifier() { + return pushIdentifier; + } + + public List getUserIds() { + return userIds; + } + + public String getSseOrigin() { + return sseOrigin; + } + + public String toJSON() { + HashMap sseInfoMap = new HashMap<>(); + sseInfoMap.put(SseStorage.PUSH_IDENTIFIER_JSON_KEY, this.pushIdentifier); + sseInfoMap.put(SseStorage.USER_IDS_JSON_KEY, this.userIds); + sseInfoMap.put(SseStorage.SSE_ORIGIN_JSON_KEY, this.sseOrigin); + JSONObject jsonObject = new JSONObject(sseInfoMap); + return jsonObject.toString(); + } +} \ No newline at end of file diff --git a/app-android/app/src/main/res/drawable-hdpi/ic_status.png b/app-android/app/src/main/res/drawable-hdpi/ic_status.png new file mode 100644 index 00000000000..392fea9d827 Binary files /dev/null and b/app-android/app/src/main/res/drawable-hdpi/ic_status.png differ diff --git a/app-android/app/src/main/res/drawable-xhdpi/ic_status.png b/app-android/app/src/main/res/drawable-xhdpi/ic_status.png new file mode 100644 index 00000000000..c06a1f4da8f Binary files /dev/null and b/app-android/app/src/main/res/drawable-xhdpi/ic_status.png differ diff --git a/app-android/app/src/main/res/drawable-xxhdpi/ic_status.png b/app-android/app/src/main/res/drawable-xxhdpi/ic_status.png new file mode 100644 index 00000000000..db95f29cf11 Binary files /dev/null and b/app-android/app/src/main/res/drawable-xxhdpi/ic_status.png differ diff --git a/app-android/app/src/main/res/drawable-xxxhdpi/ic_status.png b/app-android/app/src/main/res/drawable-xxxhdpi/ic_status.png new file mode 100644 index 00000000000..0147188c6c6 Binary files /dev/null and b/app-android/app/src/main/res/drawable-xxxhdpi/ic_status.png differ diff --git a/flow/api/entities/sys.js b/flow/api/entities/sys.js index b53e5c68a1e..b8f18db3869 100644 --- a/flow/api/entities/sys.js +++ b/flow/api/entities/sys.js @@ -1493,3 +1493,18 @@ type SignOrderProcessingAgreementData = { version:string; } + +type GeneratedIdWrapper = { + _type: TypeRef; + _id:Id; + value:Id; + +} + +type SseConnectData = { + _type: TypeRef; + _format:NumberString; + identifier:string; + + userIds:GeneratedIdWrapper[]; +} diff --git a/flow/api/types.js b/flow/api/types.js index 49e8a3bee08..20cee8841da 100644 --- a/flow/api/types.js +++ b/flow/api/types.js @@ -109,6 +109,7 @@ type WorkerRequestType = 'setup' | 'switchPremiumToFreeGroup' | 'updatePaymentData' | 'downloadInvoice' + | 'generateSsePushIdentifer' type MainRequestType ='execNative' | 'entityEvent' | 'error' @@ -133,6 +134,8 @@ type NativeRequestType = 'init' | 'initPushNotifications' | 'openLink' | 'logout' + | 'getPushIdentifier' + | 'storePushIdentifierLocally' type JsRequestType ='createMailEditor' | 'updatePushIdentifier' | 'handleBackPress' diff --git a/src/api/Env.js b/src/api/Env.js index b4fef2c3739..98793b25fa4 100644 --- a/src/api/Env.js +++ b/src/api/Env.js @@ -28,6 +28,10 @@ export function isIOSApp(): boolean { return env.mode == Mode.App && env.platformId == "ios" } +export function isAndroidApp(): boolean { + return env.mode == Mode.App && env.platformId == "android" +} + export function isApp(): boolean { return env.mode == Mode.App } diff --git a/src/api/common/TutanotaConstants.js b/src/api/common/TutanotaConstants.js index f6ec56d262f..48924e38d97 100644 --- a/src/api/common/TutanotaConstants.js +++ b/src/api/common/TutanotaConstants.js @@ -126,7 +126,7 @@ export const PaymentMethodType = { } export type PaymentMethodTypeEnum = $Values; -export const reverse = (objectMap:Object) => Object.keys(objectMap).reduce((r, k) => Object.assign(r, {[objectMap[k]]: (r[objectMap[k]] || []).concat(k)}), {}) +export const reverse = (objectMap: Object) => Object.keys(objectMap).reduce((r, k) => Object.assign(r, {[objectMap[k]]: (r[objectMap[k]] || []).concat(k)}), {}) export const ValueToPaymentMethodType = reverse(PaymentMethodType) @@ -212,7 +212,8 @@ export type SessionStateEnum = $Values; export const PushServiceType = { ANDROID: "0", IOS: "1", - EMAIL: "2" + EMAIL: "2", + SSE: "3" } export type PushServiceTypeEnum = $Values; diff --git a/src/api/entities/sys/AccountingInfo.js b/src/api/entities/sys/AccountingInfo.js index 78c26144e00..aa75291ff8f 100644 --- a/src/api/entities/sys/AccountingInfo.js +++ b/src/api/entities/sys/AccountingInfo.js @@ -196,7 +196,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createAccountingInfo(): AccountingInfo { diff --git a/src/api/entities/sys/AdministratedGroup.js b/src/api/entities/sys/AdministratedGroup.js index 5c1eab3258e..b74a5393b13 100644 --- a/src/api/entities/sys/AdministratedGroup.js +++ b/src/api/entities/sys/AdministratedGroup.js @@ -80,7 +80,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createAdministratedGroup(): AdministratedGroup { diff --git a/src/api/entities/sys/AdministratedGroupsRef.js b/src/api/entities/sys/AdministratedGroupsRef.js index 68625281be8..fc3fb8df2da 100644 --- a/src/api/entities/sys/AdministratedGroupsRef.js +++ b/src/api/entities/sys/AdministratedGroupsRef.js @@ -34,7 +34,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createAdministratedGroupsRef(): AdministratedGroupsRef { diff --git a/src/api/entities/sys/AuditLogEntry.js b/src/api/entities/sys/AuditLogEntry.js index 2ca10b4f0e0..331af8a461d 100644 --- a/src/api/entities/sys/AuditLogEntry.js +++ b/src/api/entities/sys/AuditLogEntry.js @@ -125,7 +125,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createAuditLogEntry(): AuditLogEntry { diff --git a/src/api/entities/sys/AuditLogRef.js b/src/api/entities/sys/AuditLogRef.js index 1596cab738f..57a4fde9f8e 100644 --- a/src/api/entities/sys/AuditLogRef.js +++ b/src/api/entities/sys/AuditLogRef.js @@ -34,7 +34,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createAuditLogRef(): AuditLogRef { diff --git a/src/api/entities/sys/AuthenticatedDevice.js b/src/api/entities/sys/AuthenticatedDevice.js index 2cf46b99bfe..895fd7c57d0 100644 --- a/src/api/entities/sys/AuthenticatedDevice.js +++ b/src/api/entities/sys/AuthenticatedDevice.js @@ -50,7 +50,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createAuthenticatedDevice(): AuthenticatedDevice { diff --git a/src/api/entities/sys/Authentication.js b/src/api/entities/sys/Authentication.js index 46e390e489e..1d008c9474a 100644 --- a/src/api/entities/sys/Authentication.js +++ b/src/api/entities/sys/Authentication.js @@ -61,7 +61,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createAuthentication(): Authentication { diff --git a/src/api/entities/sys/AutoLoginDataDelete.js b/src/api/entities/sys/AutoLoginDataDelete.js index 00ad9d87fe1..48d2609c08e 100644 --- a/src/api/entities/sys/AutoLoginDataDelete.js +++ b/src/api/entities/sys/AutoLoginDataDelete.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createAutoLoginDataDelete(): AutoLoginDataDelete { diff --git a/src/api/entities/sys/AutoLoginDataGet.js b/src/api/entities/sys/AutoLoginDataGet.js index e14d78dad47..bf747df974b 100644 --- a/src/api/entities/sys/AutoLoginDataGet.js +++ b/src/api/entities/sys/AutoLoginDataGet.js @@ -43,7 +43,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createAutoLoginDataGet(): AutoLoginDataGet { diff --git a/src/api/entities/sys/AutoLoginDataReturn.js b/src/api/entities/sys/AutoLoginDataReturn.js index f5e50d32b65..19ebf197ede 100644 --- a/src/api/entities/sys/AutoLoginDataReturn.js +++ b/src/api/entities/sys/AutoLoginDataReturn.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createAutoLoginDataReturn(): AutoLoginDataReturn { diff --git a/src/api/entities/sys/AutoLoginPostReturn.js b/src/api/entities/sys/AutoLoginPostReturn.js index 9e6f2fcaaa0..72aa2cb52ff 100644 --- a/src/api/entities/sys/AutoLoginPostReturn.js +++ b/src/api/entities/sys/AutoLoginPostReturn.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createAutoLoginPostReturn(): AutoLoginPostReturn { diff --git a/src/api/entities/sys/Booking.js b/src/api/entities/sys/Booking.js index 95b57206727..d8851849eb4 100644 --- a/src/api/entities/sys/Booking.js +++ b/src/api/entities/sys/Booking.js @@ -123,7 +123,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createBooking(): Booking { diff --git a/src/api/entities/sys/BookingItem.js b/src/api/entities/sys/BookingItem.js index 9496f24fcab..3291b4c8e2f 100644 --- a/src/api/entities/sys/BookingItem.js +++ b/src/api/entities/sys/BookingItem.js @@ -86,7 +86,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createBookingItem(): BookingItem { diff --git a/src/api/entities/sys/BookingServiceData.js b/src/api/entities/sys/BookingServiceData.js index e87e125e5ee..5a6108282c1 100644 --- a/src/api/entities/sys/BookingServiceData.js +++ b/src/api/entities/sys/BookingServiceData.js @@ -50,7 +50,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createBookingServiceData(): BookingServiceData { diff --git a/src/api/entities/sys/BookingsRef.js b/src/api/entities/sys/BookingsRef.js index 1cde1fc7c13..04e484bc76b 100644 --- a/src/api/entities/sys/BookingsRef.js +++ b/src/api/entities/sys/BookingsRef.js @@ -34,7 +34,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createBookingsRef(): BookingsRef { diff --git a/src/api/entities/sys/BootstrapFeature.js b/src/api/entities/sys/BootstrapFeature.js index 2561c91902a..55dc4385fd9 100644 --- a/src/api/entities/sys/BootstrapFeature.js +++ b/src/api/entities/sys/BootstrapFeature.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createBootstrapFeature(): BootstrapFeature { diff --git a/src/api/entities/sys/BrandingDomainData.js b/src/api/entities/sys/BrandingDomainData.js index 5816e8c7cb6..5ecfc1d896b 100644 --- a/src/api/entities/sys/BrandingDomainData.js +++ b/src/api/entities/sys/BrandingDomainData.js @@ -59,7 +59,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createBrandingDomainData(): BrandingDomainData { diff --git a/src/api/entities/sys/BrandingDomainDeleteData.js b/src/api/entities/sys/BrandingDomainDeleteData.js index f3bf4fef637..af90eb071bc 100644 --- a/src/api/entities/sys/BrandingDomainDeleteData.js +++ b/src/api/entities/sys/BrandingDomainDeleteData.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createBrandingDomainDeleteData(): BrandingDomainDeleteData { diff --git a/src/api/entities/sys/Bucket.js b/src/api/entities/sys/Bucket.js index 5c68da16766..5815fcc9b17 100644 --- a/src/api/entities/sys/Bucket.js +++ b/src/api/entities/sys/Bucket.js @@ -34,7 +34,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createBucket(): Bucket { diff --git a/src/api/entities/sys/BucketPermission.js b/src/api/entities/sys/BucketPermission.js index d5e32055a41..d64b6435530 100644 --- a/src/api/entities/sys/BucketPermission.js +++ b/src/api/entities/sys/BucketPermission.js @@ -106,7 +106,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createBucketPermission(): BucketPermission { diff --git a/src/api/entities/sys/Challenge.js b/src/api/entities/sys/Challenge.js index aee52774be0..4e6a609f63d 100644 --- a/src/api/entities/sys/Challenge.js +++ b/src/api/entities/sys/Challenge.js @@ -51,7 +51,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createChallenge(): Challenge { diff --git a/src/api/entities/sys/ChangePasswordData.js b/src/api/entities/sys/ChangePasswordData.js index 800ad47bf8b..fa4cf1a0244 100644 --- a/src/api/entities/sys/ChangePasswordData.js +++ b/src/api/entities/sys/ChangePasswordData.js @@ -68,7 +68,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createChangePasswordData(): ChangePasswordData { diff --git a/src/api/entities/sys/Chat.js b/src/api/entities/sys/Chat.js index c8575c96a88..a1d5b498e37 100644 --- a/src/api/entities/sys/Chat.js +++ b/src/api/entities/sys/Chat.js @@ -50,7 +50,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createChat(): Chat { diff --git a/src/api/entities/sys/CreateCustomerServerPropertiesData.js b/src/api/entities/sys/CreateCustomerServerPropertiesData.js index 2cbf4b4b241..71d92c56c80 100644 --- a/src/api/entities/sys/CreateCustomerServerPropertiesData.js +++ b/src/api/entities/sys/CreateCustomerServerPropertiesData.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createCreateCustomerServerPropertiesData(): CreateCustomerServerPropertiesData { diff --git a/src/api/entities/sys/CreateCustomerServerPropertiesReturn.js b/src/api/entities/sys/CreateCustomerServerPropertiesReturn.js index bf2ada6d7f9..74a49921226 100644 --- a/src/api/entities/sys/CreateCustomerServerPropertiesReturn.js +++ b/src/api/entities/sys/CreateCustomerServerPropertiesReturn.js @@ -34,7 +34,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createCreateCustomerServerPropertiesReturn(): CreateCustomerServerPropertiesReturn { diff --git a/src/api/entities/sys/CreateGroupData.js b/src/api/entities/sys/CreateGroupData.js index b042a785728..352a07f31d1 100644 --- a/src/api/entities/sys/CreateGroupData.js +++ b/src/api/entities/sys/CreateGroupData.js @@ -95,7 +95,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createCreateGroupData(): CreateGroupData { diff --git a/src/api/entities/sys/CreateGroupListData.js b/src/api/entities/sys/CreateGroupListData.js index 838465c2f7d..1284cfebd61 100644 --- a/src/api/entities/sys/CreateGroupListData.js +++ b/src/api/entities/sys/CreateGroupListData.js @@ -51,7 +51,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createCreateGroupListData(): CreateGroupListData { diff --git a/src/api/entities/sys/CreateSessionData.js b/src/api/entities/sys/CreateSessionData.js index 5fd7a2799e3..718309b1e4b 100644 --- a/src/api/entities/sys/CreateSessionData.js +++ b/src/api/entities/sys/CreateSessionData.js @@ -79,7 +79,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createCreateSessionData(): CreateSessionData { diff --git a/src/api/entities/sys/CreateSessionReturn.js b/src/api/entities/sys/CreateSessionReturn.js index 7d2cdab0049..af99138fcbb 100644 --- a/src/api/entities/sys/CreateSessionReturn.js +++ b/src/api/entities/sys/CreateSessionReturn.js @@ -52,7 +52,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createCreateSessionReturn(): CreateSessionReturn { diff --git a/src/api/entities/sys/CreditCard.js b/src/api/entities/sys/CreditCard.js index 9bd5f0a6943..345462af1ca 100644 --- a/src/api/entities/sys/CreditCard.js +++ b/src/api/entities/sys/CreditCard.js @@ -68,7 +68,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createCreditCard(): CreditCard { diff --git a/src/api/entities/sys/CustomDomainData.js b/src/api/entities/sys/CustomDomainData.js index 43a511c9317..5b60101b26c 100644 --- a/src/api/entities/sys/CustomDomainData.js +++ b/src/api/entities/sys/CustomDomainData.js @@ -43,7 +43,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createCustomDomainData(): CustomDomainData { diff --git a/src/api/entities/sys/CustomDomainReturn.js b/src/api/entities/sys/CustomDomainReturn.js index ce559d264b6..ce4174be001 100644 --- a/src/api/entities/sys/CustomDomainReturn.js +++ b/src/api/entities/sys/CustomDomainReturn.js @@ -42,7 +42,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createCustomDomainReturn(): CustomDomainReturn { diff --git a/src/api/entities/sys/Customer.js b/src/api/entities/sys/Customer.js index 39d5b39c9db..cd76bdfd5a6 100644 --- a/src/api/entities/sys/Customer.js +++ b/src/api/entities/sys/Customer.js @@ -250,7 +250,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createCustomer(): Customer { diff --git a/src/api/entities/sys/CustomerData.js b/src/api/entities/sys/CustomerData.js index 6e65ffc597c..f57de982459 100644 --- a/src/api/entities/sys/CustomerData.js +++ b/src/api/entities/sys/CustomerData.js @@ -168,7 +168,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createCustomerData(): CustomerData { diff --git a/src/api/entities/sys/CustomerInfo.js b/src/api/entities/sys/CustomerInfo.js index 8484d5048de..c03e6db1849 100644 --- a/src/api/entities/sys/CustomerInfo.js +++ b/src/api/entities/sys/CustomerInfo.js @@ -225,7 +225,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createCustomerInfo(): CustomerInfo { diff --git a/src/api/entities/sys/CustomerInfoReturn.js b/src/api/entities/sys/CustomerInfoReturn.js index 6ef3e67afe0..cfa172a01db 100644 --- a/src/api/entities/sys/CustomerInfoReturn.js +++ b/src/api/entities/sys/CustomerInfoReturn.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createCustomerInfoReturn(): CustomerInfoReturn { diff --git a/src/api/entities/sys/CustomerProperties.js b/src/api/entities/sys/CustomerProperties.js index 2c72ee0cb0d..ee4fa93aabc 100644 --- a/src/api/entities/sys/CustomerProperties.js +++ b/src/api/entities/sys/CustomerProperties.js @@ -87,7 +87,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createCustomerProperties(): CustomerProperties { diff --git a/src/api/entities/sys/CustomerReturn.js b/src/api/entities/sys/CustomerReturn.js index 8b288647416..ecd70e9e12a 100644 --- a/src/api/entities/sys/CustomerReturn.js +++ b/src/api/entities/sys/CustomerReturn.js @@ -44,7 +44,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createCustomerReturn(): CustomerReturn { diff --git a/src/api/entities/sys/CustomerServerProperties.js b/src/api/entities/sys/CustomerServerProperties.js index d34537f768c..1ddb9e73563 100644 --- a/src/api/entities/sys/CustomerServerProperties.js +++ b/src/api/entities/sys/CustomerServerProperties.js @@ -105,7 +105,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createCustomerServerProperties(): CustomerServerProperties { diff --git a/src/api/entities/sys/DebitServicePutData.js b/src/api/entities/sys/DebitServicePutData.js index 6fd4064ea21..8b1ca058230 100644 --- a/src/api/entities/sys/DebitServicePutData.js +++ b/src/api/entities/sys/DebitServicePutData.js @@ -34,7 +34,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createDebitServicePutData(): DebitServicePutData { diff --git a/src/api/entities/sys/DeleteCustomerData.js b/src/api/entities/sys/DeleteCustomerData.js index 338f85fe297..3a411ae9dcf 100644 --- a/src/api/entities/sys/DeleteCustomerData.js +++ b/src/api/entities/sys/DeleteCustomerData.js @@ -70,7 +70,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createDeleteCustomerData(): DeleteCustomerData { diff --git a/src/api/entities/sys/DomainInfo.js b/src/api/entities/sys/DomainInfo.js index 98f0d41ba4e..40eb7b9b9ba 100644 --- a/src/api/entities/sys/DomainInfo.js +++ b/src/api/entities/sys/DomainInfo.js @@ -81,7 +81,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createDomainInfo(): DomainInfo { diff --git a/src/api/entities/sys/DomainMailAddressAvailabilityData.js b/src/api/entities/sys/DomainMailAddressAvailabilityData.js index 019b2f7fd69..2079da3879d 100644 --- a/src/api/entities/sys/DomainMailAddressAvailabilityData.js +++ b/src/api/entities/sys/DomainMailAddressAvailabilityData.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createDomainMailAddressAvailabilityData(): DomainMailAddressAvailabilityData { diff --git a/src/api/entities/sys/DomainMailAddressAvailabilityReturn.js b/src/api/entities/sys/DomainMailAddressAvailabilityReturn.js index 11bdd2803b7..603c1f14b58 100644 --- a/src/api/entities/sys/DomainMailAddressAvailabilityReturn.js +++ b/src/api/entities/sys/DomainMailAddressAvailabilityReturn.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createDomainMailAddressAvailabilityReturn(): DomainMailAddressAvailabilityReturn { diff --git a/src/api/entities/sys/DomainsRef.js b/src/api/entities/sys/DomainsRef.js index f1a02c75c35..44d3f70ae75 100644 --- a/src/api/entities/sys/DomainsRef.js +++ b/src/api/entities/sys/DomainsRef.js @@ -34,7 +34,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createDomainsRef(): DomainsRef { diff --git a/src/api/entities/sys/EmailSenderListElement.js b/src/api/entities/sys/EmailSenderListElement.js index 576cdec1c37..6b5571de6cb 100644 --- a/src/api/entities/sys/EmailSenderListElement.js +++ b/src/api/entities/sys/EmailSenderListElement.js @@ -50,7 +50,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createEmailSenderListElement(): EmailSenderListElement { diff --git a/src/api/entities/sys/EntityEventBatch.js b/src/api/entities/sys/EntityEventBatch.js index 13013b85be7..15c7d0235ac 100644 --- a/src/api/entities/sys/EntityEventBatch.js +++ b/src/api/entities/sys/EntityEventBatch.js @@ -60,7 +60,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createEntityEventBatch(): EntityEventBatch { diff --git a/src/api/entities/sys/EntityUpdate.js b/src/api/entities/sys/EntityUpdate.js index e91d513fd0b..779381d986c 100644 --- a/src/api/entities/sys/EntityUpdate.js +++ b/src/api/entities/sys/EntityUpdate.js @@ -68,7 +68,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createEntityUpdate(): EntityUpdate { diff --git a/src/api/entities/sys/Exception.js b/src/api/entities/sys/Exception.js index 62b8fcd3b1a..0b730bc3586 100644 --- a/src/api/entities/sys/Exception.js +++ b/src/api/entities/sys/Exception.js @@ -41,7 +41,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createException(): Exception { diff --git a/src/api/entities/sys/ExternalPropertiesReturn.js b/src/api/entities/sys/ExternalPropertiesReturn.js index d28756c3d50..d23211e22fd 100644 --- a/src/api/entities/sys/ExternalPropertiesReturn.js +++ b/src/api/entities/sys/ExternalPropertiesReturn.js @@ -60,7 +60,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createExternalPropertiesReturn(): ExternalPropertiesReturn { diff --git a/src/api/entities/sys/ExternalUserReference.js b/src/api/entities/sys/ExternalUserReference.js index fb21b0a9069..0319c14229d 100644 --- a/src/api/entities/sys/ExternalUserReference.js +++ b/src/api/entities/sys/ExternalUserReference.js @@ -71,7 +71,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createExternalUserReference(): ExternalUserReference { diff --git a/src/api/entities/sys/Feature.js b/src/api/entities/sys/Feature.js index cc0540518bb..d7e0d01f50f 100644 --- a/src/api/entities/sys/Feature.js +++ b/src/api/entities/sys/Feature.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createFeature(): Feature { diff --git a/src/api/entities/sys/File.js b/src/api/entities/sys/File.js index acf75c70374..89515682ea1 100644 --- a/src/api/entities/sys/File.js +++ b/src/api/entities/sys/File.js @@ -50,7 +50,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createFile(): SysFile { diff --git a/src/api/entities/sys/GeneratedIdWrapper.js b/src/api/entities/sys/GeneratedIdWrapper.js new file mode 100644 index 00000000000..534aa6d3e3f --- /dev/null +++ b/src/api/entities/sys/GeneratedIdWrapper.js @@ -0,0 +1,40 @@ +// @flow +import {create, TypeRef} from "../../common/EntityFunctions" + +export const GeneratedIdWrapperTypeRef: TypeRef = new TypeRef("sys", "GeneratedIdWrapper") +export const _TypeModel: TypeModel = { + "name": "GeneratedIdWrapper", + "since": 32, + "type": "AGGREGATED_TYPE", + "id": 1349, + "rootId": "A3N5cwAFRQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "name": "_id", + "id": 1350, + "since": 32, + "type": "CustomId", + "cardinality": "One", + "final": true, + "encrypted": false + }, + "value": { + "name": "value", + "id": 1351, + "since": 32, + "type": "GeneratedId", + "cardinality": "One", + "final": false, + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "32" +} + +export function createGeneratedIdWrapper(): GeneratedIdWrapper { + return create(_TypeModel) +} diff --git a/src/api/entities/sys/Group.js b/src/api/entities/sys/Group.js index 4e366097d78..2f14a5a273a 100644 --- a/src/api/entities/sys/Group.js +++ b/src/api/entities/sys/Group.js @@ -165,7 +165,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createGroup(): Group { diff --git a/src/api/entities/sys/GroupInfo.js b/src/api/entities/sys/GroupInfo.js index 5dbc400d632..f38649aaef5 100644 --- a/src/api/entities/sys/GroupInfo.js +++ b/src/api/entities/sys/GroupInfo.js @@ -143,7 +143,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createGroupInfo(): GroupInfo { diff --git a/src/api/entities/sys/GroupMember.js b/src/api/entities/sys/GroupMember.js index dfeae0045ba..236d4288820 100644 --- a/src/api/entities/sys/GroupMember.js +++ b/src/api/entities/sys/GroupMember.js @@ -81,7 +81,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createGroupMember(): GroupMember { diff --git a/src/api/entities/sys/GroupMembership.js b/src/api/entities/sys/GroupMembership.js index 71097e5a366..ccb13c43380 100644 --- a/src/api/entities/sys/GroupMembership.js +++ b/src/api/entities/sys/GroupMembership.js @@ -81,7 +81,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createGroupMembership(): GroupMembership { diff --git a/src/api/entities/sys/GroupRoot.js b/src/api/entities/sys/GroupRoot.js index 33b2ef21c0a..7203524cffd 100644 --- a/src/api/entities/sys/GroupRoot.js +++ b/src/api/entities/sys/GroupRoot.js @@ -80,7 +80,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createGroupRoot(): GroupRoot { diff --git a/src/api/entities/sys/Invoice.js b/src/api/entities/sys/Invoice.js index 5bbb778e916..76ffa366cba 100644 --- a/src/api/entities/sys/Invoice.js +++ b/src/api/entities/sys/Invoice.js @@ -170,7 +170,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createInvoice(): Invoice { diff --git a/src/api/entities/sys/InvoiceInfo.js b/src/api/entities/sys/InvoiceInfo.js index 49e4e165736..600ec666b62 100644 --- a/src/api/entities/sys/InvoiceInfo.js +++ b/src/api/entities/sys/InvoiceInfo.js @@ -115,7 +115,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createInvoiceInfo(): InvoiceInfo { diff --git a/src/api/entities/sys/KeyPair.js b/src/api/entities/sys/KeyPair.js index ce5e3a09659..2f081ca8d85 100644 --- a/src/api/entities/sys/KeyPair.js +++ b/src/api/entities/sys/KeyPair.js @@ -50,7 +50,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createKeyPair(): KeyPair { diff --git a/src/api/entities/sys/LocationServiceGetReturn.js b/src/api/entities/sys/LocationServiceGetReturn.js index 2af40ad0dfc..268d32c0b99 100644 --- a/src/api/entities/sys/LocationServiceGetReturn.js +++ b/src/api/entities/sys/LocationServiceGetReturn.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createLocationServiceGetReturn(): LocationServiceGetReturn { diff --git a/src/api/entities/sys/Login.js b/src/api/entities/sys/Login.js index 7f359e4cd12..9fa48b4e370 100644 --- a/src/api/entities/sys/Login.js +++ b/src/api/entities/sys/Login.js @@ -59,7 +59,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createLogin(): Login { diff --git a/src/api/entities/sys/MailAddressAlias.js b/src/api/entities/sys/MailAddressAlias.js index ce467cad536..7cf86377a00 100644 --- a/src/api/entities/sys/MailAddressAlias.js +++ b/src/api/entities/sys/MailAddressAlias.js @@ -41,7 +41,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createMailAddressAlias(): MailAddressAlias { diff --git a/src/api/entities/sys/MailAddressAliasServiceData.js b/src/api/entities/sys/MailAddressAliasServiceData.js index 771a3d71a6e..29530d152cd 100644 --- a/src/api/entities/sys/MailAddressAliasServiceData.js +++ b/src/api/entities/sys/MailAddressAliasServiceData.js @@ -43,7 +43,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createMailAddressAliasServiceData(): MailAddressAliasServiceData { diff --git a/src/api/entities/sys/MailAddressAliasServiceDataDelete.js b/src/api/entities/sys/MailAddressAliasServiceDataDelete.js index f1b2833857b..1edc8265830 100644 --- a/src/api/entities/sys/MailAddressAliasServiceDataDelete.js +++ b/src/api/entities/sys/MailAddressAliasServiceDataDelete.js @@ -52,7 +52,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createMailAddressAliasServiceDataDelete(): MailAddressAliasServiceDataDelete { diff --git a/src/api/entities/sys/MailAddressAliasServiceReturn.js b/src/api/entities/sys/MailAddressAliasServiceReturn.js index a6c63b3fce3..76a2cfb761b 100644 --- a/src/api/entities/sys/MailAddressAliasServiceReturn.js +++ b/src/api/entities/sys/MailAddressAliasServiceReturn.js @@ -59,7 +59,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createMailAddressAliasServiceReturn(): MailAddressAliasServiceReturn { diff --git a/src/api/entities/sys/MailAddressAvailabilityData.js b/src/api/entities/sys/MailAddressAvailabilityData.js index 99d60f97fa3..af7de861704 100644 --- a/src/api/entities/sys/MailAddressAvailabilityData.js +++ b/src/api/entities/sys/MailAddressAvailabilityData.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createMailAddressAvailabilityData(): MailAddressAvailabilityData { diff --git a/src/api/entities/sys/MailAddressAvailabilityReturn.js b/src/api/entities/sys/MailAddressAvailabilityReturn.js index 03f07f3db4b..73455a309aa 100644 --- a/src/api/entities/sys/MailAddressAvailabilityReturn.js +++ b/src/api/entities/sys/MailAddressAvailabilityReturn.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createMailAddressAvailabilityReturn(): MailAddressAvailabilityReturn { diff --git a/src/api/entities/sys/MailAddressToGroup.js b/src/api/entities/sys/MailAddressToGroup.js index a594ef29edd..9df7579ca6f 100644 --- a/src/api/entities/sys/MailAddressToGroup.js +++ b/src/api/entities/sys/MailAddressToGroup.js @@ -61,7 +61,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createMailAddressToGroup(): MailAddressToGroup { diff --git a/src/api/entities/sys/MembershipAddData.js b/src/api/entities/sys/MembershipAddData.js index e18af154d1a..7e2978a34d2 100644 --- a/src/api/entities/sys/MembershipAddData.js +++ b/src/api/entities/sys/MembershipAddData.js @@ -53,7 +53,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createMembershipAddData(): MembershipAddData { diff --git a/src/api/entities/sys/MembershipRemoveData.js b/src/api/entities/sys/MembershipRemoveData.js index e874bc7710c..d9503677afe 100644 --- a/src/api/entities/sys/MembershipRemoveData.js +++ b/src/api/entities/sys/MembershipRemoveData.js @@ -44,7 +44,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createMembershipRemoveData(): MembershipRemoveData { diff --git a/src/api/entities/sys/OrderProcessingAgreement.js b/src/api/entities/sys/OrderProcessingAgreement.js index 1aebabb9e2c..fd2138460d3 100644 --- a/src/api/entities/sys/OrderProcessingAgreement.js +++ b/src/api/entities/sys/OrderProcessingAgreement.js @@ -1,10 +1,115 @@ // @flow - import {create, TypeRef} from "../../common/EntityFunctions" -export const OrderProcessingAgreementTypeRef:TypeRef = new TypeRef("sys", "OrderProcessingAgreement") -export const _TypeModel:TypeModel= {"name":"OrderProcessingAgreement","since":31,"type":"LIST_ELEMENT_TYPE","id":1326,"rootId":"A3N5cwAFLg","versioned":false,"encrypted":true,"values":{"_format":{"name":"_format","id":1330,"since":31,"type":"Number","cardinality":"One","final":false,"encrypted":false},"_id":{"name":"_id","id":1328,"since":31,"type":"GeneratedId","cardinality":"One","final":true,"encrypted":false},"_ownerEncSessionKey":{"name":"_ownerEncSessionKey","id":1332,"since":31,"type":"Bytes","cardinality":"ZeroOrOne","final":true,"encrypted":false},"_ownerGroup":{"name":"_ownerGroup","id":1331,"since":31,"type":"GeneratedId","cardinality":"ZeroOrOne","final":true,"encrypted":false},"_permissions":{"name":"_permissions","id":1329,"since":31,"type":"GeneratedId","cardinality":"One","final":true,"encrypted":false},"customerAddress":{"name":"customerAddress","id":1334,"since":31,"type":"String","cardinality":"One","final":false,"encrypted":true},"signatureDate":{"name":"signatureDate","id":1335,"since":31,"type":"Date","cardinality":"One","final":false,"encrypted":false},"version":{"name":"version","id":1333,"since":31,"type":"String","cardinality":"One","final":false,"encrypted":false}},"associations":{"customer":{"name":"customer","id":1337,"since":31,"type":"ELEMENT_ASSOCIATION","cardinality":"One","refType":"Customer","final":true,"external":false},"signerUserGroupInfo":{"name":"signerUserGroupInfo","id":1336,"since":31,"type":"LIST_ELEMENT_ASSOCIATION","cardinality":"One","refType":"GroupInfo","final":false,"external":false}},"app":"sys","version":"31"} +export const OrderProcessingAgreementTypeRef: TypeRef = new TypeRef("sys", "OrderProcessingAgreement") +export const _TypeModel: TypeModel = { + "name": "OrderProcessingAgreement", + "since": 31, + "type": "LIST_ELEMENT_TYPE", + "id": 1326, + "rootId": "A3N5cwAFLg", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "name": "_format", + "id": 1330, + "since": 31, + "type": "Number", + "cardinality": "One", + "final": false, + "encrypted": false + }, + "_id": { + "name": "_id", + "id": 1328, + "since": 31, + "type": "GeneratedId", + "cardinality": "One", + "final": true, + "encrypted": false + }, + "_ownerEncSessionKey": { + "name": "_ownerEncSessionKey", + "id": 1332, + "since": 31, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "final": true, + "encrypted": false + }, + "_ownerGroup": { + "name": "_ownerGroup", + "id": 1331, + "since": 31, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "final": true, + "encrypted": false + }, + "_permissions": { + "name": "_permissions", + "id": 1329, + "since": 31, + "type": "GeneratedId", + "cardinality": "One", + "final": true, + "encrypted": false + }, + "customerAddress": { + "name": "customerAddress", + "id": 1334, + "since": 31, + "type": "String", + "cardinality": "One", + "final": false, + "encrypted": true + }, + "signatureDate": { + "name": "signatureDate", + "id": 1335, + "since": 31, + "type": "Date", + "cardinality": "One", + "final": false, + "encrypted": false + }, + "version": { + "name": "version", + "id": 1333, + "since": 31, + "type": "String", + "cardinality": "One", + "final": false, + "encrypted": false + } + }, + "associations": { + "customer": { + "name": "customer", + "id": 1337, + "since": 31, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Customer", + "final": true, + "external": false + }, + "signerUserGroupInfo": { + "name": "signerUserGroupInfo", + "id": 1336, + "since": 31, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "GroupInfo", + "final": false, + "external": false + } + }, + "app": "sys", + "version": "32" +} -export function createOrderProcessingAgreement():OrderProcessingAgreement { - return create(_TypeModel) +export function createOrderProcessingAgreement(): OrderProcessingAgreement { + return create(_TypeModel) } diff --git a/src/api/entities/sys/OrderProcessingAgreements.js b/src/api/entities/sys/OrderProcessingAgreements.js index f5fa8710674..1def8e6caeb 100644 --- a/src/api/entities/sys/OrderProcessingAgreements.js +++ b/src/api/entities/sys/OrderProcessingAgreements.js @@ -1,10 +1,42 @@ // @flow - import {create, TypeRef} from "../../common/EntityFunctions" -export const OrderProcessingAgreementsTypeRef:TypeRef = new TypeRef("sys", "OrderProcessingAgreements") -export const _TypeModel:TypeModel= {"name":"OrderProcessingAgreements","since":31,"type":"AGGREGATED_TYPE","id":1338,"rootId":"A3N5cwAFOg","versioned":false,"encrypted":false,"values":{"_id":{"name":"_id","id":1339,"since":31,"type":"CustomId","cardinality":"One","final":true,"encrypted":false}},"associations":{"agreements":{"name":"agreements","id":1340,"since":31,"type":"LIST_ASSOCIATION","cardinality":"One","refType":"OrderProcessingAgreement","final":true,"external":false}},"app":"sys","version":"31"} +export const OrderProcessingAgreementsTypeRef: TypeRef = new TypeRef("sys", "OrderProcessingAgreements") +export const _TypeModel: TypeModel = { + "name": "OrderProcessingAgreements", + "since": 31, + "type": "AGGREGATED_TYPE", + "id": 1338, + "rootId": "A3N5cwAFOg", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "name": "_id", + "id": 1339, + "since": 31, + "type": "CustomId", + "cardinality": "One", + "final": true, + "encrypted": false + } + }, + "associations": { + "agreements": { + "name": "agreements", + "id": 1340, + "since": 31, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "OrderProcessingAgreement", + "final": true, + "external": false + } + }, + "app": "sys", + "version": "32" +} -export function createOrderProcessingAgreements():OrderProcessingAgreements { - return create(_TypeModel) +export function createOrderProcessingAgreements(): OrderProcessingAgreements { + return create(_TypeModel) } diff --git a/src/api/entities/sys/OtpChallenge.js b/src/api/entities/sys/OtpChallenge.js index 6f51c8cbb4c..ed7f975bba4 100644 --- a/src/api/entities/sys/OtpChallenge.js +++ b/src/api/entities/sys/OtpChallenge.js @@ -34,7 +34,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createOtpChallenge(): OtpChallenge { diff --git a/src/api/entities/sys/PaymentDataServiceGetReturn.js b/src/api/entities/sys/PaymentDataServiceGetReturn.js index ace9b9e538f..3a852b4adb6 100644 --- a/src/api/entities/sys/PaymentDataServiceGetReturn.js +++ b/src/api/entities/sys/PaymentDataServiceGetReturn.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createPaymentDataServiceGetReturn(): PaymentDataServiceGetReturn { diff --git a/src/api/entities/sys/PaymentDataServicePutData.js b/src/api/entities/sys/PaymentDataServicePutData.js index 3d9fc064c9c..7bf1465072f 100644 --- a/src/api/entities/sys/PaymentDataServicePutData.js +++ b/src/api/entities/sys/PaymentDataServicePutData.js @@ -123,7 +123,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createPaymentDataServicePutData(): PaymentDataServicePutData { diff --git a/src/api/entities/sys/PaymentDataServicePutReturn.js b/src/api/entities/sys/PaymentDataServicePutReturn.js index cf8e9c470f8..4aae1e7e2a1 100644 --- a/src/api/entities/sys/PaymentDataServicePutReturn.js +++ b/src/api/entities/sys/PaymentDataServicePutReturn.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createPaymentDataServicePutReturn(): PaymentDataServicePutReturn { diff --git a/src/api/entities/sys/PdfInvoiceServiceData.js b/src/api/entities/sys/PdfInvoiceServiceData.js index 5550b4b02f7..20948b4e6a9 100644 --- a/src/api/entities/sys/PdfInvoiceServiceData.js +++ b/src/api/entities/sys/PdfInvoiceServiceData.js @@ -34,7 +34,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createPdfInvoiceServiceData(): PdfInvoiceServiceData { diff --git a/src/api/entities/sys/PdfInvoiceServiceReturn.js b/src/api/entities/sys/PdfInvoiceServiceReturn.js index e8bc182ed09..af4044f1b2b 100644 --- a/src/api/entities/sys/PdfInvoiceServiceReturn.js +++ b/src/api/entities/sys/PdfInvoiceServiceReturn.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createPdfInvoiceServiceReturn(): PdfInvoiceServiceReturn { diff --git a/src/api/entities/sys/Permission.js b/src/api/entities/sys/Permission.js index f18cedc1264..02f23bf5f59 100644 --- a/src/api/entities/sys/Permission.js +++ b/src/api/entities/sys/Permission.js @@ -115,7 +115,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createPermission(): Permission { diff --git a/src/api/entities/sys/PhoneNumber.js b/src/api/entities/sys/PhoneNumber.js index caa80840b73..13117128a8b 100644 --- a/src/api/entities/sys/PhoneNumber.js +++ b/src/api/entities/sys/PhoneNumber.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createPhoneNumber(): PhoneNumber { diff --git a/src/api/entities/sys/PremiumFeatureData.js b/src/api/entities/sys/PremiumFeatureData.js index 4e4bca29adf..65e90d162ae 100644 --- a/src/api/entities/sys/PremiumFeatureData.js +++ b/src/api/entities/sys/PremiumFeatureData.js @@ -41,7 +41,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createPremiumFeatureData(): PremiumFeatureData { diff --git a/src/api/entities/sys/PremiumFeatureReturn.js b/src/api/entities/sys/PremiumFeatureReturn.js index 0d83703c642..70566dee239 100644 --- a/src/api/entities/sys/PremiumFeatureReturn.js +++ b/src/api/entities/sys/PremiumFeatureReturn.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createPremiumFeatureReturn(): PremiumFeatureReturn { diff --git a/src/api/entities/sys/PriceData.js b/src/api/entities/sys/PriceData.js index 7ddbd3dbbf8..d29e2a844d2 100644 --- a/src/api/entities/sys/PriceData.js +++ b/src/api/entities/sys/PriceData.js @@ -60,7 +60,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createPriceData(): PriceData { diff --git a/src/api/entities/sys/PriceItemData.js b/src/api/entities/sys/PriceItemData.js index 139d7b35264..afd6e41f7a5 100644 --- a/src/api/entities/sys/PriceItemData.js +++ b/src/api/entities/sys/PriceItemData.js @@ -59,7 +59,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createPriceItemData(): PriceItemData { diff --git a/src/api/entities/sys/PriceRequestData.js b/src/api/entities/sys/PriceRequestData.js index d28472fc8ea..850e5534989 100644 --- a/src/api/entities/sys/PriceRequestData.js +++ b/src/api/entities/sys/PriceRequestData.js @@ -77,7 +77,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createPriceRequestData(): PriceRequestData { diff --git a/src/api/entities/sys/PriceServiceData.js b/src/api/entities/sys/PriceServiceData.js index 043d2e934c7..c85a093e39a 100644 --- a/src/api/entities/sys/PriceServiceData.js +++ b/src/api/entities/sys/PriceServiceData.js @@ -42,7 +42,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createPriceServiceData(): PriceServiceData { diff --git a/src/api/entities/sys/PriceServiceReturn.js b/src/api/entities/sys/PriceServiceReturn.js index d04fa8c5c04..635f83f4cbc 100644 --- a/src/api/entities/sys/PriceServiceReturn.js +++ b/src/api/entities/sys/PriceServiceReturn.js @@ -69,7 +69,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createPriceServiceReturn(): PriceServiceReturn { diff --git a/src/api/entities/sys/PublicKeyData.js b/src/api/entities/sys/PublicKeyData.js index 830e9d7f432..476e5c4282b 100644 --- a/src/api/entities/sys/PublicKeyData.js +++ b/src/api/entities/sys/PublicKeyData.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createPublicKeyData(): PublicKeyData { diff --git a/src/api/entities/sys/PublicKeyReturn.js b/src/api/entities/sys/PublicKeyReturn.js index 4f25ed7df9c..51b0c6d4b5e 100644 --- a/src/api/entities/sys/PublicKeyReturn.js +++ b/src/api/entities/sys/PublicKeyReturn.js @@ -41,7 +41,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createPublicKeyReturn(): PublicKeyReturn { diff --git a/src/api/entities/sys/PushIdentifier.js b/src/api/entities/sys/PushIdentifier.js index c74537a0361..c754c396f20 100644 --- a/src/api/entities/sys/PushIdentifier.js +++ b/src/api/entities/sys/PushIdentifier.js @@ -104,7 +104,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createPushIdentifier(): PushIdentifier { diff --git a/src/api/entities/sys/PushIdentifierList.js b/src/api/entities/sys/PushIdentifierList.js index 244d0350032..94479c66534 100644 --- a/src/api/entities/sys/PushIdentifierList.js +++ b/src/api/entities/sys/PushIdentifierList.js @@ -34,7 +34,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createPushIdentifierList(): PushIdentifierList { diff --git a/src/api/entities/sys/RegistrationCaptchaServiceData.js b/src/api/entities/sys/RegistrationCaptchaServiceData.js index 9bd306c43db..23603ae76e9 100644 --- a/src/api/entities/sys/RegistrationCaptchaServiceData.js +++ b/src/api/entities/sys/RegistrationCaptchaServiceData.js @@ -41,7 +41,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createRegistrationCaptchaServiceData(): RegistrationCaptchaServiceData { diff --git a/src/api/entities/sys/RegistrationCaptchaServiceReturn.js b/src/api/entities/sys/RegistrationCaptchaServiceReturn.js index fd34c23c751..bb6d1b2596e 100644 --- a/src/api/entities/sys/RegistrationCaptchaServiceReturn.js +++ b/src/api/entities/sys/RegistrationCaptchaServiceReturn.js @@ -41,7 +41,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createRegistrationCaptchaServiceReturn(): RegistrationCaptchaServiceReturn { diff --git a/src/api/entities/sys/RegistrationConfigReturn.js b/src/api/entities/sys/RegistrationConfigReturn.js index c7d44026873..0ecaf9bfca5 100644 --- a/src/api/entities/sys/RegistrationConfigReturn.js +++ b/src/api/entities/sys/RegistrationConfigReturn.js @@ -41,7 +41,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createRegistrationConfigReturn(): RegistrationConfigReturn { diff --git a/src/api/entities/sys/RegistrationReturn.js b/src/api/entities/sys/RegistrationReturn.js index 54088bfb57e..dbc10e9930d 100644 --- a/src/api/entities/sys/RegistrationReturn.js +++ b/src/api/entities/sys/RegistrationReturn.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createRegistrationReturn(): RegistrationReturn { diff --git a/src/api/entities/sys/RegistrationServiceData.js b/src/api/entities/sys/RegistrationServiceData.js index 304defffdb6..945394fd885 100644 --- a/src/api/entities/sys/RegistrationServiceData.js +++ b/src/api/entities/sys/RegistrationServiceData.js @@ -122,7 +122,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createRegistrationServiceData(): RegistrationServiceData { diff --git a/src/api/entities/sys/ResetPasswordData.js b/src/api/entities/sys/ResetPasswordData.js index 7b74a013224..84d574b9b49 100644 --- a/src/api/entities/sys/ResetPasswordData.js +++ b/src/api/entities/sys/ResetPasswordData.js @@ -61,7 +61,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createResetPasswordData(): ResetPasswordData { diff --git a/src/api/entities/sys/RootInstance.js b/src/api/entities/sys/RootInstance.js index fc63e5409c3..2051068a1e5 100644 --- a/src/api/entities/sys/RootInstance.js +++ b/src/api/entities/sys/RootInstance.js @@ -59,7 +59,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createRootInstance(): RootInstance { diff --git a/src/api/entities/sys/SaltData.js b/src/api/entities/sys/SaltData.js index 9e23470e659..49995dd914f 100644 --- a/src/api/entities/sys/SaltData.js +++ b/src/api/entities/sys/SaltData.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createSaltData(): SaltData { diff --git a/src/api/entities/sys/SaltReturn.js b/src/api/entities/sys/SaltReturn.js index c4117024c3a..b0a63277e17 100644 --- a/src/api/entities/sys/SaltReturn.js +++ b/src/api/entities/sys/SaltReturn.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createSaltReturn(): SaltReturn { diff --git a/src/api/entities/sys/SecondFactor.js b/src/api/entities/sys/SecondFactor.js index a0faa0d56f7..de6bbe75bad 100644 --- a/src/api/entities/sys/SecondFactor.js +++ b/src/api/entities/sys/SecondFactor.js @@ -87,7 +87,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createSecondFactor(): SecondFactor { diff --git a/src/api/entities/sys/SecondFactorAuthAllowedReturn.js b/src/api/entities/sys/SecondFactorAuthAllowedReturn.js index 0fa02f440fb..413fa24f54c 100644 --- a/src/api/entities/sys/SecondFactorAuthAllowedReturn.js +++ b/src/api/entities/sys/SecondFactorAuthAllowedReturn.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createSecondFactorAuthAllowedReturn(): SecondFactorAuthAllowedReturn { diff --git a/src/api/entities/sys/SecondFactorAuthData.js b/src/api/entities/sys/SecondFactorAuthData.js index 59d707721c9..057f9466bb1 100644 --- a/src/api/entities/sys/SecondFactorAuthData.js +++ b/src/api/entities/sys/SecondFactorAuthData.js @@ -61,7 +61,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createSecondFactorAuthData(): SecondFactorAuthData { diff --git a/src/api/entities/sys/SecondFactorAuthGetData.js b/src/api/entities/sys/SecondFactorAuthGetData.js index 78aaf1b0ff9..b374d4a4967 100644 --- a/src/api/entities/sys/SecondFactorAuthGetData.js +++ b/src/api/entities/sys/SecondFactorAuthGetData.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createSecondFactorAuthGetData(): SecondFactorAuthGetData { diff --git a/src/api/entities/sys/SecondFactorAuthGetReturn.js b/src/api/entities/sys/SecondFactorAuthGetReturn.js index fa60e3a504c..78dd57d72a6 100644 --- a/src/api/entities/sys/SecondFactorAuthGetReturn.js +++ b/src/api/entities/sys/SecondFactorAuthGetReturn.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createSecondFactorAuthGetReturn(): SecondFactorAuthGetReturn { diff --git a/src/api/entities/sys/SecondFactorAuthentication.js b/src/api/entities/sys/SecondFactorAuthentication.js index e9a2f776a33..1284ee3324f 100644 --- a/src/api/entities/sys/SecondFactorAuthentication.js +++ b/src/api/entities/sys/SecondFactorAuthentication.js @@ -86,7 +86,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createSecondFactorAuthentication(): SecondFactorAuthentication { diff --git a/src/api/entities/sys/SendRegistrationCodeData.js b/src/api/entities/sys/SendRegistrationCodeData.js index e0e4c807ecb..8abe50c3d44 100644 --- a/src/api/entities/sys/SendRegistrationCodeData.js +++ b/src/api/entities/sys/SendRegistrationCodeData.js @@ -59,7 +59,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createSendRegistrationCodeData(): SendRegistrationCodeData { diff --git a/src/api/entities/sys/SendRegistrationCodeReturn.js b/src/api/entities/sys/SendRegistrationCodeReturn.js index 8d36095cb54..cf2263a22b9 100644 --- a/src/api/entities/sys/SendRegistrationCodeReturn.js +++ b/src/api/entities/sys/SendRegistrationCodeReturn.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createSendRegistrationCodeReturn(): SendRegistrationCodeReturn { diff --git a/src/api/entities/sys/Session.js b/src/api/entities/sys/Session.js index 05a5186a694..00a86d03e45 100644 --- a/src/api/entities/sys/Session.js +++ b/src/api/entities/sys/Session.js @@ -133,7 +133,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createSession(): Session { diff --git a/src/api/entities/sys/SignOrderProcessingAgreementData.js b/src/api/entities/sys/SignOrderProcessingAgreementData.js index 2eabf92184e..9a8baa23244 100644 --- a/src/api/entities/sys/SignOrderProcessingAgreementData.js +++ b/src/api/entities/sys/SignOrderProcessingAgreementData.js @@ -1,10 +1,49 @@ // @flow - import {create, TypeRef} from "../../common/EntityFunctions" -export const SignOrderProcessingAgreementDataTypeRef:TypeRef = new TypeRef("sys", "SignOrderProcessingAgreementData") -export const _TypeModel:TypeModel= {"name":"SignOrderProcessingAgreementData","since":31,"type":"DATA_TRANSFER_TYPE","id":1342,"rootId":"A3N5cwAFPg","versioned":false,"encrypted":false,"values":{"_format":{"name":"_format","id":1343,"since":31,"type":"Number","cardinality":"One","final":false,"encrypted":false},"customerAddress":{"name":"customerAddress","id":1345,"since":31,"type":"String","cardinality":"One","final":false,"encrypted":false},"version":{"name":"version","id":1344,"since":31,"type":"String","cardinality":"One","final":false,"encrypted":false}},"associations":{},"app":"sys","version":"31"} +export const SignOrderProcessingAgreementDataTypeRef: TypeRef = new TypeRef("sys", "SignOrderProcessingAgreementData") +export const _TypeModel: TypeModel = { + "name": "SignOrderProcessingAgreementData", + "since": 31, + "type": "DATA_TRANSFER_TYPE", + "id": 1342, + "rootId": "A3N5cwAFPg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "name": "_format", + "id": 1343, + "since": 31, + "type": "Number", + "cardinality": "One", + "final": false, + "encrypted": false + }, + "customerAddress": { + "name": "customerAddress", + "id": 1345, + "since": 31, + "type": "String", + "cardinality": "One", + "final": false, + "encrypted": false + }, + "version": { + "name": "version", + "id": 1344, + "since": 31, + "type": "String", + "cardinality": "One", + "final": false, + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "32" +} -export function createSignOrderProcessingAgreementData():SignOrderProcessingAgreementData { - return create(_TypeModel) +export function createSignOrderProcessingAgreementData(): SignOrderProcessingAgreementData { + return create(_TypeModel) } diff --git a/src/api/entities/sys/SseConnectData.js b/src/api/entities/sys/SseConnectData.js new file mode 100644 index 00000000000..ccc5fd4a35b --- /dev/null +++ b/src/api/entities/sys/SseConnectData.js @@ -0,0 +1,50 @@ +// @flow +import {create, TypeRef} from "../../common/EntityFunctions" + +export const SseConnectDataTypeRef: TypeRef = new TypeRef("sys", "SseConnectData") +export const _TypeModel: TypeModel = { + "name": "SseConnectData", + "since": 32, + "type": "DATA_TRANSFER_TYPE", + "id": 1352, + "rootId": "A3N5cwAFSA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "name": "_format", + "id": 1353, + "since": 32, + "type": "Number", + "cardinality": "One", + "final": false, + "encrypted": false + }, + "identifier": { + "name": "identifier", + "id": 1354, + "since": 32, + "type": "String", + "cardinality": "One", + "final": true, + "encrypted": false + } + }, + "associations": { + "userIds": { + "name": "userIds", + "id": 1355, + "since": 32, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "GeneratedIdWrapper", + "final": false + } + }, + "app": "sys", + "version": "32" +} + +export function createSseConnectData(): SseConnectData { + return create(_TypeModel) +} diff --git a/src/api/entities/sys/StringConfigValue.js b/src/api/entities/sys/StringConfigValue.js index a33e3d2400a..24dd5a1e12c 100644 --- a/src/api/entities/sys/StringConfigValue.js +++ b/src/api/entities/sys/StringConfigValue.js @@ -41,7 +41,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createStringConfigValue(): StringConfigValue { diff --git a/src/api/entities/sys/StringWrapper.js b/src/api/entities/sys/StringWrapper.js index 47479e70f6c..82eef30fcfd 100644 --- a/src/api/entities/sys/StringWrapper.js +++ b/src/api/entities/sys/StringWrapper.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createStringWrapper(): StringWrapper { diff --git a/src/api/entities/sys/SwitchAccountTypeData.js b/src/api/entities/sys/SwitchAccountTypeData.js index 34f779a6349..21e339ff191 100644 --- a/src/api/entities/sys/SwitchAccountTypeData.js +++ b/src/api/entities/sys/SwitchAccountTypeData.js @@ -50,7 +50,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createSwitchAccountTypeData(): SwitchAccountTypeData { diff --git a/src/api/entities/sys/SystemKeysReturn.js b/src/api/entities/sys/SystemKeysReturn.js index f2c92e5ea9c..3fab9dbed2f 100644 --- a/src/api/entities/sys/SystemKeysReturn.js +++ b/src/api/entities/sys/SystemKeysReturn.js @@ -89,7 +89,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createSystemKeysReturn(): SystemKeysReturn { diff --git a/src/api/entities/sys/U2fChallenge.js b/src/api/entities/sys/U2fChallenge.js index 47ead6626a6..5e1cb203551 100644 --- a/src/api/entities/sys/U2fChallenge.js +++ b/src/api/entities/sys/U2fChallenge.js @@ -42,7 +42,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createU2fChallenge(): U2fChallenge { diff --git a/src/api/entities/sys/U2fKey.js b/src/api/entities/sys/U2fKey.js index 57c71439ea0..acfb84938d3 100644 --- a/src/api/entities/sys/U2fKey.js +++ b/src/api/entities/sys/U2fKey.js @@ -52,7 +52,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createU2fKey(): U2fKey { diff --git a/src/api/entities/sys/U2fRegisteredDevice.js b/src/api/entities/sys/U2fRegisteredDevice.js index 2e183ad05c6..015b484e556 100644 --- a/src/api/entities/sys/U2fRegisteredDevice.js +++ b/src/api/entities/sys/U2fRegisteredDevice.js @@ -68,7 +68,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createU2fRegisteredDevice(): U2fRegisteredDevice { diff --git a/src/api/entities/sys/U2fResponseData.js b/src/api/entities/sys/U2fResponseData.js index ef55f30ce88..6ca9d1a072f 100644 --- a/src/api/entities/sys/U2fResponseData.js +++ b/src/api/entities/sys/U2fResponseData.js @@ -50,7 +50,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createU2fResponseData(): U2fResponseData { diff --git a/src/api/entities/sys/UpdateAdminshipData.js b/src/api/entities/sys/UpdateAdminshipData.js index fe67ed517da..236cb53b1aa 100644 --- a/src/api/entities/sys/UpdateAdminshipData.js +++ b/src/api/entities/sys/UpdateAdminshipData.js @@ -53,7 +53,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createUpdateAdminshipData(): UpdateAdminshipData { diff --git a/src/api/entities/sys/UpdatePermissionKeyData.js b/src/api/entities/sys/UpdatePermissionKeyData.js index 9837565026a..0dfdaaf1bb4 100644 --- a/src/api/entities/sys/UpdatePermissionKeyData.js +++ b/src/api/entities/sys/UpdatePermissionKeyData.js @@ -62,7 +62,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createUpdatePermissionKeyData(): UpdatePermissionKeyData { diff --git a/src/api/entities/sys/User.js b/src/api/entities/sys/User.js index 8efccd38a99..0ae4071d81d 100644 --- a/src/api/entities/sys/User.js +++ b/src/api/entities/sys/User.js @@ -208,7 +208,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createUser(): User { diff --git a/src/api/entities/sys/UserAreaGroups.js b/src/api/entities/sys/UserAreaGroups.js index 6f40c91f5b6..679dc703f1b 100644 --- a/src/api/entities/sys/UserAreaGroups.js +++ b/src/api/entities/sys/UserAreaGroups.js @@ -34,7 +34,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createUserAreaGroups(): UserAreaGroups { diff --git a/src/api/entities/sys/UserAuthentication.js b/src/api/entities/sys/UserAuthentication.js index 94c56aea92b..1eeed35969e 100644 --- a/src/api/entities/sys/UserAuthentication.js +++ b/src/api/entities/sys/UserAuthentication.js @@ -44,7 +44,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createUserAuthentication(): UserAuthentication { diff --git a/src/api/entities/sys/UserData.js b/src/api/entities/sys/UserData.js index ba828c8dd1b..58a6d495b69 100644 --- a/src/api/entities/sys/UserData.js +++ b/src/api/entities/sys/UserData.js @@ -87,7 +87,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createUserData(): UserData { diff --git a/src/api/entities/sys/UserDataDelete.js b/src/api/entities/sys/UserDataDelete.js index 28c87c62346..ab6a36b02f4 100644 --- a/src/api/entities/sys/UserDataDelete.js +++ b/src/api/entities/sys/UserDataDelete.js @@ -52,7 +52,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createUserDataDelete(): UserDataDelete { diff --git a/src/api/entities/sys/UserExternalAuthInfo.js b/src/api/entities/sys/UserExternalAuthInfo.js index fff54692177..1b81912008f 100644 --- a/src/api/entities/sys/UserExternalAuthInfo.js +++ b/src/api/entities/sys/UserExternalAuthInfo.js @@ -70,7 +70,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createUserExternalAuthInfo(): UserExternalAuthInfo { diff --git a/src/api/entities/sys/UserIdData.js b/src/api/entities/sys/UserIdData.js index c52e35dc61c..887411b0779 100644 --- a/src/api/entities/sys/UserIdData.js +++ b/src/api/entities/sys/UserIdData.js @@ -32,7 +32,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createUserIdData(): UserIdData { diff --git a/src/api/entities/sys/UserIdReturn.js b/src/api/entities/sys/UserIdReturn.js index 01cfca9b519..f787125f79a 100644 --- a/src/api/entities/sys/UserIdReturn.js +++ b/src/api/entities/sys/UserIdReturn.js @@ -34,7 +34,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createUserIdReturn(): UserIdReturn { diff --git a/src/api/entities/sys/UserReturn.js b/src/api/entities/sys/UserReturn.js index d8ff97db93d..6a1a49924df 100644 --- a/src/api/entities/sys/UserReturn.js +++ b/src/api/entities/sys/UserReturn.js @@ -44,7 +44,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createUserReturn(): UserReturn { diff --git a/src/api/entities/sys/VariableExternalAuthInfo.js b/src/api/entities/sys/VariableExternalAuthInfo.js index 16265133454..3328ae5bb6d 100644 --- a/src/api/entities/sys/VariableExternalAuthInfo.js +++ b/src/api/entities/sys/VariableExternalAuthInfo.js @@ -104,7 +104,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createVariableExternalAuthInfo(): VariableExternalAuthInfo { diff --git a/src/api/entities/sys/VerifyRegistrationCodeData.js b/src/api/entities/sys/VerifyRegistrationCodeData.js index 927173f5e36..1047d66aa6c 100644 --- a/src/api/entities/sys/VerifyRegistrationCodeData.js +++ b/src/api/entities/sys/VerifyRegistrationCodeData.js @@ -41,7 +41,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createVerifyRegistrationCodeData(): VerifyRegistrationCodeData { diff --git a/src/api/entities/sys/Version.js b/src/api/entities/sys/Version.js index 474b1c516d0..5d97efbb394 100644 --- a/src/api/entities/sys/Version.js +++ b/src/api/entities/sys/Version.js @@ -71,7 +71,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createVersion(): Version { diff --git a/src/api/entities/sys/VersionData.js b/src/api/entities/sys/VersionData.js index f58caf477f8..48257139d99 100644 --- a/src/api/entities/sys/VersionData.js +++ b/src/api/entities/sys/VersionData.js @@ -59,7 +59,7 @@ export const _TypeModel: TypeModel = { }, "associations": {}, "app": "sys", - "version": "31" + "version": "32" } export function createVersionData(): VersionData { diff --git a/src/api/entities/sys/VersionInfo.js b/src/api/entities/sys/VersionInfo.js index df0fb8b72e9..bcb31985c91 100644 --- a/src/api/entities/sys/VersionInfo.js +++ b/src/api/entities/sys/VersionInfo.js @@ -125,7 +125,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createVersionInfo(): VersionInfo { diff --git a/src/api/entities/sys/VersionReturn.js b/src/api/entities/sys/VersionReturn.js index 063ffb8f236..2a81a93aaa0 100644 --- a/src/api/entities/sys/VersionReturn.js +++ b/src/api/entities/sys/VersionReturn.js @@ -33,7 +33,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createVersionReturn(): VersionReturn { diff --git a/src/api/entities/sys/WebsocketWrapper.js b/src/api/entities/sys/WebsocketWrapper.js index 58482767b22..298bef4dde6 100644 --- a/src/api/entities/sys/WebsocketWrapper.js +++ b/src/api/entities/sys/WebsocketWrapper.js @@ -123,7 +123,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createWebsocketWrapper(): WebsocketWrapper { diff --git a/src/api/entities/sys/WhitelabelChild.js b/src/api/entities/sys/WhitelabelChild.js index 98b65d210cb..504f065bb52 100644 --- a/src/api/entities/sys/WhitelabelChild.js +++ b/src/api/entities/sys/WhitelabelChild.js @@ -106,7 +106,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createWhitelabelChild(): WhitelabelChild { diff --git a/src/api/entities/sys/WhitelabelChildrenRef.js b/src/api/entities/sys/WhitelabelChildrenRef.js index ff3f52894c9..acb1e28a443 100644 --- a/src/api/entities/sys/WhitelabelChildrenRef.js +++ b/src/api/entities/sys/WhitelabelChildrenRef.js @@ -34,7 +34,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createWhitelabelChildrenRef(): WhitelabelChildrenRef { diff --git a/src/api/entities/sys/WhitelabelConfig.js b/src/api/entities/sys/WhitelabelConfig.js index ac771e2ca9a..574884eb46d 100644 --- a/src/api/entities/sys/WhitelabelConfig.js +++ b/src/api/entities/sys/WhitelabelConfig.js @@ -87,7 +87,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createWhitelabelConfig(): WhitelabelConfig { diff --git a/src/api/entities/sys/WhitelabelParent.js b/src/api/entities/sys/WhitelabelParent.js index 2b289590c74..611074814b3 100644 --- a/src/api/entities/sys/WhitelabelParent.js +++ b/src/api/entities/sys/WhitelabelParent.js @@ -44,7 +44,7 @@ export const _TypeModel: TypeModel = { } }, "app": "sys", - "version": "31" + "version": "32" } export function createWhitelabelParent(): WhitelabelParent { diff --git a/src/api/main/WorkerClient.js b/src/api/main/WorkerClient.js index 8f9d7ce5d8f..91dcbac4b72 100644 --- a/src/api/main/WorkerClient.js +++ b/src/api/main/WorkerClient.js @@ -380,6 +380,10 @@ export class WorkerClient { this._progressUpdater = null } } + + generateSsePushIdentifer(): Promise { + return this._postRequest(new Request('generateSsePushIdentifer', arguments)) + } } export const worker = new WorkerClient() diff --git a/src/api/worker/WorkerImpl.js b/src/api/worker/WorkerImpl.js index b31176b2209..f37d80aca6e 100644 --- a/src/api/worker/WorkerImpl.js +++ b/src/api/worker/WorkerImpl.js @@ -13,6 +13,8 @@ import {restClient} from "./rest/RestClient" import {TotpVerifier} from "./crypto/TotpVerifier" import type {EntropySrcEnum} from "../common/TutanotaConstants" import {loadContactForm} from "./facades/ContactFormFacade" +import {keyToBase64} from "./crypto/CryptoUtils" +import {aes256RandomKey} from "./crypto/Aes" assertWorkerOrNode() @@ -218,6 +220,9 @@ export class WorkerImpl { tryReconnectEventBus(message: Request) { return locator.login.tryReconnectEventBus() }, + generateSsePushIdentifer: () => { + return Promise.resolve(keyToBase64(aes256RandomKey())) + } }) Promise.onPossiblyUnhandledRejection(e => this.sendError(e)); diff --git a/src/native/PushServiceApp.js b/src/native/PushServiceApp.js index 6dba877008d..12d09270aec 100644 --- a/src/native/PushServiceApp.js +++ b/src/native/PushServiceApp.js @@ -2,12 +2,14 @@ import {setup, update, loadAll} from "../api/main/Entity" import {createPushIdentifier, PushIdentifierTypeRef} from "../api/entities/sys/PushIdentifier" import {neverNull} from "../api/common/utils/Utils" +import type {PushServiceTypeEnum} from "../api/common/TutanotaConstants" import {PushServiceType} from "../api/common/TutanotaConstants" import {lang} from "../misc/LanguageViewModel" -import {isIOSApp} from "../api/Env" +import {isIOSApp, isAndroidApp, getHttpOrigin} from "../api/Env" import {nativeApp} from "./NativeWrapper" import {Request} from "../api/common/WorkerProtocol" import {logins} from "../api/main/LoginController" +import {worker} from "../api/main/WorkerClient" class PushServiceApp { _pushNotification: ?Object; @@ -18,10 +20,42 @@ class PushServiceApp { this.currentPushIdentifier = ""; } - register(): void { - nativeApp.invokeNative(new Request("initPushNotifications", [])) + register(): Promise { + if (isAndroidApp()) { + return nativeApp.invokeNative(new Request("getPushIdentifier", [])).then(identifier => { + if (identifier) { + this._loadPushIdentifier(identifier).then(pushIdentifier => { + if (!pushIdentifier) { // outdated push identifer stored locally + return this._createPushIdentiferInstance(identifier, PushServiceType.SSE) + } else { + return Promise.resolve() + } + }) + } else { + return worker.generateSsePushIdentifer() + .then(identifier => this._createPushIdentiferInstance(identifier, PushServiceType.SSE)) + .then(pushIdentifier => this._storePushIdentifierLocally(pushIdentifier.identifier, logins.getUserController().user._id)) + } + }).then(() => nativeApp.invokeNative(new Request("initPushNotifications", []))) + } else { + return Promise.resolve() + } + + } + + _storePushIdentifierLocally(identifier: string, userId: Id): Promise { + return nativeApp.invokeNative(new Request("storePushIdentifierLocally", [identifier, userId, getHttpOrigin()])) } + + _loadPushIdentifier(identifier: string): Promise { + let list = logins.getUserController().user.pushIdentifierList + return loadAll(PushIdentifierTypeRef, neverNull(list).list).then(identifiers => { + return identifiers.find(i => i.identifier == identifier) + }) + } + + updatePushIdentifier(identifier: string) { let identifierType = isIOSApp() ? PushServiceType.IOS : PushServiceType.ANDROID let list = logins.getUserController().user.pushIdentifierList @@ -34,20 +68,28 @@ class PushServiceApp { update(existingPushIdentfier) } } else { - //console.log("<<<", identifier, identifierType) - let pushIdentifier = createPushIdentifier() - pushIdentifier._owner = logins.getUserController().userGroupInfo.group // legacy - pushIdentifier._ownerGroup = logins.getUserController().userGroupInfo.group - pushIdentifier._area = "0" - pushIdentifier.pushServiceType = identifierType - pushIdentifier.identifier = identifier - pushIdentifier.language = lang.code - setup(neverNull(list).list, pushIdentifier) + this._createPushIdentiferInstance(identifier, identifierType) } }) } + _createPushIdentiferInstance(identifier: string, pushServiceType: PushServiceTypeEnum): Promise { + let list = logins.getUserController().user.pushIdentifierList + let pushIdentifier = createPushIdentifier() + pushIdentifier._owner = logins.getUserController().userGroupInfo.group // legacy + pushIdentifier._ownerGroup = logins.getUserController().userGroupInfo.group + pushIdentifier._area = "0" + pushIdentifier.pushServiceType = pushServiceType + pushIdentifier.identifier = identifier + pushIdentifier.language = lang.code + return setup(neverNull(list).list, pushIdentifier).then(id => { + pushIdentifier._id = [neverNull(list).list, id] + return pushIdentifier + }) + } + + updateBadge(newValue: number): void { if (this._pushNotification != null) { // not supported on all android devices.