From 3343a19d173a3c9e1fdaca9ac398c07a72a59bbd Mon Sep 17 00:00:00 2001 From: "firebase-workflow-trigger[bot]" <80733318+firebase-workflow-trigger[bot]@users.noreply.github.com> Date: Thu, 28 Mar 2024 12:59:35 -0700 Subject: [PATCH 01/33] Update Unity SDK dependencies - Thu Mar 28 2024 (#978) * Update Unity SDK dependencies - Thu Mar 28 2024 > Created by [Firebase Unity SDK build workflow](https://github.com/firebase/firebase-unity-sdk/actions/runs/8471961967). * Update Guids ID * Update readme, and undo Android update --------- Co-authored-by: firebase-workflow-trigger-bot Co-authored-by: a-maurice --- cmake/firebase_unity_version.cmake | 2 +- docs/readme.md | 5 ++++ unity_packer/guids.json | 43 ++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/cmake/firebase_unity_version.cmake b/cmake/firebase_unity_version.cmake index 51d639a5..591f5ad9 100644 --- a/cmake/firebase_unity_version.cmake +++ b/cmake/firebase_unity_version.cmake @@ -14,7 +14,7 @@ # 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 "11.8.1" CACHE STRING "The version of the Unity SDK, used in the names of files.") set(FIREBASE_IOS_POD_VERSION "10.22.0" diff --git a/docs/readme.md b/docs/readme.md index 525b0e38..84a65e66 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -71,6 +71,11 @@ Support Release Notes ------------- +### 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/unity_packer/guids.json b/unity_packer/guids.json index 96c3df99..7c53b2c3 100644 --- a/unity_packer/guids.json +++ b/unity_packer/guids.json @@ -1001,6 +1001,49 @@ "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" + }, "3.0.0": { "Firebase/Editor/FirebaseAnalytics_v3.0.0_manifest.txt": "13c9ba8e35174de78ad7ca9a48cba9f0", "Firebase/Editor/FirebaseAuth_v3.0.0_manifest.txt": "eaa139bec35e491da653b612e67134ad", From c189395db6db41c1470f2bf8660a5b4f26a464ce Mon Sep 17 00:00:00 2001 From: a-maurice Date: Thu, 28 Mar 2024 13:17:09 -0700 Subject: [PATCH 02/33] Remove Functions testapp package-lock file (#979) --- .../.functions/functions/package-lock.json | 8246 ----------------- .../functions/package-lock.json.meta | 8 - 2 files changed, 8254 deletions(-) delete mode 100644 functions/testapp/Assets/Firebase/Sample/Functions/.functions/functions/package-lock.json delete mode 100644 functions/testapp/Assets/Firebase/Sample/Functions/.functions/functions/package-lock.json.meta 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 988b0b35..00000000 --- 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 536dae05..00000000 --- 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: From 96b7132d30b18446381794cd9e6e82725e916be5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Mar 2024 13:21:22 -0700 Subject: [PATCH 03/33] Bump tj-actions/branch-names from 5.4 to 7.0.7 in /.github/workflows (#913) Bumps [tj-actions/branch-names](https://github.com/tj-actions/branch-names) from 5.4 to 7.0.7. - [Release notes](https://github.com/tj-actions/branch-names/releases) - [Changelog](https://github.com/tj-actions/branch-names/blob/main/HISTORY.md) - [Commits](https://github.com/tj-actions/branch-names/compare/v5.4...v7.0.7) --- updated-dependencies: - dependency-name: tj-actions/branch-names dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: a-maurice --- .github/workflows/package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml index 481beb97..1d8ef5f9 100644 --- a/.github/workflows/package.yml +++ b/.github/workflows/package.yml @@ -291,7 +291,7 @@ jobs: private_key: ${{ secrets.WORKFLOW_TRIGGER_APP_PRIVATE_KEY }} - name: Get branch name id: branch-name - uses: tj-actions/branch-names@v5.4 + uses: tj-actions/branch-names@v7.0.7 - name: Use GitHub API to start workflow shell: bash run: | From 38b67d2325cc1383d3aba2941c5fdec03d197257 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Fri, 5 Apr 2024 16:06:38 -0400 Subject: [PATCH 04/33] [Infra] Add support for GitHub issue templates (#985) * Add issue ymll template * Update issue.yml * Add question template * Fix validations * Add FR form * Update general-question.yml * Update validations 2 --- .github/ISSUE_TEMPLATE/--general-question.md | 28 --- .github/ISSUE_TEMPLATE/feature-request.md | 29 --- .github/ISSUE_TEMPLATE/feature-request.yml | 68 +++++++ .github/ISSUE_TEMPLATE/general-question.yml | 133 +++++++++++++ .github/ISSUE_TEMPLATE/issue.md | 45 ----- .github/ISSUE_TEMPLATE/issue.yml | 188 +++++++++++++++++++ 6 files changed, 389 insertions(+), 102 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/--general-question.md delete mode 100644 .github/ISSUE_TEMPLATE/feature-request.md create mode 100644 .github/ISSUE_TEMPLATE/feature-request.yml create mode 100644 .github/ISSUE_TEMPLATE/general-question.yml delete mode 100644 .github/ISSUE_TEMPLATE/issue.md create mode 100644 .github/ISSUE_TEMPLATE/issue.yml diff --git a/.github/ISSUE_TEMPLATE/--general-question.md b/.github/ISSUE_TEMPLATE/--general-question.md deleted file mode 100644 index 58706d1a..00000000 --- a/.github/ISSUE_TEMPLATE/--general-question.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -name: "ⓠGeneral question" -about: Please use this template to ask general question with Firebase Unity SDK -title: "[Question] " -labels: 'new, type: question' -assignees: '' - ---- - - - -### [REQUIRED] Please fill in the following fields: - - * Unity editor version: _____ - * Firebase Unity SDK version: _____ - * Source you installed the SDK: _____ (.unitypackage or Unity Package Manager) - * Problematic Firebase Component: _____ (Auth, Database, etc.) - * Other Firebase Components in use: _____ (Auth, Database, etc.) - * Additional SDKs you are using: _____ (Facebook, AdMob, etc.) - * Platform you are using the Unity editor on: _____ (Mac, Windows, or Linux) - * Platform you are targeting: _____ (iOS, Android, and/or desktop) - * Scripting Runtime: _____ (Mono, and/or IL2CPP) - * Pre-built SDK from the [website](https://firebase.google.com/download/unity) or open-source from this repo: _____ - -### [REQUIRED] Please describe the question here: diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md deleted file mode 100644 index 75d4e2fa..00000000 --- a/.github/ISSUE_TEMPLATE/feature-request.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -name: ➕ Feature request -about: If you have a feature request for the Firebase Unity SDK, file it here. -title: "[FR] " -labels: 'new, type: feature request' ---- - - - -### [READ] Guidelines - -When filing a feature request please make sure the issue title starts with "[FR]". - -A good feature request ideally -* is either immediately obvious (i.e. "Add Sign in with Apple support"), or -* starts with a use case that is not achievable with the existing Firebase API and - includes an API proposal that would make the use case possible. The proposed API - change does not need to be very specific. - -Once you've read this section, please delete it and fill out the rest of the template. - -### Feature proposal - -* Firebase Component: _____ (Auth, Core, Database, Firestore, Messaging, Storage, etc) - -Describe your use case and/or feature request here. diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml new file mode 100644 index 00000000..893212bf --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.yml @@ -0,0 +1,68 @@ +name: ➕ Feature Request +description: If you have a feature request for the Firebase Unity SDK, file it here. +title: "[FR]: " +labels: ["new", "type: feature request"] +body: + - type: markdown + attributes: + value: | + A good feature request ideally + * is either immediately obvious (e.g. _Add Sign in with Apple support_), or + * starts with a use case that is not achievable with the existing + Firebase API and includes a brief API proposal that would make the use + case possible. + - type: textarea + attributes: + label: Description + description: | + Describe the feature request. Provide the following: + 1. Use case + 2. How the Firebase Unity SDK _currently_ handles it + 3. How you propose the Firebase Unity SDK _should_ handle it + placeholder: | + 1. ... + 2. ... + 3. ... + validations: + required: true + - type: textarea + attributes: + label: API Proposal + description: | + If your feature request requires API changes, describe the changes and the + new API's signature and usage. + validations: + required: false + - type: dropdown + attributes: + label: Firebase Product(s) + description: Which Firebase products does this feature request apply to? + multiple: true + options: + - All + - AB Testing + - Analytics + - App Check + - App Distribution + - Authentication + - Crashlytics + - Database + - DynamicLinks + - Firestore + - Functions + - In-App Messaging + - Installations + - ML Model Downloader + - Messaging + - Performance + - Remote Config + - Storage + - type: dropdown + attributes: + label: Targeted Platform(s) + description: What platform(s) is the feature request for? + multiple: true + options: + - Apple Platforms + - Android + - Desktop diff --git a/.github/ISSUE_TEMPLATE/general-question.yml b/.github/ISSUE_TEMPLATE/general-question.yml new file mode 100644 index 00000000..93548a67 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/general-question.yml @@ -0,0 +1,133 @@ +name: ⓠGeneral question +description: Please use this template to report issues with the Firebase Unity SDK. +title: '[Question] ' +labels: + - new + - 'type: question' +body: + - type: textarea + attributes: + label: What is your question? + description: Describe the question. + validations: + required: true + - type: input + attributes: + label: Firebase Unity SDK Version + description: What version of the Firebase Unity SDK has this issue? + placeholder: 11.8.1 + validations: + required: true + - type: input + attributes: + label: Unity editor version + description: What version of the Unity editor is being used? + placeholder: 2022.3.13f1 + validations: + required: true + - type: dropdown + attributes: + label: Installation Method + description: How did you add Firebase to your project? + options: + - .unitypackage + - Unity Package Manager + validations: + required: true + - type: dropdown + attributes: + label: Problematic Firebase Component(s) + description: Which Firebase components are causing issues? + multiple: true + options: + - All + - AB Testing + - Analytics + - App Check + - App Distribution + - Authentication + - Crashlytics + - Database + - DynamicLinks + - Firestore + - Functions + - In-App Messaging + - Installations + - ML Model Downloader + - Messaging + - Performance + - Remote Config + - Storage + - type: dropdown + attributes: + label: Other Firebase Component(s) in use + description: Which other Firebase components are being used? + multiple: true + options: + - All + - AB Testing + - Analytics + - App Check + - App Distribution + - Authentication + - Crashlytics + - Database + - DynamicLinks + - Firestore + - Functions + - In-App Messaging + - Installations + - ML Model Downloader + - Messaging + - Performance + - Remote Config + - Storage + - type: textarea + attributes: + label: Additional SDKs you are using + description: 'What additional, non-Firebase SDKs are being used?' + placeholder: 'Facebook, AdMob, etc.' + validations: + required: false + - type: dropdown + attributes: + label: Targeted Platform(s) + description: What platform(s) is the issue affecting? + multiple: true + options: + - Apple Platforms + - Android + - Desktop + validations: + required: true + - type: dropdown + attributes: + label: Unity editor platform + description: What platform are you using the Unity editor on? + multiple: true + options: + - Mac + - Windows + - Linux + validations: + required: true + - type: dropdown + attributes: + label: Scripting Runtime + description: What scripting runtime is being used? + multiple: true + options: + - Mono + - IL2CPP + validations: + required: true + - type: dropdown + attributes: + label: Release Distribution Type + description: What release distribution is being used? + multiple: true + options: + - 'Pre-built SDK from https://firebase.google.com/download/unity' + - Open-source from this repo + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/issue.md b/.github/ISSUE_TEMPLATE/issue.md deleted file mode 100644 index 0a8de560..00000000 --- a/.github/ISSUE_TEMPLATE/issue.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -name: 🞠Bug report -about: Please use this template to report issues with the Firebase Unity SDK. -title: "[Bug] " -labels: 'new, type: question' ---- - - - -### [REQUIRED] Please fill in the following fields: - - * Unity editor version: _____ - * Firebase Unity SDK version: _____ - * Source you installed the SDK: _____ (.unitypackage or Unity Package Manager) - * Problematic Firebase Component: _____ (Auth, Database, etc.) - * Other Firebase Components in use: _____ (Auth, Database, etc.) - * Additional SDKs you are using: _____ (Facebook, AdMob, etc.) - * Platform you are using the Unity editor on: _____ (Mac, Windows, or Linux) - * Platform you are targeting: _____ (iOS, Android, and/or desktop) - * Scripting Runtime: _____ (Mono, and/or IL2CPP) - * Pre-built SDK from the [website](https://firebase.google.com/download/unity) or open-source from this repo: _____ - -### [REQUIRED] Please describe the issue here: - -(Please list the full steps to reproduce the issue. Include device logs, Unity logs, and stack traces if available.) - -#### Steps to reproduce: - -Have you been able to reproduce this issue with just the Firebase Unity quickstarts (this GitHub project)? -What's the issue repro rate? (eg 100%, 1/5 etc) - -What happened? How can we make the problem occur? -This could be a description, log/console output, etc. - -If you have a downloadable sample project that reproduces the bug you're reporting, you will -likely receive a faster response on your issue. - -#### Relevant Code: - -``` -// TODO(you): code here to reproduce the problem -``` diff --git a/.github/ISSUE_TEMPLATE/issue.yml b/.github/ISSUE_TEMPLATE/issue.yml new file mode 100644 index 00000000..8fcec5ed --- /dev/null +++ b/.github/ISSUE_TEMPLATE/issue.yml @@ -0,0 +1,188 @@ +name: "🞠Bug Report" +description: Please use this template to report issues with the Firebase Unity SDK. +title: '[Bug] ' +labels: + - new + - 'type: bug' +body: + - type: markdown + attributes: + value: | + Before getting started, make sure you are in the right place by + ensuring that filing a bug report is the correct course of + action for your issue. + + * For general technical questions, post a question on + [StackOverflow](http://stackoverflow.com/) with the `firebase` tag. + + * For backend, console, and other non-SDK issues, reach out to + [Firebase Support](https://firebase.google.com/support/) for help. + + If your issue does not fall under the above categories and instead + involves code in this repository not working as expected, please + complete and submit this bug report. Thank you! + - type: textarea + attributes: + label: Description + description: | + Describe the issue. Explain what you _expected_ to happen and what + _actually_ happened. + validations: + required: true + - type: textarea + attributes: + label: Reproducing the issue + description: > + Please provide either **steps to reproduce** or a [**minimal + reproducible + example**](https://stackoverflow.com/help/minimal-reproducible-example). + + Providing a minimal reproducible example will help us triage your issue + + faster. + validations: + required: false + - type: input + attributes: + label: Firebase Unity SDK Version + description: What version of the Firebase Unity SDK has this issue? + placeholder: 11.8.1 + validations: + required: true + - type: input + attributes: + label: Unity editor version + description: What version of the Unity editor is being used? + placeholder: 2022.3.13f1 + validations: + required: true + - type: dropdown + attributes: + label: Installation Method + description: How did you add Firebase to your project? + options: + - .unitypackage + - Unity Package Manager + validations: + required: true + - type: dropdown + attributes: + label: Problematic Firebase Component(s) + description: Which Firebase components are causing issues? + multiple: true + options: + - AB Testing + - Analytics + - App Check + - App Distribution + - Authentication + - Crashlytics + - Database + - DynamicLinks + - Firestore + - Functions + - In-App Messaging + - Installations + - ML Model Downloader + - Messaging + - Performance + - Remote Config + - Storage + - All + validations: + required: false + - type: dropdown + attributes: + label: Other Firebase Component(s) in use + description: Which other Firebase components are being used? + multiple: true + options: + - AB Testing + - Analytics + - App Check + - App Distribution + - Authentication + - Crashlytics + - Database + - DynamicLinks + - Firestore + - Functions + - In-App Messaging + - Installations + - ML Model Downloader + - Messaging + - Performance + - Remote Config + - Storage + - All + validations: + required: false + - type: textarea + attributes: + label: Additional SDKs you are using + description: 'What additional, non-Firebase SDKs are being used?' + placeholder: 'Facebook, AdMob, etc.' + validations: + required: false + - type: dropdown + attributes: + label: Targeted Platform(s) + description: What platform(s) is the issue affecting? + multiple: true + options: + - Apple Platforms + - Android + - Desktop + validations: + required: true + - type: dropdown + attributes: + label: Unity editor platform + description: What platform are you using the Unity editor on? + multiple: true + options: + - Mac + - Windows + - Linux + validations: + required: true + - type: dropdown + attributes: + label: Scripting Runtime + description: What scripting runtime is being used? + multiple: true + options: + - Mono + - IL2CPP + validations: + required: true + - type: dropdown + attributes: + label: Release Distribution Type + description: What release distribution is being used? + multiple: true + options: + - 'Pre-built SDK from https://firebase.google.com/download/unity' + - Open-source from this repo + validations: + required: true + - type: textarea + attributes: + label: Relevant Log Output + description: | + Please copy and paste any relevant log output. To enable Firebase debug + logging, add `-FIRDebugEnabled` to your scheme's launch arguments. + placeholder: | + Paste your logs here. Please redact any personally identifiable + information. This will be automatically formatted into code, so no + need for backticks. + render: shell + validations: + required: false + - type: textarea + attributes: + label: 'If using CocoaPods for Apple platforms, the project''s Podfile.lock' + description: The `Podfile.lock` can help us debug versioning issues. + value: "\n\n
\nExpand Podfile.lock snippet\n
\n\n```yml\n\n\U0001F440 Replace this line with the contents of your Podfile.lock!\n\n```\n\n
\n" + validations: + required: false From 956b07209b03ee67772135d369213205b3b51c27 Mon Sep 17 00:00:00 2001 From: a-maurice Date: Mon, 15 Apr 2024 13:41:36 -0700 Subject: [PATCH 05/33] Fix race condition with App Check callback (#984) * Fix race condition with App Check callback * Update app_check.i * Update readme.md --- app_check/src/swig/app_check.i | 24 ++++++++++++++++++++---- docs/readme.md | 5 +++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app_check/src/swig/app_check.i b/app_check/src/swig/app_check.i index d87dc079..5cb919b6 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/docs/readme.md b/docs/readme.md index 84a65e66..ce8ea60b 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -71,6 +71,11 @@ Support Release Notes ------------- +### Upcoming +- Changes + - App Check: Fix potential crash when fetching a token. + ([#877](https://github.com/firebase/firebase-unity-sdk/issues/877)) + ### 11.8.1 - Changes - Firestore (iOS): Fix undefined absl symbols error. From f3b2002632ecba93dab9770e5898bb9dbeed06ed Mon Sep 17 00:00:00 2001 From: "firebase-workflow-trigger[bot]" <80733318+firebase-workflow-trigger[bot]@users.noreply.github.com> Date: Wed, 17 Apr 2024 15:26:08 -0700 Subject: [PATCH 06/33] Update Unity SDK dependencies - Wed Apr 17 2024 (#996) * Update Unity SDK dependencies - Wed Apr 17 2024 > Created by [Firebase Unity SDK build workflow](https://github.com/firebase/firebase-unity-sdk/actions/runs/8726958278). * Update readme.md * Update Guids ID --------- Co-authored-by: firebase-workflow-trigger-bot Co-authored-by: a-maurice --- cmake/android_dependencies.cmake | 36 ++++++++++++------------- cmake/firebase_unity_version.cmake | 6 ++--- docs/readme.md | 9 +++++-- unity_packer/guids.json | 43 ++++++++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 23 deletions(-) diff --git a/cmake/android_dependencies.cmake b/cmake/android_dependencies.cmake index bc35ab95..efafe0ca 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:20.4.3" + "com.google.firebase:firebase-analytics:21.6.2" + "com.google.android.gms:play-services-base:18.4.0" ) set(FIREBASE_ANALYTICS_ANDROID_DEPS - "com.google.firebase:firebase-analytics:21.5.1" + "com.google.firebase:firebase-analytics:21.6.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-analytics:21.6.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-analytics:21.6.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:18.6.4" + "com.google.firebase:firebase-analytics:21.6.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-analytics:21.6.2" + "com.google.android.gms:play-services-base:18.4.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-analytics:21.6.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:24.11.1" + "com.google.firebase:firebase-analytics:21.6.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-analytics:21.6.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-analytics:21.6.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-analytics:21.6.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-analytics:21.6.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-analytics:21.6.2" ) diff --git a/cmake/firebase_unity_version.cmake b/cmake/firebase_unity_version.cmake index 591f5ad9..09c337ec 100644 --- a/cmake/firebase_unity_version.cmake +++ b/cmake/firebase_unity_version.cmake @@ -14,10 +14,10 @@ # This file defines the version numbers used by the Firebase Unity SDK. -set(FIREBASE_UNITY_SDK_VERSION "11.8.1" +set(FIREBASE_UNITY_SDK_VERSION "11.9.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.24.0" CACHE STRING "The version of the top-level Firebase Cocoapod to use.") # https://github.com/googlesamples/unity-jar-resolver @@ -27,7 +27,7 @@ set(FIREBASE_UNITY_JAR_RESOLVER_VERSION "1.2.179" ) # https://github.com/firebase/firebase-cpp-sdk -set(FIREBASE_CPP_SDK_PRESET_VERSION "v11.9.0" +set(FIREBASE_CPP_SDK_PRESET_VERSION "v11.10.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 ce8ea60b..89e04d56 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -71,10 +71,15 @@ Support Release Notes ------------- -### Upcoming +### 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)) + ([#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 diff --git a/unity_packer/guids.json b/unity_packer/guids.json index 7c53b2c3..2821904a 100644 --- a/unity_packer/guids.json +++ b/unity_packer/guids.json @@ -1044,6 +1044,49 @@ "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" + }, "3.0.0": { "Firebase/Editor/FirebaseAnalytics_v3.0.0_manifest.txt": "13c9ba8e35174de78ad7ca9a48cba9f0", "Firebase/Editor/FirebaseAuth_v3.0.0_manifest.txt": "eaa139bec35e491da653b612e67134ad", From c36ed48e5e40c4f520382f2242579fbef485a212 Mon Sep 17 00:00:00 2001 From: a-maurice Date: Thu, 18 Apr 2024 10:46:39 -0700 Subject: [PATCH 07/33] Remove invalid iOS device from test list (#997) --- scripts/gha/print_matrix_configuration.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/gha/print_matrix_configuration.py b/scripts/gha/print_matrix_configuration.py index e1ebc8fd..3306c101 100644 --- a/scripts/gha/print_matrix_configuration.py +++ b/scripts/gha/print_matrix_configuration.py @@ -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": [ From b734e06f616a255c909e5df7e6499896144404c2 Mon Sep 17 00:00:00 2001 From: a-maurice Date: Mon, 22 Apr 2024 13:42:20 -0700 Subject: [PATCH 08/33] Temporarily remove the Android on Mac test runs (#998) --- scripts/gha/print_matrix_configuration.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/gha/print_matrix_configuration.py b/scripts/gha/print_matrix_configuration.py index 3306c101..d2a3520c 100644 --- a/scripts/gha/print_matrix_configuration.py +++ b/scripts/gha/print_matrix_configuration.py @@ -266,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: From c621a68ed63b48527f91f8dc736008f77cff2319 Mon Sep 17 00:00:00 2001 From: a-maurice Date: Tue, 23 Apr 2024 15:45:12 -0700 Subject: [PATCH 09/33] Add sleeps after Unity calls in testapp builder (#1000) --- scripts/gha/build_testapps.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/gha/build_testapps.py b/scripts/gha/build_testapps.py index 4df71c78..8be3f796 100644 --- a/scripts/gha/build_testapps.py +++ b/scripts/gha/build_testapps.py @@ -821,6 +821,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 +846,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 +863,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 +880,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 +888,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): From aa8b056e16f5480a0b2b71d23c092df663c392d5 Mon Sep 17 00:00:00 2001 From: a-maurice Date: Wed, 24 Apr 2024 13:26:04 -0700 Subject: [PATCH 10/33] Remove deprecated RC ConfigSettings field (#1001) --- docs/readme.md | 5 +++++ remote_config/src/ConfigSettings.cs | 9 --------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/docs/readme.md b/docs/readme.md index 89e04d56..1e860462 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -71,6 +71,11 @@ Support Release Notes ------------- +### Upcoming +- Changes + - Remote Config: Remove deprecated `ConfigSettings.MinimumFetchInternalInMilliseconds`, + use `ConfigSettings.MinimumFetchIntervalInMilliseconds` instead. + ### 11.9.0 - Changes - General: Update to Firebase C++ SDK version 11.10.0. diff --git a/remote_config/src/ConfigSettings.cs b/remote_config/src/ConfigSettings.cs index a767d978..cd4d4f03 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, From 289f09492a59c7e74f622ca25e8ffede67340178 Mon Sep 17 00:00:00 2001 From: a-maurice Date: Thu, 25 Apr 2024 12:01:12 -0700 Subject: [PATCH 11/33] Pin the mac runners to 12 (#1003) --- .github/workflows/build_android.yml | 2 +- .github/workflows/build_macos.yml | 2 +- scripts/gha/print_matrix_configuration.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build_android.yml b/.github/workflows/build_android.yml index 785d3cd3..5e706917 100644 --- a/.github/workflows/build_android.yml +++ b/.github/workflows/build_android.yml @@ -38,7 +38,7 @@ on: jobs: build_android: name: build-android-unity${{ inputs.unity_version }}-CPP${{ inputs.firebase_cpp_sdk_version }} - runs-on: macos-latest + runs-on: macos-12 strategy: fail-fast: false env: diff --git a/.github/workflows/build_macos.yml b/.github/workflows/build_macos.yml index 20119fd8..8e934a14 100644 --- a/.github/workflows/build_macos.yml +++ b/.github/workflows/build_macos.yml @@ -38,7 +38,7 @@ on: jobs: build_desktop: name: build-macOS-unity${{ inputs.unity_version}}-CPP${{ inputs.firebase_cpp_sdk_version }} - runs-on: macos-latest + runs-on: macos-12 strategy: fail-fast: false diff --git a/scripts/gha/print_matrix_configuration.py b/scripts/gha/print_matrix_configuration.py index d2a3520c..57226fe9 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-12" LINUX_RUNNER = "ubuntu-latest" PARAMETERS = { From d8c1957ba2e58a5b51612b98f50a83d8eea87212 Mon Sep 17 00:00:00 2001 From: Nick Badal Date: Thu, 2 May 2024 11:48:35 -0700 Subject: [PATCH 12/33] Fix formatting exception for unknown property (#1011) --- firestore/src/Converters/AttributedTypeConverter.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/firestore/src/Converters/AttributedTypeConverter.cs b/firestore/src/Converters/AttributedTypeConverter.cs index c1d86213..31ed769b 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)); } } } From 403a6dd5cade33d2fedc5d40c369d401fed082a2 Mon Sep 17 00:00:00 2001 From: "firebase-workflow-trigger[bot]" <80733318+firebase-workflow-trigger[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 10:17:48 -0700 Subject: [PATCH 13/33] Update Unity SDK dependencies - Thu May 02 2024 (#1012) * Update Unity SDK dependencies - Thu May 02 2024 > Created by [Firebase Unity SDK build workflow](https://github.com/firebase/firebase-unity-sdk/actions/runs/8931988807). * Update Guids ID * Update to macos-13 and XCode 15 * Add swig installation to mac workflows * Force Java 8 in Android build --------- Co-authored-by: firebase-workflow-trigger-bot Co-authored-by: a-maurice --- .github/workflows/build_android.yml | 7 ++- .github/workflows/build_ios.yml | 5 ++- .github/workflows/build_macos.yml | 3 +- .github/workflows/build_tvos.yml | 5 ++- .github/workflows/integration_tests.yml | 2 +- cmake/android_dependencies.cmake | 54 +++++++++++------------ cmake/firebase_unity_version.cmake | 4 +- scripts/gha/print_matrix_configuration.py | 2 +- unity_packer/guids.json | 43 ++++++++++++++++++ 9 files changed, 88 insertions(+), 37 deletions(-) diff --git a/.github/workflows/build_android.yml b/.github/workflows/build_android.yml index 5e706917..75cf5a24 100644 --- a/.github/workflows/build_android.yml +++ b/.github/workflows/build_android.yml @@ -38,7 +38,7 @@ on: jobs: build_android: name: build-android-unity${{ inputs.unity_version }}-CPP${{ inputs.firebase_cpp_sdk_version }} - runs-on: macos-12 + runs-on: macos-13 strategy: fail-fast: false env: @@ -94,6 +94,11 @@ jobs: cd .. echo "NDK_ROOT=/tmp/android-ndk-r21e" >> $GITHUB_ENV echo "ANDROID_NDK_HOME=/tmp/android-ndk-r21e" >> $GITHUB_ENV + brew install swig@4.2 + + - name: Force Java 8 (macOS) + shell: bash + run: echo "JAVA_HOME=${JAVA_HOME_8_X64}" >> $GITHUB_ENV - name: Install python deps shell: bash diff --git a/.github/workflows/build_ios.yml b/.github/workflows/build_ios.yml index 9c98f102..7b19d68b 100644 --- a/.github/workflows/build_ios.yml +++ b/.github/workflows/build_ios.yml @@ -38,12 +38,12 @@ on: jobs: build_ios: name: build-ios-unity${{ inputs.unity_version }}-CPP${{ inputs.firebase_cpp_sdk_version }} - runs-on: macos-12 + runs-on: macos-13 strategy: fail-fast: false env: - xcodeVersion: "14.1" + xcodeVersion: "15.1" steps: - name: Checkout Unity Repo @@ -77,6 +77,7 @@ jobs: cd firebase-cpp-sdk python scripts/gha/install_prereqs_desktop.py cd .. + brew install swig@4.2 - name: Install python deps shell: bash diff --git a/.github/workflows/build_macos.yml b/.github/workflows/build_macos.yml index 8e934a14..2994fc0d 100644 --- a/.github/workflows/build_macos.yml +++ b/.github/workflows/build_macos.yml @@ -38,7 +38,7 @@ on: jobs: build_desktop: name: build-macOS-unity${{ inputs.unity_version}}-CPP${{ inputs.firebase_cpp_sdk_version }} - runs-on: macos-12 + runs-on: macos-13 strategy: fail-fast: false @@ -81,6 +81,7 @@ jobs: cd firebase-cpp-sdk python scripts/gha/install_prereqs_desktop.py cd .. + brew install swig@4.2 - name: Install python deps shell: bash diff --git a/.github/workflows/build_tvos.yml b/.github/workflows/build_tvos.yml index 28ce6308..bbf7353a 100644 --- a/.github/workflows/build_tvos.yml +++ b/.github/workflows/build_tvos.yml @@ -59,12 +59,12 @@ on: jobs: build_tvos: name: build-tvos-unity${{ inputs.unity_version }}-CPP${{ inputs.firebase_cpp_sdk_version }} - runs-on: macos-12 + runs-on: macos-13 strategy: fail-fast: false env: - xcodeVersion: "14.1" + xcodeVersion: "15.1" steps: - name: Checkout Unity Repo @@ -98,6 +98,7 @@ jobs: cd firebase-cpp-sdk python scripts/gha/install_prereqs_desktop.py cd .. + brew install swig@4.2 - name: Install python deps shell: bash diff --git a/.github/workflows/integration_tests.yml b/.github/workflows/integration_tests.yml index c4475484..98846002 100644 --- a/.github/workflows/integration_tests.yml +++ b/.github/workflows/integration_tests.yml @@ -174,7 +174,7 @@ jobs: fail-fast: false matrix: ${{ fromJson(needs.check_and_prepare.outputs.build_matrix) }} env: - xcodeVersion: "14.1" + xcodeVersion: "15.1" steps: - id: matrix_info shell: bash diff --git a/cmake/android_dependencies.cmake b/cmake/android_dependencies.cmake index efafe0ca..48e444c9 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.3" - "com.google.firebase:firebase-analytics:21.6.2" + "com.google.firebase:firebase-common:21.0.0" + "com.google.firebase:firebase-analytics:22.0.0" "com.google.android.gms:play-services-base:18.4.0" ) set(FIREBASE_ANALYTICS_ANDROID_DEPS - "com.google.firebase:firebase-analytics:21.6.2" + "com.google.firebase:firebase-analytics:22.0.0" ) 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.6.2" + "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.0" ) set(FIREBASE_AUTH_ANDROID_DEPS - "com.google.firebase:firebase-auth:22.3.1" - "com.google.firebase:firebase-analytics:21.6.2" + "com.google.firebase:firebase-auth:23.0.0" + "com.google.firebase:firebase-analytics:22.0.0" ) set(FIREBASE_CRASHLYTICS_ANDROID_DEPS - "com.google.firebase:firebase-crashlytics-ndk:18.6.4" - "com.google.firebase:firebase-analytics:21.6.2" + "com.google.firebase:firebase-crashlytics-ndk:19.0.0" + "com.google.firebase:firebase-analytics:22.0.0" ) set(FIREBASE_DATABASE_ANDROID_DEPS - "com.google.firebase:firebase-database:20.3.1" - "com.google.firebase:firebase-analytics:21.6.2" + "com.google.firebase:firebase-database:21.0.0" + "com.google.firebase:firebase-analytics:22.0.0" "com.google.android.gms:play-services-base:18.4.0" ) set(FIREBASE_DYNAMIC_LINKS_ANDROID_DEPS - "com.google.firebase:firebase-dynamic-links:21.2.0" - "com.google.firebase:firebase-analytics:21.6.2" + "com.google.firebase:firebase-dynamic-links:22.0.0" + "com.google.firebase:firebase-analytics:22.0.0" ) set(FIREBASE_FIRESTORE_ANDROID_DEPS - "com.google.firebase:firebase-firestore:24.11.1" - "com.google.firebase:firebase-analytics:21.6.2" + "com.google.firebase:firebase-firestore:25.0.0" + "com.google.firebase:firebase-analytics:22.0.0" ) set(FIREBASE_FUNCTIONS_ANDROID_DEPS - "com.google.firebase:firebase-functions:20.4.0" - "com.google.firebase:firebase-analytics:21.6.2" + "com.google.firebase:firebase-functions:21.0.0" + "com.google.firebase:firebase-analytics:22.0.0" ) set(FIREBASE_INSTALLATIONS_ANDROID_DEPS - "com.google.firebase:firebase-installations:17.2.0" - "com.google.firebase:firebase-analytics:21.6.2" + "com.google.firebase:firebase-installations:18.0.0" + "com.google.firebase:firebase-analytics:22.0.0" ) # 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.6.2" + "com.google.firebase:firebase-messaging:24.0.0" + "com.google.firebase:firebase-analytics:22.0.0" "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.6.2" + "com.google.firebase:firebase-config:22.0.0" + "com.google.firebase:firebase-analytics:22.0.0" ) set(FIREBASE_STORAGE_ANDROID_DEPS - "com.google.firebase:firebase-storage:20.3.0" - "com.google.firebase:firebase-analytics:21.6.2" + "com.google.firebase:firebase-storage:21.0.0" + "com.google.firebase:firebase-analytics:22.0.0" ) diff --git a/cmake/firebase_unity_version.cmake b/cmake/firebase_unity_version.cmake index 09c337ec..ac8d8495 100644 --- a/cmake/firebase_unity_version.cmake +++ b/cmake/firebase_unity_version.cmake @@ -14,10 +14,10 @@ # This file defines the version numbers used by the Firebase Unity SDK. -set(FIREBASE_UNITY_SDK_VERSION "11.9.0" +set(FIREBASE_UNITY_SDK_VERSION "12.0.0" CACHE STRING "The version of the Unity SDK, used in the names of files.") -set(FIREBASE_IOS_POD_VERSION "10.24.0" +set(FIREBASE_IOS_POD_VERSION "10.25.0" CACHE STRING "The version of the top-level Firebase Cocoapod to use.") # https://github.com/googlesamples/unity-jar-resolver diff --git a/scripts/gha/print_matrix_configuration.py b/scripts/gha/print_matrix_configuration.py index 57226fe9..1d82fd9a 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-12" +MACOS_RUNNER = "macos-13" LINUX_RUNNER = "ubuntu-latest" PARAMETERS = { diff --git a/unity_packer/guids.json b/unity_packer/guids.json index 2821904a..069e1451 100644 --- a/unity_packer/guids.json +++ b/unity_packer/guids.json @@ -1087,6 +1087,49 @@ "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" + }, "3.0.0": { "Firebase/Editor/FirebaseAnalytics_v3.0.0_manifest.txt": "13c9ba8e35174de78ad7ca9a48cba9f0", "Firebase/Editor/FirebaseAuth_v3.0.0_manifest.txt": "eaa139bec35e491da653b612e67134ad", From d4579362146b47c6892cbbb7c7fabcd950c668a7 Mon Sep 17 00:00:00 2001 From: a-maurice Date: Mon, 6 May 2024 16:50:25 -0700 Subject: [PATCH 14/33] Remove deprecated Auth calls about SignInResult (#1002) * Remove deprecated Auth calls about SignInResult * Remove another old internal call * Update auth.i * Update auth.i * Update auth.i --- auth/src/FirebaseAccountLinkException.cs | 14 +- auth/src/FirebaseUser.cs | 134 +------ auth/src/PhoneAuthProvider.cs | 237 +----------- auth/src/swig/auth.i | 350 +----------------- .../Assets/Firebase/Sample/Auth/UIHandler.cs | 255 ++----------- .../Sample/Auth/UIHandlerAutomated.cs | 133 ------- docs/readme.md | 2 + 7 files changed, 39 insertions(+), 1086 deletions(-) diff --git a/auth/src/FirebaseAccountLinkException.cs b/auth/src/FirebaseAccountLinkException.cs index f2625f9f..4638d935 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 75f39acc..840b81f4 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 195ec9eb..e4d20acb 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 3fc775ea..b56db7dd 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 479f74f4..878b2856 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 74e891e1..57e01681 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/docs/readme.md b/docs/readme.md index 1e860462..6e5f47f4 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -73,6 +73,8 @@ Release Notes ------------- ### Upcoming - Changes + - Auth: Remove deprecated calls involving `SignInResult`, most of + which were appended with `_DEPRECATED`. - Remote Config: Remove deprecated `ConfigSettings.MinimumFetchInternalInMilliseconds`, use `ConfigSettings.MinimumFetchIntervalInMilliseconds` instead. From 6a7485a35e76f56b7dc817b69eeb1647115efd5f Mon Sep 17 00:00:00 2001 From: a-maurice Date: Tue, 7 May 2024 16:23:04 -0700 Subject: [PATCH 15/33] Add a workaround to tvOS testapp build (#1018) * Add a workaround to tvOS testapp build * Update integration_tests.yml --- .github/workflows/integration_tests.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/integration_tests.yml b/.github/workflows/integration_tests.yml index 98846002..94bbc8bb 100644 --- a/.github/workflows/integration_tests.yml +++ b/.github/workflows/integration_tests.yml @@ -203,6 +203,11 @@ jobs: username: ${{ secrets.UNITY_USERNAME }} password: ${{ secrets.UNITY_PASSWORD }} serial_ids: ${{ secrets.SERIAL_ID }} + - name: Workaround tvOS XCode 15 issue + if: ${{ contains(matrix.platform, 'tvOS') && contains(matrix.unity_version, '2020') }} + shell: bash + run: | + find /Applications/Unity/Hub/Editor -type f -name 'UnityViewControllerBase.h' -exec sed -i '' 's/#import /#import /g' {} \; - name: Prepare for integration tests timeout-minutes: 10 shell: bash From a7ab6b51748c09c790e069eaaa116abd12d11d3d Mon Sep 17 00:00:00 2001 From: "firebase-workflow-trigger[bot]" <80733318+firebase-workflow-trigger[bot]@users.noreply.github.com> Date: Wed, 8 May 2024 12:00:20 -0700 Subject: [PATCH 16/33] Update Unity SDK dependencies - Tue May 07 2024 (#1016) * Update Unity SDK dependencies - Tue May 07 2024 > Created by [Firebase Unity SDK build workflow](https://github.com/firebase/firebase-unity-sdk/actions/runs/8992406527). * Update readme.md * Update readme.md --------- Co-authored-by: firebase-workflow-trigger-bot Co-authored-by: a-maurice --- cmake/firebase_unity_version.cmake | 2 +- docs/readme.md | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/cmake/firebase_unity_version.cmake b/cmake/firebase_unity_version.cmake index ac8d8495..8d49ff83 100644 --- a/cmake/firebase_unity_version.cmake +++ b/cmake/firebase_unity_version.cmake @@ -27,7 +27,7 @@ set(FIREBASE_UNITY_JAR_RESOLVER_VERSION "1.2.179" ) # https://github.com/firebase/firebase-cpp-sdk -set(FIREBASE_CPP_SDK_PRESET_VERSION "v11.10.0" +set(FIREBASE_CPP_SDK_PRESET_VERSION "v12.0.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 6e5f47f4..9668b8cb 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -71,8 +71,15 @@ Support Release Notes ------------- -### Upcoming +### 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`, From d1d97e4d9009e046a62c8658745768fbcefc47e0 Mon Sep 17 00:00:00 2001 From: a-maurice Date: Wed, 8 May 2024 12:21:26 -0700 Subject: [PATCH 17/33] Refactor RemoteConfig ConfigInfo swig generation (#961) --- remote_config/CMakeLists.txt | 1 + remote_config/src/ConfigInfo.cs | 47 +++++++++++++++++++ remote_config/src/FirebaseRemoteConfig.cs | 9 ++-- remote_config/src/swig/remote_config.i | 56 +++-------------------- 4 files changed, 60 insertions(+), 53 deletions(-) create mode 100644 remote_config/src/ConfigInfo.cs diff --git a/remote_config/CMakeLists.txt b/remote_config/CMakeLists.txt index 5e6cd7ae..d4fcea0b 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 00000000..376f58a3 --- /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/FirebaseRemoteConfig.cs b/remote_config/src/FirebaseRemoteConfig.cs index 908961ab..d70d1816 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 e6322262..4d1880e0 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. From f0d6c34a71b29e4397605dd165c93036c1d202c4 Mon Sep 17 00:00:00 2001 From: a-maurice Date: Wed, 8 May 2024 14:48:55 -0700 Subject: [PATCH 18/33] Disable code signing for simulator tests (#1019) * Disable code signing for simulator tests * Increase the iOS deployment target * Update Simulator versions --- .../gameloop.xcodeproj/project.pbxproj | 8 ++++---- scripts/gha/print_matrix_configuration.py | 6 +++--- scripts/gha/test_simulator.py | 12 +++++++++--- 3 files changed, 16 insertions(+), 10 deletions(-) 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 83c2031f..ee15830f 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 1d82fd9a..d61fcb51 100644 --- a/scripts/gha/print_matrix_configuration.py +++ b/scripts/gha/print_matrix_configuration.py @@ -142,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": [ {"type": "virtual", "name":"iPhone SE (3rd generation)", "version":"17.0.1"} ], + "simulator_target": [ {"type": "virtual", "name":"iPhone 15", "version":"17.2"} ], + "simulator_latest": [ {"type": "virtual", "name":"iPad Pro (12.9-inch) (6th generation)", "version":"17.4"} ], "tvos_simulator": {"platform": TVOS, "type": "virtual", "name": "Apple TV", "version": "16.1"}, } diff --git a/scripts/gha/test_simulator.py b/scripts/gha/test_simulator.py index 0cdd210c..25defe10 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,7 +393,7 @@ 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() From a6f4e506a7c82418226be23190b4dd03db536a24 Mon Sep 17 00:00:00 2001 From: a-maurice Date: Wed, 8 May 2024 16:16:50 -0700 Subject: [PATCH 19/33] Remove Mac Android from the test matrix (#1021) --- scripts/gha/print_matrix_configuration.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/gha/print_matrix_configuration.py b/scripts/gha/print_matrix_configuration.py index d61fcb51..496b957a 100644 --- a/scripts/gha/print_matrix_configuration.py +++ b/scripts/gha/print_matrix_configuration.py @@ -334,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 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"}) From 5df520dcc69e9f84166449069fbad9ec95645ebb Mon Sep 17 00:00:00 2001 From: a-maurice Date: Thu, 9 May 2024 14:28:56 -0700 Subject: [PATCH 20/33] Update some minimum versions that were missed (#1024) --- app_check/testapp/readme.md | 4 +-- .../debug_single_export_json/analytics.json | 4 +-- .../debug_single_export_json/app_check.json | 4 +-- .../debug_single_export_json/auth.json | 4 +-- .../debug_single_export_json/crashlytics.json | 4 +-- .../debug_single_export_json/database.json | 4 +-- .../dynamic_links.json | 4 +-- .../debug_single_export_json/firestore.json | 4 +-- .../debug_single_export_json/functions.json | 4 +-- .../installations.json | 4 +-- .../debug_single_export_json/messaging.json | 4 +-- .../remote_config.json | 4 +-- .../debug_single_export_json/storage.json | 4 +-- unity_packer/exports.json | 30 +++++++++---------- 14 files changed, 41 insertions(+), 41 deletions(-) diff --git a/app_check/testapp/readme.md b/app_check/testapp/readme.md index 31812a16..8c989598 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/unity_packer/debug_single_export_json/analytics.json b/unity_packer/debug_single_export_json/analytics.json index af7033b0..b2afc6a3 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 3f38648b..af0e1287 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 8c5b3631..9551f64f 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 22caad0c..290495aa 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 104f2fec..edf18546 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 91dc5ac5..2bf3bac8 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 d5d730cf..67bbe671 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 438583d2..6b3c6ed7 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 2bb1d956..d5fb29bd 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 14b34abd..e3e086e9 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 6d605a40..d0bc265e 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 26fc7984..8089ef5b 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 6bb82400..55e36ec2 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" } } } From 3a8d60a1c59f85d3928b0d9e7c03828de170b043 Mon Sep 17 00:00:00 2001 From: a-maurice Date: Mon, 13 May 2024 14:59:46 -0700 Subject: [PATCH 21/33] Fix error in test matrix configuration (#1026) --- scripts/gha/print_matrix_configuration.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gha/print_matrix_configuration.py b/scripts/gha/print_matrix_configuration.py index 496b957a..81d2e93f 100644 --- a/scripts/gha/print_matrix_configuration.py +++ b/scripts/gha/print_matrix_configuration.py @@ -336,7 +336,7 @@ def get_testapp_test_matrix(matrix_type, unity_versions, platforms, build_os, mo # 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: + if platform==ANDROID and build_os==MACOS_RUNNER: continue if platform in [WINDOWS, MACOS, LINUX]: From c0e9f70526883f5dc70167026d223b3347e5e483 Mon Sep 17 00:00:00 2001 From: a-maurice Date: Tue, 14 May 2024 12:33:26 -0700 Subject: [PATCH 22/33] Update iOS simulator devices for testing (#1027) --- scripts/gha/print_matrix_configuration.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/gha/print_matrix_configuration.py b/scripts/gha/print_matrix_configuration.py index 81d2e93f..a52e91f4 100644 --- a/scripts/gha/print_matrix_configuration.py +++ b/scripts/gha/print_matrix_configuration.py @@ -142,9 +142,9 @@ "model=iphone8,version=16.6", "model=ipad10,version=16.6", ]}, - "simulator_min": [ {"type": "virtual", "name":"iPhone SE (3rd generation)", "version":"17.0.1"} ], - "simulator_target": [ {"type": "virtual", "name":"iPhone 15", "version":"17.2"} ], - "simulator_latest": [ {"type": "virtual", "name":"iPad Pro (12.9-inch) (6th generation)", "version":"17.4"} ], + "simulator_min": [ {"type": "virtual", "name":"iPhone 15 Pro Max", "version":"17.0.1"} ], + "simulator_target": [ {"type": "virtual", "name":"iPhone 15 Pro Max", "version":"17.2"} ], + "simulator_latest": [ {"type": "virtual", "name":"iPhone 15 Plus", "version":"17.4"} ], "tvos_simulator": {"platform": TVOS, "type": "virtual", "name": "Apple TV", "version": "16.1"}, } From 26e3233cf1e266999e96f269085eeec04c2c3779 Mon Sep 17 00:00:00 2001 From: Jon Simantov Date: Tue, 21 May 2024 11:35:58 -0700 Subject: [PATCH 23/33] Retry test failures on Unity (#1028) * Add retry workflow * Add script for retrying tests under any conditions. * Add to integration test workflow (currently unconditional, will change to scheduled trigger only when merging.) * Temporarily enable retry on cancelled workflow. * Duplicate the C++ trigger workflow script. * Test with a forced-failing test. * Put the workflow back the way it should be for merging. * Remove unused branch sha check. --- .github/workflows/integration_tests.yml | 32 ++++++ .github/workflows/retry-test-failures.yml | 30 ++++- scripts/gha/firebase_github.py | 58 ++++++++++ scripts/gha/retry_test_failures.py | 128 ++++++++++++++++++++++ scripts/gha/trigger_workflow.py | 13 ++- 5 files changed, 252 insertions(+), 9 deletions(-) create mode 100644 scripts/gha/retry_test_failures.py diff --git a/.github/workflows/integration_tests.yml b/.github/workflows/integration_tests.yml index 94bbc8bb..3025b96c 100644 --- a/.github/workflows/integration_tests.yml +++ b/.github/workflows/integration_tests.yml @@ -644,3 +644,35 @@ jobs: --run_id ${{github.run_id}} - name: Summarize results into GitHub log run: python scripts/gha/summarize_test_results.py --dir test_results --github_log + + + attempt_retry: + name: "attempt-retry" + needs: [check_and_prepare, summarize_results] + runs-on: ubuntu-20.04 + if: ${{ failure() && needs.check_and_prepare.outputs.trigger == 'scheduled_trigger' }} + steps: + - uses: actions/checkout@v3 + with: + ref: ${{needs.check_and_prepare.outputs.github_ref}} + - name: Setup python + uses: actions/setup-python@v4 + with: + python-version: ${{ env.pythonVersion }} + - name: Install python deps + run: pip install -r scripts/gha/requirements.txt + # The default token can't run workflows, so get an alternate token. + - name: Generate token for GitHub API + uses: tibdex/github-app-token@v1 + id: generate-token + with: + app_id: ${{ secrets.WORKFLOW_TRIGGER_APP_ID }} + private_key: ${{ secrets.WORKFLOW_TRIGGER_APP_PRIVATE_KEY }} + - name: Retry failed tests + run: | + echo "::warning ::Attempting to retry failed tests" + python scripts/gha/trigger_workflow.py -t ${{ steps.generate-token.outputs.token }} \ + -w retry-test-failures.yml \ + -p run_id ${{ github.run_id }} \ + -s 10 \ + -A diff --git a/.github/workflows/retry-test-failures.yml b/.github/workflows/retry-test-failures.yml index 2cb249fe..8e2f0866 100644 --- a/.github/workflows/retry-test-failures.yml +++ b/.github/workflows/retry-test-failures.yml @@ -10,7 +10,31 @@ jobs: check_results_and_retry_if_needed: name: check-results-and-retry-if-needed runs-on: ubuntu-20.04 - if: steps: - - name: No-op - run: true + - name: Get token for firebase-workflow-trigger + uses: tibdex/github-app-token@v1 + id: generate-token + with: + app_id: ${{ secrets.WORKFLOW_TRIGGER_APP_ID }} + private_key: ${{ secrets.WORKFLOW_TRIGGER_APP_PRIVATE_KEY }} + + - name: Setup python + uses: actions/setup-python@v4 + with: + python-version: 3.8 + + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + submodules: false + + - name: Wait 3 minutes for run to finish + run: | + sleep 180 + + - name: Install python deps + run: pip install -r scripts/gha/requirements.txt + + - name: Run test failure retry script + run: | + python scripts/gha/retry_test_failures.py --token '${{ steps.generate-token.outputs.token }}' --run_id '${{ github.event.inputs.run_id }}' diff --git a/scripts/gha/firebase_github.py b/scripts/gha/firebase_github.py index 1e56e355..99467277 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/retry_test_failures.py b/scripts/gha/retry_test_failures.py new file mode 100644 index 00000000..5ca0384f --- /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/trigger_workflow.py b/scripts/gha/trigger_workflow.py index 6c8ba4db..6ec2b1f4 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 '', From 0e990e6a68546f2910c5bd4d43f3ba13a7d33136 Mon Sep 17 00:00:00 2001 From: a-maurice Date: Tue, 21 May 2024 16:08:42 -0700 Subject: [PATCH 24/33] Add a workaround for invalid test logs (#1032) --- scripts/gha/build_testapps.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/gha/build_testapps.py b/scripts/gha/build_testapps.py index 8be3f796..eae4bce7 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.") From 806770de03953cc77bce6863f95e7d6401ab3e60 Mon Sep 17 00:00:00 2001 From: a-maurice Date: Thu, 23 May 2024 11:24:58 -0700 Subject: [PATCH 25/33] Fix the print_matrix script (#1034) --- scripts/gha/print_matrix_configuration.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/gha/print_matrix_configuration.py b/scripts/gha/print_matrix_configuration.py index a52e91f4..d3357b96 100644 --- a/scripts/gha/print_matrix_configuration.py +++ b/scripts/gha/print_matrix_configuration.py @@ -142,9 +142,9 @@ "model=iphone8,version=16.6", "model=ipad10,version=16.6", ]}, - "simulator_min": [ {"type": "virtual", "name":"iPhone 15 Pro Max", "version":"17.0.1"} ], - "simulator_target": [ {"type": "virtual", "name":"iPhone 15 Pro Max", "version":"17.2"} ], - "simulator_latest": [ {"type": "virtual", "name":"iPhone 15 Plus", "version":"17.4"} ], + "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"}, } From 1b1faae27b95f2315f10668c1370f4c72dfde047 Mon Sep 17 00:00:00 2001 From: Jon Simantov Date: Fri, 31 May 2024 11:11:00 -0700 Subject: [PATCH 26/33] Fix reporting of retried jobs. (#1038) * Fix reporting of retried jobs. * Fix bash command. --- .github/workflows/integration_tests.yml | 7 ++++++- scripts/gha/report_build_status.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/integration_tests.yml b/.github/workflows/integration_tests.yml index 3025b96c..0f9079c8 100644 --- a/.github/workflows/integration_tests.yml +++ b/.github/workflows/integration_tests.yml @@ -641,7 +641,12 @@ jobs: --token ${{github.token}} \ --actor ${{github.actor}} \ --commit ${{needs.check_and_prepare.outputs.github_ref}} \ - --run_id ${{github.run_id}} + --run_id ${{github.run_id}} + - name: Print SDK package info + run: | + if [[ "${{ github.event.inputs.packaged_sdk_run_id }}" != "" ]]; then + echo "run_id: ${{ github.event.inputs.packaged_sdk_run_id }}" + fi - name: Summarize results into GitHub log run: python scripts/gha/summarize_test_results.py --dir test_results --github_log diff --git a/scripts/gha/report_build_status.py b/scripts/gha/report_build_status.py index 7bc1d511..6f7b1399 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) From e1cdd5065475d449b57c3b8c0c3fc4728ca9334f Mon Sep 17 00:00:00 2001 From: a-maurice Date: Fri, 31 May 2024 11:23:14 -0700 Subject: [PATCH 27/33] Update the Messaging testapp to use Functions (#1037) * Update the Messaging testapp to use Functions * Update build_testapps.json --- .../Sample/Messaging/UIHandlerAutomated.cs | 208 +++++------------- .../messaging/server_key.txt.gpg | 2 - scripts/gha-encrypted/messaging/uri.txt.gpg | 1 - .../integration_testing/build_testapps.json | 1 + scripts/gha/restore_secrets.py | 9 - 5 files changed, 62 insertions(+), 159 deletions(-) delete mode 100644 scripts/gha-encrypted/messaging/server_key.txt.gpg delete mode 100644 scripts/gha-encrypted/messaging/uri.txt.gpg diff --git a/messaging/testapp/Assets/Firebase/Sample/Messaging/UIHandlerAutomated.cs b/messaging/testapp/Assets/Firebase/Sample/Messaging/UIHandlerAutomated.cs index 5258743b..774ba062 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/scripts/gha-encrypted/messaging/server_key.txt.gpg b/scripts/gha-encrypted/messaging/server_key.txt.gpg deleted file mode 100644 index 63004441..00000000 --- a/scripts/gha-encrypted/messaging/server_key.txt.gpg +++ /dev/null @@ -1,2 +0,0 @@ -Œ  UË lÍø%JòÒÀµl[ -|9a}­—Ó(Š»ƒ.œTõÕD¨êUÖ@˜­¤FÊíø<Ú<¿ÑÆ¡]·±#ò×Ëuèòþr³—·D¹'(¦Û• }H[çVÎB?É %xÛ„ì©ïžë)ŒàMdg*ªéHNù.>yRB¿]ˆ5 iÓƒu\—&ïˆmÚ±Õ îà –mÀµÆU .4ú‘Ý2R½n \ No newline at end of file diff --git a/scripts/gha/integration_testing/build_testapps.json b/scripts/gha/integration_testing/build_testapps.json index 00f0e181..71055956 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/restore_secrets.py b/scripts/gha/restore_secrets.py index 336f22d5..a93b5073 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) From 9c928b8ce9e88a1d5af7e7053948eb1d100fcdbb Mon Sep 17 00:00:00 2001 From: a-maurice Date: Fri, 31 May 2024 17:58:09 -0700 Subject: [PATCH 28/33] Fix iOS simulator tests not initializing the device correctly (#1039) * Update integration_tests.yml * Update integration_tests.yml * Update test_simulator.py --- .github/workflows/integration_tests.yml | 9 +++++++++ scripts/gha/test_simulator.py | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/integration_tests.yml b/.github/workflows/integration_tests.yml index 0f9079c8..ce9d8f42 100644 --- a/.github/workflows/integration_tests.yml +++ b/.github/workflows/integration_tests.yml @@ -478,6 +478,8 @@ jobs: strategy: fail-fast: false matrix: ${{ fromJson(needs.check_and_prepare.outputs.test_matrix) }} + env: + xcodeVersion: "15.1" steps: - id: matrix_info shell: bash @@ -495,6 +497,9 @@ jobs: timeout-minutes: 10 shell: bash run: pip install -r scripts/gha/requirements.txt + - name: setup Xcode version + if: runner.os == 'macOS' + run: sudo xcode-select -s /Applications/Xcode_${{ env.xcodeVersion }}.app/Contents/Developer - name: Download Testapp artifacts uses: actions/download-artifact@v3 with: @@ -546,6 +551,10 @@ jobs: run: | python scripts/gha/read_ftl_test_result.py --test_result '${{ steps.ftl_test.outputs.test_summary }}' \ --output_path testapps/test-results-"${{ steps.matrix_info.outputs.info }}".log + - name: Print available devices + if: ${{ matrix.device_type == 'virtual' && !cancelled() }} + run: | + xcrun xctrace list devices - name: Run Mobile integration tests on virtual device locally timeout-minutes: 120 if: ${{ matrix.device_type == 'virtual' && !cancelled() }} diff --git a/scripts/gha/test_simulator.py b/scripts/gha/test_simulator.py index 25defe10..c56ff589 100644 --- a/scripts/gha/test_simulator.py +++ b/scripts/gha/test_simulator.py @@ -396,7 +396,7 @@ def _create_and_boot_simulator(apple_platform, 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 From 6c26a5971665a57c9834d56204f64f49114bf12e Mon Sep 17 00:00:00 2001 From: a-maurice Date: Fri, 14 Jun 2024 18:26:36 -0700 Subject: [PATCH 29/33] Add new Analytics OnDevice Conversion methods (#1047) --- analytics/src/swig/analytics.i | 24 ++++++++++++++++++++++++ docs/readme.md | 6 ++++++ 2 files changed, 30 insertions(+) diff --git a/analytics/src/swig/analytics.i b/analytics/src/swig/analytics.i index b8859154..4329fa03 100644 --- a/analytics/src/swig/analytics.i +++ b/analytics/src/swig/analytics.i @@ -291,6 +291,10 @@ class ParameterCopy : private firebase::analytics::Parameter { } %} +// Mark these as internal, so that we can do the conversion of types manually +%rename(InitiateOnDeviceConversionMeasurementWithHashedEmailAddressInternal) firebase::analytics::InitiateOnDeviceConversionMeasurementWithHashedEmailAddress; +%rename(InitiateOnDeviceConversionMeasurementWithHashedPhoneNumberInternal) firebase::analytics::InitiateOnDeviceConversionMeasurementWithHashedPhoneNumber; + // GetSessionId returns Future 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/docs/readme.md b/docs/readme.md index 9668b8cb..3221a612 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -71,6 +71,12 @@ Support Release Notes ------------- +### Upcoming +- Changes + - Analytics (iOS): Add support for + `InitiateOnDeviceConversionMeasurementWithHashedEmailAddress` and + `InitiateOnDeviceConversionMeasurementWithHashedPhoneNumber`. + ### 12.0.0 - Changes - General: Update to Firebase C++ SDK version 12.0.0. From feffc5b1861d9a1ee3a7bf3d78ad7d014c22d845 Mon Sep 17 00:00:00 2001 From: a-maurice Date: Tue, 18 Jun 2024 11:56:19 -0700 Subject: [PATCH 30/33] Modify RC tests for iOS simulators (#1042) * Increase one of the RC test timeouts * Try disabling the tests * Try an even bigger timeout * Update UIHandlerAutomated.cs * Update print_matrix_configuration.py * Update print_matrix_configuration.py * Set up a keychain for iOS simulator on tests * Update print_matrix_configuration.py * Update print_matrix_configuration.py * Update UIHandlerAutomated.cs * Update print_matrix_configuration.py --- .github/workflows/integration_tests.yml | 28 +++++++++++++++++++ .../Sample/RemoteConfig/UIHandlerAutomated.cs | 23 +++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/.github/workflows/integration_tests.yml b/.github/workflows/integration_tests.yml index ce9d8f42..6b43d4b0 100644 --- a/.github/workflows/integration_tests.yml +++ b/.github/workflows/integration_tests.yml @@ -555,6 +555,25 @@ jobs: if: ${{ matrix.device_type == 'virtual' && !cancelled() }} run: | xcrun xctrace list devices + - name: Create keychain (macOS Simulator) + if: ${{ contains('iOS,tvOS', matrix.platform) && matrix.device_type == 'virtual'}} + shell: bash + run: | + echo "Creating temporary keychain" + # Create a local keychain on Mac: + # Clean up previous temp keychain, if any. + security delete-keychain tmp-keychain 2> /dev/null || true + # Create temp keychain file and unlock it. + # (Avoid passing in -p on command line by using interactive mode.) + # Also set it to default settings so there is no unlock timeout. + security -i <[] 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. From 411f11148cdb939a6993554f67dd0238a9e072d6 Mon Sep 17 00:00:00 2001 From: Jon Simantov Date: Fri, 21 Jun 2024 13:12:28 -0700 Subject: [PATCH 31/33] Update secrets (#1050) * Update encrypted file secrets. * Update GCS bucket. * Update App Check files too. * Update remaining files. --- .../analytics/GoogleService-Info.plist.gpg | Bin 652 -> 648 bytes .../analytics/google-services.json.gpg | Bin 1106 -> 1103 bytes .../app_check/GoogleService-Info.plist.gpg | Bin 601 -> 601 bytes .../app_check/app_check_token.txt.gpg | Bin 107 -> 107 bytes .../app_check/google-services.json.gpg | Bin 571 -> 570 bytes .../auth/GoogleService-Info.plist.gpg | Bin 683 -> 679 bytes .../auth/google-services.json.gpg | Bin 1630 -> 1628 bytes .../crashlytics/GoogleService-Info.plist.gpg | Bin 683 -> 678 bytes .../crashlytics/google-services.json.gpg | Bin 1630 -> 1628 bytes .../database/GoogleService-Info.plist.gpg | Bin 646 -> 642 bytes .../database/google-services.json.gpg | Bin 1105 -> 1103 bytes scripts/gha-encrypted/database/uri.txt.gpg | Bin 115 -> 115 bytes scripts/gha-encrypted/debug_keystore.gpg | Bin 2133 -> 2132 bytes .../GoogleService-Info.plist.gpg | Bin 687 -> 683 bytes .../dynamic_links/google-services.json.gpg | Bin 1630 -> 1628 bytes .../gha-encrypted/dynamic_links/uri.txt.gpg | 2 +- .../firestore/GoogleService-Info.plist.gpg | Bin 599 -> 596 bytes .../firestore/google-services.json.gpg | Bin 507 -> 505 bytes .../functions/GoogleService-Info.plist.gpg | Bin 680 -> 675 bytes .../functions/google-services.json.gpg | Bin 1630 -> 1628 bytes scripts/gha-encrypted/gcs_key_file.json.gpg | Bin 1728 -> 1720 bytes .../GoogleService-Info.plist.gpg | Bin 655 -> 651 bytes .../installations/google-services.json.gpg | Bin 1106 -> 1104 bytes .../messaging/GoogleService-Info.plist.gpg | Bin 683 -> 679 bytes .../messaging/google-services.json.gpg | Bin 1630 -> 1628 bytes .../GoogleService-Info.plist.gpg | Bin 656 -> 652 bytes .../remote_config/google-services.json.gpg | Bin 1106 -> 1103 bytes .../storage/GoogleService-Info.plist.gpg | Bin 651 -> 647 bytes scripts/gha-encrypted/storage/bucket.txt.gpg | Bin 107 -> 107 bytes .../storage/google-services.json.gpg | Bin 1106 -> 1103 bytes 30 files changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gha-encrypted/analytics/GoogleService-Info.plist.gpg b/scripts/gha-encrypted/analytics/GoogleService-Info.plist.gpg index dec6a525ad60fb93c6dabce7a10264f0b2653d38..6aab96051a4ae1e7680cf519ea652603492a2b99 100644 GIT binary patch literal 648 zcmV;30(bq44Fm}T0++5~!u2l$oePr;t?`sd_3YFCC!p z{p1AtJBVPyb=dLQChPo{5?AMBZ!F4eUs%M9*a3 zZ2fUSl^dnw}A|g@#HCQFx z|0#wku@zUIBn0>{)Cnh9a(iT#L)#q)kKBbaLb!W+{j^k5)#gNU4=E zk7?e(*ep^#drOB(a(6lI#tMxNUGR;CquS?q;n{;=7emY+B;h4_x+402j%!glcz~zN z=^_1qh5k-OOv<_@EY=6yc0`PN82__d@@`?hVx#a|ye+Z%{;=HsbJZet0gMQT6HDFz zzzzyqF;i@NxO@$+8(Thhug;ED;k=4bl)&HZ`~|-bnzGo&%!};!lX-oAYFWIN$E^ga iauO01JoZes4Jd)J?I>v{H8puAp}s&xjtW}^W6ML(^G9U> literal 652 zcmV;70(1S04Fm}T0>dCYOvrX&_VUu{0YtxS8S+hpuS*u00He^8#nBtH#9`pb2y(8G zF|bCIMW9bLOQ+jP+p&4#W#g3ZiO$H21%VJ*0b-9gn)SG;4%p!Sw4nfbIFA?nU3U-L zD_Oe3OcuVj&7$dZ!pVDAmQ9M2Ip#n(CDyafoOVf4Rcj%hU0q)v=~x_{d*AI&kjWq>JUw+@;V8(Qn=|rxYDanrG;4yV4nUGJ`*t|l)zR4TaJZ8lF zZ~*iz=N)SRhiC00o^V|#`fI&iBRdiQP0SXv==NS*p^enYiBKTdo~bT($j3qensF0_lM`s*va zDS-J0Tm{I=*^AkMWF?5}1D|hK+lC mR!{-yV6NjaAl(=pyL72o44^E?2ACdc;9t?J&gZ9NN+lWLA3@{* diff --git a/scripts/gha-encrypted/analytics/google-services.json.gpg b/scripts/gha-encrypted/analytics/google-services.json.gpg index 6cc7df903a781ccbd09124b7cef7902072ec00da..f1bd0b00cb8abce2320075767dc46a05c8e2fb67 100644 GIT binary patch literal 1103 zcmV-V1hD&z4Fm}T0#JBRCBx*~w*S)V0qowbw})bVIXhd)_az`78T31+1N|{)-0lT< z?{+)$-T+?1_D{qA*Gfs!MZC*95xSQ6fjqX}eRiab$rsG`G*Eto1H>m2z3iR`1nrxJ(H zu5QbcZjHwofa4p-h>v08AtiCdMX%X)_e+cR`EQpdc`yc~h1&H6mUS4DTxO+NS!b@} z(h^+c6u~bG|8M^Mhj!f>g-5c{1~i-EkXzKlk;uqGH83fpXMTo%sp@vD9GU{E-o7%4 zHSJ)r@VcStJjrz%?9nOaZgKa7?_xtJAFl3LlGARbqAZ8@xK(2f*i%}UXe5(>d){el z40+!&7RNlmjGXZ|m{l1n9Ai~3WOaFzdNU)qPfpWM!_bq4Vuz6GCbAL=FNq^PeUBv{ zeKsk9<;3Ij%nG|5=+&Xpqcy$|fyl42vB_>Z%~`1Rq$l>FPbelexVmbovXweTS#*S) z5?b_9g<*UzVoocJx1;u{!g=}^#6k+li%Wm6cA53kjLFOpro+!7SLgEqD7VnuR>@@n zBUB%{J?KnLQdsLSB^qY^v14IhP#f!CQ~-7)4_#c zlI*JikR5^q(OOOL)H$s#;}oBr-ZsTpAu^kw<>AK_IIHE0WfKh+%$ee~tHLcvMy~Rk z>Gc!h{I4M%>EU6rlN%xZ-yQpKcr&1+UH~s15|xX7>F%nOnK}^a3YW=MbO$IW^25*V zIOC_(Ma+KO<{o*ICMc{d!o#KmjTD@7FxKcmxLlj#LB2KkxNXM@EGAjki0^eMi3t|t zmGK|~lx92^rGG~xX5w*SyBNHQr{yo`)j-a$&zS1Np?>5F_wTmDv0hz@n7$K|?=_n& z3K7E3x=oqC`|`B9IEmajXZ8o}iE(2jwEXjk>SFMJ-;Z|gCvej^hZnK znfvT%pCD#-Ijj-+WHNTa{a?~DQG*a|u}(TvL!*_vo8CuX-`%*sw)qHHcageq-%E6x zvVS>|CMPRgSY^y;a-F;E)wVZaxm?3wwe)4yhQsl%XIXXmOl`H5E5*CeIEf^h{uv8% zKvK;H4)NG^T^=HE1fCm;Ji7WaI%r$n`Cnw%y#7nYT-i^Vp~@25*+`LbQ$@5@>Vl_c z#jL)*hSxjXJyGsLawlA?kFjVc&^NMP9YJ8>h82R?r}F$@eyd}fbez)-t5n`ubjW)% VvAf81QI}#{)1lrJa$3~Ri*Xq0i_N}L$jqlY53a?+2*;i7&>Ge8ot9$r4QOYT{u1ittpSAnaDYMogl)?U zcn0?YPG4Mj5X>nlf!=5t-SQ&b4N<8Q-piqfuxYmcZ~eK$I7=}}NQAgC;|fW@WXkm@ zNzNY*x{38gEYvJ@jw_FD9cpJTyM;Fb^T$yrk7^Ld7sFkCG+gUnPi5dX`?LapB>YH7 z=Iy*SSl+x?mCr|*W2%?MWk80-k912QC2qyb0|gwgzwNsuj*_sTy|=HubI3dM`W3fZ z!lRkA>8NvE@E9WqvM8f=hlG)Hwv*5-cLzS>q(aY za)3JV5UcQz!u`zLV-omAMEmg+KX&D^|1k=ZG?1%ky~G)g7+pz7|EiJ=IeYf)cLzz6 zPKfA6is9Nz5g$K|-~FpLZ@Fjd8EJy8vM4T*-&v;o9rUC!6DEh=Uj{reSHzqt!reEv z9yuH<>~In2usNc=R|JwH&q0V=-95WzsxS3n7(ab${>?iAoPC!xG4;E)MVUKr*!Mm| zalY!ZuEubcvFRiTJlr1IVRB`26yZ`U@OY$VMKK3FlyKgDS*UKnJOR zs{4NS26+lL-@)~jdUf6}%C94RstTJAWvoww6FZ*v*rx*k{Y$tH=+%e6$n?9hGe!iTCY@|= zScxt#gso@FApe9iAE896dEJ3Z#qAk_c9L6Wbe+Hw6NY-P^c@Wsy)s7mo4rgjE*HY$ z^@E{q8%U4u;x^Q00Vw~QT0D~;S>%RkQWuyU!e}_CsBh=K1$6Glq_r{kM{rRHEmYra zDfYcM+bjF&fZ6j3*#i`gb=|wXW?Z`zywJF2Nh6qC8{%ike0$5Hiu&~J%r9bzEA>Sl z88}1^@s6 diff --git a/scripts/gha-encrypted/app_check/GoogleService-Info.plist.gpg b/scripts/gha-encrypted/app_check/GoogleService-Info.plist.gpg index 9c90edc5580b784abd5e421fc036faa1dc340de6..f4f0d6cc22a724f0d1e9aab991676bf650938a16 100644 GIT binary patch literal 601 zcmV-f0;c_p4Fm}T0?h%1%Fj)t@3}9{CaWa+5th|#Wq8-`?8`GaeY9E9R7Y^{|E3&v=)J0g z5HxVs>!5nIJtgl-rfPSk5+rK`m)g2ra050j7Tq6QP#?qA#zOciF)o@b)Z7PO#mTxP#X_RNo^D*}yDYrTyl#x9rMb@4BmK!F{={NZ_@$k-&#Y=wX) z{K*AY#?I@AF7j9O3R%0?oJRsScAZ4U)Ik0cf}5B3xP_B(5kEs^_`No`_zWAZ2Ibuo zP`h$XU$JbMg1QtDv~aX&M`RA(5*p813QN{>{4KQ4eg=zl5RCEKNHyB?V(QK&Y*zP+ n^~q1a0oM^RacW=Cl`6=-egtH4Jqj5@CqvJumpj?E-X8A&N*v=E9KAk(Ak(pe- zrc;vFazGs+3&lw~dxQS)her?=kZJ2DgVNOC%uv+iip%uowifd|lsmE(L1_;GL@3U= z1Sdj2zyy8$b}e>VV|$mg6QaD=ml@Y!fOf z9PP$oaA!gjr8QpVc88UOjrggVvi#O*7${WdiBClbsGGU<9aLG_ zv7>OA$XzQ(;q#a`HJwXN=5z8P`pWLCw=umHgD1YLVEtw;Kx>fMy?axiq9+^V!)GV` z?l{>)uJ^vV8tNBm-~!gOJ^iFLBidyvmwwb=+i9pKTVTTkQ7c9ZUP%J<_N=!!Qq9j- z_%+!SY7m@=WJ}gUA<_D7hvurSw#TcoPH0_w{~E?_RZ6^s%{_H05ubc_>ab8&S;leH zMmDQEPF-z(@EI8#b;EO?tdC;M$NJM7W&Pfdm{+^E9kt3$e*-s#-vVtAB7oB n)IK*zNf=7*1mR;5=kSI%(QkO=9svfO#D@Bq8!ZW5EfM*D(vvTE 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 4f61dbf1a6c90833f74f83ef91bb610237d2e776..ec03f8096c588f310e8f23584394e396d17833ff 100644 GIT binary patch literal 107 zcmV-x0F?iX4Fm}T0t!H?67ZVB#{be<0m;tPKvU4xjvh1OLWdyw!m^W|`Fz{zBZuas zQvoNiAe$k({t)hfu17liNB?yT&W2#>wtT`NDfbQI6)*k(k4aPdcK|AEzgH6+BS;M7 No?3KMY>^CK<`M4vGHw6> literal 107 zcmV-x0F?iX4Fm}T0!pwQ+egL&w*S&v0lSyTQ2QkL$)x2iXD_T8PjCUu11stZioE$O z?6-zH-5BNf{+e5W)hW^S&PJRjMC~7orIJzdC*3yO)pw9bMS^hB8Ju*pu%m6B9*X>~ NQJ-R7puHW^5g+UEHJ1PY diff --git a/scripts/gha-encrypted/app_check/google-services.json.gpg b/scripts/gha-encrypted/app_check/google-services.json.gpg index c3455afc867616b2510cd46bba99a43c39ee6831..0eed9eda4ea57148a2a0816efbafea0c5885fdaf 100644 GIT binary patch literal 570 zcmV-A0>%A|4Fm}T0yrZ{HBno8iT~2+0mIUr3mU$y!-;;W#pJ>FDV;1?Dhy(PUQtqf zOL`g0a7fo-23zf2(PQaVLyl6$uF^Xzks&I=TS#Z`e!x~8{^-3 zX&o(u&Igz>RPo&P)3t2(i)P9kVc)T}c^Kr!&B3v&Tog{UGw@lkd+Bsb91TRgPREoG z22o7VjE0w+!2uS9SE2D+abU%Wz2vDQgfB+pNg}LOAKDuxIQ>Hc4cIqd3^2ymCVfRW zhb#S6eiFW;QA}lV(rg?xiWkrys9&Q+dtP3B`=4m~#;e?|!;SEwF{!yq`i)}Z`Xa|S zg*!LSsw}aQ#I|gRk{%(WS=|)`t}ngXPpVjmO>>fRCtt;@gv3pPLQg#%2rE4t>(f2c z^4!{d8K@p=V?mEW#!jtV@aAR5sRG9ufsVW|X!t1@%;1KReKF~M__s6^HGEqc{7-9v z&T6xJKi>Qs*9QclXe;bi{~YZorh@}Bv)eU_x2kM{N%&K#(WBZOy}r(8|5!ZcVaXaN znw+CSnV=yUJ~QKctvEokH7J(wrc3}|h@w~rT7`;@7!<3VL+>AwiNv0pKd^x=FOf}V z(_~T7b3=0zWE_6_oOYfgguVV|^{twu7jGYzezYSM$t<|`Z9iQrtw)_xSab4!n3@oL z;NjWhFeu%>-gvi@;JB*kD6Mmm#h&^JX*j6J^Wz_WXmFF+vu+638&7qe-j820cp$L? Is@xac%y6?9-2eap literal 571 zcmV-B0>u4{4Fm}T0%qBgr1{<~Gyl@*0oSa&A^wDW0nCed3jTsy3`LbA|9Ii`#2Vt9 z7MW@)@&MC?BRjxU4Z5{KqZVXR6DT1ZWC47<&q5B?I-(S+3Lt8{e`iB0anKG+Wz@wWFcQ5zlF-kPPs@X$Ui;oYrl772HfQ5zcwrVb{gWi5lo zYF6f$OA4%ik&8OicyYzDYKM9;YJ}a6nSs01qMe+$qwXg!9QOO6_jLEHevGyx8+xWd zSXi8I^$G%Sy=q+GfGtR>n?!z%t=@@sxaccCN@DNMIUIs{$jYi1b{E%_uGi{cAu*)m zLpp6~FbLs<_;8O?MZLnw&0$Mi!OM=_TyY<}KA3rV6C@1n$~vv7#?^~HhDcrvWQuq- zbo&t#P+vr|d260iKLy(?+MkJ9Duvu*&vXjRMN#kWudvl13ig`iHO@@GMH1q0$FtSv z9KiLB4uweNm1U#}VLbu>wjY~#>5Rh1cJPV>MGW$#SAaVc3!0j6B~%SEz_1{fXy6R0 z=+LC}BNkbH^Fg4#y^VP%1lQpoS>QoIC->`sQ_eC&&q6)$e=#fC(d9KRcpqDNNJHUZ zqqoBZ2aG2{SLG=Qq^ur{DNx~YqQHs=-Oar-G>ws?(| zAY}1AWq0XmJ_wu~s@~<^lT~<0M38$PY(H&RO~q?XlqUgQaK5NM$mz-k( z#q0Tt?tMn zBp4>$PlHEUIdfx9kz}PSyulr zd_51;iXFU*u`&KXGIh@r3G4Q1`~%oq_#?YcARoYho@;AY6+PH|EDBh}e;R{q{-HKF NlRdH(0H`C1;p3O zBOME0P7tPx=A?jJ?-xRPP;XxDyx)~lwy;Q#ZhDi|U8>TCo=&$VlKWM)eUN88T0VYV zZ-1xl@y=rL7f>;|jIqB!>)Z2mzAyl@$>&meB+Pvx15Jix66=DZG{Zt$xG0FedW49K z(8M13kg+eyohzE6<=p_7gC8cJfiPG||F&f@vy&;AgyPBori9}%%u`|WuQ3=UTYZ{B zQ&iAQha~CHISzGBXF5FS5GfxCw<0Edeqk-1x;_74p0^GfUbQVPc=fD}6R_lpb>q8a z7>yjt<``94?aiVK%oc5dm=}R}Z#>U!VZ1;~VlQ_8m#ik~@3>wS^r%>V6u@lwg>c(( z>=onFFr>GUL=sz2XBv5b{;?;t#cRF<+jxqSfdyG{3(To27gOkqr2lNgl}F{FP4=+0 z=e7n&gWEtQh-y1(b7V6T*|7r5pKl_b2hqTolUJ44YQih>I1eW;u@L(nRGbOR1*w*OD5VuoxFLk zjr%Zy)4|Mg_c-gP47{Yknc>OcGl|Z&6%H&m&yj}k@@1~34M|XxT^aeus*3{GM*rmJR>yGvWRn>*7GEP_h63 diff --git a/scripts/gha-encrypted/auth/google-services.json.gpg b/scripts/gha-encrypted/auth/google-services.json.gpg index a06da911a6becb559fe5f8254700afaa096ebd58..891a786da0fb1fec86ea6275d5ccfb94624b062a 100644 GIT binary patch literal 1628 zcmV-i2BZ0m4Fm}T0@FFh3jM*b;Q!L<0qwHnaq2yx^4TX6*u!5rHmMUlY9t<`#8~sL zjJWg$5Cw_4hQ)lMgmUQ1PIej0+??h!>?gj{MKRG40?87K&2hEjaXbdKu>*LB#}6 za^0q_YVqtJLmlEd53+2@@J}8!r^th{APNljldriY8gKb8&yA;&D3ITnDN{Z;d zLQ3zGNGWIVsP9}NK~)!7q7cs$fTsRrBBN=bvFjmIt4hD^tWtz7ULUDVb=Gd%#|zPH zVbjR0h4VP}z<9|lTr2W^R^>@&F|WwJd?2oGOU&)HJOJG?E2+h|1X(H-<5nawZ4ID)6PKU2PqkmaQ@;zWa~j0wKg|NG3mYc7ib9G z|CzsAzxt05jitNvZ{^{K=3T+=VkhV6g$;7G*Mj;8m5X#^)RD3+MG{B3^2bpoWi}1$30YhP5+cR392r~E$`XMz=4JdNh3^D8F5BOZ zh&YA^n3b0@SF~bL8-jRS`@vxB#0f%fj_6)(lm(Ud5CFyRPScD1&z%@=N3u&VM7b3L z)IPF{gRcwencDNmygBm8T5u$~XROl80!f7%$*Mu@9LCM4V3y)v13~8s0}(O-kuNhmwIxV1`}AHmz*bHf0WfmF9`u2ojihtCZfRh{31UUj76Ru{|I1g!>@zKFFhU>et!0 z0|VNFY&8Sr>5H16)pSXTDF>(ejjxz{_lO|3U{9*{8?fnAvwghTIGs_!mxQb?-r-8w zItVS9(t$X-gZ@V7Z6rky14J&{3YL9L_#~?{QNfsmJIFy~hmj;4TtF}wLHcYc^VY#z z7zC`w9#E+A>GwDq5o*!Td0Lzw$sh=5vF2Q&)&-N)zRb`sZlrSVs9A1{J2RkKf#}8& zp*S+MCehdcWaKy^+?<_g_UD+Ksj?JPxN1yz72#TGEPClNbDEP#PR;dO6v4z*3ka( zm zxQHte*Ooo|BVjJj(x1nUyRF*)OC@}n2;8?&g7_vV-8@UQ3@SGU4;t1f|F}SW4j<<$ z@eynL4yIM{-3(zZ3QB2Fzvseq9})7ZPCtmuH)oC(Y6LEbZq{DigV}NE6{mfEron7J z3lRDW-o(y6vOIR|8wMn3MVOg$o%FV%&~Dgu?W?L1SNFEn*_e1b+%{%r9;6(SBN!|t z;I_|LnFNgllSf}aQI8~J(Gmu_3zP2WjMjPjb_d%1K490 a^F*zA4qzISOMKt%68DkRE%tyiuFiz6Zz~7@ literal 1630 zcmV-k2BGh$t%GV4U_Ko5Fhv zsz;?R(ibUnZKJ8*C*NxxYTP}H9_2xUc_T_eo^|5EHy?&O(Gp^g6V9*9i@~Nf69h3H zNcE~s0u>1=pV+K7%dM0}gcEC`WB=Gv&R%rPNMVD^FlqoUM3lQ;U1V!6JqXiR{B!gK zqGi@;7u8{gaK+zrS<0Mr4Y$&sP*y^?vw&_Wn#>(^WC@nKmk{&S&peevTssqofdt9i z9=_JXF%m)rknf1;3wJEuh4#e`yi~?KQBva(G6t z0m1{WwiEoDn4SwyHTocv&Sel$!TCYkqMq=g-Z9!|e|W7x0J}~SsnSaX!*ZiJ`tMYK zE*_*=^zN1!FBYrFxv0>QbN*F@q6DG^8e(HQ>1fNP_8+qqtfnQRRn*f)t9W^pnNDQE^y^T3H?W9^hU`* zNOSVS^TKBsL2(HlLY0VSqx%4?@X)Z|&eZags+6P7&YG-PWRCW|kPMovgX<)tJA59pa8twZ(VcYz zh1I4F9x&W#+bX5$?x>t-C^pt}>or1!Wo;?fMEpe0!c;4;;AUOoLS16rtwzX*L+s_A zbSv01KK~#v%*H*Ei@>&c$*;77^xGMZXOW=mA>S>*dRb}k+E;WXvsk6cJ}ZclU&wM} z7EagHk7>eW9|w1kKWj|T4ZGGISnqSeRJe!`b8_~zHFE8|s9Ky?7{$EX9sMZ&%9JS{S z*v;KnZ5?&j9h1Kai-SXs*bGsNFyKU3yw@*E=HutYal{wmBag)nvk^vO1sXIL_emV6 z)q=R?3P*Uv>8PGbu7`@NX+Sk|?j6#0N(%U!?nBm`TK5~v1Dx(4B_2NtEc>(wKh9^M z!5ob3dtc^F8x>^T9mev*YQ!puYnB$CNu`zKP5ZReE!%i3$k4l40JEo*=z4k2aq{%| z`OLga-&io=VrZKQy(Kt;{2msCD<>VQY8NvQhTbNLMZ(_X6GQ^PF28lAbt9 ze#)&tXlMFQ5|{F#uhSy>I$bWg0Bwy|ALSD$3{w7=?F0Rj4qXH12>L&TB4#S)CBA>62={?zqfomfmt~( zQaVcpETXh2t-_}NqHl3aGRUh4#Z~pF=L!TxspYr1nvI^kn`Px82x>MWo9v(~|>SoeHAe7abb2)f2m!sAo5mzh{ zN^Z8MAiK41rxVB=9=&9sT~RMB=bT&-W0*v^_K0gnIZpks*jWi$8}$C+ymlD^T$TE) zKTGC$zwSzAV+jIgjZU?Eq+ESR8~WUuuhSi)hdXH)k!QMPa34~1E?&vz0 c*b0TG&DdF{ZKM`WE$&NQM3YjJzIi(kYf3vh4FCWD diff --git a/scripts/gha-encrypted/crashlytics/GoogleService-Info.plist.gpg b/scripts/gha-encrypted/crashlytics/GoogleService-Info.plist.gpg index 42ea6e75fca558a164751dff6b6e1a58ca96bbcd..6105a03c17fb3481756f1510d3938590d9bd9561 100644 GIT binary patch literal 678 zcmV;X0$Kfx4Fm}T0@8LmqfPXMbpO)n0jEb1@tV6X_^WcuOsZg5ZOv!UpCV<#Ka%q5 zn4VLL*EnI0rytx@X=mCA0yM;Gr5odfN^caV2&fxEAKaFM@Fw?HnPVM0GZ}lb*bVXR zxzB$N_`j{Rrla8rGP@5V@P&@w`XH@XZq^94(T#Wxij1V?&K2Ri?`!v$l`%jn#XJUJ zfF_4uR!uT^qJVKFq-SW~Z|R0+l&>J#Jmy#5rRyD0@*r3ie-V9)ssBtk z2Dc5ldbw`$FEf*c5QU%(mM(=xw2pcq?7kJRz4F2YtdvQccyQJC(FLIM| z3Jic+WjF781`I{qjW`Z3iYs$$sEa_m%w*XoPFaFP zJV!`^74*p-b#f>M&m&pe3cIxzX-Hh%GqxzUzSGvsa)f5f_YgO7;nVY@T6Zu^LN4Xr z&Odz!^(AAdl?eQmCKZERYO4Cu%wEff%ZsR2>*O(YZhu?LJv)1A$gsmcBX@Q;*BA`BeCRR>T!(9Wpt0{rUttkLv~M3_*C?jB7}27nMJ5e+#_tNJ}N#VamYvYWED}*=SKXp(`;pJ+x;&nH}5eEQEem3S~to|C2vM+;t1H43Ib%`Fyy5QeseA zkf40Cp_=MuVWrJynXHR?nd|iZH{S%;{#Y}p{-v!e8ZA?O#=Ry(o;5%C`S94ImxEAg zdmx_{80HlXI6L!IP=TM-xjc&N3)53Two-XMFKwq`{KKQ_QMgc*FJCVQ5&Ek1$hX0Aws#$vCf(Vu&X~tt z!>YC*6XINPY=1grq?#F6A4(dq9m9kFuy}x^Btw71S8I}$?VKY~*88%}lAqU9=Ymk# zxXP8jv3PXyraJgqz)1>)(p!_z!6Y{+_noo;#*_~<|D^~w5*x4fA{6=MU|m|n<+gPQ z39>TaUhyK8f$bUhs%ok`49o>O4We!Hv%E_O_Hcyn2}WhGg-dxHDY=*`H|`smUX+g` zLf^!<3uit)8nDKADr~4klfPo7x-Yx4TMkWDB;BSUfIV`Pz-aA2I8lGy;6~P07kd_X zJNTK;&)-&9%!cT!sc1`#dI{Nszi&)y0UF^Mv2P*iq$tN))CA0Q_Yshi!Ytpfb&Nj1 zb>V*_HFatPTQzk=hQGXW4$}*|PY@pijTqcFz?$H+c1pwewN|())4}RCtt+ip4|1Tr z6*zQ44qwto|7SzMUjCnLEBm{(5L*5uqLkSy^-kYe<;S^P!qJ3rJ8v3ugSU5QOK$8WJY`jj+!0@))-)&PdK*hgZtdYyRkBWOG840&aMi+clWq!TpCi4*g?>Rl zj-_h^C2{v}t5DR$`C0$taPcV}KIk86dstR}`?!~!T2*1X`^x(V>g}3_C;)0CPLE2Y1KazL4Rqc$z#}yHS59`4tXKO@8goauC!>V zxb82VaZd=*>2t?#o@RSU(u1~mz_?;ff|&6xgkGC$dlg%t7$ph3USzrUw`n%mty~;4 z7WD#R>@YxZ85$rK)!-AQzSX2O+u@|9_4r#>pqS_n+OiG_G^gJ@%LbyaT%drHbsi62 zao(@ps^mesa)If3L*DjtC-8$eU1YJe)a0cU z=%c<9N}1TSgj!pvNfh>#ykB*d@rqNGiqUW}x^?(#(SXa~E8G%wSdfW0H`i$ZI7q^? z5k2N*lxUcZ?xH-*JUP}Uhje(d^;w`Oid zGjoA#tB#H^sEf>&Z_4k_qV8cellkNfQc%hBh|Ge-d5=wK;{l;(QnO3i^TY3V{Ll4{ z{z-JM^OBxi`k&76p$s_y;^$PQWkLi}tq&iv4)`+lhN@mXGhg!QdGnTzfgf8X8v)`f a;ju+s`ON@fcO^enNltu3s)V)JtnnXEEi&)` literal 1630 zcmV-k2BGO8{0b-}x)-NNcBa5kGC}@&olHW2w-ejkWe=ldr z0}#;|MMG42wB8YbKgf_`?6;DFmU1vS@7KB&O1_l!t1(bCVX^96Ayjq@_S`z$P^wDK zh>p6!Q+S;+M%KQhl;!W8S46?b63G3iw{`&z!oDf5fB@aJa;<0@QDQ9@?G@cB(~E-Q z2Mv_4<4a~E&xx$11?7qG{}7MMV3xdchB%5)y&95wE`R}Xl3E$MGipEn_*ij3QGwpW zep#xqGd~kYE0p~qx+ppIs7O@5aELM%}UeT*(zequS zI*r1Kmk-WUuQ7W{m-AsIsnh0O&pW=2=0dpS+ECz9pK<7fPhJ#najYsDQ6rg(g*+h8 zAIEW87IR*%tiF}w0h+;;Ib;r?8rtWU5(@#u3h>+tQSyFj3NYuS zQVxhw^L?=>xgOVnK~h2>@`gRyX*>VRuti1y*0mHS8%Vx9{KV&W6ZfRpo#~?OM4rn{ zwY@Q^sIh^s*#7HTltkyAO0E|4#vykMtT0y<@oGCMv&R{t9tLzGS9pchM%}EoodwTCHaH zqYcjz2`a9vkmBw4mR@cluLj9&_ zc3J?_88}G0GiKtrHSC{;P;o5hM<-cY-v1SgBTUw8jCl-K0k;BMQmVm`ZFG`OjUq{7 zFPF~8`dnG^35T`?d5nQ`^Z#=b8th*#IkdcoBMM`JpndYiez;`Uz4iTT@FIH5OJC1hu7yGs+7ztTI z3zvloqWKox=^;t29U+6wTrk7M%_(~ZMI>y`bam1+Pvkqn3eoN9hcF>Wx>Br)8C%4f z;k}C+OtBV_VPiT-3}wTlt`Z-wkuBYmF`7qKKmol>U!iw%bx7-Q^hiu#Jf4?OD7@6c z;B>SF+C#>cMw{rI=8_MUo5>JzlFJ>=0%AJn3(NV@byNMkCg5|}PaZ~ZHn=0zdoPm_ zD-gDymv91Rdqx1iGH15u(-^c28sXqm6<$~`*O7g}P!|Qj_CGkZ0KE{_4(T{Su)0=~ z6K*Z*F9-sN<|#L`eBlfeS4mdA2gX=5vW=n3Qv#3h1^GK7FUcJ?8;5!eS6Vp810n?c<1G*3eUZ39XqxUnVTPQIsDM+$vD~9#(So^wU!@L53|N z?mQFiD%}Mc(+bM;kPm8w>j6m~`w83t4@&%r+Ws96eBz-ufOi@?nOb#ZG%bIr>W|k4 zmh~RL;YW~g1M&C?NS+UVG&uyMvH~j^@623JMsU7i9B}(X(o&<11)i(#g4Ia~y#j45 zxFG#3Vaxaq6gd`MBx_f14?siDuib9BJN4FdT=Xb(z}fV cuyw8VAlm5{!9R`m1#70Mg3;!|nKPSZCU8#s&j@m9Hm)X0vk%g;-%7kI|X;J1x1Ols(5v8*SzDqB5c8@Q!q8UH%1jl67_Iz2ZQ2?6?UQ;ohR zgFb~1Akep>n080?gtYsBqabsYL+TVKQ3m0e-R#P7L85;cff9?nruRNM5H>}(lyG?a zV*$tCC~ijTJ-Y-D?q;dcz2O0M^x5P}WUe1T`dM$~*!>@=ZxO7#byD+)L!zgbPB(sd zB`9)`0mff!m;PQ04-QRSJ%o40L)kRqKKY`)dc;NNrM5{YwC(EW4?z-;6ixhtAK$8b zLT?XLU+p%P>D^VQvtMe0Ev)a_0U>-?Wh68qh!rZ@vBc)HpN{-$l(-RMUKgJM(hH>$`1Xe}M65oYP;Oj_q#wm8r{WUL%Zwt^%e`!=Ww1A`#9Kb~xC`=Bqo z@!dFcZa9Ye&a>{NXOG4l{BJ?Qm1~-u1SDVCJz;=aV=7?Wu^1Ii0 zh%#EGUZKW#NmsL~E>g;z5$Y7xM*KAgY}_n_WGF0Xp4d)ox4OnnGd_J3Iuo1sCb~S> cc}S>tcw{i|)ejswuN#F~HQ^m(=HEW6dGehwR{#J2 literal 646 zcmV;10(t$64Fm}T0<$u9d3IB6*7DNn0q5yyu&jd#E1Txo!O=mV3s^s?)vvH2VwPD@z^u)8=Md6(u!dMjCt~+ zkpx}6N^5WvweL4Xt?+@m-iyX19`Tf5Cc;yV@OOoPQrVRgW_%6FdwW`5LJ;oBw?eX|F5%^I_IOQH^) z3!pOw9TlN`XDLmZoezQP#mjsF&(;~8HvSzrPEyC6rXE1Ub^Zx38aB;i%>p|ze*ZKj zLtD6LAmdmZ%1LyuF0F-IOUD-Q6BjpgKeJr!OA~h^Xc6b1EqVuy{ja4`oB5z%Ovl+< z`G(fB!C;p*%El>t*j(G5Fs{1jP7jN^1?%KONcB_UU?zsAh+DrbNnSnY2F0Or9$GG5 z7KRKh6SYC&-Ehvmd6dJ4bY7k_BBGD9HTgEw{_S=9_HF;r5NZ_AfmHu};70VR`h$CM zZ@%7d1&@(r$<8b!<^$_8^o0p00pfEA^9Ys g;DAPD19^b*Y~h(z;~fqqJRcMd=)D)|0}z7Ubp>xd=l}o! diff --git a/scripts/gha-encrypted/database/google-services.json.gpg b/scripts/gha-encrypted/database/google-services.json.gpg index 822697603e580f0d5269da5ddce99aa6ed80a0a6..15f5e9cc8adda4a411ae4a0819c7db96e9285b47 100644 GIT binary patch literal 1103 zcmV-V1hD&z4Fm}T0u1A{7H+Jmq5snA0V6S-G`!6~V47T?sOGs2L>i-fd;5q*cZ*mR zfU$3t(QBPA*3!zYJmVvf$m1>xy7I|DY%|@i+?rX4!8g#q$9COhoP%?}05|j0=?NGI zZQd3N5)pmzwJW5gu+^k-ZTjeB-p+jP zSFQ#OQ!7P=tsA;jF+H0a6pb{#FSbB!2N>8-gfA4d#79TGhRN|jsWRG94&asp&Yc zJDt=|QAK_~d>Dc^0cnV-jXwpv`zqGj0Jw9X3B|GT(xqY{Y3UU40G8?*wV@s{0Pa@d zhFh>A_#DOs43(=5-1|ENY6Cq$15vCFu!D-5SpYgml*r{J%VdE(F^~xqMjmr{>xbJQ zUde(GU9=JahvPN$7pj@g0$I7J+8qLl>{I3nWAj`pRU#`2WLQ2=jv#?n93?hl_03m4 zK3KrOa_CrE#EYZAYXMv~hYe}kutpga)emV_-b@!wbj2Y9$!c1Tz*YE}|7oR=?gA^w z_{I_^D8Fo*Y(&iEjB-{<<0XhBqVWpmv?NBsI~iXw)IjBX9-?5Oss=v})l#=l8M-Jf zPa$8~NR?nxK1Z2ag+phbZzVi_kHH9kj&TaOIWlDWwo{bg>=LNE)x>EJn^npO7Tfr? zODDAiH*BhC$9Ixx$B^ap>VKp#9a>F>b^ zPovd+dDN0xgED;ITXv!VFi*nfApv7LOU)cd4|D5NBR99ycJti_bAJ5d+gg z(m5~`09TBO8|O~?X(0Jw$#K)p1TBP{GZraRR+PTnw>mBELLR<^?F)_zET{g%znn2g zn?M;kV41#LhYx{;2^F>r(KA zus37!hyqbU!LpGId#Rrw%!UT&31V1Ubs-(6lH*Q;Po%yjnP>S^<-|h)Z&u+!NjoM( zE>%M)QHLdsrrOch4os-N)6gEse==DjN|K)I*!g71m0DG#3jlRpOB$aX5(?QH=T)<2 zRwj|vcOo(oI@OVXF;&mLUHbyJ#OO%6Tu34?_CuDSM=vd#Sm7d}>y=j}#7}=XSdE{` zf-=d&K(%`y^ahs*wMB&(=uY#Rfz)?~Xh+4+92;xXc|AV~?;VBbvbQxX_sZx5uE5AjKXM2T z2eU+bp5*YsQepCo^EU<iud9Q>IXNjA1 zcr%7QM1bv(3m)J!>=pU<5kd2~YPSp2ehvsk!GGLPb$JVm$6}nJO>#9r59uKcjAJJZM^|UP3kY? z#+F=-N|84G_xjIH4Oqzf0AhV-jQ&`#?P;mF-xWKWRF0P;MS7aO4b~C!8Zv2-P1CAM zKC7u%yGH~j)D+gM@ZObD!`9qLzYOq@XN+P##I3#K9{Z&3h5Vx>%rjOY?=`%?dxk`m z2H$3Tcv1wsnJc_T9<}XZCkd|JNB+kgb(6r06Kj<(B(w$5fi_I_4JE91ZQ{=QA6ITj zjMUBW4ydp#V3UR6f|)_Bg49R0cug?sLG~(qK(n#gJ=W@hBfUVcl-Rj__|ZzQ05w@u zZ4cRBbD5&PJ$N*7=MZ?|T3&w1%*D806at#7u)W_`OdWc@&)LiJagKfhU17QA_z{DY{aLI{1KXsqW(?lZW4M5X39 z6ZgE1C)8M;@Ou{wD-<82+rdc~@xek6TD#log}XhC zuxn_b5NN};1ou|?*aZ42sGg_Q5QsWLUmLq;m`UPJ zHu$FO4S#5J_7SdXCC! zt3V-^C3(uzn$ZjS%n1EsT!CadW_JnPDrMq#kMnoTEYi#2Ic*o)kae_OgwK7eiXJC# zr}T4w#8H^Gg9=s{U1FA1x<~qd?|;x(X-WfG3hf&R+)_q!z$fBI_1 zSVqOh1tadx6Zg2-4tKi{ejNT418JY9j6@Lc%3+!?^6AI|YT$RcTF*tq5qPA(fZg`6 zcZ1nu$=ErUd1cO5aGQQ7=&lmT!2KqQaS9&M?B6Q75 XzBmD%_2r;8^@P;Uu&}?l2tZerAlWDz diff --git a/scripts/gha-encrypted/database/uri.txt.gpg b/scripts/gha-encrypted/database/uri.txt.gpg index 98c1533f91295a8a1785671e69418dc04b373803..f2cd2ccbaf965096cdcbfdf69d430f7673f8c82a 100644 GIT binary patch literal 115 zcmV-(0F3{P4Fm}T0x`3ZC>^INYyZ+>0r%I2z-hL~Aem(&>g(AeN36&uh={+4hAJ@m zL0ZNJ?zorFfLoCbpc-J2!3_j2`_@gJTps534I7T8WQGh;?Oo=qgFy5CV0}qz5ckX( V_8}YSy|+gj(R~UP_lZlSP4^XnH(US! literal 115 zcmV-(0F3{P4Fm}T0u>mpkyb%vEArA}0Uqu^#Mu}`<(amY5amrRwjh7rdKHioIRMVh zl^J@Gg+sp6F1lz|)B; diff --git a/scripts/gha-encrypted/debug_keystore.gpg b/scripts/gha-encrypted/debug_keystore.gpg index 2b71433fb6f587b882fd75116a0039410834adff..985e116e0d16869f91129330edc83f3e2f51910b 100644 GIT binary patch literal 2132 zcmV-a2&?yu4Fm}T0-}wb7wu-cQ2)~F0h0DXo@12Qx*;swpvZR^d!)~}e|67ye1Sqm zRP8!3{8q{5FUsvKF)-S$`Ml#@1Ca>_A=@`WiuI)=Kf5aA7b*?VMi}$oW=l}!__r04 zl?YP-88vibBOx>Gzn|0He7HkvgMHNCqaGDGJcmv2kr5M}6Wbh}I~#Cd6-*eEOffQT zqYJ3Bs6*Mun?0#0R`iC`#l9|j8&wh}Hpn9{%T7(xeC*_Mdq=!swDR}_@(r#^^oh?G zzDt7O(95lra?AA=C4G{tBP*chx2FD>FRVHW5Ct(xB#BAfok1<_pJ4)ds@1NXB@Fqe zSPfyI12d~%+UhpjBF~S3R2zoLfpWu@wDa`3u`~f-=@L0+{^WUn6P$5MRC)0 zT$`Y=>CkjHrpdNGKlj&%sfafeaO1e2==J|#2f!2TRlPx~xJ{M4R8+&XzS_?I{&lEA z<_^M)vO=^bilrLzZuw;bNLeoNX>UhmwL@IxZs*)o+~e#n-`?RUl1kUX4v%*xJBOXX zFouwrWxNrpNQ{XeWTlo)iP=cKpQ`5V*!VcWek^IxBN-CL_qvtDU(uyaMWM`HCVd3w zQj2>4JsFdtgk>}s`6!s9ck5Aplh9D)l@}U*-+k@GGsalyj^8*Tq`K{1S07JOR78>F zirzY=qrEE>@m74&_yDoTX~9%S)|XViqUS?PJIf5}is*>=;-#QpSwzsE^HV9QUsPuW z=Mx_&9@io}wE+)d3Pk0gT<6W-Bj{lJ_CjZ#j?rZL__ry}1)4I(U0ND11palv7h5Ei z=jU3(b5HOI{xpDagL+K_>pehg%D+y7 zQk7&V8Oo$1@>qPDJo4g?4uQF_7kDFQz6CsP1wJPYwUl?-X%HN@ZE&j|Kr0p#TMiD*yZ5FJW zdSgGxI$#A!iw4x-5i8SIFFh^V*)R#+kmbh7*|cI#e;{icvhaoe|I6s(EtKv#{!h66 zADoDOTvWM+jBO*wG3Szds8C_gy70CC)RnM{Xj!5!;))A{>*_o4i$dpnUsq~v{m3L@ z9*4BKiux24P1_`F%xoZ6j+~72NRe zUbu5qhe=y3Yw`^!XA_X8Iv*;1gc-NcU0H))()Ug3h zH+!c$83vjOSScybTaMm!U`mkvRgl0p>ogC(xJyV4~+8`?m15Mp0{r9F`FOZREf=SaX?hiPKNBd?%#v5 zfpPaGhsGh?)19yF>jD9{TJ3OHL6)unziM1i+Bo{rzx}ze=fDNI7LlAw{}C8o@Yi)% z?4x*VnX=S;c41rHDkNx^mTwL$r((4rt84l(;^Au&S-2ybBfo&KD^Jl!OGk)m-JWI{ zFta?z8^b+0)IU`}ZBkrwUn1X67M+ zF?p$0tXpZIzya+A*19(cPZsY&Yw<(6d{sP`DnNtKTO#R~rmbjemX825LP$zq*BwuB z#?{qyk;5jrl$weI1_4yGcodt3?seXqk?ie8(O+LY&kFOK=2CShAQ~YTOk$|6h3M7y Kcjdo1kp2nL%p_6( literal 2133 zcmV-b2&(st4Fm}T0x@s(qL>^K6aUid0VV;w%X96tyL5S|u$u1}_}x;qF?a zYpRQvp;$fv!x;n=nn*XyY`NQl?s0hR*k5Brmc~OM7a38KsLf zSJ9XE@v%k&VjgH{-BK;crY{Y9$HY?1Zp!iH#wDJ|6~1~jmz`5w?~jZ1ITT1x+V1}t zt(3M7bCkXxNL)W~>ecZxy`|rTc(3wVu^#YZK1uH}2BDFCsDj3LVUS;$5z}rP2NA`v z0W2|RqQG1kHi2MMmy+XTESDDIS<`WmNrQ3r4BT!3nHo4wYnVGPr2h40Xr_M_Q2e<{ z00(&yO~;?9zGXsRj3$lwSe~~FVgMf)#VziWL}_m#rX0udq+y1zyCE7?)hk2Tk_w+sie9H$;TO41>m-7rF|8bo7-q+7w<#Pt= z!yKRoVWa;QuRDn;HE-Wk+Sn)ahYITLt{~$7lLzqW6hr+O_tW~NT>qzM6Sn4^tb&9M zR0f&V-PjbNXuR=6^xa=cRncfl(wRMy`yRN$rDoK|uU} z*yOfwDj0E8lBsvsA5%a2K zH!@=;yvuVAmq*8cdt~+IE6_vgAP}o|)-rOO{$S5yi?`X*8V)DZjP+Z9L4hS@WLPFN1?wr;w5yc_q%o=T-B`uWIyhhw~{aW-4l#nwtk<<&1}ov_Viel@$$GEl>V zkyfxEU`T~eoZYMunXHn$tzMz+!ZL1?*&^OHRWYlu_W;a1|`%Q8i^_YaJH09 z8AgB6@ye6Ld6sanxq_#8GnBSsqT=piJ>w>if|uF1hlNdyv(jQ$L5LM48v$UC0$^j; zO;$r}k>b%lJLEbz>*fse1$?C{CL?+j+NeFSeC}Hm%=|BHyf}cY*GQEzOS$6DP2`O^AUg zzHN}YJ(&G1`=htGD|!yjz0glHE+8?Lm^AQ+f`Ulm6)!;ft$XN9)rWFLoH#B5h-x(LSdZw zbM_OG`rzBkO|hWaBZ)dp-npIcz0=)0h_LbWz6z)H0D`@w99l`<1j^)jPg z8ErOk-Z1aui*F6&R{AX`%1CP8+9@%|6#Z*uisUR&z=FOB!(xU;hPJ8jZYGoTed#`> z$_8GGT|)Gnl)vJ0pq_VCuVK$PU4#~uiw?)`un`zt#su3#WB^*~)T*vGg01)$r6pqW zJ+>$7T+YESqpOvVFR|8jY+rQAq(}Q6DKDyvp{+MwX_G)B3=0FZAIkDC^+Qb@dt+D%U^z(-W}jUIE9B_K`gHKL%_>+Vip*mM z)~Fq*eYLMNfpXlET50WxS9(5IH^R}4k)n%Yd}u|Xr-B;10uXO3k zV$ztgNC76YjXa*0SIqU13XHYGYF6BxJJAQwI!bj}^I}Z&$?HB!xrTxJGJUce>!hx= zvSwWck1uqlaNhj=OJOAzWP1J>fX2WZz6nb=^H0+C0w3V9j3HXpoqoAraZ}PF6Ja_Z zhITe3TUMY*6VBpMeP-BS@aSVj9P5N}cAefx<6G6IP@Mp@NAXXTOAuyj%#x%pg1Z#P zzc7%);G;6~P9 zo)s-j0ggXey6r#ON{1iW-2KWQL)hOthMdHd z1MkIhxjNn^Jt!dR0bs_ldy79E>Ikwg&O_xq3YedCgjZ|BtFojJT6r9(u1Nm&G?D<5 L5@rlQWJz|Xzk?A1 diff --git a/scripts/gha-encrypted/dynamic_links/GoogleService-Info.plist.gpg b/scripts/gha-encrypted/dynamic_links/GoogleService-Info.plist.gpg index 7663cb5ffc93712880f8d12b070e237298ba9a66..ec086e286c1f3c43c0e4050ea654eca81a1bcb33 100644 GIT binary patch literal 683 zcmV;c0#yBs4Fm}T0+yjTM$(w28~@Vj0U1ea{`j-kpr1PZr$ngJSJtv^zRwX1*sugH zYLr%%$8MO7pX#Deha{Tc;f4%oHaa$Qbx{5cYK<%>m6G#J(JR;KjB~f#Ku)@@?kO?z zFFLHlPcM$*UTw;1G250vbTW7xQXPpay(JXBd5vxr0^UtTL(n9fI=jE8X0Dhj?yg_I zr}?Rn++zZzrmxQV!z~4Yi+k_9{tdj5AmnTnf*@olM2o93{_8=Zjar3gxH>WIMMock3NR2%*)=)G)66+he87Q^i$v@O6tEYf*hS@3dGY>b*ycW`jwdUtMXyfWE zbJzxsh?Uq}=K9WQzECk6UtoN`nSDc}0a#vt1<`1zJ}O!ensMi;u>_{=-W{1-6^)jd zWXIITzpF}Z-LRQRnmsoAXY`52awrqT4s)D%o;R+9Cr9^JK~ZG=Fwzy;)^YXPTg^Lh zGBr}Rd$f+CE~b7|{m(X;2QNJvVDX$_>&mJAzwj?-JRr__`4u%uxDK;#;9jM{(q5O4 zXNU1-{w}VDqEXuPKX1gtF6-RWEyWpRF~b9GsLY3BWx|-4Uq;J>Z5TH;T@A;aG+NkP zF3>cP2+NQ|V0lPSS*wu)S7~K_a}s@CYljj=(50}|mZEK~AqJx?0u5PxC_){rE zL&mRx1tkXUZkX;yl{TrqnPXGFe97-2P$v+;1ta1DqeGga`PX=a;5K}3kz2I98!yVJ zLnmP^m^&9jmF8)>UVSBeSRZ2K?W(1J3iKIe*D>J z+_Q4{I)OjOKa<{>F&5n=`NI2Rb#w>TKC(Y^ex*d`d2|l)&AOx}P+Gri;ST%V?$Qw6 RwH-nBFFq&O5*u9+WqxS@PsRWM literal 687 zcmV;g0#N;o4Fm}T0wOAZxT0g9)AG{k0Zfx({z2V4;K2QgFP%YyWkH6tAzlDvcF&80 z@Epfkh!BN%A(GD0^;VU2qdKukxRA;;L?rf0EL&ik7;e599E+sifpP5TOGc?2?HdY2 zccRSmGOf!Dexy2LCSJEcMuI=FrxnQbQCK`G2l9@lSg%Dai5kFzf|r}zY&_s4b`1@o zL2r{E_r7}vJ4AllfWB)sV150NLqyzAq1Z7IEqj2U0NphXS3o7fxWuS9rIp{}S)>rfpcLo3?ENd}&Hvx$j7DHp{Cf?eb7XJfjR;S-ScHNLELEOlHm$o!)Nboc?_0RX>Jy4f zBBbaumPoebz#k5TGA7*=krpY0>Y&^~JEz)M=(^-PAahYuYgg9j zdlxaSLYT(4l>scv5K-zWoveb>7=5_dLTNg1>O^@?6Lg~UM37}{qi2ht*lOH3XU7Y1 zyx(+E0&49G+R>G)DhsKNZ%=ga4=lIH8H1qK8TWt;8-YMcwcx3f3gd%HZhj%JG5VRe z)BzI)H-I^Gg{_WoFuu!BHZqD6ynj}s@0u=4LYPqPpPG>U$&$66V6*6xn}MUBi}+a; V9LgJ7rJKOowf}z`ao1-UwPf5MPbL5W diff --git a/scripts/gha-encrypted/dynamic_links/google-services.json.gpg b/scripts/gha-encrypted/dynamic_links/google-services.json.gpg index 08a1cc94aec9e42d0daab9cfa20bfaad1f233289..028edfb44a27603da2dfa01ef3378e4cb7ab32e6 100644 GIT binary patch literal 1628 zcmV-i2BZ0m4Fm}T0=#L#-o2a(s{hjJ0WH5!3)yv8+KAk57UriIP} zyCe=9H;+&>@k|Wrds*0&PpH-Fr{9CX3~w{iBNA`{kI0d${2OKe5Bt^46|v&S3i}>p zXv1gDwB*FkEz_iF9-_r#ZcollJiHvk7u)hG%UXbb1{eOdu{4nNsj4rgh>+=mPSXD8D#)oD6X;+lCVAT{rSV z1;GZE_QDS~AfE`Q;9p{ZRA5fT6#!e%C+V&wco4K(5{oTppFc`4ec+!B$`7}*sM=iL zPRa-Jm&CI@;ZKeyH(djl=tOT6fR&-{%j`tB2c7I(AwmNIi!7?X7+;Ce=Mjfw^(d(b<8==6y=r$XT8E7ZFe*=eA$IQ|fmpMD{yyhfr7Z_$Ame z-L)5|`oYst-KHZ-{v7ooFq)Xc-h0 z{Tt-jldh*dckCubhWKJ>@PkC}5mtL1D8crL&n%V%54E&Zo3ZBg(c3NH#59i^_^mkSnoGsi-zw%@-fLCEwm$gE1Lr0*d4|fLoZZzVKW@%!U23VJ09Ju3 zZhaJb^ZW;^uT2|i-XJp8!3WE-90;l8O8&BPW=J6S4rJg#OmIc0U#PY)FNxGSO~g9Q z{cjBS(w5c(T6`Q(M-voS-VB7Qws)~2SQqFn8Bwj3eg{3V1N1AHN+A93mn1k1tT-WH z`Of+WsdW-8iEgm?ukQW;62fkms8+~v?uM$(4NriyLLJ~2X9J9c+w;z^-IPUYMj`Rv?Gr2ZQ6@c(GviwAm~c|!^i zNlt8QEJT~%(K}DV#r(aE4rxVR>m99ags!D;D{@Lb|!M!yxcTisR&+Vh;_$LHFOE5nBvc8c1+`B??w}nM?{z=49 zRJ*r6S9`CldhSec@<{bPAJfPjL;%;pZ&YN=xd?q)iRtRI9v;axesgZM6D;tpK0kf&EF{A%ZoU2m zUPiqRvsf;eH6!sk5nHGjyIOoCgi=5XY&OR$`S+Q-Q@0=0pMNRlQ`RU1e+z(^ksS1& zQf1MHj}edWGS!qn<=A;v|3sXm*pDr{Nu|8OCg)FBqF!_RRgM2?Li$XH@_98_a-J|- zd~>$(HqNGqkuEC3)jp({{YY6Ca|n~$2q_BkC%$Bs?Rnkdnp_P2Zi3h~Z)5Y?9%sdU zSml3BBc~=7>}TeQd5*J+2-VXBGTgXADdib?KNaoNc*|f%DCLl{r3YeaM@h4q^7v6! z7RdT1Dt$czr^xH7xAfqU#%_JBC<}LmNJaEjHA{cOD)^RyPntB{%le35_?IN8+EE(= zg9+S-!->uMzV?&0kGw$(U%3;eCvHX<^n#WM>H3UJpz)!}s{<789l zJlm77bXp4=@)N4WgUfgRhB-n!M5r@_xPi-i14ePD|j zW68g~#v6aV6d4r?p_Ta0+_g*0M6O3&OPeZ2u-clz*4|)PQ8U^jUavPuch?Gv2U-%v zh!)A1hTzl{BMf?pT_nmUHXEYBGkx7_a^T|xhKYNiY=vsCuKfI?xAJHx?|$~-R4+cmzg%uNdxZmP0-?j@!nvRelk`d%bo=Ydgu z3j=N;a@?(BTOwsk)d_x6llOx}uvh}AFDx_dxj488$km5gPR92iIR$UTKT!{BMD_`Kl3e%g@m}AqEiB|?{`)C*TzK2KdIRx`vrKD2 z4qsqne1Y*f2kgvwSA0X^z@WsSIfx5&b zjH@>0ao{7~_FSZoX4jVo%9ozSl`H1YNo`*jd!k|T_4LqBaE8PPz%gHyp)BxCkV+-= z8P|Poz&9=uCJZxN>G*LaK7=$XoI(_S68DdWj)(%+BT^d_c2Tq0F`Ih2C-Ib5{glBk^6TR zd&VKNMXkA^j?aTQuQp%GY6}xqg;#95!umqR^M6`=K?r1#m%wx+pw54(L?_=$JSdNb zr*M^SQk#2$0phoAyrO1|^pl_0zTMnYfYTiT)XPJ#J7ELVDvUU~IAq$iRIr4vmSo#d zgO&v7u(uI`3-T)ZkG#Twff7v7TNK+6nhfHy#%PM>5R`3ZGv5Hp+?i88UYZpP9*xod zF-B9gl^53hx$L@tlISm=eGW?f*8%YLGrkAB!A*0sTYBW@i)yDR6|VDHsoz=X)X01+ zRvj$EA zHO~Xf_!8h@>ATz{&Hq1Ytogucd7$aFaYRlf=cI zR_hLwK78KVpFP7`EdphAWGAEr+IG?o%6o0%IwLqCQ4nHR%XM3@@wy(F)q35{;+9;K z3SAAk!A@AhiycO6;b?pSUJh$m$lQXS9k`vL-tUhU>Zgf@9l!&s<>WlA-L6nWYaS-& z2B*9;YPC;*^M_eH!q)Nb$*Hh+qFJgA(=|f zpsaC>Qo2GAhreb4EP?=;6`J|+krURs#t}S*S{Rb^^Mk1Wc`QzAL;QvxbHjj=G z`%Ak-d$ojRdquZv>E)F*y)1hs)+f2zuC&Vrj2r<$^WqVcxU349A!5N6*@f&mIKUPx cgXHx={yKl!DK|KkIU}^|U6jifceskUbIjW^vj6}9 diff --git a/scripts/gha-encrypted/dynamic_links/uri.txt.gpg b/scripts/gha-encrypted/dynamic_links/uri.txt.gpg index 24df2127..eda9bbdb 100644 --- a/scripts/gha-encrypted/dynamic_links/uri.txt.gpg +++ b/scripts/gha-encrypted/dynamic_links/uri.txt.gpg @@ -1 +1 @@ -Œ   : ½êÇ‚òÒN¾ëNÚÆQ·é[¼ŸÐ Á,‡½c›ï¼-åÜVÀÂN,î©“~ "³Ëêu[ˆÀQ½‡v°¤•=ÿ¼Öc¡è­Ùþý‡Î©3Ž \ No newline at end of file +Œ  ;È}dØTÿÒNŽ¡èÎ|Ìó ØXSá¬;¬ŽÄ'£NȶÁÓ7ÅSs0b7YfyF22l1J5_%U#5`oV>j_Ln=iF-Eu%9N zh+IsEfD;^tn=tr#P-3%X#O68*d$Co{-$CV5mv^ph@Xrs)ak&n=srG9z4)4>5Q;ZH^ zq~+1Le}QrAhx#98E?S(q+`B8OCLo0^>M>A!97lXXxn0g79O@t|{?W8iE+eP?v@`YL z6kFk({`yfb$@Jb^Te@3R2v%M*Z?fhVBR$;J=sYWBTo1sPV*kr9PYb-Jd~dNNbV4K# zF3zw^i|20GUprN|cnOYnc9Pb}U{B4tV1$e(r(MjDbqPQA^2I z{MvrtqYLMw2u}8~x4uvzPnGf>NB1%F&_2*Nq4^{5qjCP1?**^7!F!kL%_Z*l%= z3){GJiJn^%&D%M;k_+*XLbbZ&xkRmtk37BjV5#rJ&Z2^n8vEXQS2{;d2ohc? z(|aX;DKJG{O^#D_{--T-Z@723k;Fm1g7XM5Vu8BV9XJW_S2sg6#g)vf%<`Hvt)_{L zh>zMxLjCLOjDkJ}SL^&y(UGB{l?~5IHwTXBk=^^;04I&_ePRy=jOVBEZ8tk6@W5>> zQk96U(+}u$he|*1*eaU&*nuj{_Q>Wd#>Kue`(@owa+DXzWP)HxK*i zl$3SS(tl!iA@ir=!8|L3MS2ihtbVj|0)l3^U?s{EB8O)8RMIJYRS?bnPwNDK~8tDK4 diff --git a/scripts/gha-encrypted/firestore/google-services.json.gpg b/scripts/gha-encrypted/firestore/google-services.json.gpg index 17a8d0a2f2b5c8e108549a650c7b03d8d0638681..73b68c3f13378c44a8e1d7baf937e9a8c49b1fe7 100644 GIT binary patch literal 505 zcmVI80H)b&=I}@ zU5rp7DQzz&$t&;Q`1gj7MSF%!LI4E8TvolkGoA9eaG)3X@|VGtSfUEq#Lh*z@8itm z64Dp004P!BQ`$=$-*kjt#Hkbp^BJ5YQ6Q|0m(Ubc;?AbaAj00uSXa$2Gjel&#!?_O zoGBLzYaDX`Se*c*FdQ@l%8f`-sJHHd3%rnZnpVOfT^f7R9*D`bA+-p8>FCku>zL%+ z)~0_36sIDDG|JK6tjxaMno}9D_-r+v0|;`+P|?L0r*hhEod@?xfBQn~4Kn#v8?Tr9 z7yK(L;vOvL6aTt<;B+yaKidLO#2~R;gC>2X vHsQ)yMN!3g2sWo}>RX^1av$3MK!De!`^-S8%Njq7$=xXwsS^tqVmVmudByxc literal 507 zcmVbqxt6COEs{hi#DFF%4=5;i0N`(yU*f4 zI-LP7bRGjOVX;Fb0O2|oB$2s87*sN1bO$-8C=;>tS#Z)E+UANzYlFJjv$39=y2M++6Ze@^js_>Kk~o`^n7=@GXb9z3UeV=#?W9t(c3VO$*t3Sx|Em zi@qOagisc?zBYbbInk~w*qvV`acImAYAfAIqfE0{#y x85vULws^YWo4~Vtu>zyypDMZ2W=*%A!T#P=k0SaWA0Wq#*ndp`wWH2D5N($`}OlLLJDwuVgY%a%~+Eja#d>MH9e&rOh^+rtw6^> zyLZ{;c$kDVAY*{pvF@G6@DcyA8Et#GON0*Q1P3B58@bPIf)R{KZ|#rQKB7VeYKqoP z;IKS|$~I^XIP1An*9*J`Wgx7>x5qd|JGT5>no2d17#@A9Xf_SbW1;-`@8Uz_@@x!m z)X|t?7X7exwfdb4VbljqU@ScW%5)YqT|K1Cg6JR(s)1WtEkCY>L(TaWRCC%0`1+~o+9_*&S5j1 JFGR8Zn(RsdNg4nE literal 680 zcmV;Z0$2Tv4Fm}T0$NUiI`>=Mwer&G0plYbb?TGwI)tosiE_N!U%jn#oqBclo-)@M zho``u2Tdat2JNx{@v+P^h21jAR;=ItBqr@u1%>3LcdP4807!b^ex##FqTtlAoCoL>6U!U* zE=#!Y8T1fHZA6zgQp9y}V3crQ)|Q9sQ1$T9hH@M6uE0<45y)>i;x>CmiM&P7ylv>) zZ<4H|Sk5kT0$FZ5B`42(Nqlzd!L>~uhZAbb;vM8M=738-AitN+M|er}<$iLNLRDWP zkFtzZ(&R40U-ITS%*|koJjp^_f|1Z1M|NzW zJk@D;iA^2~32CrKTdgf%wp(%hMEW6BnBX8V4Fz>EgD?H5C%gT?8%@tMU~$|FiLJrm zn?UnDh|=c88N>8piye~(<$Xaiskn_T^`n8bBfD^=UpM2FwP0yO%l28ZV7I0vGn;%B O_5f1P2x5VlRGO+zLRf_W diff --git a/scripts/gha-encrypted/functions/google-services.json.gpg b/scripts/gha-encrypted/functions/google-services.json.gpg index 1038534735ded3d7d597a999a2935992e7b08449..d34eb14c8de008d3134486aa58edcface5b33c03 100644 GIT binary patch literal 1628 zcmV-i2BZ0m4Fm}T0!{bb;WIsmS^v`N0j`A&z3cR>0>~oQ&z88$a2>8y0O*$~W#Qn{ zHLDYBM{t-wzdibPf{Y8|XRz5v@N_9dckUK>t}KF z@B>c?#Dl5#^I9a}02PPdy`?q2WF05mDiymGbW*1WvpZV|SKZV$EE(H9O46g_vR^sT@4k-V{EC5LKO4+*6XcPk1pf*QI4LWst{EA4ARL$Pieck~(P{ zzDRskHTmPhVB>I;fsP3x`gFFvwD=cHArwJlwD zig!Bb(jCb6hpZDfvIB~umM&$+*m|r#=c^5)E^P-4c`JL0f~2^RTDKphrw4}u?A^$- zBIMLlOC`zzCV^vS8jdS&r&aIyypg89QSqQe@)A3gUQ^)mA7h{{O*f3?1Wv?){w0P2 zb*I?=L+Z4KfCS_(%J6dR+*CArKNzvAfhX4dz=m1!&LK%&+9M8KE6KW9J^D!f7bd2) zJN>TJ+Q)YjtND5}AExPR=jKYHjfj;RC5gf=9aot7_=^^ZOuov3Ai6Ki7Hn0N>8w;a`A)=iW!oaP*vxe?`uYl>W9kAnlT&_9Tu1Cnz@TlmiGd zV-t;Dad47^aAvCPpE|Ye)kv|j8~SE6XcE=<5X&7pjdNM9T(fklq&T#WIutjXB!^R= zq{Eg?r>vt6mCO2G2iSFhhDk3jmbIM&+v@m z^PAb+MU2;5>H>71$lvAdTtdwiv#|Q4*Vi;a+G|NRKyhl5dkO+Bybuy7o6X_mB0*6B zHO8Lf)OxS{h>P%v(c6C2)ddg^QO$G2KoDo6te4iwLI6IMm_s^I*0}}j)=oh&veT1n9NYz8q!vuWg z@+6kqV=1XfN87lIk@f8xTX*M5IB{*G#w~1R9Fj$pd%y$C1Mu;4@*p&bwyn}kyVe62 zH@%7ds2uau=_Zi?FOhZD+6nDmvh*To|KdYE0n@;8FdC}MT z(KUTjA(0I#x8T{nx}`{#Ez(ewt1nKKNF3zr#om+os#j_A`IQ}dR}82>@oFXvWSnIU zGg;6-=*c4U{mte+04;&%kK3@EhBf;whFgg20}rQL`6ho=M)-ZCA9GAxqFfNd|#v z+d*egOd#-sIY#&)?K4Od<8%*Ehhtw3q7C+$LlI{cp;_+>EGoVfckK|010F`Aiq@P~ z57G2Lg4L+d(BI|kf^g$#I_O&6bs{02P@}ADncp)mhz628gt_ICTcb`;=%D)DWt^Pt zm-0o8ZYl2Wi9h)Ew^pfoK}j0tvQojUDWhr`L7E%XnahVSjYZ4sX-^64Un6AvJwyyx zZmAqQ;Vd9FHyhqzuOuiP*ke>&EO4Fn^Eyu>al45k-vZW5CH1xk2O^!D1EhuYMB%rf zkx5=)_Gc=`1R{?_0}YB&-xWe`JlR2)yV&Q3xiPOUUYkSM1#|4%Z|1qNkNQ|M+If~1 a+t?#0ns}k&6V`tJx@e?(pK84hNRYWJdoo4< literal 1630 zcmV-k2BG z!5}IVk}smZiKpn?D#4Sj$+muvKLmR0;(z;$h!feWfwJ$}`!un=hw0g0Eo;wOajtXF z`s-dHhy1mF?zchu2`z;l+; zi-aP0a9#@wm)U?ZQG#?MNCd;_4I`>97dpklH%w|ju*i|BxDvJ$Uo8oH6V%W*CUi?- zX*ut?91Cxk9`k4qeUSDME@`i7mi|_#lN9xNsIlaAsw4~xaXYIC3M1&5J%sjw0L#-c z&@PTKR}TWwftFh-y%u>wUS*_U_fC;tnjMk>{9wjo1(-@9+1AX4rL*1(5n( zWE6_h_b2BW;>nm`gA>{>-0^rrV=LN~X@d4{xXInCEznq!zXZv55ae3~iPDY{UuZjC zib@`ea!K{-z>iROU(SG~MIh!UF?PWBqW-yJak5d@+_Kd!mCyadTkcNZeP*4P3hO@v zPKD|9S0&}72si~x6zyPNF|Ufvg|5`yF@8odQBTB-+%8Ey#mx>Ub^mPN79CbcZ2=lA zDvu?apJ+!Wx4u8vmS&sdl1|jx!^4cY==RJ#nj}0dB`1x&l1Nq;G-C?FA4m^t(E+$>cZ zbc3@L0BYS6wjTWTq5F0i0^(#YSa+wLBj%G(7dB~CU;xv zu`AS=Etlk5yC_^M7Kc#FonB1d|gWN zt2C7FYV=FJ_PXiD4TybqTENL?+QMTRwOpQ5ut=Dr_bd+Q373lti-wMTL+t)L%e7%Qf5P#5VWVv z5?%?aSd9b0?VDS)_`LjVZ@c!<{+yvE!9(6xDWPnsi2P+*=vfoMs5~HrbQf_pw=SYfTiR49 z70S*(X#}5GrT41w$oBm4QuGd!dVH9S@@v^`D=io&))Fo9vAF(E8P&9o7YJ}=!^N$vjLiH zsAz(z_w~SQC~1nd{}jijeRuf{PjLm>mK0rYYtalk(>sY|A;!Wfhx@20#V--bq|8*Z z*alCWr){HX1^}BV&+xwQ;Ey#}wXaZuG}b9oc#zsEfY-2HO*cwAa|~nIiUddO5(T}a zu}eeb6$fET%yHdZY#f2Z;GLTU14|do!$OP6DpUK;R+9l3Pej$!!iU?a%-Z+8Oo80i cyw`Dvs;8**`kOF3BgEqwP{C(8{%2l+&Qb&@y8r+H diff --git a/scripts/gha-encrypted/gcs_key_file.json.gpg b/scripts/gha-encrypted/gcs_key_file.json.gpg index 15fbf850d20e6bb1b63989862cf882db71dacfa4..d792ec8bb6f13a6be0ab208e54d551df1a5b9413 100644 GIT binary patch literal 1720 zcmV;p21ogf4Fm}T0zu^=`#LEMGXK)*0V7*r*`LlD4O4lwpo1=Mc=F0J!oP1V*~WT7 zg1+ICuXNx{2}KZDI+}eLM}PxGaq%#f9;B|%M(JURJ)K2Ey-4Mp6y>PJK6%KWaP~K! zm?X?%jqCdpT@NA(lQc&|GICVuZ#plRb6a1G1BPcyl&t8NhoOrQRlt}pu;YpKrvY)B zq*lqk>b8+bUyp|ihhycR82u{1V@E+A7TO>ALGkR1ggMU|cehrv!LQ%k+oV8OiW%+n z_TvGh6C_C}ZhZ5L<|M3MSg@GnD z@z4qAdq>(J`qAUjoM4mBuUX7m=b;w5`YE^n=zI2>H~Gml`_ICGPKZ6W{D<$e{Ey@P z{lzF#hS`y(FT}x~YH{~2+E+apIqI5d!jpG|ra_~KIJwZ-d|5yC`IPxx)0^vr<@b9h zP#T^OTVI?E%@ zX<-KtGEXgRNQj=ck6um^7r}i4ed(4KbTp_6cR77KCg7?-E@?6X>P`+#3Z0>!&F;`J zO{UIMMOgL~;=q;ElOfH+f`wl{aV-%*$|A{IE5SB21vyAf0;n2r%wvrfRFBXgu`rxD z99n<)ZCUP!Qg9id4y7-3*}8RQXwyW6g%&7HDRwk5PmhSME_?4aRI1kUzS)|F*FRbTI(9 z2p1G=R~=&$mGR4PAYnP6v=7j;pl9#&d#sYpnXUm(9TO?a9Zgt)489W=(cf?NJ5JV) zuxMSxd@$KhyQU$E1sC?CM>ZcN45`%^!l{a$He$CPbJ}j=lY(oN3TpezwU|6DPXO6- zvPiPMG<%7HVrrsAXzS04IGpoReY;`XOf--yrpQ)(R0UfC7im9#w?46|`L7XQj3uk} z5)DYUjLhjQL76n@EEz5^s{B@9LeV~Wd^#JKBsDIBra z5)StDeDfsZrU;V%GdjK7r1O3&Xh=SEUJ@yakyhrJXPCbIVVyH&MFb5F29*-}!wG7g*&eGW( z;CC;ZeiWAtAmylz?gz)f)}kzMH{?OnS2B>ZHN3`h$wWuN6)Clj|BG|ibk$E9XlTiP zkIs%4Kj|=g!e9HBT1a(nf2%eAzf`=-bBhBYP=MI+%EgxZ^_M5ZPG~ynCqq=}>nUTY zu;AdA!}~s$0*fa!x}OI?D(4@*E3{(x-icTax-@maYZgfPP>}_uDi>-&+o!o+cQYGm!wU0ApP7 zbsW@a&ejjHGiEeP$o#q`UYdN1jln4MPJy!7ld6O9nIT&DQ$GlF7wEM_wrcU=AI OP5ep(Nd{G0epWUSJzH!5 literal 1728 zcmV;x20!_X4Fm}T0-*085Ppg4QsvU>0ZWU(q%`+7g3F#@^f^-lBcH_Q!Et4pSoX*W z`@OrvWAg%V_yIUAu4oVlZHgHbHsARoV`9-VEIcn4^J1`Ey{O`Bi*G4_`eDN=%Mt+A z47LulE2@8{&Z{m#QZk~g)Hph+#AG2u+X68 znZasI93Wqy>3;C$gNY;1lX+lILoOGp?I4Pqlw87Q?Sff$XVF+bU+x+kT?xo4jj$cJw%?yVA)`xwV~ zegkhPaQZ?q5QszLV{@|pvK?L~QIS)JERYC%zC*3a)3huVO~L1{Kf#nWQ&Z!xpgDpr zP6Bjg0CNd6Eu9%mK*$pF9{NPd=>gcBIc*X!vlj^vYelJ@fowEB8k=z~-_v;G!Q9!z z51LB%H@|fJz1N}XS1Ef4G_axt@BDB3GQJeIIs24vcUn(_>~q1rxGs3|jX|J?Q2hB_ zWDv4ioIadSKUl(h2QVkaxt;&i(M&r}Jv{fACY!GKSJO?76;32Fl62d#fA=BzSZBRJ z=Rwx2CmekmMW{q0qey25XQL}6 z;7u+*?E7U$+Na))?j(O#H|l1j1}caI)-c7?bxsQP-q@o$;&ZA5&87z`)9qkvcAqA% zwN5lEO~LcA1=vxITaP?DJ#euFCY+y9?(RBm&8jdB7BYA7<#|~8I$LfBW=RmT=ncoK zl`&b)n%Ei4_eha(eRP`a=C#i0Do{Z zvwq-3`{egOH!Mxtkt+#>By`^5HW$Qg7Ip2}3Fp#x-yQJSzx|EDI>P?fm_Z*pKwg+O z^mF0lkU5W*NANuy<-*zz5>@N#L<)V_Q{LHzwU5Ne#6w_v-q+^R=8Z;)r3*Dc=W)xM zAF>q9a8yC|FVW@r75%XreckWmJU$W?7JY{6H+)f=2nravTz&$$I6aRkkg8f>APQ@L zwb};3r}!i&C`1B*yM}E=SzVsyR_^`xqymPcsZXDoi1Wu)nIvk}NHM5yN{QOU$I8(! z#7pCCrh*0fA3?@SO+B~C#MyVJQtYq1Ahu)P#uezkH)J^kn! zx`gN^265>F>8j5_sTW~r6jZ_-ZY8;M4_i>Fi-$-P!QxH7hDfvf&cc|Gi7%na#apfp z;u@*c>jr2#M#Tn8&6r#~WjJ5%|0u+;w)C3!IIP<8Z5HpdXG1yA-u5d4L`rPu&3a`R z(nkcD2LNM)^k>6xfwBXy9j3F%<*c~G#pfBy+6@pHAF-&bp%Nou1)<74t%k`4CAAg+$7 z_mIG&c3WVWR>s1P;s$yVi;*fZ0oY|V*Tb$5t5*X`4jAp?g8RCatq(arN4rKj+ za2kwOPv?2ZQNQ;ZLd*s8`w(>(6Rq0>B6D)}awFU1J(?tbTvH?_`H5;Q(4s-C5@Ee~ zfKh(jOgk@N5=C+5?R`pGf;x@vdr{jM+shMCcr@)v98HivHxwZ>hV$d1jAljGY4sXH4o+jXZ!`m zT+a@ExE_O|70;g2x&r#95N&7vZO&+RK9m1Yh&)v4*b$`H3*CQ7*Vq#ke}wHgGARyA WKlzX}JTeZ7{1F*YkFi2T>_@gd5ps0gjtozVJAxZ6K5NLyL__*pR7;TEK9UKTM z*i+g4F|&#$dwT$hhN4@`Ow$44WU-4PgUVQJ(ieMET2;0`RI> zKcB+tXOzf<6@Q2?J+T6pxW01{+P1P|c|ndO`xN|nGj26TPz;Ge3mU#UQ7b`nTng|U zJNi=G5nIEq91;P=;o?ae!OO?b_b2jgQ%pPxKSV5ot;tIPj`-uV7A_NnQEI+pdG;9#$GbL(-LxitGRrC-?JEY z#;QN6T*ZAs-6&S2JHccFR1Dw^BIQ6@SecmP5&w5qYV;`EuTmjMhK z;FdW;^qG^i9$A>XVUpH(J=*LWEl)n}nYscrMGT^dF^go|aK9RuPxOcQARJp9M2Sp1 zMyPIG{7wE2E@Ak>U+Yt9HK0n9tJ=Mso^-y@Rrva7QZ!X3kqv#G6s3I(Q{O zIr{PPLg>|L`GnN)!Wkxwd1V_JMJ+$3Xb?Y$KS}4!teWG&P{ZaaeD0zpzSmI@J7p2^ zBodMnAgsLQ@qWDEir_&_Q_NiwwUR2Vi4yuq-fV2=%MX6!S{#V_urd6LMm@#y4FC+w l(^jgW;xZa9ff$cMoi-~{kSmXksYX9b;~2KA?r#BiZSFjTJK_KU literal 655 zcmV;A0&x9|4Fm}T0%Ik3fOf+0|MJr50qXLWZ8txa1c^c1vo*U%%}qt6HadBL7dS9l zw+vFy$shv+*PF=_lSD$Hf+vV~2#00S^bAlXSW zCm>XH4L?=b{YOdnTA!-7MZbv~%0d9B{hL^Kx%|mfSK$}15`E>Ro&*rNni>v`%;Y*U zA9?lgYI}lZGN@rFnJ%Qq5dG+A6Kip`W23rh{a(Iw4d=6ByD<2ZMe~XNoSyG_7qIo| z|K+WD(7D%IkTdZm+?a6PyG1deUNx}`?ZPNcI~Ah8+^R)JJT!Qo>?uScNwnx(O92N1 z0^ww5jm;RVq(oO@gOZ|vG(&!;udq+GM#+`lgE|C*o&o8lbZG0)tgCzZ%Dd?P7#-Z+ zZNU9G<%>akho&KdFC+?}5yoMxgQU{<_rMrd}^ zGA(>kC$4;AqW2)AJ#!^K2>2SUN8JA$x)lWs^=#j%PhZJ@JJ?mfG#G&CE9MaLhi%vU z!deHcA-_3m_)U-+;vn3@@$?8timc!tWmBu@H?MbjWI$<0AcWuI5$9|R^zS}5`474) z34`y(s%`7A_b6diuzI&=eSZ#e%YL=kiryQ<&q8}FVXgCx*MwUX@?~{;PS@W& z2!5#?bu1@_-J&)lr5cc?#i`cO04SKiNH+e16`y+3?+HIv^-RGQOnyXua?Q>OkHJiI p*iN>zdZeag#)k4DSIF}rD0#(nh@?HJL2cZZk9w@IY$Wa{lcmRXL%IL} diff --git a/scripts/gha-encrypted/installations/google-services.json.gpg b/scripts/gha-encrypted/installations/google-services.json.gpg index 21e6ef1d03953a6e6f05378d5fc39297e5bf4468..d9d86b361bbf4f98e1ec0f189e07dd11079c974d 100644 GIT binary patch literal 1104 zcmV-W1h4yy4Fm}T0`jlfruhBhbN|xn0SBD&d>2twBC2)nH=|a|5zb!R5UFo@Ng81V z_^cU3LmFy|6f zb%G>9SqAdwg}gUYMBs_WsF{CX zQ+4!qa%UZE^x=N>{lh?@pmG6sNjN>4FPv*NK-()|pJhsof?@oqscHg6lwRewIQNQs z7VXq*wf9yiPB3H!R#143PUDs-a>LWf0uz2iz;}n? zRv$QmHR^Wn<4zDC08zr7HK3U-iMOM*|D=KO2uqz^qZWBRvDC+h2i^UjIo=#xZ~bMB z6JpWLRj?{1KNBPLp|`M8SHV55!t3wKCI<-6ashg!MDWl}aVp&MFt6z>Gtn#5Y=!{mEpE?3#>CSJb|u1;k5# z-dN^$3nGB=l$4d0f88}_*1jOu3My^mhCVA+H+NuoN$U_w)xxx*x&LwZWj!j|V7t-( z2KxPJE)6MlN^br+74jAn8qX)=zpx34oPt!rLs!>oCO+2>&R5#E8D24fIUJeu11s3G z_JCgy`<3-2SKBRo6PYfxM<||-=vN`?{qA$lhILZ6;)-P*BBEVYDQ0RxqGLUm%_mN$ z>S;JAw*wIxjnKcD)QsxxJY3cD=Vb7ku+R|s={$3nov_2+prmLr=JU0s297Oop&iEw z>oguGoKvhT1Iw1SW}fXl42Z}3uyHwMjJG6MEi<7M-X@hoT9jf*E0+zISIM|8aj{*& z;P(#>6N^KlFG}h#ytIXz)5pTUth7RK!oqfYBy%2H|vk=YmR0rc4$7Vt~aCs z-WCFwFR4cXCr44kcM47PIWzi|t?%yrA$`6+uTwwwv2Z<|8KL+0nQqQ_*Bf>g2c z4p0dIJLGhP$3k-^iq`*cYwR{a+fTf+RO~Oj2J^pngorG7xW~C$I%kk|FN+b|h6Ob9 z@ekRG;T6`2FeC4olEsXbR1*o_x4AWrhEDu{NLLXAEaK!K?B>TPEX-RVdvf{9a&&n! z%@65;fII5uz6~GZMoyWHwWpEZ?4w)&EhWpV+UH7s(As_i1286*SEl*01}5PgcguCI z-w>YYXz=xYqc%zE7r*C0qrPyA!brW^5%|dNeK&4k= z%eXr(I|}BROdp)DZPqqeY}syE%j=LPK#vTc&4i3%jEDg=hcBm5ZJ+k-;5uH3AqG3A zd#BNa)Qg;-x(F59L-xw~O^jQtXfV(5+@afq+g=(A9FiQVG5AqMvF)0Q#!u}kS{|gw?imV1`rW&^fB@DXLj`8Fw3IN*` z1HE3q_UMjqlH}EaB6;YIP)q5BxSLN;{h8wYIIK8GSx{Q|bgE>2#7b(9O>zwuRi`;I z%F5Mxfmh~-Ss9P!-I=Sgri{MV&==t^@2s@2%blzLm^wKyCe`@d+v6m#hV}f}W6%5S zf5Cm(n@(2W-tWQ!TMq0?3VKmJl;xw-c(_|Dv1{ASoI5qQ0jI%?nWkJu>{c=&g^7FF zLS-VMDJj?{^S=NlrTH{~Mz2(^KOJZ9htW2_X7fze;P)}ug|m^jQPp38PEn-Gq}-r@46F0*O#QWMuG6hq6k9W({nU2O^CUFTHu6LmAhV`bR`RP2Se zV`9jY+4VpOPck}Fc%l=_7mc;~ro8FNdK<#qeB5GqG8)sU-mPs{zJ+{y)oS32a{%)l zvPJD-d@9@ji%7e-B_Ml808qF!LPdH#!q3-z~Kqsi)10KS_@}sQQRxv^4g4;>;?J Y!E)QY%{R&w!v1NI>y!o<9cLwhxXvCt0RR91 diff --git a/scripts/gha-encrypted/messaging/GoogleService-Info.plist.gpg b/scripts/gha-encrypted/messaging/GoogleService-Info.plist.gpg index 3bb9fb5bf5d662b57474fc372a77d8ab2d77e6c5..4267a78441e753a3133f18054a6a3bd5f02e7770 100644 GIT binary patch literal 679 zcmV;Y0$BZw4Fm}T0ycya6q6McSO3!K0k?x()GY`9Mw+*Qg-sXIdi$>UoOxVbM5RS` zU@LEvHhtVCEJGL3fTXdunAP>kxPh*9DG-mi!un4pSsAD{l6+_+sZ8KugEp(;mqO9L zg!8N?nPUSnE)kXf@#&;XR4OsKiAbTtM)cr{LoIqY`=I~YPvdIj&_CAiD5b8MN{DEv zhf?Z~S~Yule@`wthxWU6GnFm zCwumZB&w&W?v#LL{;Ma=^)ryB{TmAIpuX`kDENV&1b-*4dy=GY(t?Sy3WDe!)d(3%| zDETJ1AnKhY3dy9{1gl3n6TU}feD=m%Oukou*pwbYauyKo;{FWBuXIjI!01&hM)I2%-Ir6IefIJqQZ7__!km0+1w@GTYSG_%QF1c-hk4A~D33UY%sOKd|)HC{n|gD+&2 zP8PCW{R!zqbD;NESxzc~{-!HN5hK!~E}#1!ipp$#%W#93W?NEiki;f#hue+GF{L;f;__OQNdiNnY&|#E7IE+eE`^Q$FNuW_3mE*!sHm79SIVj=av#G4MFwADupC3 NG6k6}pMjp;B0FKhPe1?w literal 683 zcmV;c0#yBs4Fm}T0taqk4O#FMI`Y!#0as8u_-IsFLES{{#-*0JeGd2BZr_<* zaU>p*k(@6Na8q+Vw&;GCH>11f?ASK7=Wj;}B8OD@!&xhWSD+pi21|3h>v|R;yDv?{ zjT>1k6{q+mC+J;Y2Bpup zhodMebyv2qaweP!Ain@<1~#Zrf1`3?mTv4(?lSBA>%DX4f9a-1ktsZZ{XixFD@!)q zoQHWq5UM|qwRB%G;h0sT1t)pze}%y1HX)s(ob|3K9B($Oh6w>i4Fd2KtA86wJrB>B zB1xProzL5r?$mptr|CtQzd=MR7}_3JcEShdLd@*xhMy1Zd_ zKyZT&sEUrTbG4ohA`SdL!M&jgmWpWY!QZ4*wV}Nl3yn`u-$1%)VWqfh)VxA#1fTNa zJNWzUd&eEV@pfCpI_C?bneK)VKRR*aU#-={wIIzqArRftSi3P?kw=>2CPhCOwG4+O zyR*=8K&}l3V4+@^h(OWj5&0WUbZ=q~v)B+T`h&uG0Ab2HJ?;s2zw+lK)q@88hFOLPLlp6YVFF((L!>DKhy0 diff --git a/scripts/gha-encrypted/messaging/google-services.json.gpg b/scripts/gha-encrypted/messaging/google-services.json.gpg index 3fa3038470ab53dbed157a57b294b47a262728b3..59aaa4d00b378e5eda5a9c4a57ee16b14c3d909a 100644 GIT binary patch literal 1628 zcmV-i2BZ0m4Fm}T0?uw)d4bMjoz5pg_KX}i0XZ59UF@(~Guce)*5`m;$$hS_rUff=eIrUQi? z>kB??Y2q-cYtjqcXE`>{;zI1p=!uko+aRLA8+dj9Dq4Rr&)+$fgge!8mw7{wTQ68+ zwz|}YBp}bjVS~YO|LzBe6JR&*$g)0{qI?XPVC)dz;-&>vDF(a_{AQj`gj+Ip z$6!SgkuzF^Xuz8kFAAcq5LjD3==pR`jkcKCbXu59WKZ^1TKStDMLnKu?LUHO>}tZN zLbok?oK&abn_!kTt?BzIuegYHtrt=z-N-N0#eNCK3_2c>*x7x%=K#cV483g_ISg9O zF~$Q~{bqb0AW`-|x@;Cyq_QUUV?*0WUJP|)hTo>{7dLJ;-R1TDf+>@_OBqV6QI-Bz zvnfDb^wV_GyN2O|V(Ay_w4D&9JAoh%JkRl<*^A`ie;lT`-#%Ag8Y7?Lyp1UeYwPvV zvhuz*XgEEZW-0fy1(fIBK)_-#+Q2EfeQvF9>NW(Sk{4cmZak@WH2p&V3 z&`P;v|BR}j<#5(084Y#RpcaEBNvnLD>sA7~R*))Y6hF1W$0yP2a}!6dS4-k zd!cG=@RfQ}iehJ9#7Quq6=9=DO%A~^WUz(r&u zJuT9k9S{}%HmMO@Wt`S7kxN*04)JeDgM&mG8P~%gQfYwzO{i!|rWL$$!hfiN4xL`x zb>hb&CkQLGcP7Z?U@&^Sujd=k@mLg4#aHTF;{G)DKm7WCZgMtUQQqy3ZU^CI31=8k zp7!?32B4WR=mbrk5n&Qy^R^>I5w(eHxPAk2mmdZt&&^f?G+ z3*a1VJ43oU>5(|?z8qatr@-B(*e$4k2qh0qi~e<#3|>+o^xV{g6&S4!6!s}|-zHnhZa zYB*p7IfsfNBdVt^coP@gFqGv?BG99$tj(^F^pyMPv?Rp{v0w*t{n~~dZHaRd)4VsC z4RqQjD=-QPh|H0o{JZo7wur+Ok&Q^ERZUo40NYfgS zTuIIKe{Nf~2w^jS3a=HLFkfGx|68H3AB?_|!J(UTzcoo~TfC?!$;cp*P?tR5oNR)4 ahh@Yq_`35BhZu(7nV6r7OOs+-pYHCCQ7AV6 literal 1630 zcmV-k2BGaWW1JZYoEboHhTVzX2~~SmEUi)!qZ$ zK;DWB2Js!D9;Osx_Q;i1=KI>E2le!dh1U9o*>GyXFK>w>VOf-7z-=j0MHrraH3Duf zMf!H>S7cQHyeVW(Ss{srcv?Yg%vRs6lC=GWLg8Zwa0~8={TDCUwJ01C!S&>i3ha4* zsKS7I**M+MrpY34E~(z=Qd4G+=|7ppoBU!WTooCd^6Te0qt|9*LhTB$J$Rfb z&MrIWpu~D3L&~=?--%t2Iq9`)uaVgBoO4#7h|A9!XnJRbe$L;|Idn&3hZ&TB&FKE9nf69``X=`7dQaKFdE`NDm$8m# z=3G?5USq;UFpqL`1?$&O4{;=w+@O?(fTcVskGkQ5zA?|F0O^wvJ|$38_~!HgO|zZ^ zb+3ACVQgTSb;&FhL)YqBXSZzS03WGg&%cXMf{^CMoy0xR zX94$^dBQ!Roy!-vKq?*E*)|U}G{AtcV)~L|=@t2vSPj<_Sto&nG3pOC60cqiS2p#=tOz<&>~Ut`!)_hc0YBlk!;oe)v!l&a!BI^pJyUYqH!t zv@5d?U=2N`auD7&NH{K024pWiYy~H^8S;kW55;4NHW(+SY3%rz=BIQtn@X9 zMbgf?lfMiv=EB}dHQ%wcxe9g4UZcqCV3Ndb;m^GH9y zuafOH@o#z%L?5_uNg4}Nw~$yUrk4$a*#rjl(55suB>wvx+DH00*&D+~>Rk8Wtf`Uk`p7r-9ajwy#34)Pj1}c(yf?lzC-zTpdYizkmtn zGVJFWeP71N-Gp$4y(v5-PbHj`qz$aI*z#j!k(P{O)4LAS|=$K57Ow_fDTA@Q~ zPY?2PSZG?Scs{+I6jRq57CGI7o2%o+aM{r2H#SR_7=fLNFfzxX%UmY9DX@OVV(%jd zB7{BWA`6y9G@_vjG|?Fxh)&eETm@!68Zi>;Zwt`hxDAt4oyCDsbD7T70h`Rzi}~9_ zD>(>?DqgdWGQ8@P$3v*E2|e82d*-o|bj7le*gzgKlI!%*ZOB;u8j86;i940Rp&trc z^)tCV`I1xhgjFHljA=@(p$}w-35+q>UwYp$#-sg(lBF9^GG(6RvCJwpy2}NaHaYlM zq)$v8aAaJ8U=x;A`(Q%d)kTc3$sC4X$G+~SgZo%_T7nAu_o0MmP|?|HKHAb+=SoXi z9Pa?z&UIIW$i$|WF3s0*biY{SGljxT(FJ6zX-gl}L-xy34zg?ltm))ybjf{x8P2Yp zX@f_2Zco#{xo)A9&VKVO?4t8E+2)`3Ay8$f{=I%FTIqjhhtnKl8gcTIMY clrTOTmV05z;LNZ)-;r!YrPDV(p~>9-Cf^J+xBvhE diff --git a/scripts/gha-encrypted/remote_config/GoogleService-Info.plist.gpg b/scripts/gha-encrypted/remote_config/GoogleService-Info.plist.gpg index c115a01146b45481a3fa9d00179f8abf7c1529e2..c6a8f57dca21900fe1bc0d1b1c609228da7c1a53 100644 GIT binary patch literal 652 zcmV;70(1S04Fm}T0-l{7KLi)II{(t?0W8%R&MW`Lmt!7-SiR+==Wzv;@*k%g{fCazo zkWJe6Snky{I2dlY`$_+fcrOAPKM9A2V21=Tl*gLM-^&+ya18p(RGW?P{|oaCL;t_0 z;Le&oYUDIHGuOG}7_&_GgRuCS4S3h^=i{3X?am%ik3b~vTdE=^kfzWj>)I$M{mI~! zwS|*JZjTGtE8^hbRZ}sUinRC%_OKr0pwRbA-#dkF{~YGcl2H*HYx^g5 z6T(5$$8d}V{y}o)39jL-sDT)4;LH15ozZ*i6itMXrY^9oYxR_XG$uEp$Xk%);I_H( zVrh=S{0VCw3kVf=>xy|q)dT{LBT4bIXRG(1>)dnDp088EdQ%V_a_u`d=u<(l zy?h$x*>}WOg_7uZU@HNuk;1zYBdYZpcb$L}Rl*~wcS1QW@-%-#%L8YJhk8o4U{LC` mFa&htA02m%(Ou()4&x$=K=l@h+%173k9BIPBAeY&_1vi@5l1Be literal 656 zcmV;B0&o3{4Fm}T0wS+?c&L6CmGaW*0rv8Q#)#MA`)cf;dAUxt8Fc+#2Z5$B11Pjd zg1^?zoBpQcpf2h4Xr;51HI7}PKfQi=-}x6BK`s01Onk8&+*^h*7>obKgk}Ebky}1k!n)lLvHt`x-72!;x(xF2# zDZgg;eWds2bE#PmS+TxgyAZ(bRm(NOddUR&`W}$4t!u%#YRaNresreRbVeh&@%;Tq`tY5zBX%Peniv9@@-$Q&4}8& zIG%kdYPOdl)l!kU4%m;fe(tGR<(4~ewMaH1>_&k*KfksYP~zpO3>cvV(<-8+ZFUID zBON|kMj!)rtz*5=fk>(VzE8UM$l)L37W>(un`Xc9S<)uk=X)s)-O5#jyXN(VOMZFC z4`D=ZW-GN}UPjN{-YeaLm=e$uY-1dZSDhBC0BIr3yw@i(rk-5g>F!pIUkssN{~oui z_!6gHIr*)#0f8XWDfL8eiTz-bE}*%kaOPh>;=vAMSAcGXLYI5|$+-YuONp0!I#3`! zTnydtg8Ib8R|;@yGJ20umiKgcv{Q5d diff --git a/scripts/gha-encrypted/remote_config/google-services.json.gpg b/scripts/gha-encrypted/remote_config/google-services.json.gpg index bc990ea8cf865326886802f007b6d4d5c2b165ea..b725d081012ce9204e790d14603565075a18b263 100644 GIT binary patch literal 1103 zcmV-V1hD&z4Fm}T0tplq(d%f-WdG9Y0iX~q%yv$6kfoqH-V(oN62hk_tNsFMm?ks_Vl^Og%*RmW*sI7=ns_R+eyOr$I4qEj=RX)|ouoOgOUG0yy-vwQit9 z-=W`}5i?}!kLr|(^xt> z%fke+pY3q7Xka`-nym)E*v5T45nwk7L%az1%{f6{-ZiJPcALD#tfmHSheTn#R7yDC zfEKV!&yH?}De|TaPkMgn3ic+m1%z;R5a?+2fo~`h3;GXPzhML6l#9AAwAH0cDV)0r0>ROCZbx15? z9hbtZ``=;=VM+(E7~n($&BCEVrAwTU=MZs!sycuJIzD4OB8*?r9UAc;!9=P4xh;#) z!fhovs51;6cwcok4S;!*!;uOOdLeA58#Ox8lb?EIn2{aw1ZQ{1$S$r+z2MlUYJ=<_ zPK)f(i6)D|3})$|-gIJu<3E0U^l=txzH??_PQd$`^F*F&)lpXMz;o z6I?4biWReE`5&pb$9Ufhr>I)LLB&9HS-Pmj=c6cQGj_UBE99i=Uh*NWcfU;aSTs-F zM~rfNdTvPe>H}#;$%5X-td{H~7cGIHJ#OW+V$Boq4FbSnV_kGi-zz?f5rv1Km2ZAh zK+XraJ1DdhC_ep(z)zdDcEI4pbft-4T~|6+5;-;`2Sp%^6EE%dIZ%==&|xqtC|nKx z1S=$h90!wT)FGMijVxiqWjvLtlrtBSH)zfZBtqF+$ z{N2B5A`GX`J!XDp_ii9mc%{8cY@S@|#tbEDBmh&^g zgx4@k)JpJLH&a}XspIllD&x1zmUOo=<`<0A{da-sgogHZ>^hO0_46cJy=3=YW>#Mc zX8R)+%$`m$oPg|$aBL)sw$NV(hSDRd5Hhs8OyrXk$kn^g;9{W6rbk+6{KvwbfHM(9 z*kA4EnK2f;5`P@-B^ORlWEgxxiHmXg`B4%v68KG969URTYntP8({sDT$0MbDcWe;) zKHd7mtrTMK#~J0}J#W5N&CmwGhB>4zX|0VP4Afz$f9(JlS5@ubla5H^8NPp;1&bLY z*c+(0ie;8}o_8NI(0{`P^eQcr6|>_6OmzrfhAsc4ye*t{^lXkTv87_v-9{rnA39Pi8SaovTBG|) z6h5Ma<1Vu=2&l^IKXqKYrPCQo-S_NA>n_5VETk)4aO&;Ku(mq_OY6JSFxbuF4Gc8Z zS3_>|FI;}Q`&>GT!-}wkr6--BtwUUZmaP;t)~t~qQCJ1Go@VhsI#vR8y(sMNbe?jR zu&!jLQXROXHU03)39wWnKYa+&4smRUb_%ehhx`SzcOU8^YSQWe{Am3Me=|ispI-%R zFejY;S?V>f8jV~qa`*r(Q9DXSVjlp7ETp+CRuZgFB5`91+KGAZAMoqnHMm$OsV_u_Na{Zt|LhAKSv-M|%E=HuMjkL@)~!!{JBUi~%u5NOI(E`PG^t za%B+aD(oR2dOz&4E_1mZcEp>#=!s+U6}h;lhM=4YV;4)LkE0wC4Z3-FRv8V)nS?!v zqs~?pHWj`bZsL7%B3rZ~rLVBl6fkaoyym!1oZ1HxOxm5+Vcv294qSl$-F9GTZ=BuE zd$G^t?)m5}P&k!fuN86p!!x=imUu}c0+4*hTcW{pQS))1Avpqt@th(2a)jNKuxDP~ zu4`Xf$Tb^oKo!yY{zI2?{)=ApOnx*pKfZNjLq7>rzyG$9<2xaKWKHamZD+bFDxvR; Y0(_CwTJ`C46y+y%|A4X$^2I)0vsJYsA^-pY diff --git a/scripts/gha-encrypted/storage/GoogleService-Info.plist.gpg b/scripts/gha-encrypted/storage/GoogleService-Info.plist.gpg index f7e4981af14139a0ae597a74e3bc387064cbc6d2..f7b4bcd21541acd748cda07f9d09eeb757c7130a 100644 GIT binary patch literal 647 zcmV;20(kw54Fm}T0z4vnhhhx@x674=O11<+8LF>|47~8ti#~n1I+DzM8LXRKSt3NFF3ewzn_9 z0E5c?x}oEe#ib==xWo}njVYDBNaj~GM8#YWB zrCerql|ygtzJ;!V*)TdQ!-Qw$P|5NUTt28$5G|FCZ~okaOUpwfkh@+geF)FmW`O*i zS{`kQ9~s}Gd#f#}9Ub$9gcTCnz)EU_Omf^7yEJ>Dl#aY~k*f3RYLazl;4_Ru|itxob8*Zq~qZ8|0+kY9tTBp*_l zL7Oi?rpXC@FG`O=>DD{k@Ilz^V=fXOTMu6_S^xpmtJHNo>Nx3XTAHoI;#9IX8pRjP z#18C_YQ>~JCJ=6AN=S(DyHx}EHQ0z0a=DOdh86FJrR8Qq56gy58uQ(q@PdWe9s5{0r?iW h0^HiZu|4*-y-}p@-4omUwcKbE5B|uz2v6=vTw-S)K3M<& literal 651 zcmV;60(AY14Fm}T0=Fm-D7*Fi_wv%|0Uy05)^t&cwjoY7S&j~Omt^L(UB{%@InL2f zLyK@aB$Fmnn?-kmR;8JXr7+w1)+9wB8cGjitAs2LFXIXwDxb@TWlPzj5 z6F(hB8%Rr^>3^^~AiYn#h@UH!GCLiIz^WXEMmfP{&5W9pv@6)N*Vp!ZhKvGj@5Wa} z%f-;Vwl$BO)7Q?QU<=?4>{mI6SznAQS~*C7mSJYF7+n3-0bxfSTCR_1{4nHI_?jkr zlsLQK3vHZyN(K(NOj;Euu!d2GoMq(Md{)sxKG@5YiqlyWFstPfYPi=vZhWU>j;A^0 z7%(2u(k!Y7$dow>`= zNLYmaaHKyzxU-!}_$s71_LXmMV2`>osg@uqI*{XqHtDikBcXGI3Y~J0XHk9e3|;t; zRUoxhRbrQcPab9GStMzZ;|IL*KWGkI6#5YfHkh*VIdojo{25N zL$RXd{d6HF;O;?Boid3Ad8`Dqk^-$-tpl#{-pzeR05*e>Y2qbWbVqMKKQ<563w5Ia z&_ihz(YfIzC^MBOWYKRW?fD$+vMagoQtVy6vxwYM^7CKd;7(Z6qe(kfkJ!fW5E2=` l5Qs6SpI?A{%?8*;qVD#n&tk!6?~XyO#GF-x4cGAfYx^oOJj4J1 diff --git a/scripts/gha-encrypted/storage/bucket.txt.gpg b/scripts/gha-encrypted/storage/bucket.txt.gpg index ae6d8498d0214763cd3afc17f36f070e54d97e50..e23ba13bfc46f3b4c80d0f38462564dc113a499f 100644 GIT binary patch literal 107 zcmV-x0F?iX4Fm}T0@ULW&pHjhum93o0WPVPhYYfEtIRLTT=`yBfvIzjMFp0%LwW+S z7xZcTVyi)*%t51-llbj|>a9=j;JTdFBDV|QGL*M6qe-G`uK-crYI0s+>Nb(Y7E%Sh NHJ)(#2qq&R-$l@8Grs@; literal 107 zcmV-x0F?iX4Fm}T0)IL&Sol3i-ty8~0g-Fb{Y2V~JnNQLG=!*d_sa|+t{TVY;S#gh zhPqu1wX_xIqdd7=uFU)Tn##D6z!w9ec`Ksj`rljYY_hkFu8tcDv+e0rL}kav@^C~cnPDRCN& zj~n#)k`M>)EIJ<^`=Qj*nfBR>lo=)in z8lOtD-b(8L*w5o#roDaz^(#ov5T}158?^muGIOL&utIZAd*NSh zQ@CSja;wh5b}%wgIh29~m!&|uTs72@^V|0jXH^O_vBU324tQ>~3*qw-7!OE-Q=M_7 zq@yOB%btn>g-#K0&6R$$%R%6`w*YU1)VY;3-XAE#B^I87PdsZ(U#M@2s}Lf6k>?Ak5Y#1T)-EFiKrtQ@ic!Nbf zC`&jq!&uHE%T_og@opE|Z#hOszRoOG$F}M4XNAzOfj0!}Me@UYMSsC&s1D2I@B0n)Rqrqm8mz7@!m!j*No(y%3(`S}F^DfhC?0`@p}d zu|{wZsR`-6pdpm$Ohm5`#0IXbvz+K8C9@?6UPHQT9ikWWz@L0h(!tA=EDNDh0`6jU z%4|34@vB=mvZQ2A5tE4dK4_?kEpkI9l~iLPy0@e%C_;~d79?rRIjnDGx0Ka~vJ{^E zboC;C9LDZZggY%82;vC=W5WJsnF%U(y|%iN*GH)6;FA%dt2#eZNKs zA2<5yNZne(ieS|>r5dMQz&{mY_w?6qYwCBmb2HoYewbYcQTWz4r5sB`eOTQs+#-GF zY%^lv>ob#P(S0cc&TlJBr@(C?wB4|@z+XO#M(Z~#mp|QFL0S{n~j%Q6}XWv9& zCd@hQel>&=RBL-IF z0TA(SSqAB_J^7>key~#KkZ%PK@h><}VMO7=YVudryr2dGHcq44y8kze1oJhz*S|ns VPV3j%q*iy#RCw2#6N>07@1O%44uk*z literal 1106 zcmV-Y1g-mw4Fm}T0zr$Ko!0v!!~fFi0o<6!92(0##EeyPl|x*@u2Gu&gKc!_u^|A9 zpnnuur%A|&Ljp@KuSw#C-2Zrgj#MSA2&U1I6?m)Zz^}qN?>X1JIL>Y8hMA^Om31Xo zt1{X(%8K=;gG&T`(!eWAbY|Ajpn_opIDFBZ7sOyR!#JT4$DsK*$Ofj3_w?^VE1v`b z6>5p$5^B1k;mB=U8+bQRzm^-SZBuqx2_%Jdo7Og7d>tED8eTu#QqC-VAuzd8VDEDZ zE{&;%Mt+A<`bJ_0PkH|t1cN`dAgT>IFs0S=yutT9rkbWRlXaQ|>LqUc@}O!+ zs(bwrIGp14k!n?55W6VDW)W^}LlZ&C4?FHZc&EyL!w!(-AI)a`$NhR}Xy%aQ_m zJI&ywH4`04azvi_TW9%0c~S*TnoV9tE`G3Q9bQyikFh`&U2iIu0(F7G)4nF z;bJu)9vlU`7lh4zz=*vJ{{mgZqbT5mWAG-|PSs`!&8cq+Ke4!B2dvpgY_*zdA6b)^ z&F8-*fdf*-PrpOueT>|(T!Ps%-vah$JN%mYpVC(#SMPcDi#W2}B=g~icln4XB0RvH zlP!flm}Zs92@5c1bAp(6EIW{;{M0U5sN}Xx;wt8G_lriVyWF*_ibKPd#b!3D!#L>Qale;QDlHV&>X`yeE|$QG-=UP3E1m|71rKoJ#} zwwF|1KDJSwUfZX65YQP2VH6V7oCjr1!~nd5Nzzr?Z zkqso`GXX*ok_j)zYfIRsKa&4vX%M)NG?zh_WqZorp~fFHGq3rvY3fMbIBs@7o#k!! zG%>5-m3z3&YuGkdzEh(ICY+lTOt`c*u?W*z{dK6COZ<|J@$xCnk27<%;GvfGcoPD7 z3$K>oCG&)i&ey~6p=3Xxhn^xfyr##M>af5HL-Cd4qc}^2SUU?Kdwjx#)pPxe`xV7B zMJ=bR9tBKcZ8f}VEvXHao^(3|NXo+xDAlKB+q;Mssezz7>kOycr6Kf#%Ky!!V(P5W z*dXZq`oaM8e~}|xeS0SJFRsLDK#;B|2$sx0pr9n6@B)jzB@?b`OUK>4JZ|V;RL}h; zgthQ+RKSkAK Date: Wed, 26 Jun 2024 17:53:02 -0700 Subject: [PATCH 32/33] Update Unity SDK dependencies - Wed Jun 26 2024 (#1051) * Update Unity SDK dependencies - Wed Jun 26 2024 > Created by [Firebase Unity SDK build workflow](https://github.com/firebase/firebase-unity-sdk/actions/runs/9687899733). * Update Guids ID * Update readme.md --------- Co-authored-by: firebase-workflow-trigger-bot Co-authored-by: a-maurice --- cmake/android_dependencies.cmake | 34 +++++++++++------------ cmake/firebase_unity_version.cmake | 8 +++--- docs/readme.md | 12 ++++++++- unity_packer/guids.json | 43 ++++++++++++++++++++++++++++++ 4 files changed, 75 insertions(+), 22 deletions(-) diff --git a/cmake/android_dependencies.cmake b/cmake/android_dependencies.cmake index 48e444c9..97075975 100644 --- a/cmake/android_dependencies.cmake +++ b/cmake/android_dependencies.cmake @@ -16,71 +16,71 @@ set(FIREBASE_APP_ANDROID_DEPS "com.google.firebase:firebase-common:21.0.0" - "com.google.firebase:firebase-analytics:22.0.0" - "com.google.android.gms:play-services-base:18.4.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:22.0.0" + "com.google.firebase:firebase-analytics:22.0.2" ) set(FIREBASE_APP_CHECK_ANDROID_DEPS "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.0" + "com.google.firebase:firebase-analytics:22.0.2" ) set(FIREBASE_AUTH_ANDROID_DEPS "com.google.firebase:firebase-auth:23.0.0" - "com.google.firebase:firebase-analytics:22.0.0" + "com.google.firebase:firebase-analytics:22.0.2" ) set(FIREBASE_CRASHLYTICS_ANDROID_DEPS - "com.google.firebase:firebase-crashlytics-ndk:19.0.0" - "com.google.firebase:firebase-analytics:22.0.0" + "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:21.0.0" - "com.google.firebase:firebase-analytics:22.0.0" - "com.google.android.gms:play-services-base:18.4.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:22.0.0" - "com.google.firebase:firebase-analytics:22.0.0" + "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:25.0.0" - "com.google.firebase:firebase-analytics:22.0.0" + "com.google.firebase:firebase-analytics:22.0.2" ) set(FIREBASE_FUNCTIONS_ANDROID_DEPS "com.google.firebase:firebase-functions:21.0.0" - "com.google.firebase:firebase-analytics:22.0.0" + "com.google.firebase:firebase-analytics:22.0.2" ) set(FIREBASE_INSTALLATIONS_ANDROID_DEPS "com.google.firebase:firebase-installations:18.0.0" - "com.google.firebase:firebase-analytics:22.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:24.0.0" - "com.google.firebase:firebase-analytics:22.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:22.0.0" - "com.google.firebase:firebase-analytics:22.0.0" + "com.google.firebase:firebase-analytics:22.0.2" ) set(FIREBASE_STORAGE_ANDROID_DEPS "com.google.firebase:firebase-storage:21.0.0" - "com.google.firebase:firebase-analytics:22.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 8d49ff83..d35d5fed 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 "12.0.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.25.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 "v12.0.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 3221a612..159cb2d6 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -71,11 +71,21 @@ Support Release Notes ------------- -### Upcoming +### 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 diff --git a/unity_packer/guids.json b/unity_packer/guids.json index 069e1451..7347cafa 100644 --- a/unity_packer/guids.json +++ b/unity_packer/guids.json @@ -1130,6 +1130,49 @@ "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", From a6199ee22f842176ac49eb7b26bc6666301ece35 Mon Sep 17 00:00:00 2001 From: a-maurice Date: Wed, 10 Jul 2024 13:16:41 -0700 Subject: [PATCH 33/33] Fix App Check documentation (#1064) * Expand documentation for AppCheck * Update FirebaseAppCheck.cs --- app_check/src/FirebaseAppCheck.cs | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/app_check/src/FirebaseAppCheck.cs b/app_check/src/FirebaseAppCheck.cs index 7cfc4457..be5bd670 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) {