@heyanon-arp/sdk 0.0.12 → 0.0.14

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/dist/assets.d.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * The protocol carries assets as `AssetIdentifier` ({ asset_id, decimals,
5
5
  * symbol? }) with `asset_id` always a CAIP-19 string. Payment assets
6
- * are a CLOSED per-cluster whitelist (mirroring the V2 contract's
6
+ * are a CLOSED per-cluster whitelist (mirroring the contract's
7
7
  * on-chain `CollateralConfig` allowlist):
8
8
  *
9
9
  * - solana-mainnet: SOL, USDC, USDT, ANON
@@ -63,14 +63,6 @@ export declare const MAINNET_MINTS: {
63
63
  export declare const DEVNET_MINTS: {
64
64
  readonly USDC: "7ZjP2eJnQrW1SuE1kAP7tdrQuhkTVpco1NQKGjEMHpgg";
65
65
  };
66
- /**
67
- * @deprecated Compatibility alias for the pre-whitelist public API.
68
- * Use `MAINNET_MINTS` / `DEVNET_MINTS` / `ASSET_WHITELIST` instead.
69
- */
70
- export declare const USDC_MINTS: {
71
- readonly 'solana-mainnet': "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
72
- readonly 'solana-devnet': "7ZjP2eJnQrW1SuE1kAP7tdrQuhkTVpco1NQKGjEMHpgg";
73
- };
74
66
  /**
75
67
  * The payment whitelist, keyed by cluster. Closed list — an offer in
76
68
  * any other asset is rejected server-side
@@ -1,7 +1,7 @@
1
1
  import type { KeyLinkPayload, ScryptPasswordAttestation } from '../types/identity';
2
2
  /**
3
3
  * Build an `ARP-KEY-LINK-v1` attestation record signed via
4
- * `scrypt_password_proof` (V1 default). Caller assembles the payload
4
+ * `scrypt_password_proof`. Caller assembles the payload
5
5
  * (DID, both pubkeys, nonce, etc.); SDK produces the MAC
6
6
  * and wraps the record in the standard shape.
7
7
  *
@@ -1,13 +1,13 @@
1
1
  /**
2
- * Derive the scrypt key from an owner's password + salt. Uses V1
2
+ * Derive the scrypt key from an owner's password + salt. Uses the
3
3
  * standard parameters: N=32768, r=8, p=1, dkLen=32. Designed to be
4
4
  * computed once at owner registration time and stored encrypted-at-rest;
5
5
  * subsequent attestation verification recomputes the HMAC, not scrypt.
6
6
  *
7
- * Synchronous variant is intentional — the SDK targets V1 deployments
8
- * where keys derive at low frequency (once per owner registration);
9
- * the worst case is a few hundred ms which is acceptable. Async
10
- * variants can be layered on top by the consumer if needed.
7
+ * Synchronous variant is intentional — keys derive at low frequency
8
+ * (once per owner registration); the worst case is a few hundred ms
9
+ * which is acceptable. Async variants can be layered on top by the
10
+ * consumer if needed.
11
11
  */
12
12
  export declare function deriveScryptKey(password: string, salt: Uint8Array): Uint8Array;
13
13
  /**
@@ -14,7 +14,7 @@ import type { AssetIdentifier } from '../types';
14
14
  * mint are bound on-chain at lock time (create_lock binds
15
15
  * `amount` u64 + `mint` 32B) and on-chain in the Lock account. The
16
16
  * condition_hash binds the agreed TERMS (scope / currency), not
17
- * the amount. (Settlement is always escrow in V1 — no `settlement_model`.
17
+ * the amount. (Settlement is always escrow — no `settlement_model`.
18
18
  * The per-unit rate card — `rateAmount` / `rateUnit` — is NOT bound either:
19
19
  * nothing enforces it, so it stays out of the subset.)
20
20
  *
@@ -23,11 +23,11 @@ import type { AssetIdentifier } from '../types';
23
23
  */
24
24
  export interface DelegationTermsSubset {
25
25
  /**
26
- * Domain/version tag baked INTO the hashed bytes. V2 dropped the
27
- * pricing-model concept from the terms (flat is the protocol's only
28
- * semantics, not a setting) the tag guarantees a V2 hash can never
29
- * collide with a V1 hash over otherwise-identical fields, and gives
30
- * future term-set changes an explicit version knob.
26
+ * Domain/version tag baked INTO the hashed bytes. The terms carry no
27
+ * pricing-model concept (flat is the protocol's only semantics, not a
28
+ * setting). The tag gives future term-set changes an explicit version
29
+ * knob and prevents collisions across tag values over
30
+ * otherwise-identical fields.
31
31
  */
32
32
  v: 'arp-condition-v2';
33
33
  delegationId: string;
@@ -57,11 +57,11 @@ export interface DelegationTermsInput {
57
57
  * delegation shape MUST NOT change `condition_hash` for existing
58
58
  * delegations.
59
59
  *
60
- * Runs in THREE places that MUST agree byte-for-byte: the buyer's
61
- * offer-prep (CLI), the server's `delegation.offer` validation
62
- * (recompute + compare to the on-chain bound hash), and the settlement
63
- * digest reconstruction. Any field-set drift produces a different hash
64
- * → Ed25519 settlement verify fails on-chain.
60
+ * Runs in two places that MUST agree byte-for-byte: the buyer's
61
+ * offer-prep (CLI) — which writes the hash into the `create_lock` tx —
62
+ * and the server's `delegation.offer` validation (recompute + compare
63
+ * to the on-chain bound hash). Any field-set drift produces a different
64
+ * hash the server rejects the offer.
65
65
  *
66
66
  * @returns 32-byte condition_hash
67
67
  */
@@ -1,4 +1,4 @@
1
- /** PDA seed strings of the V2 program, verbatim from the pinned IDL. */
1
+ /** PDA seed strings of the escrow program, verbatim from the pinned IDL. */
2
2
  export declare const ESCROW_PDA_SEEDS: {
3
3
  readonly LOCK: "lock";
4
4
  readonly ESCROW: "escrow";
@@ -10,12 +10,11 @@
10
10
  * seeded by `[<seed_prefix>, lock_id]`).
11
11
  * - Server derives it independently when validating the offer's
12
12
  * `attachments.escrow_lock.lock_id` claim.
13
- * - Payee derives it before cosigning the receipt (needs it to look up
14
- * the lock account and to feed into the settlement digest).
13
+ * - Payee derives it to look up the lock account on-chain.
15
14
  *
16
- * Versioning: `"arp-lock-v1"` is a permanent literal. A future
17
- * `arp-lock-v2` would derive different lock_ids for the same delegation,
18
- * which is the right behaviour if we ever need to migrate seed shapes.
15
+ * Versioning: `"arp-lock-v1"` is a permanent literal baked into the
16
+ * hash input. Changing the prefix would derive different lock_ids for
17
+ * the same delegation, so it is fixed.
19
18
  *
20
19
  * @param delegationId — `del_<uuid>` string form (e.g. `del_550e8400-e29b-41d4-a716-446655440000`).
21
20
  * The wire-form prefix is part of the hash input
@@ -26,8 +25,8 @@
26
25
  */
27
26
  export declare function deriveLockId(delegationId: string): Uint8Array;
28
27
  /**
29
- * Convert a delegation id to the 16-byte representation the Solang
30
- * contract takes as `bytes16 delegation_id`. RFC 4122 UUIDs are
28
+ * Convert a delegation id to the 16-byte representation used as the
29
+ * `bytes16 delegation_id` lock-id substrate. RFC 4122 UUIDs are
31
30
  * 128 bits = 16 bytes; the string form is 36 chars (32 hex + 4 dashes).
32
31
  *
33
32
  * Accepts BOTH wire-form variants the protocol uses:
package/dist/index.js CHANGED
@@ -156,9 +156,9 @@ function verifyEnvelope(envelope, senderIdentityPubkey) {
156
156
  var Purpose = {
157
157
  /** Default for `protected.purpose` on body messages. */
158
158
  ENVELOPE: "ARP-ENVELOPE-v1",
159
- /** Receipt co-signature payload (delegation completion). */
159
+ /** Receipt domain separator (delegation completion). */
160
160
  RECEIPT: "ARP-RECEIPT-v1",
161
- /** Dispute response co-signature payload. */
161
+ /** Dispute response domain separator. */
162
162
  DISPUTE_RESPONSE: "ARP-DISPUTE-RESPONSE-v1",
163
163
  /** Identity ownership challenge proof. */
164
164
  CHALLENGE: "ARP-CHALLENGE-v1",
@@ -168,7 +168,7 @@ var Purpose = {
168
168
  KEY_LINK: "ARP-KEY-LINK-v1",
169
169
  /**
170
170
  * Settlement-key signature authorising an on-chain `release_lock`.
171
- * V1.5 digest now binds fee_bps_at_lock + fee_recipient_at_lock.
171
+ * The digest binds fee_bps_at_lock + fee_recipient_at_lock.
172
172
  */
173
173
  SOLANA_RELEASE: "ARP-SOLANA-RELEASE-v1.5",
174
174
  /** Settlement-key signature authorising an on-chain co-signed `refund_lock`. */
@@ -176,9 +176,6 @@ var Purpose = {
176
176
  /** Admin (platform multisig) signature authorising `resolve_dispute`. */
177
177
  SOLANA_RESOLVE_DISPUTE: "ARP-SOLANA-RESOLVE-DISPUTE-v1"
178
178
  };
179
- var PROTECTED_PURPOSES = [Purpose.ENVELOPE];
180
- var COSIGNATURE_PURPOSES = [Purpose.RECEIPT, Purpose.DISPUTE_RESPONSE];
181
- var SETTLEMENT_PURPOSES = [Purpose.SOLANA_RELEASE, Purpose.SOLANA_REFUND, Purpose.SOLANA_RESOLVE_DISPUTE];
182
179
 
183
180
  // src/challenge/challenge.ts
184
181
  var CHALLENGE_PURPOSE_BYTES = new TextEncoder().encode(Purpose.CHALLENGE);
@@ -434,10 +431,6 @@ var MAINNET_MINTS = {
434
431
  var DEVNET_MINTS = {
435
432
  USDC: "7ZjP2eJnQrW1SuE1kAP7tdrQuhkTVpco1NQKGjEMHpgg"
436
433
  };
437
- var USDC_MINTS = {
438
- "solana-mainnet": MAINNET_MINTS.USDC,
439
- "solana-devnet": DEVNET_MINTS.USDC
440
- };
441
434
  var SOL_MAINNET = {
442
435
  asset_id: `solana:${SOLANA_CLUSTER_IDS["solana-mainnet"]}/slip44:${SLIP44_SOLANA}`,
443
436
  decimals: 9,
@@ -720,7 +713,6 @@ function readU64LE(buf, off) {
720
713
 
721
714
  exports.ASSET_WHITELIST = ASSET_WHITELIST;
722
715
  exports.CAIP19_REGEX = CAIP19_REGEX;
723
- exports.COSIGNATURE_PURPOSES = COSIGNATURE_PURPOSES;
724
716
  exports.CREATE_LOCK_DISCRIMINATOR = CREATE_LOCK_DISCRIMINATOR;
725
717
  exports.CREATE_LOCK_NATIVE_DISCRIMINATOR = CREATE_LOCK_NATIVE_DISCRIMINATOR;
726
718
  exports.DECLINE_REASONS = DECLINE_REASONS;
@@ -733,14 +725,11 @@ exports.LOCK_TERMINAL_STATES = LOCK_TERMINAL_STATES;
733
725
  exports.MAINNET_MINTS = MAINNET_MINTS;
734
726
  exports.NATIVE_SOL_MINT_BASE58 = NATIVE_SOL_MINT_BASE58;
735
727
  exports.NO_ARG_LIFECYCLE_INSTRUCTIONS = NO_ARG_LIFECYCLE_INSTRUCTIONS;
736
- exports.PROTECTED_PURPOSES = PROTECTED_PURPOSES;
737
728
  exports.Purpose = Purpose;
738
729
  exports.SCRYPT_PARAMS = SCRYPT_PARAMS;
739
- exports.SETTLEMENT_PURPOSES = SETTLEMENT_PURPOSES;
740
730
  exports.SLIP44_SOLANA = SLIP44_SOLANA;
741
731
  exports.SOLANA_CLUSTER_IDS = SOLANA_CLUSTER_IDS;
742
732
  exports.SPL_TOKEN_PROGRAM_ID_BASE58 = SPL_TOKEN_PROGRAM_ID_BASE58;
743
- exports.USDC_MINTS = USDC_MINTS;
744
733
  exports.WELL_KNOWN_ASSETS = WELL_KNOWN_ASSETS;
745
734
  exports.WELL_KNOWN_ASSET_KEYS = WELL_KNOWN_ASSET_KEYS;
746
735
  exports.base58btcDecode = base58btcDecode;
package/dist/index.mjs CHANGED
@@ -131,9 +131,9 @@ function verifyEnvelope(envelope, senderIdentityPubkey) {
131
131
  var Purpose = {
132
132
  /** Default for `protected.purpose` on body messages. */
133
133
  ENVELOPE: "ARP-ENVELOPE-v1",
134
- /** Receipt co-signature payload (delegation completion). */
134
+ /** Receipt domain separator (delegation completion). */
135
135
  RECEIPT: "ARP-RECEIPT-v1",
136
- /** Dispute response co-signature payload. */
136
+ /** Dispute response domain separator. */
137
137
  DISPUTE_RESPONSE: "ARP-DISPUTE-RESPONSE-v1",
138
138
  /** Identity ownership challenge proof. */
139
139
  CHALLENGE: "ARP-CHALLENGE-v1",
@@ -143,7 +143,7 @@ var Purpose = {
143
143
  KEY_LINK: "ARP-KEY-LINK-v1",
144
144
  /**
145
145
  * Settlement-key signature authorising an on-chain `release_lock`.
146
- * V1.5 digest now binds fee_bps_at_lock + fee_recipient_at_lock.
146
+ * The digest binds fee_bps_at_lock + fee_recipient_at_lock.
147
147
  */
148
148
  SOLANA_RELEASE: "ARP-SOLANA-RELEASE-v1.5",
149
149
  /** Settlement-key signature authorising an on-chain co-signed `refund_lock`. */
@@ -151,9 +151,6 @@ var Purpose = {
151
151
  /** Admin (platform multisig) signature authorising `resolve_dispute`. */
152
152
  SOLANA_RESOLVE_DISPUTE: "ARP-SOLANA-RESOLVE-DISPUTE-v1"
153
153
  };
154
- var PROTECTED_PURPOSES = [Purpose.ENVELOPE];
155
- var COSIGNATURE_PURPOSES = [Purpose.RECEIPT, Purpose.DISPUTE_RESPONSE];
156
- var SETTLEMENT_PURPOSES = [Purpose.SOLANA_RELEASE, Purpose.SOLANA_REFUND, Purpose.SOLANA_RESOLVE_DISPUTE];
157
154
 
158
155
  // src/challenge/challenge.ts
159
156
  var CHALLENGE_PURPOSE_BYTES = new TextEncoder().encode(Purpose.CHALLENGE);
@@ -409,10 +406,6 @@ var MAINNET_MINTS = {
409
406
  var DEVNET_MINTS = {
410
407
  USDC: "7ZjP2eJnQrW1SuE1kAP7tdrQuhkTVpco1NQKGjEMHpgg"
411
408
  };
412
- var USDC_MINTS = {
413
- "solana-mainnet": MAINNET_MINTS.USDC,
414
- "solana-devnet": DEVNET_MINTS.USDC
415
- };
416
409
  var SOL_MAINNET = {
417
410
  asset_id: `solana:${SOLANA_CLUSTER_IDS["solana-mainnet"]}/slip44:${SLIP44_SOLANA}`,
418
411
  decimals: 9,
@@ -693,4 +686,4 @@ function readU64LE(buf, off) {
693
686
  return v;
694
687
  }
695
688
 
696
- export { ASSET_WHITELIST, CAIP19_REGEX, COSIGNATURE_PURPOSES, CREATE_LOCK_DISCRIMINATOR, CREATE_LOCK_NATIVE_DISCRIMINATOR, DECLINE_REASONS, DEVNET_MINTS, ESCROW_PDA_SEEDS, LOCK_ACCOUNT_DISCRIMINATOR, LOCK_ACCOUNT_SIZE, LOCK_STATE_NAMES, LOCK_TERMINAL_STATES, MAINNET_MINTS, NATIVE_SOL_MINT_BASE58, NO_ARG_LIFECYCLE_INSTRUCTIONS, PROTECTED_PURPOSES, Purpose, SCRYPT_PARAMS, SETTLEMENT_PURPOSES, SLIP44_SOLANA, SOLANA_CLUSTER_IDS, SPL_TOKEN_PROGRAM_ID_BASE58, USDC_MINTS, WELL_KNOWN_ASSETS, WELL_KNOWN_ASSET_KEYS, base58btcDecode, base58btcEncode, buildCreateLockIxData, buildLifecycleIxData, buildResolveDisputeIxData, bytes16ToDelegationId, canonicalBytes, canonicalJson, canonicalSha256Hex, computeCreateLockDiscriminator, computeLockAccountDiscriminator, decodeLockAccount, delegationIdToBytes16, deriveDelegationConditionHash, deriveLockId, deriveScryptKey, detectTokenProgramFromOwner, detectTokenProgramFromOwnerBytes, expiresAt, findAssetByAssetId, findFirstChainDivergence, formatDid, generateKeyPair, getPublicKey2 as getPublicKey, instructionDiscriminator, isAssetIdentifier, isDeclineReason, isValidDid, isWhitelistedAssetId, listWhitelistedAssets, parseCaip19SolanaAssetId, parseDid, pollUntil, resolveAsset, rfc3339, scryptPasswordProofSign, scryptPasswordProofVerify, senderNonce, serverEventHash, sign2 as sign, signChallenge, signEnvelope, signKeyLinkAttestation, signedMessageHash, uuidV4, verify2 as verify, verifyChallenge, verifyEnvelope, verifyKeyLinkAttestation };
689
+ export { ASSET_WHITELIST, CAIP19_REGEX, CREATE_LOCK_DISCRIMINATOR, CREATE_LOCK_NATIVE_DISCRIMINATOR, DECLINE_REASONS, DEVNET_MINTS, ESCROW_PDA_SEEDS, LOCK_ACCOUNT_DISCRIMINATOR, LOCK_ACCOUNT_SIZE, LOCK_STATE_NAMES, LOCK_TERMINAL_STATES, MAINNET_MINTS, NATIVE_SOL_MINT_BASE58, NO_ARG_LIFECYCLE_INSTRUCTIONS, Purpose, SCRYPT_PARAMS, SLIP44_SOLANA, SOLANA_CLUSTER_IDS, SPL_TOKEN_PROGRAM_ID_BASE58, WELL_KNOWN_ASSETS, WELL_KNOWN_ASSET_KEYS, base58btcDecode, base58btcEncode, buildCreateLockIxData, buildLifecycleIxData, buildResolveDisputeIxData, bytes16ToDelegationId, canonicalBytes, canonicalJson, canonicalSha256Hex, computeCreateLockDiscriminator, computeLockAccountDiscriminator, decodeLockAccount, delegationIdToBytes16, deriveDelegationConditionHash, deriveLockId, deriveScryptKey, detectTokenProgramFromOwner, detectTokenProgramFromOwnerBytes, expiresAt, findAssetByAssetId, findFirstChainDivergence, formatDid, generateKeyPair, getPublicKey2 as getPublicKey, instructionDiscriminator, isAssetIdentifier, isDeclineReason, isValidDid, isWhitelistedAssetId, listWhitelistedAssets, parseCaip19SolanaAssetId, parseDid, pollUntil, resolveAsset, rfc3339, scryptPasswordProofSign, scryptPasswordProofVerify, senderNonce, serverEventHash, sign2 as sign, signChallenge, signEnvelope, signKeyLinkAttestation, signedMessageHash, uuidV4, verify2 as verify, verifyChallenge, verifyEnvelope, verifyKeyLinkAttestation };
package/dist/purpose.d.ts CHANGED
@@ -13,9 +13,9 @@
13
13
  export declare const Purpose: {
14
14
  /** Default for `protected.purpose` on body messages. */
15
15
  readonly ENVELOPE: "ARP-ENVELOPE-v1";
16
- /** Receipt co-signature payload (delegation completion). */
16
+ /** Receipt domain separator (delegation completion). */
17
17
  readonly RECEIPT: "ARP-RECEIPT-v1";
18
- /** Dispute response co-signature payload. */
18
+ /** Dispute response domain separator. */
19
19
  readonly DISPUTE_RESPONSE: "ARP-DISPUTE-RESPONSE-v1";
20
20
  /** Identity ownership challenge proof. */
21
21
  readonly CHALLENGE: "ARP-CHALLENGE-v1";
@@ -25,7 +25,7 @@ export declare const Purpose: {
25
25
  readonly KEY_LINK: "ARP-KEY-LINK-v1";
26
26
  /**
27
27
  * Settlement-key signature authorising an on-chain `release_lock`.
28
- * V1.5 digest now binds fee_bps_at_lock + fee_recipient_at_lock.
28
+ * The digest binds fee_bps_at_lock + fee_recipient_at_lock.
29
29
  */
30
30
  readonly SOLANA_RELEASE: "ARP-SOLANA-RELEASE-v1.5";
31
31
  /** Settlement-key signature authorising an on-chain co-signed `refund_lock`. */
@@ -34,10 +34,3 @@ export declare const Purpose: {
34
34
  readonly SOLANA_RESOLVE_DISPUTE: "ARP-SOLANA-RESOLVE-DISPUTE-v1";
35
35
  };
36
36
  export type PurposeValue = (typeof Purpose)[keyof typeof Purpose];
37
- /**
38
- * `protected.purpose` accepts a subset — the others are payload-level
39
- * (co-signature / settlement-signature).
40
- */
41
- export declare const PROTECTED_PURPOSES: readonly PurposeValue[];
42
- export declare const COSIGNATURE_PURPOSES: readonly PurposeValue[];
43
- export declare const SETTLEMENT_PURPOSES: readonly PurposeValue[];
@@ -7,14 +7,15 @@
7
7
  * validation — those checks belong to the consumer (typically the
8
8
  * backend's MessageService); SDK provides only the static types.
9
9
  */
10
- import type { Body, Did, Sha256Hex } from './envelope';
10
+ import type { Body, Sha256Hex } from './envelope';
11
11
  /**
12
12
  * Chain-qualified asset identifier carried by `delegation.currency`
13
- * (the single asset for both rate + amount). Replaces the V1 string-enum `'USDC'`
14
- * placeholder — that shape can't disambiguate `USDC on Solana mainnet`
15
- * from `USDC on Polygon` or `USDC.e bridged on Avalanche` (all the same
16
- * ticker, different on-chain assets). It also can't represent native
17
- * tokens (SOL, ETH) where `slip44` is the canonical asset namespace.
13
+ * (the single asset for both rate + amount). A plain ticker string like
14
+ * `'USDC'` can't disambiguate `USDC on Solana mainnet` from `USDC on
15
+ * Polygon` or `USDC.e bridged on Avalanche` (all the same ticker,
16
+ * different on-chain assets), and can't represent native tokens (SOL,
17
+ * ETH) where `slip44` is the canonical asset namespace; this CAIP-19
18
+ * shape can.
18
19
  *
19
20
  * Fields:
20
21
  * - `asset_id` — [CAIP-19](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-19.md)
@@ -43,7 +44,7 @@ export interface AssetIdentifier {
43
44
  }
44
45
  /**
45
46
  * Closed enum of machine-readable decline reasons used across the
46
- * two decline sites in V1:
47
+ * two decline sites:
47
48
  * • `handshake_response.content.decision === 'decline'`
48
49
  * • `delegation.content.action === 'decline'`
49
50
  *
@@ -53,7 +54,7 @@ export interface AssetIdentifier {
53
54
  * parsing free-text. The companion `reason_detail` field carries any
54
55
  * additional context the sender wants to surface.
55
56
  *
56
- * Closed list at V1 — adding a value bumps the SDK and the server
57
+ * Closed list — adding a value bumps the SDK and the server
57
58
  * validator's allowlist. The intent of `unspecified` is for senders
58
59
  * that genuinely have no useful detail (still better than no reason
59
60
  * at all); `other` means "see `reason_detail` for the specifics".
@@ -158,9 +159,9 @@ export interface WorkResponseContent {
158
159
  }
159
160
  /**
160
161
  * `receipt` — payee-signed message describing completed work. The
161
- * `attachments.co_signature` (with purpose `ARP-RECEIPT-v1`) carries
162
- * the matching identity-key cosign on a payload that includes the
163
- * receipt event hash.
162
+ * payee's proposed verdict (`verdict_proposed`) is binding; settlement
163
+ * happens on-chain via `claim_work_payment`, gated by who sends the
164
+ * claim transaction inside which time window.
164
165
  */
165
166
  export interface ReceiptBody extends Body<ReceiptContent> {
166
167
  type: 'receipt';
@@ -202,21 +203,3 @@ export interface DisputeContent {
202
203
  * `body.type` via discriminated dispatch.
203
204
  */
204
205
  export type AnyBody = HandshakeBody | HandshakeResponseBody | DelegationBody | WorkRequestBody | WorkResponseBody | ReceiptBody | DisputeBody;
205
- /** Receipt co-signature payload — what gets `payload_hash`'d in `attachments.co_signature`. */
206
- export interface ReceiptCosignPayload {
207
- purpose: 'ARP-RECEIPT-v1';
208
- delegation_id: string;
209
- receipt_event_hash: Sha256Hex;
210
- verdict: 'accepted' | 'accepted_with_notes' | 'rejected';
211
- notes_hash: Sha256Hex | null;
212
- }
213
- /** Dispute response co-signature payload — analogous shape for `ARP-DISPUTE-RESPONSE-v1`. */
214
- export interface DisputeResponseCosignPayload {
215
- purpose: 'ARP-DISPUTE-RESPONSE-v1';
216
- dispute_id: string;
217
- dispute_event_hash: Sha256Hex;
218
- stance: 'accept' | 'reject' | 'partial';
219
- notes_hash: Sha256Hex | null;
220
- responder_did: Did;
221
- }
222
- export type CosignPayload = ReceiptCosignPayload | DisputeResponseCosignPayload;
@@ -43,14 +43,12 @@ export interface Body<TContent = Record<string, unknown>> {
43
43
  content: TContent;
44
44
  }
45
45
  /**
46
- * Optional attachments. Two top-level fields are SDK-aware:
47
- * `co_signature` (semantic intent) and `escrow_lock`
48
- * (`delegation.offer` carries a pre-signed `create_lock` Solana tx).
49
- * Other body-specific attachments live under their own keys and are
50
- * passed through opaquely.
46
+ * Optional attachments. One top-level field is SDK-aware:
47
+ * `escrow_lock` (`delegation.offer` carries a pre-signed `create_lock`
48
+ * Solana tx). Other body-specific attachments live under their own
49
+ * keys and are passed through opaquely.
51
50
  */
52
51
  export interface Attachments {
53
- co_signature?: CoSignature;
54
52
  escrow_lock?: EscrowLockAttachment;
55
53
  [other: string]: unknown;
56
54
  }
@@ -68,7 +66,7 @@ export interface Attachments {
68
66
  * - `asset_id` is the CAIP-19 currency the lock holds; must equal
69
67
  * `body.content.currency.asset_id` (defence-in-depth).
70
68
  *
71
- * There is NO expiry field: the V2 contract's `create_lock` carries no
69
+ * There is NO expiry field: the contract's `create_lock` carries no
72
70
  * expiry argument. `Lock.expiry` is a rolling deadline the chain
73
71
  * derives from the Config windows on each state transition
74
72
  * (`accept_lock` → work window, `submit_work` → review window, …).
@@ -82,12 +80,6 @@ export interface EscrowLockAttachment {
82
80
  amount: string;
83
81
  asset_id: string;
84
82
  }
85
- export interface CoSignature {
86
- agent_did: Did;
87
- purpose: PurposeValue;
88
- payload_hash: Sha256Hex;
89
- sig: Ed25519Sig;
90
- }
91
83
  /** Top-level envelope as it appears on the wire. */
92
84
  export interface Envelope<TBody extends Body = Body> {
93
85
  protected: ProtectedBlock;
@@ -2,8 +2,8 @@ import type { Did } from './envelope';
2
2
  /**
3
3
  * Owner attestation methods per [00-core/identity.md](../../../00-core/identity.md).
4
4
  *
5
- * V1 ships `scrypt_password_proof` only; the others are reserved
6
- * placeholders for forward-compat (V1.5 / V2).
5
+ * Only `scrypt_password_proof` is active; the others are reserved
6
+ * placeholders for forward-compat.
7
7
  */
8
8
  export type OwnerSigningMethod = 'scrypt_password_proof' | 'ed25519_owner_key' | 'totp+passphrase';
9
9
  /**
@@ -22,7 +22,7 @@ export interface KeyLinkPayload {
22
22
  nonce: string;
23
23
  }
24
24
  /**
25
- * `scrypt_password_proof` — the V1 owner attestation envelope. The
25
+ * `scrypt_password_proof` — the owner attestation envelope. The
26
26
  * signature is HMAC-SHA256(scrypt(password, salt), sha256(canonical(payload))),
27
27
  * base64-encoded. NOT an Ed25519 signature; verification is
28
28
  * server-side via the stored scrypt-derived key.
@@ -32,7 +32,7 @@ export interface ScryptPasswordAttestation<TPayload extends KeyLinkPayload = Key
32
32
  sig: string;
33
33
  scrypt_salt_id: string;
34
34
  }
35
- /** Standard scrypt parameters used for owner password proofs (V1). */
35
+ /** Standard scrypt parameters used for owner password proofs. */
36
36
  export declare const SCRYPT_PARAMS: {
37
37
  readonly N: 32768;
38
38
  readonly r: 8;
@@ -1,5 +1,5 @@
1
- export type { Sha256Hex, Ed25519Sig, Did, ProtectedBlock, Body, Attachments, CoSignature, EscrowLockAttachment, Envelope, PersistedEvent, } from './envelope';
2
- export type { HandshakeBody, HandshakeContent, HandshakeResponseBody, HandshakeResponseContent, DelegationBody, DelegationContent, WorkRequestBody, WorkRequestContent, WorkResponseBody, WorkResponseContent, ReceiptBody, ReceiptContent, DisputeBody, DisputeContent, AnyBody, ReceiptCosignPayload, DisputeResponseCosignPayload, CosignPayload, DeclineReason, AssetIdentifier, } from './body';
1
+ export type { Sha256Hex, Ed25519Sig, Did, ProtectedBlock, Body, Attachments, EscrowLockAttachment, Envelope, PersistedEvent, } from './envelope';
2
+ export type { HandshakeBody, HandshakeContent, HandshakeResponseBody, HandshakeResponseContent, DelegationBody, DelegationContent, WorkRequestBody, WorkRequestContent, WorkResponseBody, WorkResponseContent, ReceiptBody, ReceiptContent, DisputeBody, DisputeContent, AnyBody, DeclineReason, AssetIdentifier, } from './body';
3
3
  export { DECLINE_REASONS, isDeclineReason } from './body';
4
4
  export type { AcceptPrefs, AcceptCurrency } from './agent';
5
5
  export type { OwnerSigningMethod, KeyLinkPayload, ScryptPasswordAttestation } from './identity';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@heyanon-arp/sdk",
3
- "version": "0.0.12",
4
- "description": "TypeScript SDK for the Agent Relationship Protocol — canonical JSON, Ed25519 envelope sign/verify, did:arp identity, receipt co-signatures, scrypt key attestation, chain-audit helpers.",
3
+ "version": "0.0.14",
4
+ "description": "TypeScript SDK for the Agent Relationship Protocol — canonical JSON, Ed25519 envelope sign/verify, did:arp identity, scrypt key attestation, chain-audit helpers.",
5
5
  "license": "MIT",
6
6
  "keywords": [
7
7
  "arp",
@@ -11,7 +11,6 @@
11
11
  "jcs",
12
12
  "canonical-json",
13
13
  "envelope",
14
- "cosignature",
15
14
  "a2a"
16
15
  ],
17
16
  "main": "dist/index.js",