From 027cee7ae26ea271844e3d9b81e4d004da19a6c8 Mon Sep 17 00:00:00 2001 From: Naomi Date: Sun, 12 May 2024 01:45:37 -0700 Subject: [PATCH] feat: migrate from github --- .gitattributes | 8 + .gitignore | 1 + .markdownlint.json | 5 + CODE_OF_CONDUCT.md | 3 + CONTRIBUTING.md | 3 + LICENSE.md | 5 + PRIVACY.md | 3 + README.md | 29 + SECURITY.md | 3 + TERMS.md | 3 + docs/.nojekyll | 0 docs/CNAME | 1 + docs/_navbar.md | 60 + docs/coc.md | 114 ++ docs/community/appeal.md | 19 + docs/community/guide.md | 85 + docs/community/labels.md | 92 + docs/community/melody.md | 58 + docs/contact.md | 53 + docs/contributing.md | 136 ++ docs/donate.md | 7 + docs/hire.md | 11 + docs/index.html | 113 ++ docs/index.md | 3 + docs/license.md | 201 ++ docs/privacy.md | 47 + docs/projects/art-for-palestine-bot/index.md | 5 + .../projects/art-for-palestine-bot/privacy.md | 39 + .../art-for-palestine-bot/self-hosting.md | 3 + docs/projects/azuliah-bot/index.md | 5 + docs/projects/azuliah-bot/privacy.md | 10 + docs/projects/azuliah-bot/self-hosting.md | 3 + docs/projects/deepgram/index.md | 5 + docs/projects/deepgram/privacy.md | 10 + docs/projects/deepgram/self-hosting.md | 131 ++ docs/projects/deepgram/usage.md | 69 + docs/projects/discord-birthday-bot/index.md | 5 + docs/projects/discord-birthday-bot/privacy.md | 39 + .../discord-birthday-bot/self-hosting.md | 3 + docs/projects/discord-boost-monitor/index.md | 5 + .../projects/discord-boost-monitor/privacy.md | 10 + .../discord-boost-monitor/self-hosting.md | 25 + .../discord-verification-bot/index.md | 7 + .../discord-verification-bot/privacy.md | 39 + .../discord-verification-bot/usage.md | 10 + docs/projects/security-bot/index.md | 5 + docs/projects/security-bot/privacy.md | 10 + docs/projects/security-bot/usage.md | 3 + .../we-love-hacktoberfest/contributing.md | 31 + docs/projects/we-love-hacktoberfest/index.md | 5 + .../projects/we-love-hacktoberfest/privacy.md | 40 + .../we-love-hacktoberfest/self-hosting.md | 3 + docs/security.md | 8 + docs/staff/apply.md | 8 + docs/staff/handbook.md | 127 ++ docs/terms.md | 140 ++ package.json | 35 + pnpm-lock.yaml | 1647 +++++++++++++++++ 58 files changed, 3548 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .markdownlint.json create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE.md create mode 100644 PRIVACY.md create mode 100644 README.md create mode 100644 SECURITY.md create mode 100644 TERMS.md create mode 100644 docs/.nojekyll create mode 100644 docs/CNAME create mode 100644 docs/_navbar.md create mode 100644 docs/coc.md create mode 100644 docs/community/appeal.md create mode 100644 docs/community/guide.md create mode 100644 docs/community/labels.md create mode 100644 docs/community/melody.md create mode 100644 docs/contact.md create mode 100644 docs/contributing.md create mode 100644 docs/donate.md create mode 100644 docs/hire.md create mode 100644 docs/index.html create mode 100644 docs/index.md create mode 100644 docs/license.md create mode 100644 docs/privacy.md create mode 100644 docs/projects/art-for-palestine-bot/index.md create mode 100644 docs/projects/art-for-palestine-bot/privacy.md create mode 100644 docs/projects/art-for-palestine-bot/self-hosting.md create mode 100644 docs/projects/azuliah-bot/index.md create mode 100644 docs/projects/azuliah-bot/privacy.md create mode 100644 docs/projects/azuliah-bot/self-hosting.md create mode 100644 docs/projects/deepgram/index.md create mode 100644 docs/projects/deepgram/privacy.md create mode 100644 docs/projects/deepgram/self-hosting.md create mode 100644 docs/projects/deepgram/usage.md create mode 100644 docs/projects/discord-birthday-bot/index.md create mode 100644 docs/projects/discord-birthday-bot/privacy.md create mode 100644 docs/projects/discord-birthday-bot/self-hosting.md create mode 100644 docs/projects/discord-boost-monitor/index.md create mode 100644 docs/projects/discord-boost-monitor/privacy.md create mode 100644 docs/projects/discord-boost-monitor/self-hosting.md create mode 100644 docs/projects/discord-verification-bot/index.md create mode 100644 docs/projects/discord-verification-bot/privacy.md create mode 100644 docs/projects/discord-verification-bot/usage.md create mode 100644 docs/projects/security-bot/index.md create mode 100644 docs/projects/security-bot/privacy.md create mode 100644 docs/projects/security-bot/usage.md create mode 100644 docs/projects/we-love-hacktoberfest/contributing.md create mode 100644 docs/projects/we-love-hacktoberfest/index.md create mode 100644 docs/projects/we-love-hacktoberfest/privacy.md create mode 100644 docs/projects/we-love-hacktoberfest/self-hosting.md create mode 100644 docs/security.md create mode 100644 docs/staff/apply.md create mode 100644 docs/staff/handbook.md create mode 100644 docs/terms.md create mode 100644 package.json create mode 100644 pnpm-lock.yaml diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..2bffe04 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,8 @@ +# Auto detect text files and perform LF normalization +* text eol=LF +*.ts text +*.spec.ts text + +# Ignore binary files >:( +*.png binary +*.jpg binary \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2ccbe46 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/node_modules/ diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 0000000..26a8a78 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,5 @@ +{ + "line-length": false, + "no-bare-urls": false, + "no-blanks-blockquote": false +} \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..a3bbfe2 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,3 @@ +# Code of Conduct + +Our Code of Conduct can be found here: https://docs.nhcarrigan.com/#/coc diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..f67101e --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,3 @@ +# Contributing + +Our contributing guidelines can be found here: https://docs.nhcarrigan.com/#/contributing diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..5424732 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,5 @@ +# License + +This software is licensed under our [global software license](https://docs.nhcarrigan.com/#/license). + +Copyright held by Naomi Carrigan. diff --git a/PRIVACY.md b/PRIVACY.md new file mode 100644 index 0000000..96791d1 --- /dev/null +++ b/PRIVACY.md @@ -0,0 +1,3 @@ +# Privacy Policy + +Our privacy policy can be found here: https://docs.nhcarrigan.com/#/privacy diff --git a/README.md b/README.md new file mode 100644 index 0000000..dfd6f38 --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +# General Documentation + +Documentation for my smaller projects. + +## Live Version + +This page is currently deployed. [View the live website.](https://docs.nhcarrigan.com) + +## Feedback and Bugs + +If you have feedback or a bug report, please feel free to open a GitHub issue! + +## Contributing + +If you would like to contribute to the project, you may create a Pull Request containing your proposed changes and we will review it as soon as we are able! Please review our [contributing guidelines](CONTRIBUTING.md) first. + +## Code of Conduct + +Before interacting with our community, please read our [Code of Conduct](CODE_OF_CONDUCT.md). + +## License + +This software is licensed under our [global software license](https://docs.nhcarrigan.com/#/license). + +Copyright held by Naomi Carrigan. + +## Contact + +We may be contacted through our [Chat Server](http://chat.nhcarrigan.com) or via `contact@nhcarrigan.com`. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..bb3fc2d --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,3 @@ +# Security Policy + +Our security policy can be found here: https://docs.nhcarrigan.com/#/security diff --git a/TERMS.md b/TERMS.md new file mode 100644 index 0000000..f556156 --- /dev/null +++ b/TERMS.md @@ -0,0 +1,3 @@ +# Terms of Service + +Our Terms of Service can be found here: https://docs.nhcarrigan.com/#/terms diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/CNAME b/docs/CNAME new file mode 100644 index 0000000..07fd8e4 --- /dev/null +++ b/docs/CNAME @@ -0,0 +1 @@ +docs.nhcarrigan.com \ No newline at end of file diff --git a/docs/_navbar.md b/docs/_navbar.md new file mode 100644 index 0000000..4c334b9 --- /dev/null +++ b/docs/_navbar.md @@ -0,0 +1,60 @@ +![Naomi's Avatar](https://cdn.nhcarrigan.com/profile.png) + +--- + +- [Hire us!](/hire) +- [Support Our Work �](/donate) +- [Contact](/contact) + +--- + +- [Software License](/license) +- [Code of Conduct](/coc) +- [Contributing](/contributing) +- [Privacy Policy](/privacy) +- [Security Policy](/security) +- [Terms of Service](/terms) + +--- + +- [Community Guidelines](/community/guide) +- [Issue/PR Labels](/community/labels) +- [Appeal a Mod Action](/community/appeal) + +--- + +- [Art for Palestine Bot](/projects/art-for-palestine-bot/index) + - [Privacy Policy](/projects/art-for-palestine-bot/privacy) + - [Self Hosting](/projects/art-for-palestine-bot/self-hosting) +- [Azuliah Bot](/projects/azuliah-bot/index) + - [Privacy Policy](/projects/azuliah-bot/privacy) + - [Self Hosting](/projects/azuliah-bot/self-hosting) +- [Deepgram Bot](/projects/deepgram/index) + - [Privacy Policy](/projects/deepgram/privacy) + - [Self Hosting](/projects/deepgram/self-hosting) + - [Usage](/projects/deepgram/usage) +- [Discord Birthday Bot](/projects/discord-birthday-bot/index) + - [Privacy Policy](/projects/discord-birthday-bot/privacy) + - [Self Hosting](/projects/discord-birthday-bot/self-hosting) +- [Discord Boost Monitor](/projects/discord-boost-monitor/index) + - [Privacy Policy](/projects/discord-boost-monitor/privacy) + - [Self Hosting](/projects/discord-boost-monitor/self-hosting) +- [Discord Verification Bot](/projects/discord-verification-bot/index) + - [Privacy Policy](/projects/discord-verification-bot/privacy) + - [Usage](/projects/discord-verification-bot/usage) +- [Security Bot](/projects/security-bot/index) + - [Privacy Policy](/projects/security-bot/privacy) + - [Usage](/projects/security-bot/usage) +- [We Love Hacktoberfest](/projects/we-love-hacktoberfest/index) + - [Contributing](/projects/we-love-hacktoberfest/contributing) + - [Privacy Policy](/projects/we-love-hacktoberfest/privacy) + - [Self Hosting](/projects/we-love-hacktoberfest/self-hosting) + +--- + +- [Staff Handbook](/staff/handbook) +- [Join the Team](/staff/apply) + +--- + +© 2022 - [Naomi Carrigan](https://www.nhcarrigan.com) diff --git a/docs/coc.md b/docs/coc.md new file mode 100644 index 0000000..926650e --- /dev/null +++ b/docs/coc.md @@ -0,0 +1,114 @@ +# Code of Conduct + +> [!TIP] +> We expect all interactions with our projects, community, and platforms to follow this Code of Conduct. + +> [!NOTE] +> "Our community" refers to our Discord server, GitHub accounts, and any other platform on which members can interact with each other. "Community leaders" refers to our staff team, including moderators, developers, support staff, and administrators. + +> [!DANGER] +> Due to the heavy nature of topics discussed in our community, and to ensure the comfort of all of our members, participants must be 18 years or older to interact with us. +> Exceptions are made for the professional platforms listed on [our contact page](/contact) + +We are dedicated to providing a safe and harassment-free experience for everyone. We do not tolerate harassment of participants in any form. + +Members must be at least 18 years of age to participate in our community. + +## Scope + +This code of conduct applies to all of our community spaces, including public channels, private channels and direct messages, both online and off. This code of conduct also applies to non-community spaces when a community member is involved. If you are being harassed by a member of our community outside our spaces, we want to know about it. We will take all good-faith reports of harassment by our community members, especially community leaders, seriously. This includes harassment outside our spaces and harassment that took place at any point in time. Community leaders reserve the right to exclude people from our community based on their past behaviour, including behaviour outside our community spaces and behaviour towards people who are not in our community. + +## Rules + +- No trolling or insulting/derogatory comments. +- No harassment, whether public or private. +- No questioning or challenging someone’s stated self-identity or chosen labels, even if they conflict with your views. For example, discussions about bi vs pan, trans vs trans\*, or whether grey/demisexual people are asexual, even if well-intentioned. +- No incitement of violence towards any individual, including encouraging a person to commit suicide or to engage in self-harm. +- No deliberate “outing” of any aspect of a person’s identity without their consent except as necessary to protect vulnerable people from intentional abuse. This includes physical or electronic addresses, legal names, etc. +- No publication of non-harassing private communication, without explicit consent from all parties. +- No advocating for members to be banned, except in direct messages, or private discussions with community leaders. +- No unwelcome comments regarding a person’s lifestyle choices and practices, including those related to food, health, parenting, relationships, drugs, and employment. +- No explicit sexual images or behaviour. +- No offensive comments related to gender, gender identity and expression, sexual orientation, disability, mental illness, neuro(a)typicality, physical appearance, body size, age, race, national origin, ethnic origin, nationality, immigration status, language, religion or lack thereof, or other identity marker. +- No use or abuse of “Reverse”-isms, including “reverse racism,” “reverse sexism,” and “cisphobia” against marginalized members. “Reverse”-isms and any concepts that uphold and bulwark white and privileged supremacies out of the context of challenging it will be shut down. +- No debating the rights and lived experiences of marginalized people in the community. +- No racist, sexist, cissexist, ableist or otherwise oppressive behaviour is allowed, casual or explicit. This includes any harmful language, behaviour, or action toward people of colour, trans folks, disabled and other marginalized identities in our community. These are violations of the Code of Conduct. +- No use of slurs or hateful terminology. +- No spam or excessive self-promotion. + +### Harassment + +Harassment includes: + +- Deliberate misgendering or use of “dead” or rejected names +- Physical contact and simulated physical contact (eg, textual descriptions like “hug” or “backrub”) without consent or after a request to stop +- Threats of violence +- Deliberate intimidation +- Stalking or following +- Unwanted photography or recording, including logging online activity for harassment purposes +- Unwelcome sexual attention +- Pattern of inappropriate social contact, such as requesting/assuming inappropriate levels of intimacy with others +- Continued one-on-one communication after requests to cease +- Targeted and deliberate aggression. + +## No AI + +We firmly believe in the rights of creators and the importance of their work. Because AI models are oft trained on data scraped from the internet, or acquired through shady and vague terms of service, content generated or modified by AI is not permitted within our community. + +Exceptions may be made in specific cases where you can evidence that the model was trained only on consensually given data. Such exceptions must be requested from Naomi **before** sharing the content within any of our community spaces. + +## Reporting + +If you see a violation or have any other concerns, please contact our community leaders by typing `@Moderator` in our Discord server, or contact a leader directly via DM. If the violator is on our staff team, they will recuse themselves from handling your incident and will be investigated further by the rest of the team. We will respond as promptly as we can. + +To protect our volunteers from abuse and burnout, we reserve the right to reject any report we believe to have been made in bad faith. Reports intended to silence legitimate criticism may be deleted without response. + +We will respect confidentiality requests for the purpose of protecting victims of abuse. At our discretion, we may publicly name a person about whom we’ve received harassment complaints, or privately warn third parties about them, if we believe that doing so will increase the safety of our community members or the general public. We will not name harassment victims without their affirmative consent. + +## Consequences + +Participants asked to stop any harmful behaviour are expected to comply immediately. + +If a participant engages in harmful behaviour, community leaders may take any action they deem appropriate, up to and including expulsion from all of our community spaces and identification of the participant as a harasser to other community members or the general public. + +All community leaders are obligated to respect the privacy and security of the reporter of any incident. + +## Enforcement + +Community leaders have the right and responsibility to remove, edit, or reject chat messages, comments, commits, code, issues, and other contributions that are not aligned with this Code of Conduct. By adopting this Code of Conduct, the community leaders commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Community leaders who do not follow or enforce the Code of Conduct may be permanently removed from the project team. + +Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Reminder + +**Example Behaviour**: Use of inappropriate language or other behaviour deemed unprofessional or unwelcome in the community. + +**Consequence**: A public, written reminder from community leaders, providing clarity around the nature of the violation and an explanation of why the behaviour was inappropriate. A public apology may be requested. + +### 2. Warning + +**Example Behaviour**: A violation through a single incident or series of actions. + +**Consequence**: A warning with consequences for continued behaviour. Warnings are logged in our staff records for future review. + +### 3. Temporary Removal + +**Example Behaviour**: A serious violation of community standards, including sustained inappropriate behaviour. + +**Consequence**: A temporary removal (on Discord, a kick) from our communities. Members will be permitted to rejoin at their discretion, but are **highly** encouraged to re-read this document and solidify their understanding of our community expectations. + +### 4. Permanent Ban + +**Example Behaviour**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behaviour, harassment of an individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from all of our community platforms. + +## Moderation Logs + +Our community platforms are meant to belong to all members of our community. Our moderation team are trusted with tools to help keep the community spaces safe, but they are still accountable to the community members. + +As such, **all moderation actions** across **all platforms** are publicly logged in our `#moderation-log` channel in the [Discord community](https://chat.nhcarrigan.com). + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html), version 2.1 and the [LGBTQ in Tech Code of Conduct](https://lgbtq.technology/coc.html) diff --git a/docs/community/appeal.md b/docs/community/appeal.md new file mode 100644 index 0000000..dedb929 --- /dev/null +++ b/docs/community/appeal.md @@ -0,0 +1,19 @@ +# Appealing A Moderator Decision + +Our moderators do not take punitive action (such as kicks, bans, etc.) lightly. However, misunderstandings do happen and everyone makes mistakes. + +If you feel that you were restricted from our community unfairly, you can reach out to Naomi to discuss the decision. + +## Preparing for Your Appeal + +Before reaching out to us, be prepared with some information. + +- Have you read our rules and code of conduct? +- Do you agree to follow them? +- Why do you think a moderator took action against you? +- Why do you think this action was unfair? +- Why do you want to resume interaction with our community? What value do you feel you would add? + +If you are not prepared for your appeal, we will be less likely to approve it. + +[Appeal A Ban](https://airtable.com/appV1cYj57zUU1Af2/pagEeCCMdz5T6cHi9/form) diff --git a/docs/community/guide.md b/docs/community/guide.md new file mode 100644 index 0000000..87f266f --- /dev/null +++ b/docs/community/guide.md @@ -0,0 +1,85 @@ +# Community Guidelines + +> [!DANGER] +> Due to the heavy nature of topics discussed in our community, and to ensure the comfort of all of our members, participants must be 18 years or older to interact with us. +> Exceptions are made for the professional platforms listed on [our contact page](/contact) + +This page documents some helpful tips that will maximise the value you get from (and bring to) our community. The guidelines here are not strict rules or requirements, but are highly encouraged to keep our community safe and cosy for everyone. + +## Do not Argue with Staff + +Our staff team consists of members who have been trusted with tools to help keep the community safe. But they are still human! We all make mistakes. + +If you feel a staff decision was made in error or bad faith, do not argue directly with the team. Instead, fill out our [appeal form](/community/appeal) and we will review your case. Only Naomi has access to this form, and submissions will only be shared in the minimum capacity necessary to investigate and resolve the issue. Your name will not be associated with any revealed submission information. + +## Plural Systems + +Plural systems are more than welcome in our community. Please do not pressure someone to reveal information about one of their alters, or attempt to discover who used Melody's plural proxying. + +Systems are welcome to disclose whatever information they want about their alters. + +## Tone Tags + +One of the biggest disadvantages of text-based communication is the loss of context that provides the tone of the message. To help with this, we use tone tags as needed when the tone of a message might be misinterpreted. + +We encourage you to use these tags as needed. + +| Tag | Meaning | +| ---------------------- | ------------------------------------ | +| `/aff` | Affectionate | +| `/apa` | Apathetic | +| `/b` | Bitter | +| `/cel` | Celebratory | +| `/ci` | Caring Intent | +| `/cj` | Coping Joke | +| `/co` or `/cf` | Comforting | +| `/ex` | Exaggeration | +| `/f` | fake | +| `/fam` | Familial | +| `/fex` | for example | +| `/gen` or `/g` | Genuine | +| `/genq` or `/gq` | Genuine Question | +| `/gens` or `/gs` | Genuine Suggestion | +| `/hj` | Half Joking | +| `/hyp` | Hyperbole | +| `/ij` | Inside Joke | +| `/info` | Information | +| `/j` | Joking | +| `/jov` | Jokingly Overreacting | +| `/l`, `/ly` or `/lyr` | Lyrics | +| `/lh` | Lighthearted | +| `/li` or `/lit` | Literally | +| `/lu` | Little Upset | +| `/m` | Metaphorically | +| `/md` | Melodramatic | +| `/nav` | Not A Vent | +| `/nay` | Not At You | +| `/nbh` | Nobody Here (for vague venting only) | +| `/nbr` | Not Being Rude | +| `/nc` or `/neg` | Negative connotation | +| `/ncm` | Not Comparing | +| `/neu` | Neutral connotation | +| `/nf` | Not Forced | +| `/nm` | Not Mad (or upset) | +| `/np` | No Pressure | +| `/npa` | Not Passive Aggressive | +| `/nsx` or `/nx` | Non Sexual Intent | +| `/ny` | Not Yelling | +| `/op` | Optional | +| `/ot` | Off Topic | +| `/p` or `/plat` | Platonic | +| `/pc` or `/pos` | Positive connotation | +| `/q` | Quote | +| `/ref` | Reference | +| `/rh`, `/rt` or `/rhq` | Rhetorical Question | +| `/s` or `/sar` | Sarcastic | +| `/srs` | Serious | +| `/sym` | Sympathetic | +| `/t` | Teasing | +| `/tc`, `/ti` or `/tic` | Typing a tic | + +## Pronouns + +You are encouraged to display your pronouns in your platform bio (or use the roles in our Discord community). Doing this not only helps others know how to refer to you, but also helps normalise the practice of sharing pronouns. + +By normalising that practice, we fight against the assumption that only trans folk share their pronouns, which makes our community safer for trans folk to do so without implicitly outing themselves. diff --git a/docs/community/labels.md b/docs/community/labels.md new file mode 100644 index 0000000..5da744e --- /dev/null +++ b/docs/community/labels.md @@ -0,0 +1,92 @@ +# Labels + +We use very specific labels to help categorise our issues. This page explains what each label means. + +## Contribution Labels + +These are the most important. These labels indicate who is encouraged to make a pull request to resolve the issue. + +| Label | Explanation | +| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `good first issue` | An issue with this label is intended for contributors who are brand new to the project. These issues should not require prior knowledge of the codebase, and the conversation on the issue will include a detailed description of how to implement a resolution. | +| `help wanted` | These issues are open for contribution from anyone who is interested. The conversation may not include a detailed description, as these issues typically assume you have prior experience with the codebase. | +| `🔒 staff only` | These issues require specific access to the production infrastructure to test properly. These are restricted to project maintainers/staff for that reason. | + +## Aspect Labels + +These labels indicate the scope of the work required to resolve the issue. + +| Label | Explanation | +| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `💻 aspect: code` | This is the most common. These issues require work on the project's code-base. | +| `🤖 aspect: dx` | These issues typically require changes to the project's tooling, such as automated tests, development dependencies, etc. | +| `🕹 aspect: interface` | These issues might require code changes, but these are specifically things that require changing the end-user's experience. This might be something like CSS changes, or replacing an image. | +| `📄 aspect: text` | These issues are related to a project's documentation. These don't require code changes, but might require markdown experience as most of our documentation is written in markdown. | + +## Goal Labels + +These labels indicate the goal of the issue. Our projects tend to follow a specific modular approach, and these labels help indicate the type of changes you might be making. + +| Label | Explanation | +| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| `⭐ goal: addition` | These issues add a new feature to the project. Typically, this means you're adding a new code file from scratch, following the project's style. | +| `🛠 goal: fix` | These issues fix a bug in the project. Typically, this means you're editing existing code within existing files. | +| `✨ goal: improvement` | These issues expand upon an existing feature. Typically, this means you're adding code to an existing file, but not necessarily adding new files. | + +## Priority Labels + +The priority labels indicate the importance we've assigned to a specific issue. The higher the priority, the more of a focus it is for our team. + +| Label | Explanation | +| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `🟥 priority: critical` | These issues are typically show-stoppers. This label is reserved for issues which need immediate attention because the project is **unusable** until they are resolved. | +| `🟧 priority: high` | This label applies to issues that aren't preventing the project from being _functional_, but are preventing further development until they're resolved. | +| `🟨 priority: medium` | Medium priority issues are things that we want resolved as soon as possible, but they aren't preventing other development from occurring. | +| `🟩 priority: low` | This is probably the most common label. This is for issues that we'd like resolved, but aren't considered as things we want done ASAP. | +| `🟪 priority: none` | This label indicates an issue that would be nice to have resolved, but isn't essential enough to dedicate maintainer time to fixing. | + +## Status Labels + +Status labels allow you to see where a ticket is at in the lifecycle of the project. + +| Label | Explanation | +| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `🚦 status: awaiting triage` | This is the most common status label. This label is automatically applied to new issues, and indicates that the maintainer team has not reviewed and responded to the issue. You are still welcome to share your thoughts, but these issues have not received any maintainer attention. | +| `🚧 status: blocked` | This label is applied to issues that might have a planned resolution, but that resolution depends on a separate issue being resolved. These aren't ready for work **yet**, but will be soon. | +| `⛔️ status: discarded` | This label applies to an issue that we don't intend to resolve. Typically, this is on feature requests that aren't in line with the project's goals. | +| `🙅 status: discontinued` | We rarely use this label, but this applies to feature request issues on projects that are solely in maintenance mode - that is, projects we aren't adding new features to but are still supporting and providing bug fixes for. | +| `🏷 status: label work required` | This applies to an issue that might have some discussion on it, but hasn't been appropriately labelled and categorised. | +| `🏁 status: ready for dev` | These issues are ready for contribution. If a contributor is assigned, they have indicated interest in working on the issue and we encourage you to collaborate. This pairs with the Contribution Labels listed above. | +| `🧹 status: ticket work required` | This label indicates that the issue does not have enough information for proper triage. Typically, this pairs with the Conversation Labels listed below. | + +## Conversation Labels + +These labels indicate that the issue has received initial maintainer attention, but is waiting on more information from the author or the maintainer team. + +| Label | Explanation | +| --------------------- | ---------------------------------------------------------------------------------------------------- | +| `💬 talk: discussion` | This issue is being actively discussed, but has not been accepted as something we intend to resolve. | +| `❓ talk: question` | These issues are waiting on additional information from the author in order to triage properly. | + +## Special Labels + +These labels are specifically used for unique events. + +| Label | Explanation | +| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Hacktoberfest` | This issue is indicated as a valid contribution opportunity for Hacktoberfest. | +| `hacktoberfest-accepted` | This is used to label pull requests which are valid Hacktoberfest contributions, but might not be merged in time for the event. | +| `invalid` | This label is specifically used on pull requests which were made with the goal of spamming Hacktoberfest contributions, and were not made in good faith. | + +## Pull Request Labels + +We have automation that applies specific labels to our pull requests. + +| Label | Explanation | +| --------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `✅ pull: accepted` | This pull request has been merged into the code base. | +| `⚠️ pull: merge conflict` | This pull request has conflicts with the target branch. Those need to be resolved before we can review it. | +| `🔍 pull: ready for review` | This pull request is not in draft mode and is waiting for maintainer review. | +| `❌ pull: rejected` | This pull request was not accepted by maintainers and was closed. | +| `⏫ pull: requires update` | This pull request has had changes requested by the maintainer team. | +| `⚒️ pull: work in progress` | This pull request is in draft mode and is not ready for review. | diff --git a/docs/community/melody.md b/docs/community/melody.md new file mode 100644 index 0000000..69036dc --- /dev/null +++ b/docs/community/melody.md @@ -0,0 +1,58 @@ +# Melody Iuvo + +You may see Melody in our Discord, or responding to issues on GitHub. Melody is a bot, and she serves as our community assistant. + +## GitHub + +On GitHub, Melody handles the automatic invitation flow for new organisation members. + +She also welcomes new contributors, and thanks contributors when a PR is merged. + +## Discord + +Melody is much more full featured on Discord. She has a number of commands that you can use to interact with the community. + +### Assets + +All of Naomi's assets can be accessed through Melody. These assets are provided as reference (for things like fan art or commissions). + +> [!WARNING] +> Assets may not be repurposed or redistributed without prior permission from Naomi. + +These commands are under `/assets`. + +### Currency System + +Melody manages our community's currency system. This system grants you NaomiCoin for sending messages and interacting with your fellow members. You can use these NaomiCoin to purchase special items, such as a custom colour role or the ability to set Naomi's avatar. You can also gamble for more coin through the slots! + +These commands are under `/currency`. + +### Frequently Asked Questions + +For help with navigating our community, we created a FAQ system with common questions we see. Questions are mainly examples of "Where do I do X?" or "How do I do Y?". + +Questions may be added and edited through [GitHub](https://github.com/naomis-novas/melody-iuvo/blob/main/src/config/Faq.ts). + +These commands are under `/faq`. + +### Fun Commands + +There are a couple of commands related to Naomi, which are added just for fun. You can ask Naomi anonymous questions, or generate a quote image with her avatar. + +These commands are under `/naomi`. + +There is also a `/tarot` command, which allows you to get a daily tarot card reading, and a `/yokai` command, which allows you to get information about a random yokai. + +### Plural Systems + +Melody allows you to proxy your messages much like PluralKit or Tupperbox. You can set up identities for your alters, configure a prefix, and choose an avatar. You can also set up auto-proxying. + +These commands are under `/plural`. + +### Streams + +Naomi streams on [Twitch](https://twitch.tv/naomilgbt), and Melody has a couple of commands to support this. The `/game` command allows you to fetch a random game from Naomi's library, and the `/queue` command allows you to see Naomi's planned list of games to play on stream. + +### Ticket System + +Melody also handles the private support ticket system. If you need to create a private discussion with our team, use the Open a Ticket button found in the `#our-work` channel. diff --git a/docs/contact.md b/docs/contact.md new file mode 100644 index 0000000..f233345 --- /dev/null +++ b/docs/contact.md @@ -0,0 +1,53 @@ +# Contact Us + +> [!WARNING] +> We offer FREE support and communication through a number of PUBLIC channels. If you require private support, we reserve the right to invoice you for that service. +> +> Private support will be billed based on anticipated workload for your query. Queries will not be responded to until invoice is paid. + +This page lists out the various platforms where you can request support with our projects, express interest in contributing, ask for mentorship, or just chat with us. + +> [!NOTE] +> You can see all of our [verified accounts](https://cdn.nhcarrigan.com/socials.txt), as well as [download the GPG key](https://cdn.nhcarrigan.com/key.pgp) used to maintain integrity of that list. +> +> After downloading both, you can run `gpg -f /path/to/key --verify /path/to/socials` to validate that the document has not been tampered with. + +## Professional + +The following platforms are made available to you for the express purpose of getting support with our projects, commissioning us to do work for you, or requesting mentorship. + +### Discord + +Our personal Discord is the best place to get to know us. You may join through this link: https://chat.naomi.lgbt + +Do note that there is an application process you must complete to get access to this platform. + +### IRC + +If you're old school, we do have the `#nhcarrigan` channel available on [LiberaChat](https://libera.chat/guides/connect). + +### GitHub Discussions + +We offer a discussion board directly on our GitHub organisation for those who prefer to keep communication as close to the projects as possible. https://github.com/orgs/nhcarrigan/discussions + +### Reddit + +GitHub not fitting your vibes? We have a subreddit as well, if you'd like to ask your questions there! https://www.reddit.com/r/nhcarrigan/ + +### Meeting + +You can also schedule a (PAID) meeting with us one-on-one through our payment platform: https://topmate.io/nhcarrigan + +## Personal + +These spaces are areas where you can engage with us in personal and casual conversation. + +### Discord + +Our personal Discord is the best place to get to know us. You may join through this link: https://chat.naomi.lgbt + +Do note that there is an application process you must complete to get access to this platform. + +### Twitter + +Tag us on Twitter! We can be reached at https://twitter.com/naomi_lgbt diff --git a/docs/contributing.md b/docs/contributing.md new file mode 100644 index 0000000..603a6f0 --- /dev/null +++ b/docs/contributing.md @@ -0,0 +1,136 @@ +# Contributing + +> [!TIP] +> This document provides a high-level overview of contributing to our projects. Check with each project's documentation for more specific or supplemental instructions, if needed. + +Please ensure all pull requests and contributions comply with the [Developer Certificate of Origin](https://developercertificate.org/). + +> [!NOTE] +> All contributions to our projects will be licensed under our [global license](/license.md) + +## Setting Up Your Code + +First, fork the repository to your own account. Then use `git clone ` to bring your forked repository down to your local machine (remember to get the URL for _your_ repository, not the original). Optionally, use `git remote add upstream ` to add the original repository as the upstream (this is helpful for keeping your fork up-to-date). + +## Claiming an Issue + +All of our issues are open to contributors! If you see an open issue you would like to work on, please comment on the issue so we may assign it to you. + +> [!NOTE] +> Assigned issues that have not had any activity in a week will be unassigned. + +If an issue is already assigned, that means someone has expressed interest in working on it. We encourage you to reach out to them and collaborate on a PR together! + +We use special labels to help categorise issues. Feel free to [browse our breakdown of the labels](/labels.md). + +## Working on your issue + +Before starting work, we highly recommend ensuring that your forked version is up to date. If you set the `upstream` as mentioned in [Setting Up Your Code](#setting-up-your-code), run these commands in your terminal (with the terminal pointed at the root directory of your local files): + +- `git fetch upstream` - this gets the current state of the original repo, without pulling down the changes to your local machine. +- `git reset --hard upstream/main` - this resets the state of your local files to match the current state of the original repo. +- `git push -f` - this forces the changes to your forked repo (thus making it match the original) + +> [!NOTE] +> You will lose any changes you are currently working on. Do this with care. + +Next, use `git checkout -b ` to create a new branch for your work. It's always a good idea to avoid committing changes directly to your `main` branch - this keeps it clean and avoids errors when updating (above). + +Branch names should follow a convention of `scope/description` where: + +- `scope` is the nature of the changes (eg. `feat` for a new feature, or `docs` for documentation update). This should match the scope of the related issue. +- `description` is a brief description of your changes, such as `update-contribs` for updating the contributing guidelines. + +Now you are free to work on your code! When you are satisfied with your changes, you can commit them with `git commit -s -m "message"`, where: + +- `-s` flag signs the commit, to verify the connection with your GitHub account. +- `-m` flag sets up the commit message. +- `message` is the commit message: a brief (50 character max) message describing what the commit changes. + +> [!TIP] +> If you aren't sure which package manager to use, you can reach out to us in our [chat server](https://chat.nhcarrigan.com). + +### Installing Packages + +Use `pnpm install` to install all current packages. + +### Adding Packages + +`pnpm install` will allow you to add a new package. + +When adding a new package, you should use the `--save-exact` flag to pin the package version. The CI will check for unpinned versions when you open a PR. + +If the package is only for development (working on the project), and not needed for production (running the project), you should _also_ use the `--save-dev` flag to add the package to the `devDependencies` section of the `package.json` file. + +For example: + +```bash +pnpm i --save-dev --save-exact @types/naomi # Adds a dev dependency +pnpm i --save-exact naomi # Adds a production dependency +``` + +### Oops! I used `npm` when I should have used `pnpm` + +No worries! A quick note that if you ran `npm install` or `npm ci`, then `pnpm` will ignore the installed packages. You will need to run the following commands to get back in sync: + +```bash +rm -rf package-lock.json node_modules +pnpm install +``` + +## Testing Changes + +> [!NOTE] +> Make sure to follow the steps above to check which package manager the project uses, and use the appropriate commands. + +Many of our projects will have continuous integration (CI) checks that run on a pull request. To ensure your changes will pass, you can often test these locally. + +If the project has a `package.json` file, check for the following entries in the `scripts` property: + +- `build` - Running `pnpm run build` will confirm that a project successfully compiles. This is common in our TypeScript projects. +- `lint` - Running `pnpm run lint` will ensure that the code style is correct. +- `start` - Running `pnpm start` will confirm that the project boots up successfully. +- `test` - Running `pnpm test` will ensure that the unit and functional tests all pass. + +You can also check the `.github/workflows` directory for `.yml` files. These files will describe the actual CI checks that run on your pull request. + +Ensuring these checks pass **before** submitting a pull request will streamline our review process. + +## Submitting a Pull Request + +Once you have all of your changes made and committed, you can push them to your forked repository! Use `git push -u origin `, where: + +- `-u` tells `git` to set the upstream (see below) +- `origin` tells `git` to push to your fork +- `branchname` tells `git` to push to a branch - this MUST match the name of the branch you created locally. + +> [!NOTE] +> By setting the upstream, any subsequent `push` commands can be done with `git push`, and it will be pushed to the same branch. + +Now you can open the pull request! You should see a quick option to do so appear at the top of your repository on GitHub. Click the "Pull Request" button to have GitHub automatically set up the pull request. + +First, change the title of the pull request to match your branch name (following the conventions above!). Then, follow the instructions in the preset Pull Request template (make sure to complete any steps listed!). + +Congratulations! You've submitted your first pull request! We will review it as quickly as possible, so keep an eye out for approvals (or requested changes). + +## Pull Request Reviews + +All pull requests require a review before being merged. Most reviews will come from Naomi, but some projects may have additional staff who can submit reviews. + +If your pull request is approved, it will be merged and deployed depending on the project's deployment schedule and pipeline. + +If your pull request requires additional changes or information, we ask that you apply the changes promptly. Contributions with outstanding change requests that receive no activity within a week will be closed as stale. + +## Other Contributions + +If you aren't comfortable with the codebase, or would like to contribute in other ways, we have options for that! + +- Documentation Updates: You are always welcome to update our documentation (like this file!) if you see any typos or anything that can be clarified. +- Feature Requests: If you have ideas for new features or improvements, feel free to open an issue! +- Bug Reports: We rely on our users to help identify bugs - if you see something wrong, please let us know with an issue! + +## Holopin Badges + +![Virtual badges featuring Naomi, Becca, and Rosalia](https://cdn.nhcarrigan.com/projects/holopin.png) + +Contributors are eligible to receive digital [Holopin](https://www.holopin.io/@naomis-novas) badges for their contributions to our projects. To claim your badge, fill out the template in our [Discord community](https://chat.nhcarrigan.com)! diff --git a/docs/donate.md b/docs/donate.md new file mode 100644 index 0000000..f0c0eb0 --- /dev/null +++ b/docs/donate.md @@ -0,0 +1,7 @@ +# Support Our Work + +We offer quite a few free-to-use projects, and guidance when we're available in various programming communities. + +If you find our work valuable, please consider making a monthly donation on one of our platforms so we can continue to do what we do. + +| [Discord](https://chat.naomi.lgbt) | [Ko-Fi](https://ko-fi.com/nhcarrigan) | [Patreon](https://www.patreon.com/nhcarrigan) | [GitHub Sponsors](https://github.com/sponsors/naomi-lgbt) | diff --git a/docs/hire.md b/docs/hire.md new file mode 100644 index 0000000..0b263fd --- /dev/null +++ b/docs/hire.md @@ -0,0 +1,11 @@ +# Hire Us + +Do you need someone to build a Discord bot for you? Or a website? How about managing your online community? + +We'd love to meet you and explore opportunities to work together to achieve your goals. + +If you have a quick product idea you've already specced out, or just need some eyes on your community plan, we offer some [basic gigs on Fiverr](https://www.fiverr.com/nhcarrigan). + +For something more long-term, complex, or in-depth, we encourage you to [book a 30-minute consultation](https://topmate.io/nhcarrigan/913920). + +Or, if you want private 1-on-1 mentoring, we offer a full [mentorship package](https://topmate.io/nhcarrigan/913932) diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..77e8c02 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,113 @@ + + + + + + + + + Naomi's Documentation + + +
+

Naomi's Documentation

+

Documentation for my various smaller projects.

+
+ + + + + + + + + + + + + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..d8e3cd4 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,3 @@ +# Naomi's Documentation + +Welcome! This site serves as documentation for my smaller projects. You can use the sidebar to navigate to the specific project you are interested in. diff --git a/docs/license.md b/docs/license.md new file mode 100644 index 0000000..98fdc3a --- /dev/null +++ b/docs/license.md @@ -0,0 +1,201 @@ +# Naomi's Public License + +All of Our Open Source Software are licensed under these terms. + +## 1. Definitions + +### 1.1. `Software` + +- The code, documentation text, and other related materials licensed under this License. + +### 1.2. `Assets` + +- The non-Software copyrighted materials, such as images, logos, and names. + +### 1.3. `Package` + +- Software specifically bundled to be used in other Works. + +### 1.4. `We`, `Us`, and `Our` + +- Naomi Carrigan, and her software consulting firm NHCarrigan. + +### 1.5. `You` and `Your` + +- The individual or entity exercising the rights granted under this License. + +### 1.5. `Contributor(s)` + +- An individual or entity who contributes to the Software. + +### 1.6. `Contribution(s)` + +- Any work submitted by a Contributor to the Software, such as Source Code or Assets. + +### 1.7. `Source Code` + +- The code in its original form, as written by the author(s). + +### 1.8. `Open Source` + +- Software where the Source Code has been made publicly available under this License. + +### 1.9. `License` + +- This document. + +### 1.10. `Works` + +- Any works derived from the Software, such as modifications, distributions, and incorporations. + +## 2. Use of Software + +This license grants You the right to use Our Open Source software under the following terms. + +### 2.1. Do No Harm + +You may not use Our Software in any way that may cause harm to Us, Our Software, or Our Assets. Additionally, You may not use Our Software in any way that may cause harm to other individuals or entities. + +### 2.2. Code of Conduct + +Use of Our Software must not be in violation of Our [Code of Conduct](https://docs.nhcarrigan.com/#/coc). + +### 2.3. Source Control + +Custom instances of Our Software must remain Open Source under this License. + +## 3. Modification of Software + +Modifications of Our Software are permitted under the following terms. + +### 3.1. Licensing + +All modifications of Our Software must be licensed under this License. + +### 3.2. Attribution + +All modifications of Our Software must be attributed to the original author(s) of the Software. + +## 4. Incorporation of Software + +Elements of Our Software, such as code snippets, may be incorporated into other Works under the following terms. + +### 4.1. Licensing + +The specific elements of Our Software used in another Work must be made available under this License. The portions of the project that are not incorporated from Our Software may be licensed under any terms. + +### 4.2. Attribution + +The specific elements of Our Software used in another must be attributed to the original author(s) of the Software. + +## 5. Use of Packages + +Certain Software may be packaged and distributed specifically for use in other Works. Software that We distribute in such a manner may be used in other Works under the following terms. + +### 5.1. Source Code + +Works that solely use Our Packages, and do not incorporate any other elements of Our Software, are not required to provide a link to the Source Code of Our Software. + +### 5.2. Attribution + +Works that solely use Our Packages, and do not incorporate any other elements of Our Software, are not required to provide copyright acknowledgement or attribution. + +### 5.3. Behaviour + +Works that solely use Our Packages, and do not incorporate any other elements of Our Software, are still required to follow our [Code of Conduct](https://docs.nhcarrigan.com/#/coc). + +## 6. Distribution + +Our Software, as well as any Works derived from Our Software, may be distributed under the following terms. + +### 6.1. Source Code + +Any Works that are publicly hosted must link to: + +- The Source Code for the Work, if the Work falls under Section 2. +- The Source Code for incorporations of or modifications to Our Software, if the Work falls under Sections 3 or 4. + +### 6.2. Attribution + +Any Works that are publicly hosted must provide copyright acknowledgement: + +- Complete copyright acknowledgement to Naomi Carrigan, if the Work falls under Section 2. +- Partial copyright acknowledgement to Naomi Carrigan, if the Work falls under Sections 3 or 4. + +## 7. Assets + +Any non-Software Asset, unless specifically provided with the Source Code of Our Software, may not be used in any Modifications, Incorporations, or Distributions of Our Software. + +Assets specifically belong to Us, and the License does not grant any rights to reuse, modification, or distribution of Assets. + +Prior versions of Our Software may have included Assets which were removed in a later version. The removal of an Asset from Our Source Code constitutes a revocation of the rights to use said Asset. + +## 8. Contributions + +By making contributions to the software, whether in the form of code, documentation, or any other material, You agree to the following: + +### 8.1 Grant of Copyright + +You hereby grant Us and Our successors a perpetual, worldwide, non-exclusive, royalty-free, irrevocable license to use, reproduce, modify, distribute, sublicense, and otherwise exploit Your Contributions, including any intellectual property rights therein, in any manner and for any purpose, without any obligation to provide attribution or compensation. + +You retain all copyright over Your individual Contributions, and may use Your Contributions in Works outside of this License. Contributing to Our Software does not grant any copyright over the Software, with or without your Contributions. + +### 8.2 Licensing of Contributions + +All contributions You make to the Software will be licensed under the same terms and conditions as the original Software, subject to the terms of this License. You understand and acknowledge that Your Contributions will become an integral part of the software and will be subject to the same rights and obligations as the original codebase. + +### 8.3 Representation + +You represent and warrant that You have the necessary rights to grant the above License and that Your Contributions do not infringe upon the intellectual property rights or other legal rights of any third party. + +## 9. Warranty + +The software provided under this license is provided "as is," without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and non-infringement. The entire risk as to the quality and performance of the software is with You. Should the software prove defective, You assume the cost of all necessary servicing, repair, or correction. + +## 10. Limitation of Liability + +In no event unless required by applicable law or agreed to in writing will We or Our Contributors be liable to You for damages, including any general, special, incidental, or consequential damages arising out of the use or inability to use the software (including but not limited to loss of data or data being rendered inaccurate or losses sustained by You or third parties), even if We or Our Contributors have been advised of the possibility of such damages. + +Absolutely no liability will be held for Modifications or Incorporations of the Software. You are solely responsible for any damages caused by Your Modifications or Incorporations. + +## 11. Your Responsibility + +You acknowledge and agree that Your use of the software is at Your sole risk and discretion, and You are solely responsible for any loss or damage to Your computer system or other device, or loss of data that results from such use. You are also responsible for ensuring that Your use of the software complies with all applicable laws and regulations. + +## 12. Enforcement + +Enforcement of this License will be done at Our discretion. A decision not to enforce a License violation will not preclude Us from enforcing that violation or any other violation of this License in the future. + +## 13. Termination + +This License is effective until terminated. We may, at Our sole discretion, terminate this License at any time, with or without cause, and with or without notice. Upon termination, You shall cease all use of the software and destroy all copies, full or partial, of the software in Your possession. + +Termination of this License shall not relieve You of any obligations or liabilities accrued prior to the termination date, including but not limited to any indemnification obligations and limitations of liability outlined in this License. + +Breach of any terms or conditions of this License shall result in the immediate termination of this License. + +## 14. License Versions + +Versioning of this license is managed through GitHub. You may view the version history [in these commits](https://github.com/nhcarrigan/general-documentation/commits/main/docs/license.md). + +### 14.1 Future License Changes + +We reserve the right to modify the terms of this License, including its licensing of Contributions, at its sole discretion. In the event that such changes are made, We will make reasonable efforts to notify You through Our [chat channels](https://chat.nhcarrigan.com). + +### 14.2 Version Perpetuation + +All Works derived from this Software must be licensed under the latest version of this License. This includes Works that are modifications or incorporations of the Software. + +Changes to this License retroactively apply to all Works derived from this Software, even those created before the date of the changes. + +### 14.3 Last Updated + +The terms of this License were last modified on 20 August 2023. + +## 15. Contact + +If you have questions about this License, We may be reached in Our [chat server](https://chat.nhcarrigan.com). + +### 15.1. Suggestions + +This License is a living document. We are happy to hear suggestions about the terms of this License. Please reach out to Us in Our chat server. diff --git a/docs/privacy.md b/docs/privacy.md new file mode 100644 index 0000000..ecd0f41 --- /dev/null +++ b/docs/privacy.md @@ -0,0 +1,47 @@ +# Privacy Policy + +> [!TIP] +> This privacy policy covers general data use and collection. Projects may have their own, more specific privacy policy, which applies **in addition** to this policy. Changes to this policy, as well as aforementioned project level policies, are retroactive. Use of our applications constitutes an acceptance of the most recent, current version of any applicable policies. + +> [!DANGER] +> In the spirit of open source, errors are logged publicly in our Discord community. These logs may include information relevant to the error in question. +> +> We encourage you to [join our Discord](https://chat.nhcarrigan.com) to see what is logged PRIOR to using our applications. + +The use of our applications may require collection of specific data. + +## Data Collection + +While we do our best to keep documentation up to date, it is entirely possible that an application collects data which are not documented. These terms provide general guidance on how to request or remove your data, or opt out of data collection. + +### Data Collected + +At any time, you may request a confirmation of the type and nature of data a specific application collects through our [support server](https://chat.nhcarrigan.com). + +### Right to Request Data + +At any time, you may request a complete copy of your data stored by one of our applications. Requests must be done via our [support server](https://chat.nhcarrigan.com) from the Discord account the data belongs to. This ensures that a user cannot impersonate you and request your data. We may request additional identifying information, depending on the structure of the data collected by the application. + +### Right to Removal + +At any time, you may request complete removal of your stored data. Requests must be done via our [support server](https://chat.nhcarrigan.com) from the Discord account the data belongs to. This ensures that a user cannot impersonate you and request your data. We may request additional identifying information, depending on the structure of the data collected by the application. + +This will **not** opt you out of future data collection unless specifically requested. We reserve the right to refuse removal requests when the data are necessary for specific functionality of the app, in circumstances where removing your data would compromise the functionality for all users. + +### Right to Opt Out + +At any time, you may request to opt out of data collection for an application by requesting removal of your data and discontinuing interaction with the application. We may request additional identifying information, depending on the structure of the data collected by the application. + +We reserve the right to refuse opt-out requests when the data are necessary for specific functionality of the app, in circumstances where opting-out would compromise the functionality for all users. + +### Data Retention + +Data are stored for the minimum necessary time to ensure the application is able to function. + +### Availability of Data + +Data are available to members of the development team, for the express purpose of debugging, improving, and contributing to the application. + +## Contact + +If you have questions about the privacy policy or how we use the data we collect, please reach out in our [support server](https://chat.nhcarrigan.com) or email `privacy@nhcarrigan.com`. diff --git a/docs/projects/art-for-palestine-bot/index.md b/docs/projects/art-for-palestine-bot/index.md new file mode 100644 index 0000000..91ead8c --- /dev/null +++ b/docs/projects/art-for-palestine-bot/index.md @@ -0,0 +1,5 @@ +# Art for Palestine Bot + +This is a bot that was specifically written for the Art for Palestine charity event. + +[View the Code](https://github.com/nhcarrigan/art-for-palestine-bot) | [View the Live App](https://discord.gg/kHNyb6Vyf8) diff --git a/docs/projects/art-for-palestine-bot/privacy.md b/docs/projects/art-for-palestine-bot/privacy.md new file mode 100644 index 0000000..cd47491 --- /dev/null +++ b/docs/projects/art-for-palestine-bot/privacy.md @@ -0,0 +1,39 @@ +# Privacy Policy + +> [!DANGER] +> In the spirit of open source, errors are logged publicly in our Discord community. These logs may include information relevant to the error in question. +> +> We encourage you to [join our Discord](https://chat.nhcarrigan.com) to see what is logged PRIOR to using our applications. + +The use of this application is subject to this Privacy Policy. By using this application, you agree to the collection and use of your personal data in accordance with this Privacy Policy. + +## Data Collected + +In order to operate, the application collects and stores the following data: + +- Discord user ID: The application stores your discord user ID to track art rewards you have claimed as an artist. +- Discord message ID: The application stores the message ID for art rewards which are claimed. + +## Right to Request Data + +At any time, you may request a complete copy of your data stored by the application. Requests must be done via our [support server](https://chat.nhcarrigan.com) from the Discord account the data belongs to. This ensures that a user cannot impersonate you and request your data. + +## Right to Removal + +At any time, you may request complete removal of your stored data. Requests must be done via our [support server](https://chat.nhcarrigan.com) from the Discord account the data belongs to. This ensures that a user cannot impersonate you and request your data. This will **not** opt you out of future data collection unless specifically requested. + +## Right to Opt Out + +At any time, you may request to opt out of data collection for this application. Requests must be done via our [support server](https://chat.nhcarrigan.com) from the Discord account the data belongs to. This ensures that a user cannot impersonate you and request your data. Note that opting out of data collection may prevent you from interacting with the application. + +## Data Retention + +Data are stored for the minimum necessary time to ensure the application is able to function. + +## Availability of Data + +Data are available to members of the development team, for the express purpose of debugging, improving, and contributing to the application. + +## Questions + +Questions and concerns regarding this privacy policy may be directed to `privacy@nhcarrigan.com`. diff --git a/docs/projects/art-for-palestine-bot/self-hosting.md b/docs/projects/art-for-palestine-bot/self-hosting.md new file mode 100644 index 0000000..7510888 --- /dev/null +++ b/docs/projects/art-for-palestine-bot/self-hosting.md @@ -0,0 +1,3 @@ +# Self Hosting + +Instructions coming soon! diff --git a/docs/projects/azuliah-bot/index.md b/docs/projects/azuliah-bot/index.md new file mode 100644 index 0000000..60ad2b4 --- /dev/null +++ b/docs/projects/azuliah-bot/index.md @@ -0,0 +1,5 @@ +# Azuliah Bot + +This is a bot that was specifically written for my VTuber sister Azuliah. + +[View the Code](https://github.com/nhcarrigan/azuliah-bot) | [View the Live App](https://discord.gg/XNSy8PMvyy) diff --git a/docs/projects/azuliah-bot/privacy.md b/docs/projects/azuliah-bot/privacy.md new file mode 100644 index 0000000..68effd6 --- /dev/null +++ b/docs/projects/azuliah-bot/privacy.md @@ -0,0 +1,10 @@ +# Privacy + +> [!DANGER] +> In the spirit of open source, errors are logged publicly in our Discord community. These logs may include information relevant to the error in question. +> +> We encourage you to [join our Discord](https://chat.nhcarrigan.com) to see what is logged PRIOR to using our applications. + +This application does not collect any data, and does not have an applicable privacy policy. + +Use of the application is subject to [Discord's Privacy Policy](https://discord.com/privacy) diff --git a/docs/projects/azuliah-bot/self-hosting.md b/docs/projects/azuliah-bot/self-hosting.md new file mode 100644 index 0000000..7510888 --- /dev/null +++ b/docs/projects/azuliah-bot/self-hosting.md @@ -0,0 +1,3 @@ +# Self Hosting + +Instructions coming soon! diff --git a/docs/projects/deepgram/index.md b/docs/projects/deepgram/index.md new file mode 100644 index 0000000..051e9b4 --- /dev/null +++ b/docs/projects/deepgram/index.md @@ -0,0 +1,5 @@ +# Deepgram Discord Bot + +This is a bot that was specifically written to help facilitate the help-post flow in the DeepGram Discord. + +[View the Code](https://github.com/nhcarrigan/azuliah-bot) | [View the Live App](https://dpgr.am/discord) diff --git a/docs/projects/deepgram/privacy.md b/docs/projects/deepgram/privacy.md new file mode 100644 index 0000000..68effd6 --- /dev/null +++ b/docs/projects/deepgram/privacy.md @@ -0,0 +1,10 @@ +# Privacy + +> [!DANGER] +> In the spirit of open source, errors are logged publicly in our Discord community. These logs may include information relevant to the error in question. +> +> We encourage you to [join our Discord](https://chat.nhcarrigan.com) to see what is logged PRIOR to using our applications. + +This application does not collect any data, and does not have an applicable privacy policy. + +Use of the application is subject to [Discord's Privacy Policy](https://discord.com/privacy) diff --git a/docs/projects/deepgram/self-hosting.md b/docs/projects/deepgram/self-hosting.md new file mode 100644 index 0000000..14ca03e --- /dev/null +++ b/docs/projects/deepgram/self-hosting.md @@ -0,0 +1,131 @@ +# Self-Hosting + +This guide is for setting up and managing your own instance of the bot. + +## Prerequisites + +- Node.js 20 +- `pnpm` version 8 (check the `package.json` file for the specific version required) +- A Discord bot configured in the [Discord Developer Portal](https://discord.com/developers/applications) + +> [!TIP] +> This code is intended to run in a single server. You should disable the `Public Bot` option in your application's bot settings. + +## Bot Permissions + +> [!NOTE] +> The bot requires the `Message Content` intent - ensure that is enabled in your application's bot settings. + +The bot requires the following permissions: + +- Manage Messages +- Create Public Threads + +Be sure to invite it to your server with both the `bot` and `application.commands` scopes. + +## Installation + +First, clone the repository to the location you want to host the bot (e.g. a VPS). + +```bash +git clone git@github.com:nhcarrigan/deepgram-bot.git +``` + +Next, change to the project directory and install the dependencies. + +```bash +cd deepgram-bot +pnpm install +``` + +## Environment Variables + +You will need to configure a few environment variables. The repository includes a template to start from: + +```bash +cp sample.env .env +``` + +> [!WARNING] +> Do not add your secrets to the `sample.env` file - this file is version controlled and you may inadvertently leak the contents. + +Fill in the environment variables with the following values: + +- `TOKEN`: This is the bot token obtained from the Discord Developer portal. +- `HOME_GUILD_ID`: This is the ID for the Discord server you want the bot to run in. [Don't know how to get that?](https://dis.gd/findid) +- `DEBUG_HOOK`: This is a URL to a Discord webhook where error messages will be sent. You can create a webhook in the channel settings, under `Integrations`. +- `HELPER_ROLE_IDS`: This is a list of role IDs that you want to be identified as server helpers (people with permission to use all of the bot's features). This should be a comma-separated list (NO SPACES). For example: `HELPER_ROLE_IDS="875177422654406707,935355569278181396"` +- `HELP_CHANNEL_ID`: This is the ID for the channel that questions should be reposted in. This **must** be a forum channel, or the bot will error out on loading. +- `GENERAL_CHANNEL_ID`: This is the ID for your general chat channel. The sticky message will be posted here. Daily posts of 3 most recent unanswered questions will be posted here. +- `MOD_CHANNEL_ID`: This is the ID for your moderator chat channel. Weekly posts of **answered** threads, and daily posts of **all** unanswered threads, will be posted here. +- `STICKY_MESSAGE_FREQUENCY`: This is the number (in **minutes**) between sticky message updates. The bot will wait this long before sending the sticky message again. +- `AI_URL`: This is the base URL for API requests to your AI service. This should not include any paths. For example: `https://docs.nhcarrigan.com`. +- `GITHUB_TOKEN`: This is the PAT for the account you would like to create discussions. +- `GITHUB_OWNER`: This is the user/organisation that owns the repository you would like to create discussions on. +- `GITHUB_REPO`: This is the repository you would like to create discussions on. +- `PRODUCT_BOARD_API_KEY`: This is the API token for the ProductBoard.com account you would like to create notes with. + +> [!TIP] +> The following keys are entirely optional. +> `AI_URL`: Without this, the `move to help channel` context command will not generate AI responses. Will still complete all other functions. +> `GITHUB_*`: If ANY of the GitHub values are missing, the `Mark as answered` command will not generate a GitHub discussion. Will still complete all other functions. +> `PRODUCT_BOARD_API_KEY`: Without this, the `Send to Product Board` context command will not function. + +## Help Channel + +The help channel **must** be a forum channel. In order for the bot to function, it also needs to have the following **case-sensitive** tags: + +- `Question` +- `Answered` +- `Inactive` + +> ![DANGER] +> These tags MUST be marked as "Only allow moderators to apply tag", or the bot will not be able to find them. + +## Configuration + +Most of the bot's responses can be edited directly in the `src/config/Responses.ts` file. This design decision aims to make it easier for you to customise the bot to your server's needs. + +The endpoints used for the AI service can be set in the `src/config/AiEndpoints.ts` file. + +## Build the Code + +> [!WARNING] +> You will need to build the code every time it is updated. Updates happen when: +> +> - You change the responses mentioned above +> - You pull changes from the repository with `git pull` +> +> Updates do NOT happen when you change the environment variables. You will only need to restart, not rebuild. + +Because the project uses TypeScript, you need to compile it to JavaScript. + +```bash +pnpm run build +``` + +## Run the Bot + +You can run the bot directly from the command line: + +```bash +pnpm start +``` + +However, we **strongly** recommend using `pm2` to manage the process in the background. You can install `pm2` with: + +```bash +pnpm install -g pm2 +``` + +Then, you can start the background process with: + +```bash +pm2 start "pnpm start" +``` + +You can optionally name the process: + +```bash +pm2 start "pnpm start" --name "deepgram" +``` diff --git a/docs/projects/deepgram/usage.md b/docs/projects/deepgram/usage.md new file mode 100644 index 0000000..bd86fa0 --- /dev/null +++ b/docs/projects/deepgram/usage.md @@ -0,0 +1,69 @@ +# Usage + +The bulk of the bot usage will be done by "helpers" - people identified by roles that are configured by the bot owner. + +## Move a Post + +> [!NOTE] +> Only helpers can use this command. + +If a message is asking for help, and isn't in your help forum channel, you can use the `help` context command to move it. Right click on the message (or long-press on mobile), select "Apps", and select "Move to help channel". + +After running this command, the bot will create a new thread in the configured forum channel. The bot will ping the author of the message, so they know where their question has gone. Then, if the AI system is configured, the bot will request an AI response to the question and post it in the thread. + +## AI Feedback + +The AI response will include two buttons. The first marks the response as helpful. The second marks the response as unhelpful. + +### When a Post is Helpful + +> [!NOTE] +> Only helpers or the original question author can use this button. + +If you found the AI response to your question to be helpful, click the "This was helpful" button. This will send a response to the AI to train it that this response was helpful. The bot will then remove the buttons to avoid spam. + +### When a Post is Inaccurate + +> [!NOTE] +> Only helpers can use this button. + +Sometimes AI gets things wrong. If the AI response to a question is inaccurate, click the "This is inaccurate" button. This will send a response to the AI to train it that the response was off the mark. The bot will then remove the buttons to avoid spam. + +## Mark a Post as Answered + +> [!NOTE] +> Only helpers can use this command. + +When someone's help post has been answered, you may identify the message that contains the solution. Right click on the message, select "Apps", then select "Accept Answer". + +When an answer is accepted, the bot will do two things: + +- Label the thread as answered +- Create a GitHub discussion with the question, and post a comment with the answer. + +## Product Board integration + +> [!NOTE] +> Only helpers can use this command. + +If a message sent in the server seems like decent feedback that you would like to track internally, you can post it to a ProductBoard.com app. + +Right click on the message, select "Apps", and select "Send to Product Board". The bot will create a note on the board, with the Discord user's name in the title, and the message content in the body. The note will also link back to the original Discord message. + +## Stats Command + +> [!NOTE] +> Only helpers and administrators can use this command. + +The `/stats` chat command will generate a list of the following stats: + +- How many threads TOTAL have been answered +- How many threads TOTAL have gone unanswered +- How many threads TOTAL have been flagged as inactive +- How many threads are currently open +- How many threads are currently closed +- How many threads were created with the `Move to help channel` command +- Average time for a thread to be flagged as answered (this is coming soon!) +- The total number of threads + +The response to this command is **ephemeral**, so you are free to run it in any channel. The only person who will see the response is you. diff --git a/docs/projects/discord-birthday-bot/index.md b/docs/projects/discord-birthday-bot/index.md new file mode 100644 index 0000000..f596fdb --- /dev/null +++ b/docs/projects/discord-birthday-bot/index.md @@ -0,0 +1,5 @@ +# Discord Birthday Bot + +This is a bot created for the Caylus Crew Discord community, to track member birthdays and make a daily post. + +[View the Code](https://github.com/nhcarrigan/ooigleBirthdayBot) | [View the Live App](https://discord.gg/fcDTTyMPtv) diff --git a/docs/projects/discord-birthday-bot/privacy.md b/docs/projects/discord-birthday-bot/privacy.md new file mode 100644 index 0000000..9d56ec9 --- /dev/null +++ b/docs/projects/discord-birthday-bot/privacy.md @@ -0,0 +1,39 @@ +# Privacy Policy + +> [!DANGER] +> In the spirit of open source, errors are logged publicly in our Discord community. These logs may include information relevant to the error in question. +> +> We encourage you to [join our Discord](https://chat.nhcarrigan.com) to see what is logged PRIOR to using our applications. + +The use of this application is subject to this Privacy Policy. By using this application, you agree to the collection and use of your personal data in accordance with this Privacy Policy. + +## Data Collected + +In order to operate, the application collects and stores the following data: + +- Discord user ID: The application stores your discord user ID to associate your database record with your Discord account. +- Birthday: The application stores the birthday you provide to know when to post the daily message. + +## Right to Request Data + +At any time, you may request a complete copy of your data stored by the application. Requests must be done via our [support server](https://chat.nhcarrigan.com) from the Discord account the data belongs to. This ensures that a user cannot impersonate you and request your data. + +## Right to Removal + +At any time, you may request complete removal of your stored data. Requests must be done via our [support server](https://chat.nhcarrigan.com) from the Discord account the data belongs to. This ensures that a user cannot impersonate you and request your data. This will **not** opt you out of future data collection unless specifically requested. + +## Right to Opt Out + +At any time, you may request to opt out of data collection for this application by requesting removal of your data and discontinuing interaction with the application. + +## Data Retention + +Data are stored for the minimum necessary time to ensure the application is able to function. + +## Availability of Data + +Data are available to members of the development team, for the express purpose of debugging, improving, and contributing to the application. + +## Questions + +Questions and concerns regarding this privacy policy may be directed to `privacy@nhcarrigan.com`. diff --git a/docs/projects/discord-birthday-bot/self-hosting.md b/docs/projects/discord-birthday-bot/self-hosting.md new file mode 100644 index 0000000..7510888 --- /dev/null +++ b/docs/projects/discord-birthday-bot/self-hosting.md @@ -0,0 +1,3 @@ +# Self Hosting + +Instructions coming soon! diff --git a/docs/projects/discord-boost-monitor/index.md b/docs/projects/discord-boost-monitor/index.md new file mode 100644 index 0000000..4c87d6e --- /dev/null +++ b/docs/projects/discord-boost-monitor/index.md @@ -0,0 +1,5 @@ +# Discord Boost Monitor + +This is a bot that was specifically created for Caylus' Crew Discord server. The bot monitors for when a member loses the Server Booster role, and removes any special colour roles (associated with the Server Booster role) from them. + +[View the Code](https://github.com/nhcarrigan/discord-boost-monitor) | [View the Live App](https://discord.gg/fcDTTyMPtv) diff --git a/docs/projects/discord-boost-monitor/privacy.md b/docs/projects/discord-boost-monitor/privacy.md new file mode 100644 index 0000000..68effd6 --- /dev/null +++ b/docs/projects/discord-boost-monitor/privacy.md @@ -0,0 +1,10 @@ +# Privacy + +> [!DANGER] +> In the spirit of open source, errors are logged publicly in our Discord community. These logs may include information relevant to the error in question. +> +> We encourage you to [join our Discord](https://chat.nhcarrigan.com) to see what is logged PRIOR to using our applications. + +This application does not collect any data, and does not have an applicable privacy policy. + +Use of the application is subject to [Discord's Privacy Policy](https://discord.com/privacy) diff --git a/docs/projects/discord-boost-monitor/self-hosting.md b/docs/projects/discord-boost-monitor/self-hosting.md new file mode 100644 index 0000000..5ff5a6e --- /dev/null +++ b/docs/projects/discord-boost-monitor/self-hosting.md @@ -0,0 +1,25 @@ +# Self Hosting + +This application is designed to support a single Discord server. As such, there are some configurations you will need to adjust to make it work for your server. Assuming you have cloned the GitHub repository... + +## Environment Variables + +Copy the `sample.env` file to a file named `.env` and complete the following values: + +- `DISCORD_TOKEN` - The token for your Discord Bot Application. +- `SENTRY_DSN` - The DSN for your Sentry.io project. +- `DEBUG_HOOK` - The Discord Webhook URL for your debug channel. + +## Configuration + +Within the `/src/config/roles.ts` file, you'll need to edit the following values. + +The `boosterRole` value should be the **ID** of your server's `Server Booster` role. + +The `colourRoles` value is an array of Discord role IDs. These are the roles the bot should look for and remove when someone loses the `boosterRole` role. + +## Running the Application + +Use `npm ci` to install the necessary dependencies, `npm run build` to compile the TypeScript, and `npm start` to launch the application. + +Your bot will go online and be ready to monitor your Discord server. Note that you should only add your bot to a single server, or your IDs will not line up properly. diff --git a/docs/projects/discord-verification-bot/index.md b/docs/projects/discord-verification-bot/index.md new file mode 100644 index 0000000..5f59819 --- /dev/null +++ b/docs/projects/discord-verification-bot/index.md @@ -0,0 +1,7 @@ +# Discord Verification Bot + +This bot is designed as a basic verification gate for your Discord server. + + + +[View the Code](https://github.com/nhcarrigan/discord-verification-bot) | [Invite the Bot](https://discord.com/api/oauth2/authorize?client_id=880171019409694742&permissions=268454914&scope=bot%20applications.commands) diff --git a/docs/projects/discord-verification-bot/privacy.md b/docs/projects/discord-verification-bot/privacy.md new file mode 100644 index 0000000..091ce81 --- /dev/null +++ b/docs/projects/discord-verification-bot/privacy.md @@ -0,0 +1,39 @@ +# Privacy Policy + +> [!DANGER] +> In the spirit of open source, errors are logged publicly in our Discord community. These logs may include information relevant to the error in question. +> +> We encourage you to [join our Discord](https://chat.nhcarrigan.com) to see what is logged PRIOR to using our applications. + +The use of this application is subject to this Privacy Policy. By using this application, you agree to the collection and use of your personal data in accordance with this Privacy Policy. + +## Data Collected + +In order to operate, the application collects and stores the following data: + +- Discord server ID: The application stores the Discord server ID to associate database records with specific Discord servers. +- Verification Details: The application stores the configured verification question, answers, and role to assign. + +## Right to Request Data + +A server owner may request to view the data via our [support server](https://chat.nhcarrigan.com). + +## Right to Removal + +A server owner may request removal of data by kicking the bot from the server, or reaching out to our support team in [our support server](https://chat.nhcarrigan.com). + +## Right to OptOut + +As no user information is collected, individual users do not have an opt out process. Servers may opt out of data collection by removing the bot. + +## Data Retention + +Data are stored for the minimum necessary time to ensure the application is able to function. + +## Availability of Data + +Data are available to members of the development team, for the express purpose of debugging, improving, and contributing to the application. + +## Questions + +Questions and concerns regarding this privacy policy may be directed to `privacy@nhcarrigan.com`. diff --git a/docs/projects/discord-verification-bot/usage.md b/docs/projects/discord-verification-bot/usage.md new file mode 100644 index 0000000..3f95aa4 --- /dev/null +++ b/docs/projects/discord-verification-bot/usage.md @@ -0,0 +1,10 @@ +# Usage + +The bot is designed to work with the following flow: + +- New members who join your server can only see a "verification" channel (one that is not visible to anyone else). + - Within that channel, you should run the `/start` command to set up your verification question, answers, and the role to assign. The bot will create a post explaining the process to new members, with a button to click to verify themselves. +- Upon clicking the button, the member will be asked to answer the question. If they answer incorrectly, they are kicked. If they answer correctly, they are given the verification role. +- If they do not verify in 30 minutes, they are kicked. + +Ideally, you should configure the verification role such that members **with** that role cannot see the verification channel. diff --git a/docs/projects/security-bot/index.md b/docs/projects/security-bot/index.md new file mode 100644 index 0000000..ee48fb4 --- /dev/null +++ b/docs/projects/security-bot/index.md @@ -0,0 +1,5 @@ +# Security Bot + +This is a Discord bot that allows you to pause invites and DMs in your server. + +[View the Code](https://github.com/nhcarrigan/security-bot) | [Invite the Bot](https://discord.com/api/oauth2/authorize?client_id=1167689144705765486&permissions=32&scope=bot+applications.commands) diff --git a/docs/projects/security-bot/privacy.md b/docs/projects/security-bot/privacy.md new file mode 100644 index 0000000..68effd6 --- /dev/null +++ b/docs/projects/security-bot/privacy.md @@ -0,0 +1,10 @@ +# Privacy + +> [!DANGER] +> In the spirit of open source, errors are logged publicly in our Discord community. These logs may include information relevant to the error in question. +> +> We encourage you to [join our Discord](https://chat.nhcarrigan.com) to see what is logged PRIOR to using our applications. + +This application does not collect any data, and does not have an applicable privacy policy. + +Use of the application is subject to [Discord's Privacy Policy](https://discord.com/privacy) diff --git a/docs/projects/security-bot/usage.md b/docs/projects/security-bot/usage.md new file mode 100644 index 0000000..17f0c4a --- /dev/null +++ b/docs/projects/security-bot/usage.md @@ -0,0 +1,3 @@ +# Usage + +Instructions coming soon! diff --git a/docs/projects/we-love-hacktoberfest/contributing.md b/docs/projects/we-love-hacktoberfest/contributing.md new file mode 100644 index 0000000..a795b99 --- /dev/null +++ b/docs/projects/we-love-hacktoberfest/contributing.md @@ -0,0 +1,31 @@ +# Contributing + +In addition to our standard contribution guidelines, there are some extra notes for this project. + +## Adding Tags + +Tags are used to respond to frequently asked questions. New tags can be added to `/src/data/tags`, and should be added in alphabetical order by +`name`. + +Tags require the following properties: + +- `name`: The name of the tag. This is used to trigger the tag with `hf.`. +- `content`: This is the main body of the tag. You can insert line breaks with `\n`. +- `title`: This is the title of the tag, which **should take the form of a question**. +- `aliases`: These serve as alternate names for triggering the tag. + +## Adding Phrases to the Bot + +To add new responses to the bot, navigate to the `src/data/phrases.ts` file. Within the array, add the phrases you'd like the bot to potentially respond with. + +## Adding Hearts to the Bot + +All of our hearts are generously provided by [Luke's DevHearts project](https://github.com/lukeocodes/dev-hearts). Before you add a heart to this project, you need to submit it there and have it approved. Be sure to follow their contributing guidelines! + +Once your heart is approved and merged, add the _name_ of your new heart file to the `src/data/hearts.ts` file - do _not_ include the file extension. + +## Adding new users + +To add a new user to respond to, navigate to the `src/data/loveData.ts` file. Create a new object with the corresponding data - if you are adding a corporate sponsor, exclude the `id` field. + +Then, add a new array with the user's phrases in `src/data/phrases.ts`. diff --git a/docs/projects/we-love-hacktoberfest/index.md b/docs/projects/we-love-hacktoberfest/index.md new file mode 100644 index 0000000..cf43caa --- /dev/null +++ b/docs/projects/we-love-hacktoberfest/index.md @@ -0,0 +1,5 @@ +# We Love Hacktoberfest + +This is a Discord bot built for the Hacktoberfest server. Originally intended to spread positivity for the stressed Hacktoberfest team in 2020, the bot has since been expanded to include a tag system for frequently asked questions. + +[View the Code](https://github.com/nhcarrigan/we-love-hacktoberfest) | [View the Live App](https://discord.gg/hacktoberfest) diff --git a/docs/projects/we-love-hacktoberfest/privacy.md b/docs/projects/we-love-hacktoberfest/privacy.md new file mode 100644 index 0000000..90150e7 --- /dev/null +++ b/docs/projects/we-love-hacktoberfest/privacy.md @@ -0,0 +1,40 @@ +# Privacy Policy + +> [!DANGER] +> In the spirit of open source, errors are logged publicly in our Discord community. These logs may include information relevant to the error in question. +> +> We encourage you to [join our Discord](https://chat.nhcarrigan.com) to see what is logged PRIOR to using our applications. + +The use of this application is subject to this Privacy Policy. By using this application, you agree to the collection and use of your personal data in accordance with this Privacy Policy. + +## Data Collected + +In order to operate, the application collects and stores the following data: + +- Discord User ID: The bot tracks your Discord user ID to associate database records with your user account. +- Repository Name and Owner: The bot tracks the owner/name of repositories that are sent in the project sharing channel. +- Timestamp: The bot tracks the last time your account shared a specific repository to determine if it is within the configured cool down. + +## Right to Request Data + +At any time, you may request a complete copy of your data stored by the application. Requests must be done via our [support server](https://chat.nhcarrigan.com) from the Discord account the data belongs to. This ensures that a user cannot impersonate you and request your data. + +## Right to Removal + +Due to the nature of the data collected and the necessity of data for functionality, removal may not be requested for this application. + +## Right to Opt Out + +You may opt out of data collection by refraining from sharing repository links in the configured project sharing channel. + +## Data Retention + +Data are stored for the minimum necessary time to ensure the application is able to function. + +## Availability of Data + +Data are available to members of the development team, for the express purpose of debugging, improving, and contributing to the application. + +## Questions + +Questions and concerns regarding this privacy policy may be directed to `privacy@nhcarrigan.com`. diff --git a/docs/projects/we-love-hacktoberfest/self-hosting.md b/docs/projects/we-love-hacktoberfest/self-hosting.md new file mode 100644 index 0000000..7510888 --- /dev/null +++ b/docs/projects/we-love-hacktoberfest/self-hosting.md @@ -0,0 +1,3 @@ +# Self Hosting + +Instructions coming soon! diff --git a/docs/security.md b/docs/security.md new file mode 100644 index 0000000..f5ec3fb --- /dev/null +++ b/docs/security.md @@ -0,0 +1,8 @@ +# Security Policy + +If you discover a vulnerability within one of our applications, please do NOT create a GitHub issue or use any public platform to report it. Instead, either: + +- Create a private ticket on our [support server](https://chat.nhcarrigan.com) +- Notify us via email at `support@nhcarrigan.com` + +We do not offer any rewards (commonly known as "bug bounties") for reporting security issues. diff --git a/docs/staff/apply.md b/docs/staff/apply.md new file mode 100644 index 0000000..f6cbee0 --- /dev/null +++ b/docs/staff/apply.md @@ -0,0 +1,8 @@ +# Join Our Staff Team + +> [!NOTE] +> All positions are a volunteer-only basis, unless a separate written arrangement has been made with you. Do not assume that becoming staff will get you paid. + +We source team members by hand, based on activity, length of time in the community, and quality of interactions. If you are selected, Naomi will reach out to you with further instructions. + +Members of the mentorship programme are treated like staff. diff --git a/docs/staff/handbook.md b/docs/staff/handbook.md new file mode 100644 index 0000000..fb89609 --- /dev/null +++ b/docs/staff/handbook.md @@ -0,0 +1,127 @@ +# Staff Handbook + +We rely on our staff members in any position to help keep our community running smoothly. + +These are some general requirements for our staff team. Check the links in the sidebar for information specific to your position. + +## Activity Requirements + +We do not require specific levels of activity from our staff. We understand that you are volunteering your time to help our community, and it is highly appreciated. + +That being said, if you anticipate being inactive for more than a week, we do ask that you let us know in the Discord `#staff-chat` so we are aware that you will not be around to address issues. If you are inactive for more than a month with no communication, we will remove you from the staff team - however, you will always be welcome to return when your schedule allows! + +## Holopin Badge + +Staff members are eligible for a special staff badge on [Holopin](https://holopin.io/@naomis-novas). If you would like this badge, reach out to Naomi on Discord to claim it! + +## Moderator Guidelines + +Being a moderator does not mean that you are above our community, and we ask that you do not behave as such. It simply means that you are trusted with additional tools to help ensure our community is safe. + +### General Expectations + +Our moderators are meant to be the example of ideal community members. As such, you should be active within our community, adherent to our rules, and welcoming to our members. + +However, you are also still a member of the community yourself. Not every interaction needs to be a moderation action. Socialise with your fellow community members and remember that we are here to have fun! + +We have many community platforms, some of which you may not be familiar with. That's okay! While you are trusted to maintain all of our platforms, you only need to moderate the ones you're comfortable with. If you have any questions, you can always reach out to your fellow moderators. + +### Discord + +Moderating Discord primarily involves ensuring our members are interacting with each other in accordance with our rules. If a member is not acting appropriately, you should take action relative to their infraction. + +#### Warning a Member + +For actions that are mostly harmless, such as mild spam, or an insult that isn't discriminatory (i.e. "You're a jerk"), you can issue a warning. Use Becca to give a warning to the member so the action is appropriately logged. + +```txt +/mod warn @user this is the reason +``` + +#### Kicking a Member + +If a member is arguing with you directly, spamming a channel, or breaking our rules in a non-excessive manner, often times a kick is sufficient to show them that you are serious about enforcing our standards. Use Becca to kick the member so the action is logged. + +```txt +/mod kick @user this is the reason +``` + +#### Banning a Member + +Careful consideration must happen before banning a member. Discord bans are IP specific and the member will not be able to rejoin until the ban is lifted. When you need to ban someone, use Becca to do so. + +```txt +/mod ban @user 7 this is the reason +``` + +Becca will ask you to confirm that you intend to do this. + +### Working With Fellow Mods + +On GitHub, our community organisation has a `moderators` team. Within this team, you can create private discussions that only your fellow moderators will see. On Discord, we have a private staff-chat channel for the same purpose. + +These are places where you can bring up concerns, ask fellow moderators how they would approach a situation, or request assistance in dealing with an issue. We will gladly help you resolve the problems at hand. + +Remember that we are a team. We do not want to disagree with each other publicly. If you have concerns about a moderation action, or about a fellow moderator's actions, discuss them in one of these private areas. If you cannot reach a resolution, reach out to Naomi for guidance. + +### Logging Actions + +Moderation actions on Discord are automatically logged. However, moderation actions on other platforms should be manually logged to the `#council-activity` channel in our Discord community. + +## Mentee Guide + +Naomi will occasionally select passionate developers who have struggled to break into the field, and take them under her wing to mentor them. + +As a member of the Naomi's mentorship programme, you may be assigned issues and tasks that are essential to the maintenance of and improvement on our projects. We greatly appreciate your dedication to our work, and we have the highest respect for you volunteering your time. Tasks that are assigned, however, will need to be completed in a timely manner. + +If you find that you are unable to complete a task quickly, that's okay! We ask that you communicate with the rest of the mentees in our chat so someone can assist you in getting the issue resolved. Our number one goal is to ensure we are not preventing updates from rolling out to our users. + +### Secrets + +In the course of your work, you may require access to project secrets such as API tokens or deployment instances. Any project secrets are shared on a very strict need-to-know basis, and the disclosure of secrets to unauthorised parties may result in removal of your permissions and/or legal action. We trust you, but are obligated to keep our projects secure as well. + +### Deployment Access + +Most of our projects are hosted under DigitialOcean servers or GitHub Pages. + +If, for some reason, you should need access to one of these, ensure you have a public SSH key (SSH-rsa is a good method) to provide to us. + +With that, we can discuss allowing you access to the deployment based on the need. + +## GitHub + +GitHub involves triaging issues and reviewing pull requests, as well as fostering communication between our contributors and enforcing our community guidelines. + +### Triaging Issues + +By default, when an issue is opened `naomi-lgbt` is assigned and the issue gets a `🚦 status: awaiting triage` label automatically. This label is used to indicate issues that have not yet received attention from our maintainers. + +The first step is to respond to the issue with a comment thanking the contributor for bringing it to our attention. If additional information is needed, ask the necessary questions to help identify the potential resolution for the issue. + +Once a resolution has been reached, the issue will need to be re-labelled. Remove `naomi-lgbt`'s assignment and the `🚦 status: awaiting triage` label. Then, apply the appropriate labels from the list. Each label has a description to help identify its purpose. + +Be sure to include at least one label from the `aspect`, `goal`, `priority`, and `status` categories. Typically, the `status` label should be `🏁 status: ready for dev`. + +If you aren't sure what labels to apply, use the `🏷 status: label work required` and leave everything else unlabelled, and another member will come by to label it. + +### Reviewing Pull Requests + +Reviewing a pull request does require some understanding of the code base for that particular project. However, we are a community of learning, so if you would like some assistance reviewing a PR let another member know! Someone will help you understand the changes. + +The first step is to review the changes made to the code or files using GitHub's UI. You should make sure the changes are logical, add value, and do not add any spam or malicious content. + +Then, using whichever method you prefer, pull the changes down locally (or use an environment like GitPod) and test the changes. Make sure the changes resolve the linked issue or implement the feature/fix as expected. + +If you are happy with the changes made in the PR, add your review comments and select "Approve". If you would like to see changes, use the GitHub Suggestion feature where possible to create committable changes for the contributor to apply. When not possible, be as clear and descriptive as possible to make the process smoother for the contributor. + +If you have any questions about this process, ask your fellow moderators. + +### Write Access + +All mentees have triage access. If you feel you need direct push access to a repository, reach out to Naomi. + +## User Support + +Sometimes users may come into our chat looking for help with one of our projects. + +As a member of our team, you are essential in providing the smoothest user experience to our members. You should be able to answer questions regarding most of our projects, with Becca being the highest priority. If you don't have an answer for someone's question, you have access to `#council-chat` where you can discuss the question with your fellow staff members and work together to reach a solution. diff --git a/docs/terms.md b/docs/terms.md new file mode 100644 index 0000000..8fecc86 --- /dev/null +++ b/docs/terms.md @@ -0,0 +1,140 @@ +# Terms of Service + +> [!TIP] +> These terms may be subject to change. Use of our applications are subject to these terms, unless the application has its own terms and conditions - in which case these terms will be superseded by the application's terms and conditions. Changes to this policy, as well as aforementioned project level policies, are retroactive. Use of our applications constitutes an acceptance of the most recent, current version of any applicable policies. + +## OVERVIEW + +This application is operated by nhcarrigan. Throughout the site, the terms “we”, “us” and “our” refer to nhcarrigan. nhcarrigan offers this application, including all information, tools and services available from this site to you, the user, conditioned upon your acceptance of all terms, conditions, policies and notices stated here. + +By using our application, you engage in our “Service” and agree to be bound by the following terms and conditions (“Terms of Service”, “Terms”), including those additional terms and conditions and policies referenced herein and/or available by hyperlink. These Terms of Service apply to all users of the application, including without limitation users who are browsers, vendors, customers, merchants, and/ or contributors of content. +Please read these Terms of Service carefully before accessing or using our website. By accessing or using any part of the site, you agree to be bound by these Terms of Service. If you do not agree to all the terms and conditions of this agreement, then you may not access the website or use any services. If these Terms of Service are considered an offer, acceptance is expressly limited to these Terms of Service. + +Any new features or tools which are added to the current application shall also be subject to the Terms of Service. You can review the most current version of the Terms of Service at any time on this page. We reserve the right to update, change or replace any part of these Terms of Service by posting updates and/or changes to our website. It is your responsibility to check this page periodically for changes. Your continued use of or access to the website following the posting of any changes constitutes acceptance of those changes. + +## SECTION 1 - ONLINE STORE TERMS + +By agreeing to these Terms of Service, you represent that you are at least the age of majority in your state or province of residence, or that you are the age of majority in your state or province of residence and you have given us your consent to allow any of your minor dependents to use this site. + +You may not use our products for any illegal or unauthorized purpose nor may you, in the use of the Service, violate any laws in your jurisdiction (including but not limited to copyright laws). + +You must not transmit any worms or viruses or any code of a destructive nature. + +A breach or violation of any of the Terms will result in an immediate termination of your Services. + +## SECTION 2 - GENERAL CONDITIONS + +We reserve the right to refuse service to anyone for any reason at any time. + +You understand that your content may be transferred unencrypted and involve (a) transmissions over various networks; and (b) changes to conform and adapt to technical requirements of connecting networks or devices. + +You agree not to reproduce, duplicate, copy, sell, resell or exploit any portion of the Service, use of the Service, or access to the Service or any contact on the website through which the service is provided, without express written permission by us. + +The headings used in this agreement are included for convenience only and will not limit or otherwise affect these Terms. + +## SECTION 3 - ACCURACY, COMPLETENESS AND TIMELINESS OF INFORMATION + +We are not responsible if information made available on this site is not accurate, complete or current. The material on this site is provided for general information only and should not be relied upon or used as the sole basis for making decisions without consulting primary, more accurate, more complete or more timely sources of information. Any reliance on the material on this site is at your own risk. + +This site may contain certain historical information. Historical information, necessarily, is not current and is provided for your reference only. We reserve the right to modify the contents of this site at any time, but we have no obligation to update any information on our site. You agree that it is your responsibility to monitor changes to our site. + +## SECTION 4 - MODIFICATIONS TO THE SERVICE AND PRICES + +We reserve the right at any time to modify or discontinue the Service (or any part or content thereof) without notice at any time. + +We shall not be liable to you or to any third-party for any modification, price change, suspension or discontinuance of the Service. + +## SECTION 5 - OPTIONAL TOOLS + +We may provide you with access to third-party tools over which we neither monitor nor have any control nor input. + +You acknowledge and agree that we provide access to such tools ”as is” and “as available” without any warranties, representations or conditions of any kind and without any endorsement. We shall have no liability whatsoever arising from or relating to your use of optional third-party tools. + +Any use by you of optional tools offered through the site is entirely at your own risk and discretion and you should ensure that you are familiar with and approve of the terms on which tools are provided by the relevant third-party provider(s). + +We may also, in the future, offer new services and/or features through the website (including, the release of new tools and resources). Such new features and/or services shall also be subject to these Terms of Service. + +## SECTION 6 - THIRD-PARTY LINKS + +Certain content, products and services available via our Service may include materials from third-parties. + +Third-party links on this site may direct you to third-party websites that are not affiliated with us. We are not responsible for examining or evaluating the content or accuracy and we do not warrant and will not have any liability or responsibility for any third-party materials or websites, or for any other materials, products, or services of third-parties. + +We are not liable for any harm or damages related to the purchase or use of goods, services, resources, content, or any other transactions made in connection with any third-party websites. Please review carefully the third-party's policies and practices and make sure you understand them before you engage in any transaction. Complaints, claims, concerns, or questions regarding third-party products should be directed to the third-party. + +## SECTION 7 - USER COMMENTS, FEEDBACK AND OTHER SUBMISSIONS + +If, at our request, you send certain specific submissions (for example contest entries) or without a request from us you send creative ideas, suggestions, proposals, plans, or other materials, whether online, by email, by postal mail, or otherwise (collectively, 'comments'), you agree that we may, at any time, without restriction, edit, copy, publish, distribute, translate and otherwise use in any medium any comments that you forward to us. We are and shall be under no obligation (1) to maintain any comments in confidence; (2) to pay compensation for any comments; or (3) to respond to any comments. + +We may, but have no obligation to, monitor, edit or remove content that we determine in our sole discretion are unlawful, offensive, threatening, libellous, defamatory, pornographic, obscene or otherwise objectionable or violates any party’s intellectual property or these Terms of Service. + +You agree that your comments will not violate any right of any third-party, including copyright, trademark, privacy, personality or other personal or proprietary right. You further agree that your comments will not contain libellous or otherwise unlawful, abusive or obscene material, or contain any computer virus or other malware that could in any way affect the operation of the Service or any related website. You may not use a false e-mail address, pretend to be someone other than yourself, or otherwise mislead us or third-parties as to the origin of any comments. You are solely responsible for any comments you make and their accuracy. We take no responsibility and assume no liability for any comments posted by you or any third-party. + +## SECTION 8 - PERSONAL INFORMATION + +Your submission of personal information through the application is governed by our Privacy Policy. To view our Privacy Policy, [visit this page](https://docs.beccalyria.com/#/privacy-policy?utm_source=docs&utm_medium=tos). + +## SECTION 9 - ERRORS, INACCURACIES AND OMISSIONS + +Occasionally there may be information on our site or in the Service that contains typographical errors, inaccuracies or omissions. We reserve the right to correct any errors, inaccuracies or omissions, and to change or update information if any information in the Service or on any related website is inaccurate at any time without prior notice. + +We undertake no obligation to update, amend or clarify information in the Service or on any related website, including without limitation, pricing information, except as required by law. No specified update or refresh date applied in the Service or on any related website, should be taken to indicate that all information in the Service or on any related website has been modified or updated. + +## SECTION 10 - PROHIBITED USES + +In addition to other prohibitions as set forth in the Terms of Service, you are prohibited from using the application or its content: +(a) for any unlawful purpose; (b) to solicit others to perform or participate in any unlawful acts; (c) to violate any international, federal, provincial or state regulations, rules, laws, or local ordinances; (d) to infringe upon or violate our intellectual property rights or the intellectual property rights of others; (e) to harass, abuse, insult, harm, defame, slander, disparage, intimidate, or discriminate based on gender, sexual orientation, religion, ethnicity, race, age, national origin, or disability; (f) to submit false or misleading information; + +(g) to upload or transmit viruses or any other type of malicious code that will or may be used in any way that will affect the functionality or operation of the Service or of any related website, other websites, or the Internet; (h) to collect or track the personal information of others; (i) to spam, phish, pharm, pretext, spider, crawl, or scrape; (j) for any obscene or immoral purpose; or (k) to interfere with or circumvent the security features of the Service or any related website, other websites, or the Internet. We reserve the right to terminate your use of the Service or any related website for violating any of the prohibited uses. + +## SECTION 11 - DISCLAIMER OF WARRANTIES; LIMITATION OF LIABILITY + +We do not guarantee, represent or warrant that your use of our service will be uninterrupted, timely, secure or error-free. + +We do not warrant that the results that may be obtained from the use of the service will be accurate or reliable. + +You agree that from time to time we may remove the service for indefinite periods of time or cancel the service at any time, without notice to you. + +You expressly agree that your use of, or inability to use, the service is at your sole risk. The service and all products and services delivered to you through the service are (except as expressly stated by us) provided 'as is' and 'as available' for your use, without any representation, warranties or conditions of any kind, either express or implied, including all implied warranties or conditions of merchantability, merchantable quality, fitness for a particular purpose, durability, title, and non-infringement. + +In no case shall nhcarrigan, our directors, officers, employees, affiliates, agents, contractors, interns, suppliers, service providers or licensors be liable for any injury, loss, claim, or any direct, indirect, incidental, punitive, special, or consequential damages of any kind, including, without limitation lost profits, lost revenue, lost savings, loss of data, replacement costs, or any similar damages, whether based in contract, tort (including negligence), strict liability or otherwise, arising from your use of any of the service or any products procured using the service, or for any other claim related in any way to your use of the service or any product, including, but not limited to, any errors or omissions in any content, or any loss or damage of any kind incurred as a result of the use of the service or any content (or product) posted, transmitted, or otherwise made available via the service, even if advised of their possibility. + +Because some states or jurisdictions do not allow the exclusion or the limitation of liability for consequential or incidental damages, in such states or jurisdictions, our liability shall be limited to the maximum extent permitted by law. + +## SECTION 12 - INDEMNIFICATION + +You agree to indemnify, defend and hold harmless nhcarrigan and our parent, subsidiaries, affiliates, partners, officers, directors, agents, contractors, licensors, service providers, subcontractors, suppliers, interns and employees, harmless from any claim or demand, including reasonable attorneys’ fees, made by any third-party due to or arising out of your breach of these Terms of Service or the documents they incorporate by reference, or your violation of any law or the rights of a third-party. + +## SECTION 13 - SEVERABILITY + +In the event that any provision of these Terms of Service is determined to be unlawful, void or unenforceable, such provision shall nonetheless be enforceable to the fullest extent permitted by applicable law, and the unenforceable portion shall be deemed to be severed from these Terms of Service, such determination shall not affect the validity and enforceability of any other remaining provisions. + +## SECTION 14 - TERMINATION + +The obligations and liabilities of the parties incurred prior to the termination date shall survive the termination of this agreement for all purposes. + +These Terms of Service are effective unless and until terminated by either you or us. You may terminate these Terms of Service at any time by notifying us that you no longer wish to use our Services, or when you cease using our site. + +If in our sole judgment you fail, or we suspect that you have failed, to comply with any term or provision of these Terms of Service, we also may terminate this agreement at any time without notice and you will remain liable for all amounts due up to and including the date of termination; and/or accordingly may deny you access to our Services (or any part thereof). + +## SECTION 15 - ENTIRE AGREEMENT + +The failure of us to exercise or enforce any right or provision of these Terms of Service shall not constitute a waiver of such right or provision. + +These Terms of Service and any policies or operating rules posted by us on this site or in respect to The Service constitutes the entire agreement and understanding between you and us and govern your use of the Service, superseding any prior or contemporaneous agreements, communications and proposals, whether oral or written, between you and us (including, but not limited to, any prior versions of the Terms of Service). + +Any ambiguities in the interpretation of these Terms of Service shall not be construed against the drafting party. + +## SECTION 16 - GOVERNING LAW + +These Terms of Service and any separate agreements whereby we provide you Services shall be governed by and construed in accordance with the laws of WA, United States. + +## SECTION 17 - CHANGES TO TERMS OF SERVICE + +You can review the most current version of the Terms of Service at any time at this page. + +We reserve the right, at our sole discretion, to update, change or replace any part of these Terms of Service by posting updates and changes to our website. It is your responsibility to check our website periodically for changes. Your continued use of or access to our website or the Service following the posting of any changes to these Terms of Service constitutes acceptance of those changes. + +## SECTION 18 - CONTACT INFORMATION + +Questions about the Terms of Service should be sent to us at contact@nhcarrigan.com. diff --git a/package.json b/package.json new file mode 100644 index 0000000..8ad01ab --- /dev/null +++ b/package.json @@ -0,0 +1,35 @@ +{ + "name": "general-documentation", + "version": "1.0.0", + "description": "Documentation for my smaller projects.", + "main": "null", + "scripts": { + "lint": "markdownlint ./docs/**/*.md", + "start": "docsify serve ./docs -o --port 3200" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/nhcarrigan/general-documentation.git" + }, + "engines": { + "node": "20", + "pnpm": "8" + }, + "keywords": [ + "docsify", + "documentation" + ], + "author": "Naomi Carrigan", + "license": "SEE LICENSE IN https://docs.nhcarrigan.com/#/license", + "bugs": { + "url": "https://github.com/nhcarrigan/general-documentation/issues" + }, + "homepage": "https://github.com/nhcarrigan/general-documentation#readme", + "dependencies": { + "docsify-cli": "4.4.4" + }, + "devDependencies": { + "markdownlint": "0.34.0", + "markdownlint-cli": "0.39.0" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..171c380 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,1647 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + docsify-cli: + specifier: 4.4.4 + version: 4.4.4 + +devDependencies: + markdownlint: + specifier: 0.34.0 + version: 0.34.0 + markdownlint-cli: + specifier: 0.39.0 + version: 0.39.0 + +packages: + + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: true + + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + dev: true + optional: true + + /@sindresorhus/is@0.14.0: + resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} + engines: {node: '>=6'} + dev: false + + /@szmarczak/http-timer@1.1.2: + resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} + engines: {node: '>=6'} + dependencies: + defer-to-connect: 1.1.3 + dev: false + + /@types/keyv@3.1.4: + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + dependencies: + '@types/node': 20.5.0 + dev: false + + /@types/node@20.5.0: + resolution: {integrity: sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q==} + dev: false + + /@types/responselike@1.0.0: + resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} + dependencies: + '@types/node': 20.5.0 + dev: false + + /ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + dependencies: + string-width: 4.2.3 + dev: false + + /ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + dev: false + + /ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + dev: false + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: true + + /ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + dev: false + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: false + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: false + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: false + + /boxen@4.2.0: + resolution: {integrity: sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==} + engines: {node: '>=8'} + dependencies: + ansi-align: 3.0.1 + camelcase: 5.3.1 + chalk: 3.0.0 + cli-boxes: 2.2.1 + string-width: 4.2.3 + term-size: 2.2.1 + type-fest: 0.8.1 + widest-line: 3.1.0 + dev: false + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: false + + /cacheable-request@6.1.0: + resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} + engines: {node: '>=8'} + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 3.1.0 + lowercase-keys: 2.0.0 + normalize-url: 4.5.1 + responselike: 1.0.2 + dev: false + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: false + + /chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + dev: false + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: false + + /chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: false + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: false + + /ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + dev: false + + /cli-boxes@2.2.1: + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} + dev: false + + /cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: false + + /clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + dependencies: + mimic-response: 1.0.1 + dev: false + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: false + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: false + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + dev: true + + /configstore@5.0.1: + resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} + engines: {node: '>=8'} + dependencies: + dot-prop: 5.3.0 + graceful-fs: 4.2.11 + make-dir: 3.1.0 + unique-string: 2.0.0 + write-file-atomic: 3.0.3 + xdg-basedir: 4.0.0 + dev: false + + /connect-history-api-fallback@1.6.0: + resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} + engines: {node: '>=0.8'} + dev: false + + /connect-livereload@0.6.1: + resolution: {integrity: sha512-3R0kMOdL7CjJpU66fzAkCe6HNtd3AavCS4m+uW4KtJjrdGPT0SQEZieAYd+cm+lJoBznNQ4lqipYWkhBMgk00g==} + dev: false + + /connect@3.7.0: + resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} + engines: {node: '>= 0.10.0'} + dependencies: + debug: 2.6.9 + finalhandler: 1.1.2 + parseurl: 1.3.3 + utils-merge: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /cp-file@7.0.0: + resolution: {integrity: sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==} + engines: {node: '>=8'} + dependencies: + graceful-fs: 4.2.11 + make-dir: 3.1.0 + nested-error-stacks: 2.1.1 + p-event: 4.2.0 + dev: false + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + dev: false + + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: false + + /decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: false + + /decompress-response@3.3.0: + resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} + engines: {node: '>=4'} + dependencies: + mimic-response: 1.0.1 + dev: false + + /deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + /defer-to-connect@1.1.3: + resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} + dev: false + + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: false + + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: false + + /docsify-cli@4.4.4: + resolution: {integrity: sha512-NAZgg6b0BsDuq/Pe+P19Qb2J1d+ZVbS0eGkeCNxyu4F9/CQSsRqZqAvPJ9/0I+BCHn4sgftA2jluqhQVzKzrSA==} + engines: {node: '>= 10', npm: '>= 6'} + hasBin: true + dependencies: + chalk: 2.4.2 + connect: 3.7.0 + connect-history-api-fallback: 1.6.0 + connect-livereload: 0.6.1 + cp-file: 7.0.0 + docsify: 4.13.1 + docsify-server-renderer: 4.13.1 + enquirer: 2.4.1 + fs-extra: 8.1.0 + get-port: 5.1.1 + livereload: 0.9.3 + lru-cache: 5.1.1 + open: 6.4.0 + serve-static: 1.15.0 + update-notifier: 4.1.3 + yargonaut: 1.1.4 + yargs: 15.4.1 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /docsify-server-renderer@4.13.1: + resolution: {integrity: sha512-XNJeCK3zp+mVO7JZFn0bH4hNBAMMC1MbuCU7CBsjLHYn4NHrjIgCBGmylzEan3/4Qm6kbSzQx8XzUK5T7GQxHw==} + dependencies: + debug: 4.3.4 + docsify: 4.13.1 + node-fetch: 2.6.12 + resolve-pathname: 3.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /docsify@4.13.1: + resolution: {integrity: sha512-BsDypTBhw0mfslw9kZgAspCMZSM+sUIIDg5K/t1hNLkvbem9h64ZQc71e1IpY+iWsi/KdeqfazDfg52y2Lmm0A==} + requiresBuild: true + dependencies: + marked: 1.2.9 + medium-zoom: 1.0.8 + opencollective-postinstall: 2.0.3 + prismjs: 1.29.0 + strip-indent: 3.0.0 + tinydate: 1.3.0 + tweezer.js: 1.5.0 + dev: false + + /dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + dependencies: + is-obj: 2.0.0 + dev: false + + /duplexer3@0.1.5: + resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} + dev: false + + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true + + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: false + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: false + + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: false + + /enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + dev: false + + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: true + + /escape-goat@2.1.1: + resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==} + engines: {node: '>=8'} + dev: false + + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: false + + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: false + + /figlet@1.6.0: + resolution: {integrity: sha512-31EQGhCEITv6+hi2ORRPyn3bulaV9Fl4xOdR169cBzH/n1UqcxsiSB/noo6SJdD7Kfb1Ljit+IgR1USvF/XbdA==} + engines: {node: '>= 0.4.0'} + hasBin: true + dev: false + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: false + + /finalhandler@1.1.2: + resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.5.0 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: false + + /foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + dev: true + + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: false + + /fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: false + + /fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: false + + /get-port@5.1.1: + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} + dev: false + + /get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + dev: true + + /get-stream@4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} + dependencies: + pump: 3.0.0 + dev: false + + /get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.0 + dev: false + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: false + + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.3 + minipass: 6.0.2 + path-scurry: 1.10.1 + dev: true + + /global-dirs@2.1.0: + resolution: {integrity: sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==} + engines: {node: '>=8'} + dependencies: + ini: 1.3.7 + dev: false + + /got@9.6.0: + resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} + engines: {node: '>=8.6'} + dependencies: + '@sindresorhus/is': 0.14.0 + '@szmarczak/http-timer': 1.1.2 + '@types/keyv': 3.1.4 + '@types/responselike': 1.0.0 + cacheable-request: 6.1.0 + decompress-response: 3.3.0 + duplexer3: 0.1.5 + get-stream: 4.1.0 + lowercase-keys: 1.0.1 + mimic-response: 1.0.1 + p-cancelable: 1.1.0 + to-readable-stream: 1.0.0 + url-parse-lax: 3.0.0 + dev: false + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: false + + /has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: false + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: false + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: false + + /has-yarn@2.1.0: + resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} + engines: {node: '>=8'} + dev: false + + /http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + dev: false + + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: false + + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} + dev: true + + /import-lazy@2.1.0: + resolution: {integrity: sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==} + engines: {node: '>=4'} + dev: false + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: false + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: false + + /ini@1.3.7: + resolution: {integrity: sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==} + dev: false + + /ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: false + + /ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: false + + /is-ci@2.0.0: + resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} + hasBin: true + dependencies: + ci-info: 2.0.0 + dev: false + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: false + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: false + + /is-installed-globally@0.3.2: + resolution: {integrity: sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==} + engines: {node: '>=8'} + dependencies: + global-dirs: 2.1.0 + is-path-inside: 3.0.3 + dev: false + + /is-npm@4.0.0: + resolution: {integrity: sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==} + engines: {node: '>=8'} + dev: false + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: false + + /is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + dev: false + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: false + + /is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + dev: false + + /is-wsl@1.1.0: + resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} + engines: {node: '>=4'} + dev: false + + /is-yarn-global@0.3.0: + resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} + dev: false + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /json-buffer@3.0.0: + resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} + dev: false + + /jsonc-parser@3.2.1: + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + dev: true + + /jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + optionalDependencies: + graceful-fs: 4.2.11 + dev: false + + /keyv@3.1.0: + resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} + dependencies: + json-buffer: 3.0.0 + dev: false + + /latest-version@5.1.0: + resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} + engines: {node: '>=8'} + dependencies: + package-json: 6.5.0 + dev: false + + /linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + dependencies: + uc.micro: 2.1.0 + dev: true + + /livereload-js@3.4.1: + resolution: {integrity: sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==} + dev: false + + /livereload@0.9.3: + resolution: {integrity: sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + livereload-js: 3.4.1 + opts: 2.0.2 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: false + + /lowercase-keys@1.0.1: + resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} + engines: {node: '>=0.10.0'} + dev: false + + /lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + dev: false + + /lru-cache@10.0.1: + resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} + engines: {node: 14 || >=16.14} + dev: true + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: false + + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 + dev: false + + /markdown-it@14.0.0: + resolution: {integrity: sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==} + hasBin: true + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.0.0 + dev: true + + /markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + dev: true + + /markdownlint-cli@0.39.0: + resolution: {integrity: sha512-ZuFN7Xpsbn1Nbp0YYkeLOfXOMOfLQBik2lKRy8pVI/llmKQ2uW7x+8k5OMgF6o7XCsTDSYC/OOmeJ+3qplvnJQ==} + engines: {node: '>=18'} + hasBin: true + dependencies: + commander: 11.1.0 + get-stdin: 9.0.0 + glob: 10.3.10 + ignore: 5.3.0 + js-yaml: 4.1.0 + jsonc-parser: 3.2.1 + markdownlint: 0.33.0 + minimatch: 9.0.3 + run-con: 1.3.2 + dev: true + + /markdownlint-micromark@0.1.8: + resolution: {integrity: sha512-1ouYkMRo9/6gou9gObuMDnvZM8jC/ly3QCFQyoSPCS2XV1ZClU0xpKbL1Ar3bWWRT1RnBZkWUEiNKrI2CwiBQA==} + engines: {node: '>=16'} + dev: true + + /markdownlint-micromark@0.1.9: + resolution: {integrity: sha512-5hVs/DzAFa8XqYosbEAEg6ok6MF2smDj89ztn9pKkCtdKHVdPQuGMH7frFfYL9mLkvfFe4pTyAMffLbjf3/EyA==} + engines: {node: '>=18'} + dev: true + + /markdownlint@0.33.0: + resolution: {integrity: sha512-4lbtT14A3m0LPX1WS/3d1m7Blg+ZwiLq36WvjQqFGsX3Gik99NV+VXp/PW3n+Q62xyPdbvGOCfjPqjW+/SKMig==} + engines: {node: '>=18'} + dependencies: + markdown-it: 14.0.0 + markdownlint-micromark: 0.1.8 + dev: true + + /markdownlint@0.34.0: + resolution: {integrity: sha512-qwGyuyKwjkEMOJ10XN6OTKNOVYvOIi35RNvDLNxTof5s8UmyGHlCdpngRHoRGNvQVGuxO3BJ7uNSgdeX166WXw==} + engines: {node: '>=18'} + dependencies: + markdown-it: 14.1.0 + markdownlint-micromark: 0.1.9 + dev: true + + /marked@1.2.9: + resolution: {integrity: sha512-H8lIX2SvyitGX+TRdtS06m1jHMijKN/XjfH6Ooii9fvxMlh8QdqBfBDkGUpMWH2kQNrtixjzYUa3SH8ROTgRRw==} + engines: {node: '>= 8.16.2'} + hasBin: true + dev: false + + /mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + dev: true + + /medium-zoom@1.0.8: + resolution: {integrity: sha512-CjFVuFq/IfrdqesAXfg+hzlDKu6A2n80ZIq0Kl9kWjoHh9j1N9Uvk5X0/MmN0hOfm5F9YBswlClhcwnmtwz7gA==} + dev: false + + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + dev: false + + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: false + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + /minipass@6.0.2: + resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: false + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: false + + /nested-error-stacks@2.1.1: + resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} + dev: false + + /node-fetch@2.6.12: + resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: false + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: false + + /normalize-url@4.5.1: + resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} + engines: {node: '>=8'} + dev: false + + /on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: false + + /open@6.4.0: + resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==} + engines: {node: '>=8'} + dependencies: + is-wsl: 1.1.0 + dev: false + + /opencollective-postinstall@2.0.3: + resolution: {integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==} + hasBin: true + dev: false + + /opts@2.0.2: + resolution: {integrity: sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==} + dev: false + + /p-cancelable@1.1.0: + resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} + engines: {node: '>=6'} + dev: false + + /p-event@4.2.0: + resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} + engines: {node: '>=8'} + dependencies: + p-timeout: 3.2.0 + dev: false + + /p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + dev: false + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: false + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: false + + /p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + dependencies: + p-finally: 1.0.0 + dev: false + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: false + + /package-json@6.5.0: + resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} + engines: {node: '>=8'} + dependencies: + got: 9.6.0 + registry-auth-token: 4.2.2 + registry-url: 5.1.0 + semver: 6.3.1 + dev: false + + /parent-require@1.0.0: + resolution: {integrity: sha512-2MXDNZC4aXdkkap+rBBMv0lUsfJqvX5/2FiYYnfCnorZt3Pk06/IOR5KeaoghgS2w07MLWgjbsnyaq6PdHn2LQ==} + engines: {node: '>= 0.4.0'} + dev: false + + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: false + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: false + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.0.1 + minipass: 6.0.2 + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: false + + /prepend-http@2.0.0: + resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} + engines: {node: '>=4'} + dev: false + + /prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + dev: false + + /pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: false + + /punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + dev: true + + /pupa@2.1.1: + resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} + engines: {node: '>=8'} + dependencies: + escape-goat: 2.1.1 + dev: false + + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: false + + /rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + dev: false + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: false + + /registry-auth-token@4.2.2: + resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} + engines: {node: '>=6.0.0'} + dependencies: + rc: 1.2.8 + dev: false + + /registry-url@5.1.0: + resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} + engines: {node: '>=8'} + dependencies: + rc: 1.2.8 + dev: false + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: false + + /require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: false + + /resolve-pathname@3.0.0: + resolution: {integrity: sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==} + dev: false + + /responselike@1.0.2: + resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} + dependencies: + lowercase-keys: 1.0.1 + dev: false + + /run-con@1.3.2: + resolution: {integrity: sha512-CcfE+mYiTcKEzg0IqS08+efdnH0oJ3zV0wSUFBNrMHMuxCtXvBCLzCJHatwuXDcu/RlhjTziTo/a1ruQik6/Yg==} + hasBin: true + dependencies: + deep-extend: 0.6.0 + ini: 4.1.1 + minimist: 1.2.8 + strip-json-comments: 3.1.1 + dev: true + + /semver-diff@3.1.1: + resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 + dev: false + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: false + + /send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + dev: false + + /set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: false + + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: false + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + + /statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + dev: false + + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: false + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + dev: true + + /strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: false + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: true + + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: false + + /strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + dev: false + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + dev: false + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: false + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: false + + /term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + dev: false + + /tinydate@1.3.0: + resolution: {integrity: sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==} + engines: {node: '>=4'} + dev: false + + /to-readable-stream@1.0.0: + resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} + engines: {node: '>=6'} + dev: false + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: false + + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: false + + /tweezer.js@1.5.0: + resolution: {integrity: sha512-aSiJz7rGWNAQq7hjMK9ZYDuEawXupcCWgl3woQQSoDP2Oh8O4srWb/uO1PzzHIsrPEOqrjJ2sUb9FERfzuBabQ==} + dev: false + + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: false + + /typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 + dev: false + + /uc.micro@2.0.0: + resolution: {integrity: sha512-DffL94LsNOccVn4hyfRe5rdKa273swqeA5DJpMOeFmEn1wCDc7nAbbB0gXlgBCL7TNzeTv6G7XVWzan7iJtfig==} + dev: true + + /uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + dev: true + + /unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + dependencies: + crypto-random-string: 2.0.0 + dev: false + + /universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: false + + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: false + + /update-notifier@4.1.3: + resolution: {integrity: sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==} + engines: {node: '>=8'} + dependencies: + boxen: 4.2.0 + chalk: 3.0.0 + configstore: 5.0.1 + has-yarn: 2.1.0 + import-lazy: 2.1.0 + is-ci: 2.0.0 + is-installed-globally: 0.3.2 + is-npm: 4.0.0 + is-yarn-global: 0.3.0 + latest-version: 5.1.0 + pupa: 2.1.1 + semver-diff: 3.1.1 + xdg-basedir: 4.0.0 + dev: false + + /url-parse-lax@3.0.0: + resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} + engines: {node: '>=4'} + dependencies: + prepend-http: 2.0.0 + dev: false + + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: false + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: false + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: false + + /which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + dev: false + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + dependencies: + string-width: 4.2.3 + dev: false + + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: false + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: false + + /write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + dev: false + + /ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /xdg-basedir@4.0.0: + resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} + engines: {node: '>=8'} + dev: false + + /y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: false + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: false + + /yargonaut@1.1.4: + resolution: {integrity: sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA==} + dependencies: + chalk: 1.1.3 + figlet: 1.6.0 + parent-require: 1.0.0 + dev: false + + /yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: false + + /yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + dev: false