diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..54ebbb7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/node_modules +/package-lock.json +/temp \ No newline at end of file diff --git a/README.md b/README.md index bb05659..685a0fb 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,25 @@ πŸ‘‹ Hello Friend! -The "Dat Ecosystem" is a project composed of people interested in things like the [hypercore-protocol](https://hypercore-protocol.org). +The "Dat Ecosystem" is a project composed of people interested in things like the [hypercore-protocol][1]. -We are organized around our [πŸ“œ Manifesto](./MANIFESTO.md), check it out if you want to know what, how and why we do things. +We are organized around our [πŸ“œ Manifesto][2], check it out if you want to know what, how and why we do things. -You can meet us at [πŸ—“ Events](https://events.dat.foundation/), in the [πŸ’¬ Discord Chat](https://discord.gg/QmDUKuubPt), at [πŸ‘₯ Comm-Comm casual meetups](https://comm-comm.datproject.org/) or [πŸ’¬ Cabal](https://github.com/dat-ecosystem/dat-ecosystem.github.io/blob/main/README.md#connect-to-cabal-with-cli-or-download-cabal-desktop). +You can meet us at [πŸ—“ Events][3], in the [πŸ’¬ Discord Chat][4], at [πŸ‘₯ Comm-Comm casual meetups][5] or [πŸ’¬ Cabal][6]. -If you meet us, please be aware that we follow a [πŸ“œ Code of Conduct](./code-of-conduct.md). +If you meet us, please be aware that we follow a [πŸ“œ Code of Conduct][7]. -We also publish things on our communal [πŸŽ₯ Youtube Channel](https://www.youtube.com/@DatEcosystem) or our communal [🐦 Twitter Account](https://twitter.com/dat_ecosystem). +We also publish things on our communal [πŸŽ₯ Youtube Channel][8] or our communal [🐦 Twitter Account][9]. -If you would like to discuss any sensitive matter with the Consortium, please use [our private contact system](https://dat-ecosystem.org/organization). +If you would like to discuss any sensitive matter with the Consortium, please use [our private contact system][10]. + +[1]: https://hypercore-protocol.org +[2]: ./MANIFESTO.md +[3]: https://events.dat.foundation/ "dat-ecosystem calendar" +[4]: https://discord.gg/QmDUKuubPt "dat-ecosystem discord server" +[5]: https://comm-comm.datproject.org/ "dat-ecosystem community calls" +[6]: https://github.com/dat-ecosystem/dat-ecosystem.github.io/blob/main/README.md#connect-to-cabal-with-cli-or-download-cabal-desktop "dat-ecosystem p2p cabal chat" +[7]: ./code-of-conduct.md +[8]: https://www.youtube.com/@DatEcosystem "dat-ecosystem youtube channel" +[9]: https://twitter.com/dat_ecosystem "dat-ecosystem social media" +[10]: https://dat-ecosystem.github.io/organization/ "dat-ecosystem private contact system" diff --git a/code-of-conduct-contact.md b/code-of-conduct-contact.md index 34ba316..396d246 100644 --- a/code-of-conduct-contact.md +++ b/code-of-conduct-contact.md @@ -1,7 +1,7 @@ # Dat Ecosystem - Reporting Guide -If you believe someone is violating [the code of conduct](./code-of-conduct.md) we ask that you report it to the Dat Ecosystem Consortium -created an encrypted issue using [our private contact system](https://dat-ecosystem.org/organization). +If you believe someone is violating [the code of conduct][1] we ask that you report it to the Dat Ecosystem Consortium +created an encrypted issue using [our private contact system][2]. All reports will be kept confidential. In some cases we may determine that a public statement will need to be made. If that's the case, the identities of all victims and reporters will remain confidential unless those individuals instruct us otherwise. @@ -60,7 +60,7 @@ We'll take into account feedback from the reporter on the appropriateness of our If your report concerns a current member of the consortium, you may not feel comfortable sending your report to the committee, as all members will see the report. -In that case, you can make a report directly to any or all other workgroup group or consortium members. Their means of contact are listed on the [Manifesto](./MANIFESTO.md). +In that case, you can make a report directly to any or all other workgroup group or consortium members. Their means of contact are listed on the [Manifesto][3]. The members you contact will respond to the issue, to the best of their ability, in a group excluding the member(s) that the report concerns. @@ -68,4 +68,10 @@ The members you contact will respond to the issue, to the best of their ability, Any of the parties directly involved or affected can request reconsideration of the consortium’s decision. -To make such a request, contact the Consortium using [our private contact system](https://dat-ecosystem.org/organization) with your request and motivation and the consortium will review the case. +To make such a request, contact the Consortium using [our private contact system][2] with your request and motivation and the consortium will review the case. + + + +[1]: ./code-of-conduct-contact.md +[2]: https://dat-ecosystem.github.io/organization/ "dat-ecosystem private contact system" +[3]: ./MANIFESTO.md \ No newline at end of file diff --git a/code-of-conduct.md b/code-of-conduct.md index f6792f7..e337d7f 100644 --- a/code-of-conduct.md +++ b/code-of-conduct.md @@ -1,6 +1,6 @@ # Dat Ecosystem - Code of Conduct -Like the technical community as a whole, the [Dat Ecosystem](./MANIFESTO.md) is made up of a mixture of professionals and volunteers from all over the world, working on every aspect of the mission - including mentorship, teaching, and connecting people. +Like the technical community as a whole, the [Dat Ecosystem][1] is made up of a mixture of professionals and volunteers from all over the world, working on every aspect of the mission - including mentorship, teaching, and connecting people. Diversity is one of our huge strengths, but it can also lead to communication issues and unhappiness. To that end, we have a few ground rules that we ask people to adhere to. @@ -12,9 +12,9 @@ This code of conduct applies to all spaces (real or digital) managed by the Dat In addition, violations of this code outside these spaces may affect a person's ability to participate within them. -If you believe someone is violating the code of conduct, we ask that you report it using [our private contact system](https://dat-ecosystem.org/organization). +If you believe someone is violating the code of conduct, we ask that you report it using [our private contact system][2]. -For more details please see our [Reporting Guidelines](./code-of-conduct-contact.md). +For more details please see our [Reporting Guidelines][3]. - **Be friendly and patient.** - **Be welcoming.** @@ -37,4 +37,9 @@ For more details please see our [Reporting Guidelines](./code-of-conduct-contact - **When we disagree, try to understand why.** Disagreements, both social and technical, happen all the time and the Dat Ecosystem is no exception. It is important that we resolve disagreements and differing views constructively. Remember that we’re different. The strength of Dat Ecosystem comes from its varied community, people from a wide range of backgrounds. Different people have different perspectives on issues. Being unable to understand why someone holds a viewpoint doesn’t mean that they’re wrong. Don’t forget that it is human to err and blaming each other doesn’t get us anywhere. Instead, focus on helping to resolve issues and learning from mistakes. -Original text courtesy of the [Speak Up! project](https://web.archive.org/web/20141109123859/http://speakup.io/coc.html). +Original text courtesy of the [Speak Up! project][4]. + +[1]: ./MANIFESTO.md +[2]: https://dat-ecosystem.github.io/organization/ "dat-ecosystem private contact system" +[3]: ./code-of-conduct-contact.md +[4]: https://web.archive.org/web/20141109123859/http://speakup.io/coc.html "speakup.io code of conduct" diff --git a/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/Apereo Welcoming Policy 2.0 _ Apereo Foundation.pdf b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/Apereo Welcoming Policy 2.0 _ Apereo Foundation.pdf new file mode 100644 index 0000000..85af79a Binary files /dev/null and b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/Apereo Welcoming Policy 2.0 _ Apereo Foundation.pdf differ diff --git a/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/ApereoFiscalSponsoreeWelcomeInformation&Policies.pdf b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/ApereoFiscalSponsoreeWelcomeInformation&Policies.pdf new file mode 100644 index 0000000..de6f2d7 Binary files /dev/null and b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/ApereoFiscalSponsoreeWelcomeInformation&Policies.pdf differ diff --git a/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/ApereoFiscalSponsorshipApplication&ReportV2_Template.pdf b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/ApereoFiscalSponsorshipApplication&ReportV2_Template.pdf new file mode 100644 index 0000000..2e71784 Binary files /dev/null and b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/ApereoFiscalSponsorshipApplication&ReportV2_Template.pdf differ diff --git a/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/Apereo_form990.pdf b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/Apereo_form990.pdf new file mode 100644 index 0000000..3bab90e Binary files /dev/null and b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/Apereo_form990.pdf differ diff --git a/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/Dat Ecosystem Apereo Foundation New Project Intake Form for Communications.pdf b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/Dat Ecosystem Apereo Foundation New Project Intake Form for Communications.pdf new file mode 100644 index 0000000..4969dc5 Binary files /dev/null and b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/Dat Ecosystem Apereo Foundation New Project Intake Form for Communications.pdf differ diff --git a/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/Dat-Ecosystem Fiscal Sponsorship Application & ReportV2 - Google Docs.pdf b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/Dat-Ecosystem Fiscal Sponsorship Application & ReportV2 - Google Docs.pdf new file mode 100644 index 0000000..27d280a Binary files /dev/null and b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/Dat-Ecosystem Fiscal Sponsorship Application & ReportV2 - Google Docs.pdf differ diff --git a/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/DatEcosystemLetterOfTransfer.pdf b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/DatEcosystemLetterOfTransfer.pdf new file mode 100644 index 0000000..d7a549f Binary files /dev/null and b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/DatEcosystemLetterOfTransfer.pdf differ diff --git a/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/DatEcosystem_Fiscal_Sponsorship_Agreement_C.pdf b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/DatEcosystem_Fiscal_Sponsorship_Agreement_C.pdf new file mode 100644 index 0000000..69a951e Binary files /dev/null and b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/DatEcosystem_Fiscal_Sponsorship_Agreement_C.pdf differ diff --git a/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/DatEcosystem_Fiscal_Sponsorship_Agreement_signedBy_Apereo_and_datEcosystem.pdf b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/DatEcosystem_Fiscal_Sponsorship_Agreement_signedBy_Apereo_and_datEcosystem.pdf new file mode 100644 index 0000000..5d69dbd Binary files /dev/null and b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/DatEcosystem_Fiscal_Sponsorship_Agreement_signedBy_Apereo_and_datEcosystem.pdf differ diff --git a/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/PROPOSAL.md b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/PROPOSAL.md new file mode 100644 index 0000000..a547ad0 --- /dev/null +++ b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/PROPOSAL.md @@ -0,0 +1,56 @@ +# Proposal: + +## `Transition to Apereo Foundation as Fiscal Sponsor` + +#### Date: 2024.06.05 + +#### Submitted By: [Alexander Praetorius](https://github.com/serapath) + +## Background + +The fiscal host, Open Collective Foundation, is undergoing dissolution, +rendering the Dat Ecosystem Account unable to receive contributions on https://opencollective.com. +It is imperative that we spend or transfer our remaining funds by the 30th of September 2024. +For more details regarding the dissolution of Open Collective Foundation, +please refer to the [official statement](https://blog.opencollective.com/open-collective-official-statement-ocf-dissolution/) + +Extensive research into potential alternative 501(c)(3) Fiscal Sponsors has identified +the [Apereo Foundation](https://www.apereo.org/) as a candidate aligned with the Dat Ecosystem Manifesto +and suitable for transition. A meeting with Mr. [Patrick Masson](@massonpj@fosstodon.org), Executive Director of the Apereo Foundation, +indicated potential interest. Subsequently, we received a questionnaire +from the Apereo Foundation for the Dat Ecosystem to complete, +along with an invitation to pose any inquiries of relevance. + +### Proposal Details + +In accordance with the aforementioned findings and discussions, +the Dat Ecosystem proposes to transition its fiscal sponsorship to the Apereo Foundation. + +#### Key Actions Proposed: +1. Completion of the [Questionnaire](./questionaire.pdf) provided by the Apereo Foundation for Consortium Member Review. +2. Submission of Proposed [Answers](./answers.md) to the Apereo Foundation. +3. Fulfillment of additional conditions stipulated by the Apereo Foundation, including: + * Quarterly filing of the specified [form](https://docs.google.com/forms/d/e/1FAIpQLSfTMOgmpixxvZ31DCxLVjFXY1UT_HQFwOurGmsdz0IAJoI_Ag/viewform). + * Acceptance of the [Apereo Foundation's welcome policy](https://www.apereo.org/about/governance/welcoming-policy-20). + +### Proposal Outcome +The Dat Ecosystem hereby expresses its intent to select the Apereo Foundation as its new Fiscal Sponsor. + +### Approval Process +This proposal will undergo review and approval by the Consortium. +All members are encouraged to provide feedback and raise any concerns before the final decision is made. + +### Conclusion +The transition to the Apereo Foundation as our new Fiscal Sponsor aligns +with our [organizational objectives](https://github.com/dat-ecosystem/organization/blob/13eb30bb4270f3c1d10f2bf4e36f01f636c3e90f/MANIFESTO.md) and ensures continuity of financial support. + +--- + +## Update + +#### Date: 2025.02.07 +In order to complete the transition to Apereo Foundation as new fiscal sponsor for dat-ecosystem, the following task list will need to be completed +* [TASKS.md](./TASKS.md) + + + diff --git a/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/TASKS.md b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/TASKS.md new file mode 100644 index 0000000..ced9c0b --- /dev/null +++ b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/TASKS.md @@ -0,0 +1,260 @@ +# TASKS +Mangage transition of Fiscal Sponsor from Open Collective and Code for Science and Society to the Apereo Foundation + +------------------------------------------------------------------------------- + +## Apereo +1. [x] provide questionaire to get to know dat-ecosystem + * **`assign`** [Patrick Masson](mailto:patrick.masson@apereo.org) + * **`output`** πŸ“¦ [questionaire.pdf](./questionaire.pdf) + * **next** `dat-ecosystem#2` +2. [x] share fiscal sponsoree welcome information and policies documents with dat-ecosystem to sign + * **`assign`** [Patrick Masson](mailto:patrick.masson@apereo.org) + * **`inputs`** 🎁 [Welcome Policy 2.0](https://www.apereo.org/about/governance/welcoming-policy-20) + * **`output`** πŸ“¦ [ApereoWelcomingPolicy2.0.pdf](./Apereo%20Welcoming%20Policy%202.0%20_%20Apereo%20Foundation.pdf) + * **next** `dat-ecosystem#7` + * **`output`** πŸ“¦ [fiscal sponsoree welcome information and policies](./ApereoFiscalSponsoreeWelcomeInformation%26Policies.pdf) + * **next** `dat-ecosystem#7` +3. [ ] add dat to Apereo website (generic information (such as dat-ecosystem blog and website links) about dat-ecosystem) + * **`assign`** [Michelle Hall](mailto:michelle.hall@apereo.org) - Apereo's website/drupal admin and communications manager + 1. [x] share new project intake form with dat-ecosystem + * **`assign`** [Michelle Hall](mailto:michelle.hall@apereo.org) - Apereo's website/drupal admin and communications manager + * **`inputs`** πŸ“¦ [answers.md](./answers.md) **from** `dat-ecosystem#2` + * **`output`** πŸ“¦ [Dat Ecosystem Apereo Foundation New Project Intake Form for Communications.pdf](/Dat%20Ecosystem%20Apereo%20Foundation%20New%20Project%20Intake%20Form%20for%20Communications.pdf) + * **next** `dat-ecosystem#5` + 2. [ ] add dat-ecosystem page to apereo website + * **`assign`** [Michelle Hall](mailto:michelle.hall@apereo.org) - Apereo's website/drupal admin and communications manager + * **`inputs`** πŸ“¦ [generic dat-ecosystem "about" info](./intake_form_filledout.pdf) **from** `dat-ecosystem#5` + * **`inputs`** ❓ [donation options provided by Phyllis Dobbs](#) **from** `APEREO#6` + * **`output`** ❓ [live: https://apereo.org/programs/software/dat-ecosystem](https://apereo.org/programs/software/dat-ecosystem) + * **next** `dat-ecosystem#15` + * **next** `dat-ecosystem#13.1` + * **next** `dat-ecosystem#12` + * **`output`** ❓ [redirect: https://apereo.org/dat-ecosystem](https://apereo.org/dat-ecosystem) + * **next** `dat-ecosystem#15` + * **next** `dat-ecosystem#13.1` + * **next** `dat-ecosystem#12` + * **`output`** ❓ [redirect: https://dat-ecosystem.apereo.org](https://dat-ecosystem.apereo.org) + * **next** `dat-ecosystem#15` + * **next** `dat-ecosystem#13.1` + * **next** `dat-ecosystem#12` +4. [ ] migrate all dat related domains and email addresses to display and forward correctly based on instructions provided by dat-ecosystem + * **`assign`** [Arlen Johnson](mailto:arlen@sphericalcowgroup.com) - Apereo System Administrator + * **`inputs`** πŸ“¦ [usage intention for email addresses and domains](./domains-and-emailaddresses.md#USAGE_INTENTION) **from** `dat-ecosystem#4` + * **`inputs`**❓[dat-ecosystem-AuthIDs](#) **from** `dat-ecosystem#6` + * **`inputs`**❓[cs&S-AuthIDs](#) **from** `cs&s#2` + * **`output`** ❓ [transitioned DNS confugration compliant with usage intention](#) + * **next** `dat-ecosystem#11` +5. [ ] share required fiscal sponsorship transfer documents with OpenCollective to complete fiscal sponsorship change + * **`assign`** [Phyllis Dobbs](mailto:accounting@apereo.org) - Apereo's Controller (funding/finances) + * **`inputs`** πŸ“¦ [leaving OCF document](https://docs.opencollective.foundation/leaving-ocf) **from** `OPENCOLLECTIVE#1` + 1. [x] Share an MOU fiscal sponsorship with dat-ecosystem to be signed by dat-ecosystem representatives and Apereo and then send it to OpenCollective + * **`assign`** [Patrick Masson](mailto:patrick.masson@apereo.org) + * **`output`** πŸ“¦ [fiscal sponsorship agreement teplate](./ApereoFiscalSponsorshipApplication%26ReportV2_Template.pdf) + * **next** `dat-ecosystem#9.2` + * **`output`** πŸ“¦ [fiscal sponsorship agreement](./Dat-Ecosystem%20Fiscal%20Sponsorship%20Application%20%26%20ReportV2%20-%20Google%20Docs.pdf) + * **next** `dat-ecosystem#9.2` + * **`output`** πŸ“¦ [fiscal sponsorship agreement Apereo Signed](./DatEcosystem_Fiscal_Sponsorship_Agreement_C.pdf) + * **next** `dat-ecosystem#9.2` + 2. [ ] provide ACH deposit information to dat-ecosystem for submitting to OpenCollective for completing the transition of fiscal sponsorship change + * **`assign`** [Phyllis Dobbs](mailto:accounting@apereo.org) - Apereo's Controller (funding/finances) + * **`output`** ❓ [ACH deposit info including OpenCollective Bank Account transfer information](#) + * **next** `dat-ecosystem#9.3` + 3. [ ] provide a copy of W9 form to dat-ecosystem to forward to OpenCollective + * **`assign`** [Phyllis Dobbs](mailto:accounting@apereo.org) - Apereo's Controller (funding/finances) + * **`output`** ❓ [W9](#) + * **next** `dat-ecosystem9.3` + 4. [x] Send OpenCollective IRS determination letter as Proof of Apereo's 501c3 status + * **`assign`** [Patrick Masson](mailto:patrick.masson@apereo.org) + * **`inputs`** 🎁 [form 990 - return of organization excempt from income tax](https://apps.irs.gov/pub/epostcard/cor/462060554_202212_990_2024010922202106.pdf) + * **`output`** πŸ“¦ [form 990 apereo - return of organization excempt from income tax](./Apereo_form990.pdf) + * **next** `dat-ecosystem#9.3` + * **`output`** πŸ“¦ [proof_of_501c3_apereo.pdf](./proof_of_501c3_apereo.pdf) + * **next** `dat-ecosystem#9.3` + 5. [x] Send OpenCollective Foundation: A one-page Letter of transfer of dat-ecosystem fiscal sponsorship to be signed by OpenCollective + * **`assign`** [Patrick Masson](mailto:patrick.masson@apereo.org) + * **`output`** πŸ“¦ [DatEcosystemLetterOfTransfer.pdf](./DatEcosystemLetterOfTransfer.pdf) + * **next** `dat-ecosystem#9.3` +6. [ ] transition dat fiscal sponsorship from open collective to apereo + * **`assign`** [Phyllis Dobbs](mailto:accounting@apereo.org) - Apereo's Controller (funding/finances) + * **`inputs`** πŸ“¦ `dat-transactions-ALL.OCF2024.csv` (submitted via email to Apereo Foundation by @serapath) **from** `dat-ecosystem#3.1` + * **`inputs`** πŸ“¦ `dat-contributors-OCF2024.csv` (submitted via email to Apereo Foundation by @serapath) **from** `dat-ecosystem#3.2` + * **`inputs`** ❓ [signedwelcome information and policies](#) **from** `dat-ecosystem#7` + * **`inputs`** ❓ [reciept of transferung liquidated HNS airdrup funds to apereo](#) **from** `dat-ecosystem#10` + * **`inputs`** πŸ“¦ [fiscal sponsorship agreement Apereo & dat-ecosystem Signed](./DatEcosystem_Fiscal_Sponsorship_Agreement_signedBy_Apereo_and_datEcosystem.pdf) **from** `dat-ecosystem#9.2` + * **`inputs`** ❓ [approved and executed transfer of remaining dat funds from open collective to apereo](#) **from** `OPENCOLLECTIVE#2` + * **`inputs`** ❓ [Signed DatEcosystemLetterOfTransfer.pdf](#) **from** `OPENCOLLECTIVE#2` + * **`output`** ❓ [donation options provided by Phyllis Dobbs](#) + * **next** `dat-ecosystem#15` + * **next** `APEREO#3.2` +7. [ ] Begin official onboarding process and discuss options with dat-ecosystem about publicity program to communicate to public + * **`assign`** [Jenn Cummings](mailto:jenn.cummings@apereo.org) - Apereo's Community and Membership Manager + * **`inputs`** ❓ [updated dat-ecosystem opencollective profile](https://opencollective.com/dat) **from** `dat-ecosystem#13.1` + * **`inputs`** ❓ [deactived financial service modules for dat's OpenCollective account](https://opencollective.com/dat) **from** `dat-ecosystem#13.2` + * **`inputs`** ❓ [update business process specification](#) **from** `dat-ecosystem#14` + * **`inputs`** ❓ [Updated and consortium signed `Proposal.md` linking those policies](./PROPOSAL.md) **from** `dat-ecosystem#12` + * **`output`** πŸβ“ [...](#) + +------------------------------------------------------------------------------- + +## Open Collective +1. [x] provide all information necessary for transitioning to a new fiscal sponsor to dat-ecosystem and Apereo + * **`assign`** [OpenCollective](generalinquiries@opencollective.org) + * **`output`** πŸ“¦ [leaving OCF document](https://docs.opencollective.foundation/leaving-ocf) + * **next** `APEREO#5` + * **next** `dat-ecosystem#9` + * **next** `OPENCOLLECTIVE#2` +2. [ ] receive all required documents signed by APEREO and dat-ecosystem to complete fiscal sponsorship transition to the Apereo Foundation and transfer remaining funds + * **`assign`** [OpenCollective](generalinquiries@opencollective.org) + * **`inputs`** πŸ“¦ [leaving OCF document](https://docs.opencollective.foundation/leaving-ocf) **from** `OPENCOLLECTIVE#1` + * **`inputs`** πŸ“¦ [filled out exist & unhosting review form](https://docs.google.com/forms/d/e/1FAIpQLSeqCKSSKFIw5laas7S2lWjAH6ia_G-790Y5rU1Kfz2ZLCHjVg/closedform) **from** `dat-ecosystem#9.1` + * **`inputs`** ❓ [filed fiscal sponsorship transition from opencollective to apereo expense with all inputs above attached](#) **from** `dat-ecosystem#9.3` + * **`output`** ❓ [Signed DatEcosystemLetterOfTransfer.pdf](#) + * **next** `APEREO#6` + * **`output`** ❓ [approved and executed transfer of remaining dat funds from open collective to apereo](#) + * **next** `APEREO#6` + +------------------------------------------------------------------------------- + +## Code for Science and Society +1. [x] compile a list of all dat related email addresses and domains + * **`assign`** [Christopher Furton](ithelp@codeforsociety.org) + * **`output`** πŸ“¦ [domains-and-emailaddresses.md](./domains-and-emailaddresses.md) + * **next** `dat-ecosystem#4` +2. [ ] transfer all domains/emails/assets to Apereo by generating authIDs + * **`assign`** [Christopher Furton](ithelp@codeforsociety.org) + * **`output`**❓[cs&S-AuthIDs](#) + * **next** `APEREO#4` +3. [ ] share any accounts saved in 1password that relate to dat + * **`assign`** [Christopher Furton](ithelp@codeforsociety.org) + * **`output`**❓ [dat onepassword credentials](#) + * **next** `dat-ecosystem#8` +4. [x] provide all information about the HNS cryptocurrency airdrop to be able to complete and claim the funds + * **`assign`** [Christopher Furton](ithelp@codeforsociety.org) + * **`output`** πŸ“¦ `airdrop-claim-work-in-progress-document` (submitted via email to dat-ecosystem) + * **next** `dat-ecosystem#10` + +------------------------------------------------------------------------------- + +## dat-ecosystem +1. [ ] Mangage transition process of changing dat-ecosystem's fiscal sponsor from Open Collective and Code for Science and Society to the Apereo Foundation + * **`assign`** [serapath](https://github.com/serapath) + * **`inputs`** ❓ [Updated and consortium signed `Proposal.md` linking those policies](./PROPOSAL.md) **from** `dat-ecosystem#12` + * **`output`** πŸβ“ [merged proposal pull request](https://github.com/dat-ecosystem/organization/pull/122) +2. [x] provide questionaire to get to know dat-ecosystem + * **`assign`** [serapath](https://github.com/serapath) + * **`inputs`** πŸ“¦ [questionaire.pdf](./questionaire.pdf) **from** `APEREO#1` + * **`output`** πŸ“¦ [answers.md](./answers.md) + * **next** `APEREO#3.1` +3. [x] provide fiscal sponsorship analysis to apereos accounting services to unify books for reporting US Internal Revenue Service requirements + * **`assign`** [serapath](https://github.com/serapath) + 1. [x] export detailed transaction history of dat-ecosystem's revenue and expenses from open collective + * **`assign`** [Diego](https://github.com/dpaez) + * **`output`** πŸ“¦ `dat-transactions-ALL.OCF2024.csv` (submitted via email to Apereo Foundation by @serapath) + * **next** `APEREO#6` + 2. [x] export detailed contributors history from open collective + * **`assign`** [Diego](https://github.com/dpaez) + * **`output`** πŸ“¦ `dat-contributors-OCF2024.csv` (submitted via email to Apereo Foundation by @serapath) + * **next** `APEREO#6` +4. [x] make usage plan for all domains and email addresses for apereo to configure them appropriately + * **`assign`** [serapath](https://github.com/serapath) + * **`inputs`** πŸ“¦ [domains-and-emailaddresses.md](./domains-and-emailaddresses.md) **from** `cs&s#1` + * **`output`** πŸ“¦ [usage intention for email addresses and domains](./domains-and-emailaddresses.md#USAGE_INTENTION) + * **next** `APEREO#4` +5. [x] provide generic information about dat-ecosystem to Apereo for updating their website similar to (https://www.apereo.org/opencast/, https://www.apereo.org/sakai, https://www.apereo.org/uportal) + * **`assign`** [serapath](https://github.com/serapath) + * **`inputs`** πŸ“¦ [Dat Ecosystem Apereo Foundation New Project Intake Form for Communications.pdf](/Dat%20Ecosystem%20Apereo%20Foundation%20New%20Project%20Intake%20Form%20for%20Communications.pdf) **from** `APEREO#3.1` + * [x] look for inspiration on bottom of existing apereo pages, such as OPENCAST and check their links to e.g. github, a project page, docs, community contacts, etc. + * **`output`** πŸ“¦ [generic dat-ecosystem "about" info](./intake_form_filledout.pdf) + * **next** `APEREO#3.2` +6. [ ] help transition `dat-ecosystem.org` domain to Apereo + * **`assign`** [ninebreznik](https://github.com/ninabreznik) + * **`output`** ❓ [dat-ecosystem-AuthIDs](#) + * **next** `APEREO#4` +7. [ ] Review, sign and adopt the Apereo Foundation Welcome Policies + * **`assign`** [serapath](https://github.com/serapath) + * **`inputs`** πŸ“¦ [ApereoWelcomingPolicy2.0.pdf](./Apereo%20Welcoming%20Policy%202.0%20_%20Apereo%20Foundation.pdf) **from** `APEREO#2` + * **`inputs`** πŸ“¦ [fiscal sponsoree welcome information and policies](./ApereoFiscalSponsoreeWelcomeInformation%26Policies.pdf) **from** `APEREO#2` + * **`output`** ❓ [signedwelcome information and policies](#) + * **next** `APEREO#6` + * **next** `dat-ecosystem#12` +8. [x] store, change and update all old credentials + * **`assign`** [serapath](https://github.com/serapath) + * **`inputs`** πŸ“¦ `dat onepassword credentials` (via email) **from** `cs&s#3` + * **`output`** πŸπŸ“¦ [updated list of dat-ecosystem credentials shared with consortium members](#) +9. [ ] send and forward documents to opencollective to complete transition fiscal sponsorship from Open Collective Foundation to Apereo Foundation + * **`assign`** [serapath](https://github.com/serapath) + * **`inputs`** πŸ“¦ [leaving OCF document](https://docs.opencollective.foundation/leaving-ocf) **from** `OPENCOLLECTIVE#1` + 1. [x] complete the Exit & Unhosting Review Form to inform Open Collective of dat-ecosystem plan to transition to a new fiscal sponsor + * **`assign`** [serapath](https://github.com/serapath) + * **`output`** πŸ“¦ [filled out exist & unhosting review form](https://docs.google.com/forms/d/e/1FAIpQLSeqCKSSKFIw5laas7S2lWjAH6ia_G-790Y5rU1Kfz2ZLCHjVg/closedform) + * **next** `OPENCOLLECTIVE#2` + 2. [x] submit a signed MOU fiscal sponsorship agreement needed for IRS tax filings + * **`assign`** [serapath](https://github.com/serapath) + * **`inputs`** πŸ“¦ [fiscal sponsorship agreement teplate](./ApereoFiscalSponsorshipApplication%26ReportV2_Template.pdf) **from** `APEREO#5.1` + * **`inputs`** πŸ“¦ [fiscal sponsorship agreement](./Dat-Ecosystem%20Fiscal%20Sponsorship%20Application%20%26%20ReportV2%20-%20Google%20Docs.pdf) **from** `APEREO#5.1` + * **`inputs`** πŸ“¦ [fiscal sponsorship agreement Apereo Signed](./DatEcosystem_Fiscal_Sponsorship_Agreement_C.pdf) **from** `APEREO#5.1` + * **`output`** πŸ“¦ [fiscal sponsorship agreement Apereo & dat-ecosystem Signed](./DatEcosystem_Fiscal_Sponsorship_Agreement_signedBy_Apereo_and_datEcosystem.pdf) + * **next** `dat-ecosystem#9.3` + * **next** `APEREO#6` + * **next** `dat-ecosystem#12` + 3. [ ] file expense with determination latter attached to transfer all remaining funds from dat OpenCollective to Apereo Foundation as new fiscal sponsor + * **`assign`** [serapath](https://github.com/serapath) + * **`inputs`** ❓ [IRS determination letter](#) **from** `APEREO#5.1` + * **`inputs`** ❓ [ACH deposit info including OpenCollective Bank Account transfer information](#) **from** `APEREO#5.2` + * **`inputs`** ❓ [W9](#) **from** `APEREO#5.3` + * **`inputs`** πŸ“¦ [form 990 apereo - return of organization excempt from income tax](./Apereo_form990.pdf) **from** `APEREO#5.4` + * **`inputs`** πŸ“¦ [proof_of_501c3_apereo.pdf](./proof_of_501c3_apereo.pdf) **from** `APEREO#5.4` + * **`inputs`** πŸ“¦ [DatEcosystemLetterOfTransfer.pdf](./DatEcosystemLetterOfTransfer.pdf) **from** `APEREO#5.5` + * **`inputs`** πŸ“¦ [fiscal sponsorship agreement Apereo & dat-ecosystem Signed](./DatEcosystem_Fiscal_Sponsorship_Agreement_signedBy_Apereo_and_datEcosystem.pdf) **from** `dat-ecosystem#9.2` + * **`output`** ❓ [filed fiscal sponsorship transition from opencollective to apereo expense with all inputs above attached](#) + * **next** `OPENCOLLECTIVE#2` +10. [x] Request Code for Science and Society liquidate cryptocurrency holdings and transfer the funds to Apereo Foundation + * **`assign`** [ninebreznik](https://github.com/ninabreznik) + * **`inputs`** πŸ“¦ `airdrop-claim-work-in-progress-document` (submitted via email by code for science and society) **from** `cs&s#4` + 1. [ ] transfer liquidated HNS crypto airdrop funds to Apereo + * **`output`** ❓ [reciept of transferung liquidated HNS airdrup funds to apereo](#) + * **next** `APEREO#6` +11. [ ] update github pages with CNAME files to use old dat pages with deprecation and dat-ecosystem forwarding notice + * **`assign`** [serapath](https://github.com/serapath) + * **`inputs`** ❓ [transitioned DNS confugration compliant with usage intention](#) **from** `APEREO#4` + * **`output`** ❓ [fully working legacy dat pages with deprecation notice](#) + * **next** `dat-ecosystem#12` +12. [ ] Update proposal with all signed documents to be accepted by dat-ecosystem consortium + * **`assign`** [serapath](https://github.com/serapath) + * **`inputs`** ❓ [fully working legacy dat pages with deprecation notice](#) **from** `dat-ecosystem#11` + * **`inputs`** ❓ [update business process specification](#) **from** `dat-ecosystem#14` + * **`inputs`** ❓ [live: https://apereo.org/programs/software/dat-ecosystem](https://apereo.org/programs/software/dat-ecosystem) **from** `APEREO#3.2` + * **`inputs`** ❓ [redirect: https://apereo.org/dat-ecosystem](https://apereo.org/dat-ecosystem) **from** `APEREO#3.2` + * **`inputs`** ❓ [redirect: https://dat-ecosystem.apereo.org](https://dat-ecosystem.apereo.org) **from** `APEREO#3.2` + * **`inputs`** πŸ“¦ [fiscal sponsorship agreement Apereo & dat-ecosystem Signed](./DatEcosystem_Fiscal_Sponsorship_Agreement_signedBy_Apereo_and_datEcosystem.pdf) **from** `dat-ecosystem#9.2` + * **`inputs`** ❓ [signedwelcome information and policies](#) **from** `dat-ecosystem#7` + * **`output`** ❓ [Updated and consortium signed `Proposal.md` linking those policies](./PROPOSAL.md) + * **next** `APEREO#7` + * **next** `dat-ecosystem#1` +13. [ ] update dat-ecosystem's OpenCollective profile with forwarding notice so visitors can find the dat-ecosystem page on the Apereo website + * **`assign`** [serapath](https://github.com/serapath) + 1. [ ] add contact information (e.g. "We have moved") to help direct future contributors to Apereo. + * **`assign`** [serapath](https://github.com/serapath) + * **`inputs`** ❓ [live: https://apereo.org/programs/software/dat-ecosystem](https://apereo.org/programs/software/dat-ecosystem) **from** `APEREO#3.2` + * **`inputs`** ❓ [redirect: https://apereo.org/dat-ecosystem](https://apereo.org/dat-ecosystem) **from** `APEREO#3.2` + * **`inputs`** ❓ [redirect: https://dat-ecosystem.apereo.org](https://dat-ecosystem.apereo.org) **from** `APEREO#3.2` + * **`output`** ❓ [updated dat-ecosystem opencollective profile](https://opencollective.com/dat) + * **next** `APEREO#7` + 2. [ ] Archive dat-ecosystem OpenCollective page to disable further transaction but keep records archived and confirm dat-ecosystme will not use OpenColective for financial services in the future, such as e.g. collecting funds, transactions, billing, etc. + * **`assign`** [serapath](https://github.com/serapath) + * **`output`** ❓ [deactived financial service modules for dat's OpenCollective account](https://opencollective.com/dat) + * **next** `APEREO#7` +14. [o] update business processes to integrate book keeping with apereo founation + * **`assign`** [serapath](https://github.com/serapath) + * **`output`** ❓ [update business process specification](#) + * **next** `APEREO#7` + * **next** `dat-ecosystem#12` +15. [ ] Share dat-ecosystem's new donation page supported by Apereo with potential supporters + * **`assign`** [serapath](https://github.com/serapath) + * **`inputs`** ❓ [Fedor Indutny shared he might support dat-ecosystem](https://mastodon.gamedev.place/deck/@apereo@social.fossdle.org/113091890562451336) + * **`inputs`** ❓ [live: https://apereo.org/programs/software/dat-ecosystem](https://apereo.org/programs/software/dat-ecosystem) **from** `APEREO#3.2` + * **`inputs`** ❓ [redirect: https://apereo.org/dat-ecosystem](https://apereo.org/dat-ecosystem) **from** `APEREO#3.2` + * **`inputs`** ❓ [redirect: https://dat-ecosystem.apereo.org](https://dat-ecosystem.apereo.org) **from** `APEREO#3.2` + * **`inputs`** ❓ [donation options provided by Phyllis Dobbs](#) **from** `APEREO#6` + * **`output`** πŸβ“ [mastodon toot answer to fedor indunty](#) diff --git a/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/answers.md b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/answers.md new file mode 100644 index 0000000..26ca488 --- /dev/null +++ b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/answers.md @@ -0,0 +1,155 @@ +## Apereo Foundation Questionaire + +**Date:** `2024.06.05` + +**Project/Organisation:** +`"Dat-Ecosystem"` + +**Project/Organization Contacts:** +* dat-ecosystem@protonmail.com + +**Applicant Representatives name and email:** +* Alexander Cobleigh + * cblgh@cblgh.org +* Alexander Praetorius + * a.praetorius@serapath.de +* Diego Paez + * diego@geutstudio.com +* Franz Heinzmann + * frando@unbiskant.org +* Kevin Faaborg + * kevin@littlstar.com +* Nina Breznik + * ninabreznik@gmail.com + +**Project/Organization website:** +https:/dat-ecosystem.org + +------------------------------- + +## 1. Charitable purpose of the project: + +Dat-Ecosystem's purpose is described in our manifesto: +https://github.com/dat-ecosystem/organization/blob/13eb30bb4270f3c1d10f2bf4e36f01f636c3e90f/MANIFESTO.md + +## 2. Describe the project/organization's legal status: + +We are a 501(c)(3) project, fiscally sponsored by the Open Collective Foundation through OpenCollective.com. As the Open Collective Foundation is winding down its operations, the Dat-Ecosystem project is now seeking a new 501(c)(3) fiscal sponsor. Additionally, some of our intellectual property, specifically the domains and the Dat brand, are still held by our original fiscal host, the 501(c)(3) US-based public charity, Code for Science and Society. + +## 3. Current leadership (individuals governing the project/organizatoin) and governance model: + +The Dat-Ecosystem is governed by a consortium of individuals who are founders of long-standing Dat-based projects. This consortium oversees the brand and funds on behalf of the member projects and collaborates to foster progress toward the goals described in the manifesto. + +> We, the "Dat Ecosystem" members, come together to achieve the following goals: +> - Share our knowledge on building decentralized systems. +> - Publish our work under permissive, open culture, licenses. +> - Build decentralized systems that profit the general public and empower users. +> - Have dat protocols (e.g. [hypercore-protocol](https://hypercore-protocol.org/) or similar) as a foundation of our work. +> - Promote our shared goals with the public. +> - Develop solutions to shared technical problems. +> - Find and invite new members that share our goals. +> - Promote the adoption of shared technology through documentation or standardization. + +The entire Manifesto can be read here: https://github.com/dat-ecosystem/organization/blob/13eb30bb4270f3c1d10f2bf4e36f01f636c3e90f/MANIFESTO.md + +## 4. Describe whether the project/organization is currently in or was previously in any other fiscal sponsorhsip arrangements and why the group is looking for a new fiscal sponsor. + +The Dat-Ecosystem was initially founded in collaboration with Code for Science and Society. Code for Science and Society charged a fixed fee for its services. However, there were periods when this fee was unaffordable for the Dat projects, which largely rely on volunteer work and donations through Open Collective. + +Fortunately, the Open Collective Foundation offered to take over fiscal sponsorship pro bono. However, due to technical and logistical reasons, they were unable to hold Dat-related assets, such as domains and the brand. As a result, Code for Science and Society agreed to retain these assets on behalf of Dat pro bono until a better solution could be found. + +Recently, changes have led to the Open Collective Foundation deciding to wind down its operations. Consequently, we must find a new home for our fiscal sponsorship and asset management once again. + +#### a. Has the group considered any other fiscal sponsors, i.e., other charitable organizations? + +We conducted extensive research initially to identify potential candidates and received a list of potential organizations from Open Collective. Among these candidates was the Apero Foundation. + +After carefully evaluating each potential fiscal sponsor, the Apero Foundation stood out significantly in terms of its mission and alignment with the goals of the Dat-Ecosystem. + +## 5. What is the timeframe for joining the Apero Foundation as a fiscal sponsoree? + +The Dat-Ecosystem is governed by a consortium, which must reach a unanimous decision on fundamental issues, a process that can take some time. The contract with the Open Collective Foundation expires on June 23, 2024. We were initially told we had until September 2024 to find a new fiscal sponsor, but their latest communication has informed us that their fiscal sponsorship will end sooner than expected. + +## 6. What timeframe will the project/organization exist over, e.g., a set duration of time, periodically, open-ended, etc.? + +The Dat-Ecosystem operates on an open-ended basis, with projects evolving over time. Several member projects have existed for many years and are expected to continue contributing to the maintenance of the peer-to-peer open-source software stack. While some projects are short-lived and eventually wind down, such cases are the exception rather than the norm. + +## 7. Describe the resources and contractual obligations the applicant is brining into the sponsorship + +Presently, the Dat-Ecosystem funds amount to $3,807.60 USD and are held through [OpenCollective](https://opencollective.com/dat). The possibility exists for the transfer of the Dat brand and domains from Code for Science and Society. Additionally, an outstanding cryptocurrency donation is under the custody of our initial fiscal sponsor, Code for Science and Society, owing to the limitations of OpenCollective.com in managing crypto tokens. + +Furthermore, there are a few subscribed sponsors through Open Collective whose continued support we value. Therefore, it would be advantageous if the Apero Foundation could extend fiscal sponsorship through Open Collective. However, if such an arrangement is not feasible, we express our interest in fiscal sponsorship from the Apero Foundation irrespective of the platform. + +Currently, we have no other contractual obligations. Some minor expenses, such as a glitch.com hosting and the dat-ecosystem domain name are being held on behalf of dat-ecosystem by member projects. Periodically, funds received by the Dat-Ecosystem are allocated to reimburse these projects for the mentioned services. + +#### a. Describe the current project/organizational personnel and their status as employees, volunteers, or independent contractors. + +All personnell of Dat-Ecosystem are volunteers. Nobody is employed by Dat-Ecosystem. The personnel consists of consortium members only, each of which is also a (co-)founder of an independent Dat-Ecosystem member project. If the Dat-Ecosystem consortium decides to act in accordance with the manifesto, it usually assigns budgets to activities and selects people to carry out those activities and funds it via the budget it resides over. + +#### b. Will the status of the current personnel change should the AF accept the project/organization’s application? + +No, the consortium and its members and all Dat-Ecosystem member projects will stay unchanged. + +## 8. (a-c) What assets will transfer to AF if the project/organization’s application is accepted? For each asset, the applicant should specify which will transfer in entirety to AF, which may be partially transferred to AF (and how divided), which, if any, are to be licensed to AF, and which, if any, may require some other arrangement. + + +The current balance from Open Collective would be transferred to AF. If we can stay on open collective, then also the current subscribed regular sponsors of Dat-Ecosystem (who were currently paused by Open Collective). Also funds from the crypto donation which are currently held by Code for Science and Society and that would be it for now. There are no contact lists or bank accounts or other assets. + + +#### d. What liabilities will transfer to AF if the project/organization’s application is accepted? For each liability, the applicant should specify which will transfer in entirety to AF, which may be partially transferred to AF (and how divided), which, if any, is to remain with another/previous fiscal sponsor, and which, if any, may require some other arrangement. + +Dat-Ecosystem has no outstanding liabilities, so no liabilities would transfer. + +## 9. How will the project/organization earn revenue? + +#### a. Does the project/organization plan to earn income through sales or services, i.e., related or unrelated business activities, through fundraising activities, events, or ongoing partnerships? + +The project primarily relies on donations from Open Collective Members and in very rare occasions cryptocurrency contributions as its sources of revenue. +While the consortium of volunteers may explore the possibility of applying for grants in the future, it's important to acknowledge that such endeavors require considerable time and entail uncertain outcomes. + +In summary: We seek donations and sponsorships and pursue grants. + + +#### b. What types of activities generate regular expenses for the project/organization? + +The Dat-Ecosystem does not engage in activities that incur regular expenses for the project or organization. However, we occasionally organize events such as conferences and sponsor technical writers to promote open-source contributions or assist in resolving issues shared by many Dat-Ecosystem member projects. These initiatives are pursued only when adequate funds are available to support them. + +## 10. What infrastructure is used today, and does the project/organization hope tu use any AF's current infrastructure or reqiure new infrastructure? + +We utilize open-source tooling and software at no cost, including GitHub organizations and repositories, free markdown documents, and we maintain a Discord server alongside a peer-to-peer Cabal chat instance. Our email services are provided by ProtonMail, and the Dat-Ecosystem domain is sponsored by one of our member projects. Additionally, we manage several social media profiles without incurring any expenses. + +Notably, our operations do not necessitate any cloud or server instances apart from glitch.com which we use to bridge communication from our discord server to a peer to peer chat messenger called "cabal" which is also a Dat-Ecosystem member project. + +## 11. Does the project/organization require insurance for any activities or personnel involving risk exposure? + +No. + +## 12. Does the group propose any political or lobbying activity, and if so, what? + +The group does not propose any political or lobbying activity other than what is written in the manifesto and is considered mostly apolitical by the consortium members. + +https://github.com/dat-ecosystem/organization/blob/13eb30bb4270f3c1d10f2bf4e36f01f636c3e90f/MANIFESTO.md + +## 13. Is the applicant willing to adopt the Apero Welcoming Policy? + +Yes. + +## 14. Is the group willing to submit a quarterly report? + +Yes. + + +## Questions for the Apero Foundation + +1. What fees does Apero Foundation expect from its fiscally sponsored projects? + * `APEREO`: **Answer:** see: + * [fiscal sponsorship agreement](https://github.com/serapath/organization/blob/main/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation%20as_Fiscal_Sponsor/Dat-Ecosystem%20Fiscal%20Sponsorship%20Application%20%26%20ReportV2%20-%20Google%20Docs.pdf) + * [Apereo Welcome Policy](https://www.apereo.org/about/governance/welcoming-policy-20) + * [fiscal sponsoree welcome information and policies](https://github.com/serapath/organization/blob/main/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation%20as_Fiscal_Sponsor/ApereoFiscalSponsoreeWelcomeInformation%26Policies.pdf) +2. Can we continue operating through Open Collective? + * `APEREO`: **Answer:** Yes, but only for workflow management, internal ledger/book-keeping, like CiviCRM, but not as a fiscal sponsor, so those modules would need to be deactivated, such as collecting funds, transactions, billing, etc... +3. In case of future cryptocurrency donations, could Apero Foundation support the process of claiming these funds? + * `APEREO`: **Answer:** No, the any cryptocurrency donations would need to be liquidated into USD immediately +4. What are the guidelines and rules of the process for terminating fiscal sponsorship agreements by either party? + * `APEREO`: **Answer:** see (11.) and (12.) in the following document: + * [fiscal sponsorship agreement](https://github.com/serapath/organization/blob/main/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation%20as_Fiscal_Sponsor/Dat-Ecosystem%20Fiscal%20Sponsorship%20Application%20%26%20ReportV2%20-%20Google%20Docs.pdf) diff --git a/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/domains-and-emailaddresses.md b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/domains-and-emailaddresses.md new file mode 100644 index 0000000..e838617 --- /dev/null +++ b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/domains-and-emailaddresses.md @@ -0,0 +1,42 @@ + +Domain Name: dat.foundation iwantmyname.com <<-- Email service provided by CS&S +Domain Name: datproject.org iwantmyname.com <<-- Email service provided by CS&S +Domain Name: datbase.org iwantmyname.com +* http://web.archive.org/web/20180917092617/http://datbase.org/ +* mentioned in https://blog.dat-ecosystem.org/new-website/ +Domain Name: datprotocol.net iwantmyname.com <<-- redirect to datprotocol.com +Domain Name: datprotocol.org iwantmyname.com <<-- redirect to datprotocol.com +Domain Name: datprotocol.com iwantmyname.com +Domain Name: dat-data.com squarespace.com +* http://web.archive.org/web/20140729141359/http://dat-data.com/ +Domain Name: dat-ecosystem.org namecheap.com + +The blog runs under https://blog.dat-ecosystem.org + +Google Workspace groups created for datproject.org within CS&S's: +- accounting@datproject.org is an alias for CS&S's accounting@codeforsociety.org Google Group + * alias to CS&S user account +- osaos@datproject.org is an alias for CS&S's osaos@codeforsociety.org Google Group + * received about 15 emails back in 2018 and nothing since +- community@datproject.org Google Group + * has received a total of 17 emails between 12/2017 and 11/2023, + * with the last email received on 11/1/2023 +- hi@datproject.org Google Group with an alias of hi@dat.foundation + * used back in 2020 and 2021 and includes some Let'sEncrypt notificaitons + * Zoom notifications, and Twitter notifications. + * However, the latest email was received on 10/23/2021 +- domains@datproject.org Google Group + * received domain renewal notices here +- security@datproject.org Google Group + * tal of 4 emails from 9/2018 through 3/22 + * mostly related vulnerabilities in DAT's infrastructure + + +**USAGE INTENTION:** +The following is what we ideally would want: +1. All email addresses would just permanently forward to hi@dat-ecosystem.org +2. We would be happy if all emails sent and received by any of the old email addresses could be copied or forwarded once to hi@dat-ecosystem.org +3. We want to cause as little work as possible. The main domain these days is https://dat-ecosystem.org and old pages are kept, because a lot of links exist that point to them and that is why we want to add the deprecation notice to all domains we haven't yet. We do have github repositories and github pages for all old dat related websites, but as you noticed, some of them are currently not active sadly (such as dat-data.com) and we plan to restore them showing the original website and the deprecation notice to forward to the dat-ecosystem.org website. +4. One domain missing from the list is `https://dat.land` and also `https://try-dat.com`, which have been used in the past, but I assume they expired. Too bad, but it is what it is i guess, but otherwise we'd be happy to re-activate them as well. +5. The https://dat-ecosystem.org domain is currently held on behalf of dat-ecosystem by the company behind the dat-ecosystem project "datdot". We did set up a zoho email account, because zoho provides a free custom domain email account and we could not find any other provider who does that. These days, dat-ecosystem consortium uses "discord app" to communicate and mirrors everything to an instance of the dat project "cabal chat" (a p2p chat system), so if discord ever has problems, we still have the cabal chat running with a copy of all messages and the ability to communicate through a dat powered p2p chat system. +6. One additional question we have is whether it would be a lot of effort to establish a mailing list. In the past few years we have been using a service hosted by https://riseup.net/ to manage our mailing list, but the sad part is the mail address ends in riseup.net and we would definitely be happier if we could create something like `news@dat-ecosystem.org` or `mailinglist@dat-ecosystem.org`. If this causes additional inconvenience though we can keep it the way it is. diff --git a/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/intake_form_filledout.pdf b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/intake_form_filledout.pdf new file mode 100644 index 0000000..c4d53e0 Binary files /dev/null and b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/intake_form_filledout.pdf differ diff --git a/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/proof_of_501c3_apereo.pdf b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/proof_of_501c3_apereo.pdf new file mode 100644 index 0000000..3ffdee2 Binary files /dev/null and b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/proof_of_501c3_apereo.pdf differ diff --git a/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/questionaire.pdf b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/questionaire.pdf new file mode 100644 index 0000000..c5a1c87 Binary files /dev/null and b/consortium/decisions/2024.06.05-Transition_to_Apero_Foundation as_Fiscal_Sponsor/questionaire.pdf differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..3488e18 --- /dev/null +++ b/index.html @@ -0,0 +1,11 @@ + + + + + + dat - private messaging + + + + + \ No newline at end of file diff --git a/site/.gitignore b/src/.gitignore similarity index 100% rename from site/.gitignore rename to src/.gitignore diff --git a/site/LICENSE b/src/LICENSE similarity index 100% rename from site/LICENSE rename to src/LICENSE diff --git a/site/Readme.md b/src/Readme.md similarity index 100% rename from site/Readme.md rename to src/Readme.md diff --git a/site/index.html b/src/index.html similarity index 100% rename from site/index.html rename to src/index.html diff --git a/site/package-lock.json b/src/package-lock.json similarity index 100% rename from site/package-lock.json rename to src/package-lock.json diff --git a/site/package.json b/src/package.json similarity index 100% rename from site/package.json rename to src/package.json diff --git a/site/postcss.config.js b/src/postcss.config.js similarity index 100% rename from site/postcss.config.js rename to src/postcss.config.js diff --git a/docs/favicon/android-chrome-144x144.png b/src/public/favicon/android-chrome-144x144.png similarity index 100% rename from docs/favicon/android-chrome-144x144.png rename to src/public/favicon/android-chrome-144x144.png diff --git a/docs/favicon/android-chrome-192x192.png b/src/public/favicon/android-chrome-192x192.png similarity index 100% rename from docs/favicon/android-chrome-192x192.png rename to src/public/favicon/android-chrome-192x192.png diff --git a/docs/favicon/android-chrome-256x256.png b/src/public/favicon/android-chrome-256x256.png similarity index 100% rename from docs/favicon/android-chrome-256x256.png rename to src/public/favicon/android-chrome-256x256.png diff --git a/docs/favicon/android-chrome-36x36.png b/src/public/favicon/android-chrome-36x36.png similarity index 100% rename from docs/favicon/android-chrome-36x36.png rename to src/public/favicon/android-chrome-36x36.png diff --git a/docs/favicon/android-chrome-384x384.png b/src/public/favicon/android-chrome-384x384.png similarity index 100% rename from docs/favicon/android-chrome-384x384.png rename to src/public/favicon/android-chrome-384x384.png diff --git a/docs/favicon/android-chrome-48x48.png b/src/public/favicon/android-chrome-48x48.png similarity index 100% rename from docs/favicon/android-chrome-48x48.png rename to src/public/favicon/android-chrome-48x48.png diff --git a/docs/favicon/android-chrome-512x512.png b/src/public/favicon/android-chrome-512x512.png similarity index 100% rename from docs/favicon/android-chrome-512x512.png rename to src/public/favicon/android-chrome-512x512.png diff --git a/docs/favicon/android-chrome-72x72.png b/src/public/favicon/android-chrome-72x72.png similarity index 100% rename from docs/favicon/android-chrome-72x72.png rename to src/public/favicon/android-chrome-72x72.png diff --git a/docs/favicon/android-chrome-96x96.png b/src/public/favicon/android-chrome-96x96.png similarity index 100% rename from docs/favicon/android-chrome-96x96.png rename to src/public/favicon/android-chrome-96x96.png diff --git a/docs/favicon/apple-touch-icon-1024x1024.png b/src/public/favicon/apple-touch-icon-1024x1024.png similarity index 100% rename from docs/favicon/apple-touch-icon-1024x1024.png rename to src/public/favicon/apple-touch-icon-1024x1024.png diff --git a/docs/favicon/apple-touch-icon-114x114.png b/src/public/favicon/apple-touch-icon-114x114.png similarity index 100% rename from docs/favicon/apple-touch-icon-114x114.png rename to src/public/favicon/apple-touch-icon-114x114.png diff --git a/docs/favicon/apple-touch-icon-120x120.png b/src/public/favicon/apple-touch-icon-120x120.png similarity index 100% rename from docs/favicon/apple-touch-icon-120x120.png rename to src/public/favicon/apple-touch-icon-120x120.png diff --git a/docs/favicon/apple-touch-icon-144x144.png b/src/public/favicon/apple-touch-icon-144x144.png similarity index 100% rename from docs/favicon/apple-touch-icon-144x144.png rename to src/public/favicon/apple-touch-icon-144x144.png diff --git a/docs/favicon/apple-touch-icon-152x152.png b/src/public/favicon/apple-touch-icon-152x152.png similarity index 100% rename from docs/favicon/apple-touch-icon-152x152.png rename to src/public/favicon/apple-touch-icon-152x152.png diff --git a/docs/favicon/apple-touch-icon-167x167.png b/src/public/favicon/apple-touch-icon-167x167.png similarity index 100% rename from docs/favicon/apple-touch-icon-167x167.png rename to src/public/favicon/apple-touch-icon-167x167.png diff --git a/docs/favicon/apple-touch-icon-180x180.png b/src/public/favicon/apple-touch-icon-180x180.png similarity index 100% rename from docs/favicon/apple-touch-icon-180x180.png rename to src/public/favicon/apple-touch-icon-180x180.png diff --git a/docs/favicon/apple-touch-icon-57x57.png b/src/public/favicon/apple-touch-icon-57x57.png similarity index 100% rename from docs/favicon/apple-touch-icon-57x57.png rename to src/public/favicon/apple-touch-icon-57x57.png diff --git a/docs/favicon/apple-touch-icon-60x60.png b/src/public/favicon/apple-touch-icon-60x60.png similarity index 100% rename from docs/favicon/apple-touch-icon-60x60.png rename to src/public/favicon/apple-touch-icon-60x60.png diff --git a/docs/favicon/apple-touch-icon-72x72.png b/src/public/favicon/apple-touch-icon-72x72.png similarity index 100% rename from docs/favicon/apple-touch-icon-72x72.png rename to src/public/favicon/apple-touch-icon-72x72.png diff --git a/docs/favicon/apple-touch-icon-76x76.png b/src/public/favicon/apple-touch-icon-76x76.png similarity index 100% rename from docs/favicon/apple-touch-icon-76x76.png rename to src/public/favicon/apple-touch-icon-76x76.png diff --git a/docs/favicon/apple-touch-icon-precomposed.png b/src/public/favicon/apple-touch-icon-precomposed.png similarity index 100% rename from docs/favicon/apple-touch-icon-precomposed.png rename to src/public/favicon/apple-touch-icon-precomposed.png diff --git a/docs/favicon/apple-touch-icon.png b/src/public/favicon/apple-touch-icon.png similarity index 100% rename from docs/favicon/apple-touch-icon.png rename to src/public/favicon/apple-touch-icon.png diff --git a/docs/favicon/favicon-16x16.png b/src/public/favicon/favicon-16x16.png similarity index 100% rename from docs/favicon/favicon-16x16.png rename to src/public/favicon/favicon-16x16.png diff --git a/docs/favicon/favicon-32x32.png b/src/public/favicon/favicon-32x32.png similarity index 100% rename from docs/favicon/favicon-32x32.png rename to src/public/favicon/favicon-32x32.png diff --git a/docs/favicon/favicon-48x48.png b/src/public/favicon/favicon-48x48.png similarity index 100% rename from docs/favicon/favicon-48x48.png rename to src/public/favicon/favicon-48x48.png diff --git a/docs/favicon/favicon.ico b/src/public/favicon/favicon.ico similarity index 100% rename from docs/favicon/favicon.ico rename to src/public/favicon/favicon.ico diff --git a/docs/key.svg b/src/public/key.svg similarity index 100% rename from docs/key.svg rename to src/public/key.svg diff --git a/site/src/App.vue b/src/src/App.vue similarity index 100% rename from site/src/App.vue rename to src/src/App.vue diff --git a/site/src/components/DecryptMessage.vue b/src/src/components/DecryptMessage.vue similarity index 100% rename from site/src/components/DecryptMessage.vue rename to src/src/components/DecryptMessage.vue diff --git a/site/src/components/EncryptMessage.vue b/src/src/components/EncryptMessage.vue similarity index 100% rename from site/src/components/EncryptMessage.vue rename to src/src/components/EncryptMessage.vue diff --git a/site/src/components/GithubIssue.vue b/src/src/components/GithubIssue.vue similarity index 100% rename from site/src/components/GithubIssue.vue rename to src/src/components/GithubIssue.vue diff --git a/site/src/components/KeyManagement.vue b/src/src/components/KeyManagement.vue similarity index 100% rename from site/src/components/KeyManagement.vue rename to src/src/components/KeyManagement.vue diff --git a/site/src/components/PartiallyEncryptedMarkdown.vue b/src/src/components/PartiallyEncryptedMarkdown.vue similarity index 100% rename from site/src/components/PartiallyEncryptedMarkdown.vue rename to src/src/components/PartiallyEncryptedMarkdown.vue diff --git a/site/src/index.css b/src/src/index.css similarity index 100% rename from site/src/index.css rename to src/src/index.css diff --git a/site/src/lib/async.js b/src/src/lib/async.js similarity index 100% rename from site/src/lib/async.js rename to src/src/lib/async.js diff --git a/site/src/lib/crypto.js b/src/src/lib/crypto.js similarity index 100% rename from site/src/lib/crypto.js rename to src/src/lib/crypto.js diff --git a/site/src/main.js b/src/src/main.js similarity index 100% rename from site/src/main.js rename to src/src/main.js diff --git a/site/tailwind.config.js b/src/tailwind.config.js similarity index 100% rename from site/tailwind.config.js rename to src/tailwind.config.js diff --git a/site/vite.config.js b/src/vite.config.js similarity index 100% rename from site/vite.config.js rename to src/vite.config.js diff --git a/docs/assets/index.786c2789.js b/web/assets/index.786c2789.js similarity index 74% rename from docs/assets/index.786c2789.js rename to web/assets/index.786c2789.js index 9109f17..899f509 100644 --- a/docs/assets/index.786c2789.js +++ b/web/assets/index.786c2789.js @@ -1 +1 @@ -var e=Object.assign;import{e as t,c as s,d as l,q as r,o,a as n,b as a,t as i,f as u,r as c,w as y,v as d,g as p,u as b,V as m,F as v,h,i as f,j as g,k}from"./vendor.ed2a223e.js";!function(e=".",t="__import__"){try{self[t]=new Function("u","return import(u)")}catch(s){const l=new URL(e,location),r=e=>{URL.revokeObjectURL(e.src),e.remove()};self[t]=e=>new Promise(((s,o)=>{const n=new URL(e,l);if(self[t].moduleMap[n])return s(self[t].moduleMap[n]);const a=new Blob([`import * as m from '${n}';`,`${t}.moduleMap['${n}']=m;`],{type:"text/javascript"}),i=Object.assign(document.createElement("script"),{type:"module",src:URL.createObjectURL(a),onerror(){o(new Error(`Failed to import: ${e}`)),r(i)},onload(){s(self[t].moduleMap[n]),r(i)}});document.head.appendChild(i)})),self[t].moduleMap={}}}("/organization/assets/");async function w(e){return await crypto.subtle.exportKey("jwk",e)}const x={name:"RSA-OAEP",hash:"SHA-256",publicExponent:new Uint8Array([1,0,1]),modulusLength:4096};async function K(e){return{keyPair:{publicKey:await crypto.subtle.importKey("jwk",e,x,!0,["encrypt"]),privateKey:null},publicKey:e,privateKey:null}}const P=new TextEncoder,E=new TextDecoder;async function j(e,t){return new Uint8Array(await window.crypto.subtle.encrypt(x,e,t))}async function A(e,l,r){const o=P.encode(r);return t(s.encode(e.publicKey,await j(l.keyPair.publicKey,o),await j(e.keyPair.publicKey,o))).match(/.{0,80}/g).join("\n")}async function R(e,t,o){const n=l(o),a=await s.decodeAll(n),[i,u,c]=a;return e&&r(i,e.publicKey)&&null!==e.keyPair.privateKey?{decrypted:await _(e.keyPair.privateKey,c)}:t&&r(i,t.publicKey)?{decrypted:await _(t.keyPair.privateKey,c)}:{decrypted:await _(t.keyPair.privateKey,u),sender:await K(i)}}const C=/(?:[A-Z0-9+/]{4})*(?:[A-Z0-9+/]{2}==|[A-Z0-9+/]{3}=)?/gim;function I(e,t,s){const l=function(e,t=0){C.lastIndex=0;const s=[];let l,r=0;const o=[];for(e=e.replace(/\r/g,"").replace(/\n|\r\n?/gm,((e,t)=>(o.push(t),"")));null!==(l=C.exec(e));){const{length:o}=l[0];0!==o?o0;){let e=o.shift()-n;for(;e>u.length;)n+=u.length,e-=u.length,i=s[++a],u=i.b64||i.text;u=u.substr(0,e)+"\n"+u.substr(e),i.b64?i.b64=u:i.text=u}return s}(s,1e3);for(const r of l)r.b64&&(r.process=R(e,t,r.b64).then((e=>({success:e})),(e=>({error:e}))));return l}async function _(e,t){return E.decode(new Uint8Array(await window.crypto.subtle.decrypt(x,e,t)))}function M(e){e().catch((e=>console.error(e)))}const O={key:0,class:"pl-5"},S=a("h2",{class:"text-xl mt-3 mb-2"},"Get Started",-1),U=u(" Before we can get started please "),z=u(". "),D=a("p",{class:"text-gray-500 mb2"},' If you have been here before and remember your private key you should click on "New Message". ',-1),L={key:1,class:"pl-5"},B=a("h2",{class:"text-xl mt-3 mb-2"},"Hello Again!",-1),J=u(" Before we can get started, please "),G=u(". "),T=a("p",{class:"text-gray-500 mb2"},' If you don\'t have one yet or lost your previous private key, you should click on "First Message". ',-1),Y={key:2},$=a("summary",{class:"text-lg mt-3 mb-2 focus:outline-none cursor-pointer select-none"},"Your Private Key",-1),q=a("p",null,[a("strong",null,"This is important!"),u(". Store this somewhere safe! It allows you to read replies and send new messages! ")],-1),F={class:"border-solid border-gray-300 border p-2 w-full h-40 text-sm select-all overflow-scroll"},W={expose:[],props:{first:{type:Boolean,required:!0},keys:{type:Object}},setup(t){const s=t;function l(){M((async()=>{s.keys.mine=await async function(){const e=await crypto.subtle.generateKey(x,!0,["decrypt","encrypt"]);return{keyPair:e,privateKey:await w(e.privateKey),publicKey:await w(e.publicKey)}}()}))}function r(){const t=function(e){const t=prompt(e);try{return JSON.parse(t)}catch(s){return console.error(s),null}}("Insert your private key below!");null!==t&&M((async()=>{s.keys.mine=await async function(t){const s={privateKey:await crypto.subtle.importKey("jwk",t,x,!0,["decrypt"])},l=e({},t);return delete l.d,delete l.dp,delete l.dq,delete l.q,delete l.qi,delete l.p,l.key_ops=["encrypt"],s.publicKey=(await K(l)).keyPair.publicKey,{keyPair:s,publicKey:l,privateKey:t}}(t)}))}return(e,s)=>t.keys.mine&&t.keys.mine.keyPair||!t.first?t.keys.mine&&t.keys.mine.keyPair||t.first?(o(),n("div",Y,[a("details",{open:t.first,class:"pl-5"},[$,q,a("pre",F,i(JSON.stringify(t.keys.mine.privateKey,null,2)),1)],8,["open"])])):(o(),n("div",L,[B,a("p",{class:"text-gray-500 mb-2"},[J,a("button",{tabindex:"0",onClick:r,class:"focus:outline-none mr-2 bg-yellow-200 rounded-md px-2 py-1 hover:bg-yellow-400 focus:bg-yellow-300"}," import your private key "),G]),T])):(o(),n("div",O,[S,a("p",{class:"text-gray-500 mb2"},[U,a("button",{tabindex:"0",onClick:l,class:"focus:outline-none mr-2 bg-yellow-200 rounded-md px-2 py-1 hover:bg-yellow-400 focus:bg-yellow-300"}," create a private key "),z]),D]))}},N={key:0},V=a("h3",{class:"mb-2 mt-3 font-semibold"},"Enter your message to us below ↓",-1),X={key:0},H=a("h3",{class:"mb-2 mt-3 font-semibold"},"Your Encrypted Message",-1),Z=a("p",null," You can also manually copy the message below to our issue form, or send it to us by any other means. ",-1),Q={readonly:"",class:"border-solid border-gray-300 border p-2 w-full h-40 text-sm select-all overflow-scroll wrap"},ee={expose:[],props:{keys:{type:Object}},setup(e){const t=e,s=c(""),l=c("");function r(){M((async()=>{l.value=await A(t.keys.mine,t.keys.theirs,s.value)}))}return(t,u)=>e.keys.mine&&e.keys.theirs?(o(),n("div",N,[V,y(a("textarea",{onInput:r,"onUpdate:modelValue":u[1]||(u[1]=e=>s.value=e),class:"border-solid border-black border p-2 w-full h-40 text-sm mb-3"},null,544),[[d,s.value]]),""!==l.value?(o(),n("div",X,[a("p",null,[a("a",{class:"focus:outline-none mr-2 bg-yellow-200 rounded-md px-2 py-1 hover:bg-yellow-400 focus:bg-yellow-300",href:`https://github.com/dat-ecosystem/organization/issues/new?title=${encodeURIComponent("Message to the consortium")}&body=${encodeURIComponent(`Private Message:\n\n\n${l.value}\n`)}`,target:"_blank"}," Open github issue form with encrypted text prefilled ",8,["href"])]),H,Z,a("pre",Q,i(l.value),1)])):p("",!0)])):p("",!0)}},te={key:0},se=a("h3",{class:"mb-2 mt-3 bold font-semibold"},"Enter an encrypted message ↓",-1),le={key:0},re=a("h3",{class:"mb-2 mt-3 bold font-semibold"},"Decrypted Message",-1),oe={readonly:"",class:"border-solid border-gray-300 border p-2 w-full h-40 text-sm"},ne={key:1},ae={key:2},ie=a("h2",{class:"mb-2 mt-3 text-lg"},"Reply to sender",-1),ue={expose:[],props:{keys:{type:Object}},setup(e){const t=e,s=c(""),l=c(""),r=c(null),u=c(void 0);function b(){let e=0;M((async()=>{const o=++e;l.value="",u.value=void 0,r.value=null;try{const r=await R(t.keys.theirs,t.keys.mine,s.value.replace(/\n/gm,"").trim());o===e&&(l.value=r.decrypted,u.value=r.sender)}catch(n){r.value=n,console.error(n)}}))}return(c,m)=>e.keys.mine?(o(),n("div",te,[se,y(a("textarea",{onInput:b,"onUpdate:modelValue":m[1]||(m[1]=e=>s.value=e),class:"border-solid border-black border p-2 w-full h-40 text-sm"},null,544),[[d,s.value]]),""!==l.value?(o(),n("div",le,[re,a("textarea",oe,i(l.value),1)])):p("",!0),r.value?(o(),n("div",ne," Error occured while decryption. ")):p("",!0),u.value?(o(),n("div",ae,[ie,a(ee,{keys:{mine:t.keys.mine,theirs:u.value}},null,8,["keys"])])):p("",!0)])):p("",!0)}},ce={expose:[],props:{parts:{type:Array,default:[]}},setup(e){const t=e,s=c(Date.now());for(const l of t.parts)l.process&&l.process.then((({success:e,error:t})=>{l.success=e,l.error=t,s.value=Date.now()}));return(e,s)=>(o(),n(b(m),{class:"markdown-body",source:t.parts.map((e=>e.text?e.text:e.success?e.success.decrypted:e.error?`${e.b64}`:`_(Decrypting: ${e.b64.substr(0,6)}...)_`)).join(""),html:!0,linkify:!0},null,8,["source"]))}},ye={key:0},de={class:"bg-gray-100 p-3"},pe=a("label",{for:"issue",class:"font-semibold"},"Github Issue:",-1),be={key:0},me=u("["),ve=u("]"),he={key:0,class:"color-gray"},fe={key:1},ge={key:2,class:"mt-5"},ke={class:"border-solid border-l-2 pl-2 border-gray-300 mb-5"},we={class:"font-semibold"},xe={class:"font-semibold"},Ke=a("h2",null,"Reply",-1),Pe={key:0},Ee=a("h3",{class:"mb-2 mt-3 font-semibold"},"Your Encrypted Reply",-1),je=u(" Unfortunately we can not prefill this for you. You need to copy-paste this "),Ae=u(". "),Re={readonly:"",class:"border-solid border-gray-300 border p-2 w-full h-40 text-sm select-all overflow-scroll wrap"},Ce={expose:[],props:{repo:{type:String,required:!0},keys:{type:Object}},setup(t){const s=t,l=c([]),r=c(null),b=c(null),m=c(!1),g=c(null),k=c(null),w=c(null);let x=null,K=0;function P(){M((async()=>{w.value=await A(s.keys.mine,s.keys.theirs,k.value)}))}function E(t){if(t instanceof KeyboardEvent&&"Enter"!==t.code)return;K+=1;const o=K;null!==x&&(x(),x=null),b.value=null,l.value=null,m.value=!0,g.value=null,(async()=>{const t=new f.CancelToken((e=>{x=e})),o=parseInt(r.value.value);if(isNaN(o)||o===1/0||o===-1/0)throw new Error("The issue needs to be a valid number");if(o<1)throw new Error("We need positive numbers");const n=`https://api.github.com/repos/${s.repo}/issues/${o}`,a=await f.get(n,{cancelToken:t}),i=await f.get(a.data.comments_url,{cancelToken:t});b.value=e(e({},a.data),{parts:I(s.keys.theirs,s.keys.mine,a.data.body)}),l.value=i.data.map(((t,l)=>e(e({},t),{parts:I(s.keys.theirs,s.keys.mine,t.body)})))})().then((()=>{o===K&&(m.value=!1)}),(e=>{o===K&&(m.value=!1,g.value=e),console.warn(e)}))}return(e,s)=>t.keys.mine&&t.keys.mine.privateKey?(o(),n("div",ye,[a("div",de,[pe,u(" "+i(`https://github.com/${t.repo}/issue/`),1),a("input",{ref:r,name:"issue",onChange:E,onKeydown:E,class:"border m"},null,544),!m.value&&b.value?(o(),n("span",be,[me,a("a",{href:`${b.value.html_url}`,target:"_blank",class:"text-blue-800 hover:underline"},"Link",8,["href"]),ve])):p("",!0)]),m.value?(o(),n("div",he," ... loading ... ")):p("",!0),!m.value&&g.value?(o(),n("div",fe,i(g.value.message),1)):p("",!0),!m.value&&b.value?(o(),n("div",ge,[a("div",ke,[a("div",we,i(`@${b.value.user.login}`),1),a(ce,{parts:b.value.parts},null,8,["parts"])]),(o(!0),n(v,null,h(l.value,(e=>(o(),n("div",{key:`${e.id}`,class:"border-solid border-l pl-4 border-gray-300 mb-5"},[a("div",xe,i(`@${e.user.login}`),1),a(ce,{parts:e.parts},null,8,["parts"])])))),128)),a("div",null,[Ke,y(a("textarea",{onInput:P,"onUpdate:modelValue":s[1]||(s[1]=e=>k.value=e),class:"border-solid border-black border p-2 w-full h-40 text-sm"},null,544),[[d,k.value]]),w.value?(o(),n("div",Pe,[Ee,a("p",null,[je,a("a",{href:`${b.value.html_url}#issuecomment-new`,target:"_blank",class:"text-blue-800 hover:underline"},"here",8,["href"]),Ae]),a("pre",Re,i(w.value),1)])):p("",!0)])])):p("",!0)])):p("",!0)}};const Ie={class:"container mx-auto lg px-4 min-h-screen bg-white pb-10"},_e=a("h1",{class:"text-4xl pt-3 mb-1"},[a("img",{src:"/organization/key.svg",title:"key icon",style:{width:"1em",height:"1em",display:"inline-block"}}),u(" Dat Ecosystem")],-1),Me=a("sub",{class:"text-lg mb-4 block pl-11 text-gray-600"},"Private messaging with the Consortium.",-1),Oe=a("hr",null,null,-1),Se=a("div",{class:"bg-gray-100 p-2"},[a("p",{class:"mb-2"},[u(" The Consortium of the "),a("a",{href:"https://github.com/dat-ecosystem/organization",target:"_blank",class:"text-blue-800 hover:underline"},"Dat Ecosystem"),u(" can be contacted through "),a("a",{href:"https://github.com/dat-ecosystem/organization/issues"},"issues on the github"),u(". ")]),a("p",{class:"mb-2"},[u(" Sadly, github "),a("a",{href:"https://github.com/isaacs/github/issues/37#issuecomment-787800884",target:"_blank",class:"text-blue-800 hover:underline"},"doesn't support private messages"),u(", but with the help this website you can encrypt message to us! ")]),a("p",null,[u(" This webpage uses "),a("a",{href:"https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto",target:"_blank",class:"text-blue-800 hover:underline"},"browser provided crypto"),u(" and nothing you enter here gets sent to a server! ")])],-1),Ue={class:"opacity-50 select-none"},ze=a("summary",null,"(Public Key of the Consortium)",-1),De={key:0,class:"border p-2 overflow-scroll text-sm select-all"},Le={key:0,class:"flex justify-right"},Be={class:"flex mt-4"},Je=a("div",{class:"flex-grow border-b-2"},null,-1);k({expose:[],setup(e){const t=c(Date.now()),s=c();function l(){confirm("Are you sure you want to reset this session? Did you copy your private key?")&&(t.value=Date.now(),r.mine=null)}s.value="first-issue";const r=g({mine:null,theirs:null});return function(e,t){try{K(e).then(t,(e=>{console.warn(e),t(null)}))}catch(s){console.warn(s),t(null)}}({alg:"RSA-OAEP-256",e:"AQAB",ext:!0,key_ops:["encrypt"],kty:"RSA",n:"rFjnlx9MtwsTE7TLOUaIDzLzZ8ESCDKhmUYxX6PVBsBbCG3ArwRCm191Yl8weBnoUUjIYO_xbHzxuWKwd4pkJzLjFe7sHat2-LtDKl6X5Cg84gxqwzXyRXC7LEC4ki8gb1Z0Gn733gfl5GKUjhIh_umJ2JtG6-FAAB79gKpI6M4jIFRvWTvVWtdPBmR_MDd7jrvPtg5IjPmo0YjVI3a7hy2RSuSEdUc9mKHBo9kCDRKjS5lP0rkciTLbehFTYd-y5qvIVFUAJG4bSewfBSsmf9gQzBdyLA5Oi8NfzyXnB6I7iCJ4VP_xiBL4oavsOc4SpHPo8EmpKyGDanyWNuPMJzHzSei5JjKnMqQGNiEwIamxzZLjnOKOyK4ctzfzHpWjXm-GZCWNMfqJf9hhXRkIh_pevWbR3c4g4ZcmrB_9JtTuoQ6YdGc3sZtR272i731L5waWHzngRwMq33QQDpoAKZgJ-yIMcB4oKowCHbzFfGIHOQqvO5SmP6cBWP_GSlEevIk8eJuCuGPCJkA9MTMRAi4kh738vFvYvFCEWfl7ov0oK9XXcAqYt_XoTEVhcEgbX4PkwLuVXWAC3VafMfLJH9tu19cvEN5cYq7k7DLJ5GtcN_YpaqGenY9JYq6cmpXuAlyRRPMED7pM4w__f3QRa9BhRciGV755W-Fgj3bD1O0"},(e=>r.theirs=e)),(e,u)=>(o(),n("div",Ie,[_e,Me,Oe,Se,a("details",Ue,[ze,b(r).theirs?(o(),n("pre",De,i(JSON.stringify(b(r).theirs.publicKey,null,2)),1)):p("",!0)]),b(r).mine?(o(),n("div",Le,[a("button",{tabindex:"0",onClick:l,class:"mt-2 focus:outline-none mr-2 bg-red-200 rounded-md px-2 py-1 hover:bg-red-400 focus:bg-red-300"}," Reset Everything ")])):p("",!0),(o(),n("div",{key:t.value},[a("div",Be,[(o(),n(v,null,h([{code:"first-issue",name:"First message"},{code:"second-issue",name:"New message"},{code:"follow-up",name:"Follow up"},{code:"decrypt",name:"Decrypt message"}],(e=>a("button",{key:e.code,tabindex:"0",onClick:()=>{s.value=e.code},class:"focus:outline-none p-2 border-b-2 "+(s.value===e.code?"border-yellow-400":"focus:border-grey-300 hover:border-yellow-200")},i(e.name),11,["onClick"]))),64)),Je]),a(W,{keys:b(r),first:"first-issue"===s.value},null,8,["keys","first"]),a("div",{class:["block",{hidden:"first-issue"!==s.value}]},[a(ee,{keys:b(r)},null,8,["keys"])],2),a("div",{class:["block",{hidden:"second-issue"!==s.value}]},[a(ee,{keys:b(r)},null,8,["keys"])],2),a("div",{class:["block",{hidden:"follow-up"!==s.value}]},[a(Ce,{repo:"dat-ecosystem/organization",keys:b(r)},null,8,["keys"])],2),a("div",{class:["block",{hidden:"decrypt"!==s.value}]},[a(ue,{keys:b(r)},null,8,["keys"])],2)]))]))}}).mount("#app"); +var e=Object.assign;import{e as t,c as s,d as l,q as r,o,a as n,b as a,t as i,f as u,r as c,w as y,v as d,g as p,u as b,V as m,F as v,h,i as f,j as g,k}from"./vendor.ed2a223e.js";!function(e=".",t="__import__"){try{self[t]=new Function("u","return import(u)")}catch(s){const l=new URL(e,location),r=e=>{URL.revokeObjectURL(e.src),e.remove()};self[t]=e=>new Promise(((s,o)=>{const n=new URL(e,l);if(self[t].moduleMap[n])return s(self[t].moduleMap[n]);const a=new Blob([`import * as m from '${n}';`,`${t}.moduleMap['${n}']=m;`],{type:"text/javascript"}),i=Object.assign(document.createElement("script"),{type:"module",src:URL.createObjectURL(a),onerror(){o(new Error(`Failed to import: ${e}`)),r(i)},onload(){s(self[t].moduleMap[n]),r(i)}});document.head.appendChild(i)})),self[t].moduleMap={}}}("/organization/assets/");async function w(e){return await crypto.subtle.exportKey("jwk",e)}const x={name:"RSA-OAEP",hash:"SHA-256",publicExponent:new Uint8Array([1,0,1]),modulusLength:4096};async function K(e){return{keyPair:{publicKey:await crypto.subtle.importKey("jwk",e,x,!0,["encrypt"]),privateKey:null},publicKey:e,privateKey:null}}const P=new TextEncoder,E=new TextDecoder;async function j(e,t){return new Uint8Array(await window.crypto.subtle.encrypt(x,e,t))}async function A(e,l,r){const o=P.encode(r);return t(s.encode(e.publicKey,await j(l.keyPair.publicKey,o),await j(e.keyPair.publicKey,o))).match(/.{0,80}/g).join("\n")}async function R(e,t,o){const n=l(o),a=await s.decodeAll(n),[i,u,c]=a;return e&&r(i,e.publicKey)&&null!==e.keyPair.privateKey?{decrypted:await _(e.keyPair.privateKey,c)}:t&&r(i,t.publicKey)?{decrypted:await _(t.keyPair.privateKey,c)}:{decrypted:await _(t.keyPair.privateKey,u),sender:await K(i)}}const C=/(?:[A-Z0-9+/]{4})*(?:[A-Z0-9+/]{2}==|[A-Z0-9+/]{3}=)?/gim;function I(e,t,s){const l=function(e,t=0){C.lastIndex=0;const s=[];let l,r=0;const o=[];for(e=e.replace(/\r/g,"").replace(/\n|\r\n?/gm,((e,t)=>(o.push(t),"")));null!==(l=C.exec(e));){const{length:o}=l[0];0!==o?o0;){let e=o.shift()-n;for(;e>u.length;)n+=u.length,e-=u.length,i=s[++a],u=i.b64||i.text;u=u.substr(0,e)+"\n"+u.substr(e),i.b64?i.b64=u:i.text=u}return s}(s,1e3);for(const r of l)r.b64&&(r.process=R(e,t,r.b64).then((e=>({success:e})),(e=>({error:e}))));return l}async function _(e,t){return E.decode(new Uint8Array(await window.crypto.subtle.decrypt(x,e,t)))}function M(e){e().catch((e=>console.error(e)))}const O={key:0,class:"pl-5"},S=a("h2",{class:"text-xl mt-3 mb-2"},"Get Started",-1),U=u(" Before we can get started please "),z=u(". "),D=a("p",{class:"text-gray-500 mb2"},' If you have been here before and remember your private key you should click on "New Message". ',-1),L={key:1,class:"pl-5"},B=a("h2",{class:"text-xl mt-3 mb-2"},"Hello Again!",-1),J=u(" Before we can get started, please "),G=u(". "),T=a("p",{class:"text-gray-500 mb2"},' If you don\'t have one yet or lost your previous private key, you should click on "First Message". ',-1),Y={key:2},$=a("summary",{class:"text-lg mt-3 mb-2 focus:outline-none cursor-pointer select-none"},"Your Private Key",-1),q=a("p",null,[a("strong",null,"This is important!"),u(". Store this somewhere safe! It allows you to read replies and send new messages! ")],-1),F={class:"border-solid border-gray-300 border p-2 w-full h-40 text-sm select-all overflow-scroll"},W={expose:[],props:{first:{type:Boolean,required:!0},keys:{type:Object}},setup(t){const s=t;function l(){M((async()=>{s.keys.mine=await async function(){const e=await crypto.subtle.generateKey(x,!0,["decrypt","encrypt"]);return{keyPair:e,privateKey:await w(e.privateKey),publicKey:await w(e.publicKey)}}()}))}function r(){const t=function(e){const t=prompt(e);try{return JSON.parse(t)}catch(s){return console.error(s),null}}("Insert your private key below!");null!==t&&M((async()=>{s.keys.mine=await async function(t){const s={privateKey:await crypto.subtle.importKey("jwk",t,x,!0,["decrypt"])},l=e({},t);return delete l.d,delete l.dp,delete l.dq,delete l.q,delete l.qi,delete l.p,l.key_ops=["encrypt"],s.publicKey=(await K(l)).keyPair.publicKey,{keyPair:s,publicKey:l,privateKey:t}}(t)}))}return(e,s)=>t.keys.mine&&t.keys.mine.keyPair||!t.first?t.keys.mine&&t.keys.mine.keyPair||t.first?(o(),n("div",Y,[a("details",{open:t.first,class:"pl-5"},[$,q,a("pre",F,i(JSON.stringify(t.keys.mine.privateKey,null,2)),1)],8,["open"])])):(o(),n("div",L,[B,a("p",{class:"text-gray-500 mb-2"},[J,a("button",{tabindex:"0",onClick:r,class:"focus:outline-none mr-2 bg-yellow-200 rounded-md px-2 py-1 hover:bg-yellow-400 focus:bg-yellow-300"}," import your private key "),G]),T])):(o(),n("div",O,[S,a("p",{class:"text-gray-500 mb2"},[U,a("button",{tabindex:"0",onClick:l,class:"focus:outline-none mr-2 bg-yellow-200 rounded-md px-2 py-1 hover:bg-yellow-400 focus:bg-yellow-300"}," create a private key "),z]),D]))}},N={key:0},V=a("h3",{class:"mb-2 mt-3 font-semibold"},"Enter your message to us below ↓",-1),X={key:0},H=a("h3",{class:"mb-2 mt-3 font-semibold"},"Your Encrypted Message",-1),Z=a("p",null," You can also manually copy the message below to our issue form, or send it to us by any other means. ",-1),Q={readonly:"",class:"border-solid border-gray-300 border p-2 w-full h-40 text-sm select-all overflow-scroll wrap"},ee={expose:[],props:{keys:{type:Object}},setup(e){const t=e,s=c(""),l=c("");function r(){M((async()=>{l.value=await A(t.keys.mine,t.keys.theirs,s.value)}))}return(t,u)=>e.keys.mine&&e.keys.theirs?(o(),n("div",N,[V,y(a("textarea",{onInput:r,"onUpdate:modelValue":u[1]||(u[1]=e=>s.value=e),class:"border-solid border-black border p-2 w-full h-40 text-sm mb-3"},null,544),[[d,s.value]]),""!==l.value?(o(),n("div",X,[a("p",null,[a("a",{class:"focus:outline-none mr-2 bg-yellow-200 rounded-md px-2 py-1 hover:bg-yellow-400 focus:bg-yellow-300",href:`https://github.com/dat-ecosystem/organization/issues/new?title=${encodeURIComponent("Message to the consortium")}&body=${encodeURIComponent(`Private Message:\n\n\n${l.value}\n`)}`,target:"_blank"}," Open github issue form with encrypted text prefilled ",8,["href"])]),H,Z,a("pre",Q,i(l.value),1)])):p("",!0)])):p("",!0)}},te={key:0},se=a("h3",{class:"mb-2 mt-3 bold font-semibold"},"Enter an encrypted message ↓",-1),le={key:0},re=a("h3",{class:"mb-2 mt-3 bold font-semibold"},"Decrypted Message",-1),oe={readonly:"",class:"border-solid border-gray-300 border p-2 w-full h-40 text-sm"},ne={key:1},ae={key:2},ie=a("h2",{class:"mb-2 mt-3 text-lg"},"Reply to sender",-1),ue={expose:[],props:{keys:{type:Object}},setup(e){const t=e,s=c(""),l=c(""),r=c(null),u=c(void 0);function b(){let e=0;M((async()=>{const o=++e;l.value="",u.value=void 0,r.value=null;try{const r=await R(t.keys.theirs,t.keys.mine,s.value.replace(/\n/gm,"").trim());o===e&&(l.value=r.decrypted,u.value=r.sender)}catch(n){r.value=n,console.error(n)}}))}return(c,m)=>e.keys.mine?(o(),n("div",te,[se,y(a("textarea",{onInput:b,"onUpdate:modelValue":m[1]||(m[1]=e=>s.value=e),class:"border-solid border-black border p-2 w-full h-40 text-sm"},null,544),[[d,s.value]]),""!==l.value?(o(),n("div",le,[re,a("textarea",oe,i(l.value),1)])):p("",!0),r.value?(o(),n("div",ne," Error occured while decryption. ")):p("",!0),u.value?(o(),n("div",ae,[ie,a(ee,{keys:{mine:t.keys.mine,theirs:u.value}},null,8,["keys"])])):p("",!0)])):p("",!0)}},ce={expose:[],props:{parts:{type:Array,default:[]}},setup(e){const t=e,s=c(Date.now());for(const l of t.parts)l.process&&l.process.then((({success:e,error:t})=>{l.success=e,l.error=t,s.value=Date.now()}));return(e,s)=>(o(),n(b(m),{class:"markdown-body",source:t.parts.map((e=>e.text?e.text:e.success?e.success.decrypted:e.error?`${e.b64}`:`_(Decrypting: ${e.b64.substr(0,6)}...)_`)).join(""),html:!0,linkify:!0},null,8,["source"]))}},ye={key:0},de={class:"bg-gray-100 p-3"},pe=a("label",{for:"issue",class:"font-semibold"},"Github Issue:",-1),be={key:0},me=u("["),ve=u("]"),he={key:0,class:"color-gray"},fe={key:1},ge={key:2,class:"mt-5"},ke={class:"border-solid border-l-2 pl-2 border-gray-300 mb-5"},we={class:"font-semibold"},xe={class:"font-semibold"},Ke=a("h2",null,"Reply",-1),Pe={key:0},Ee=a("h3",{class:"mb-2 mt-3 font-semibold"},"Your Encrypted Reply",-1),je=u(" Unfortunately we can not prefill this for you. You need to copy-paste this "),Ae=u(". "),Re={readonly:"",class:"border-solid border-gray-300 border p-2 w-full h-40 text-sm select-all overflow-scroll wrap"},Ce={expose:[],props:{repo:{type:String,required:!0},keys:{type:Object}},setup(t){const s=t,l=c([]),r=c(null),b=c(null),m=c(!1),g=c(null),k=c(null),w=c(null);let x=null,K=0;function P(){M((async()=>{w.value=await A(s.keys.mine,s.keys.theirs,k.value)}))}function E(t){if(t instanceof KeyboardEvent&&"Enter"!==t.code)return;K+=1;const o=K;null!==x&&(x(),x=null),b.value=null,l.value=null,m.value=!0,g.value=null,(async()=>{const t=new f.CancelToken((e=>{x=e})),o=parseInt(r.value.value);if(isNaN(o)||o===1/0||o===-1/0)throw new Error("The issue needs to be a valid number");if(o<1)throw new Error("We need positive numbers");const n=`https://api.github.com/repos/${s.repo}/issues/${o}`,a=await f.get(n,{cancelToken:t}),i=await f.get(a.data.comments_url,{cancelToken:t});b.value=e(e({},a.data),{parts:I(s.keys.theirs,s.keys.mine,a.data.body)}),l.value=i.data.map(((t,l)=>e(e({},t),{parts:I(s.keys.theirs,s.keys.mine,t.body)})))})().then((()=>{o===K&&(m.value=!1)}),(e=>{o===K&&(m.value=!1,g.value=e),console.warn(e)}))}return(e,s)=>t.keys.mine&&t.keys.mine.privateKey?(o(),n("div",ye,[a("div",de,[pe,u(" "+i(`https://github.com/${t.repo}/issue/`),1),a("input",{ref:r,name:"issue",onChange:E,onKeydown:E,class:"border m"},null,544),!m.value&&b.value?(o(),n("span",be,[me,a("a",{href:`${b.value.html_url}`,target:"_blank",class:"text-blue-800 hover:underline"},"Link",8,["href"]),ve])):p("",!0)]),m.value?(o(),n("div",he," ... loading ... ")):p("",!0),!m.value&&g.value?(o(),n("div",fe,i(g.value.message),1)):p("",!0),!m.value&&b.value?(o(),n("div",ge,[a("div",ke,[a("div",we,i(`@${b.value.user.login}`),1),a(ce,{parts:b.value.parts},null,8,["parts"])]),(o(!0),n(v,null,h(l.value,(e=>(o(),n("div",{key:`${e.id}`,class:"border-solid border-l pl-4 border-gray-300 mb-5"},[a("div",xe,i(`@${e.user.login}`),1),a(ce,{parts:e.parts},null,8,["parts"])])))),128)),a("div",null,[Ke,y(a("textarea",{onInput:P,"onUpdate:modelValue":s[1]||(s[1]=e=>k.value=e),class:"border-solid border-black border p-2 w-full h-40 text-sm"},null,544),[[d,k.value]]),w.value?(o(),n("div",Pe,[Ee,a("p",null,[je,a("a",{href:`${b.value.html_url}#issuecomment-new`,target:"_blank",class:"text-blue-800 hover:underline"},"here",8,["href"]),Ae]),a("pre",Re,i(w.value),1)])):p("",!0)])])):p("",!0)])):p("",!0)}};const Ie={class:"container mx-auto lg px-4 min-h-screen bg-white pb-10"},_e=a("h1",{class:"text-4xl pt-3 mb-1"},[a("img",{src:"key.svg",title:"key icon",style:{width:"1em",height:"1em",display:"inline-block"}}),u(" Dat Ecosystem")],-1),Me=a("sub",{class:"text-lg mb-4 block pl-11 text-gray-600"},"Private messaging with the Consortium.",-1),Oe=a("hr",null,null,-1),Se=a("div",{class:"bg-gray-100 p-2"},[a("p",{class:"mb-2"},[u(" The Consortium of the "),a("a",{href:"https://github.com/dat-ecosystem/organization",target:"_blank",class:"text-blue-800 hover:underline"},"Dat Ecosystem"),u(" can be contacted through "),a("a",{href:"https://github.com/dat-ecosystem/organization/issues"},"issues on the github"),u(". ")]),a("p",{class:"mb-2"},[u(" Sadly, github "),a("a",{href:"https://github.com/isaacs/github/issues/37#issuecomment-787800884",target:"_blank",class:"text-blue-800 hover:underline"},"doesn't support private messages"),u(", but with the help this website you can encrypt message to us! ")]),a("p",null,[u(" This webpage uses "),a("a",{href:"https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto",target:"_blank",class:"text-blue-800 hover:underline"},"browser provided crypto"),u(" and nothing you enter here gets sent to a server! ")])],-1),Ue={class:"opacity-50 select-none"},ze=a("summary",null,"(Public Key of the Consortium)",-1),De={key:0,class:"border p-2 overflow-scroll text-sm select-all"},Le={key:0,class:"flex justify-right"},Be={class:"flex mt-4"},Je=a("div",{class:"flex-grow border-b-2"},null,-1);k({expose:[],setup(e){const t=c(Date.now()),s=c();function l(){confirm("Are you sure you want to reset this session? Did you copy your private key?")&&(t.value=Date.now(),r.mine=null)}s.value="first-issue";const r=g({mine:null,theirs:null});return function(e,t){try{K(e).then(t,(e=>{console.warn(e),t(null)}))}catch(s){console.warn(s),t(null)}}({alg:"RSA-OAEP-256",e:"AQAB",ext:!0,key_ops:["encrypt"],kty:"RSA",n:"rFjnlx9MtwsTE7TLOUaIDzLzZ8ESCDKhmUYxX6PVBsBbCG3ArwRCm191Yl8weBnoUUjIYO_xbHzxuWKwd4pkJzLjFe7sHat2-LtDKl6X5Cg84gxqwzXyRXC7LEC4ki8gb1Z0Gn733gfl5GKUjhIh_umJ2JtG6-FAAB79gKpI6M4jIFRvWTvVWtdPBmR_MDd7jrvPtg5IjPmo0YjVI3a7hy2RSuSEdUc9mKHBo9kCDRKjS5lP0rkciTLbehFTYd-y5qvIVFUAJG4bSewfBSsmf9gQzBdyLA5Oi8NfzyXnB6I7iCJ4VP_xiBL4oavsOc4SpHPo8EmpKyGDanyWNuPMJzHzSei5JjKnMqQGNiEwIamxzZLjnOKOyK4ctzfzHpWjXm-GZCWNMfqJf9hhXRkIh_pevWbR3c4g4ZcmrB_9JtTuoQ6YdGc3sZtR272i731L5waWHzngRwMq33QQDpoAKZgJ-yIMcB4oKowCHbzFfGIHOQqvO5SmP6cBWP_GSlEevIk8eJuCuGPCJkA9MTMRAi4kh738vFvYvFCEWfl7ov0oK9XXcAqYt_XoTEVhcEgbX4PkwLuVXWAC3VafMfLJH9tu19cvEN5cYq7k7DLJ5GtcN_YpaqGenY9JYq6cmpXuAlyRRPMED7pM4w__f3QRa9BhRciGV755W-Fgj3bD1O0"},(e=>r.theirs=e)),(e,u)=>(o(),n("div",Ie,[_e,Me,Oe,Se,a("details",Ue,[ze,b(r).theirs?(o(),n("pre",De,i(JSON.stringify(b(r).theirs.publicKey,null,2)),1)):p("",!0)]),b(r).mine?(o(),n("div",Le,[a("button",{tabindex:"0",onClick:l,class:"mt-2 focus:outline-none mr-2 bg-red-200 rounded-md px-2 py-1 hover:bg-red-400 focus:bg-red-300"}," Reset Everything ")])):p("",!0),(o(),n("div",{key:t.value},[a("div",Be,[(o(),n(v,null,h([{code:"first-issue",name:"First message"},{code:"second-issue",name:"New message"},{code:"follow-up",name:"Follow up"},{code:"decrypt",name:"Decrypt message"}],(e=>a("button",{key:e.code,tabindex:"0",onClick:()=>{s.value=e.code},class:"focus:outline-none p-2 border-b-2 "+(s.value===e.code?"border-yellow-400":"focus:border-grey-300 hover:border-yellow-200")},i(e.name),11,["onClick"]))),64)),Je]),a(W,{keys:b(r),first:"first-issue"===s.value},null,8,["keys","first"]),a("div",{class:["block",{hidden:"first-issue"!==s.value}]},[a(ee,{keys:b(r)},null,8,["keys"])],2),a("div",{class:["block",{hidden:"second-issue"!==s.value}]},[a(ee,{keys:b(r)},null,8,["keys"])],2),a("div",{class:["block",{hidden:"follow-up"!==s.value}]},[a(Ce,{repo:"dat-ecosystem/organization",keys:b(r)},null,8,["keys"])],2),a("div",{class:["block",{hidden:"decrypt"!==s.value}]},[a(ue,{keys:b(r)},null,8,["keys"])],2)]))]))}}).mount("#app"); diff --git a/docs/assets/index.baa32dc0.css b/web/assets/index.baa32dc0.css similarity index 100% rename from docs/assets/index.baa32dc0.css rename to web/assets/index.baa32dc0.css diff --git a/docs/assets/vendor.ed2a223e.js b/web/assets/vendor.ed2a223e.js similarity index 100% rename from docs/assets/vendor.ed2a223e.js rename to web/assets/vendor.ed2a223e.js diff --git a/site/public/favicon/android-chrome-144x144.png b/web/favicon/android-chrome-144x144.png similarity index 100% rename from site/public/favicon/android-chrome-144x144.png rename to web/favicon/android-chrome-144x144.png diff --git a/site/public/favicon/android-chrome-192x192.png b/web/favicon/android-chrome-192x192.png similarity index 100% rename from site/public/favicon/android-chrome-192x192.png rename to web/favicon/android-chrome-192x192.png diff --git a/site/public/favicon/android-chrome-256x256.png b/web/favicon/android-chrome-256x256.png similarity index 100% rename from site/public/favicon/android-chrome-256x256.png rename to web/favicon/android-chrome-256x256.png diff --git a/site/public/favicon/android-chrome-36x36.png b/web/favicon/android-chrome-36x36.png similarity index 100% rename from site/public/favicon/android-chrome-36x36.png rename to web/favicon/android-chrome-36x36.png diff --git a/site/public/favicon/android-chrome-384x384.png b/web/favicon/android-chrome-384x384.png similarity index 100% rename from site/public/favicon/android-chrome-384x384.png rename to web/favicon/android-chrome-384x384.png diff --git a/site/public/favicon/android-chrome-48x48.png b/web/favicon/android-chrome-48x48.png similarity index 100% rename from site/public/favicon/android-chrome-48x48.png rename to web/favicon/android-chrome-48x48.png diff --git a/site/public/favicon/android-chrome-512x512.png b/web/favicon/android-chrome-512x512.png similarity index 100% rename from site/public/favicon/android-chrome-512x512.png rename to web/favicon/android-chrome-512x512.png diff --git a/site/public/favicon/android-chrome-72x72.png b/web/favicon/android-chrome-72x72.png similarity index 100% rename from site/public/favicon/android-chrome-72x72.png rename to web/favicon/android-chrome-72x72.png diff --git a/site/public/favicon/android-chrome-96x96.png b/web/favicon/android-chrome-96x96.png similarity index 100% rename from site/public/favicon/android-chrome-96x96.png rename to web/favicon/android-chrome-96x96.png diff --git a/site/public/favicon/apple-touch-icon-1024x1024.png b/web/favicon/apple-touch-icon-1024x1024.png similarity index 100% rename from site/public/favicon/apple-touch-icon-1024x1024.png rename to web/favicon/apple-touch-icon-1024x1024.png diff --git a/site/public/favicon/apple-touch-icon-114x114.png b/web/favicon/apple-touch-icon-114x114.png similarity index 100% rename from site/public/favicon/apple-touch-icon-114x114.png rename to web/favicon/apple-touch-icon-114x114.png diff --git a/site/public/favicon/apple-touch-icon-120x120.png b/web/favicon/apple-touch-icon-120x120.png similarity index 100% rename from site/public/favicon/apple-touch-icon-120x120.png rename to web/favicon/apple-touch-icon-120x120.png diff --git a/site/public/favicon/apple-touch-icon-144x144.png b/web/favicon/apple-touch-icon-144x144.png similarity index 100% rename from site/public/favicon/apple-touch-icon-144x144.png rename to web/favicon/apple-touch-icon-144x144.png diff --git a/site/public/favicon/apple-touch-icon-152x152.png b/web/favicon/apple-touch-icon-152x152.png similarity index 100% rename from site/public/favicon/apple-touch-icon-152x152.png rename to web/favicon/apple-touch-icon-152x152.png diff --git a/site/public/favicon/apple-touch-icon-167x167.png b/web/favicon/apple-touch-icon-167x167.png similarity index 100% rename from site/public/favicon/apple-touch-icon-167x167.png rename to web/favicon/apple-touch-icon-167x167.png diff --git a/site/public/favicon/apple-touch-icon-180x180.png b/web/favicon/apple-touch-icon-180x180.png similarity index 100% rename from site/public/favicon/apple-touch-icon-180x180.png rename to web/favicon/apple-touch-icon-180x180.png diff --git a/site/public/favicon/apple-touch-icon-57x57.png b/web/favicon/apple-touch-icon-57x57.png similarity index 100% rename from site/public/favicon/apple-touch-icon-57x57.png rename to web/favicon/apple-touch-icon-57x57.png diff --git a/site/public/favicon/apple-touch-icon-60x60.png b/web/favicon/apple-touch-icon-60x60.png similarity index 100% rename from site/public/favicon/apple-touch-icon-60x60.png rename to web/favicon/apple-touch-icon-60x60.png diff --git a/site/public/favicon/apple-touch-icon-72x72.png b/web/favicon/apple-touch-icon-72x72.png similarity index 100% rename from site/public/favicon/apple-touch-icon-72x72.png rename to web/favicon/apple-touch-icon-72x72.png diff --git a/site/public/favicon/apple-touch-icon-76x76.png b/web/favicon/apple-touch-icon-76x76.png similarity index 100% rename from site/public/favicon/apple-touch-icon-76x76.png rename to web/favicon/apple-touch-icon-76x76.png diff --git a/site/public/favicon/apple-touch-icon-precomposed.png b/web/favicon/apple-touch-icon-precomposed.png similarity index 100% rename from site/public/favicon/apple-touch-icon-precomposed.png rename to web/favicon/apple-touch-icon-precomposed.png diff --git a/site/public/favicon/apple-touch-icon.png b/web/favicon/apple-touch-icon.png similarity index 100% rename from site/public/favicon/apple-touch-icon.png rename to web/favicon/apple-touch-icon.png diff --git a/site/public/favicon/favicon-16x16.png b/web/favicon/favicon-16x16.png similarity index 100% rename from site/public/favicon/favicon-16x16.png rename to web/favicon/favicon-16x16.png diff --git a/site/public/favicon/favicon-32x32.png b/web/favicon/favicon-32x32.png similarity index 100% rename from site/public/favicon/favicon-32x32.png rename to web/favicon/favicon-32x32.png diff --git a/site/public/favicon/favicon-48x48.png b/web/favicon/favicon-48x48.png similarity index 100% rename from site/public/favicon/favicon-48x48.png rename to web/favicon/favicon-48x48.png diff --git a/site/public/favicon/favicon.ico b/web/favicon/favicon.ico similarity index 100% rename from site/public/favicon/favicon.ico rename to web/favicon/favicon.ico diff --git a/docs/index.html b/web/index.html similarity index 56% rename from docs/index.html rename to web/index.html index 7200777..6d3cc1c 100644 --- a/docs/index.html +++ b/web/index.html @@ -2,16 +2,16 @@ - + Dat Ecosystem - Consortium Contact - - - + + +
- + \ No newline at end of file diff --git a/site/public/key.svg b/web/key.svg similarity index 100% rename from site/public/key.svg rename to web/key.svg