402mob-merchant-sdk 0.5.0 → 0.7.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.7.0
4
+
5
+ - Add buyer-signed withdrawal/replacement, optimistic response revisions, immutable history reads and closed-state validation for fresh-work requests. Selection remains separate from payment and freezes the selected version.
6
+
7
+ - Add scoped, expiring merchant session create/list/revoke helpers; parent credential required and no wallet authority conferred.
8
+
9
+ - Add optional immutable prepared-offer purchase metadata, public resource fields and a hash-verifying `getOfferTerms` reader. Introduced in 0.7.0.
10
+
11
+ - Opt-in work agreement templates, private execution recovery and validated merchant event cursors. Introduced in 0.7.0.
12
+
13
+ ## 0.6.0
14
+
15
+ - Accept semantically identical inspection-plan property order in proposal responses while rejecting unknown or substituted fields.
16
+
17
+ - Add the protected inspection seller example: reviewed worker publication, exact capability search and explicit buyer-funded proposal construction; no automatic signing or payment.
18
+
19
+ - Add explicit protected inspection proposals/handoffs and `ProtectedInspectionClient`, isolated from direct Work Tickets and JSON escrow. A separate configured deployment is required; no signing or spending is added to the SDK.
20
+
21
+ - Retain requested format, selected payout, title and proposal note in the grant input. Reject unexpected handoff fields and substituted request lifetimes. Proposal publication checks the 32 KiB canonical grant-input limit.
22
+
23
+ - Add typed fresh-work request, proposal, preflight decline and signed-selection helpers with response/handoff validation. Direct selection returns a separately signed Work Ticket grant template; protected inspection selection returns an escrow task. Neither selection authorizes payment.
24
+ - Existing prepared-offer demand methods remain unchanged. The SDK never signs, purchases external tests or broadcasts settlement transactions; spending authority remains in the caller runtime.
25
+
3
26
  ## 0.5.0
4
27
 
5
28
  - Add `ProtectedWorkClient` for the separate experimental JSON escrow HTTP API, generated request/response types and schema checks. Pin contract/verifier; validate read challenges, signing domains and transaction targets. No signing, broadcasting, automatic retry or replica management. Includes protocol integration tests and an example. Earlier versions do not include these methods.
package/README.md CHANGED
@@ -1,6 +1,9 @@
1
1
  # 402Mob Merchant SDK
2
2
 
3
- Version 0.5.0 adds wallet-signed delivery complaints and the separate `ProtectedWorkClient` for experimental JSON escrow. Install `402mob-merchant-sdk@0.5.0` for these methods; earlier versions do not include them.
3
+ **Version 0.7.0** adds linked work agreements and event reads, immutable offer terms, scoped merchant sessions, and fresh-request withdrawal/replacement with versioned responses. Check the target server’s capabilities before calling new methods. The SDK never signs or spends for you.
4
+
5
+
6
+ Version 0.5.0 adds wallet-signed delivery complaints and the separate `ProtectedWorkClient` for experimental JSON escrow. Install `402mob-merchant-sdk@0.7.0` for these methods; earlier versions do not include them.
4
7
 
5
8
  **Version 0.4.0** adds worker profiles and discovery, public buyer requests and newest-first Work Ticket reads. Upgrade from 0.3.1 to use these additions. Check the target server's `/v1/capabilities` first; new worker routes require `workerDiscovery`. See [CHANGELOG.md](./CHANGELOG.md).
6
9
 
@@ -39,7 +42,7 @@ If a message signer is locked, stop retries. `enrollWithTransaction` can use a s
39
42
  Install from npm:
40
43
 
41
44
  ```sh
42
- npm install 402mob-merchant-sdk@0.4.0
45
+ npm install 402mob-merchant-sdk@0.7.0
43
46
  ```
44
47
 
