From 2a198aabbf99abca7c350c875ea3870fb2c2e98b Mon Sep 17 00:00:00 2001
From: Flam3rboy <34555296+Flam3rboy@users.noreply.github.com>
Date: Tue, 10 Aug 2021 00:15:18 +0200
Subject: [PATCH] :bug: fix notion sync
---
scripts/notion/GithubNotionSync.js | 24 ++---
scripts/notion/ntc.js | 147 -----------------------------
scripts/notion/package-lock.json | 11 +++
scripts/notion/package.json | 1 +
4 files changed, 25 insertions(+), 158 deletions(-)
delete mode 100644 scripts/notion/ntc.js
diff --git a/scripts/notion/GithubNotionSync.js b/scripts/notion/GithubNotionSync.js
index db581c4..b13d214 100644
--- a/scripts/notion/GithubNotionSync.js
+++ b/scripts/notion/GithubNotionSync.js
@@ -1,6 +1,6 @@
+require("missing-native-js-functions");
const fetch = require("node-fetch");
const { Client } = require("@notionhq/client");
-const ntc = require("./ntc");
const bodyParser = require("body-parser");
const express = require("express");
const app = express();
@@ -23,16 +23,14 @@ class GithubNotionSync {
this.repos = await this.getAllIssueUrls();
app.use(bodyParser({}));
- app.post("/github", this.handleWebhook);
+ app.post("/github", this.handleWebhook.bind(this));
app.listen(3010, () => {
console.log("Github <-> Notion sync listening on :3010");
});
}
- handleWebhook(req, res) {
+ async handleWebhook(req, res) {
const { hook, issue } = req.body;
- if (this.githubWebhookSecret && this.githubWebhookSecret !== hook.config.secret)
- return res.status(400).send("invalid secret");
await this.addItemToDb(GithubNotionSync.convertIssue(issue));
res.sendStatus(200);
@@ -160,14 +158,14 @@ class GithubNotionSync {
url: issue.url,
},
Number: { number: issue.number },
- ...(issue.assignee && {
+ ...(issue.assignees && {
Assignee: {
multi_select: issue.assignees.map((x) => ({ name: x.login })),
},
}),
- ...(issue.label && {
+ ...(issue.labels && {
Label: {
- multi_select: issue.labels.map((x) => ({ name: x.name, color: ntc(x.color) })),
+ multi_select: issue.labels.map((x) => ({ name: x.name })),
},
}),
},
@@ -180,7 +178,7 @@ class GithubNotionSync {
{
type: "text",
text: {
- content: `${issue.body?.length > 1990 ? "issue body too long" : issue.body}`,
+ content: issue.body?.slice(0, 1990) || "",
},
},
],
@@ -198,9 +196,13 @@ class GithubNotionSync {
try {
if (exists) {
if (
+ exists.properties.Name?.title?.[0].plain_text !== issue.title ||
exists.properties.State?.select.name !== issue.state ||
- exists.properties.Label?.select.name !== issue.label ||
- exists.properties.Assignee?.select.name !== issue.assignee
+ issue.labels.map((x) => x.name).missing(exists.properties.Label?.multi_select.map((x) => x.name))
+ .length ||
+ issue.assignees
+ .map((x) => x.login)
+ .missing(exists.properties.Assignee?.multi_select.map((x) => x.name)).length
) {
console.log("update existing one");
await this.notion.pages.update({ page_id: exists.id, properties: options.properties });
diff --git a/scripts/notion/ntc.js b/scripts/notion/ntc.js
deleted file mode 100644
index a0ac6e8..0000000
--- a/scripts/notion/ntc.js
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
-
-https://chir.ag/projects/name-that-color/
-
-+-----------------------------------------------------------------+
-| Created by Chirag Mehta - http://chir.ag/projects/ntc |
-|-----------------------------------------------------------------|
-| ntc js (Name that Color JavaScript) |
-+-----------------------------------------------------------------+
-
-All the functions, code, lists etc. have been written specifically
-for the Name that Color JavaScript by Chirag Mehta unless otherwise
-specified.
-
-This script is released under the: Creative Commons License:
-Attribution 2.5 http://creativecommons.org/licenses/by/2.5/
-
-Sample Usage:
-
-
-
-
-
-*/
-
-var ntc = {
- init: function () {
- var color, rgb, hsl;
- for (var i = 0; i < ntc.names.length; i++) {
- color = "#" + ntc.names[i][0];
- rgb = ntc.rgb(color);
- hsl = ntc.hsl(color);
- ntc.names[i].push(rgb[0], rgb[1], rgb[2], hsl[0], hsl[1], hsl[2]);
- }
- },
-
- name: function (color) {
- color = color.toUpperCase();
- if (color.length < 3 || color.length > 7) return ["#000000", "Invalid Color: " + color, false];
- if (color.length % 3 == 0) color = "#" + color;
- if (color.length == 4)
- color =
- "#" +
- color.substr(1, 1) +
- color.substr(1, 1) +
- color.substr(2, 1) +
- color.substr(2, 1) +
- color.substr(3, 1) +
- color.substr(3, 1);
-
- var rgb = ntc.rgb(color);
- var r = rgb[0],
- g = rgb[1],
- b = rgb[2];
- var hsl = ntc.hsl(color);
- var h = hsl[0],
- s = hsl[1],
- l = hsl[2];
- var ndf1 = 0;
- ndf2 = 0;
- ndf = 0;
- var cl = -1,
- df = -1;
-
- for (var i = 0; i < ntc.names.length; i++) {
- if (color == "#" + ntc.names[i][0]) return ["#" + ntc.names[i][0], ntc.names[i][1], true];
-
- ndf1 =
- Math.pow(r - ntc.names[i][2], 2) + Math.pow(g - ntc.names[i][3], 2) + Math.pow(b - ntc.names[i][4], 2);
- ndf2 =
- Math.pow(h - ntc.names[i][5], 2) + Math.pow(s - ntc.names[i][6], 2) + Math.pow(l - ntc.names[i][7], 2);
- ndf = ndf1 + ndf2 * 2;
- if (df < 0 || df > ndf) {
- df = ndf;
- cl = i;
- }
- }
-
- return cl < 0 ? "default" : ntc.names[cl][1];
- },
-
- // adopted from: Farbtastic 1.2
- // http://acko.net/dev/farbtastic
- hsl: function (color) {
- var rgb = [
- parseInt("0x" + color.substring(1, 3)) / 255,
- parseInt("0x" + color.substring(3, 5)) / 255,
- parseInt("0x" + color.substring(5, 7)) / 255,
- ];
- var min, max, delta, h, s, l;
- var r = rgb[0],
- g = rgb[1],
- b = rgb[2];
-
- min = Math.min(r, Math.min(g, b));
- max = Math.max(r, Math.max(g, b));
- delta = max - min;
- l = (min + max) / 2;
-
- s = 0;
- if (l > 0 && l < 1) s = delta / (l < 0.5 ? 2 * l : 2 - 2 * l);
-
- h = 0;
- if (delta > 0) {
- if (max == r && max != g) h += (g - b) / delta;
- if (max == g && max != b) h += 2 + (b - r) / delta;
- if (max == b && max != r) h += 4 + (r - g) / delta;
- h /= 6;
- }
- return [parseInt(h * 255), parseInt(s * 255), parseInt(l * 255)];
- },
-
- // adopted from: Farbtastic 1.2
- // http://acko.net/dev/farbtastic
- rgb: function (color) {
- return [
- parseInt("0x" + color.substring(1, 3)),
- parseInt("0x" + color.substring(3, 5)),
- parseInt("0x" + color.substring(5, 7)),
- ];
- },
-
- names: [
- ["808080", "gray"],
- ["0000FF", "blue"],
- ["0000FF", "red"],
- ["00FF00", "green"],
- ["FFFF00", "yellow"],
- ["FF00FF", "pink"],
- ["7c00b5", "purple"],
- ["ff8c00", "orange"],
- ["693900", "brown"],
- ],
-};
-
-module.exports = ntc;
-
-ntc.init();
diff --git a/scripts/notion/package-lock.json b/scripts/notion/package-lock.json
index bcf5910..7c0d3bf 100644
--- a/scripts/notion/package-lock.json
+++ b/scripts/notion/package-lock.json
@@ -11,6 +11,7 @@
"@notionhq/client": "^0.2.4",
"body-parser": "^1.19.0",
"express": "^4.17.1",
+ "missing-native-js-functions": "^1.2.9",
"node-fetch": "^2.6.1"
},
"devDependencies": {
@@ -460,6 +461,11 @@
"node": ">= 0.6"
}
},
+ "node_modules/missing-native-js-functions": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/missing-native-js-functions/-/missing-native-js-functions-1.2.9.tgz",
+ "integrity": "sha512-Hv1oiFi9Wf5bsxra/UlmribNCDyLNYQULepfVJH6aF50Thh522kaMF3IuHja2mKX1oeWBkp6FvLaAfAjLuCOzw=="
+ },
"node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -1072,6 +1078,11 @@
"mime-db": "1.49.0"
}
},
+ "missing-native-js-functions": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/missing-native-js-functions/-/missing-native-js-functions-1.2.9.tgz",
+ "integrity": "sha512-Hv1oiFi9Wf5bsxra/UlmribNCDyLNYQULepfVJH6aF50Thh522kaMF3IuHja2mKX1oeWBkp6FvLaAfAjLuCOzw=="
+ },
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
diff --git a/scripts/notion/package.json b/scripts/notion/package.json
index 88f8388..6478809 100644
--- a/scripts/notion/package.json
+++ b/scripts/notion/package.json
@@ -13,6 +13,7 @@
"@notionhq/client": "^0.2.4",
"body-parser": "^1.19.0",
"express": "^4.17.1",
+ "missing-native-js-functions": "^1.2.9",
"node-fetch": "^2.6.1"
},
"devDependencies": {