# @verixyz/core

> verixyz Core Logic & Interfaces.

Latest version **2.0.0** (published 2022-05-30) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install @verixyz/core
pnpm add @verixyz/core
yarn add @verixyz/core
bun add @verixyz/core
```

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.0 |
| Published | 2022-05-30 |
| First published | 2022-05-21 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 4 |
| Unpacked size | 314.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Jerry Zhang |
| Maintainers | jerry.zhang.bill |

## Links

- npm: https://www.npmjs.com/package/@verixyz/core
- Repository: https://github.com/peopledata/verixyz
- Homepage: https://github.com/peopledata/verixyz#readme
- Issues: https://github.com/peopledata/verixyz/issues
- npm.io page: https://npm.io/package/@verixyz/core

## Dependencies (4)

- [debug](https://npm.io/package/debug.md) ^4.3.3
- [events](https://npm.io/package/events.md) ^3.2.0
- [z-schema](https://npm.io/package/z-schema.md) ^5.0.2
- [did-jwt-vc](https://npm.io/package/did-jwt-vc.md) ^2.1.9

## Recent versions

- 2.0.0 (latest) — 2022-05-30
- 1.3.6 — 2022-05-30
- 1.3.5 — 2022-05-22
- 1.3.4 — 2022-05-21

## README

# verixyz Core

## Core functions

- instantiate and orchestrate plugins
- coordinate events
- validate schemas
- define core types

## Functions

> createAgent(options)

Helper function to create a new instance of the Agent class with correct type.

> Parameters:
```json
options: IAgentOptions & { Context ?: C;}
```
>Returns:
TAgent <T> & {Context? : C'}

> Example
```js
import { createAgent, IResolver, IMessageHandler } from '@verixyz/core'
import { AgentRestClient } from '@verixyz/remote-client'
import { CredentialIssuer, ICredentialIssuer } from '@verixyz/credential-w3c'
const agent = createAgent<IResolver & IMessageHandler & ICredentialIssuer>({
  plugins: [
    new CredentialIssuer(),
    new AgentRestClient({
      url: 'http://localhost:3002/agent',
      enabledMethods: ['resolveDid', 'handleMessage'],
    }),
  ],
})
```
## Interfaces

### GetDIDComponentArgs

Input arguments for getDIDComponentById

> Properties

- didDocument
    The DID document from which to extract the fragment. This MUST be the document resolved by
- didUrl
    The DID URI that refers to the subsection by #fragment. Example: did:example:identifier#controller
- section
    The section of the DID document where to search for the fragment. Example 'keyAgreement', or 'assertionMethod', or 'authentication', etc

### IAgent

Agent that can execute methods

> Properties

- emit
    (eventType: string, data: any) => Promise<void>
- excute 
    <A = any, R = any>(method: string, args: A) => Promise<R>

### IAgentBase

Agent base interface

> Properties

- availableMethods
    () => string[]
- getSchema
    () => IAgentPluginSchema	

### IAgentContext

Standard plugin method context interface

> Properties

- agent
    TAgent<T>

> Example

```js
await agent.resolveDid({
  didUrl: 'did:example:123',
})
```

### IAgentOptions 

Agent configuration options.

This interface is used to describe the constellation of plugins that this agent will use and provide.

You will use this to attach plugins, to setup overrides for their methods and to explicitly set the methods that this agent instance is allowed to call. This permissioning method is also used for internal calls made by plugin code.

> Properties

- authorizedMethods:string[]	
    The array of method names that will be exposed by the agent
- context	: Record<string, any>	
    The context object that will be available to the plugin methods
- overrides	: IPluginMethodMap	
    The map of plugin methods. Can be used to override methods provided by plugins, or to add additional methods without writing a plugin
- plugins	: IAgentPlugin []	
    The array of agent plugins
- schemaValidation	: boolean	
    Flag that enables schema validation for plugin methods. false

### IAgentPlugin	

Agent plugin interface

> Properties

- methods	IPluginMethodMap	
- schema	IAgentPluginSchema	


### IAgentPluginSchema	

Agent plugin schema

> Properties

- components	{ schemas: any; methods: any; }	


### IDataStore	

Basic data store interface

> Methods

- dataStoreDeleteVerifiableCredential(args)	
Deletes verifiable credential from the data store
- dataStoreGetMessage(args)	
Gets message from the data store
- dataStoreGetVerifiableCredential(args)	
Gets verifiable credential from the data store
- dataStoreGetVerifiablePresentation(args)	
Gets verifiable presentation from the data store
- dataStoreSaveMessage(args)	
Saves message to the data store
- dataStoreSaveVerifiableCredential(args)	
Saves verifiable credential to the data store
- dataStoreSaveVerifiablePresentation(args)	
Saves verifiable presentation to the data store


### IDataStoreDeleteVerifiableCredentialArgs	

Input arguments for

> Properties

- hash: string
    Required. VerifiableCredential hash

### IDataStoreGetMessageArgs	

Input arguments for dataStoreGetMessage

> Properties

- id: string
    Required. Messgae ID

### IDataStoreGetVerifiableCredentialArgs	

Input arguments for dataStoreGetVerifiableCredential

> Properties

- hash: string
    Required. VerifiableCredential hash

### IDataStoreGetVerifiablePresentationArgs	

Input arguments for dataStoreGetVerifiablePresentation

> Properties

- hash: string
    Required. VerifiablePresentation hash

### IDataStoreSaveMessageArgs	

Input arguments for dataStoreSaveMessage

> Properties

- message: IMessgae
    Required. Required message



### IDataStoreSaveVerifiableCredentialArgs	

Input arguments for dataStoreSaveVerifiableCredential

### IDataStoreSaveVerifiablePresentationArgs	

Input arguments for dataStoreSaveVerifiablePresentation

> Properties

- verifiablePresentation:VerifiablePresentation	           
     Required. VerifiablePresentation

### IDIDManager	

Identifier manager interface

> Methods

- didManagerAddKey(args, context)	
    Adds a key to a DID Document
    [args]: IDIDManagerAddKeyArgs
    [context]: IAgentContext<IKeyManager>
    > Returns:
        Promise<any>

- didManagerAddService(args, context)	
    Adds a service to a DID Document
    [args]: IDIDManagerAddServiceArgs
    [context]: IAgentContext<IKeyManager>
    > Returns:
        Promise<any>

- didManagerCreate(args, context)	
    Creates and returns a new identifier
    [args]: IDIDManagerCreateArgs
    [context]: IAgentContext<IKeyManager>
    > Returns:
        Promise<IIdentifier>
    > Example
    ```js
    const identifier = await agent.didManagerCreate({
        alias: 'charlie',
        provider: 'did:ethr:rinkeby',
        kms: 'local',
   })
    ```
- didManagerDelete(args, context)	
    Deletes identifier
    [args]: IDIDManagerDeleteArgs
    [conext]: IAgentContext<IKeyManager>
    > Returns:
        Promise<boolean>

- didManagerFind(args)	
    Returns a list of managed identifiers
    [args]: IDIDManagerFindArgs
    > Returns:
        Promise<Array<IIdentifier>>
    > Example
    ```js
    const aliceIdentifiers = await agent.didManagerFind({
        alias: 'alice',
    })

    const rinkebyIdentifiers = await agent.didManagerFind({
    provider: 'did:ethr:rinkeby',
    })
    ```

- didManagerGet(args)	
    Returns a specific identifier
    [args]: IDIDManagerGetArgs
    > Returns:
        Promise<IIdentifier>

- didManagerGetByAlias(args)	
    Returns a specific identifier by alias
    [args]: IDIDManagerGetByAliasArgs
    > Returns:
        Promise<IIdentifier>
    > Example
    ```js
    const identifier = await agent.didManagerGetByAlias({
        alias: 'charlie',
        provider: 'did:ethr:rinkeby',
    })
    ``` 

- didManagerGetOrCreate(args, context)	
    Returns an existing identifier or creates a new one for a specific alias
    [args]: IDIDManagerGetOrCreateArgs
    [contex]: IAgentContext<IKeyManager>
    > Returns:
        Promise<IIdentifier>

- didManagerGetProviders()	
    Returns a list of available identifier providers
    > Rerturns:
        Promise<string>

- didManagerImport(args, context)	
    Imports identifier
    [args]: MinimallmportableIdentifier
    [context]: IagentContext<IKeyManager>
    > Returns:
        Promise<IIdentifier>

- didManagerRemoveKey(args, context)	
    Removes a key from a DID Document
    [args]: IDIDManagerRemoveKeyArgs
    [context]: IAgentContext<IKeyManager>
    > Returns:
        Promise<any>

- didManagerRemoveService(args, context)	
    Removes a service from a DID Document
    [args]: IDIDManagerRemoveServiceArgs
    [context]: IAgentContext<IKeyManager>
    > Returns:
        Promise<any>

- didManagerSetAlias(args, context)	
    Sets identifier alias
    [args]: IDIDManagerSetAliasArgs
    [context]: IAgentContext<IKeyManager>
    > Returns:
        Promise<boolean>
    > Example
    ```js
    const identifier = await agent.didManagerCreate()
    const result = await agent.didManagerSetAlias({
        did: identifier.did,
        alias: 'carol',
    })
    ```


### IDIDManagerAddKeyArgs	

Input arguments for didManagerAddKey

> Properties

- did: string
- key: IKey
- options: object

### IDIDManagerAddServiceArgs	

Input arguments for didManagerAddService

> Peroperties

- did: string
- options: object
- service: IService

### IDIDManagerCreateArgs	

Input arguments for didManagerCreate

> Properties

- alias: string
- kms: string
- options: object
- provider: string


### IDIDManagerDeleteArgs	

Input arguments for didManagerDelete

> Properties

- did: string

### IDIDManagerFindArgs	

Input arguments for didManagerFind

> Properties

- alias: string
- provider: string


### IDIDManagerGetArgs	

Input arguments for didManagerGet

> Properties

- did: string

### IDIDManagerGetByAliasArgs	

Input arguments for didManagerGetByAlias

> Properties

- alias: string
- provider: string


### IDIDManagerGetOrCreateArgs	

Input arguments for didManagerGetOrCreate

> Properties

- alias: string
- kms: string
- options: object
- provider: string

### IDIDManagerRemoveKeyArgs	

Input arguments for didManagerRemoveKey

> Properties

- did: string
- kdid: string
- options: object

### IDIDManagerRemoveServiceArgs	

Input arguments for didManagerRemoveService

> Properties

- did: string
- id: string
- options: object


### IDIDManagerSetAliasArgs	

Input arguments for didManagerSetAlias

> Properties

- alias: string
- did: string


### IEventListener	

Describes a listener interface that needs to be implemented by components interested in listening to events emitted by an agent.

> Properties

- eventTypes:string[]
    Declares the event types that this listener is interested in.

> Methods

- onEvent(event, context)
    Processes an event emitted by the agent.

### IHandleMessageArgs	

Input arguments for handleMessage

> Properties

- metaData: IMetaData[] 
    Optional. Message metadata.
- raw: string
    Raw message data.
- save: boolean
    Optional. If set to `true`, the message will be saved using dataStoreSaveMessage.

### IIdentifier	

Identifier interface

> Properties

- alias: string
    Optional. Identifier alias. Can be used to reference an object in an external system
- controllerKeyId:string
    Controller key id
- did: string
    Decentralized identifier
- keys: IKey[]
    Array of managed keys
- provdier: string
    Identifier provider name
- services: IService[]
    Array of services


### IKey	

Cryptographic key

> Properties

- kid: string
    Key ID
- kms: string
    Key Management Systems
- meta: KeyMetadata | Null
    Optional. Key metadata. This should be used to determine which algorithms are supported.
- privateKeyHex: string
    Optional. Private key.
- publicKeyHex: string
    Public key
- type: TKeyType
    Key type

### IKeyManager	

Key manager interface

> Methods

- keyManagerCreate(args)	
    Creates and returns a new key
    [args]: IKeyManagerCreateArgs
    > Returns:
        Promise<ManagedKeyInfo>

- keyManagerDecryptJWE(args)	
    (BETA) Decrypts data
    [args]: IKeyManagerDecryptJWEArgs	
    > Returns:
        Promise<string>
    
- keyManagerDelete(args)	
    Deletes a key
    [args]:IKeyManagerDeleteArgs
    > Returns:
        Promise<boolean>

- keyManagerEncryptJWE(args)	
    (BETA) Encrypts data
    [args]: IKeyManagerEncryptJWEArgs	
    > Returns:
        Promise<string>

- keyManagerGet(args)	
    Returns an existing key
    [args]: IKeyManagerGetArgs	
    > Returns:
        Promise<IKey>

- keyManagerGetKeyManagementSystems()	
    Lists available key management systems
    > Returns:
        Promise<Array<string>>

- keyManagerImport(args)	
    Imports a created key
    [args]: MinimalImportableKey
    > Returns:
        Promise<ManagedKeyInfo>

- keyManagerSharedSecret(args)	
    Compute a shared secret with the public key of another party. This computes the raw shared secret (the result of a Diffie-Hellman computation) To use this for symmetric encryption you MUST apply a KDF on the result.
    [args]: IKeyManagerSharedSecretArgs	
    > Returns:
        Promise<string>

- keyManagerSign(args)	
    Generates a signature according to the algorithm specified.
    [args]: IKeyManagerSignArgs	
    > Returns:
        Promise<string>

- keyManagerSignEthTX(args)	
    Signs Ethereum transaction
    [args]: IKeyManagerSignEthTXArgs
    > Returns:
        Promise<string>

- keyManagerSignJWT(args)	
    Signs JWT
    [args]:IKeyManagerSignJWTArgs
    > Returns:
        Promise<string>

### IKeyManagerCreateArgs	

Input arguments for keyManagerCreate


> Properties

- kms:string
    Key Management Systems
- meta: keyMetadata
    Optional. Key Metadata.
- type: TKeyType
    Key type

### IKeyManagerDecryptJWEArgs	
(BETA) Input arguments for keyManagerDecryptJWE


> Properties

- data: string
    (BETA) Encrypted dta
- kid: string
    (BETA) Key ID

### IKeyManagerDeleteArgs	
Input arguments for keyManagerDelete

> Properties

- kid: string
    Key DID


### IKeyManagerEncryptJWEArgs	
(BETA) Input arguments for keyManagerEncryptJWE

> Propperties

- data:string	
    (BETA) Data to encrypt
- kid:string	
    (BETA) Key ID to use for encryption
- to:Omit<IKey , 'kms'>	
    (BETA) Recipient key object

### IKeyManagerGetArgs	
Input arguments for keyManagerGet

> Properties

-kid: string
    Key DID

### IKeyManagerSharedSecretArgs	
Input arguments for keyManagerSharedSecret

> Properties

- publicKey:Pick<IKey , 'publicKeyHex' | 'type'>	
    The public key of the other party. The type of key MUST be compatible with the type referenced by secretKeyRef
- secretKeyRef:string	
    The secret key handle (kid) as returned by keyManagerCreate

### IKeyManagerSignArgs	
Input arguments for keyManagerSign

> Properties

- algorithm:string	
    The algorithm to use for signing. This must be one of the algorithms supported by the KMS for this key type. The algorithm used here should match one of the names listed in IKey.meta.algorithms
- data:string	
    Data to sign
- encoding:'utf-8' | 'base16' | 'base64' | 'hex'	
    If the data is a "string" then you can specify which encoding is used. Default is "utf-8"
- keyRef:string	
    The key handle, as returned during keyManagerCreateKey

### IKeyManagerSignEthTXArgs	
Input arguments for keyManagerSignEthTX

> Properties

- kid: string	
    Key ID
- transaction: object

### IKeyManagerSignJWTArgs	
Input arguments for keyManagerSignJWT

> Properties

- data: string | Uint8Array
    Data to sign
- kid: string
    Key ID
    
### IMessage	
DIDComm message

> Properties

- createdAt: string	
    Optional. Creation date (ISO 8601)
- credentials: VerifiableCredential []	
    Optional. Array of attached verifiable credentials
- data: object | null	
    Optional. Parsed data
- expiresAt: string	
    Optional. Expiration date (ISO 8601)
- from:string	
    Optional. Sender DID
- id:string	
    Unique message ID
- metaData:IMetaData [] | null	
    Optional. Array of message metadata
- presentations:VerifiablePresentation []	
    Optional. Array of attached verifiable presentations
- raw:string	
    Optional. Original message raw data
- replyTo:string[]	
    Optional. List of DIDs to reply to
- replyUrl:string	
    Optional. URL to post a reply message to
- threadId:string	
    Optional. Thread ID
- to:string	
    Optional. Recipient DID
- type:string	
    Message type


### IMessageHandler	
Message handler interface

> Methods:

- handleMessage(args, context)	
    Parses and optionally saves a message
    [args]: IHandleMessageArgs
    [context]: IAgentContext <IDataStore>
    > Returns:
        Promise<IMessage>

### IMetaData	
Message meta data

> Properties

- type: string
    Type
- value: string
    Optional. Value

### IPluginMethod	
Agent plugin method interface

### IPluginMethodMap	
Plugin method map interface


### IResolver	
DID Resolver interface

> Methods

- getDIDComponentById(args)	
    (BETA) Dereferences a DID URL fragment and returns the corresponding DID document entry.
    [args]: GetDIDComponentArgs
    > Returns:
        Promise<DIDDocComponent>
    >Example
    ```js
    const did = 'did:ethr:rinkeby:[xxx]'
    const didFragment = `${did}#controller`
    const fragment = await agent.getDIDComponentById({
        didDocument: (await agent.resolveDid({ didUrl: did }))?.didDocument,
        didUrl: didFragment,
        section: 'authentication',
        })
    expect(fragment).toEqual({
        id: 'did:ethr:rinkeby:[]',
        type: 'EcdsaSecp256k1RecoveryMethod2020',
        controller: 'did:ethr:rinkeby:[]',
        blockchainAccountId: '[]',
    })
