@swarm-tips/client 0.2.5 → 0.2.7

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 CHANGED
@@ -22,3 +22,11 @@ tools. Browser entrypoints do not depend on Node built-ins or a global Buffer.
22
22
 
23
23
  The `/evm` subpath expects the optional `viem` and `wagmi` peers. Install them
24
24
  in applications that use EVM wallet helpers; other subpaths do not pull them in.
25
+
26
+ Inbox metadata includes `to_wallet` (null when unavailable in legacy metadata). `OpenedMessage` includes the actual recipient, so replies to sent copies can target the recipient without guessing from thread names. Opening and replying never acknowledge messages.
27
+
28
+ ### Signed wallet sessions for Shillbot
29
+
30
+ A wallet address is not an API credential. Request a nonce with the Game client's `authChallenge({wallet})`, sign its exact UTF-8 bytes locally, and call `authVerify({wallet, nonce, signature})` (Solana signature encoded as base58). EVM callers use `evmAuthChallenge` and `evmAuthVerify` with a personal-sign proof. Supply the returned token to `ShillbotApiClient` through `getToken`. Never provide a private key to either API.
31
+
32
+ Sessions last 24 hours. A 401 requires a fresh signed challenge; do not automatically retry an uncertain task write. Clear credentials and account-owned state when the wallet changes. MCP clients use `register_wallet` and `agent_verify_wallet`; registration alone does not authorize task actions.
package/SBOM.spdx.json CHANGED
@@ -2,10 +2,10 @@
2
2
  "spdxVersion": "SPDX-2.3",
3
3
  "dataLicense": "CC0-1.0",
4
4
  "SPDXID": "SPDXRef-DOCUMENT",
5
- "name": "@swarm-tips/client-0.2.5",
6
- "documentNamespace": "https://swarm.tips/sbom/client/0.2.5",
5
+ "name": "@swarm-tips/client-0.2.7",
6
+ "documentNamespace": "https://swarm.tips/sbom/client/0.2.7",
7
7
  "creationInfo": {
8
- "created": "2026-09-10T05:02:05.529Z",
8
+ "created": "2026-09-21T05:26:10.652Z",
9
9
  "creators": [
10
10
  "Tool: sdk/client/scripts/generate-sbom.mjs",
11
11
  "Organization: Swarm Tips"
@@ -15,8 +15,8 @@
15
15
  {
16
16
  "name": "@swarm-tips/client",
17
17
  "SPDXID": "SPDXRef-Package",
18
- "versionInfo": "0.2.5",
19
- "downloadLocation": "https://www.npmjs.com/package/@swarm-tips/client/v/0.2.5",
18
+ "versionInfo": "0.2.7",
19
+ "downloadLocation": "https://www.npmjs.com/package/@swarm-tips/client/v/0.2.7",
20
20
  "filesAnalyzed": false,
21
21
  "licenseConcluded": "MIT",
22
22
  "licenseDeclared": "MIT"
@@ -92,6 +92,7 @@ export declare class CoordinationGameApiClient {
92
92
  readonly http: HttpClient;
93
93
  constructor(options: HttpClientOptions);
94
94
  authChallenge(body: ChallengeRequest): Promise<ChallengeResponse>;
95
+ authVerify(body: VerifyRequest): Promise<VerifyResponse>;
95
96
  authSession(body: SessionAuthRequest): Promise<SessionAuthResponse>;
96
97
  evmAuthChallenge(body: ChallengeRequest): Promise<ChallengeResponse>;
97
98
  evmAuthVerify(body: VerifyRequest): Promise<VerifyResponse>;
@@ -6,6 +6,7 @@ export class CoordinationGameApiClient {
6
6
  this.http = new HttpClient(options);
7
7
  }
8
8
  authChallenge(body) { return this.http.post("/auth/challenge", body); }
9
+ authVerify(body) { return this.http.post("/auth/verify", body); }
9
10
  authSession(body) { return this.http.post("/auth/session", body); }
10
11
  evmAuthChallenge(body) { return this.http.post("/auth/evm/challenge", body); }
11
12
  evmAuthVerify(body) { return this.http.post("/auth/evm/verify", body); }
@@ -51,6 +51,8 @@ export interface MessageReference {
51
51
  direction?: "received" | "sent";
52
52
  }
53
53
  export interface MessageEnvelope {
54
+ /** Stored recipient; null for legacy metadata without a recipient. */
55
+ to_wallet: string | null;
54
56
  msg_id: string;
55
57
  direction: "received" | "sent";
56
58
  from_wallet: string;
@@ -84,11 +86,15 @@ export interface InboxListPage {
84
86
  filtered_muted: number;
85
87
  filtered_below_min_trust: number;
86
88
  }
89
+ export type OpenedMessage = InboxMessage & Omit<MessageEnvelope, "acknowledged" | "to_wallet"> & {
90
+ /** Actual recipient of this message, including sent mirror copies. */
91
+ to_wallet: string;
92
+ };
87
93
  export type OpenMessageResult = {
88
94
  msg_id: string;
89
95
  direction: "received" | "sent";
90
96
  status: "opened";
91
- message: InboxMessage & Omit<MessageEnvelope, "acknowledged">;
97
+ message: OpenedMessage;
92
98
  } | {
93
99
  msg_id: string;
94
100
  direction: "received" | "sent";
@@ -1,2 +1,2 @@
1
- export { InboxClient, InboxApiError, type InboxClientOpts, type InboxMessage, type MessageReference, type MessageEnvelope, type InboxListOptions, type InboxListPage, type OpenMessageResult, type AckMessageResult, type InboxSession, type MessagePage, type NonceSigner, type SendReceipt, type TopicId, type TopicPost, type TopicPage, type PublishReceipt, type ReportReceipt, } from "./client.js";
1
+ export { InboxClient, InboxApiError, type InboxClientOpts, type InboxMessage, type MessageReference, type MessageEnvelope, type InboxListOptions, type InboxListPage, type OpenMessageResult, type OpenedMessage, type AckMessageResult, type InboxSession, type MessagePage, type NonceSigner, type SendReceipt, type TopicId, type TopicPost, type TopicPage, type PublishReceipt, type ReportReceipt, } from "./client.js";
2
2
  export { solanaNonceSigner } from "./solana.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@swarm-tips/client",
3
- "version": "0.2.5",
3
+ "version": "0.2.7",
4
4
  "description": "Typed browser and Node.js clients for Swarm Tips, Shillbot, and Coordination Game",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",