diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1b4606ede..79f1dcc79 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+
+# [1.0.0-rc.20](https://github.com/deckgo/deckdeckgo/compare/v1.0.0-rc.19...v1.0.0-rc.20) (In progress)
+
+### Others
+* cloud: v1.0.0-rc.3 ([CHANGELOG](https://github.com/deckgo/deckdeckgo/blob/master/cloud/CHANGELOG.md))
+
# [1.0.0-rc.19](https://github.com/deckgo/deckdeckgo/compare/v1.0.0-rc.18...v1.0.0-rc.19) (2019-12-13)
diff --git a/cloud/CHANGELOG.md b/cloud/CHANGELOG.md
index 61101f3ba..f8d769c68 100644
--- a/cloud/CHANGELOG.md
+++ b/cloud/CHANGELOG.md
@@ -1,3 +1,10 @@
+
+# 1.0.0-rc.3 (2019-12-16)
+
+### Features
+
+* send an information per email when a new deck is published
+
# 1.0.0-rc.2 (2019-11-10)
diff --git a/cloud/functions/package-lock.json b/cloud/functions/package-lock.json
index c51e8f3ab..2871cbc5a 100644
--- a/cloud/functions/package-lock.json
+++ b/cloud/functions/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "functions",
- "version": "1.0.0-rc.2",
+ "version": "1.0.0-rc.3",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -25,47 +25,57 @@
}
},
"@firebase/app-types": {
- "version": "0.4.7",
- "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.4.7.tgz",
- "integrity": "sha512-4LnhDYsUhgxMBnCfQtWvrmMy9XxeZo059HiRbpt3ufdpUcZZOBDOouQdjkODwHLhcnNrB7LeyiqYpS2jrLT8Mw=="
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.5.0.tgz",
+ "integrity": "sha512-8j+vCXTpAkYGcFk86mPZ90V6HMFmn196RIEW9Opi0PN+VrPFC1l/eW0gptM8v7VXaQhECOxws3TN2g+dDaeSYA=="
},
- "@firebase/database": {
- "version": "0.5.11",
- "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.5.11.tgz",
- "integrity": "sha512-YEakG5uILYkZ3qEDU4F9pe1HyvPlPG2Zk1FJ5RN2Yt564lTNJTrnltRELoutWoSCAtgEUXEfiTDV+864qFSG9g==",
+ "@firebase/component": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.1.1.tgz",
+ "integrity": "sha512-e9MrCYH10+CvGyJsuntdqH+Gtkbvm33GBEPprKClq9Qh36gXZxtvlUPwXACJfaD34tqxFB2V0pGi7i8iJUA+AA==",
"requires": {
- "@firebase/database-types": "0.4.7",
- "@firebase/logger": "0.1.29",
- "@firebase/util": "0.2.32",
+ "@firebase/util": "0.2.36",
+ "tslib": "1.10.0"
+ }
+ },
+ "@firebase/database": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.5.16.tgz",
+ "integrity": "sha512-m8qrt3irSiSkFP9i75nGWFasZFeFb5KAR6/fvWOoLMXQWE41LU7Z+osUaXWvGvPJxsoHD0EY+4+Blat4XiJx9g==",
+ "requires": {
+ "@firebase/component": "0.1.1",
+ "@firebase/database-types": "0.4.10",
+ "@firebase/logger": "0.1.33",
+ "@firebase/util": "0.2.36",
"faye-websocket": "0.11.3",
"tslib": "1.10.0"
}
},
"@firebase/database-types": {
- "version": "0.4.7",
- "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.4.7.tgz",
- "integrity": "sha512-7UHZ0n6aj3sR5W4HsU18dysHMSIS6348xWTMypoA0G4mORaQSuleCSL6zJLaCosarDEojnncy06yW69fyFxZtA==",
+ "version": "0.4.10",
+ "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.4.10.tgz",
+ "integrity": "sha512-66puLsckt5HASgRN3CfhLn2iuGrgCjfH3u17OL0f5MtEweYLx+yW2QW5d539Wx30xD4B+INEdaRetw6xEa9t7g==",
"requires": {
- "@firebase/app-types": "0.4.7"
+ "@firebase/app-types": "0.5.0"
}
},
"@firebase/logger": {
- "version": "0.1.29",
- "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.1.29.tgz",
- "integrity": "sha512-0GDGHT0eCskNMnDwB1Bx85lHzux9zrf7OJmG/0+kdVkQYFmqJpKwEJnb0mAxLVIVdhYmcYZXPBxUGnN/cQzHNQ=="
+ "version": "0.1.33",
+ "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.1.33.tgz",
+ "integrity": "sha512-EiewY1by3mYanihTa5Wsl2/gseFzmRmZr61YtVgQN5TXpX1OlQtqds6cCoR8Hh8VueeZJg6lTV9VLVQqu6iqHw=="
},
"@firebase/util": {
- "version": "0.2.32",
- "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.2.32.tgz",
- "integrity": "sha512-n5l1RDxzhQeLOFWRPdatyGt3ig1NLEmtO1wnG4x3Z5rOZAb09aBp+kYBu5HExJ4o6e+36lJ6l3nwdRnsJWaUlQ==",
+ "version": "0.2.36",
+ "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.2.36.tgz",
+ "integrity": "sha512-AqrXca+8rMbPyp7zMO9BoZrdbb8wsT5kmqwge9QW4ZBxTTSQrvBs7VylGx5Ede4VbhqRJvkmo7G73/dp2L+wbA==",
"requires": {
"tslib": "1.10.0"
}
},
"@google-cloud/common": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-2.2.3.tgz",
- "integrity": "sha512-lvw54mGKn8VqVIy2NzAk0l5fntBFX4UwQhHk6HaqkyCQ7WBl5oz4XhzKMtMilozF/3ObPcDogqwuyEWyZ6rnQQ==",
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-2.2.5.tgz",
+ "integrity": "sha512-Iw6LJj7V8XEVFDORCHC/I+YVmK98KmZSa8z10O4h2Wpkzlk/Sjj8Ruz4QJHawj7GwuWjQQ47O2Z4JECXf1S3ag==",
"optional": true,
"requires": {
"@google-cloud/projectify": "^1.0.0",
@@ -80,9 +90,9 @@
}
},
"@google-cloud/firestore": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-2.6.0.tgz",
- "integrity": "sha512-5bpC7KZA+dCc+4Byp9yA7uvmM1kmVaXm6QiSQbf2Zz/rWftTr0N23f+5BKe9OXyY/nT44l2ygZjmP4Aw3ngLFg==",
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-2.6.1.tgz",
+ "integrity": "sha512-ZzjaNn8TLji2HpC/h4uDuOb+h7lf1YCiNRiHhLkCUuEp+xAt1uPAkLFLAamGYW26v9VIe+9H/3l27pkplFsybQ==",
"optional": true,
"requires": {
"bun": "^0.0.12",
@@ -93,9 +103,9 @@
}
},
"@google-cloud/paginator": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-2.0.1.tgz",
- "integrity": "sha512-HZ6UTGY/gHGNriD7OCikYWL/Eu0sTEur2qqse2w6OVsz+57se3nTkqH14JIPxtf0vlEJ8IJN5w3BdZ22pjCB8g==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-2.0.3.tgz",
+ "integrity": "sha512-kp/pkb2p/p0d8/SKUu4mOq8+HGwF8NPzHWkj+VKrIPQPyMRw8deZtrO/OcSiy9C/7bpfU5Txah5ltUNfPkgEXg==",
"optional": true,
"requires": {
"arrify": "^2.0.0",
@@ -103,21 +113,21 @@
}
},
"@google-cloud/projectify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-1.0.1.tgz",
- "integrity": "sha512-xknDOmsMgOYHksKc1GPbwDLsdej8aRNIA17SlSZgQdyrcC0lx0OGo4VZgYfwoEU1YS8oUxF9Y+6EzDOb0eB7Xg==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-1.0.4.tgz",
+ "integrity": "sha512-ZdzQUN02eRsmTKfBj9FDL0KNDIFNjBn/d6tHQmA/+FImH5DO6ZV8E7FzxMgAUiVAUq41RFAkb25p1oHOZ8psfg==",
"optional": true
},
"@google-cloud/promisify": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-1.0.2.tgz",
- "integrity": "sha512-7WfV4R/3YV5T30WRZW0lqmvZy9hE2/p9MvpI34WuKa2Wz62mLu5XplGTFEMK6uTbJCLWUxTcZ4J4IyClKucE5g==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-1.0.4.tgz",
+ "integrity": "sha512-VccZDcOql77obTnFh0TbNED/6ZbbmHDf8UMNnzO1d5g9V0Htfm4k5cllY8P1tJsRKC3zWYGRLaViiupcgVjBoQ==",
"optional": true
},
"@google-cloud/storage": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-3.5.0.tgz",
- "integrity": "sha512-QxJ/zft4Kxbedpu7MQ5ZsNeS5WbonB7H28T32R4hQO2ply/j6n7bXmd5Vz0kzJu/iub20sK/ibgxYoxrgZD6CQ==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-4.1.3.tgz",
+ "integrity": "sha512-79Ag+4eQq+KFJcKB85AimepoqTJOGuDLAmJd7JkLc8NM12a87JTCoGi65oi1eZ4H77AV0uUQxSS2Fo/hZL3+kQ==",
"optional": true,
"requires": {
"@google-cloud/common": "^2.1.1",
@@ -126,12 +136,12 @@
"arrify": "^2.0.0",
"compressible": "^2.0.12",
"concat-stream": "^2.0.0",
- "date-and-time": "^0.10.0",
+ "date-and-time": "^0.11.0",
"duplexify": "^3.5.0",
"extend": "^3.0.2",
"gaxios": "^2.0.1",
"gcs-resumable-upload": "^2.2.4",
- "hash-stream-validation": "^0.2.1",
+ "hash-stream-validation": "^0.2.2",
"mime": "^2.2.0",
"mime-types": "^2.0.8",
"onetime": "^5.1.0",
@@ -167,9 +177,9 @@
}
},
"@grpc/grpc-js": {
- "version": "0.6.9",
- "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-0.6.9.tgz",
- "integrity": "sha512-r1nDOEEiYmAsVYBaS4DPPqdwPOXPw7YhVOnnpPdWhlNtKbYzPash6DqWTTza9gBiYMA5d2Wiq6HzrPqsRaP4yA==",
+ "version": "0.6.14",
+ "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-0.6.14.tgz",
+ "integrity": "sha512-M6q3MtHzk0NQPs1PB+SXSJtkDtK8WXJh+1B1WVJQp5HTURadzj9t1bUb/Fjhq+K57lKsOgL60r8WGmE7vks1eg==",
"optional": true,
"requires": {
"semver": "^6.2.0"
@@ -301,10 +311,19 @@
"resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.59.tgz",
"integrity": "sha512-8RkBivJrDCyPpBXhVZcjh7cQxVBSmRk9QM7hOketZzp6Tg79c0N8kkpAIito9bnJ3HCVCHVYz+KHTEbfQNfeVQ=="
},
+ "@types/nodemailer": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.2.2.tgz",
+ "integrity": "sha512-vDbSSe3+bBXYgibKs8duOrH7bhAv1hMHl3Vtdr3KmXZWLfi5WtIg3X6D/+K4SMK1RbNlm5QZBQCOldST/sVjjg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
"@types/puppeteer": {
- "version": "1.20.2",
- "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-1.20.2.tgz",
- "integrity": "sha512-oSFCtftHSfVx8K9XPdNNYs79Zt4pYJs/0NP78ltuGCB25zS3UNGJSiypBfbhbvRC5Dcsh0k1R5Z0i8HHtqQUPQ==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-2.0.0.tgz",
+ "integrity": "sha512-QPHXIcaPcijMbvizoM7PRL97Rm+aM8J2DmgTz2tt79b15PqbyeaCppYonvPLHQ/Q5ea92BUHDpv4bsqtiTy8kQ==",
"dev": true,
"requires": {
"@types/node": "*"
@@ -695,9 +714,9 @@
}
},
"date-and-time": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-0.10.0.tgz",
- "integrity": "sha512-IbIzxtvK80JZOVsWF6+NOjunTaoFVYxkAQoyzmflJyuRCJAJebehy48mPiCAedcGp4P7/UO3QYRWa0fe6INftg==",
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-0.11.1.tgz",
+ "integrity": "sha512-+1JkWME+UWRpCfvE1T0Vfbw629Ego0IcfHH0qtP4KhAXs7IJT2qsg1hNePqZhyD8Wby46HlW393lSL5PZSzDsA==",
"optional": true
},
"debug": {
@@ -709,9 +728,9 @@
}
},
"deep-equal": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz",
- "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
+ "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
"optional": true,
"requires": {
"is-arguments": "^1.0.4",
@@ -861,6 +880,36 @@
"integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=",
"optional": true
},
+ "es-abstract": {
+ "version": "1.17.0-next.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz",
+ "integrity": "sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==",
+ "optional": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.4",
+ "is-regex": "^1.0.4",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.0",
+ "string.prototype.trimright": "^2.1.0"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "optional": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
"es6-promise": {
"version": "4.2.8",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
@@ -1106,13 +1155,13 @@
}
},
"firebase-admin": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-8.7.0.tgz",
- "integrity": "sha512-mAp/58ZHbZHGPlSe8JDyELOT6DAWGUv9N3pA6d+Sg5RS5H3I1xGnKkhXK9BMJsejUfA3mwOqFPMLD4yso7aFxw==",
+ "version": "8.8.0",
+ "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-8.8.0.tgz",
+ "integrity": "sha512-IKtyL7doZu3Sh3pCz+O7vFWc/UwxEfXe263X/bPbucu/qEsM+5UdljIklnInSMunO+A1BUXKtsKkQf91iZQ2Ew==",
"requires": {
- "@firebase/database": "^0.5.1",
- "@google-cloud/firestore": "^2.0.0",
- "@google-cloud/storage": "^3.0.2",
+ "@firebase/database": "^0.5.11",
+ "@google-cloud/firestore": "^2.6.0",
+ "@google-cloud/storage": "^4.1.2",
"@types/node": "^8.0.53",
"dicer": "^0.3.0",
"jsonwebtoken": "8.1.0",
@@ -1206,9 +1255,9 @@
"optional": true
},
"gaxios": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.1.0.tgz",
- "integrity": "sha512-Gtpb5sdQmb82sgVkT2GnS2n+Kx4dlFwbeMYcDlD395aEvsLCSQXJJcHt7oJ2LrGxDEAeiOkK79Zv2A8Pzt6CFg==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.2.0.tgz",
+ "integrity": "sha512-54Y7s3yvtEO9CZ0yBVQHI5fzS7TzkjlnuLdDEkeyL1SNYMv877VofvA56E/C3dvj3rS7GFiyMWl833Qrr+nrkg==",
"optional": true,
"requires": {
"abort-controller": "^3.0.0",
@@ -1219,9 +1268,9 @@
}
},
"gcp-metadata": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.2.1.tgz",
- "integrity": "sha512-JjDedBWnbXVXWwTpjBdpb9RpVLiowXG4/50rra4hPH8REXAi2si6Xbb48B2SwkQBLz9Wu6+o32GDTvVy2kkLoQ==",
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.2.3.tgz",
+ "integrity": "sha512-6C/lE8rQY0zBsfTobc0OtNLNwQZmJ9d1uy+snawT2V0MN9V8KsbncNVZJxIrdrV5xuDRi0x0ppzBuUHzA22oAA==",
"optional": true,
"requires": {
"gaxios": "^2.1.0",
@@ -1229,9 +1278,9 @@
}
},
"gcs-resumable-upload": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-2.3.0.tgz",
- "integrity": "sha512-PclXJiEngrVx0c4K0LfE1XOxhmOkBEy39Rrhspdn6jAbbwe4OQMZfjo7Z1LHBrh57+bNZeIN4M+BooYppCoHSg==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-2.3.2.tgz",
+ "integrity": "sha512-OPS0iAmPCV+r7PziOIhyxmQOzsazFCy76yYDOS/Z80O/7cuny1KMfqDQa2T0jLaL8EreTU7EMZG5pUuqBKgzHA==",
"optional": true,
"requires": {
"abort-controller": "^3.0.0",
@@ -1264,9 +1313,9 @@
}
},
"google-auth-library": {
- "version": "5.5.1",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.5.1.tgz",
- "integrity": "sha512-zCtjQccWS/EHYyFdXRbfeSGM/gW+d7uMAcVnvXRnjBXON5ijo6s0nsObP0ifqileIDSbZjTlLtgo+UoN8IFJcg==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.7.0.tgz",
+ "integrity": "sha512-uclMldsQNf64Qr67O8TINdnqbU/Ixv81WryX+sF9g7uP0igJ98aCR/uU399u1ABLa53LNsyji+bo+bP8/iL9dA==",
"optional": true,
"requires": {
"arrify": "^2.0.0",
@@ -1280,13 +1329,14 @@
}
},
"google-gax": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-1.8.0.tgz",
- "integrity": "sha512-gDlL1mcyMSde7guPVzwpWi9V8XP+4F8UwFKoUiINEGRDNDbEj18OorL016XU0Kyt8Aizcf5dgb3q8UKegYAOmQ==",
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-1.12.0.tgz",
+ "integrity": "sha512-BeeoxVO6y9K20gUsexUwptutd0PfrTItrA02JWwwstlBIOAcvgFp86MHWufQsnrkPVhxBjHXq65aIkSejtJjDg==",
"optional": true,
"requires": {
- "@grpc/grpc-js": "0.6.9",
+ "@grpc/grpc-js": "^0.6.12",
"@grpc/proto-loader": "^0.5.1",
+ "@types/long": "^4.0.0",
"abort-controller": "^3.0.0",
"duplexify": "^3.6.0",
"google-auth-library": "^5.0.0",
@@ -1301,9 +1351,9 @@
}
},
"google-p12-pem": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.2.tgz",
- "integrity": "sha512-UfnEARfJKI6pbmC1hfFFm+UAcZxeIwTiEcHfqKe/drMsXD/ilnVjF7zgOGpHXyhuvX6jNJK3S8A0hOQjwtFxEw==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.3.tgz",
+ "integrity": "sha512-Tq2kBCANxYYPxaBpTgCpRfdoPs9+/lNzc/Iaee4kuMVW5ascD+HwhpBsTLwH85C9Ev4qfB8KKHmpPQYyD2vg2w==",
"optional": true,
"requires": {
"node-forge": "^0.9.0"
@@ -1324,9 +1374,9 @@
"optional": true
},
"gtoken": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-4.1.1.tgz",
- "integrity": "sha512-2FEmEDGi4NdM6u+mtaLjSDDtHiw5wT+nBsI+yrSeFO6fVqPEytYVF6uiIpRaOaZhRP+ozjYWuwwtMlrjAyTcYA==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-4.1.3.tgz",
+ "integrity": "sha512-ofW+FiXjswyKdkjMcDbe6E4K7cDDdE82dGDhZIc++kUECqaE7MSErf6arJPAjcnYn1qxE1/Ti06qQuqgVusovQ==",
"optional": true,
"requires": {
"gaxios": "^2.1.0",
@@ -1364,6 +1414,12 @@
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "optional": true
+ },
"hash-stream-validation": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.2.tgz",
@@ -1530,6 +1586,12 @@
"integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
"optional": true
},
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+ "optional": true
+ },
"is-date-object": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
@@ -1543,12 +1605,12 @@
"optional": true
},
"is-regex": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
- "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
"optional": true,
"requires": {
- "has": "^1.0.1"
+ "has": "^1.0.3"
}
},
"is-stream": {
@@ -1563,6 +1625,15 @@
"integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==",
"optional": true
},
+ "is-symbol": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
+ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
+ "optional": true,
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
@@ -1870,6 +1941,11 @@
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.4.tgz",
"integrity": "sha512-8Df0906+tq/omxuCZD6PqhPaQDYuyJ1d+VITgxoIA8zvQd1ru+nMJcDChHH324MWitIgbVkAkQoGEEVJNpn/PA=="
},
+ "nodemailer": {
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.2.tgz",
+ "integrity": "sha512-g0n4nH1ONGvqYo1v72uSWvF/MRNnnq1LzmSzXb/6EPF3LFb51akOhgG3K2+aETAsJx90/Q5eFNTntu4vBCwyQQ=="
+ },
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
@@ -1880,10 +1956,16 @@
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "optional": true
+ },
"object-is": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz",
- "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz",
+ "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==",
"optional": true
},
"object-keys": {
@@ -1892,6 +1974,18 @@
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"optional": true
},
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "optional": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ }
+ },
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -1995,9 +2089,9 @@
},
"dependencies": {
"@types/node": {
- "version": "10.17.5",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.5.tgz",
- "integrity": "sha512-RElZIr/7JreF1eY6oD5RF3kpmdcreuQPjg5ri4oQ5g9sq7YWU8HkfB3eH8GwAwxf5OaCh0VPi7r4N/yoTGelrA==",
+ "version": "10.17.9",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.9.tgz",
+ "integrity": "sha512-+6VygF9LbG7Gaqeog2G7u1+RUcmo0q1rI+2ZxdIg2fAUngk5Vz9fOCHXdloNUOHEPd1EuuOpL5O0CdgN9Fx5UQ==",
"optional": true
}
}
@@ -2140,12 +2234,13 @@
}
},
"regexp.prototype.flags": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz",
- "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
+ "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
"optional": true,
"requires": {
- "define-properties": "^1.1.2"
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1"
}
},
"request": {
@@ -2348,9 +2443,9 @@
}
},
"stream-shift": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
- "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
"optional": true
},
"streamsearch": {
@@ -2358,6 +2453,26 @@
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
"integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
},
+ "string.prototype.trimleft": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz",
+ "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==",
+ "optional": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "function-bind": "^1.1.1"
+ }
+ },
+ "string.prototype.trimright": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz",
+ "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==",
+ "optional": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "function-bind": "^1.1.1"
+ }
+ },
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
@@ -2394,9 +2509,9 @@
}
},
"teeny-request": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-5.3.1.tgz",
- "integrity": "sha512-hnUeun3xryzv92FbrnprltcdeDfSVaGFBlFPRvKJ2fO/ioQx9N0aSUbbXSfTO+ArRXine1gSWdWFWcgfrggWXw==",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-5.3.2.tgz",
+ "integrity": "sha512-5cse2cocD8Drq0uYN7NPcQ/6qbrxH6Kp0TlNLP+Y5f0twEkGtIg0ti8HoYF2LCC2TO5IkK/I9/Xs38/rDvs5UA==",
"optional": true,
"requires": {
"http-proxy-agent": "^2.1.0",
@@ -2538,9 +2653,9 @@
}
},
"typescript": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz",
- "integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA==",
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.3.tgz",
+ "integrity": "sha512-Mcr/Qk7hXqFBXMN7p7Lusj1ktCBydylfQM/FZCk5glCNQJrCUKPkMHdo9R0MTFWsC/4kPFvDS0fDPvukfCkFsw==",
"dev": true
},
"unique-string": {
diff --git a/cloud/functions/package.json b/cloud/functions/package.json
index 7f10a3960..83a3d2c34 100644
--- a/cloud/functions/package.json
+++ b/cloud/functions/package.json
@@ -1,6 +1,6 @@
{
"name": "functions",
- "version": "1.0.0-rc.2",
+ "version": "1.0.0-rc.3",
"scripts": {
"lint": "tslint --project tsconfig.json",
"build": "tsc",
@@ -12,15 +12,17 @@
},
"main": "lib/index.js",
"dependencies": {
- "firebase-admin": "^8.7.0",
+ "firebase-admin": "^8.8.0",
"firebase-functions": "^3.3.0",
"mailchimp-api-v3": "^1.13.1",
+ "nodemailer": "^6.4.2",
"puppeteer": "^2.0.0"
},
"devDependencies": {
- "@types/puppeteer": "^1.20.2",
+ "@types/nodemailer": "^6.2.2",
+ "@types/puppeteer": "^2.0.0",
"tslint": "^5.20.1",
- "typescript": "^3.2.2"
+ "typescript": "^3.7.3"
},
"private": true,
"engines": {
diff --git a/cloud/functions/src/watch/info/info-deck-publish.ts b/cloud/functions/src/watch/info/info-deck-publish.ts
new file mode 100644
index 000000000..0219e5ea7
--- /dev/null
+++ b/cloud/functions/src/watch/info/info-deck-publish.ts
@@ -0,0 +1,91 @@
+import * as functions from 'firebase-functions';
+import {DocumentSnapshot} from 'firebase-functions/lib/providers/firestore';
+
+import * as nodemailer from 'nodemailer';
+
+import {DeckData} from '../../model/deck';
+import * as Mail from 'nodemailer/lib/mailer';
+import {Resources} from '../../utils/resources';
+
+export async function infoDeckPublish(change: functions.Change) {
+ const newValue: DeckData = change.after.data() as DeckData;
+
+ const previousValue: DeckData = change.before.data() as DeckData;
+
+ if (!newValue || !newValue.meta || !newValue.meta.published || !newValue.meta.pathname) {
+ return;
+ }
+
+ if (!newValue.owner_id || newValue.owner_id === undefined || newValue.owner_id === '') {
+ return;
+ }
+
+ const publish: boolean = await isFirstTimePublished(previousValue, newValue);
+
+ if (!publish) {
+ return;
+ }
+
+ try {
+ await sendInfo(change.after.id, newValue);
+ } catch (err) {
+ console.error(err);
+ }
+}
+
+function isFirstTimePublished(previousValue: DeckData, newValue: DeckData): Promise {
+ return new Promise((resolve) => {
+ if (!previousValue || !newValue) {
+ resolve(false);
+ return;
+ }
+
+ resolve(!previousValue.meta && newValue.meta && newValue.meta.published);
+ });
+}
+
+function sendInfo(deckId: string, deckData: DeckData): Promise {
+ return new Promise(async (resolve, reject) => {
+ try {
+ const mailFrom: string = functions.config().info.mail.from;
+ const mailPwd: string = functions.config().info.mail.pwd;
+ const mailTo: string = functions.config().info.mail.to;
+ const mailHost: string = functions.config().info.mail.host;
+
+ let deckUrl: string = 'Unknown';
+ if (deckData && deckData.meta && deckData.meta.pathname) {
+ let pathname: string = deckData.meta.pathname;
+ pathname += pathname.endsWith('/') ? '' : '/';
+
+ deckUrl = Resources.Constants.PRESENTATION.URL + pathname;
+ }
+
+ const mailOptions = {
+ from: mailFrom,
+ to: mailTo,
+ subject: 'DeckDeckGo: New published deck',
+ html: `${deckData.meta ? deckData.meta.title : 'Unknown title'}
+ Deck: ${deckId}
+ Url: ${deckUrl}
+ `
+ };
+
+ const transporter: Mail = nodemailer.createTransport({
+ host: mailHost,
+ port: 587,
+ secure: false, // STARTTLS
+ auth: {
+ type: 'LOGIN',
+ user: mailFrom,
+ pass: mailPwd
+ }
+ });
+
+ await transporter.sendMail(mailOptions);
+
+ resolve();
+ } catch (err) {
+ reject(err);
+ }
+ });
+}
diff --git a/cloud/functions/src/watch/watch-deck.ts b/cloud/functions/src/watch/watch-deck.ts
index 6204b86d6..3a10e8dee 100644
--- a/cloud/functions/src/watch/watch-deck.ts
+++ b/cloud/functions/src/watch/watch-deck.ts
@@ -2,10 +2,12 @@ import {Change, EventContext} from 'firebase-functions';
import {DocumentSnapshot} from 'firebase-functions/lib/providers/firestore';
import {generateDeckScreenshot} from './screenshot/generate-deck-screenshot';
+import {infoDeckPublish} from './info/info-deck-publish';
import {deleteDeckSlides} from './delete/delete-deck-slides';
export async function applyWatchDeckUpdate(change: Change, context: EventContext) {
await generateDeckScreenshot(change);
+ await infoDeckPublish(change);
}
export async function applyWatchDeckDelete(snapshot: DocumentSnapshot, context: EventContext) {