Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
d8b893b
feat: added birth & hunt schemas
jorgenavben Sep 1, 2025
1718234
feat: added rome cred & improved birth certificate
jorgenavben Sep 1, 2025
eb1161c
feat: added "u" field to schemas
jorgenavben Sep 1, 2025
2153b2d
fix(cred-serv): private issuance
iFergal Sep 2, 2025
ded1d02
fix(cred-ui): issue UI for schema with lots of attributes
iFergal Sep 2, 2025
41a5827
build: old signify
iFergal Sep 2, 2025
0861c51
chore: commit lock file
iFergal Sep 2, 2025
2a71e7c
fix: request presentation bugs
iFergal Sep 4, 2025
bf09125
fix(ui): Credential UI not passing presentation attributes to server …
Sotatek-DukeVu Aug 5, 2025
b0d1467
feat(cred-serv): reeve credential
iFergal Sep 23, 2025
1e53859
fix(cred-serv): include new schema in const files mapper
iFergal Sep 23, 2025
635a9ff
chore(gha): replace pull_request_target with pull_request
rcmorano Sep 24, 2025
4530852
feat(cred-serv): OOR credential issuance
iFergal Sep 29, 2025
00f262d
fix(core): recursively resolve schemas
iFergal Sep 29, 2025
2b5f366
chore(gha): align with main branch
rcmorano Sep 29, 2025
ece7042
chore(package-lock): bump sha.js depend to fix a critical sec issue
rcmorano Sep 29, 2025
73abd1a
chore(gha): trigger build
rcmorano Oct 1, 2025
5f119cd
feat: implement presentation verification and request handling (#1367)
Sotatek-DucPhung Oct 1, 2025
f9ae79d
fix(cred-serv): post merge fix rename of signifyclient var in express
iFergal Oct 1, 2025
262bde4
fix(cred-serv): skip presentation requests for deleted connections
iFergal Oct 1, 2025
88faca1
feat(cred-ui): credential presentation details (request and response)…
Sotatek-DucPhung Oct 3, 2025
1ec0a49
Merge remote-tracking branch 'origin/main' into feat/birth-fishing-cred
iFergal Oct 3, 2025
7e072af
chore: trigger builds
iFergal Oct 3, 2025
3343f31
fix(core): recursive schema resolve should return correctly with no e…
iFergal Oct 6, 2025
9410ef0
fix(cred-serv): properly fail on OOBI errors
iFergal Oct 6, 2025
d52ae2f
debug logs
iFergal Oct 6, 2025
a23a2b0
more debug logs
iFergal Oct 6, 2025
565486c
fix(cred-serv): ensure OOR-AUTH issuance completes, and remove flakey…
iFergal Oct 6, 2025
32d25a7
fix(cred-ui): presentation request modal text
iFergal Oct 7, 2025
8354d8f
feat(cred-serv): add cardano-metadata signer
iFergal Nov 4, 2025
cc68ed1
Revert "feat(cred-serv): add cardano-metadata signer"
iFergal Nov 4, 2025
9bbe6e4
Revert "Revert "feat(cred-serv): add cardano-metadata signer""
iFergal Nov 7, 2025
280d51d
fix(cred-serv): cardano-metadata signer schema shouldnt have required…
iFergal Nov 7, 2025
7b34a77
correct schema
iFergal Nov 7, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions services/credential-server-ui/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
This folder contains a Web Interface to interact with the [Credential Issuance Server](../credential-server)

## Features

- Connect to a credential issuance server
- Issue custom credentials
- Request custom credentials

## Requirements

- Node.js
- npm

Expand Down
15 changes: 8 additions & 7 deletions services/credential-server-ui/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { IconButton } from "@mui/material";
import CssBaseline from "@mui/material/CssBaseline";
import { ThemeProvider } from "@mui/material/styles";
import { closeSnackbar, SnackbarProvider } from "notistack";
import { useEffect } from "react";
import { useEffect, useRef } from "react";
import { BrowserRouter, Route, Routes } from "react-router";
import { RoutePath } from "./const/route";
import { Layout } from "./layouts/Layout";
Expand Down Expand Up @@ -35,14 +35,15 @@ const App = () => {

const dispatch = useAppDispatch();
const contacts = useAppSelector((state) => state.connections.contacts);
const hasInitialized = useRef(false);

useEffect(() => {
dispatch(fetchContacts());
}, [dispatch]);

useEffect(() => {
dispatch(fetchSchemas());
}, [dispatch]);
if (!hasInitialized.current) {
hasInitialized.current = true;
dispatch(fetchContacts());
dispatch(fetchSchemas());
}
}, []); // Empty dependency array to prevent duplicate calls