- resolveDid(args)	
    Resolves DID and returns DID Resolution Result
    [args]: ResolveDidArgs
        Input arguments for resolving a DID
    > Exmaple
    ```js
    const doc = await agent.resolveDid({
        didUrl: 'did:ethr:rinkeby:[]',
    })
    expect(doc.didDocument).toEqual({
        '@context': [
        'https://www.w3.org/ns/did/v1',
        'https://identity.foundation/EcdsaSecp256k1RecoverySignature2020/lds-ecdsa-secp256k1-recovery2020-0.0.jsonld',
        ],
        id: 'did:ethr:rinkeby:[]',
        verificationMethod: [
            {
                id: 'did:ethr:rinkeby:[]#controller',
                type: 'EcdsaSecp256k1RecoveryMethod2020',
                controller: 'did:ethr:rinkeby:[]',
                blockchainAccountId: '[]',
             },
        ],
        authentication: ['did:ethr:rinkeby:[]#controller'],
        assertionMethod: ['did:ethr:rinkeby:[]#controller'],
    })
```



### IService	
Identifier service

> Properties

- description: string	
    Optional. Description
- id:string	
    ID
- serviceEndpoint:string	
    Endpoint URL
- type: string	
    Service type

### KeyMetadata	

> Properties

- algorithms:string[]

### RemoveContext	
Removes context parameter from plugin method interface


### ResolveDidArgs	
Input arguments for resolveDid

> Properties

- didUrl: string
    DID URL
- options: DIDResolutionOptions
    DID resolution options that will be passed to the method specific resolver. See: https://w3c.github.io/did-spec-registries/\#did-resolution-input-metadata See: https://www.w3.org/TR/did-core/\#did-resolution-options

### VerifiableCredential	
Verifiable Credential https://github.com/decentralized-identifier/did-jwt-vc


> Properties

- "@context" :string[]
- crendentialStatus: {id: string; type: string; }
- credentialSubject: {id?: string; [x: string]: ant;}
- expirationDate: string
- id: string
- issuanceDate: string
- issuer: {id: string; [x: string]: any;}
- proof: { type?: string; [x: string]: any;}
- type: string[]


### VerifiablePresentation	
Verifiable Presentation https://github.com/decentralized-identifier/did-jwt-vc


> Properties

- "@context" :string[]
- expirationDate: string
- holder:string
- id: string
- issuanceDate: string
- proof: {type?:string; [x: string]: any;}
- type: string[]
- verifibaleCredential: VerifiableCredential[]
- verifier: string[]


### W3CCredential	
W3CCredential https://github.com/decentralized-identifier/did-jwt-vc

