@perkos/agent-sdk 0.1.0

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.
Files changed (58) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/LICENSE +21 -0
  3. package/README.md +226 -0
  4. package/SECURITY.md +67 -0
  5. package/dist/builders.d.ts +19 -0
  6. package/dist/builders.d.ts.map +1 -0
  7. package/dist/builders.js +180 -0
  8. package/dist/builders.js.map +1 -0
  9. package/dist/clarity.d.ts +11 -0
  10. package/dist/clarity.d.ts.map +1 -0
  11. package/dist/clarity.js +80 -0
  12. package/dist/clarity.js.map +1 -0
  13. package/dist/client.d.ts +39 -0
  14. package/dist/client.d.ts.map +1 -0
  15. package/dist/client.js +290 -0
  16. package/dist/client.js.map +1 -0
  17. package/dist/constants.d.ts +12 -0
  18. package/dist/constants.d.ts.map +1 -0
  19. package/dist/constants.js +72 -0
  20. package/dist/constants.js.map +1 -0
  21. package/dist/errors.d.ts +14 -0
  22. package/dist/errors.d.ts.map +1 -0
  23. package/dist/errors.js +11 -0
  24. package/dist/errors.js.map +1 -0
  25. package/dist/index.d.ts +14 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +10 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/policy.d.ts +14 -0
  30. package/dist/policy.d.ts.map +1 -0
  31. package/dist/policy.js +75 -0
  32. package/dist/policy.js.map +1 -0
  33. package/dist/signers.d.ts +51 -0
  34. package/dist/signers.d.ts.map +1 -0
  35. package/dist/signers.js +145 -0
  36. package/dist/signers.js.map +1 -0
  37. package/dist/tracker.d.ts +21 -0
  38. package/dist/tracker.d.ts.map +1 -0
  39. package/dist/tracker.js +175 -0
  40. package/dist/tracker.js.map +1 -0
  41. package/dist/txid.d.ts +2 -0
  42. package/dist/txid.d.ts.map +1 -0
  43. package/dist/txid.js +13 -0
  44. package/dist/txid.js.map +1 -0
  45. package/dist/types.d.ts +204 -0
  46. package/dist/types.d.ts.map +1 -0
  47. package/dist/types.js +2 -0
  48. package/dist/types.js.map +1 -0
  49. package/dist/validation.d.ts +17 -0
  50. package/dist/validation.d.ts.map +1 -0
  51. package/dist/validation.js +124 -0
  52. package/dist/validation.js.map +1 -0
  53. package/docs/ARCHITECTURE.md +111 -0
  54. package/examples/quickstart.ts +19 -0
  55. package/examples/testnet-api.ts +23 -0
  56. package/examples/testnet-lifecycle.ts +305 -0
  57. package/examples/testnet.env.example +14 -0
  58. package/package.json +69 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clarity.js","sourceRoot":"","sources":["../src/clarity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { PerkOSTransactionBuilder } from "./builders.js";
