@ghostspeak/sdk 2.0.7 → 2.0.8
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/README.md +145 -2
- package/dist/{GhostSpeakClient-CWmGaM9Q.d.ts → GhostSpeakClient-bnXwUPHI.d.ts} +10 -6
- package/dist/{StakingModule-C5rzuOWb.d.ts → StakingModule-DunDShLq.d.ts} +263 -343
- package/dist/{agent-5YLZ7DAC.js → agent-S42FIMR7.js} +3 -3
- package/dist/{agent-5YLZ7DAC.js.map → agent-S42FIMR7.js.map} +1 -1
- package/dist/browser-CI5_6Gzk.d.ts +234 -0
- package/dist/browser.d.ts +3 -64
- package/dist/browser.js +9 -9
- package/dist/{chunk-SFTSZ3LC.js → chunk-46QWY3MG.js} +3 -3
- package/dist/{chunk-SFTSZ3LC.js.map → chunk-46QWY3MG.js.map} +1 -1
- package/dist/{chunk-G7S6B6WB.js → chunk-5QBSC4T4.js} +7 -7
- package/dist/{chunk-G7S6B6WB.js.map → chunk-5QBSC4T4.js.map} +1 -1
- package/dist/{chunk-IHVDQ4YI.js → chunk-5QZVFUXB.js} +201 -256
- package/dist/chunk-5QZVFUXB.js.map +1 -0
- package/dist/{chunk-E3FD2CNY.js → chunk-6XCCMJ6M.js} +19 -23
- package/dist/chunk-6XCCMJ6M.js.map +1 -0
- package/dist/{chunk-JV2SWONF.js → chunk-A7ALCVUI.js} +3 -3
- package/dist/{chunk-JV2SWONF.js.map → chunk-A7ALCVUI.js.map} +1 -1
- package/dist/{chunk-AL3HQN73.js → chunk-AWMGX3OX.js} +172 -112
- package/dist/chunk-AWMGX3OX.js.map +1 -0
- package/dist/{chunk-S74EH3KD.js → chunk-IQM5RASO.js} +637 -25
- package/dist/chunk-IQM5RASO.js.map +1 -0
- package/dist/{chunk-SZGFSCNU.js → chunk-JYXSOXCP.js} +467 -299
- package/dist/chunk-JYXSOXCP.js.map +1 -0
- package/dist/{chunk-C5CDA3WX.js → chunk-OXA7MECJ.js} +476 -3
- package/dist/chunk-OXA7MECJ.js.map +1 -0
- package/dist/{chunk-KB6CKIUK.js → chunk-QLRWUHN2.js} +3 -3
- package/dist/{chunk-KB6CKIUK.js.map → chunk-QLRWUHN2.js.map} +1 -1
- package/dist/client.d.ts +2 -3
- package/dist/client.js +9 -9
- package/dist/{createAgentAuthorization-ULG47ZJI.js → createAgentAuthorization-KGZNXZBT.js} +4 -4
- package/dist/{createAgentAuthorization-ULG47ZJI.js.map → createAgentAuthorization-KGZNXZBT.js.map} +1 -1
- package/dist/generated-QJREJQ2C.js +9 -0
- package/dist/{generated-EG5USUFG.js.map → generated-QJREJQ2C.js.map} +1 -1
- package/dist/index.d.ts +209 -231
- package/dist/index.js +231 -521
- package/dist/index.js.map +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/minimal/core-minimal.d.ts +266 -184
- package/dist/minimal/core-minimal.js +6 -6
- package/dist/minimal/core-minimal.js.map +1 -1
- package/dist/{revokeAuthorization-OK7E7OK3.js → revokeAuthorization-2ZRO6GUZ.js} +4 -4
- package/dist/{revokeAuthorization-OK7E7OK3.js.map → revokeAuthorization-2ZRO6GUZ.js.map} +1 -1
- package/dist/{updateReputationWithAuth-Y4ONEVSP.js → updateReputationWithAuth-PCEUOCFV.js} +4 -4
- package/dist/{updateReputationWithAuth-Y4ONEVSP.js.map → updateReputationWithAuth-PCEUOCFV.js.map} +1 -1
- package/dist/utils.js +9 -9
- package/package.json +4 -4
- package/dist/chunk-AL3HQN73.js.map +0 -1
- package/dist/chunk-C5CDA3WX.js.map +0 -1
- package/dist/chunk-E3FD2CNY.js.map +0 -1
- package/dist/chunk-IHVDQ4YI.js.map +0 -1
- package/dist/chunk-S74EH3KD.js.map +0 -1
- package/dist/chunk-SZGFSCNU.js.map +0 -1
- package/dist/generated-EG5USUFG.js +0 -9
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { CredentialModule, BaseModule, generateDidString, validateDidString, deriveDidDocumentPda, parseDidString, didDocumentToJson, exportAsW3CDidDocument, isDidActive, createEd25519VerificationMethod, createServiceEndpoint, AgentModule, GovernanceModule, MultisigModule,
|
|
1
|
+
import { CredentialModule, BaseModule, generateDidString, validateDidString, deriveDidDocumentPda, parseDidString, didDocumentToJson, exportAsW3CDidDocument, isDidActive, createEd25519VerificationMethod, createServiceEndpoint, AgentModule, GhostModule, GovernanceModule, MultisigModule, ReputationModule, init_MultiSourceAggregator, MultiSourceAggregator_exports, StakingModule } from './chunk-JYXSOXCP.js';
|
|
2
2
|
import { createSignedAuthorization, verifyAuthorizationSignature, isAuthorizationExpired, isAuthorizationExhausted, serializeAuthorization, deserializeAuthorization, getAuthorizationId } from './chunk-BQDGRTVP.js';
|
|
3
|
-
import { PRIVACY_CONSTANTS, PrivacyPresets, init_reputation_tag_engine, reputation_tag_engine_exports } from './chunk-
|
|
4
|
-
import { GHOSTSPEAK_MARKETPLACE_PROGRAM_ADDRESS } from './chunk-
|
|
3
|
+
import { PRIVACY_CONSTANTS, PrivacyPresets, init_reputation_tag_engine, reputation_tag_engine_exports } from './chunk-OXA7MECJ.js';
|
|
4
|
+
import { GHOSTSPEAK_MARKETPLACE_PROGRAM_ADDRESS } from './chunk-AWMGX3OX.js';
|
|
5
5
|
import { CrossmintVCClient } from './chunk-RIZZPLLB.js';
|
|
6
6
|
import { __toCommonJS } from './chunk-UP2VWCW5.js';
|
|
7
7
|
import { address } from '@solana/addresses';
|
|
@@ -1008,7 +1008,7 @@ var AuthorizationModule = class extends BaseModule {
|
|
|
1008
1008
|
const feePayedByAgent = config?.feePayedByAgent ?? true;
|
|
1009
1009
|
console.log(`\u{1F4B0} On-chain storage cost: ${Number(storageFee) / 1e9} SOL`);
|
|
1010
1010
|
console.log(` Fee payer: ${feePayedByAgent ? "Agent" : "Facilitator"}`);
|
|
1011
|
-
const { getCreateAgentAuthorizationInstructionAsync } = await import('./createAgentAuthorization-
|
|
1011
|
+
const { getCreateAgentAuthorizationInstructionAsync } = await import('./createAgentAuthorization-KGZNXZBT.js');
|
|
1012
1012
|
const { getProgramDerivedAddress, getBytesEncoder, getAddressEncoder, getUtf8Encoder } = await import('@solana/kit');
|
|
1013
1013
|
const nonce = authorization.nonce ?? "default";
|
|
1014
1014
|
const [authorizationPda] = await getProgramDerivedAddress({
|
|
@@ -1126,7 +1126,7 @@ var AuthorizationModule = class extends BaseModule {
|
|
|
1126
1126
|
if (!status.isValid) {
|
|
1127
1127
|
throw new Error(`Authorization is ${status.status}: ${status.reason}`);
|
|
1128
1128
|
}
|
|
1129
|
-
const { getUpdateReputationWithAuthInstructionAsync } = await import('./updateReputationWithAuth-
|
|
1129
|
+
const { getUpdateReputationWithAuthInstructionAsync } = await import('./updateReputationWithAuth-PCEUOCFV.js');
|
|
1130
1130
|
return await this.execute(
|
|
1131
1131
|
"updateReputationWithAuth",
|
|
1132
1132
|
async () => {
|
|
@@ -1155,7 +1155,7 @@ var AuthorizationModule = class extends BaseModule {
|
|
|
1155
1155
|
* @returns Transaction signature
|
|
1156
1156
|
*/
|
|
1157
1157
|
async revokeAuthorization(agentAddress, authorization, nonce, agentSigner) {
|
|
1158
|
-
const { getRevokeAuthorizationInstruction } = await import('./revokeAuthorization-
|
|
1158
|
+
const { getRevokeAuthorizationInstruction } = await import('./revokeAuthorization-2ZRO6GUZ.js');
|
|
1159
1159
|
return await this.execute(
|
|
1160
1160
|
"revokeAuthorization",
|
|
1161
1161
|
() => {
|
|
@@ -1327,6 +1327,16 @@ var GhostSpeakClient = class {
|
|
|
1327
1327
|
get agents() {
|
|
1328
1328
|
return new AgentModule(this.config);
|
|
1329
1329
|
}
|
|
1330
|
+
/**
|
|
1331
|
+
* Direct access to Ghost Module for claiming external agents
|
|
1332
|
+
*
|
|
1333
|
+
* Ghosts are external AI agents (type 10) that exist on x402 facilitators.
|
|
1334
|
+
* They can be claimed using Solana Attestation Service (SAS)
|
|
1335
|
+
* for trustless ownership verification.
|
|
1336
|
+
*/
|
|
1337
|
+
get ghosts() {
|
|
1338
|
+
return new GhostModule(this.config);
|
|
1339
|
+
}
|
|
1330
1340
|
/**
|
|
1331
1341
|
* Direct access to Governance Module for read operations
|
|
1332
1342
|
*/
|
|
@@ -1345,20 +1355,6 @@ var GhostSpeakClient = class {
|
|
|
1345
1355
|
agent() {
|
|
1346
1356
|
return new AgentBuilder(this.config);
|
|
1347
1357
|
}
|
|
1348
|
-
/**
|
|
1349
|
-
* PayAI operations (x402 payments)
|
|
1350
|
-
*/
|
|
1351
|
-
payai() {
|
|
1352
|
-
return new PayAIClient({
|
|
1353
|
-
rpcUrl: this.config.rpcEndpoint,
|
|
1354
|
-
facilitatorUrl: this.config.payai?.facilitatorUrl,
|
|
1355
|
-
timeout: this.config.transactionTimeout,
|
|
1356
|
-
retry: this.config.retryConfig && {
|
|
1357
|
-
attempts: this.config.retryConfig.maxRetries ?? 3,
|
|
1358
|
-
delayMs: this.config.retryConfig.baseDelay ?? 1e3
|
|
1359
|
-
}
|
|
1360
|
-
});
|
|
1361
|
-
}
|
|
1362
1358
|
/**
|
|
1363
1359
|
* Reputation operations
|
|
1364
1360
|
*/
|
|
@@ -1378,7 +1374,7 @@ var GhostSpeakClient = class {
|
|
|
1378
1374
|
/**
|
|
1379
1375
|
* Multi-Source Reputation Aggregator (Pillar 3: External Sources)
|
|
1380
1376
|
*
|
|
1381
|
-
* Aggregate reputation data from multiple sources (
|
|
1377
|
+
* Aggregate reputation data from multiple sources (x402, GitHub, custom webhooks)
|
|
1382
1378
|
* with weighted scoring and conflict detection.
|
|
1383
1379
|
*/
|
|
1384
1380
|
reputationAggregator() {
|
|
@@ -1865,5 +1861,5 @@ function lamportsToSol(lamports) {
|
|
|
1865
1861
|
var GhostSpeakClient_default = GhostSpeakClient;
|
|
1866
1862
|
|
|
1867
1863
|
export { AuthorizationModule, DidModule, GhostSpeakClient, GhostSpeakClient_default, PrivacyModule, UnifiedCredentialService, calculateVisibleScore, canViewerAccess, filterMetricsByVisibility, getDefaultMetricVisibility, getRangeDisplayString, getReputationTier, getScoreRange, getTierDisplayName, lamportsToSol, sol, validatePrivacySettings };
|
|
1868
|
-
//# sourceMappingURL=chunk-
|
|
1869
|
-
//# sourceMappingURL=chunk-
|
|
1864
|
+
//# sourceMappingURL=chunk-6XCCMJ6M.js.map
|
|
1865
|
+
//# sourceMappingURL=chunk-6XCCMJ6M.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modules/credentials/UnifiedCredentialService.ts","../src/modules/did/DidModule.ts","../src/modules/privacy/privacy-helpers.ts","../src/modules/privacy/PrivacyModule.ts","../src/modules/authorization/AuthorizationModule.ts","../src/core/GhostSpeakClient.ts"],"names":["address"],"mappings":"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","file":"chunk-6XCCMJ6M.js","sourcesContent":["/**\n * Unified Credential Service\n * \n * Bridges GhostSpeak's native Solana credentials with Crossmint's EVM-based VCs.\n */\n\nimport type { Address } from '@solana/addresses'\nimport type { CrossmintClientOptions } from './CrossmintVCClient.js'\nimport { CrossmintVCClient } from './CrossmintVCClient.js'\nimport { \n CredentialModule, \n CredentialKind, \n CredentialStatus, \n type Credential, \n type CredentialTemplate, \n type CredentialType,\n type W3CVerifiableCredential \n} from './CredentialModule.js'\n\nexport interface UnifiedCredentialConfig {\n programId?: Address\n crossmint?: CrossmintClientOptions\n crossmintTemplates?: {\n agentIdentity?: string\n reputation?: string\n jobCompletion?: string\n }\n}\n\nexport interface IssuedCredentialResult {\n solanaCredential: {\n credentialId: string\n // signature would be here if we signed it\n }\n w3cCredential: W3CVerifiableCredential\n crossmintSync?: {\n status: 'pending' | 'synced' | 'failed'\n credentialId?: string\n chain?: string\n error?: string\n }\n}\n\nexport class UnifiedCredentialService {\n private credentialModule: CredentialModule\n private crossmintClient?: CrossmintVCClient\n \n constructor(private config: UnifiedCredentialConfig) {\n this.credentialModule = new CredentialModule(config.programId)\n \n if (config.crossmint) {\n this.crossmintClient = new CrossmintVCClient(config.crossmint)\n }\n }\n\n /**\n * Issue an Agent Identity credential.\n * Note: logic simplified for SDK usage (mocking the on-chain part for now as per original implementation)\n */\n async issueAgentIdentityCredential(params: {\n agentId: string\n owner: string // Address\n name: string\n capabilities: string[]\n serviceEndpoint: string\n frameworkOrigin: string\n x402Enabled: boolean\n registeredAt: number\n verifiedAt: number\n recipientEmail?: string\n syncToCrossmint?: boolean\n // Pre-calculated signature for the credential data\n signature: Uint8Array\n }): Promise<IssuedCredentialResult> {\n const subjectData = CredentialModule.buildAgentIdentitySubject({\n agentId: params.agentId,\n owner: params.owner,\n name: params.name,\n capabilities: params.capabilities,\n serviceEndpoint: params.serviceEndpoint,\n frameworkOrigin: params.frameworkOrigin,\n x402Enabled: params.x402Enabled,\n registeredAt: params.registeredAt,\n verifiedAt: params.verifiedAt,\n })\n\n const credentialId = this.credentialModule.generateCredentialId(\n CredentialKind.AgentIdentity,\n params.owner\n )\n\n const subjectDataHash = this.credentialModule.hashSubjectData(subjectData as unknown as Record<string, unknown>)\n\n // Create Credential Object\n const credential: Credential = {\n template: '11111111111111111111111111111111' as Address, // Placeholder Address\n subject: params.owner,\n issuer: params.owner, // Self-issued for agent identity usually, or program\n credentialId,\n subjectDataHash,\n subjectDataUri: `ipfs://placeholder/${credentialId}`,\n status: CredentialStatus.Active,\n signature: params.signature, // Use provided signature\n issuedAt: Math.floor(Date.now() / 1000),\n expiresAt: undefined,\n revokedAt: undefined,\n crossmintCredentialId: undefined,\n }\n\n // Create Type/Template structure required for W3C export\n const mockType: CredentialType = {\n authority: '11111111111111111111111111111111',\n name: 'AgentIdentity',\n kind: CredentialKind.AgentIdentity,\n schemaUri: 'https://ghostspeak.io/schemas/agent-identity.json',\n description: 'Verified AI agent identity on GhostSpeak Protocol',\n isActive: true,\n totalIssued: 1,\n createdAt: Math.floor(Date.now() / 1000),\n }\n\n const mockTemplate: CredentialTemplate = {\n credentialType: '11111111111111111111111111111111',\n name: 'GhostSpeak Agent Identity',\n imageUri: 'https://www.ghostspeak.io/assets/credential-agent.png',\n issuer: params.owner,\n isActive: true,\n totalIssued: 1,\n createdAt: Math.floor(Date.now() / 1000),\n crossmintTemplateId: this.config.crossmintTemplates?.agentIdentity,\n }\n\n const w3cCredential = this.credentialModule.exportAsW3CCredential(\n credential,\n mockTemplate,\n mockType,\n subjectData as unknown as Record<string, unknown>\n )\n\n const result: IssuedCredentialResult = {\n solanaCredential: {\n credentialId,\n },\n w3cCredential,\n }\n\n if (params.syncToCrossmint && this.crossmintClient && params.recipientEmail) {\n if (!mockTemplate.crossmintTemplateId) {\n result.crossmintSync = { status: 'failed', error: 'No template ID configured' }\n } else {\n try {\n const crossmintResult = await this.crossmintClient.issueCredential(\n mockTemplate.crossmintTemplateId,\n params.recipientEmail,\n subjectData as unknown as Record<string, unknown>\n // enrichedSubject... logic handled here or in client? \n // In web it was in syncToCrossmint.\n )\n result.crossmintSync = {\n status: 'synced',\n credentialId: crossmintResult.credentialId,\n chain: this.config.crossmint?.chain\n }\n } catch (error) {\n result.crossmintSync = {\n status: 'failed',\n error: error instanceof Error ? error.message : 'Unknown error'\n }\n }\n }\n }\n\n return result\n }\n}\n","/**\n * GhostSpeak DID Module\n *\n * Provides functionality for managing Decentralized Identifiers (DIDs)\n * following the W3C DID Core specification and did:sol method.\n */\n\nimport type { Address } from '@solana/addresses'\nimport type { TransactionSigner, Instruction } from '@solana/kit'\nimport { address } from '@solana/addresses'\nimport { BaseModule } from '../../core/BaseModule.js'\nimport type { GhostSpeakConfig } from '../../types/index.js'\nimport { SYSTEM_PROGRAM_ADDRESS } from '../../constants/system-addresses.js'\nimport {\n type DidDocument,\n type VerificationMethod,\n type ServiceEndpoint,\n type CreateDidDocumentParams,\n type UpdateDidDocumentParams,\n type DeactivateDidDocumentParams,\n type ResolveDidDocumentParams,\n type W3CDidDocument,\n DidError,\n DidErrorClass\n} from './did-types.js'\nimport {\n deriveDidDocumentPda,\n generateDidString,\n validateDidString,\n parseDidString,\n exportAsW3CDidDocument,\n createEd25519VerificationMethod,\n createServiceEndpoint,\n isDidActive,\n getMethodsForRelationship,\n canPerformAction,\n didDocumentToJson\n} from './did-helpers.js'\n\n/**\n * DidModule - Manage decentralized identifiers on Solana\n *\n * @example\n * ```typescript\n * const client = new GhostSpeakClient({ cluster: 'devnet' })\n * const did = client.did\n *\n * // Create a DID\n * const signature = await did.create(signer, {\n * controller: signer.address,\n * network: 'devnet'\n * })\n *\n * // Resolve a DID\n * const didDoc = await did.resolve(signer.address)\n *\n * // Export as W3C format\n * const w3c = await did.exportW3C(signer.address)\n * ```\n */\nexport class DidModule extends BaseModule {\n constructor(config: GhostSpeakConfig) {\n super(config)\n }\n\n // ============================================================================\n // DID CRUD Operations\n // ============================================================================\n\n /**\n * Create a new DID document\n *\n * @param signer - Transaction signer (will be the controller)\n * @param params - DID creation parameters\n * @returns Transaction signature\n *\n * @example\n * ```typescript\n * const signature = await didModule.create(signer, {\n * controller: signer.address,\n * network: 'devnet',\n * verificationMethods: [{\n * id: 'key-1',\n * methodType: VerificationMethodType.Ed25519VerificationKey2020,\n * controller: 'did:sol:devnet:...',\n * publicKeyMultibase: 'z...',\n * relationships: [VerificationRelationship.Authentication],\n * createdAt: Date.now() / 1000,\n * revoked: false\n * }]\n * })\n * ```\n */\n async create(\n signer: TransactionSigner,\n params: CreateDidDocumentParams\n ): Promise<string> {\n const network = params.network || 'devnet'\n const didString = generateDidString(network, params.controller)\n\n // Validate DID format\n validateDidString(didString)\n\n // Derive DID document PDA\n const [didDocumentPda] = await deriveDidDocumentPda(\n this.programId,\n params.controller\n )\n\n const instructionGetter = async () => {\n // Note: This is a placeholder for the actual instruction\n // The DID instructions need to be generated from the IDL first\n // For now, we'll create a manual instruction structure\n return this.buildCreateDidInstruction(\n didDocumentPda,\n params.controller,\n didString,\n params.verificationMethods || [],\n params.serviceEndpoints || []\n )\n }\n\n return this.execute(\n 'createDidDocument',\n instructionGetter,\n [signer] as unknown as TransactionSigner[]\n )\n }\n\n /**\n * Update an existing DID document\n *\n * @param signer - Transaction signer (must be the controller)\n * @param params - Update parameters\n * @returns Transaction signature\n *\n * @example\n * ```typescript\n * const signature = await didModule.update(signer, {\n * didDocument: didPda,\n * addVerificationMethod: {\n * id: 'key-2',\n * methodType: VerificationMethodType.X25519KeyAgreementKey2020,\n * controller: 'did:sol:devnet:...',\n * publicKeyMultibase: 'z...',\n * relationships: [VerificationRelationship.KeyAgreement],\n * createdAt: Date.now() / 1000,\n * revoked: false\n * }\n * })\n * ```\n */\n async update(\n signer: TransactionSigner,\n params: UpdateDidDocumentParams\n ): Promise<string> {\n const instructionGetter = async () => {\n return this.buildUpdateDidInstruction(\n params.didDocument,\n signer.address,\n params.addVerificationMethod || null,\n params.removeVerificationMethodId || null,\n params.addServiceEndpoint || null,\n params.removeServiceEndpointId || null\n )\n }\n\n return this.execute(\n 'updateDidDocument',\n instructionGetter,\n [signer] as unknown as TransactionSigner[]\n )\n }\n\n /**\n * Deactivate a DID document (irreversible)\n *\n * @param signer - Transaction signer (must be the controller)\n * @param params - Deactivation parameters\n * @returns Transaction signature\n *\n * @example\n * ```typescript\n * const signature = await didModule.deactivate(signer, {\n * didDocument: didPda\n * })\n * ```\n */\n async deactivate(\n signer: TransactionSigner,\n params: DeactivateDidDocumentParams\n ): Promise<string> {\n const instructionGetter = async () => {\n return this.buildDeactivateDidInstruction(\n params.didDocument,\n signer.address\n )\n }\n\n return this.execute(\n 'deactivateDidDocument',\n instructionGetter,\n [signer] as unknown as TransactionSigner[]\n )\n }\n\n /**\n * Resolve a DID document\n *\n * @param didOrController - DID string or controller address\n * @returns DID document or null if not found\n *\n * @example\n * ```typescript\n * // Resolve by controller address\n * const didDoc = await didModule.resolve(controllerAddress)\n *\n * // Resolve by DID string\n * const didDoc = await didModule.resolve('did:sol:devnet:5VKz...')\n * ```\n */\n async resolve(didOrController: string | Address): Promise<DidDocument | null> {\n // Determine if we got a DID string or an address\n let controllerAddress: Address\n\n if (typeof didOrController === 'string' && didOrController.startsWith('did:sol:')) {\n // Parse DID to extract controller\n const { identifier } = parseDidString(didOrController)\n controllerAddress = address(identifier)\n } else {\n controllerAddress = typeof didOrController === 'string'\n ? address(didOrController)\n : didOrController\n }\n\n // Derive DID document PDA\n const [didDocumentPda] = await deriveDidDocumentPda(\n this.programId,\n controllerAddress\n )\n\n // Fetch the account data\n // Note: We would use a decoder here, but since DID isn't in generated yet,\n // we'll need to handle this manually or wait for code generation\n return this.getAccount<DidDocument>(didDocumentPda, 'getDidDocumentDecoder')\n }\n\n // ============================================================================\n // W3C Export\n // ============================================================================\n\n /**\n * Export a DID document as W3C-compliant JSON\n *\n * @param didOrController - DID string or controller address\n * @param pretty - Whether to pretty-print the JSON\n * @returns W3C DID document JSON string\n *\n * @example\n * ```typescript\n * const json = await didModule.exportW3C(controllerAddress, true)\n * console.log(json)\n * ```\n */\n async exportW3C(\n didOrController: string | Address,\n pretty = true\n ): Promise<string | null> {\n const didDoc = await this.resolve(didOrController)\n if (!didDoc) return null\n\n return didDocumentToJson(didDoc, pretty)\n }\n\n /**\n * Get W3C DID document object\n *\n * @param didOrController - DID string or controller address\n * @returns W3C DID document object or null\n */\n async getW3CDocument(\n didOrController: string | Address\n ): Promise<W3CDidDocument | null> {\n const didDoc = await this.resolve(didOrController)\n if (!didDoc) return null\n\n return exportAsW3CDidDocument(didDoc)\n }\n\n // ============================================================================\n // Helper Methods\n // ============================================================================\n\n /**\n * Derive DID document PDA for a controller\n *\n * @param controller - Controller address\n * @returns DID document PDA and bump\n */\n async deriveDidPda(controller: Address): Promise<[Address, number]> {\n return deriveDidDocumentPda(this.programId, controller)\n }\n\n /**\n * Generate a DID string for a controller\n *\n * @param controller - Controller address\n * @param network - Network identifier\n * @returns DID string\n */\n generateDid(\n controller: Address,\n network: 'mainnet' | 'devnet' | 'testnet' = 'devnet'\n ): string {\n return generateDidString(network, controller)\n }\n\n /**\n * Validate a DID string\n *\n * @param did - DID string to validate\n * @returns True if valid, throws error if invalid\n */\n validateDid(did: string): boolean {\n validateDidString(did)\n return true\n }\n\n /**\n * Check if a DID is active\n *\n * @param didOrController - DID string or controller address\n * @returns True if active, false if deactivated or not found\n */\n async isActive(didOrController: string | Address): Promise<boolean> {\n const didDoc = await this.resolve(didOrController)\n if (!didDoc) return false\n return isDidActive(didDoc)\n }\n\n // ============================================================================\n // Manual Instruction Builders (until code generation)\n // ============================================================================\n\n /**\n * Build create DID instruction manually\n * Note: This is temporary until DID instructions are generated from IDL\n */\n private buildCreateDidInstruction(\n didDocument: Address,\n controller: Address,\n didString: string,\n verificationMethods: VerificationMethod[],\n serviceEndpoints: ServiceEndpoint[]\n ): Instruction {\n // This is a placeholder - the actual instruction would be generated\n // from the Anchor IDL once the DID instructions are added to the program\n throw new Error(\n 'DID instructions are not yet generated. ' +\n 'Please run: bun run generate:client after adding DID instructions to the program.'\n )\n }\n\n /**\n * Build update DID instruction manually\n * Note: This is temporary until DID instructions are generated from IDL\n */\n private buildUpdateDidInstruction(\n didDocument: Address,\n controller: Address,\n addVerificationMethod: VerificationMethod | null,\n removeVerificationMethodId: string | null,\n addServiceEndpoint: ServiceEndpoint | null,\n removeServiceEndpointId: string | null\n ): Instruction {\n // Placeholder - would be generated from IDL\n throw new Error(\n 'DID instructions are not yet generated. ' +\n 'Please run: bun run generate:client after adding DID instructions to the program.'\n )\n }\n\n /**\n * Build deactivate DID instruction manually\n * Note: This is temporary until DID instructions are generated from IDL\n */\n private buildDeactivateDidInstruction(\n didDocument: Address,\n controller: Address\n ): Instruction {\n // Placeholder - would be generated from IDL\n throw new Error(\n 'DID instructions are not yet generated. ' +\n 'Please run: bun run generate:client after adding DID instructions to the program.'\n )\n }\n\n // ============================================================================\n // Exported Helper Functions (re-export for convenience)\n // ============================================================================\n\n /**\n * Create an Ed25519 verification method\n */\n static createVerificationMethod = createEd25519VerificationMethod\n\n /**\n * Create a service endpoint\n */\n static createServiceEndpoint = createServiceEndpoint\n}\n\n// Export helper functions at module level\nexport {\n deriveDidDocumentPda,\n generateDidString,\n validateDidString,\n parseDidString,\n exportAsW3CDidDocument,\n createEd25519VerificationMethod,\n createServiceEndpoint,\n isDidActive,\n getMethodsForRelationship,\n canPerformAction,\n didDocumentToJson\n}\n","import type { Address } from '@solana/addresses'\nimport {\n PrivacyMode,\n VisibilityLevel,\n ReputationTier,\n ScoreRange,\n PRIVACY_CONSTANTS,\n type VisibleReputation,\n type MetricVisibility,\n type PrivacySettings,\n} from '../../types/privacy-types.js'\n\n/**\n * Calculate visible score based on privacy settings\n *\n * @param score - Actual reputation score\n * @param privacyMode - Privacy mode setting\n * @param hasAccess - Whether viewer has full access\n * @returns Visible score data\n */\nexport function calculateVisibleScore(\n score: number,\n privacyMode: PrivacyMode,\n hasAccess: boolean\n): { exactScore?: number; tier?: ReputationTier; scoreRange?: ScoreRange } {\n // Full access always shows exact score\n if (hasAccess || privacyMode === PrivacyMode.Public) {\n return {\n exactScore: score,\n tier: getReputationTier(score),\n scoreRange: getScoreRange(score),\n }\n }\n\n // Privacy mode determines what's visible\n switch (privacyMode) {\n case PrivacyMode.TierOnly:\n return {\n tier: getReputationTier(score),\n }\n\n case PrivacyMode.RangeOnly:\n return {\n scoreRange: getScoreRange(score),\n }\n\n case PrivacyMode.Confidential:\n // No information visible without ZK proof\n return {}\n\n case PrivacyMode.Custom:\n // Custom mode handled by metric visibility\n return {\n tier: getReputationTier(score),\n scoreRange: getScoreRange(score),\n }\n\n default:\n return {}\n }\n}\n\n/**\n * Get reputation tier from score\n *\n * @param score - Reputation score (0-10000)\n * @returns Reputation tier\n */\nexport function getReputationTier(score: number): ReputationTier {\n if (score >= PRIVACY_CONSTANTS.TIER_THRESHOLDS.PLATINUM) {\n return ReputationTier.Platinum\n } else if (score >= PRIVACY_CONSTANTS.TIER_THRESHOLDS.GOLD) {\n return ReputationTier.Gold\n } else if (score >= PRIVACY_CONSTANTS.TIER_THRESHOLDS.SILVER) {\n return ReputationTier.Silver\n } else if (score >= PRIVACY_CONSTANTS.TIER_THRESHOLDS.BRONZE) {\n return ReputationTier.Bronze\n }\n return ReputationTier.None\n}\n\n/**\n * Get score range bucket from score\n *\n * @param score - Reputation score (0-10000)\n * @returns Score range bucket\n */\nexport function getScoreRange(score: number): ScoreRange {\n const ranges = PRIVACY_CONSTANTS.SCORE_RANGES\n\n if (score >= ranges.VERY_HIGH.min) {\n return ScoreRange.VeryHigh\n } else if (score >= ranges.HIGH.min) {\n return ScoreRange.High\n } else if (score >= ranges.MEDIUM.min) {\n return ScoreRange.Medium\n } else if (score >= ranges.LOW.min) {\n return ScoreRange.Low\n }\n return ScoreRange.VeryLow\n}\n\n/**\n * Check if viewer has access to private data\n *\n * @param viewerAddress - Address of the viewer\n * @param settings - Privacy settings\n * @param agentAddress - Agent address (viewer is agent)\n * @returns Whether viewer has access\n */\nexport function canViewerAccess(\n viewerAddress: Address,\n settings: PrivacySettings,\n agentAddress: Address\n): boolean {\n // Agent always has full access to their own data\n if (viewerAddress === agentAddress) {\n return true\n }\n\n // Check if viewer is in authorized list\n return settings.authorizedViewers.includes(viewerAddress)\n}\n\n/**\n * Filter reputation metrics by visibility settings\n *\n * @param reputationData - Full reputation data\n * @param metricVisibility - Metric visibility settings\n * @param hasAccess - Whether viewer has full access\n * @returns Filtered visible reputation\n */\nexport function filterMetricsByVisibility(\n reputationData: {\n agent: Address\n overallScore: number\n totalJobsCompleted: number\n totalJobsFailed: number\n avgResponseTime: number\n disputesAgainst: number\n disputesResolved: number\n totalEarnings?: number\n avgRating?: number\n badges?: string[]\n },\n metricVisibility: MetricVisibility,\n hasAccess: boolean\n): Partial<VisibleReputation> {\n const result: Partial<VisibleReputation> = {\n agent: reputationData.agent,\n }\n\n // Helper to check if metric is visible\n const isVisible = (level: VisibilityLevel): boolean => {\n return hasAccess || level === VisibilityLevel.Public\n }\n\n // Apply visibility filters\n if (isVisible(metricVisibility.showScore)) {\n result.exactScore = reputationData.overallScore\n }\n\n if (isVisible(metricVisibility.showJobsCompleted)) {\n result.totalJobsCompleted = reputationData.totalJobsCompleted\n }\n\n if (isVisible(metricVisibility.showSuccessRate)) {\n const total = reputationData.totalJobsCompleted + reputationData.totalJobsFailed\n result.successRate = total > 0\n ? (reputationData.totalJobsCompleted / total) * 100\n : 0\n }\n\n if (isVisible(metricVisibility.showResponseTime)) {\n result.avgResponseTime = reputationData.avgResponseTime\n }\n\n if (isVisible(metricVisibility.showDisputes)) {\n result.disputes = {\n total: reputationData.disputesAgainst,\n resolved: reputationData.disputesResolved,\n }\n }\n\n if (isVisible(metricVisibility.showEarnings) && reputationData.totalEarnings !== undefined) {\n result.totalEarnings = reputationData.totalEarnings\n }\n\n if (isVisible(metricVisibility.showRatings) && reputationData.avgRating !== undefined) {\n result.avgRating = reputationData.avgRating\n }\n\n if (isVisible(metricVisibility.showBadges) && reputationData.badges !== undefined) {\n result.badges = reputationData.badges\n }\n\n result.hasFullAccess = hasAccess\n\n return result\n}\n\n/**\n * Create default metric visibility settings\n *\n * @param mode - Privacy mode\n * @returns Default metric visibility\n */\nexport function getDefaultMetricVisibility(mode: PrivacyMode): MetricVisibility {\n switch (mode) {\n case PrivacyMode.Public:\n return {\n showScore: VisibilityLevel.Public,\n showJobsCompleted: VisibilityLevel.Public,\n showSuccessRate: VisibilityLevel.Public,\n showResponseTime: VisibilityLevel.Public,\n showDisputes: VisibilityLevel.Public,\n showEarnings: VisibilityLevel.Public,\n showRatings: VisibilityLevel.Public,\n showBadges: VisibilityLevel.Public,\n }\n\n case PrivacyMode.TierOnly:\n case PrivacyMode.RangeOnly:\n return {\n showScore: VisibilityLevel.Private,\n showJobsCompleted: VisibilityLevel.Private,\n showSuccessRate: VisibilityLevel.Private,\n showResponseTime: VisibilityLevel.Private,\n showDisputes: VisibilityLevel.Private,\n showEarnings: VisibilityLevel.Private,\n showRatings: VisibilityLevel.Private,\n showBadges: VisibilityLevel.Public,\n }\n\n case PrivacyMode.Confidential:\n return {\n showScore: VisibilityLevel.ZKProof,\n showJobsCompleted: VisibilityLevel.ZKProof,\n showSuccessRate: VisibilityLevel.ZKProof,\n showResponseTime: VisibilityLevel.ZKProof,\n showDisputes: VisibilityLevel.ZKProof,\n showEarnings: VisibilityLevel.ZKProof,\n showRatings: VisibilityLevel.ZKProof,\n showBadges: VisibilityLevel.ZKProof,\n }\n\n case PrivacyMode.Custom:\n default:\n // Balanced defaults for custom mode\n return {\n showScore: VisibilityLevel.Private,\n showJobsCompleted: VisibilityLevel.Public,\n showSuccessRate: VisibilityLevel.Public,\n showResponseTime: VisibilityLevel.Public,\n showDisputes: VisibilityLevel.Private,\n showEarnings: VisibilityLevel.Private,\n showRatings: VisibilityLevel.Public,\n showBadges: VisibilityLevel.Public,\n }\n }\n}\n\n/**\n * Validate privacy settings\n *\n * @param settings - Privacy settings to validate\n * @returns Validation result with errors if any\n */\nexport function validatePrivacySettings(settings: PrivacySettings): {\n valid: boolean\n errors: string[]\n} {\n const errors: string[] = []\n\n // Check authorized viewers limit\n if (settings.authorizedViewers.length > PRIVACY_CONSTANTS.MAX_AUTHORIZED_VIEWERS) {\n errors.push(\n `Too many authorized viewers (max: ${PRIVACY_CONSTANTS.MAX_AUTHORIZED_VIEWERS})`\n )\n }\n\n // Validate mode and metric visibility consistency\n if (settings.mode === PrivacyMode.Public) {\n const hasPrivateMetric = Object.values(settings.metricVisibility).some(\n (level) => level !== VisibilityLevel.Public\n )\n if (hasPrivateMetric) {\n errors.push('Public mode cannot have private metrics')\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n }\n}\n\n/**\n * Get tier display name\n *\n * @param tier - Reputation tier\n * @returns Display name\n */\nexport function getTierDisplayName(tier: ReputationTier): string {\n const names: Record<ReputationTier, string> = {\n [ReputationTier.None]: 'Unranked',\n [ReputationTier.Bronze]: 'Bronze',\n [ReputationTier.Silver]: 'Silver',\n [ReputationTier.Gold]: 'Gold',\n [ReputationTier.Platinum]: 'Platinum',\n }\n return names[tier]\n}\n\n/**\n * Get range display string\n *\n * @param range - Score range\n * @returns Display string\n */\nexport function getRangeDisplayString(range: ScoreRange): string {\n const ranges: Record<ScoreRange, string> = {\n [ScoreRange.VeryLow]: '0-2000',\n [ScoreRange.Low]: '2000-5000',\n [ScoreRange.Medium]: '5000-7500',\n [ScoreRange.High]: '7500-9000',\n [ScoreRange.VeryHigh]: '9000-10000',\n }\n return ranges[range]\n}\n","/**\n * Privacy Module\n *\n * Manages privacy settings for agent reputation data:\n * - Initialize privacy settings for an agent\n * - Update privacy mode (Public/TierOnly/RangeOnly/Custom/Confidential)\n * - Configure selective disclosure (metric visibility)\n * - Grant/revoke viewer permissions\n * - Apply privacy presets\n * - Fetch privacy-filtered reputation data\n *\n * @example\n * ```typescript\n * // Initialize privacy for an agent\n * await privacyModule.initializePrivacy(signer, {\n * agentAddress,\n * mode: PrivacyMode.Balanced\n * })\n *\n * // Update privacy mode\n * await privacyModule.updatePrivacyMode(signer, {\n * agentAddress,\n * mode: PrivacyMode.TierOnly\n * })\n *\n * // Grant viewer access\n * await privacyModule.grantAccess(signer, {\n * agentAddress,\n * viewer: clientAddress\n * })\n * ```\n */\n\nimport type { Address } from '@solana/addresses'\nimport type { TransactionSigner } from '@solana/kit'\nimport type { GhostSpeakConfig } from '../../types/index.js'\nimport { BaseModule } from '../../core/BaseModule.js'\nimport {\n PrivacyMode,\n VisibilityLevel,\n PrivacyPresets,\n type PrivacySettings,\n type MetricVisibility,\n type PrivacyPreset,\n type VisibleReputation,\n type InitializePrivacyParams,\n type UpdatePrivacyModeParams,\n type SetMetricVisibilityParams,\n type GrantAccessParams,\n type RevokeAccessParams,\n type ApplyPresetParams,\n} from '../../types/privacy-types.js'\nimport {\n calculateVisibleScore,\n getReputationTier,\n getScoreRange,\n canViewerAccess,\n filterMetricsByVisibility,\n getDefaultMetricVisibility,\n validatePrivacySettings,\n} from './privacy-helpers.js'\n\n/**\n * Privacy module for managing reputation privacy settings\n */\nexport class PrivacyModule extends BaseModule {\n constructor(config: GhostSpeakConfig) {\n super(config)\n }\n\n /**\n * Initialize privacy settings for an agent\n *\n * Sets up privacy controls for an agent's reputation data.\n * By default, starts in Public mode with all metrics visible.\n *\n * @param signer - Transaction signer (must be agent owner)\n * @param params - Initialization parameters\n * @returns Transaction signature\n *\n * @example\n * ```typescript\n * const signature = await privacyModule.initializePrivacy(signer, {\n * agentAddress: agentPda,\n * mode: PrivacyMode.TierOnly,\n * metricVisibility: {\n * showScore: VisibilityLevel.Private,\n * showJobsCompleted: VisibilityLevel.Public,\n * // ... other metrics\n * }\n * })\n * ```\n */\n async initializePrivacy(\n signer: TransactionSigner,\n params: InitializePrivacyParams\n ): Promise<string> {\n const mode = params.mode ?? PrivacyMode.Public\n const metricVisibility = params.metricVisibility ?? getDefaultMetricVisibility(mode)\n\n // NOTE: This would call a generated instruction when privacy instructions are added to the program\n // For now, this is a placeholder that demonstrates the pattern\n const instructionGetter = async () => {\n // This would be replaced with:\n // return await getInitializePrivacyInstructionAsync({\n // agentAccount: params.agentAddress,\n // owner: signer,\n // privacyMode: mode,\n // metricVisibility,\n // systemProgram: SYSTEM_PROGRAM_ADDRESS\n // })\n\n // Placeholder instruction\n return {\n programAddress: this.programId,\n accounts: [],\n data: new Uint8Array([0]) // Placeholder\n }\n }\n\n return this.execute(\n 'initializePrivacy',\n instructionGetter,\n [signer] as unknown as TransactionSigner[]\n )\n }\n\n /**\n * Update privacy mode for an agent\n *\n * Changes how reputation data is displayed publicly.\n *\n * @param signer - Transaction signer (must be agent owner)\n * @param params - Update parameters\n * @returns Transaction signature\n *\n * @example\n * ```typescript\n * // Switch to tier-only mode\n * await privacyModule.updatePrivacyMode(signer, {\n * agentAddress: agentPda,\n * mode: PrivacyMode.TierOnly\n * })\n * ```\n */\n async updatePrivacyMode(\n signer: TransactionSigner,\n params: UpdatePrivacyModeParams\n ): Promise<string> {\n const instructionGetter = async () => {\n // Placeholder - would use generated instruction\n return {\n programAddress: this.programId,\n accounts: [],\n data: new Uint8Array([1]) // Placeholder\n }\n }\n\n return this.execute(\n 'updatePrivacyMode',\n instructionGetter,\n [signer] as unknown as TransactionSigner[]\n )\n }\n\n /**\n * Set metric visibility settings\n *\n * Configure selective disclosure for individual metrics.\n * Only works in Custom privacy mode.\n *\n * @param signer - Transaction signer (must be agent owner)\n * @param params - Metric visibility parameters\n * @returns Transaction signature\n *\n * @example\n * ```typescript\n * await privacyModule.setMetricVisibility(signer, {\n * agentAddress: agentPda,\n * metricVisibility: {\n * showScore: VisibilityLevel.Private,\n * showJobsCompleted: VisibilityLevel.Public,\n * showSuccessRate: VisibilityLevel.Public,\n * showResponseTime: VisibilityLevel.Public,\n * showDisputes: VisibilityLevel.Private,\n * showEarnings: VisibilityLevel.Private,\n * showRatings: VisibilityLevel.Public,\n * showBadges: VisibilityLevel.Public\n * }\n * })\n * ```\n */\n async setMetricVisibility(\n signer: TransactionSigner,\n params: SetMetricVisibilityParams\n ): Promise<string> {\n const instructionGetter = async () => {\n // Placeholder - would use generated instruction\n return {\n programAddress: this.programId,\n accounts: [],\n data: new Uint8Array([2]) // Placeholder\n }\n }\n\n return this.execute(\n 'setMetricVisibility',\n instructionGetter,\n [signer] as unknown as TransactionSigner[]\n )\n }\n\n /**\n * Grant viewer access to private reputation data\n *\n * Adds an address to the authorized viewers list, giving them\n * full access to all private metrics.\n *\n * @param signer - Transaction signer (must be agent owner)\n * @param params - Grant access parameters\n * @returns Transaction signature\n *\n * @example\n * ```typescript\n * // Grant access to a client\n * await privacyModule.grantAccess(signer, {\n * agentAddress: agentPda,\n * viewer: clientAddress\n * })\n * ```\n */\n async grantAccess(\n signer: TransactionSigner,\n params: GrantAccessParams\n ): Promise<string> {\n const instructionGetter = async () => {\n // Placeholder - would use generated instruction\n return {\n programAddress: this.programId,\n accounts: [],\n data: new Uint8Array([3]) // Placeholder\n }\n }\n\n return this.execute(\n 'grantAccess',\n instructionGetter,\n [signer] as unknown as TransactionSigner[]\n )\n }\n\n /**\n * Revoke viewer access to private reputation data\n *\n * Removes an address from the authorized viewers list.\n *\n * @param signer - Transaction signer (must be agent owner)\n * @param params - Revoke access parameters\n * @returns Transaction signature\n *\n * @example\n * ```typescript\n * // Revoke access from a viewer\n * await privacyModule.revokeAccess(signer, {\n * agentAddress: agentPda,\n * viewer: viewerAddress\n * })\n * ```\n */\n async revokeAccess(\n signer: TransactionSigner,\n params: RevokeAccessParams\n ): Promise<string> {\n const instructionGetter = async () => {\n // Placeholder - would use generated instruction\n return {\n programAddress: this.programId,\n accounts: [],\n data: new Uint8Array([4]) // Placeholder\n }\n }\n\n return this.execute(\n 'revokeAccess',\n instructionGetter,\n [signer] as unknown as TransactionSigner[]\n )\n }\n\n /**\n * Apply a privacy preset\n *\n * Quickly configure privacy settings using a predefined preset\n * (Conservative, Balanced, or Open).\n *\n * @param signer - Transaction signer (must be agent owner)\n * @param params - Preset parameters\n * @returns Transaction signature\n *\n * @example\n * ```typescript\n * // Apply balanced preset\n * await privacyModule.applyPreset(signer, {\n * agentAddress: agentPda,\n * preset: PrivacyPresets.BALANCED\n * })\n * ```\n */\n async applyPreset(\n signer: TransactionSigner,\n params: ApplyPresetParams\n ): Promise<string> {\n // Apply preset by updating mode and metric visibility\n const { preset } = params\n\n // First update privacy mode\n await this.updatePrivacyMode(signer, {\n agentAddress: params.agentAddress,\n mode: preset.mode,\n })\n\n // Then set metric visibility\n return this.setMetricVisibility(signer, {\n agentAddress: params.agentAddress,\n metricVisibility: preset.metricVisibility,\n })\n }\n\n /**\n * Get privacy settings for an agent\n *\n * Fetches the current privacy configuration.\n *\n * @param agentAddress - Agent address\n * @returns Privacy settings or null if not initialized\n *\n * @example\n * ```typescript\n * const settings = await privacyModule.getPrivacySettings(agentPda)\n * if (settings) {\n * console.log('Privacy mode:', settings.mode)\n * console.log('Authorized viewers:', settings.authorizedViewers.length)\n * }\n * ```\n */\n async getPrivacySettings(agentAddress: Address): Promise<PrivacySettings | null> {\n // NOTE: This would fetch from a generated account type when privacy accounts are added\n // For now, return a mock default\n\n // Would be replaced with:\n // const privacyPda = await this.derivePrivacyPda(agentAddress)\n // return this.getAccount<PrivacySettings>(privacyPda, 'getPrivacySettingsDecoder')\n\n // Placeholder - return default public settings\n return {\n agent: agentAddress,\n mode: PrivacyMode.Public,\n metricVisibility: getDefaultMetricVisibility(PrivacyMode.Public),\n authorizedViewers: [],\n autoGrantClients: false,\n updatedAt: Math.floor(Date.now() / 1000),\n }\n }\n\n /**\n * Get visible reputation data (privacy-filtered)\n *\n * Fetches reputation data and applies privacy filters based on\n * the viewer's access level.\n *\n * @param agentAddress - Agent address\n * @param viewerAddress - Viewer address (for access check)\n * @returns Privacy-filtered reputation data\n *\n * @example\n * ```typescript\n * // Get visible reputation for a specific viewer\n * const visibleRep = await privacyModule.getVisibleReputation(\n * agentPda,\n * viewerAddress\n * )\n *\n * console.log('Tier:', visibleRep.tier)\n * console.log('Exact score:', visibleRep.exactScore) // Only if visible\n * console.log('Has full access:', visibleRep.hasFullAccess)\n * ```\n */\n async getVisibleReputation(\n agentAddress: Address,\n viewerAddress: Address\n ): Promise<VisibleReputation> {\n // Fetch privacy settings\n let privacySettings = await this.getPrivacySettings(agentAddress)\n\n if (!privacySettings) {\n // No privacy settings = public mode\n privacySettings = {\n agent: agentAddress,\n mode: PrivacyMode.Public,\n metricVisibility: getDefaultMetricVisibility(PrivacyMode.Public),\n authorizedViewers: [],\n autoGrantClients: false,\n updatedAt: Math.floor(Date.now() / 1000),\n }\n }\n\n // Check viewer access\n const hasAccess = canViewerAccess(viewerAddress, privacySettings, agentAddress)\n\n // Fetch reputation data (would use ReputationModule in real implementation)\n // This is a placeholder\n const reputationData = {\n agent: agentAddress,\n overallScore: 7500, // Mock data\n totalJobsCompleted: 100,\n totalJobsFailed: 5,\n avgResponseTime: 250,\n disputesAgainst: 2,\n disputesResolved: 2,\n totalEarnings: 50000,\n avgRating: 4.5,\n badges: ['FirstJob', 'TenJobs', 'QuickResponder'],\n }\n\n // Calculate visible score\n const visibleScore = calculateVisibleScore(\n reputationData.overallScore,\n privacySettings.mode,\n hasAccess\n )\n\n // Filter metrics by visibility\n const filteredMetrics = filterMetricsByVisibility(\n reputationData,\n privacySettings.metricVisibility,\n hasAccess\n )\n\n // Combine results\n return {\n ...filteredMetrics,\n privacyMode: privacySettings.mode,\n ...visibleScore,\n hasFullAccess: hasAccess,\n } as VisibleReputation\n }\n\n // =====================================================\n // HELPER METHODS\n // =====================================================\n\n /**\n * Validate privacy settings before applying\n *\n * @param settings - Privacy settings to validate\n * @returns Validation result\n */\n validateSettings(settings: PrivacySettings): { valid: boolean; errors: string[] } {\n return validatePrivacySettings(settings)\n }\n\n /**\n * Get available privacy presets\n *\n * @returns Record of available presets\n */\n getAvailablePresets(): Record<string, PrivacyPreset> {\n return PrivacyPresets\n }\n\n /**\n * Get default metric visibility for a privacy mode\n *\n * @param mode - Privacy mode\n * @returns Default metric visibility\n */\n getDefaultVisibility(mode: PrivacyMode): MetricVisibility {\n return getDefaultMetricVisibility(mode)\n }\n\n /**\n * Calculate reputation tier from score\n *\n * @param score - Reputation score\n * @returns Reputation tier\n */\n getTier(score: number) {\n return getReputationTier(score)\n }\n\n /**\n * Calculate score range from score\n *\n * @param score - Reputation score\n * @returns Score range\n */\n getRange(score: number) {\n return getScoreRange(score)\n }\n\n // Private helper to derive privacy PDA (when privacy accounts are implemented)\n private async derivePrivacyPda(agentAddress: Address): Promise<Address> {\n const { getProgramDerivedAddress, getAddressEncoder } = await import('@solana/addresses')\n const addressEncoder = getAddressEncoder()\n const agentBytes = addressEncoder.encode(agentAddress)\n\n // seeds = [b\"privacy_settings\", agent.key().as_ref()]\n const [pda] = await getProgramDerivedAddress({\n programAddress: this.programId,\n seeds: [\n new TextEncoder().encode('privacy_settings'),\n agentBytes,\n ],\n })\n\n return pda\n }\n}\n","/**\n * Authorization Module - Agent Pre-Authorization System\n *\n * GhostSpeak's trustless system for agents to pre-authorize facilitators\n * (e.g., PayAI) to update their reputation with built-in security limits.\n *\n * @module AuthorizationModule\n */\n\nimport type { Address } from '@solana/addresses'\nimport type { TransactionSigner } from '@solana/kit'\nimport { BaseModule } from '../../core/BaseModule.js'\nimport type { GhostSpeakConfig } from '../../types/index.js'\nimport {\n createSignedAuthorization,\n verifyAuthorizationSignature,\n serializeAuthorization,\n deserializeAuthorization,\n getAuthorizationId,\n isAuthorizationExpired,\n isAuthorizationExhausted,\n type SigningKeypair,\n} from '../../utils/signature-verification.js'\nimport type {\n ReputationAuthorization,\n CreateAuthorizationParams,\n AuthorizationWithStatus,\n AuthorizationStatus,\n AuthorizationFilter,\n SolanaNetwork,\n OnChainStorageConfig,\n} from '../../types/authorization/authorization-types.js'\n\n/**\n * Default on-chain storage fee (2000000 lamports = 0.002 SOL)\n * This covers rent exemption for the authorization account\n */\nconst DEFAULT_STORAGE_FEE = 2000000n\n\n/**\n * Authorization Module\n *\n * Manages agent pre-authorizations for reputation updates.\n */\nexport class AuthorizationModule extends BaseModule {\n constructor(config: GhostSpeakConfig) {\n super(config)\n }\n\n /**\n * Create a signed authorization for a facilitator\n *\n * @param params - Authorization parameters\n * @param agentKeypair - Agent's keypair for signing\n * @returns Signed authorization\n *\n * @example\n * ```typescript\n * const authorization = await client.authorization.createAuthorization({\n * authorizedSource: payAIFacilitatorAddress,\n * indexLimit: 1000, // Allow 1000 reputation updates\n * expiresIn: 30 * 24 * 60 * 60, // 30 days\n * network: 'devnet',\n * }, agentKeypair)\n * ```\n */\n async createAuthorization(\n params: CreateAuthorizationParams,\n agentKeypair: SigningKeypair\n ): Promise<ReputationAuthorization> {\n // Create signed authorization using signature verification utilities\n return await createSignedAuthorization(params, agentKeypair)\n }\n\n /**\n * Store authorization on-chain (optional, ~0.002 SOL fee)\n *\n * Creates a PDA account storing the authorization for on-chain verification.\n * This provides an immutable audit trail but costs rent (~0.002 SOL).\n *\n * **Cost vs Benefit:**\n * - Off-chain (default): Free, but requires sharing signed authorization\n * - On-chain: ~0.002 SOL, provides transparent audit trail\n *\n * **When to use on-chain storage:**\n * - High-value authorizations where transparency is critical\n * - Compliance/audit requirements\n * - Public agent reputation systems\n *\n * @param authorization - Authorization to store\n * @param agentSigner - Agent's signer (or facilitator if they pay fee)\n * @param config - Optional storage configuration\n * @returns Transaction signature\n *\n * @example\n * ```typescript\n * // Default: Agent pays ~0.002 SOL\n * const sig = await client.authorization.storeAuthorizationOnChain(auth, agentSigner)\n *\n * // Custom fee structure\n * const sig = await client.authorization.storeAuthorizationOnChain(auth, agentSigner, {\n * storageFee: 1500000n, // 0.0015 SOL\n * feePayedByAgent: false // Facilitator pays\n * })\n * ```\n */\n async storeAuthorizationOnChain(\n authorization: ReputationAuthorization,\n agentSigner: TransactionSigner,\n config?: Partial<OnChainStorageConfig>\n ): Promise<string> {\n // Calculate storage fee based on configuration\n const storageFee = this.calculateStorageFee(authorization, config)\n const feePayedByAgent = config?.feePayedByAgent ?? true\n\n console.log(`💰 On-chain storage cost: ${Number(storageFee) / 1e9} SOL`)\n console.log(` Fee payer: ${feePayedByAgent ? 'Agent' : 'Facilitator'}`)\n\n const { getCreateAgentAuthorizationInstructionAsync } = await import(\n '../../generated/instructions/createAgentAuthorization.js'\n )\n\n // Manually derive authorization PDA with correct seed encoding\n // Codama's generated code uses size-prefixed seeds which exceed 32-byte limit\n // We need raw bytes matching Rust's .as_bytes() behavior\n const { getProgramDerivedAddress, getBytesEncoder, getAddressEncoder, getUtf8Encoder } = await import('@solana/kit')\n\n const nonce = authorization.nonce ?? \"default\" // Match Rust's unwrap_or(\"default\")\n const [authorizationPda] = await getProgramDerivedAddress({\n programAddress: this.getProgramId(),\n seeds: [\n getBytesEncoder().encode(new Uint8Array([97, 103, 101, 110, 116, 95, 97, 117, 116, 104])), // 'agent_auth'\n getAddressEncoder().encode(authorization.agentAddress as Address),\n getAddressEncoder().encode(authorization.authorizedSource as Address),\n getUtf8Encoder().encode(nonce), // Raw bytes, no size prefix - matches Rust .as_bytes()\n ],\n })\n\n // Use BaseModule's execute method\n return await this.execute(\n 'createAgentAuthorization',\n async () => {\n return await getCreateAgentAuthorizationInstructionAsync({\n agent: authorization.agentAddress as Address,\n authorization: authorizationPda, // Provide manually derived PDA\n authority: agentSigner,\n authorizedSource: authorization.authorizedSource as Address,\n indexLimit: BigInt(authorization.indexLimit),\n expiresAt: BigInt(authorization.expiresAt),\n network: authorization.network === 'mainnet-beta' ? 0 : authorization.network === 'devnet' ? 1 : 2,\n signature: authorization.signature,\n nonce: nonce, // Pass the actual nonce value\n })\n },\n [agentSigner]\n )\n }\n\n /**\n * Verify authorization signature\n *\n * @param authorization - Authorization to verify\n * @returns True if signature is valid\n *\n * @example\n * ```typescript\n * const isValid = await client.authorization.verifySignature(authorization)\n * if (!isValid) {\n * throw new Error('Invalid authorization signature')\n * }\n * ```\n */\n async verifySignature(authorization: ReputationAuthorization): Promise<boolean> {\n return verifyAuthorizationSignature(authorization)\n }\n\n /**\n * Check authorization status (without on-chain call)\n *\n * @param authorization - Authorization to check\n * @param currentIndex - Current usage count (optional, defaults to authorization.currentIndex)\n * @returns Authorization status\n */\n getAuthorizationStatus(\n authorization: ReputationAuthorization,\n currentIndex?: number\n ): {\n status: AuthorizationStatus\n isValid: boolean\n remainingUses: number\n reason?: string\n } {\n const now = Math.floor(Date.now() / 1000)\n const idx = currentIndex ?? 0\n\n if (isAuthorizationExpired(authorization, now)) {\n return {\n status: 'expired' as AuthorizationStatus,\n isValid: false,\n remainingUses: 0,\n reason: 'Authorization has expired',\n }\n }\n\n if (isAuthorizationExhausted(authorization, idx)) {\n return {\n status: 'exhausted' as AuthorizationStatus,\n isValid: false,\n remainingUses: 0,\n reason: 'Index limit reached',\n }\n }\n\n const remaining = authorization.indexLimit - idx\n\n return {\n status: 'active' as AuthorizationStatus,\n isValid: true,\n remainingUses: remaining,\n }\n }\n\n /**\n * Fetch authorization from on-chain PDA\n *\n * @param agentAddress - Agent's address\n * @param authorizedSource - Authorized source address\n * @param nonce - Optional nonce (must match creation)\n * @returns Authorization with current on-chain status\n */\n async fetchAuthorization(\n agentAddress: Address,\n authorizedSource: Address,\n nonce?: string\n ): Promise<AuthorizationWithStatus | null> {\n // TODO: Implement PDA derivation and account fetch\n // This will be added once Codama generates the account types\n\n throw new Error('On-chain fetch not yet implemented - pending Codama generation')\n }\n\n /**\n * Update reputation using authorization\n *\n * Called by facilitators (e.g., PayAI) to update agent reputation\n * using a pre-signed authorization.\n *\n * @param authorization - Authorization to use\n * @param reputationChange - Reputation change to apply\n * @param transactionSignature - Transaction signature for audit trail\n * @param usageRecord - PDA for usage record (audit trail)\n * @param metadata - Optional metadata\n * @param facilitatorSigner - Facilitator's signer\n * @returns Transaction signature\n */\n async updateReputationWithAuth(\n authorization: ReputationAuthorization,\n reputationChange: number,\n transactionSignature: string,\n usageRecord: Address,\n metadata: Record<string, unknown> | undefined,\n facilitatorSigner: TransactionSigner\n ): Promise<string> {\n // Verify authorization signature first\n const isValid = await this.verifySignature(authorization)\n if (!isValid) {\n throw new Error('Invalid authorization signature')\n }\n\n // Check authorization status\n const status = this.getAuthorizationStatus(authorization)\n if (!status.isValid) {\n throw new Error(`Authorization is ${status.status}: ${status.reason}`)\n }\n\n const { getUpdateReputationWithAuthInstructionAsync } = await import(\n '../../generated/instructions/updateReputationWithAuth.js'\n )\n\n // Use BaseModule's execute method\n return await this.execute(\n 'updateReputationWithAuth',\n async () => {\n return await getUpdateReputationWithAuthInstructionAsync({\n agent: authorization.agentAddress as Address,\n authorizedSource: facilitatorSigner,\n usageRecord,\n reputationChange: BigInt(reputationChange),\n transactionSignature,\n metadata: metadata ? JSON.stringify(metadata) : null,\n nonce: authorization.nonce ?? null,\n })\n },\n [facilitatorSigner]\n )\n }\n\n /**\n * Revoke authorization\n *\n * Agent can revoke an authorization before it expires or is exhausted.\n *\n * @param agentAddress - Agent's address\n * @param authorization - Authorization account PDA\n * @param nonce - Optional nonce (must match creation)\n * @param agentSigner - Agent's signer\n * @returns Transaction signature\n */\n async revokeAuthorization(\n agentAddress: Address,\n authorization: Address,\n nonce: string | undefined,\n agentSigner: TransactionSigner\n ): Promise<string> {\n const { getRevokeAuthorizationInstruction } = await import(\n '../../generated/instructions/revokeAuthorization.js'\n )\n\n // Use BaseModule's execute method\n return await this.execute(\n 'revokeAuthorization',\n () => {\n return getRevokeAuthorizationInstruction({\n agent: agentAddress,\n authorization,\n authority: agentSigner,\n nonce: nonce ?? null,\n })\n },\n [agentSigner]\n )\n }\n\n /**\n * List authorizations for an agent (filtering)\n *\n * @param filter - Filter criteria\n * @returns List of authorizations\n */\n async listAuthorizations(\n filter: AuthorizationFilter\n ): Promise<AuthorizationWithStatus[]> {\n // TODO: Implement getProgramAccounts query with filters\n // This will be added once Codama generates the account types\n\n throw new Error('Authorization listing not yet implemented - pending Codama generation')\n }\n\n /**\n * Serialize authorization for storage/transmission\n *\n * @param authorization - Authorization to serialize\n * @returns JSON-safe object\n */\n serializeAuthorization(authorization: ReputationAuthorization): Record<string, unknown> {\n return serializeAuthorization(authorization)\n }\n\n /**\n * Deserialize authorization from storage/transmission\n *\n * @param data - Serialized authorization data\n * @returns Authorization object\n */\n deserializeAuthorization(data: Record<string, unknown>): ReputationAuthorization {\n return deserializeAuthorization(data as Parameters<typeof deserializeAuthorization>[0])\n }\n\n /**\n * Get authorization ID (deterministic hash)\n *\n * @param authorization - Authorization to hash\n * @returns Base58-encoded hash\n */\n async getAuthorizationId(authorization: ReputationAuthorization): Promise<string> {\n return getAuthorizationId(authorization)\n }\n\n /**\n * Helper: Create authorization for PayAI facilitator\n *\n * Convenience method with sensible defaults for PayAI integration.\n *\n * @param payAIFacilitatorAddress - PayAI facilitator address\n * @param agentKeypair - Agent's keypair\n * @param options - Optional overrides\n * @returns Signed authorization\n *\n * @example\n * ```typescript\n * const auth = await client.authorization.createPayAIAuthorization(\n * 'PayAI...FacilitatorAddress',\n * agentKeypair,\n * { indexLimit: 5000 } // Optional overrides\n * )\n * ```\n */\n async createPayAIAuthorization(\n payAIFacilitatorAddress: Address,\n agentKeypair: SigningKeypair,\n options?: Partial<CreateAuthorizationParams>\n ): Promise<ReputationAuthorization> {\n const defaultParams: CreateAuthorizationParams = {\n authorizedSource: payAIFacilitatorAddress,\n indexLimit: 1000, // 1000 reputation updates\n expiresIn: 30 * 24 * 60 * 60, // 30 days\n network: 'devnet' as SolanaNetwork, // TODO: detect from client\n ...options,\n }\n\n return this.createAuthorization(defaultParams, agentKeypair)\n }\n\n /**\n * Calculate storage fee based on authorization duration and custom fees\n *\n * @param authorization - Authorization to calculate fee for\n * @param config - Storage configuration\n * @returns Fee in lamports\n *\n * @example\n * ```typescript\n * // Default fee: 0.002 SOL\n * const fee = module.calculateStorageFee(auth)\n *\n * // Custom fee for 30-day authorizations: 0.001 SOL\n * const fee = module.calculateStorageFee(auth, {\n * customFees: { 2592000: 1000000n } // 30 days = 0.001 SOL\n * })\n * ```\n */\n private calculateStorageFee(\n authorization: ReputationAuthorization,\n config?: Partial<OnChainStorageConfig>\n ): bigint {\n // If custom fee specified, use it\n if (config?.storageFee !== undefined) {\n return config.storageFee\n }\n\n // If custom fee structure specified, find matching duration\n if (config?.customFees) {\n const now = Math.floor(Date.now() / 1000)\n const duration = authorization.expiresAt - now\n\n // Find exact match or closest duration\n const durations = Object.keys(config.customFees).map(Number).sort((a, b) => a - b)\n for (const d of durations) {\n if (duration <= d) {\n return config.customFees[d]\n }\n }\n\n // If duration exceeds all custom tiers, use the highest tier fee\n const highestDuration = durations[durations.length - 1]\n if (highestDuration && config.customFees[highestDuration]) {\n return config.customFees[highestDuration]\n }\n }\n\n // Default: 0.002 SOL rent exemption\n return DEFAULT_STORAGE_FEE\n }\n\n /**\n * Estimate on-chain storage cost for an authorization\n *\n * @param params - Authorization parameters\n * @param config - Optional storage configuration\n * @returns Estimated cost in SOL\n *\n * @example\n * ```typescript\n * const costInSOL = await client.authorization.estimateStorageCost({\n * authorizedSource: facilitatorAddress,\n * expiresIn: 30 * 24 * 60 * 60 // 30 days\n * })\n * console.log(`On-chain storage will cost ${costInSOL} SOL`)\n * ```\n */\n async estimateStorageCost(\n params: CreateAuthorizationParams,\n config?: Partial<OnChainStorageConfig>\n ): Promise<number> {\n // Create a mock authorization to calculate fee\n const now = Math.floor(Date.now() / 1000)\n const mockAuth: ReputationAuthorization = {\n agentAddress: '11111111111111111111111111111111' as Address, // Placeholder\n authorizedSource: params.authorizedSource,\n indexLimit: params.indexLimit ?? 1000,\n expiresAt: params.expiresAt ?? now + (params.expiresIn ?? 30 * 24 * 60 * 60),\n network: params.network ?? 'devnet',\n signature: new Uint8Array(64),\n nonce: params.nonce\n }\n\n const feeInLamports = this.calculateStorageFee(mockAuth, config)\n return Number(feeInLamports) / 1e9 // Convert to SOL\n }\n}\n","import type { Address } from '@solana/addresses'\nimport type { TransactionSigner } from '@solana/kit'\nimport type { GhostSpeakConfig } from '../types/index.js'\nimport { GHOSTSPEAK_PROGRAM_ID } from '../types/index.js'\nimport { AgentModule } from './modules/AgentModule.js'\nimport { GhostModule } from './modules/GhostModule.js'\n\nimport { GovernanceModule } from '../modules/governance/GovernanceModule.js'\nimport { MultisigModule } from '../modules/multisig/MultisigModule.js'\n\nimport { UnifiedCredentialService } from '../modules/credentials/UnifiedCredentialService.js'\nimport { ReputationModule } from '../modules/reputation/ReputationModule.js'\nimport { DidModule } from '../modules/did/DidModule.js'\nimport { PrivacyModule } from '../modules/privacy/PrivacyModule.js'\nimport { AuthorizationModule } from '../modules/authorization/AuthorizationModule.js'\nimport { StakingModule } from '../modules/staking/StakingModule.js'\nimport { ProposalType } from '../generated/types/proposalType.js'\nimport { VoteChoice } from '../generated/types/voteChoice.js'\n\n\n/**\n * Main GhostSpeak client with fluent API design\n * \n * Example usage:\n * ```typescript\n * const ghostspeak = new GhostSpeak()\n * \n * // Create an agent\n * const agent = await ghostspeak\n * .agent()\n * .create({ name: \"My Agent\", capabilities: [\"coding\"] })\n * .compressed()\n * .execute()\n * \n * ```\n */\nexport class GhostSpeakClient {\n private config: GhostSpeakConfig\n \n constructor(config?: Partial<GhostSpeakConfig>) {\n // Zero-config setup with smart defaults\n this.config = {\n programId: GHOSTSPEAK_PROGRAM_ID,\n commitment: 'confirmed',\n cluster: 'devnet',\n rpcEndpoint: config?.rpcEndpoint ?? this.getDefaultRpcEndpoint(config?.cluster ?? 'devnet'),\n ...config,\n rpc: config?.rpc ?? {} as GhostSpeakConfig['rpc']\n }\n }\n\n /**\n * Direct access to Agent Module for read operations\n */\n get agents(): AgentModule {\n return new AgentModule(this.config)\n }\n\n /**\n * Direct access to Ghost Module for claiming external agents\n *\n * Ghosts are external AI agents (type 10) that exist on x402 facilitators.\n * They can be claimed using Solana Attestation Service (SAS)\n * for trustless ownership verification.\n */\n get ghosts(): GhostModule {\n return new GhostModule(this.config)\n }\n\n /**\n * Direct access to Governance Module for read operations\n */\n get governanceModule(): GovernanceModule {\n return new GovernanceModule(this.config)\n }\n\n /**\n * Direct access to Multisig Module for read operations\n */\n get multisigModule(): MultisigModule {\n return new MultisigModule(this.config)\n }\n\n /**\n * Agent operations\n */\n agent(): AgentBuilder {\n return new AgentBuilder(this.config)\n }\n\n /**\n * Reputation operations\n */\n reputation(): ReputationModule {\n return new ReputationModule(this.config)\n }\n\n /**\n * Reputation Tag Engine (Pillar 2: Granular Tags)\n *\n * Automatic tag assignment and management based on agent metrics.\n * Features confidence scoring, evidence tracking, and tag decay.\n */\n tagEngine() {\n const { ReputationTagEngine } = require('../utils/reputation-tag-engine.js')\n return new ReputationTagEngine()\n }\n\n /**\n * Multi-Source Reputation Aggregator (Pillar 3: External Sources)\n *\n * Aggregate reputation data from multiple sources (x402, GitHub, custom webhooks)\n * with weighted scoring and conflict detection.\n */\n reputationAggregator() {\n const { MultiSourceAggregator } = require('../modules/reputation/MultiSourceAggregator.js')\n return new MultiSourceAggregator()\n }\n\n /**\n * Privacy operations\n */\n privacy(): PrivacyModule {\n return new PrivacyModule(this.config)\n }\n\n /**\n * Governance operations\n */\n governance(): GovernanceBuilder {\n return new GovernanceBuilder(this.config)\n }\n\n /**\n * Multisig operations\n */\n multisig(): MultisigBuilder {\n return new MultisigBuilder(this.config)\n }\n\n\n\n /**\n * Unified Credential operations (Solana + Crossmint)\n */\n credentials(): UnifiedCredentialService {\n return new UnifiedCredentialService({\n programId: this.config.programId,\n crossmint: this.config.credentials?.crossmintApiKey ? {\n apiKey: this.config.credentials.crossmintApiKey,\n environment: this.config.credentials.crossmintEnvironment,\n chain: this.config.credentials.crossmintChain\n } : undefined,\n crossmintTemplates: this.config.credentials?.templates\n })\n }\n\n /**\n * DID operations (Decentralized Identifiers)\n */\n did(): DidModule {\n return new DidModule(this.config)\n }\n\n /**\n * Direct access to Authorization Module for read operations\n */\n get authorization(): AuthorizationModule {\n return new AuthorizationModule(this.config)\n }\n\n /**\n * Direct access to Staking Module for read operations\n */\n get staking(): StakingModule {\n return new StakingModule(this.config)\n }\n\n // H2A module has been removed - use A2A (Agent-to-Agent) instructions instead\n\n /**\n * Enable development mode features\n */\n enableDevMode(): this {\n console.log('🛠️ Development mode enabled')\n console.log(' - Transaction simulation before sending')\n console.log(' - Cost estimates for all operations')\n console.log(' - Enhanced error messages')\n \n this.config = {\n ...this.config,\n // Add dev mode flags\n }\n \n return this\n }\n\n /**\n * Configure network\n */\n useNetwork(cluster: 'mainnet-beta' | 'devnet' | 'testnet' | 'localnet'): this {\n this.config.cluster = cluster\n this.config.rpcEndpoint = this.getDefaultRpcEndpoint(cluster)\n return this\n }\n\n /**\n * Configure custom RPC\n */\n useRpc(endpoint: string, wsEndpoint?: string): this {\n this.config.rpcEndpoint = endpoint\n this.config.wsEndpoint = wsEndpoint\n return this\n }\n\n /**\n * Get default RPC endpoint for cluster\n */\n private getDefaultRpcEndpoint(cluster: string): string {\n switch (cluster) {\n case 'mainnet-beta':\n return 'https://api.mainnet-beta.solana.com'\n case 'devnet':\n return 'https://api.devnet.solana.com'\n case 'testnet':\n return 'https://api.testnet.solana.com'\n case 'localnet':\n return 'http://localhost:8899'\n default:\n return 'https://api.devnet.solana.com'\n }\n }\n}\n\n// =====================================================\n// FLUENT BUILDERS\n// =====================================================\n\n/**\n * Agent builder parameters interface\n */\ninterface AgentBuilderParams {\n agentType?: number\n metadataUri?: string\n agentId?: string\n compressed?: boolean\n forceIPFS?: boolean\n signer?: TransactionSigner\n name?: string\n description?: string\n}\n\n/**\n * Agent builder for fluent API\n */\nclass AgentBuilder {\n private module: AgentModule\n private params: AgentBuilderParams = {}\n\n constructor(config: GhostSpeakConfig) {\n this.module = new AgentModule(config)\n }\n\n create(params: { name: string; description?: string; capabilities: string[] }): this {\n this.params = {\n ...this.params,\n agentType: 0, // Default type\n metadataUri: JSON.stringify(params),\n agentId: params.name.toLowerCase().replace(/\\s+/g, '-'),\n name: params.name,\n description: params.description || ''\n }\n return this\n }\n\n withDescription(description: string): this {\n this.params.description = description\n return this\n }\n\n withType(agentType: number): this {\n this.params.agentType = agentType\n return this\n }\n\n withIPFS(): this {\n this.params.forceIPFS = true\n return this\n }\n\n compressed(): this {\n this.params.compressed = true\n return this\n }\n\n debug(): this {\n this.module.debug()\n return this\n }\n\n withSigner(signer: TransactionSigner): this {\n this.params.signer = signer\n return this\n }\n\n private validateParams(): void {\n if (!this.params.signer) {\n throw new Error('Agent builder requires a signer. Call with signer first.')\n }\n if (!this.params.metadataUri) {\n throw new Error('Agent builder requires metadata. Call create() first.')\n }\n if (!this.params.agentId) {\n throw new Error('Agent builder requires agent ID. Call create() first.')\n }\n this.params.agentType ??= 0 // Default type\n }\n\n async getCost(): Promise<bigint> {\n this.validateParams()\n return this.module.getCost('registerAgent', () => ({\n programAddress: this.module.getProgramId(),\n accounts: [],\n data: new Uint8Array()\n }))\n }\n\n async simulate(): Promise<unknown> {\n const instruction = () => ({\n // Placeholder for actual instruction generation\n programAddress: this.module.getProgramId(),\n accounts: [],\n data: new Uint8Array()\n })\n this.validateParams()\n return this.module.simulateInstruction('registerAgent', instruction, [this.params.signer!])\n }\n\n async explain(): Promise<string> {\n this.validateParams()\n return this.module.explain('registerAgent', () => ({\n programAddress: this.module.getProgramId(),\n accounts: [],\n data: new Uint8Array()\n }))\n }\n\n async execute(): Promise<{ address: Address; signature: string }> {\n this.validateParams()\n \n if (this.params.compressed) {\n // Implementation would handle compressed agent creation\n console.log('Creating compressed agent (5000x cheaper)...')\n }\n \n const signature = await this.module.register(this.params.signer!, {\n agentType: this.params.agentType!,\n name: this.params.name!,\n description: this.params.description!,\n metadataUri: this.params.metadataUri!,\n agentId: this.params.agentId!\n })\n const address = await this.deriveAgentAddress(this.params.agentId!, this.params.signer!)\n \n return { address, signature }\n }\n\n private async deriveAgentAddress(agentId: string, signer: TransactionSigner): Promise<Address> {\n const { deriveAgentPda } = await import('../utils/pda.js')\n const [address] = await deriveAgentPda({ \n programAddress: this.module.getProgramId(), \n owner: signer.address, \n agentId \n })\n return address\n }\n}\n\n\n\n/**\n * Channel builder parameters interface\n */\n\n/**\n * Marketplace builder for fluent API\n */\n\n/**\n * Governance builder for fluent API\n */\nclass GovernanceBuilder {\n private module: GovernanceModule\n private params: GovernanceBuilderParams = {}\n\n constructor(config: GhostSpeakConfig) {\n this.module = new GovernanceModule(config)\n }\n\n /**\n * Create a governance proposal\n */\n proposal(): ProposalBuilder {\n return new ProposalBuilder(this.module, this.params)\n }\n\n /**\n * Get governance queries\n */\n query(): GovernanceQuery {\n return new GovernanceQuery(this.module)\n }\n\n debug(): this {\n this.module.debug()\n return this\n }\n\n withSigner(signer: TransactionSigner): this {\n this.params.signer = signer\n return this\n }\n}\n\n/**\n * Governance builder parameters interface\n */\ninterface GovernanceBuilderParams {\n signer?: TransactionSigner\n}\n\n/**\n * Proposal builder for fluent API\n */\nclass ProposalBuilder {\n private params: {\n title?: string\n description?: string\n proposalType?: 'parameter_change' | 'upgrade' | 'treasury'\n votingDuration?: number\n executionDelay?: number\n signer?: TransactionSigner\n } = {}\n\n constructor(private module: GovernanceModule, private builderParams: GovernanceBuilderParams) {\n this.params.signer = builderParams.signer\n }\n\n create(params: { title: string; description: string }): this {\n this.params.title = params.title\n this.params.description = params.description\n return this\n }\n\n type(proposalType: 'parameter_change' | 'upgrade' | 'treasury'): this {\n this.params.proposalType = proposalType\n return this\n }\n\n votingDuration(hours: number): this {\n this.params.votingDuration = hours\n return this\n }\n\n executionDelay(hours: number): this {\n this.params.executionDelay = hours\n return this\n }\n\n private validateParams(): void {\n if (!this.params.signer) throw new Error('Signer required')\n if (!this.params.title) throw new Error('Title required')\n if (!this.params.description) throw new Error('Description required')\n if (!this.params.proposalType) throw new Error('Proposal type required')\n if (!this.params.votingDuration) throw new Error('Voting duration required')\n }\n\n async execute(): Promise<{ address: Address; signature: string }> {\n this.validateParams()\n \n const signature = await this.module.createProposal({\n signer: this.params.signer!,\n title: this.params.title!,\n description: this.params.description!,\n proposalType: this.params.proposalType!,\n votingDuration: this.params.votingDuration!,\n executionDelay: this.params.executionDelay\n })\n \n const address = `proposal_${this.params.signer!.address}_${this.params.title}` as Address\n return { address, signature }\n }\n\n withSigner(signer: TransactionSigner): this {\n this.params.signer = signer\n return this\n }\n}\n\n/**\n * Governance query helper\n */\nclass GovernanceQuery {\n constructor(private module: GovernanceModule) {}\n\n async activeProposals() {\n return this.module.getActiveProposals()\n }\n\n async proposalsByProposer(proposer: Address) {\n return this.module.getProposalsByProposer(proposer)\n }\n\n async proposalsByStatus(status: 'draft' | 'voting' | 'succeeded' | 'defeated' | 'executed') {\n return this.module.getProposalsByStatus(status)\n }\n}\n\n/**\n * Multisig builder for fluent API\n */\nclass MultisigBuilder {\n private module: MultisigModule\n private params: MultisigBuilderParams = {}\n\n constructor(config: GhostSpeakConfig) {\n this.module = new MultisigModule(config)\n }\n\n create(): CreateMultisigBuilder {\n return new CreateMultisigBuilder(this.module, this.params)\n }\n\n proposal(): MultisigProposalBuilder {\n return new MultisigProposalBuilder(this.module, this.params)\n }\n\n approve(): MultisigApproveBuilder {\n return new MultisigApproveBuilder(this.module, this.params)\n }\n\n executeProposal(): MultisigExecuteBuilder {\n return new MultisigExecuteBuilder(this.module, this.params)\n }\n\n withSigner(signer: TransactionSigner): this {\n this.params.signer = signer\n return this\n }\n\n debug(): this {\n this.module.debug()\n return this\n }\n}\n\ninterface MultisigBuilderParams {\n signer?: TransactionSigner\n}\n\nclass CreateMultisigBuilder {\n private params: {\n multisigId?: bigint\n threshold?: number\n signers?: Address[]\n signer?: TransactionSigner\n } = {}\n\n constructor(private module: MultisigModule, private builderParams: MultisigBuilderParams) {\n this.params.signer = builderParams.signer\n }\n\n withId(id: bigint): this {\n this.params.multisigId = id\n return this\n }\n\n threshold(t: number): this {\n this.params.threshold = t\n return this\n }\n\n signers(s: Address[]): this {\n this.params.signers = s\n return this\n }\n\n async execute(): Promise<{ signature: string }> {\n if (!this.params.signer) throw new Error('Signer required')\n if (!this.params.multisigId) throw new Error('Multisig ID required')\n if (!this.params.threshold) throw new Error('Threshold required')\n if (!this.params.signers) throw new Error('Signers required')\n\n return {\n signature: await this.module.createMultisig({\n owner: this.params.signer,\n multisigId: this.params.multisigId,\n threshold: this.params.threshold,\n signers: this.params.signers\n })\n }\n }\n\n withSigner(signer: TransactionSigner): this {\n this.params.signer = signer\n return this\n }\n}\n\nclass MultisigProposalBuilder {\n private params: {\n multisigAddress?: Address\n title?: string\n description?: string\n signer?: TransactionSigner\n } = {}\n\n constructor(private module: MultisigModule, private builderParams: MultisigBuilderParams) {\n this.params.signer = builderParams.signer\n }\n\n forMultisig(address: Address): this {\n this.params.multisigAddress = address\n return this\n }\n\n title(t: string): this {\n this.params.title = t\n return this\n }\n\n description(d: string): this {\n this.params.description = d\n return this\n }\n\n async execute(): Promise<{ signature: string }> {\n if (!this.params.signer) throw new Error('Signer required')\n if (!this.params.title) throw new Error('Title required')\n if (!this.params.description) throw new Error('Description required')\n \n // Placeholder execution since we simplified createProposal in module\n // We would need more params in a real app (execution params, type etc)\n // For now we just call it with minimal dummy data to prove wiring\n return {\n signature: await this.module.createProposal({\n multisigAddress: this.params.multisigAddress!,\n title: this.params.title,\n description: this.params.description,\n proposalType: ProposalType.Custom,\n executionParams: {\n instructions: [],\n executionDelay: 0n,\n executionConditions: [],\n cancellable: true,\n autoExecute: true,\n executionAuthority: this.params.signer.address\n },\n proposalId: BigInt(Date.now()),\n proposer: this.params.signer\n })\n }\n }\n\n withSigner(signer: TransactionSigner): this {\n this.params.signer = signer\n return this\n }\n}\n\nclass MultisigApproveBuilder {\n private params: {\n proposalAddress?: Address\n voteChoice?: VoteChoice\n reasoning?: string\n signer?: TransactionSigner\n tokenAccount?: Address\n } = {}\n\n constructor(private module: MultisigModule, private builderParams: MultisigBuilderParams) {\n this.params.signer = builderParams.signer\n }\n\n proposal(address: Address): this {\n this.params.proposalAddress = address\n return this\n }\n\n vote(choice: VoteChoice): this {\n this.params.voteChoice = choice\n return this\n }\n\n reason(text: string): this {\n this.params.reasoning = text\n return this\n }\n\n tokenAccount(account: Address): this {\n this.params.tokenAccount = account\n return this\n }\n\n async execute(): Promise<{ signature: string }> {\n if (!this.params.signer) throw new Error('Signer required')\n if (!this.params.proposalAddress) throw new Error('Proposal address required')\n\n // NOTE: approveProposal was removed - use protocol_config for voting\n throw new Error('Multisig approval: Use protocol_config instructions for voting (approveProposal removed)')\n }\n\n withSigner(signer: TransactionSigner): this {\n this.params.signer = signer\n return this\n }\n}\n\nclass MultisigExecuteBuilder {\n private params: {\n proposalAddress?: Address\n targetProgram?: Address\n signer?: TransactionSigner\n } = {}\n\n constructor(private module: MultisigModule, private builderParams: MultisigBuilderParams) {\n this.params.signer = builderParams.signer\n }\n\n proposal(address: Address): this {\n this.params.proposalAddress = address\n return this\n }\n\n target(programId: Address): this {\n this.params.targetProgram = programId\n return this\n }\n\n async execute(): Promise<{ signature: string }> {\n if (!this.params.signer) throw new Error('Signer required')\n if (!this.params.proposalAddress) throw new Error('Proposal address required')\n if (!this.params.targetProgram) throw new Error('Target program required')\n\n return {\n signature: await this.module.executeProposal({\n proposalAddress: this.params.proposalAddress,\n executor: this.params.signer,\n targetProgram: this.params.targetProgram\n })\n }\n }\n\n withSigner(signer: TransactionSigner): this {\n this.params.signer = signer\n return this\n }\n}\n\n\n\n// H2A Communication builders have been removed - use A2A (Agent-to-Agent) instructions instead\n\n// =====================================================\n// CONVENIENCE FUNCTIONS\n// =====================================================\n\n/**\n * Convert SOL to lamports\n */\nexport function sol(amount: number): bigint {\n return BigInt(Math.floor(amount * 1_000_000_000))\n}\n\n/**\n * Convert lamports to SOL\n */\nexport function lamportsToSol(lamports: bigint): number {\n return Number(lamports) / 1_000_000_000\n}\n\n// Default export for easy importing\nexport default GhostSpeakClient"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GHOSTSPEAK_MARKETPLACE_PROGRAM_ADDRESS, getAccountMetaFactory } from './chunk-
|
|
1
|
+
import { GHOSTSPEAK_MARKETPLACE_PROGRAM_ADDRESS, getAccountMetaFactory } from './chunk-AWMGX3OX.js';
|
|
2
2
|
import { fixEncoderSize, getBytesEncoder, transformEncoder, getStructEncoder, getOptionEncoder, addEncoderSizePrefix, getUtf8Encoder, getU32Encoder, getStructDecoder, fixDecoderSize, getOptionDecoder, getBytesDecoder, addDecoderSizePrefix, getUtf8Decoder, getU32Decoder, combineCodec } from '@solana/kit';
|
|
3
3
|
|
|
4
4
|
var REVOKE_AUTHORIZATION_DISCRIMINATOR = new Uint8Array([
|
|
@@ -94,5 +94,5 @@ function parseRevokeAuthorizationInstruction(instruction) {
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
export { REVOKE_AUTHORIZATION_DISCRIMINATOR, getRevokeAuthorizationDiscriminatorBytes, getRevokeAuthorizationInstruction, getRevokeAuthorizationInstructionDataCodec, getRevokeAuthorizationInstructionDataDecoder, getRevokeAuthorizationInstructionDataEncoder, parseRevokeAuthorizationInstruction };
|
|
97
|
-
//# sourceMappingURL=chunk-
|
|
98
|
-
//# sourceMappingURL=chunk-
|
|
97
|
+
//# sourceMappingURL=chunk-A7ALCVUI.js.map
|
|
98
|
+
//# sourceMappingURL=chunk-A7ALCVUI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/generated/instructions/revokeAuthorization.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/generated/instructions/revokeAuthorization.ts"],"names":[],"mappings":"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","file":"chunk-A7ALCVUI.js","sourcesContent":["/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n addDecoderSizePrefix,\n addEncoderSizePrefix,\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getOptionDecoder,\n getOptionEncoder,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n getUtf8Decoder,\n getUtf8Encoder,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type Codec,\n type Decoder,\n type Encoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type Option,\n type OptionOrNullable,\n type ReadonlyAccount,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n} from \"@solana/kit\";\nimport { GHOSTSPEAK_MARKETPLACE_PROGRAM_ADDRESS } from \"../programs\";\nimport { getAccountMetaFactory, type ResolvedAccount } from \"../shared\";\n\nexport const REVOKE_AUTHORIZATION_DISCRIMINATOR = new Uint8Array([\n 222, 179, 207, 59, 191, 78, 24, 248,\n]);\n\nexport function getRevokeAuthorizationDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n REVOKE_AUTHORIZATION_DISCRIMINATOR,\n );\n}\n\nexport type RevokeAuthorizationInstruction<\n TProgram extends string = typeof GHOSTSPEAK_MARKETPLACE_PROGRAM_ADDRESS,\n TAccountAgent extends string | AccountMeta<string> = string,\n TAccountAuthorization extends string | AccountMeta<string> = string,\n TAccountAuthority extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountAgent extends string\n ? ReadonlyAccount<TAccountAgent>\n : TAccountAgent,\n TAccountAuthorization extends string\n ? WritableAccount<TAccountAuthorization>\n : TAccountAuthorization,\n TAccountAuthority extends string\n ? ReadonlySignerAccount<TAccountAuthority> &\n AccountSignerMeta<TAccountAuthority>\n : TAccountAuthority,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type RevokeAuthorizationInstructionData = {\n discriminator: ReadonlyUint8Array;\n nonce: Option<string>;\n};\n\nexport type RevokeAuthorizationInstructionDataArgs = {\n nonce: OptionOrNullable<string>;\n};\n\nexport function getRevokeAuthorizationInstructionDataEncoder(): Encoder<RevokeAuthorizationInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n [\"discriminator\", fixEncoderSize(getBytesEncoder(), 8)],\n [\n \"nonce\",\n getOptionEncoder(\n addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder()),\n ),\n ],\n ]),\n (value) => ({\n ...value,\n discriminator: REVOKE_AUTHORIZATION_DISCRIMINATOR,\n }),\n );\n}\n\nexport function getRevokeAuthorizationInstructionDataDecoder(): Decoder<RevokeAuthorizationInstructionData> {\n return getStructDecoder([\n [\"discriminator\", fixDecoderSize(getBytesDecoder(), 8)],\n [\n \"nonce\",\n getOptionDecoder(addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder())),\n ],\n ]);\n}\n\nexport function getRevokeAuthorizationInstructionDataCodec(): Codec<\n RevokeAuthorizationInstructionDataArgs,\n RevokeAuthorizationInstructionData\n> {\n return combineCodec(\n getRevokeAuthorizationInstructionDataEncoder(),\n getRevokeAuthorizationInstructionDataDecoder(),\n );\n}\n\nexport type RevokeAuthorizationInput<\n TAccountAgent extends string = string,\n TAccountAuthorization extends string = string,\n TAccountAuthority extends string = string,\n> = {\n /** Agent revoking authorization */\n agent: Address<TAccountAgent>;\n /** Authorization account (PDA) */\n authorization: Address<TAccountAuthorization>;\n /** Authority (agent owner) */\n authority: TransactionSigner<TAccountAuthority>;\n nonce: RevokeAuthorizationInstructionDataArgs[\"nonce\"];\n};\n\nexport function getRevokeAuthorizationInstruction<\n TAccountAgent extends string,\n TAccountAuthorization extends string,\n TAccountAuthority extends string,\n TProgramAddress extends Address =\n typeof GHOSTSPEAK_MARKETPLACE_PROGRAM_ADDRESS,\n>(\n input: RevokeAuthorizationInput<\n TAccountAgent,\n TAccountAuthorization,\n TAccountAuthority\n >,\n config?: { programAddress?: TProgramAddress },\n): RevokeAuthorizationInstruction<\n TProgramAddress,\n TAccountAgent,\n TAccountAuthorization,\n TAccountAuthority\n> {\n // Program address.\n const programAddress =\n config?.programAddress ?? GHOSTSPEAK_MARKETPLACE_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n agent: { value: input.agent ?? null, isWritable: false },\n authorization: { value: input.authorization ?? null, isWritable: true },\n authority: { value: input.authority ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n const getAccountMeta = getAccountMetaFactory(programAddress, \"programId\");\n return Object.freeze({\n accounts: [\n getAccountMeta(accounts.agent),\n getAccountMeta(accounts.authorization),\n getAccountMeta(accounts.authority),\n ],\n data: getRevokeAuthorizationInstructionDataEncoder().encode(\n args as RevokeAuthorizationInstructionDataArgs,\n ),\n programAddress,\n } as RevokeAuthorizationInstruction<\n TProgramAddress,\n TAccountAgent,\n TAccountAuthorization,\n TAccountAuthority\n >);\n}\n\nexport type ParsedRevokeAuthorizationInstruction<\n TProgram extends string = typeof GHOSTSPEAK_MARKETPLACE_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n /** Agent revoking authorization */\n agent: TAccountMetas[0];\n /** Authorization account (PDA) */\n authorization: TAccountMetas[1];\n /** Authority (agent owner) */\n authority: TAccountMetas[2];\n };\n data: RevokeAuthorizationInstructionData;\n};\n\nexport function parseRevokeAuthorizationInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedRevokeAuthorizationInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 3) {\n // TODO: Coded error.\n throw new Error(\"Not enough accounts\");\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n agent: getNextAccount(),\n authorization: getNextAccount(),\n authority: getNextAccount(),\n },\n data: getRevokeAuthorizationInstructionDataDecoder().decode(\n instruction.data,\n ),\n };\n}\n"]}
|