> Properties

- "@context" :string[]
- crendentialStatus: {id: string; type: string; }
- credentialSubject: {id?: string; [x: string]: ant;}
- expirationDate: string
- id: string
- issuanceDate: string
- issuer: {id: string; [x: string]: any;}
- type: string[]

### W3CPresentation	
W3CPresentation https://github.com/decentralized-identifier/did-jwt-vc

> Properties

- "@context" :string[]
- expirationData: string
- holder: string
- id: string
- issuanceDate: string
- type: string[]
- verifiableCredential: VerifiableCredential[]
- verifier: string[]


## Variables
 - CoreEvents	
    This collection defines the core event types.
    ```json
    CoreEvents: {
        error: string
        warning: string
    }

 - Schema<any>	

## Type Aliases

### DIDDocComponent	
(BETA) Return type of getDIDComponentById represents a VerificationMethod or a ServiceEndpoint entry.

```js
export declare type DIDDocComponent = VerificationMethod | ServiceEndpoint
``


### DIDDocumentSection	

```js
export declare type DIDDocumentSection =
  | 'verificationMethod'
  | 'publicKey'
  | 'service'
  | 'authentication'
  | 'assertionMethod'
  | 'keyAgreement'
  | 'capabilityInvocation'
  | 'capabilityDelegation'
```

### ManagedKeyInfo	
Represents information about a managed key. Private or secret key material is not present.

```js
export declare type ManagedKeyInfo = Omit<IKey, 'privateKeyHex'>
```


### MinimalImportableIdentifier	
Represents the minimum amount of information needed to import an IIdentifier

```js
export declare type MinimalImportableIdentifier = {
  keys: MinimalImportableKey[]
  services?: IService[]
} & Omit<IIdentifier, 'keys' | 'services'>
```


### MinimalImportableKey	
Represents the properties required to import a key.

```js
export declare type MinimalImportableKey = RequireOnly<IKey, 'privateKeyHex' | 'type' | 'kms'>
```


### RequireOnly	
Represents an object type where a subset of keys are required and everything else is optional.

```js
export declare type RequireOnly<T, K extends keyof T> = Required<Pick<T, K>> & Partial<T>
```


### TAgent	
Utility type for constructing agent type that has a list of available methods

```js
export declare type TAgent<T extends IPluginMethodMap> = {
  [P in keyof T]: RemoveContext<T[P]>
} & IAgent
```

### TKeyType	
Cryptographic key type

```js
export declare type TKeyType = 'Ed25519' | 'Secp256k1' | 'X25519'
```

---
_Source: https://npm.io/package/@verixyz/core · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
