@ayanworks/credo-polygon-w3c-module 2.0.1 → 2.0.2-alpha-20260310100644
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/PolygonApi.d.mts +2 -10
- package/build/PolygonApi.d.mts.map +1 -1
- package/build/dids/PolygonDidRegistrar.d.mts +2 -1
- package/build/dids/PolygonDidRegistrar.d.mts.map +1 -1
- package/build/dids/PolygonDidRegistrar.mjs +10 -3
- package/build/dids/PolygonDidRegistrar.mjs.map +1 -1
- package/build/dids/PolygonDidResolver.d.mts +2 -3
- package/build/dids/PolygonDidResolver.d.mts.map +1 -1
- package/build/dids/PolygonDidResolver.mjs +9 -2
- package/build/dids/PolygonDidResolver.mjs.map +1 -1
- package/build/ledger/PolygonLedgerService.d.mts +2 -10
- package/build/ledger/PolygonLedgerService.d.mts.map +1 -1
- package/build/ledger/PolygonLedgerService.mjs +1 -0
- package/build/ledger/PolygonLedgerService.mjs.map +1 -1
- package/package.json +12 -10
package/build/PolygonApi.d.mts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { CreateSchemaOperationOptions, DidOperationOptions, PolygonLedgerService } from "./ledger/PolygonLedgerService.mjs";
|
|
2
2
|
import "./ledger/index.mjs";
|
|
3
3
|
import { AgentContext } from "@credo-ts/core";
|
|
4
|
+
import * as _ayanworks_polygon_schema_manager0 from "@ayanworks/polygon-schema-manager";
|
|
4
5
|
|
|
5
6
|
//#region src/PolygonApi.d.ts
|
|
6
7
|
declare class PolygonApi {
|
|
@@ -36,16 +37,7 @@ declare class PolygonApi {
|
|
|
36
37
|
resourceTxnHash?: undefined;
|
|
37
38
|
}>;
|
|
38
39
|
getSchemaById(did: string, schemaId: string): Promise<any>;
|
|
39
|
-
estimateFeeForDidOperation(options: DidOperationOptions): Promise<
|
|
40
|
-
transactionFee: string;
|
|
41
|
-
gasLimit: string;
|
|
42
|
-
gasPrice: string;
|
|
43
|
-
maxFeePerGas: number;
|
|
44
|
-
maxPriorityFeePerGas: number;
|
|
45
|
-
network: string;
|
|
46
|
-
chainId: string;
|
|
47
|
-
method: string;
|
|
48
|
-
} | null | undefined>;
|
|
40
|
+
estimateFeeForDidOperation(options: DidOperationOptions): Promise<_ayanworks_polygon_schema_manager0.EstimatedTxDetails | null>;
|
|
49
41
|
estimateFeeForSchemaOperation(options: CreateSchemaOperationOptions): Promise<{} | undefined>;
|
|
50
42
|
}
|
|
51
43
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolygonApi.d.mts","names":[],"sources":["../src/PolygonApi.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"PolygonApi.d.mts","names":[],"sources":["../src/PolygonApi.ts"],"mappings":";;;;;;cAMa,UAAA;EAAA,QACH,YAAA;EAAA,QACA,aAAA;cAGgB,YAAA,EAAc,YAAA,EACN,aAAA,EAAe,oBAAA;EAMlC,YAAA,CAAA;IAAe,GAAA;IAAK,UAAA;IAAY;EAAA;IAAY,GAAA;IAAa,UAAA;IAAoB,MAAA;EAAA,IAAgB,OAAA;;;;;;;;;;;;;;;;;;;;EAK7F,aAAA,CAAc,GAAA,UAAa,QAAA,WAAgB,OAAA;EAK3C,0BAAA,CAA2B,OAAA,EAAS,mBAAA,GAAmB,OAAA,CAAA,kCAAA,CAAA,kBAAA;EAKvD,6BAAA,CAA8B,OAAA,EAAS,4BAAA,GAA4B,OAAA;AAAA"}
|
|
@@ -3,7 +3,7 @@ import { AgentContext, DidCreateOptions, DidCreateResult, DidDeactivateOptions,
|
|
|
3
3
|
//#region src/dids/PolygonDidRegistrar.d.ts
|
|
4
4
|
declare class PolygonDidRegistrar implements DidRegistrar {
|
|
5
5
|
readonly supportedMethods: string[];
|
|
6
|
-
private resolver
|
|
6
|
+
private resolver?;
|
|
7
7
|
/**
|
|
8
8
|
* Import a private key to KMS with idempotency check
|
|
9
9
|
* Uses base58 public key as keyId for backward compatibility
|
|
@@ -14,6 +14,7 @@ declare class PolygonDidRegistrar implements DidRegistrar {
|
|
|
14
14
|
deactivate(agentContext: AgentContext, options: DidDeactivateOptions): Promise<DidDeactivateResult>;
|
|
15
15
|
private getSigningKey;
|
|
16
16
|
private getPublicKeyFromDid;
|
|
17
|
+
private _getResolver;
|
|
17
18
|
}
|
|
18
19
|
interface PolygonDidCreateOptions extends DidCreateOptions {
|
|
19
20
|
method: 'polygon';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolygonDidRegistrar.d.mts","names":[],"sources":["../../src/dids/PolygonDidRegistrar.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"PolygonDidRegistrar.d.mts","names":[],"sources":["../../src/dids/PolygonDidRegistrar.ts"],"mappings":";;;cA8Ba,mBAAA,YAA+B,YAAA;EAAA,SAC1B,gBAAA;EAAA,QACR,QAAA;EAFuB;;;;EAAA,QAQjB,cAAA;EA2CD,MAAA,CAAO,YAAA,EAAc,YAAA,EAAc,OAAA,EAAS,uBAAA,GAA0B,OAAA,CAAQ,eAAA;EAsF9E,MAAA,CAAO,YAAA,EAAc,YAAA,EAAc,OAAA,EAAS,uBAAA,GAA0B,OAAA,CAAQ,eAAA;EA2H9E,UAAA,CAAW,YAAA,EAAc,YAAA,EAAc,OAAA,EAAS,oBAAA,GAAuB,OAAA,CAAQ,mBAAA;EAAA,QAqE9E,aAAA;EAAA,QAmBA,mBAAA;EAAA,QAiBN,YAAA;AAAA;AAAA,UAWO,uBAAA,SAAgC,gBAAA;EAC/C,MAAA;EACA,GAAA;EACA,OAAA;IACE,OAAA;IACA,QAAA;EAAA;EAEF,MAAA;IACE,UAAA,EAAY,UAAA;EAAA;AAAA;AAAA,UAIC,uBAAA,SAAgC,gBAAA;EAC/C,MAAA;EACA,GAAA;EACA,WAAA,EAAa,WAAA;EACb,MAAA;IACE,UAAA,EAAY,UAAA;EAAA;AAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { buildDid, createSecp256k1PublicJwk, getSecp256k1DidDoc, validateSpecCompliantPayload } from "./didPolygonUtil.mjs";
|
|
2
|
+
import { PolygonModuleConfig } from "../PolygonModuleConfig.mjs";
|
|
2
3
|
import { PolygonLedgerService } from "../ledger/PolygonLedgerService.mjs";
|
|
3
4
|
import "../ledger/index.mjs";
|
|
4
5
|
import { Buffer, CredoError, DidDocument, DidDocumentBuilder, DidDocumentRole, DidRecord, DidRepository, JsonTransformer, TypedArrayEncoder, getEcdsaSecp256k1VerificationKey2019 } from "@credo-ts/core";
|
|
@@ -12,7 +13,6 @@ import { Resolver } from "did-resolver";
|
|
|
12
13
|
var PolygonDidRegistrar = class {
|
|
13
14
|
constructor() {
|
|
14
15
|
this.supportedMethods = ["polygon"];
|
|
15
|
-
this.resolver = new Resolver(getResolver());
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
18
|
* Import a private key to KMS with idempotency check
|
|
@@ -115,7 +115,7 @@ var PolygonDidRegistrar = class {
|
|
|
115
115
|
const isValidDidDoc = validateSpecCompliantPayload(options.didDocument);
|
|
116
116
|
if (options.didDocument && isValidDidDoc === null) {
|
|
117
117
|
didDocument = options.didDocument;
|
|
118
|
-
const resolvedDocument = await this.
|
|
118
|
+
const resolvedDocument = await this._getResolver(agentContext).resolve(didDocument.id);
|
|
119
119
|
didRecord = await didRepository.findCreatedDid(agentContext, didDocument.id);
|
|
120
120
|
if (!resolvedDocument.didDocument || resolvedDocument.didDocumentMetadata.deactivated || !didRecord) return {
|
|
121
121
|
didDocumentMetadata: {},
|
|
@@ -199,7 +199,7 @@ var PolygonDidRegistrar = class {
|
|
|
199
199
|
const ledgerService = agentContext.dependencyManager.resolve(PolygonLedgerService);
|
|
200
200
|
const did = options.did;
|
|
201
201
|
try {
|
|
202
|
-
const { didDocument, didDocumentMetadata } = await this.
|
|
202
|
+
const { didDocument, didDocumentMetadata } = await this._getResolver(agentContext).resolve(did);
|
|
203
203
|
const didRecord = await didRepository.findCreatedDid(agentContext, did);
|
|
204
204
|
if (!didDocument || didDocumentMetadata.deactivated || !didRecord) return {
|
|
205
205
|
didDocumentMetadata: {},
|
|
@@ -253,6 +253,13 @@ var PolygonDidRegistrar = class {
|
|
|
253
253
|
if (!didRecord.didDocument?.verificationMethod) throw new CredoError("VerificationMethod not found cannot get public key");
|
|
254
254
|
return didRecord.didDocument.verificationMethod[0].publicKeyBase58;
|
|
255
255
|
}
|
|
256
|
+
_getResolver(agentContext) {
|
|
257
|
+
if (!this.resolver) {
|
|
258
|
+
const polygonOptions = agentContext.dependencyManager.resolve(PolygonModuleConfig);
|
|
259
|
+
this.resolver = new Resolver(getResolver(polygonOptions.rpcUrl, polygonOptions.didContractAddress));
|
|
260
|
+
}
|
|
261
|
+
return this.resolver;
|
|
262
|
+
}
|
|
256
263
|
};
|
|
257
264
|
|
|
258
265
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolygonDidRegistrar.mjs","names":["EtherWallet"],"sources":["../../src/dids/PolygonDidRegistrar.ts"],"sourcesContent":["import { getResolver } from '@ayanworks/polygon-did-resolver'\nimport { AskarStoreManager, transformPrivateKeyToPrivateJwk } from '@credo-ts/askar'\nimport {\n type AgentContext,\n Buffer,\n CredoError,\n type DidCreateOptions,\n type DidCreateResult,\n type DidDeactivateOptions,\n type DidDeactivateResult,\n DidDocument,\n DidDocumentBuilder,\n DidDocumentRole,\n DidRecord,\n type DidRegistrar,\n DidRepository,\n type DidUpdateOptions,\n type DidUpdateResult,\n getEcdsaSecp256k1VerificationKey2019,\n JsonTransformer,\n TypedArrayEncoder,\n} from '@credo-ts/core'\nimport type { KmsJwkPublic } from '@credo-ts/core/kms'\nimport { KeyManagementApi, KeyManagementKeyNotFoundError } from '@credo-ts/core/kms'\nimport { Resolver } from 'did-resolver'\nimport { Wallet as EtherWallet, JsonRpcProvider, SigningKey } from 'ethers'\nimport { PolygonLedgerService } from '../ledger'\nimport { buildDid, createSecp256k1PublicJwk, getSecp256k1DidDoc, validateSpecCompliantPayload } from './didPolygonUtil'\n\nexport class PolygonDidRegistrar implements DidRegistrar {\n public readonly supportedMethods = ['polygon']\n private resolver = new Resolver(getResolver())\n\n /**\n * Import a private key to KMS with idempotency check\n * Uses base58 public key as keyId for backward compatibility\n */\n private async importKeyToKms(\n agentContext: AgentContext,\n privateKey: Uint8Array\n ): Promise<{ publicKeyBase58: string; publicJwk: KmsJwkPublic; keyId: string }> {\n const kmsApi = agentContext.dependencyManager.resolve(KeyManagementApi)\n\n // Calculate base58 public key for kid\n const signingKey = new SigningKey(privateKey)\n const publicKeyHex = signingKey.compressedPublicKey.substring(2) // Remove '0x' prefix\n const publicKeyBuffer = Buffer.from(publicKeyHex, 'hex')\n const publicKeyBase58 = TypedArrayEncoder.toBase58(publicKeyBuffer)\n\n // Transform to JWK\n const { privateJwk } = transformPrivateKeyToPrivateJwk({\n type: { kty: 'EC', crv: 'secp256k1' },\n privateKey: privateKey,\n })\n privateJwk.kid = publicKeyBase58\n\n // Check if key already exists\n let publicJwk: any\n try {\n publicJwk = await kmsApi.getPublicKey({ keyId: publicKeyBase58 })\n } catch (error) {\n if (error instanceof KeyManagementKeyNotFoundError) {\n agentContext.config.logger.debug(`Key not found in wallet: ${error}`)\n }\n }\n let keyId = publicKeyBase58\n\n if (!publicJwk) {\n // Import new key\n const importedKey = await kmsApi.importKey({ privateJwk })\n publicJwk = importedKey.publicJwk\n keyId = importedKey.keyId\n agentContext.config.logger.debug(`Imported new key to KMS: ${keyId}`)\n } else {\n agentContext.config.logger.debug(`Key already exists in KMS: ${keyId}`)\n }\n\n return { publicKeyBase58, publicJwk, keyId }\n }\n\n public async create(agentContext: AgentContext, options: PolygonDidCreateOptions): Promise<DidCreateResult> {\n const ledgerService = agentContext.dependencyManager.resolve(PolygonLedgerService)\n const didRepository = agentContext.dependencyManager.resolve(DidRepository)\n\n const privateKey = options.secret.privateKey\n\n // Check balance using ethers wallet\n const signingKey = new SigningKey(privateKey)\n const wallet = new EtherWallet(signingKey)\n const provider = new JsonRpcProvider(ledgerService.rpcUrl)\n const value = await provider.getBalance(wallet.address)\n\n if (Number(value) === 0) {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: 'Insufficient balance in wallet',\n },\n }\n }\n\n // Import key to KMS with base58 keyId\n const { publicKeyBase58, publicJwk } = await this.importKeyToKms(agentContext, privateKey)\n\n // Build DID from public key coordinates (we know it's EC with secp256k1)\n const ecPublicJwk = publicJwk as { x: string; y: string }\n const xHex = Buffer.from(ecPublicJwk.x, 'base64url').toString('hex')\n const yHex = Buffer.from(ecPublicJwk.y, 'base64url').toString('hex')\n const fullPublicKeyHex = xHex + yHex\n const did = buildDid(options.method, options.options.network, fullPublicKeyHex)\n\n agentContext.config.logger.info(`Creating DID on ledger: ${did}`)\n\n try {\n const signingKey = await this.getSigningKey(agentContext, publicKeyBase58)\n\n const didRegistry = ledgerService.createDidRegistryInstance(signingKey)\n\n // Create DID document with PublicJwk\n const secp256k1Jwk = createSecp256k1PublicJwk(ecPublicJwk)\n const secpDidDoc = getSecp256k1DidDoc(did, secp256k1Jwk as any, options.options.endpoint)\n\n const response = await didRegistry.create(did, secpDidDoc as any)\n\n agentContext.config.logger.info(`Published did on ledger: ${did}`)\n\n const didDoc = response.didDoc\n const didDocument = JsonTransformer.fromJSON(didDoc, DidDocument)\n\n const didRecord = new DidRecord({\n did: didDocument.id,\n role: DidDocumentRole.Created,\n didDocument,\n })\n\n agentContext.config.logger.info(`Saving DID record to wallet: ${did} and did document: ${didDocument}`)\n\n await didRepository.save(agentContext, didRecord)\n\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {\n txn: response.txnHash,\n },\n didState: {\n state: 'finished',\n did: didDocument.id,\n didDocument: didDocument,\n },\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n agentContext.config.logger.error(`Error registering DID ${did} : ${errorMessage}`)\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: `unknownError: ${errorMessage}`,\n },\n }\n }\n }\n\n public async update(agentContext: AgentContext, options: PolygonDidUpdateOptions): Promise<DidUpdateResult> {\n const ledgerService = agentContext.dependencyManager.resolve(PolygonLedgerService)\n const didRepository = agentContext.dependencyManager.resolve(DidRepository)\n\n let didDocument: DidDocument\n let didRecord: DidRecord | null\n\n try {\n const isValidDidDoc = validateSpecCompliantPayload(options.didDocument)\n if (options.didDocument && isValidDidDoc === null) {\n didDocument = options.didDocument\n const resolvedDocument = await this.resolver.resolve(didDocument.id)\n didRecord = await didRepository.findCreatedDid(agentContext, didDocument.id)\n if (!resolvedDocument.didDocument || resolvedDocument.didDocumentMetadata.deactivated || !didRecord) {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: 'Did not found',\n },\n }\n }\n\n if (options?.secret?.privateKey) {\n const privateKey = options.secret.privateKey\n\n // Validate private key\n try {\n new SigningKey(privateKey)\n } catch {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: 'Invalid private key provided',\n },\n }\n }\n\n // Import key to KMS with base58 keyId\n const { publicKeyBase58: _, publicJwk } = await this.importKeyToKms(agentContext, privateKey)\n\n // Create verification method using publicJwk\n const verificationMethodCount = didDocument?.verificationMethod?.length ?? 0\n const ecPublicJwk = publicJwk as { x: string; y: string }\n const secp256k1Jwk = createSecp256k1PublicJwk(ecPublicJwk)\n const verificationMethod = getEcdsaSecp256k1VerificationKey2019({\n id: `${didDocument.id}#key-${verificationMethodCount + 1}`,\n publicJwk: secp256k1Jwk as any,\n controller: didDocument.id,\n })\n\n didDocument.verificationMethod = [...(didDocument?.verificationMethod ?? []), verificationMethod]\n }\n } else {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: isValidDidDoc ?? 'Provide a valid didDocument',\n },\n }\n }\n\n if (!didRecord) {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: 'DidRecord not found in wallet',\n },\n }\n }\n\n const publicKeyBase58 = await this.getPublicKeyFromDid(agentContext, options.did)\n\n if (!publicKeyBase58) {\n throw new CredoError('Public Key not found in wallet')\n }\n\n const signingKey = await this.getSigningKey(agentContext, publicKeyBase58)\n\n const didRegistry = ledgerService.createDidRegistryInstance(signingKey)\n\n const response = await didRegistry.update(didDocument.id, didDocument as any)\n\n if (!response) {\n throw new Error('Unable to update did document')\n }\n\n // Save the did document\n didRecord.didDocument = didDocument\n await didRepository.update(agentContext, didRecord)\n\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {\n txn: response.txnHash,\n },\n didState: {\n state: 'finished',\n did: didDocument.id,\n didDocument,\n },\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n agentContext.config.logger.error(`Error Updating DID : ${errorMessage}`)\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: `unknownError: ${errorMessage}`,\n },\n }\n }\n }\n\n public async deactivate(agentContext: AgentContext, options: DidDeactivateOptions): Promise<DidDeactivateResult> {\n const didRepository = agentContext.dependencyManager.resolve(DidRepository)\n const ledgerService = agentContext.dependencyManager.resolve(PolygonLedgerService)\n\n const did = options.did\n\n try {\n const { didDocument, didDocumentMetadata } = await this.resolver.resolve(did)\n\n const didRecord = await didRepository.findCreatedDid(agentContext, did)\n if (!didDocument || didDocumentMetadata.deactivated || !didRecord) {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: 'Did not found',\n },\n }\n }\n\n const publicKeyBase58 = await this.getPublicKeyFromDid(agentContext, options.did)\n\n if (!publicKeyBase58) {\n throw new CredoError('Public Key not found in wallet')\n }\n\n const signingKey = await this.getSigningKey(agentContext, publicKeyBase58)\n\n const didRegistry = ledgerService.createDidRegistryInstance(signingKey)\n\n const updatedDidDocument = new DidDocumentBuilder(options.did).addContext('https://www.w3.org/ns/did/v1').build()\n\n const response = await didRegistry.update(didDocument.id, updatedDidDocument as any)\n\n if (!response) {\n throw new CredoError(`Unable to deactivate did document for did : ${did}`)\n }\n\n await didRepository.update(agentContext, didRecord)\n\n return {\n didDocumentMetadata: {\n deactivated: true,\n },\n didRegistrationMetadata: {\n txn: response.txnHash,\n },\n didState: {\n state: 'finished',\n did: didDocument.id,\n didDocument: JsonTransformer.fromJSON(didDocument, DidDocument),\n secret: options.secret,\n },\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n agentContext.config.logger.error(`Error deactivating DID ${errorMessage}`)\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: `unknownError: ${errorMessage}`,\n },\n }\n }\n }\n\n private async getSigningKey(agentContext: AgentContext, publicKeyBase58: string): Promise<SigningKey> {\n const askarStoreManager = agentContext.dependencyManager.resolve(AskarStoreManager)\n\n const keyEntry = await askarStoreManager.withSession(\n agentContext,\n async (session) => await session.fetchKey({ name: publicKeyBase58 })\n )\n\n if (!keyEntry) {\n throw new CredoError('Key not found in wallet')\n }\n\n const signingKey = new SigningKey(keyEntry.key.secretBytes)\n\n keyEntry.key.handle.free()\n\n return signingKey\n }\n\n private async getPublicKeyFromDid(agentContext: AgentContext, did: string) {\n const didRepository = agentContext.dependencyManager.resolve(DidRepository)\n\n const didRecord = await didRepository.findCreatedDid(agentContext, did)\n if (!didRecord) {\n throw new CredoError('DidRecord not found')\n }\n\n if (!didRecord.didDocument?.verificationMethod) {\n throw new CredoError('VerificationMethod not found cannot get public key')\n }\n\n const publicKeyBase58 = didRecord.didDocument.verificationMethod[0].publicKeyBase58\n\n return publicKeyBase58\n }\n}\n\nexport interface PolygonDidCreateOptions extends DidCreateOptions {\n method: 'polygon'\n did?: never\n options: {\n network: 'mainnet' | 'testnet'\n endpoint?: string\n }\n secret: {\n privateKey: Uint8Array\n }\n}\n\nexport interface PolygonDidUpdateOptions extends DidUpdateOptions {\n method: 'polygon'\n did: string\n didDocument: DidDocument\n secret?: {\n privateKey: Uint8Array\n }\n}\n"],"mappings":";;;;;;;;;;;AA6BA,IAAa,sBAAb,MAAyD;;OACvC,mBAAmB,CAAC,UAAU;OACtC,WAAW,IAAI,SAAS,aAAa,CAAC;;;;;;CAM9C,MAAc,eACZ,cACA,YAC8E;EAC9E,MAAM,SAAS,aAAa,kBAAkB,QAAQ,iBAAiB;EAIvE,MAAM,eADa,IAAI,WAAW,WAAW,CACb,oBAAoB,UAAU,EAAE;EAChE,MAAM,kBAAkB,OAAO,KAAK,cAAc,MAAM;EACxD,MAAM,kBAAkB,kBAAkB,SAAS,gBAAgB;EAGnE,MAAM,EAAE,eAAe,gCAAgC;GACrD,MAAM;IAAE,KAAK;IAAM,KAAK;IAAa;GACzB;GACb,CAAC;AACF,aAAW,MAAM;EAGjB,IAAI;AACJ,MAAI;AACF,eAAY,MAAM,OAAO,aAAa,EAAE,OAAO,iBAAiB,CAAC;WAC1D,OAAO;AACd,OAAI,iBAAiB,8BACnB,cAAa,OAAO,OAAO,MAAM,4BAA4B,QAAQ;;EAGzE,IAAI,QAAQ;AAEZ,MAAI,CAAC,WAAW;GAEd,MAAM,cAAc,MAAM,OAAO,UAAU,EAAE,YAAY,CAAC;AAC1D,eAAY,YAAY;AACxB,WAAQ,YAAY;AACpB,gBAAa,OAAO,OAAO,MAAM,4BAA4B,QAAQ;QAErE,cAAa,OAAO,OAAO,MAAM,8BAA8B,QAAQ;AAGzE,SAAO;GAAE;GAAiB;GAAW;GAAO;;CAG9C,MAAa,OAAO,cAA4B,SAA4D;EAC1G,MAAM,gBAAgB,aAAa,kBAAkB,QAAQ,qBAAqB;EAClF,MAAM,gBAAgB,aAAa,kBAAkB,QAAQ,cAAc;EAE3E,MAAM,aAAa,QAAQ,OAAO;EAIlC,MAAM,SAAS,IAAIA,OADA,IAAI,WAAW,WAAW,CACH;EAE1C,MAAM,QAAQ,MADG,IAAI,gBAAgB,cAAc,OAAO,CAC7B,WAAW,OAAO,QAAQ;AAEvD,MAAI,OAAO,MAAM,KAAK,EACpB,QAAO;GACL,qBAAqB,EAAE;GACvB,yBAAyB,EAAE;GAC3B,UAAU;IACR,OAAO;IACP,QAAQ;IACT;GACF;EAIH,MAAM,EAAE,iBAAiB,cAAc,MAAM,KAAK,eAAe,cAAc,WAAW;EAG1F,MAAM,cAAc;EAGpB,MAAM,mBAFO,OAAO,KAAK,YAAY,GAAG,YAAY,CAAC,SAAS,MAAM,GACvD,OAAO,KAAK,YAAY,GAAG,YAAY,CAAC,SAAS,MAAM;EAEpE,MAAM,MAAM,SAAS,QAAQ,QAAQ,QAAQ,QAAQ,SAAS,iBAAiB;AAE/E,eAAa,OAAO,OAAO,KAAK,2BAA2B,MAAM;AAEjE,MAAI;GACF,MAAM,aAAa,MAAM,KAAK,cAAc,cAAc,gBAAgB;GAE1E,MAAM,cAAc,cAAc,0BAA0B,WAAW;GAIvE,MAAM,aAAa,mBAAmB,KADjB,yBAAyB,YAAY,EACM,QAAQ,QAAQ,SAAS;GAEzF,MAAM,WAAW,MAAM,YAAY,OAAO,KAAK,WAAkB;AAEjE,gBAAa,OAAO,OAAO,KAAK,4BAA4B,MAAM;GAElE,MAAM,SAAS,SAAS;GACxB,MAAM,cAAc,gBAAgB,SAAS,QAAQ,YAAY;GAEjE,MAAM,YAAY,IAAI,UAAU;IAC9B,KAAK,YAAY;IACjB,MAAM,gBAAgB;IACtB;IACD,CAAC;AAEF,gBAAa,OAAO,OAAO,KAAK,gCAAgC,IAAI,qBAAqB,cAAc;AAEvG,SAAM,cAAc,KAAK,cAAc,UAAU;AAEjD,UAAO;IACL,qBAAqB,EAAE;IACvB,yBAAyB,EACvB,KAAK,SAAS,SACf;IACD,UAAU;KACR,OAAO;KACP,KAAK,YAAY;KACJ;KACd;IACF;WACM,OAAO;GACd,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAC9D,gBAAa,OAAO,OAAO,MAAM,yBAAyB,IAAI,KAAK,eAAe;AAClF,UAAO;IACL,qBAAqB,EAAE;IACvB,yBAAyB,EAAE;IAC3B,UAAU;KACR,OAAO;KACP,QAAQ,iBAAiB;KAC1B;IACF;;;CAIL,MAAa,OAAO,cAA4B,SAA4D;EAC1G,MAAM,gBAAgB,aAAa,kBAAkB,QAAQ,qBAAqB;EAClF,MAAM,gBAAgB,aAAa,kBAAkB,QAAQ,cAAc;EAE3E,IAAI;EACJ,IAAI;AAEJ,MAAI;GACF,MAAM,gBAAgB,6BAA6B,QAAQ,YAAY;AACvE,OAAI,QAAQ,eAAe,kBAAkB,MAAM;AACjD,kBAAc,QAAQ;IACtB,MAAM,mBAAmB,MAAM,KAAK,SAAS,QAAQ,YAAY,GAAG;AACpE,gBAAY,MAAM,cAAc,eAAe,cAAc,YAAY,GAAG;AAC5E,QAAI,CAAC,iBAAiB,eAAe,iBAAiB,oBAAoB,eAAe,CAAC,UACxF,QAAO;KACL,qBAAqB,EAAE;KACvB,yBAAyB,EAAE;KAC3B,UAAU;MACR,OAAO;MACP,QAAQ;MACT;KACF;AAGH,QAAI,SAAS,QAAQ,YAAY;KAC/B,MAAM,aAAa,QAAQ,OAAO;AAGlC,SAAI;AACF,UAAI,WAAW,WAAW;aACpB;AACN,aAAO;OACL,qBAAqB,EAAE;OACvB,yBAAyB,EAAE;OAC3B,UAAU;QACR,OAAO;QACP,QAAQ;QACT;OACF;;KAIH,MAAM,EAAE,iBAAiB,GAAG,cAAc,MAAM,KAAK,eAAe,cAAc,WAAW;KAG7F,MAAM,0BAA0B,aAAa,oBAAoB,UAAU;KAE3E,MAAM,eAAe,yBADD,UACsC;KAC1D,MAAM,qBAAqB,qCAAqC;MAC9D,IAAI,GAAG,YAAY,GAAG,OAAO,0BAA0B;MACvD,WAAW;MACX,YAAY,YAAY;MACzB,CAAC;AAEF,iBAAY,qBAAqB,CAAC,GAAI,aAAa,sBAAsB,EAAE,EAAG,mBAAmB;;SAGnG,QAAO;IACL,qBAAqB,EAAE;IACvB,yBAAyB,EAAE;IAC3B,UAAU;KACR,OAAO;KACP,QAAQ,iBAAiB;KAC1B;IACF;AAGH,OAAI,CAAC,UACH,QAAO;IACL,qBAAqB,EAAE;IACvB,yBAAyB,EAAE;IAC3B,UAAU;KACR,OAAO;KACP,QAAQ;KACT;IACF;GAGH,MAAM,kBAAkB,MAAM,KAAK,oBAAoB,cAAc,QAAQ,IAAI;AAEjF,OAAI,CAAC,gBACH,OAAM,IAAI,WAAW,iCAAiC;GAGxD,MAAM,aAAa,MAAM,KAAK,cAAc,cAAc,gBAAgB;GAI1E,MAAM,WAAW,MAFG,cAAc,0BAA0B,WAAW,CAEpC,OAAO,YAAY,IAAI,YAAmB;AAE7E,OAAI,CAAC,SACH,OAAM,IAAI,MAAM,gCAAgC;AAIlD,aAAU,cAAc;AACxB,SAAM,cAAc,OAAO,cAAc,UAAU;AAEnD,UAAO;IACL,qBAAqB,EAAE;IACvB,yBAAyB,EACvB,KAAK,SAAS,SACf;IACD,UAAU;KACR,OAAO;KACP,KAAK,YAAY;KACjB;KACD;IACF;WACM,OAAO;GACd,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAC9D,gBAAa,OAAO,OAAO,MAAM,wBAAwB,eAAe;AACxE,UAAO;IACL,qBAAqB,EAAE;IACvB,yBAAyB,EAAE;IAC3B,UAAU;KACR,OAAO;KACP,QAAQ,iBAAiB;KAC1B;IACF;;;CAIL,MAAa,WAAW,cAA4B,SAA6D;EAC/G,MAAM,gBAAgB,aAAa,kBAAkB,QAAQ,cAAc;EAC3E,MAAM,gBAAgB,aAAa,kBAAkB,QAAQ,qBAAqB;EAElF,MAAM,MAAM,QAAQ;AAEpB,MAAI;GACF,MAAM,EAAE,aAAa,wBAAwB,MAAM,KAAK,SAAS,QAAQ,IAAI;GAE7E,MAAM,YAAY,MAAM,cAAc,eAAe,cAAc,IAAI;AACvE,OAAI,CAAC,eAAe,oBAAoB,eAAe,CAAC,UACtD,QAAO;IACL,qBAAqB,EAAE;IACvB,yBAAyB,EAAE;IAC3B,UAAU;KACR,OAAO;KACP,QAAQ;KACT;IACF;GAGH,MAAM,kBAAkB,MAAM,KAAK,oBAAoB,cAAc,QAAQ,IAAI;AAEjF,OAAI,CAAC,gBACH,OAAM,IAAI,WAAW,iCAAiC;GAGxD,MAAM,aAAa,MAAM,KAAK,cAAc,cAAc,gBAAgB;GAE1E,MAAM,cAAc,cAAc,0BAA0B,WAAW;GAEvE,MAAM,qBAAqB,IAAI,mBAAmB,QAAQ,IAAI,CAAC,WAAW,+BAA+B,CAAC,OAAO;GAEjH,MAAM,WAAW,MAAM,YAAY,OAAO,YAAY,IAAI,mBAA0B;AAEpF,OAAI,CAAC,SACH,OAAM,IAAI,WAAW,+CAA+C,MAAM;AAG5E,SAAM,cAAc,OAAO,cAAc,UAAU;AAEnD,UAAO;IACL,qBAAqB,EACnB,aAAa,MACd;IACD,yBAAyB,EACvB,KAAK,SAAS,SACf;IACD,UAAU;KACR,OAAO;KACP,KAAK,YAAY;KACjB,aAAa,gBAAgB,SAAS,aAAa,YAAY;KAC/D,QAAQ,QAAQ;KACjB;IACF;WACM,OAAO;GACd,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAC9D,gBAAa,OAAO,OAAO,MAAM,0BAA0B,eAAe;AAC1E,UAAO;IACL,qBAAqB,EAAE;IACvB,yBAAyB,EAAE;IAC3B,UAAU;KACR,OAAO;KACP,QAAQ,iBAAiB;KAC1B;IACF;;;CAIL,MAAc,cAAc,cAA4B,iBAA8C;EAGpG,MAAM,WAAW,MAFS,aAAa,kBAAkB,QAAQ,kBAAkB,CAE1C,YACvC,cACA,OAAO,YAAY,MAAM,QAAQ,SAAS,EAAE,MAAM,iBAAiB,CAAC,CACrE;AAED,MAAI,CAAC,SACH,OAAM,IAAI,WAAW,0BAA0B;EAGjD,MAAM,aAAa,IAAI,WAAW,SAAS,IAAI,YAAY;AAE3D,WAAS,IAAI,OAAO,MAAM;AAE1B,SAAO;;CAGT,MAAc,oBAAoB,cAA4B,KAAa;EAGzE,MAAM,YAAY,MAFI,aAAa,kBAAkB,QAAQ,cAAc,CAErC,eAAe,cAAc,IAAI;AACvE,MAAI,CAAC,UACH,OAAM,IAAI,WAAW,sBAAsB;AAG7C,MAAI,CAAC,UAAU,aAAa,mBAC1B,OAAM,IAAI,WAAW,qDAAqD;AAK5E,SAFwB,UAAU,YAAY,mBAAmB,GAAG"}
|
|
1
|
+
{"version":3,"file":"PolygonDidRegistrar.mjs","names":["EtherWallet"],"sources":["../../src/dids/PolygonDidRegistrar.ts"],"sourcesContent":["import { getResolver } from '@ayanworks/polygon-did-resolver'\nimport { AskarStoreManager, transformPrivateKeyToPrivateJwk } from '@credo-ts/askar'\nimport {\n type AgentContext,\n Buffer,\n CredoError,\n type DidCreateOptions,\n type DidCreateResult,\n type DidDeactivateOptions,\n type DidDeactivateResult,\n DidDocument,\n DidDocumentBuilder,\n DidDocumentRole,\n DidRecord,\n type DidRegistrar,\n DidRepository,\n type DidUpdateOptions,\n type DidUpdateResult,\n getEcdsaSecp256k1VerificationKey2019,\n JsonTransformer,\n TypedArrayEncoder,\n} from '@credo-ts/core'\nimport type { KmsJwkPublic } from '@credo-ts/core/kms'\nimport { KeyManagementApi, KeyManagementKeyNotFoundError } from '@credo-ts/core/kms'\nimport { Resolver } from 'did-resolver'\nimport { Wallet as EtherWallet, JsonRpcProvider, SigningKey } from 'ethers'\nimport { PolygonLedgerService } from '../ledger'\nimport { PolygonModuleConfig } from '../PolygonModuleConfig'\nimport { buildDid, createSecp256k1PublicJwk, getSecp256k1DidDoc, validateSpecCompliantPayload } from './didPolygonUtil'\n\nexport class PolygonDidRegistrar implements DidRegistrar {\n public readonly supportedMethods = ['polygon']\n private resolver?: Resolver\n\n /**\n * Import a private key to KMS with idempotency check\n * Uses base58 public key as keyId for backward compatibility\n */\n private async importKeyToKms(\n agentContext: AgentContext,\n privateKey: Uint8Array\n ): Promise<{ publicKeyBase58: string; publicJwk: KmsJwkPublic; keyId: string }> {\n const kmsApi = agentContext.dependencyManager.resolve(KeyManagementApi)\n\n // Calculate base58 public key for kid\n const signingKey = new SigningKey(privateKey)\n const publicKeyHex = signingKey.compressedPublicKey.substring(2) // Remove '0x' prefix\n const publicKeyBuffer = Buffer.from(publicKeyHex, 'hex')\n const publicKeyBase58 = TypedArrayEncoder.toBase58(publicKeyBuffer)\n\n // Transform to JWK\n const { privateJwk } = transformPrivateKeyToPrivateJwk({\n type: { kty: 'EC', crv: 'secp256k1' },\n privateKey: privateKey,\n })\n privateJwk.kid = publicKeyBase58\n\n // Check if key already exists\n let publicJwk: any\n try {\n publicJwk = await kmsApi.getPublicKey({ keyId: publicKeyBase58 })\n } catch (error) {\n if (error instanceof KeyManagementKeyNotFoundError) {\n agentContext.config.logger.debug(`Key not found in wallet: ${error}`)\n }\n }\n let keyId = publicKeyBase58\n\n if (!publicJwk) {\n // Import new key\n const importedKey = await kmsApi.importKey({ privateJwk })\n publicJwk = importedKey.publicJwk\n keyId = importedKey.keyId\n agentContext.config.logger.debug(`Imported new key to KMS: ${keyId}`)\n } else {\n agentContext.config.logger.debug(`Key already exists in KMS: ${keyId}`)\n }\n\n return { publicKeyBase58, publicJwk, keyId }\n }\n\n public async create(agentContext: AgentContext, options: PolygonDidCreateOptions): Promise<DidCreateResult> {\n const ledgerService = agentContext.dependencyManager.resolve(PolygonLedgerService)\n const didRepository = agentContext.dependencyManager.resolve(DidRepository)\n\n const privateKey = options.secret.privateKey\n\n // Check balance using ethers wallet\n const signingKey = new SigningKey(privateKey)\n const wallet = new EtherWallet(signingKey)\n const provider = new JsonRpcProvider(ledgerService.rpcUrl)\n const value = await provider.getBalance(wallet.address)\n\n if (Number(value) === 0) {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: 'Insufficient balance in wallet',\n },\n }\n }\n\n // Import key to KMS with base58 keyId\n const { publicKeyBase58, publicJwk } = await this.importKeyToKms(agentContext, privateKey)\n\n // Build DID from public key coordinates (we know it's EC with secp256k1)\n const ecPublicJwk = publicJwk as { x: string; y: string }\n const xHex = Buffer.from(ecPublicJwk.x, 'base64url').toString('hex')\n const yHex = Buffer.from(ecPublicJwk.y, 'base64url').toString('hex')\n const fullPublicKeyHex = xHex + yHex\n const did = buildDid(options.method, options.options.network, fullPublicKeyHex)\n\n agentContext.config.logger.info(`Creating DID on ledger: ${did}`)\n\n try {\n const signingKey = await this.getSigningKey(agentContext, publicKeyBase58)\n\n const didRegistry = ledgerService.createDidRegistryInstance(signingKey)\n\n // Create DID document with PublicJwk\n const secp256k1Jwk = createSecp256k1PublicJwk(ecPublicJwk)\n const secpDidDoc = getSecp256k1DidDoc(did, secp256k1Jwk as any, options.options.endpoint)\n\n const response = await didRegistry.create(did, secpDidDoc as any)\n\n agentContext.config.logger.info(`Published did on ledger: ${did}`)\n\n const didDoc = response.didDoc\n const didDocument = JsonTransformer.fromJSON(didDoc, DidDocument)\n\n const didRecord = new DidRecord({\n did: didDocument.id,\n role: DidDocumentRole.Created,\n didDocument,\n })\n\n agentContext.config.logger.info(`Saving DID record to wallet: ${did} and did document: ${didDocument}`)\n\n await didRepository.save(agentContext, didRecord)\n\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {\n txn: response.txnHash,\n },\n didState: {\n state: 'finished',\n did: didDocument.id,\n didDocument: didDocument,\n },\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n agentContext.config.logger.error(`Error registering DID ${did} : ${errorMessage}`)\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: `unknownError: ${errorMessage}`,\n },\n }\n }\n }\n\n public async update(agentContext: AgentContext, options: PolygonDidUpdateOptions): Promise<DidUpdateResult> {\n const ledgerService = agentContext.dependencyManager.resolve(PolygonLedgerService)\n const didRepository = agentContext.dependencyManager.resolve(DidRepository)\n\n let didDocument: DidDocument\n let didRecord: DidRecord | null\n\n try {\n const isValidDidDoc = validateSpecCompliantPayload(options.didDocument)\n if (options.didDocument && isValidDidDoc === null) {\n didDocument = options.didDocument\n const resolvedDocument = await this._getResolver(agentContext).resolve(didDocument.id)\n didRecord = await didRepository.findCreatedDid(agentContext, didDocument.id)\n if (!resolvedDocument.didDocument || resolvedDocument.didDocumentMetadata.deactivated || !didRecord) {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: 'Did not found',\n },\n }\n }\n\n if (options?.secret?.privateKey) {\n const privateKey = options.secret.privateKey\n\n // Validate private key\n try {\n new SigningKey(privateKey)\n } catch {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: 'Invalid private key provided',\n },\n }\n }\n\n // Import key to KMS with base58 keyId\n const { publicKeyBase58: _, publicJwk } = await this.importKeyToKms(agentContext, privateKey)\n\n // Create verification method using publicJwk\n const verificationMethodCount = didDocument?.verificationMethod?.length ?? 0\n const ecPublicJwk = publicJwk as { x: string; y: string }\n const secp256k1Jwk = createSecp256k1PublicJwk(ecPublicJwk)\n const verificationMethod = getEcdsaSecp256k1VerificationKey2019({\n id: `${didDocument.id}#key-${verificationMethodCount + 1}`,\n publicJwk: secp256k1Jwk as any,\n controller: didDocument.id,\n })\n\n didDocument.verificationMethod = [...(didDocument?.verificationMethod ?? []), verificationMethod]\n }\n } else {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: isValidDidDoc ?? 'Provide a valid didDocument',\n },\n }\n }\n\n if (!didRecord) {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: 'DidRecord not found in wallet',\n },\n }\n }\n\n const publicKeyBase58 = await this.getPublicKeyFromDid(agentContext, options.did)\n\n if (!publicKeyBase58) {\n throw new CredoError('Public Key not found in wallet')\n }\n\n const signingKey = await this.getSigningKey(agentContext, publicKeyBase58)\n\n const didRegistry = ledgerService.createDidRegistryInstance(signingKey)\n\n const response = await didRegistry.update(didDocument.id, didDocument as any)\n\n if (!response) {\n throw new Error('Unable to update did document')\n }\n\n // Save the did document\n didRecord.didDocument = didDocument\n await didRepository.update(agentContext, didRecord)\n\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {\n txn: response.txnHash,\n },\n didState: {\n state: 'finished',\n did: didDocument.id,\n didDocument,\n },\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n agentContext.config.logger.error(`Error Updating DID : ${errorMessage}`)\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: `unknownError: ${errorMessage}`,\n },\n }\n }\n }\n\n public async deactivate(agentContext: AgentContext, options: DidDeactivateOptions): Promise<DidDeactivateResult> {\n const didRepository = agentContext.dependencyManager.resolve(DidRepository)\n const ledgerService = agentContext.dependencyManager.resolve(PolygonLedgerService)\n\n const did = options.did\n\n try {\n const { didDocument, didDocumentMetadata } = await this._getResolver(agentContext).resolve(did)\n\n const didRecord = await didRepository.findCreatedDid(agentContext, did)\n if (!didDocument || didDocumentMetadata.deactivated || !didRecord) {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: 'Did not found',\n },\n }\n }\n\n const publicKeyBase58 = await this.getPublicKeyFromDid(agentContext, options.did)\n\n if (!publicKeyBase58) {\n throw new CredoError('Public Key not found in wallet')\n }\n\n const signingKey = await this.getSigningKey(agentContext, publicKeyBase58)\n\n const didRegistry = ledgerService.createDidRegistryInstance(signingKey)\n\n const updatedDidDocument = new DidDocumentBuilder(options.did).addContext('https://www.w3.org/ns/did/v1').build()\n\n const response = await didRegistry.update(didDocument.id, updatedDidDocument as any)\n\n if (!response) {\n throw new CredoError(`Unable to deactivate did document for did : ${did}`)\n }\n\n await didRepository.update(agentContext, didRecord)\n\n return {\n didDocumentMetadata: {\n deactivated: true,\n },\n didRegistrationMetadata: {\n txn: response.txnHash,\n },\n didState: {\n state: 'finished',\n did: didDocument.id,\n didDocument: JsonTransformer.fromJSON(didDocument, DidDocument),\n secret: options.secret,\n },\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n agentContext.config.logger.error(`Error deactivating DID ${errorMessage}`)\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: `unknownError: ${errorMessage}`,\n },\n }\n }\n }\n\n private async getSigningKey(agentContext: AgentContext, publicKeyBase58: string): Promise<SigningKey> {\n const askarStoreManager = agentContext.dependencyManager.resolve(AskarStoreManager)\n\n const keyEntry = await askarStoreManager.withSession(\n agentContext,\n async (session) => await session.fetchKey({ name: publicKeyBase58 })\n )\n\n if (!keyEntry) {\n throw new CredoError('Key not found in wallet')\n }\n\n const signingKey = new SigningKey(keyEntry.key.secretBytes)\n\n keyEntry.key.handle.free()\n\n return signingKey\n }\n\n private async getPublicKeyFromDid(agentContext: AgentContext, did: string) {\n const didRepository = agentContext.dependencyManager.resolve(DidRepository)\n\n const didRecord = await didRepository.findCreatedDid(agentContext, did)\n if (!didRecord) {\n throw new CredoError('DidRecord not found')\n }\n\n if (!didRecord.didDocument?.verificationMethod) {\n throw new CredoError('VerificationMethod not found cannot get public key')\n }\n\n const publicKeyBase58 = didRecord.didDocument.verificationMethod[0].publicKeyBase58\n\n return publicKeyBase58\n }\n\n private _getResolver(agentContext: AgentContext): Resolver {\n if (!this.resolver) {\n const polygonOptions = agentContext.dependencyManager.resolve(PolygonModuleConfig)\n\n this.resolver = new Resolver(getResolver(polygonOptions.rpcUrl, polygonOptions.didContractAddress))\n }\n\n return this.resolver\n }\n}\n\nexport interface PolygonDidCreateOptions extends DidCreateOptions {\n method: 'polygon'\n did?: never\n options: {\n network: 'mainnet' | 'testnet'\n endpoint?: string\n }\n secret: {\n privateKey: Uint8Array\n }\n}\n\nexport interface PolygonDidUpdateOptions extends DidUpdateOptions {\n method: 'polygon'\n did: string\n didDocument: DidDocument\n secret?: {\n privateKey: Uint8Array\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { AgentContext, DidResolutionResult, DidResolver } from "@credo-ts/core";
|
|
2
|
-
import { Resolver } from "did-resolver";
|
|
3
2
|
|
|
4
3
|
//#region src/dids/PolygonDidResolver.d.ts
|
|
5
4
|
declare class PolygonDidResolver implements DidResolver {
|
|
6
5
|
readonly allowsCaching = true;
|
|
6
|
+
private resolver?;
|
|
7
7
|
readonly supportedMethods: string[];
|
|
8
|
-
resolver: Resolver;
|
|
9
|
-
constructor();
|
|
10
8
|
resolve(agentContext: AgentContext, did: string): Promise<DidResolutionResult>;
|
|
9
|
+
private _getResolver;
|
|
11
10
|
}
|
|
12
11
|
//#endregion
|
|
13
12
|
export { PolygonDidResolver };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolygonDidResolver.d.mts","names":[],"sources":["../../src/dids/PolygonDidResolver.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"PolygonDidResolver.d.mts","names":[],"sources":["../../src/dids/PolygonDidResolver.ts"],"mappings":";;;cAYa,kBAAA,YAA8B,WAAA;EAAA,SACzB,aAAA;EAAA,QAER,QAAA;EAAA,SAEQ,gBAAA;EAEH,OAAA,CAAQ,YAAA,EAAc,YAAA,EAAc,GAAA,WAAc,OAAA,CAAQ,mBAAA;EAAA,QA2B/D,YAAA;AAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { isValidPolygonDid } from "./didPolygonUtil.mjs";
|
|
2
|
+
import { PolygonModuleConfig } from "../PolygonModuleConfig.mjs";
|
|
2
3
|
import { DidDocument, JsonTransformer } from "@credo-ts/core";
|
|
3
4
|
import { getResolver } from "@ayanworks/polygon-did-resolver";
|
|
4
5
|
import { Resolver } from "did-resolver";
|
|
@@ -8,13 +9,12 @@ var PolygonDidResolver = class {
|
|
|
8
9
|
constructor() {
|
|
9
10
|
this.allowsCaching = true;
|
|
10
11
|
this.supportedMethods = ["polygon"];
|
|
11
|
-
this.resolver = new Resolver(getResolver());
|
|
12
12
|
}
|
|
13
13
|
async resolve(agentContext, did) {
|
|
14
14
|
const didDocumentMetadata = {};
|
|
15
15
|
if (!isValidPolygonDid(did)) throw new Error("Invalid DID");
|
|
16
16
|
try {
|
|
17
|
-
const { didDocument, didDocumentMetadata, didResolutionMetadata } = await this.
|
|
17
|
+
const { didDocument, didDocumentMetadata, didResolutionMetadata } = await this._getResolver(agentContext).resolve(did);
|
|
18
18
|
return {
|
|
19
19
|
didDocument: JsonTransformer.fromJSON(didDocument, DidDocument),
|
|
20
20
|
didDocumentMetadata,
|
|
@@ -31,6 +31,13 @@ var PolygonDidResolver = class {
|
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
+
_getResolver(agentContext) {
|
|
35
|
+
if (!this.resolver) {
|
|
36
|
+
const polygonOptions = agentContext.dependencyManager.resolve(PolygonModuleConfig);
|
|
37
|
+
this.resolver = new Resolver(getResolver(polygonOptions.rpcUrl, polygonOptions.didContractAddress));
|
|
38
|
+
}
|
|
39
|
+
return this.resolver;
|
|
40
|
+
}
|
|
34
41
|
};
|
|
35
42
|
|
|
36
43
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolygonDidResolver.mjs","names":[],"sources":["../../src/dids/PolygonDidResolver.ts"],"sourcesContent":["import { getResolver } from '@ayanworks/polygon-did-resolver'\nimport {\n type AgentContext,\n DidDocument,\n type DidResolutionResult,\n type DidResolver,\n JsonTransformer,\n} from '@credo-ts/core'\nimport
|
|
1
|
+
{"version":3,"file":"PolygonDidResolver.mjs","names":[],"sources":["../../src/dids/PolygonDidResolver.ts"],"sourcesContent":["import { getResolver } from '@ayanworks/polygon-did-resolver'\nimport {\n type AgentContext,\n DidDocument,\n type DidResolutionResult,\n type DidResolver,\n JsonTransformer,\n} from '@credo-ts/core'\nimport { Resolver } from 'did-resolver'\nimport { PolygonModuleConfig } from '../PolygonModuleConfig'\nimport { isValidPolygonDid } from './didPolygonUtil'\n\nexport class PolygonDidResolver implements DidResolver {\n public readonly allowsCaching = true\n\n private resolver?: Resolver\n\n public readonly supportedMethods = ['polygon']\n\n public async resolve(agentContext: AgentContext, did: string): Promise<DidResolutionResult> {\n const didDocumentMetadata = {}\n\n if (!isValidPolygonDid(did)) {\n throw new Error('Invalid DID')\n }\n try {\n const resolver = this._getResolver(agentContext)\n const { didDocument, didDocumentMetadata, didResolutionMetadata } = await resolver.resolve(did)\n\n return {\n didDocument: JsonTransformer.fromJSON(didDocument, DidDocument),\n didDocumentMetadata,\n didResolutionMetadata,\n }\n } catch (error) {\n return {\n didDocument: null,\n didDocumentMetadata,\n didResolutionMetadata: {\n error: 'notFound',\n message: `resolver_error: Unable to resolve did '${did}': ${error}`,\n },\n }\n }\n }\n\n private _getResolver(agentContext: AgentContext) {\n if (!this.resolver) {\n const polygonOptions = agentContext.dependencyManager.resolve(PolygonModuleConfig)\n\n this.resolver = new Resolver(getResolver(polygonOptions.rpcUrl, polygonOptions.didContractAddress))\n }\n\n return this.resolver\n }\n}\n"],"mappings":";;;;;;;AAYA,IAAa,qBAAb,MAAuD;;OACrC,gBAAgB;OAIhB,mBAAmB,CAAC,UAAU;;CAE9C,MAAa,QAAQ,cAA4B,KAA2C;EAC1F,MAAM,sBAAsB,EAAE;AAE9B,MAAI,CAAC,kBAAkB,IAAI,CACzB,OAAM,IAAI,MAAM,cAAc;AAEhC,MAAI;GAEF,MAAM,EAAE,aAAa,qBAAqB,0BAA0B,MADnD,KAAK,aAAa,aAAa,CACmC,QAAQ,IAAI;AAE/F,UAAO;IACL,aAAa,gBAAgB,SAAS,aAAa,YAAY;IAC/D;IACA;IACD;WACM,OAAO;AACd,UAAO;IACL,aAAa;IACb;IACA,uBAAuB;KACrB,OAAO;KACP,SAAS,0CAA0C,IAAI,KAAK;KAC7D;IACF;;;CAIL,AAAQ,aAAa,cAA4B;AAC/C,MAAI,CAAC,KAAK,UAAU;GAClB,MAAM,iBAAiB,aAAa,kBAAkB,QAAQ,oBAAoB;AAElF,QAAK,WAAW,IAAI,SAAS,YAAY,eAAe,QAAQ,eAAe,mBAAmB,CAAC;;AAGrG,SAAO,KAAK"}
|
|
@@ -2,6 +2,7 @@ import { PolygonModuleConfig } from "../PolygonModuleConfig.mjs";
|
|
|
2
2
|
import { AgentContext, DidDocument } from "@credo-ts/core";
|
|
3
3
|
import { SigningKey } from "ethers";
|
|
4
4
|
import { PolygonDID } from "@ayanworks/polygon-did-registrar";
|
|
5
|
+
import { EstimatedTxDetails } from "@ayanworks/polygon-schema-manager";
|
|
5
6
|
|
|
6
7
|
//#region src/ledger/PolygonLedgerService.d.ts
|
|
7
8
|
interface SchemaRegistryConfig {
|
|
@@ -88,16 +89,7 @@ declare class PolygonLedgerService {
|
|
|
88
89
|
resourceTxnHash?: undefined;
|
|
89
90
|
}>;
|
|
90
91
|
getSchemaByDidAndSchemaId(agentContext: AgentContext, did: string, schemaId: string): Promise<any>;
|
|
91
|
-
estimateFeeForDidOperation(agentContext: AgentContext, options: DidOperationOptions): Promise<
|
|
92
|
-
transactionFee: string;
|
|
93
|
-
gasLimit: string;
|
|
94
|
-
gasPrice: string;
|
|
95
|
-
maxFeePerGas: number;
|
|
96
|
-
maxPriorityFeePerGas: number;
|
|
97
|
-
network: string;
|
|
98
|
-
chainId: string;
|
|
99
|
-
method: string;
|
|
100
|
-
} | null | undefined>;
|
|
92
|
+
estimateFeeForDidOperation(agentContext: AgentContext, options: DidOperationOptions): Promise<EstimatedTxDetails | null>;
|
|
101
93
|
estimateFeeForSchemaOperation(agentContext: AgentContext, options: SchemaOperationOptions): Promise<{} | undefined>;
|
|
102
94
|
createDidRegistryInstance(signingKey: SigningKey): PolygonDID;
|
|
103
95
|
private createSchemaRegistryInstance;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolygonLedgerService.d.mts","names":[],"sources":["../../src/ledger/PolygonLedgerService.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"PolygonLedgerService.d.mts","names":[],"sources":["../../src/ledger/PolygonLedgerService.ts"],"mappings":";;;;;;;UASU,oBAAA;EACR,2BAAA;EACA,MAAA;EACA,eAAA;EACA,UAAA;EACA,4BAAA;EACA,SAAA;AAAA;AAAA,KAGU,yBAAA;EACV,SAAA,EAAW,YAAA,CAAa,MAAA;EACxB,eAAA;AAAA;AAAA,KAGU,yBAAA;EACV,SAAA,EAAW,YAAA,CAAa,MAAA;EACxB,WAAA,EAAa,WAAA;EACb,GAAA;AAAA;AAAA,KAGU,6BAAA;EACV,SAAA,EAAW,YAAA,CAAa,UAAA;EACxB,GAAA;AAAA;AAAA,KAGU,8BAAA;EACV,SAAA,EAAW,YAAA,CAAa,WAAA;EACxB,UAAA;EACA,QAAA;EACA,GAAA;AAAA;AAAA,aAGU,YAAA;EACV,MAAA;EACA,MAAA;EACA,UAAA;EACA,WAAA;AAAA;AAAA,KAGU,mBAAA,GACR,yBAAA,GACA,yBAAA,GACA,6BAAA,GACA,8BAAA;AAAA,KAEQ,sBAAA,GAAyB,4BAAA;AAAA,KAEzB,4BAAA;EACV,SAAA,EAAW,eAAA,CAAgB,YAAA;EAC3B,GAAA;AAAA;AAAA,aAGU,eAAA;EACV,YAAA;AAAA;AAAA,cAIW,oBAAA;EACJ,MAAA;EAAA,QACC,kBAAA;EAAA,QACA,4BAAA;EAAA,QACA,eAAA;EAAA,QACA,aAAA;;IAGN,kBAAA;IACA,MAAA;IACA,eAAA;IACA,4BAAA;IACA;EAAA,GACC,mBAAA;EAQU,YAAA,CACX,YAAA,EAAc,YAAA;IACZ,GAAA;IAAK,UAAA;IAAY;EAAA;IAAY,GAAA;IAAa,UAAA;IAAoB,MAAA;EAAA,IAAgB,OAAA;;;;;;;;;;;;;;;;;;;;EAuBrE,yBAAA,CAA0B,YAAA,EAAc,YAAA,EAAc,GAAA,UAAa,QAAA,WAAgB,OAAA;EAuBnF,0BAAA,CACX,YAAA,EAAc,YAAA,EACd,OAAA,EAAS,mBAAA,GACR,OAAA,CAAQ,kBAAA;EAwDE,6BAAA,CAA8B,YAAA,EAAc,YAAA,EAAc,OAAA,EAAS,sBAAA,GAAsB,OAAA;EAkD/F,yBAAA,CAA0B,UAAA,EAAY,UAAA,GAAU,UAAA;EAAA,QAY/C,4BAAA;EAAA,QAqBM,aAAA;EAAA,QAmBA,mBAAA;EAiBP,kBAAA,CAAA;IACL,2BAAA;IACA,eAAA;IACA,MAAA;IACA,4BAAA;IACA;EAAA,GACC,oBAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolygonLedgerService.mjs","names":[],"sources":["../../src/ledger/PolygonLedgerService.ts"],"sourcesContent":["import { PolygonDID } from '@ayanworks/polygon-did-registrar'\nimport { PolygonSchema } from '@ayanworks/polygon-schema-manager'\nimport { AskarStoreManager } from '@credo-ts/askar'\nimport type { AgentContext, DidDocument } from '@credo-ts/core'\nimport { CredoError, DidDocumentBuilder, DidRepository, injectable, utils } from '@credo-ts/core'\nimport { SigningKey } from 'ethers'\nimport { PolygonModuleConfig } from '../PolygonModuleConfig'\nimport { generateSecp256k1KeyPair, getSecp256k1DidDocWithPublicKey } from '../utils'\n\ninterface SchemaRegistryConfig {\n didRegistrarContractAddress: string\n rpcUrl: string\n fileServerToken: string\n privateKey: string\n schemaManagerContractAddress: string\n serverUrl: string\n}\n\nexport type CreateDidOperationOptions = {\n operation: DidOperation.Create\n serviceEndpoint?: string\n}\n\nexport type UpdateDidOperationOptions = {\n operation: DidOperation.Update\n didDocument: DidDocument\n did: string\n}\n\nexport type DeactivateDidOperationOptions = {\n operation: DidOperation.Deactivate\n did: string\n}\n\nexport type AddResourceDidOperationOptions = {\n operation: DidOperation.AddResource\n resourceId: string\n resource: object\n did: string\n}\n\nexport enum DidOperation {\n Create = 'createDID',\n Update = 'updateDIDDoc',\n Deactivate = 'deactivate',\n AddResource = 'addResource',\n}\n\nexport type DidOperationOptions =\n | CreateDidOperationOptions\n | UpdateDidOperationOptions\n | DeactivateDidOperationOptions\n | AddResourceDidOperationOptions\n\nexport type SchemaOperationOptions = CreateSchemaOperationOptions\n\nexport type CreateSchemaOperationOptions = {\n operation: SchemaOperation.CreateSchema\n did: string\n}\n\nexport enum SchemaOperation {\n CreateSchema = 'createSchema',\n}\n\n@injectable()\nexport class PolygonLedgerService {\n public rpcUrl: string | undefined\n private didContractAddress: string | undefined\n private schemaManagerContractAddress: string | undefined\n private fileServerToken: string | undefined\n private fileServerUrl: string | undefined\n\n public constructor({\n didContractAddress,\n rpcUrl,\n fileServerToken,\n schemaManagerContractAddress,\n serverUrl,\n }: PolygonModuleConfig) {\n this.rpcUrl = rpcUrl\n this.didContractAddress = didContractAddress\n this.schemaManagerContractAddress = schemaManagerContractAddress\n this.fileServerToken = fileServerToken\n this.fileServerUrl = serverUrl\n }\n\n public async createSchema(\n agentContext: AgentContext,\n { did, schemaName, schema }: { did: string; schemaName: string; schema: object }\n ) {\n const publicKeyBase58 = await this.getPublicKeyFromDid(agentContext, did)\n\n if (!publicKeyBase58) {\n throw new CredoError('Public Key not found in wallet')\n }\n\n const signingKey = await this.getSigningKey(agentContext, publicKeyBase58)\n\n const schemaRegistry = this.createSchemaRegistryInstance(signingKey)\n\n agentContext.config.logger.info(`Creating schema on ledger: ${did}`)\n\n const response = await schemaRegistry.createSchema(did, schemaName, schema)\n if (!response) {\n agentContext.config.logger.error(`Schema creation failed for did: ${did} and schema: ${schema}`)\n throw new CredoError(`Schema creation failed for did: ${did} and schema: ${schema}`)\n }\n agentContext.config.logger.info(`Published schema on ledger: ${did}`)\n return response\n }\n\n public async getSchemaByDidAndSchemaId(agentContext: AgentContext, did: string, schemaId: string) {\n agentContext.config.logger.info(`Getting schema from ledger: ${did} and schemaId: ${schemaId}`)\n\n const publicKeyBase58 = await this.getPublicKeyFromDid(agentContext, did)\n\n if (!publicKeyBase58) {\n throw new CredoError('Public Key not found in wallet')\n }\n\n const signingKey = await this.getSigningKey(agentContext, publicKeyBase58)\n\n const schemaRegistry = this.createSchemaRegistryInstance(signingKey)\n\n const response = await schemaRegistry.getSchemaById(did, schemaId)\n\n if (!response) {\n agentContext.config.logger.error(`Schema not found for did: ${did} and schemaId: ${schemaId} Error: ${response}`)\n throw new CredoError(`Schema not found for did: ${did} and schemaId: ${schemaId}`)\n }\n agentContext.config.logger.info(`Got schema from ledger: ${did} and schemaId: ${schemaId}`)\n return response\n }\n\n public async estimateFeeForDidOperation(agentContext: AgentContext, options: DidOperationOptions) {\n const keyPair = await generateSecp256k1KeyPair()\n\n const didRegistry = this.createDidRegistryInstance(new SigningKey(keyPair.privateKey))\n\n const { operation } = options\n\n if (operation === DidOperation.Create) {\n agentContext.config.logger.info(`Getting estimated fee for operation: ${operation} `)\n const did = `did:polygon:testnet${keyPair.address}`\n const didDoc = getSecp256k1DidDocWithPublicKey(did, keyPair.publicKeyBase58, options?.serviceEndpoint)\n\n const response = await didRegistry.estimateTxFee(DidOperation.Create, [keyPair.address, JSON.stringify(didDoc)])\n return response\n }\n\n if (operation === DidOperation.Update) {\n agentContext.config.logger.info(`Getting estimated fee for operation: ${operation} `)\n const address = options.did.split(':').pop() || ''\n\n const response = await didRegistry.estimateTxFee(\n DidOperation.Update,\n [address, JSON.stringify(options.didDocument)],\n address\n )\n return response\n }\n\n if (operation === DidOperation.Deactivate) {\n agentContext.config.logger.info(`Getting estimated fee for operation: ${operation} `)\n const address = options.did.split(':').pop() || ''\n const deactivatedDidDocument = new DidDocumentBuilder(options.did)\n .addContext('https://www.w3.org/ns/did/v1')\n .build()\n const response = await didRegistry.estimateTxFee(\n DidOperation.Update,\n [address, JSON.stringify(deactivatedDidDocument)],\n address\n )\n return response\n }\n\n if (operation === DidOperation.AddResource) {\n agentContext.config.logger.info(`Getting estimated fee for operation: ${operation} `)\n const address = options.did.split(':').pop() || ''\n const response = await didRegistry.estimateTxFee(\n DidOperation.AddResource,\n [address, options.resourceId, JSON.stringify(options.resource)],\n address\n )\n return response\n }\n }\n\n public async estimateFeeForSchemaOperation(agentContext: AgentContext, options: SchemaOperationOptions) {\n const keyPair = await generateSecp256k1KeyPair()\n\n const schemaRegistry = this.createSchemaRegistryInstance(new SigningKey(keyPair.privateKey))\n\n const { operation } = options\n\n const testResourceBody = {\n resourceURI:\n 'did:polygon:testnet:0x13cd23928Ae515b86592C630f56C138aE4c7B79a/resources/398cee0a-efac-4643-9f4c-74c48c72a14b',\n resourceCollectionId: '55dbc8bf-fba3-4117-855c-1e0dc1d3bb47',\n resourceId: '398cee0a-efac-4643-9f4c-74c48c72a14b',\n resourceName: 'Eventbrite1 Logo',\n resourceType: 'W3C-schema',\n mediaType: 'image/svg+xml',\n created: '2022-11-17T08:10:36Z',\n checksum: 'a95380f460e63ad939541a57aecbfd795fcd37c6d78ee86c885340e33a91b559',\n previousVersionId: null,\n nextVersionId: null,\n }\n\n if (operation === SchemaOperation.CreateSchema) {\n agentContext.config.logger.info(`Getting estimated fee for operation: ${operation} `)\n const schemaEstimatedFee = await schemaRegistry.estimateTxFee(SchemaOperation.CreateSchema, [\n keyPair.address,\n utils.uuid(),\n JSON.stringify(testResourceBody),\n ])\n\n const resourceEstimatedFee = await this.estimateFeeForDidOperation(agentContext, {\n operation: DidOperation.AddResource,\n resourceId: utils.uuid(),\n resource: testResourceBody,\n did: options.did,\n })\n\n let feeParameters = {}\n\n if (schemaEstimatedFee && resourceEstimatedFee) {\n feeParameters = {\n estimatedTotalTxFee: Number(schemaEstimatedFee.transactionFee) + Number(resourceEstimatedFee.transactionFee),\n estimatedSchemaTxFee: schemaEstimatedFee,\n estimatedResourceTxFee: resourceEstimatedFee,\n }\n }\n\n return feeParameters\n }\n }\n\n public createDidRegistryInstance(signingKey: SigningKey) {\n if (!this.rpcUrl || !this.didContractAddress) {\n throw new CredoError('Ledger config not found')\n }\n\n return new PolygonDID({\n rpcUrl: this.rpcUrl,\n contractAddress: this.didContractAddress,\n signingKey,\n })\n }\n\n private createSchemaRegistryInstance(signingKey: SigningKey) {\n if (\n !this.rpcUrl ||\n !this.schemaManagerContractAddress ||\n !this.fileServerToken ||\n !this.fileServerUrl ||\n !this.didContractAddress\n ) {\n throw new CredoError('Polygon schema module config not found')\n }\n\n return new PolygonSchema({\n rpcUrl: this.rpcUrl,\n didRegistrarContractAddress: this.didContractAddress,\n schemaManagerContractAddress: this.schemaManagerContractAddress,\n fileServerToken: this.fileServerToken,\n serverUrl: this.fileServerUrl,\n signingKey,\n })\n }\n\n private async getSigningKey(agentContext: AgentContext, publicKeyBase58: string): Promise<SigningKey> {\n const askarStoreManager = agentContext.dependencyManager.resolve(AskarStoreManager)\n\n const keyEntry = await askarStoreManager.withSession(\n agentContext,\n async (session) => await session.fetchKey({ name: publicKeyBase58 })\n )\n\n if (!keyEntry) {\n throw new CredoError('Key not found in wallet')\n }\n\n const signingKey = new SigningKey(keyEntry.key.secretBytes)\n\n keyEntry.key.handle.free()\n\n return signingKey\n }\n\n private async getPublicKeyFromDid(agentContext: AgentContext, did: string) {\n const didRepository = agentContext.dependencyManager.resolve(DidRepository)\n\n const didRecord = await didRepository.findCreatedDid(agentContext, did)\n if (!didRecord) {\n throw new CredoError('DidRecord not found')\n }\n\n if (!didRecord.didDocument?.verificationMethod) {\n throw new CredoError('VerificationMethod not found cannot get public key')\n }\n\n const publicKeyBase58 = didRecord.didDocument.verificationMethod[0].publicKeyBase58\n\n return publicKeyBase58\n }\n\n public updateModuleConfig({\n didRegistrarContractAddress,\n fileServerToken,\n rpcUrl,\n schemaManagerContractAddress,\n serverUrl,\n }: SchemaRegistryConfig) {\n this.rpcUrl = rpcUrl\n this.didContractAddress = didRegistrarContractAddress\n this.schemaManagerContractAddress = schemaManagerContractAddress\n this.fileServerToken = fileServerToken\n this.fileServerUrl = serverUrl\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PolygonLedgerService.mjs","names":[],"sources":["../../src/ledger/PolygonLedgerService.ts"],"sourcesContent":["import { PolygonDID } from '@ayanworks/polygon-did-registrar'\nimport { type EstimatedTxDetails, PolygonSchema } from '@ayanworks/polygon-schema-manager'\nimport { AskarStoreManager } from '@credo-ts/askar'\nimport type { AgentContext, DidDocument } from '@credo-ts/core'\nimport { CredoError, DidDocumentBuilder, DidRepository, injectable, utils } from '@credo-ts/core'\nimport { SigningKey } from 'ethers'\nimport { PolygonModuleConfig } from '../PolygonModuleConfig'\nimport { generateSecp256k1KeyPair, getSecp256k1DidDocWithPublicKey } from '../utils'\n\ninterface SchemaRegistryConfig {\n didRegistrarContractAddress: string\n rpcUrl: string\n fileServerToken: string\n privateKey: string\n schemaManagerContractAddress: string\n serverUrl: string\n}\n\nexport type CreateDidOperationOptions = {\n operation: DidOperation.Create\n serviceEndpoint?: string\n}\n\nexport type UpdateDidOperationOptions = {\n operation: DidOperation.Update\n didDocument: DidDocument\n did: string\n}\n\nexport type DeactivateDidOperationOptions = {\n operation: DidOperation.Deactivate\n did: string\n}\n\nexport type AddResourceDidOperationOptions = {\n operation: DidOperation.AddResource\n resourceId: string\n resource: object\n did: string\n}\n\nexport enum DidOperation {\n Create = 'createDID',\n Update = 'updateDIDDoc',\n Deactivate = 'deactivate',\n AddResource = 'addResource',\n}\n\nexport type DidOperationOptions =\n | CreateDidOperationOptions\n | UpdateDidOperationOptions\n | DeactivateDidOperationOptions\n | AddResourceDidOperationOptions\n\nexport type SchemaOperationOptions = CreateSchemaOperationOptions\n\nexport type CreateSchemaOperationOptions = {\n operation: SchemaOperation.CreateSchema\n did: string\n}\n\nexport enum SchemaOperation {\n CreateSchema = 'createSchema',\n}\n\n@injectable()\nexport class PolygonLedgerService {\n public rpcUrl: string | undefined\n private didContractAddress: string | undefined\n private schemaManagerContractAddress: string | undefined\n private fileServerToken: string | undefined\n private fileServerUrl: string | undefined\n\n public constructor({\n didContractAddress,\n rpcUrl,\n fileServerToken,\n schemaManagerContractAddress,\n serverUrl,\n }: PolygonModuleConfig) {\n this.rpcUrl = rpcUrl\n this.didContractAddress = didContractAddress\n this.schemaManagerContractAddress = schemaManagerContractAddress\n this.fileServerToken = fileServerToken\n this.fileServerUrl = serverUrl\n }\n\n public async createSchema(\n agentContext: AgentContext,\n { did, schemaName, schema }: { did: string; schemaName: string; schema: object }\n ) {\n const publicKeyBase58 = await this.getPublicKeyFromDid(agentContext, did)\n\n if (!publicKeyBase58) {\n throw new CredoError('Public Key not found in wallet')\n }\n\n const signingKey = await this.getSigningKey(agentContext, publicKeyBase58)\n\n const schemaRegistry = this.createSchemaRegistryInstance(signingKey)\n\n agentContext.config.logger.info(`Creating schema on ledger: ${did}`)\n\n const response = await schemaRegistry.createSchema(did, schemaName, schema)\n if (!response) {\n agentContext.config.logger.error(`Schema creation failed for did: ${did} and schema: ${schema}`)\n throw new CredoError(`Schema creation failed for did: ${did} and schema: ${schema}`)\n }\n agentContext.config.logger.info(`Published schema on ledger: ${did}`)\n return response\n }\n\n public async getSchemaByDidAndSchemaId(agentContext: AgentContext, did: string, schemaId: string) {\n agentContext.config.logger.info(`Getting schema from ledger: ${did} and schemaId: ${schemaId}`)\n\n const publicKeyBase58 = await this.getPublicKeyFromDid(agentContext, did)\n\n if (!publicKeyBase58) {\n throw new CredoError('Public Key not found in wallet')\n }\n\n const signingKey = await this.getSigningKey(agentContext, publicKeyBase58)\n\n const schemaRegistry = this.createSchemaRegistryInstance(signingKey)\n\n const response = await schemaRegistry.getSchemaById(did, schemaId)\n\n if (!response) {\n agentContext.config.logger.error(`Schema not found for did: ${did} and schemaId: ${schemaId} Error: ${response}`)\n throw new CredoError(`Schema not found for did: ${did} and schemaId: ${schemaId}`)\n }\n agentContext.config.logger.info(`Got schema from ledger: ${did} and schemaId: ${schemaId}`)\n return response\n }\n\n public async estimateFeeForDidOperation(\n agentContext: AgentContext,\n options: DidOperationOptions\n ): Promise<EstimatedTxDetails | null> {\n const keyPair = await generateSecp256k1KeyPair()\n\n const didRegistry = this.createDidRegistryInstance(new SigningKey(keyPair.privateKey))\n\n const { operation } = options\n\n if (operation === DidOperation.Create) {\n agentContext.config.logger.info(`Getting estimated fee for operation: ${operation} `)\n const did = `did:polygon:testnet${keyPair.address}`\n const didDoc = getSecp256k1DidDocWithPublicKey(did, keyPair.publicKeyBase58, options?.serviceEndpoint)\n\n const response = await didRegistry.estimateTxFee(DidOperation.Create, [keyPair.address, JSON.stringify(didDoc)])\n return response\n }\n\n if (operation === DidOperation.Update) {\n agentContext.config.logger.info(`Getting estimated fee for operation: ${operation} `)\n const address = options.did.split(':').pop() || ''\n\n const response = await didRegistry.estimateTxFee(\n DidOperation.Update,\n [address, JSON.stringify(options.didDocument)],\n address\n )\n return response\n }\n\n if (operation === DidOperation.Deactivate) {\n agentContext.config.logger.info(`Getting estimated fee for operation: ${operation} `)\n const address = options.did.split(':').pop() || ''\n const deactivatedDidDocument = new DidDocumentBuilder(options.did)\n .addContext('https://www.w3.org/ns/did/v1')\n .build()\n const response = await didRegistry.estimateTxFee(\n DidOperation.Update,\n [address, JSON.stringify(deactivatedDidDocument)],\n address\n )\n return response\n }\n\n if (operation === DidOperation.AddResource) {\n agentContext.config.logger.info(`Getting estimated fee for operation: ${operation} `)\n const address = options.did.split(':').pop() || ''\n const response = await didRegistry.estimateTxFee(\n DidOperation.AddResource,\n [address, options.resourceId, JSON.stringify(options.resource)],\n address\n )\n return response\n }\n\n return null\n }\n\n public async estimateFeeForSchemaOperation(agentContext: AgentContext, options: SchemaOperationOptions) {\n const keyPair = await generateSecp256k1KeyPair()\n\n const schemaRegistry = this.createSchemaRegistryInstance(new SigningKey(keyPair.privateKey))\n\n const { operation } = options\n\n const testResourceBody = {\n resourceURI:\n 'did:polygon:testnet:0x13cd23928Ae515b86592C630f56C138aE4c7B79a/resources/398cee0a-efac-4643-9f4c-74c48c72a14b',\n resourceCollectionId: '55dbc8bf-fba3-4117-855c-1e0dc1d3bb47',\n resourceId: '398cee0a-efac-4643-9f4c-74c48c72a14b',\n resourceName: 'Eventbrite1 Logo',\n resourceType: 'W3C-schema',\n mediaType: 'image/svg+xml',\n created: '2022-11-17T08:10:36Z',\n checksum: 'a95380f460e63ad939541a57aecbfd795fcd37c6d78ee86c885340e33a91b559',\n previousVersionId: null,\n nextVersionId: null,\n }\n\n if (operation === SchemaOperation.CreateSchema) {\n agentContext.config.logger.info(`Getting estimated fee for operation: ${operation} `)\n const schemaEstimatedFee = await schemaRegistry.estimateTxFee(SchemaOperation.CreateSchema, [\n keyPair.address,\n utils.uuid(),\n JSON.stringify(testResourceBody),\n ])\n\n const resourceEstimatedFee = await this.estimateFeeForDidOperation(agentContext, {\n operation: DidOperation.AddResource,\n resourceId: utils.uuid(),\n resource: testResourceBody,\n did: options.did,\n })\n\n let feeParameters = {}\n\n if (schemaEstimatedFee && resourceEstimatedFee) {\n feeParameters = {\n estimatedTotalTxFee: Number(schemaEstimatedFee.transactionFee) + Number(resourceEstimatedFee.transactionFee),\n estimatedSchemaTxFee: schemaEstimatedFee,\n estimatedResourceTxFee: resourceEstimatedFee,\n }\n }\n\n return feeParameters\n }\n }\n\n public createDidRegistryInstance(signingKey: SigningKey) {\n if (!this.rpcUrl || !this.didContractAddress) {\n throw new CredoError('Ledger config not found')\n }\n\n return new PolygonDID({\n rpcUrl: this.rpcUrl,\n contractAddress: this.didContractAddress,\n signingKey,\n })\n }\n\n private createSchemaRegistryInstance(signingKey: SigningKey) {\n if (\n !this.rpcUrl ||\n !this.schemaManagerContractAddress ||\n !this.fileServerToken ||\n !this.fileServerUrl ||\n !this.didContractAddress\n ) {\n throw new CredoError('Polygon schema module config not found')\n }\n\n return new PolygonSchema({\n rpcUrl: this.rpcUrl,\n didRegistrarContractAddress: this.didContractAddress,\n schemaManagerContractAddress: this.schemaManagerContractAddress,\n fileServerToken: this.fileServerToken,\n serverUrl: this.fileServerUrl,\n signingKey,\n })\n }\n\n private async getSigningKey(agentContext: AgentContext, publicKeyBase58: string): Promise<SigningKey> {\n const askarStoreManager = agentContext.dependencyManager.resolve(AskarStoreManager)\n\n const keyEntry = await askarStoreManager.withSession(\n agentContext,\n async (session) => await session.fetchKey({ name: publicKeyBase58 })\n )\n\n if (!keyEntry) {\n throw new CredoError('Key not found in wallet')\n }\n\n const signingKey = new SigningKey(keyEntry.key.secretBytes)\n\n keyEntry.key.handle.free()\n\n return signingKey\n }\n\n private async getPublicKeyFromDid(agentContext: AgentContext, did: string) {\n const didRepository = agentContext.dependencyManager.resolve(DidRepository)\n\n const didRecord = await didRepository.findCreatedDid(agentContext, did)\n if (!didRecord) {\n throw new CredoError('DidRecord not found')\n }\n\n if (!didRecord.didDocument?.verificationMethod) {\n throw new CredoError('VerificationMethod not found cannot get public key')\n }\n\n const publicKeyBase58 = didRecord.didDocument.verificationMethod[0].publicKeyBase58\n\n return publicKeyBase58\n }\n\n public updateModuleConfig({\n didRegistrarContractAddress,\n fileServerToken,\n rpcUrl,\n schemaManagerContractAddress,\n serverUrl,\n }: SchemaRegistryConfig) {\n this.rpcUrl = rpcUrl\n this.didContractAddress = didRegistrarContractAddress\n this.schemaManagerContractAddress = schemaManagerContractAddress\n this.fileServerToken = fileServerToken\n this.fileServerUrl = serverUrl\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAyCA,IAAY,sDAAL;AACL;AACA;AACA;AACA;;;AAgBF,IAAY,4DAAL;AACL;;;AAIK,iCAAM,qBAAqB;CAOhC,AAAO,YAAY,EACjB,oBACA,QACA,iBACA,8BACA,aACsB;AACtB,OAAK,SAAS;AACd,OAAK,qBAAqB;AAC1B,OAAK,+BAA+B;AACpC,OAAK,kBAAkB;AACvB,OAAK,gBAAgB;;CAGvB,MAAa,aACX,cACA,EAAE,KAAK,YAAY,UACnB;EACA,MAAM,kBAAkB,MAAM,KAAK,oBAAoB,cAAc,IAAI;AAEzE,MAAI,CAAC,gBACH,OAAM,IAAI,WAAW,iCAAiC;EAGxD,MAAM,aAAa,MAAM,KAAK,cAAc,cAAc,gBAAgB;EAE1E,MAAM,iBAAiB,KAAK,6BAA6B,WAAW;AAEpE,eAAa,OAAO,OAAO,KAAK,8BAA8B,MAAM;EAEpE,MAAM,WAAW,MAAM,eAAe,aAAa,KAAK,YAAY,OAAO;AAC3E,MAAI,CAAC,UAAU;AACb,gBAAa,OAAO,OAAO,MAAM,mCAAmC,IAAI,eAAe,SAAS;AAChG,SAAM,IAAI,WAAW,mCAAmC,IAAI,eAAe,SAAS;;AAEtF,eAAa,OAAO,OAAO,KAAK,+BAA+B,MAAM;AACrE,SAAO;;CAGT,MAAa,0BAA0B,cAA4B,KAAa,UAAkB;AAChG,eAAa,OAAO,OAAO,KAAK,+BAA+B,IAAI,iBAAiB,WAAW;EAE/F,MAAM,kBAAkB,MAAM,KAAK,oBAAoB,cAAc,IAAI;AAEzE,MAAI,CAAC,gBACH,OAAM,IAAI,WAAW,iCAAiC;EAGxD,MAAM,aAAa,MAAM,KAAK,cAAc,cAAc,gBAAgB;EAI1E,MAAM,WAAW,MAFM,KAAK,6BAA6B,WAAW,CAE9B,cAAc,KAAK,SAAS;AAElE,MAAI,CAAC,UAAU;AACb,gBAAa,OAAO,OAAO,MAAM,6BAA6B,IAAI,iBAAiB,SAAS,UAAU,WAAW;AACjH,SAAM,IAAI,WAAW,6BAA6B,IAAI,iBAAiB,WAAW;;AAEpF,eAAa,OAAO,OAAO,KAAK,2BAA2B,IAAI,iBAAiB,WAAW;AAC3F,SAAO;;CAGT,MAAa,2BACX,cACA,SACoC;EACpC,MAAM,UAAU,MAAM,0BAA0B;EAEhD,MAAM,cAAc,KAAK,0BAA0B,IAAI,WAAW,QAAQ,WAAW,CAAC;EAEtF,MAAM,EAAE,cAAc;AAEtB,MAAI,cAAc,aAAa,QAAQ;AACrC,gBAAa,OAAO,OAAO,KAAK,wCAAwC,UAAU,GAAG;GAErF,MAAM,SAAS,gCADH,sBAAsB,QAAQ,WACU,QAAQ,iBAAiB,SAAS,gBAAgB;AAGtG,UADiB,MAAM,YAAY,cAAc,aAAa,QAAQ,CAAC,QAAQ,SAAS,KAAK,UAAU,OAAO,CAAC,CAAC;;AAIlH,MAAI,cAAc,aAAa,QAAQ;AACrC,gBAAa,OAAO,OAAO,KAAK,wCAAwC,UAAU,GAAG;GACrF,MAAM,UAAU,QAAQ,IAAI,MAAM,IAAI,CAAC,KAAK,IAAI;AAOhD,UALiB,MAAM,YAAY,cACjC,aAAa,QACb,CAAC,SAAS,KAAK,UAAU,QAAQ,YAAY,CAAC,EAC9C,QACD;;AAIH,MAAI,cAAc,aAAa,YAAY;AACzC,gBAAa,OAAO,OAAO,KAAK,wCAAwC,UAAU,GAAG;GACrF,MAAM,UAAU,QAAQ,IAAI,MAAM,IAAI,CAAC,KAAK,IAAI;GAChD,MAAM,yBAAyB,IAAI,mBAAmB,QAAQ,IAAI,CAC/D,WAAW,+BAA+B,CAC1C,OAAO;AAMV,UALiB,MAAM,YAAY,cACjC,aAAa,QACb,CAAC,SAAS,KAAK,UAAU,uBAAuB,CAAC,EACjD,QACD;;AAIH,MAAI,cAAc,aAAa,aAAa;AAC1C,gBAAa,OAAO,OAAO,KAAK,wCAAwC,UAAU,GAAG;GACrF,MAAM,UAAU,QAAQ,IAAI,MAAM,IAAI,CAAC,KAAK,IAAI;AAMhD,UALiB,MAAM,YAAY,cACjC,aAAa,aACb;IAAC;IAAS,QAAQ;IAAY,KAAK,UAAU,QAAQ,SAAS;IAAC,EAC/D,QACD;;AAIH,SAAO;;CAGT,MAAa,8BAA8B,cAA4B,SAAiC;EACtG,MAAM,UAAU,MAAM,0BAA0B;EAEhD,MAAM,iBAAiB,KAAK,6BAA6B,IAAI,WAAW,QAAQ,WAAW,CAAC;EAE5F,MAAM,EAAE,cAAc;EAEtB,MAAM,mBAAmB;GACvB,aACE;GACF,sBAAsB;GACtB,YAAY;GACZ,cAAc;GACd,cAAc;GACd,WAAW;GACX,SAAS;GACT,UAAU;GACV,mBAAmB;GACnB,eAAe;GAChB;AAED,MAAI,cAAc,gBAAgB,cAAc;AAC9C,gBAAa,OAAO,OAAO,KAAK,wCAAwC,UAAU,GAAG;GACrF,MAAM,qBAAqB,MAAM,eAAe,cAAc,gBAAgB,cAAc;IAC1F,QAAQ;IACR,MAAM,MAAM;IACZ,KAAK,UAAU,iBAAiB;IACjC,CAAC;GAEF,MAAM,uBAAuB,MAAM,KAAK,2BAA2B,cAAc;IAC/E,WAAW,aAAa;IACxB,YAAY,MAAM,MAAM;IACxB,UAAU;IACV,KAAK,QAAQ;IACd,CAAC;GAEF,IAAI,gBAAgB,EAAE;AAEtB,OAAI,sBAAsB,qBACxB,iBAAgB;IACd,qBAAqB,OAAO,mBAAmB,eAAe,GAAG,OAAO,qBAAqB,eAAe;IAC5G,sBAAsB;IACtB,wBAAwB;IACzB;AAGH,UAAO;;;CAIX,AAAO,0BAA0B,YAAwB;AACvD,MAAI,CAAC,KAAK,UAAU,CAAC,KAAK,mBACxB,OAAM,IAAI,WAAW,0BAA0B;AAGjD,SAAO,IAAI,WAAW;GACpB,QAAQ,KAAK;GACb,iBAAiB,KAAK;GACtB;GACD,CAAC;;CAGJ,AAAQ,6BAA6B,YAAwB;AAC3D,MACE,CAAC,KAAK,UACN,CAAC,KAAK,gCACN,CAAC,KAAK,mBACN,CAAC,KAAK,iBACN,CAAC,KAAK,mBAEN,OAAM,IAAI,WAAW,yCAAyC;AAGhE,SAAO,IAAI,cAAc;GACvB,QAAQ,KAAK;GACb,6BAA6B,KAAK;GAClC,8BAA8B,KAAK;GACnC,iBAAiB,KAAK;GACtB,WAAW,KAAK;GAChB;GACD,CAAC;;CAGJ,MAAc,cAAc,cAA4B,iBAA8C;EAGpG,MAAM,WAAW,MAFS,aAAa,kBAAkB,QAAQ,kBAAkB,CAE1C,YACvC,cACA,OAAO,YAAY,MAAM,QAAQ,SAAS,EAAE,MAAM,iBAAiB,CAAC,CACrE;AAED,MAAI,CAAC,SACH,OAAM,IAAI,WAAW,0BAA0B;EAGjD,MAAM,aAAa,IAAI,WAAW,SAAS,IAAI,YAAY;AAE3D,WAAS,IAAI,OAAO,MAAM;AAE1B,SAAO;;CAGT,MAAc,oBAAoB,cAA4B,KAAa;EAGzE,MAAM,YAAY,MAFI,aAAa,kBAAkB,QAAQ,cAAc,CAErC,eAAe,cAAc,IAAI;AACvE,MAAI,CAAC,UACH,OAAM,IAAI,WAAW,sBAAsB;AAG7C,MAAI,CAAC,UAAU,aAAa,mBAC1B,OAAM,IAAI,WAAW,qDAAqD;AAK5E,SAFwB,UAAU,YAAY,mBAAmB,GAAG;;CAKtE,AAAO,mBAAmB,EACxB,6BACA,iBACA,QACA,8BACA,aACuB;AACvB,OAAK,SAAS;AACd,OAAK,qBAAqB;AAC1B,OAAK,+BAA+B;AACpC,OAAK,kBAAkB;AACvB,OAAK,gBAAgB;;;mCAnQxB,YAAY"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ayanworks/credo-polygon-w3c-module",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2-alpha-20260310100644",
|
|
4
4
|
"files": [
|
|
5
5
|
"build"
|
|
6
6
|
],
|
|
7
|
+
"exports": {
|
|
8
|
+
"cli": "./build/index.mjs",
|
|
9
|
+
"import": "./src/index.ts",
|
|
10
|
+
"./package.json": "./package.json"
|
|
11
|
+
},
|
|
7
12
|
"license": "Apache-2.0",
|
|
8
13
|
"publishConfig": {
|
|
9
14
|
"access": "public"
|
|
@@ -17,11 +22,11 @@
|
|
|
17
22
|
"dependencies": {
|
|
18
23
|
"@credo-ts/askar": "^0.6.1",
|
|
19
24
|
"@credo-ts/core": "^0.6.1",
|
|
20
|
-
"@ayanworks/polygon-did-registrar": "2.2.0",
|
|
21
|
-
"@ayanworks/polygon-did-resolver": "1.0.2",
|
|
22
|
-
"@ayanworks/polygon-schema-manager": "2.2.0",
|
|
23
25
|
"did-resolver": "^4.1.0",
|
|
24
|
-
"ethers": "^6.16.0"
|
|
26
|
+
"ethers": "^6.16.0",
|
|
27
|
+
"@ayanworks/polygon-did-registrar": "2.2.1-alpha-20260310100644",
|
|
28
|
+
"@ayanworks/polygon-did-resolver": "1.0.3-alpha-20260310100644",
|
|
29
|
+
"@ayanworks/polygon-schema-manager": "2.2.1-alpha-20260310100644"
|
|
25
30
|
},
|
|
26
31
|
"devDependencies": {
|
|
27
32
|
"@credo-ts/node": "^0.6.1",
|
|
@@ -35,12 +40,9 @@
|
|
|
35
40
|
},
|
|
36
41
|
"scripts": {
|
|
37
42
|
"build": "tsdown --config-loader unconfig",
|
|
43
|
+
"clean": "rm -rf build",
|
|
38
44
|
"test": "vitest run"
|
|
39
45
|
},
|
|
40
46
|
"types": "./build/index.d.mts",
|
|
41
|
-
"module": "./build/index.mjs"
|
|
42
|
-
"exports": {
|
|
43
|
-
".": "./build/index.mjs",
|
|
44
|
-
"./package.json": "./package.json"
|
|
45
|
-
}
|
|
47
|
+
"module": "./build/index.mjs"
|
|
46
48
|
}
|