summaryrefslogtreecommitdiff
path: root/StoneIsland/platforms/ios/Pods/FirebaseInstallations
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2020-08-31 23:07:20 +0200
committerJules Laplace <julescarbon@gmail.com>2020-08-31 23:07:20 +0200
commit22721a013bdd10d5eb395ba18453585f5f3f1f7f (patch)
tree5a920e31d6026ed5dc55265e5fd057febccc50e3 /StoneIsland/platforms/ios/Pods/FirebaseInstallations
parentd22d51a1ae49680015326857360eb699f31efced (diff)
rebuild the ios platform and the plugins
Diffstat (limited to 'StoneIsland/platforms/ios/Pods/FirebaseInstallations')
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRAppInternal.h173
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRComponent.h91
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRComponentContainer.h50
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRComponentType.h34
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h35
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRDependency.h45
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRErrorCode.h39
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRErrors.h24
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h39
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRLibrary.h50
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRLogger.h156
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIROptionsInternal.h119
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FirebaseCoreInternal.h31
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h56
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.m124
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.h54
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.m79
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallations.m245
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResult.m30
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResultInternal.h27
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsItem.h86
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsItem.m104
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsLogger.h51
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsLogger.m49
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsVersion.m23
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.h48
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.m236
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.h36
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.m158
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.h62
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.m361
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.h53
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.m142
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.h44
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.m480
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.h58
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.m75
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsStatus.h35
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.h71
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.m126
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.h58
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.m77
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.h51
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.m80
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Private/FirebaseInstallationsInternal.h23
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallations.h120
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsAuthTokenResult.h33
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsErrors.h34
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsVersion.h19
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FirebaseInstallations.h20
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h47
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULHeartbeatDateStorage.h49
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULKeychainStorage.h79
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULKeychainUtils.h61
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULSecureCoding.h36
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/UserDefaults/Private/GULUserDefaults.h110
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/LICENSE202
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseInstallations/README.md298
58 files changed, 5196 insertions, 0 deletions
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRAppInternal.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRAppInternal.h
new file mode 100644
index 00000000..9a0c943d
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRAppInternal.h
@@ -0,0 +1,173 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if SWIFT_PACKAGE
+// TODO(paulb777): Investigate if there's a common strategy for both Cocoapods and Swift PM.
+#import "FIRApp.h"
+#else
+#import <FirebaseCore/FIRApp.h>
+#endif
+
+// The has_include is a workaround so the old IID needed for the FIS tests can find FIRErrors.h
+#if __has_include("FirebaseCore/Sources/Private/FIRErrors.h")
+#import "FirebaseCore/Sources/Private/FIRErrors.h"
+#else
+#import <FirebaseCore/FIRErrors.h>
+#endif
+
+@class FIRComponentContainer;
+@protocol FIRLibrary;
+
+/**
+ * The internal interface to FIRApp. This is meant for first-party integrators, who need to receive
+ * FIRApp notifications, log info about the success or failure of their configuration, and access
+ * other internal functionality of FIRApp.
+ *
+ * TODO(b/28296561): Restructure this header.
+ */
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSInteger, FIRConfigType) {
+ FIRConfigTypeCore = 1,
+ FIRConfigTypeSDK = 2,
+};
+
+extern NSString *const kFIRDefaultAppName;
+extern NSString *const kFIRAppReadyToConfigureSDKNotification;
+extern NSString *const kFIRAppDeleteNotification;
+extern NSString *const kFIRAppIsDefaultAppKey;
+extern NSString *const kFIRAppNameKey;
+extern NSString *const kFIRGoogleAppIDKey;
+
+/**
+ * The format string for the User Defaults key used for storing the data collection enabled flag.
+ * This includes formatting to append the Firebase App's name.
+ */
+extern NSString *const kFIRGlobalAppDataCollectionEnabledDefaultsKeyFormat;
+
+/**
+ * The plist key used for storing the data collection enabled flag.
+ */
+extern NSString *const kFIRGlobalAppDataCollectionEnabledPlistKey;
+
+/**
+ * A notification fired containing diagnostic information when SDK errors occur.
+ */
+extern NSString *const kFIRAppDiagnosticsNotification;
+
+/** @var FIRAuthStateDidChangeInternalNotification
+ @brief The name of the @c NSNotificationCenter notification which is posted when the auth state
+ changes (e.g. a new token has been produced, a user logs in or out). The object parameter of
+ the notification is a dictionary possibly containing the key:
+ @c FIRAuthStateDidChangeInternalNotificationTokenKey (the new access token.) If it does not
+ contain this key it indicates a sign-out event took place.
+ */
+extern NSString *const FIRAuthStateDidChangeInternalNotification;
+
+/** @var FIRAuthStateDidChangeInternalNotificationTokenKey
+ @brief A key present in the dictionary object parameter of the
+ @c FIRAuthStateDidChangeInternalNotification notification. The value associated with this
+ key will contain the new access token.
+ */
+extern NSString *const FIRAuthStateDidChangeInternalNotificationTokenKey;
+
+/** @var FIRAuthStateDidChangeInternalNotificationAppKey
+ @brief A key present in the dictionary object parameter of the
+ @c FIRAuthStateDidChangeInternalNotification notification. The value associated with this
+ key will contain the FIRApp associated with the auth instance.
+ */
+extern NSString *const FIRAuthStateDidChangeInternalNotificationAppKey;
+
+/** @var FIRAuthStateDidChangeInternalNotificationUIDKey
+ @brief A key present in the dictionary object parameter of the
+ @c FIRAuthStateDidChangeInternalNotification notification. The value associated with this
+ key will contain the new user's UID (or nil if there is no longer a user signed in).
+ */
+extern NSString *const FIRAuthStateDidChangeInternalNotificationUIDKey;
+
+@interface FIRApp ()
+
+/**
+ * A flag indicating if this is the default app (has the default app name).
+ */
+@property(nonatomic, readonly) BOOL isDefaultApp;
+
+/*
+ * The container of interop SDKs for this app.
+ */
+@property(nonatomic) FIRComponentContainer *container;
+
+/**
+ * Creates an error for failing to configure a subspec service. This method is called by each
+ * FIRApp notification listener.
+ */
++ (NSError *)errorForSubspecConfigurationFailureWithDomain:(NSString *)domain
+ errorCode:(FIRErrorCode)code
+ service:(NSString *)service
+ reason:(NSString *)reason;
+/**
+ * Checks if the default app is configured without trying to configure it.
+ */
++ (BOOL)isDefaultAppConfigured;
+
+/**
+ * Registers a given third-party library with the given version number to be reported for
+ * analytics.
+ *
+ * @param name Name of the library.
+ * @param version Version of the library.
+ */
++ (void)registerLibrary:(nonnull NSString *)name withVersion:(nonnull NSString *)version;
+
+/**
+ * Registers a given internal library with the given version number to be reported for
+ * analytics.
+ *
+ * @param library Optional parameter for component registration.
+ * @param name Name of the library.
+ * @param version Version of the library.
+ */
++ (void)registerInternalLibrary:(nonnull Class<FIRLibrary>)library
+ withName:(nonnull NSString *)name
+ withVersion:(nonnull NSString *)version;
+
+/**
+ * A concatenated string representing all the third-party libraries and version numbers.
+ */
++ (NSString *)firebaseUserAgent;
+
+/**
+ * Used by each SDK to send logs about SDK configuration status to Clearcut.
+ *
+ * @note This API is a no-op, please remove calls to it.
+ */
+- (void)sendLogsWithServiceName:(NSString *)serviceName
+ version:(NSString *)version
+ error:(NSError *)error;
+
+/**
+ * Can be used by the unit tests in eack SDK to reset FIRApp. This method is thread unsafe.
+ */
++ (void)resetApps;
+
+/**
+ * Can be used by the unit tests in each SDK to set customized options.
+ */
+- (instancetype)initInstanceWithName:(NSString *)name options:(FIROptions *)options;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRComponent.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRComponent.h
new file mode 100644
index 00000000..cb51ee70
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRComponent.h
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRApp;
+@class FIRComponentContainer;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Provides a system to clean up cached instances returned from the component system.
+NS_SWIFT_NAME(ComponentLifecycleMaintainer)
+@protocol FIRComponentLifecycleMaintainer
+/// The associated app will be deleted, clean up any resources as they are about to be deallocated.
+- (void)appWillBeDeleted:(FIRApp *)app;
+@end
+
+typedef _Nullable id (^FIRComponentCreationBlock)(FIRComponentContainer *container,
+ BOOL *isCacheable)
+ NS_SWIFT_NAME(ComponentCreationBlock);
+
+@class FIRDependency;
+
+/// Describes the timing of instantiation. Note: new components should default to lazy unless there
+/// is a strong reason to be eager.
+typedef NS_ENUM(NSInteger, FIRInstantiationTiming) {
+ FIRInstantiationTimingLazy,
+ FIRInstantiationTimingAlwaysEager,
+ FIRInstantiationTimingEagerInDefaultApp
+} NS_SWIFT_NAME(InstantiationTiming);
+
+/// A component that can be used from other Firebase SDKs.
+NS_SWIFT_NAME(Component)
+@interface FIRComponent : NSObject
+
+/// The protocol describing functionality provided from the Component.
+@property(nonatomic, strong, readonly) Protocol *protocol;
+
+/// The timing of instantiation.
+@property(nonatomic, readonly) FIRInstantiationTiming instantiationTiming;
+
+/// An array of dependencies for the component.
+@property(nonatomic, copy, readonly) NSArray<FIRDependency *> *dependencies;
+
+/// A block to instantiate an instance of the component with the appropriate dependencies.
+@property(nonatomic, copy, readonly) FIRComponentCreationBlock creationBlock;
+
+// There's an issue with long NS_SWIFT_NAMES that causes compilation to fail, disable clang-format
+// for the next two methods.
+// clang-format off
+
+/// Creates a component with no dependencies that will be lazily initialized.
++ (instancetype)componentWithProtocol:(Protocol *)protocol
+ creationBlock:(FIRComponentCreationBlock)creationBlock
+NS_SWIFT_NAME(init(_:creationBlock:));
+
+/// Creates a component to be registered with the component container.
+///
+/// @param protocol - The protocol describing functionality provided by the component.
+/// @param instantiationTiming - When the component should be initialized. Use .lazy unless there's
+/// a good reason to be instantiated earlier.
+/// @param dependencies - Any dependencies the `implementingClass` has, optional or required.
+/// @param creationBlock - A block to instantiate the component with a container, and if
+/// @return A component that can be registered with the component container.
++ (instancetype)componentWithProtocol:(Protocol *)protocol
+ instantiationTiming:(FIRInstantiationTiming)instantiationTiming
+ dependencies:(NSArray<FIRDependency *> *)dependencies
+ creationBlock:(FIRComponentCreationBlock)creationBlock
+NS_SWIFT_NAME(init(_:instantiationTiming:dependencies:creationBlock:));
+
+// clang-format on
+
+/// Unavailable.
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRComponentContainer.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRComponentContainer.h
new file mode 100644
index 00000000..db2bafef
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRComponentContainer.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#import <Foundation/Foundation.h>
+
+// The has_include is a workaround so the old IID needed for the FIS tests can find the headers.
+#if __has_include("FirebaseCore/Sources/Private/FIRComponentType.h")
+#import "FirebaseCore/Sources/Private/FIRComponentType.h"
+#import "FirebaseCore/Sources/Private/FIRLibrary.h"
+#else
+#import <FirebaseCore/FIRComponentType.h>
+#import <FirebaseCore/FIRLibrary.h>
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// A type-safe macro to retrieve a component from a container. This should be used to retrieve
+/// components instead of using the container directly.
+#define FIR_COMPONENT(type, container) \
+ [FIRComponentType<id<type>> instanceForProtocol:@protocol(type) inContainer:container]
+
+@class FIRApp;
+
+/// A container that holds different components that are registered via the
+/// `registerAsComponentRegistrant:` call. These classes should conform to `FIRComponentRegistrant`
+/// in order to properly register components for Core.
+NS_SWIFT_NAME(FirebaseComponentContainer)
+@interface FIRComponentContainer : NSObject
+
+/// A weak reference to the app that an instance of the container belongs to.
+@property(nonatomic, weak, readonly) FIRApp *app;
+
+/// Unavailable. Use the `container` property on `FIRApp`.
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRComponentType.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRComponentType.h
new file mode 100644
index 00000000..6f2aca7b
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRComponentType.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRComponentContainer;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Do not use directly. A placeholder type in order to provide a macro that will warn users of
+/// mis-matched protocols.
+NS_SWIFT_NAME(ComponentType)
+@interface FIRComponentType<__covariant T> : NSObject
+
+/// Do not use directly. A factory method to retrieve an instance that provides a specific
+/// functionality.
++ (T)instanceForProtocol:(Protocol *)protocol inContainer:(FIRComponentContainer *)container;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h
new file mode 100644
index 00000000..76c0c05f
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRDiagnosticsData;
+@class FIROptions;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** Connects FIRCore with the CoreDiagnostics library. */
+@interface FIRCoreDiagnosticsConnector : NSObject
+
+/** Logs FirebaseCore related data.
+ *
+ * @param options The options object containing data to log.
+ */
++ (void)logCoreTelemetryWithOptions:(FIROptions *)options;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRDependency.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRDependency.h
new file mode 100644
index 00000000..46e9b7ea
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRDependency.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// A dependency on a specific protocol's functionality.
+NS_SWIFT_NAME(Dependency)
+@interface FIRDependency : NSObject
+
+/// The protocol describing functionality being depended on.
+@property(nonatomic, strong, readonly) Protocol *protocol;
+
+/// A flag to specify if the dependency is required or not.
+@property(nonatomic, readonly) BOOL isRequired;
+
+/// Initializes a dependency that is required. Calls `initWithProtocol:isRequired` with `YES` for
+/// the required parameter.
+/// Creates a required dependency on the specified protocol's functionality.
++ (instancetype)dependencyWithProtocol:(Protocol *)protocol;
+
+/// Creates a dependency on the specified protocol's functionality and specify if it's required for
+/// the class's functionality.
++ (instancetype)dependencyWithProtocol:(Protocol *)protocol isRequired:(BOOL)required;
+
+/// Use `dependencyWithProtocol:isRequired:` instead.
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRErrorCode.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRErrorCode.h
new file mode 100644
index 00000000..c90d9eec
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRErrorCode.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/** Error codes in Firebase error domain. */
+typedef NS_ENUM(NSInteger, FIRErrorCode) {
+ /**
+ * Unknown error.
+ */
+ FIRErrorCodeUnknown = 0,
+ /**
+ * Loading data from the GoogleService-Info.plist file failed. This is a fatal error and should
+ * not be ignored. Further calls to the API will fail and/or possibly cause crashes.
+ */
+ FIRErrorCodeInvalidPlistFile = -100,
+
+ /**
+ * Validating the Google App ID format failed.
+ */
+ FIRErrorCodeInvalidAppID = -101,
+
+ /**
+ * Error code for failing to configure a specific service. It's deprecated, but
+ * still used after copybara.
+ */
+ FIRErrorCodeConfigFailed = -114,
+};
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRErrors.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRErrors.h
new file mode 100644
index 00000000..19e47328
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRErrors.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#include "FIRErrorCode.h"
+
+extern NSString *const kFirebaseErrorDomain;
+extern NSString *const kFirebaseConfigErrorDomain;
+extern NSString *const kFirebaseCoreErrorDomain;
+extern NSString *const kFirebasePerfErrorDomain;
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h
new file mode 100644
index 00000000..bfff73e5
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h
@@ -0,0 +1,39 @@
+// Copyright 2019 Google
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRHeartbeatInfo : NSObject
+
+// Enum representing the different heartbeat codes.
+typedef NS_ENUM(NSInteger, FIRHeartbeatInfoCode) {
+ FIRHeartbeatInfoCodeNone = 0,
+ FIRHeartbeatInfoCodeSDK = 1,
+ FIRHeartbeatInfoCodeGlobal = 2,
+ FIRHeartbeatInfoCodeCombined = 3,
+};
+
+/**
+ * Get heartbeat code requred for the sdk.
+ * @param heartbeatTag String representing the sdk heartbeat tag.
+ * @return Heartbeat code indicating whether or not an sdk/global heartbeat
+ * needs to be sent
+ */
++ (FIRHeartbeatInfoCode)heartbeatCodeForTag:(NSString *)heartbeatTag;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRLibrary.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRLibrary.h
new file mode 100644
index 00000000..e7a9e077
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRLibrary.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef FIRLibrary_h
+#define FIRLibrary_h
+
+#import <Foundation/Foundation.h>
+
+// The has_include is a workaround so the old IID needed for the FIS tests can find the headers.
+#if __has_include("FirebaseCore/Sources/Private/FIRComponent.h")
+#import "FirebaseCore/Sources/Private/FIRComponent.h"
+#else
+#import <FirebaseCore/FIRComponent.h>
+#endif
+
+@class FIRApp;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Provide an interface to register a library for userAgent logging and availability to others.
+NS_SWIFT_NAME(Library)
+@protocol FIRLibrary
+
+/// Returns one or more FIRComponents that will be registered in
+/// FIRApp and participate in dependency resolution and injection.
++ (NSArray<FIRComponent *> *)componentsToRegister;
+
+@optional
+/// Implement this method if the library needs notifications for lifecycle events. This method is
+/// called when the developer calls `FirebaseApp.configure()`.
++ (void)configureWithApp:(FIRApp *)app;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* FIRLibrary_h */
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRLogger.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRLogger.h
new file mode 100644
index 00000000..6fd77844
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRLogger.h
@@ -0,0 +1,156 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#if SWIFT_PACKAGE
+// TODO(paulb777): Investigate if there's a common strategy for both Cocoapods and Swift PM.
+#import "FIRLoggerLevel.h"
+#else
+#import <FirebaseCore/FIRLoggerLevel.h>
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * The Firebase services used in Firebase logger.
+ */
+typedef NSString *const FIRLoggerService;
+
+extern FIRLoggerService kFIRLoggerABTesting;
+extern FIRLoggerService kFIRLoggerAdMob;
+extern FIRLoggerService kFIRLoggerAnalytics;
+extern FIRLoggerService kFIRLoggerAuth;
+extern FIRLoggerService kFIRLoggerCrash;
+extern FIRLoggerService kFIRLoggerCore;
+extern FIRLoggerService kFIRLoggerMLKit;
+extern FIRLoggerService kFIRLoggerPerf;
+extern FIRLoggerService kFIRLoggerRemoteConfig;
+
+/**
+ * The key used to store the logger's error count.
+ */
+extern NSString *const kFIRLoggerErrorCountKey;
+
+/**
+ * The key used to store the logger's warning count.
+ */
+extern NSString *const kFIRLoggerWarningCountKey;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/**
+ * Enables or disables Analytics debug mode.
+ * If set to YES, the logging level for Analytics will be set to FIRLoggerLevelDebug.
+ * Enabling the debug mode has no effect if the app is running from App Store.
+ * (required) analytics debug mode flag.
+ */
+void FIRSetAnalyticsDebugMode(BOOL analyticsDebugMode);
+
+/**
+ * Changes the default logging level of FIRLoggerLevelNotice to a user-specified level.
+ * The default level cannot be set above FIRLoggerLevelNotice if the app is running from App Store.
+ * (required) log level (one of the FIRLoggerLevel enum values).
+ */
+void FIRSetLoggerLevel(FIRLoggerLevel loggerLevel);
+
+/**
+ * Checks if the specified logger level is loggable given the current settings.
+ * (required) log level (one of the FIRLoggerLevel enum values).
+ * (required) whether or not this function is called from the Analytics component.
+ */
+BOOL FIRIsLoggableLevel(FIRLoggerLevel loggerLevel, BOOL analyticsComponent);
+
+/**
+ * Logs a message to the Xcode console and the device log. If running from AppStore, will
+ * not log any messages with a level higher than FIRLoggerLevelNotice to avoid log spamming.
+ * (required) log level (one of the FIRLoggerLevel enum values).
+ * (required) service name of type FIRLoggerService.
+ * (required) message code starting with "I-" which means iOS, followed by a capitalized
+ * three-character service identifier and a six digit integer message ID that is unique
+ * within the service.
+ * An example of the message code is @"I-COR000001".
+ * (required) message string which can be a format string.
+ * (optional) variable arguments list obtained from calling va_start, used when message is a format
+ * string.
+ */
+extern void FIRLogBasic(FIRLoggerLevel level,
+ FIRLoggerService service,
+ NSString *messageCode,
+ NSString *message,
+// On 64-bit simulators, va_list is not a pointer, so cannot be marked nullable
+// See: http://stackoverflow.com/q/29095469
+#if __LP64__ && TARGET_OS_SIMULATOR || TARGET_OS_OSX
+ va_list args_ptr
+#else
+ va_list _Nullable args_ptr
+#endif
+);
+
+/**
+ * The following functions accept the following parameters in order:
+ * (required) service name of type FIRLoggerService.
+ * (required) message code starting from "I-" which means iOS, followed by a capitalized
+ * three-character service identifier and a six digit integer message ID that is unique
+ * within the service.
+ * An example of the message code is @"I-COR000001".
+ * See go/firebase-log-proposal for details.
+ * (required) message string which can be a format string.
+ * (optional) the list of arguments to substitute into the format string.
+ * Example usage:
+ * FIRLogError(kFIRLoggerCore, @"I-COR000001", @"Configuration of %@ failed.", app.name);
+ */
+extern void FIRLogError(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
+ NS_FORMAT_FUNCTION(3, 4);
+extern void FIRLogWarning(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
+ NS_FORMAT_FUNCTION(3, 4);
+extern void FIRLogNotice(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
+ NS_FORMAT_FUNCTION(3, 4);
+extern void FIRLogInfo(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
+ NS_FORMAT_FUNCTION(3, 4);
+extern void FIRLogDebug(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
+ NS_FORMAT_FUNCTION(3, 4);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+@interface FIRLoggerWrapper : NSObject
+
+/**
+ * Objective-C wrapper for FIRLogBasic to allow weak linking to FIRLogger
+ * (required) log level (one of the FIRLoggerLevel enum values).
+ * (required) service name of type FIRLoggerService.
+ * (required) message code starting with "I-" which means iOS, followed by a capitalized
+ * three-character service identifier and a six digit integer message ID that is unique
+ * within the service.
+ * An example of the message code is @"I-COR000001".
+ * (required) message string which can be a format string.
+ * (optional) variable arguments list obtained from calling va_start, used when message is a format
+ * string.
+ */
+
++ (void)logWithLevel:(FIRLoggerLevel)level
+ withService:(FIRLoggerService)service
+ withCode:(NSString *)messageCode
+ withMessage:(NSString *)message
+ withArgs:(va_list)args;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIROptionsInternal.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIROptionsInternal.h
new file mode 100644
index 00000000..acaf4586
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIROptionsInternal.h
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if SWIFT_PACKAGE
+// TODO(paulb777): Investigate if there's a common strategy for both Cocoapods and Swift PM.
+#import "FIROptions.h"
+#else
+#import <FirebaseCore/FIROptions.h>
+#endif
+
+/**
+ * Keys for the strings in the plist file.
+ */
+extern NSString *const kFIRAPIKey;
+extern NSString *const kFIRTrackingID;
+extern NSString *const kFIRGoogleAppID;
+extern NSString *const kFIRClientID;
+extern NSString *const kFIRGCMSenderID;
+extern NSString *const kFIRAndroidClientID;
+extern NSString *const kFIRDatabaseURL;
+extern NSString *const kFIRStorageBucket;
+extern NSString *const kFIRBundleID;
+extern NSString *const kFIRProjectID;
+
+/**
+ * Keys for the plist file name
+ */
+extern NSString *const kServiceInfoFileName;
+
+extern NSString *const kServiceInfoFileType;
+
+/**
+ * This header file exposes the initialization of FIROptions to internal use.
+ */
+@interface FIROptions ()
+
+/**
+ * resetDefaultOptions and initInternalWithOptionsDictionary: are exposed only for unit tests.
+ */
++ (void)resetDefaultOptions;
+
+/**
+ * Initializes the options with dictionary. The above strings are the keys of the dictionary.
+ * This is the designated initializer.
+ */
+- (instancetype)initInternalWithOptionsDictionary:(NSDictionary *)serviceInfoDictionary;
+
+/**
+ * defaultOptions and defaultOptionsDictionary are exposed in order to be used in FIRApp and
+ * other first party services.
+ */
++ (FIROptions *)defaultOptions;
+
++ (NSDictionary *)defaultOptionsDictionary;
+
+/**
+ * Indicates whether or not Analytics collection was explicitly enabled via a plist flag or at
+ * runtime.
+ */
+@property(nonatomic, readonly) BOOL isAnalyticsCollectionExplicitlySet;
+
+/**
+ * Whether or not Analytics Collection was enabled. Analytics Collection is enabled unless
+ * explicitly disabled in GoogleService-Info.plist.
+ */
+@property(nonatomic, readonly) BOOL isAnalyticsCollectionEnabled;
+
+/**
+ * Whether or not Analytics Collection was completely disabled. If YES, then
+ * isAnalyticsCollectionEnabled will be NO.
+ */
+@property(nonatomic, readonly) BOOL isAnalyticsCollectionDeactivated;
+
+/**
+ * The version ID of the client library, e.g. @"1100000".
+ */
+@property(nonatomic, readonly, copy) NSString *libraryVersionID;
+
+/**
+ * The flag indicating whether this object was constructed with the values in the default plist
+ * file.
+ */
+@property(nonatomic) BOOL usingOptionsFromDefaultPlist;
+
+/**
+ * Whether or not Measurement was enabled. Measurement is enabled unless explicitly disabled in
+ * GoogleService-Info.plist.
+ */
+@property(nonatomic, readonly) BOOL isMeasurementEnabled;
+
+/**
+ * Whether or not Analytics was enabled in the developer console.
+ */
+@property(nonatomic, readonly) BOOL isAnalyticsEnabled;
+
+/**
+ * Whether or not SignIn was enabled in the developer console.
+ */
+@property(nonatomic, readonly) BOOL isSignInEnabled;
+
+/**
+ * Whether or not editing is locked. This should occur after FIROptions has been set on a FIRApp.
+ */
+@property(nonatomic, getter=isEditingLocked) BOOL editingLocked;
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FirebaseCoreInternal.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FirebaseCoreInternal.h
new file mode 100644
index 00000000..93af6cb8
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FirebaseCoreInternal.h
@@ -0,0 +1,31 @@
+// Copyright 2020 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// An umbrella header, for any other libraries in this repo to access Firebase Public and Private
+// headers. Any package manager complexity should be handled here.
+
+#if SWIFT_PACKAGE
+@import FirebaseCore;
+#else
+#import <FirebaseCore/FirebaseCore.h>
+#endif
+
+#import "FirebaseCore/Sources/Private/FIRAppInternal.h"
+#import "FirebaseCore/Sources/Private/FIRComponent.h"
+#import "FirebaseCore/Sources/Private/FIRComponentContainer.h"
+#import "FirebaseCore/Sources/Private/FIRDependency.h"
+#import "FirebaseCore/Sources/Private/FIRHeartbeatInfo.h"
+#import "FirebaseCore/Sources/Private/FIRLibrary.h"
+#import "FirebaseCore/Sources/Private/FIRLogger.h"
+#import "FirebaseCore/Sources/Private/FIROptionsInternal.h"
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h
new file mode 100644
index 00000000..941aa3dd
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseInstallations/Source/Library/Public/FIRInstallationsErrors.h"
+
+@class FIRInstallationsHTTPError;
+
+NS_ASSUME_NONNULL_BEGIN
+
+void FIRInstallationsItemSetErrorToPointer(NSError *error, NSError **pointer);
+
+@interface FIRInstallationsErrorUtil : NSObject
+
++ (NSError *)keyedArchiverErrorWithException:(NSException *)exception;
++ (NSError *)keyedArchiverErrorWithError:(NSError *)error;
+
++ (NSError *)keychainErrorWithFunction:(NSString *)keychainFunction status:(OSStatus)status;
+
++ (NSError *)installationItemNotFoundForAppID:(NSString *)appID appName:(NSString *)appName;
+
++ (NSError *)JSONSerializationError:(NSError *)error;
+
++ (NSError *)networkErrorWithError:(NSError *)error;
+
++ (NSError *)FIDRegistrationErrorWithResponseMissingField:(NSString *)missingFieldName;
+
++ (NSError *)corruptedIIDTokenData;
+
++ (FIRInstallationsHTTPError *)APIErrorWithHTTPResponse:(NSHTTPURLResponse *)HTTPResponse
+ data:(nullable NSData *)data;
++ (BOOL)isAPIError:(NSError *)error withHTTPCode:(NSInteger)HTTPCode;
+
+/**
+ * Returns the passed error if it is already in the public domain or a new error with the passed
+ * error at `NSUnderlyingErrorKey`.
+ */
++ (NSError *)publicDomainErrorWithError:(NSError *)error;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.m b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.m
new file mode 100644
index 00000000..1b335700
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.m
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h"
+
+#import "FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.h"
+
+NSString *const kFirebaseInstallationsErrorDomain = @"com.firebase.installations";
+
+void FIRInstallationsItemSetErrorToPointer(NSError *error, NSError **pointer) {
+ if (pointer != NULL) {
+ *pointer = error;
+ }
+}
+
+@implementation FIRInstallationsErrorUtil
+
++ (NSError *)keyedArchiverErrorWithException:(NSException *)exception {
+ NSString *failureReason = [NSString
+ stringWithFormat:@"NSKeyedArchiver exception with name: %@, reason: %@, userInfo: %@",
+ exception.name, exception.reason, exception.userInfo];
+ return [self installationsErrorWithCode:FIRInstallationsErrorCodeUnknown
+ failureReason:failureReason
+ underlyingError:nil];
+}
+
++ (NSError *)keyedArchiverErrorWithError:(NSError *)error {
+ NSString *failureReason = [NSString stringWithFormat:@"NSKeyedArchiver error."];
+ return [self installationsErrorWithCode:FIRInstallationsErrorCodeUnknown
+ failureReason:failureReason
+ underlyingError:error];
+}
+
++ (NSError *)keychainErrorWithFunction:(NSString *)keychainFunction status:(OSStatus)status {
+ NSString *failureReason = [NSString stringWithFormat:@"%@ (%li)", keychainFunction, (long)status];
+ return [self installationsErrorWithCode:FIRInstallationsErrorCodeKeychain
+ failureReason:failureReason
+ underlyingError:nil];
+}
+
++ (NSError *)installationItemNotFoundForAppID:(NSString *)appID appName:(NSString *)appName {
+ NSString *failureReason =
+ [NSString stringWithFormat:@"Installation for appID %@ appName %@ not found", appID, appName];
+ return [self installationsErrorWithCode:FIRInstallationsErrorCodeUnknown
+ failureReason:failureReason
+ underlyingError:nil];
+}
+
++ (NSError *)corruptedIIDTokenData {
+ NSString *failureReason =
+ @"IID token data stored in Keychain is corrupted or in an incompatible format.";
+ return [self installationsErrorWithCode:FIRInstallationsErrorCodeUnknown
+ failureReason:failureReason
+ underlyingError:nil];
+}
+
++ (FIRInstallationsHTTPError *)APIErrorWithHTTPResponse:(NSHTTPURLResponse *)HTTPResponse
+ data:(nullable NSData *)data {
+ return [[FIRInstallationsHTTPError alloc] initWithHTTPResponse:HTTPResponse data:data];
+}
+
++ (BOOL)isAPIError:(NSError *)error withHTTPCode:(NSInteger)HTTPCode {
+ if (![error isKindOfClass:[FIRInstallationsHTTPError class]]) {
+ return NO;
+ }
+
+ return [(FIRInstallationsHTTPError *)error HTTPResponse].statusCode == HTTPCode;
+}
+
++ (NSError *)JSONSerializationError:(NSError *)error {
+ NSString *failureReason = [NSString stringWithFormat:@"Failed to serialize JSON data."];
+ return [self installationsErrorWithCode:FIRInstallationsErrorCodeUnknown
+ failureReason:failureReason
+ underlyingError:nil];
+}
+
++ (NSError *)FIDRegistrationErrorWithResponseMissingField:(NSString *)missingFieldName {
+ NSString *failureReason = [NSString
+ stringWithFormat:@"A required response field with name %@ is missing", missingFieldName];
+ return [self installationsErrorWithCode:FIRInstallationsErrorCodeUnknown
+ failureReason:failureReason
+ underlyingError:nil];
+}
+
++ (NSError *)networkErrorWithError:(NSError *)error {
+ return [self installationsErrorWithCode:FIRInstallationsErrorCodeServerUnreachable
+ failureReason:@"Network connection error."
+ underlyingError:error];
+}
+
++ (NSError *)publicDomainErrorWithError:(NSError *)error {
+ if ([error.domain isEqualToString:kFirebaseInstallationsErrorDomain]) {
+ return error;
+ }
+
+ return [self installationsErrorWithCode:FIRInstallationsErrorCodeUnknown
+ failureReason:nil
+ underlyingError:error];
+}
+
++ (NSError *)installationsErrorWithCode:(FIRInstallationsErrorCode)code
+ failureReason:(nullable NSString *)failureReason
+ underlyingError:(nullable NSError *)underlyingError {
+ NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
+ userInfo[NSUnderlyingErrorKey] = underlyingError;
+ userInfo[NSLocalizedFailureReasonErrorKey] = failureReason;
+
+ return [NSError errorWithDomain:kFirebaseInstallationsErrorDomain code:code userInfo:userInfo];
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.h
new file mode 100644
index 00000000..ad0eb8c1
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** Represents an error caused by an unexpected API response. */
+@interface FIRInstallationsHTTPError : NSError
+
+@property(nonatomic, readonly) NSHTTPURLResponse *HTTPResponse;
+@property(nonatomic, readonly, nonnull) NSData *data;
+
+- (instancetype)init NS_UNAVAILABLE;
+
+- (instancetype)initWithHTTPResponse:(NSHTTPURLResponse *)HTTPResponse data:(nullable NSData *)data;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+typedef NS_ENUM(NSInteger, FIRInstallationsHTTPCodes) {
+ FIRInstallationsHTTPCodesTooManyRequests = 429,
+ FIRInstallationsHTTPCodesServerInternalError = 500,
+};
+
+/** Possible response HTTP codes for `CreateInstallation` API request. */
+typedef NS_ENUM(NSInteger, FIRInstallationsRegistrationHTTPCode) {
+ FIRInstallationsRegistrationHTTPCodeSuccess = 201,
+ FIRInstallationsRegistrationHTTPCodeInvalidArgument = 400,
+ FIRInstallationsRegistrationHTTPCodeInvalidAPIKey = 401,
+ FIRInstallationsRegistrationHTTPCodeAPIKeyToProjectIDMismatch = 403,
+ FIRInstallationsRegistrationHTTPCodeProjectNotFound = 404,
+ FIRInstallationsRegistrationHTTPCodeTooManyRequests = 429,
+ FIRInstallationsRegistrationHTTPCodeServerInternalError = 500
+};
+
+typedef NS_ENUM(NSInteger, FIRInstallationsAuthTokenHTTPCode) {
+ FIRInstallationsAuthTokenHTTPCodeInvalidAuthentication = 401,
+ FIRInstallationsAuthTokenHTTPCodeFIDNotFound = 404,
+};
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.m b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.m
new file mode 100644
index 00000000..4236f452
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.m
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.h"
+#import "FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h"
+
+@implementation FIRInstallationsHTTPError
+
+- (instancetype)initWithHTTPResponse:(NSHTTPURLResponse *)HTTPResponse
+ data:(nullable NSData *)data {
+ NSDictionary *userInfo = [FIRInstallationsHTTPError userInfoWithHTTPResponse:HTTPResponse
+ data:data];
+ self = [super
+ initWithDomain:kFirebaseInstallationsErrorDomain
+ code:[FIRInstallationsHTTPError errorCodeWithHTTPCode:HTTPResponse.statusCode]
+ userInfo:userInfo];
+ if (self) {
+ _HTTPResponse = HTTPResponse;
+ _data = data;
+ }
+ return self;
+}
+
++ (FIRInstallationsErrorCode)errorCodeWithHTTPCode:(NSInteger)HTTPCode {
+ return FIRInstallationsErrorCodeUnknown;
+}
+
++ (NSDictionary *)userInfoWithHTTPResponse:(NSHTTPURLResponse *)HTTPResponse
+ data:(nullable NSData *)data {
+ NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
+ NSString *failureReason =
+ [NSString stringWithFormat:@"The server responded with an error: \n - URL: %@ \n - HTTP "
+ @"status code: %ld \n - Response body: %@",
+ HTTPResponse.URL, (long)HTTPResponse.statusCode, responseString];
+ return @{NSLocalizedFailureReasonErrorKey : failureReason};
+}
+
+#pragma mark - NSCopying
+
+- (id)copyWithZone:(NSZone *)zone {
+ return [[FIRInstallationsHTTPError alloc] initWithHTTPResponse:self.HTTPResponse data:self.data];
+}
+
+#pragma mark - NSSecureCoding
+
+- (nullable instancetype)initWithCoder:(NSCoder *)coder {
+ NSHTTPURLResponse *HTTPResponse = [coder decodeObjectOfClass:[NSHTTPURLResponse class]
+ forKey:@"HTTPResponse"];
+ if (!HTTPResponse) {
+ return nil;
+ }
+ NSData *data = [coder decodeObjectOfClass:[NSData class] forKey:@"data"];
+
+ return [self initWithHTTPResponse:HTTPResponse data:data];
+}
+
+- (void)encodeWithCoder:(NSCoder *)coder {
+ [coder encodeObject:self.HTTPResponse forKey:@"HTTPResponse"];
+ [coder encodeObject:self.data forKey:@"data"];
+}
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallations.m b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallations.m
new file mode 100644
index 00000000..cbdd8b29
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallations.m
@@ -0,0 +1,245 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseInstallations/Source/Library/Public/FIRInstallations.h"
+
+#if __has_include(<FBLPromises/FBLPromises.h>)
+#import <FBLPromises/FBLPromises.h>
+#else
+#import "FBLPromises.h"
+#endif
+
+#import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
+
+#import "FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResultInternal.h"
+
+#import "FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h"
+#import "FirebaseInstallations/Source/Library/FIRInstallationsItem.h"
+#import "FirebaseInstallations/Source/Library/FIRInstallationsLogger.h"
+#import "FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.h"
+#import "FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.h"
+#import "FirebaseInstallations/Source/Library/Public/FIRInstallationsVersion.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol FIRInstallationsInstanceProvider <FIRLibrary>
+@end
+
+@interface FIRInstallations () <FIRInstallationsInstanceProvider>
+@property(nonatomic, readonly) FIROptions *appOptions;
+@property(nonatomic, readonly) NSString *appName;
+
+@property(nonatomic, readonly) FIRInstallationsIDController *installationsIDController;
+
+@end
+
+@implementation FIRInstallations
+
+#pragma mark - Firebase component
+
++ (void)load {
+ [FIRApp registerInternalLibrary:(Class<FIRLibrary>)self
+ withName:@"fire-install"
+ withVersion:[NSString stringWithUTF8String:FIRInstallationsVersionStr]];
+}
+
++ (nonnull NSArray<FIRComponent *> *)componentsToRegister {
+ FIRComponentCreationBlock creationBlock =
+ ^id _Nullable(FIRComponentContainer *container, BOOL *isCacheable) {
+ *isCacheable = YES;
+ FIRInstallations *installations = [[FIRInstallations alloc] initWithApp:container.app];
+ return installations;
+ };
+
+ FIRComponent *installationsProvider =
+ [FIRComponent componentWithProtocol:@protocol(FIRInstallationsInstanceProvider)
+ instantiationTiming:FIRInstantiationTimingAlwaysEager
+ dependencies:@[]
+ creationBlock:creationBlock];
+ return @[ installationsProvider ];
+}
+
+- (instancetype)initWithApp:(FIRApp *)app {
+ return [self initWitAppOptions:app.options appName:app.name];
+}
+
+- (instancetype)initWitAppOptions:(FIROptions *)appOptions appName:(NSString *)appName {
+ FIRInstallationsIDController *IDController =
+ [[FIRInstallationsIDController alloc] initWithGoogleAppID:appOptions.googleAppID
+ appName:appName
+ APIKey:appOptions.APIKey
+ projectID:appOptions.projectID
+ GCMSenderID:appOptions.GCMSenderID
+ accessGroup:appOptions.appGroupID];
+
+ // `prefetchAuthToken` is disabled due to b/156746574.
+ return [self initWithAppOptions:appOptions
+ appName:appName
+ installationsIDController:IDController
+ prefetchAuthToken:NO];
+}
+
+/// The initializer is supposed to be used by tests to inject `installationsStore`.
+- (instancetype)initWithAppOptions:(FIROptions *)appOptions
+ appName:(NSString *)appName
+ installationsIDController:(FIRInstallationsIDController *)installationsIDController
+ prefetchAuthToken:(BOOL)prefetchAuthToken {
+ self = [super init];
+ if (self) {
+ [[self class] validateAppOptions:appOptions appName:appName];
+ [[self class] assertCompatibleIIDVersion];
+
+ _appOptions = [appOptions copy];
+ _appName = [appName copy];
+ _installationsIDController = installationsIDController;
+
+ // Pre-fetch auth token.
+ if (prefetchAuthToken) {
+ [self authTokenWithCompletion:^(FIRInstallationsAuthTokenResult *_Nullable tokenResult,
+ NSError *_Nullable error){
+ }];
+ }
+ }
+ return self;
+}
+
++ (void)validateAppOptions:(FIROptions *)appOptions appName:(NSString *)appName {
+ NSMutableArray *missingFields = [NSMutableArray array];
+ if (appName.length < 1) {
+ [missingFields addObject:@"`FirebaseApp.name`"];
+ }
+ if (appOptions.APIKey.length < 1) {
+ [missingFields addObject:@"`FirebaseOptions.APIKey`"];
+ }
+ if (appOptions.googleAppID.length < 1) {
+ [missingFields addObject:@"`FirebaseOptions.googleAppID`"];
+ }
+
+ // TODO(#4692): Check for `appOptions.projectID.length < 1` only.
+ // We can use `GCMSenderID` instead of `projectID` temporary.
+ if (appOptions.projectID.length < 1 && appOptions.GCMSenderID.length < 1) {
+ [missingFields addObject:@"`FirebaseOptions.projectID`"];
+ }
+
+ if (missingFields.count > 0) {
+ [NSException
+ raise:kFirebaseInstallationsErrorDomain
+ format:
+ @"%@[%@] Could not configure Firebase Installations due to invalid FirebaseApp "
+ @"options. The following parameters are nil or empty: %@. If you use "
+ @"GoogleServices-Info.plist please download the most recent version from the Firebase "
+ @"Console. If you configure Firebase in code, please make sure you specify all "
+ @"required parameters.",
+ kFIRLoggerInstallations, kFIRInstallationsMessageCodeInvalidFirebaseAppOptions,
+ [missingFields componentsJoinedByString:@", "]];
+ }
+}
+
+#pragma mark - Public
+
++ (FIRInstallations *)installations {
+ FIRApp *defaultApp = [FIRApp defaultApp];
+ if (!defaultApp) {
+ [NSException raise:kFirebaseInstallationsErrorDomain
+ format:@"The default FirebaseApp instance must be configured before the default"
+ @"FirebaseApp instance can be initialized. One way to ensure that is to "
+ @"call `[FIRApp configure];` (`FirebaseApp.configure()` in Swift) in the App"
+ @" Delegate's `application:didFinishLaunchingWithOptions:` "
+ @"(`application(_:didFinishLaunchingWithOptions:)` in Swift)."];
+ }
+
+ return [self installationsWithApp:defaultApp];
+}
+
++ (FIRInstallations *)installationsWithApp:(FIRApp *)app {
+ id<FIRInstallationsInstanceProvider> installations =
+ FIR_COMPONENT(FIRInstallationsInstanceProvider, app.container);
+ return (FIRInstallations *)installations;
+}
+
+- (void)installationIDWithCompletion:(FIRInstallationsIDHandler)completion {
+ [self.installationsIDController getInstallationItem]
+ .then(^id(FIRInstallationsItem *installation) {
+ completion(installation.firebaseInstallationID, nil);
+ return nil;
+ })
+ .catch(^(NSError *error) {
+ completion(nil, [FIRInstallationsErrorUtil publicDomainErrorWithError:error]);
+ });
+}
+
+- (void)authTokenWithCompletion:(FIRInstallationsTokenHandler)completion {
+ [self authTokenForcingRefresh:NO completion:completion];
+}
+
+- (void)authTokenForcingRefresh:(BOOL)forceRefresh
+ completion:(FIRInstallationsTokenHandler)completion {
+ [self.installationsIDController getAuthTokenForcingRefresh:forceRefresh]
+ .then(^FIRInstallationsAuthTokenResult *(FIRInstallationsItem *installation) {
+ FIRInstallationsAuthTokenResult *result = [[FIRInstallationsAuthTokenResult alloc]
+ initWithToken:installation.authToken.token
+ expirationDate:installation.authToken.expirationDate];
+ return result;
+ })
+ .then(^id(FIRInstallationsAuthTokenResult *token) {
+ completion(token, nil);
+ return nil;
+ })
+ .catch(^void(NSError *error) {
+ completion(nil, [FIRInstallationsErrorUtil publicDomainErrorWithError:error]);
+ });
+}
+
+- (void)deleteWithCompletion:(void (^)(NSError *__nullable error))completion {
+ [self.installationsIDController deleteInstallation]
+ .then(^id(id result) {
+ completion(nil);
+ return nil;
+ })
+ .catch(^void(NSError *error) {
+ completion([FIRInstallationsErrorUtil publicDomainErrorWithError:error]);
+ });
+}
+
+#pragma mark - IID version compatibility
+
++ (void)assertCompatibleIIDVersion {
+ // We use this flag to disable IID compatibility exception for unit tests.
+#ifdef FIR_INSTALLATIONS_ALLOWS_INCOMPATIBLE_IID_VERSION
+ return;
+#else
+ if (![self isIIDVersionCompatible]) {
+ [NSException raise:kFirebaseInstallationsErrorDomain
+ format:@"FirebaseInstallations will not work correctly with current version of "
+ @"Firebase Instance ID. Please update your Firebase Instance ID version."];
+ }
+#endif
+}
+
++ (BOOL)isIIDVersionCompatible {
+ Class IIDClass = NSClassFromString(@"FIRInstanceID");
+ if (IIDClass == nil) {
+ // It is OK if there is no IID at all.
+ return YES;
+ }
+ // We expect a compatible version having the method `+[FIRInstanceID usesFIS]` defined.
+ BOOL isCompatibleVersion = [IIDClass respondsToSelector:NSSelectorFromString(@"usesFIS")];
+ return isCompatibleVersion;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResult.m b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResult.m
new file mode 100644
index 00000000..47a71e84
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResult.m
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResultInternal.h"
+
+@implementation FIRInstallationsAuthTokenResult
+
+- (instancetype)initWithToken:(NSString *)token expirationDate:(NSDate *)expirationDate {
+ self = [super init];
+ if (self) {
+ _authToken = [token copy];
+ _expirationDate = expirationDate;
+ }
+ return self;
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResultInternal.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResultInternal.h
new file mode 100644
index 00000000..2233dd34
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResultInternal.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseInstallations/Source/Library/Public/FIRInstallationsAuthTokenResult.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRInstallationsAuthTokenResult (Internal)
+
+- (instancetype)initWithToken:(NSString *)token expirationDate:(NSDate *)expirationTime;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsItem.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsItem.h
new file mode 100644
index 00000000..4b64b7fc
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsItem.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsStatus.h"
+
+@class FIRInstallationsStoredItem;
+@class FIRInstallationsStoredAuthToken;
+@class FIRInstallationsStoredIIDCheckin;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * The class represents the required installation ID and auth token data including possible states.
+ * The data is stored to Keychain via `FIRInstallationsStoredItem` which has only the storage
+ * relevant data and does not contain any logic. `FIRInstallationsItem` must be used on the logic
+ * level (not `FIRInstallationsStoredItem`).
+ */
+@interface FIRInstallationsItem : NSObject <NSCopying>
+
+/// A `FirebaseApp` identifier.
+@property(nonatomic, readonly) NSString *appID;
+/// A `FirebaseApp` name.
+@property(nonatomic, readonly) NSString *firebaseAppName;
+/// A stable identifier that uniquely identifies the app instance.
+@property(nonatomic, copy, nullable) NSString *firebaseInstallationID;
+/// The `refreshToken` is used to authorize the auth token requests.
+@property(nonatomic, copy, nullable) NSString *refreshToken;
+
+@property(nonatomic, nullable) FIRInstallationsStoredAuthToken *authToken;
+@property(nonatomic, assign) FIRInstallationsStatus registrationStatus;
+
+/// Instance ID default token imported from IID store as a part of IID migration.
+@property(nonatomic, nullable) NSString *IIDDefaultToken;
+
+- (instancetype)initWithAppID:(NSString *)appID firebaseAppName:(NSString *)firebaseAppName;
+
+/**
+ * Populates `FIRInstallationsItem` properties with data from `FIRInstallationsStoredItem`.
+ * @param item An instance of `FIRInstallationsStoredItem` to get data from.
+ */
+- (void)updateWithStoredItem:(FIRInstallationsStoredItem *)item;
+
+/**
+ * Creates a stored item with data from the object.
+ * @return Returns a `FIRInstallationsStoredItem` instance with the data from the object.
+ */
+- (FIRInstallationsStoredItem *)storedItem;
+
+/**
+ * The installation identifier.
+ * @return Returns a string uniquely identifying the installation.
+ */
+- (NSString *)identifier;
+
+/**
+ * The installation identifier.
+ * @param appID A `FirebaseApp` identifier.
+ * @param appName A `FirebaseApp` name.
+ * @return Returns a string uniquely identifying the installation.
+ */
++ (NSString *)identifierWithAppID:(NSString *)appID appName:(NSString *)appName;
+
+/**
+ * Generate a new Firebase Installation Identifier.
+ * @return Returns a 22 characters long globally unique string created based on UUID.
+ */
++ (NSString *)generateFID;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsItem.m b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsItem.m
new file mode 100644
index 00000000..200d8ae4
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsItem.m
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseInstallations/Source/Library/FIRInstallationsItem.h"
+
+#import "FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.h"
+#import "FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.h"
+
+@implementation FIRInstallationsItem
+
+- (instancetype)initWithAppID:(NSString *)appID firebaseAppName:(NSString *)firebaseAppName {
+ self = [super init];
+ if (self) {
+ _appID = [appID copy];
+ _firebaseAppName = [firebaseAppName copy];
+ }
+ return self;
+}
+
+- (nonnull id)copyWithZone:(nullable NSZone *)zone {
+ FIRInstallationsItem *clone = [[FIRInstallationsItem alloc] initWithAppID:self.appID
+ firebaseAppName:self.firebaseAppName];
+ clone.firebaseInstallationID = [self.firebaseInstallationID copy];
+ clone.refreshToken = [self.refreshToken copy];
+ clone.authToken = [self.authToken copy];
+ clone.registrationStatus = self.registrationStatus;
+
+ return clone;
+}
+
+- (void)updateWithStoredItem:(FIRInstallationsStoredItem *)item {
+ self.firebaseInstallationID = item.firebaseInstallationID;
+ self.refreshToken = item.refreshToken;
+ self.authToken = item.authToken;
+ self.registrationStatus = item.registrationStatus;
+ self.IIDDefaultToken = item.IIDDefaultToken;
+}
+
+- (FIRInstallationsStoredItem *)storedItem {
+ FIRInstallationsStoredItem *storedItem = [[FIRInstallationsStoredItem alloc] init];
+ storedItem.firebaseInstallationID = self.firebaseInstallationID;
+ storedItem.refreshToken = self.refreshToken;
+ storedItem.authToken = self.authToken;
+ storedItem.registrationStatus = self.registrationStatus;
+ storedItem.IIDDefaultToken = self.IIDDefaultToken;
+ return storedItem;
+}
+
+- (nonnull NSString *)identifier {
+ return [[self class] identifierWithAppID:self.appID appName:self.firebaseAppName];
+}
+
++ (NSString *)identifierWithAppID:(NSString *)appID appName:(NSString *)appName {
+ return [appID stringByAppendingString:appName];
+}
+
++ (NSString *)generateFID {
+ NSUUID *UUID = [NSUUID UUID];
+ uuid_t UUIDBytes;
+ [UUID getUUIDBytes:UUIDBytes];
+
+ NSUInteger UUIDLength = sizeof(uuid_t);
+ NSData *UUIDData = [NSData dataWithBytes:UUIDBytes length:UUIDLength];
+
+ uint8_t UUIDLast4Bits = UUIDBytes[UUIDLength - 1] & 0b00001111;
+
+ // FID first 4 bits must be `0111`. The last 4 UUID bits will be cut later to form a proper FID.
+ // To keep 16 random bytes we copy these last 4 UUID to the FID 1st byte after `0111` prefix.
+ uint8_t FIDPrefix = 0b01110000 | UUIDLast4Bits;
+ NSMutableData *FIDData = [NSMutableData dataWithBytes:&FIDPrefix length:1];
+
+ [FIDData appendData:UUIDData];
+ NSString *FIDString = [self base64URLEncodedStringWithData:FIDData];
+
+ // A valid FID has exactly 22 base64 characters, which is 132 bits, or 16.5 bytes.
+ // Our generated ID has 16 bytes UUID + 1 byte prefix which after encoding with base64 will become
+ // 23 characters plus 1 character for "=" padding.
+
+ // Remove the 23rd character that was added because of the extra 4 bits at the
+ // end of our 17 byte data and the '=' padding.
+ return [FIDString substringWithRange:NSMakeRange(0, 22)];
+}
+
++ (NSString *)base64URLEncodedStringWithData:(NSData *)data {
+ NSString *string = [data base64EncodedStringWithOptions:0];
+ string = [string stringByReplacingOccurrencesOfString:@"/" withString:@"_"];
+ string = [string stringByReplacingOccurrencesOfString:@"+" withString:@"-"];
+ return string;
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsLogger.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsLogger.h
new file mode 100644
index 00000000..e4192bf6
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsLogger.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
+
+extern FIRLoggerService kFIRLoggerInstallations;
+
+// FIRInstallationsAPIService.m
+extern NSString *const kFIRInstallationsMessageCodeSendAPIRequest;
+extern NSString *const kFIRInstallationsMessageCodeAPIRequestNetworkError;
+extern NSString *const kFIRInstallationsMessageCodeAPIRequestResponse;
+extern NSString *const kFIRInstallationsMessageCodeUnexpectedAPIRequestResponse;
+extern NSString *const kFIRInstallationsMessageCodeParsingAPIResponse;
+extern NSString *const kFIRInstallationsMessageCodeAPIResponseParsingInstallationFailed;
+extern NSString *const kFIRInstallationsMessageCodeAPIResponseParsingInstallationSucceed;
+extern NSString *const kFIRInstallationsMessageCodeAPIResponseParsingAuthTokenFailed;
+extern NSString *const kFIRInstallationsMessageCodeAPIResponseParsingAuthTokenSucceed;
+
+// FIRInstallationsIDController.m
+extern NSString *const kFIRInstallationsMessageCodeNewGetInstallationOperationCreated;
+extern NSString *const kFIRInstallationsMessageCodeNewGetAuthTokenOperationCreated;
+extern NSString *const kFIRInstallationsMessageCodeNewDeleteInstallationOperationCreated;
+extern NSString *const kFIRInstallationsMessageCodeInvalidFirebaseConfiguration;
+
+// FIRInstallationsStoredItem.m
+extern NSString *const kFIRInstallationsMessageCodeInstallationCoderVersionMismatch;
+
+// FIRInstallationsStoredAuthToken.m
+extern NSString *const kFIRInstallationsMessageCodeAuthTokenCoderVersionMismatch;
+
+// FIRInstallationsStoredIIDCheckin.m
+extern NSString *const kFIRInstallationsMessageCodeIIDCheckinCoderVersionMismatch;
+extern NSString *const kFIRInstallationsMessageCodeIIDCheckinFailedToDecode;
+
+// FIRInstallations.m
+extern NSString *const kFIRInstallationsMessageCodeInvalidFirebaseAppOptions;
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsLogger.m b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsLogger.m
new file mode 100644
index 00000000..edfcde97
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsLogger.m
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseInstallations/Source/Library/FIRInstallationsLogger.h"
+
+FIRLoggerService kFIRLoggerInstallations = @"[Firebase/Installations]";
+
+// FIRInstallationsAPIService.m
+NSString *const kFIRInstallationsMessageCodeSendAPIRequest = @"I-FIS001001";
+NSString *const kFIRInstallationsMessageCodeAPIRequestNetworkError = @"I-FIS001002";
+NSString *const kFIRInstallationsMessageCodeAPIRequestResponse = @"I-FIS001003";
+NSString *const kFIRInstallationsMessageCodeUnexpectedAPIRequestResponse = @"I-FIS001004";
+NSString *const kFIRInstallationsMessageCodeParsingAPIResponse = @"I-FIS001005";
+NSString *const kFIRInstallationsMessageCodeAPIResponseParsingInstallationFailed = @"I-FIS001006";
+NSString *const kFIRInstallationsMessageCodeAPIResponseParsingInstallationSucceed = @"I-FIS001007";
+NSString *const kFIRInstallationsMessageCodeAPIResponseParsingAuthTokenFailed = @"I-FIS001008";
+NSString *const kFIRInstallationsMessageCodeAPIResponseParsingAuthTokenSucceed = @"I-FIS001009";
+
+// FIRInstallationsIDController.m
+NSString *const kFIRInstallationsMessageCodeNewGetInstallationOperationCreated = @"I-FIS002000";
+NSString *const kFIRInstallationsMessageCodeNewGetAuthTokenOperationCreated = @"I-FIS002001";
+NSString *const kFIRInstallationsMessageCodeNewDeleteInstallationOperationCreated = @"I-FIS002002";
+NSString *const kFIRInstallationsMessageCodeInvalidFirebaseConfiguration = @"I-FIS002003";
+
+// FIRInstallationsStoredItem.m
+NSString *const kFIRInstallationsMessageCodeInstallationCoderVersionMismatch = @"I-FIS003000";
+
+// FIRInstallationsStoredAuthToken.m
+NSString *const kFIRInstallationsMessageCodeAuthTokenCoderVersionMismatch = @"I-FIS004000";
+
+// FIRInstallationsStoredIIDCheckin.m
+NSString *const kFIRInstallationsMessageCodeIIDCheckinCoderVersionMismatch = @"I-FIS007000";
+NSString *const kFIRInstallationsMessageCodeIIDCheckinFailedToDecode = @"I-FIS007001";
+
+// FIRInstallations.m
+NSString *const kFIRInstallationsMessageCodeInvalidFirebaseAppOptions = @"I-FIS008000";
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsVersion.m b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsVersion.m
new file mode 100644
index 00000000..8509680f
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsVersion.m
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseInstallations/Source/Library/Public/FIRInstallationsVersion.h"
+
+// Convert the macro to a string
+#define STR(x) STR_EXPAND(x)
+#define STR_EXPAND(x) #x
+
+const char *const FIRInstallationsVersionStr = (const char *const)STR(FIRInstallations_LIB_VERSION);
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.h
new file mode 100644
index 00000000..e2408caa
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FBLPromise<ValueType>;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** The class encapsulates a port of a piece FirebaseInstanceID logic required to migrate IID. */
+@interface FIRInstallationsIIDStore : NSObject
+
+/**
+ * Retrieves existing IID if present.
+ * @return Returns a promise that is resolved with IID string if IID has been found or rejected with
+ * an error otherwise.
+ */
+- (FBLPromise<NSString *> *)existingIID;
+
+/**
+ * Deletes existing IID if present.
+ * @return Returns a promise that is resolved with `[NSNull null]` if the IID was successfully.
+ * deleted or was not found. The promise is rejected otherwise.
+ */
+- (FBLPromise<NSNull *> *)deleteExistingIID;
+
+#if TARGET_OS_OSX
+/// If not `nil`, then only this keychain will be used to save and read data (see
+/// `kSecMatchSearchList` and `kSecUseKeychain`. It is mostly intended to be used by unit tests.
+@property(nonatomic, nullable) SecKeychainRef keychainRef;
+#endif // TARGET_OSX
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.m b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.m
new file mode 100644
index 00000000..1a77831d
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.m
@@ -0,0 +1,236 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.h"
+
+#if __has_include(<FBLPromises/FBLPromises.h>)
+#import <FBLPromises/FBLPromises.h>
+#else
+#import "FBLPromises.h"
+#endif
+
+#import <CommonCrypto/CommonDigest.h>
+#import "FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h"
+
+static NSString *const kFIRInstallationsIIDKeyPairPublicTagPrefix =
+ @"com.google.iid.keypair.public-";
+static NSString *const kFIRInstallationsIIDKeyPairPrivateTagPrefix =
+ @"com.google.iid.keypair.private-";
+static NSString *const kFIRInstallationsIIDCreationTimePlistKey = @"|S|cre";
+
+@implementation FIRInstallationsIIDStore
+
+- (FBLPromise<NSString *> *)existingIID {
+ return [FBLPromise onQueue:dispatch_get_global_queue(QOS_CLASS_UTILITY, 0)
+ do:^id _Nullable {
+ if (![self hasPlistIIDFlag]) {
+ return nil;
+ }
+
+ NSData *IIDPublicKeyData = [self IIDPublicKeyData];
+ return [self IIDWithPublicKeyData:IIDPublicKeyData];
+ }]
+ .validate(^BOOL(NSString *_Nullable IID) {
+ return IID.length > 0;
+ });
+}
+
+- (FBLPromise<NSNull *> *)deleteExistingIID {
+ return [FBLPromise onQueue:dispatch_get_global_queue(QOS_CLASS_UTILITY, 0)
+ do:^id _Nullable {
+ NSError *error;
+ if (![self deleteIIDFlagFromPlist:&error]) {
+ return error;
+ }
+
+ if (![self deleteIID:&error]) {
+ return error;
+ }
+
+ return [NSNull null];
+ }];
+}
+
+#pragma mark - IID decoding
+
+- (NSString *)IIDWithPublicKeyData:(NSData *)publicKeyData {
+ NSData *publicKeySHA1 = [self sha1WithData:publicKeyData];
+
+ const uint8_t *bytes = publicKeySHA1.bytes;
+ NSMutableData *identityData = [NSMutableData dataWithData:publicKeySHA1];
+
+ uint8_t b0 = bytes[0];
+ // Take the first byte and make the initial four 7 by initially making the initial 4 bits 0
+ // and then adding 0x70 to it.
+ b0 = 0x70 + (0xF & b0);
+ // failsafe should give you back b0 itself
+ b0 = (b0 & 0xFF);
+ [identityData replaceBytesInRange:NSMakeRange(0, 1) withBytes:&b0];
+ NSData *data = [identityData subdataWithRange:NSMakeRange(0, 8 * sizeof(Byte))];
+ return [self base64URLEncodedStringWithData:data];
+}
+
+- (NSData *)sha1WithData:(NSData *)data {
+ unsigned char output[CC_SHA1_DIGEST_LENGTH];
+ unsigned int length = (unsigned int)[data length];
+
+ CC_SHA1(data.bytes, length, output);
+ return [NSData dataWithBytes:output length:CC_SHA1_DIGEST_LENGTH];
+}
+
+- (NSString *)base64URLEncodedStringWithData:(NSData *)data {
+ NSString *string = [data base64EncodedStringWithOptions:0];
+ string = [string stringByReplacingOccurrencesOfString:@"/" withString:@"_"];
+ string = [string stringByReplacingOccurrencesOfString:@"+" withString:@"-"];
+ string = [string stringByReplacingOccurrencesOfString:@"=" withString:@""];
+ return string;
+}
+
+#pragma mark - Keychain
+
+- (NSData *)IIDPublicKeyData {
+ NSString *tag = [self keychainKeyTagWithPrefix:kFIRInstallationsIIDKeyPairPublicTagPrefix];
+ NSDictionary *query = [self keyPairQueryWithTag:tag returnData:YES];
+
+ CFTypeRef keyRef = NULL;
+ OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&keyRef);
+
+ if (status != noErr) {
+ if (keyRef) {
+ CFRelease(keyRef);
+ }
+ return nil;
+ }
+
+ return (__bridge NSData *)keyRef;
+}
+
+- (BOOL)deleteIID:(NSError **)outError {
+ if (![self deleteKeychainKeyWithTagPrefix:kFIRInstallationsIIDKeyPairPublicTagPrefix
+ error:outError]) {
+ return NO;
+ }
+
+ if (![self deleteKeychainKeyWithTagPrefix:kFIRInstallationsIIDKeyPairPrivateTagPrefix
+ error:outError]) {
+ return NO;
+ }
+
+ return YES;
+}
+
+- (BOOL)deleteKeychainKeyWithTagPrefix:(NSString *)tagPrefix error:(NSError **)outError {
+ NSString *keyTag = [self keychainKeyTagWithPrefix:kFIRInstallationsIIDKeyPairPublicTagPrefix];
+ NSDictionary *keyQuery = [self keyPairQueryWithTag:keyTag returnData:NO];
+
+ OSStatus status = SecItemDelete((__bridge CFDictionaryRef)keyQuery);
+
+ // When item is not found, it should NOT be considered as an error. The operation should
+ // continue.
+ if (status != noErr && status != errSecItemNotFound) {
+ FIRInstallationsItemSetErrorToPointer(
+ [FIRInstallationsErrorUtil keychainErrorWithFunction:@"SecItemDelete" status:status],
+ outError);
+ return NO;
+ }
+
+ return YES;
+}
+
+- (NSDictionary *)keyPairQueryWithTag:(NSString *)tag returnData:(BOOL)shouldReturnData {
+ NSMutableDictionary *query = [NSMutableDictionary dictionary];
+ NSData *tagData = [tag dataUsingEncoding:NSUTF8StringEncoding];
+
+ query[(__bridge id)kSecClass] = (__bridge id)kSecClassKey;
+ query[(__bridge id)kSecAttrApplicationTag] = tagData;
+ query[(__bridge id)kSecAttrKeyType] = (__bridge id)kSecAttrKeyTypeRSA;
+ if (shouldReturnData) {
+ query[(__bridge id)kSecReturnData] = @(YES);
+ }
+
+#if TARGET_OS_OSX
+ if (self.keychainRef) {
+ query[(__bridge NSString *)kSecMatchSearchList] = @[ (__bridge id)(self.keychainRef) ];
+ }
+#endif // TARGET_OSX
+
+ return query;
+}
+
+- (NSString *)keychainKeyTagWithPrefix:(NSString *)prefix {
+ NSString *mainAppBundleID = [[NSBundle mainBundle] bundleIdentifier];
+ if (mainAppBundleID.length == 0) {
+ return nil;
+ }
+ return [NSString stringWithFormat:@"%@%@", prefix, mainAppBundleID];
+}
+
+- (NSString *)mainbundleIdentifier {
+ NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
+ if (!bundleIdentifier.length) {
+ return nil;
+ }
+ return bundleIdentifier;
+}
+
+#pragma mark - Plist
+
+- (BOOL)deleteIIDFlagFromPlist:(NSError **)outError {
+ NSString *path = [self plistPath];
+ if (![[NSFileManager defaultManager] fileExistsAtPath:path]) {
+ return YES;
+ }
+
+ NSMutableDictionary *plistContent = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
+ plistContent[kFIRInstallationsIIDCreationTimePlistKey] = nil;
+
+ if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, *)) {
+ return [plistContent writeToURL:[NSURL fileURLWithPath:path] error:outError];
+ }
+
+ return [plistContent writeToFile:path atomically:YES];
+}
+
+- (BOOL)hasPlistIIDFlag {
+ NSString *path = [self plistPath];
+ if (![[NSFileManager defaultManager] fileExistsAtPath:path]) {
+ return NO;
+ }
+
+ NSDictionary *plistContent = [[NSDictionary alloc] initWithContentsOfFile:path];
+ return plistContent[kFIRInstallationsIIDCreationTimePlistKey] != nil;
+}
+
+- (NSString *)plistPath {
+ NSString *plistNameWithExtension = @"com.google.iid-keypair.plist";
+ NSString *_subDirectoryName = @"Google/FirebaseInstanceID";
+
+ NSArray *directoryPaths =
+ NSSearchPathForDirectoriesInDomains([self supportedDirectory], NSUserDomainMask, YES);
+ NSArray *components = @[ directoryPaths.lastObject, _subDirectoryName, plistNameWithExtension ];
+
+ return [NSString pathWithComponents:components];
+}
+
+- (NSSearchPathDirectory)supportedDirectory {
+#if TARGET_OS_TV
+ return NSCachesDirectory;
+#else
+ return NSApplicationSupportDirectory;
+#endif
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.h
new file mode 100644
index 00000000..ed98e3d7
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FBLPromise<ValueType>;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * The class reads a default IID token from IID store if available.
+ */
+@interface FIRInstallationsIIDTokenStore : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
+
+- (instancetype)initWithGCMSenderID:(NSString *)GCMSenderID;
+
+- (FBLPromise<NSString *> *)existingIIDDefaultToken;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.m b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.m
new file mode 100644
index 00000000..7d622635
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.m
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.h"
+
+#if __has_include(<FBLPromises/FBLPromises.h>)
+#import <FBLPromises/FBLPromises.h>
+#else
+#import "FBLPromises.h"
+#endif
+
+#import "GoogleUtilities/Environment/Private/GULKeychainUtils.h"
+
+#import "FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h"
+
+static NSString *const kFIRInstallationsIIDTokenKeychainId = @"com.google.iid-tokens";
+
+@interface FIRInstallationsIIDTokenInfo : NSObject <NSSecureCoding>
+@property(nonatomic, nullable, copy) NSString *token;
+@end
+
+@implementation FIRInstallationsIIDTokenInfo
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (void)encodeWithCoder:(nonnull NSCoder *)coder {
+}
+
+- (nullable instancetype)initWithCoder:(nonnull NSCoder *)coder {
+ self = [super init];
+ if (self) {
+ _token = [coder decodeObjectOfClass:[NSString class] forKey:@"token"];
+ }
+ return self;
+}
+
+@end
+
+@interface FIRInstallationsIIDTokenStore ()
+@property(nonatomic, readonly) NSString *GCMSenderID;
+@end
+
+@implementation FIRInstallationsIIDTokenStore
+
+- (instancetype)initWithGCMSenderID:(NSString *)GCMSenderID {
+ self = [super init];
+ if (self) {
+ _GCMSenderID = GCMSenderID;
+ }
+ return self;
+}
+
+- (FBLPromise<NSString *> *)existingIIDDefaultToken {
+ return [[FBLPromise onQueue:dispatch_get_global_queue(QOS_CLASS_UTILITY, 0)
+ do:^id _Nullable {
+ return [self IIDDefaultTokenData];
+ }] onQueue:dispatch_get_global_queue(QOS_CLASS_UTILITY, 0)
+ then:^id _Nullable(NSData *_Nullable keychainData) {
+ return [self IIDCheckinWithData:keychainData];
+ }];
+}
+
+- (FBLPromise<NSString *> *)IIDCheckinWithData:(NSData *)data {
+ FBLPromise<NSString *> *resultPromise = [FBLPromise pendingPromise];
+
+ NSError *archiverError;
+ NSKeyedUnarchiver *unarchiver;
+ if (@available(iOS 11.0, tvOS 11.0, macOS 10.13, *)) {
+ unarchiver = [[NSKeyedUnarchiver alloc] initForReadingFromData:data error:&archiverError];
+ } else {
+ @try {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
+#pragma clang diagnostic pop
+ } @catch (NSException *exception) {
+ archiverError = [FIRInstallationsErrorUtil keyedArchiverErrorWithException:exception];
+ }
+ }
+
+ if (!unarchiver) {
+ NSError *error = archiverError ?: [FIRInstallationsErrorUtil corruptedIIDTokenData];
+ [resultPromise reject:error];
+ return resultPromise;
+ }
+
+ [unarchiver setClass:[FIRInstallationsIIDTokenInfo class] forClassName:@"FIRInstanceIDTokenInfo"];
+ FIRInstallationsIIDTokenInfo *IIDTokenInfo =
+ [unarchiver decodeObjectOfClass:[FIRInstallationsIIDTokenInfo class]
+ forKey:NSKeyedArchiveRootObjectKey];
+
+ if (IIDTokenInfo.token.length < 1) {
+ [resultPromise reject:[FIRInstallationsErrorUtil corruptedIIDTokenData]];
+ return resultPromise;
+ }
+
+ [resultPromise fulfill:IIDTokenInfo.token];
+
+ return resultPromise;
+}
+
+- (FBLPromise<NSData *> *)IIDDefaultTokenData {
+ FBLPromise<NSData *> *resultPromise = [FBLPromise pendingPromise];
+
+ NSMutableDictionary *keychainQuery = [self IIDDefaultTokenDataKeychainQuery];
+ NSError *error;
+ NSData *data = [GULKeychainUtils getItemWithQuery:keychainQuery error:&error];
+
+ if (data) {
+ [resultPromise fulfill:data];
+ return resultPromise;
+ } else {
+ NSError *outError = error ?: [FIRInstallationsErrorUtil corruptedIIDTokenData];
+ [resultPromise reject:outError];
+ return resultPromise;
+ }
+}
+
+- (NSMutableDictionary *)IIDDefaultTokenDataKeychainQuery {
+ NSDictionary *query = @{(__bridge id)kSecClass : (__bridge id)kSecClassGenericPassword};
+
+ NSMutableDictionary *finalQuery = [NSMutableDictionary dictionaryWithDictionary:query];
+ finalQuery[(__bridge NSString *)kSecAttrGeneric] = kFIRInstallationsIIDTokenKeychainId;
+
+ NSString *account = [self IIDAppIdentifier];
+ if ([account length]) {
+ finalQuery[(__bridge NSString *)kSecAttrAccount] = account;
+ }
+
+ finalQuery[(__bridge NSString *)kSecAttrService] =
+ [self serviceKeyForAuthorizedEntity:self.GCMSenderID scope:@"*"];
+ return finalQuery;
+}
+
+- (NSString *)IIDAppIdentifier {
+ return [[NSBundle mainBundle] bundleIdentifier] ?: @"";
+}
+
+- (NSString *)serviceKeyForAuthorizedEntity:(NSString *)authorizedEntity scope:(NSString *)scope {
+ return [NSString stringWithFormat:@"%@:%@", authorizedEntity, scope];
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.h
new file mode 100644
index 00000000..b45475d1
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FBLPromise<ValueType>;
+@class FIRInstallationsItem;
+
+NS_ASSUME_NONNULL_BEGIN
+
+FOUNDATION_EXPORT NSString *const kFIRInstallationsUserAgentKey;
+
+FOUNDATION_EXPORT NSString *const kFIRInstallationsHeartbeatKey;
+
+/**
+ * The class is responsible for interacting with HTTP REST API for Installations.
+ */
+@interface FIRInstallationsAPIService : NSObject
+
+/**
+ * The default initializer.
+ * @param APIKey The Firebase project API key (see `FIROptions.APIKey`).
+ * @param projectID The Firebase project ID (see `FIROptions.projectID`).
+ */
+- (instancetype)initWithAPIKey:(NSString *)APIKey projectID:(NSString *)projectID;
+
+/**
+ * Sends a request to register a new FID to get auth and refresh tokens.
+ * @param installation The `FIRInstallationsItem` instance with the FID to register.
+ * @return A promise that is resolved with a new `FIRInstallationsItem` instance with valid tokens.
+ * It is rejected with an error in case of a failure.
+ */
+- (FBLPromise<FIRInstallationsItem *> *)registerInstallation:(FIRInstallationsItem *)installation;
+
+- (FBLPromise<FIRInstallationsItem *> *)refreshAuthTokenForInstallation:
+ (FIRInstallationsItem *)installation;
+
+/**
+ * Sends a request to delete the installation, related auth tokens and all related data from the
+ * server.
+ * @param installation The installation to delete.
+ * @return Returns a promise that is resolved with the passed installation on successful deletion or
+ * is rejected with an error otherwise.
+ */
+- (FBLPromise<FIRInstallationsItem *> *)deleteInstallation:(FIRInstallationsItem *)installation;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.m b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.m
new file mode 100644
index 00000000..8f38e0c6
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.m
@@ -0,0 +1,361 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.h"
+
+#import "FirebaseInstallations/Source/Library/Public/FIRInstallationsVersion.h"
+
+#if __has_include(<FBLPromises/FBLPromises.h>)
+#import <FBLPromises/FBLPromises.h>
+#else
+#import "FBLPromises.h"
+#endif
+
+#import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
+#import "FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h"
+#import "FirebaseInstallations/Source/Library/FIRInstallationsLogger.h"
+#import "FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.h"
+
+NSString *const kFIRInstallationsAPIBaseURL = @"https://firebaseinstallations.googleapis.com";
+NSString *const kFIRInstallationsAPIKey = @"X-Goog-Api-Key";
+NSString *const kFIRInstallationsBundleId = @"X-Ios-Bundle-Identifier";
+NSString *const kFIRInstallationsIIDMigrationAuthHeader = @"x-goog-fis-ios-iid-migration-auth";
+NSString *const kFIRInstallationsHeartbeatKey = @"X-firebase-client-log-type";
+NSString *const kFIRInstallationsHeartbeatTag = @"fire-installations";
+NSString *const kFIRInstallationsUserAgentKey = @"X-firebase-client";
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRInstallationsURLSessionResponse : NSObject
+@property(nonatomic) NSHTTPURLResponse *HTTPResponse;
+@property(nonatomic) NSData *data;
+
+- (instancetype)initWithResponse:(NSHTTPURLResponse *)response data:(nullable NSData *)data;
+@end
+
+@implementation FIRInstallationsURLSessionResponse
+
+- (instancetype)initWithResponse:(NSHTTPURLResponse *)response data:(nullable NSData *)data {
+ self = [super init];
+ if (self) {
+ _HTTPResponse = response;
+ _data = data ?: [NSData data];
+ }
+ return self;
+}
+
+@end
+
+@interface FIRInstallationsAPIService ()
+@property(nonatomic, readonly) NSURLSession *URLSession;
+@property(nonatomic, readonly) NSString *APIKey;
+@property(nonatomic, readonly) NSString *projectID;
+@end
+
+NS_ASSUME_NONNULL_END
+
+@implementation FIRInstallationsAPIService
+
+- (instancetype)initWithAPIKey:(NSString *)APIKey projectID:(NSString *)projectID {
+ NSURLSession *URLSession = [NSURLSession
+ sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
+ return [self initWithURLSession:URLSession APIKey:APIKey projectID:projectID];
+}
+
+/// The initializer for tests.
+- (instancetype)initWithURLSession:(NSURLSession *)URLSession
+ APIKey:(NSString *)APIKey
+ projectID:(NSString *)projectID {
+ self = [super init];
+ if (self) {
+ _URLSession = URLSession;
+ _APIKey = [APIKey copy];
+ _projectID = [projectID copy];
+ }
+ return self;
+}
+
+#pragma mark - Public
+
+- (FBLPromise<FIRInstallationsItem *> *)registerInstallation:(FIRInstallationsItem *)installation {
+ return [self registerRequestWithInstallation:installation]
+ .then(^id _Nullable(NSURLRequest *_Nullable request) {
+ return [self sendURLRequest:request];
+ })
+ .then(^id _Nullable(FIRInstallationsURLSessionResponse *response) {
+ return [self registeredInstallationWithInstallation:installation serverResponse:response];
+ });
+}
+
+- (FBLPromise<FIRInstallationsItem *> *)refreshAuthTokenForInstallation:
+ (FIRInstallationsItem *)installation {
+ return [self authTokenRequestWithInstallation:installation]
+ .then(^id _Nullable(NSURLRequest *_Nullable request) {
+ return [self sendURLRequest:request];
+ })
+ .then(^FBLPromise<FIRInstallationsStoredAuthToken *> *(
+ FIRInstallationsURLSessionResponse *response) {
+ return [self authTokenWithServerResponse:response];
+ })
+ .then(^FIRInstallationsItem *(FIRInstallationsStoredAuthToken *authToken) {
+ FIRInstallationsItem *updatedInstallation = [installation copy];
+ updatedInstallation.authToken = authToken;
+ return updatedInstallation;
+ });
+}
+
+- (FBLPromise<FIRInstallationsItem *> *)deleteInstallation:(FIRInstallationsItem *)installation {
+ return [self deleteInstallationRequestWithInstallation:installation]
+ .then(^id _Nullable(NSURLRequest *_Nullable request) {
+ return [self sendURLRequest:request];
+ })
+ .then(^id _Nullable(FIRInstallationsURLSessionResponse *_Nullable value) {
+ // Return the original installation on success.
+ return installation;
+ });
+}
+
+#pragma mark - Register Installation
+
+- (FBLPromise<NSURLRequest *> *)registerRequestWithInstallation:
+ (FIRInstallationsItem *)installation {
+ NSString *URLString = [NSString stringWithFormat:@"%@/v1/projects/%@/installations/",
+ kFIRInstallationsAPIBaseURL, self.projectID];
+ NSURL *URL = [NSURL URLWithString:URLString];
+
+ NSDictionary *bodyDict = @{
+ @"fid" : installation.firebaseInstallationID,
+ @"authVersion" : @"FIS_v2",
+ @"appId" : installation.appID,
+ @"sdkVersion" : [self SDKVersion]
+ };
+
+ NSDictionary *headers;
+ if (installation.IIDDefaultToken) {
+ headers = @{kFIRInstallationsIIDMigrationAuthHeader : installation.IIDDefaultToken};
+ }
+
+ return [self requestWithURL:URL
+ HTTPMethod:@"POST"
+ bodyDict:bodyDict
+ refreshToken:nil
+ additionalHeaders:headers];
+}
+
+- (FBLPromise<FIRInstallationsItem *> *)
+ registeredInstallationWithInstallation:(FIRInstallationsItem *)installation
+ serverResponse:(FIRInstallationsURLSessionResponse *)response {
+ return [FBLPromise do:^id {
+ FIRLogDebug(kFIRLoggerInstallations, kFIRInstallationsMessageCodeParsingAPIResponse,
+ @"Parsing server response for %@.", response.HTTPResponse.URL);
+ NSError *error;
+ FIRInstallationsItem *registeredInstallation =
+ [installation registeredInstallationWithJSONData:response.data
+ date:[NSDate date]
+ error:&error];
+ if (registeredInstallation == nil) {
+ FIRLogDebug(kFIRLoggerInstallations,
+ kFIRInstallationsMessageCodeAPIResponseParsingInstallationFailed,
+ @"Failed to parse FIRInstallationsItem: %@.", error);
+ return error;
+ }
+
+ FIRLogDebug(kFIRLoggerInstallations,
+ kFIRInstallationsMessageCodeAPIResponseParsingInstallationSucceed,
+ @"FIRInstallationsItem parsed successfully.");
+ return registeredInstallation;
+ }];
+}
+
+#pragma mark - Auth token
+
+- (FBLPromise<NSURLRequest *> *)authTokenRequestWithInstallation:
+ (FIRInstallationsItem *)installation {
+ NSString *URLString =
+ [NSString stringWithFormat:@"%@/v1/projects/%@/installations/%@/authTokens:generate",
+ kFIRInstallationsAPIBaseURL, self.projectID,
+ installation.firebaseInstallationID];
+ NSURL *URL = [NSURL URLWithString:URLString];
+
+ NSDictionary *bodyDict = @{@"installation" : @{@"sdkVersion" : [self SDKVersion]}};
+ return [self requestWithURL:URL
+ HTTPMethod:@"POST"
+ bodyDict:bodyDict
+ refreshToken:installation.refreshToken];
+}
+
+- (FBLPromise<FIRInstallationsStoredAuthToken *> *)authTokenWithServerResponse:
+ (FIRInstallationsURLSessionResponse *)response {
+ return [FBLPromise do:^id {
+ FIRLogDebug(kFIRLoggerInstallations, kFIRInstallationsMessageCodeParsingAPIResponse,
+ @"Parsing server response for %@.", response.HTTPResponse.URL);
+ NSError *error;
+ FIRInstallationsStoredAuthToken *token =
+ [FIRInstallationsItem authTokenWithGenerateTokenAPIJSONData:response.data
+ date:[NSDate date]
+ error:&error];
+ if (token == nil) {
+ FIRLogDebug(kFIRLoggerInstallations,
+ kFIRInstallationsMessageCodeAPIResponseParsingAuthTokenFailed,
+ @"Failed to parse FIRInstallationsStoredAuthToken: %@.", error);
+ return error;
+ }
+
+ FIRLogDebug(kFIRLoggerInstallations,
+ kFIRInstallationsMessageCodeAPIResponseParsingAuthTokenSucceed,
+ @"FIRInstallationsStoredAuthToken parsed successfully.");
+ return token;
+ }];
+}
+
+#pragma mark - Delete Installation
+
+- (FBLPromise<NSURLRequest *> *)deleteInstallationRequestWithInstallation:
+ (FIRInstallationsItem *)installation {
+ NSString *URLString = [NSString stringWithFormat:@"%@/v1/projects/%@/installations/%@/",
+ kFIRInstallationsAPIBaseURL, self.projectID,
+ installation.firebaseInstallationID];
+ NSURL *URL = [NSURL URLWithString:URLString];
+
+ return [self requestWithURL:URL
+ HTTPMethod:@"DELETE"
+ bodyDict:@{}
+ refreshToken:installation.refreshToken];
+}
+
+#pragma mark - URL Request
+- (FBLPromise<NSURLRequest *> *)requestWithURL:(NSURL *)requestURL
+ HTTPMethod:(NSString *)HTTPMethod
+ bodyDict:(NSDictionary *)bodyDict
+ refreshToken:(nullable NSString *)refreshToken {
+ return [self requestWithURL:requestURL
+ HTTPMethod:HTTPMethod
+ bodyDict:bodyDict
+ refreshToken:refreshToken
+ additionalHeaders:nil];
+}
+
+- (FBLPromise<NSURLRequest *> *)requestWithURL:(NSURL *)requestURL
+ HTTPMethod:(NSString *)HTTPMethod
+ bodyDict:(NSDictionary *)bodyDict
+ refreshToken:(nullable NSString *)refreshToken
+ additionalHeaders:(nullable NSDictionary<NSString *, NSString *> *)
+ additionalHeaders {
+ return [FBLPromise
+ onQueue:dispatch_get_global_queue(QOS_CLASS_UTILITY, 0)
+ do:^id _Nullable {
+ __block NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:requestURL];
+ request.HTTPMethod = HTTPMethod;
+ NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
+ [request addValue:self.APIKey forHTTPHeaderField:kFIRInstallationsAPIKey];
+ [request addValue:bundleIdentifier forHTTPHeaderField:kFIRInstallationsBundleId];
+ [self setJSONHTTPBody:bodyDict forRequest:request];
+ if (refreshToken) {
+ NSString *authHeader = [NSString stringWithFormat:@"FIS_v2 %@", refreshToken];
+ [request setValue:authHeader forHTTPHeaderField:@"Authorization"];
+ }
+ // User agent Header.
+ [request setValue:[FIRApp firebaseUserAgent]
+ forHTTPHeaderField:kFIRInstallationsUserAgentKey];
+ // Heartbeat Header.
+ [request setValue:@([FIRHeartbeatInfo
+ heartbeatCodeForTag:kFIRInstallationsHeartbeatTag])
+ .stringValue
+ forHTTPHeaderField:kFIRInstallationsHeartbeatKey];
+ [additionalHeaders
+ enumerateKeysAndObjectsUsingBlock:^(NSString *_Nonnull key, NSString *_Nonnull obj,
+ BOOL *_Nonnull stop) {
+ [request setValue:obj forHTTPHeaderField:key];
+ }];
+
+ return [request copy];
+ }];
+}
+
+- (FBLPromise<FIRInstallationsURLSessionResponse *> *)URLRequestPromise:(NSURLRequest *)request {
+ return [[FBLPromise async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
+ FIRLogDebug(kFIRLoggerInstallations, kFIRInstallationsMessageCodeSendAPIRequest,
+ @"Sending request: %@, body:%@, headers: %@.", request,
+ [[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding],
+ request.allHTTPHeaderFields);
+ [[self.URLSession
+ dataTaskWithRequest:request
+ completionHandler:^(NSData *_Nullable data, NSURLResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ FIRLogDebug(kFIRLoggerInstallations,
+ kFIRInstallationsMessageCodeAPIRequestNetworkError,
+ @"Request failed: %@, error: %@.", request, error);
+ reject(error);
+ } else {
+ FIRLogDebug(kFIRLoggerInstallations, kFIRInstallationsMessageCodeAPIRequestResponse,
+ @"Request response received: %@, error: %@, body: %@.", request, error,
+ [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
+ fulfill([[FIRInstallationsURLSessionResponse alloc]
+ initWithResponse:(NSHTTPURLResponse *)response
+ data:data]);
+ }
+ }] resume];
+ }] then:^id _Nullable(FIRInstallationsURLSessionResponse *response) {
+ return [self validateHTTPResponseStatusCode:response];
+ }];
+}
+
+- (FBLPromise<FIRInstallationsURLSessionResponse *> *)validateHTTPResponseStatusCode:
+ (FIRInstallationsURLSessionResponse *)response {
+ NSInteger statusCode = response.HTTPResponse.statusCode;
+ return [FBLPromise do:^id _Nullable {
+ if (statusCode < 200 || statusCode >= 300) {
+ FIRLogDebug(kFIRLoggerInstallations, kFIRInstallationsMessageCodeUnexpectedAPIRequestResponse,
+ @"Unexpected API response: %@, body: %@.", response.HTTPResponse,
+ [[NSString alloc] initWithData:response.data encoding:NSUTF8StringEncoding]);
+ return [FIRInstallationsErrorUtil APIErrorWithHTTPResponse:response.HTTPResponse
+ data:response.data];
+ }
+ return response;
+ }];
+}
+
+- (FBLPromise<FIRInstallationsURLSessionResponse *> *)sendURLRequest:(NSURLRequest *)request {
+ return [FBLPromise attempts:1
+ delay:1
+ condition:^BOOL(NSInteger remainingAttempts, NSError *_Nonnull error) {
+ return [FIRInstallationsErrorUtil isAPIError:error withHTTPCode:500];
+ }
+ retry:^id _Nullable {
+ return [self URLRequestPromise:request];
+ }];
+}
+
+- (NSString *)SDKVersion {
+ return [NSString stringWithFormat:@"i:%s", FIRInstallationsVersionStr];
+}
+
+#pragma mark - JSON
+
+- (void)setJSONHTTPBody:(NSDictionary<NSString *, id> *)body
+ forRequest:(NSMutableURLRequest *)request {
+ [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
+
+ NSError *error;
+ NSData *JSONData = [NSJSONSerialization dataWithJSONObject:body options:0 error:&error];
+ if (JSONData == nil) {
+ // TODO: Log or return an error.
+ }
+ request.HTTPBody = JSONData;
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.h
new file mode 100644
index 00000000..0e4af55e
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseInstallations/Source/Library/FIRInstallationsItem.h"
+
+@class FIRInstallationsStoredAuthToken;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRInstallationsItem (RegisterInstallationAPI)
+
+/**
+ * Parses and validates the Register Installation API response and returns a corresponding
+ * `FIRInstallationsItem` instance on success.
+ * @param JSONData The data with JSON encoded API response.
+ * @param date The Auth Token expiration date will be calculated as `date` +
+ * `response.authToken.expiresIn`. For most of the cases `[NSDate date]` should be passed there. A
+ * different value may be passed e.g. for unit tests.
+ * @param outError A pointer to assign a specific `NSError` instance in case of failure. No error is
+ * assigned in case of success.
+ * @return Returns a new `FIRInstallationsItem` instance in the success case or `nil` otherwise.
+ */
+- (nullable FIRInstallationsItem *)registeredInstallationWithJSONData:(NSData *)JSONData
+ date:(NSDate *)date
+ error:
+ (NSError *_Nullable *)outError;
+
++ (nullable FIRInstallationsStoredAuthToken *)authTokenWithGenerateTokenAPIJSONData:(NSData *)data
+ date:(NSDate *)date
+ error:(NSError **)
+ outError;
+
++ (nullable FIRInstallationsStoredAuthToken *)authTokenWithJSONDict:
+ (NSDictionary<NSString *, id> *)dict
+ date:(NSDate *)date
+ error:(NSError **)outError;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.m b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.m
new file mode 100644
index 00000000..e5c73601
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.m
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.h"
+
+#import "FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h"
+#import "FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.h"
+
+@implementation FIRInstallationsItem (RegisterInstallationAPI)
+
+- (nullable FIRInstallationsItem *)
+ registeredInstallationWithJSONData:(NSData *)data
+ date:(NSDate *)date
+ error:(NSError *__autoreleasing _Nullable *_Nullable)outError {
+ NSDictionary *responseJSON = [FIRInstallationsItem dictionaryFromJSONData:data error:outError];
+ if (!responseJSON) {
+ return nil;
+ }
+
+ NSString *refreshToken = [FIRInstallationsItem validStringOrNilForKey:@"refreshToken"
+ fromDict:responseJSON];
+ if (refreshToken == nil) {
+ FIRInstallationsItemSetErrorToPointer(
+ [FIRInstallationsErrorUtil FIDRegistrationErrorWithResponseMissingField:@"refreshToken"],
+ outError);
+ return nil;
+ }
+
+ NSDictionary *authTokenDict = responseJSON[@"authToken"];
+ if (![authTokenDict isKindOfClass:[NSDictionary class]]) {
+ FIRInstallationsItemSetErrorToPointer(
+ [FIRInstallationsErrorUtil FIDRegistrationErrorWithResponseMissingField:@"authToken"],
+ outError);
+ return nil;
+ }
+
+ FIRInstallationsStoredAuthToken *authToken =
+ [FIRInstallationsItem authTokenWithJSONDict:authTokenDict date:date error:outError];
+ if (authToken == nil) {
+ return nil;
+ }
+
+ FIRInstallationsItem *installation =
+ [[FIRInstallationsItem alloc] initWithAppID:self.appID firebaseAppName:self.firebaseAppName];
+ NSString *installationID = [FIRInstallationsItem validStringOrNilForKey:@"fid"
+ fromDict:responseJSON];
+ installation.firebaseInstallationID = installationID ?: self.firebaseInstallationID;
+ installation.refreshToken = refreshToken;
+ installation.authToken = authToken;
+ installation.registrationStatus = FIRInstallationStatusRegistered;
+
+ return installation;
+}
+
+#pragma mark - Auth token
+
++ (nullable FIRInstallationsStoredAuthToken *)authTokenWithGenerateTokenAPIJSONData:(NSData *)data
+ date:(NSDate *)date
+ error:(NSError **)
+ outError {
+ NSDictionary *dict = [self dictionaryFromJSONData:data error:outError];
+ if (!dict) {
+ return nil;
+ }
+
+ return [self authTokenWithJSONDict:dict date:date error:outError];
+}
+
++ (nullable FIRInstallationsStoredAuthToken *)authTokenWithJSONDict:
+ (NSDictionary<NSString *, id> *)dict
+ date:(NSDate *)date
+ error:(NSError **)outError {
+ NSString *token = [self validStringOrNilForKey:@"token" fromDict:dict];
+ if (token == nil) {
+ FIRInstallationsItemSetErrorToPointer(
+ [FIRInstallationsErrorUtil FIDRegistrationErrorWithResponseMissingField:@"authToken.token"],
+ outError);
+ return nil;
+ }
+
+ NSString *expiresInString = [self validStringOrNilForKey:@"expiresIn" fromDict:dict];
+ if (expiresInString == nil) {
+ FIRInstallationsItemSetErrorToPointer(
+ [FIRInstallationsErrorUtil
+ FIDRegistrationErrorWithResponseMissingField:@"authToken.expiresIn"],
+ outError);
+ return nil;
+ }
+
+ // The response should contain the string in format like "604800s".
+ // The server should never response with anything else except seconds.
+ // Just drop the last character and parse a number from string.
+ NSString *expiresInSeconds = [expiresInString substringToIndex:expiresInString.length - 1];
+ NSTimeInterval expiresIn = [expiresInSeconds doubleValue];
+ NSDate *expirationDate = [date dateByAddingTimeInterval:expiresIn];
+
+ FIRInstallationsStoredAuthToken *authToken = [[FIRInstallationsStoredAuthToken alloc] init];
+ authToken.status = FIRInstallationsAuthTokenStatusTokenReceived;
+ authToken.token = token;
+ authToken.expirationDate = expirationDate;
+
+ return authToken;
+}
+
+#pragma mark - JSON
+
++ (nullable NSDictionary<NSString *, id> *)dictionaryFromJSONData:(NSData *)data
+ error:(NSError **)outError {
+ NSError *error;
+ NSDictionary *responseJSON = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
+
+ if (![responseJSON isKindOfClass:[NSDictionary class]]) {
+ FIRInstallationsItemSetErrorToPointer([FIRInstallationsErrorUtil JSONSerializationError:error],
+ outError);
+ return nil;
+ }
+
+ return responseJSON;
+}
+
++ (NSString *)validStringOrNilForKey:(NSString *)key fromDict:(NSDictionary *)dict {
+ NSString *string = dict[key];
+ if ([string isKindOfClass:[NSString class]] && string.length > 0) {
+ return string;
+ }
+ return nil;
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.h
new file mode 100644
index 00000000..ab2092d2
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class FBLPromise<ValueType>;
+@class FIRInstallationsItem;
+
+/**
+ * The class is responsible for managing FID for a given `FIRApp`.
+ */
+@interface FIRInstallationsIDController : NSObject
+
+- (instancetype)initWithGoogleAppID:(NSString *)appID
+ appName:(NSString *)appName
+ APIKey:(NSString *)APIKey
+ projectID:(NSString *)projectID
+ GCMSenderID:(NSString *)GCMSenderID
+ accessGroup:(nullable NSString *)accessGroup;
+
+- (FBLPromise<FIRInstallationsItem *> *)getInstallationItem;
+
+- (FBLPromise<FIRInstallationsItem *> *)getAuthTokenForcingRefresh:(BOOL)forceRefresh;
+
+- (FBLPromise<NSNull *> *)deleteInstallation;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.m b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.m
new file mode 100644
index 00000000..b6ea4b24
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.m
@@ -0,0 +1,480 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.h"
+
+#if __has_include(<FBLPromises/FBLPromises.h>)
+#import <FBLPromises/FBLPromises.h>
+#else
+#import "FBLPromises.h"
+#endif
+
+#import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
+#import "GoogleUtilities/Environment/Private/GULKeychainStorage.h"
+
+#import "FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h"
+#import "FirebaseInstallations/Source/Library/FIRInstallationsItem.h"
+#import "FirebaseInstallations/Source/Library/FIRInstallationsLogger.h"
+#import "FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.h"
+#import "FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.h"
+#import "FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.h"
+#import "FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.h"
+#import "FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.h"
+
+#import "FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.h"
+#import "FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.h"
+
+const NSNotificationName FIRInstallationIDDidChangeNotification =
+ @"FIRInstallationIDDidChangeNotification";
+NSString *const kFIRInstallationIDDidChangeNotificationAppNameKey =
+ @"FIRInstallationIDDidChangeNotification";
+
+NSTimeInterval const kFIRInstallationsTokenExpirationThreshold = 60 * 60; // 1 hour.
+
+static NSString *const kKeychainService = @"com.firebase.FIRInstallations.installations";
+
+@interface FIRInstallationsIDController ()
+@property(nonatomic, readonly) NSString *appID;
+@property(nonatomic, readonly) NSString *appName;
+
+@property(nonatomic, readonly) FIRInstallationsStore *installationsStore;
+@property(nonatomic, readonly) FIRInstallationsIIDStore *IIDStore;
+@property(nonatomic, readonly) FIRInstallationsIIDTokenStore *IIDTokenStore;
+
+@property(nonatomic, readonly) FIRInstallationsAPIService *APIService;
+
+@property(nonatomic, readonly) FIRInstallationsSingleOperationPromiseCache<FIRInstallationsItem *>
+ *getInstallationPromiseCache;
+@property(nonatomic, readonly)
+ FIRInstallationsSingleOperationPromiseCache<FIRInstallationsItem *> *authTokenPromiseCache;
+@property(nonatomic, readonly) FIRInstallationsSingleOperationPromiseCache<FIRInstallationsItem *>
+ *authTokenForcingRefreshPromiseCache;
+@property(nonatomic, readonly)
+ FIRInstallationsSingleOperationPromiseCache<NSNull *> *deleteInstallationPromiseCache;
+@end
+
+@implementation FIRInstallationsIDController
+
+- (instancetype)initWithGoogleAppID:(NSString *)appID
+ appName:(NSString *)appName
+ APIKey:(NSString *)APIKey
+ projectID:(NSString *)projectID
+ GCMSenderID:(NSString *)GCMSenderID
+ accessGroup:(nullable NSString *)accessGroup {
+ NSString *serviceName = [FIRInstallationsIDController keychainServiceWithAppID:appID];
+ GULKeychainStorage *secureStorage = [[GULKeychainStorage alloc] initWithService:serviceName];
+ FIRInstallationsStore *installationsStore =
+ [[FIRInstallationsStore alloc] initWithSecureStorage:secureStorage accessGroup:accessGroup];
+
+ // Use `GCMSenderID` as project identifier when `projectID` is not available.
+ NSString *APIServiceProjectID = (projectID.length > 0) ? projectID : GCMSenderID;
+ FIRInstallationsAPIService *apiService =
+ [[FIRInstallationsAPIService alloc] initWithAPIKey:APIKey projectID:APIServiceProjectID];
+
+ FIRInstallationsIIDStore *IIDStore = [[FIRInstallationsIIDStore alloc] init];
+ FIRInstallationsIIDTokenStore *IIDCheckingStore =
+ [[FIRInstallationsIIDTokenStore alloc] initWithGCMSenderID:GCMSenderID];
+
+ return [self initWithGoogleAppID:appID
+ appName:appName
+ installationsStore:installationsStore
+ APIService:apiService
+ IIDStore:IIDStore
+ IIDTokenStore:IIDCheckingStore];
+}
+
+/// The initializer is supposed to be used by tests to inject `installationsStore`.
+- (instancetype)initWithGoogleAppID:(NSString *)appID
+ appName:(NSString *)appName
+ installationsStore:(FIRInstallationsStore *)installationsStore
+ APIService:(FIRInstallationsAPIService *)APIService
+ IIDStore:(FIRInstallationsIIDStore *)IIDStore
+ IIDTokenStore:(FIRInstallationsIIDTokenStore *)IIDTokenStore {
+ self = [super init];
+ if (self) {
+ _appID = appID;
+ _appName = appName;
+ _installationsStore = installationsStore;
+ _APIService = APIService;
+ _IIDStore = IIDStore;
+ _IIDTokenStore = IIDTokenStore;
+
+ __weak FIRInstallationsIDController *weakSelf = self;
+
+ _getInstallationPromiseCache = [[FIRInstallationsSingleOperationPromiseCache alloc]
+ initWithNewOperationHandler:^FBLPromise *_Nonnull {
+ FIRInstallationsIDController *strongSelf = weakSelf;
+ return [strongSelf createGetInstallationItemPromise];
+ }];
+
+ _authTokenPromiseCache = [[FIRInstallationsSingleOperationPromiseCache alloc]
+ initWithNewOperationHandler:^FBLPromise *_Nonnull {
+ FIRInstallationsIDController *strongSelf = weakSelf;
+ return [strongSelf installationWithValidAuthTokenForcingRefresh:NO];
+ }];
+
+ _authTokenForcingRefreshPromiseCache = [[FIRInstallationsSingleOperationPromiseCache alloc]
+ initWithNewOperationHandler:^FBLPromise *_Nonnull {
+ FIRInstallationsIDController *strongSelf = weakSelf;
+ return [strongSelf installationWithValidAuthTokenForcingRefresh:YES];
+ }];
+
+ _deleteInstallationPromiseCache = [[FIRInstallationsSingleOperationPromiseCache alloc]
+ initWithNewOperationHandler:^FBLPromise *_Nonnull {
+ FIRInstallationsIDController *strongSelf = weakSelf;
+ return [strongSelf createDeleteInstallationPromise];
+ }];
+ }
+ return self;
+}
+
+#pragma mark - Get Installation.
+
+- (FBLPromise<FIRInstallationsItem *> *)getInstallationItem {
+ return [self.getInstallationPromiseCache getExistingPendingOrCreateNewPromise];
+}
+
+- (FBLPromise<FIRInstallationsItem *> *)createGetInstallationItemPromise {
+ FIRLogDebug(kFIRLoggerInstallations,
+ kFIRInstallationsMessageCodeNewGetInstallationOperationCreated, @"%s, appName: %@",
+ __PRETTY_FUNCTION__, self.appName);
+
+ FBLPromise<FIRInstallationsItem *> *installationItemPromise =
+ [self getStoredInstallation].recover(^id(NSError *error) {
+ return [self createAndSaveFID];
+ });
+
+ // Initiate registration process on success if needed, but return the installation without waiting
+ // for it.
+ installationItemPromise.then(^id(FIRInstallationsItem *installation) {
+ [self getAuthTokenForcingRefresh:NO];
+ return nil;
+ });
+
+ return installationItemPromise;
+}
+
+- (FBLPromise<FIRInstallationsItem *> *)getStoredInstallation {
+ return [self.installationsStore installationForAppID:self.appID appName:self.appName].validate(
+ ^BOOL(FIRInstallationsItem *installation) {
+ BOOL isValid = NO;
+ switch (installation.registrationStatus) {
+ case FIRInstallationStatusUnregistered:
+ case FIRInstallationStatusRegistered:
+ isValid = YES;
+ break;
+
+ case FIRInstallationStatusUnknown:
+ isValid = NO;
+ break;
+ }
+
+ return isValid;
+ });
+}
+
+- (FBLPromise<FIRInstallationsItem *> *)createAndSaveFID {
+ return [self migrateOrGenerateInstallation]
+ .then(^FBLPromise<FIRInstallationsItem *> *(FIRInstallationsItem *installation) {
+ return [self saveInstallation:installation];
+ })
+ .then(^FIRInstallationsItem *(FIRInstallationsItem *installation) {
+ [self postFIDDidChangeNotification];
+ return installation;
+ });
+}
+
+- (FBLPromise<FIRInstallationsItem *> *)saveInstallation:(FIRInstallationsItem *)installation {
+ return [self.installationsStore saveInstallation:installation].then(
+ ^FIRInstallationsItem *(NSNull *result) {
+ return installation;
+ });
+}
+
+/**
+ * Tries to migrate IID data stored by FirebaseInstanceID SDK or generates a new Installation ID if
+ * not found.
+ */
+- (FBLPromise<FIRInstallationsItem *> *)migrateOrGenerateInstallation {
+ if (![self isDefaultApp]) {
+ // Existing IID should be used only for default FirebaseApp.
+ FIRInstallationsItem *installation =
+ [self createInstallationWithFID:[FIRInstallationsItem generateFID] IIDDefaultToken:nil];
+ return [FBLPromise resolvedWith:installation];
+ }
+
+ return [[[FBLPromise
+ all:@[ [self.IIDStore existingIID], [self.IIDTokenStore existingIIDDefaultToken] ]]
+ then:^id _Nullable(NSArray *_Nullable results) {
+ NSString *existingIID = results[0];
+ NSString *IIDDefaultToken = results[1];
+
+ return [self createInstallationWithFID:existingIID IIDDefaultToken:IIDDefaultToken];
+ }] recover:^id _Nullable(NSError *_Nonnull error) {
+ return [self createInstallationWithFID:[FIRInstallationsItem generateFID] IIDDefaultToken:nil];
+ }];
+}
+
+- (FIRInstallationsItem *)createInstallationWithFID:(NSString *)FID
+ IIDDefaultToken:(nullable NSString *)IIDDefaultToken {
+ FIRInstallationsItem *installation = [[FIRInstallationsItem alloc] initWithAppID:self.appID
+ firebaseAppName:self.appName];
+ installation.firebaseInstallationID = FID;
+ installation.IIDDefaultToken = IIDDefaultToken;
+ installation.registrationStatus = FIRInstallationStatusUnregistered;
+ return installation;
+}
+
+#pragma mark - FID registration
+
+- (FBLPromise<FIRInstallationsItem *> *)registerInstallationIfNeeded:
+ (FIRInstallationsItem *)installation {
+ switch (installation.registrationStatus) {
+ case FIRInstallationStatusRegistered:
+ // Already registered. Do nothing.
+ return [FBLPromise resolvedWith:installation];
+
+ case FIRInstallationStatusUnknown:
+ case FIRInstallationStatusUnregistered:
+ // Registration required. Proceed.
+ break;
+ }
+
+ return [self.APIService registerInstallation:installation]
+ .catch(^(NSError *_Nonnull error) {
+ if ([self doesRegistrationErrorRequireConfigChange:error]) {
+ FIRLogError(kFIRLoggerInstallations,
+ kFIRInstallationsMessageCodeInvalidFirebaseConfiguration,
+ @"Firebase Installation registration failed for app with name: %@, error:\n"
+ @"%@\nPlease make sure you use valid GoogleService-Info.plist",
+ self.appName, error.userInfo[NSLocalizedFailureReasonErrorKey]);
+ }
+ })
+ .then(^id(FIRInstallationsItem *registeredInstallation) {
+ return [self saveInstallation:registeredInstallation];
+ })
+ .then(^FIRInstallationsItem *(FIRInstallationsItem *registeredInstallation) {
+ // Server may respond with a different FID if the sent one cannot be accepted.
+ if (![registeredInstallation.firebaseInstallationID
+ isEqualToString:installation.firebaseInstallationID]) {
+ [self postFIDDidChangeNotification];
+ }
+ return registeredInstallation;
+ });
+}
+
+- (BOOL)doesRegistrationErrorRequireConfigChange:(NSError *)error {
+ FIRInstallationsHTTPError *HTTPError = (FIRInstallationsHTTPError *)error;
+ if (![HTTPError isKindOfClass:[FIRInstallationsHTTPError class]]) {
+ return NO;
+ }
+
+ switch (HTTPError.HTTPResponse.statusCode) {
+ // These are the errors that require Firebase configuration change.
+ case FIRInstallationsRegistrationHTTPCodeInvalidArgument:
+ case FIRInstallationsRegistrationHTTPCodeInvalidAPIKey:
+ case FIRInstallationsRegistrationHTTPCodeAPIKeyToProjectIDMismatch:
+ case FIRInstallationsRegistrationHTTPCodeProjectNotFound:
+ return YES;
+
+ default:
+ return NO;
+ }
+}
+
+#pragma mark - Auth Token
+
+- (FBLPromise<FIRInstallationsItem *> *)getAuthTokenForcingRefresh:(BOOL)forceRefresh {
+ if (forceRefresh || [self.authTokenForcingRefreshPromiseCache getExistingPendingPromise] != nil) {
+ return [self.authTokenForcingRefreshPromiseCache getExistingPendingOrCreateNewPromise];
+ } else {
+ return [self.authTokenPromiseCache getExistingPendingOrCreateNewPromise];
+ }
+}
+
+- (FBLPromise<FIRInstallationsItem *> *)installationWithValidAuthTokenForcingRefresh:
+ (BOOL)forceRefresh {
+ FIRLogDebug(kFIRLoggerInstallations, kFIRInstallationsMessageCodeNewGetAuthTokenOperationCreated,
+ @"-[FIRInstallationsIDController installationWithValidAuthTokenForcingRefresh:%@], "
+ @"appName: %@",
+ @(forceRefresh), self.appName);
+
+ return [self getInstallationItem]
+ .then(^FBLPromise<FIRInstallationsItem *> *(FIRInstallationsItem *installation) {
+ return [self registerInstallationIfNeeded:installation];
+ })
+ .then(^id(FIRInstallationsItem *registeredInstallation) {
+ BOOL isTokenExpiredOrExpiresSoon =
+ [registeredInstallation.authToken.expirationDate timeIntervalSinceDate:[NSDate date]] <
+ kFIRInstallationsTokenExpirationThreshold;
+ if (forceRefresh || isTokenExpiredOrExpiresSoon) {
+ return [self refreshAuthTokenForInstallation:registeredInstallation];
+ } else {
+ return registeredInstallation;
+ }
+ })
+ .recover(^id(NSError *error) {
+ return [self regenerateFIDOnRefreshTokenErrorIfNeeded:error];
+ });
+}
+
+- (FBLPromise<FIRInstallationsItem *> *)refreshAuthTokenForInstallation:
+ (FIRInstallationsItem *)installation {
+ return [[self.APIService refreshAuthTokenForInstallation:installation]
+ then:^id _Nullable(FIRInstallationsItem *_Nullable refreshedInstallation) {
+ return [self saveInstallation:refreshedInstallation];
+ }];
+}
+
+- (id)regenerateFIDOnRefreshTokenErrorIfNeeded:(NSError *)error {
+ if (![error isKindOfClass:[FIRInstallationsHTTPError class]]) {
+ // No recovery possible. Return the same error.
+ return error;
+ }
+
+ FIRInstallationsHTTPError *HTTPError = (FIRInstallationsHTTPError *)error;
+ switch (HTTPError.HTTPResponse.statusCode) {
+ case FIRInstallationsAuthTokenHTTPCodeInvalidAuthentication:
+ case FIRInstallationsAuthTokenHTTPCodeFIDNotFound:
+ // The stored installation was damaged or blocked by the server.
+ // Delete the stored installation then generate and register a new one.
+ return [self getInstallationItem]
+ .then(^FBLPromise<NSNull *> *(FIRInstallationsItem *installation) {
+ return [self deleteInstallationLocally:installation];
+ })
+ .then(^FBLPromise<FIRInstallationsItem *> *(id result) {
+ return [self installationWithValidAuthTokenForcingRefresh:NO];
+ });
+
+ default:
+ // No recovery possible. Return the same error.
+ return error;
+ }
+}
+
+#pragma mark - Delete FID
+
+- (FBLPromise<NSNull *> *)deleteInstallation {
+ return [self.deleteInstallationPromiseCache getExistingPendingOrCreateNewPromise];
+}
+
+- (FBLPromise<NSNull *> *)createDeleteInstallationPromise {
+ FIRLogDebug(kFIRLoggerInstallations,
+ kFIRInstallationsMessageCodeNewDeleteInstallationOperationCreated, @"%s, appName: %@",
+ __PRETTY_FUNCTION__, self.appName);
+
+ // Check for ongoing requests first, if there is no a request, then check local storage for
+ // existing installation.
+ FBLPromise<FIRInstallationsItem *> *currentInstallationPromise =
+ [self mostRecentInstallationOperation] ?: [self getStoredInstallation];
+
+ return currentInstallationPromise
+ .then(^id(FIRInstallationsItem *installation) {
+ return [self sendDeleteInstallationRequestIfNeeded:installation];
+ })
+ .then(^id(FIRInstallationsItem *installation) {
+ // Remove the installation from the local storage.
+ return [self deleteInstallationLocally:installation];
+ });
+}
+
+- (FBLPromise<NSNull *> *)deleteInstallationLocally:(FIRInstallationsItem *)installation {
+ return [self.installationsStore removeInstallationForAppID:installation.appID
+ appName:installation.firebaseAppName]
+ .then(^FBLPromise<NSNull *> *(NSNull *result) {
+ return [self deleteExistingIIDIfNeeded];
+ })
+ .then(^NSNull *(NSNull *result) {
+ [self postFIDDidChangeNotification];
+ return result;
+ });
+}
+
+- (FBLPromise<FIRInstallationsItem *> *)sendDeleteInstallationRequestIfNeeded:
+ (FIRInstallationsItem *)installation {
+ switch (installation.registrationStatus) {
+ case FIRInstallationStatusUnknown:
+ case FIRInstallationStatusUnregistered:
+ // The installation is not registered, so it is safe to be deleted as is, so return early.
+ return [FBLPromise resolvedWith:installation];
+ break;
+
+ case FIRInstallationStatusRegistered:
+ // Proceed to de-register the installation on the server.
+ break;
+ }
+
+ return [self.APIService deleteInstallation:installation].recover(^id(NSError *APIError) {
+ if ([FIRInstallationsErrorUtil isAPIError:APIError withHTTPCode:404]) {
+ // The installation was not found on the server.
+ // Return success.
+ return installation;
+ } else {
+ // Re-throw the error otherwise.
+ return APIError;
+ }
+ });
+}
+
+- (FBLPromise<NSNull *> *)deleteExistingIIDIfNeeded {
+ if ([self isDefaultApp]) {
+ return [self.IIDStore deleteExistingIID];
+ } else {
+ return [FBLPromise resolvedWith:[NSNull null]];
+ }
+}
+
+- (nullable FBLPromise<FIRInstallationsItem *> *)mostRecentInstallationOperation {
+ return [self.authTokenForcingRefreshPromiseCache getExistingPendingPromise]
+ ?: [self.authTokenPromiseCache getExistingPendingPromise]
+ ?: [self.getInstallationPromiseCache getExistingPendingPromise];
+}
+
+#pragma mark - Notifications
+
+- (void)postFIDDidChangeNotification {
+ [[NSNotificationCenter defaultCenter]
+ postNotificationName:FIRInstallationIDDidChangeNotification
+ object:nil
+ userInfo:@{kFIRInstallationIDDidChangeNotificationAppNameKey : self.appName}];
+}
+
+#pragma mark - Default App
+
+- (BOOL)isDefaultApp {
+ return [self.appName isEqualToString:kFIRDefaultAppName];
+}
+
+#pragma mark - Keychain
+
++ (NSString *)keychainServiceWithAppID:(NSString *)appID {
+#if TARGET_OS_MACCATALYST || TARGET_OS_OSX
+ // We need to keep service name unique per application on macOS.
+ // Applications on macOS may request access to Keychain items stored by other applications. It
+ // means that when the app looks up for a relevant Keychain item in the service scope it will
+ // request user password to grant access to the Keychain if there are other Keychain items from
+ // other applications stored under the same Keychain Service.
+ return [kKeychainService stringByAppendingFormat:@".%@", appID];
+#else
+ // Use a constant Keychain service for non-macOS because:
+ // 1. Keychain items cannot be shared between apps until configured specifically so the service
+ // name collisions are not a concern
+ // 2. We don't want to change the service name to avoid doing a migration.
+ return kKeychainService;
+#endif
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.h
new file mode 100644
index 00000000..aeb54e50
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FBLPromise<ValueType>;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * The class makes sure the a single operation (represented by a promise) is performed at a time. If
+ * there is an ongoing operation, then its existing corresponding promise will be returned instead
+ * of starting a new operation.
+ */
+@interface FIRInstallationsSingleOperationPromiseCache<__covariant ResultType> : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
+
+/**
+ * The designated initializer.
+ * @param newOperationHandler The block that must return a new promise representing the
+ * single-at-a-time operation. The promise should be fulfilled when the operation is completed. The
+ * factory block will be used to create a new promise when needed.
+ */
+- (instancetype)initWithNewOperationHandler:
+ (FBLPromise<ResultType> *_Nonnull (^)(void))newOperationHandler NS_DESIGNATED_INITIALIZER;
+
+/**
+ * Creates a new promise or returns an existing pending one.
+ * @return Returns and existing pending promise if exists. If the pending promise does not exist
+ * then a new one will be created using the `factory` block passed in the initializer. Once the
+ * pending promise gets resolved, it is removed, so calling the method again will lead to creating
+ * and caching another promise.
+ */
+- (FBLPromise<ResultType> *)getExistingPendingOrCreateNewPromise;
+
+/**
+ * Returns an existing pending promise or `nil`.
+ * @return Returns an existing pending promise if there is one or `nil` otherwise.
+ */
+- (nullable FBLPromise<ResultType> *)getExistingPendingPromise;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.m b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.m
new file mode 100644
index 00000000..7ae8781f
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.m
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.h"
+
+#if __has_include(<FBLPromises/FBLPromises.h>)
+#import <FBLPromises/FBLPromises.h>
+#else
+#import "FBLPromises.h"
+#endif
+
+@interface FIRInstallationsSingleOperationPromiseCache <ResultType>()
+@property(nonatomic, readonly) FBLPromise *_Nonnull (^newOperationHandler)(void);
+@property(nonatomic, nullable) FBLPromise *pendingPromise;
+@end
+
+@implementation FIRInstallationsSingleOperationPromiseCache
+
+- (instancetype)initWithNewOperationHandler:
+ (FBLPromise<id> *_Nonnull (^)(void))newOperationHandler {
+ if (newOperationHandler == nil) {
+ [NSException raise:NSInvalidArgumentException
+ format:@"`newOperationHandler` must not be `nil`."];
+ }
+
+ self = [super init];
+ if (self) {
+ _newOperationHandler = [newOperationHandler copy];
+ }
+ return self;
+}
+
+- (FBLPromise *)getExistingPendingOrCreateNewPromise {
+ @synchronized(self) {
+ if (!self.pendingPromise) {
+ self.pendingPromise = self.newOperationHandler();
+
+ self.pendingPromise
+ .then(^id(id result) {
+ @synchronized(self) {
+ self.pendingPromise = nil;
+ return nil;
+ }
+ })
+ .catch(^void(NSError *error) {
+ @synchronized(self) {
+ self.pendingPromise = nil;
+ }
+ });
+ }
+
+ return self.pendingPromise;
+ }
+}
+
+- (nullable FBLPromise *)getExistingPendingPromise {
+ @synchronized(self) {
+ return self.pendingPromise;
+ }
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsStatus.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsStatus.h
new file mode 100644
index 00000000..3edc6920
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsStatus.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+/**
+ * The enum represent possible states of the installation ID.
+ *
+ * WARNING: The enum is stored to Keychain as a part of `FIRInstallationsStoredItem`. Modification
+ * of it can lead to incompatibility with previous version. Any modification must be evaluated and,
+ * if it is really needed, the `storageVersion` must be bumped and proper migration code added.
+ */
+typedef NS_ENUM(NSInteger, FIRInstallationsStatus) {
+ /** Represents either an initial status when a FIRInstallationsItem instance was created but not
+ * stored to Keychain or an undefined status (e.g. when the status failed to deserialize).
+ */
+ FIRInstallationStatusUnknown,
+ /// The Firebase Installation has not yet been registered with FIS.
+ FIRInstallationStatusUnregistered,
+ /// The Firebase Installation has successfully been registered with FIS.
+ FIRInstallationStatusRegistered,
+};
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.h
new file mode 100644
index 00000000..b86fb39a
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FBLPromise<ValueType>;
+@class FIRInstallationsItem;
+@class GULKeychainStorage;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// The user defaults suite name used to store data.
+extern NSString *const kFIRInstallationsStoreUserDefaultsID;
+
+/// The class is responsible for storing and accessing the installations data.
+@interface FIRInstallationsStore : NSObject
+
+/**
+ * The default initializer.
+ * @param storage The secure storage to save installations data.
+ * @param accessGroup The Keychain Access Group to store and request the installations data.
+ */
+- (instancetype)initWithSecureStorage:(GULKeychainStorage *)storage
+ accessGroup:(nullable NSString *)accessGroup;
+
+/**
+ * Retrieves existing installation ID if there is.
+ * @param appID The Firebase(Google) Application ID.
+ * @param appName The Firebase Application Name.
+ *
+ * @return Returns a `FBLPromise` instance. The promise is resolved with a FIRInstallationsItem
+ * instance if there is a valid installation stored for `appID` and `appName`. The promise is
+ * rejected with a specific error when the installation has not been found or with another possible
+ * error.
+ */
+- (FBLPromise<FIRInstallationsItem *> *)installationForAppID:(NSString *)appID
+ appName:(NSString *)appName;
+
+/**
+ * Saves the given installation.
+ *
+ * @param installationItem The installation data.
+ * @return Returns a promise that is resolved with `[NSNull null]` on success.
+ */
+- (FBLPromise<NSNull *> *)saveInstallation:(FIRInstallationsItem *)installationItem;
+
+/**
+ * Removes installation data for the given app parameters.
+ * @param appID The Firebase(Google) Application ID.
+ * @param appName The Firebase Application Name.
+ *
+ * @return Returns a promise that is resolved with `[NSNull null]` on success.
+ */
+- (FBLPromise<NSNull *> *)removeInstallationForAppID:(NSString *)appID appName:(NSString *)appName;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.m b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.m
new file mode 100644
index 00000000..72041000
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.m
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.h"
+
+#import "GoogleUtilities/UserDefaults/Private/GULUserDefaults.h"
+
+#if __has_include(<FBLPromises/FBLPromises.h>)
+#import <FBLPromises/FBLPromises.h>
+#else
+#import "FBLPromises.h"
+#endif
+
+#import "GoogleUtilities/Environment/Private/GULKeychainStorage.h"
+
+#import "FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h"
+#import "FirebaseInstallations/Source/Library/FIRInstallationsItem.h"
+#import "FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.h"
+
+NSString *const kFIRInstallationsStoreUserDefaultsID = @"com.firebase.FIRInstallations";
+
+@interface FIRInstallationsStore ()
+@property(nonatomic, readonly) GULKeychainStorage *secureStorage;
+@property(nonatomic, readonly, nullable) NSString *accessGroup;
+@property(nonatomic, readonly) dispatch_queue_t queue;
+@property(nonatomic, readonly) GULUserDefaults *userDefaults;
+@end
+
+@implementation FIRInstallationsStore
+
+- (instancetype)initWithSecureStorage:(GULKeychainStorage *)storage
+ accessGroup:(NSString *)accessGroup {
+ self = [super init];
+ if (self) {
+ _secureStorage = storage;
+ _accessGroup = [accessGroup copy];
+ _queue = dispatch_queue_create("com.firebase.FIRInstallationsStore", DISPATCH_QUEUE_SERIAL);
+
+ NSString *userDefaultsSuiteName = _accessGroup ?: kFIRInstallationsStoreUserDefaultsID;
+ _userDefaults = [[GULUserDefaults alloc] initWithSuiteName:userDefaultsSuiteName];
+ }
+ return self;
+}
+
+- (FBLPromise<FIRInstallationsItem *> *)installationForAppID:(NSString *)appID
+ appName:(NSString *)appName {
+ NSString *itemID = [FIRInstallationsItem identifierWithAppID:appID appName:appName];
+ return [self installationExistsForAppID:appID appName:appName]
+ .then(^id(id result) {
+ return [self.secureStorage getObjectForKey:itemID
+ objectClass:[FIRInstallationsStoredItem class]
+ accessGroup:self.accessGroup];
+ })
+ .then(^id(FIRInstallationsStoredItem *_Nullable storedItem) {
+ if (storedItem == nil) {
+ return [FIRInstallationsErrorUtil installationItemNotFoundForAppID:appID appName:appName];
+ }
+
+ FIRInstallationsItem *item = [[FIRInstallationsItem alloc] initWithAppID:appID
+ firebaseAppName:appName];
+ [item updateWithStoredItem:storedItem];
+ return item;
+ });
+}
+
+- (FBLPromise<NSNull *> *)saveInstallation:(FIRInstallationsItem *)installationItem {
+ FIRInstallationsStoredItem *storedItem = [installationItem storedItem];
+ NSString *identifier = [installationItem identifier];
+
+ return
+ [self.secureStorage setObject:storedItem forKey:identifier accessGroup:self.accessGroup].then(
+ ^id(id result) {
+ return [self setInstallationExists:YES forItemWithIdentifier:identifier];
+ });
+}
+
+- (FBLPromise<NSNull *> *)removeInstallationForAppID:(NSString *)appID appName:(NSString *)appName {
+ NSString *identifier = [FIRInstallationsItem identifierWithAppID:appID appName:appName];
+ return [self.secureStorage removeObjectForKey:identifier accessGroup:self.accessGroup].then(
+ ^id(id result) {
+ return [self setInstallationExists:NO forItemWithIdentifier:identifier];
+ });
+}
+
+#pragma mark - User defaults
+
+- (FBLPromise<NSNull *> *)installationExistsForAppID:(NSString *)appID appName:(NSString *)appName {
+ NSString *identifier = [FIRInstallationsItem identifierWithAppID:appID appName:appName];
+ return [FBLPromise onQueue:self.queue
+ do:^id _Nullable {
+ return [[self userDefaults] objectForKey:identifier] != nil
+ ? [NSNull null]
+ : [FIRInstallationsErrorUtil
+ installationItemNotFoundForAppID:appID
+ appName:appName];
+ }];
+}
+
+- (FBLPromise<NSNull *> *)setInstallationExists:(BOOL)exists
+ forItemWithIdentifier:(NSString *)identifier {
+ return [FBLPromise onQueue:self.queue
+ do:^id _Nullable {
+ if (exists) {
+ [[self userDefaults] setBool:YES forKey:identifier];
+ } else {
+ [[self userDefaults] removeObjectForKey:identifier];
+ }
+
+ return [NSNull null];
+ }];
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.h
new file mode 100644
index 00000000..f6e42828
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * The enum represent possible states of the installation auth token.
+ *
+ * WARNING: The enum is stored to Keychain as a part of `FIRInstallationsStoredAuthToken`.
+ * Modification of it can lead to incompatibility with previous version. Any modification must be
+ * evaluated and, if it is really needed, the `storageVersion` must be bumped and proper migration
+ * code added.
+ */
+typedef NS_ENUM(NSInteger, FIRInstallationsAuthTokenStatus) {
+ /// An initial status or an undefined value.
+ FIRInstallationsAuthTokenStatusUnknown,
+ /// The auth token has been received from the server.
+ FIRInstallationsAuthTokenStatusTokenReceived
+};
+
+/**
+ * This class serializes and deserializes the installation data into/from `NSData` to be stored in
+ * Keychain. This class is primarily used by `FIRInstallationsStore`. It is also used on the logic
+ * level as a data object (see `FIRInstallationsItem.authToken`).
+ *
+ * WARNING: Modification of the class properties can lead to incompatibility with the stored data
+ * encoded by the previous class versions. Any modification must be evaluated and, if it is really
+ * needed, the `storageVersion` must be bumped and proper migration code added.
+ */
+@interface FIRInstallationsStoredAuthToken : NSObject <NSSecureCoding, NSCopying>
+@property FIRInstallationsAuthTokenStatus status;
+
+/// The token that can be used to authorize requests to Firebase backend.
+@property(nullable, copy) NSString *token;
+/// The date when the auth token expires.
+@property(nullable, copy) NSDate *expirationDate;
+
+/// The version of local storage.
+@property(nonatomic, readonly) NSInteger storageVersion;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.m b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.m
new file mode 100644
index 00000000..8236f2a6
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.m
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.h"
+
+#import "FirebaseInstallations/Source/Library/FIRInstallationsLogger.h"
+
+NSString *const kFIRInstallationsStoredAuthTokenStatusKey = @"status";
+NSString *const kFIRInstallationsStoredAuthTokenTokenKey = @"token";
+NSString *const kFIRInstallationsStoredAuthTokenExpirationDateKey = @"expirationDate";
+NSString *const kFIRInstallationsStoredAuthTokenStorageVersionKey = @"storageVersion";
+
+NSInteger const kFIRInstallationsStoredAuthTokenStorageVersion = 1;
+
+@implementation FIRInstallationsStoredAuthToken
+
+- (NSInteger)storageVersion {
+ return kFIRInstallationsStoredAuthTokenStorageVersion;
+}
+
+- (nonnull id)copyWithZone:(nullable NSZone *)zone {
+ FIRInstallationsStoredAuthToken *clone = [[FIRInstallationsStoredAuthToken alloc] init];
+ clone.status = self.status;
+ clone.token = [self.token copy];
+ clone.expirationDate = self.expirationDate;
+ return clone;
+}
+
+- (void)encodeWithCoder:(nonnull NSCoder *)aCoder {
+ [aCoder encodeInteger:self.status forKey:kFIRInstallationsStoredAuthTokenStatusKey];
+ [aCoder encodeObject:self.token forKey:kFIRInstallationsStoredAuthTokenTokenKey];
+ [aCoder encodeObject:self.expirationDate
+ forKey:kFIRInstallationsStoredAuthTokenExpirationDateKey];
+ [aCoder encodeInteger:self.storageVersion
+ forKey:kFIRInstallationsStoredAuthTokenStorageVersionKey];
+}
+
+- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder {
+ NSInteger storageVersion =
+ [aDecoder decodeIntegerForKey:kFIRInstallationsStoredAuthTokenStorageVersionKey];
+ if (storageVersion > kFIRInstallationsStoredAuthTokenStorageVersion) {
+ FIRLogWarning(kFIRLoggerInstallations,
+ kFIRInstallationsMessageCodeAuthTokenCoderVersionMismatch,
+ @"FIRInstallationsStoredAuthToken was encoded by a newer coder version %ld. "
+ @"Current coder version is %ld. Some auth token data may be lost.",
+ (long)storageVersion, (long)kFIRInstallationsStoredAuthTokenStorageVersion);
+ }
+
+ FIRInstallationsStoredAuthToken *object = [[FIRInstallationsStoredAuthToken alloc] init];
+ object.status = [aDecoder decodeIntegerForKey:kFIRInstallationsStoredAuthTokenStatusKey];
+ object.token = [aDecoder decodeObjectOfClass:[NSString class]
+ forKey:kFIRInstallationsStoredAuthTokenTokenKey];
+ object.expirationDate =
+ [aDecoder decodeObjectOfClass:[NSDate class]
+ forKey:kFIRInstallationsStoredAuthTokenExpirationDateKey];
+
+ return object;
+}
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.h
new file mode 100644
index 00000000..83902deb
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsStatus.h"
+
+@class FIRInstallationsStoredAuthToken;
+@class FIRInstallationsStoredIIDCheckin;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * The class is supposed to be used by `FIRInstallationsStore` only. It is required to
+ * serialize/deserialize the installation data into/from `NSData` to be stored in Keychain.
+ *
+ * WARNING: Modification of the class properties can lead to incompatibility with the stored data
+ * encoded by the previous class versions. Any modification must be evaluated and, if it is really
+ * needed, the `storageVersion` must be bumped and proper migration code added.
+ */
+@interface FIRInstallationsStoredItem : NSObject <NSSecureCoding>
+
+/// A stable identifier that uniquely identifies the app instance.
+@property(nonatomic, copy, nullable) NSString *firebaseInstallationID;
+/// The `refreshToken` is used to authorize the auth token requests.
+@property(nonatomic, copy, nullable) NSString *refreshToken;
+
+@property(nonatomic, nullable) FIRInstallationsStoredAuthToken *authToken;
+@property(nonatomic) FIRInstallationsStatus registrationStatus;
+
+/// Instance ID default auth token imported from IID store as a part of IID migration.
+@property(nonatomic, nullable) NSString *IIDDefaultToken;
+
+/// The version of local storage.
+@property(nonatomic, readonly) NSInteger storageVersion;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.m b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.m
new file mode 100644
index 00000000..4e199559
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.m
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.h"
+
+#import "FirebaseInstallations/Source/Library/FIRInstallationsLogger.h"
+#import "FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.h"
+
+NSString *const kFIRInstallationsStoredItemFirebaseInstallationIDKey = @"firebaseInstallationID";
+NSString *const kFIRInstallationsStoredItemRefreshTokenKey = @"refreshToken";
+NSString *const kFIRInstallationsStoredItemAuthTokenKey = @"authToken";
+NSString *const kFIRInstallationsStoredItemRegistrationStatusKey = @"registrationStatus";
+NSString *const kFIRInstallationsStoredItemIIDDefaultTokenKey = @"IIDDefaultToken";
+NSString *const kFIRInstallationsStoredItemStorageVersionKey = @"storageVersion";
+
+NSInteger const kFIRInstallationsStoredItemStorageVersion = 1;
+
+@implementation FIRInstallationsStoredItem
+
+- (NSInteger)storageVersion {
+ return kFIRInstallationsStoredItemStorageVersion;
+}
+
+- (void)encodeWithCoder:(nonnull NSCoder *)aCoder {
+ [aCoder encodeObject:self.firebaseInstallationID
+ forKey:kFIRInstallationsStoredItemFirebaseInstallationIDKey];
+ [aCoder encodeObject:self.refreshToken forKey:kFIRInstallationsStoredItemRefreshTokenKey];
+ [aCoder encodeObject:self.authToken forKey:kFIRInstallationsStoredItemAuthTokenKey];
+ [aCoder encodeInteger:self.registrationStatus
+ forKey:kFIRInstallationsStoredItemRegistrationStatusKey];
+ [aCoder encodeObject:self.IIDDefaultToken forKey:kFIRInstallationsStoredItemIIDDefaultTokenKey];
+ [aCoder encodeInteger:self.storageVersion forKey:kFIRInstallationsStoredItemStorageVersionKey];
+}
+
+- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder {
+ NSInteger storageVersion =
+ [aDecoder decodeIntegerForKey:kFIRInstallationsStoredItemStorageVersionKey];
+ if (storageVersion > self.storageVersion) {
+ FIRLogWarning(kFIRLoggerInstallations,
+ kFIRInstallationsMessageCodeInstallationCoderVersionMismatch,
+ @"FIRInstallationsStoredItem was encoded by a newer coder version %ld. Current "
+ @"coder version is %ld. Some installation data may be lost.",
+ (long)storageVersion, (long)kFIRInstallationsStoredItemStorageVersion);
+ }
+
+ FIRInstallationsStoredItem *item = [[FIRInstallationsStoredItem alloc] init];
+ item.firebaseInstallationID =
+ [aDecoder decodeObjectOfClass:[NSString class]
+ forKey:kFIRInstallationsStoredItemFirebaseInstallationIDKey];
+ item.refreshToken = [aDecoder decodeObjectOfClass:[NSString class]
+ forKey:kFIRInstallationsStoredItemRefreshTokenKey];
+ item.authToken = [aDecoder decodeObjectOfClass:[FIRInstallationsStoredAuthToken class]
+ forKey:kFIRInstallationsStoredItemAuthTokenKey];
+ item.registrationStatus =
+ [aDecoder decodeIntegerForKey:kFIRInstallationsStoredItemRegistrationStatusKey];
+ item.IIDDefaultToken =
+ [aDecoder decodeObjectOfClass:[NSString class]
+ forKey:kFIRInstallationsStoredItemIIDDefaultTokenKey];
+
+ return item;
+}
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Private/FirebaseInstallationsInternal.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Private/FirebaseInstallationsInternal.h
new file mode 100644
index 00000000..cd40f172
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Private/FirebaseInstallationsInternal.h
@@ -0,0 +1,23 @@
+// Copyright 2020 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// An umbrella header, for any other libraries in this repo to access Firebase
+// Installations Public headers. Any package manager complexity should be
+// handled here.
+
+#if SWIFT_PACKAGE
+@import FirebaseInstallations;
+#else
+#import <FirebaseInstallations/FirebaseInstallations.h>
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallations.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallations.h
new file mode 100644
index 00000000..4839b4e0
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallations.h
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRApp;
+@class FIRInstallationsAuthTokenResult;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** A notification with this name is sent each time an installation is created or deleted. */
+FOUNDATION_EXPORT const NSNotificationName FIRInstallationIDDidChangeNotification;
+/** `userInfo` key for the `FirebaseApp.name` in `FIRInstallationIDDidChangeNotification`. */
+FOUNDATION_EXPORT NSString *const kFIRInstallationIDDidChangeNotificationAppNameKey;
+
+/**
+ * An installation ID handler block.
+ * @param identifier The installation ID string if exists or `nil` otherwise.
+ * @param error The error when `identifier == nil` or `nil` otherwise.
+ */
+typedef void (^FIRInstallationsIDHandler)(NSString *__nullable identifier,
+ NSError *__nullable error)
+ NS_SWIFT_NAME(InstallationsIDHandler);
+
+/**
+ * An authorization token handler block.
+ * @param tokenResult An instance of `InstallationsAuthTokenResult` in case of success or `nil`
+ * otherwise.
+ * @param error The error when `tokenResult == nil` or `nil` otherwise.
+ */
+typedef void (^FIRInstallationsTokenHandler)(
+ FIRInstallationsAuthTokenResult *__nullable tokenResult, NSError *__nullable error)
+ NS_SWIFT_NAME(InstallationsTokenHandler);
+
+/**
+ * The class provides API for Firebase Installations.
+ * Each configured `FirebaseApp` has a corresponding single instance of `Installations`.
+ * An instance of the class provides access to the installation info for the `FirebaseApp` as well
+ * as the ability to delete it. A Firebase Installation is unique by `FirebaseApp.name` and
+ * `FirebaseApp.options.googleAppID` .
+ */
+NS_SWIFT_NAME(Installations)
+@interface FIRInstallations : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
+
+/**
+ * Returns a default instance of `Installations`.
+ * @returns An instance of `Installations` for `FirebaseApp.defaultApp().
+ * @throw Throws an exception if the default app is not configured yet or required `FirebaseApp`
+ * options are missing.
+ */
++ (FIRInstallations *)installations NS_SWIFT_NAME(installations());
+
+/**
+ * Returns an instance of `Installations` for an application.
+ * @param application A configured `FirebaseApp` instance.
+ * @returns An instance of `Installations` corresponding to the passed application.
+ * @throw Throws an exception if required `FirebaseApp` options are missing.
+ */
++ (FIRInstallations *)installationsWithApp:(FIRApp *)application NS_SWIFT_NAME(installations(app:));
+
+/**
+ * The method creates or retrieves an installation ID. The installation ID is a stable identifier
+ * that uniquely identifies the app instance. NOTE: If the application already has an existing
+ * FirebaseInstanceID then the InstanceID identifier will be used.
+ * @param completion A completion handler which is invoked when the operation completes. See
+ * `InstallationsIDHandler` for additional details.
+ */
+- (void)installationIDWithCompletion:(FIRInstallationsIDHandler)completion;
+
+/**
+ * Retrieves (locally if it exists or from the server) a valid authorization token. An existing
+ * token may be invalidated or expired, so it is recommended to fetch the auth token before each
+ * server request. The method does the same as `Installations.authTokenForcingRefresh(:,
+ * completion:)` with forcing refresh `NO`.
+ * @param completion A completion handler which is invoked when the operation completes. See
+ * `InstallationsTokenHandler` for additional details.
+ */
+- (void)authTokenWithCompletion:(FIRInstallationsTokenHandler)completion;
+
+/**
+ * Retrieves (locally or from the server depending on `forceRefresh` value) a valid authorization
+ * token. An existing token may be invalidated or expire, so it is recommended to fetch the auth
+ * token before each server request. This method should be used with `forceRefresh == YES` when e.g.
+ * a request with the previously fetched auth token failed with "Not Authorized" error.
+ * @param forceRefresh If `YES` then the locally cached auth token will be ignored and a new one
+ * will be requested from the server. If `NO`, then the locally cached auth token will be returned
+ * if exists and has not expired yet.
+ * @param completion A completion handler which is invoked when the operation completes. See
+ * `InstallationsTokenHandler` for additional details.
+ */
+- (void)authTokenForcingRefresh:(BOOL)forceRefresh
+ completion:(FIRInstallationsTokenHandler)completion;
+
+/**
+ * Deletes all the installation data including the unique identifier, auth tokens and
+ * all related data on the server side. A network connection is required for the method to
+ * succeed. If fails, the existing installation data remains untouched.
+ * @param completion A completion handler which is invoked when the operation completes. `error ==
+ * nil` indicates success.
+ */
+- (void)deleteWithCompletion:(void (^)(NSError *__nullable error))completion;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsAuthTokenResult.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsAuthTokenResult.h
new file mode 100644
index 00000000..7753132d
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsAuthTokenResult.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** The class represents a result of the auth token request. */
+NS_SWIFT_NAME(InstallationsAuthTokenResult)
+@interface FIRInstallationsAuthTokenResult : NSObject
+
+/** The authorization token string. */
+@property(nonatomic, readonly) NSString *authToken;
+
+/** The auth token expiration date. */
+@property(nonatomic, readonly) NSDate *expirationDate;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsErrors.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsErrors.h
new file mode 100644
index 00000000..d0c3b996
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsErrors.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+extern NSString *const kFirebaseInstallationsErrorDomain;
+
+typedef NS_ENUM(NSUInteger, FIRInstallationsErrorCode) {
+ /** Unknown error. See `userInfo` for details. */
+ FIRInstallationsErrorCodeUnknown = 0,
+
+ /** Keychain error. See `userInfo` for details. */
+ FIRInstallationsErrorCodeKeychain = 1,
+
+ /** Server unreachable. A network error or server is unavailable. See `userInfo` for details. */
+ FIRInstallationsErrorCodeServerUnreachable = 2,
+
+ /** FirebaseApp configuration issues e.g. invalid GMP-App-ID, etc. See `userInfo` for details. */
+ FIRInstallationsErrorCodeInvalidConfiguration = 3,
+
+} NS_SWIFT_NAME(InstallationsErrorCode);
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsVersion.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsVersion.h
new file mode 100644
index 00000000..8cdf6778
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsVersion.h
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+FOUNDATION_EXPORT const char *const FIRInstallationsVersionStr;
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FirebaseInstallations.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FirebaseInstallations.h
new file mode 100644
index 00000000..accc9ac6
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FirebaseInstallations.h
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FIRInstallations.h"
+#import "FIRInstallationsAuthTokenResult.h"
+#import "FIRInstallationsErrors.h"
+#import "FIRInstallationsVersion.h"
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h
new file mode 100644
index 00000000..2fb16226
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@interface GULAppEnvironmentUtil : NSObject
+
+/// Indicates whether the app is from Apple Store or not. Returns NO if the app is on simulator,
+/// development environment or sideloaded.
++ (BOOL)isFromAppStore;
+
+/// Indicates whether the app is a Testflight app. Returns YES if the app has sandbox receipt.
+/// Returns NO otherwise.
++ (BOOL)isAppStoreReceiptSandbox;
+
+/// Indicates whether the app is on simulator or not at runtime depending on the device
+/// architecture.
++ (BOOL)isSimulator;
+
+/// The current device model. Returns an empty string if device model cannot be retrieved.
++ (NSString *)deviceModel;
+
+/// The current operating system version. Returns an empty string if the system version cannot be
+/// retrieved.
++ (NSString *)systemVersion;
+
+/// Indicates whether it is running inside an extension or an app.
++ (BOOL)isAppExtension;
+
+/// @return Returns @YES when is run on iOS version greater or equal to 7.0
++ (BOOL)isIOS7OrHigher DEPRECATED_MSG_ATTRIBUTE(
+ "Always `YES` because only iOS 8 and higher supported. The method will be removed.");
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULHeartbeatDateStorage.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULHeartbeatDateStorage.h
new file mode 100644
index 00000000..9432dfc0
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULHeartbeatDateStorage.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Stores either a date or a dictionary to a specified file.
+@interface GULHeartbeatDateStorage : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
+
+@property(nonatomic, readonly) NSURL *fileURL;
+
+/**
+ * Default initializer.
+ * @param fileName The name of the file to store the date information.
+ * exist, it will be created if needed.
+ */
+- (instancetype)initWithFileName:(NSString *)fileName;
+
+/**
+ * Reads the date from the specified file for the given tag.
+ * @return Returns date if exists, otherwise `nil`.
+ */
+- (nullable NSDate *)heartbeatDateForTag:(NSString *)tag;
+
+/**
+ * Saves the date for the specified tag in the specified file.
+ * @return YES on success, NO otherwise.
+ */
+- (BOOL)setHearbeatDate:(NSDate *)date forTag:(NSString *)tag;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULKeychainStorage.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULKeychainStorage.h
new file mode 100644
index 00000000..dc01a836
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULKeychainStorage.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FBLPromise<ValueType>;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// The class provides a convenient abstraction on top of the iOS Keychain API to save data.
+@interface GULKeychainStorage : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
+
+/** Initializes the keychain storage with Keychain Service name.
+ * @param service A Keychain Service name that will be used to store and retrieve objects. See also
+ * `kSecAttrService`.
+ */
+- (instancetype)initWithService:(NSString *)service;
+
+/**
+ * Get an object by key.
+ * @param key The key.
+ * @param objectClass The expected object class required by `NSSecureCoding`.
+ * @param accessGroup The Keychain Access Group.
+ *
+ * @return Returns a promise. It is resolved with an object stored by key if exists. It is resolved
+ * with `nil` when the object not found. It fails on a Keychain error.
+ */
+- (FBLPromise<id<NSSecureCoding>> *)getObjectForKey:(NSString *)key
+ objectClass:(Class)objectClass
+ accessGroup:(nullable NSString *)accessGroup;
+
+/**
+ * Saves the given object by the given key.
+ * @param object The object to store.
+ * @param key The key to store the object. If there is an existing object by the key, it will be
+ * overridden.
+ * @param accessGroup The Keychain Access Group.
+ *
+ * @return Returns which is resolved with `[NSNull null]` on success.
+ */
+- (FBLPromise<NSNull *> *)setObject:(id<NSSecureCoding>)object
+ forKey:(NSString *)key
+ accessGroup:(nullable NSString *)accessGroup;
+
+/**
+ * Removes the object by the given key.
+ * @param key The key to store the object. If there is an existing object by the key, it will be
+ * overridden.
+ * @param accessGroup The Keychain Access Group.
+ *
+ * @return Returns which is resolved with `[NSNull null]` on success.
+ */
+- (FBLPromise<NSNull *> *)removeObjectForKey:(NSString *)key
+ accessGroup:(nullable NSString *)accessGroup;
+
+#if TARGET_OS_OSX
+/// If not `nil`, then only this keychain will be used to save and read data (see
+/// `kSecMatchSearchList` and `kSecUseKeychain`. It is mostly intended to be used by unit tests.
+@property(nonatomic, nullable) SecKeychainRef keychainRef;
+#endif // TARGET_OSX
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULKeychainUtils.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULKeychainUtils.h
new file mode 100644
index 00000000..de4bef2f
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULKeychainUtils.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+FOUNDATION_EXPORT NSString *const kGULKeychainUtilsErrorDomain;
+
+/// Helper functions to access Keychain.
+@interface GULKeychainUtils : NSObject
+
+/** Fetches a keychain item data matching to the provided query.
+ * @param query A dictionary with Keychain query parameters. See docs for `SecItemCopyMatching` for
+ * details.
+ * @param outError A pointer to `NSError` instance or `NULL`. The instance at `outError` will be
+ * assigned with an error if there is.
+ * @returns Data for the first Keychain Item matching the provided query or `nil` if there is not
+ * such an item (`outError` will be `nil` in this case) or an error occurred.
+ */
++ (nullable NSData *)getItemWithQuery:(NSDictionary *)query
+ error:(NSError *_Nullable *_Nullable)outError;
+
+/** Stores data to a Keychain Item matching to the provided query. An existing Keychain Item
+ * matching the query parameters will be updated or a new will be created.
+ * @param item A Keychain Item data to store.
+ * @param query A dictionary with Keychain query parameters. See docs for `SecItemAdd` and
+ * `SecItemUpdate` for details.
+ * @param outError A pointer to `NSError` instance or `NULL`. The instance at `outError` will be
+ * assigned with an error if there is.
+ * @returns `YES` when data was successfully stored, `NO` otherwise.
+ */
++ (BOOL)setItem:(NSData *)item
+ withQuery:(NSDictionary *)query
+ error:(NSError *_Nullable *_Nullable)outError;
+
+/** Removes a Keychain Item matching to the provided query.
+ * @param query A dictionary with Keychain query parameters. See docs for `SecItemDelete` for
+ * details.
+ * @param outError A pointer to `NSError` instance or `NULL`. The instance at `outError` will be
+ * assigned with an error if there is.
+ * @returns `YES` if the item was removed successfully or doesn't exist, `NO` otherwise.
+ */
++ (BOOL)removeItemWithQuery:(NSDictionary *)query error:(NSError *_Nullable *_Nullable)outError;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULSecureCoding.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULSecureCoding.h
new file mode 100644
index 00000000..8484b395
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/Environment/Private/GULSecureCoding.h
@@ -0,0 +1,36 @@
+// Copyright 2019 Google
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** The class wraps `NSKeyedArchiver` and `NSKeyedUnarchiver` API to provide a unified secure coding
+ * methods for iOS versions before and after 11.
+ */
+@interface GULSecureCoding : NSObject
+
++ (nullable id)unarchivedObjectOfClasses:(NSSet<Class> *)classes
+ fromData:(NSData *)data
+ error:(NSError **)outError;
+
++ (nullable id)unarchivedObjectOfClass:(Class)class
+ fromData:(NSData *)data
+ error:(NSError **)outError;
+
++ (nullable NSData *)archivedDataWithRootObject:(id<NSCoding>)object error:(NSError **)outError;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/UserDefaults/Private/GULUserDefaults.h b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/UserDefaults/Private/GULUserDefaults.h
new file mode 100644
index 00000000..0d047818
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/GoogleUtilities/UserDefaults/Private/GULUserDefaults.h
@@ -0,0 +1,110 @@
+// Copyright 2018 Google
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// A thread-safe user defaults that uses C functions from CFPreferences.h instead of
+/// `NSUserDefaults`. This is to avoid sending an `NSNotification` when it's changed from a
+/// background thread to avoid crashing. // TODO: Insert radar number here.
+@interface GULUserDefaults : NSObject
+
+/// A shared user defaults similar to +[NSUserDefaults standardUserDefaults] and accesses the same
+/// data of the standardUserDefaults.
++ (GULUserDefaults *)standardUserDefaults;
+
+/// Initializes preferences with a suite name that is the same with the NSUserDefaults' suite name.
+/// Both of CFPreferences and NSUserDefaults share the same plist file so their data will exactly
+/// the same.
+///
+/// @param suiteName The name of the suite of the user defaults.
+- (instancetype)initWithSuiteName:(nullable NSString *)suiteName;
+
+#pragma mark - Getters
+
+/// Searches the receiver's search list for a default with the key 'defaultName' and return it. If
+/// another process has changed defaults in the search list, NSUserDefaults will automatically
+/// update to the latest values. If the key in question has been marked as ubiquitous via a Defaults
+/// Configuration File, the latest value may not be immediately available, and the registered value
+/// will be returned instead.
+- (nullable id)objectForKey:(NSString *)defaultName;
+
+/// Equivalent to -objectForKey:, except that it will return nil if the value is not an NSArray.
+- (nullable NSArray *)arrayForKey:(NSString *)defaultName;
+
+/// Equivalent to -objectForKey:, except that it will return nil if the value
+/// is not an NSDictionary.
+- (nullable NSDictionary<NSString *, id> *)dictionaryForKey:(NSString *)defaultName;
+
+/// Equivalent to -objectForKey:, except that it will convert NSNumber values to their NSString
+/// representation. If a non-string non-number value is found, nil will be returned.
+- (nullable NSString *)stringForKey:(NSString *)defaultName;
+
+/// Equivalent to -objectForKey:, except that it converts the returned value to an NSInteger. If the
+/// value is an NSNumber, the result of -integerValue will be returned. If the value is an NSString,
+/// it will be converted to NSInteger if possible. If the value is a boolean, it will be converted
+/// to either 1 for YES or 0 for NO. If the value is absent or can't be converted to an integer, 0
+/// will be returned.
+- (NSInteger)integerForKey:(NSString *)defaultName;
+
+/// Similar to -integerForKey:, except that it returns a float, and boolean values will not be
+/// converted.
+- (float)floatForKey:(NSString *)defaultName;
+
+/// Similar to -integerForKey:, except that it returns a double, and boolean values will not be
+/// converted.
+- (double)doubleForKey:(NSString *)defaultName;
+
+/// Equivalent to -objectForKey:, except that it converts the returned value to a BOOL. If the value
+/// is an NSNumber, NO will be returned if the value is 0, YES otherwise. If the value is an
+/// NSString, values of "YES" or "1" will return YES, and values of "NO", "0", or any other string
+/// will return NO. If the value is absent or can't be converted to a BOOL, NO will be returned.
+- (BOOL)boolForKey:(NSString *)defaultName;
+
+#pragma mark - Setters
+
+/// Immediately stores a value (or removes the value if `nil` is passed as the value) for the
+/// provided key in the search list entry for the receiver's suite name in the current user and any
+/// host, then asynchronously stores the value persistently, where it is made available to other
+/// processes.
+- (void)setObject:(nullable id)value forKey:(NSString *)defaultName;
+
+/// Equivalent to -setObject:forKey: except that the value is converted from a float to an NSNumber.
+- (void)setFloat:(float)value forKey:(NSString *)defaultName;
+
+/// Equivalent to -setObject:forKey: except that the value is converted from a double to an
+/// NSNumber.
+- (void)setDouble:(double)value forKey:(NSString *)defaultName;
+
+/// Equivalent to -setObject:forKey: except that the value is converted from an NSInteger to an
+/// NSNumber.
+- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;
+
+/// Equivalent to -setObject:forKey: except that the value is converted from a BOOL to an NSNumber.
+- (void)setBool:(BOOL)value forKey:(NSString *)defaultName;
+
+#pragma mark - Removing Defaults
+
+/// Equivalent to -[... setObject:nil forKey:defaultName]
+- (void)removeObjectForKey:(NSString *)defaultName;
+
+#pragma mark - Save data
+
+/// Blocks the calling thread until all in-progress set operations have completed.
+- (void)synchronize;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/LICENSE b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstallations/README.md b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/README.md
new file mode 100644
index 00000000..1d9f0f67
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseInstallations/README.md
@@ -0,0 +1,298 @@
+[![Version](https://img.shields.io/cocoapods/v/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase)
+[![License](https://img.shields.io/cocoapods/l/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase)
+[![Platform](https://img.shields.io/cocoapods/p/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase)
+
+[![Actions Status][gh-abtesting-badge]][gh-actions]
+[![Actions Status][gh-auth-badge]][gh-actions]
+[![Actions Status][gh-core-badge]][gh-actions]
+[![Actions Status][gh-crashlytics-badge]][gh-actions]
+[![Actions Status][gh-database-badge]][gh-actions]
+[![Actions Status][gh-datatransport-badge]][gh-actions]
+[![Actions Status][gh-dynamiclinks-badge]][gh-actions]
+[![Actions Status][gh-firebasepod-badge]][gh-actions]
+[![Actions Status][gh-firestore-badge]][gh-actions]
+[![Actions Status][gh-functions-badge]][gh-actions]
+[![Actions Status][gh-inappmessaging-badge]][gh-actions]
+[![Actions Status][gh-interop-badge]][gh-actions]
+[![Actions Status][gh-messaging-badge]][gh-actions]
+[![Actions Status][gh-remoteconfig-badge]][gh-actions]
+[![Actions Status][gh-storage-badge]][gh-actions]
+[![Actions Status][gh-symbolcollision-badge]][gh-actions]
+[![Actions Status][gh-zip-badge]][gh-actions]
+[![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk)
+
+# Firebase Apple Open Source Development
+
+This repository contains all Apple platform Firebase SDK source except FirebaseAnalytics,
+FirebasePerformance, and FirebaseML.
+
+The repository also includes GoogleUtilities source. The
+[GoogleUtilities](GoogleUtilities/README.md) pod is
+a set of utilities used by Firebase and other Google products.
+
+Firebase is an app development platform with tools to help you build, grow and
+monetize your app. More information about Firebase can be found at
+[https://firebase.google.com](https://firebase.google.com).
+
+## Installation
+
+See the three subsections for details about three different installation methods.
+1. [Standard pod install](README.md#standard-pod-install)
+1. [Installing from the GitHub repo](README.md#installing-from-github)
+1. [Experimental Carthage](README.md#carthage-ios-only)
+
+### Standard pod install
+
+Go to
+[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup).
+
+### Installing from GitHub
+
+For releases starting with 5.0.0, the source for each release is also deployed
+to CocoaPods master and available via standard
+[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod).
+
+These instructions can be used to access the Firebase repo at other branches,
+tags, or commits.
+
+#### Background
+
+See
+[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod)
+for instructions and options about overriding pod source locations.
+
+#### Accessing Firebase Source Snapshots
+
+All of the official releases are tagged in this repo and available via CocoaPods. To access a local
+source snapshot or unreleased branch, use Podfile directives like the following:
+
+To access FirebaseFirestore via a branch:
+```
+pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
+pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
+```
+
+To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do:
+
+```
+pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk'
+pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk'
+```
+
+### Carthage (iOS only)
+
+Instructions for the experimental Carthage distribution are at
+[Carthage](Carthage.md).
+
+### Rome
+
+Instructions for installing binary frameworks via
+[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md).
+
+### Using Firebase from a Framework or a library
+
+[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md)
+
+## Development
+
+To develop Firebase software in this repository, ensure that you have at least
+the following software:
+
+ * Xcode 10.3 (or later)
+ * CocoaPods 1.7.2 (or later)
+ * [CocoaPods generate](https://github.com/square/cocoapods-generate)
+
+For the pod that you want to develop:
+
+`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios`
+
+Note: If the CocoaPods cache is out of date, you may need to run
+`pod repo update` before the `pod gen` command.
+
+Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for
+those platforms. Since 10.2, Xcode does not properly handle multi-platform
+CocoaPods workspaces.
+
+Firestore has a self contained Xcode project. See
+[Firestore/README.md](Firestore/README.md).
+
+### Development for Catalyst
+* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios`
+* Check the Mac box in the App-iOS Build Settings
+* Sign the App in the Settings Signing & Capabilities tab
+* Click Pods in the Project Manager
+* Add Signing to the iOS host app and unit test targets
+* Select the Unit-unit scheme
+* Run it to build and test
+
+### Adding a New Firebase Pod
+
+See [AddNewPod.md](AddNewPod.md).
+
+### Managing Headers and Imports
+
+See [HeadersImports.md](HeadersImports.md).
+
+### Code Formatting
+
+To ensure that the code is formatted consistently, run the script
+[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh)
+before creating a PR.
+
+Travis will verify that any code changes are done in a style compliant way. Install
+`clang-format` and `swiftformat`:
+
+```
+brew install clang-format
+brew install swiftformat
+```
+
+### Running Unit Tests
+
+Select a scheme and press Command-u to build a component and run its unit tests.
+
+#### Viewing Code Coverage (Deprecated)
+
+First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`.
+
+After running the `AllUnitTests_iOS` scheme in Xcode, execute
+`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output`
+at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results.
+
+### Running Sample Apps
+In order to run the sample apps and integration tests, you'll need valid
+`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist
+files without real values, but can be replaced with real plist files. To get your own
+`GoogleService-Info.plist` files:
+
+1. Go to the [Firebase Console](https://console.firebase.google.com/)
+2. Create a new Firebase project, if you don't already have one
+3. For each sample app you want to test, create a new Firebase app with the sample app's bundle
+identifier (e.g. `com.google.Database-Example`)
+4. Download the resulting `GoogleService-Info.plist` and add it to the Xcode project.
+
+## Specific Component Instructions
+See the sections below for any special instructions for those components.
+
+### Firebase Auth
+
+If you're doing specific Firebase Auth development, see
+[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about
+building and running the FirebaseAuth pod along with various samples and tests.
+
+### Firebase Database
+
+The Firebase Database Integration tests can be run against a locally running Database Emulator
+or against a production instance.
+
+To run against a local emulator instance, invoke `./scripts/run_database_emulator.sh start` before
+running the integration test.
+
+To run against a production instance, provide a valid GoogleServices-Info.plist and copy it to
+`FirebaseDatabase/Tests/Resources/GoogleService-Info.plist`. Your Security Rule must be set to
+[public](https://firebase.google.com/docs/database/security/quickstart) while your tests are
+running.
+
+### Firebase Storage
+
+To run the Storage Integration tests, follow the instructions in
+[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m).
+
+#### Push Notifications
+
+Push notifications can only be delivered to specially provisioned App IDs in the developer portal.
+In order to actually test receiving push notifications, you will need to:
+
+1. Change the bundle identifier of the sample app to something you own in your Apple Developer
+account, and enable that App ID for push notifications.
+2. You'll also need to
+[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs)
+at **Project Settings > Cloud Messaging > [Your Firebase App]**.
+3. Ensure your iOS device is added to your Apple Developer portal as a test device.
+
+#### iOS Simulator
+
+The iOS Simulator cannot register for remote notifications, and will not receive push notifications.
+In order to receive push notifications, you'll have to follow the steps above and run the app on a
+physical device.
+
+## Community Supported Efforts
+
+We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are
+very grateful! We'd like to empower as many developers as we can to be able to use Firebase and
+participate in the Firebase community.
+
+### tvOS, macOS, watchOS and Catalyst
+Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on
+tvOS, macOS, watchOS and Catalyst.
+
+For tvOS, checkout the [Sample](Example/tvOSSample).
+For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the
+[Independent Watch App Sample](Example/watchOSSample).
+
+Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this
+repository is actively developed primarily for iOS. While we can catch basic unit test issues with
+Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you
+encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues).
+
+During app setup in the console, you may get to a step that mentions something like "Checking if the app
+has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst.
+**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected.
+
+To install, add a subset of the following to the Podfile:
+
+```
+pod 'Firebase/ABTesting' # No watchOS support yet
+pod 'Firebase/Auth' # No watchOS support yet
+pod 'Firebase/Crashlytics' # No watchOS support yet
+pod 'Firebase/Database' # No watchOS support yet
+pod 'Firebase/Firestore' # No watchOS support yet
+pod 'Firebase/Functions' # No watchOS support yet
+pod 'Firebase/Messaging'
+pod 'Firebase/RemoteConfig' # No watchOS support yet
+pod 'Firebase/Storage'
+```
+
+#### Additional Catalyst Notes
+
+* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability`
+to Build Settings.
+* FirebaseFirestore requires signing the
+[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681).
+
+## Roadmap
+
+See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source
+plans and directions.
+
+## Contributing
+
+See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase
+iOS SDK.
+
+## License
+
+The contents of this repository is licensed under the
+[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0).
+
+Your use of Firebase is governed by the
+[Terms of Service for Firebase Services](https://firebase.google.com/terms/).
+
+[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions
+[gh-abtesting-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/abtesting/badge.svg
+[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg
+[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg
+[gh-crashlytics-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/crashlytics/badge.svg
+[gh-database-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/database/badge.svg
+[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg
+[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg
+[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg
+[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg
+[gh-functions-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/functions/badge.svg
+[gh-inappmessaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/inappmessaging/badge.svg
+[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg
+[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg
+[gh-remoteconfig-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/remoteconfig/badge.svg
+[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg
+[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg
+[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg