diff --git a/packages/anoncreds-nodejs/src/index.ts b/packages/anoncreds-nodejs/src/index.ts index 278b29a..1f17eae 100644 --- a/packages/anoncreds-nodejs/src/index.ts +++ b/packages/anoncreds-nodejs/src/index.ts @@ -1,8 +1,8 @@ -import { registerAnoncreds } from '@hyperledger/anoncreds-shared' +import { NativeAnoncreds } from '@hyperledger/anoncreds-shared' import { NodeJSAnoncreds } from './NodeJSAnoncreds' export const anoncredsNodeJS = new NodeJSAnoncreds() -registerAnoncreds({ lib: anoncredsNodeJS }) +NativeAnoncreds.register(anoncredsNodeJS) export * from '@hyperledger/anoncreds-shared' diff --git a/packages/anoncreds-react-native/src/index.ts b/packages/anoncreds-react-native/src/index.ts index 9aa9de4..f4d5e89 100644 --- a/packages/anoncreds-react-native/src/index.ts +++ b/packages/anoncreds-react-native/src/index.ts @@ -1,8 +1,8 @@ -import { registerAnoncreds } from '@hyperledger/anoncreds-shared' +import { NativeAnoncreds } from '@hyperledger/anoncreds-shared' import { ReactNativeAnoncreds } from './ReactNativeAnoncreds' import { register } from './register' export * from '@hyperledger/anoncreds-shared' -registerAnoncreds({ lib: new ReactNativeAnoncreds(register()) }) +NativeAnoncreds.register(new ReactNativeAnoncreds(register())) diff --git a/packages/anoncreds-shared/src/AnoncredsObject.ts b/packages/anoncreds-shared/src/AnoncredsObject.ts index 7ee3c0c..518b564 100644 --- a/packages/anoncreds-shared/src/AnoncredsObject.ts +++ b/packages/anoncreds-shared/src/AnoncredsObject.ts @@ -1,7 +1,7 @@ import type { JsonObject } from './types' import { ObjectHandle } from './ObjectHandle' -import { anoncreds } from './register' +import { NativeAnoncreds } from './register' export class AnoncredsObject { public handle: ObjectHandle @@ -11,6 +11,6 @@ export class AnoncredsObject { } public toJson() { - return JSON.parse(anoncreds.getJson({ objectHandle: this.handle })) as JsonObject + return JSON.parse(NativeAnoncreds.instance.getJson({ objectHandle: this.handle })) as JsonObject } } diff --git a/packages/anoncreds-shared/src/ObjectHandle.ts b/packages/anoncreds-shared/src/ObjectHandle.ts index 2f95ce1..2ab1b33 100644 --- a/packages/anoncreds-shared/src/ObjectHandle.ts +++ b/packages/anoncreds-shared/src/ObjectHandle.ts @@ -1,4 +1,4 @@ -import { anoncreds } from './register' +import { NativeAnoncreds } from './register' export class ObjectHandle { private readonly _handle: number @@ -12,11 +12,11 @@ export class ObjectHandle { } public typeName() { - return anoncreds.getTypeName({ objectHandle: this }) + return NativeAnoncreds.instance.getTypeName({ objectHandle: this }) } // TODO: do we need this? public clear() { - anoncreds.objectFree({ objectHandle: this }) + NativeAnoncreds.instance.objectFree({ objectHandle: this }) } } diff --git a/packages/anoncreds-shared/src/api/Credential.ts b/packages/anoncreds-shared/src/api/Credential.ts index a371037..fa9b366 100644 --- a/packages/anoncreds-shared/src/api/Credential.ts +++ b/packages/anoncreds-shared/src/api/Credential.ts @@ -4,7 +4,7 @@ import type { CredentialRevocationConfig } from './CredentialRevocationConfig' import type { RevocationStatusList } from './RevocationStatusList' import { AnoncredsObject } from '../AnoncredsObject' -import { anoncreds } from '../register' +import { NativeAnoncreds } from '../register' import { CredentialDefinition } from './CredentialDefinition' import { CredentialDefinitionPrivate } from './CredentialDefinitionPrivate' @@ -69,7 +69,7 @@ export class Credential extends AnoncredsObject { ? options.credentialRequest.handle : pushToArray(CredentialRequest.fromJson(options.credentialRequest).handle, objectHandles) - credential = anoncreds.createCredential({ + credential = NativeAnoncreds.instance.createCredential({ credentialDefinition, credentialDefinitionPrivate, credentialOffer, @@ -87,7 +87,7 @@ export class Credential extends AnoncredsObject { } public static fromJson(json: JsonObject) { - return new Credential(anoncreds.credentialFromJson({ json: JSON.stringify(json) }).handle) + return new Credential(NativeAnoncreds.instance.credentialFromJson({ json: JSON.stringify(json) }).handle) } public process(options: ProcessCredentialOptions) { @@ -115,7 +115,7 @@ export class Credential extends AnoncredsObject { ) : undefined - credential = anoncreds.processCredential({ + credential = NativeAnoncreds.instance.processCredential({ credential: this.handle, credentialDefinition, credentialRequestMetadata, @@ -134,25 +134,25 @@ export class Credential extends AnoncredsObject { return this } public get schemaId() { - return anoncreds.credentialGetAttribute({ objectHandle: this.handle, name: 'schema_id' }) + return NativeAnoncreds.instance.credentialGetAttribute({ objectHandle: this.handle, name: 'schema_id' }) } public get credentialDefinitionId() { - return anoncreds.credentialGetAttribute({ objectHandle: this.handle, name: 'cred_def_id' }) + return NativeAnoncreds.instance.credentialGetAttribute({ objectHandle: this.handle, name: 'cred_def_id' }) } public get revocationRegistryId() { - return anoncreds.credentialGetAttribute({ objectHandle: this.handle, name: 'rev_reg_id' }) + return NativeAnoncreds.instance.credentialGetAttribute({ objectHandle: this.handle, name: 'rev_reg_id' }) } public get revocationRegistryIndex() { - const index = anoncreds.credentialGetAttribute({ objectHandle: this.handle, name: 'rev_reg_index' }) + const index = NativeAnoncreds.instance.credentialGetAttribute({ objectHandle: this.handle, name: 'rev_reg_index' }) return index ? Number(index) : undefined } public toW3c(options: CredentialToW3cOptions): W3cCredential { return new W3cCredential( - anoncreds.credentialToW3c({ + NativeAnoncreds.instance.credentialToW3c({ objectHandle: this.handle, issuerId: options.issuerId, w3cVersion: options.w3cVersion, @@ -161,6 +161,8 @@ export class Credential extends AnoncredsObject { } public static fromW3c(options: CredentialFromW3cOptions) { - return new Credential(anoncreds.credentialFromW3c({ objectHandle: options.credential.handle }).handle) + return new Credential( + NativeAnoncreds.instance.credentialFromW3c({ objectHandle: options.credential.handle }).handle + ) } } diff --git a/packages/anoncreds-shared/src/api/CredentialDefinition.ts b/packages/anoncreds-shared/src/api/CredentialDefinition.ts index be3440c..3c29ec8 100644 --- a/packages/anoncreds-shared/src/api/CredentialDefinition.ts +++ b/packages/anoncreds-shared/src/api/CredentialDefinition.ts @@ -2,7 +2,7 @@ import type { ObjectHandle } from '../ObjectHandle' import type { JsonObject } from '../types' import { AnoncredsObject } from '../AnoncredsObject' -import { anoncreds } from '../register' +import { NativeAnoncreds } from '../register' import { CredentialDefinitionPrivate } from './CredentialDefinitionPrivate' import { KeyCorrectnessProof } from './KeyCorrectnessProof' @@ -33,7 +33,7 @@ export class CredentialDefinition extends AnoncredsObject { options.schema instanceof Schema ? options.schema.handle : pushToArray(Schema.fromJson(options.schema).handle, objectHandles) - createReturnObj = anoncreds.createCredentialDefinition({ + createReturnObj = NativeAnoncreds.instance.createCredentialDefinition({ schemaId: options.schemaId, schema, signatureType: options.signatureType, @@ -54,6 +54,8 @@ export class CredentialDefinition extends AnoncredsObject { } public static fromJson(json: JsonObject) { - return new CredentialDefinition(anoncreds.credentialDefinitionFromJson({ json: JSON.stringify(json) }).handle) + return new CredentialDefinition( + NativeAnoncreds.instance.credentialDefinitionFromJson({ json: JSON.stringify(json) }).handle + ) } } diff --git a/packages/anoncreds-shared/src/api/CredentialDefinitionPrivate.ts b/packages/anoncreds-shared/src/api/CredentialDefinitionPrivate.ts index 230c5fe..a8d8680 100644 --- a/packages/anoncreds-shared/src/api/CredentialDefinitionPrivate.ts +++ b/packages/anoncreds-shared/src/api/CredentialDefinitionPrivate.ts @@ -1,12 +1,12 @@ import type { JsonObject } from '../types' import { AnoncredsObject } from '../AnoncredsObject' -import { anoncreds } from '../register' +import { NativeAnoncreds } from '../register' export class CredentialDefinitionPrivate extends AnoncredsObject { public static fromJson(json: JsonObject) { return new CredentialDefinitionPrivate( - anoncreds.credentialDefinitionPrivateFromJson({ json: JSON.stringify(json) }).handle + NativeAnoncreds.instance.credentialDefinitionPrivateFromJson({ json: JSON.stringify(json) }).handle ) } } diff --git a/packages/anoncreds-shared/src/api/CredentialOffer.ts b/packages/anoncreds-shared/src/api/CredentialOffer.ts index 701128e..9edc09a 100644 --- a/packages/anoncreds-shared/src/api/CredentialOffer.ts +++ b/packages/anoncreds-shared/src/api/CredentialOffer.ts @@ -2,7 +2,7 @@ import type { ObjectHandle } from '../ObjectHandle' import type { JsonObject } from '../types' import { AnoncredsObject } from '../AnoncredsObject' -import { anoncreds } from '../register' +import { NativeAnoncreds } from '../register' import { KeyCorrectnessProof } from './KeyCorrectnessProof' import { pushToArray } from './utils' @@ -24,7 +24,7 @@ export class CredentialOffer extends AnoncredsObject { ? options.keyCorrectnessProof.handle : pushToArray(KeyCorrectnessProof.fromJson(options.keyCorrectnessProof).handle, objectHandles) - credentialOfferHandle = anoncreds.createCredentialOffer({ + credentialOfferHandle = NativeAnoncreds.instance.createCredentialOffer({ schemaId: options.schemaId, credentialDefinitionId: options.credentialDefinitionId, keyCorrectnessProof, @@ -38,6 +38,6 @@ export class CredentialOffer extends AnoncredsObject { } public static fromJson(json: JsonObject) { - return new CredentialOffer(anoncreds.credentialOfferFromJson({ json: JSON.stringify(json) }).handle) + return new CredentialOffer(NativeAnoncreds.instance.credentialOfferFromJson({ json: JSON.stringify(json) }).handle) } } diff --git a/packages/anoncreds-shared/src/api/CredentialRequest.ts b/packages/anoncreds-shared/src/api/CredentialRequest.ts index 2541b6e..6871ee4 100644 --- a/packages/anoncreds-shared/src/api/CredentialRequest.ts +++ b/packages/anoncreds-shared/src/api/CredentialRequest.ts @@ -2,7 +2,7 @@ import type { ObjectHandle } from '../ObjectHandle' import type { JsonObject } from '../types' import { AnoncredsObject } from '../AnoncredsObject' -import { anoncreds } from '../register' +import { NativeAnoncreds } from '../register' import { CredentialDefinition } from './CredentialDefinition' import { CredentialOffer } from './CredentialOffer' @@ -37,7 +37,7 @@ export class CredentialRequest extends AnoncredsObject { ? options.credentialOffer.handle : pushToArray(CredentialOffer.fromJson(options.credentialOffer).handle, objectHandles) - createReturnObj = anoncreds.createCredentialRequest({ + createReturnObj = NativeAnoncreds.instance.createCredentialRequest({ entropy: options.entropy, proverDid: options.proverDid, credentialDefinition, @@ -57,6 +57,8 @@ export class CredentialRequest extends AnoncredsObject { } public static fromJson(json: JsonObject) { - return new CredentialRequest(anoncreds.credentialRequestFromJson({ json: JSON.stringify(json) }).handle) + return new CredentialRequest( + NativeAnoncreds.instance.credentialRequestFromJson({ json: JSON.stringify(json) }).handle + ) } } diff --git a/packages/anoncreds-shared/src/api/CredentialRequestMetadata.ts b/packages/anoncreds-shared/src/api/CredentialRequestMetadata.ts index 3ed7efb..03d0b8b 100644 --- a/packages/anoncreds-shared/src/api/CredentialRequestMetadata.ts +++ b/packages/anoncreds-shared/src/api/CredentialRequestMetadata.ts @@ -1,12 +1,12 @@ import type { JsonObject } from '../types' import { AnoncredsObject } from '../AnoncredsObject' -import { anoncreds } from '../register' +import { NativeAnoncreds } from '../register' export class CredentialRequestMetadata extends AnoncredsObject { public static fromJson(json: JsonObject) { return new CredentialRequestMetadata( - anoncreds.credentialRequestMetadataFromJson({ json: JSON.stringify(json) }).handle + NativeAnoncreds.instance.credentialRequestMetadataFromJson({ json: JSON.stringify(json) }).handle ) } } diff --git a/packages/anoncreds-shared/src/api/CredentialRevocationState.ts b/packages/anoncreds-shared/src/api/CredentialRevocationState.ts index 73015d7..6288f56 100644 --- a/packages/anoncreds-shared/src/api/CredentialRevocationState.ts +++ b/packages/anoncreds-shared/src/api/CredentialRevocationState.ts @@ -2,7 +2,7 @@ import type { ObjectHandle } from '../ObjectHandle' import type { JsonObject } from '../types' import { AnoncredsObject } from '../AnoncredsObject' -import { anoncreds } from '../register' +import { NativeAnoncreds } from '../register' import { RevocationRegistryDefinition } from './RevocationRegistryDefinition' import { RevocationStatusList } from './RevocationStatusList' @@ -41,7 +41,7 @@ export class CredentialRevocationState extends AnoncredsObject { ? options.revocationStatusList.handle : pushToArray(RevocationStatusList.fromJson(options.revocationStatusList).handle, objectHandles) - credentialRevocationStateHandle = anoncreds.createOrUpdateRevocationState({ + credentialRevocationStateHandle = NativeAnoncreds.instance.createOrUpdateRevocationState({ revocationRegistryDefinition, revocationStatusList, revocationRegistryIndex: options.revocationRegistryIndex, @@ -58,11 +58,13 @@ export class CredentialRevocationState extends AnoncredsObject { } public static fromJson(json: JsonObject) { - return new CredentialRevocationState(anoncreds.revocationStateFromJson({ json: JSON.stringify(json) }).handle) + return new CredentialRevocationState( + NativeAnoncreds.instance.revocationStateFromJson({ json: JSON.stringify(json) }).handle + ) } public update(options: UpdateRevocationStateOptions) { - this.handle = anoncreds.createOrUpdateRevocationState({ + this.handle = NativeAnoncreds.instance.createOrUpdateRevocationState({ revocationRegistryDefinition: options.revocationRegistryDefinition.handle, revocationStatusList: options.revocationStatusList.handle, revocationRegistryIndex: options.revocationRegistryIndex, diff --git a/packages/anoncreds-shared/src/api/KeyCorrectnessProof.ts b/packages/anoncreds-shared/src/api/KeyCorrectnessProof.ts index ad2bcea..7cad48a 100644 --- a/packages/anoncreds-shared/src/api/KeyCorrectnessProof.ts +++ b/packages/anoncreds-shared/src/api/KeyCorrectnessProof.ts @@ -1,10 +1,12 @@ import type { JsonObject } from '../types' import { AnoncredsObject } from '../AnoncredsObject' -import { anoncreds } from '../register' +import { NativeAnoncreds } from '../register' export class KeyCorrectnessProof extends AnoncredsObject { public static fromJson(json: JsonObject) { - return new KeyCorrectnessProof(anoncreds.keyCorrectnessProofFromJson({ json: JSON.stringify(json) }).handle) + return new KeyCorrectnessProof( + NativeAnoncreds.instance.keyCorrectnessProofFromJson({ json: JSON.stringify(json) }).handle + ) } } diff --git a/packages/anoncreds-shared/src/api/LinkSecret.ts b/packages/anoncreds-shared/src/api/LinkSecret.ts index 4a7ce02..04679d4 100644 --- a/packages/anoncreds-shared/src/api/LinkSecret.ts +++ b/packages/anoncreds-shared/src/api/LinkSecret.ts @@ -1,7 +1,7 @@ -import { anoncreds } from '../register' +import { NativeAnoncreds } from '../register' export class LinkSecret { public static create(): string { - return anoncreds.createLinkSecret() + return NativeAnoncreds.instance.createLinkSecret() } } diff --git a/packages/anoncreds-shared/src/api/Presentation.ts b/packages/anoncreds-shared/src/api/Presentation.ts index 5db166a..05f671b 100644 --- a/packages/anoncreds-shared/src/api/Presentation.ts +++ b/packages/anoncreds-shared/src/api/Presentation.ts @@ -3,7 +3,7 @@ import type { JsonObject } from '../types' import type { RevocationRegistry } from './RevocationRegistry' import { AnoncredsObject } from '../AnoncredsObject' -import { anoncreds } from '../register' +import { NativeAnoncreds } from '../register' import { Credential } from './Credential' import { CredentialDefinition } from './CredentialDefinition' @@ -72,7 +72,7 @@ export class Presentation extends AnoncredsObject { ? options.presentationRequest.handle : pushToArray(PresentationRequest.fromJson(options.presentationRequest).handle, objectHandles) - presentationHandle = anoncreds.createPresentation({ + presentationHandle = NativeAnoncreds.instance.createPresentation({ presentationRequest, credentials: options.credentials.map((item) => ({ credential: @@ -120,7 +120,7 @@ export class Presentation extends AnoncredsObject { } public static fromJson(json: JsonObject) { - return new Presentation(anoncreds.presentationFromJson({ json: JSON.stringify(json) }).handle) + return new Presentation(NativeAnoncreds.instance.presentationFromJson({ json: JSON.stringify(json) }).handle) } public verify(options: VerifyPresentationOptions) { @@ -146,7 +146,7 @@ export class Presentation extends AnoncredsObject { ? options.presentationRequest.handle : pushToArray(PresentationRequest.fromJson(options.presentationRequest).handle, objectHandles) - verified = anoncreds.verifyPresentation({ + verified = NativeAnoncreds.instance.verifyPresentation({ presentation: this.handle, presentationRequest, schemas: schemas.map((o) => diff --git a/packages/anoncreds-shared/src/api/PresentationRequest.ts b/packages/anoncreds-shared/src/api/PresentationRequest.ts index 0b29548..fcc0ad2 100644 --- a/packages/anoncreds-shared/src/api/PresentationRequest.ts +++ b/packages/anoncreds-shared/src/api/PresentationRequest.ts @@ -1,10 +1,12 @@ import type { JsonObject } from '../types' import { AnoncredsObject } from '../AnoncredsObject' -import { anoncreds } from '../register' +import { NativeAnoncreds } from '../register' export class PresentationRequest extends AnoncredsObject { public static fromJson(json: JsonObject) { - return new PresentationRequest(anoncreds.presentationRequestFromJson({ json: JSON.stringify(json) }).handle) + return new PresentationRequest( + NativeAnoncreds.instance.presentationRequestFromJson({ json: JSON.stringify(json) }).handle + ) } } diff --git a/packages/anoncreds-shared/src/api/RevocationRegistry.ts b/packages/anoncreds-shared/src/api/RevocationRegistry.ts index 65bc83a..698738c 100644 --- a/packages/anoncreds-shared/src/api/RevocationRegistry.ts +++ b/packages/anoncreds-shared/src/api/RevocationRegistry.ts @@ -2,7 +2,7 @@ import type { JsonObject } from '../types' import type { RevocationRegistryDefinition } from './RevocationRegistryDefinition' import { AnoncredsObject } from '../AnoncredsObject' -import { anoncreds } from '../register' +import { NativeAnoncreds } from '../register' export type UpdateRevocationRegistryOptions = { revocationRegistryDefinition: RevocationRegistryDefinition @@ -13,6 +13,8 @@ export type UpdateRevocationRegistryOptions = { export class RevocationRegistry extends AnoncredsObject { public static fromJson(json: JsonObject) { - return new RevocationRegistry(anoncreds.revocationRegistryFromJson({ json: JSON.stringify(json) }).handle) + return new RevocationRegistry( + NativeAnoncreds.instance.revocationRegistryFromJson({ json: JSON.stringify(json) }).handle + ) } } diff --git a/packages/anoncreds-shared/src/api/RevocationRegistryDefinition.ts b/packages/anoncreds-shared/src/api/RevocationRegistryDefinition.ts index a904eed..b7f5d76 100644 --- a/packages/anoncreds-shared/src/api/RevocationRegistryDefinition.ts +++ b/packages/anoncreds-shared/src/api/RevocationRegistryDefinition.ts @@ -2,7 +2,7 @@ import type { ObjectHandle } from '../ObjectHandle' import type { JsonObject } from '../types' import { AnoncredsObject } from '../AnoncredsObject' -import { anoncreds } from '../register' +import { NativeAnoncreds } from '../register' import { CredentialDefinition } from './CredentialDefinition' import { RevocationRegistryDefinitionPrivate } from './RevocationRegistryDefinitionPrivate' @@ -33,7 +33,7 @@ export class RevocationRegistryDefinition extends AnoncredsObject { ? options.credentialDefinition.handle : pushToArray(CredentialDefinition.fromJson(options.credentialDefinition).handle, objectHandles) - createReturnObj = anoncreds.createRevocationRegistryDefinition({ + createReturnObj = NativeAnoncreds.instance.createRevocationRegistryDefinition({ ...options, credentialDefinition, }) @@ -54,25 +54,34 @@ export class RevocationRegistryDefinition extends AnoncredsObject { public static fromJson(json: JsonObject) { return new RevocationRegistryDefinition( - anoncreds.revocationRegistryDefinitionFromJson({ json: JSON.stringify(json) }).handle + NativeAnoncreds.instance.revocationRegistryDefinitionFromJson({ json: JSON.stringify(json) }).handle ) } public getId() { - return anoncreds.revocationRegistryDefinitionGetAttribute({ objectHandle: this.handle, name: 'id' }) + return NativeAnoncreds.instance.revocationRegistryDefinitionGetAttribute({ objectHandle: this.handle, name: 'id' }) } public getMaximumCredentialNumber() { return Number( - anoncreds.revocationRegistryDefinitionGetAttribute({ objectHandle: this.handle, name: 'max_cred_num' }) + NativeAnoncreds.instance.revocationRegistryDefinitionGetAttribute({ + objectHandle: this.handle, + name: 'max_cred_num', + }) ) } public getTailsHash() { - return anoncreds.revocationRegistryDefinitionGetAttribute({ objectHandle: this.handle, name: 'tails_hash' }) + return NativeAnoncreds.instance.revocationRegistryDefinitionGetAttribute({ + objectHandle: this.handle, + name: 'tails_hash', + }) } public getTailsLocation() { - return anoncreds.revocationRegistryDefinitionGetAttribute({ objectHandle: this.handle, name: 'tails_location' }) + return NativeAnoncreds.instance.revocationRegistryDefinitionGetAttribute({ + objectHandle: this.handle, + name: 'tails_location', + }) } } diff --git a/packages/anoncreds-shared/src/api/RevocationRegistryDefinitionPrivate.ts b/packages/anoncreds-shared/src/api/RevocationRegistryDefinitionPrivate.ts index de7e183..a35d566 100644 --- a/packages/anoncreds-shared/src/api/RevocationRegistryDefinitionPrivate.ts +++ b/packages/anoncreds-shared/src/api/RevocationRegistryDefinitionPrivate.ts @@ -1,12 +1,12 @@ import type { JsonObject } from '../types' import { AnoncredsObject } from '../AnoncredsObject' -import { anoncreds } from '../register' +import { NativeAnoncreds } from '../register' export class RevocationRegistryDefinitionPrivate extends AnoncredsObject { public static fromJson(json: JsonObject) { return new RevocationRegistryDefinitionPrivate( - anoncreds.revocationRegistryDefinitionPrivateFromJson({ json: JSON.stringify(json) }).handle + NativeAnoncreds.instance.revocationRegistryDefinitionPrivateFromJson({ json: JSON.stringify(json) }).handle ) } } diff --git a/packages/anoncreds-shared/src/api/RevocationStatusList.ts b/packages/anoncreds-shared/src/api/RevocationStatusList.ts index be75bf3..2cf8928 100644 --- a/packages/anoncreds-shared/src/api/RevocationStatusList.ts +++ b/packages/anoncreds-shared/src/api/RevocationStatusList.ts @@ -2,7 +2,7 @@ import type { ObjectHandle } from '../ObjectHandle' import type { JsonObject } from '../types' import { AnoncredsObject } from '../AnoncredsObject' -import { anoncreds } from '../register' +import { NativeAnoncreds } from '../register' import { CredentialDefinition } from './CredentialDefinition' import { RevocationRegistryDefinition } from './RevocationRegistryDefinition' @@ -58,7 +58,7 @@ export class RevocationStatusList extends AnoncredsObject { objectHandles ) - revocationStatusListHandle = anoncreds.createRevocationStatusList({ + revocationStatusListHandle = NativeAnoncreds.instance.createRevocationStatusList({ ...options, credentialDefinition, revocationRegistryDefinition, @@ -73,11 +73,13 @@ export class RevocationStatusList extends AnoncredsObject { } public static fromJson(json: JsonObject) { - return new RevocationStatusList(anoncreds.revocationStatusListFromJson({ json: JSON.stringify(json) }).handle) + return new RevocationStatusList( + NativeAnoncreds.instance.revocationStatusListFromJson({ json: JSON.stringify(json) }).handle + ) } public updateTimestamp(options: UpdateRevocationStatusListTimestampOptions) { - const updatedRevocationStatusList = anoncreds.updateRevocationStatusListTimestampOnly({ + const updatedRevocationStatusList = NativeAnoncreds.instance.updateRevocationStatusListTimestampOnly({ timestamp: options.timestamp, currentRevocationStatusList: this.handle, }) @@ -109,7 +111,7 @@ export class RevocationStatusList extends AnoncredsObject { objectHandles ) - const updatedRevocationStatusList = anoncreds.updateRevocationStatusList({ + const updatedRevocationStatusList = NativeAnoncreds.instance.updateRevocationStatusList({ ...options, credentialDefinition, revocationRegistryDefinition, diff --git a/packages/anoncreds-shared/src/api/Schema.ts b/packages/anoncreds-shared/src/api/Schema.ts index 0f1ca67..8f4cac0 100644 --- a/packages/anoncreds-shared/src/api/Schema.ts +++ b/packages/anoncreds-shared/src/api/Schema.ts @@ -1,7 +1,7 @@ import type { JsonObject } from '../types' import { AnoncredsObject } from '../AnoncredsObject' -import { anoncreds } from '../register' +import { NativeAnoncreds } from '../register' export type CreateSchemaOptions = { name: string @@ -12,10 +12,10 @@ export type CreateSchemaOptions = { export class Schema extends AnoncredsObject { public static create(options: CreateSchemaOptions) { - return new Schema(anoncreds.createSchema(options).handle) + return new Schema(NativeAnoncreds.instance.createSchema(options).handle) } public static fromJson(json: JsonObject) { - return new Schema(anoncreds.schemaFromJson({ json: JSON.stringify(json) }).handle) + return new Schema(NativeAnoncreds.instance.schemaFromJson({ json: JSON.stringify(json) }).handle) } } diff --git a/packages/anoncreds-shared/src/api/W3cCredential.ts b/packages/anoncreds-shared/src/api/W3cCredential.ts index c195133..e583870 100644 --- a/packages/anoncreds-shared/src/api/W3cCredential.ts +++ b/packages/anoncreds-shared/src/api/W3cCredential.ts @@ -4,7 +4,7 @@ import type { CredentialRevocationConfig } from './CredentialRevocationConfig' import type { RevocationStatusList } from './RevocationStatusList' import { AnoncredsObject } from '../AnoncredsObject' -import { anoncreds } from '../register' +import { NativeAnoncreds } from '../register' import { Credential } from './Credential' import { CredentialDefinition } from './CredentialDefinition' @@ -68,7 +68,7 @@ export class W3cCredential extends AnoncredsObject { ? options.credentialRequest.handle : pushToArray(CredentialRequest.fromJson(options.credentialRequest).handle, objectHandles) - credential = anoncreds.createW3cCredential({ + credential = NativeAnoncreds.instance.createW3cCredential({ credentialDefinition, credentialDefinitionPrivate, credentialOffer, @@ -86,7 +86,7 @@ export class W3cCredential extends AnoncredsObject { } public static fromJson(json: JsonObject) { - return new W3cCredential(anoncreds.w3cCredentialFromJson({ json: JSON.stringify(json) }).handle) + return new W3cCredential(NativeAnoncreds.instance.w3cCredentialFromJson({ json: JSON.stringify(json) }).handle) } public process(options: ProcessW3cCredentialOptions) { @@ -114,7 +114,7 @@ export class W3cCredential extends AnoncredsObject { ) : undefined - credential = anoncreds.processW3cCredential({ + credential = NativeAnoncreds.instance.processW3cCredential({ credential: this.handle, credentialDefinition, credentialRequestMetadata, @@ -135,41 +135,47 @@ export class W3cCredential extends AnoncredsObject { private getProofDetails(): ObjectHandle { if (!this.proofDetails) { - this.proofDetails = anoncreds.w3cCredentialGetIntegrityProofDetails({ objectHandle: this.handle }) + this.proofDetails = NativeAnoncreds.instance.w3cCredentialGetIntegrityProofDetails({ objectHandle: this.handle }) } return this.proofDetails } public get schemaId() { const proofDetails = this.getProofDetails() - return anoncreds.w3cCredentialProofGetAttribute({ objectHandle: proofDetails, name: 'schema_id' }) + return NativeAnoncreds.instance.w3cCredentialProofGetAttribute({ objectHandle: proofDetails, name: 'schema_id' }) } public get credentialDefinitionId() { const proofDetails = this.getProofDetails() - return anoncreds.w3cCredentialProofGetAttribute({ objectHandle: proofDetails, name: 'cred_def_id' }) + return NativeAnoncreds.instance.w3cCredentialProofGetAttribute({ objectHandle: proofDetails, name: 'cred_def_id' }) } public get revocationRegistryId() { const proofDetails = this.getProofDetails() - return anoncreds.w3cCredentialProofGetAttribute({ objectHandle: proofDetails, name: 'rev_reg_id' }) + return NativeAnoncreds.instance.w3cCredentialProofGetAttribute({ objectHandle: proofDetails, name: 'rev_reg_id' }) } public get revocationRegistryIndex() { const proofDetails = this.getProofDetails() - const index = anoncreds.w3cCredentialProofGetAttribute({ objectHandle: proofDetails, name: 'rev_reg_index' }) + const index = NativeAnoncreds.instance.w3cCredentialProofGetAttribute({ + objectHandle: proofDetails, + name: 'rev_reg_index', + }) return index ? Number(index) : undefined } public get timestamp() { const proofDetails = this.getProofDetails() - const index = anoncreds.w3cCredentialProofGetAttribute({ objectHandle: proofDetails, name: 'timestamp' }) + const index = NativeAnoncreds.instance.w3cCredentialProofGetAttribute({ + objectHandle: proofDetails, + name: 'timestamp', + }) return index ? Number(index) : undefined } public toLegacy(): Credential { return new Credential( - anoncreds.credentialFromW3c({ + NativeAnoncreds.instance.credentialFromW3c({ objectHandle: this.handle, }).handle ) @@ -177,7 +183,7 @@ export class W3cCredential extends AnoncredsObject { public static fromLegacy(options: W3cCredentialFromLegacyOptions): W3cCredential { return new W3cCredential( - anoncreds.credentialToW3c({ + NativeAnoncreds.instance.credentialToW3c({ objectHandle: options.credential.handle, issuerId: options.issuerId, w3cVersion: options.w3cVersion, diff --git a/packages/anoncreds-shared/src/api/W3cPresentation.ts b/packages/anoncreds-shared/src/api/W3cPresentation.ts index 6ffe84b..ad1665d 100644 --- a/packages/anoncreds-shared/src/api/W3cPresentation.ts +++ b/packages/anoncreds-shared/src/api/W3cPresentation.ts @@ -3,8 +3,8 @@ import type { JsonObject } from '../types' import type { CredentialProve, NonRevokedIntervalOverride } from './Presentation' import { AnoncredsObject } from '../AnoncredsObject' -import { anoncreds } from '../register' +import { NativeAnoncreds } from '../register' import { CredentialDefinition } from './CredentialDefinition' import { CredentialRevocationState } from './CredentialRevocationState' import { PresentationRequest } from './PresentationRequest' @@ -51,7 +51,7 @@ export class W3cPresentation extends AnoncredsObject { ? options.presentationRequest.handle : pushToArray(PresentationRequest.fromJson(options.presentationRequest).handle, objectHandles) - presentationHandle = anoncreds.createW3cPresentation({ + presentationHandle = NativeAnoncreds.instance.createW3cPresentation({ presentationRequest, credentials: options.credentials.map((item) => ({ credential: @@ -98,7 +98,7 @@ export class W3cPresentation extends AnoncredsObject { } public static fromJson(json: JsonObject) { - return new W3cPresentation(anoncreds.w3cPresentationFromJson({ json: JSON.stringify(json) }).handle) + return new W3cPresentation(NativeAnoncreds.instance.w3cPresentationFromJson({ json: JSON.stringify(json) }).handle) } public verify(options: VerifyW3cPresentationOptions) { @@ -124,7 +124,7 @@ export class W3cPresentation extends AnoncredsObject { ? options.presentationRequest.handle : pushToArray(PresentationRequest.fromJson(options.presentationRequest).handle, objectHandles) - verified = anoncreds.verifyW3cPresentation({ + verified = NativeAnoncreds.instance.verifyW3cPresentation({ presentation: this.handle, presentationRequest, schemas: schemas.map((o) => diff --git a/packages/anoncreds-shared/src/register.ts b/packages/anoncreds-shared/src/register.ts index 6fd4f25..6b39ff8 100644 --- a/packages/anoncreds-shared/src/register.ts +++ b/packages/anoncreds-shared/src/register.ts @@ -1,7 +1,34 @@ import type { Anoncreds } from './Anoncreds' +import { AnoncredsError } from './error' +/** + * @deprecated use `NativeAnoncreds`.instance` instead + */ export let anoncreds: Anoncreds +export class NativeAnoncreds { + static #nativeAnoncreds: Anoncreds + + public static get instance(): Anoncreds { + if (!NativeAnoncreds.#nativeAnoncreds) + throw AnoncredsError.customError({ + message: + "Native anoncreds has not been registered yet. Make sure to import '@hyperledger/anoncreds-nodejs' or '@hyperledger/anoncreds-react-native', or call 'NativeAnoncreds.register' with a custom implementation.", + }) + + return NativeAnoncreds.#nativeAnoncreds + } + + public static register(nativeAnoncreds: Anoncreds) { + anoncreds = nativeAnoncreds + NativeAnoncreds.#nativeAnoncreds = nativeAnoncreds + } +} + +/** + * @deprecated use `NativeAnoncreds.register` instead + */ export const registerAnoncreds = ({ lib }: { lib: Anoncreds }) => { anoncreds = lib + NativeAnoncreds.register(lib) }