Skip to content

Commit 6bb0a7e

Browse files
committed
feat(week7): add Heka Web Wallet extension and contributor onboarding UI
Chrome Extension (heka-chrome-extension/): - Manifest V3 Chrome extension: service worker, popup, and content script - WebCrypto ECDSA P-256 non-extractable key pair in IndexedDB (key-store.ts) - did:jwk DID derivation from holder public key (did.ts) - SD-JWT VC credential store in chrome.storage.local (credential-store.ts) - Full OID4VCI Pre-Authorized Code Flow (oid4vci/receive.ts): - Parses openid-credential-offer:// URIs (by-value and by-reference) - Fetches /.well-known/openid-credential-issuer metadata - Discovers token endpoint from issuer or authorization server metadata - Exchanges pre-authorized_code for an access token - Builds JWT proof of possession signed with holder's WebCrypto P-256 key - Requests and stores the resulting SD-JWT VC - Background service worker: holder key generation on install, badge management, PING/RECEIVE_OFFER/GET_STATUS message routing (service-worker.ts) - Content script bridge: source-tag-validated message forwarding from Heka web pages to the extension SW (heka-bridge.ts) - Popup UI (React + inline styles, no Tailwind): - WalletStatus: displays holder DID (truncated, copyable), credential count - CredentialList: renders held SD-JWT VC cards with vct, issuer, date - ReceiveCredential: textarea + status feedback for the OID4VCI flow - App: tab navigation (Wallet / Receive), auto-opens Receive on pending URI Web UI Contributor Onboarding (heka-identity-service-web-ui/): - ContributorBinding Redux slice with typed async thunks and selectors - 4-step onboarding wizard (ContributorOnboarding.tsx): - Step 0 GithubLoginStep: OAuth redirect via getGithubAuthorizationUrl - Step 1 ChallengeStep: requests GPG nonce from /v2/gpg-challenge/request - Step 2 SignStep: displays nonce, terminal command, signature textarea - Step 3 VerifyStep: submits signature, shows credential offer URI and QR - ContributorHub page wired into the sidebar nav and app router - GitHub OAuth callback handler (ContributorGithubCallback.tsx) - Shared API error utility and endpoint constants Depends on: feat/gpg-challenge-module (PR #184), feat/github-auth-contributor-binding (PR #186), feat/contributor-credential-issuance (PR #192) Signed-off-by: darshit2308 <darshit2308@gmail.com>
1 parent 00049c7 commit 6bb0a7e

43 files changed

Lines changed: 6411 additions & 15 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

heka-chrome-extension/.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Build output — generated by `yarn build` / `yarn dev`
2+
dist/
3+
4+
# Local dev cache
5+
node_modules/
6+
.yarn/cache
7+
.yarn/install-state.gz
306 Bytes
Loading
79 Bytes
Loading
123 Bytes
Loading
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
{
2+
"manifest_version": 3,
3+
"name": "Heka Web Wallet",
4+
"version": "0.1.0",
5+
"description": "Hiero contributor credential wallet — receive, store, and present your GithubContributorCredential.",
6+
7+
"permissions": [
8+
"storage",
9+
"alarms",
10+
"notifications"
11+
],
12+
"host_permissions": [
13+
"https://*/*",
14+
"http://localhost/*"
15+
],
16+
17+
"background": {
18+
"service_worker": "background/service-worker.js",
19+
"type": "module"
20+
},
21+
22+
"action": {
23+
"default_popup": "popup/index.html",
24+
"default_title": "Heka Web Wallet",
25+
"default_icon": {
26+
"16": "icons/icon-16.png",
27+
"48": "icons/icon-48.png",
28+
"128": "icons/icon-128.png"
29+
}
30+
},
31+
32+
"content_scripts": [
33+
{
34+
"matches": [
35+
"http://localhost/*",
36+
"https://heka.hiero.org/*",
37+
"https://*.hiero.org/*"
38+
],
39+
"js": ["content-scripts/heka-bridge.js"],
40+
"run_at": "document_idle"
41+
}
42+
],
43+
44+
"icons": {
45+
"16": "icons/icon-16.png",
46+
"48": "icons/icon-48.png",
47+
"128": "icons/icon-128.png"
48+
},
49+
50+
"protocol_handlers": [
51+
{
52+
"protocol": "openid-credential-offer",
53+
"uriTemplate": "/popup/index.html?offer=%s"
54+
}
55+
]
56+
}

0 commit comments

Comments
 (0)