2
+ import { SpendingPolicy } from "./policy.js";
3
+ import type { AgentRecord, AssignProviderInput, ConfirmationOptions, ConfirmedTransactionReceipt, ContractCallPlan, CreateJobInput, FundJobInput, JobAmountInput, JobRecord, PaymentAsset, PerkOSConfig, RateProviderInput, RegisterAgentInput, ReputationRecord, SpendingApproval, SubmitWorkInput, TransactionConfirmation, TransactionReceipt, TransactionTrackerLike, UpdateAgentInput } from "./types.js";
4
+ export declare class PerkOSClient {
5
+ readonly config: import("./types.js").ResolvedPerkOSConfig;
6
+ readonly transactions: PerkOSTransactionBuilder;
7
+ readonly policy: SpendingPolicy;
8
+ readonly tracker: TransactionTrackerLike;
9
+ private readonly signer;
10
+ private readonly readOnlyTransport;
11
+ constructor(input: PerkOSConfig);
12
+ preview(plan: ContractCallPlan): SpendingApproval;
13
+ execute(plan: ContractCallPlan): Promise<TransactionReceipt>;
14
+ confirm(receiptOrTxid: TransactionReceipt | string, options?: ConfirmationOptions): Promise<TransactionConfirmation>;
15
+ executeAndConfirm(plan: ContractCallPlan, options?: ConfirmationOptions): Promise<ConfirmedTransactionReceipt>;
16
+ getAgentCount(): Promise<bigint>;
17
+ getAgent(agentIdInput: bigint | number | string): Promise<AgentRecord | null>;
18
+ getJobCount(asset: PaymentAsset): Promise<bigint>;
19
+ getJob(asset: PaymentAsset, jobIdInput: bigint | number | string): Promise<JobRecord | null>;
20
+ getEscrowBalance(asset: PaymentAsset, jobIdInput: bigint | number | string): Promise<bigint>;
21
+ getConfiguredSbtcToken(): Promise<string>;
22
+ getReputation(agent: string): Promise<ReputationRecord>;
23
+ registerAgent(input: RegisterAgentInput): Promise<TransactionReceipt>;
24
+ updateAgent(input: UpdateAgentInput): Promise<TransactionReceipt>;
25
+ deactivateAgent(agentId: bigint | number | string): Promise<TransactionReceipt>;
26
+ createJob(input: CreateJobInput): Promise<TransactionReceipt>;
27
+ setBudget(input: JobAmountInput): Promise<TransactionReceipt>;
28
+ fundJob(input: FundJobInput): Promise<TransactionReceipt>;
29
+ assignProvider(input: AssignProviderInput): Promise<TransactionReceipt>;
30
+ submitWork(input: SubmitWorkInput): Promise<TransactionReceipt>;
31
+ completeJob(asset: PaymentAsset, jobIdInput: bigint | number | string): Promise<TransactionReceipt>;
32
+ rejectJob(asset: PaymentAsset, jobIdInput: bigint | number | string): Promise<TransactionReceipt>;
33
+ expireJob(asset: PaymentAsset, jobIdInput: bigint | number | string): Promise<TransactionReceipt>;
34
+ rateProvider(input: RateProviderInput): Promise<TransactionReceipt>;
35
+ private settlementInput;
36
+ private requireSignerAddress;
37
+ private read;
38
+ }
39
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js ADDED
@@ -0,0 +1,290 @@
1
+ import { Cl, fetchCallReadOnlyFunction } from "@stacks/transactions";
2
+ import { JOB_STATUS } from "./constants.js";
3
+ import { expectBoolean, expectList, expectPrincipal, expectString, expectTuple, expectUint, optionalBuffer, optionalPrincipal, unwrapResponse, } from "./clarity.js";
4
+ import { PerkOSError } from "./errors.js";
5
+ import { PerkOSTransactionBuilder } from "./builders.js";
6
+ import { SpendingPolicy } from "./policy.js";
7
+ import { TransactionTracker } from "./tracker.js";
8
+ import { normalizeTxid } from "./txid.js";
9
+ import { assertPrincipal, parseContractId, resolveConfig, toUint } from "./validation.js";
10
+ function contractForAsset(contracts, asset) {
11
+ return asset === "sbtc" ? contracts.sbtcCommerce : contracts.stxCommerce;
12
+ }
13
+ async function defaultReadOnlyTransport(call) {
14
+ const { address, name } = parseContractId(call.contract, "contract", call.network);
15
+ return fetchCallReadOnlyFunction({
16
+ contractAddress: address,
17
+ contractName: name,
18
+ functionName: call.functionName,
19
+ functionArgs: [...call.functionArgs],
20
+ senderAddress: call.senderAddress,
21
+ network: call.network,
22
+ ...(call.apiUrl ? { client: { baseUrl: call.apiUrl } } : {}),
23
+ });
24
+ }
25
+ export class PerkOSClient {
26
+ config;
27
+ transactions;
28
+ policy;
29
+ tracker;
30
+ signer;
31
+ readOnlyTransport;
32
+ constructor(input) {
33
+ this.config = resolveConfig(input);
34
+ this.transactions = new PerkOSTransactionBuilder(this.config);
35
+ this.policy = new SpendingPolicy(this.config, input.spendingPolicy);
36
+ this.signer = input.signer;
37
+ this.readOnlyTransport = input.readOnlyTransport ?? defaultReadOnlyTransport;
38
+ this.tracker =
39
+ input.transactionTracker ??
40
+ new TransactionTracker({
41
+ network: this.config.network,
42
+ ...(this.config.apiUrl ? { apiUrl: this.config.apiUrl } : {}),
43
+ });
44
+ }
45
+ preview(plan) {
46
+ return this.policy.authorize(plan);
47
+ }
48
+ async execute(plan) {
49
+ if (plan.network !== this.config.network) {
50
+ throw new PerkOSError("POLICY_DENIED", `Plan network ${plan.network} does not match client network ${this.config.network}.`);
51
+ }
52
+ if (!this.signer) {
53
+ throw new PerkOSError("SIGNER_REQUIRED", "A signer is required to execute transaction plans.");
54
+ }
55
+ this.policy.authorize(plan);
56
+ const signerAddress = await this.signer.getAddress();
57
+ assertPrincipal(signerAddress, "signer address", this.config.network);
58
+ if (plan.intent.sender && signerAddress !== plan.intent.sender) {
59
+ throw new PerkOSError("SIGNER_MISMATCH", `Funding plan expects ${plan.intent.sender}, but the signer controls ${signerAddress}.`);
60
+ }
61
+ try {
62
+ const result = await this.signer.signAndBroadcast(plan);
63
+ const txid = normalizeTxid(result.txid);
64
+ this.policy.record(plan);
65
+ return {
66
+ txid,
67
+ status: "broadcast",
68
+ network: plan.network,
69
+ contract: plan.contract,
70
+ operation: plan.intent.operation,
71
+ ...(plan.intent.asset ? { asset: plan.intent.asset } : {}),
72
+ ...(plan.intent.amount !== undefined ? { amount: plan.intent.amount } : {}),
73
+ ...(plan.intent.jobId !== undefined ? { jobId: plan.intent.jobId } : {}),
74
+ explorerUrl: `https://explorer.hiro.so/txid/${txid}?chain=${plan.network}`,
75
+ ...(result.raw !== undefined ? { raw: result.raw } : {}),
76
+ };
77
+ }
78
+ catch (cause) {
79
+ if (cause instanceof PerkOSError)
80
+ throw cause;
81
+ throw new PerkOSError("SIGNING_FAILED", "The signer could not broadcast the transaction.", {
82
+ cause,
83
+ contract: plan.contract,
84
+ functionName: plan.functionName,
85
+ });
86
+ }
87
+ }
88
+ async confirm(receiptOrTxid, options = {}) {
89
+ if (typeof receiptOrTxid !== "string" &&
90
+ receiptOrTxid.network !== this.config.network) {
91
+ throw new PerkOSError("POLICY_DENIED", `Receipt network ${receiptOrTxid.network} does not match client network ${this.config.network}.`);
92
+ }
93
+ const txid = typeof receiptOrTxid === "string" ? receiptOrTxid : receiptOrTxid.txid;
94
+ return this.tracker.waitForConfirmation(txid, options);
95
+ }
96
+ async executeAndConfirm(plan, options = {}) {
97
+ const broadcast = await this.execute(plan);
98
+ const confirmation = await this.confirm(broadcast, options);
99
+ return { broadcast, confirmation };
100
+ }
101
+ async getAgentCount() {
102
+ const value = unwrapResponse(await this.read(this.config.contracts.agentRegistry, "get-agent-count"), "get-agent-count");
103
+ return expectUint(value, "get-agent-count");
104
+ }
105
+ async getAgent(agentIdInput) {
106
+ const agentId = toUint(agentIdInput, "agentId");
107
+ try {
108
+ const value = unwrapResponse(await this.read(this.config.contracts.agentRegistry, "get-agent", [Cl.uint(agentId)]), "get-agent");
109
+ const tuple = expectTuple(value, "get-agent");
110
+ const endpoints = expectList(tuple.endpoints, "agent.endpoints").map((endpoint, index) => {
111
+ const endpointTuple = expectTuple(endpoint, `agent.endpoints[${index}]`);
112
+ return {
113
+ name: expectString(endpointTuple.name, `agent.endpoints[${index}].name`),
114
+ url: expectString(endpointTuple.url, `agent.endpoints[${index}].url`),
115
+ };
116
+ });
117
+ return {
118
+ id: agentId,
119
+ name: expectString(tuple.name, "agent.name"),
120
+ description: expectString(tuple.description, "agent.description"),
121
+ creator: expectPrincipal(tuple.creator, "agent.creator"),
122
+ wallet: expectPrincipal(tuple.wallet, "agent.wallet"),
123
+ active: expectBoolean(tuple.active, "agent.active"),
124
+ endpoints,
125
+ };
126
+ }
127
+ catch (error) {
128
+ if (error instanceof PerkOSError &&
129
+ error.code === "CONTRACT_ERROR" &&
130
+ error.details?.clarityCode === 102n) {
131
+ return null;
132
+ }
133
+ throw error;
134
+ }
135
+ }
136
+ async getJobCount(asset) {
137
+ const value = unwrapResponse(await this.read(contractForAsset(this.config.contracts, asset), "get-job-count"), "get-job-count");
138
+ return expectUint(value, "get-job-count");
139
+ }
140
+ async getJob(asset, jobIdInput) {
141
+ const jobId = toUint(jobIdInput, "jobId");
142
+ try {
143
+ const value = unwrapResponse(await this.read(contractForAsset(this.config.contracts, asset), "get-job", [
144
+ Cl.uint(jobId),
145
+ ]), "get-job");
146
+ const tuple = expectTuple(value, "get-job");
147
+ const statusCode = expectUint(tuple.status, "job.status");
148
+ const status = JOB_STATUS[Number(statusCode)];
149
+ if (!status) {
150
+ throw new PerkOSError("READ_FAILED", `Unknown job status ${statusCode}.`);
151
+ }
152
+ const provider = optionalPrincipal(tuple.provider, "job.provider");
153
+ const deliverable = optionalBuffer(tuple.deliverable, "job.deliverable");
154
+ return {
155
+ id: jobId,
156
+ asset,
157
+ client: expectPrincipal(tuple.client, "job.client"),
158
+ ...(provider ? { provider } : {}),
159
+ evaluator: expectPrincipal(tuple.evaluator, "job.evaluator"),
160
+ description: expectString(tuple.description, "job.description"),
161
+ budget: expectUint(tuple.budget, "job.budget"),
162
+ expiredAt: expectUint(tuple["expired-at"], "job.expired-at"),
163
+ status,
164
+ statusCode,
165
+ ...(deliverable ? { deliverable } : {}),
166
+ };
167
+ }
168
+ catch (error) {
169
+ if (error instanceof PerkOSError &&
170
+ error.code === "CONTRACT_ERROR" &&
171
+ (error.details?.clarityCode === 202n || error.details?.clarityCode === 302n)) {
172
+ return null;
173
+ }
174
+ throw error;
175
+ }
176
+ }
177
+ async getEscrowBalance(asset, jobIdInput) {
178
+ const jobId = toUint(jobIdInput, "jobId");
179
+ const value = unwrapResponse(await this.read(contractForAsset(this.config.contracts, asset), "get-escrow-balance", [
180
+ Cl.uint(jobId),
181
+ ]), "get-escrow-balance");
182
+ return expectUint(value, "get-escrow-balance");
183
+ }
184
+ async getConfiguredSbtcToken() {
185
+ const value = unwrapResponse(await this.read(this.config.contracts.sbtcCommerce, "get-payment-token"), "get-payment-token");
186
+ return expectPrincipal(value, "get-payment-token");
187
+ }
188
+ async getReputation(agent) {
189
+ assertPrincipal(agent, "agent", this.config.network);
190
+ const value = unwrapResponse(await this.read(this.config.contracts.reputationRegistry, "get-reputation", [
191
+ Cl.principal(agent),
192
+ ]), "get-reputation");
193
+ const tuple = expectTuple(value, "get-reputation");
194
+ return {
195
+ agent,
196
+ totalScore: expectUint(tuple["total-score"], "reputation.total-score"),
197
+ ratingCount: expectUint(tuple["rating-count"], "reputation.rating-count"),
198
+ averageScoreX100: expectUint(tuple["average-score-x100"], "reputation.average-score-x100"),
199
+ completedJobs: expectUint(tuple["completed-jobs"], "reputation.completed-jobs"),
200
+ disputedJobs: expectUint(tuple["disputed-jobs"], "reputation.disputed-jobs"),
201
+ };
202
+ }
203
+ registerAgent(input) {
204
+ return this.execute(this.transactions.registerAgent(input));
205
+ }
206
+ updateAgent(input) {
207
+ return this.execute(this.transactions.updateAgent(input));
208
+ }
209
+ deactivateAgent(agentId) {
210
+ return this.execute(this.transactions.deactivateAgent(agentId));
211
+ }
212
+ createJob(input) {
213
+ return this.execute(this.transactions.createJob(input));
214
+ }
215
+ setBudget(input) {
216
+ return this.execute(this.transactions.setBudget(input));
217
+ }
218
+ async fundJob(input) {
219
+ const jobId = toUint(input.jobId, "jobId");
220
+ const amount = toUint(input.amount, "amount");
221
+ this.policy.authorize({
222
+ type: "contract-call",
223
+ network: this.config.network,
224
+ contract: contractForAsset(this.config.contracts, input.asset),
225
+ functionName: "fund-job",
226
+ functionArgs: [],
227
+ postConditions: [],
228
+ postConditionMode: "deny",
229
+ intent: { operation: "fund-job", asset: input.asset, amount, jobId },
230
+ });
231
+ const sender = input.sender ?? (await this.requireSignerAddress());
232
+ return this.execute(this.transactions.fundJob({ ...input, jobId, amount, sender }));
233
+ }
234
+ assignProvider(input) {
235
+ return this.execute(this.transactions.assignProvider(input));
236
+ }
237
+ submitWork(input) {
238
+ return this.execute(this.transactions.submitWork(input));
239
+ }
240
+ async completeJob(asset, jobIdInput) {
241
+ const settlement = await this.settlementInput("complete-job", asset, jobIdInput);
242
+ return this.execute(this.transactions.completeJob(settlement));
243
+ }
244
+ async rejectJob(asset, jobIdInput) {
245
+ const settlement = await this.settlementInput("reject-job", asset, jobIdInput);
246
+ return this.execute(this.transactions.rejectJob(settlement));
247
+ }
248
+ async expireJob(asset, jobIdInput) {
249
+ const settlement = await this.settlementInput("expire-job", asset, jobIdInput);
250
+ return this.execute(this.transactions.expireJob(settlement));
251
+ }
252
+ rateProvider(input) {
253
+ return this.execute(this.transactions.rateProvider(input));
254
+ }
255
+ async settlementInput(operation, asset, jobIdInput) {
256
+ const jobId = toUint(jobIdInput, "jobId");
257
+ const [job, amount] = await Promise.all([
258
+ this.getJob(asset, jobId),
259
+ this.getEscrowBalance(asset, jobId),
260
+ ]);
261
+ if (!job) {
262
+ throw new PerkOSError("INPUT_INVALID", `Job ${jobId} does not exist.`);
263
+ }
264
+ const recipient = operation === "complete-job"
265
+ ? job.provider
266
+ : job.client;
267
+ if (!recipient) {
268
+ throw new PerkOSError("INPUT_INVALID", `Job ${jobId} has no provider to receive settlement.`);
269
+ }
270
+ return { asset, jobId, amount, recipient };
271
+ }
272
+ async requireSignerAddress() {
273
+ if (!this.signer) {
274
+ throw new PerkOSError("SIGNER_REQUIRED", "A signer is required to fund a job.");
275
+ }
276
+ return this.signer.getAddress();
277
+ }
278
+ read(contract, functionName, functionArgs = []) {
279
+ const senderAddress = parseContractId(contract, "contract", this.config.network).address;
280
+ return this.readOnlyTransport({
281
+ network: this.config.network,
282
+ ...(this.config.apiUrl ? { apiUrl: this.config.apiUrl } : {}),
283
+ contract,
284
+ functionName,
285
+ functionArgs,
286
+ senderAddress,
287
+ });
288
+ }
289
+ }
290
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { PerkOSContracts, PerkOSNetwork } from "./types.js";
2
+ export declare const DEFAULT_DEPLOYMENTS: Readonly<Record<PerkOSNetwork, PerkOSContracts>>;
3
+ export declare const JOB_STATUS: {
4
+ readonly 0: "open";
5
+ readonly 1: "funded";
6
+ readonly 2: "submitted";
7
+ readonly 3: "completed";
8
+ readonly 4: "rejected";
9
+ readonly 5: "expired";
10
+ };
11
+ export declare const CLARITY_ERROR_MESSAGES: Readonly<Record<number, string>>;
12
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKjE,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,CAiBhF,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;CAOb,CAAC;AAEX,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA0CnE,CAAC"}
@@ -0,0 +1,72 @@
1
+ const MAINNET_DEPLOYER = "SP2K7PV5NXBNRV510S6DCA6RFMTFHAF3ZPK6ZSXPH";
2
+ const TESTNET_DEPLOYER = "ST16EWRC01S1SFWGBP63MW47VY8P3AYFA8VGEBGE5";
3
+ export const DEFAULT_DEPLOYMENTS = {
4
+ mainnet: {
5
+ agentRegistry: `${MAINNET_DEPLOYER}.agent-registry`,
6
+ stxCommerce: `${MAINNET_DEPLOYER}.agentic-commerce-v2`,
7
+ sbtcCommerce: `${MAINNET_DEPLOYER}.sbtc-commerce`,
8
+ reputationRegistry: `${MAINNET_DEPLOYER}.reputation-registry-v2`,
9
+ sbtcToken: "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token",
10
+ sbtcAssetName: "sbtc-token",
11
+ },
12
+ testnet: {
13
+ agentRegistry: `${TESTNET_DEPLOYER}.agent-registry`,
14
+ stxCommerce: `${TESTNET_DEPLOYER}.agentic-commerce-v2`,
15
+ sbtcCommerce: `${TESTNET_DEPLOYER}.sbtc-commerce`,
16
+ reputationRegistry: `${TESTNET_DEPLOYER}.reputation-registry-v2`,
17
+ sbtcToken: "ST1F7QA2MDF17S807EPA36TSS8AMEFY4KA9TVGWXT.sbtc-token",
18
+ sbtcAssetName: "sbtc-token",
19
+ },
20
+ };
21
+ export const JOB_STATUS = {
22
+ 0: "open",
23
+ 1: "funded",
24
+ 2: "submitted",
25
+ 3: "completed",
26
+ 4: "rejected",
27
+ 5: "expired",
28
+ };
29
+ export const CLARITY_ERROR_MESSAGES = {
30
+ 100: "Only the registry owner may perform this operation.",
31
+ 101: "The caller is not authorized by the agent registry.",
32
+ 102: "Agent not found.",
33
+ 103: "Agent name is invalid.",
34
+ 104: "Agent description is invalid.",
35
+ 200: "Only the commerce owner may perform this operation.",
36
+ 201: "The caller is not authorized.",
37
+ 202: "Job not found.",
38
+ 203: "The job is not in the required state.",
39
+ 204: "The job has expired.",
40
+ 205: "The job budget is invalid.",
41
+ 207: "Only the job client may perform this operation.",
42
+ 208: "Only the assigned provider may perform this operation.",
43
+ 209: "Only the evaluator may perform this operation.",
44
+ 210: "The job was already funded.",
45
+ 212: "The job description is invalid.",
46
+ 213: "Client, provider, and evaluator must be distinct.",
47
+ 214: "This rater already rated the job.",
48
+ 215: "The rating must be between 1 and 5.",
49
+ 216: "The job has not expired.",
50
+ 300: "Only the commerce owner may perform this operation.",
51
+ 301: "The caller is not authorized.",
52
+ 302: "Job not found.",
53
+ 303: "The job is not in the required state.",
54
+ 304: "The job has expired.",
55
+ 305: "The job budget is invalid.",
56
+ 307: "Only the job client may perform this operation.",
57
+ 308: "Only the assigned provider may perform this operation.",
58
+ 309: "Only the evaluator may perform this operation.",
59
+ 310: "The job was already funded.",
60
+ 311: "The supplied payment token is not the configured sBTC token.",
61
+ 312: "The job description is invalid.",
62
+ 313: "Client, provider, and evaluator must be distinct.",
63
+ 314: "This rater already rated the job.",
64
+ 315: "The rating must be between 1 and 5.",
65
+ 316: "The job has not expired.",
66
+ 400: "Only the reputation registry owner may perform this operation.",
67
+ 401: "The caller is not an authorized protocol contract.",
68
+ 402: "The rating is invalid.",
69
+ 403: "This job was already rated.",
70
+ 404: "An agent cannot rate itself.",
71
+ };
72
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAG,2CAA2C,CAAC;AACrE,MAAM,gBAAgB,GAAG,2CAA2C,CAAC;AAErE,MAAM,CAAC,MAAM,mBAAmB,GAAqD;IACnF,OAAO,EAAE;QACP,aAAa,EAAE,GAAG,gBAAgB,iBAAiB;QACnD,WAAW,EAAE,GAAG,gBAAgB,sBAAsB;QACtD,YAAY,EAAE,GAAG,gBAAgB,gBAAgB;QACjD,kBAAkB,EAAE,GAAG,gBAAgB,yBAAyB;QAChE,SAAS,EAAE,sDAAsD;QACjE,aAAa,EAAE,YAAY;KAC5B;IACD,OAAO,EAAE;QACP,aAAa,EAAE,GAAG,gBAAgB,iBAAiB;QACnD,WAAW,EAAE,GAAG,gBAAgB,sBAAsB;QACtD,YAAY,EAAE,GAAG,gBAAgB,gBAAgB;QACjD,kBAAkB,EAAE,GAAG,gBAAgB,yBAAyB;QAChE,SAAS,EAAE,sDAAsD;QACjE,aAAa,EAAE,YAAY;KAC5B;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,QAAQ;IACX,CAAC,EAAE,WAAW;IACd,CAAC,EAAE,WAAW;IACd,CAAC,EAAE,UAAU;IACb,CAAC,EAAE,SAAS;CACJ,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAqC;IACtE,GAAG,EAAE,qDAAqD;IAC1D,GAAG,EAAE,qDAAqD;IAC1D,GAAG,EAAE,kBAAkB;IACvB,GAAG,EAAE,wBAAwB;IAC7B,GAAG,EAAE,+BAA+B;IACpC,GAAG,EAAE,qDAAqD;IAC1D,GAAG,EAAE,+BAA+B;IACpC,GAAG,EAAE,gBAAgB;IACrB,GAAG,EAAE,uCAAuC;IAC5C,GAAG,EAAE,sBAAsB;IAC3B,GAAG,EAAE,4BAA4B;IACjC,GAAG,EAAE,iDAAiD;IACtD,GAAG,EAAE,wDAAwD;IAC7D,GAAG,EAAE,gDAAgD;IACrD,GAAG,EAAE,6BAA6B;IAClC,GAAG,EAAE,iCAAiC;IACtC,GAAG,EAAE,mDAAmD;IACxD,GAAG,EAAE,mCAAmC;IACxC,GAAG,EAAE,qCAAqC;IAC1C,GAAG,EAAE,0BAA0B;IAC/B,GAAG,EAAE,qDAAqD;IAC1D,GAAG,EAAE,+BAA+B;IACpC,GAAG,EAAE,gBAAgB;IACrB,GAAG,EAAE,uCAAuC;IAC5C,GAAG,EAAE,sBAAsB;IAC3B,GAAG,EAAE,4BAA4B;IACjC,GAAG,EAAE,iDAAiD;IACtD,GAAG,EAAE,wDAAwD;IAC7D,GAAG,EAAE,gDAAgD;IACrD,GAAG,EAAE,6BAA6B;IAClC,GAAG,EAAE,8DAA8D;IACnE,GAAG,EAAE,iCAAiC;IACtC,GAAG,EAAE,mDAAmD;IACxD,GAAG,EAAE,mCAAmC;IACxC,GAAG,EAAE,qCAAqC;IAC1C,GAAG,EAAE,0BAA0B;IAC/B,GAAG,EAAE,gEAAgE;IACrE,GAAG,EAAE,oDAAoD;IACzD,GAAG,EAAE,wBAAwB;IAC7B,GAAG,EAAE,6BAA6B;IAClC,GAAG,EAAE,8BAA8B;CACpC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export type PerkOSErrorCode = "CONFIG_INVALID" | "INPUT_INVALID" | "CONTRACT_ERROR" | "READ_FAILED" | "SIGNER_REQUIRED" | "SIGNER_MISMATCH" | "POLICY_DENIED" | "POLICY_LIMIT_REQUIRED" | "SIGNING_FAILED" | "BROADCAST_REJECTED" | "CONFIRMATION_FAILED";
2
+ export interface PerkOSErrorDetails {
3
+ readonly clarityCode?: bigint;
4
+ readonly contract?: string;
5
+ readonly functionName?: string;
6
+ readonly cause?: unknown;
7
+ readonly [key: string]: unknown;
8
+ }
9
+ export declare class PerkOSError extends Error {
10
+ readonly code: PerkOSErrorCode;
11
+ readonly details: PerkOSErrorDetails | undefined;
12
+ constructor(code: PerkOSErrorCode, message: string, details?: PerkOSErrorDetails);
13
+ }
14
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GACvB,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,aAAa,GACb,iBAAiB,GACjB,iBAAiB,GACjB,eAAe,GACf,uBAAuB,GACvB,gBAAgB,GAChB,oBAAoB,GACpB,qBAAqB,CAAC;AAE1B,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG,SAAS,CAAC;gBAErC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB;CAMjF"}
package/dist/errors.js ADDED
@@ -0,0 +1,11 @@
1
+ export class PerkOSError extends Error {
2
+ code;
3
+ details;
4
+ constructor(code, message, details) {
5
+ super(message);
6
+ this.name = "PerkOSError";
7
+ this.code = code;
8
+ this.details = details;
9
+ }
10
+ }
11
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAqBA,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,IAAI,CAAkB;IACtB,OAAO,CAAiC;IAEjD,YAAY,IAAqB,EAAE,OAAe,EAAE,OAA4B;QAC9E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ export { PerkOSClient } from "./client.js";
2
+ export { PerkOSTransactionBuilder } from "./builders.js";
3
+ export { SpendingPolicy } from "./policy.js";
4
+ export { HeadlessSigner, StacksConnectSigner } from "./signers.js";
5
+ export { TransactionTracker } from "./tracker.js";
6
+ export { PerkOSError } from "./errors.js";
7
+ export { DEFAULT_DEPLOYMENTS, JOB_STATUS, CLARITY_ERROR_MESSAGES } from "./constants.js";
8
+ export { resolveConfig, toUint } from "./validation.js";
9
+ export { normalizeTxid } from "./txid.js";
10
+ export type { HeadlessSignerOptions, HeadlessTransactionExecutor, HeadlessTransactionRequest, PrivateKeyMaterial, PrivateKeyProvider, StacksConnectContractCallParams, StacksConnectRequest, StacksConnectSignerOptions, } from "./signers.js";
11
+ export type { TrackerFetch, TransactionTrackerOptions, } from "./tracker.js";
12
+ export type { AgentEndpoint, AgentRecord, Amount, AmountLike, AssignProviderInput, ConfirmationOptions, ConfirmedTransactionReceipt, ContractCallPlan, ContractId, CreateJobInput, FundJobInput, JobAmountInput, JobRecord, JobStatus, PaymentAsset, PerkOSConfig, PerkOSContracts, PerkOSNetwork, PerkOSOperation, PerkOSSigner, RateProviderInput, ReadOnlyCall, ReadOnlyTransport, RegisterAgentInput, ReputationRecord, ResolvedPerkOSConfig, SettleJobInput, SignerResult, SpendingApproval, SpendingPolicyInput, SubmitWorkInput, TransactionIntent, TransactionConfirmation, TransactionConfirmationStatus, TransactionReceipt, TransactionResultValue, TransactionTrackerLike, UpdateAgentInput, } from "./types.js";
13
+ export type { PerkOSErrorCode, PerkOSErrorDetails } from "./errors.js";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,YAAY,EACV,qBAAqB,EACrB,2BAA2B,EAC3B,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,+BAA+B,EAC/B,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,YAAY,EACZ,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,aAAa,EACb,WAAW,EACX,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,SAAS,EACT,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,aAAa,EACb,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,6BAA6B,EAC7B,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ export { PerkOSClient } from "./client.js";
2
+ export { PerkOSTransactionBuilder } from "./builders.js";
3
+ export { SpendingPolicy } from "./policy.js";
4
+ export { HeadlessSigner, StacksConnectSigner } from "./signers.js";
5
+ export { TransactionTracker } from "./tracker.js";
6
+ export { PerkOSError } from "./errors.js";
7
+ export { DEFAULT_DEPLOYMENTS, JOB_STATUS, CLARITY_ERROR_MESSAGES } from "./constants.js";
8
+ export { resolveConfig, toUint } from "./validation.js";
9
+ export { normalizeTxid } from "./txid.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ContractCallPlan, PaymentAsset, ResolvedPerkOSConfig, SpendingApproval, SpendingPolicyInput } from "./types.js";
2
+ export declare class SpendingPolicy {
3
+ private readonly allowedNetworks;
4
+ private readonly allowedContracts;
5
+ private readonly allowedAssets;
6
+ private readonly maxPerTransaction;
7
+ private readonly maxPerSession;
8
+ private readonly spent;
9
+ constructor(config: ResolvedPerkOSConfig, input?: SpendingPolicyInput);
10
+ authorize(plan: ContractCallPlan): SpendingApproval;
11
+ record(plan: ContractCallPlan): void;
12
+ spentThisSession(asset: PaymentAsset): bigint;
13
+ }
14
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAiBpB,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsB;IACtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAsB;IACvD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAe;IACjD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuD;gBAEjE,MAAM,EAAE,oBAAoB,EAAE,KAAK,GAAE,mBAAwB;IAezE,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,gBAAgB;IA8CnD,MAAM,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAOpC,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM;CAG9C"}
package/dist/policy.js ADDED
@@ -0,0 +1,75 @@
1
+ import { PerkOSError } from "./errors.js";
2
+ import { toUint } from "./validation.js";
3
+ function limitsFrom(input, field) {
4
+ const result = {};
5
+ for (const asset of ["sbtc", "stx"]) {
6
+ const value = input?.[asset];
7
+ if (value !== undefined)
8
+ result[asset] = toUint(value, `${field}.${asset}`);
9
+ }
10
+ return result;
11
+ }
12
+ export class SpendingPolicy {
13
+ allowedNetworks;
14
+ allowedContracts;
15
+ allowedAssets;
16
+ maxPerTransaction;
17
+ maxPerSession;
18
+ spent = { sbtc: 0n, stx: 0n };
19
+ constructor(config, input = {}) {
20
+ this.allowedNetworks = new Set(input.allowedNetworks ?? [config.network]);
21
+ this.allowedContracts = new Set(input.allowedContracts ?? [
22
+ config.contracts.agentRegistry,
23
+ config.contracts.stxCommerce,
24
+ config.contracts.sbtcCommerce,
25
+ config.contracts.reputationRegistry,
26
+ ]);
27
+ this.allowedAssets = new Set(input.allowedAssets ?? ["sbtc", "stx"]);
28
+ this.maxPerTransaction = limitsFrom(input.maxPerTransaction, "maxPerTransaction");
29
+ this.maxPerSession = limitsFrom(input.maxPerSession, "maxPerSession");
30
+ }
31
+ authorize(plan) {
32
+ if (!this.allowedNetworks.has(plan.network)) {
33
+ throw new PerkOSError("POLICY_DENIED", `Network ${plan.network} is not allowed.`);
34
+ }
35
+ if (!this.allowedContracts.has(plan.contract)) {
36
+ throw new PerkOSError("POLICY_DENIED", `Contract ${plan.contract} is not allowed.`);
37
+ }
38
+ const { asset, amount } = plan.intent;
39
+ if (!asset || amount === undefined || amount === 0n || plan.intent.operation !== "fund-job") {
40
+ return { operation: plan.intent.operation, ...(asset ? { asset } : {}) };
41
+ }
42
+ if (!this.allowedAssets.has(asset)) {
43
+ throw new PerkOSError("POLICY_DENIED", `Asset ${asset} is not allowed.`);
44
+ }
45
+ const transactionLimit = this.maxPerTransaction[asset];
46
+ const sessionLimit = this.maxPerSession[asset];
47
+ if (transactionLimit === undefined || sessionLimit === undefined) {
48
+ throw new PerkOSError("POLICY_LIMIT_REQUIRED", `Funding ${asset} requires maxPerTransaction.${asset} and maxPerSession.${asset}.`);
49
+ }
50
+ if (amount > transactionLimit) {
51
+ throw new PerkOSError("POLICY_DENIED", `Funding amount ${amount} exceeds the ${asset} per-transaction limit ${transactionLimit}.`);
52
+ }
53
+ const nextSpent = this.spent[asset] + amount;
54
+ if (nextSpent > sessionLimit) {
55
+ throw new PerkOSError("POLICY_DENIED", `Funding would exceed the ${asset} session limit ${sessionLimit}.`);
56
+ }
57
+ return {
58
+ operation: plan.intent.operation,
59
+ asset,
60
+ amount,
61
+ spentThisSession: this.spent[asset],
62
+ remainingThisSession: sessionLimit - nextSpent,
63
+ };
64
+ }
65
+ record(plan) {
66
+ const { asset, amount, operation } = plan.intent;
67
+ if (operation === "fund-job" && asset && amount !== undefined) {
68
+ this.spent[asset] += amount;
69
+ }
70
+ }
71
+ spentThisSession(asset) {
72
+ return this.spent[asset];
73
+ }
74
+ }
75
+ //# sourceMappingURL=policy.js.map