Skip to content

Commit cf9a874

Browse files
authored
Merge branch 'main' into feat/subscription
2 parents f693e64 + 07582c2 commit cf9a874

7 files changed

Lines changed: 217 additions & 74 deletions

File tree

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@virtuals-protocol/acp-node",
3-
"version": "0.3.0-beta.37",
3+
"version": "0.3.0-beta.38",
44
"main": "./dist/index.js",
55
"module": "./dist/index.mjs",
66
"types": "./dist/index.d.ts",
@@ -35,7 +35,6 @@
3535
"ajv": "^8.17.1",
3636
"axios": "^1.13.2",
3737
"jwt-decode": "^4.0.0",
38-
"dotenv": "^17.2.3",
3938
"ox": "^0.13.1",
4039
"socket.io-client": "^4.8.1",
4140
"tsup": "^8.5.0",

src/acpClient.ts

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ class AcpClient {
293293
callback(true);
294294

295295
if (this.onEvaluate) {
296-
const job = this._hydrateJob(data);
296+
const job = await this._hydrateJob(data);
297297

298298
this.onEvaluate(job);
299299
}
@@ -303,7 +303,7 @@ class AcpClient {
303303
callback(true);
304304

305305
if (this.onNewTask) {
306-
const job = this._hydrateJob(data);
306+
const job = await this._hydrateJob(data);
307307

308308
if (job.phase === AcpJobPhases.EXPIRED) {
309309
console.warn(`onNewTask skipped for job ${data.id}: job has expired`);
@@ -364,13 +364,10 @@ class AcpClient {
364364
}
365365
}
366366

367-
private _hydrateMemo(
368-
memo: IAcpMemoData,
369-
contractClient: BaseAcpContractClient
370-
): AcpMemo {
367+
private async _hydrateMemo(memo: IAcpMemoData): Promise<AcpMemo> {
371368
try {
372-
return new AcpMemo(
373-
contractClient,
369+
return await AcpMemo.build(
370+
this,
374371
memo.id,
375372
memo.memoType,
376373
memo.content,
@@ -389,7 +386,7 @@ class AcpClient {
389386
}
390387
}
391388

392-
private _hydrateJob(job: IAcpJob): AcpJob {
389+
private async _hydrateJob(job: IAcpJob): Promise<AcpJob> {
393390
try {
394391
return new AcpJob(
395392
this,
@@ -399,37 +396,33 @@ class AcpClient {
399396
job.evaluatorAddress,
400397
job.price,
401398
job.priceTokenAddress,
402-
job.memos.map((memo) =>
403-
this._hydrateMemo(
404-
memo,
405-
this.contractClientByAddress(job.contractAddress)
406-
)
407-
),
399+
await Promise.all(job.memos.map((memo) => this._hydrateMemo(memo))),
408400
job.phase,
409401
job.context,
410402
job.contractAddress,
411-
job.deliverable,
412403
job.netPayableAmount
413404
);
414405
} catch (err) {
415406
throw new AcpError(`Failed to hydrate job ${job.id}`, err);
416407
}
417408
}
418409

419-
private _hydrateJobs(
410+
private async _hydrateJobs(
420411
rawJobs: IAcpJob[],
421412
options?: {
422413
logPrefix?: string;
423414
}
424-
): AcpJob[] {
425-
const jobs = rawJobs.map((job) => {
426-
try {
427-
return this._hydrateJob(job);
428-
} catch (err) {
429-
console.warn(`${options?.logPrefix ?? "Skipped"}`, err);
430-
return null;
431-
}
432-
});
415+
): Promise<AcpJob[]> {
416+
const jobs = await Promise.all(
417+
rawJobs.map((job) => {
418+
try {
419+
return this._hydrateJob(job);
420+
} catch (err) {
421+
console.warn(`${options?.logPrefix ?? "Skipped"}`, err);
422+
return null;
423+
}
424+
})
425+
);
433426

434427
return jobs.filter((job) => !!job) as AcpJob[];
435428
}
@@ -471,6 +464,7 @@ class AcpClient {
471464
offering.requirement,
472465
offering.deliverable,
473466
offering.subscriptionTiers ?? [],
467+
offering.isPrivate
474468
);
475469
}),
476470
contractAddress: agent.contractAddress,
@@ -657,12 +651,25 @@ class AcpClient {
657651
priceType: PriceType.SUBSCRIPTION,
658652
})
659653
: preparePayload(serviceRequirement);
654+
const isPrivate =
655+
typeof serviceRequirement === "object" &&
656+
"isPrivate" in serviceRequirement &&
657+
serviceRequirement.isPrivate;
658+
659+
let content = preparePayload(serviceRequirement);
660+
661+
if (isPrivate) {
662+
const memoContent = await this.createMemoContent(jobId, content);
663+
content = memoContent.url;
664+
}
660665

661666
payloads.push(
662667
this.acpContractClient.createMemo(
663668
jobId,
664669
memoPayload,
665670
MemoType.MESSAGE,
671+
content,
672+
isPrivate ? MemoType.OBJECT_URL : MemoType.MESSAGE,
666673
true,
667674
AcpJobPhases.NEGOTIATION
668675
)
@@ -744,10 +751,7 @@ class AcpClient {
744751
return null;
745752
}
746753

747-
return this._hydrateMemo(
748-
memo,
749-
this.contractClientByAddress(memo.contractAddress)
750-
);
754+
return this._hydrateMemo(memo);
751755
}
752756

753757
async getAgent(walletAddress: Address, options: IAcpGetAgentOptions = {}) {

0 commit comments

Comments
 (0)