45
48
  Version **0.4.0** retains enrollment, resource resolution and seller Work Ticket methods. Enrollment and credential rotation require standard 65-byte EIP-191 signatures; malformed or compact 64-byte signatures are rejected before submission. See the [npm package](https://www.npmjs.com/package/402mob-merchant-sdk) and [source](https://github.com/gggggggg424242/402mob-merchant-sdk).
@@ -254,7 +257,7 @@ To test a local build in another project, install the generated file with `npm i
254
257
 
255
258
  The SDK tests use mocked HTTP responses and type-check every bundled example. They do not contact `evidence.contact` or submit wallet transactions. Service integration tests in the main repository cover actual local HTTP/enrollment signatures; Work Ticket and public-request live Base validation remain pending.
256
259
 
257
- Examples included in the tarball import the built package output: [enroll and publish](./examples/enroll-and-publish.ts), [resolve prepared resources](./examples/resolve-resources.ts), [worker discovery](./examples/worker-discovery.ts), and [signed request to checkout handoff](./examples/request-to-checkout.ts).
260
+ Examples included in the tarball import the built package output: [enroll and publish](./examples/enroll-and-publish.ts), [resolve prepared resources](./examples/resolve-resources.ts), [worker discovery](./examples/worker-discovery.ts), [signed request to checkout handoff](./examples/request-to-checkout.ts), and [protected inspection service](./examples/protected-inspection-service.ts).
258
261
 
259
262
  MIT licensed. See [LICENSE](./LICENSE).
260
263
 
@@ -284,7 +287,7 @@ SDK requests reject HTTP redirects and never retry automatically. An interrupted
284
287
  These methods are available from version 0.3.0.
285
288
 
286
289
 
287
- ## Delivery complaints (unreleased source)
290
+ ## Delivery complaints (0.5.0)
288
291
 
289
292
  `createDeliveryDisputeChallenge(operationId, request)` and `submitDeliveryDisputeAction(operationId, {challengeId, challengeToken, signature})` support buyer complaints, original-recipient responses, buyer closure and private reads. These methods require version 0.5.0 or later.
290
293
 
@@ -312,3 +315,37 @@ Dispute writes require `binding` from a fresh signed read. Read challenges conta
312
315
  `ProtectedWorkClient` covers all primary protected-work HTTP endpoints with generated OpenAPI types and request/response validation. It requires a pinned contract and verifier hash for job operations, checks signing domains, exact read challenges, transaction targets and approval amounts, and sends no merchant credential. It does not hold keys, sign, broadcast, decode every transaction, verify cryptographic commitments or automatically retry. A configured server may relay signed actions; funding is never relayed.
313
316
 
314
317
  Start with `new ProtectedWorkClient({baseUrl}).getCapabilities()` and stop when `configured` is false. The isolated Base test does not activate production. SDK helpers have HTTP integration coverage with simulated chain state; the Base test used direct HTTP. Use version 0.5.0 for these helpers. See [the full client guide](https://evidence.contact/merchant-sdk.md#protected-json-work-source-050), [protocol](https://evidence.contact/protected-work.md) and [source examples](examples/protected-work.ts). Replica consent/upload/decision calls remain separate verifier HTTP calls; there are no protected-work CLI, Python wallet or hosted MCP action helpers.
318
+
319
+ ## Fresh-work requests (0.6.0)
320
+
321
+ Use `createWorkRequestChallenge` / `completeWorkRequest` to publish a buyer-signed public need with acceptance criteria, then `listWorkRequests` / `getWorkRequest` to read it. A merchant client can `proposeWorkRequest` with its declared accepting capability, fee, proposed deadline and seller-funded test budget, or `declineWorkRequest` with a free preflight reason. One current response per merchant is allowed; explicit revisions in 0.7.0 retain all previous versions.
322
+
323
+ `createWorkRequestSelectionChallenge` / `selectWorkRequestProposal` require the buyer's separate EIP-191 signature. For direct proposals, the SDK validates the returned `workTicketHandoff`, including its exact input fields and the selected format, payout and proposal note. Add the intended buyer wallet and a new persisted grant idempotency key, then follow the existing Work Ticket grant, quote acceptance and payment flow. Selection creates no ticket or payment and does not track either. The deadline and test budget are declarations, not escrow or wallet spending limits. Inputs and responses are public; never include live payment authorizations or secrets.
324
+
325
+ See [the auditor response example](examples/respond-to-work-request.ts) and [the protocol guide](https://evidence.contact/work-requests.md). Existing wallet/CLI/Python packages do not yet wrap these routes; retain credentials in your runtime and use HTTP/MCP or this SDK.
326
+
327
+ The grant input is limited to 32 KiB in canonical JSON; an oversized proposal is rejected before it becomes immutable. Compare the actual quote with the retained proposal terms before signing, and check that its deadline is still useful. The copied format/payout/deadline fields are review context, not extra Work Ticket enforcement. Reuse the saved grant key after timeouts; another key can create another ticket. Public demand proves neither buyer funds nor authorization to test an external endpoint. For direct proposals, external test costs remain the seller’s risk, and a free decline does not reimburse them. Explicit protected inspection proposals instead use buyer-funded probes and a separate escrow handoff; see below.
328
+
329
+ ## Protected inspections (0.6.0)
330
+
331
+ `ProtectedInspectionClient` provides the separate inspection HTTP flow: `getCapabilities`, `prepare`, `prepareFunding` (including the exact task), `getJob`, `createReadChallenge`, `submitObservation`, `start`, candidate submission, replicas, evaluation, result reads and settlement/appeal transaction preparation. Pin the new inspection contract and verifier hash. There is no signing, external HTTP probe, automatic retry or transaction broadcast in this client. The source probe script lives in the service repository. Negative observations may satisfy the narrow paid task; HTTP truth and general audit quality are not certified. Stop on `configured:false`; the separate same-operator pilot is configured, but its full funded lifecycle has not been live-money tested. See https://evidence.contact/protected-inspections.md.
332
+
333
+ ### Offer a protected inspection service
334
+
335
+ Use the free [service recipe](https://evidence.contact/protected-inspection-service.json) and [seller walkthrough](https://evidence.contact/protected-inspections.md#offer-this-service). Publish the reviewed `payment-readiness-inspection` worker profile, then propose an explicit protected inspection against an actual `/v1/work-requests` record. Profile writes replace existing capabilities. Buyer selection returns `protectedWorkHandoff`; it does not authorize payment. This is not a prepared-artifact offer or Payment Link. Require confirmed escrow and retained buyer evidence before work. SDK 0.6.0 includes `examples/protected-inspection-service.ts`; earlier SDK 0.5.0 can advertise/search profiles but lacks fresh-proposal and inspection helpers. No automatic job inbox or notification is provided.
336
+
337
+ ## Unreleased work agreement helpers
338
+
339
+ Version 0.7.0 adds `getWorkAgreementTemplate`, `createWorkExecutionReadChallenge`, `readWorkExecution`, `readMerchantWorkExecution` and `listWorkEvents`. npm 0.6.0 does not include these methods. See https://evidence.contact/work-agreements.md for HTTP/MCP equivalents and the opt-in direct-settlement boundary. Persist event cursors with pending ticket references, then reread each current ticket; event receipt is not permission to spend.
340
+
341
+ ## Immutable offer terms (0.7.0)
342
+
343
+ Version 0.7.0 accepts optional `purchaseDecision` on `createOffer` and exports its type. `getOfferTerms(merchantId, offerId)` reads and validates the immutable terms document and hash. These methods are not included in published 0.6.0. See https://evidence.contact/purchase-decisions.md for limits and compatibility. Neither declaration nor hash certifies the artifact or authorizes payment.
344
+
345
+ ## Merchant sessions (0.7.0)
346
+
347
+ `createMerchantSession`, `listMerchantSessions` and `revokeMerchantSession` manage optional scoped, expiring service credentials with a parent merchant key. They neither sign payments nor delegate further sessions. These helpers are absent from npm 0.6.0. See https://evidence.contact/runtime-controls.md.
348
+
349
+ ## Fresh-work lifecycle (0.7.0)
350
+
351
+ `createWorkRequestWithdrawalChallenge` and `withdrawWorkRequest` close open, unselected demand with the buyer EOA signature. To replace terms, publish a new request/key with optional `supersedesRequestId`. `reviseWorkRequestResponse(requestId, responseId, {expectedTermsHash, kind, terms})` appends a version to your owned response; `getWorkResponseHistory` reads all versions. Selection freezes the exact hash. No action cancels a ticket or authorizes payment. These helpers and closed-state validation are included in 0.7.0; 0.6.0 lacks them. See https://evidence.contact/work-request-lifecycle.md.
package/dist/index.d.ts CHANGED
@@ -1,3 +1,7 @@
1
+ import { type PurchaseDecision, type OfferTerms } from "./purchase-decisions.js";
2
+ export type { PurchaseDecision, OfferTerms } from "./purchase-decisions.js";
3
+ import type { WorkAgreementTemplate, WorkExecutionRead, WorkEventPage } from "./work-agreements.js";
4
+ export type * from "./work-agreements.js";
1
5
  export type EvmAddress = `0x${string}`;
2
6
  export type EvmSignature = `0x${string}`;
3
7
  export type TransactionHash = `0x${string}`;
@@ -183,6 +187,9 @@ export interface CredentialRotationResult {
183
187
  };
184
188
  }
185
189
  interface MerchantOfferBase {
190
+ purchaseDecision?: PurchaseDecision;
191
+ offerTermsHash?: string;
192
+ offerTermsPath?: string;
186
193
  id: string;
187
194
  merchantId: string;
188
195
  seriesId: string;
@@ -210,6 +217,7 @@ export type JsonValue = string | number | boolean | null | JsonValue[] | {
210
217
  [key: string]: JsonValue;
211
218
  };
212
219
  interface OfferInputBase {
220
+ purchaseDecision?: PurchaseDecision;
213
221
  title: string;
214
222
  description: string;
215
223
  priceUSDC: string;
@@ -245,6 +253,9 @@ export interface ArtifactCommitment {
245
253
  }
246
254
  /** A provider-published, fixed-price resource descriptor. */
247
255
  export interface AgentResource {
256
+ purchaseDecision?: PurchaseDecision;
257
+ offerTermsHash?: string;
258
+ offerTermsPath?: string;
248
259
  artifact?: ArtifactCommitment;
249
260
  share?: string;
250
261
  id: string;
@@ -380,6 +391,7 @@ export interface WorkerCapability {
380
391
  inputDescription: string;
381
392
  resultDescription: string;
382
393
  resultContentTypes: ArtifactContentType[];
394
+ settlementModes?: ("direct_prepayment" | "protected_inspection")[] | undefined;
383
395
  }
384
396
  /** Full replacement. Discovery flags do not cancel or restrict independently addressed tickets. */
385
397
  export interface WorkerProfileInput {
@@ -425,6 +437,127 @@ export interface WorkerDirectoryPage {
425
437
  items: WorkerProfileView[];
426
438
  nextCursor: number | null;
427
439
  }
440
+ export interface FreshWorkRequestInput extends BuyerRequestInput {
441
+ acceptanceCriteria: string[];
442
+ supersedesRequestId?: string;
443
+ }
444
+ export interface InspectionPlan {
445
+ version: "buyer-probe-v1";
446
+ targetUrl: string;
447
+ method: "GET";
448
+ paymentRecipient: EvmAddress;
449
+ maxTestAmountAtomic: string;
450
+ maxPaidAttempts: 1;
451
+ }
452
+ export interface FreshWorkProposalInput {
453
+ capability: string;
454
+ deliverable: string;
455
+ priceUSDC: string;
456
+ deliveryDeadline: string;
457
+ testPurchaseBudgetUSDC: string;
458
+ testPurchasePayer: "seller" | "buyer";
459
+ note: string;
460
+ settlementMode?: "direct_prepayment" | "protected_inspection";
461
+ inspection?: InspectionPlan;
462
+ }
463
+ export interface FreshWorkDeclineInput {
464
+ reason: "endpoint_unavailable" | "unsupported_payment" | "scope_unsupported" | "capacity_unavailable" | "other";
465
+ note: string;
466
+ }
467
+ export interface PublicFreshWorkRequest extends Omit<FreshWorkRequestInput, "buyer"> {
468
+ id: string;
469
+ kind: "fresh";
470
+ state: "open" | "selected" | "expired" | "withdrawn" | "superseded";
471
+ closedAt?: string;
472
+ supersededByRequestId?: string;
473
+ createdAt: string;
474
+ expiresAt: string;
475
+ selectedProposalId: string | null;
476
+ }
477
+ export type FreshWorkResponse = {
478
+ revision?: number;
479
+ previousTermsHash?: string;
480
+ id: string;
481
+ requestId: string;
482
+ merchantId: string;
483
+ payoutAddress: EvmAddress;
484
+ termsHash: string;
485
+ createdAt: string;
486
+ } & ({
487
+ kind: "proposal";
488
+ terms: FreshWorkProposalInput;
489
+ } | {
490
+ kind: "decline";
491
+ terms: FreshWorkDeclineInput;
492
+ });
493
+ export type FreshWorkResponseRevision = {
494
+ expectedTermsHash: string;
495
+ } & ({
496
+ kind: "proposal";
497
+ terms: FreshWorkProposalInput;
498
+ } | {
499
+ kind: "decline";
500
+ terms: FreshWorkDeclineInput;
501
+ });
502
+ export interface FreshWorkResponseHistory {
503
+ requestId: string;
504
+ responseId: string;
505
+ versions: FreshWorkResponse[];
506
+ }
507
+ export interface FreshWorkHandoff {
508
+ kind: "work_ticket_grant";
509
+ method: "POST";
510
+ path: "/v1/work-tickets/challenges";
511
+ body: {
512
+ merchantId: string;
513
+ capability: string;
514
+ input: {
515
+ workRequestId: string;
516
+ proposalId: string;
517
+ proposalTermsHash: string;
518
+ title: string;
519
+ contentType: ArtifactContentType;
520
+ payoutAddress: EvmAddress;
521
+ proposalNote: string;
522
+ scope: string;
523
+ acceptanceCriteria: string[];
524
+ deliverable: string;
525
+ deliveryDeadline: string;
526
+ testPurchaseBudgetUSDC: string;
527
+ testPurchasePayer: "seller";
528
+ };
529
+ maxPriceUSDC: string;
530
+ expiresInSeconds: number;
531
+ };
532
+ buyerWalletRequired: true;
533
+ grantSignatureRequired: true;
534
+ paymentAuthorized: false;
535
+ quoteAcceptanceRequired: true;
536
+ tracksTicketCreation: false;
537
+ }
538
+ export interface InspectionHandoff {
539
+ kind: "protected_inspection";
540
+ path: "/v1/protected-inspections/prepare";
541
+ task: {
542
+ version: "funded-inspection-v1";
543
+ requestId: string;
544
+ proposalId: string;
545
+ proposalTermsHash: string;
546
+ plan: InspectionPlan;
547
+ };
548
+ seller: EvmAddress;
549
+ amountAtomic: string;
550
+ deliveryDeadline: number;
551
+ fundingRequired: true;
552
+ buyerProbeRequired: true;
553
+ paymentAuthorized: false;
554
+ }
555
+ export interface FreshWorkDetail {
556
+ request: PublicFreshWorkRequest;
557
+ responses: FreshWorkResponse[];
558
+ workTicketHandoff: FreshWorkHandoff | null;
559
+ protectedWorkHandoff: InspectionHandoff | null;
560
+ }
428
561
  export interface BuyerRequestInput {
429
562
  buyer: EvmAddress;
430
563
  title: string;
@@ -530,6 +663,21 @@ export declare class MerchantApiError extends Error {
530
663
  * Minimal, dependency-free HTTP client for 402Mob agent resource resolution and merchant management.
531
664
  * It never signs messages, submits wallet transactions, persists API keys, or retries requests.
532
665
  */
666
+ export type MerchantSessionScope = "merchant:manage" | "merchant:sales:read" | "merchant:work";
667
+ export interface MerchantSessionInput {
668
+ name: string;
669
+ scopes: MerchantSessionScope[];
670
+ expiresInSeconds: number;
671
+ }
672
+ export interface MerchantSession {
673
+ id: string;
674
+ name: string;
675
+ scopes: MerchantSessionScope[];
676
+ createdAt: string;
677
+ expiresAt: string;
678
+ revokedAt: string | null;
679
+ lastUsedAt: string | null;
680
+ }
533
681
  export declare class MerchantClient {
534
682
  #private;
535
683
  private readonly baseUrl;
@@ -569,10 +717,20 @@ export declare class MerchantClient {
569
717
  getProviderResources(merchantId: string): Promise<AgentProviderCatalog>;
570
718
  /** Resolve an older resource ID to its currently published version. This call is public. */
571
719
  resolveLatestResource(merchantId: string, offerId: string): Promise<ResolvedAgentResource>;
720
+ /** Read immutable public decision terms, including for an unpublished exact offer. Verifies the origin-backed SHA-256; not a seller signature. */
721
+ getOfferTerms(merchantId: string, offerId: string): Promise<OfferTerms>;
572
722
  setDiscoverable(discoverable: boolean): Promise<{
573
723
  merchantId: string;
574
724
  discoverable: boolean;
575
725
  }>;
726
+ createMerchantSession(input: MerchantSessionInput): Promise<{
727
+ session: MerchantSession;
728
+ token: string;
729
+ }>;
730
+ listMerchantSessions(): Promise<{
731
+ items: MerchantSession[];
732
+ }>;
733
+ revokeMerchantSession(sessionId: string): Promise<MerchantSession>;
576
734
  createOffer(input: CreateOfferInput): Promise<MerchantOffer>;
577
735
  setOfferActive(offerId: string, active: boolean): Promise<MerchantOffer>;
578
736
  listSales(limit?: number): Promise<SaleList>;
@@ -606,7 +764,76 @@ export declare class MerchantClient {
606
764
  buyerResultChallenge: string;
607
765
  retentionDays: number;
608
766
  }>;
767
+ /** New source API: opt-in linkage; selection still creates neither a ticket nor a payment. */
768
+ getWorkAgreementTemplate(requestId: string): Promise<WorkAgreementTemplate>;
769
+ createWorkExecutionReadChallenge(requestId: string, buyer: EvmAddress): Promise<{
770
+ challengeId: string;
771
+ message: string;
772
+ expiresAt: string;
773
+ }>;
774
+ readWorkExecution(requestId: string, proof: {
775
+ challengeId: string;
776
+ signature: EvmSignature;
777
+ }): Promise<WorkExecutionRead>;
778
+ readMerchantWorkExecution(requestId: string): Promise<WorkExecutionRead>;
779
+ listWorkEvents(input?: {
780
+ after?: number;
781
+ limit?: number;
782
+ }): Promise<WorkEventPage>;
609
783
  /** Free public demand. Caller persists the key, signs the returned message and completes separately. */
784
+ createWorkRequestChallenge(input: FreshWorkRequestInput, idempotencyKey: string): Promise<BuyerRequestChallenge>;
785
+ completeWorkRequest(input: FreshWorkRequestInput & {
786
+ challengeId: string;
787
+ signature: EvmSignature;
788
+ }, idempotencyKey: string): Promise<FreshWorkDetail & {
789
+ replay: boolean;
790
+ }>;
791
+ listWorkRequests(input?: ResolveAgentResourcesInput): Promise<{
792
+ items: PublicFreshWorkRequest[];
793
+ nextCursor: number | null;
794
+ }>;
795
+ getWorkRequest(id: string): Promise<FreshWorkDetail>;
796
+ proposeWorkRequest(id: string, input: FreshWorkProposalInput): Promise<{
797
+ response: FreshWorkResponse;
798
+ replay: boolean;
799
+ }>;
800
+ declineWorkRequest(id: string, input: FreshWorkDeclineInput): Promise<{
801
+ response: FreshWorkResponse;
802
+ replay: boolean;
803
+ }>;
804
+ createWorkRequestWithdrawalChallenge(id: string, input: {
805
+ buyer: EvmAddress;
806
+ }): Promise<{
807
+ challengeId: string;
808
+ message: string;
809
+ expiresAt: string;
810
+ }>;
811
+ withdrawWorkRequest(id: string, input: {
812
+ challengeId: string;
813
+ signature: EvmSignature;
814
+ }): Promise<FreshWorkDetail & {
815
+ replay: boolean;
816
+ }>;
817
+ reviseWorkRequestResponse(id: string, responseId: string, input: FreshWorkResponseRevision): Promise<{
818
+ response: FreshWorkResponse;
819
+ replay: boolean;
820
+ }>;
821
+ getWorkResponseHistory(id: string, responseId: string): Promise<FreshWorkResponseHistory>;
822
+ createWorkRequestSelectionChallenge(id: string, input: {
823
+ buyer: EvmAddress;
824
+ proposalId: string;
825
+ }): Promise<{
826
+ challengeId: string;
827
+ message: string;
828
+ expiresAt: string;
829
+ proposal: FreshWorkResponse;
830
+ }>;
831
+ selectWorkRequestProposal(id: string, input: {
832
+ challengeId: string;
833
+ signature: EvmSignature;
834
+ }): Promise<FreshWorkDetail & {
835
+ replay: boolean;
836
+ }>;
610
837
  createBuyerRequestChallenge(input: BuyerRequestInput, idempotencyKey: string): Promise<BuyerRequestChallenge>;
611
838
  completeBuyerRequest(input: BuyerRequestInput & {
612
839
  challengeId: string;
@@ -655,3 +882,6 @@ export declare class MerchantClient {
655
882
  export { ProtectedWorkClient, ProtectedWorkApiError } from "./protected-work.js";
656
883
  export type { ProtectedWorkClientOptions } from "./protected-work.js";
657
884
  export type * from "./protected-work-types.js";
885
+ export { ProtectedInspectionClient, ProtectedInspectionApiError } from "./protected-inspection.js";
886
+ export type * from "./protected-inspection-types.js";
887
+ export type { ProtectedInspectionClientOptions } from "./protected-inspection.js";