diff --git a/README.md b/README.md index 5d64261..d66f7d6 100644 --- a/README.md +++ b/README.md @@ -2,25 +2,97 @@ ![Wallets](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fopenwallet-foundation%2Fdigital-wallet-and-agent-overviews-sig%2Fbadge-info%2Fwallets.json) -The objectives of this SIG is to further develop and maintain the . The overview can be found [here](https://openwallet-foundation.github.io/digital-wallet-and-agent-overviews-sig/). These overview should provide transparency of the characteristics of wallets and agents in order to allow for comparison and effective decision-making on which wallet is applicable for your use case. +The goal of this SIG is to continuously develop and maintain a comprehensive overview of wallets, agents, and more. You can access the overview [here](https://openwallet-foundation.github.io/digital-wallet-and-agent-overviews-sig/). This resource aims to provide transparency regarding the characteristics of wallets and agents, facilitating comparison and informed decision-making for selecting the most suitable wallet for your use case. Additionally, it offers insights into dependencies, algorithms, protocols, and case studies related to wallets and agents. -## Wallet and Agent Overview +## Overview + +This repository is holding multiple JSON files that are used to generate the overview. The elements are each defined with a JSON Schema that is used to validate the input. The JSON Schema can be found in the `schemas` folder. The resources are stored in the `data` folder, where each resource has its own folder. + +```plantuml +@startuml +title Overview + +' Define colors for different types of entities +skinparam class { + BackgroundColor<> LightBlue + BackgroundColor<> LightGreen + BackgroundColor<> LightYellow + BackgroundColor<> LightCoral +} + +' Define entities +class "Wallet and Agent" <> { +} + +class Dependency <> { +} + +class "Case Study" <> { +} + +class "Credential Profile" <> { +} + +class "Credential Format" { +} + +class "Signing Algorithm" { +} + +class "Status Management" { +} + +class "Key Management" { +} + +class "Issuance Protocol" { +} + +class "Presentation Protocol" { +} + +class "Trust Management" { +} + +' Define relationships +"Wallet and Agent" --> Dependency : "1..*" +"Case Study" --> "Wallet and Agent" : "1..*" +"Wallet and Agent" --> "Credential Profile" : "1..*" +"Wallet and Agent" --> "Credential Format" : "1..*" +"Wallet and Agent" --> "Signing Algorithm" : "1..*" +"Wallet and Agent" --> "Status Management" : "1..*" +"Wallet and Agent" --> "Key Management" : "1..*" +"Wallet and Agent" --> "Issuance Protocol" : "1..*" +"Wallet and Agent" --> "Presentation Protocol" : "1..*" +"Wallet and Agent" --> "Trust Management" : "1..*" +"Credential Profile" --> "Credential Format" : "1..*" +"Credential Profile" --> "Signing Algorithm" : "1..*" +"Credential Profile" --> "Status Management" : "1..*" +"Credential Profile" --> "Key Management" : "1..*" +"Credential Profile" --> "Issuance Protocol" : "1..*" +"Credential Profile" --> "Presentation Protocol" : "1..*" +"Credential Profile" --> "Trust Management" : "1..*" + +@enduml +``` + +### Wallet and Agent Overview The core of this project is the overview of digital wallets and agents. It should help users to compare different entries based on objective characetristics like supported algorithms or standards. -## Dependencies +### Dependencies Each wallet and agent is capable to link to relevant dependencies like frameworks or libraries that are relevant. The linking will support the overview of the technology stack of the wallet or agent. We encourage developers to only link to relevant dependencies that are specific for the wallet or agent to avoid a long list of dependencies. The dependencies will be add as a new object in the `dependencies` folder and then linked by the unique filename in each wallet or agent object. To generate the JSON object, you can use the form provided when clicking "Add Dependency" in the upper right corner of the overview. -## Case Studies +### Case Studies We are looking for case studies of the use of wallets and agents in the field. These case studies can be used to show the applicability of the wallets and agents in real life situations. The case studies will be added as a new object in the `case-studies` folder, referencing the wallets or agents by their filename. To generate the JSON object, you can use the form provided when clicking "Add Case Study" in the upper right corner of the overview. There is also the chance to subscribe to our newsletter that will be sent out every month. The newsletter will contain the latest submitted case studies to this overview. You can subscribe to the newsletter by clicking [here](https://openwallet-foundation.github.io/digital-wallet-and-agent-overviews-sig/#/case-studies). -## Credential profiles +### Credential profiles When dealing with digital credentials, it is important to know which credential profiles are supported by the wallet or agent. Each profile is based on specific formats, algorithms or protocols. These resources can be compared objectify in an overview to pick the right profile and therefore the best fitting wallet or agent for a specific use case. The content is based on the [credential format comparison SIG](https://github.com/openwallet-foundation/credential-format-comparison-sig) that got merged into this overview. @@ -30,7 +102,7 @@ This SIG is an open group and we welcome new participants. There is no requireme If you are interested in participating, please join the [OpenWallet Foundation Discord](https://discord.gg/openwalletfoundation) and participate in the discussion in the [#digital-wallet-and-agent-overviews-sig](https://discord.gg/openwalletfoundation) channel. -Upcoming meetings: +**Upcoming meetings:** We meet every second Thursday via Zoom, the next date and time plus a calendar invitation can be found via this [link](https://zoom-lfx.platform.linuxfoundation.org/meeting/92821499615?password=bfd9bdad-249d-454e-97a5-727bc5fc2190). In case you have an [openprofile](https://openprofile.dev/) with the same mail address as your calendar invitation, you can access all the recordings of the past meetings. diff --git a/viewer/scripts/newsletter.mjs b/viewer/scripts/newsletter.mjs index 35c7f49..bbb4cc0 100644 --- a/viewer/scripts/newsletter.mjs +++ b/viewer/scripts/newsletter.mjs @@ -4,14 +4,17 @@ import handlebars from 'handlebars'; import { execSync } from 'child_process'; import {createTransport, createTestAccount, getTestMessageUrl} from 'nodemailer' import Mailjet from 'node-mailjet'; +import {join} from 'path'; config(); -const walletFiles = fs.readdirSync('../wallets'); +const walletsFolder = '../data/wallets'; + +const walletFiles = fs.readdirSync(walletsFolder); const walletCounter = walletFiles.length; const wallets = walletFiles.map(walletFile => { - const content = JSON.parse(fs.readFileSync(`../wallets/${walletFile}`, 'utf8')); + const content = JSON.parse(fs.readFileSync(join(walletsFolder, walletFile), 'utf8')); content.id = walletFile.slice(0, -5); return content; }); @@ -29,6 +32,8 @@ if (!fromDate || !untilDate) { untilDate = untilDate || lastDayOfLastMonth.toISOString().split('T')[0]; } +const caseStudiesFolder = '../data/case-studies'; + // Get the list of files added in the specified date range let caseStudyFiles = execSync(`git log --diff-filter=A --since="${fromDate}" --until="${untilDate}" --name-only --pretty=format:`, { encoding: 'utf8' }) .split('\n') @@ -36,7 +41,7 @@ let caseStudyFiles = execSync(`git log --diff-filter=A --since="${fromDate}" --u if(process.env.LOCAL) { //use all files that are included in the folder - caseStudyFiles = fs.readdirSync('../case-studies').map(file => `case-studies/${file}`); + caseStudyFiles = fs.readdirSync(caseStudiesFolder).map(file => `case-studies/${file}`); } console.log(`Found ${caseStudyFiles.length} new case ${caseStudyFiles.length === 1 ? 'study' : 'studies'}: ${caseStudyFiles.join(', ')}`); @@ -46,7 +51,7 @@ const url = process.env.LOCATION ?? 'https://openwallet-foundation.github.io/dig // format the case studies const caseStudies = caseStudyFiles.map(caseStudy => { const id = caseStudy.split('/')[1].slice(0, -5); - const content = JSON.parse(fs.readFileSync(`../${caseStudy}`, 'utf8')); + const content = JSON.parse(fs.readFileSync(join('../data', caseStudy), 'utf8')); delete content['$schema']; content.wallets = wallets.filter(w =>content.references.includes(w.id)).map(wallet => ({