useEffect(() => {
contacts.forEach((contact) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ const AppTable = <T extends AppTableBaseData = AppTableBaseData>({

const emptyRows = Array.from({ length: rowPerPage - rows.length }).fill(0);


return (
<TableContainer className="app-table">
<Table
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const MIN_TABLE_WIDTH = 650;
const ROWS_PER_PAGE_OPTIONS = [5, 10, 25];
const ROWS_PER_PAGE_OPTIONS = [10, 25, 50];

export { MIN_TABLE_WIDTH, ROWS_PER_PAGE_OPTIONS };
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ export const useTable = <T extends AppTableBaseData = AppTableBaseData>(
const [orderBy, setOrderBy] = useState<keyof T>(initSortKey);
const [selected, setSelected] = useState<string[]>([]);
const [page, setPage] = useState(0);
const [rowsPerPage, setRowsPerPage] = useState(5);
const [rowsPerPage, setRowsPerPage] = useState(10);

const handleRequestSort = (property: keyof T) => {
const isAsc = orderBy === property && order === "asc";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@
gap: 0.75rem;
margin-bottom: 0;
}

.attribute-list {
> *:not(:last-child) {
margin-bottom: 1.5rem;
}
}
}

&.stage-0,
Expand Down Expand Up @@ -62,6 +68,9 @@
}

.review-stage {
max-height: 27.25rem;
overflow: auto;

.content {
color: var(--color-neutral-800);
}
Expand All @@ -71,8 +80,15 @@
}
}

.attribute-list {
max-height: 27.25rem;
overflow: auto;
}

.input-attribute {
width: 100%;
max-height: 27.25rem;
overflow: auto;

& > div {
width: 100%;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import ArrowBackOutlinedIcon from "@mui/icons-material/ArrowBackOutlined";
import { Box, Button } from "@mui/material";
import { Box, Button, List } from "@mui/material";
import { useEffect, useMemo, useState } from "react";
import { Trans } from "react-i18next";
import { IGNORE_ATTRIBUTES } from "../../const";
Expand Down Expand Up @@ -248,16 +248,22 @@ const IssueCredentialModal = ({
);
}
case IssueCredentialStage.InputAttribute: {
return attributeKeys.map((attribute) => (
<InputAttribute
key={attribute}
value={attributes}
setValue={updateAttributes}
attributes={[attribute]}
required={requiredList.includes(attribute)}
properties={properties}
/>
));
return (
<>
<List className="attribute-list">
{attributeKeys.map((attribute) => (
<InputAttribute
key={attribute}
value={attributes}
setValue={updateAttributes}
attributes={[attribute]}
required={requiredList.includes(attribute)}
properties={properties}
/>
))}
</List>
</>
);
}
case IssueCredentialStage.Review: {
const nonEmptyAttributes = Object.fromEntries(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
.presentation-detail-modal {
.modal-content {
max-width: 600px;
width: 100%;
}

.status-badge {
padding: 0.25rem 0.75rem;
width: fit-content;
font-size: 0.75rem;
line-height: 1.25rem;
border-radius: 0.5rem;
border: none;
box-shadow: none;
display: flex;
align-items: center;
justify-content: center;

&.issued {
color: var(--color-success-800);
background: var(--color-success-100);
}

&.revoked {
color: var(--color-error-800);
background: var(--color-error-100);
}

&.requested {
color: var(--color-warning-800);
background: var(--color-warning-100);
}

.MuiChip-label {
padding: 0;
font-size: 0.75rem;
line-height: 1.25rem;
}
}

.content {
color: var(--color-neutral-600);
font-size: 0.875rem;
line-height: 1.5;
}
}
Loading
Loading