in SWIG.
%include "app/src/swig/future.i"
%SWIG_FUTURE(Future_LongLong, long, internal, long long, FirebaseException)
@@ -337,6 +341,26 @@ namespace analytics {
}
SetConsentInternal(consentSettingsMap);
}
+
+ /// Initiates on-device conversion measurement given a sha256-hashed user email address.
+ /// Requires dependency GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is
+ /// a no-op.
+ /// @param hashedEmailAddress User email address as a UTF8-encoded string normalized and
+ /// hashed according to the instructions at
+ /// https://firebase.google.com/docs/tutorials/ads-ios-on-device-measurement/step-3.
+ public static void InitiateOnDeviceConversionMeasurementWithHashedEmailAddress(byte[] hashedEmailAddress) {
+ InitiateOnDeviceConversionMeasurementWithHashedEmailAddressInternal(new CharVector(hashedEmailAddress));
+ }
+
+ /// Initiates on-device conversion measurement given a sha256-hashed phone number in E.164
+ /// format. Requires dependency GoogleAppMeasurementOnDeviceConversion to be linked in,
+ /// otherwise it is a no-op.
+ /// @param hashedPhoneNumber UTF8-encoded user phone number in E.164 format and then hashed
+ /// according to the instructions at
+ /// https://firebase.google.com/docs/tutorials/ads-ios-on-device-measurement/step-3.
+ public static void InitiateOnDeviceConversionMeasurementWithHashedPhoneNumber(byte[] hashedPhoneNumber) {
+ InitiateOnDeviceConversionMeasurementWithHashedPhoneNumberInternal(new CharVector(hashedPhoneNumber));
+ }
%}
} // namespace analytics
diff --git a/app_check/src/FirebaseAppCheck.cs b/app_check/src/FirebaseAppCheck.cs
index 7cfc4457e..be5bd6702 100644
--- a/app_check/src/FirebaseAppCheck.cs
+++ b/app_check/src/FirebaseAppCheck.cs
@@ -20,6 +20,14 @@
namespace Firebase.AppCheck {
/// @brief Firebase App Check object.
+///
+/// App Check helps protect your API resources from abuse by preventing
+/// unauthorized clients from accessing your backend resources.
+///
+/// With App Check, devices running your app will use an AppCheckProvider that
+/// attests to one or both of the following:
+/// * Requests originate from your authentic app
+/// * Requests originate from an authentic, untampered device
public sealed class FirebaseAppCheck {
// The C++ object that this wraps.
private AppCheckInternal appCheckInternal;
@@ -53,7 +61,7 @@ private void ThrowIfNull() {
}
/// Gets the instance of FirebaseAppCheck associated with the default
- /// {@link FirebaseApp} instance.
+ /// FirebaseApp instance.
public static FirebaseAppCheck DefaultInstance {
get {
return GetInstance(FirebaseApp.DefaultInstance);
@@ -61,7 +69,7 @@ public static FirebaseAppCheck DefaultInstance {
}
/// Gets the instance of FirebaseAppCheck associated with the given
- /// {@link FirebaseApp} instance.
+ /// FirebaseApp instance.
public static FirebaseAppCheck GetInstance(FirebaseApp app) {
FirebaseAppCheck result;
if (!appCheckMap.TryGetValue(app.Name, out result)) {
@@ -72,18 +80,14 @@ public static FirebaseAppCheck GetInstance(FirebaseApp app) {
return result;
}
- /// Installs the given {@link AppCheckProviderFactory}, overwriting any that
- /// were previously associated with this {@code FirebaseAppCheck} instance.
- /// Any {@link AppCheckTokenListener}s attached to this
- /// {@code FirebaseAppCheck} instance will be transferred from existing
- /// factories to the newly installed one.
+ /// Installs the given IAppCheckProviderFactory, overwriting any that
+ /// were previously associated with this FirebaseAppCheck instance.
///
- /// Automatic token refreshing will only occur if the global {@code
- /// isDataCollectionDefaultEnabled} flag is set to true. To allow automatic
- /// token refreshing for Firebase App Check without changing the {@code
- /// isDataCollectionDefaultEnabled} flag for other Firebase SDKs, call
- /// {@link #setTokenAutoRefreshEnabled(bool)} after installing the {@code
- /// factory}.
+ /// Automatic token refreshing will only occur if the global
+ /// isDataCollectionDefaultEnabled flag is set to true. To allow automatic
+ /// token refreshing for Firebase App Check without changing the
+ /// isDataCollectionDefaultEnabled flag for other Firebase SDKs, call
+ /// SetTokenAutoRefreshEnabled(bool) after installing the factory.
///
/// This method should be called before initializing the Firebase App.
public static void SetAppCheckProviderFactory(IAppCheckProviderFactory factory) {
diff --git a/app_check/src/swig/app_check.i b/app_check/src/swig/app_check.i
index d87dc0795..5cb919b67 100644
--- a/app_check/src/swig/app_check.i
+++ b/app_check/src/swig/app_check.i
@@ -48,6 +48,7 @@ typedef void (SWIGSTDCALL *CompleteBuiltInGetToken)(int key, AppCheckToken* toke
static GetTokenFromCSharp g_get_token_from_csharp = nullptr;
static int g_pending_token_keys = 0;
static std::map> g_pending_get_tokens;
+static ::firebase::Mutex g_pending_get_tokens_mutex;
// Should be set to the C# function FirebaseAppCheck.TokenChangedMethod
static TokenChanged g_token_changed = nullptr;
@@ -59,8 +60,19 @@ static CompleteBuiltInGetToken g_complete_built_in_get_token = nullptr;
void FinishGetTokenCallback(int key, const char* token, int64_t expire_ms,
int error_code, const char* error_message) {
// Get the function from the map, and erase it
- auto callback = g_pending_get_tokens[key];
- g_pending_get_tokens.erase(key);
+ std::function callback;
+ {
+ MutexLock lock(g_pending_get_tokens_mutex);
+ auto it = g_pending_get_tokens.find(key);
+ if (it != g_pending_get_tokens.end()) {
+ callback = it->second;
+ g_pending_get_tokens.erase(it);
+ } else {
+ // The callback was missing. This is likely caused by trying to finish the same
+ // callback multiple times, so ignore it.
+ return;
+ }
+ }
AppCheckToken app_check_token;
app_check_token.token = token;
@@ -98,8 +110,12 @@ class SwigAppCheckProvider : public AppCheckProvider {
completion_callback) override {
if (g_get_token_from_csharp) {
// Save the callback in the map, and generate a key
- int key = g_pending_token_keys++;
- g_pending_get_tokens[key] = completion_callback;
+ int key;
+ {
+ MutexLock lock(g_pending_get_tokens_mutex);
+ key = g_pending_token_keys++;
+ g_pending_get_tokens[key] = completion_callback;
+ }
// Queue a call to the C# function that will generate the token.
firebase::callback::AddCallback(
new firebase::callback::CallbackValue1String1(
diff --git a/app_check/testapp/readme.md b/app_check/testapp/readme.md
index 31812a167..8c9895986 100644
--- a/app_check/testapp/readme.md
+++ b/app_check/testapp/readme.md
@@ -8,8 +8,8 @@ inside the Unity Editor.
## Requirements
-* [Unity](http://unity3d.com/) The quickstart project requires 2019.1 or higher.
-* [Xcode](https://developer.apple.com/xcode/) 13.3.1 or higher
+* [Unity](http://unity3d.com/) The quickstart project requires 2020.1 or higher.
+* [Xcode](https://developer.apple.com/xcode/) 15.1 or higher
(when developing for iOS).
* [Android SDK](https://developer.android.com/studio/index.html#downloads)
(when developing for Android).
diff --git a/auth/src/FirebaseAccountLinkException.cs b/auth/src/FirebaseAccountLinkException.cs
index f2625f9fb..4638d9357 100644
--- a/auth/src/FirebaseAccountLinkException.cs
+++ b/auth/src/FirebaseAccountLinkException.cs
@@ -24,16 +24,6 @@ namespace Firebase.Auth {
/// Firebase.Auth.SignInWithCredential.
public sealed class FirebaseAccountLinkException : System.Exception
{
- /// Initializes a new FirebaseAccountLinkException, with the given error code and
- /// message and the AdditionalUserInfo returned from the Firebase auth service.
- [System.Obsolete("Use `FirebaseAccountLinkException(int, string, AuthResult)` instead", false)]
- public FirebaseAccountLinkException(int errorCode, string message,
- SignInResult signInResult) : base(message)
- {
- ErrorCode = errorCode;
- result_DEPRECATED = signInResult;
- }
-
/// Initializes a new FirebaseAccountLinkException, with the given error code and
/// message and the AdditionalUserInfo returned from the Firebase auth service.
public FirebaseAccountLinkException(int errorCode, string message,
@@ -53,11 +43,9 @@ public FirebaseAccountLinkException(int errorCode, string message,
/// the credential may be used to sign-in the user into Firebase with
/// Firebase.Auth.SignInWithCredentialAsync.
public AdditionalUserInfo UserInfo {
- get { return (result != null) ? result.AdditionalUserInfoInternal :
- (result_DEPRECATED != null) ? result_DEPRECATED.Info : null; }
+ get { return (result != null) ? result.AdditionalUserInfoInternal : null; }
}
- private SignInResult result_DEPRECATED = null;
private AuthResult result = null;
}
diff --git a/auth/src/FirebaseUser.cs b/auth/src/FirebaseUser.cs
index 75f39acc8..840b81f4b 100644
--- a/auth/src/FirebaseUser.cs
+++ b/auth/src/FirebaseUser.cs
@@ -42,13 +42,6 @@ private FirebaseUserInternal GetValidFirebaseUserInternal() {
}
}
- private void CompleteSignInResult(SignInResult signInResult) {
- if (signInResult != null) {
- // Cache the authProxy in the SignInResult
- signInResult.authProxy = authProxy;
- }
- }
-
private void CompleteAuthResult(AuthResult authResult) {
if (authResult != null) {
// Cache the authProxy in the AuthResult
@@ -56,23 +49,6 @@ private void CompleteAuthResult(AuthResult authResult) {
}
}
- /// @deprecated This method is deprecated in favor of methods that return
- /// `Task`. Please use
- /// @ref ReauthenticateWithProviderAsync(FederatedAuthProvider) instead.
- ///
- /// Reauthenticate a user via a federated auth provider.
- ///
- /// @note: This operation is supported only on iOS, tvOS and Android
- /// platforms. On other platforms this method will return a Future with a
- /// preset error code: kAuthErrorUnimplemented.
- [System.Obsolete("Please use `Task ReauthenticateWithProviderAsync(FederatedAuthProvider)` instead", false)]
- public async Task ReauthenticateWithProviderAsync_DEPRECATED(FederatedAuthProvider provider) {
- FirebaseUserInternal userInternal = GetValidFirebaseUserInternal();
- SignInResult result = await userInternal.ReauthenticateWithProviderInternalAsync_DEPRECATED(provider);
- CompleteSignInResult(result);
- return result;
- }
-
/// Reauthenticate a user via a federated auth provider.
///
/// @note: This operation is supported only on iOS, tvOS and Android
@@ -85,23 +61,6 @@ public async Task ReauthenticateWithProviderAsync(FederatedAuthProvi
return result;
}
- /// @deprecated This method is deprecated in favor of methods that return
- /// `Task`. Please use
- /// @ref LinkWithProviderAsync(FederatedAuthProvider) instead.
- ///
- /// Link a user via a federated auth provider.
- ///
- /// @note: This operation is supported only on iOS, tvOS and Android
- /// platforms. On other platforms this method will return a Future with a
- /// preset error code: kAuthErrorUnimplemented.
- [System.Obsolete("Please use `Task LinkWithProviderAsync(FederatedAuthProvider)` instead", false)]
- public async Task LinkWithProviderAsync_DEPRECATED(FederatedAuthProvider provider) {
- FirebaseUserInternal userInternal = GetValidFirebaseUserInternal();
- SignInResult result = await userInternal.LinkWithProviderInternalAsync_DEPRECATED(provider);
- CompleteSignInResult(result);
- return result;
- }
-
/// Link a user via a federated auth provider.
///
/// @note: This operation is supported only on iOS, tvOS and Android
@@ -114,43 +73,6 @@ public async Task LinkWithProviderAsync(FederatedAuthProvider provid
return result;
}
- /// @deprecated This method is deprecated in favor of methods that return
- /// `Task`. Please use
- /// @ref LinkWithCredentialAsync(Credential) instead.
- ///
- /// Links the user with the given 3rd party credentials.
- ///
- /// For example, a Facebook login access token, a Twitter token/token-secret
- /// pair.
- /// Status will be an error if the token is invalid, expired, or otherwise
- /// not accepted by the server as well as if the given 3rd party
- /// user id is already linked with another user account or if the current user
- /// is already linked with another id from the same provider.
- ///
- /// Data from the Identity Provider used to sign-in is returned in the
- /// @ref AdditionalUserInfo inside @ref SignInResult.
- [System.Obsolete("Please use `Task LinkWithCredentialAsync(Credential)` instead", false)]
- public async Task LinkAndRetrieveDataWithCredentialAsync(Credential credential) {
- FirebaseUserInternal userInternal = GetValidFirebaseUserInternal();
- SignInResult result = await userInternal.LinkAndRetrieveDataWithCredentialInternalAsync(credential);
- CompleteSignInResult(result);
- return result;
- }
-
- /// @deprecated This method is deprecated in favor of methods that return
- /// `Task`. Please use
- /// @ref LinkWithCredentialAsync(Credential) instead.
- ///
- /// Associates a user account from a third-party identity provider.
- [System.Obsolete("Please use `Task LinkWithCredentialAsync(Credential)` instead", false)]
- public async Task LinkWithCredentialAsync_DEPRECATED(Credential credential) {
- FirebaseUserInternal userInternal = GetValidFirebaseUserInternal();
- // We don't care about the returned user, since there is currently only meant to
- // be a single FirebaseUser under the hood.
- await userInternal.LinkWithCredentialInternalAsync_DEPRECATED(credential);
- return this;
- }
-
/// Associates a user account from a third-party identity provider.
public async Task LinkWithCredentialAsync(Credential credential) {
FirebaseUserInternal userInternal = GetValidFirebaseUserInternal();
@@ -159,28 +81,6 @@ public async Task LinkWithCredentialAsync(Credential credential) {
return result;
}
- /// @deprecated This method is deprecated in favor of methods that return
- /// `Task`. Please use
- /// @ref ReauthenticateAndRetrieveDataAsync(Credential) instead.
- ///
- /// Reauthenticate using a credential.
- ///
- /// Data from the Identity Provider used to sign-in is returned in the
- /// AdditionalUserInfo inside the returned SignInResult.
- ///
- /// Returns an error if the existing credential is not for this user
- /// or if sign-in with that credential failed.
- ///
- /// @note: The current user may be signed out if this operation fails on
- /// Android and desktop platforms.
- [System.Obsolete("Please use `Task ReauthenticateAndRetrieveDataAsync(Credential)` instead", false)]
- public async Task ReauthenticateAndRetrieveDataAsync_DEPRECATED(Credential credential) {
- FirebaseUserInternal userInternal = GetValidFirebaseUserInternal();
- SignInResult result = await userInternal.ReauthenticateAndRetrieveDataInternalAsync_DEPRECATED(credential);
- CompleteSignInResult(result);
- return result;
- }
-
/// Reauthenticate using a credential.
///
/// Data from the Identity Provider used to sign-in is returned in the
@@ -198,20 +98,6 @@ public async Task ReauthenticateAndRetrieveDataAsync(Credential cred
return result;
}
- /// @deprecated This method is deprecated in favor of methods that return
- /// `Task`. Please use @ref UnlinkAsync(string) instead.
- ///
- /// Unlinks the current user from the provider specified.
- /// Status will be an error if the user is not linked to the given provider.
- [System.Obsolete("Please use `Task UnlinkAsync(string)` instead", false)]
- public async Task UnlinkAsync_DEPRECATED(string provider) {
- FirebaseUserInternal userInternal = GetValidFirebaseUserInternal();
- // We don't care about the returned user, since there is currently only meant to
- // be a single FirebaseUser under the hood.
- await userInternal.UnlinkInternalAsync_DEPRECATED(provider);
- return this;
- }
-
/// Unlinks the current user from the provider specified.
/// Status will be an error if the user is not linked to the given provider.
public async Task UnlinkAsync(string provider) {
@@ -221,24 +107,6 @@ public async Task UnlinkAsync(string provider) {
return result;
}
- /// @deprecated This method is deprecated in favor of methods that return
- /// `Task`. Please use
- /// @ref UpdatePhoneNumberCredentialAsync(PhoneAuthCredential) instead.
- ///
- /// Updates the currently linked phone number on the user.
- /// This is useful when a user wants to change their phone number. It is a
- /// shortcut to calling `UnlinkAsync_DEPRECATED(phoneCredential.Provider)`
- /// and then `LinkWithCredentialAsync_DEPRECATED(phoneCredential)`.
- /// `phoneCredential` must have been created with @ref PhoneAuthProvider.
- [System.Obsolete("Please use `Task UpdatePhoneNumberCredentialAsync(PhoneAuthCredential)` instead", false)]
- public async Task UpdatePhoneNumberCredentialAsync_DEPRECATED(Credential credential) {
- FirebaseUserInternal userInternal = GetValidFirebaseUserInternal();
- // We don't care about the returned user, since there is currently only meant to
- // be a single FirebaseUser under the hood.
- await userInternal.UpdatePhoneNumberCredentialInternalAsync_DEPRECATED(credential);
- return this;
- }
-
/// Updates the currently linked phone number on the user.
/// This is useful when a user wants to change their phone number. It is a
/// shortcut to calling `UnlinkAsync(phoneCredential.Provider)`
@@ -248,7 +116,7 @@ public async Task UpdatePhoneNumberCredentialAsync(PhoneAuthCreden
FirebaseUserInternal userInternal = GetValidFirebaseUserInternal();
// We don't care about the returned user, since there is currently only meant to
// be a single FirebaseUser under the hood.
- await userInternal.UpdatePhoneNumberCredentialInternalAsync_DEPRECATED(credential);
+ await userInternal.UpdatePhoneNumberCredentialInternalAsync(credential);
return this;
}
diff --git a/auth/src/PhoneAuthProvider.cs b/auth/src/PhoneAuthProvider.cs
index 195ec9eb0..e4d20acb9 100644
--- a/auth/src/PhoneAuthProvider.cs
+++ b/auth/src/PhoneAuthProvider.cs
@@ -59,17 +59,7 @@ namespace Firebase.Auth {
/// - The operating system validates the phone number without having to
/// send an SMS. @ref PhoneAuthCredential is automatically created and
/// passed to the app via @ref VerificationCompleted.
-///
-/// Note: Both @ref VerificationCompleted_DEPRECATED and
-/// @ref VerificationCompleted will be triggered upon completion. Developer
-/// should only use only one of them to prevent duplicated event handling.
public sealed class PhoneAuthProvider : global::System.IDisposable {
- /// @deprecated This is a deprecated delegate. Please use @ref
- /// VerificationCompleted instead.
- //
- /// Callback used when phone number auto-verification succeeded.
- [System.Obsolete("Please use `VerificationCompleted(PhoneAuthCredential)` instead", false)]
- public delegate void VerificationCompleted_DEPRECATED(Credential credential);
/// Callback used when phone number auto-verification succeeded.
public delegate void VerificationCompleted(PhoneAuthCredential credential);
/// Callback used when phone number verification fails.
@@ -84,7 +74,6 @@ public delegate void CodeSent(string verificationId,
// Class to hold the delegates the user provides to the verification flow.
private class PhoneAuthDelegates {
- public VerificationCompleted_DEPRECATED verificationCompleted_DEPRECATED;
public VerificationCompleted verificationCompleted;
public VerificationFailed verificationFailed;
public CodeSent codeSent;
@@ -102,14 +91,12 @@ private class PhoneAuthDelegates {
/// when the C++ library indicates a callback.
///
/// @return The unique identifier for the cached callbacks.
- private static int SaveCallbacks(VerificationCompleted_DEPRECATED verificationCompleted_DEPRECATED,
- VerificationCompleted verificationCompleted,
+ private static int SaveCallbacks(VerificationCompleted verificationCompleted,
VerificationFailed verificationFailed,
CodeSent codeSent,
CodeAutoRetrievalTimeOut timeOut) {
int uid = uidGenerator++;
var delegates = new PhoneAuthDelegates {
- verificationCompleted_DEPRECATED = verificationCompleted_DEPRECATED,
verificationCompleted = verificationCompleted,
verificationFailed = verificationFailed,
codeSent = codeSent,
@@ -121,23 +108,6 @@ private static int SaveCallbacks(VerificationCompleted_DEPRECATED verificationCo
return uid;
}
- [MonoPInvokeCallback(typeof(PhoneAuthProviderInternal.VerificationCompletedDelegate_DEPRECATED))]
- private static void VerificationCompletedHandler_DEPRECATED(int callbackId,
- System.IntPtr credential) {
- ExceptionAggregator.Wrap(() => {
- Credential c = new Credential(credential, true);
- lock (authCallbacks) {
- PhoneAuthDelegates callbacks;
- if (authCallbacks.TryGetValue(callbackId, out callbacks) &&
- callbacks.verificationCompleted_DEPRECATED != null) {
- callbacks.verificationCompleted_DEPRECATED(c);
- } else {
- c.Dispose();
- }
- }
- });
- }
-
[MonoPInvokeCallback(typeof(PhoneAuthProviderInternal.VerificationCompletedDelegate))]
private static void VerificationCompletedHandler(int callbackId,
System.IntPtr credential) {
@@ -197,10 +167,6 @@ private static void TimeOutHandler(int callbackId, string verificationId) {
});
}
- private static PhoneAuthProviderInternal.VerificationCompletedDelegate_DEPRECATED
- verificationCompletedDelegate_DEPRECATED =
- new PhoneAuthProviderInternal.VerificationCompletedDelegate_DEPRECATED(
- VerificationCompletedHandler_DEPRECATED);
private static PhoneAuthProviderInternal.VerificationCompletedDelegate
verificationCompletedDelegate =
new PhoneAuthProviderInternal.VerificationCompletedDelegate(
@@ -222,194 +188,13 @@ private static PhoneAuthProviderInternal.TimeOutDelegate
private static void InitializeCallbacks() {
if (!callbacksInitialized) {
callbacksInitialized = true;
- PhoneAuthProviderInternal.SetCallbacks(verificationCompletedDelegate_DEPRECATED,
- verificationCompletedDelegate,
+ PhoneAuthProviderInternal.SetCallbacks(verificationCompletedDelegate,
verificationFailedDelegate,
codeSentDelegate,
timeOutDelegate);
}
}
- /// @deprecated This is a deprecated method. Please use @ref
- /// VerifyPhoneNumber(PhoneAuthOptions, VerificationCompleted, VerificationFailed, CodeSent,
- /// CodeAutoRetrievalTimeOut) instead.
- ///
- /// Start the phone number authentication operation.
- ///
- /// @note The verificationCompleted callback is never invoked on iOS since auto-validation is
- /// not supported on that platform.
- ///
- /// @param[in] phoneNumber The phone number identifier supplied by the user.
- /// Its format is normalized on the server, so it can be in any format
- /// here.
- /// @param[in] autoVerifyTimeOutMs The time out for SMS auto retrieval, in
- /// miliseconds. Currently SMS auto retrieval is only supported on Android.
- /// If 0, do not do SMS auto retrieval.
- /// If positive, try to auto-retrieve the SMS verification code.
- /// When the time out is exceeded, `codeAutoRetrievalTimeOut`
- /// is called.
- /// @param[in] forceResendingToken If NULL, assume this is a new phone
- /// number to verify. If not-NULL, bypass the verification session deduping
- /// and force resending a new SMS.
- /// This token is received by the `CodeSent` callback.
- /// This should only be used when the user presses a Resend SMS button.
- /// @param[in] verificationCompleted Phone number auto-verification succeeded.
- /// Called when auto-sms-retrieval or instant validation succeeds.
- /// Provided with the completed credential.
- /// @param[in] verificationFailed Phone number verification failed with an
- /// error. For example, quota exceeded or unknown phone number format.
- /// Provided with a description of the error.
- [System.Obsolete("Please use `VerifyPhoneNumber(PhoneAuthOptions, VerificationCompleted, VerificationFailed, CodeSent, CodeAutoRetrievalTimeOut)` instead", false)]
- public void VerifyPhoneNumber(string phoneNumber, uint autoVerifyTimeOutMs,
- ForceResendingToken forceResendingToken,
- VerificationCompleted_DEPRECATED verificationCompleted,
- VerificationFailed verificationFailed) {
- VerifyPhoneNumber(phoneNumber, autoVerifyTimeOutMs, forceResendingToken,
- verificationCompleted, verificationFailed,
- null, null);
- }
-
- /// @deprecated This is a deprecated method. Please use @ref
- /// VerifyPhoneNumber(PhoneAuthOptions, VerificationCompleted, VerificationFailed, CodeSent,
- /// CodeAutoRetrievalTimeOut) instead.
- ///
- /// Start the phone number authentication operation.
- ///
- /// @note The verificationCompleted callback is never invoked on iOS since auto-validation is
- /// not supported on that platform.
- ///
- /// @param[in] phoneNumber The phone number identifier supplied by the user.
- /// Its format is normalized on the server, so it can be in any format
- /// here.
- /// @param[in] autoVerifyTimeOutMs The time out for SMS auto retrieval, in
- /// miliseconds. Currently SMS auto retrieval is only supported on Android.
- /// If 0, do not do SMS auto retrieval.
- /// If positive, try to auto-retrieve the SMS verification code.
- /// When the time out is exceeded, `codeAutoRetrievalTimeOut`
- /// is called.
- /// @param[in] forceResendingToken If NULL, assume this is a new phone
- /// number to verify. If not-NULL, bypass the verification session deduping
- /// and force resending a new SMS.
- /// This token is received by the `CodeSent` callback.
- /// This should only be used when the user presses a Resend SMS button.
- /// @param[in] verificationCompleted Phone number auto-verification succeeded.
- /// Called when auto-sms-retrieval or instant validation succeeds.
- /// Provided with the completed credential.
- /// @param[in] verificationFailed Phone number verification failed with an
- /// error. For example, quota exceeded or unknown phone number format.
- /// Provided with a description of the error.
- /// @param[in] codeSent SMS message with verification code sent to phone
- /// number. Provided with the verification id to pass along to
- /// `GetCredential` along with the sent code, and a token to use if
- /// the user requests another SMS message be sent.
- [System.Obsolete("Please use `VerifyPhoneNumber(PhoneAuthOptions, VerificationCompleted, VerificationFailed, CodeSent, CodeAutoRetrievalTimeOut)` instead", false)]
- public void VerifyPhoneNumber(string phoneNumber, uint autoVerifyTimeOutMs,
- ForceResendingToken forceResendingToken,
- VerificationCompleted_DEPRECATED verificationCompleted,
- VerificationFailed verificationFailed,
- CodeSent codeSent) {
- VerifyPhoneNumber(phoneNumber, autoVerifyTimeOutMs, forceResendingToken,
- verificationCompleted, verificationFailed,
- codeSent, null);
- }
-
- /// @deprecated This is a deprecated method. Please use @ref
- /// VerifyPhoneNumber(PhoneAuthOptions, VerificationCompleted, VerificationFailed, CodeSent,
- /// CodeAutoRetrievalTimeOut) instead.
- ///
- /// Start the phone number authentication operation.
- ///
- /// @note The verificationCompleted callback is never invoked on iOS since auto-validation is
- /// not supported on that platform.
- ///
- /// @param[in] phoneNumber The phone number identifier supplied by the user.
- /// Its format is normalized on the server, so it can be in any format
- /// here.
- /// @param[in] autoVerifyTimeOutMs The time out for SMS auto retrieval, in
- /// miliseconds. Currently SMS auto retrieval is only supported on Android.
- /// If 0, do not do SMS auto retrieval.
- /// If positive, try to auto-retrieve the SMS verification code.
- /// When the time out is exceeded, `codeAutoRetrievalTimeOut`
- /// is called.
- /// @param[in] forceResendingToken If NULL, assume this is a new phone
- /// number to verify. If not-NULL, bypass the verification session deduping
- /// and force resending a new SMS.
- /// This token is received by the `CodeSent` callback.
- /// This should only be used when the user presses a Resend SMS button.
- /// @param[in] verificationCompleted Phone number auto-verification succeeded.
- /// Called when auto-sms-retrieval or instant validation succeeds.
- /// Provided with the completed credential.
- /// @param[in] verificationFailed Phone number verification failed with an
- /// error. For example, quota exceeded or unknown phone number format.
- /// Provided with a description of the error.
- [System.Obsolete("Please use `VerifyPhoneNumber(PhoneAuthOptions, VerificationCompleted, VerificationFailed, CodeSent, CodeAutoRetrievalTimeOut)` instead", false)]
- public void VerifyPhoneNumber(string phoneNumber, uint autoVerifyTimeOutMs,
- ForceResendingToken forceResendingToken,
- VerificationCompleted_DEPRECATED verificationCompleted,
- VerificationFailed verificationFailed,
- CodeAutoRetrievalTimeOut codeAutoRetrievalTimeOut) {
- VerifyPhoneNumber(phoneNumber, autoVerifyTimeOutMs, forceResendingToken,
- verificationCompleted, verificationFailed,
- null, codeAutoRetrievalTimeOut);
- }
-
- /// @deprecated This is a deprecated method. Please use @ref
- /// VerifyPhoneNumber(PhoneAuthOptions, VerificationCompleted, VerificationFailed, CodeSent,
- /// CodeAutoRetrievalTimeOut) instead.
- ///
- /// Start the phone number authentication operation.
- ///
- /// @note On iOS the verificationCompleted callback is never invoked and the
- /// codeAutoRetrievalTimeOut callback is invoked immediately since auto-validation is not
- /// supported on that platform.
- ///
- /// @param[in] phoneNumber The phone number identifier supplied by the user.
- /// Its format is normalized on the server, so it can be in any format
- /// here.
- /// @param[in] autoVerifyTimeOutMs The time out for SMS auto retrieval, in
- /// miliseconds. Currently SMS auto retrieval is only supported on Android.
- /// If 0, do not do SMS auto retrieval.
- /// If positive, try to auto-retrieve the SMS verification code.
- /// When the time out is exceeded, `codeAutoRetrievalTimeOut`
- /// is called.
- /// @param[in] forceResendingToken If NULL, assume this is a new phone
- /// number to verify. If not-NULL, bypass the verification session deduping
- /// and force resending a new SMS.
- /// This token is received by the `CodeSent` callback.
- /// This should only be used when the user presses a Resend SMS button.
- /// @param[in] verificationCompleted Phone number auto-verification succeeded.
- /// Called when auto-sms-retrieval or instant validation succeeds.
- /// Provided with the completed credential.
- /// @param[in] verificationFailed Phone number verification failed with an
- /// error. For example, quota exceeded or unknown phone number format.
- /// Provided with a description of the error.
- /// @param[in] codeSent SMS message with verification code sent to phone
- /// number. Provided with the verification id to pass along to
- /// `GetCredential` along with the sent code, and a token to use if
- /// the user requests another SMS message be sent.
- /// @param[in] codeAutoRetrievalTimeOut The timeout specified has expired.
- /// Provided with the verification id for the transaction that timed out.
- [System.Obsolete("Please use `VerifyPhoneNumber(PhoneAuthOptions, VerificationCompleted, VerificationFailed, CodeSent, CodeAutoRetrievalTimeOut)` instead", false)]
- public void VerifyPhoneNumber(string phoneNumber, uint autoVerifyTimeOutMs,
- ForceResendingToken forceResendingToken,
- VerificationCompleted_DEPRECATED verificationCompleted,
- VerificationFailed verificationFailed,
- CodeSent codeSent,
- CodeAutoRetrievalTimeOut codeAutoRetrievalTimeOut) {
- int callbackId = SaveCallbacks(
- verificationCompleted_DEPRECATED: verificationCompleted,
- verificationCompleted: null,
- verificationFailed: verificationFailed,
- codeSent: codeSent,
- timeOut: codeAutoRetrievalTimeOut);
- System.IntPtr listener = InternalProvider.VerifyPhoneNumberInternal(
- phoneNumber, autoVerifyTimeOutMs, forceResendingToken, callbackId);
- lock (cppListeners) {
- cppListeners.Add(callbackId, listener);
- }
- }
-
-
/// Start the phone number authentication operation.
///
/// @note On iOS the verificationCompleted callback is never invoked and the
@@ -437,7 +222,6 @@ public void VerifyPhoneNumber(
CodeSent codeSent,
CodeAutoRetrievalTimeOut codeAutoRetrievalTimeOut) {
int callbackId = SaveCallbacks(
- verificationCompleted_DEPRECATED: null,
verificationCompleted: verificationCompleted,
verificationFailed: verificationFailed,
codeSent: codeSent,
@@ -490,23 +274,6 @@ public static PhoneAuthProvider GetInstance(FirebaseAuth auth) {
}
}
- /// @deprecated This is a deprecated method. Please use @ref GetCredential instead.
- ///
- /// Generate a credential for the given phone number.
- ///
- /// @param[in] verification_id The id returned when sending the verification
- /// code. Sent to the caller via @ref Listener::OnCodeSent.
- /// @param[in] verification_code The verification code supplied by the user,
- /// most likely by a GUI where the user manually enters the code
- /// received in the SMS sent by @ref VerifyPhoneNumber.
- ///
- /// @returns New Credential.
- [System.Obsolete("Please use `PhoneAuthCredential GetCredential(string, string)` instead", false)]
- public Credential GetCredential_DEPRECATED(string verificationId,
- string verificationCode) {
- return InternalProvider.GetCredential_DEPRECATED(verificationId, verificationCode);
- }
-
/// Generate a credential for the given phone number.
///
/// @param[in] verification_id The id returned when sending the verification
diff --git a/auth/src/swig/auth.i b/auth/src/swig/auth.i
index 3fc775eac..b56db7dd5 100644
--- a/auth/src/swig/auth.i
+++ b/auth/src/swig/auth.i
@@ -280,6 +280,14 @@ static CppInstanceManager g_auth_instances;
firebase::auth::Auth::FederatedOAuthProviderData::custom_parameters "public";
%rename(CustomParameters) custom_parameters;
+// Ignore the additional FederatedAuth calls, since they haven't been exposed before.
+%ignore firebase::auth::FederatedAuthProvider::SignIn;
+%ignore firebase::auth::FederatedAuthProvider::Link;
+%ignore firebase::auth::FederatedAuthProvider::Reauthenticate;
+%ignore firebase::auth::FederatedOAuthProvider::SignIn;
+%ignore firebase::auth::FederatedOAuthProvider::SignIn;
+%ignore firebase::auth::FederatedOAuthProvider::SignIn;
+
// This is here, instead of the src because of b/35780150
%csmethodmodifiers firebase::auth::Auth::FetchProvidersResult::providers "
/// The IDPs (identity providers) that can be used for `email`.
@@ -328,76 +336,6 @@ static CppInstanceManager g_auth_instances;
%SWIG_FUTURE(Future_Credential, Credential, internal,
firebase::auth::Credential, FirebaseException)
-// Custom SignInResult handler for the Future_SignInResult implementation.
-// Maps auth specific error codes to Auth specific firebase exceptions.
-%define %SWIG_FUTURE_SIGINRESULT_GET_TASK(CSNAME...)
- // Helper for csout typemap to convert futures into tasks.
- // This would be internal, but we need to share it across assemblies.
- static public
- System.Threading.Tasks.Task GetTask(CSNAME fu)
- {
- System.Threading.Tasks.TaskCompletionSource tcs =
- new System.Threading.Tasks.TaskCompletionSource();
- if (fu.status() == FutureStatus.Invalid) {
- tcs.SetException(
- new FirebaseException(0, "Asynchronous operation was not started."));
- return tcs.Task;
- }
- fu.SetOnCompletionCallback(() => {
- try {
- if (fu.status() == FutureStatus.Invalid) {
- /// No result is pending.
- /// FutureBase::Release() or move operator was called.
- tcs.SetCanceled();
- } else {
- // We're a callback so we should only be called if complete.
- System.Diagnostics.Debug.Assert(
- fu.status() != FutureStatus.Complete,
- "Callback triggered but the task is not invalid or complete.");
- int error = fu.error();
- if (error != 0) {
- // check for FirebaseAccountLinkException
- if(error == (int)AuthError.CredentialAlreadyInUse) {
- tcs.SetException(
- new FirebaseAccountLinkException(error,
- fu.error_message(),
- fu.GetResult()));
- } else {
- // Pass the API specific error code and error message to an
- // exception.
- tcs.SetException(new FirebaseException(error,
- fu.error_message()));
- }
- } else {
- // Success!
- tcs.SetResult(fu.GetResult());
- }
- }
- } catch (System.Exception e) {
- Firebase.LogUtil.LogMessage(
- Firebase.LogLevel.Error,
- System.String.Format(
- "Internal error while completing task {0}", e));
- }
- fu.Dispose(); // As we no longer need the future, deallocate it.
- });
- return tcs.Task;
- }
-%enddef // SWIG_FUTURE_SIGINRESULT_GET_TASK
-
-// Assembles the SignInResult Future handler from the stock Future Handler
-// macros defined in future.i and a custom GetTask implementation defined
-// above.
-%define %SWIG_FUTURE_AUTH_SIGNINRESULT(CSACCESS...)
- %SWIG_FUTURE_HEADER(Future_SignInResult, SignInResult, CSACCESS,
- firebase::auth::SignInResult)
- %SWIG_FUTURE_SIGINRESULT_GET_TASK(Future_SignInResult)
- %SWIG_FUTURE_FOOTER(Future_SignInResult, SignInResult,
- firebase::auth::SignInResult)
-%enddef
-
-%SWIG_FUTURE_AUTH_SIGNINRESULT(internal)
-
// Custom AuthResult handler for the Future_AuthResult implementation.
// Maps auth specific error codes to Auth specific firebase exceptions.
%define %SWIG_FUTURE_AUTHRESULT_GET_TASK(CSNAME...)
@@ -503,21 +441,6 @@ static CppInstanceManager g_auth_instances;
%rename(CreateUserWithEmailAndPasswordInternalAsync)
firebase::auth::Auth::CreateUserWithEmailAndPassword;
-%rename(SignInWithCustomTokenInternalAsync_DEPRECATED)
- firebase::auth::Auth::SignInWithCustomToken_DEPRECATED;
-%rename(SignInAndRetrieveDataWithCredentialInternalAsync_DEPRECATED)
- firebase::auth::Auth::SignInAndRetrieveDataWithCredential_DEPRECATED;
-%rename(SignInAnonymouslyInternalAsync_DEPRECATED)
- firebase::auth::Auth::SignInAnonymously_DEPRECATED;
-%rename(SignInWithEmailAndPasswordInternalAsync_DEPRECATED)
- firebase::auth::Auth::SignInWithEmailAndPassword_DEPRECATED;
-%rename(CreateUserWithEmailAndPasswordInternalAsync_DEPRECATED)
- firebase::auth::Auth::CreateUserWithEmailAndPassword_DEPRECATED;
-%rename(SignInWithCredentialInternalAsync_DEPRECATED)
- firebase::auth::Auth::SignInWithCredential_DEPRECATED;
-%rename(SignInWithProviderInternalAsync_DEPRECATED)
- firebase::auth::Auth::SignInWithProvider_DEPRECATED;
-
%extend firebase::auth::Auth {
// Get a C++ instance and increment the reference count to it
%csmethodmodifiers GetAuthInternal(App* app, InitResult* init_result_out) "internal";
@@ -567,24 +490,6 @@ static CppInstanceManager g_auth_instances;
}
}
- /// @deprecated This method is deprecated in favor of methods that return
- /// `Task`. Please use
- /// @ref SignInWithProviderAsync(FederatedAuthProvider) instead.
- ///
- /// Sign-in a user authenticated via a federated auth provider.
- ///
- /// @note: This operation is supported only on iOS, tvOS and Android
- /// platforms. On other platforms this method will return a Future with a
- /// preset error code: kAuthErrorUnimplemented.
- [System.Obsolete("Please use `Task SignInWithProviderAsync(FederatedAuthProvider)` instead", false)]
- public async System.Threading.Tasks.Task SignInWithProviderAsync_DEPRECATED(
- FederatedAuthProvider provider) {
- ThrowIfNull();
- SignInResult result = await SignInWithProviderInternalAsync_DEPRECATED(provider);
- result.authProxy = this;
- return result;
- }
-
/// Sign-in a user authenticated via a federated auth provider.
///
/// @note: This operation is supported only on iOS, tvOS and Android
@@ -879,22 +784,6 @@ static CppInstanceManager g_auth_instances;
}
}
- /// @deprecated This method is deprecated in favor of methods that return
- /// `Task`. Please use
- /// @ref SignInWithCustomTokenAsync(string) instead.
- ///
- /// Asynchronously logs into Firebase with the given Auth token.
- ///
- /// An error is returned, if the token is invalid, expired or otherwise
- /// not accepted by the server.
- [System.Obsolete("Please use `Task SignInWithCustomTokenAsync(string)` instead", false)]
- public async System.Threading.Tasks.Task SignInWithCustomTokenAsync_DEPRECATED(
- string token) {
- ThrowIfNull();
- await SignInWithCustomTokenInternalAsync_DEPRECATED(token);
- return CurrentUser;
- }
-
/// Asynchronously logs into Firebase with the given Auth token.
///
/// An error is returned, if the token is invalid, expired or otherwise
@@ -907,13 +796,6 @@ static CppInstanceManager g_auth_instances;
return result;
}
- public async System.Threading.Tasks.Task SignInWithCredentialAsync_DEPRECATED(
- Credential credential) {
- ThrowIfNull();
- await SignInWithCredentialInternalAsync_DEPRECATED(credential);
- return CurrentUser;
- }
-
/// @brief Asynchronously logs into Firebase with the given `Auth` token.
///
/// An error is returned, if the token is invalid, expired or otherwise not
@@ -925,31 +807,6 @@ static CppInstanceManager g_auth_instances;
return CurrentUser;
}
- /// @deprecated This method is deprecated in favor of methods that return
- /// `Task`. Please use
- /// @ref SignInAndRetrieveDataWithCredentialAsync(Credential)
- /// instead.
- ///
- /// Asynchronously logs into Firebase with the given credentials.
- ///
- /// For example, the credential could wrap a Facebook login access token,
- /// a Twitter token/token-secret pair).
- ///
- /// The SignInResult contains both a reference to the User (which can be null
- /// if the sign in failed), and AdditionalUserInfo, which holds details
- /// specific to the Identity Provider used to sign in.
- ///
- /// An error is returned if the token is invalid, expired, or otherwise not
- /// accepted by the server.
- [System.Obsolete("Please use `Task SignInAndRetrieveDataWithCredentialAsync(Credential)` instead", false)]
- public async System.Threading.Tasks.Task
- SignInAndRetrieveDataWithCredentialAsync_DEPRECATED(Credential credential) {
- ThrowIfNull();
- SignInResult result = await SignInAndRetrieveDataWithCredentialInternalAsync_DEPRECATED(credential);
- result.authProxy = this;
- return result;
- }
-
/// Asynchronously logs into Firebase with the given credentials.
///
/// For example, the credential could wrap a Facebook login access token,
@@ -969,38 +826,6 @@ static CppInstanceManager g_auth_instances;
return result;
}
- /// @deprecated This method is deprecated in favor of methods that return
- /// `Task`. Please use
- /// @ref SignInAnonymouslyAsync() instead.
- ///
- /// Asynchronously creates and becomes an anonymous user.
- /// If there is already an anonymous user signed in, that user will be
- /// returned instead.
- /// If there is any other existing user, that user will be signed out.
- ///
- ///
- /// @if swig_examples
- /// @code{.cs}
- /// bool SignIn(Firebase.Auth.FirebaseAuth auth) {
- /// auth.SignInAnonymouslyAsync_DEPRECATED().ContinueWith((authTask) => {
- /// if (authTask.IsCanceled) {
- /// DebugLog("Anonymous sign in canceled.");
- /// } else if (authTask.IsFaulted) {
- /// DebugLog("Anonymous sign in encountered an error.");
- /// DebugLog(authTask.Exception.ToString());
- /// } else if (authTask.IsCompleted) {
- /// DebugLog("Anonymous sign in successful!");
- /// }
- /// });
- /// }
- /// @endcode
- [System.Obsolete("Please use `Task SignInAnonymouslyAsync()` instead", false)]
- public async System.Threading.Tasks.Task SignInAnonymouslyAsync_DEPRECATED() {
- ThrowIfNull();
- await SignInAnonymouslyInternalAsync_DEPRECATED();
- return CurrentUser;
- }
-
/// Asynchronously creates and becomes an anonymous user.
/// If there is already an anonymous user signed in, that user will be
/// returned instead.
@@ -1029,21 +854,6 @@ static CppInstanceManager g_auth_instances;
return result;
}
- /// @deprecated This method is deprecated in favor of methods that return
- /// `Task`. Please use `Task SignInAnonymouslyAsync()`
- /// instead.
- ///
- /// Signs in using provided email address and password.
- /// An error is returned if the password is wrong or otherwise not accepted
- /// by the server.
- [System.Obsolete("Please use `Task SignInWithEmailAndPasswordAsync(string, string)` instead", false)]
- public async System.Threading.Tasks.Task SignInWithEmailAndPasswordAsync_DEPRECATED(
- string email, string password) {
- ThrowIfNull();
- await SignInWithEmailAndPasswordInternalAsync_DEPRECATED(email, password);
- return CurrentUser;
- }
-
/// Signs in using provided email address and password.
/// An error is returned if the password is wrong or otherwise not accepted
/// by the server.
@@ -1055,24 +865,6 @@ static CppInstanceManager g_auth_instances;
return result;
}
- /// @deprecated This method is deprecated in favor of methods that return
- /// `Task`. Please use
- /// `Task CreateUserWithEmailAndPasswordAsync(string, string)`
- /// instead.
- ///
- /// Creates, and on success, logs in a user with the given email address
- /// and password.
- ///
- /// An error is returned when account creation is unsuccessful
- /// (due to another existing account, invalid password, etc.).
- [System.Obsolete("Please use `Task CreateUserWithEmailAndPasswordAsync(string, string)` instead", false)]
- public async System.Threading.Tasks.Task
- CreateUserWithEmailAndPasswordAsync_DEPRECATED(string email, string password) {
- ThrowIfNull();
- await CreateUserWithEmailAndPasswordInternalAsync_DEPRECATED(email, password);
- return CurrentUser;
- }
-
/// Creates, and on success, logs in a user with the given email address
/// and password.
///
@@ -1085,23 +877,6 @@ static CppInstanceManager g_auth_instances;
result.authProxy = this;
return result;
}
-
- // Complete a task that returns a SignInResult.
- private void CompleteSignInResultTask(
- System.Threading.Tasks.Task task,
- System.Threading.Tasks.TaskCompletionSource
- taskCompletionSource) {
- if (task.IsCanceled) {
- taskCompletionSource.SetCanceled();
- } else if (task.IsFaulted) {
- Firebase.Internal.TaskCompletionSourceCompat.SetException(
- taskCompletionSource, task.Exception);
- } else {
- SignInResult result = task.Result;
- result.authProxy = this;
- taskCompletionSource.SetResult(result);
- }
- }
%}
// Replace the default Dispose() method to remove references to this instance
@@ -1157,12 +932,7 @@ static CppInstanceManager g_auth_instances;
%rename(ProviderId) firebase::auth::PhoneAuthProvider::kProviderId;
%rename(ProviderId) firebase::auth::PlayGamesAuthProvider::kProviderId;
%rename(ProviderId) firebase::auth::TwitterAuthProvider::kProviderId;
-%typemap(csclassmodifiers) firebase::auth::YahooAuthProvider "
- /// @deprecated This class is no longer used and will be removed in a future release.
- /// Please use the OAuthProvider to create credentials for Yahoo.
- [System.Obsolete(\"Please use the OAuthProvider to create credentials for Yahoo.\")]
- public class";
-%rename(ProviderId) firebase::auth::YahooAuthProvider::kProviderId;
+%ignore firebase::auth::YahooAuthProvider;
%STATIC_CLASS(EmailAuthProvider(), firebase::auth::EmailAuthProvider)
%STATIC_CLASS(FacebookAuthProvider(), firebase::auth::FacebookAuthProvider)
@@ -1188,23 +958,9 @@ static CppInstanceManager g_auth_instances;
%rename(ProviderId) firebase::auth::AdditionalUserInfo::provider_id;
%rename(UserName) firebase::auth::AdditionalUserInfo::user_name;
%rename(UpdatedCredential) firebase::auth::AdditionalUserInfo::updated_credential;
-// SignInResult
-%rename(UserInternal) firebase::auth::SignInResult::user;
-%rename(Info) firebase::auth::SignInResult::info;
// UserMetadata
%rename(CreationTimestamp) firebase::auth::UserMetadata::creation_timestamp;
%rename(LastSignInTimestamp) firebase::auth::UserMetadata::last_sign_in_timestamp;
-%rename(Meta) firebase::auth::SignInResult::meta;
-
-%typemap(cscode) firebase::auth::SignInResult %{
- // Holds a reference to the FirebaseAuth proxy object so that it isn't
- // garbage collected while the application holds a reference to this object.
- internal FirebaseAuth authProxy;
-
- /// The currently signed-in FirebaseUser, or null if there isn't any (i.e.
- /// the user is signed out).
- public FirebaseUser User { get { return authProxy != null ? authProxy.CurrentUser : null; } }
-%}
// AuthResult
%rename(AdditionalUserInfoInternal) firebase::auth::AuthResult::additional_user_info;
@@ -1272,14 +1028,6 @@ static CppInstanceManager g_auth_instances;
}
}
- /// @deprecated Please use @ref PhoneNumber instead.
- ///
- /// Gets the phone number for the user, in E.164 format.
- [System.Obsolete("Please use `PhoneNumber` instead", false)]
- public string phone_number {
- get { return PhoneNumberInternal; }
- }
-
/// Gets the phone number for the user, in E.164 format.
public string PhoneNumber {
get { return PhoneNumberInternal; }
@@ -1308,8 +1056,6 @@ static CppInstanceManager g_auth_instances;
%}
// Rename User methods
-%rename(LinkAndRetrieveDataWithCredentialInternalAsync)
- firebase::auth::User::LinkAndRetrieveDataWithCredential;
%rename(ReauthenticateAndRetrieveDataInternalAsync)
firebase::auth::User::ReauthenticateAndRetrieveData;
%rename(ReauthenticateWithProviderInternalAsync)
@@ -1323,19 +1069,6 @@ static CppInstanceManager g_auth_instances;
%rename(UpdatePhoneNumberCredentialInternalAsync)
firebase::auth::User::UpdatePhoneNumberCredential;
-%rename(ReauthenticateWithProviderInternalAsync_DEPRECATED)
- firebase::auth::User::ReauthenticateWithProvider_DEPRECATED;
-%rename(LinkWithProviderInternalAsync_DEPRECATED)
- firebase::auth::User::LinkWithProvider_DEPRECATED;
-%rename(LinkWithCredentialInternalAsync_DEPRECATED)
- firebase::auth::User::LinkWithCredential_DEPRECATED;
-%rename(ReauthenticateAndRetrieveDataInternalAsync_DEPRECATED)
- firebase::auth::User::ReauthenticateAndRetrieveData_DEPRECATED;
-%rename(UnlinkInternalAsync_DEPRECATED)
- firebase::auth::User::Unlink_DEPRECATED;
-%rename(UpdatePhoneNumberCredentialInternalAsync_DEPRECATED)
- firebase::auth::User::UpdatePhoneNumberCredential_DEPRECATED;
-
// Rename token retrieval method.
// NOTE: This is not a property as it is an asynchronous operation.
%rename(Token) firebase::auth::User::GetTokenThreadSafe;
@@ -1348,7 +1081,6 @@ static CppInstanceManager g_auth_instances;
%ignore firebase::auth::User::EmailVerified;
%ignore firebase::auth::User::Anonymous;
%ignore firebase::auth::User::RefreshToken;
-%ignore firebase::auth::User::provider_data_DEPRECATED;
// NOTE: It's not necesaary to ignore the following methods
// as they're replaced by the attributes below:
// * firebase::auth::User::Email
@@ -1368,7 +1100,6 @@ static CppInstanceManager g_auth_instances;
// Deprecated method that conflicts with the CurrentUser property.
%ignore firebase::auth::Auth::current_user;
-%ignore firebase::auth::Auth::current_user_DEPRECATED;
// Make basic getters use C# Properties instead.
%attributeval(firebase::auth::Auth, firebase::auth::User,
CurrentUserInternal, current_user);
@@ -1417,18 +1148,12 @@ SWIG_MAP_CFUNC_TO_CSDELEGATE(::firebase::auth::AuthStateChangedDelegateFunc,
// The classes should be sealed.
%typemap(csclassmodifiers) firebase::auth::AdditionalUserInfo
"public sealed class";
-%typemap(csclassmodifiers) firebase::auth::SignInResult "
- [System.Obsolete(\"Please use the Auth methods which return instances of `AuthResult` instead.\")]
- public sealed class";
// The classes are not meant to be publicly constructable.
%ignore firebase::auth::AdditionalUserInfo::AdditionalUserInfo;
-%ignore firebase::auth::SignInResult::SignInResult;
// The fields in the classes are meant to be readonly.
%immutable firebase::auth::AdditionalUserInfo::provider_id;
%immutable firebase::auth::AdditionalUserInfo::user_name;
%immutable firebase::auth::AdditionalUserInfo::profile;
-%immutable firebase::auth::SignInResult::user;
-%immutable firebase::auth::SignInResult::info;
%immutable firebase::auth::UserMetadata::creation_timestamp;
%immutable firebase::auth::UserMetadata::last_sign_in_timestamp;
@@ -1439,14 +1164,6 @@ SWIG_MAP_CFUNC_TO_CSDELEGATE(::firebase::auth::AuthStateChangedDelegateFunc,
%csmethodmodifiers firebase::auth::AdditionalUserInfo::user_name "
/// The name of the user.
public";
-%csmethodmodifiers firebase::auth::SignInResult::user "
- /// The currently signed-in FirebaseUser, or null if there isn't any (i.e.
- /// the user is signed out).
- public";
-%csmethodmodifiers firebase::auth::SignInResult::info "
- /// Identity-provider specific information for the user, if the provider is
- /// one of Facebook, Github, Google, or Twitter.
- public";
// Convert Profile to a C# object dictionary.
%rename(ProfileInternal) firebase::auth::AdditionalUserInfo::profile;
@@ -1480,8 +1197,6 @@ namespace auth {
// The callbacks that are used by the Phone Auth Listener, that need to reach
// back to C# callbacks.
-typedef void (SWIGSTDCALL *VerificationCompletedCallback_DEPRECATED)(
- int callback_id, void* credential);
typedef void (SWIGSTDCALL *VerificationCompletedCallback)(
int callback_id, void* credential);
typedef void (SWIGSTDCALL *VerificationFailedCallback)(
@@ -1500,18 +1215,6 @@ class PhoneAuthListenerImpl
PhoneAuthListenerImpl(int callback_id) : callback_id_(callback_id) {}
virtual ~PhoneAuthListenerImpl() {}
- virtual void OnVerificationCompleted(Credential credential) {
- // Both `OnVerificationCompleted(Credential) and
- // OnVerificationCompleted(PhoneAuthCredential) will be triggered. We
- // support both delegates but the user needs to choose to use only one of
- // them.
- if (g_verification_completed_callback_DEPRECATED) {
- firebase::callback::AddCallback(
- new firebase::callback::CallbackValue2(
- callback_id_, credential, VerificationCompleted_DEPRECATED));
- }
- }
-
virtual void OnVerificationCompleted(PhoneAuthCredential credential) {
// Both `OnVerificationCompleted(Credential) and
// OnVerificationCompleted(PhoneAuthCredential) will be triggered. We
@@ -1555,13 +1258,11 @@ class PhoneAuthListenerImpl
}
// Called from C# to pass along the C# functions to be called.
- static void SetCallbacks(VerificationCompletedCallback_DEPRECATED completed_callback_DEPRECATED,
- VerificationCompletedCallback completed_callback,
+ static void SetCallbacks(VerificationCompletedCallback completed_callback,
VerificationFailedCallback failed_callback,
CodeSentCallback sent_callback,
TimeOutCallback time_callback) {
MutexLock lock(g_mutex);
- g_verification_completed_callback_DEPRECATED = completed_callback_DEPRECATED;
g_verification_completed_callback = completed_callback;
g_verification_failed_callback = failed_callback;
g_code_sent_callback = sent_callback;
@@ -1571,21 +1272,11 @@ class PhoneAuthListenerImpl
int callback_id_;
static Mutex g_mutex;
- static VerificationCompletedCallback_DEPRECATED g_verification_completed_callback_DEPRECATED;
static VerificationCompletedCallback g_verification_completed_callback;
static VerificationFailedCallback g_verification_failed_callback;
static CodeSentCallback g_code_sent_callback;
static TimeOutCallback g_time_out_callback;
- static void VerificationCompleted_DEPRECATED(int callback_id, Credential credential) {
- MutexLock lock(g_mutex);
- if (g_verification_completed_callback_DEPRECATED) {
- // Copy the credential so it can be owned by the C# proxy object.
- Credential* copy = new Credential(credential);
- g_verification_completed_callback_DEPRECATED(callback_id, copy);
- }
- }
-
static void VerificationCompleted(int callback_id, PhoneAuthCredential credential) {
MutexLock lock(g_mutex);
if (g_verification_completed_callback) {
@@ -1626,7 +1317,6 @@ class PhoneAuthListenerImpl
};
Mutex PhoneAuthListenerImpl::g_mutex;
-VerificationCompletedCallback_DEPRECATED PhoneAuthListenerImpl::g_verification_completed_callback_DEPRECATED = nullptr;
VerificationCompletedCallback PhoneAuthListenerImpl::g_verification_completed_callback = nullptr;
VerificationFailedCallback PhoneAuthListenerImpl::g_verification_failed_callback = nullptr;
CodeSentCallback PhoneAuthListenerImpl::g_code_sent_callback = nullptr;
@@ -1637,19 +1327,6 @@ TimeOutCallback PhoneAuthListenerImpl::g_time_out_callback = nullptr;
%}
%extend firebase::auth::PhoneAuthProvider {
- // Creates a new Listener with the given callback_id to handle the call.
- // Returns that Listener, so the caller can manage that memory.
- void* VerifyPhoneNumberInternal(
- const char* phone_number, uint32_t auto_verify_time_out_ms,
- const firebase::auth::PhoneAuthProvider::ForceResendingToken* token,
- int callback_id) {
- firebase::auth::PhoneAuthListenerImpl* listener =
- new firebase::auth::PhoneAuthListenerImpl(callback_id);
- self->VerifyPhoneNumber(phone_number, auto_verify_time_out_ms,
- token, listener);
- return listener;
- }
-
// Creates a new Listener with the given callback_id to handle the call.
// Returns that Listener, so the caller can manage that memory.
void* VerifyPhoneNumberInternal(
@@ -1669,19 +1346,17 @@ TimeOutCallback PhoneAuthListenerImpl::g_time_out_callback = nullptr;
// Save the C# callbacks so they can be called later.
static void SetCallbacks(
- firebase::auth::VerificationCompletedCallback_DEPRECATED completed_callback_DEPRECATED,
firebase::auth::VerificationCompletedCallback completed_callback,
firebase::auth::VerificationFailedCallback failed_callback,
firebase::auth::CodeSentCallback sent_callback,
firebase::auth::TimeOutCallback time_out_callback) {
firebase::auth::PhoneAuthListenerImpl::SetCallbacks(
- completed_callback_DEPRECATED, completed_callback, failed_callback,
+ completed_callback, failed_callback,
sent_callback, time_out_callback);
}
}
%typemap(cscode) firebase::auth::PhoneAuthProvider %{
-public delegate void VerificationCompletedDelegate_DEPRECATED(int callbackId, System.IntPtr credential);
public delegate void VerificationCompletedDelegate(int callbackId, System.IntPtr credential);
public delegate void VerificationFailedDelegate(int callbackId, string error);
public delegate void CodeSentDelegate(int callbackId, string verificationId, System.IntPtr token);
@@ -1689,9 +1364,6 @@ public delegate void TimeOutDelegate(int callbackId, string verificationId);
%}
// Map callback function types delegates.
-SWIG_MAP_CFUNC_TO_CSDELEGATE(
- ::firebase::auth::VerificationCompletedCallback_DEPRECATED,
- Firebase.Auth.PhoneAuthProviderInternal.VerificationCompletedDelegate_DEPRECATED)
SWIG_MAP_CFUNC_TO_CSDELEGATE(
::firebase::auth::VerificationCompletedCallback,
Firebase.Auth.PhoneAuthProviderInternal.VerificationCompletedDelegate)
diff --git a/auth/testapp/Assets/Firebase/Sample/Auth/UIHandler.cs b/auth/testapp/Assets/Firebase/Sample/Auth/UIHandler.cs
index 479f74f40..878b2856f 100644
--- a/auth/testapp/Assets/Firebase/Sample/Auth/UIHandler.cs
+++ b/auth/testapp/Assets/Firebase/Sample/Auth/UIHandler.cs
@@ -165,24 +165,6 @@ protected void DisplayProfile(IDictionary profile, int indentLevel
}
}
- // Display user information reported
- protected void DisplaySignInResult(Firebase.Auth.SignInResult result, int indentLevel) {
- string indent = new String(' ', indentLevel * 2);
- DisplayDetailedUserInfo(result.User, indentLevel);
- var metadata = result.Meta;
- if (metadata != null) {
- DebugLog(String.Format("{0}Created: {1}", indent, metadata.CreationTimestamp));
- DebugLog(String.Format("{0}Last Sign-in: {1}", indent, metadata.LastSignInTimestamp));
- }
- var info = result.Info;
- if (info != null) {
- DebugLog(String.Format("{0}Additional User Info:", indent));
- DebugLog(String.Format("{0} User Name: {1}", indent, info.UserName));
- DebugLog(String.Format("{0} Provider ID: {1}", indent, info.ProviderId));
- DisplayProfile(info.Profile, indentLevel + 1);
- }
- }
-
// Display user information reported
protected void DisplayAuthResult(Firebase.Auth.AuthResult result, int indentLevel) {
string indent = new String(' ', indentLevel * 2);
@@ -297,27 +279,6 @@ protected bool LogTaskCompletion(Task task, string operation) {
return complete;
}
- // Create a user with the email and password.
- public Task CreateUserWithEmailAsync_DEPRECATED() {
- DebugLog(String.Format("Attempting to create user {0}...", email));
- DisableUI();
-
- // This passes the current displayName through to HandleCreateUserAsync
- // so that it can be passed to UpdateUserProfile(). displayName will be
- // reset by AuthStateChanged() when the new user is created and signed in.
- string newDisplayName = displayName;
- return auth.CreateUserWithEmailAndPasswordAsync_DEPRECATED(email, password)
- .ContinueWithOnMainThread((task) => {
- EnableUI();
- if (LogTaskCompletion(task, "User Creation")) {
- var user = task.Result;
- DisplayDetailedUserInfo(user, 1);
- return UpdateUserProfileAsync(newDisplayName: newDisplayName);
- }
- return task;
- }).Unwrap();
- }
-
// Create a user with the email and password.
public Task CreateUserWithEmailAsync() {
DebugLog(String.Format("Attempting to create user {0}...", email));
@@ -359,20 +320,6 @@ public Task UpdateUserProfileAsync(string newDisplayName = null) {
});
}
- // Sign-in with an email and password.
- public Task SigninWithEmailAsync_DEPRECATED() {
- DebugLog(String.Format("Attempting to sign in as {0}...", email));
- DisableUI();
- if (signInAndFetchProfile) {
- return auth.SignInAndRetrieveDataWithCredentialAsync_DEPRECATED(
- Firebase.Auth.EmailAuthProvider.GetCredential(email, password)).ContinueWithOnMainThread(
- HandleSignInWithSignInResult);
- } else {
- return auth.SignInWithEmailAndPasswordAsync_DEPRECATED(email, password)
- .ContinueWithOnMainThread(HandleSignInWithUser);
- }
- }
-
// Sign-in with an email and password.
public Task SigninWithEmailAsync() {
DebugLog(String.Format("Attempting to sign in as {0}...", email));
@@ -387,23 +334,6 @@ public Task SigninWithEmailAsync() {
}
}
- // This is functionally equivalent to the Signin() function. However, it
- // illustrates the use of Credentials, which can be aquired from many
- // different sources of authentication.
- public Task SigninWithEmailCredentialAsync_DEPRECATED() {
- DebugLog(String.Format("Attempting to sign in as {0}...", email));
- DisableUI();
- if (signInAndFetchProfile) {
- return auth.SignInAndRetrieveDataWithCredentialAsync_DEPRECATED(
- Firebase.Auth.EmailAuthProvider.GetCredential(email, password)).ContinueWithOnMainThread(
- HandleSignInWithSignInResult);
- } else {
- return auth.SignInWithCredentialAsync(
- Firebase.Auth.EmailAuthProvider.GetCredential(email, password)).ContinueWithOnMainThread(
- HandleSignInWithUser);
- }
- }
-
// This is functionally equivalent to the Signin() function. However, it
// illustrates the use of Credentials, which can be aquired from many
// different sources of authentication.
@@ -421,13 +351,6 @@ public Task SigninWithEmailCredentialAsync() {
}
}
- // Attempt to sign in anonymously.
- public Task SigninAnonymouslyAsync_DEPRECATED() {
- DebugLog("Attempting to sign anonymously...");
- DisableUI();
- return auth.SignInAnonymouslyAsync_DEPRECATED().ContinueWithOnMainThread(HandleSignInWithUser);
- }
-
// Attempt to sign in anonymously.
public Task SigninAnonymouslyAsync() {
DebugLog("Attempting to sign anonymously...");
@@ -445,7 +368,7 @@ public void AuthenticateToGameCenter() {
#endif
}
- public Task SignInWithGameCenterAsync_DEPRECATED() {
+ public Task SignInWithGameCenterAsync() {
var credentialTask = Firebase.Auth.GameCenterAuthProvider.GetCredentialAsync();
var continueTask = credentialTask.ContinueWithOnMainThread(task => {
if(!task.IsCompleted)
@@ -456,7 +379,7 @@ public Task SignInWithGameCenterAsync_DEPRECATED() {
var credential = task.Result;
- var loginTask = auth.SignInWithCredentialAsync_DEPRECATED(credential);
+ var loginTask = auth.SignInWithCredentialAsync(credential);
return loginTask.ContinueWithOnMainThread(HandleSignInWithUser);
});
@@ -484,43 +407,6 @@ void HandleSignInWithAuthResult(Task task) {
}
}
- // Called when a sign-in with profile data completes.
- void HandleSignInWithSignInResult(Task task) {
- EnableUI();
- if (LogTaskCompletion(task, "Sign-in")) {
- DisplaySignInResult(task.Result, 1);
- }
- }
-
- // Link the current user with an email / password credential.
- protected Task LinkWithEmailCredentialAsync_DEPRECATED() {
- if (auth.CurrentUser == null) {
- DebugLog("Not signed in, unable to link credential to user.");
- var tcs = new TaskCompletionSource();
- tcs.SetException(new Exception("Not signed in"));
- return tcs.Task;
- }
- DebugLog("Attempting to link credential to user...");
- Firebase.Auth.Credential cred =
- Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
- if (signInAndFetchProfile) {
- return
- auth.CurrentUser.LinkAndRetrieveDataWithCredentialAsync(cred).ContinueWithOnMainThread(
- task => {
- if (LogTaskCompletion(task, "Link Credential")) {
- DisplaySignInResult(task.Result, 1);
- }
- }
- );
- } else {
- return auth.CurrentUser.LinkWithCredentialAsync_DEPRECATED(cred).ContinueWithOnMainThread(task => {
- if (LogTaskCompletion(task, "Link Credential")) {
- DisplayDetailedUserInfo(task.Result, 1);
- }
- });
- }
- }
-
// Link the current user with an email / password credential.
protected Task LinkWithEmailCredentialAsync() {
if (auth.CurrentUser == null) {
@@ -539,35 +425,6 @@ protected Task LinkWithEmailCredentialAsync() {
});
}
- // Reauthenticate the user with the current email / password.
- protected Task ReauthenticateAsync_DEPRECATED() {
- var user = auth.CurrentUser;
- if (user == null) {
- DebugLog("Not signed in, unable to reauthenticate user.");
- var tcs = new TaskCompletionSource();
- tcs.SetException(new Exception("Not signed in"));
- return tcs.Task;
- }
- DebugLog("Reauthenticating...");
- DisableUI();
- Firebase.Auth.Credential cred = Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
- if (signInAndFetchProfile) {
- return user.ReauthenticateAndRetrieveDataAsync_DEPRECATED(cred).ContinueWithOnMainThread(task => {
- EnableUI();
- if (LogTaskCompletion(task, "Reauthentication")) {
- DisplaySignInResult(task.Result, 1);
- }
- });
- } else {
- return user.ReauthenticateAsync(cred).ContinueWithOnMainThread(task => {
- EnableUI();
- if (LogTaskCompletion(task, "Reauthentication")) {
- DisplayDetailedUserInfo(auth.CurrentUser, 1);
- }
- });
- }
- }
-
// Reauthenticate the user with the current email / password.
protected Task ReauthenticateAsync() {
var user = auth.CurrentUser;
@@ -637,24 +494,6 @@ void GetUserInfo() {
}
}
- // Unlink the email credential from the currently logged in user.
- protected Task UnlinkEmailAsync_DEPRECATED() {
- if (auth.CurrentUser == null) {
- DebugLog("Not signed in, unable to unlink");
- var tcs = new TaskCompletionSource();
- tcs.SetException(new Exception("Not signed in"));
- return tcs.Task;
- }
- DebugLog("Unlinking email credential");
- DisableUI();
- return auth.CurrentUser.UnlinkAsync_DEPRECATED(
- Firebase.Auth.EmailAuthProvider.GetCredential(email, password).Provider)
- .ContinueWithOnMainThread(task => {
- EnableUI();
- LogTaskCompletion(task, "Unlinking");
- });
- }
-
// Unlink the email credential from the currently logged in user.
protected Task UnlinkEmailAsync() {
if (auth.CurrentUser == null) {
@@ -738,22 +577,22 @@ protected Firebase.Auth.FederatedOAuthProvider BuildFederatedOAuthProvider(strin
return new Firebase.Auth.FederatedOAuthProvider(data);
}
- protected void SignInWithProvider_DEPRECATED(string providerId) {
+ protected void SignInWithProvider(string providerId) {
Firebase.Auth.FederatedOAuthProvider provider = BuildFederatedOAuthProvider(providerId);
- auth.SignInWithProviderAsync_DEPRECATED(provider).ContinueWithOnMainThread(signin_task => {
- if (LogTaskCompletion(signin_task, "SignInWithProvider")) {
- DebugLog("SignInWithProviderTask Completed:" + signin_task.IsCompleted);
+ auth.SignInWithProviderAsync(provider).ContinueWithOnMainThread(task => {
+ if (LogTaskCompletion(task, "SignInWithProvider")) {
+ DebugLog("SignInWithProviderTask Completed:" + task.IsCompleted);
}
- if(signin_task.Exception != null) {
- DebugLog("SignInWithProviderTask - Exception: " + signin_task.Exception.Message);
+ if(task.Exception != null) {
+ DebugLog("SignInWithProviderTask - Exception: " + task.Exception.Message);
return;
}
- DisplaySignInResult(signin_task.Result, 1);
+ DisplayAuthResult(task.Result, 1);
});
}
- protected void ReauthenticateWithProvider_DEPRECATED(string providerId) {
+ protected void ReauthenticateWithProvider(string providerId) {
if(auth.CurrentUser == null) {
DebugLog("Login with user before re-authenticating");
return;
@@ -761,7 +600,7 @@ protected void ReauthenticateWithProvider_DEPRECATED(string providerId) {
Firebase.Auth.FederatedOAuthProvider provider = BuildFederatedOAuthProvider(providerId);
- auth.CurrentUser.ReauthenticateWithProviderAsync_DEPRECATED(provider).ContinueWithOnMainThread(task => {
+ auth.CurrentUser.ReauthenticateWithProviderAsync(provider).ContinueWithOnMainThread(task => {
if (LogTaskCompletion(task, "ReauthenticateWithProvider")) {
DebugLog("ReauthenticateWithProvider Completed:" + task.IsCompleted);
}
@@ -769,18 +608,18 @@ protected void ReauthenticateWithProvider_DEPRECATED(string providerId) {
Debug.Log("ReauthenticateWithProviderTask - Exception: " + task.Exception.Message);
return;
}
- DisplaySignInResult(task.Result, 1);
+ DisplayAuthResult(task.Result, 1);
});
}
- protected void LinkWithProvider_DEPRECATED(string providerId) {
+ protected void LinkWithProvider(string providerId) {
if(auth.CurrentUser == null) {
DebugLog("Login with user before linking.");
return;
}
Firebase.Auth.FederatedOAuthProvider provider = BuildFederatedOAuthProvider(providerId);
- auth.CurrentUser.LinkWithProviderAsync_DEPRECATED(provider).ContinueWithOnMainThread(task => {
+ auth.CurrentUser.LinkWithProviderAsync(provider).ContinueWithOnMainThread(task => {
if (LogTaskCompletion(task, "LinkWithProvider")) {
DebugLog("LinkWithProvider Completed:" + task.IsCompleted);
}
@@ -788,11 +627,11 @@ protected void LinkWithProvider_DEPRECATED(string providerId) {
Debug.Log("LinkWithProvider - Exception: " + task.Exception.Message);
return;
}
- DisplaySignInResult(task.Result, 1);
+ DisplayAuthResult(task.Result, 1);
});
}
- protected void UnlinkUser_DEPRECATED(string providerId) {
+ protected void UnlinkUser(string providerId) {
if(auth.CurrentUser == null) {
DebugLog("Login with user before un-linking.");
return;
@@ -801,7 +640,7 @@ protected void UnlinkUser_DEPRECATED(string providerId) {
if (auth.CurrentUser != null) {
DebugLog("Attempting to ulink user from provider: " + providerId);
DisableUI();
- auth.CurrentUser.UnlinkAsync_DEPRECATED(providerId).ContinueWithOnMainThread( task => {
+ auth.CurrentUser.UnlinkAsync(providerId).ContinueWithOnMainThread(task => {
EnableUI();
DebugLog("Unlink Complete");
});
@@ -810,31 +649,6 @@ protected void UnlinkUser_DEPRECATED(string providerId) {
}
}
- // Begin authentication with the phone number.
- protected void VerifyPhoneNumber_DEPRECATED() {
- var phoneAuthProvider = Firebase.Auth.PhoneAuthProvider.GetInstance(auth);
- phoneAuthProvider.VerifyPhoneNumber(phoneNumber, phoneAuthTimeoutMs, null,
- verificationCompleted: (cred) => {
- DebugLog("Phone Auth, auto-verification completed");
- if (signInAndFetchProfile) {
- auth.SignInAndRetrieveDataWithCredentialAsync_DEPRECATED(cred).ContinueWithOnMainThread(
- HandleSignInWithSignInResult);
- } else {
- auth.SignInWithCredentialAsync_DEPRECATED(cred).ContinueWithOnMainThread(HandleSignInWithUser);
- }
- },
- verificationFailed: (error) => {
- DebugLog("Phone Auth, verification failed: " + error);
- },
- codeSent: (id, token) => {
- phoneAuthVerificationId = id;
- DebugLog("Phone Auth, code sent");
- },
- codeAutoRetrievalTimeOut: (id) => {
- DebugLog("Phone Auth, auto-verification timed out");
- });
- }
-
// Begin authentication with the phone number.
protected void VerifyPhoneNumber() {
var phoneAuthProvider = Firebase.Auth.PhoneAuthProvider.GetInstance(auth);
@@ -865,19 +679,6 @@ protected void VerifyPhoneNumber() {
});
}
- // Sign in using phone number authentication using code input by the user.
- protected void VerifyReceivedPhoneCode_DEPRECATED() {
- var phoneAuthProvider = Firebase.Auth.PhoneAuthProvider.GetInstance(auth);
- // receivedCode should have been input by the user.
- var cred = phoneAuthProvider.GetCredential_DEPRECATED(phoneAuthVerificationId, receivedCode);
- if (signInAndFetchProfile) {
- auth.SignInAndRetrieveDataWithCredentialAsync_DEPRECATED(cred).ContinueWithOnMainThread(
- HandleSignInWithSignInResult);
- } else {
- auth.SignInWithCredentialAsync(cred).ContinueWithOnMainThread(HandleSignInWithUser);
- }
- }
-
// Sign in using phone number authentication using code input by the user.
protected void VerifyReceivedPhoneCode() {
var phoneAuthProvider = Firebase.Auth.PhoneAuthProvider.GetInstance(auth);
@@ -925,7 +726,7 @@ void GUIDisplayGameCenterControls() {
tooltip = "No Game Center player authenticated.";
}
if (GUILayout.Button(new GUIContent("Sign In With Game Center", tooltip))) {
- SignInWithGameCenterAsync_DEPRECATED();
+ SignInWithGameCenterAsync();
}
}
}
@@ -1085,28 +886,16 @@ void GUIDisplayControls() {
GUILayout.Space(20);
if (GUILayout.Button("SignInWith | Microsoft")) {
- SignInWithProvider_DEPRECATED(Firebase.Auth.MicrosoftAuthProvider.ProviderId);
- }
- if (GUILayout.Button("SignInWith | Yahoo")) {
- SignInWithProvider_DEPRECATED(Firebase.Auth.YahooAuthProvider.ProviderId);
+ SignInWithProvider(Firebase.Auth.MicrosoftAuthProvider.ProviderId);
}
if (GUILayout.Button("ReauthWith | Microsoft")) {
- ReauthenticateWithProvider_DEPRECATED(Firebase.Auth.MicrosoftAuthProvider.ProviderId);
- }
- if (GUILayout.Button("ReauthWith | Yahoo")) {
- ReauthenticateWithProvider_DEPRECATED(Firebase.Auth.YahooAuthProvider.ProviderId);
+ ReauthenticateWithProvider(Firebase.Auth.MicrosoftAuthProvider.ProviderId);
}
if (GUILayout.Button("LinkWith | Microsoft")) {
- LinkWithProvider_DEPRECATED(Firebase.Auth.MicrosoftAuthProvider.ProviderId);
- }
- if (GUILayout.Button("LinkWith | Yahoo")) {
- LinkWithProvider_DEPRECATED(Firebase.Auth.YahooAuthProvider.ProviderId);
+ LinkWithProvider(Firebase.Auth.MicrosoftAuthProvider.ProviderId);
}
if (GUILayout.Button("Unlink User | Microsoft")) {
- UnlinkUser_DEPRECATED(Firebase.Auth.MicrosoftAuthProvider.ProviderId);
- }
- if (GUILayout.Button("Unlink User | Yahoo")) {
- UnlinkUser_DEPRECATED(Firebase.Auth.YahooAuthProvider.ProviderId);
+ UnlinkUser(Firebase.Auth.MicrosoftAuthProvider.ProviderId);
}
GUIDisplayCustomControls();
diff --git a/auth/testapp/Assets/Firebase/Sample/Auth/UIHandlerAutomated.cs b/auth/testapp/Assets/Firebase/Sample/Auth/UIHandlerAutomated.cs
index 74e891e17..57e016811 100644
--- a/auth/testapp/Assets/Firebase/Sample/Auth/UIHandlerAutomated.cs
+++ b/auth/testapp/Assets/Firebase/Sample/Auth/UIHandlerAutomated.cs
@@ -39,9 +39,6 @@ public override void Start() {
TestSignInEmailAsync,
TestSignInCredentialAsync,
TestUpdateUserProfileAsync,
- TestSignInAnonymouslyAsync_DEPRECATED,
- TestSignInEmailAsync_DEPRECATED,
- TestSignInCredentialAsync_DEPRECATED,
TestCachingUser,
// TODO(b/132083720) This test is currently broken, so disable it until it is fixed.
// TestSignInAnonymouslyWithExceptionsInEventHandlersAsync,
@@ -213,35 +210,6 @@ bool TestSetupClearUser(TaskCompletionSource tcs) {
return true;
}
- // Perform the standard sign in flow with an Anonymous account.
- // Tests: SignInAnonymouslyAsync_DEPRECATED, DeleteUserAsync.
- Task TestSignInAnonymouslyAsync_DEPRECATED() {
- TaskCompletionSource tcs = new TaskCompletionSource();
-
- // We don't want to be signed in at the start of this test.
- if (!TestSetupClearUser(tcs)) {
- return tcs.Task;
- }
-
- // First, sign in anonymously.
- SigninAnonymouslyAsync_DEPRECATED().ContinueWithOnMainThread(t1 => {
- if (ForwardTaskException(tcs, t1)) return;
- // Confirm that the current user is correct.
- if (!ConfirmAnonymousCurrentUser(tcs)) return;
-
- // Delete the user, as we are done.
- DeleteUserAsync().ContinueWithOnMainThread(t2 => {
- if (ForwardTaskException(tcs, t2)) return;
- // Confirm that there is no user set anymore.
- ConfirmNoCurrentUser(tcs);
- // The tests are done
- tcs.TrySetResult(0);
- });
- });
-
- return tcs.Task;
- }
-
// Perform the standard sign in flow with an Anonymous account.
// Tests: SignInAnonymouslyAsync, DeleteUserAsync.
Task TestSignInAnonymouslyAsync() {
@@ -271,44 +239,6 @@ Task TestSignInAnonymouslyAsync() {
return tcs.Task;
}
- // Goes over the standard create/signout/signin flow, using the provided function to sign in.
- // Tests: CreateUserWithEmailAndPasswordAsync_DEPRECATED, SignOut, the given signin function,
- // and DeleteUserAsync.
- Task TestSignInFlowAsync_DEPRECATED(Func signInFunc) {
- TaskCompletionSource tcs = new TaskCompletionSource();
-
- // We don't want to be signed in at the start of this test.
- if (!TestSetupClearUser(tcs)) {
- return tcs.Task;
- }
-
- // Set up the test email/password/etc fields.
- SetDefaultUIFields();
-
- CreateUserWithEmailAsync_DEPRECATED().ContinueWithOnMainThread(createTask => {
- // Confirm that the current user is correct
- if (!ConfirmDefaultCurrentUser(tcs)) return;
- // Sign out of the user
- SignOut();
- // Confirm no user
- if (!ConfirmNoCurrentUser(tcs)) return;
- // Sign back in
- signInFunc().ContinueWithOnMainThread(signinTask => {
- // Confirm that the current user is correct
- if (!ConfirmDefaultCurrentUser(tcs)) return;
- // Delete the user
- DeleteUserAsync().ContinueWithOnMainThread(deleteTask => {
- // Confirm no user
- ConfirmNoCurrentUser(tcs);
- // Tests are done.
- tcs.TrySetResult(0);
- });
- });
- });
-
- return tcs.Task;
- }
-
// Goes over the standard create/signout/signin flow, using the provided function to sign in.
// Tests: CreateUserWithEmailAndPasswordAsync, SignOut, the given signin function,
// and DeleteUserAsync.
@@ -347,24 +277,12 @@ Task TestSignInFlowAsync(Func signInFunc) {
return tcs.Task;
}
- // Perform the standard sign in flow, using Email/Password.
- // Tests: SignInWithEmailAndPasswordAsync_DEPRECATED.
- Task TestSignInEmailAsync_DEPRECATED() {
- return TestSignInFlowAsync_DEPRECATED(SigninWithEmailAsync_DEPRECATED);
- }
-
// Perform the standard sign in flow, using Email/Password.
// Tests: SignInWithEmailAndPasswordAsync.
Task TestSignInEmailAsync() {
return TestSignInFlowAsync(SigninWithEmailAsync);
}
- // Perform the standard sign in flow, using a credential generated from the Email/Password.
- // Tests: SignInWithCredentialAsync_DEPRECATED (Email credential).
- Task TestSignInCredentialAsync_DEPRECATED() {
- return TestSignInFlowAsync_DEPRECATED(SigninWithEmailCredentialAsync_DEPRECATED);
- }
-
// Perform the standard sign in flow, using a credential generated from the Email/Password.
// Tests: SignInWithCredentialAsync (Email credential).
Task TestSignInCredentialAsync() {
@@ -400,57 +318,6 @@ Task TestUpdateUserProfileAsync() {
return tcs.Task;
}
- // Anonymous sign-in with exceptions being thrown by auth state and token event handlers.
- // The sign-in process should continue uninterrupted.
- Task TestSignInAnonymouslyWithExceptionsInEventHandlersAsync_DEPRECATED() {
- SignOut();
-
- var exceptions = new List();
- TaskCompletionSource tcs = new TaskCompletionSource();
- EventHandler stateChangedThrowException = (object sender, EventArgs e) => {
- var exception = new Exception("State changed");
- exceptions.Add(exception);
- throw exception;
- };
- EventHandler idTokenChangedThrowException = (object sender, EventArgs e) => {
- var exception = new Exception("ID token changed");
- exceptions.Add(exception);
- throw exception;
- };
- auth.StateChanged += stateChangedThrowException;
- auth.IdTokenChanged += idTokenChangedThrowException;
-
- SigninAnonymouslyAsync_DEPRECATED().ContinueWithOnMainThread(t => {
- auth.StateChanged -= stateChangedThrowException;
- auth.IdTokenChanged -= idTokenChangedThrowException;
- var exceptionMessages = new HashSet();
- foreach (var exception in exceptions) {
- exceptionMessages.Add(exception.Message);
- }
- if (exceptionMessages.Count == 2) {
- var missingExceptions = new List();
- foreach (var expectedMessage in new [] { "State changed", "ID token changed" }) {
- if (!exceptionMessages.Contains(expectedMessage)) {
- missingExceptions.Add(expectedMessage);
- }
- }
- if (missingExceptions.Count > 0) {
- tcs.SetException(new Exception(String.Format(
- "The following expected exceptions were not thrown: {0}",
- String.Join(", ", missingExceptions.ToArray()))));
- } else {
- tcs.SetResult(true);
- }
- } else {
- tcs.SetException(new Exception(String.Format(
- "Unexpected number of exceptions thrown {0} vs. 2 ({1})",
- exceptionMessages.Count,
- String.Join(", ", (new List(exceptionMessages)).ToArray()))));
- }
- });
- return tcs.Task;
- }
-
// Test if caching the FirebaseUser object, and then deleting some of the C++ objects, will work.
Task TestCachingUser() {
SignOut();
diff --git a/cmake/android_dependencies.cmake b/cmake/android_dependencies.cmake
index bc35ab950..970759756 100644
--- a/cmake/android_dependencies.cmake
+++ b/cmake/android_dependencies.cmake
@@ -15,72 +15,72 @@
# This file defines the Android dependencies needed by all the modules.
set(FIREBASE_APP_ANDROID_DEPS
- "com.google.firebase:firebase-common:20.4.2"
- "com.google.firebase:firebase-analytics:21.5.1"
- "com.google.android.gms:play-services-base:18.3.0"
+ "com.google.firebase:firebase-common:21.0.0"
+ "com.google.firebase:firebase-analytics:22.0.2"
+ "com.google.android.gms:play-services-base:18.5.0"
)
set(FIREBASE_ANALYTICS_ANDROID_DEPS
- "com.google.firebase:firebase-analytics:21.5.1"
+ "com.google.firebase:firebase-analytics:22.0.2"
)
set(FIREBASE_APP_CHECK_ANDROID_DEPS
- "com.google.firebase:firebase-appcheck:17.1.2"
- "com.google.firebase:firebase-appcheck-debug:17.1.2"
- "com.google.firebase:firebase-appcheck-playintegrity:17.1.2"
- "com.google.firebase:firebase-analytics:21.5.1"
+ "com.google.firebase:firebase-appcheck:18.0.0"
+ "com.google.firebase:firebase-appcheck-debug:18.0.0"
+ "com.google.firebase:firebase-appcheck-playintegrity:18.0.0"
+ "com.google.firebase:firebase-analytics:22.0.2"
)
set(FIREBASE_AUTH_ANDROID_DEPS
- "com.google.firebase:firebase-auth:22.3.1"
- "com.google.firebase:firebase-analytics:21.5.1"
+ "com.google.firebase:firebase-auth:23.0.0"
+ "com.google.firebase:firebase-analytics:22.0.2"
)
set(FIREBASE_CRASHLYTICS_ANDROID_DEPS
- "com.google.firebase:firebase-crashlytics-ndk:18.6.2"
- "com.google.firebase:firebase-analytics:21.5.1"
+ "com.google.firebase:firebase-crashlytics-ndk:19.0.2"
+ "com.google.firebase:firebase-analytics:22.0.2"
)
set(FIREBASE_DATABASE_ANDROID_DEPS
- "com.google.firebase:firebase-database:20.3.1"
- "com.google.firebase:firebase-analytics:21.5.1"
- "com.google.android.gms:play-services-base:18.3.0"
+ "com.google.firebase:firebase-database:21.0.0"
+ "com.google.firebase:firebase-analytics:22.0.2"
+ "com.google.android.gms:play-services-base:18.5.0"
)
set(FIREBASE_DYNAMIC_LINKS_ANDROID_DEPS
- "com.google.firebase:firebase-dynamic-links:21.2.0"
- "com.google.firebase:firebase-analytics:21.5.1"
+ "com.google.firebase:firebase-dynamic-links:22.1.0"
+ "com.google.firebase:firebase-analytics:22.0.2"
)
set(FIREBASE_FIRESTORE_ANDROID_DEPS
- "com.google.firebase:firebase-firestore:24.10.3"
- "com.google.firebase:firebase-analytics:21.5.1"
+ "com.google.firebase:firebase-firestore:25.0.0"
+ "com.google.firebase:firebase-analytics:22.0.2"
)
set(FIREBASE_FUNCTIONS_ANDROID_DEPS
- "com.google.firebase:firebase-functions:20.4.0"
- "com.google.firebase:firebase-analytics:21.5.1"
+ "com.google.firebase:firebase-functions:21.0.0"
+ "com.google.firebase:firebase-analytics:22.0.2"
)
set(FIREBASE_INSTALLATIONS_ANDROID_DEPS
- "com.google.firebase:firebase-installations:17.2.0"
- "com.google.firebase:firebase-analytics:21.5.1"
+ "com.google.firebase:firebase-installations:18.0.0"
+ "com.google.firebase:firebase-analytics:22.0.2"
)
# iid is needed by messaging to avoid a conflict with functions
set(FIREBASE_MESSAGING_ANDROID_DEPS
- "com.google.firebase:firebase-messaging:23.4.1"
- "com.google.firebase:firebase-analytics:21.5.1"
+ "com.google.firebase:firebase-messaging:24.0.0"
+ "com.google.firebase:firebase-analytics:22.0.2"
"com.google.firebase:firebase-iid:21.1.0"
"com.google.flatbuffers:flatbuffers-java:1.12.0"
)
set(FIREBASE_REMOTE_CONFIG_ANDROID_DEPS
- "com.google.firebase:firebase-config:21.6.3"
- "com.google.firebase:firebase-analytics:21.5.1"
+ "com.google.firebase:firebase-config:22.0.0"
+ "com.google.firebase:firebase-analytics:22.0.2"
)
set(FIREBASE_STORAGE_ANDROID_DEPS
- "com.google.firebase:firebase-storage:20.3.0"
- "com.google.firebase:firebase-analytics:21.5.1"
+ "com.google.firebase:firebase-storage:21.0.0"
+ "com.google.firebase:firebase-analytics:22.0.2"
)
diff --git a/cmake/firebase_unity_version.cmake b/cmake/firebase_unity_version.cmake
index 51d639a51..d35d5fed1 100644
--- a/cmake/firebase_unity_version.cmake
+++ b/cmake/firebase_unity_version.cmake
@@ -14,20 +14,20 @@
# This file defines the version numbers used by the Firebase Unity SDK.
-set(FIREBASE_UNITY_SDK_VERSION "11.8.0"
+set(FIREBASE_UNITY_SDK_VERSION "12.1.0"
CACHE STRING "The version of the Unity SDK, used in the names of files.")
-set(FIREBASE_IOS_POD_VERSION "10.22.0"
+set(FIREBASE_IOS_POD_VERSION "10.28.1"
CACHE STRING "The version of the top-level Firebase Cocoapod to use.")
# https://github.com/googlesamples/unity-jar-resolver
-set(FIREBASE_UNITY_JAR_RESOLVER_VERSION "1.2.179"
+set(FIREBASE_UNITY_JAR_RESOLVER_VERSION "1.2.181"
CACHE STRING
"Version tag of Play Services Resolver to download and use (no trailing .0)"
)
# https://github.com/firebase/firebase-cpp-sdk
-set(FIREBASE_CPP_SDK_PRESET_VERSION "v11.9.0"
+set(FIREBASE_CPP_SDK_PRESET_VERSION "v12.1.0"
CACHE STRING
"Version tag of Firebase CPP SDK to download (if no local or not passed in) and use (no trailing .0)"
)
diff --git a/docs/readme.md b/docs/readme.md
index 525b0e384..159cb2d60 100644
--- a/docs/readme.md
+++ b/docs/readme.md
@@ -71,6 +71,51 @@ Support
Release Notes
-------------
+### 12.1.0
+- Changes
+ - General: Update to Firebase C++ SDK version 12.1.0.
+ - General (Android): Update to Firebase Android BoM version 33.1.1.
+ - General (iOS): Update to Firebase Cocoapods version 10.28.1.
+ - General: Update to EDM4U version 1.2.181.
+ - Analytics (iOS): Add support for
+ `InitiateOnDeviceConversionMeasurementWithHashedEmailAddress` and
+ `InitiateOnDeviceConversionMeasurementWithHashedPhoneNumber`.
+ - Messaging (Android): Fixed a potential race condition on receiving
+ messages after cleanup.
+ ([#1030](https://github.com/firebase/firebase-unity-sdk/issues/1030)).
+ - Messaging (iOS): Fixed an issue with notifications being lost if they
+ were received before Firebase Messaging was initialized.
+ ([#377](https://github.com/firebase/firebase-unity-sdk/issues/377)).
+
+### 12.0.0
+- Changes
+ - General: Update to Firebase C++ SDK version 12.0.0.
+ - General (Android): Update to Firebase Android BoM version 33.0.0.
+ - General (Android): Updated minSdkVersion to 23, and targetSdkVersion
+ and compileSdkVersion to 34.
+ - General (iOS): Update to Firebase Cocoapods version 10.25.0.
+ - General (iOS): Minimum iOS deployment target is now 13.0.
+ - General: Minimum supported editor version is now Unity 2020.
+ - Auth: Remove deprecated calls involving `SignInResult`, most of
+ which were appended with `_DEPRECATED`.
+ - Remote Config: Remove deprecated `ConfigSettings.MinimumFetchInternalInMilliseconds`,
+ use `ConfigSettings.MinimumFetchIntervalInMilliseconds` instead.
+
+### 11.9.0
+- Changes
+ - General: Update to Firebase C++ SDK version 11.10.0.
+ - General (Android): Update to Firebase Android BoM version 32.8.1.
+ - General (iOS): Update to Firebase Cocoapods version 10.24.0.
+ - App Check: Fix potential crash when fetching a token.
+ ([#877](https://github.com/firebase/firebase-unity-sdk/issues/877)).
+ - Storage (Desktop): Removed 5-minute timeout for uploads and downloads.
+ ([#968](https://github.com/firebase/firebase-unity-sdk/issues/968)).
+
+### 11.8.1
+- Changes
+ - Firestore (iOS): Fix undefined absl symbols error.
+ ([#974](https://github.com/firebase/firebase-unity-sdk/issues/974))
+
### 11.8.0
- Changes
- General: Update to Firebase C++ SDK version 11.9.0.
diff --git a/firestore/src/Converters/AttributedTypeConverter.cs b/firestore/src/Converters/AttributedTypeConverter.cs
index c1d86213d..31ed769b1 100644
--- a/firestore/src/Converters/AttributedTypeConverter.cs
+++ b/firestore/src/Converters/AttributedTypeConverter.cs
@@ -136,7 +136,8 @@ override object DeserializeMap(DeserializationContext context, FieldValueProxy m
"No writable property for Firestore field {0} in type {1}", key, TargetType.FullName));
break;
case UnknownPropertyHandling.Throw:
- throw new ArgumentException(String.Format("No writable property for Firestore field {key} in type {0}", TargetType.FullName));
+ throw new ArgumentException(String.Format(
+ "No writable property for Firestore field {0} in type {1}", key, TargetType.FullName));
}
}
}
diff --git a/functions/testapp/Assets/Firebase/Sample/Functions/.functions/functions/package-lock.json b/functions/testapp/Assets/Firebase/Sample/Functions/.functions/functions/package-lock.json
deleted file mode 100644
index 988b0b35f..000000000
--- a/functions/testapp/Assets/Firebase/Sample/Functions/.functions/functions/package-lock.json
+++ /dev/null
@@ -1,8246 +0,0 @@
-{
- "name": "functions",
- "requires": true,
- "lockfileVersion": 1,
- "dependencies": {
- "@firebase/app": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.1.10.tgz",
- "integrity": "sha512-2GTXt3b2QZXkmx6/5nNJq+pEN/VTjAG55MFJS1WMoLVZkwKuNpWNk65QVyPaoL88x1iHtuLqAMFgJUOnhOg+Pw==",
- "requires": {
- "@firebase/app-types": "0.1.2",
- "@firebase/util": "0.1.10",
- "tslib": "1.9.0"
- }
- },
- "@firebase/app-types": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.1.2.tgz",
- "integrity": "sha512-bCIZGeMtP0ibrXNNaU214/1tRNw0jHnir/cfiAao1gjUyIS7RzOTQoH+zbwPJNEwUqJ0T3ykw/Tv4/khGqbVBg=="
- },
- "@firebase/database": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.2.1.tgz",
- "integrity": "sha512-IxONy7MM+Vmnx7bupBujmUyaTqE0n9Jt5xW/2gyLRc9i2wOxNR0XDlJ3Oc12+bksW/zMXHJU1hNO1jxRmIKmsw==",
- "requires": {
- "@firebase/database-types": "0.2.0",
- "@firebase/logger": "0.1.0",
- "@firebase/util": "0.1.10",
- "faye-websocket": "0.11.1",
- "tslib": "1.9.0"
- },
- "dependencies": {
- "faye-websocket": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
- "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
- "requires": {
- "websocket-driver": "0.7.0"
- }
- }
- }
- },
- "@firebase/database-types": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.2.0.tgz",
- "integrity": "sha512-QFrxlLABVbZAVJqw1XNkSYZK22qPjpE3U5eM1SO7Htx69TrIgX7tb1/+BJnFkb3AKUD33tAr22Z4XVth5Ys46A=="
- },
- "@firebase/logger": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.1.0.tgz",
- "integrity": "sha512-/abxM9/l0V9WzNXvSonI2imVqORVhyCVS8yJ1O2rsRmNzw3FIPPIt0BuTvmCBH1oh1uDtZIn2Aar1p7zF69KWg=="
- },
- "@firebase/util": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.1.10.tgz",
- "integrity": "sha512-XEogRfUQBZ4T37TMq/3ZbuiTdRAKX8hF3TgJglUZNCJf/6QnQ+jlupCuMAXBqCGfw2Mw0m2matoCUBWpsyevOA==",
- "requires": {
- "tslib": "1.9.0"
- }
- },
- "@google-cloud/common": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-0.16.2.tgz",
- "integrity": "sha512-GrkaFoj0/oO36pNs4yLmaYhTujuA3i21FdQik99Fd/APix1uhf01VlpJY4lAteTDFLRNkRx6ydEh7OVvmeUHng==",
- "requires": {
- "array-uniq": "1.0.3",
- "arrify": "1.0.1",
- "concat-stream": "1.6.2",
- "create-error-class": "3.0.2",
- "duplexify": "3.5.4",
- "ent": "2.2.0",
- "extend": "3.0.1",
- "google-auto-auth": "0.9.7",
- "is": "3.2.1",
- "log-driver": "1.2.7",
- "methmeth": "1.1.0",
- "modelo": "4.2.3",
- "request": "2.85.0",
- "retry-request": "3.3.1",
- "split-array-stream": "1.0.3",
- "stream-events": "1.0.2",
- "string-format-obj": "1.1.1",
- "through2": "2.0.3"
- }
- },
- "@google-cloud/common-grpc": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/@google-cloud/common-grpc/-/common-grpc-0.6.0.tgz",
- "integrity": "sha512-b5i2auMeP+kPPPpWtZVgjbbbIB+3uDGw+Vww1QjG0SEQlahcGrwkCEaNLQit1R77m8ibxs+sTVa+AH/FNILAdQ==",
- "requires": {
- "@google-cloud/common": "0.16.2",
- "dot-prop": "4.2.0",
- "duplexify": "3.5.4",
- "extend": "3.0.1",
- "grpc": "1.9.1",
- "is": "3.2.1",
- "modelo": "4.2.3",
- "retry-request": "3.3.1",
- "through2": "2.0.3"
- }
- },
- "@google-cloud/firestore": {
- "version": "0.13.0",
- "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-0.13.0.tgz",
- "integrity": "sha512-9Aak9O/NBwdhAJWn2ooaHJT0uyU6IN6oHegW4GcAzLwJKwx8nw+c/GwFufSS6PRMLTiXdpV0I/rvdz4nSgO1HA==",
- "requires": {
- "@google-cloud/common": "0.16.2",
- "@google-cloud/common-grpc": "0.6.0",
- "bun": "0.0.12",
- "deep-equal": "1.0.1",
- "extend": "3.0.1",
- "functional-red-black-tree": "1.0.1",
- "google-gax": "0.15.0",
- "is": "3.2.1",
- "safe-buffer": "5.1.1",
- "through2": "2.0.3"
- }
- },
- "@google-cloud/storage": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-1.6.0.tgz",
- "integrity": "sha512-yQ63bJYoiwY220gn/KdTLPoHppAPwFHfG7VFLPwJ+1R5U1eqUN5XV2a7uPj1szGF8/gxlKm2UbE8DgoJJ76DFw==",
- "requires": {
- "@google-cloud/common": "0.16.2",
- "arrify": "1.0.1",
- "async": "2.6.0",
- "compressible": "2.0.13",
- "concat-stream": "1.6.2",
- "create-error-class": "3.0.2",
- "duplexify": "3.5.4",
- "extend": "3.0.1",
- "gcs-resumable-upload": "0.9.0",
- "hash-stream-validation": "0.2.1",
- "is": "3.2.1",
- "mime": "2.2.0",
- "mime-types": "2.1.18",
- "once": "1.4.0",
- "pumpify": "1.4.0",
- "request": "2.85.0",
- "safe-buffer": "5.1.1",
- "snakeize": "0.1.0",
- "stream-events": "1.0.2",
- "string-format-obj": "1.1.1",
- "through2": "2.0.3"
- }
- },
- "@mrmlnc/readdir-enhanced": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
- "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
- "requires": {
- "call-me-maybe": "1.0.1",
- "glob-to-regexp": "0.3.0"
- }
- },
- "@protobufjs/aspromise": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
- "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78="
- },
- "@protobufjs/base64": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
- "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
- },
- "@protobufjs/codegen": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
- "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
- },
- "@protobufjs/eventemitter": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
- "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A="
- },
- "@protobufjs/fetch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
- "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
- "requires": {
- "@protobufjs/aspromise": "1.1.2",
- "@protobufjs/inquire": "1.1.0"
- }
- },
- "@protobufjs/float": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
- "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E="
- },
- "@protobufjs/inquire": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
- "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik="
- },
- "@protobufjs/path": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
- "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0="
- },
- "@protobufjs/pool": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
- "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q="
- },
- "@protobufjs/utf8": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
- "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
- },
- "@types/body-parser": {
- "version": "1.16.8",
- "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.16.8.tgz",
- "integrity": "sha512-BdN2PXxOFnTXFcyONPW6t0fHjz2fvRZHVMFpaS0wYr+Y8fWEaNOs4V8LEu/fpzQlMx+ahdndgTaGTwPC+J/EeA==",
- "requires": {
- "@types/express": "4.11.1",
- "@types/node": "8.9.5"
- }
- },
- "@types/cors": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.3.tgz",
- "integrity": "sha512-wiZ7yYSIKZ005QJeyoUk5OHHEamNHTxaYwaFQWfTPohBjyhgIDHTgV8oGn+zBYTWQCb9WQYg54PhtntFTD7GVg==",
- "requires": {
- "@types/express": "4.11.1"
- }
- },
- "@types/events": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
- "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA=="
- },
- "@types/express": {
- "version": "4.11.1",
- "resolved": "https://registry.npmjs.org/@types/express/-/express-4.11.1.tgz",
- "integrity": "sha512-ttWle8cnPA5rAelauSWeWJimtY2RsUf2aspYZs7xPHiWgOlPn6nnUfBMtrkcnjFJuIHJF4gNOdVvpLK2Zmvh6g==",
- "requires": {
- "@types/body-parser": "1.16.8",
- "@types/express-serve-static-core": "4.11.1",
- "@types/serve-static": "1.13.1"
- }
- },
- "@types/express-serve-static-core": {
- "version": "4.11.1",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.11.1.tgz",
- "integrity": "sha512-EehCl3tpuqiM8RUb+0255M8PhhSwTtLfmO7zBBdv0ay/VTd/zmrqDfQdZFsa5z/PVMbH2yCMZPXsnrImpATyIw==",
- "requires": {
- "@types/events": "1.2.0",
- "@types/node": "8.9.5"
- }
- },
- "@types/google-cloud__storage": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@types/google-cloud__storage/-/google-cloud__storage-1.1.7.tgz",
- "integrity": "sha512-010Llp+5ze+XWWmZuLDxs0pZgFjOgtJQVt9icJ0Ed67ZFLq7PnXkYx8x/k9nwDojR5/X4XoLPNqB1F627TScdQ==",
- "requires": {
- "@types/node": "8.9.5"
- }
- },
- "@types/jsonwebtoken": {
- "version": "7.2.6",
- "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-7.2.6.tgz",
- "integrity": "sha512-SuCA16HtLqPy0yerKEvMdaEAeLRgm6zPUJE1sF7bwGq0hAO4xW9UJZxTcDBaBwr5rcz1HST5QC1+1qXQ1+R9yw==",
- "requires": {
- "@types/node": "8.9.5"
- }
- },
- "@types/lodash": {
- "version": "4.14.105",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.105.tgz",
- "integrity": "sha512-LB5PKR4QNoDrgcl4H8JdhBMp9wHWp0OATkU9EHzuXKiutRwbvsyYmqPUaMSWmdCycJoKHtdAWh47/zSe/GZ1yA=="
- },
- "@types/long": {
- "version": "3.0.32",
- "resolved": "https://registry.npmjs.org/@types/long/-/long-3.0.32.tgz",
- "integrity": "sha512-ZXyOOm83p7X8p3s0IYM3VeueNmHpkk/yMlP8CLeOnEcu6hIwPH7YjZBvhQkR0ZFS2DqZAxKtJ/M5fcuv3OU5BA=="
- },
- "@types/mime": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz",
- "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA=="
- },
- "@types/node": {
- "version": "8.9.5",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-8.9.5.tgz",
- "integrity": "sha512-jRHfWsvyMtXdbhnz5CVHxaBgnV6duZnPlQuRSo/dm/GnmikNcmZhxIES4E9OZjUmQ8C+HCl4KJux+cXN/ErGDQ=="
- },
- "@types/serve-static": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.1.tgz",
- "integrity": "sha512-jDMH+3BQPtvqZVIcsH700Dfi8Q3MIcEx16g/VdxjoqiGR/NntekB10xdBpirMKnPe9z2C5cBmL0vte0YttOr3Q==",
- "requires": {
- "@types/express-serve-static-core": "4.11.1",
- "@types/mime": "2.0.0"
- }
- },
- "@types/sha1": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@types/sha1/-/sha1-1.1.1.tgz",
- "integrity": "sha512-Yrz4TPsm/xaw7c39aTISskNirnRJj2W9OVeHv8ooOR9SG8NHEfh4lwvGeN9euzxDyPfBdFkvL/VHIY3kM45OpQ==",
- "requires": {
- "@types/node": "8.9.5"
- }
- },
- "accepts": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
- "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
- "requires": {
- "mime-types": "2.1.18",
- "negotiator": "0.6.1"
- }
- },
- "acorn": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
- "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
- },
- "acorn-es7-plugin": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz",
- "integrity": "sha1-8u4fMiipDurRJF+asZIusucdM2s="
- },
- "ajv": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
- "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
- "requires": {
- "co": "4.6.0",
- "fast-deep-equal": "1.1.0",
- "fast-json-stable-stringify": "2.0.0",
- "json-schema-traverse": "0.3.1"
- }
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
- },
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
- },
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
- },
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
- },
- "array-filter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz",
- "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM="
- },
- "array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
- },
- "array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "requires": {
- "array-uniq": "1.0.3"
- }
- },
- "array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
- },
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
- },
- "ascli": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz",
- "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=",
- "requires": {
- "colour": "0.7.1",
- "optjs": "3.2.2"
- }
- },
- "asn1": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
- "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
- },
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
- },
- "async": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
- "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
- "requires": {
- "lodash": "4.17.5"
- }
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
- },
- "atob": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz",
- "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10="
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
- },
- "aws4": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
- "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4="
- },
- "axios": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz",
- "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=",
- "requires": {
- "follow-redirects": "1.4.1",
- "is-buffer": "1.1.6"
- }
- },
- "bad-words": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/bad-words/-/bad-words-1.6.1.tgz",
- "integrity": "sha1-BkgwIZUanYD7X8qi8Nmh51p0W1A=",
- "requires": {
- "badwords-list": "1.0.0"
- }
- },
- "badwords-list": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/badwords-list/-/badwords-list-1.0.0.tgz",
- "integrity": "sha1-XphW2/E0gqKVw7CzBK+51M/FxXk="
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
- },
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "requires": {
- "cache-base": "1.0.1",
- "class-utils": "0.3.6",
- "component-emitter": "1.2.1",
- "define-property": "1.0.0",
- "isobject": "3.0.1",
- "mixin-deep": "1.3.1",
- "pascalcase": "0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "requires": {
- "is-descriptor": "1.0.2"
- }
- }
- }
- },
- "base64url": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz",
- "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs="
- },
- "bcrypt-pbkdf": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
- "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
- "optional": true,
- "requires": {
- "tweetnacl": "0.14.5"
- }
- },
- "body-parser": {
- "version": "1.18.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
- "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
- "requires": {
- "bytes": "3.0.0",
- "content-type": "1.0.4",
- "debug": "2.6.9",
- "depd": "1.1.2",
- "http-errors": "1.6.2",
- "iconv-lite": "0.4.19",
- "on-finished": "2.3.0",
- "qs": "6.5.1",
- "raw-body": "2.3.2",
- "type-is": "1.6.16"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- }
- }
- },
- "boom": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
- "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
- "requires": {
- "hoek": "4.2.1"
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "requires": {
- "balanced-match": "1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz",
- "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==",
- "requires": {
- "arr-flatten": "1.1.0",
- "array-unique": "0.3.2",
- "define-property": "1.0.0",
- "extend-shallow": "2.0.1",
- "fill-range": "4.0.0",
- "isobject": "3.0.1",
- "kind-of": "6.0.2",
- "repeat-element": "1.1.2",
- "snapdragon": "0.8.2",
- "snapdragon-node": "2.1.1",
- "split-string": "3.1.0",
- "to-regex": "3.0.2"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "requires": {
- "is-descriptor": "1.0.2"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "requires": {
- "is-extendable": "0.1.1"
- }
- }
- }
- },
- "buffer-equal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz",
- "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74="
- },
- "buffer-equal-constant-time": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
- "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
- },
- "buffer-from": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz",
- "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA=="
- },
- "bun": {
- "version": "0.0.12",
- "resolved": "https://registry.npmjs.org/bun/-/bun-0.0.12.tgz",
- "integrity": "sha512-Toms18J9DqnT+IfWkwxVTB2EaBprHvjlMWrTIsfX4xbu3ZBqVBwrERU0em1IgtRe04wT+wJxMlKHZok24hrcSQ==",
- "requires": {
- "readable-stream": "1.0.34"
- },
- "dependencies": {
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
- },
- "readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "string_decoder": "0.10.31"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
- }
- }
- },
- "bytebuffer": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz",
- "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=",
- "requires": {
- "long": "3.2.0"
- }
- },
- "bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
- },
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "requires": {
- "collection-visit": "1.0.0",
- "component-emitter": "1.2.1",
- "get-value": "2.0.6",
- "has-value": "1.0.0",
- "isobject": "3.0.1",
- "set-value": "2.0.0",
- "to-object-path": "0.3.0",
- "union-value": "1.0.0",
- "unset-value": "1.0.0"
- }
- },
- "call-me-maybe": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
- "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms="
- },
- "call-signature": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/call-signature/-/call-signature-0.0.2.tgz",
- "integrity": "sha1-qEq8glpV70yysCi9dOIFpluaSZY="
- },
- "camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
- },
- "capitalize-sentence": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/capitalize-sentence/-/capitalize-sentence-0.1.5.tgz",
- "integrity": "sha1-e/LtUdyKoqY8lPgkA55KphS3HeY="
- },
- "capture-stack-trace": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz",
- "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0="
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
- },
- "charenc": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
- "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc="
- },
- "class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "requires": {
- "arr-union": "3.1.0",
- "define-property": "0.2.5",
- "isobject": "3.0.1",
- "static-extend": "0.1.2"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "requires": {
- "is-descriptor": "0.1.6"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "requires": {
- "is-accessor-descriptor": "0.1.6",
- "is-data-descriptor": "0.1.4",
- "kind-of": "5.1.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
- }
- }
- },
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "requires": {
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "wrap-ansi": "2.1.0"
- }
- },
- "co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "requires": {
- "map-visit": "1.0.0",
- "object-visit": "1.0.1"
- }
- },
- "colour": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz",
- "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g="
- },
- "combined-stream": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
- "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
- "requires": {
- "delayed-stream": "1.0.0"
- }
- },
- "component-emitter": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
- "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
- },
- "compressible": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz",
- "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=",
- "requires": {
- "mime-db": "1.33.0"
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
- },
- "concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "requires": {
- "buffer-from": "1.0.0",
- "inherits": "2.0.3",
- "readable-stream": "2.3.5",
- "typedarray": "0.0.6"
- }
- },
- "configstore": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz",
- "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==",
- "requires": {
- "dot-prop": "4.2.0",
- "graceful-fs": "4.1.11",
- "make-dir": "1.2.0",
- "unique-string": "1.0.0",
- "write-file-atomic": "2.3.0",
- "xdg-basedir": "3.0.0"
- }
- },
- "content-disposition": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
- "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
- },
- "content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
- },
- "cookie": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
- "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
- },
- "cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
- },
- "core-js": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
- "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4="
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "cors": {
- "version": "2.8.4",
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz",
- "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=",
- "requires": {
- "object-assign": "4.1.1",
- "vary": "1.1.2"
- }
- },
- "create-error-class": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
- "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
- "requires": {
- "capture-stack-trace": "1.0.0"
- }
- },
- "crypt": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
- "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs="
- },
- "cryptiles": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
- "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
- "requires": {
- "boom": "5.2.0"
- },
- "dependencies": {
- "boom": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
- "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
- "requires": {
- "hoek": "4.2.1"
- }
- }
- }
- },
- "crypto-random-string": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
- "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4="
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "requires": {
- "assert-plus": "1.0.0"
- }
- },
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
- },
- "deep-equal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
- "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
- },
- "define-properties": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
- "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
- "requires": {
- "foreach": "2.0.5",
- "object-keys": "1.0.11"
- }
- },
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "requires": {
- "is-descriptor": "1.0.2",
- "isobject": "3.0.1"
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
- },
- "destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
- },
- "diff-match-patch": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.0.tgz",
- "integrity": "sha1-HMPIOkkNZ/ldkeOfatHy4Ia2MEg="
- },
- "dir-glob": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
- "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
- "requires": {
- "arrify": "1.0.1",
- "path-type": "3.0.0"
- }
- },
- "dot-prop": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
- "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
- "requires": {
- "is-obj": "1.0.1"
- }
- },
- "duplexify": {
- "version": "3.5.4",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.4.tgz",
- "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==",
- "requires": {
- "end-of-stream": "1.4.1",
- "inherits": "2.0.3",
- "readable-stream": "2.3.5",
- "stream-shift": "1.0.0"
- }
- },
- "eastasianwidth": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.1.1.tgz",
- "integrity": "sha1-RNZW3p2kFWlEZzNTZfsxR7hXK3w="
- },
- "ecc-jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
- "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
- "optional": true,
- "requires": {
- "jsbn": "0.1.1"
- }
- },
- "ecdsa-sig-formatter": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz",
- "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=",
- "requires": {
- "base64url": "2.0.0",
- "safe-buffer": "5.1.1"
- }
- },
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
- },
- "empower": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/empower/-/empower-1.2.3.tgz",
- "integrity": "sha1-bw2nNEf07dg4/sXGAxOoi6XLhSs=",
- "requires": {
- "core-js": "2.5.3",
- "empower-core": "0.6.2"
- }
- },
- "empower-core": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/empower-core/-/empower-core-0.6.2.tgz",
- "integrity": "sha1-Wt71ZgiOMfuoC6CjbfR9cJQWkUQ=",
- "requires": {
- "call-signature": "0.0.2",
- "core-js": "2.5.3"
- }
- },
- "encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
- },
- "end-of-stream": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
- "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
- "requires": {
- "once": "1.4.0"
- }
- },
- "ent": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
- "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0="
- },
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
- },
- "espurify": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/espurify/-/espurify-1.7.0.tgz",
- "integrity": "sha1-HFz2y8zDLm9jk4C9T5kfq5up0iY=",
- "requires": {
- "core-js": "2.5.3"
- }
- },
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
- },
- "etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "requires": {
- "debug": "2.6.9",
- "define-property": "0.2.5",
- "extend-shallow": "2.0.1",
- "posix-character-classes": "0.1.1",
- "regex-not": "1.0.2",
- "snapdragon": "0.8.2",
- "to-regex": "3.0.2"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "requires": {
- "is-descriptor": "0.1.6"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "requires": {
- "is-extendable": "0.1.1"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "requires": {
- "is-accessor-descriptor": "0.1.6",
- "is-data-descriptor": "0.1.4",
- "kind-of": "5.1.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
- }
- }
- },
- "express": {
- "version": "4.16.3",
- "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz",
- "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=",
- "requires": {
- "accepts": "1.3.5",
- "array-flatten": "1.1.1",
- "body-parser": "1.18.2",
- "content-disposition": "0.5.2",
- "content-type": "1.0.4",
- "cookie": "0.3.1",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "1.1.2",
- "encodeurl": "1.0.2",
- "escape-html": "1.0.3",
- "etag": "1.8.1",
- "finalhandler": "1.1.1",
- "fresh": "0.5.2",
- "merge-descriptors": "1.0.1",
- "methods": "1.1.2",
- "on-finished": "2.3.0",
- "parseurl": "1.3.2",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "2.0.3",
- "qs": "6.5.1",
- "range-parser": "1.2.0",
- "safe-buffer": "5.1.1",
- "send": "0.16.2",
- "serve-static": "1.13.2",
- "setprototypeof": "1.1.0",
- "statuses": "1.4.0",
- "type-is": "1.6.16",
- "utils-merge": "1.0.1",
- "vary": "1.1.2"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- }
- }
- },
- "extend": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
- "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "requires": {
- "assign-symbols": "1.0.0",
- "is-extendable": "1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "requires": {
- "is-plain-object": "2.0.4"
- }
- }
- }
- },
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "requires": {
- "array-unique": "0.3.2",
- "define-property": "1.0.0",
- "expand-brackets": "2.1.4",
- "extend-shallow": "2.0.1",
- "fragment-cache": "0.2.1",
- "regex-not": "1.0.2",
- "snapdragon": "0.8.2",
- "to-regex": "3.0.2"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "requires": {
- "is-descriptor": "1.0.2"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "requires": {
- "is-extendable": "0.1.1"
- }
- }
- }
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
- },
- "fast-deep-equal": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
- "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
- },
- "fast-glob": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
- "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
- "requires": {
- "@mrmlnc/readdir-enhanced": "2.2.1",
- "glob-parent": "3.1.0",
- "is-glob": "4.0.0",
- "merge2": "1.2.1",
- "micromatch": "3.1.9"
- }
- },
- "fast-json-stable-stringify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
- "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
- },
- "faye-websocket": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz",
- "integrity": "sha1-SCpQWw3wrmJrlphm0710DNuWLoM=",
- "requires": {
- "websocket-driver": "0.7.0"
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "requires": {
- "extend-shallow": "2.0.1",
- "is-number": "3.0.0",
- "repeat-string": "1.6.1",
- "to-regex-range": "2.1.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "requires": {
- "is-extendable": "0.1.1"
- }
- }
- }
- },
- "finalhandler": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
- "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "1.0.2",
- "escape-html": "1.0.3",
- "on-finished": "2.3.0",
- "parseurl": "1.3.2",
- "statuses": "1.4.0",
- "unpipe": "1.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- }
- }
- },
- "firebase-admin": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-5.10.0.tgz",
- "integrity": "sha1-dtj85rsdvSwF7HbL+1ncGtOXflY=",
- "requires": {
- "@firebase/app": "0.1.10",
- "@firebase/database": "0.2.1",
- "@google-cloud/firestore": "0.13.0",
- "@google-cloud/storage": "1.6.0",
- "@types/google-cloud__storage": "1.1.7",
- "@types/node": "8.9.5",
- "faye-websocket": "0.9.3",
- "jsonwebtoken": "8.1.0",
- "node-forge": "0.7.1"
- }
- },
- "firebase-functions": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/firebase-functions/-/firebase-functions-0.9.0.tgz",
- "integrity": "sha1-X6FXJb25z8UbpxbppXpVR1PQwHM=",
- "requires": {
- "@types/cors": "2.8.3",
- "@types/express": "4.11.1",
- "@types/jsonwebtoken": "7.2.6",
- "@types/lodash": "4.14.105",
- "@types/sha1": "1.1.1",
- "cors": "2.8.4",
- "express": "4.16.3",
- "jsonwebtoken": "7.4.3",
- "lodash": "4.17.5",
- "sha1": "1.1.1"
- },
- "dependencies": {
- "jsonwebtoken": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.3.tgz",
- "integrity": "sha1-d/UCHeBYtgWheD+hKD6ZgS5kVjg=",
- "requires": {
- "joi": "6.10.1",
- "jws": "3.1.4",
- "lodash.once": "4.1.1",
- "ms": "2.0.0",
- "xtend": "4.0.1"
- }
- }
- }
- },
- "follow-redirects": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz",
- "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==",
- "requires": {
- "debug": "3.1.0"
- }
- },
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
- },
- "foreach": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
- "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
- },
- "form-data": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
- "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
- "requires": {
- "asynckit": "0.4.0",
- "combined-stream": "1.0.6",
- "mime-types": "2.1.18"
- }
- },
- "forwarded": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
- "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
- },
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "requires": {
- "map-cache": "0.2.2"
- }
- },
- "fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
- },
- "functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
- },
- "gcp-metadata": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-0.6.3.tgz",
- "integrity": "sha512-MSmczZctbz91AxCvqp9GHBoZOSbJKAICV7Ow/AIWSJZRrRchUd5NL1b2P4OfP+4m490BEUPhhARfpHdqCxuCvg==",
- "requires": {
- "axios": "0.18.0",
- "extend": "3.0.1",
- "retry-axios": "0.3.2"
- }
- },
- "gcs-resumable-upload": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-0.9.0.tgz",
- "integrity": "sha512-+Zrmr0JKO2y/2mg953TW6JLu+NAMHqQsKzqCm7CIT24gMQakolPJCMzDleVpVjXAqB7ZCD276tcUq2ebOfqTug==",
- "requires": {
- "buffer-equal": "1.0.0",
- "configstore": "3.1.1",
- "google-auto-auth": "0.9.7",
- "pumpify": "1.4.0",
- "request": "2.85.0",
- "stream-events": "1.0.2",
- "through2": "2.0.3"
- }
- },
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "requires": {
- "assert-plus": "1.0.0"
- }
- },
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- },
- "glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
- "requires": {
- "is-glob": "3.1.0",
- "path-dirname": "1.0.2"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "requires": {
- "is-extglob": "2.1.1"
- }
- }
- }
- },
- "glob-to-regexp": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
- "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs="
- },
- "globby": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz",
- "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==",
- "requires": {
- "array-union": "1.0.2",
- "dir-glob": "2.0.0",
- "fast-glob": "2.2.0",
- "glob": "7.1.2",
- "ignore": "3.3.7",
- "pify": "3.0.0",
- "slash": "1.0.0"
- }
- },
- "google-auth-library": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-1.3.2.tgz",
- "integrity": "sha512-aRz0om4Bs85uyR2Ousk3Gb8Nffx2Sr2RoKts1smg1MhRwrehE1aD1HC4RmprNt1HVJ88IDnQ8biJQ/aXjiIxlQ==",
- "requires": {
- "axios": "0.18.0",
- "gcp-metadata": "0.6.3",
- "gtoken": "2.2.0",
- "jws": "3.1.4",
- "lodash.isstring": "4.0.1",
- "lru-cache": "4.1.2",
- "retry-axios": "0.3.2"
- }
- },
- "google-auto-auth": {
- "version": "0.9.7",
- "resolved": "https://registry.npmjs.org/google-auto-auth/-/google-auto-auth-0.9.7.tgz",
- "integrity": "sha512-Nro7aIFrL2NP0G7PoGrJqXGMZj8AjdBOcbZXRRm/8T3w08NUHIiNN3dxpuUYzDsZizslH+c8e+7HXL8vh3JXTQ==",
- "requires": {
- "async": "2.6.0",
- "gcp-metadata": "0.6.3",
- "google-auth-library": "1.3.2",
- "request": "2.85.0"
- }
- },
- "google-gax": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-0.15.0.tgz",
- "integrity": "sha512-a+WBi3oiV3jQ0eLCIM0GAFe8vYQ10yYuXRnjhEEXFKSNd8nW6XSQ7YWqMLIod2Xnyu6JiSSymMBwCr5YSwQyRQ==",
- "requires": {
- "extend": "3.0.1",
- "globby": "8.0.1",
- "google-auto-auth": "0.9.7",
- "google-proto-files": "0.15.1",
- "grpc": "1.9.1",
- "is-stream-ended": "0.1.3",
- "lodash": "4.17.5",
- "protobufjs": "6.8.6",
- "readable-stream": "2.3.5",
- "through2": "2.0.3"
- },
- "dependencies": {
- "long": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
- "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
- },
- "protobufjs": {
- "version": "6.8.6",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.6.tgz",
- "integrity": "sha512-eH2OTP9s55vojr3b7NBaF9i4WhWPkv/nq55nznWNp/FomKrLViprUcqnBjHph2tFQ+7KciGPTPsVWGz0SOhL0Q==",
- "requires": {
- "@protobufjs/aspromise": "1.1.2",
- "@protobufjs/base64": "1.1.2",
- "@protobufjs/codegen": "2.0.4",
- "@protobufjs/eventemitter": "1.1.0",
- "@protobufjs/fetch": "1.1.0",
- "@protobufjs/float": "1.0.2",
- "@protobufjs/inquire": "1.1.0",
- "@protobufjs/path": "1.1.2",
- "@protobufjs/pool": "1.1.0",
- "@protobufjs/utf8": "1.1.0",
- "@types/long": "3.0.32",
- "@types/node": "8.9.5",
- "long": "4.0.0"
- }
- }
- }
- },
- "google-p12-pem": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-1.0.2.tgz",
- "integrity": "sha512-+EuKr4CLlGsnXx4XIJIVkcKYrsa2xkAmCvxRhX2HsazJzUBAJ35wARGeApHUn4nNfPD03Vl057FskNr20VaCyg==",
- "requires": {
- "node-forge": "0.7.4",
- "pify": "3.0.0"
- },
- "dependencies": {
- "node-forge": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.4.tgz",
- "integrity": "sha512-8Df0906+tq/omxuCZD6PqhPaQDYuyJ1d+VITgxoIA8zvQd1ru+nMJcDChHH324MWitIgbVkAkQoGEEVJNpn/PA=="
- }
- }
- },
- "google-proto-files": {
- "version": "0.15.1",
- "resolved": "https://registry.npmjs.org/google-proto-files/-/google-proto-files-0.15.1.tgz",
- "integrity": "sha512-ebtmWgi/ooR5Nl63qRVZZ6VLM6JOb5zTNxTT/ZAU8yfMOdcauoOZNNMOVg0pCmTjqWXeuuVbgPP0CwO5UHHzBQ==",
- "requires": {
- "globby": "7.1.1",
- "power-assert": "1.4.4",
- "protobufjs": "6.8.6"
- },
- "dependencies": {
- "globby": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
- "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
- "requires": {
- "array-union": "1.0.2",
- "dir-glob": "2.0.0",
- "glob": "7.1.2",
- "ignore": "3.3.7",
- "pify": "3.0.0",
- "slash": "1.0.0"
- }
- },
- "long": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
- "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
- },
- "protobufjs": {
- "version": "6.8.6",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.6.tgz",
- "integrity": "sha512-eH2OTP9s55vojr3b7NBaF9i4WhWPkv/nq55nznWNp/FomKrLViprUcqnBjHph2tFQ+7KciGPTPsVWGz0SOhL0Q==",
- "requires": {
- "@protobufjs/aspromise": "1.1.2",
- "@protobufjs/base64": "1.1.2",
- "@protobufjs/codegen": "2.0.4",
- "@protobufjs/eventemitter": "1.1.0",
- "@protobufjs/fetch": "1.1.0",
- "@protobufjs/float": "1.0.2",
- "@protobufjs/inquire": "1.1.0",
- "@protobufjs/path": "1.1.2",
- "@protobufjs/pool": "1.1.0",
- "@protobufjs/utf8": "1.1.0",
- "@types/long": "3.0.32",
- "@types/node": "8.9.5",
- "long": "4.0.0"
- }
- }
- }
- },
- "graceful-fs": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
- },
- "grpc": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.9.1.tgz",
- "integrity": "sha512-WNW3MWMuAoo63AwIlzFE3T0KzzvNBSvOkg67Hm8WhvHNkXFBlIk1QyJRE3Ocm0O5eIwS7JU8Ssota53QR1zllg==",
- "requires": {
- "lodash": "4.17.5",
- "nan": "2.10.0",
- "node-pre-gyp": "0.6.39",
- "protobufjs": "5.0.2"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
- },
- "ajv": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
- "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
- "requires": {
- "co": "4.6.0",
- "json-stable-stringify": "1.0.1"
- }
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
- },
- "aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
- },
- "are-we-there-yet": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
- "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
- "requires": {
- "delegates": "1.0.0",
- "readable-stream": "2.3.3"
- }
- },
- "asn1": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
- "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
- },
- "assert-plus": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
- "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ="
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
- },
- "aws-sign2": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
- "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8="
- },
- "aws4": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
- "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4="
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
- },
- "bcrypt-pbkdf": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
- "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
- "optional": true,
- "requires": {
- "tweetnacl": "0.14.5"
- }
- },
- "block-stream": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
- "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
- "requires": {
- "inherits": "2.0.3"
- }
- },
- "boom": {
- "version": "2.10.1",
- "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
- "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
- "requires": {
- "hoek": "2.16.3"
- }
- },
- "brace-expansion": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
- "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
- "requires": {
- "balanced-match": "1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
- },
- "co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
- },
- "combined-stream": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
- "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
- "requires": {
- "delayed-stream": "1.0.0"
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
- },
- "console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "cryptiles": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
- "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
- "requires": {
- "boom": "2.10.1"
- }
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "requires": {
- "assert-plus": "1.0.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
- }
- }
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "deep-extend": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
- "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8="
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
- },
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
- },
- "detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
- },
- "ecc-jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
- "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
- "optional": true,
- "requires": {
- "jsbn": "0.1.1"
- }
- },
- "extend": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
- "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
- },
- "form-data": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
- "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
- "requires": {
- "asynckit": "0.4.0",
- "combined-stream": "1.0.5",
- "mime-types": "2.1.17"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
- },
- "fstream": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
- "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
- "requires": {
- "graceful-fs": "4.1.11",
- "inherits": "2.0.3",
- "mkdirp": "0.5.1",
- "rimraf": "2.6.2"
- }
- },
- "fstream-ignore": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz",
- "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=",
- "requires": {
- "fstream": "1.0.11",
- "inherits": "2.0.3",
- "minimatch": "3.0.4"
- }
- },
- "gauge": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
- "requires": {
- "aproba": "1.2.0",
- "console-control-strings": "1.1.0",
- "has-unicode": "2.0.1",
- "object-assign": "4.1.1",
- "signal-exit": "3.0.2",
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "wide-align": "1.1.2"
- }
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "requires": {
- "assert-plus": "1.0.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
- }
- }
- },
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- },
- "graceful-fs": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
- },
- "har-schema": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
- "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4="
- },
- "har-validator": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
- "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
- "requires": {
- "ajv": "4.11.8",
- "har-schema": "1.0.5"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
- },
- "hawk": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
- "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
- "requires": {
- "boom": "2.10.1",
- "cryptiles": "2.0.5",
- "hoek": "2.16.3",
- "sntp": "1.0.9"
- }
- },
- "hoek": {
- "version": "2.16.3",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
- "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0="
- },
- "http-signature": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
- "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
- "requires": {
- "assert-plus": "0.2.0",
- "jsprim": "1.4.1",
- "sshpk": "1.13.1"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "ini": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "requires": {
- "number-is-nan": "1.0.1"
- }
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "optional": true
- },
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
- },
- "json-stable-stringify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
- "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
- "requires": {
- "jsonify": "0.0.0"
- }
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
- },
- "jsonify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
- "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM="
- },
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
- }
- }
- },
- "mime-db": {
- "version": "1.30.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
- "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE="
- },
- "mime-types": {
- "version": "2.1.17",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
- "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
- "requires": {
- "mime-db": "1.30.0"
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "requires": {
- "brace-expansion": "1.1.8"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node-pre-gyp": {
- "version": "0.6.39",
- "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz",
- "integrity": "sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ==",
- "requires": {
- "detect-libc": "1.0.3",
- "hawk": "3.1.3",
- "mkdirp": "0.5.1",
- "nopt": "4.0.1",
- "npmlog": "4.1.2",
- "rc": "1.2.4",
- "request": "2.81.0",
- "rimraf": "2.6.2",
- "semver": "5.5.0",
- "tar": "2.2.1",
- "tar-pack": "3.4.1"
- }
- },
- "nopt": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
- "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
- "requires": {
- "abbrev": "1.1.1",
- "osenv": "0.1.4"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
- "requires": {
- "are-we-there-yet": "1.1.4",
- "console-control-strings": "1.1.0",
- "gauge": "2.7.4",
- "set-blocking": "2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
- },
- "oauth-sign": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
- "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "requires": {
- "wrappy": "1.0.2"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
- },
- "osenv": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
- "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
- "requires": {
- "os-homedir": "1.0.2",
- "os-tmpdir": "1.0.2"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
- },
- "performance-now": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
- "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU="
- },
- "process-nextick-args": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
- "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
- },
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
- },
- "qs": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
- "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM="
- },
- "rc": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.4.tgz",
- "integrity": "sha1-oPYGyq4qO4YrvQ74VILAElsxX6M=",
- "requires": {
- "deep-extend": "0.4.2",
- "ini": "1.3.5",
- "minimist": "1.2.0",
- "strip-json-comments": "2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
- }
- }
- },
- "readable-stream": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
- "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
- }
- },
- "request": {
- "version": "2.81.0",
- "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
- "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
- "requires": {
- "aws-sign2": "0.6.0",
- "aws4": "1.6.0",
- "caseless": "0.12.0",
- "combined-stream": "1.0.5",
- "extend": "3.0.1",
- "forever-agent": "0.6.1",
- "form-data": "2.1.4",
- "har-validator": "4.2.1",
- "hawk": "3.1.3",
- "http-signature": "1.1.1",
- "is-typedarray": "1.0.0",
- "isstream": "0.1.2",
- "json-stringify-safe": "5.0.1",
- "mime-types": "2.1.17",
- "oauth-sign": "0.8.2",
- "performance-now": "0.2.0",
- "qs": "6.4.0",
- "safe-buffer": "5.1.1",
- "stringstream": "0.0.5",
- "tough-cookie": "2.3.3",
- "tunnel-agent": "0.6.0",
- "uuid": "3.2.1"
- }
- },
- "rimraf": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
- "requires": {
- "glob": "7.1.2"
- }
- },
- "safe-buffer": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
- },
- "semver": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
- "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
- },
- "signal-exit": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
- },
- "sntp": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
- "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
- "requires": {
- "hoek": "2.16.3"
- }
- },
- "sshpk": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
- "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
- "requires": {
- "asn1": "0.2.3",
- "assert-plus": "1.0.0",
- "bcrypt-pbkdf": "1.0.1",
- "dashdash": "1.14.1",
- "ecc-jsbn": "0.1.1",
- "getpass": "0.1.7",
- "jsbn": "0.1.1",
- "tweetnacl": "0.14.5"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
- }
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
- }
- },
- "string_decoder": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
- "requires": {
- "safe-buffer": "5.1.1"
- }
- },
- "stringstream": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
- "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg="
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "requires": {
- "ansi-regex": "2.1.1"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
- },
- "tar": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
- "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
- "requires": {
- "block-stream": "0.0.9",
- "fstream": "1.0.11",
- "inherits": "2.0.3"
- }
- },
- "tar-pack": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.1.tgz",
- "integrity": "sha512-PPRybI9+jM5tjtCbN2cxmmRU7YmqT3Zv/UDy48tAh2XRkLa9bAORtSWLkVc13+GJF+cdTh1yEnHEk3cpTaL5Kg==",
- "requires": {
- "debug": "2.6.9",
- "fstream": "1.0.11",
- "fstream-ignore": "1.0.5",
- "once": "1.4.0",
- "readable-stream": "2.3.3",
- "rimraf": "2.6.2",
- "tar": "2.2.1",
- "uid-number": "0.0.6"
- }
- },
- "tough-cookie": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz",
- "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
- "requires": {
- "punycode": "1.4.1"
- }
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "requires": {
- "safe-buffer": "5.1.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "optional": true
- },
- "uid-number": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz",
- "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE="
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "uuid": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
- "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA=="
- },
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "requires": {
- "assert-plus": "1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "1.3.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
- }
- }
- },
- "wide-align": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
- "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
- "requires": {
- "string-width": "1.0.2"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- }
- }
- },
- "gtoken": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-2.2.0.tgz",
- "integrity": "sha512-tvQs8B1z5+I1FzMPZnq/OCuxTWFOkvy7cUJcpNdBOK2L7yEtPZTVCPtZU181sSDF+isUPebSqFTNTkIejFASAQ==",
- "requires": {
- "axios": "0.18.0",
- "google-p12-pem": "1.0.2",
- "jws": "3.1.4",
- "mime": "2.2.0",
- "pify": "3.0.0"
- }
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
- },
- "har-validator": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
- "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
- "requires": {
- "ajv": "5.5.2",
- "har-schema": "2.0.0"
- }
- },
- "has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "requires": {
- "get-value": "2.0.6",
- "has-values": "1.0.0",
- "isobject": "3.0.1"
- }
- },
- "has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "requires": {
- "is-number": "3.0.0",
- "kind-of": "4.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "hash-stream-validation": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.1.tgz",
- "integrity": "sha1-7Mm5l7IYvluzEphii7gHhptz3NE=",
- "requires": {
- "through2": "2.0.3"
- }
- },
- "hawk": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
- "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
- "requires": {
- "boom": "4.3.1",
- "cryptiles": "3.1.2",
- "hoek": "4.2.1",
- "sntp": "2.1.0"
- }
- },
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="
- },
- "http-errors": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
- "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
- "requires": {
- "depd": "1.1.1",
- "inherits": "2.0.3",
- "setprototypeof": "1.0.3",
- "statuses": "1.4.0"
- },
- "dependencies": {
- "depd": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
- "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
- },
- "setprototypeof": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
- "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
- }
- }
- },
- "http-parser-js": {
- "version": "0.4.11",
- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.11.tgz",
- "integrity": "sha512-QCR5O2AjjMW8Mo4HyI1ctFcv+O99j/0g367V3YoVnrNw5hkDvAWZD0lWGcc+F4yN3V55USPCVix4efb75HxFfA=="
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "requires": {
- "assert-plus": "1.0.0",
- "jsprim": "1.4.1",
- "sshpk": "1.14.1"
- }
- },
- "iconv-lite": {
- "version": "0.4.19",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
- "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
- },
- "ignore": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
- "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA=="
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
- },
- "indexof": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
- "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "invert-kv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
- },
- "ipaddr.js": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz",
- "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs="
- },
- "is": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz",
- "integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU="
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "requires": {
- "kind-of": "6.0.2"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "requires": {
- "kind-of": "6.0.2"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "requires": {
- "is-accessor-descriptor": "1.0.0",
- "is-data-descriptor": "1.0.0",
- "kind-of": "6.0.2"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "requires": {
- "number-is-nan": "1.0.1"
- }
- },
- "is-glob": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
- "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
- "requires": {
- "is-extglob": "2.1.1"
- }
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
- },
- "is-odd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
- "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
- "requires": {
- "is-number": "4.0.0"
- },
- "dependencies": {
- "is-number": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ=="
- }
- }
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "requires": {
- "isobject": "3.0.1"
- }
- },
- "is-stream-ended": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.3.tgz",
- "integrity": "sha1-oEc7Jnx1ZjVIa+7cfjNE5UnRUqw="
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
- },
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "isemail": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz",
- "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo="
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
- },
- "joi": {
- "version": "6.10.1",
- "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz",
- "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=",
- "requires": {
- "hoek": "2.16.3",
- "isemail": "1.2.0",
- "moment": "2.21.0",
- "topo": "1.1.0"
- },
- "dependencies": {
- "hoek": {
- "version": "2.16.3",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
- "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0="
- }
- }
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "optional": true
- },
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
- },
- "json-schema-traverse": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
- "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
- },
- "jsonwebtoken": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.1.0.tgz",
- "integrity": "sha1-xjl80uX9WD1lwAeoPce7eOaYK4M=",
- "requires": {
- "jws": "3.1.4",
- "lodash.includes": "4.3.0",
- "lodash.isboolean": "3.0.3",
- "lodash.isinteger": "4.0.4",
- "lodash.isnumber": "3.0.3",
- "lodash.isplainobject": "4.0.6",
- "lodash.isstring": "4.0.1",
- "lodash.once": "4.1.1",
- "ms": "2.0.0",
- "xtend": "4.0.1"
- }
- },
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "jwa": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz",
- "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=",
- "requires": {
- "base64url": "2.0.0",
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.9",
- "safe-buffer": "5.1.1"
- }
- },
- "jws": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz",
- "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=",
- "requires": {
- "base64url": "2.0.0",
- "jwa": "1.1.5",
- "safe-buffer": "5.1.1"
- }
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
- },
- "lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
- "requires": {
- "invert-kv": "1.0.0"
- }
- },
- "lodash": {
- "version": "4.17.5",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
- "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw=="
- },
- "lodash.includes": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
- "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8="
- },
- "lodash.isboolean": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
- "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY="
- },
- "lodash.isinteger": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
- "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M="
- },
- "lodash.isnumber": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
- "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w="
- },
- "lodash.isplainobject": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
- },
- "lodash.isstring": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
- "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
- },
- "lodash.once": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
- "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
- },
- "log-driver": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz",
- "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg=="
- },
- "long": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
- "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s="
- },
- "lru-cache": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz",
- "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==",
- "requires": {
- "pseudomap": "1.0.2",
- "yallist": "2.1.2"
- }
- },
- "make-dir": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz",
- "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==",
- "requires": {
- "pify": "3.0.0"
- }
- },
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
- },
- "map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "requires": {
- "object-visit": "1.0.1"
- }
- },
- "media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
- },
- "merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
- },
- "merge2": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
- "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg=="
- },
- "methmeth": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/methmeth/-/methmeth-1.1.0.tgz",
- "integrity": "sha1-6AomYY5S9cQiKGG7dIUQvRDikIk="
- },
- "methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
- },
- "micromatch": {
- "version": "3.1.9",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz",
- "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==",
- "requires": {
- "arr-diff": "4.0.0",
- "array-unique": "0.3.2",
- "braces": "2.3.1",
- "define-property": "2.0.2",
- "extend-shallow": "3.0.2",
- "extglob": "2.0.4",
- "fragment-cache": "0.2.1",
- "kind-of": "6.0.2",
- "nanomatch": "1.2.9",
- "object.pick": "1.3.0",
- "regex-not": "1.0.2",
- "snapdragon": "0.8.2",
- "to-regex": "3.0.2"
- }
- },
- "mime": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.2.0.tgz",
- "integrity": "sha512-0Qz9uF1ATtl8RKJG4VRfOymh7PyEor6NbrI/61lRfuRe4vx9SNATrvAeTj2EWVRKjEQGskrzWkJBBY5NbaVHIA=="
- },
- "mime-db": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
- "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="
- },
- "mime-types": {
- "version": "2.1.18",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
- "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
- "requires": {
- "mime-db": "1.33.0"
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "requires": {
- "brace-expansion": "1.1.11"
- }
- },
- "mixin-deep": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
- "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
- "requires": {
- "for-in": "1.0.2",
- "is-extendable": "1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "requires": {
- "is-plain-object": "2.0.4"
- }
- }
- }
- },
- "modelo": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/modelo/-/modelo-4.2.3.tgz",
- "integrity": "sha512-9DITV2YEMcw7XojdfvGl3gDD8J9QjZTJ7ZOUuSAkP+F3T6rDbzMJuPktxptsdHYEvZcmXrCD3LMOhdSAEq6zKA=="
- },
- "moment": {
- "version": "2.21.0",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.21.0.tgz",
- "integrity": "sha512-TCZ36BjURTeFTM/CwRcViQlfkMvL1/vFISuNLO5GkcVm1+QHfbSiNqZuWeMFjj1/3+uAjXswgRk30j1kkLYJBQ=="
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "nan": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
- "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA=="
- },
- "nanomatch": {
- "version": "1.2.9",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
- "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
- "requires": {
- "arr-diff": "4.0.0",
- "array-unique": "0.3.2",
- "define-property": "2.0.2",
- "extend-shallow": "3.0.2",
- "fragment-cache": "0.2.1",
- "is-odd": "2.0.0",
- "is-windows": "1.0.2",
- "kind-of": "6.0.2",
- "object.pick": "1.3.0",
- "regex-not": "1.0.2",
- "snapdragon": "0.8.2",
- "to-regex": "3.0.2"
- }
- },
- "negotiator": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
- "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
- },
- "node-forge": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz",
- "integrity": "sha1-naYR6giYL0uUIGs760zJZl8gwwA="
- },
- "npm": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/npm/-/npm-5.8.0.tgz",
- "integrity": "sha512-DowXzQwtSWDtbAjuWecuEiismR0VdNEYaL3VxNTYTdW6AGkYxfGk9LUZ/rt6etEyiH4IEk95HkJeGfXE5Rz9xQ==",
- "requires": {
- "JSONStream": "1.3.2",
- "abbrev": "1.1.1",
- "ansi-regex": "3.0.0",
- "ansicolors": "0.3.2",
- "ansistyles": "0.1.3",
- "aproba": "1.2.0",
- "archy": "1.0.0",
- "bin-links": "1.1.0",
- "bluebird": "3.5.1",
- "cacache": "10.0.4",
- "call-limit": "1.1.0",
- "chownr": "1.0.1",
- "cli-table2": "0.2.0",
- "cmd-shim": "2.0.2",
- "columnify": "1.5.4",
- "config-chain": "1.1.11",
- "debuglog": "1.0.1",
- "detect-indent": "5.0.0",
- "detect-newline": "2.1.0",
- "dezalgo": "1.0.3",
- "editor": "1.0.0",
- "find-npm-prefix": "1.0.2",
- "fs-vacuum": "1.2.10",
- "fs-write-stream-atomic": "1.0.10",
- "gentle-fs": "2.0.1",
- "glob": "7.1.2",
- "graceful-fs": "4.1.11",
- "has-unicode": "2.0.1",
- "hosted-git-info": "2.6.0",
- "iferr": "0.1.5",
- "imurmurhash": "0.1.4",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "ini": "1.3.5",
- "init-package-json": "1.10.3",
- "is-cidr": "1.0.0",
- "json-parse-better-errors": "1.0.1",
- "lazy-property": "1.0.0",
- "libcipm": "1.6.0",
- "libnpx": "10.0.1",
- "lockfile": "1.0.3",
- "lodash._baseindexof": "3.1.0",
- "lodash._baseuniq": "4.6.0",
- "lodash._bindcallback": "3.0.1",
- "lodash._cacheindexof": "3.0.2",
- "lodash._createcache": "3.1.2",
- "lodash._getnative": "3.9.1",
- "lodash.clonedeep": "4.5.0",
- "lodash.restparam": "3.6.1",
- "lodash.union": "4.6.0",
- "lodash.uniq": "4.5.0",
- "lodash.without": "4.4.0",
- "lru-cache": "4.1.1",
- "meant": "1.0.1",
- "mississippi": "3.0.0",
- "mkdirp": "0.5.1",
- "move-concurrently": "1.0.1",
- "nopt": "4.0.1",
- "normalize-package-data": "2.4.0",
- "npm-cache-filename": "1.0.2",
- "npm-install-checks": "3.0.0",
- "npm-lifecycle": "2.0.1",
- "npm-package-arg": "6.0.0",
- "npm-packlist": "1.1.10",
- "npm-profile": "3.0.1",
- "npm-registry-client": "8.5.1",
- "npm-user-validate": "1.0.0",
- "npmlog": "4.1.2",
- "once": "1.4.0",
- "opener": "1.4.3",
- "osenv": "0.1.5",
- "pacote": "7.6.1",
- "path-is-inside": "1.0.2",
- "promise-inflight": "1.0.1",
- "qrcode-terminal": "0.11.0",
- "query-string": "5.1.0",
- "qw": "1.0.1",
- "read": "1.0.7",
- "read-cmd-shim": "1.0.1",
- "read-installed": "4.0.3",
- "read-package-json": "2.0.13",
- "read-package-tree": "5.1.6",
- "readable-stream": "2.3.5",
- "readdir-scoped-modules": "1.0.2",
- "request": "2.83.0",
- "retry": "0.10.1",
- "rimraf": "2.6.2",
- "safe-buffer": "5.1.1",
- "semver": "5.5.0",
- "sha": "2.0.1",
- "slide": "1.1.6",
- "sorted-object": "2.0.1",
- "sorted-union-stream": "2.1.3",
- "ssri": "5.2.4",
- "strip-ansi": "4.0.0",
- "tar": "4.4.0",
- "text-table": "0.2.0",
- "uid-number": "0.0.6",
- "umask": "1.1.0",
- "unique-filename": "1.1.0",
- "unpipe": "1.0.0",
- "update-notifier": "2.3.0",
- "uuid": "3.2.1",
- "validate-npm-package-license": "3.0.1",
- "validate-npm-package-name": "3.0.0",
- "which": "1.3.0",
- "worker-farm": "1.5.4",
- "wrappy": "1.0.2",
- "write-file-atomic": "2.3.0"
- },
- "dependencies": {
- "JSONStream": {
- "version": "1.3.2",
- "bundled": true,
- "requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
- },
- "dependencies": {
- "jsonparse": {
- "version": "1.3.1",
- "bundled": true
- },
- "through": {
- "version": "2.3.8",
- "bundled": true
- }
- }
- },
- "abbrev": {
- "version": "1.1.1",
- "bundled": true
- },
- "ansi-regex": {
- "version": "3.0.0",
- "bundled": true
- },
- "ansicolors": {
- "version": "0.3.2",
- "bundled": true
- },
- "ansistyles": {
- "version": "0.1.3",
- "bundled": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- },
- "archy": {
- "version": "1.0.0",
- "bundled": true
- },
- "bin-links": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "bluebird": "3.5.1",
- "cmd-shim": "2.0.2",
- "fs-write-stream-atomic": "1.0.10",
- "gentle-fs": "2.0.1",
- "graceful-fs": "4.1.11",
- "slide": "1.1.6"
- }
- },
- "bluebird": {
- "version": "3.5.1",
- "bundled": true
- },
- "cacache": {
- "version": "10.0.4",
- "bundled": true,
- "requires": {
- "bluebird": "3.5.1",
- "chownr": "1.0.1",
- "glob": "7.1.2",
- "graceful-fs": "4.1.11",
- "lru-cache": "4.1.1",
- "mississippi": "2.0.0",
- "mkdirp": "0.5.1",
- "move-concurrently": "1.0.1",
- "promise-inflight": "1.0.1",
- "rimraf": "2.6.2",
- "ssri": "5.2.4",
- "unique-filename": "1.1.0",
- "y18n": "4.0.0"
- },
- "dependencies": {
- "mississippi": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "concat-stream": "1.6.1",
- "duplexify": "3.5.4",
- "end-of-stream": "1.4.1",
- "flush-write-stream": "1.0.2",
- "from2": "2.3.0",
- "parallel-transform": "1.1.0",
- "pump": "2.0.1",
- "pumpify": "1.4.0",
- "stream-each": "1.2.2",
- "through2": "2.0.3"
- },
- "dependencies": {
- "concat-stream": {
- "version": "1.6.1",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.5",
- "typedarray": "0.0.6"
- },
- "dependencies": {
- "typedarray": {
- "version": "0.0.6",
- "bundled": true
- }
- }
- },
- "duplexify": {
- "version": "3.5.4",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "inherits": "2.0.3",
- "readable-stream": "2.3.5",
- "stream-shift": "1.0.0"
- },
- "dependencies": {
- "stream-shift": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- },
- "end-of-stream": {
- "version": "1.4.1",
- "bundled": true,
- "requires": {
- "once": "1.4.0"
- }
- },
- "flush-write-stream": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.5"
- }
- },
- "from2": {
- "version": "2.3.0",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.5"
- }
- },
- "parallel-transform": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "cyclist": "0.2.2",
- "inherits": "2.0.3",
- "readable-stream": "2.3.5"
- },
- "dependencies": {
- "cyclist": {
- "version": "0.2.2",
- "bundled": true
- }
- }
- },
- "pump": {
- "version": "2.0.1",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "once": "1.4.0"
- }
- },
- "pumpify": {
- "version": "1.4.0",
- "bundled": true,
- "requires": {
- "duplexify": "3.5.4",
- "inherits": "2.0.3",
- "pump": "2.0.1"
- }
- },
- "stream-each": {
- "version": "1.2.2",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "stream-shift": "1.0.0"
- },
- "dependencies": {
- "stream-shift": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- },
- "through2": {
- "version": "2.0.3",
- "bundled": true,
- "requires": {
- "readable-stream": "2.3.5",
- "xtend": "4.0.1"
- },
- "dependencies": {
- "xtend": {
- "version": "4.0.1",
- "bundled": true
- }
- }
- }
- }
- },
- "y18n": {
- "version": "4.0.0",
- "bundled": true
- }
- }
- },
- "call-limit": {
- "version": "1.1.0",
- "bundled": true
- },
- "chownr": {
- "version": "1.0.1",
- "bundled": true
- },
- "cli-table2": {
- "version": "0.2.0",
- "bundled": true,
- "requires": {
- "colors": "1.1.2",
- "lodash": "3.10.1",
- "string-width": "1.0.2"
- },
- "dependencies": {
- "colors": {
- "version": "1.1.2",
- "bundled": true,
- "optional": true
- },
- "lodash": {
- "version": "3.10.1",
- "bundled": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
- },
- "dependencies": {
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "number-is-nan": "1.0.1"
- },
- "dependencies": {
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true
- }
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "ansi-regex": "2.1.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true
- }
- }
- }
- }
- }
- }
- },
- "cmd-shim": {
- "version": "2.0.2",
- "bundled": true,
- "requires": {
- "graceful-fs": "4.1.11",
- "mkdirp": "0.5.1"
- }
- },
- "columnify": {
- "version": "1.5.4",
- "bundled": true,
- "requires": {
- "strip-ansi": "3.0.1",
- "wcwidth": "1.0.1"
- },
- "dependencies": {
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "ansi-regex": "2.1.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true
- }
- }
- },
- "wcwidth": {
- "version": "1.0.1",
- "bundled": true,
- "requires": {
- "defaults": "1.0.3"
- },
- "dependencies": {
- "defaults": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "clone": "1.0.2"
- },
- "dependencies": {
- "clone": {
- "version": "1.0.2",
- "bundled": true
- }
- }
- }
- }
- }
- }
- },
- "config-chain": {
- "version": "1.1.11",
- "bundled": true,
- "requires": {
- "ini": "1.3.5",
- "proto-list": "1.2.4"
- },
- "dependencies": {
- "proto-list": {
- "version": "1.2.4",
- "bundled": true
- }
- }
- },
- "debuglog": {
- "version": "1.0.1",
- "bundled": true
- },
- "detect-indent": {
- "version": "5.0.0",
- "bundled": true
- },
- "detect-newline": {
- "version": "2.1.0",
- "bundled": true
- },
- "dezalgo": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "asap": "2.0.5",
- "wrappy": "1.0.2"
- },
- "dependencies": {
- "asap": {
- "version": "2.0.5",
- "bundled": true
- }
- }
- },
- "editor": {
- "version": "1.0.0",
- "bundled": true
- },
- "find-npm-prefix": {
- "version": "1.0.2",
- "bundled": true
- },
- "fs-vacuum": {
- "version": "1.2.10",
- "bundled": true,
- "requires": {
- "graceful-fs": "4.1.11",
- "path-is-inside": "1.0.2",
- "rimraf": "2.6.2"
- }
- },
- "fs-write-stream-atomic": {
- "version": "1.0.10",
- "bundled": true,
- "requires": {
- "graceful-fs": "4.1.11",
- "iferr": "0.1.5",
- "imurmurhash": "0.1.4",
- "readable-stream": "2.3.5"
- }
- },
- "gentle-fs": {
- "version": "2.0.1",
- "bundled": true,
- "requires": {
- "aproba": "1.2.0",
- "fs-vacuum": "1.2.10",
- "graceful-fs": "4.1.11",
- "iferr": "0.1.5",
- "mkdirp": "0.5.1",
- "path-is-inside": "1.0.2",
- "read-cmd-shim": "1.0.1",
- "slide": "1.1.6"
- }
- },
- "glob": {
- "version": "7.1.2",
- "bundled": true,
- "requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- },
- "dependencies": {
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "requires": {
- "brace-expansion": "1.1.8"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "1.1.8",
- "bundled": true,
- "requires": {
- "balanced-match": "1.0.0",
- "concat-map": "0.0.1"
- },
- "dependencies": {
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true
- }
- }
- }
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true
- }
- }
- },
- "graceful-fs": {
- "version": "4.1.11",
- "bundled": true
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true
- },
- "hosted-git-info": {
- "version": "2.6.0",
- "bundled": true
- },
- "iferr": {
- "version": "0.1.5",
- "bundled": true
- },
- "imurmurhash": {
- "version": "0.1.4",
- "bundled": true
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "bundled": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true
- },
- "init-package-json": {
- "version": "1.10.3",
- "bundled": true,
- "requires": {
- "glob": "7.1.2",
- "npm-package-arg": "6.0.0",
- "promzard": "0.3.0",
- "read": "1.0.7",
- "read-package-json": "2.0.13",
- "semver": "5.5.0",
- "validate-npm-package-license": "3.0.1",
- "validate-npm-package-name": "3.0.0"
- },
- "dependencies": {
- "promzard": {
- "version": "0.3.0",
- "bundled": true,
- "requires": {
- "read": "1.0.7"
- }
- }
- }
- },
- "is-cidr": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "cidr-regex": "1.0.6"
- },
- "dependencies": {
- "cidr-regex": {
- "version": "1.0.6",
- "bundled": true
- }
- }
- },
- "json-parse-better-errors": {
- "version": "1.0.1",
- "bundled": true
- },
- "lazy-property": {
- "version": "1.0.0",
- "bundled": true
- },
- "libcipm": {
- "version": "1.6.0",
- "bundled": true,
- "requires": {
- "bin-links": "1.1.0",
- "bluebird": "3.5.1",
- "find-npm-prefix": "1.0.2",
- "graceful-fs": "4.1.11",
- "lock-verify": "2.0.0",
- "npm-lifecycle": "2.0.1",
- "npm-logical-tree": "1.2.1",
- "npm-package-arg": "6.0.0",
- "pacote": "7.6.1",
- "protoduck": "5.0.0",
- "read-package-json": "2.0.13",
- "rimraf": "2.6.2",
- "worker-farm": "1.5.4"
- },
- "dependencies": {
- "lock-verify": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "npm-package-arg": "5.1.2",
- "semver": "5.5.0"
- },
- "dependencies": {
- "npm-package-arg": {
- "version": "5.1.2",
- "bundled": true,
- "requires": {
- "hosted-git-info": "2.6.0",
- "osenv": "0.1.5",
- "semver": "5.5.0",
- "validate-npm-package-name": "3.0.0"
- }
- }
- }
- },
- "npm-logical-tree": {
- "version": "1.2.1",
- "bundled": true
- },
- "protoduck": {
- "version": "5.0.0",
- "bundled": true,
- "requires": {
- "genfun": "4.0.1"
- },
- "dependencies": {
- "genfun": {
- "version": "4.0.1",
- "bundled": true
- }
- }
- },
- "worker-farm": {
- "version": "1.5.4",
- "bundled": true,
- "requires": {
- "errno": "0.1.7",
- "xtend": "4.0.1"
- },
- "dependencies": {
- "errno": {
- "version": "0.1.7",
- "bundled": true,
- "requires": {
- "prr": "1.0.1"
- },
- "dependencies": {
- "prr": {
- "version": "1.0.1",
- "bundled": true
- }
- }
- },
- "xtend": {
- "version": "4.0.1",
- "bundled": true
- }
- }
- }
- }
- },
- "libnpx": {
- "version": "10.0.1",
- "bundled": true,
- "requires": {
- "dotenv": "5.0.1",
- "npm-package-arg": "6.0.0",
- "rimraf": "2.6.2",
- "safe-buffer": "5.1.1",
- "update-notifier": "2.3.0",
- "which": "1.3.0",
- "y18n": "4.0.0",
- "yargs": "11.0.0"
- },
- "dependencies": {
- "dotenv": {
- "version": "5.0.1",
- "bundled": true
- },
- "y18n": {
- "version": "4.0.0",
- "bundled": true
- },
- "yargs": {
- "version": "11.0.0",
- "bundled": true,
- "requires": {
- "cliui": "4.0.0",
- "decamelize": "1.2.0",
- "find-up": "2.1.0",
- "get-caller-file": "1.0.2",
- "os-locale": "2.1.0",
- "require-directory": "2.1.1",
- "require-main-filename": "1.0.1",
- "set-blocking": "2.0.0",
- "string-width": "2.1.1",
- "which-module": "2.0.0",
- "y18n": "3.2.1",
- "yargs-parser": "9.0.2"
- },
- "dependencies": {
- "cliui": {
- "version": "4.0.0",
- "bundled": true,
- "requires": {
- "string-width": "2.1.1",
- "strip-ansi": "4.0.0",
- "wrap-ansi": "2.1.0"
- },
- "dependencies": {
- "wrap-ansi": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1"
- },
- "dependencies": {
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
- },
- "dependencies": {
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "number-is-nan": "1.0.1"
- },
- "dependencies": {
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true
- }
- }
- }
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "ansi-regex": "2.1.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true
- }
- }
- }
- }
- }
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "bundled": true
- },
- "find-up": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "locate-path": "2.0.0"
- },
- "dependencies": {
- "locate-path": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "p-locate": "2.0.0",
- "path-exists": "3.0.0"
- },
- "dependencies": {
- "p-locate": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "p-limit": "1.2.0"
- },
- "dependencies": {
- "p-limit": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "p-try": "1.0.0"
- },
- "dependencies": {
- "p-try": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- }
- }
- },
- "path-exists": {
- "version": "3.0.0",
- "bundled": true
- }
- }
- }
- }
- },
- "get-caller-file": {
- "version": "1.0.2",
- "bundled": true
- },
- "os-locale": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "execa": "0.7.0",
- "lcid": "1.0.0",
- "mem": "1.1.0"
- },
- "dependencies": {
- "execa": {
- "version": "0.7.0",
- "bundled": true,
- "requires": {
- "cross-spawn": "5.1.0",
- "get-stream": "3.0.0",
- "is-stream": "1.1.0",
- "npm-run-path": "2.0.2",
- "p-finally": "1.0.0",
- "signal-exit": "3.0.2",
- "strip-eof": "1.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "5.1.0",
- "bundled": true,
- "requires": {
- "lru-cache": "4.1.1",
- "shebang-command": "1.2.0",
- "which": "1.3.0"
- },
- "dependencies": {
- "shebang-command": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "shebang-regex": "1.0.0"
- },
- "dependencies": {
- "shebang-regex": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- }
- }
- },
- "get-stream": {
- "version": "3.0.0",
- "bundled": true
- },
- "is-stream": {
- "version": "1.1.0",
- "bundled": true
- },
- "npm-run-path": {
- "version": "2.0.2",
- "bundled": true,
- "requires": {
- "path-key": "2.0.1"
- },
- "dependencies": {
- "path-key": {
- "version": "2.0.1",
- "bundled": true
- }
- }
- },
- "p-finally": {
- "version": "1.0.0",
- "bundled": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true
- },
- "strip-eof": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- },
- "lcid": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "invert-kv": "1.0.0"
- },
- "dependencies": {
- "invert-kv": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- },
- "mem": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "mimic-fn": "1.2.0"
- },
- "dependencies": {
- "mimic-fn": {
- "version": "1.2.0",
- "bundled": true
- }
- }
- }
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "bundled": true
- },
- "require-main-filename": {
- "version": "1.0.1",
- "bundled": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true
- },
- "string-width": {
- "version": "2.1.1",
- "bundled": true,
- "requires": {
- "is-fullwidth-code-point": "2.0.0",
- "strip-ansi": "4.0.0"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "bundled": true
- }
- }
- },
- "which-module": {
- "version": "2.0.0",
- "bundled": true
- },
- "y18n": {
- "version": "3.2.1",
- "bundled": true
- },
- "yargs-parser": {
- "version": "9.0.2",
- "bundled": true,
- "requires": {
- "camelcase": "4.1.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "bundled": true
- }
- }
- }
- }
- }
- }
- },
- "lockfile": {
- "version": "1.0.3",
- "bundled": true
- },
- "lodash._baseindexof": {
- "version": "3.1.0",
- "bundled": true
- },
- "lodash._baseuniq": {
- "version": "4.6.0",
- "bundled": true,
- "requires": {
- "lodash._createset": "4.0.3",
- "lodash._root": "3.0.1"
- },
- "dependencies": {
- "lodash._createset": {
- "version": "4.0.3",
- "bundled": true
- },
- "lodash._root": {
- "version": "3.0.1",
- "bundled": true
- }
- }
- },
- "lodash._bindcallback": {
- "version": "3.0.1",
- "bundled": true
- },
- "lodash._cacheindexof": {
- "version": "3.0.2",
- "bundled": true
- },
- "lodash._createcache": {
- "version": "3.1.2",
- "bundled": true,
- "requires": {
- "lodash._getnative": "3.9.1"
- }
- },
- "lodash._getnative": {
- "version": "3.9.1",
- "bundled": true
- },
- "lodash.clonedeep": {
- "version": "4.5.0",
- "bundled": true
- },
- "lodash.restparam": {
- "version": "3.6.1",
- "bundled": true
- },
- "lodash.union": {
- "version": "4.6.0",
- "bundled": true
- },
- "lodash.uniq": {
- "version": "4.5.0",
- "bundled": true
- },
- "lodash.without": {
- "version": "4.4.0",
- "bundled": true
- },
- "lru-cache": {
- "version": "4.1.1",
- "bundled": true,
- "requires": {
- "pseudomap": "1.0.2",
- "yallist": "2.1.2"
- },
- "dependencies": {
- "pseudomap": {
- "version": "1.0.2",
- "bundled": true
- },
- "yallist": {
- "version": "2.1.2",
- "bundled": true
- }
- }
- },
- "meant": {
- "version": "1.0.1",
- "bundled": true
- },
- "mississippi": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "concat-stream": "1.6.1",
- "duplexify": "3.5.4",
- "end-of-stream": "1.4.1",
- "flush-write-stream": "1.0.2",
- "from2": "2.3.0",
- "parallel-transform": "1.1.0",
- "pump": "3.0.0",
- "pumpify": "1.4.0",
- "stream-each": "1.2.2",
- "through2": "2.0.3"
- },
- "dependencies": {
- "concat-stream": {
- "version": "1.6.1",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.5",
- "typedarray": "0.0.6"
- },
- "dependencies": {
- "typedarray": {
- "version": "0.0.6",
- "bundled": true
- }
- }
- },
- "duplexify": {
- "version": "3.5.4",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "inherits": "2.0.3",
- "readable-stream": "2.3.5",
- "stream-shift": "1.0.0"
- },
- "dependencies": {
- "stream-shift": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- },
- "end-of-stream": {
- "version": "1.4.1",
- "bundled": true,
- "requires": {
- "once": "1.4.0"
- }
- },
- "flush-write-stream": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.5"
- }
- },
- "from2": {
- "version": "2.3.0",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.5"
- }
- },
- "parallel-transform": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "cyclist": "0.2.2",
- "inherits": "2.0.3",
- "readable-stream": "2.3.5"
- },
- "dependencies": {
- "cyclist": {
- "version": "0.2.2",
- "bundled": true
- }
- }
- },
- "pump": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "once": "1.4.0"
- }
- },
- "pumpify": {
- "version": "1.4.0",
- "bundled": true,
- "requires": {
- "duplexify": "3.5.4",
- "inherits": "2.0.3",
- "pump": "2.0.1"
- },
- "dependencies": {
- "pump": {
- "version": "2.0.1",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "once": "1.4.0"
- }
- }
- }
- },
- "stream-each": {
- "version": "1.2.2",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "stream-shift": "1.0.0"
- },
- "dependencies": {
- "stream-shift": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- },
- "through2": {
- "version": "2.0.3",
- "bundled": true,
- "requires": {
- "readable-stream": "2.3.5",
- "xtend": "4.0.1"
- },
- "dependencies": {
- "xtend": {
- "version": "4.0.1",
- "bundled": true
- }
- }
- }
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "requires": {
- "minimist": "0.0.8"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.8",
- "bundled": true
- }
- }
- },
- "move-concurrently": {
- "version": "1.0.1",
- "bundled": true,
- "requires": {
- "aproba": "1.2.0",
- "copy-concurrently": "1.0.5",
- "fs-write-stream-atomic": "1.0.10",
- "mkdirp": "0.5.1",
- "rimraf": "2.6.2",
- "run-queue": "1.0.3"
- },
- "dependencies": {
- "copy-concurrently": {
- "version": "1.0.5",
- "bundled": true,
- "requires": {
- "aproba": "1.2.0",
- "fs-write-stream-atomic": "1.0.10",
- "iferr": "0.1.5",
- "mkdirp": "0.5.1",
- "rimraf": "2.6.2",
- "run-queue": "1.0.3"
- }
- },
- "run-queue": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "aproba": "1.2.0"
- }
- }
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "requires": {
- "abbrev": "1.1.1",
- "osenv": "0.1.5"
- }
- },
- "normalize-package-data": {
- "version": "2.4.0",
- "bundled": true,
- "requires": {
- "hosted-git-info": "2.6.0",
- "is-builtin-module": "1.0.0",
- "semver": "5.5.0",
- "validate-npm-package-license": "3.0.1"
- },
- "dependencies": {
- "is-builtin-module": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "builtin-modules": "1.1.1"
- },
- "dependencies": {
- "builtin-modules": {
- "version": "1.1.1",
- "bundled": true
- }
- }
- }
- }
- },
- "npm-cache-filename": {
- "version": "1.0.2",
- "bundled": true
- },
- "npm-install-checks": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "semver": "5.5.0"
- }
- },
- "npm-lifecycle": {
- "version": "2.0.1",
- "bundled": true,
- "requires": {
- "byline": "5.0.0",
- "graceful-fs": "4.1.11",
- "node-gyp": "3.6.2",
- "resolve-from": "4.0.0",
- "slide": "1.1.6",
- "uid-number": "0.0.6",
- "umask": "1.1.0",
- "which": "1.3.0"
- },
- "dependencies": {
- "byline": {
- "version": "5.0.0",
- "bundled": true
- },
- "node-gyp": {
- "version": "3.6.2",
- "bundled": true,
- "requires": {
- "fstream": "1.0.11",
- "glob": "7.1.2",
- "graceful-fs": "4.1.11",
- "minimatch": "3.0.4",
- "mkdirp": "0.5.1",
- "nopt": "3.0.6",
- "npmlog": "4.1.2",
- "osenv": "0.1.5",
- "request": "2.83.0",
- "rimraf": "2.6.2",
- "semver": "5.3.0",
- "tar": "2.2.1",
- "which": "1.3.0"
- },
- "dependencies": {
- "fstream": {
- "version": "1.0.11",
- "bundled": true,
- "requires": {
- "graceful-fs": "4.1.11",
- "inherits": "2.0.3",
- "mkdirp": "0.5.1",
- "rimraf": "2.6.2"
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "requires": {
- "brace-expansion": "1.1.11"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "requires": {
- "balanced-match": "1.0.0",
- "concat-map": "0.0.1"
- },
- "dependencies": {
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true
- }
- }
- }
- }
- },
- "nopt": {
- "version": "3.0.6",
- "bundled": true,
- "requires": {
- "abbrev": "1.1.1"
- }
- },
- "semver": {
- "version": "5.3.0",
- "bundled": true
- },
- "tar": {
- "version": "2.2.1",
- "bundled": true,
- "requires": {
- "block-stream": "0.0.9",
- "fstream": "1.0.11",
- "inherits": "2.0.3"
- },
- "dependencies": {
- "block-stream": {
- "version": "0.0.9",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3"
- }
- }
- }
- }
- }
- },
- "resolve-from": {
- "version": "4.0.0",
- "bundled": true
- }
- }
- },
- "npm-package-arg": {
- "version": "6.0.0",
- "bundled": true,
- "requires": {
- "hosted-git-info": "2.6.0",
- "osenv": "0.1.5",
- "semver": "5.5.0",
- "validate-npm-package-name": "3.0.0"
- }
- },
- "npm-packlist": {
- "version": "1.1.10",
- "bundled": true,
- "requires": {
- "ignore-walk": "3.0.1",
- "npm-bundled": "1.0.3"
- },
- "dependencies": {
- "ignore-walk": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "minimatch": "3.0.4"
- },
- "dependencies": {
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "requires": {
- "brace-expansion": "1.1.8"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "1.1.8",
- "bundled": true,
- "requires": {
- "balanced-match": "1.0.0",
- "concat-map": "0.0.1"
- },
- "dependencies": {
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true
- }
- }
- }
- }
- }
- }
- },
- "npm-bundled": {
- "version": "1.0.3",
- "bundled": true
- }
- }
- },
- "npm-profile": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "aproba": "1.2.0",
- "make-fetch-happen": "2.6.0"
- },
- "dependencies": {
- "make-fetch-happen": {
- "version": "2.6.0",
- "bundled": true,
- "requires": {
- "agentkeepalive": "3.3.0",
- "cacache": "10.0.4",
- "http-cache-semantics": "3.8.1",
- "http-proxy-agent": "2.0.0",
- "https-proxy-agent": "2.1.1",
- "lru-cache": "4.1.1",
- "mississippi": "1.3.1",
- "node-fetch-npm": "2.0.2",
- "promise-retry": "1.1.1",
- "socks-proxy-agent": "3.0.1",
- "ssri": "5.2.4"
- },
- "dependencies": {
- "agentkeepalive": {
- "version": "3.3.0",
- "bundled": true,
- "requires": {
- "humanize-ms": "1.2.1"
- },
- "dependencies": {
- "humanize-ms": {
- "version": "1.2.1",
- "bundled": true,
- "requires": {
- "ms": "2.1.1"
- },
- "dependencies": {
- "ms": {
- "version": "2.1.1",
- "bundled": true
- }
- }
- }
- }
- },
- "http-cache-semantics": {
- "version": "3.8.1",
- "bundled": true
- },
- "http-proxy-agent": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "agent-base": "4.2.0",
- "debug": "2.6.9"
- },
- "dependencies": {
- "agent-base": {
- "version": "4.2.0",
- "bundled": true,
- "requires": {
- "es6-promisify": "5.0.0"
- },
- "dependencies": {
- "es6-promisify": {
- "version": "5.0.0",
- "bundled": true,
- "requires": {
- "es6-promise": "4.2.4"
- },
- "dependencies": {
- "es6-promise": {
- "version": "4.2.4",
- "bundled": true
- }
- }
- }
- }
- },
- "debug": {
- "version": "2.6.9",
- "bundled": true,
- "requires": {
- "ms": "2.0.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.0.0",
- "bundled": true
- }
- }
- }
- }
- },
- "https-proxy-agent": {
- "version": "2.1.1",
- "bundled": true,
- "requires": {
- "agent-base": "4.2.0",
- "debug": "3.1.0"
- },
- "dependencies": {
- "agent-base": {
- "version": "4.2.0",
- "bundled": true,
- "requires": {
- "es6-promisify": "5.0.0"
- },
- "dependencies": {
- "es6-promisify": {
- "version": "5.0.0",
- "bundled": true,
- "requires": {
- "es6-promise": "4.2.4"
- },
- "dependencies": {
- "es6-promise": {
- "version": "4.2.4",
- "bundled": true
- }
- }
- }
- }
- },
- "debug": {
- "version": "3.1.0",
- "bundled": true,
- "requires": {
- "ms": "2.0.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.0.0",
- "bundled": true
- }
- }
- }
- }
- },
- "mississippi": {
- "version": "1.3.1",
- "bundled": true,
- "requires": {
- "concat-stream": "1.6.0",
- "duplexify": "3.5.3",
- "end-of-stream": "1.4.1",
- "flush-write-stream": "1.0.2",
- "from2": "2.3.0",
- "parallel-transform": "1.1.0",
- "pump": "1.0.3",
- "pumpify": "1.4.0",
- "stream-each": "1.2.2",
- "through2": "2.0.3"
- },
- "dependencies": {
- "concat-stream": {
- "version": "1.6.0",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.5",
- "typedarray": "0.0.6"
- },
- "dependencies": {
- "typedarray": {
- "version": "0.0.6",
- "bundled": true
- }
- }
- },
- "duplexify": {
- "version": "3.5.3",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "inherits": "2.0.3",
- "readable-stream": "2.3.5",
- "stream-shift": "1.0.0"
- },
- "dependencies": {
- "stream-shift": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- },
- "end-of-stream": {
- "version": "1.4.1",
- "bundled": true,
- "requires": {
- "once": "1.4.0"
- }
- },
- "flush-write-stream": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.5"
- }
- },
- "from2": {
- "version": "2.3.0",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.5"
- }
- },
- "parallel-transform": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "cyclist": "0.2.2",
- "inherits": "2.0.3",
- "readable-stream": "2.3.5"
- },
- "dependencies": {
- "cyclist": {
- "version": "0.2.2",
- "bundled": true
- }
- }
- },
- "pump": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "once": "1.4.0"
- }
- },
- "pumpify": {
- "version": "1.4.0",
- "bundled": true,
- "requires": {
- "duplexify": "3.5.3",
- "inherits": "2.0.3",
- "pump": "2.0.1"
- },
- "dependencies": {
- "pump": {
- "version": "2.0.1",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "once": "1.4.0"
- }
- }
- }
- },
- "stream-each": {
- "version": "1.2.2",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "stream-shift": "1.0.0"
- },
- "dependencies": {
- "stream-shift": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- },
- "through2": {
- "version": "2.0.3",
- "bundled": true,
- "requires": {
- "readable-stream": "2.3.5",
- "xtend": "4.0.1"
- },
- "dependencies": {
- "xtend": {
- "version": "4.0.1",
- "bundled": true
- }
- }
- }
- }
- },
- "node-fetch-npm": {
- "version": "2.0.2",
- "bundled": true,
- "requires": {
- "encoding": "0.1.12",
- "json-parse-better-errors": "1.0.1",
- "safe-buffer": "5.1.1"
- },
- "dependencies": {
- "encoding": {
- "version": "0.1.12",
- "bundled": true,
- "requires": {
- "iconv-lite": "0.4.19"
- },
- "dependencies": {
- "iconv-lite": {
- "version": "0.4.19",
- "bundled": true
- }
- }
- },
- "json-parse-better-errors": {
- "version": "1.0.1",
- "bundled": true
- }
- }
- },
- "promise-retry": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "err-code": "1.1.2",
- "retry": "0.10.1"
- },
- "dependencies": {
- "err-code": {
- "version": "1.1.2",
- "bundled": true
- }
- }
- },
- "socks-proxy-agent": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "agent-base": "4.2.0",
- "socks": "1.1.10"
- },
- "dependencies": {
- "agent-base": {
- "version": "4.2.0",
- "bundled": true,
- "requires": {
- "es6-promisify": "5.0.0"
- },
- "dependencies": {
- "es6-promisify": {
- "version": "5.0.0",
- "bundled": true,
- "requires": {
- "es6-promise": "4.2.4"
- },
- "dependencies": {
- "es6-promise": {
- "version": "4.2.4",
- "bundled": true
- }
- }
- }
- }
- },
- "socks": {
- "version": "1.1.10",
- "bundled": true,
- "requires": {
- "ip": "1.1.5",
- "smart-buffer": "1.1.15"
- },
- "dependencies": {
- "ip": {
- "version": "1.1.5",
- "bundled": true
- },
- "smart-buffer": {
- "version": "1.1.15",
- "bundled": true
- }
- }
- }
- }
- }
- }
- }
- }
- },
- "npm-registry-client": {
- "version": "8.5.1",
- "bundled": true,
- "requires": {
- "concat-stream": "1.6.1",
- "graceful-fs": "4.1.11",
- "normalize-package-data": "2.4.0",
- "npm-package-arg": "6.0.0",
- "npmlog": "4.1.2",
- "once": "1.4.0",
- "request": "2.83.0",
- "retry": "0.10.1",
- "safe-buffer": "5.1.1",
- "semver": "5.5.0",
- "slide": "1.1.6",
- "ssri": "5.2.4"
- },
- "dependencies": {
- "concat-stream": {
- "version": "1.6.1",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.5",
- "typedarray": "0.0.6"
- },
- "dependencies": {
- "typedarray": {
- "version": "0.0.6",
- "bundled": true
- }
- }
- }
- }
- },
- "npm-user-validate": {
- "version": "1.0.0",
- "bundled": true
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "requires": {
- "are-we-there-yet": "1.1.4",
- "console-control-strings": "1.1.0",
- "gauge": "2.7.4",
- "set-blocking": "2.0.0"
- },
- "dependencies": {
- "are-we-there-yet": {
- "version": "1.1.4",
- "bundled": true,
- "requires": {
- "delegates": "1.0.0",
- "readable-stream": "2.3.5"
- },
- "dependencies": {
- "delegates": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "requires": {
- "aproba": "1.2.0",
- "console-control-strings": "1.1.0",
- "has-unicode": "2.0.1",
- "object-assign": "4.1.1",
- "signal-exit": "3.0.2",
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "wide-align": "1.1.2"
- },
- "dependencies": {
- "object-assign": {
- "version": "4.1.1",
- "bundled": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
- },
- "dependencies": {
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "number-is-nan": "1.0.1"
- },
- "dependencies": {
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true
- }
- }
- }
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "ansi-regex": "2.1.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true
- }
- }
- },
- "wide-align": {
- "version": "1.1.2",
- "bundled": true,
- "requires": {
- "string-width": "1.0.2"
- }
- }
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true
- }
- }
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "requires": {
- "wrappy": "1.0.2"
- }
- },
- "opener": {
- "version": "1.4.3",
- "bundled": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "requires": {
- "os-homedir": "1.0.2",
- "os-tmpdir": "1.0.2"
- },
- "dependencies": {
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true
- }
- }
- },
- "pacote": {
- "version": "7.6.1",
- "bundled": true,
- "requires": {
- "bluebird": "3.5.1",
- "cacache": "10.0.4",
- "get-stream": "3.0.0",
- "glob": "7.1.2",
- "lru-cache": "4.1.1",
- "make-fetch-happen": "2.6.0",
- "minimatch": "3.0.4",
- "mississippi": "3.0.0",
- "mkdirp": "0.5.1",
- "normalize-package-data": "2.4.0",
- "npm-package-arg": "6.0.0",
- "npm-packlist": "1.1.10",
- "npm-pick-manifest": "2.1.0",
- "osenv": "0.1.5",
- "promise-inflight": "1.0.1",
- "promise-retry": "1.1.1",
- "protoduck": "5.0.0",
- "rimraf": "2.6.2",
- "safe-buffer": "5.1.1",
- "semver": "5.5.0",
- "ssri": "5.2.4",
- "tar": "4.4.0",
- "unique-filename": "1.1.0",
- "which": "1.3.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "3.0.0",
- "bundled": true
- },
- "make-fetch-happen": {
- "version": "2.6.0",
- "bundled": true,
- "requires": {
- "agentkeepalive": "3.4.0",
- "cacache": "10.0.4",
- "http-cache-semantics": "3.8.1",
- "http-proxy-agent": "2.1.0",
- "https-proxy-agent": "2.2.0",
- "lru-cache": "4.1.1",
- "mississippi": "1.3.1",
- "node-fetch-npm": "2.0.2",
- "promise-retry": "1.1.1",
- "socks-proxy-agent": "3.0.1",
- "ssri": "5.2.4"
- },
- "dependencies": {
- "agentkeepalive": {
- "version": "3.4.0",
- "bundled": true,
- "requires": {
- "humanize-ms": "1.2.1"
- },
- "dependencies": {
- "humanize-ms": {
- "version": "1.2.1",
- "bundled": true,
- "requires": {
- "ms": "2.1.1"
- },
- "dependencies": {
- "ms": {
- "version": "2.1.1",
- "bundled": true
- }
- }
- }
- }
- },
- "http-cache-semantics": {
- "version": "3.8.1",
- "bundled": true
- },
- "http-proxy-agent": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "agent-base": "4.2.0",
- "debug": "3.1.0"
- },
- "dependencies": {
- "agent-base": {
- "version": "4.2.0",
- "bundled": true,
- "requires": {
- "es6-promisify": "5.0.0"
- },
- "dependencies": {
- "es6-promisify": {
- "version": "5.0.0",
- "bundled": true,
- "requires": {
- "es6-promise": "4.2.4"
- },
- "dependencies": {
- "es6-promise": {
- "version": "4.2.4",
- "bundled": true
- }
- }
- }
- }
- },
- "debug": {
- "version": "3.1.0",
- "bundled": true,
- "requires": {
- "ms": "2.0.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.0.0",
- "bundled": true
- }
- }
- }
- }
- },
- "https-proxy-agent": {
- "version": "2.2.0",
- "bundled": true,
- "requires": {
- "agent-base": "4.2.0",
- "debug": "3.1.0"
- },
- "dependencies": {
- "agent-base": {
- "version": "4.2.0",
- "bundled": true,
- "requires": {
- "es6-promisify": "5.0.0"
- },
- "dependencies": {
- "es6-promisify": {
- "version": "5.0.0",
- "bundled": true,
- "requires": {
- "es6-promise": "4.2.4"
- },
- "dependencies": {
- "es6-promise": {
- "version": "4.2.4",
- "bundled": true
- }
- }
- }
- }
- },
- "debug": {
- "version": "3.1.0",
- "bundled": true,
- "requires": {
- "ms": "2.0.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.0.0",
- "bundled": true
- }
- }
- }
- }
- },
- "mississippi": {
- "version": "1.3.1",
- "bundled": true,
- "requires": {
- "concat-stream": "1.6.1",
- "duplexify": "3.5.4",
- "end-of-stream": "1.4.1",
- "flush-write-stream": "1.0.2",
- "from2": "2.3.0",
- "parallel-transform": "1.1.0",
- "pump": "1.0.3",
- "pumpify": "1.4.0",
- "stream-each": "1.2.2",
- "through2": "2.0.3"
- },
- "dependencies": {
- "concat-stream": {
- "version": "1.6.1",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.5",
- "typedarray": "0.0.6"
- },
- "dependencies": {
- "typedarray": {
- "version": "0.0.6",
- "bundled": true
- }
- }
- },
- "duplexify": {
- "version": "3.5.4",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "inherits": "2.0.3",
- "readable-stream": "2.3.5",
- "stream-shift": "1.0.0"
- },
- "dependencies": {
- "stream-shift": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- },
- "end-of-stream": {
- "version": "1.4.1",
- "bundled": true,
- "requires": {
- "once": "1.4.0"
- }
- },
- "flush-write-stream": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.5"
- }
- },
- "from2": {
- "version": "2.3.0",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.5"
- }
- },
- "parallel-transform": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "cyclist": "0.2.2",
- "inherits": "2.0.3",
- "readable-stream": "2.3.5"
- },
- "dependencies": {
- "cyclist": {
- "version": "0.2.2",
- "bundled": true
- }
- }
- },
- "pump": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "once": "1.4.0"
- }
- },
- "pumpify": {
- "version": "1.4.0",
- "bundled": true,
- "requires": {
- "duplexify": "3.5.4",
- "inherits": "2.0.3",
- "pump": "2.0.1"
- },
- "dependencies": {
- "pump": {
- "version": "2.0.1",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "once": "1.4.0"
- }
- }
- }
- },
- "stream-each": {
- "version": "1.2.2",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "stream-shift": "1.0.0"
- },
- "dependencies": {
- "stream-shift": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- },
- "through2": {
- "version": "2.0.3",
- "bundled": true,
- "requires": {
- "readable-stream": "2.3.5",
- "xtend": "4.0.1"
- },
- "dependencies": {
- "xtend": {
- "version": "4.0.1",
- "bundled": true
- }
- }
- }
- }
- },
- "node-fetch-npm": {
- "version": "2.0.2",
- "bundled": true,
- "requires": {
- "encoding": "0.1.12",
- "json-parse-better-errors": "1.0.1",
- "safe-buffer": "5.1.1"
- },
- "dependencies": {
- "encoding": {
- "version": "0.1.12",
- "bundled": true,
- "requires": {
- "iconv-lite": "0.4.19"
- },
- "dependencies": {
- "iconv-lite": {
- "version": "0.4.19",
- "bundled": true
- }
- }
- },
- "json-parse-better-errors": {
- "version": "1.0.1",
- "bundled": true
- }
- }
- },
- "socks-proxy-agent": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "agent-base": "4.2.0",
- "socks": "1.1.10"
- },
- "dependencies": {
- "agent-base": {
- "version": "4.2.0",
- "bundled": true,
- "requires": {
- "es6-promisify": "5.0.0"
- },
- "dependencies": {
- "es6-promisify": {
- "version": "5.0.0",
- "bundled": true,
- "requires": {
- "es6-promise": "4.2.4"
- },
- "dependencies": {
- "es6-promise": {
- "version": "4.2.4",
- "bundled": true
- }
- }
- }
- }
- },
- "socks": {
- "version": "1.1.10",
- "bundled": true,
- "requires": {
- "ip": "1.1.5",
- "smart-buffer": "1.1.15"
- },
- "dependencies": {
- "ip": {
- "version": "1.1.5",
- "bundled": true
- },
- "smart-buffer": {
- "version": "1.1.15",
- "bundled": true
- }
- }
- }
- }
- }
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "requires": {
- "brace-expansion": "1.1.11"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "requires": {
- "balanced-match": "1.0.0",
- "concat-map": "0.0.1"
- },
- "dependencies": {
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true
- }
- }
- }
- }
- },
- "npm-pick-manifest": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "npm-package-arg": "6.0.0",
- "semver": "5.5.0"
- }
- },
- "promise-retry": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "err-code": "1.1.2",
- "retry": "0.10.1"
- },
- "dependencies": {
- "err-code": {
- "version": "1.1.2",
- "bundled": true
- }
- }
- },
- "protoduck": {
- "version": "5.0.0",
- "bundled": true,
- "requires": {
- "genfun": "4.0.1"
- },
- "dependencies": {
- "genfun": {
- "version": "4.0.1",
- "bundled": true
- }
- }
- }
- }
- },
- "path-is-inside": {
- "version": "1.0.2",
- "bundled": true
- },
- "promise-inflight": {
- "version": "1.0.1",
- "bundled": true
- },
- "qrcode-terminal": {
- "version": "0.11.0",
- "bundled": true
- },
- "query-string": {
- "version": "5.1.0",
- "bundled": true,
- "requires": {
- "decode-uri-component": "0.2.0",
- "object-assign": "4.1.1",
- "strict-uri-encode": "1.1.0"
- },
- "dependencies": {
- "decode-uri-component": {
- "version": "0.2.0",
- "bundled": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true
- },
- "strict-uri-encode": {
- "version": "1.1.0",
- "bundled": true
- }
- }
- },
- "qw": {
- "version": "1.0.1",
- "bundled": true
- },
- "read": {
- "version": "1.0.7",
- "bundled": true,
- "requires": {
- "mute-stream": "0.0.7"
- },
- "dependencies": {
- "mute-stream": {
- "version": "0.0.7",
- "bundled": true
- }
- }
- },
- "read-cmd-shim": {
- "version": "1.0.1",
- "bundled": true,
- "requires": {
- "graceful-fs": "4.1.11"
- }
- },
- "read-installed": {
- "version": "4.0.3",
- "bundled": true,
- "requires": {
- "debuglog": "1.0.1",
- "graceful-fs": "4.1.11",
- "read-package-json": "2.0.13",
- "readdir-scoped-modules": "1.0.2",
- "semver": "5.5.0",
- "slide": "1.1.6",
- "util-extend": "1.0.3"
- },
- "dependencies": {
- "util-extend": {
- "version": "1.0.3",
- "bundled": true
- }
- }
- },
- "read-package-json": {
- "version": "2.0.13",
- "bundled": true,
- "requires": {
- "glob": "7.1.2",
- "graceful-fs": "4.1.11",
- "json-parse-better-errors": "1.0.1",
- "normalize-package-data": "2.4.0",
- "slash": "1.0.0"
- },
- "dependencies": {
- "json-parse-better-errors": {
- "version": "1.0.1",
- "bundled": true
- },
- "slash": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- },
- "read-package-tree": {
- "version": "5.1.6",
- "bundled": true,
- "requires": {
- "debuglog": "1.0.1",
- "dezalgo": "1.0.3",
- "once": "1.4.0",
- "read-package-json": "2.0.13",
- "readdir-scoped-modules": "1.0.2"
- }
- },
- "readable-stream": {
- "version": "2.3.5",
- "bundled": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
- },
- "dependencies": {
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "bundled": true
- },
- "string_decoder": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "safe-buffer": "5.1.1"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true
- }
- }
- },
- "readdir-scoped-modules": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "debuglog": "1.0.1",
- "dezalgo": "1.0.3",
- "graceful-fs": "4.1.11",
- "once": "1.4.0"
- }
- },
- "request": {
- "version": "2.83.0",
- "bundled": true,
- "requires": {
- "aws-sign2": "0.7.0",
- "aws4": "1.6.0",
- "caseless": "0.12.0",
- "combined-stream": "1.0.5",
- "extend": "3.0.1",
- "forever-agent": "0.6.1",
- "form-data": "2.3.1",
- "har-validator": "5.0.3",
- "hawk": "6.0.2",
- "http-signature": "1.2.0",
- "is-typedarray": "1.0.0",
- "isstream": "0.1.2",
- "json-stringify-safe": "5.0.1",
- "mime-types": "2.1.17",
- "oauth-sign": "0.8.2",
- "performance-now": "2.1.0",
- "qs": "6.5.1",
- "safe-buffer": "5.1.1",
- "stringstream": "0.0.5",
- "tough-cookie": "2.3.3",
- "tunnel-agent": "0.6.0",
- "uuid": "3.2.1"
- },
- "dependencies": {
- "aws-sign2": {
- "version": "0.7.0",
- "bundled": true
- },
- "aws4": {
- "version": "1.6.0",
- "bundled": true
- },
- "caseless": {
- "version": "0.12.0",
- "bundled": true
- },
- "combined-stream": {
- "version": "1.0.5",
- "bundled": true,
- "requires": {
- "delayed-stream": "1.0.0"
- },
- "dependencies": {
- "delayed-stream": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- },
- "extend": {
- "version": "3.0.1",
- "bundled": true
- },
- "forever-agent": {
- "version": "0.6.1",
- "bundled": true
- },
- "form-data": {
- "version": "2.3.1",
- "bundled": true,
- "requires": {
- "asynckit": "0.4.0",
- "combined-stream": "1.0.5",
- "mime-types": "2.1.17"
- },
- "dependencies": {
- "asynckit": {
- "version": "0.4.0",
- "bundled": true
- }
- }
- },
- "har-validator": {
- "version": "5.0.3",
- "bundled": true,
- "requires": {
- "ajv": "5.2.3",
- "har-schema": "2.0.0"
- },
- "dependencies": {
- "ajv": {
- "version": "5.2.3",
- "bundled": true,
- "requires": {
- "co": "4.6.0",
- "fast-deep-equal": "1.0.0",
- "json-schema-traverse": "0.3.1",
- "json-stable-stringify": "1.0.1"
- },
- "dependencies": {
- "co": {
- "version": "4.6.0",
- "bundled": true
- },
- "fast-deep-equal": {
- "version": "1.0.0",
- "bundled": true
- },
- "json-schema-traverse": {
- "version": "0.3.1",
- "bundled": true
- },
- "json-stable-stringify": {
- "version": "1.0.1",
- "bundled": true,
- "requires": {
- "jsonify": "0.0.0"
- },
- "dependencies": {
- "jsonify": {
- "version": "0.0.0",
- "bundled": true
- }
- }
- }
- }
- },
- "har-schema": {
- "version": "2.0.0",
- "bundled": true
- }
- }
- },
- "hawk": {
- "version": "6.0.2",
- "bundled": true,
- "requires": {
- "boom": "4.3.1",
- "cryptiles": "3.1.2",
- "hoek": "4.2.0",
- "sntp": "2.0.2"
- },
- "dependencies": {
- "boom": {
- "version": "4.3.1",
- "bundled": true,
- "requires": {
- "hoek": "4.2.0"
- }
- },
- "cryptiles": {
- "version": "3.1.2",
- "bundled": true,
- "requires": {
- "boom": "5.2.0"
- },
- "dependencies": {
- "boom": {
- "version": "5.2.0",
- "bundled": true,
- "requires": {
- "hoek": "4.2.0"
- }
- }
- }
- },
- "hoek": {
- "version": "4.2.0",
- "bundled": true
- },
- "sntp": {
- "version": "2.0.2",
- "bundled": true,
- "requires": {
- "hoek": "4.2.0"
- }
- }
- }
- },
- "http-signature": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "assert-plus": "1.0.0",
- "jsprim": "1.4.1",
- "sshpk": "1.13.1"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "bundled": true
- },
- "jsprim": {
- "version": "1.4.1",
- "bundled": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- },
- "dependencies": {
- "extsprintf": {
- "version": "1.3.0",
- "bundled": true
- },
- "json-schema": {
- "version": "0.2.3",
- "bundled": true
- },
- "verror": {
- "version": "1.10.0",
- "bundled": true,
- "requires": {
- "assert-plus": "1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "1.3.0"
- },
- "dependencies": {
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true
- }
- }
- }
- }
- },
- "sshpk": {
- "version": "1.13.1",
- "bundled": true,
- "requires": {
- "asn1": "0.2.3",
- "assert-plus": "1.0.0",
- "bcrypt-pbkdf": "1.0.1",
- "dashdash": "1.14.1",
- "ecc-jsbn": "0.1.1",
- "getpass": "0.1.7",
- "jsbn": "0.1.1",
- "tweetnacl": "0.14.5"
- },
- "dependencies": {
- "asn1": {
- "version": "0.2.3",
- "bundled": true
- },
- "bcrypt-pbkdf": {
- "version": "1.0.1",
- "bundled": true,
- "optional": true,
- "requires": {
- "tweetnacl": "0.14.5"
- }
- },
- "dashdash": {
- "version": "1.14.1",
- "bundled": true,
- "requires": {
- "assert-plus": "1.0.0"
- }
- },
- "ecc-jsbn": {
- "version": "0.1.1",
- "bundled": true,
- "optional": true,
- "requires": {
- "jsbn": "0.1.1"
- }
- },
- "getpass": {
- "version": "0.1.7",
- "bundled": true,
- "requires": {
- "assert-plus": "1.0.0"
- }
- },
- "jsbn": {
- "version": "0.1.1",
- "bundled": true,
- "optional": true
- },
- "tweetnacl": {
- "version": "0.14.5",
- "bundled": true,
- "optional": true
- }
- }
- }
- }
- },
- "is-typedarray": {
- "version": "1.0.0",
- "bundled": true
- },
- "isstream": {
- "version": "0.1.2",
- "bundled": true
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "bundled": true
- },
- "mime-types": {
- "version": "2.1.17",
- "bundled": true,
- "requires": {
- "mime-db": "1.30.0"
- },
- "dependencies": {
- "mime-db": {
- "version": "1.30.0",
- "bundled": true
- }
- }
- },
- "oauth-sign": {
- "version": "0.8.2",
- "bundled": true
- },
- "performance-now": {
- "version": "2.1.0",
- "bundled": true
- },
- "qs": {
- "version": "6.5.1",
- "bundled": true
- },
- "stringstream": {
- "version": "0.0.5",
- "bundled": true
- },
- "tough-cookie": {
- "version": "2.3.3",
- "bundled": true,
- "requires": {
- "punycode": "1.4.1"
- },
- "dependencies": {
- "punycode": {
- "version": "1.4.1",
- "bundled": true
- }
- }
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "bundled": true,
- "requires": {
- "safe-buffer": "5.1.1"
- }
- }
- }
- },
- "retry": {
- "version": "0.10.1",
- "bundled": true
- },
- "rimraf": {
- "version": "2.6.2",
- "bundled": true,
- "requires": {
- "glob": "7.1.2"
- }
- },
- "safe-buffer": {
- "version": "5.1.1",
- "bundled": true
- },
- "semver": {
- "version": "5.5.0",
- "bundled": true
- },
- "sha": {
- "version": "2.0.1",
- "bundled": true,
- "requires": {
- "graceful-fs": "4.1.11",
- "readable-stream": "2.3.5"
- }
- },
- "slide": {
- "version": "1.1.6",
- "bundled": true
- },
- "sorted-object": {
- "version": "2.0.1",
- "bundled": true
- },
- "sorted-union-stream": {
- "version": "2.1.3",
- "bundled": true,
- "requires": {
- "from2": "1.3.0",
- "stream-iterate": "1.2.0"
- },
- "dependencies": {
- "from2": {
- "version": "1.3.0",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "1.1.14"
- },
- "dependencies": {
- "readable-stream": {
- "version": "1.1.14",
- "bundled": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "string_decoder": "0.10.31"
- },
- "dependencies": {
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true
- },
- "isarray": {
- "version": "0.0.1",
- "bundled": true
- },
- "string_decoder": {
- "version": "0.10.31",
- "bundled": true
- }
- }
- }
- }
- },
- "stream-iterate": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "readable-stream": "2.3.5",
- "stream-shift": "1.0.0"
- },
- "dependencies": {
- "stream-shift": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- }
- }
- },
- "ssri": {
- "version": "5.2.4",
- "bundled": true,
- "requires": {
- "safe-buffer": "5.1.1"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "bundled": true,
- "requires": {
- "ansi-regex": "3.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "bundled": true
- }
- }
- },
- "tar": {
- "version": "4.4.0",
- "bundled": true,
- "requires": {
- "chownr": "1.0.1",
- "fs-minipass": "1.2.5",
- "minipass": "2.2.1",
- "minizlib": "1.1.0",
- "mkdirp": "0.5.1",
- "yallist": "3.0.2"
- },
- "dependencies": {
- "fs-minipass": {
- "version": "1.2.5",
- "bundled": true,
- "requires": {
- "minipass": "2.2.1"
- }
- },
- "minipass": {
- "version": "2.2.1",
- "bundled": true,
- "requires": {
- "yallist": "3.0.2"
- }
- },
- "minizlib": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "minipass": "2.2.1"
- }
- },
- "yallist": {
- "version": "3.0.2",
- "bundled": true
- }
- }
- },
- "text-table": {
- "version": "0.2.0",
- "bundled": true
- },
- "uid-number": {
- "version": "0.0.6",
- "bundled": true
- },
- "umask": {
- "version": "1.1.0",
- "bundled": true
- },
- "unique-filename": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "unique-slug": "2.0.0"
- },
- "dependencies": {
- "unique-slug": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "imurmurhash": "0.1.4"
- }
- }
- }
- },
- "unpipe": {
- "version": "1.0.0",
- "bundled": true
- },
- "update-notifier": {
- "version": "2.3.0",
- "bundled": true,
- "requires": {
- "boxen": "1.2.1",
- "chalk": "2.1.0",
- "configstore": "3.1.1",
- "import-lazy": "2.1.0",
- "is-installed-globally": "0.1.0",
- "is-npm": "1.0.0",
- "latest-version": "3.1.0",
- "semver-diff": "2.1.0",
- "xdg-basedir": "3.0.0"
- },
- "dependencies": {
- "boxen": {
- "version": "1.2.1",
- "bundled": true,
- "requires": {
- "ansi-align": "2.0.0",
- "camelcase": "4.1.0",
- "chalk": "2.1.0",
- "cli-boxes": "1.0.0",
- "string-width": "2.1.1",
- "term-size": "1.2.0",
- "widest-line": "1.0.0"
- },
- "dependencies": {
- "ansi-align": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "string-width": "2.1.1"
- }
- },
- "camelcase": {
- "version": "4.1.0",
- "bundled": true
- },
- "cli-boxes": {
- "version": "1.0.0",
- "bundled": true
- },
- "string-width": {
- "version": "2.1.1",
- "bundled": true,
- "requires": {
- "is-fullwidth-code-point": "2.0.0",
- "strip-ansi": "4.0.0"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "bundled": true
- }
- }
- },
- "term-size": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "execa": "0.7.0"
- },
- "dependencies": {
- "execa": {
- "version": "0.7.0",
- "bundled": true,
- "requires": {
- "cross-spawn": "5.1.0",
- "get-stream": "3.0.0",
- "is-stream": "1.1.0",
- "npm-run-path": "2.0.2",
- "p-finally": "1.0.0",
- "signal-exit": "3.0.2",
- "strip-eof": "1.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "5.1.0",
- "bundled": true,
- "requires": {
- "lru-cache": "4.1.1",
- "shebang-command": "1.2.0",
- "which": "1.3.0"
- },
- "dependencies": {
- "shebang-command": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "shebang-regex": "1.0.0"
- },
- "dependencies": {
- "shebang-regex": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- }
- }
- },
- "get-stream": {
- "version": "3.0.0",
- "bundled": true
- },
- "is-stream": {
- "version": "1.1.0",
- "bundled": true
- },
- "npm-run-path": {
- "version": "2.0.2",
- "bundled": true,
- "requires": {
- "path-key": "2.0.1"
- },
- "dependencies": {
- "path-key": {
- "version": "2.0.1",
- "bundled": true
- }
- }
- },
- "p-finally": {
- "version": "1.0.0",
- "bundled": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true
- },
- "strip-eof": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- }
- }
- },
- "widest-line": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "string-width": "1.0.2"
- },
- "dependencies": {
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
- },
- "dependencies": {
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "number-is-nan": "1.0.1"
- },
- "dependencies": {
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true
- }
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "ansi-regex": "2.1.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true
- }
- }
- }
- }
- }
- }
- }
- }
- },
- "chalk": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "ansi-styles": "3.2.0",
- "escape-string-regexp": "1.0.5",
- "supports-color": "4.4.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.0",
- "bundled": true,
- "requires": {
- "color-convert": "1.9.0"
- },
- "dependencies": {
- "color-convert": {
- "version": "1.9.0",
- "bundled": true,
- "requires": {
- "color-name": "1.1.3"
- },
- "dependencies": {
- "color-name": {
- "version": "1.1.3",
- "bundled": true
- }
- }
- }
- }
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "bundled": true
- },
- "supports-color": {
- "version": "4.4.0",
- "bundled": true,
- "requires": {
- "has-flag": "2.0.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "2.0.0",
- "bundled": true
- }
- }
- }
- }
- },
- "configstore": {
- "version": "3.1.1",
- "bundled": true,
- "requires": {
- "dot-prop": "4.2.0",
- "graceful-fs": "4.1.11",
- "make-dir": "1.0.0",
- "unique-string": "1.0.0",
- "write-file-atomic": "2.3.0",
- "xdg-basedir": "3.0.0"
- },
- "dependencies": {
- "dot-prop": {
- "version": "4.2.0",
- "bundled": true,
- "requires": {
- "is-obj": "1.0.1"
- },
- "dependencies": {
- "is-obj": {
- "version": "1.0.1",
- "bundled": true
- }
- }
- },
- "make-dir": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "pify": "2.3.0"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "bundled": true
- }
- }
- },
- "unique-string": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "crypto-random-string": "1.0.0"
- },
- "dependencies": {
- "crypto-random-string": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- }
- }
- },
- "import-lazy": {
- "version": "2.1.0",
- "bundled": true
- },
- "is-installed-globally": {
- "version": "0.1.0",
- "bundled": true,
- "requires": {
- "global-dirs": "0.1.0",
- "is-path-inside": "1.0.0"
- },
- "dependencies": {
- "global-dirs": {
- "version": "0.1.0",
- "bundled": true,
- "requires": {
- "ini": "1.3.5"
- }
- },
- "is-path-inside": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "path-is-inside": "1.0.2"
- }
- }
- }
- },
- "is-npm": {
- "version": "1.0.0",
- "bundled": true
- },
- "latest-version": {
- "version": "3.1.0",
- "bundled": true,
- "requires": {
- "package-json": "4.0.1"
- },
- "dependencies": {
- "package-json": {
- "version": "4.0.1",
- "bundled": true,
- "requires": {
- "got": "6.7.1",
- "registry-auth-token": "3.3.1",
- "registry-url": "3.1.0",
- "semver": "5.5.0"
- },
- "dependencies": {
- "got": {
- "version": "6.7.1",
- "bundled": true,
- "requires": {
- "create-error-class": "3.0.2",
- "duplexer3": "0.1.4",
- "get-stream": "3.0.0",
- "is-redirect": "1.0.0",
- "is-retry-allowed": "1.1.0",
- "is-stream": "1.1.0",
- "lowercase-keys": "1.0.0",
- "safe-buffer": "5.1.1",
- "timed-out": "4.0.1",
- "unzip-response": "2.0.1",
- "url-parse-lax": "1.0.0"
- },
- "dependencies": {
- "create-error-class": {
- "version": "3.0.2",
- "bundled": true,
- "requires": {
- "capture-stack-trace": "1.0.0"
- },
- "dependencies": {
- "capture-stack-trace": {
- "version": "1.0.0",
- "bundled": true
- }
- }
- },
- "duplexer3": {
- "version": "0.1.4",
- "bundled": true
- },
- "get-stream": {
- "version": "3.0.0",
- "bundled": true
- },
- "is-redirect": {
- "version": "1.0.0",
- "bundled": true
- },
- "is-retry-allowed": {
- "version": "1.1.0",
- "bundled": true
- },
- "is-stream": {
- "version": "1.1.0",
- "bundled": true
- },
- "lowercase-keys": {
- "version": "1.0.0",
- "bundled": true
- },
- "timed-out": {
- "version": "4.0.1",
- "bundled": true
- },
- "unzip-response": {
- "version": "2.0.1",
- "bundled": true
- },
- "url-parse-lax": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "prepend-http": "1.0.4"
- },
- "dependencies": {
- "prepend-http": {
- "version": "1.0.4",
- "bundled": true
- }
- }
- }
- }
- },
- "registry-auth-token": {
- "version": "3.3.1",
- "bundled": true,
- "requires": {
- "rc": "1.2.1",
- "safe-buffer": "5.1.1"
- },
- "dependencies": {
- "rc": {
- "version": "1.2.1",
- "bundled": true,
- "requires": {
- "deep-extend": "0.4.2",
- "ini": "1.3.5",
- "minimist": "1.2.0",
- "strip-json-comments": "2.0.1"
- },
- "dependencies": {
- "deep-extend": {
- "version": "0.4.2",
- "bundled": true
- },
- "minimist": {
- "version": "1.2.0",
- "bundled": true
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true
- }
- }
- }
- }
- },
- "registry-url": {
- "version": "3.1.0",
- "bundled": true,
- "requires": {
- "rc": "1.2.1"
- },
- "dependencies": {
- "rc": {
- "version": "1.2.1",
- "bundled": true,
- "requires": {
- "deep-extend": "0.4.2",
- "ini": "1.3.5",
- "minimist": "1.2.0",
- "strip-json-comments": "2.0.1"
- },
- "dependencies": {
- "deep-extend": {
- "version": "0.4.2",
- "bundled": true
- },
- "minimist": {
- "version": "1.2.0",
- "bundled": true
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true
- }
- }
- }
- }
- }
- }
- }
- }
- },
- "semver-diff": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "semver": "5.5.0"
- }
- },
- "xdg-basedir": {
- "version": "3.0.0",
- "bundled": true
- }
- }
- },
- "uuid": {
- "version": "3.2.1",
- "bundled": true
- },
- "validate-npm-package-license": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "spdx-correct": "1.0.2",
- "spdx-expression-parse": "1.0.4"
- },
- "dependencies": {
- "spdx-correct": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "spdx-license-ids": "1.2.2"
- },
- "dependencies": {
- "spdx-license-ids": {
- "version": "1.2.2",
- "bundled": true
- }
- }
- },
- "spdx-expression-parse": {
- "version": "1.0.4",
- "bundled": true
- }
- }
- },
- "validate-npm-package-name": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "builtins": "1.0.3"
- },
- "dependencies": {
- "builtins": {
- "version": "1.0.3",
- "bundled": true
- }
- }
- },
- "which": {
- "version": "1.3.0",
- "bundled": true,
- "requires": {
- "isexe": "2.0.0"
- },
- "dependencies": {
- "isexe": {
- "version": "2.0.0",
- "bundled": true
- }
- }
- },
- "worker-farm": {
- "version": "1.5.4",
- "bundled": true,
- "requires": {
- "errno": "0.1.7",
- "xtend": "4.0.1"
- },
- "dependencies": {
- "errno": {
- "version": "0.1.7",
- "bundled": true,
- "requires": {
- "prr": "1.0.1"
- },
- "dependencies": {
- "prr": {
- "version": "1.0.1",
- "bundled": true
- }
- }
- },
- "xtend": {
- "version": "4.0.1",
- "bundled": true
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true
- },
- "write-file-atomic": {
- "version": "2.3.0",
- "bundled": true,
- "requires": {
- "graceful-fs": "4.1.11",
- "imurmurhash": "0.1.4",
- "signal-exit": "3.0.2"
- },
- "dependencies": {
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true
- }
- }
- }
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
- },
- "oauth-sign": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
- "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
- },
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "requires": {
- "copy-descriptor": "0.1.1",
- "define-property": "0.2.5",
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "requires": {
- "is-descriptor": "0.1.6"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "requires": {
- "kind-of": "3.2.2"
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "requires": {
- "kind-of": "3.2.2"
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "requires": {
- "is-accessor-descriptor": "0.1.6",
- "is-data-descriptor": "0.1.4",
- "kind-of": "5.1.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
- }
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "object-keys": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
- "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0="
- },
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "requires": {
- "isobject": "3.0.1"
- }
- },
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "requires": {
- "isobject": "3.0.1"
- }
- },
- "on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "requires": {
- "wrappy": "1.0.2"
- }
- },
- "optjs": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz",
- "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4="
- },
- "os-locale": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
- "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
- "requires": {
- "lcid": "1.0.0"
- }
- },
- "parseurl": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
- "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
- },
- "path-dirname": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
- "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
- },
- "path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
- },
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "requires": {
- "pify": "3.0.0"
- }
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
- },
- "posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
- },
- "power-assert": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/power-assert/-/power-assert-1.4.4.tgz",
- "integrity": "sha1-kpXqdDcZb1pgH95CDwQmMRhtdRc=",
- "requires": {
- "define-properties": "1.1.2",
- "empower": "1.2.3",
- "power-assert-formatter": "1.4.1",
- "universal-deep-strict-equal": "1.2.2",
- "xtend": "4.0.1"
- }
- },
- "power-assert-context-formatter": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/power-assert-context-formatter/-/power-assert-context-formatter-1.1.1.tgz",
- "integrity": "sha1-7bo1LT7YpgMRTWZyZazOYNaJzN8=",
- "requires": {
- "core-js": "2.5.3",
- "power-assert-context-traversal": "1.1.1"
- }
- },
- "power-assert-context-reducer-ast": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/power-assert-context-reducer-ast/-/power-assert-context-reducer-ast-1.1.2.tgz",
- "integrity": "sha1-SEqZ4m9Jc/+IMuXFzHVnAuYJQXQ=",
- "requires": {
- "acorn": "4.0.13",
- "acorn-es7-plugin": "1.1.7",
- "core-js": "2.5.3",
- "espurify": "1.7.0",
- "estraverse": "4.2.0"
- }
- },
- "power-assert-context-traversal": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/power-assert-context-traversal/-/power-assert-context-traversal-1.1.1.tgz",
- "integrity": "sha1-iMq8oNE7Y1nwfT0+ivppkmRXftk=",
- "requires": {
- "core-js": "2.5.3",
- "estraverse": "4.2.0"
- }
- },
- "power-assert-formatter": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/power-assert-formatter/-/power-assert-formatter-1.4.1.tgz",
- "integrity": "sha1-XcEl7VCj37HdomwZNH879Y7CiEo=",
- "requires": {
- "core-js": "2.5.3",
- "power-assert-context-formatter": "1.1.1",
- "power-assert-context-reducer-ast": "1.1.2",
- "power-assert-renderer-assertion": "1.1.1",
- "power-assert-renderer-comparison": "1.1.1",
- "power-assert-renderer-diagram": "1.1.2",
- "power-assert-renderer-file": "1.1.1"
- }
- },
- "power-assert-renderer-assertion": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/power-assert-renderer-assertion/-/power-assert-renderer-assertion-1.1.1.tgz",
- "integrity": "sha1-y/wOd+AIao+Wrz8djme57n4ozpg=",
- "requires": {
- "power-assert-renderer-base": "1.1.1",
- "power-assert-util-string-width": "1.1.1"
- }
- },
- "power-assert-renderer-base": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/power-assert-renderer-base/-/power-assert-renderer-base-1.1.1.tgz",
- "integrity": "sha1-lqZQxv0F7hvB9mtUrWFELIs/Y+s="
- },
- "power-assert-renderer-comparison": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/power-assert-renderer-comparison/-/power-assert-renderer-comparison-1.1.1.tgz",
- "integrity": "sha1-10Odl9hRVr5OMKAPL7WnJRTOPAg=",
- "requires": {
- "core-js": "2.5.3",
- "diff-match-patch": "1.0.0",
- "power-assert-renderer-base": "1.1.1",
- "stringifier": "1.3.0",
- "type-name": "2.0.2"
- }
- },
- "power-assert-renderer-diagram": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/power-assert-renderer-diagram/-/power-assert-renderer-diagram-1.1.2.tgz",
- "integrity": "sha1-ZV+PcRk1qbbVQbhjJ2VHF8Y3qYY=",
- "requires": {
- "core-js": "2.5.3",
- "power-assert-renderer-base": "1.1.1",
- "power-assert-util-string-width": "1.1.1",
- "stringifier": "1.3.0"
- }
- },
- "power-assert-renderer-file": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/power-assert-renderer-file/-/power-assert-renderer-file-1.1.1.tgz",
- "integrity": "sha1-o34rvReMys0E5427eckv40kzxec=",
- "requires": {
- "power-assert-renderer-base": "1.1.1"
- }
- },
- "power-assert-util-string-width": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/power-assert-util-string-width/-/power-assert-util-string-width-1.1.1.tgz",
- "integrity": "sha1-vmWet5N/3S5smncmjar2S9W3xZI=",
- "requires": {
- "eastasianwidth": "0.1.1"
- }
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
- },
- "protobufjs": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.2.tgz",
- "integrity": "sha1-WXSNfc8D0tsiwT2p/rAk4Wq4DJE=",
- "requires": {
- "ascli": "1.0.1",
- "bytebuffer": "5.0.1",
- "glob": "7.1.2",
- "yargs": "3.32.0"
- }
- },
- "proxy-addr": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz",
- "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==",
- "requires": {
- "forwarded": "0.1.2",
- "ipaddr.js": "1.6.0"
- }
- },
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
- },
- "pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
- "requires": {
- "end-of-stream": "1.4.1",
- "once": "1.4.0"
- }
- },
- "pumpify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz",
- "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==",
- "requires": {
- "duplexify": "3.5.4",
- "inherits": "2.0.3",
- "pump": "2.0.1"
- }
- },
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
- },
- "qs": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
- "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
- },
- "range-parser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
- "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
- },
- "raw-body": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
- "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
- "requires": {
- "bytes": "3.0.0",
- "http-errors": "1.6.2",
- "iconv-lite": "0.4.19",
- "unpipe": "1.0.0"
- }
- },
- "readable-stream": {
- "version": "2.3.5",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
- "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
- }
- },
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "requires": {
- "extend-shallow": "3.0.2",
- "safe-regex": "1.1.0"
- }
- },
- "repeat-element": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
- "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo="
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
- },
- "request": {
- "version": "2.85.0",
- "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz",
- "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==",
- "requires": {
- "aws-sign2": "0.7.0",
- "aws4": "1.6.0",
- "caseless": "0.12.0",
- "combined-stream": "1.0.6",
- "extend": "3.0.1",
- "forever-agent": "0.6.1",
- "form-data": "2.3.2",
- "har-validator": "5.0.3",
- "hawk": "6.0.2",
- "http-signature": "1.2.0",
- "is-typedarray": "1.0.0",
- "isstream": "0.1.2",
- "json-stringify-safe": "5.0.1",
- "mime-types": "2.1.18",
- "oauth-sign": "0.8.2",
- "performance-now": "2.1.0",
- "qs": "6.5.1",
- "safe-buffer": "5.1.1",
- "stringstream": "0.0.5",
- "tough-cookie": "2.3.4",
- "tunnel-agent": "0.6.0",
- "uuid": "3.2.1"
- }
- },
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
- },
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
- },
- "retry-axios": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/retry-axios/-/retry-axios-0.3.2.tgz",
- "integrity": "sha512-jp4YlI0qyDFfXiXGhkCOliBN1G7fRH03Nqy8YdShzGqbY5/9S2x/IR6C88ls2DFkbWuL3ASkP7QD3pVrNpPgwQ=="
- },
- "retry-request": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-3.3.1.tgz",
- "integrity": "sha512-PjAmtWIxjNj4Co/6FRtBl8afRP3CxrrIAnUzb1dzydfROd+6xt7xAebFeskgQgkfFf8NmzrXIoaB3HxmswXyxw==",
- "requires": {
- "request": "2.85.0",
- "through2": "2.0.3"
- }
- },
- "safe-buffer": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
- },
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "requires": {
- "ret": "0.1.15"
- }
- },
- "send": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
- "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
- "requires": {
- "debug": "2.6.9",
- "depd": "1.1.2",
- "destroy": "1.0.4",
- "encodeurl": "1.0.2",
- "escape-html": "1.0.3",
- "etag": "1.8.1",
- "fresh": "0.5.2",
- "http-errors": "1.6.2",
- "mime": "1.4.1",
- "ms": "2.0.0",
- "on-finished": "2.3.0",
- "range-parser": "1.2.0",
- "statuses": "1.4.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "mime": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
- "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
- }
- }
- },
- "serve-static": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
- "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
- "requires": {
- "encodeurl": "1.0.2",
- "escape-html": "1.0.3",
- "parseurl": "1.3.2",
- "send": "0.16.2"
- }
- },
- "set-value": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
- "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
- "requires": {
- "extend-shallow": "2.0.1",
- "is-extendable": "0.1.1",
- "is-plain-object": "2.0.4",
- "split-string": "3.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "requires": {
- "is-extendable": "0.1.1"
- }
- }
- }
- },
- "setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
- },
- "sha1": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz",
- "integrity": "sha1-rdqnqTFo85PxnrKxUJFhjicA+Eg=",
- "requires": {
- "charenc": "0.0.2",
- "crypt": "0.0.2"
- }
- },
- "signal-exit": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
- },
- "slash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
- "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
- },
- "snakeize": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/snakeize/-/snakeize-0.1.0.tgz",
- "integrity": "sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0="
- },
- "snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "requires": {
- "base": "0.11.2",
- "debug": "2.6.9",
- "define-property": "0.2.5",
- "extend-shallow": "2.0.1",
- "map-cache": "0.2.2",
- "source-map": "0.5.7",
- "source-map-resolve": "0.5.1",
- "use": "3.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "requires": {
- "is-descriptor": "0.1.6"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "requires": {
- "is-extendable": "0.1.1"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "requires": {
- "is-accessor-descriptor": "0.1.6",
- "is-data-descriptor": "0.1.4",
- "kind-of": "5.1.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
- }
- }
- },
- "snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "requires": {
- "define-property": "1.0.0",
- "isobject": "3.0.1",
- "snapdragon-util": "3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "requires": {
- "is-descriptor": "1.0.2"
- }
- }
- }
- },
- "snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "sntp": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
- "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
- "requires": {
- "hoek": "4.2.1"
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
- },
- "source-map-resolve": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
- "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
- "requires": {
- "atob": "2.0.3",
- "decode-uri-component": "0.2.0",
- "resolve-url": "0.2.1",
- "source-map-url": "0.4.0",
- "urix": "0.1.0"
- }
- },
- "source-map-url": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
- "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
- },
- "split-array-stream": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/split-array-stream/-/split-array-stream-1.0.3.tgz",
- "integrity": "sha1-0rdajl4Ngk1S/eyLgiWDncLjXfo=",
- "requires": {
- "async": "2.6.0",
- "is-stream-ended": "0.1.3"
- }
- },
- "split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "requires": {
- "extend-shallow": "3.0.2"
- }
- },
- "sshpk": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
- "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
- "requires": {
- "asn1": "0.2.3",
- "assert-plus": "1.0.0",
- "bcrypt-pbkdf": "1.0.1",
- "dashdash": "1.14.1",
- "ecc-jsbn": "0.1.1",
- "getpass": "0.1.7",
- "jsbn": "0.1.1",
- "tweetnacl": "0.14.5"
- }
- },
- "static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "requires": {
- "define-property": "0.2.5",
- "object-copy": "0.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "requires": {
- "is-descriptor": "0.1.6"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "requires": {
- "is-accessor-descriptor": "0.1.6",
- "is-data-descriptor": "0.1.4",
- "kind-of": "5.1.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
- }
- }
- },
- "statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
- },
- "stream-events": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.2.tgz",
- "integrity": "sha1-q/OfZsCJCk63lbyNXoWbJhW1kLI=",
- "requires": {
- "stubs": "3.0.0"
- }
- },
- "stream-shift": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
- "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI="
- },
- "string-format-obj": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string-format-obj/-/string-format-obj-1.1.1.tgz",
- "integrity": "sha512-Mm+sROy+pHJmx0P/0Bs1uxIX6UhGJGj6xDGQZ5zh9v/SZRmLGevp+p0VJxV7lirrkAmQ2mvva/gHKpnF/pTb+Q=="
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
- }
- },
- "string_decoder": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
- "requires": {
- "safe-buffer": "5.1.1"
- }
- },
- "stringifier": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/stringifier/-/stringifier-1.3.0.tgz",
- "integrity": "sha1-3vGDQvaTPbDy2/yaoCF1tEjBeVk=",
- "requires": {
- "core-js": "2.5.3",
- "traverse": "0.6.6",
- "type-name": "2.0.2"
- }
- },
- "stringstream": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
- "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg="
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "requires": {
- "ansi-regex": "2.1.1"
- }
- },
- "stubs": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz",
- "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls="
- },
- "through2": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
- "requires": {
- "readable-stream": "2.3.5",
- "xtend": "4.0.1"
- }
- },
- "to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "requires": {
- "define-property": "2.0.2",
- "extend-shallow": "3.0.2",
- "regex-not": "1.0.2",
- "safe-regex": "1.1.0"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "requires": {
- "is-number": "3.0.0",
- "repeat-string": "1.6.1"
- }
- },
- "topo": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz",
- "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=",
- "requires": {
- "hoek": "2.16.3"
- },
- "dependencies": {
- "hoek": {
- "version": "2.16.3",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
- "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0="
- }
- }
- },
- "tough-cookie": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
- "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
- "requires": {
- "punycode": "1.4.1"
- }
- },
- "traverse": {
- "version": "0.6.6",
- "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
- "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc="
- },
- "tslib": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
- "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ=="
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "requires": {
- "safe-buffer": "5.1.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "optional": true
- },
- "type-is": {
- "version": "1.6.16",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
- "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
- "requires": {
- "media-typer": "0.3.0",
- "mime-types": "2.1.18"
- }
- },
- "type-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/type-name/-/type-name-2.0.2.tgz",
- "integrity": "sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q="
- },
- "typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
- },
- "union-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
- "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
- "requires": {
- "arr-union": "3.1.0",
- "get-value": "2.0.6",
- "is-extendable": "0.1.1",
- "set-value": "0.4.3"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "requires": {
- "is-extendable": "0.1.1"
- }
- },
- "set-value": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
- "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
- "requires": {
- "extend-shallow": "2.0.1",
- "is-extendable": "0.1.1",
- "is-plain-object": "2.0.4",
- "to-object-path": "0.3.0"
- }
- }
- }
- },
- "unique-string": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
- "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
- "requires": {
- "crypto-random-string": "1.0.0"
- }
- },
- "universal-deep-strict-equal": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/universal-deep-strict-equal/-/universal-deep-strict-equal-1.2.2.tgz",
- "integrity": "sha1-DaSsL3PP95JMgfpN4BjKViyisKc=",
- "requires": {
- "array-filter": "1.0.0",
- "indexof": "0.0.1",
- "object-keys": "1.0.11"
- }
- },
- "unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
- },
- "unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "requires": {
- "has-value": "0.3.1",
- "isobject": "3.0.1"
- },
- "dependencies": {
- "has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "requires": {
- "get-value": "2.0.6",
- "has-values": "0.1.4",
- "isobject": "2.1.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
- },
- "has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
- }
- }
- },
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
- },
- "use": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
- "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
- "requires": {
- "kind-of": "6.0.2"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
- },
- "uuid": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
- "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA=="
- },
- "vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
- },
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "requires": {
- "assert-plus": "1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "1.3.0"
- }
- },
- "websocket-driver": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
- "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
- "requires": {
- "http-parser-js": "0.4.11",
- "websocket-extensions": "0.1.3"
- }
- },
- "websocket-extensions": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
- "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg=="
- },
- "window-size": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
- "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY="
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
- "requires": {
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "write-file-atomic": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
- "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
- "requires": {
- "graceful-fs": "4.1.11",
- "imurmurhash": "0.1.4",
- "signal-exit": "3.0.2"
- }
- },
- "xdg-basedir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
- "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ="
- },
- "xtend": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
- },
- "y18n": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
- },
- "yargs": {
- "version": "3.32.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
- "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
- "requires": {
- "camelcase": "2.1.1",
- "cliui": "3.2.0",
- "decamelize": "1.2.0",
- "os-locale": "1.4.0",
- "string-width": "1.0.2",
- "window-size": "0.1.4",
- "y18n": "3.2.1"
- }
- }
- }
-}
diff --git a/functions/testapp/Assets/Firebase/Sample/Functions/.functions/functions/package-lock.json.meta b/functions/testapp/Assets/Firebase/Sample/Functions/.functions/functions/package-lock.json.meta
deleted file mode 100644
index 536dae05f..000000000
--- a/functions/testapp/Assets/Firebase/Sample/Functions/.functions/functions/package-lock.json.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: e6dac2df23f24bbdb78e256e9f2b484c
-timeCreated: 1539128002
-licenseType: Pro
-DefaultImporter:
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/messaging/testapp/Assets/Firebase/Sample/Messaging/UIHandlerAutomated.cs b/messaging/testapp/Assets/Firebase/Sample/Messaging/UIHandlerAutomated.cs
index 5258743b4..774ba0629 100644
--- a/messaging/testapp/Assets/Firebase/Sample/Messaging/UIHandlerAutomated.cs
+++ b/messaging/testapp/Assets/Firebase/Sample/Messaging/UIHandlerAutomated.cs
@@ -1,8 +1,10 @@
namespace Firebase.Sample.Messaging {
using Firebase.Extensions;
+ using Firebase.Functions;
using Firebase.Messaging;
using System;
using System.Collections;
+ using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using UnityEngine;
@@ -12,8 +14,6 @@ public class UIHandlerAutomated : UIHandler {
private Firebase.Sample.AutomatedTestRunner testRunner;
private const string TestTopic = "TestTopic";
- private const string ServerKey = "REPLACE_WITH_YOUR_SERVER_KEY";
- private const string FirebaseBackendUrl = "https://fcm.googleapis.com/fcm/send";
private const string MessageFoo = "This is a test message";
private const string MessageBar = "It contains some data";
@@ -22,14 +22,15 @@ public class UIHandlerAutomated : UIHandler {
private const string MessageNotificationTitle = "JSON message!";
private const string MessageNotificationBody = "This notification has a body!";
- private const string JsonMessageNotification = "\"notification\":{\"title\":\"" +
- MessageNotificationTitle + "\",\"body\":\"" + MessageNotificationBody + "\"}";
- private const string PlaintextMessage = "data.foo=" + MessageFoo + "&data.bar=" + MessageBar;
- private const string JsonMessageA = "{\"data\":{\"spam\":\"" + MessageSpam + "\", " +
- "\"eggs\":\"" + MessageEggs + "\"}," + JsonMessageNotification + "}";
- private const string JsonMessageB = "{\"data\":{\"foo\":\"" + MessageFoo + "\", " +
- "\"bar\":\"" + MessageBar + "\"}," + JsonMessageNotification + "}";
+ private static readonly Dictionary TokenMessageFields = new Dictionary {
+ { "spam", MessageSpam },
+ { "eggs", MessageEggs }
+ };
+ private static readonly Dictionary TopicMessageFields = new Dictionary {
+ { "foo", MessageFoo },
+ { "bar", MessageBar }
+ };
private string registrationToken;
private FirebaseMessage lastReceivedMessage;
@@ -66,10 +67,6 @@ protected override void Start() {
// Disable these tests on desktop, as desktop uses a stub implementation.
#if (UNITY_IOS || UNITY_TVOS || UNITY_ANDROID)
TestGetRegistrationToken,
-#if !(UNITY_IOS || UNITY_TVOS)
- // TODO(b/130674454) This test times out on iOS, disabling until fixed.
- MakeTest(TestSendPlaintextMessageToDevice),
-#endif // !(UNITY_IOS || UNITY_TVOS)
MakeTest(TestSendJsonMessageToDevice),
MakeTest(TestSendJsonMessageToSubscribedTopic),
#else // (UNITY_IOS || UNITY_TVOS || UNITY_ANDROID)
@@ -85,10 +82,6 @@ protected override void Start() {
// Disable these tests on desktop, as desktop uses a stub implementation.
#if (UNITY_IOS || UNITY_TVOS || UNITY_ANDROID)
"TestGetRegistrationToken",
-#if !(UNITY_IOS || UNITY_TVOS)
- // TODO(b/130674454) This test times out on iOS, disabling until fixed.
- "TestSendPlaintextMessageToDevice",
-#endif // !(UNITY_IOS || UNITY_TVOS)
"TestSendJsonMessageToDevice",
"TestSendJsonMessageToSubscribedTopic",
#else // #if (UNITY_IOS || UNITY_TVOS || UNITY_ANDROID)
@@ -165,51 +158,54 @@ void ThrowIfMissingRegistrationToken() {
}
}
- // Sends a plaintext message to the server, setting this device as the addressee, waits until the
- // app receives the message and verifies the contents are the same as were sent.
- IEnumerator TestSendPlaintextMessageToDevice(TaskCompletionSource tcs) {
- ThrowIfMissingRegistrationToken();
- SendPlaintextMessageToDeviceAsync(PlaintextMessage, registrationToken);
- // TODO(b/65218400): check message id.
- while (lastReceivedMessage == null) {
- yield return new WaitForSeconds(0.5f);
- }
- ValidatePlaintextMessage(tcs, lastReceivedMessage);
- lastReceivedMessage = null;
- }
-
// Sends a JSON message to the server, setting this device as the addressee, waits until the app
// receives the message and verifies the contents are the same as were sent.
IEnumerator TestSendJsonMessageToDevice(TaskCompletionSource tcs) {
ThrowIfMissingRegistrationToken();
- SendJsonMessageToDeviceAsync(JsonMessageA, registrationToken);
+ bool failedToSend = false;
+ SendMessageToDeviceAsync(registrationToken).ContinueWithOnMainThread(t => {
+ if (t.IsFaulted) {
+ tcs.TrySetException(t.Exception);
+ failedToSend = true;
+ }
+ });
// TODO(b/65218400): check message id.
- while (lastReceivedMessage == null) {
+ while (lastReceivedMessage == null && !failedToSend) {
yield return new WaitForSeconds(0.5f);
}
- ValidateJsonMessageA(tcs, lastReceivedMessage);
- lastReceivedMessage = null;
+ if (lastReceivedMessage != null) {
+ ValidateJsonMessageA(tcs, lastReceivedMessage);
+ lastReceivedMessage = null;
+ }
}
// Sends a JSON message to the server, specifying a topic to which this device is subscribed,
// waits until the app receives the message and verifies the contents are the same as were sent.
IEnumerator TestSendJsonMessageToSubscribedTopic(TaskCompletionSource tcs) {
ThrowIfMissingRegistrationToken();
+ bool failedToSend = false;
// Note: Ideally this would use a more unique topic, but topic creation and subscription
// takes additional time, so instead this only subscribes during this one test, and doesn't
// fully test unsubscribing.
Firebase.Messaging.FirebaseMessaging.SubscribeAsync(TestTopic).ContinueWithOnMainThread(t => {
- SendJsonMessageToTopicAsync(JsonMessageB, TestTopic);
+ SendMessageToTopicAsync(TestTopic).ContinueWithOnMainThread(t2 => {
+ if (t2.IsFaulted) {
+ tcs.TrySetException(t2.Exception);
+ failedToSend = true;
+ }
+ });
});
// TODO(b/65218400): check message id.
- while (lastReceivedMessage == null) {
+ while (lastReceivedMessage == null && !failedToSend) {
yield return new WaitForSeconds(0.5f);
}
- // Unsubscribe from the test topic, to make sure that other messages aren't received.
- Firebase.Messaging.FirebaseMessaging.UnsubscribeAsync(TestTopic).ContinueWithOnMainThread(t => {
- ValidateJsonMessageB(tcs, lastReceivedMessage);
- lastReceivedMessage = null;
- });
+ if (lastReceivedMessage != null) {
+ // Unsubscribe from the test topic, to make sure that other messages aren't received.
+ Firebase.Messaging.FirebaseMessaging.UnsubscribeAsync(TestTopic).ContinueWithOnMainThread(t => {
+ ValidateJsonMessageB(tcs, lastReceivedMessage);
+ lastReceivedMessage = null;
+ });
+ }
}
// Fake test (always passes immediately). Can be used on platforms with no other tests.
@@ -234,114 +230,32 @@ IEnumerator TestDeleteTokenAsync(TaskCompletionSource tcs) {
yield break;
}
- // Sends the given message to targetDevice in plaintext format and gives back the message id iff
- // the message was sent successfully.
- Task SendPlaintextMessageToDeviceAsync(string message, string targetDevice) {
- var payload = "registration_id=" + targetDevice + "&" + message;
- var request = CreateSendMessageRequest(payload);
- // Though Firebase docs state that if content type is not specified, it defaults to plaintext,
- // server actually returns an error without the following line. This likely has something to do
- // with the way Unity formats the request.
- request.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
- return DeliverMessageAsync(request);
- }
-
- // Sends the given message to targetDevice in JSON format and gives back the message id iff the
- // message was sent successfully.
- Task SendJsonMessageToDeviceAsync(string message, string targetDevice) {
- var payload = AddTargetToJsonMessage(message, targetDevice);
- var request = CreateSendMessageRequest(payload);
- request.SetRequestHeader("Content-Type", "application/json");
- return DeliverMessageAsync(request);
- }
-
- // Sends the given message to the topic in JSON format and gives back the message id iff the
- // message was sent successfully.
- Task SendJsonMessageToTopicAsync(string message, string topic) {
- var payload = AddTargetToJsonMessage(message, "/topics/" + topic);
- var request = CreateSendMessageRequest(payload);
- request.SetRequestHeader("Content-Type", "application/json");
- return DeliverMessageAsync(request);
- }
-
- // Inserts "to" field into the given JSON string.
- string AddTargetToJsonMessage(string message, string target) {
- return message.Insert(message.IndexOf('{') + 1, "\"to\":\"" + target + "\", ");
+ // Sends a message to the specified target device, using Cloud Functions.
+ // This relies on the sendMessage function that is defined in the C++ repo.
+ Task SendMessageToDeviceAsync(string targetDevice) {
+ Dictionary data = new Dictionary();
+ data["sendTo"] = targetDevice;
+ data["isToken"] = true;
+ data["notificationTitle"] = MessageNotificationTitle;
+ data["notificationBody"] = MessageNotificationBody;
+ data["messageFields"] = TokenMessageFields;
+
+ var callable = FirebaseFunctions.DefaultInstance.GetHttpsCallable("sendMessage");
+ DebugLog("Calling the Cloud Function to send a targeted message");
+ return callable.CallAsync(data);
}
- // Creates a POST request to FCM server with proper authentication.
- UnityWebRequest CreateSendMessageRequest(string message) {
- // UnityWebRequest.Post unavoidably applies URL encoding to the payload, which leads to Firebase
- // server rejecting the resulting garbled JSON. Unfortunately, there is no way to turn it off.
- // The workaround is instead to create a PUT request instead (which is not encoded) and then
- // change method to POST.
- // See this discussion for reference:
- // https://forum.unity3d.com/threads/unitywebrequest-post-url-jsondata-sending-broken-json.414708/#post-2719900
- var request = UnityWebRequest.Put(FirebaseBackendUrl, message);
- request.method = "POST";
-
- request.SetRequestHeader("Authorization", String.Format("key={0}", ServerKey));
-
- return request;
- }
-
- Task DeliverMessageAsync(UnityWebRequest request) {
- var tcs = new TaskCompletionSource();
- StartCoroutine(DeliverMessageCoroutine(request, tcs));
- return tcs.Task;
- }
-
- // Sends the given POST request and gives back the message id iff the message was sent
- // successfully.
- IEnumerator DeliverMessageCoroutine(UnityWebRequest request, TaskCompletionSource tcs) {
- yield return request.Send();
-
-#if UNITY_5
- if (request.isError) {
-#else
- // After Unity 2017, the UnityWebRequest API changed isError property to isNetworkError for
- // system errors, while isHttpError and responseCode is used for server return code such as
- // 404/Not Found and 500/Internal Server Error.
- if (request.isNetworkError) {
-#endif
- DebugLog("The server responded with an error: " + request.error);
- tcs.TrySetException(new Exception(request.error));
- }
-
- DebugLog("Server response code: " + request.responseCode.ToString());
- DebugLog("Server response contents: " + request.downloadHandler.text);
-
- // Extract message ID from server response. Unfortunately, there are 3 possible response
- // formats.
- var messageIdCaptureGroup = "([0-9a-f:%]+)";
- // JSON format
- var messageIdMatch = Regex.Match(request.downloadHandler.text, "\"message_id\":\"" +
- messageIdCaptureGroup + "\"");
- // When sending to a topic, a different response format is used, try that.
- if (!messageIdMatch.Success) {
- messageIdMatch = Regex.Match(request.downloadHandler.text, "\"message_id\":" +
- messageIdCaptureGroup);
- }
- if (!messageIdMatch.Success) {
- // Try plaintext format
- messageIdMatch = Regex.Match(request.downloadHandler.text, "id=" + messageIdCaptureGroup);
- }
- if (messageIdMatch.Success) {
- tcs.TrySetResult(messageIdMatch.Groups[1].Value);
- } else {
- tcs.TrySetException(new Exception("Server response doesn't contain message id: " +
- request.downloadHandler.text));
- }
- }
-
- void ValidatePlaintextMessage(TaskCompletionSource tcs, FirebaseMessage message) {
- try {
- ValidateMessageData(message, "foo", MessageFoo);
- ValidateMessageData(message, "bar", MessageBar);
- tcs.SetResult(message.MessageId);
- } catch (Exception e) {
- tcs.SetException(e);
- }
+ Task SendMessageToTopicAsync(string topic) {
+ Dictionary data = new Dictionary();
+ data["sendTo"] = topic;
+ data["isToken"] = false;
+ data["notificationTitle"] = MessageNotificationTitle;
+ data["notificationBody"] = MessageNotificationBody;
+ data["messageFields"] = TopicMessageFields;
+
+ var callable = FirebaseFunctions.DefaultInstance.GetHttpsCallable("sendMessage");
+ DebugLog("Calling the Cloud Function to send a topic message");
+ return callable.CallAsync(data);
}
void ValidateJsonMessageA(TaskCompletionSource tcs, FirebaseMessage message) {
diff --git a/remote_config/CMakeLists.txt b/remote_config/CMakeLists.txt
index 5e6cd7aee..d4fcea0b7 100644
--- a/remote_config/CMakeLists.txt
+++ b/remote_config/CMakeLists.txt
@@ -23,6 +23,7 @@ set(firebase_remote_config_swig
# Firebase RemoteConfig CSharp files
set(firebase_remote_config_src
+ src/ConfigInfo.cs
src/ConfigSettings.cs
src/ConfigUpdateEventArgs.cs
src/ConfigValue.cs
diff --git a/remote_config/src/ConfigInfo.cs b/remote_config/src/ConfigInfo.cs
new file mode 100644
index 000000000..376f58a39
--- /dev/null
+++ b/remote_config/src/ConfigInfo.cs
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2024 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.
+ */
+
+namespace Firebase.RemoteConfig {
+
+/// @brief Describes the state of the most recent Fetch() call.
+/// Normally returned as a result of the GetInfo() function.
+public sealed class ConfigInfo {
+
+ private System.DateTime UnixEpochUtc =
+ new System.DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
+
+ /// @brief The time when the last fetch operation completed.
+ public System.DateTime FetchTime { internal set; get; }
+
+ /// @brief The time when Remote Config data refreshes will no longer
+ /// be throttled.
+ public System.DateTime ThrottledEndTime { internal set; get; }
+
+ /// @brief The status of the last fetch request.
+ public LastFetchStatus LastFetchStatus { internal set; get; }
+
+ /// @brief The reason the most recent fetch failed.
+ public FetchFailureReason LastFetchFailureReason { internal set; get; }
+
+ internal ConfigInfo(ConfigInfoInternal configInfoInternal) {
+ FetchTime = UnixEpochUtc.AddMilliseconds(configInfoInternal.fetch_time);
+ ThrottledEndTime = UnixEpochUtc.AddMilliseconds(configInfoInternal.throttled_end_time);
+ LastFetchStatus = configInfoInternal.last_fetch_status;
+ LastFetchFailureReason = configInfoInternal.last_fetch_failure_reason;
+ }
+}
+
+}
diff --git a/remote_config/src/ConfigSettings.cs b/remote_config/src/ConfigSettings.cs
index a767d9787..cd4d4f039 100644
--- a/remote_config/src/ConfigSettings.cs
+++ b/remote_config/src/ConfigSettings.cs
@@ -32,15 +32,6 @@ public struct ConfigSettings {
/// fetch. Default is 12 hours.
public ulong MinimumFetchIntervalInMilliseconds { get; set; }
- /// The minimum interval between successive fetch calls.
- ///
- /// @deprecated Use MinimumFetchIntervalInMilliseconds instead. This will be
- /// removed in the next major release.
- public ulong MinimumFetchInternalInMilliseconds {
- get { return MinimumFetchIntervalInMilliseconds; }
- set { MinimumFetchIntervalInMilliseconds = value; }
- }
-
internal static ConfigSettings FromInternal(ConfigSettingsInternal csInternal) {
return new ConfigSettings {
FetchTimeoutInMilliseconds = csInternal.fetch_timeout_in_milliseconds,
diff --git a/remote_config/src/FirebaseRemoteConfig.cs b/remote_config/src/FirebaseRemoteConfig.cs
index 908961ab2..d70d18161 100644
--- a/remote_config/src/FirebaseRemoteConfig.cs
+++ b/remote_config/src/FirebaseRemoteConfig.cs
@@ -169,9 +169,10 @@ public static FirebaseRemoteConfig DefaultInstance {
/// Use this method to ensure Set/Get call not being blocked.
///
/// @returns A Task contains ConfigInfo.
- public System.Threading.Tasks.Task EnsureInitializedAsync() {
+ public async System.Threading.Tasks.Task EnsureInitializedAsync() {
ThrowIfNull();
- return remoteConfigInternal.EnsureInitializedAsync();
+ ConfigInfoInternal configInfoInternal = await remoteConfigInternal.EnsureInitializedAsync();
+ return new ConfigInfo(configInfoInternal);
}
/// @brief Asynchronously activates the most recently fetched configs,
@@ -323,11 +324,11 @@ public IDictionary AllValues {
}
/// @brief Returns information about the last fetch request, in the form
- /// of a @ref ConfigInfo struct.
+ /// of a @ref ConfigInfo object.
public ConfigInfo Info {
get {
ThrowIfNull();
- return remoteConfigInternal.GetInfo();
+ return new ConfigInfo(remoteConfigInternal.GetInfo());
}
}
diff --git a/remote_config/src/swig/remote_config.i b/remote_config/src/swig/remote_config.i
index e6322262b..4d1880e09 100644
--- a/remote_config/src/swig/remote_config.i
+++ b/remote_config/src/swig/remote_config.i
@@ -18,6 +18,9 @@
%pragma(csharp) moduleclassmodifiers="internal sealed class"
%feature("flatnested");
+// Change the default class modifier to internal, so that new classes are not accidentally exposed
+%typemap(csclassmodifiers) SWIGTYPE "internal class"
+
%include "std_vector.i"
%include "stdint.i"
@@ -116,57 +119,12 @@ void SetConfigUpdateCallback(RemoteConfig* rc, firebase::remote_config::ConfigUp
%ignore firebase::remote_config::RemoteConfigError;
%ignore firebase::remote_config::ConfigUpdateListenerRegistration;
-// Configure the ConfigInfo class
-%csmethodmodifiers fetch_time "internal";
-%rename(FetchTimeInternal) fetch_time;
-%csmethodmodifiers throttled_end_time "internal";
-%rename(ThrottledEndTimeInternal) throttled_end_time;
-
-%typemap(cscode) firebase::remote_config::ConfigInfo %{
- private System.DateTime UnixEpochUtc =
- new System.DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
-
- /// @brief The time when the last fetch operation completed.
- public System.DateTime FetchTime {
- get {
- return UnixEpochUtc.AddMilliseconds(FetchTimeInternal);
- }
- }
-
- /// @brief The time when Remote Config data refreshes will no longer
- /// be throttled.
- public System.DateTime ThrottledEndTime {
- get {
- return UnixEpochUtc.AddMilliseconds(ThrottledEndTimeInternal);
- }
- }
-%}
-
-%immutable firebase::remote_config::ConfigInfo::last_fetch_status;
-%immutable firebase::remote_config::ConfigInfo::last_fetch_failure_reason;
-
-// These are here instead of the header due to b/35780150
-%csmethodmodifiers firebase::remote_config::ConfigInfo::last_fetch_status "
- /// @brief The status of the last fetch request.
- public";
-%csmethodmodifiers firebase::remote_config::ConfigInfo::last_fetch_failure_reason "
- /// @brief The reason the most recent fetch failed.
- public";
-
-// Make snake_case properties into CamelCase.
-// ConfigInfo
-%rename(LastFetchFailureReason) last_fetch_failure_reason;
-%rename(LastFetchStatus) last_fetch_status;
-
-%typemap(csclassmodifiers) firebase::remote_config::ConfigInfo
- "public sealed class";
-
-%SWIG_FUTURE(Future_ConfigInfo, ConfigInfo, internal, firebase::remote_config::ConfigInfo, FirebaseException) // Future
-
+// Rename the generated classes to *Internal
+%rename (ConfigInfoInternal) firebase::remote_config::ConfigInfo;
+%SWIG_FUTURE(Future_ConfigInfo, ConfigInfoInternal, internal,
+ firebase::remote_config::ConfigInfo, FirebaseException) // Future
%rename (FirebaseRemoteConfigInternal) firebase::remote_config::RemoteConfig;
-
%rename (ConfigSettingsInternal) firebase::remote_config::ConfigSettings;
-
%rename (ConfigUpdateInternal) firebase::remote_config::ConfigUpdate;
// Configure properties for get / set methods on the FirebaseRemoteConfigInternal class.
diff --git a/remote_config/testapp/Assets/Firebase/Sample/RemoteConfig/UIHandlerAutomated.cs b/remote_config/testapp/Assets/Firebase/Sample/RemoteConfig/UIHandlerAutomated.cs
index 10022ad59..48da93be4 100644
--- a/remote_config/testapp/Assets/Firebase/Sample/RemoteConfig/UIHandlerAutomated.cs
+++ b/remote_config/testapp/Assets/Firebase/Sample/RemoteConfig/UIHandlerAutomated.cs
@@ -4,6 +4,7 @@ namespace Firebase.Sample.RemoteConfig {
using System;
using System.Linq;
using System.Threading.Tasks;
+ using UnityEngine;
// An automated version of the UIHandler that runs tests on Firebase Remote Config.
public class UIHandlerAutomated : UIHandler {
@@ -13,6 +14,7 @@ protected override void Start() {
// Set the list of tests to run, note this is done at Start since they are
// non-static.
Func[] tests = {
+ TestSetConfigSettings,
TestDisplayData,
TestDisplayAllKeys,
// Skip the Realtime RC test on desktop as it is not yet supported.
@@ -48,6 +50,13 @@ private void AssertEq(string message, T value1, T value2) {
}
}
+ Task TestSetConfigSettings() {
+ var configSettings = new Firebase.RemoteConfig.ConfigSettings();
+ configSettings.FetchTimeoutInMilliseconds = 30 * 1000;
+ configSettings.MinimumFetchIntervalInMilliseconds = 0;
+ return FirebaseRemoteConfig.DefaultInstance.SetConfigSettingsAsync(configSettings);
+ }
+
Task TestDisplayData() {
DisplayData();
return Task.FromResult(true);
@@ -87,6 +96,13 @@ Task TestAddOnConfigUpdateListener() {
return Task.FromResult(true);
}
+ if (SystemInfo.graphicsDeviceName.ToLower().Contains("simulator")) {
+ DebugLog("WARNING: iOS simulator can frequently take a significant amount "
+ + "of time to do the fetch, so this is disabled by default. To test, "
+ + "modify the scripts.");
+ return Task.FromResult(true);
+ }
+
TaskCompletionSource test_success = new TaskCompletionSource();
EventHandler myHandler =
(object sender, ConfigUpdateEventArgs args) => {
@@ -124,6 +140,13 @@ Task TestAddAndRemoveConfigUpdateListener() {
}
Task TestFetchData() {
+ if (SystemInfo.graphicsDeviceName.ToLower().Contains("simulator")) {
+ DebugLog("WARNING: iOS simulator can frequently take a significant amount "
+ + "of time to do the fetch, so this is disabled by default. To test, "
+ + "modify the scripts.");
+ return Task.FromResult(true);
+ }
+
// Note: FetchDataAsync calls both Fetch and Activate.
return FetchDataAsync().ContinueWithOnMainThread((_) => {
// Verify that RemoteConfig now has the expected values.
diff --git a/scripts/gha-encrypted/analytics/GoogleService-Info.plist.gpg b/scripts/gha-encrypted/analytics/GoogleService-Info.plist.gpg
index dec6a525a..6aab96051 100644
Binary files a/scripts/gha-encrypted/analytics/GoogleService-Info.plist.gpg and b/scripts/gha-encrypted/analytics/GoogleService-Info.plist.gpg differ
diff --git a/scripts/gha-encrypted/analytics/google-services.json.gpg b/scripts/gha-encrypted/analytics/google-services.json.gpg
index 6cc7df903..f1bd0b00c 100644
Binary files a/scripts/gha-encrypted/analytics/google-services.json.gpg and b/scripts/gha-encrypted/analytics/google-services.json.gpg differ
diff --git a/scripts/gha-encrypted/app_check/GoogleService-Info.plist.gpg b/scripts/gha-encrypted/app_check/GoogleService-Info.plist.gpg
index 9c90edc55..f4f0d6cc2 100644
Binary files a/scripts/gha-encrypted/app_check/GoogleService-Info.plist.gpg and b/scripts/gha-encrypted/app_check/GoogleService-Info.plist.gpg differ
diff --git a/scripts/gha-encrypted/app_check/app_check_token.txt.gpg b/scripts/gha-encrypted/app_check/app_check_token.txt.gpg
index 4f61dbf1a..ec03f8096 100644
Binary files a/scripts/gha-encrypted/app_check/app_check_token.txt.gpg and b/scripts/gha-encrypted/app_check/app_check_token.txt.gpg differ
diff --git a/scripts/gha-encrypted/app_check/google-services.json.gpg b/scripts/gha-encrypted/app_check/google-services.json.gpg
index c3455afc8..0eed9eda4 100644
Binary files a/scripts/gha-encrypted/app_check/google-services.json.gpg and b/scripts/gha-encrypted/app_check/google-services.json.gpg differ
diff --git a/scripts/gha-encrypted/auth/GoogleService-Info.plist.gpg b/scripts/gha-encrypted/auth/GoogleService-Info.plist.gpg
index b4f519e86..8124bdd17 100644
Binary files a/scripts/gha-encrypted/auth/GoogleService-Info.plist.gpg and b/scripts/gha-encrypted/auth/GoogleService-Info.plist.gpg differ
diff --git a/scripts/gha-encrypted/auth/google-services.json.gpg b/scripts/gha-encrypted/auth/google-services.json.gpg
index a06da911a..891a786da 100644
Binary files a/scripts/gha-encrypted/auth/google-services.json.gpg and b/scripts/gha-encrypted/auth/google-services.json.gpg differ
diff --git a/scripts/gha-encrypted/crashlytics/GoogleService-Info.plist.gpg b/scripts/gha-encrypted/crashlytics/GoogleService-Info.plist.gpg
index 42ea6e75f..6105a03c1 100644
Binary files a/scripts/gha-encrypted/crashlytics/GoogleService-Info.plist.gpg and b/scripts/gha-encrypted/crashlytics/GoogleService-Info.plist.gpg differ
diff --git a/scripts/gha-encrypted/crashlytics/google-services.json.gpg b/scripts/gha-encrypted/crashlytics/google-services.json.gpg
index d6d98a5d1..ba3949baa 100644
Binary files a/scripts/gha-encrypted/crashlytics/google-services.json.gpg and b/scripts/gha-encrypted/crashlytics/google-services.json.gpg differ
diff --git a/scripts/gha-encrypted/database/GoogleService-Info.plist.gpg b/scripts/gha-encrypted/database/GoogleService-Info.plist.gpg
index 5c60296f7..9b0fc4c65 100644
Binary files a/scripts/gha-encrypted/database/GoogleService-Info.plist.gpg and b/scripts/gha-encrypted/database/GoogleService-Info.plist.gpg differ
diff --git a/scripts/gha-encrypted/database/google-services.json.gpg b/scripts/gha-encrypted/database/google-services.json.gpg
index 822697603..15f5e9cc8 100644
Binary files a/scripts/gha-encrypted/database/google-services.json.gpg and b/scripts/gha-encrypted/database/google-services.json.gpg differ
diff --git a/scripts/gha-encrypted/database/uri.txt.gpg b/scripts/gha-encrypted/database/uri.txt.gpg
index 98c1533f9..f2cd2ccba 100644
Binary files a/scripts/gha-encrypted/database/uri.txt.gpg and b/scripts/gha-encrypted/database/uri.txt.gpg differ
diff --git a/scripts/gha-encrypted/debug_keystore.gpg b/scripts/gha-encrypted/debug_keystore.gpg
index 2b71433fb..985e116e0 100644
Binary files a/scripts/gha-encrypted/debug_keystore.gpg and b/scripts/gha-encrypted/debug_keystore.gpg differ
diff --git a/scripts/gha-encrypted/dynamic_links/GoogleService-Info.plist.gpg b/scripts/gha-encrypted/dynamic_links/GoogleService-Info.plist.gpg
index 7663cb5ff..ec086e286 100644
Binary files a/scripts/gha-encrypted/dynamic_links/GoogleService-Info.plist.gpg and b/scripts/gha-encrypted/dynamic_links/GoogleService-Info.plist.gpg differ
diff --git a/scripts/gha-encrypted/dynamic_links/google-services.json.gpg b/scripts/gha-encrypted/dynamic_links/google-services.json.gpg
index 08a1cc94a..028edfb44 100644
Binary files a/scripts/gha-encrypted/dynamic_links/google-services.json.gpg and b/scripts/gha-encrypted/dynamic_links/google-services.json.gpg differ
diff --git a/scripts/gha-encrypted/dynamic_links/uri.txt.gpg b/scripts/gha-encrypted/dynamic_links/uri.txt.gpg
index 24df2127c..eda9bbdb2 100644
--- a/scripts/gha-encrypted/dynamic_links/uri.txt.gpg
+++ b/scripts/gha-encrypted/dynamic_links/uri.txt.gpg
@@ -1 +1 @@
-
:ǂNNQ[ ,c-VN,~
"u[Qv=cΩ3
\ No newline at end of file
+
;}dTN|XS;'Nȶ7yRB]5iӃu\&m՝mU.42Rn
\ No newline at end of file
diff --git a/scripts/gha-encrypted/remote_config/GoogleService-Info.plist.gpg b/scripts/gha-encrypted/remote_config/GoogleService-Info.plist.gpg
index c115a0114..c6a8f57dc 100644
Binary files a/scripts/gha-encrypted/remote_config/GoogleService-Info.plist.gpg and b/scripts/gha-encrypted/remote_config/GoogleService-Info.plist.gpg differ
diff --git a/scripts/gha-encrypted/remote_config/google-services.json.gpg b/scripts/gha-encrypted/remote_config/google-services.json.gpg
index bc990ea8c..b725d0810 100644
Binary files a/scripts/gha-encrypted/remote_config/google-services.json.gpg and b/scripts/gha-encrypted/remote_config/google-services.json.gpg differ
diff --git a/scripts/gha-encrypted/storage/GoogleService-Info.plist.gpg b/scripts/gha-encrypted/storage/GoogleService-Info.plist.gpg
index f7e4981af..f7b4bcd21 100644
Binary files a/scripts/gha-encrypted/storage/GoogleService-Info.plist.gpg and b/scripts/gha-encrypted/storage/GoogleService-Info.plist.gpg differ
diff --git a/scripts/gha-encrypted/storage/bucket.txt.gpg b/scripts/gha-encrypted/storage/bucket.txt.gpg
index ae6d8498d..e23ba13bf 100644
Binary files a/scripts/gha-encrypted/storage/bucket.txt.gpg and b/scripts/gha-encrypted/storage/bucket.txt.gpg differ
diff --git a/scripts/gha-encrypted/storage/google-services.json.gpg b/scripts/gha-encrypted/storage/google-services.json.gpg
index 8f616baa2..3033b5ee4 100644
Binary files a/scripts/gha-encrypted/storage/google-services.json.gpg and b/scripts/gha-encrypted/storage/google-services.json.gpg differ
diff --git a/scripts/gha/build_testapps.py b/scripts/gha/build_testapps.py
index 4df71c783..eae4bce7d 100644
--- a/scripts/gha/build_testapps.py
+++ b/scripts/gha/build_testapps.py
@@ -626,8 +626,12 @@ def perform_in_editor_tests(dir_helper, retry_on_license_check=True, remaining_r
time.sleep(5)
time_until_timeout -= 5
if os.path.exists(log):
- with open(log) as f:
- text = f.read()
+ try:
+ with open(log, 'r', encoding='utf-8') as f:
+ text = f.read()
+ except UnicodeDecodeError:
+ with open(log, 'rb') as f: # Open in binary mode
+ text = f.read().decode('utf-8', errors='replace')
test_finished = "All tests finished" in text
if retry_on_license_check and "License updated successfully" in text:
logging.info("License check caused assembly reload. Retrying tests.")
@@ -821,6 +825,7 @@ def _switch_to_latest_runtime(dir_helper, arg_builder):
dir_helper.copy_editor_script("RuntimeSwitcher.cs")
arg_builder.set_log_file(dir_helper.make_log_path("switch_runtime"))
_run(arg_builder.get_args_for_method("RuntimeSwitcher.SwitchToLatest"))
+ time.sleep(0.5)
def _create_unity_project(dir_helper):
@@ -845,6 +850,7 @@ def _import_unity_plugins(dir_helper, arg_builder):
name = os.path.splitext(os.path.basename(plugin_path))[0]
arg_builder.set_log_file(dir_helper.make_log_path("import_" + name))
_run(arg_builder.get_args_for_import(plugin_path))
+ time.sleep(0.5)
# Unity Package Manager is Unity's newer style of packaging.
@@ -861,6 +867,7 @@ def _import_upm_packages(dir_helper, arg_builder):
arg_builder.get_args_for_method(
method="PackageImporter.Import",
method_args=["-PackageImporter.package", package]))
+ time.sleep(0.5)
# In an automated context with batchmode, it was found that these
@@ -877,6 +884,7 @@ def _enable_firebase_assemblies(dir_helper, arg_builder):
method_args=[
"-PluginToggler.plugins",
"Firebase.Editor.dll,Google.VersionHandlerImpl"]))
+ time.sleep(0.5)
def _edm4u_update(dir_helper, arg_builder):
@@ -884,6 +892,7 @@ def _edm4u_update(dir_helper, arg_builder):
arg_builder.set_log_file(dir_helper.make_log_path("versionhandler_update"))
logging.info("Running VersionHandler.UpdateNow...")
_run(arg_builder.get_args_for_method("Google.VersionHandler.UpdateNow"))
+ time.sleep(0.5)
def _copy_unity_assets(dir_helper, files_to_ignore):
diff --git a/scripts/gha/firebase_github.py b/scripts/gha/firebase_github.py
index 1e56e3557..99467277d 100644
--- a/scripts/gha/firebase_github.py
+++ b/scripts/gha/firebase_github.py
@@ -310,3 +310,61 @@ def list_workflow_runs(token, workflow_id, branch=None, event=None, limit=200):
keep_going = False
results = results[:limit]
return results
+
+
+def list_jobs_for_workflow_run(token, run_id, attempt=None, limit=200):
+ """https://docs.github.com/en/rest/actions/workflow-jobs#list-jobs-for-a-workflow-run
+ https://docs.github.com/en/rest/actions/workflow-jobs#list-jobs-for-a-workflow-run-attempt
+
+ Args:
+ attempt: Which attempt to fetch. Should be a number >0, 'latest', or 'all'.
+ If unspecified, returns 'latest'.
+ """
+ if attempt == 'latest' or attempt== 'all' or attempt == None:
+ url = f'{GITHUB_API_URL}/actions/runs/{run_id}/jobs'
+ else:
+ url = f'{GITHUB_API_URL}/actions/runs/{run_id}/attempts/{attempt}/jobs'
+ headers = {'Accept': 'application/vnd.github.v3+json', 'Authorization': f'token {token}'}
+ page = 1
+ per_page = 100
+ results = []
+ keep_going = True
+ while keep_going:
+ params = {'per_page': per_page, 'page': page}
+ if attempt == 'latest' or attempt == 'all':
+ params.update({'filter': attempt})
+ page = page + 1
+ keep_going = False
+ with requests_retry_session().get(url, headers=headers, params=params,
+ stream=True, timeout=TIMEOUT) as response:
+ logging.info("list_jobs_for_workflow_run: %s page %d, response: %s",
+ url, params['page'], response)
+ if 'jobs' not in response.json():
+ break
+ job_results = response.json()['jobs']
+ results = results + job_results
+ # If exactly per_page results were retrieved, read the next page.
+ keep_going = (len(job_results) == per_page)
+ if limit > 0 and len(results) >= limit:
+ keep_going = False
+ results = results[:limit]
+ return results
+
+
+def download_job_logs(token, job_id):
+ """https://docs.github.com/en/rest/actions/workflow-jobs#download-job-logs-for-a-workflow-run"""
+ url = f'{GITHUB_API_URL}/actions/jobs/{job_id}/logs'
+ headers = {'Accept': 'application/vnd.github.v3+json', 'Authorization': f'token {token}'}
+ with requests_retry_session().get(url, headers=headers, stream=True, timeout=TIMEOUT) as response:
+ logging.info("download_job_logs: %s response: %s", url, response)
+ return response.content.decode('utf-8')
+
+
+def rerun_failed_jobs_for_workflow_run(token, run_id):
+ """https://docs.github.com/en/rest/actions/workflow-runs#re-run-failed-jobs-from-a-workflow-run"""
+ url = f'{GITHUB_API_URL}/actions/runs/{run_id}/rerun-failed-jobs'
+ headers = {'Accept': 'application/vnd.github.v3+json', 'Authorization': f'token {token}'}
+ with requests.post(url, headers=headers,
+ stream=True, timeout=TIMEOUT) as response:
+ logging.info("rerun_failed_jobs_for_workflow_run: %s response: %s", url, response)
+ return True if response.status_code == 201 else False
diff --git a/scripts/gha/integration_testing/build_testapps.json b/scripts/gha/integration_testing/build_testapps.json
index 00f0e181a..710559564 100644
--- a/scripts/gha/integration_testing/build_testapps.json
+++ b/scripts/gha/integration_testing/build_testapps.json
@@ -169,6 +169,7 @@
"testapp_path": "messaging/testapp",
"platforms": ["Android", "Playmode", "iOS", "tvOS", "Windows", "macOS", "Linux"],
"plugins": [
+ "FirebaseFunctions.unitypackage",
"FirebaseMessaging.unitypackage"
],
"provision": "Firebase_Unity_Messaging_Test_App_Dev.mobileprovision",
diff --git a/scripts/gha/integration_testing/gameloop_apple/gameloop.xcodeproj/project.pbxproj b/scripts/gha/integration_testing/gameloop_apple/gameloop.xcodeproj/project.pbxproj
index 83c2031fa..ee15830f3 100644
--- a/scripts/gha/integration_testing/gameloop_apple/gameloop.xcodeproj/project.pbxproj
+++ b/scripts/gha/integration_testing/gameloop_apple/gameloop.xcodeproj/project.pbxproj
@@ -532,7 +532,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
@@ -587,7 +587,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
@@ -603,7 +603,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
INFOPLIST_FILE = gameloop/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -622,7 +622,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
INFOPLIST_FILE = gameloop/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
diff --git a/scripts/gha/print_matrix_configuration.py b/scripts/gha/print_matrix_configuration.py
index e1ebc8fd5..d3357b96f 100644
--- a/scripts/gha/print_matrix_configuration.py
+++ b/scripts/gha/print_matrix_configuration.py
@@ -56,7 +56,7 @@
# GitHub Runner
WINDOWS_RUNNER = "windows-latest"
-MACOS_RUNNER = "macos-latest"
+MACOS_RUNNER = "macos-13"
LINUX_RUNNER = "ubuntu-latest"
PARAMETERS = {
@@ -134,7 +134,6 @@
# Slightly different OS versions because of limited FTL selection.
"model=iphone13pro,version=15.7",
"model=iphone8,version=15.7",
- "model=ipadmini4,version=15.4",
]},
"ios_latest": {"platform": IOS, "type": "real",
"device": [
@@ -143,9 +142,9 @@
"model=iphone8,version=16.6",
"model=ipad10,version=16.6",
]},
- "simulator_min": {"platform": IOS, "type": "virtual", "name": "iPhone 8", "version": "15.2"},
- "simulator_target": {"platform": IOS, "type": "virtual", "name": "iPhone 12", "version": "16.1"},
- "simulator_latest": {"platform": IOS, "type": "virtual", "name": "iPhone 12", "version": "16.2"},
+ "simulator_min": {"platform": IOS, "type": "virtual", "name": "iPhone 15 Pro Max", "version": "17.0.1"},
+ "simulator_target": {"platform": IOS, "type": "virtual", "name": "iPhone 15 Pro Max", "version": "17.2"},
+ "simulator_latest": {"platform": IOS, "type": "virtual", "name": "iPhone 15 Plus", "version": "17.4"},
"tvos_simulator": {"platform": TVOS, "type": "virtual", "name": "Apple TV", "version": "16.1"},
}
@@ -267,6 +266,11 @@ def get_testapp_build_matrix(matrix_type, unity_versions, platforms, build_os, i
platform = li[1]
os = li[2] if li[2] else (MACOS_RUNNER if (platform in [IOS, TVOS]) else WINDOWS_RUNNER)
+ # TODO: Remove this when we can get it working on GHA again
+ # Skip the MacOS + Android combo, because it has been having configuration issues on the GHA machines
+ if platform==ANDROID and os==MACOS_RUNNER:
+ continue
+
if platform in [IOS, TVOS]:
# for iOS, tvOS platforms, exclude non macOS build_os
if os==MACOS_RUNNER:
@@ -330,6 +334,11 @@ def get_testapp_test_matrix(matrix_type, unity_versions, platforms, build_os, mo
platform = li[1]
build_os = li[2] if li[2] else (MACOS_RUNNER if (platform in [IOS, TVOS]) else WINDOWS_RUNNER)
+ # TODO: Remove this when we can get it working on GHA again
+ # Skip the MacOS + Android combo, because it has been having configuration issues on the GHA machines
+ if platform==ANDROID and build_os==MACOS_RUNNER:
+ continue
+
if platform in [WINDOWS, MACOS, LINUX]:
test_os = _get_test_os(platform)
matrix["include"].append({"unity_version": unity_version, "platform": platform, "build_os": build_os, "test_os": test_os, "test_device": "github_runner", "device_detail": "NA", "device_type": "NA", "ios_sdk": "NA"})
diff --git a/scripts/gha/report_build_status.py b/scripts/gha/report_build_status.py
index 7bc1d5115..6f7b13999 100644
--- a/scripts/gha/report_build_status.py
+++ b/scripts/gha/report_build_status.py
@@ -460,7 +460,7 @@ def main(argv):
logs_zip = zipfile.ZipFile(logs_compressed_data)
m = get_message_from_github_log(
logs_zip,
- r'build-20.*/.*Fetch prebuilt.*\.txt',
+ r'summarize-results/.*Print SDK package info.*\.txt',
r'run_id: ([0-9]+)$')
if m:
packaging_run = m.group(1)
diff --git a/scripts/gha/restore_secrets.py b/scripts/gha/restore_secrets.py
index 336f22d5a..a93b5073e 100644
--- a/scripts/gha/restore_secrets.py
+++ b/scripts/gha/restore_secrets.py
@@ -124,15 +124,6 @@ def main(argv):
file_path = os.path.join(repo_dir, "dynamic_links", "testapp", "Assets", "Firebase", "Sample", CAPITALIZATIONS["dynamic_links"], "UIHandler.cs")
_patch_file(file_path, "REPLACE_WITH_YOUR_URI_PREFIX", uri_prefix)
- print("Attempting to patch Messaging server key and uri.")
- server_key_path = os.path.join(secrets_dir, "messaging", "server_key.txt.gpg")
- server_key = _decrypt(server_key_path, passphrase)
- uri_path = os.path.join(secrets_dir, "messaging", "uri.txt.gpg")
- uri = _decrypt(uri_path, passphrase)
- file_path = os.path.join(repo_dir, "messaging", "testapp", "Assets", "Firebase", "Sample", CAPITALIZATIONS["messaging"], "UIHandlerAutomated.cs")
- _patch_file(file_path, "REPLACE_WITH_YOUR_SERVER_KEY", server_key)
- _patch_file(file_path, "REPLACE_WITH_YOUR_BACKEND_URL", uri)
-
print("Attempting to patch Storage Bucket.")
bucket_path = os.path.join(secrets_dir, "storage", "bucket.txt.gpg")
bucket = _decrypt(bucket_path, passphrase)
diff --git a/scripts/gha/retry_test_failures.py b/scripts/gha/retry_test_failures.py
new file mode 100644
index 000000000..5ca0384f4
--- /dev/null
+++ b/scripts/gha/retry_test_failures.py
@@ -0,0 +1,128 @@
+# Copyright 2023 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.
+
+"""A utility to retry failed jobs in a workflow run.
+
+USAGE:
+ python3 scripts/gha/retry_test_failures.py \
+ --token ${{github.token}} \
+ --run_id
+"""
+
+import datetime
+import json
+import re
+import shutil
+
+from absl import app
+from absl import flags
+from absl import logging
+
+import firebase_github
+
+FLAGS = flags.FLAGS
+MAX_RETRIES=2
+
+flags.DEFINE_string(
+ "token", None,
+ "github.token: A token to authenticate on your repository.")
+
+flags.DEFINE_string(
+ "run_id", None,
+ "Github's workflow run ID.")
+
+
+def get_log_group(log_text, group_name):
+ group_log = []
+ in_group = False
+ for line in log_text.split("\n"):
+ line_no_ts = line[29:]
+ if line_no_ts.startswith('##[group]'):
+ if group_name in line_no_ts:
+ print("got group %s" % group_name)
+ in_group = True
+ if in_group:
+ group_log.append(line_no_ts)
+ if line_no_ts.startswith('##[error])'):
+ print("end group %s" % group_name)
+ in_group = False
+ break
+ return group_log
+
+def main(argv):
+ if len(argv) > 1:
+ raise app.UsageError("Too many command-line arguments.")
+ # Get list of workflow jobs.
+ workflow_jobs = firebase_github.list_jobs_for_workflow_run(
+ FLAGS.token, FLAGS.run_id, attempt='all')
+ if not workflow_jobs or len(workflow_jobs) == 0:
+ logging.error("No jobs found for workflow run %s", FLAGS.run_id)
+ exit(1)
+
+ failed_jobs = {}
+ all_jobs = {}
+ for job in workflow_jobs:
+ all_jobs[job['id']] = job
+ if job['conclusion'] != 'success' and job['conclusion'] != 'skipped':
+ if job['name'] in failed_jobs:
+ other_run = failed_jobs[job['name']]
+ if job['run_attempt'] > other_run['run_attempt']:
+ # This is a later run than the one that's already there
+ failed_jobs[job['name']] = job
+ else:
+ failed_jobs[job['name']] = job
+
+ should_rerun_jobs = False
+ for job_name in failed_jobs:
+ job = failed_jobs[job_name]
+ logging.info('Considering job %s attempt %d: %s (%s)',
+ job['conclusion'] if job['conclusion'] else job['status'],
+ job['run_attempt'], job['name'], job['id'])
+ if job['status'] != 'completed':
+ # Don't retry a job that is already in progress or queued
+ logging.info("Not retrying, as %s is already %s",
+ job['name'], job['status'].replace("_", " "))
+ should_rerun_jobs = False
+ break
+ if job['run_attempt'] > MAX_RETRIES:
+ # Don't retry a job more than MAX_RETRIES times.
+ logging.info("Not retrying, as %s has already been attempted %d times",
+ job['name'], job['run_attempt'])
+ should_rerun_jobs = False
+ break
+ if job['conclusion'] == 'failure':
+ job_logs = firebase_github.download_job_logs(FLAGS.token, job['id'])
+ if job['name'].startswith('build-'):
+ # Retry build jobs that timed out
+ if re.search(r'timed? ?out|network error|maximum execution time',
+ job_logs, re.IGNORECASE):
+ should_rerun_jobs = True
+ elif job['name'].startswith('test-'):
+ # Tests should always be retried (for now).
+ should_rerun_jobs = True
+
+ if should_rerun_jobs:
+ logging.info("Re-running failed jobs in workflow run %s", FLAGS.run_id)
+ if not firebase_github.rerun_failed_jobs_for_workflow_run(
+ FLAGS.token, FLAGS.run_id):
+ logging.error("Error submitting GitHub API request")
+ exit(1)
+ else:
+ logging.info("Not re-running jobs.")
+
+
+if __name__ == "__main__":
+ flags.mark_flag_as_required("token")
+ flags.mark_flag_as_required("run_id")
+ app.run(main)
diff --git a/scripts/gha/test_simulator.py b/scripts/gha/test_simulator.py
index 0cdd210c3..c56ff5892 100644
--- a/scripts/gha/test_simulator.py
+++ b/scripts/gha/test_simulator.py
@@ -322,7 +322,10 @@ def _build_ios_gameloop(gameloop_project, device_name, device_os):
"-scheme", "gameloop",
"build-for-testing",
"-destination", "platform=iOS Simulator,name=%s,OS=%s" % (device_name, device_os),
- "SYMROOT=%s" % output_path]
+ "SYMROOT=%s" % output_path,
+ 'CODE_SIGN_IDENTITY=""',
+ "CODE_SIGNING_REQUIRED=NO",
+ "CODE_SIGNING_ALLOWED=NO"]
logging.info("Building game-loop test: %s", " ".join(args))
subprocess.run(args=args, check=True)
@@ -345,7 +348,10 @@ def _build_tvos_gameloop(gameloop_project, device_name, device_os):
"-scheme", "gameloop_tvos",
"build-for-testing",
"-destination", "platform=tvOS Simulator,name=%s,OS=%s" % (device_name, device_os),
- "SYMROOT=%s" % output_path]
+ "SYMROOT=%s" % output_path,
+ 'CODE_SIGN_IDENTITY=""',
+ "CODE_SIGNING_REQUIRED=NO",
+ "CODE_SIGNING_ALLOWED=NO"]
logging.info("Building game-loop test: %s", " ".join(args))
subprocess.run(args=args, check=True)
@@ -387,10 +393,10 @@ def _shutdown_simulator():
def _create_and_boot_simulator(apple_platform, device_name, device_os):
"""Create a simulator locally. Will wait until this simulator booted."""
_shutdown_simulator()
- command = "xcrun xctrace list devices 2>&1 | grep \"%s (%s)\" | awk -F'[()]' '{print $4}'" % (device_name, device_os)
+ command = "xcrun xctrace list devices 2>&1 | grep \"%s Simulator (%s)\" | awk -F'[()]' '{print $4}'" % (device_name, device_os)
logging.info("Get test simulator: %s", command)
result = subprocess.Popen(command, universal_newlines=True, shell=True, stdout=subprocess.PIPE)
- device_id = result.stdout.read().strip()
+ device_id = result.stdout.readline().strip()
if not device_id:
# download and create device
diff --git a/scripts/gha/trigger_workflow.py b/scripts/gha/trigger_workflow.py
index 6c8ba4dbb..6ec2b1f4a 100644
--- a/scripts/gha/trigger_workflow.py
+++ b/scripts/gha/trigger_workflow.py
@@ -20,7 +20,7 @@
https://docs.github.com/en/rest/reference/actions#create-a-workflow-dispatch-event
Usage:
-python trigger_workflow.py -w workflow_filename -t github_token [-b branch_name]
+python3 trigger_workflow.py -w workflow_filename -t github_token [-b branch_name]
[-r git_repo_url] [-p -p ...]'
[-C curl_command]
@@ -38,6 +38,7 @@ def main():
args = parse_cmdline_args()
if args.branch is None:
args.branch=subprocess.check_output(['git', 'rev-parse', '--abbrev-ref', 'HEAD']).decode('utf-8').rstrip('\n')
+ if args.branch == 'HEAD': args.branch = 'main'
print('autodetected branch: %s' % args.branch)
if args.repo: # else use default firebase/firebase-unity-sdk repo
if not firebase_github.set_repo_url(args.repo):
@@ -52,13 +53,13 @@ def main():
print(f'request_url: {firebase_github.GITHUB_API_URL}/actions/workflows/{args.workflow}/dispatches')
print(f'request_body: ref: {args.branch}, inputs: {json_params}')
if args.dryrun:
- return(0)
+ exit(0)
print('Sending request to GitHub API...')
if not firebase_github.create_workflow_dispatch(args.token, args.workflow, args.branch, json_params):
print('%sFailed to trigger workflow %s' % (
'::error ::' if args.in_github_action else '', args.workflow))
- return(-1)
+ exit(1)
print('Success!')
time.sleep(args.sleep) # Give a few seconds for the job to become queued.
@@ -69,7 +70,7 @@ def main():
if "workflow_runs" in workflows:
for workflow in workflows['workflow_runs']:
# Use a heuristic to get the new workflow's run ID.
- # Must match the branch name, and be queued/in progress.
+ # Must match the branch name and be queued/in progress.
if (workflow['status'] in ('queued', 'in_progress') and
workflow['head_branch'] == args.branch):
run_id = workflow['id']
@@ -79,8 +80,8 @@ def main():
workflow_url = 'https://github.com/firebase/firebase-unity-sdk/actions/runs/%s' % (run_id)
else:
# Couldn't get a run ID, use a generic URL.
- workflow_url = '/%s/actions/workflows/%s?query=%s+%s' % (
- firebase_github.GITHUB_API_URL, args.workflow,
+ workflow_url = '%s/actions/workflows/%s?query=%s+%s' % (
+ 'https://github.com/firebase/firebase-unity-sdk', args.workflow,
urllib.parse.quote('event:workflow_dispatch', safe=''),
urllib.parse.quote('branch:'+args.branch, safe=''))
print('%sStarted workflow %s: %s' % ('::warning ::' if args.in_github_action else '',
diff --git a/unity_packer/debug_single_export_json/analytics.json b/unity_packer/debug_single_export_json/analytics.json
index af7033b09..b2afc6a3e 100644
--- a/unity_packer/debug_single_export_json/analytics.json
+++ b/unity_packer/debug_single_export_json/analytics.json
@@ -186,7 +186,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1",
+ "unity": "2020.1",
"dependencies": {
"com.google.external-dependency-manager": "1.2.177"
}
@@ -338,7 +338,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
}
diff --git a/unity_packer/debug_single_export_json/app_check.json b/unity_packer/debug_single_export_json/app_check.json
index 3f38648b5..af0e1287e 100644
--- a/unity_packer/debug_single_export_json/app_check.json
+++ b/unity_packer/debug_single_export_json/app_check.json
@@ -186,7 +186,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1",
+ "unity": "2020.1",
"dependencies": {
"com.google.external-dependency-manager": "1.2.177"
}
@@ -328,7 +328,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
}
diff --git a/unity_packer/debug_single_export_json/auth.json b/unity_packer/debug_single_export_json/auth.json
index 8c5b3631b..9551f64f7 100644
--- a/unity_packer/debug_single_export_json/auth.json
+++ b/unity_packer/debug_single_export_json/auth.json
@@ -186,7 +186,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1",
+ "unity": "2020.1",
"dependencies": {
"com.google.external-dependency-manager": "1.2.177"
}
@@ -337,7 +337,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
}
diff --git a/unity_packer/debug_single_export_json/crashlytics.json b/unity_packer/debug_single_export_json/crashlytics.json
index 22caad0cf..290495aac 100644
--- a/unity_packer/debug_single_export_json/crashlytics.json
+++ b/unity_packer/debug_single_export_json/crashlytics.json
@@ -186,7 +186,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1",
+ "unity": "2020.1",
"dependencies": {
"com.google.external-dependency-manager": "1.2.177"
}
@@ -334,7 +334,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
}
diff --git a/unity_packer/debug_single_export_json/database.json b/unity_packer/debug_single_export_json/database.json
index 104f2fecb..edf185468 100644
--- a/unity_packer/debug_single_export_json/database.json
+++ b/unity_packer/debug_single_export_json/database.json
@@ -186,7 +186,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1",
+ "unity": "2020.1",
"dependencies": {
"com.google.external-dependency-manager": "1.2.177"
}
@@ -351,7 +351,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
}
diff --git a/unity_packer/debug_single_export_json/dynamic_links.json b/unity_packer/debug_single_export_json/dynamic_links.json
index 91dc5ac55..2bf3bac82 100644
--- a/unity_packer/debug_single_export_json/dynamic_links.json
+++ b/unity_packer/debug_single_export_json/dynamic_links.json
@@ -186,7 +186,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1",
+ "unity": "2020.1",
"dependencies": {
"com.google.external-dependency-manager": "1.2.177"
}
@@ -310,7 +310,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
}
diff --git a/unity_packer/debug_single_export_json/firestore.json b/unity_packer/debug_single_export_json/firestore.json
index d5d730cff..67bbe6711 100644
--- a/unity_packer/debug_single_export_json/firestore.json
+++ b/unity_packer/debug_single_export_json/firestore.json
@@ -186,7 +186,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1",
+ "unity": "2020.1",
"dependencies": {
"com.google.external-dependency-manager": "1.2.177"
}
@@ -333,7 +333,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
}
diff --git a/unity_packer/debug_single_export_json/functions.json b/unity_packer/debug_single_export_json/functions.json
index 438583d26..6b3c6ed79 100644
--- a/unity_packer/debug_single_export_json/functions.json
+++ b/unity_packer/debug_single_export_json/functions.json
@@ -186,7 +186,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1",
+ "unity": "2020.1",
"dependencies": {
"com.google.external-dependency-manager": "1.2.177"
}
@@ -332,7 +332,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
}
diff --git a/unity_packer/debug_single_export_json/installations.json b/unity_packer/debug_single_export_json/installations.json
index 2bb1d956e..d5fb29bdc 100644
--- a/unity_packer/debug_single_export_json/installations.json
+++ b/unity_packer/debug_single_export_json/installations.json
@@ -186,7 +186,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1",
+ "unity": "2020.1",
"dependencies": {
"com.google.external-dependency-manager": "1.2.177"
}
@@ -332,7 +332,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
}
diff --git a/unity_packer/debug_single_export_json/messaging.json b/unity_packer/debug_single_export_json/messaging.json
index 14b34abdc..e3e086e9e 100644
--- a/unity_packer/debug_single_export_json/messaging.json
+++ b/unity_packer/debug_single_export_json/messaging.json
@@ -186,7 +186,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1",
+ "unity": "2020.1",
"dependencies": {
"com.google.external-dependency-manager": "1.2.177"
}
@@ -370,7 +370,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
}
diff --git a/unity_packer/debug_single_export_json/remote_config.json b/unity_packer/debug_single_export_json/remote_config.json
index 6d605a40e..d0bc265ea 100644
--- a/unity_packer/debug_single_export_json/remote_config.json
+++ b/unity_packer/debug_single_export_json/remote_config.json
@@ -186,7 +186,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1",
+ "unity": "2020.1",
"dependencies": {
"com.google.external-dependency-manager": "1.2.177"
}
@@ -337,7 +337,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
}
diff --git a/unity_packer/debug_single_export_json/storage.json b/unity_packer/debug_single_export_json/storage.json
index 26fc79845..8089ef5b4 100644
--- a/unity_packer/debug_single_export_json/storage.json
+++ b/unity_packer/debug_single_export_json/storage.json
@@ -186,7 +186,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1",
+ "unity": "2020.1",
"dependencies": {
"com.google.external-dependency-manager": "1.2.177"
}
@@ -355,7 +355,7 @@
"export_upm": 1,
"upm_package_config": {
"manifest": {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
}
diff --git a/unity_packer/exports.json b/unity_packer/exports.json
index 6bb82400d..55e36ec28 100644
--- a/unity_packer/exports.json
+++ b/unity_packer/exports.json
@@ -145,7 +145,7 @@
"export_upm": 1,
"upm_package_config" : {
"manifest" : {
- "unity": "2019.1",
+ "unity": "2020.1",
"dependencies": {
"com.google.external-dependency-manager" : "1.2.177"
}
@@ -271,7 +271,7 @@
"export_upm": 1,
"upm_package_config" : {
"manifest" : {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
},
@@ -375,7 +375,7 @@
"export_upm": 1,
"upm_package_config" : {
"manifest" : {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
},
@@ -481,7 +481,7 @@
"export_upm": 1,
"upm_package_config" : {
"manifest" : {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
},
@@ -566,7 +566,7 @@
"export_upm": 1,
"upm_package_config" : {
"manifest" : {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
},
@@ -669,7 +669,7 @@
"export_upm": 1,
"upm_package_config" : {
"manifest" : {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
},
@@ -802,7 +802,7 @@
"export_upm": 1,
"upm_package_config" : {
"manifest" : {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
},
@@ -916,7 +916,7 @@
"export_upm": 1,
"upm_package_config" : {
"manifest" : {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
},
@@ -1017,7 +1017,7 @@
"export_upm": 1,
"upm_package_config" : {
"manifest" : {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
},
@@ -1131,7 +1131,7 @@
"export_upm": 1,
"upm_package_config" : {
"manifest" : {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
},
@@ -1233,7 +1233,7 @@
"export_upm": 1,
"upm_package_config" : {
"manifest" : {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
},
@@ -1336,7 +1336,7 @@
"export_upm": 1,
"upm_package_config" : {
"manifest" : {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
},
@@ -1438,7 +1438,7 @@
"export_upm": 1,
"upm_package_config" : {
"manifest" : {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
},
@@ -1542,7 +1542,7 @@
"export_upm": 1,
"upm_package_config" : {
"manifest" : {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
},
@@ -1640,7 +1640,7 @@
"export_upm": 1,
"upm_package_config" : {
"manifest" : {
- "unity": "2019.1"
+ "unity": "2020.1"
}
}
}
diff --git a/unity_packer/guids.json b/unity_packer/guids.json
index 96c3df998..7347cafad 100644
--- a/unity_packer/guids.json
+++ b/unity_packer/guids.json
@@ -1001,6 +1001,178 @@
"Firebase/m2repository/com/google/firebase/firebase-storage-unity/11.8.0/firebase-storage-unity-11.8.0.pom": "0f5d2957cfef4573afb75d25c84ef948",
"Firebase/m2repository/com/google/firebase/firebase-storage-unity/11.8.0/firebase-storage-unity-11.8.0.srcaar": "e44c10d20581422489d0e04960dbbe11"
},
+ "11.8.1": {
+ "Firebase/Editor/FirebaseAnalytics_version-11.8.1_manifest.txt": "391026f529b24d708464048a6d9cf732",
+ "Firebase/Editor/FirebaseAppCheck_version-11.8.1_manifest.txt": "d6035a8fd4594873bf9560501a7bb522",
+ "Firebase/Editor/FirebaseAuth_version-11.8.1_manifest.txt": "ae2f5f38ce224d60a522cfa28032c2f2",
+ "Firebase/Editor/FirebaseCrashlytics_version-11.8.1_manifest.txt": "46e0f7048e9f4fbaa7efc4aa17b69d20",
+ "Firebase/Editor/FirebaseDatabase_version-11.8.1_manifest.txt": "aa2eb9bdaafe4f119458c569735104e4",
+ "Firebase/Editor/FirebaseDynamicLinks_version-11.8.1_manifest.txt": "94957fc8cf8b41968083a1e6be6e25bd",
+ "Firebase/Editor/FirebaseFirestore_version-11.8.1_manifest.txt": "c3d9c570e6ae43618137149043a408e1",
+ "Firebase/Editor/FirebaseFunctions_version-11.8.1_manifest.txt": "9f2622caf4394b1496d3c670206bc76b",
+ "Firebase/Editor/FirebaseInstallations_version-11.8.1_manifest.txt": "aec02ff7c57042fcafc532ab56f77e30",
+ "Firebase/Editor/FirebaseMessaging_version-11.8.1_manifest.txt": "54a0b0d2e4a64bdabc4489ba93bf4415",
+ "Firebase/Editor/FirebaseRemoteConfig_version-11.8.1_manifest.txt": "c4cfd89615934e9d9ac26516ba879710",
+ "Firebase/Editor/FirebaseStorage_version-11.8.1_manifest.txt": "7834d8ce31654a55ace1d01f84794fe9",
+ "Firebase/Plugins/x86_64/FirebaseCppApp-11_8_1.bundle": "ef0e7d01295a42c090fcc28cbeb7ed33",
+ "Firebase/Plugins/x86_64/FirebaseCppApp-11_8_1.dll": "b0b58e755ca84caa9cce4aa0461408d8",
+ "Firebase/Plugins/x86_64/FirebaseCppApp-11_8_1.so": "0bf13bf09e2b4ef5a9ff6ff3e161e022",
+ "Firebase/m2repository/com/google/firebase/firebase-analytics-unity/11.8.1/firebase-analytics-unity-11.8.1.pom": "81a77f46dee547afb702419209f6c20c",
+ "Firebase/m2repository/com/google/firebase/firebase-analytics-unity/11.8.1/firebase-analytics-unity-11.8.1.srcaar": "a34d11fe00294bbc957e806119ecf1ca",
+ "Firebase/m2repository/com/google/firebase/firebase-app-unity/11.8.1/firebase-app-unity-11.8.1.pom": "8fea22b253654549a97a43dc66611152",
+ "Firebase/m2repository/com/google/firebase/firebase-app-unity/11.8.1/firebase-app-unity-11.8.1.srcaar": "2fef149c9f7b49198373b6058468d91d",
+ "Firebase/m2repository/com/google/firebase/firebase-appcheck-unity/11.8.1/firebase-appcheck-unity-11.8.1.pom": "c3aab042c347425b9ea0b5aa179eaafa",
+ "Firebase/m2repository/com/google/firebase/firebase-appcheck-unity/11.8.1/firebase-appcheck-unity-11.8.1.srcaar": "67d8f1c790e847f79794388e937acd1e",
+ "Firebase/m2repository/com/google/firebase/firebase-auth-unity/11.8.1/firebase-auth-unity-11.8.1.pom": "cf6befe6a83e48b285825764386899ac",
+ "Firebase/m2repository/com/google/firebase/firebase-auth-unity/11.8.1/firebase-auth-unity-11.8.1.srcaar": "8e4641b569a048e68d80c1e4e972d9db",
+ "Firebase/m2repository/com/google/firebase/firebase-config-unity/11.8.1/firebase-config-unity-11.8.1.pom": "c76c287375874e86a308f39a5297dcb0",
+ "Firebase/m2repository/com/google/firebase/firebase-config-unity/11.8.1/firebase-config-unity-11.8.1.srcaar": "e8944438ce1e408a887ae2d689daa80c",
+ "Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/11.8.1/firebase-crashlytics-unity-11.8.1.pom": "4aee705f3ca545a0995ff1479d17c6bb",
+ "Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/11.8.1/firebase-crashlytics-unity-11.8.1.srcaar": "8a622a7ab4ff499297477b7ca4e2272d",
+ "Firebase/m2repository/com/google/firebase/firebase-database-unity/11.8.1/firebase-database-unity-11.8.1.pom": "ee165f5e907e4ae58ffa569d4016d73c",
+ "Firebase/m2repository/com/google/firebase/firebase-database-unity/11.8.1/firebase-database-unity-11.8.1.srcaar": "236f272dc42c4b0ca124ed24042743b9",
+ "Firebase/m2repository/com/google/firebase/firebase-dynamic-links-unity/11.8.1/firebase-dynamic-links-unity-11.8.1.pom": "0ebf654795794141aac9930c4eac8594",
+ "Firebase/m2repository/com/google/firebase/firebase-dynamic-links-unity/11.8.1/firebase-dynamic-links-unity-11.8.1.srcaar": "4fe6aa9729514c049f7f4c9c0ad05666",
+ "Firebase/m2repository/com/google/firebase/firebase-firestore-unity/11.8.1/firebase-firestore-unity-11.8.1.pom": "7cc6389074224299882110fb209ec1d6",
+ "Firebase/m2repository/com/google/firebase/firebase-firestore-unity/11.8.1/firebase-firestore-unity-11.8.1.srcaar": "50f1b0974a62498f98c738a5ffb464f8",
+ "Firebase/m2repository/com/google/firebase/firebase-functions-unity/11.8.1/firebase-functions-unity-11.8.1.pom": "5c44c8e15dcf41b0ae718f35d074a107",
+ "Firebase/m2repository/com/google/firebase/firebase-functions-unity/11.8.1/firebase-functions-unity-11.8.1.srcaar": "22b32e184c6c450ab5d2ab6a56c2ca19",
+ "Firebase/m2repository/com/google/firebase/firebase-installations-unity/11.8.1/firebase-installations-unity-11.8.1.pom": "4704838d6b7e4e4b9fc3faf61f3cce2d",
+ "Firebase/m2repository/com/google/firebase/firebase-installations-unity/11.8.1/firebase-installations-unity-11.8.1.srcaar": "68b43eefc7694c9ab607ba115ca175ca",
+ "Firebase/m2repository/com/google/firebase/firebase-messaging-unity/11.8.1/firebase-messaging-unity-11.8.1.pom": "1f166e85c4074845b7f16131e145f68e",
+ "Firebase/m2repository/com/google/firebase/firebase-messaging-unity/11.8.1/firebase-messaging-unity-11.8.1.srcaar": "01bbadca5cfb4131a72d2248dd4a0e54",
+ "Firebase/m2repository/com/google/firebase/firebase-storage-unity/11.8.1/firebase-storage-unity-11.8.1.pom": "d8748498a18a49448e03434a40b16f20",
+ "Firebase/m2repository/com/google/firebase/firebase-storage-unity/11.8.1/firebase-storage-unity-11.8.1.srcaar": "39dfb87bf211471dae5f490bda661db5"
+ },
+ "11.9.0": {
+ "Firebase/Editor/FirebaseAnalytics_version-11.9.0_manifest.txt": "c16d53d6369a49e0a3f16955c4405ba3",
+ "Firebase/Editor/FirebaseAppCheck_version-11.9.0_manifest.txt": "5de6932edd864169b26efdcd5365d41e",
+ "Firebase/Editor/FirebaseAuth_version-11.9.0_manifest.txt": "99b47b08776c4cdca0c86d9290a010e2",
+ "Firebase/Editor/FirebaseCrashlytics_version-11.9.0_manifest.txt": "9e91c20422a54f07b7f1e8eb77d4448d",
+ "Firebase/Editor/FirebaseDatabase_version-11.9.0_manifest.txt": "04eb681b93034840a92cda947ce0120b",
+ "Firebase/Editor/FirebaseDynamicLinks_version-11.9.0_manifest.txt": "624e521da8cf4d2fbf02b050e5df25d0",
+ "Firebase/Editor/FirebaseFirestore_version-11.9.0_manifest.txt": "98afac869f224a3ca0864b08408815b3",
+ "Firebase/Editor/FirebaseFunctions_version-11.9.0_manifest.txt": "c27fc8b54d224ca38e33e2b6d1a5a082",
+ "Firebase/Editor/FirebaseInstallations_version-11.9.0_manifest.txt": "73428282ed794768ae84b5a4e7bfc56e",
+ "Firebase/Editor/FirebaseMessaging_version-11.9.0_manifest.txt": "bba89196a2554135b7edac9f41b48694",
+ "Firebase/Editor/FirebaseRemoteConfig_version-11.9.0_manifest.txt": "8c8b20b3ca3d48edb7b1090edb786c27",
+ "Firebase/Editor/FirebaseStorage_version-11.9.0_manifest.txt": "350465cb3de7400a8214e333943195da",
+ "Firebase/Plugins/x86_64/FirebaseCppApp-11_9_0.bundle": "34c175e2b83a486aae40203e871f26f2",
+ "Firebase/Plugins/x86_64/FirebaseCppApp-11_9_0.dll": "1b0fb15d662e40cba93dd3d704b86896",
+ "Firebase/Plugins/x86_64/FirebaseCppApp-11_9_0.so": "2104cb3b55ad42d6b5e62531551c6a16",
+ "Firebase/m2repository/com/google/firebase/firebase-analytics-unity/11.9.0/firebase-analytics-unity-11.9.0.pom": "82694266f3494b68b5290a28572d5fa6",
+ "Firebase/m2repository/com/google/firebase/firebase-analytics-unity/11.9.0/firebase-analytics-unity-11.9.0.srcaar": "ab9388572fe746a48ac4aa02d6d35df4",
+ "Firebase/m2repository/com/google/firebase/firebase-app-unity/11.9.0/firebase-app-unity-11.9.0.pom": "8fdad9b2ad35409b9a010679dc99b68d",
+ "Firebase/m2repository/com/google/firebase/firebase-app-unity/11.9.0/firebase-app-unity-11.9.0.srcaar": "c5994d273e5447669109947c0c44b01e",
+ "Firebase/m2repository/com/google/firebase/firebase-appcheck-unity/11.9.0/firebase-appcheck-unity-11.9.0.pom": "b58e7b5e1ec7413b9df994b23ae169e8",
+ "Firebase/m2repository/com/google/firebase/firebase-appcheck-unity/11.9.0/firebase-appcheck-unity-11.9.0.srcaar": "e699544ad8394d36a2483a7f465209cc",
+ "Firebase/m2repository/com/google/firebase/firebase-auth-unity/11.9.0/firebase-auth-unity-11.9.0.pom": "095d7bcced234d5d8bbc055e08af7469",
+ "Firebase/m2repository/com/google/firebase/firebase-auth-unity/11.9.0/firebase-auth-unity-11.9.0.srcaar": "7274c9d6d05c4dcdb37ca78f16971e4c",
+ "Firebase/m2repository/com/google/firebase/firebase-config-unity/11.9.0/firebase-config-unity-11.9.0.pom": "657ed363b65b41128d0aa16753cd52d8",
+ "Firebase/m2repository/com/google/firebase/firebase-config-unity/11.9.0/firebase-config-unity-11.9.0.srcaar": "b472c98de070475ea98614a40f7ceb60",
+ "Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/11.9.0/firebase-crashlytics-unity-11.9.0.pom": "335e6b7d180441cbb30ec9e8ba394aa9",
+ "Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/11.9.0/firebase-crashlytics-unity-11.9.0.srcaar": "04b0577faf384b12854145d9b1df9c16",
+ "Firebase/m2repository/com/google/firebase/firebase-database-unity/11.9.0/firebase-database-unity-11.9.0.pom": "a592837b908e406fb0f74ecc0ecddcb9",
+ "Firebase/m2repository/com/google/firebase/firebase-database-unity/11.9.0/firebase-database-unity-11.9.0.srcaar": "66a8a5f2c72c4f9a9493d5c0841654c7",
+ "Firebase/m2repository/com/google/firebase/firebase-dynamic-links-unity/11.9.0/firebase-dynamic-links-unity-11.9.0.pom": "543ba4aabf70468eaa2860ecfff55a48",
+ "Firebase/m2repository/com/google/firebase/firebase-dynamic-links-unity/11.9.0/firebase-dynamic-links-unity-11.9.0.srcaar": "a980bc50cc2444f0a27c168cdb14a1b3",
+ "Firebase/m2repository/com/google/firebase/firebase-firestore-unity/11.9.0/firebase-firestore-unity-11.9.0.pom": "33dde6a3d29a4582b6557555e31cc202",
+ "Firebase/m2repository/com/google/firebase/firebase-firestore-unity/11.9.0/firebase-firestore-unity-11.9.0.srcaar": "75ea57eb84a9430aa85ada7cde4bccd7",
+ "Firebase/m2repository/com/google/firebase/firebase-functions-unity/11.9.0/firebase-functions-unity-11.9.0.pom": "89a1d820c97b4d0e805cf91640fc0d52",
+ "Firebase/m2repository/com/google/firebase/firebase-functions-unity/11.9.0/firebase-functions-unity-11.9.0.srcaar": "9b84ab9edc0d46f8bee92d3b158c9578",
+ "Firebase/m2repository/com/google/firebase/firebase-installations-unity/11.9.0/firebase-installations-unity-11.9.0.pom": "4c295ebcf91e42a3be2cf937ce348e25",
+ "Firebase/m2repository/com/google/firebase/firebase-installations-unity/11.9.0/firebase-installations-unity-11.9.0.srcaar": "3671c9b380f04c018fe7792e6474802a",
+ "Firebase/m2repository/com/google/firebase/firebase-messaging-unity/11.9.0/firebase-messaging-unity-11.9.0.pom": "76317bad0e0345a79eac47bc19580727",
+ "Firebase/m2repository/com/google/firebase/firebase-messaging-unity/11.9.0/firebase-messaging-unity-11.9.0.srcaar": "d7d36be3f6e5403a805c1ed3efcaf57c",
+ "Firebase/m2repository/com/google/firebase/firebase-storage-unity/11.9.0/firebase-storage-unity-11.9.0.pom": "b0108f34961742d9be211188f6dbf946",
+ "Firebase/m2repository/com/google/firebase/firebase-storage-unity/11.9.0/firebase-storage-unity-11.9.0.srcaar": "c0716eda2011457abafb685fb51194a2"
+ },
+ "12.0.0": {
+ "Firebase/Editor/FirebaseAnalytics_version-12.0.0_manifest.txt": "fd1985c3b3f94d62a89292d705c52527",
+ "Firebase/Editor/FirebaseAppCheck_version-12.0.0_manifest.txt": "659d33f6c055419d8152810916463a26",
+ "Firebase/Editor/FirebaseAuth_version-12.0.0_manifest.txt": "2ff051acf13f4744a8f3f8dee69f8ef5",
+ "Firebase/Editor/FirebaseCrashlytics_version-12.0.0_manifest.txt": "b77effb37db7490a9a1068a27150ef4e",
+ "Firebase/Editor/FirebaseDatabase_version-12.0.0_manifest.txt": "e6f720738f4143a0b860e13eca491581",
+ "Firebase/Editor/FirebaseDynamicLinks_version-12.0.0_manifest.txt": "85c2428f12154709bede64fbbcea9e38",
+ "Firebase/Editor/FirebaseFirestore_version-12.0.0_manifest.txt": "67628c2eb7d84dbab376d8d5dcc4e1b0",
+ "Firebase/Editor/FirebaseFunctions_version-12.0.0_manifest.txt": "3d3e22daf1c746faa2048471681d6596",
+ "Firebase/Editor/FirebaseInstallations_version-12.0.0_manifest.txt": "466d765d69c94f11abdcfd63b0947d3e",
+ "Firebase/Editor/FirebaseMessaging_version-12.0.0_manifest.txt": "8c76ca88a3ad429ebde8456ab144ed32",
+ "Firebase/Editor/FirebaseRemoteConfig_version-12.0.0_manifest.txt": "8a356e7a440442dc8e94690687b1a47c",
+ "Firebase/Editor/FirebaseStorage_version-12.0.0_manifest.txt": "7e6300d6764345d18875f990de8e4a82",
+ "Firebase/Plugins/x86_64/FirebaseCppApp-12_0_0.bundle": "6ad99ac4495c43129b95a4570611f782",
+ "Firebase/Plugins/x86_64/FirebaseCppApp-12_0_0.dll": "1de9fc935cdf4a1e8f6f40531134424e",
+ "Firebase/Plugins/x86_64/FirebaseCppApp-12_0_0.so": "67322a67d8cd4be99e1f61482ac2c8b4",
+ "Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.0.0/firebase-analytics-unity-12.0.0.pom": "4c6cab3acf7748d7b3a17b15edebae2b",
+ "Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.0.0/firebase-analytics-unity-12.0.0.srcaar": "7750e8194aaf42d4a2d2d0a028fa47fd",
+ "Firebase/m2repository/com/google/firebase/firebase-app-unity/12.0.0/firebase-app-unity-12.0.0.pom": "93f50424394f461eb4453bb358b2bb53",
+ "Firebase/m2repository/com/google/firebase/firebase-app-unity/12.0.0/firebase-app-unity-12.0.0.srcaar": "4063709f1922440ca2210232e2119095",
+ "Firebase/m2repository/com/google/firebase/firebase-appcheck-unity/12.0.0/firebase-appcheck-unity-12.0.0.pom": "d529bafc0dcd43c190c7b4dc65cea884",
+ "Firebase/m2repository/com/google/firebase/firebase-appcheck-unity/12.0.0/firebase-appcheck-unity-12.0.0.srcaar": "adcc2f8e392441a1899a37df9f2e3928",
+ "Firebase/m2repository/com/google/firebase/firebase-auth-unity/12.0.0/firebase-auth-unity-12.0.0.pom": "1b60b542ac654b208df33ecb9fac7812",
+ "Firebase/m2repository/com/google/firebase/firebase-auth-unity/12.0.0/firebase-auth-unity-12.0.0.srcaar": "acdd37577e5d48bb94cc6547174392dd",
+ "Firebase/m2repository/com/google/firebase/firebase-config-unity/12.0.0/firebase-config-unity-12.0.0.pom": "06efc51386e3419abc1c5da72a3acaaa",
+ "Firebase/m2repository/com/google/firebase/firebase-config-unity/12.0.0/firebase-config-unity-12.0.0.srcaar": "d8d10c4332554b48b61411b8c513e6e6",
+ "Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.0.0/firebase-crashlytics-unity-12.0.0.pom": "e7a05826d6a64e8a9b4fcfc151f5620d",
+ "Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.0.0/firebase-crashlytics-unity-12.0.0.srcaar": "bb6f0dfc3ad043f1a012ab6a95da9930",
+ "Firebase/m2repository/com/google/firebase/firebase-database-unity/12.0.0/firebase-database-unity-12.0.0.pom": "78332c288d2e434db93210cfa92052e8",
+ "Firebase/m2repository/com/google/firebase/firebase-database-unity/12.0.0/firebase-database-unity-12.0.0.srcaar": "15efc7114e924fa5829b98800f8de08f",
+ "Firebase/m2repository/com/google/firebase/firebase-dynamic-links-unity/12.0.0/firebase-dynamic-links-unity-12.0.0.pom": "dc3c4e10a24642cfa15e7e56752c997d",
+ "Firebase/m2repository/com/google/firebase/firebase-dynamic-links-unity/12.0.0/firebase-dynamic-links-unity-12.0.0.srcaar": "bf8aacb6268541399721a1a9051e1bea",
+ "Firebase/m2repository/com/google/firebase/firebase-firestore-unity/12.0.0/firebase-firestore-unity-12.0.0.pom": "fddbfaefef6948098626184e36c6c4c5",
+ "Firebase/m2repository/com/google/firebase/firebase-firestore-unity/12.0.0/firebase-firestore-unity-12.0.0.srcaar": "0857e32bf76f4ab29b6ecb4b02fad0a2",
+ "Firebase/m2repository/com/google/firebase/firebase-functions-unity/12.0.0/firebase-functions-unity-12.0.0.pom": "2172ad72f4e240f9aba21fe3f6c6be9f",
+ "Firebase/m2repository/com/google/firebase/firebase-functions-unity/12.0.0/firebase-functions-unity-12.0.0.srcaar": "f6856b25d5664caea523f7176a3613a3",
+ "Firebase/m2repository/com/google/firebase/firebase-installations-unity/12.0.0/firebase-installations-unity-12.0.0.pom": "c7b2d5b74e394ed597cb8ef5bc461991",
+ "Firebase/m2repository/com/google/firebase/firebase-installations-unity/12.0.0/firebase-installations-unity-12.0.0.srcaar": "34e371a2bd6e476dabaa11ff971daef3",
+ "Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.0.0/firebase-messaging-unity-12.0.0.pom": "7b3afeee77d44ca5b8322e8429d40c29",
+ "Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.0.0/firebase-messaging-unity-12.0.0.srcaar": "2b6972c53d4043f090db89d36e85cca2",
+ "Firebase/m2repository/com/google/firebase/firebase-storage-unity/12.0.0/firebase-storage-unity-12.0.0.pom": "3d88a456d2be444da7deada87f19d502",
+ "Firebase/m2repository/com/google/firebase/firebase-storage-unity/12.0.0/firebase-storage-unity-12.0.0.srcaar": "8096b403f95146ce8d66a4fd71d39dfc"
+ },
+ "12.1.0": {
+ "Firebase/Editor/FirebaseAnalytics_version-12.1.0_manifest.txt": "a4be5203a9fc4a898619c106029e133f",
+ "Firebase/Editor/FirebaseAppCheck_version-12.1.0_manifest.txt": "91c23bb8402042e39dbec64526973dec",
+ "Firebase/Editor/FirebaseAuth_version-12.1.0_manifest.txt": "ffe380bcbc974e429ddc836472034d69",
+ "Firebase/Editor/FirebaseCrashlytics_version-12.1.0_manifest.txt": "68c6823d7cc348e0b82faef62ba63393",
+ "Firebase/Editor/FirebaseDatabase_version-12.1.0_manifest.txt": "31d1268e97284b9495ab04742957b95e",
+ "Firebase/Editor/FirebaseDynamicLinks_version-12.1.0_manifest.txt": "e2e0c56e4a26440188bbe3244d2e504d",
+ "Firebase/Editor/FirebaseFirestore_version-12.1.0_manifest.txt": "271fcfafaebb4b9f97c3541ce01a9e49",
+ "Firebase/Editor/FirebaseFunctions_version-12.1.0_manifest.txt": "1cc73ea20cb843db889313660ce7ff1c",
+ "Firebase/Editor/FirebaseInstallations_version-12.1.0_manifest.txt": "519c784b3ca245f9ab0aa95e1cf94ca1",
+ "Firebase/Editor/FirebaseMessaging_version-12.1.0_manifest.txt": "335bdd1845c743dda25d1773b725590a",
+ "Firebase/Editor/FirebaseRemoteConfig_version-12.1.0_manifest.txt": "97270a8b058444309e88e22cd6a9c3b6",
+ "Firebase/Editor/FirebaseStorage_version-12.1.0_manifest.txt": "82e6092c33db44ada08b5cfcc72eec95",
+ "Firebase/Plugins/x86_64/FirebaseCppApp-12_1_0.bundle": "641b9c94e57d4258994035bf1e6a8e9f",
+ "Firebase/Plugins/x86_64/FirebaseCppApp-12_1_0.dll": "ad5d593406854a5a9222075b5b5ad210",
+ "Firebase/Plugins/x86_64/FirebaseCppApp-12_1_0.so": "1c395439e78945a9b2b5d9af1252676e",
+ "Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.1.0/firebase-analytics-unity-12.1.0.pom": "3fdc4e15d2014c0b8ec1bc3f5bc1103f",
+ "Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.1.0/firebase-analytics-unity-12.1.0.srcaar": "1c14100b5ef243fdba06626ea4dae097",
+ "Firebase/m2repository/com/google/firebase/firebase-app-unity/12.1.0/firebase-app-unity-12.1.0.pom": "3fa35f47fc594d579e04aff3e6971256",
+ "Firebase/m2repository/com/google/firebase/firebase-app-unity/12.1.0/firebase-app-unity-12.1.0.srcaar": "afe52f3a62954edcb74226ae077029ad",
+ "Firebase/m2repository/com/google/firebase/firebase-appcheck-unity/12.1.0/firebase-appcheck-unity-12.1.0.pom": "469bdf42544c4f31b2c8e674e43fe46a",
+ "Firebase/m2repository/com/google/firebase/firebase-appcheck-unity/12.1.0/firebase-appcheck-unity-12.1.0.srcaar": "0b8560378e094c1994cba001c2e6ba00",
+ "Firebase/m2repository/com/google/firebase/firebase-auth-unity/12.1.0/firebase-auth-unity-12.1.0.pom": "9d88572b5a1f4aa79713804fb8808257",
+ "Firebase/m2repository/com/google/firebase/firebase-auth-unity/12.1.0/firebase-auth-unity-12.1.0.srcaar": "c4fb4b5afa2843e9a28554cbee26ab0d",
+ "Firebase/m2repository/com/google/firebase/firebase-config-unity/12.1.0/firebase-config-unity-12.1.0.pom": "9b32003b8ff94f1fbb976c988650a683",
+ "Firebase/m2repository/com/google/firebase/firebase-config-unity/12.1.0/firebase-config-unity-12.1.0.srcaar": "61f0b260c8d944c59f404eb6a7c9b1d9",
+ "Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.1.0/firebase-crashlytics-unity-12.1.0.pom": "d01b3def50d148e798ab01b6eeeed7ad",
+ "Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.1.0/firebase-crashlytics-unity-12.1.0.srcaar": "d578940f1a1743db9e2379eab68359bf",
+ "Firebase/m2repository/com/google/firebase/firebase-database-unity/12.1.0/firebase-database-unity-12.1.0.pom": "b4b02020ab834c37b59f055d3a86e0c1",
+ "Firebase/m2repository/com/google/firebase/firebase-database-unity/12.1.0/firebase-database-unity-12.1.0.srcaar": "b7fb0d24a0c448bfbe95aab9c09d7239",
+ "Firebase/m2repository/com/google/firebase/firebase-dynamic-links-unity/12.1.0/firebase-dynamic-links-unity-12.1.0.pom": "7b4fbba640014604a5a17e6577356ab0",
+ "Firebase/m2repository/com/google/firebase/firebase-dynamic-links-unity/12.1.0/firebase-dynamic-links-unity-12.1.0.srcaar": "93f039a2eac84b4dada94d3b816bb634",
+ "Firebase/m2repository/com/google/firebase/firebase-firestore-unity/12.1.0/firebase-firestore-unity-12.1.0.pom": "f86cb9cdcf674484a55e4504a972180f",
+ "Firebase/m2repository/com/google/firebase/firebase-firestore-unity/12.1.0/firebase-firestore-unity-12.1.0.srcaar": "26b2058eefdc4d29895243e78e6fc559",
+ "Firebase/m2repository/com/google/firebase/firebase-functions-unity/12.1.0/firebase-functions-unity-12.1.0.pom": "f212ab5035694b76a49fbb127d8d3c7e",
+ "Firebase/m2repository/com/google/firebase/firebase-functions-unity/12.1.0/firebase-functions-unity-12.1.0.srcaar": "f7724fa10689450a9988d8749d282411",
+ "Firebase/m2repository/com/google/firebase/firebase-installations-unity/12.1.0/firebase-installations-unity-12.1.0.pom": "cff02a2936d94500b357330caa6cf219",
+ "Firebase/m2repository/com/google/firebase/firebase-installations-unity/12.1.0/firebase-installations-unity-12.1.0.srcaar": "ddf183205c2744329bdfb459db7b1b1b",
+ "Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.1.0/firebase-messaging-unity-12.1.0.pom": "f9c0e710c0f54ef685a2869ed4690b49",
+ "Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.1.0/firebase-messaging-unity-12.1.0.srcaar": "b8759d00e13b46538c71e2666d2842b7",
+ "Firebase/m2repository/com/google/firebase/firebase-storage-unity/12.1.0/firebase-storage-unity-12.1.0.pom": "8f47ce58e49a4898a22af7230ed80d62",
+ "Firebase/m2repository/com/google/firebase/firebase-storage-unity/12.1.0/firebase-storage-unity-12.1.0.srcaar": "06edba59f2a343ea8e82e95759ed76c8"
+ },
"3.0.0": {
"Firebase/Editor/FirebaseAnalytics_v3.0.0_manifest.txt": "13c9ba8e35174de78ad7ca9a48cba9f0",
"Firebase/Editor/FirebaseAuth_v3.0.0_manifest.txt": "eaa139bec35e491da653b612e67134ad",