Skip to content

Commit

Permalink
feat(Agent): add initialize function
Browse files Browse the repository at this point in the history
  • Loading branch information
curtis-h committed Nov 3, 2023
1 parent 050e5fa commit 684acf4
Show file tree
Hide file tree
Showing 10 changed files with 140 additions and 104 deletions.
17 changes: 2 additions & 15 deletions demos/browser/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,25 +20,12 @@ const RequestPresentation = SDK.RequestPresentation;

const apollo = new SDK.Apollo();
const castor = new SDK.Castor(apollo);
const api = new SDK.ApiImpl();
const defaultMediatorDID = "did:peer:2.Ez6LSghwSE437wnDE1pt3X6hVDUQzSjsHzinpX3XFvMjRAm7y.Vz6Mkhh1e5CEYYq6JBUcTZ6Cp2ranCWRrv7Yax3Le4N59R6dd.SeyJ0IjoiZG0iLCJzIjoiaHR0cHM6Ly9zaXQtcHJpc20tbWVkaWF0b3IuYXRhbGFwcmlzbS5pbyIsInIiOltdLCJhIjpbImRpZGNvbW0vdjIiXX0";
const pluto = new PlutoInMemory();

const useSDK = (mediatorDID: SDK.Domain.DID) => {
const didcomm = new SDK.DIDCommWrapper(apollo, castor, pluto);
const mercury = new SDK.Mercury(castor, didcomm, api);
const store = new SDK.PublicMediatorStore(pluto);
const handler = new SDK.BasicMediatorHandler(mediatorDID, mercury, store);
const manager = new SDK.ConnectionsManager(castor, mercury, pluto, handler);
const agent = new SDK.Agent(
apollo,
castor,
pluto,
mercury,
handler,
manager,
apollo.createRandomSeed().seed
);
const agent = SDK.Agent.initialize({ mediatorDID, pluto });

return { agent, pluto };
};

Expand Down
3 changes: 3 additions & 0 deletions src/apollo/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import Apollo from "./Apollo";

export default Apollo;
3 changes: 3 additions & 0 deletions src/castor/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import Castor from "./Castor";

export default Castor;
17 changes: 17 additions & 0 deletions src/domain/models/DID.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,23 @@ export class DID {
return `${this.schema}:${this.method}:${this.methodId}`;
}

/**
* parse value into a DID
* @param {DID | string} value - some representation of a DID
* @returns {DID}
*/
static from(value: DID | string): DID {
if (value instanceof DID) {
return value;
}

if (typeof value === "string") {
return DID.fromString(value);
}

throw new Error("Invalid DID value");
}

static fromString(text: string): DID {
const schema = DID.getSchemaFromString(text);
const method = DID.getMethodFromString(text);
Expand Down
3 changes: 1 addition & 2 deletions src/mercury/didcomm/DIDResolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@ import type {
} from "didcomm-node";

import * as Domain from "../../domain";
import Castor from "../../castor/Castor";
import { PeerDIDService } from "../../peer-did/PeerDID";

export class DIDCommDIDResolver implements DIDResolver {
constructor(private readonly castor: Castor) {}
constructor(private readonly castor: Domain.Castor) {}

async resolve(did: string): Promise<DIDDoc | null> {
const doc = await this.castor.resolveDID(did);
Expand Down
29 changes: 10 additions & 19 deletions src/mercury/didcomm/SecretsResolver.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,13 @@
import type { Secret, SecretsResolver } from "didcomm-node";
import * as Domain from "../../domain";
import {
Curve,
KeyTypes,
VerificationMethod,
VerificationMethods,
} from "../../domain";
import Apollo from "../../apollo/Apollo";
import Castor from "../../castor/Castor";
import { Pluto } from "../../domain";
import * as DIDURLParser from "../../castor/parser/DIDUrlParser";
import { base64url } from "multiformats/bases/base64";

export class DIDCommSecretsResolver implements SecretsResolver {
constructor(
private readonly apollo: Apollo,
private readonly castor: Castor,
private readonly pluto: Pluto
private readonly apollo: Domain.Apollo,
private readonly castor: Domain.Castor,
private readonly pluto: Domain.Pluto
) {}

async find_secrets(secret_ids: string[]): Promise<string[]> {
Expand All @@ -39,8 +30,8 @@ export class DIDCommSecretsResolver implements SecretsResolver {
const did = await this.castor.resolveDID(found.did.toString());

const [publicKeyJWK] = did.coreProperties.reduce((all, property) => {
if (property instanceof VerificationMethods) {
const matchingValue: VerificationMethod | undefined =
if (property instanceof Domain.VerificationMethods) {
const matchingValue: Domain.VerificationMethod | undefined =
property.values.find(
(verificationMethod) => verificationMethod.id === secret_id
);
Expand All @@ -65,14 +56,14 @@ export class DIDCommSecretsResolver implements SecretsResolver {
publicKeyJWK: Domain.PublicKeyJWK
): Secret {
const privateKeyBuffer = peerDid.privateKeys.find(
(key) => key.keyCurve.curve === Curve.X25519
(key) => key.keyCurve.curve === Domain.Curve.X25519
);
if (!privateKeyBuffer) {
throw new Error(`Invalid PrivateKey Curve ${Curve.X25519}`);
throw new Error(`Invalid PrivateKey Curve ${Domain.Curve.X25519}`);
}
const privateKey = this.apollo.createPrivateKey({
type: KeyTypes.Curve25519,
curve: Curve.X25519,
type: Domain.KeyTypes.Curve25519,
curve: Domain.Curve.X25519,
raw: privateKeyBuffer.value,
});

Expand All @@ -86,7 +77,7 @@ export class DIDCommSecretsResolver implements SecretsResolver {
id,
type: "JsonWebKey2020",
privateKeyJwk: {
crv: Curve.X25519,
crv: Domain.Curve.X25519,
kty: "OKP",
d: Buffer.from(privateKey.getEncoded()).toString(),
x: publicKeyJWK.x,
Expand Down
10 changes: 4 additions & 6 deletions src/mercury/didcomm/Wrapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,8 @@ import type {
Attachment,
AttachmentData,
} from "didcomm-node";

import * as Domain from "../../domain";
import Apollo from "../../apollo/Apollo";
import Castor from "../../castor/Castor";
import { Pluto } from "../../domain";
import { DIDCommDIDResolver } from "./DIDResolver";
import { DIDCommSecretsResolver } from "./SecretsResolver";
import { DIDCommProtocol } from "../DIDCommProtocol";
Expand Down Expand Up @@ -38,9 +36,9 @@ export class DIDCommWrapper implements DIDCommProtocol {
private readonly secretsResolver: SecretsResolver;

constructor(
readonly apollo: Apollo,
readonly castor: Castor,
readonly pluto: Pluto
readonly apollo: Domain.Apollo,
readonly castor: Domain.Castor,
readonly pluto: Domain.Pluto
) {
this.didResolver = new DIDCommDIDResolver(castor);
this.secretsResolver = new DIDCommSecretsResolver(apollo, castor, pluto);
Expand Down
3 changes: 3 additions & 0 deletions src/mercury/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import Mercury from "./Mercury";

export default Mercury;
3 changes: 3 additions & 0 deletions src/pollux/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import Pollux from "./Pollux";

export default Pollux;
Loading

0 comments on commit 684acf4

Please sign in to comment.