From e48dad2ecdea1167736abf6f9103f983f59a61f9 Mon Sep 17 00:00:00 2001 From: davidsev Date: Mon, 8 May 2023 21:54:00 +0000 Subject: [PATCH 01/40] add "AoE Shapes" extention --- extensions.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 795eea1..52b2326 100644 --- a/extensions.json +++ b/extensions.json @@ -8,5 +8,6 @@ "token-counter": "https://raw.githubusercontent.com/maxpaulus43/owlbear_token_counter/main/docs/store.md", "dynamic-fog": "https://raw.githubusercontent.com/ArmindoFlores/obr-fogofwar/main/public/store.md", "sd-character-sheet": "https://raw.githubusercontent.com/maxpaulus43/owlbear-shadowdark-character-sheet/main/docs/store.md", - "clash": "https://raw.githubusercontent.com/ManuelLovell/clash/main/docs/store.md" + "clash": "https://raw.githubusercontent.com/ManuelLovell/clash/main/docs/store.md", + "aoe-shapes": "https://owlbear-aoe.davidsev.co.uk/store.md" } From bd9b34704c5dd3fa85986b5a6b9e012c3e0261f2 Mon Sep 17 00:00:00 2001 From: Manuel DeJesus <69539934+ManuelLovell@users.noreply.github.com> Date: Mon, 29 May 2023 12:33:12 -0700 Subject: [PATCH 02/40] PDF! Reader to OBR Store --- extensions.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 061aa3b..e328ad5 100644 --- a/extensions.json +++ b/extensions.json @@ -11,5 +11,6 @@ "clash": "https://raw.githubusercontent.com/ManuelLovell/clash/main/docs/store.md", "rumble": "https://raw.githubusercontent.com/ManuelLovell/rumble/master/docs/store.md", "ticker": "https://www.battle-system.com/owlbear/ticker-docs/store.md", - "witchdice": "https://witchdice.com/owlbear_ext/store.md" + "witchdice": "https://witchdice.com/owlbear_ext/store.md", + "pdf-reader": "https://www.battle-system.com/owlbear/pdfd-docs/store.md" } From 1d859196490f20f9fb50045539855a413cf2b4aa Mon Sep 17 00:00:00 2001 From: Manuel Poell Date: Mon, 29 May 2023 22:05:05 +0200 Subject: [PATCH 03/40] add sit to extensions store --- extensions.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 061aa3b..c02b01d 100644 --- a/extensions.json +++ b/extensions.json @@ -11,5 +11,6 @@ "clash": "https://raw.githubusercontent.com/ManuelLovell/clash/main/docs/store.md", "rumble": "https://raw.githubusercontent.com/ManuelLovell/rumble/master/docs/store.md", "ticker": "https://www.battle-system.com/owlbear/ticker-docs/store.md", - "witchdice": "https://witchdice.com/owlbear_ext/store.md" + "witchdice": "https://witchdice.com/owlbear_ext/store.md", + "sit": "https://sit.manuelpoell.at/assets/store.md" } From 916c42c1a5dbc42db6424cb96398749fb64d117d Mon Sep 17 00:00:00 2001 From: Manuel DeJesus <69539934+ManuelLovell@users.noreply.github.com> Date: Tue, 20 Jun 2023 11:45:01 -0700 Subject: [PATCH 04/40] Add Marked! to OBR Store --- extensions.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 82adebb..bd2bb2f 100644 --- a/extensions.json +++ b/extensions.json @@ -12,5 +12,6 @@ "rumble": "https://raw.githubusercontent.com/ManuelLovell/rumble/master/docs/store.md", "ticker": "https://www.battle-system.com/owlbear/ticker-docs/store.md", "witchdice": "https://witchdice.com/owlbear_ext/store.md", - "aoe-shapes": "https://owlbear-aoe.davidsev.co.uk/store.md" + "aoe-shapes": "https://owlbear-aoe.davidsev.co.uk/store.md", + "marked": "https://www.battle-system.com/owlbear/marked-docs/store.md" } From 1ecdbc41e8a05c731bb2cdbe9d6c03d83c1ab72c Mon Sep 17 00:00:00 2001 From: greg-argulla Date: Sun, 2 Jul 2023 14:12:13 +0800 Subject: [PATCH 05/40] Add Last Fable and Ultimate Story Extensions for Fabula Ultima --- extensions.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 82adebb..3393e70 100644 --- a/extensions.json +++ b/extensions.json @@ -12,5 +12,7 @@ "rumble": "https://raw.githubusercontent.com/ManuelLovell/rumble/master/docs/store.md", "ticker": "https://www.battle-system.com/owlbear/ticker-docs/store.md", "witchdice": "https://witchdice.com/owlbear_ext/store.md", - "aoe-shapes": "https://owlbear-aoe.davidsev.co.uk/store.md" + "aoe-shapes": "https://owlbear-aoe.davidsev.co.uk/store.md", + "last-fable": "https://fabula-ultima-extension.onrender.com/store.md", + "ultimate-story": "https://fabula-ultima-character-extension.onrender.com/store.md" } From 556b74bc8b15a7858e720cb7aa0bf177539fdf47 Mon Sep 17 00:00:00 2001 From: josh Date: Wed, 5 Jul 2023 14:06:05 +0200 Subject: [PATCH 06/40] Add Hp Tracker Extension to extensions.json --- extensions.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 82adebb..a2607b8 100644 --- a/extensions.json +++ b/extensions.json @@ -12,5 +12,6 @@ "rumble": "https://raw.githubusercontent.com/ManuelLovell/rumble/master/docs/store.md", "ticker": "https://www.battle-system.com/owlbear/ticker-docs/store.md", "witchdice": "https://witchdice.com/owlbear_ext/store.md", - "aoe-shapes": "https://owlbear-aoe.davidsev.co.uk/store.md" + "aoe-shapes": "https://owlbear-aoe.davidsev.co.uk/store.md", + "hp-tracker": "https://raw.githubusercontent.com/kamejosh/owlbear-hp-tracker/master/docs/store.md" } From 9cab66cc6f3cd745433397c199514e1a13edc224 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 14:21:00 +1000 Subject: [PATCH 07/40] Add validation and verification scripts --- .../workflows/submit-verification-request.yml | 28 + scripts/__tests__/validation.test.js | 79 +++ .../extensionDetails.js | 0 scripts/discord-webhook/webhook.js | 2 +- scripts/package.json | 8 +- scripts/validation/manifest.js | 117 ++++ scripts/verify/index.js | 31 + scripts/yarn.lock | 550 ++++++++++++++++++ 8 files changed, 813 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/submit-verification-request.yml create mode 100644 scripts/__tests__/validation.test.js rename scripts/{discord-webhook => common}/extensionDetails.js (100%) create mode 100644 scripts/validation/manifest.js create mode 100644 scripts/verify/index.js diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml new file mode 100644 index 0000000..44b7064 --- /dev/null +++ b/.github/workflows/submit-verification-request.yml @@ -0,0 +1,28 @@ +name: Submit Verification Request +on: + issue_comment: + types: [created, edited] +jobs: + submit: + if: github.event_name == 'pull_request' + runs-on: ubuntu-latest + steps: + - name: Install Node + uses: actions/setup-node@v3 + if: contains(github.event.comment.body, '/verify') + with: + node-version: 16 + - uses: actions/checkout@v3 + - name: Install Packages + run: yarn --cwd ./scripts install --frozen-lockfile + - name: Submit Request to Discord + run: node --no-warnings ./scripts/verify/index.js + - uses: actions/github-script@v6 + with: + script: | + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'Verification has been submitted' + }) diff --git a/scripts/__tests__/validation.test.js b/scripts/__tests__/validation.test.js new file mode 100644 index 0000000..31e1062 --- /dev/null +++ b/scripts/__tests__/validation.test.js @@ -0,0 +1,79 @@ +import { expect, test } from "vitest"; +import { validateManifest } from "../validation/manifest"; + +test("successfully validates valid manifest", () => { + const validManifest = { + title: "Example Extension Manifest", + description: "An example manifest for testing", + author: "Extension Tests", + image: "https://example.com/", + icon: "https://example.com/", + tags: ["combat", "tool", "automation"], + manifest: "https://example.com/manifest.json", + "learn-more": "learn-more@email.com", + }; + + const expectedResult = []; + + expect(validateManifest(validManifest)).toStrictEqual(expectedResult); +}); + +test("throws error on invalid tag", () => { + const invalidTagInManifest = { + title: "Example Extension Manifest", + description: "An example manifest for testing", + author: "Extension Tests", + image: "https://example.com/", + icon: "https://example.com/", + tags: ["combat", "tool", "automation", "built-by-owlbear"], + manifest: "https://example.com/manifest.json", + "learn-more": "learn-more@email.com", + }; + + const expectedResult = ['"tags[3]" contains an excluded value']; + + expect(validateManifest(invalidTagInManifest)).toStrictEqual(expectedResult); +}); + +test("should return all validation errors in one message", () => { + const mulitpleValidationIssues = { + description: "An example manifest for testing", + author: "Extension Tests", + icon: "example.com/", + tags: [], + manifest: "https://example.com/manifest.json", + }; + + const expectedResult = [ + '"title" is required', + '"image" is required', + '"icon" failed custom validation because Invalid URL', + '"tags" must contain at least 1 items', + '"learn-more" is required', + ]; + + expect(validateManifest(mulitpleValidationIssues)).toStrictEqual( + expectedResult + ); +}); + +test("should return issue when learn-more is invalid", () => { + const learnMoreInvalidationIssue = { + title: "Example Extension Manifest", + description: "An example manifest for testing", + author: "Extension Tests", + image: "https://example.com/", + icon: "https://example.com/", + tags: ["combat", "tool", "automation"], + manifest: "https://example.com/manifest.json", + "learn-more": "learn-more.com", + }; + + const expectedResult = [ + '"learn-more" does not match any of the allowed types', + ]; + + expect(validateManifest(learnMoreInvalidationIssue)).toStrictEqual( + expectedResult + ); +}); diff --git a/scripts/discord-webhook/extensionDetails.js b/scripts/common/extensionDetails.js similarity index 100% rename from scripts/discord-webhook/extensionDetails.js rename to scripts/common/extensionDetails.js diff --git a/scripts/discord-webhook/webhook.js b/scripts/discord-webhook/webhook.js index 6ba2a97..4f59bac 100644 --- a/scripts/discord-webhook/webhook.js +++ b/scripts/discord-webhook/webhook.js @@ -1,6 +1,6 @@ import fetch from "node-fetch"; -import { getExtensionDetails } from "./extensionDetails.js"; +import { getExtensionDetails } from "../common/extensionDetails.js"; function createDiscordEmbed(id, title, description, url, image, author, tags) { const embed = { diff --git a/scripts/package.json b/scripts/package.json index f50dcc3..8c65c05 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -5,12 +5,18 @@ "type": "module", "license": "MIT", "scripts": { + "test": "vitest", "trigger": "node ./discord-webhook/index.js", - "deploy": "node ./extension-store-deploy/index.js" + "deploy": "node ./extension-store-deploy/index.js", + "verification": "node --no-warnings ./verify/index.js" }, "dependencies": { "fetch": "^1.1.0", "gray-matter": "^4.0.3", + "joi": "^17.10.2", "node-fetch": "^3.3.1" + }, + "devDependencies": { + "vitest": "^0.34.4" } } diff --git a/scripts/validation/manifest.js b/scripts/validation/manifest.js new file mode 100644 index 0000000..46b4d41 --- /dev/null +++ b/scripts/validation/manifest.js @@ -0,0 +1,117 @@ +import Joi from "joi"; + +import { getExtensionDetails } from "../common/extensionDetails.js"; + +const checkUrl = (value, helpers) => { + new URL(value); + + return value; +}; + +const schema = Joi.object({ + title: Joi.string().required(), + description: Joi.string().required(), + author: Joi.string().required(), + image: Joi.string().custom(checkUrl, "check url is valid format").required(), + icon: Joi.string().custom(checkUrl, "check url is valid format").required(), + tags: Joi.array() + .min(1) + .items( + Joi.string().valid("built-by-owlbear").forbidden(), + Joi.string().valid( + "dice", + "fog", + "tool", + "content-pack", + "drawing", + "audio", + "combat", + "automation", + "other" + ) + ), + manifest: Joi.string() + .custom(checkUrl, "check url is valid format") + .required(), + "learn-more": Joi.alternatives() + .try( + Joi.string().email(), + Joi.string().custom(checkUrl, "check url is valid format") + ) + .required(), +}); + +async function checkExtensionManifest() { + const { id, data } = await getExtensionDetails(); + + if (!data) { + return false; + } + + // const data = { + // description: "An example manifest for testing", + // author: "Extension Tests", + // image: "https://example.com/", + // icon: "https://example.com/", + // manifest: "https://example.com/manifest.json", + // "learn-more": "learn-more.com", + // }; + + const issues = validateManifest(data); + + return issues; +} + +export function validateManifest(data) { + const validationIssues = []; + const { value, error } = schema.validate(data, { abortEarly: false }); + + if (error) { + error.details.forEach((element) => { + validationIssues.push(element.message); + }); + } + + formatConsoleOutput(validationIssues); + + return validationIssues; +} + +/* + * + */ +function formatConsoleOutput(issues) { + let output = "## Manifest Validation Result\n\n"; + + if (Array.isArray(issues)) { + if (issues.length === 0) { + output += "No issues found in manifest type validation."; + console.log(output); + return; + } + + output += "***Issues found in manifest type validation.***\n\n"; + + for (let issue of issues) { + output += `- ${issue}\n`; + } + + output += `\n\n***You must follow the below guidelines on manifest files***\n\n +| NAME | DESCRIPTION | +| :---------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| title | This is the name of your extension | +| description | This should be a brief description of what your extension is for | +| author | This is your name or alias | +| image | This is an absolute link to a hero image for your extension. The image must be hosted on an external site. | +| icon | This is an absolute link to your extensions icon and must be hosted on an external site | +| tags | To help make your extension more discoverable you can add tags to it. In the extension store, users will be able to find your extension under that tag. You may only use our [supported tags](https://github.com/owlbear-rodeo/extensions/blob/main/tags.json) and only extensions published by Owlbear Rodeo can use the built-by-owlbear tag. | +| manifest | This should have an link to your manifest file. This is what will be copied by other users to install your extension. | +| learn-more | You should link to a site or email that users can go to to find more information about your extension. | + + `; + console.log(output); + return; + } +} + +await checkExtensionManifest(); diff --git a/scripts/verify/index.js b/scripts/verify/index.js new file mode 100644 index 0000000..54e2c1d --- /dev/null +++ b/scripts/verify/index.js @@ -0,0 +1,31 @@ +import fetch from "node-fetch"; + +function createDiscordVerificationPost(id, data) { + const text = `## Extension Verfication Request\n\n*${data.title}* would like to be verified.\nIt can be installed via this [store page](https://extensions.owlbear.rodeo/${id}).\n\nTo be verified the extension must meet these criteria:\n\n- Extension design uses accessible colors\n- Extension design uses accessible font sizes\n- Extension is legible with Owlbear Rodeo’s light and dark theme\n- Extension is fully functional on mobile devices (1)\n- Extension is fully functional across all major browsers (2)\n- Extension requires no other extensions to be installed\n- Extension functions in a private browsing window or with cookies disabled\n- Extension makes proper use of the Owlbear Rodeo APIs (3)\n- Extension functions in all configurations of an Owlbear Rodeo Room (4)\n- Extension provides user support for queries, issues and requests\n- Extension has no known bugs\n- Extension manifest is hosted on a custom domain controlled by the extension developer\n\nNotes:\n\n1) This includes iPhone’s, Android devices as well as tablets such as an iPad.\n\n2) Major browsers include Chrome, Firefox and Safari\n\n3) For example the Scene API is only used to store data that shares the Scene lifecycle\n\n4) Valid configurations include a Room with a Scene open and no Scene open\n\nAlso note that the term “fully functional” above means all extension functionally works correctly whereas the term “functional” means the extension still functions but some features may not be available.`; + + const post = { + content: text, + }; + + return post; +} + +export async function sendDiscordWebhook() { + const { id, data } = await getExtensionDetails(); + + const embed = createDiscordVerificationPost(id, data); + + const response = await fetch(process.env.DISCORD_VERIFY_WEBHOOK, { + method: "POST", + body: JSON.stringify(embed), + headers: { + "Content-Type": "application/json", + }, + }); + + if (response.ok) { + console.log("Success!!"); + } else { + console.log(JSON.stringify(await response.text(), null, 2)); + } +} diff --git a/scripts/yarn.lock b/scripts/yarn.lock index 54d68e4..d8effb5 100644 --- a/scripts/yarn.lock +++ b/scripts/yarn.lock @@ -2,6 +2,237 @@ # yarn lockfile v1 +"@esbuild/android-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" + integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== + +"@esbuild/android-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" + integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== + +"@esbuild/android-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" + integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== + +"@esbuild/darwin-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" + integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== + +"@esbuild/darwin-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" + integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== + +"@esbuild/freebsd-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" + integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== + +"@esbuild/freebsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" + integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== + +"@esbuild/linux-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" + integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== + +"@esbuild/linux-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" + integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== + +"@esbuild/linux-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" + integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== + +"@esbuild/linux-loong64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" + integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== + +"@esbuild/linux-mips64el@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" + integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== + +"@esbuild/linux-ppc64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" + integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== + +"@esbuild/linux-riscv64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" + integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== + +"@esbuild/linux-s390x@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" + integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== + +"@esbuild/linux-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" + integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== + +"@esbuild/netbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" + integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== + +"@esbuild/openbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" + integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== + +"@esbuild/sunos-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" + integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== + +"@esbuild/win32-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" + integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== + +"@esbuild/win32-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" + integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== + +"@esbuild/win32-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" + integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== + +"@hapi/hoek@^9.0.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jridgewell/sourcemap-codec@^1.4.15": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@sideway/address@^4.1.3": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" + integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@types/chai-subset@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94" + integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== + dependencies: + "@types/chai" "*" + +"@types/chai@*", "@types/chai@^4.3.5": + version "4.3.6" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.6.tgz#7b489e8baf393d5dd1266fb203ddd4ea941259e6" + integrity sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw== + +"@types/node@*": + version "20.6.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.2.tgz#a065925409f59657022e9063275cd0b9bd7e1b12" + integrity sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw== + +"@vitest/expect@0.34.4": + version "0.34.4" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-0.34.4.tgz#f857a83268b9e9d4e9410fe168cb206033838102" + integrity sha512-XlMKX8HyYUqB8dsY8Xxrc64J2Qs9pKMt2Z8vFTL4mBWXJsg4yoALHzJfDWi8h5nkO4Zua4zjqtapQ/IluVkSnA== + dependencies: + "@vitest/spy" "0.34.4" + "@vitest/utils" "0.34.4" + chai "^4.3.7" + +"@vitest/runner@0.34.4": + version "0.34.4" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.34.4.tgz#07543915ad22c53d99fb4bb758cb9bd5db3d7f80" + integrity sha512-hwwdB1StERqUls8oV8YcpmTIpVeJMe4WgYuDongVzixl5hlYLT2G8afhcdADeDeqCaAmZcSgLTLtqkjPQF7x+w== + dependencies: + "@vitest/utils" "0.34.4" + p-limit "^4.0.0" + pathe "^1.1.1" + +"@vitest/snapshot@0.34.4": + version "0.34.4" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-0.34.4.tgz#ee2c732e5978438f96c669aabb9eb66eb7f3ff46" + integrity sha512-GCsh4coc3YUSL/o+BPUo7lHQbzpdttTxL6f4q0jRx2qVGoYz/cyTRDJHbnwks6TILi6560bVWoBpYC10PuTLHw== + dependencies: + magic-string "^0.30.1" + pathe "^1.1.1" + pretty-format "^29.5.0" + +"@vitest/spy@0.34.4": + version "0.34.4" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.34.4.tgz#181ad9f32ce426ac33eb66ed35b880ee9b457035" + integrity sha512-PNU+fd7DUPgA3Ya924b1qKuQkonAW6hL7YUjkON3wmBwSTIlhOSpy04SJ0NrRsEbrXgMMj6Morh04BMf8k+w0g== + dependencies: + tinyspy "^2.1.1" + +"@vitest/utils@0.34.4": + version "0.34.4" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.34.4.tgz#0b6bf5fe07223ebb6ec24cd1edc0137cb301ecfd" + integrity sha512-yR2+5CHhp/K4ySY0Qtd+CAL9f5Yh1aXrKfAT42bq6CtlGPh92jIDDDSg7ydlRow1CP+dys4TrOrbELOyNInHSg== + dependencies: + diff-sequences "^29.4.3" + loupe "^2.3.6" + pretty-format "^29.5.0" + +acorn-walk@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.10.0, acorn@^8.9.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -9,6 +240,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + biskviit@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/biskviit/-/biskviit-1.0.1.tgz#037a0cd4b71b9e331fd90a1122de17dc49e420a7" @@ -16,11 +252,53 @@ biskviit@1.0.1: dependencies: psl "^1.1.7" +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + +chai@^4.3.7: + version "4.3.8" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.8.tgz#40c59718ad6928da6629c70496fe990b2bb5b17c" + integrity sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^4.1.2" + get-func-name "^2.0.0" + loupe "^2.3.1" + pathval "^1.1.1" + type-detect "^4.0.5" + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== + data-uri-to-buffer@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== +debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-eql@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== + dependencies: + type-detect "^4.0.0" + +diff-sequences@^29.4.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + encoding@0.1.12: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" @@ -28,6 +306,34 @@ encoding@0.1.12: dependencies: iconv-lite "~0.4.13" +esbuild@^0.18.10: + version "0.18.20" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" + integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== + optionalDependencies: + "@esbuild/android-arm" "0.18.20" + "@esbuild/android-arm64" "0.18.20" + "@esbuild/android-x64" "0.18.20" + "@esbuild/darwin-arm64" "0.18.20" + "@esbuild/darwin-x64" "0.18.20" + "@esbuild/freebsd-arm64" "0.18.20" + "@esbuild/freebsd-x64" "0.18.20" + "@esbuild/linux-arm" "0.18.20" + "@esbuild/linux-arm64" "0.18.20" + "@esbuild/linux-ia32" "0.18.20" + "@esbuild/linux-loong64" "0.18.20" + "@esbuild/linux-mips64el" "0.18.20" + "@esbuild/linux-ppc64" "0.18.20" + "@esbuild/linux-riscv64" "0.18.20" + "@esbuild/linux-s390x" "0.18.20" + "@esbuild/linux-x64" "0.18.20" + "@esbuild/netbsd-x64" "0.18.20" + "@esbuild/openbsd-x64" "0.18.20" + "@esbuild/sunos-x64" "0.18.20" + "@esbuild/win32-arm64" "0.18.20" + "@esbuild/win32-ia32" "0.18.20" + "@esbuild/win32-x64" "0.18.20" + esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -63,6 +369,16 @@ formdata-polyfill@^4.0.10: dependencies: fetch-blob "^3.1.2" +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== + gray-matter@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" @@ -85,6 +401,17 @@ is-extendable@^0.1.0: resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== +joi@^17.10.2: + version "17.10.2" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.10.2.tgz#4ecc348aa89ede0b48335aad172e0f5591e55b29" + integrity sha512-hcVhjBxRNW/is3nNLdGLIjkgXetkeGc2wyhydhz8KumG23Aerk4HPjU5zaPAMRqXQFc0xNqXTC7+zQjxr0GlKA== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.3" + "@sideway/formula" "^3.0.1" + "@sideway/pinpoint" "^2.0.0" + js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" @@ -93,11 +420,55 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +jsonc-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +local-pkg@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" + integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== + +loupe@^2.3.1, loupe@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" + integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== + dependencies: + get-func-name "^2.0.0" + +magic-string@^0.30.1: + version "0.30.3" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.3.tgz#403755dfd9d6b398dfa40635d52e96c5ac095b85" + integrity sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +mlly@^1.2.0, mlly@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.2.tgz#7cf406aa319ff6563d25da6b36610a93f2a8007e" + integrity sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg== + dependencies: + acorn "^8.10.0" + pathe "^1.1.1" + pkg-types "^1.0.3" + ufo "^1.3.0" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + node-domexception@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" @@ -112,11 +483,72 @@ node-fetch@^3.3.1: fetch-blob "^3.1.4" formdata-polyfill "^4.0.10" +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + +pathe@^1.1.0, pathe@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" + integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +pkg-types@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + +postcss@^8.4.27: + version "8.4.30" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.30.tgz#0e0648d551a606ef2192a26da4cabafcc09c1aa7" + integrity sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +pretty-format@^29.5.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + psl@^1.1.7: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +rollup@^3.27.1: + version "3.29.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.2.tgz#cbc76cd5b03b9f9e93be991d23a1dff9c6d5b740" + integrity sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A== + optionalDependencies: + fsevents "~2.3.2" + "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -130,17 +562,135 @@ section-matter@^1.0.0: extend-shallow "^2.0.1" kind-of "^6.0.0" +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== + +std-env@^3.3.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.4.3.tgz#326f11db518db751c83fd58574f449b7c3060910" + integrity sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q== + strip-bom-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== +strip-literal@^1.0.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-1.3.0.tgz#db3942c2ec1699e6836ad230090b84bb458e3a07" + integrity sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg== + dependencies: + acorn "^8.10.0" + +tinybench@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.1.tgz#3408f6552125e53a5a48adee31261686fd71587e" + integrity sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg== + +tinypool@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.7.0.tgz#88053cc99b4a594382af23190c609d93fddf8021" + integrity sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww== + +tinyspy@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.1.1.tgz#9e6371b00c259e5c5b301917ca18c01d40ae558c" + integrity sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w== + +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +ufo@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.3.0.tgz#c92f8ac209daff607c57bbd75029e190930a0019" + integrity sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw== + +vite-node@0.34.4: + version "0.34.4" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.34.4.tgz#96d5b4dcc5585e3b289390f4e11ed6450978e30e" + integrity sha512-ho8HtiLc+nsmbwZMw8SlghESEE3KxJNp04F/jPUCLVvaURwt0d+r9LxEqCX5hvrrOQ0GSyxbYr5ZfRYhQ0yVKQ== + dependencies: + cac "^6.7.14" + debug "^4.3.4" + mlly "^1.4.0" + pathe "^1.1.1" + picocolors "^1.0.0" + vite "^3.0.0 || ^4.0.0" + +"vite@^3.0.0 || ^4.0.0", "vite@^3.1.0 || ^4.0.0 || ^5.0.0-0": + version "4.4.9" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.4.9.tgz#1402423f1a2f8d66fd8d15e351127c7236d29d3d" + integrity sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA== + dependencies: + esbuild "^0.18.10" + postcss "^8.4.27" + rollup "^3.27.1" + optionalDependencies: + fsevents "~2.3.2" + +vitest@^0.34.4: + version "0.34.4" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.34.4.tgz#c7f40cf7ca3b590bb333b3272a98f49e85f7b958" + integrity sha512-SE/laOsB6995QlbSE6BtkpXDeVNLJc1u2LHRG/OpnN4RsRzM3GQm4nm3PQCK5OBtrsUqnhzLdnT7se3aeNGdlw== + dependencies: + "@types/chai" "^4.3.5" + "@types/chai-subset" "^1.3.3" + "@types/node" "*" + "@vitest/expect" "0.34.4" + "@vitest/runner" "0.34.4" + "@vitest/snapshot" "0.34.4" + "@vitest/spy" "0.34.4" + "@vitest/utils" "0.34.4" + acorn "^8.9.0" + acorn-walk "^8.2.0" + cac "^6.7.14" + chai "^4.3.7" + debug "^4.3.4" + local-pkg "^0.4.3" + magic-string "^0.30.1" + pathe "^1.1.1" + picocolors "^1.0.0" + std-env "^3.3.3" + strip-literal "^1.0.1" + tinybench "^2.5.0" + tinypool "^0.7.0" + vite "^3.1.0 || ^4.0.0 || ^5.0.0-0" + vite-node "0.34.4" + why-is-node-running "^2.2.2" + web-streams-polyfill@^3.0.3: version "3.2.1" resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + +why-is-node-running@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" + integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== + dependencies: + siginfo "^2.0.0" + stackback "0.0.2" + +yocto-queue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== From 6421d1d2a32c8ad188c9653ac1e06d37cd6be7df Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 14:23:07 +1000 Subject: [PATCH 08/40] Add automated manifest validation --- .github/workflows/validate-manifest.yml | 32 +++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .github/workflows/validate-manifest.yml diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml new file mode 100644 index 0000000..32a072a --- /dev/null +++ b/.github/workflows/validate-manifest.yml @@ -0,0 +1,32 @@ +name: Validate Matter +on: + # Trigger the workflow on push or pull request + pull_request: + branches: + - main + paths: + - "extensions.json" +jobs: + comment: + if: github.event_name == 'pull_request' + runs-on: ubuntu-latest + steps: + - name: Install Node + uses: actions/setup-node@v3 + with: + node-version: 16 + - uses: actions/checkout@v3 + - name: Install Packages + run: yarn --cwd ./scripts install --frozen-lockfile + - name: Run Manifest File Validation + id: validation + run: echo "result=$(yarn --cwd ./scripts run trigger)" >> $GITHUB_OUTPUT + - uses: actions/github-script@v6 + with: + script: | + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: ${{ steps.validation.outputs.result }} + }) From f84077c89889f727f9501987671f1427591e8280 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 14:27:56 +1000 Subject: [PATCH 09/40] Patch validation step in validate-manifest --- .github/workflows/validate-manifest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index 32a072a..550bf9c 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -20,7 +20,7 @@ jobs: run: yarn --cwd ./scripts install --frozen-lockfile - name: Run Manifest File Validation id: validation - run: echo "result=$(yarn --cwd ./scripts run trigger)" >> $GITHUB_OUTPUT + run: echo "result=$(node --no-warnings ./validation/manifest.js)" >> $GITHUB_OUTPUT - uses: actions/github-script@v6 with: script: | From 97924c5ceb66b84c0c7da72a4974cb570e99fd9c Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 14:30:34 +1000 Subject: [PATCH 10/40] Fix node execution path on validate-manifest.yml --- .github/workflows/validate-manifest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index 550bf9c..896cc58 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -20,7 +20,7 @@ jobs: run: yarn --cwd ./scripts install --frozen-lockfile - name: Run Manifest File Validation id: validation - run: echo "result=$(node --no-warnings ./validation/manifest.js)" >> $GITHUB_OUTPUT + run: echo "result=$(node --no-warnings ./scripts/validation/manifest.js)" >> $GITHUB_OUTPUT - uses: actions/github-script@v6 with: script: | From 848c2d961a23395941c4b3a698bec3e24428e952 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 14:41:23 +1000 Subject: [PATCH 11/40] Add support for mulitline result on GITHUB_OUTPUT in vaildate-manifest --- .github/workflows/validate-manifest.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index 896cc58..a422bd9 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -20,7 +20,10 @@ jobs: run: yarn --cwd ./scripts install --frozen-lockfile - name: Run Manifest File Validation id: validation - run: echo "result=$(node --no-warnings ./scripts/validation/manifest.js)" >> $GITHUB_OUTPUT + run: | + echo "result<> $GITHUB_OUTPUT + node --no-warnings ./scripts/validation/manifest.js >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT - uses: actions/github-script@v6 with: script: | From b0685d504bf272d191bac48a2bd173929d9e8412 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 14:43:15 +1000 Subject: [PATCH 12/40] Add string wrapping around body input for validate-manifest --- .github/workflows/validate-manifest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index a422bd9..6ccb716 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -31,5 +31,5 @@ jobs: issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, - body: ${{ steps.validation.outputs.result }} + body: '${{ steps.validation.outputs.result }}' }) From 3d903525e91e8d8a95543d10df52f3a06507feac Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 14:49:50 +1000 Subject: [PATCH 13/40] Edit validation-manifest workflow --- .github/workflows/validate-manifest.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index 6ccb716..1438798 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -18,12 +18,11 @@ jobs: - uses: actions/checkout@v3 - name: Install Packages run: yarn --cwd ./scripts install --frozen-lockfile - - name: Run Manifest File Validation + - uses: actions/github-script@v6 id: validation - run: | - echo "result<> $GITHUB_OUTPUT - node --no-warnings ./scripts/validation/manifest.js >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT + with: + script: node --no-warnings ./scripts/validation/manifest.js + result-encoding: string - uses: actions/github-script@v6 with: script: | @@ -31,5 +30,5 @@ jobs: issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, - body: '${{ steps.validation.outputs.result }}' + body: `${{ steps.validation.outputs.result }}` }) From bf52eb13bd42c87f030f796e221e6266fbf285a3 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 14:51:33 +1000 Subject: [PATCH 14/40] Revert use of github-scripts for validation execution on workflow --- .github/workflows/validate-manifest.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index 1438798..1df68fc 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -18,11 +18,12 @@ jobs: - uses: actions/checkout@v3 - name: Install Packages run: yarn --cwd ./scripts install --frozen-lockfile - - uses: actions/github-script@v6 + - name: Run Manifest File Validation id: validation - with: - script: node --no-warnings ./scripts/validation/manifest.js - result-encoding: string + run: | + echo "result<> $GITHUB_OUTPUT + node --no-warnings ./scripts/validation/manifest.js >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT - uses: actions/github-script@v6 with: script: | From b8119904733744750a07384de8db97ee592717f3 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 15:01:33 +1000 Subject: [PATCH 15/40] Edit validate manifest to use pull_request_target --- .github/workflows/validate-manifest.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index 1df68fc..4031727 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -1,14 +1,14 @@ name: Validate Matter on: # Trigger the workflow on push or pull request - pull_request: + pull_request_target: branches: - main paths: - "extensions.json" jobs: comment: - if: github.event_name == 'pull_request' + if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - name: Install Node From c6e81f90fa58533ced55674162672018a8535a1c Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 15:01:48 +1000 Subject: [PATCH 16/40] Edit manifest output on validation script --- scripts/validation/manifest.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/validation/manifest.js b/scripts/validation/manifest.js index 46b4d41..ccddfb5 100644 --- a/scripts/validation/manifest.js +++ b/scripts/validation/manifest.js @@ -106,9 +106,8 @@ function formatConsoleOutput(issues) { | icon | This is an absolute link to your extensions icon and must be hosted on an external site | | tags | To help make your extension more discoverable you can add tags to it. In the extension store, users will be able to find your extension under that tag. You may only use our [supported tags](https://github.com/owlbear-rodeo/extensions/blob/main/tags.json) and only extensions published by Owlbear Rodeo can use the built-by-owlbear tag. | | manifest | This should have an link to your manifest file. This is what will be copied by other users to install your extension. | -| learn-more | You should link to a site or email that users can go to to find more information about your extension. | +| learn-more | You should link to a site or email that users can go to to find more information about your extension. |`; - `; console.log(output); return; } From a42e9caadae22c17571d1b400c8ac6f1677334be Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 15:10:28 +1000 Subject: [PATCH 17/40] Edit workflow condition for verification --- .github/workflows/submit-verification-request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index 44b7064..c708768 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -4,7 +4,7 @@ on: types: [created, edited] jobs: submit: - if: github.event_name == 'pull_request' + if: ${{ github.event.issue.pull_request }} runs-on: ubuntu-latest steps: - name: Install Node From 7948aaae967842a5da31b69f8e6e8e44a698e53d Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 15:17:01 +1000 Subject: [PATCH 18/40] Edit validate-menifest Allow reading forks but only allow additional permissions on the job that posts to the pull request --- .github/workflows/validate-manifest.yml | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index 4031727..48e35c7 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -1,15 +1,17 @@ name: Validate Matter on: # Trigger the workflow on push or pull request - pull_request_target: + pull_request: branches: - main paths: - "extensions.json" jobs: - comment: - if: github.event_name == 'pull_request_target' + validate: + if: github.event_name == 'pull_request' runs-on: ubuntu-latest + outputs: + result: ${{ steps.validation.outputs.result }} steps: - name: Install Node uses: actions/setup-node@v3 @@ -24,6 +26,12 @@ jobs: echo "result<> $GITHUB_OUTPUT node --no-warnings ./scripts/validation/manifest.js >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT + comment: + needs: validate + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: - uses: actions/github-script@v6 with: script: | @@ -31,5 +39,5 @@ jobs: issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, - body: `${{ steps.validation.outputs.result }}` + body: `${{ needs.validate.outputs.result }}` }) From 3ce787c7e184725cdc256072d9f93e9702c0f840 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 15:17:22 +1000 Subject: [PATCH 19/40] Remove example manifest in manifest.hs --- scripts/validation/manifest.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/scripts/validation/manifest.js b/scripts/validation/manifest.js index ccddfb5..ebfb117 100644 --- a/scripts/validation/manifest.js +++ b/scripts/validation/manifest.js @@ -48,15 +48,6 @@ async function checkExtensionManifest() { return false; } - // const data = { - // description: "An example manifest for testing", - // author: "Extension Tests", - // image: "https://example.com/", - // icon: "https://example.com/", - // manifest: "https://example.com/manifest.json", - // "learn-more": "learn-more.com", - // }; - const issues = validateManifest(data); return issues; From a67caf2b31eb4f5d53560ad58be0d22959e705d4 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 15:19:49 +1000 Subject: [PATCH 20/40] Add env variable to verification submit workflow --- .github/workflows/submit-verification-request.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index c708768..a65beb4 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -17,6 +17,8 @@ jobs: run: yarn --cwd ./scripts install --frozen-lockfile - name: Submit Request to Discord run: node --no-warnings ./scripts/verify/index.js + env: + DISCORD_VERIFY_WEBHOOK: ${{ secrets.DISCORD_VERIFY_WEBHOOK }} - uses: actions/github-script@v6 with: script: | From 031c12644bf157102aa0dd7987b7bb575e632e44 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 15:29:16 +1000 Subject: [PATCH 21/40] Add call to function in verify script --- scripts/verify/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/verify/index.js b/scripts/verify/index.js index 54e2c1d..3706bd6 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -1,4 +1,5 @@ import fetch from "node-fetch"; +import { getExtensionDetails } from "../common/extensionDetails.js"; function createDiscordVerificationPost(id, data) { const text = `## Extension Verfication Request\n\n*${data.title}* would like to be verified.\nIt can be installed via this [store page](https://extensions.owlbear.rodeo/${id}).\n\nTo be verified the extension must meet these criteria:\n\n- Extension design uses accessible colors\n- Extension design uses accessible font sizes\n- Extension is legible with Owlbear Rodeo’s light and dark theme\n- Extension is fully functional on mobile devices (1)\n- Extension is fully functional across all major browsers (2)\n- Extension requires no other extensions to be installed\n- Extension functions in a private browsing window or with cookies disabled\n- Extension makes proper use of the Owlbear Rodeo APIs (3)\n- Extension functions in all configurations of an Owlbear Rodeo Room (4)\n- Extension provides user support for queries, issues and requests\n- Extension has no known bugs\n- Extension manifest is hosted on a custom domain controlled by the extension developer\n\nNotes:\n\n1) This includes iPhone’s, Android devices as well as tablets such as an iPad.\n\n2) Major browsers include Chrome, Firefox and Safari\n\n3) For example the Scene API is only used to store data that shares the Scene lifecycle\n\n4) Valid configurations include a Room with a Scene open and no Scene open\n\nAlso note that the term “fully functional” above means all extension functionally works correctly whereas the term “functional” means the extension still functions but some features may not be available.`; @@ -29,3 +30,5 @@ export async function sendDiscordWebhook() { console.log(JSON.stringify(await response.text(), null, 2)); } } + +await sendDiscordWebhook(); From 906dd2a7618d371617d1c0f3863ba770dabfe8db Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 15:35:39 +1000 Subject: [PATCH 22/40] Edit permission on vaildate-manifest workflow --- .github/workflows/validate-manifest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index 48e35c7..6a62707 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -30,7 +30,7 @@ jobs: needs: validate runs-on: ubuntu-latest permissions: - pull-requests: write + issues: write steps: - uses: actions/github-script@v6 with: From 3e52c1f52bf1e1344adf166f75ffca6411714c67 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 16:35:35 +1000 Subject: [PATCH 23/40] Remove manifest validation This will take more time to do with proper security hardening --- .github/workflows/validate-manifest.yml | 43 ---------- scripts/validation/manifest.js | 107 ------------------------ 2 files changed, 150 deletions(-) delete mode 100644 .github/workflows/validate-manifest.yml delete mode 100644 scripts/validation/manifest.js diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml deleted file mode 100644 index 6a62707..0000000 --- a/.github/workflows/validate-manifest.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: Validate Matter -on: - # Trigger the workflow on push or pull request - pull_request: - branches: - - main - paths: - - "extensions.json" -jobs: - validate: - if: github.event_name == 'pull_request' - runs-on: ubuntu-latest - outputs: - result: ${{ steps.validation.outputs.result }} - steps: - - name: Install Node - uses: actions/setup-node@v3 - with: - node-version: 16 - - uses: actions/checkout@v3 - - name: Install Packages - run: yarn --cwd ./scripts install --frozen-lockfile - - name: Run Manifest File Validation - id: validation - run: | - echo "result<> $GITHUB_OUTPUT - node --no-warnings ./scripts/validation/manifest.js >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT - comment: - needs: validate - runs-on: ubuntu-latest - permissions: - issues: write - steps: - - uses: actions/github-script@v6 - with: - script: | - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: `${{ needs.validate.outputs.result }}` - }) diff --git a/scripts/validation/manifest.js b/scripts/validation/manifest.js deleted file mode 100644 index ebfb117..0000000 --- a/scripts/validation/manifest.js +++ /dev/null @@ -1,107 +0,0 @@ -import Joi from "joi"; - -import { getExtensionDetails } from "../common/extensionDetails.js"; - -const checkUrl = (value, helpers) => { - new URL(value); - - return value; -}; - -const schema = Joi.object({ - title: Joi.string().required(), - description: Joi.string().required(), - author: Joi.string().required(), - image: Joi.string().custom(checkUrl, "check url is valid format").required(), - icon: Joi.string().custom(checkUrl, "check url is valid format").required(), - tags: Joi.array() - .min(1) - .items( - Joi.string().valid("built-by-owlbear").forbidden(), - Joi.string().valid( - "dice", - "fog", - "tool", - "content-pack", - "drawing", - "audio", - "combat", - "automation", - "other" - ) - ), - manifest: Joi.string() - .custom(checkUrl, "check url is valid format") - .required(), - "learn-more": Joi.alternatives() - .try( - Joi.string().email(), - Joi.string().custom(checkUrl, "check url is valid format") - ) - .required(), -}); - -async function checkExtensionManifest() { - const { id, data } = await getExtensionDetails(); - - if (!data) { - return false; - } - - const issues = validateManifest(data); - - return issues; -} - -export function validateManifest(data) { - const validationIssues = []; - const { value, error } = schema.validate(data, { abortEarly: false }); - - if (error) { - error.details.forEach((element) => { - validationIssues.push(element.message); - }); - } - - formatConsoleOutput(validationIssues); - - return validationIssues; -} - -/* - * - */ -function formatConsoleOutput(issues) { - let output = "## Manifest Validation Result\n\n"; - - if (Array.isArray(issues)) { - if (issues.length === 0) { - output += "No issues found in manifest type validation."; - console.log(output); - return; - } - - output += "***Issues found in manifest type validation.***\n\n"; - - for (let issue of issues) { - output += `- ${issue}\n`; - } - - output += `\n\n***You must follow the below guidelines on manifest files***\n\n -| NAME | DESCRIPTION | -| :---------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| title | This is the name of your extension | -| description | This should be a brief description of what your extension is for | -| author | This is your name or alias | -| image | This is an absolute link to a hero image for your extension. The image must be hosted on an external site. | -| icon | This is an absolute link to your extensions icon and must be hosted on an external site | -| tags | To help make your extension more discoverable you can add tags to it. In the extension store, users will be able to find your extension under that tag. You may only use our [supported tags](https://github.com/owlbear-rodeo/extensions/blob/main/tags.json) and only extensions published by Owlbear Rodeo can use the built-by-owlbear tag. | -| manifest | This should have an link to your manifest file. This is what will be copied by other users to install your extension. | -| learn-more | You should link to a site or email that users can go to to find more information about your extension. |`; - - console.log(output); - return; - } -} - -await checkExtensionManifest(); From 482df2f2027e351cc6bd6bdea1cf787abd44d505 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:02:28 +1000 Subject: [PATCH 24/40] Edit verification submission action --- .github/workflows/submit-verification-request.yml | 8 ++++++++ scripts/common/extensionDetails.js | 15 +++++++++++++++ scripts/verify/index.js | 8 ++++---- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index a65beb4..2e9c7b1 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -12,6 +12,13 @@ jobs: if: contains(github.event.comment.body, '/verify') with: node-version: 16 + - uses: actions/github-script@v6 + id: process-comment + with: + script: | + const body = github.event.comment.body + const result = body.split[" "][1] + console.log(result) - uses: actions/checkout@v3 - name: Install Packages run: yarn --cwd ./scripts install --frozen-lockfile @@ -19,6 +26,7 @@ jobs: run: node --no-warnings ./scripts/verify/index.js env: DISCORD_VERIFY_WEBHOOK: ${{ secrets.DISCORD_VERIFY_WEBHOOK }} + EXTENSION_KEY: ${{ steps.process-comment.outputs.result }} - uses: actions/github-script@v6 with: script: | diff --git a/scripts/common/extensionDetails.js b/scripts/common/extensionDetails.js index f186b61..b951f05 100644 --- a/scripts/common/extensionDetails.js +++ b/scripts/common/extensionDetails.js @@ -17,3 +17,18 @@ export async function getExtensionDetails() { return { id, data }; } } + +export async function getExtensionDetailsFromKey(key) { + const item = data[key]; + + console.log(data); + + const result = await fetch(item); + + if (result.ok) { + const markdown = await result.text(); + const data = matter(markdown)["data"]; + + return { key, data }; + } +} diff --git a/scripts/verify/index.js b/scripts/verify/index.js index 3706bd6..c89af16 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -1,5 +1,5 @@ import fetch from "node-fetch"; -import { getExtensionDetails } from "../common/extensionDetails.js"; +import { getExtensionDetailsFromKey } from "../common/extensionDetails.js"; function createDiscordVerificationPost(id, data) { const text = `## Extension Verfication Request\n\n*${data.title}* would like to be verified.\nIt can be installed via this [store page](https://extensions.owlbear.rodeo/${id}).\n\nTo be verified the extension must meet these criteria:\n\n- Extension design uses accessible colors\n- Extension design uses accessible font sizes\n- Extension is legible with Owlbear Rodeo’s light and dark theme\n- Extension is fully functional on mobile devices (1)\n- Extension is fully functional across all major browsers (2)\n- Extension requires no other extensions to be installed\n- Extension functions in a private browsing window or with cookies disabled\n- Extension makes proper use of the Owlbear Rodeo APIs (3)\n- Extension functions in all configurations of an Owlbear Rodeo Room (4)\n- Extension provides user support for queries, issues and requests\n- Extension has no known bugs\n- Extension manifest is hosted on a custom domain controlled by the extension developer\n\nNotes:\n\n1) This includes iPhone’s, Android devices as well as tablets such as an iPad.\n\n2) Major browsers include Chrome, Firefox and Safari\n\n3) For example the Scene API is only used to store data that shares the Scene lifecycle\n\n4) Valid configurations include a Room with a Scene open and no Scene open\n\nAlso note that the term “fully functional” above means all extension functionally works correctly whereas the term “functional” means the extension still functions but some features may not be available.`; @@ -11,8 +11,8 @@ function createDiscordVerificationPost(id, data) { return post; } -export async function sendDiscordWebhook() { - const { id, data } = await getExtensionDetails(); +export async function sendDiscordWebhook(key) { + const { key: id, data } = await getExtensionDetailsFromKey(key); const embed = createDiscordVerificationPost(id, data); @@ -31,4 +31,4 @@ export async function sendDiscordWebhook() { } } -await sendDiscordWebhook(); +await sendDiscordWebhook(process.env.EXTENSION_KEY); From c6e14a3a784750d9d0bc418bcc9dda48ee0998d3 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:08:33 +1000 Subject: [PATCH 25/40] Edit verification submission action --- .github/workflows/submit-verification-request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index 2e9c7b1..06c856b 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -16,7 +16,7 @@ jobs: id: process-comment with: script: | - const body = github.event.comment.body + const body = github.event.issue_comment.comment.body const result = body.split[" "][1] console.log(result) - uses: actions/checkout@v3 From 30949f19597a66fdc199983f59db26e6b83a32ec Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:11:47 +1000 Subject: [PATCH 26/40] Edit verification submission action -> add logs --- .github/workflows/submit-verification-request.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index 06c856b..88b8421 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -16,8 +16,9 @@ jobs: id: process-comment with: script: | - const body = github.event.issue_comment.comment.body + const body = context.issue.comment.body const result = body.split[" "][1] + console.log(context) console.log(result) - uses: actions/checkout@v3 - name: Install Packages From 144117002df767ee3de9df85eba9170d637e1eca Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:13:11 +1000 Subject: [PATCH 27/40] Edit logs on submission verification workflow --- .github/workflows/submit-verification-request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index 88b8421..696e4a6 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -16,9 +16,9 @@ jobs: id: process-comment with: script: | + console.log(context) const body = context.issue.comment.body const result = body.split[" "][1] - console.log(context) console.log(result) - uses: actions/checkout@v3 - name: Install Packages From 48fa5c805dfa76455691e28263c7a3f9683e9932 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:15:02 +1000 Subject: [PATCH 28/40] Patch comment on submission workflow --- .github/workflows/submit-verification-request.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index 696e4a6..762a50b 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -16,8 +16,7 @@ jobs: id: process-comment with: script: | - console.log(context) - const body = context.issue.comment.body + const body = context.payload.comment.body const result = body.split[" "][1] console.log(result) - uses: actions/checkout@v3 From 120bdd07e609f4e9dfc289377fc1dd73fc2c4934 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:16:16 +1000 Subject: [PATCH 29/40] Edit logs on submission workflow --- .github/workflows/submit-verification-request.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index 762a50b..99cbd6e 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -17,7 +17,8 @@ jobs: with: script: | const body = context.payload.comment.body - const result = body.split[" "][1] + console.log(body) + const result = body.split[" "] console.log(result) - uses: actions/checkout@v3 - name: Install Packages From 5507f9cb21d3f734ac2e77d035c7c896b1f4a65c Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:26:06 +1000 Subject: [PATCH 30/40] Add data validation to verify script --- .github/workflows/submit-verification-request.yml | 2 -- scripts/verify/index.js | 8 +++++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index 99cbd6e..657789f 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -18,8 +18,6 @@ jobs: script: | const body = context.payload.comment.body console.log(body) - const result = body.split[" "] - console.log(result) - uses: actions/checkout@v3 - name: Install Packages run: yarn --cwd ./scripts install --frozen-lockfile diff --git a/scripts/verify/index.js b/scripts/verify/index.js index c89af16..f8c0fdc 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -11,7 +11,13 @@ function createDiscordVerificationPost(id, data) { return post; } -export async function sendDiscordWebhook(key) { +export async function sendDiscordWebhook(value) { + const values = value.split(" "); + if (values.length !== 2) { + throw Error("invalid submission"); + } + + const key = values[1]; const { key: id, data } = await getExtensionDetailsFromKey(key); const embed = createDiscordVerificationPost(id, data); From 587bc929801c2d9c7ee2976cb16d970361b5de7c Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:30:39 +1000 Subject: [PATCH 31/40] Edit submission workflow -> edit step return --- .github/workflows/submit-verification-request.yml | 2 +- scripts/verify/index.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index 657789f..0e5d302 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -17,7 +17,7 @@ jobs: with: script: | const body = context.payload.comment.body - console.log(body) + return body - uses: actions/checkout@v3 - name: Install Packages run: yarn --cwd ./scripts install --frozen-lockfile diff --git a/scripts/verify/index.js b/scripts/verify/index.js index f8c0fdc..57b1da2 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -14,6 +14,7 @@ function createDiscordVerificationPost(id, data) { export async function sendDiscordWebhook(value) { const values = value.split(" "); if (values.length !== 2) { + console.log(values); throw Error("invalid submission"); } From 3f20b7466b964789d527c1da7f0944e573fb5987 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:33:31 +1000 Subject: [PATCH 32/40] Add logs to verify script --- scripts/verify/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/verify/index.js b/scripts/verify/index.js index 57b1da2..676969f 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -38,4 +38,4 @@ export async function sendDiscordWebhook(value) { } } -await sendDiscordWebhook(process.env.EXTENSION_KEY); +await sendDiscordWebhook("/verify dice"); From 4f82524abf4f2f4bf38549ab3aaec282e034708a Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:36:34 +1000 Subject: [PATCH 33/40] Remove console log on extensionDetails --- scripts/common/extensionDetails.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/common/extensionDetails.js b/scripts/common/extensionDetails.js index b951f05..5b7c854 100644 --- a/scripts/common/extensionDetails.js +++ b/scripts/common/extensionDetails.js @@ -21,8 +21,6 @@ export async function getExtensionDetails() { export async function getExtensionDetailsFromKey(key) { const item = data[key]; - console.log(data); - const result = await fetch(item); if (result.ok) { From 90e8cd5f0620e9e4a33784d2e05e7b2a966402d2 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:38:22 +1000 Subject: [PATCH 34/40] Fix hardcoded verification --- scripts/common/extensionDetails.js | 3 +++ scripts/verify/index.js | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/common/extensionDetails.js b/scripts/common/extensionDetails.js index 5b7c854..bc42b0a 100644 --- a/scripts/common/extensionDetails.js +++ b/scripts/common/extensionDetails.js @@ -21,6 +21,9 @@ export async function getExtensionDetails() { export async function getExtensionDetailsFromKey(key) { const item = data[key]; + console.log(key); + console.log(item); + const result = await fetch(item); if (result.ok) { diff --git a/scripts/verify/index.js b/scripts/verify/index.js index 676969f..bdc9fa5 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -18,6 +18,8 @@ export async function sendDiscordWebhook(value) { throw Error("invalid submission"); } + console.log(values); + const key = values[1]; const { key: id, data } = await getExtensionDetailsFromKey(key); @@ -38,4 +40,4 @@ export async function sendDiscordWebhook(value) { } } -await sendDiscordWebhook("/verify dice"); +await sendDiscordWebhook(process.env.EXTENSION_KEY); From cbd7a6ad1df6f914ade50880215529cf6a8c7314 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:39:42 +1000 Subject: [PATCH 35/40] Add string parse to environment var input --- scripts/verify/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/verify/index.js b/scripts/verify/index.js index bdc9fa5..46cdab2 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -12,7 +12,7 @@ function createDiscordVerificationPost(id, data) { } export async function sendDiscordWebhook(value) { - const values = value.split(" "); + const values = `${value}`.split(" "); if (values.length !== 2) { console.log(values); throw Error("invalid submission"); From 9e8e48d33a6861cde61c7d2cd98cb63784684d7c Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:42:11 +1000 Subject: [PATCH 36/40] Remove quotes from value --- scripts/verify/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/verify/index.js b/scripts/verify/index.js index 46cdab2..c6b9320 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -12,7 +12,7 @@ function createDiscordVerificationPost(id, data) { } export async function sendDiscordWebhook(value) { - const values = `${value}`.split(" "); + const values = value.replaceAll('"', "").split(" "); if (values.length !== 2) { console.log(values); throw Error("invalid submission"); From 156622a35772f120aa6172c484a78fe04180e4c9 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:43:27 +1000 Subject: [PATCH 37/40] Remove console logs --- scripts/common/extensionDetails.js | 3 --- scripts/verify/index.js | 2 -- 2 files changed, 5 deletions(-) diff --git a/scripts/common/extensionDetails.js b/scripts/common/extensionDetails.js index bc42b0a..5b7c854 100644 --- a/scripts/common/extensionDetails.js +++ b/scripts/common/extensionDetails.js @@ -21,9 +21,6 @@ export async function getExtensionDetails() { export async function getExtensionDetailsFromKey(key) { const item = data[key]; - console.log(key); - console.log(item); - const result = await fetch(item); if (result.ok) { diff --git a/scripts/verify/index.js b/scripts/verify/index.js index c6b9320..db8eb72 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -18,8 +18,6 @@ export async function sendDiscordWebhook(value) { throw Error("invalid submission"); } - console.log(values); - const key = values[1]; const { key: id, data } = await getExtensionDetailsFromKey(key); From e06644acd845db459afbb5e5db9c012fdb795fea Mon Sep 17 00:00:00 2001 From: nthouliss Date: Thu, 21 Sep 2023 15:23:54 +1000 Subject: [PATCH 38/40] Edit verification message --- scripts/verify/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/verify/index.js b/scripts/verify/index.js index db8eb72..96ffe86 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -2,9 +2,10 @@ import fetch from "node-fetch"; import { getExtensionDetailsFromKey } from "../common/extensionDetails.js"; function createDiscordVerificationPost(id, data) { - const text = `## Extension Verfication Request\n\n*${data.title}* would like to be verified.\nIt can be installed via this [store page](https://extensions.owlbear.rodeo/${id}).\n\nTo be verified the extension must meet these criteria:\n\n- Extension design uses accessible colors\n- Extension design uses accessible font sizes\n- Extension is legible with Owlbear Rodeo’s light and dark theme\n- Extension is fully functional on mobile devices (1)\n- Extension is fully functional across all major browsers (2)\n- Extension requires no other extensions to be installed\n- Extension functions in a private browsing window or with cookies disabled\n- Extension makes proper use of the Owlbear Rodeo APIs (3)\n- Extension functions in all configurations of an Owlbear Rodeo Room (4)\n- Extension provides user support for queries, issues and requests\n- Extension has no known bugs\n- Extension manifest is hosted on a custom domain controlled by the extension developer\n\nNotes:\n\n1) This includes iPhone’s, Android devices as well as tablets such as an iPad.\n\n2) Major browsers include Chrome, Firefox and Safari\n\n3) For example the Scene API is only used to store data that shares the Scene lifecycle\n\n4) Valid configurations include a Room with a Scene open and no Scene open\n\nAlso note that the term “fully functional” above means all extension functionally works correctly whereas the term “functional” means the extension still functions but some features may not be available.`; + const text = `## Extension Verfication Request\n\n${data.title} would like to be verified.\n\nIt can be installed via this [store page](https://extensions.owlbear.rodeo/${id}).\n\nTo be verified the extension must meet these criteria:\n\n- Extension design uses accessible colors :art:\n- Extension design uses accessible font sizes :blue_book:\n- Extension is legible with Owlbear Rodeo’s light and dark theme :ghost:\n- Extension is fully functional on mobile devices (1) :mobile_phone:\n- Extension is fully functional across all major browsers (2) :computer:\n- Extension requires no other extensions to be installed :link: \n- Extension functions in a private browsing window or with cookies disabled :lock:\n- Extension makes proper use of the Owlbear Rodeo APIs (3) :jigsaw: \n- Extension functions in all configurations of an Owlbear Rodeo Room (4) :house:\n- Extension provides user support for queries, issues and requests :question:\n- Extension has no known bugs :bug: \n- Extension manifest is hosted on a custom domain controlled by the extension developer :pencil:\n\nNotes:\n\n1) This includes iPhone’s, Android devices as well as tablets such as an iPad.\n\n2) Major browsers include Chrome, Firefox and Safari\n\n3) For example the Scene API is only used to store data that shares the Scene lifecycle\n\n4) Valid configurations include a Room with a Scene open and no Scene open\n\nAlso note that the term “fully functional” above means all extension functionally works correctly whereas the term “functional” means the extension still functions but some features may not be available.\n\n### To help verify this extension react to this message with the criteria that are met! (i.e. react :bug: if it has no known bugs)`; const post = { + thread_name: `${data.title} wants to be verified`, content: text, }; From bdab7b5a9d111642ebfa597c31c08809e3a47aff Mon Sep 17 00:00:00 2001 From: Mitchell McCaffrey Date: Thu, 21 Sep 2023 15:31:39 +1000 Subject: [PATCH 39/40] Create verified.json --- verified.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 verified.json diff --git a/verified.json b/verified.json new file mode 100644 index 0000000..e017071 --- /dev/null +++ b/verified.json @@ -0,0 +1,5 @@ +{ + "initiative-tracker": true, + "dice": true, + "colored-rings": true +} From ceac3c947280a6cad958a7526856ca2780e1b688 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Thu, 21 Sep 2023 15:39:49 +1000 Subject: [PATCH 40/40] Edit update-extension-store.yml --- .github/workflows/update-extension-store.yml | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/.github/workflows/update-extension-store.yml b/.github/workflows/update-extension-store.yml index 108a5ea..440a6a7 100644 --- a/.github/workflows/update-extension-store.yml +++ b/.github/workflows/update-extension-store.yml @@ -1,13 +1,11 @@ name: Update Extention Store -on: +on: push: paths: - "extensions.json" branches: - main workflow_dispatch: - branches: - - main jobs: regenerate: @@ -43,3 +41,18 @@ jobs: run: yarn --cwd ./scripts run trigger env: DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} + - uses: actions/github-script@v6 + with: + script: | + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: `Your extension is now available on the Extension Store! 🎉 + + You can now submit your extension for verification. To start the verification process respond to your pull request with the message `/verify ` where `` is the key used in the `extensions.json` file in your pull request. + + Once this has been done a thread will be created on the [Owlbear Rodeo Discord](https://discord.gg/u5RYMkV98s) tracking the status of all the above guidelines. + + Once the community has verified that all the guidelines have been passed the Owlbear Rodeo team will add the verified badge to your extension.` + })