@nordicinnovation/edublend-sdk-credentials
v0.1.3
Published
EduBlend credentials module SDK — issue, verify, revoke, and list verifiable credentials against the EduBlend API.
Readme
@nordicinnovation/edublend-sdk-credentials
TypeScript SDK for the EduBlend credentials module — issue, verify, revoke, and list verifiable credentials against the EduBlend API.
This SDK is hand-written (a deliberate pre-emption of the
auto-generated pipeline at tools/sdk-gen/generate-ts.mjs) so it ships
ahead of the npm publish flow. Once code-gen lands, the surface here
will be the contract the generator produces.
Install
npm install @nordicinnovation/edublend-sdk-credentials
# Optional: pair with @nordicinnovation/edublend-sdk-core for retry / tracing wrappers
npm install @nordicinnovation/edublend-sdk-coreThe SDK has no runtime dependencies beyond the standard fetch
API. It works in Node 18+, modern browsers, Cloudflare / Vercel edge
runtimes, and Bun.
Quick start
import { CredentialsClient } from "@nordicinnovation/edublend-sdk-credentials";
const cli = new CredentialsClient({
baseUrl: "https://api.edublend.net",
apiKey: process.env.EB_KEY, // eb_live_… or eb_test_…
organizationId: process.env.ORG_ULID, // your tenant ULID
});
// Issue a credential — either userId or userEmail required.
const cred = await cli.issue("01HCOURSE", {
userEmail: "[email protected]",
});
console.log(cred.credentialId, cred.verifyUrl);
// Verify the JSON-LD assertion (public, no auth).
const vc = await cli.getVerifyDocument(cred.credentialId);
// Revoke when needed (requires `credentials:revoke` scope).
await cli.revoke(cred.credentialId, "academic_integrity",
"Plagiarism on final exam");Tree-shakeable functions
For bundle-size-sensitive contexts, every method is also exposed as a standalone function:
import { issue, getVerifyDocument, revoke } from "@nordicinnovation/edublend-sdk-credentials";
const cred = await issue(
{ baseUrl: "https://api.edublend.net", apiKey, organizationId },
"01HCOURSE",
{ userEmail: "[email protected]" },
);Auth
Two auth paths:
- Static API key — pass
apiKey(andorganizationId) to the constructor. Use this for HRIS / LMS / wallet integrations. AuthLikeprovider — passauth(withgetToken()and optionalgetOrganizationId()). Use this for OIDC-PKCE refresh loops or custom token rotation. Structurally compatible with@nordicinnovation/edublend-sdk-core'sAuthProvider.
The public verify endpoint (getVerifyDocument) skips auth headers
entirely — it works on logged-out marketing pages.
Errors
Every non-2xx response (or succeeded: false envelope) throws
EduBlendError:
import { EduBlendError } from "@nordicinnovation/edublend-sdk-credentials";
try {
await cli.issue(courseId, { userEmail });
} catch (err) {
if (err instanceof EduBlendError) {
console.error("HTTP", err.status, err.errors, err.detail);
console.error("trace:", err.requestId);
} else {
throw err;
}
}Reference
- Per-endpoint contract:
docs/integrations/credentials/api.md - Quickstart (5 minutes, integration test):
docs/integrations/credentials/quickstart.md - Full SDK reference:
docs/integrations/credentials/sdk.md - W3C VC verifier walkthrough:
docs/test-reports/wave-i-e-verifier-walkthrough-findings.md
Local dev
cd frontend/packages/sdk-credentials
npm install # or bun install
npm test # vitest unit tests
npm run build # tsc compile to dist/