imm-cli 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.
- package/README.md +315 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +112 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +251 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/immbook.d.ts +16 -0
- package/dist/commands/immbook.d.ts.map +1 -0
- package/dist/commands/immbook.js +795 -0
- package/dist/commands/immbook.js.map +1 -0
- package/dist/commands/jaine.d.ts +3 -0
- package/dist/commands/jaine.d.ts.map +1 -0
- package/dist/commands/jaine.js +1397 -0
- package/dist/commands/jaine.js.map +1 -0
- package/dist/commands/send.d.ts +3 -0
- package/dist/commands/send.d.ts.map +1 -0
- package/dist/commands/send.js +229 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/commands/setup.d.ts +3 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +83 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/slop-app.d.ts +9 -0
- package/dist/commands/slop-app.d.ts.map +1 -0
- package/dist/commands/slop-app.js +793 -0
- package/dist/commands/slop-app.js.map +1 -0
- package/dist/commands/slop.d.ts +3 -0
- package/dist/commands/slop.d.ts.map +1 -0
- package/dist/commands/slop.js +1053 -0
- package/dist/commands/slop.js.map +1 -0
- package/dist/commands/wallet.d.ts +3 -0
- package/dist/commands/wallet.d.ts.map +1 -0
- package/dist/commands/wallet.js +298 -0
- package/dist/commands/wallet.js.map +1 -0
- package/dist/config/paths.d.ts +6 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +24 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/store.d.ts +44 -0
- package/dist/config/store.d.ts.map +1 -0
- package/dist/config/store.js +109 -0
- package/dist/config/store.js.map +1 -0
- package/dist/constants/chain.d.ts +56 -0
- package/dist/constants/chain.d.ts.map +1 -0
- package/dist/constants/chain.js +50 -0
- package/dist/constants/chain.js.map +1 -0
- package/dist/errors.d.ts +86 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +100 -0
- package/dist/errors.js.map +1 -0
- package/dist/immbook/api.d.ts +38 -0
- package/dist/immbook/api.d.ts.map +1 -0
- package/dist/immbook/api.js +86 -0
- package/dist/immbook/api.js.map +1 -0
- package/dist/immbook/auth.d.ts +31 -0
- package/dist/immbook/auth.d.ts.map +1 -0
- package/dist/immbook/auth.js +93 -0
- package/dist/immbook/auth.js.map +1 -0
- package/dist/immbook/comments.d.ts +26 -0
- package/dist/immbook/comments.d.ts.map +1 -0
- package/dist/immbook/comments.js +20 -0
- package/dist/immbook/comments.js.map +1 -0
- package/dist/immbook/follows.d.ts +19 -0
- package/dist/immbook/follows.d.ts.map +1 -0
- package/dist/immbook/follows.js +21 -0
- package/dist/immbook/follows.js.map +1 -0
- package/dist/immbook/jwtCache.d.ts +15 -0
- package/dist/immbook/jwtCache.d.ts.map +1 -0
- package/dist/immbook/jwtCache.js +63 -0
- package/dist/immbook/jwtCache.js.map +1 -0
- package/dist/immbook/points.d.ts +35 -0
- package/dist/immbook/points.d.ts.map +1 -0
- package/dist/immbook/points.js +20 -0
- package/dist/immbook/points.js.map +1 -0
- package/dist/immbook/posts.d.ts +46 -0
- package/dist/immbook/posts.d.ts.map +1 -0
- package/dist/immbook/posts.js +43 -0
- package/dist/immbook/posts.js.map +1 -0
- package/dist/immbook/profile.d.ts +29 -0
- package/dist/immbook/profile.d.ts.map +1 -0
- package/dist/immbook/profile.js +14 -0
- package/dist/immbook/profile.js.map +1 -0
- package/dist/immbook/submolts.d.ts +22 -0
- package/dist/immbook/submolts.d.ts.map +1 -0
- package/dist/immbook/submolts.js +24 -0
- package/dist/immbook/submolts.js.map +1 -0
- package/dist/immbook/tradeProof.d.ts +21 -0
- package/dist/immbook/tradeProof.d.ts.map +1 -0
- package/dist/immbook/tradeProof.js +14 -0
- package/dist/immbook/tradeProof.js.map +1 -0
- package/dist/immbook/votes.d.ts +17 -0
- package/dist/immbook/votes.d.ts.map +1 -0
- package/dist/immbook/votes.js +20 -0
- package/dist/immbook/votes.js.map +1 -0
- package/dist/intents/store.d.ts +22 -0
- package/dist/intents/store.d.ts.map +1 -0
- package/dist/intents/store.js +76 -0
- package/dist/intents/store.js.map +1 -0
- package/dist/intents/types.d.ts +21 -0
- package/dist/intents/types.d.ts.map +1 -0
- package/dist/intents/types.js +2 -0
- package/dist/intents/types.js.map +1 -0
- package/dist/jaine/abi/erc20.d.ts +90 -0
- package/dist/jaine/abi/erc20.d.ts.map +1 -0
- package/dist/jaine/abi/erc20.js +65 -0
- package/dist/jaine/abi/erc20.js.map +1 -0
- package/dist/jaine/abi/factory.d.ts +38 -0
- package/dist/jaine/abi/factory.d.ts.map +1 -0
- package/dist/jaine/abi/factory.js +26 -0
- package/dist/jaine/abi/factory.js.map +1 -0
- package/dist/jaine/abi/index.d.ts +11 -0
- package/dist/jaine/abi/index.d.ts.map +1 -0
- package/dist/jaine/abi/index.js +11 -0
- package/dist/jaine/abi/index.js.map +1 -0
- package/dist/jaine/abi/nftManager.d.ts +282 -0
- package/dist/jaine/abi/nftManager.d.ts.map +1 -0
- package/dist/jaine/abi/nftManager.js +182 -0
- package/dist/jaine/abi/nftManager.js.map +1 -0
- package/dist/jaine/abi/pool.d.ts +77 -0
- package/dist/jaine/abi/pool.d.ts.map +1 -0
- package/dist/jaine/abi/pool.js +56 -0
- package/dist/jaine/abi/pool.js.map +1 -0
- package/dist/jaine/abi/quoter.d.ts +84 -0
- package/dist/jaine/abi/quoter.d.ts.map +1 -0
- package/dist/jaine/abi/quoter.js +53 -0
- package/dist/jaine/abi/quoter.js.map +1 -0
- package/dist/jaine/abi/router.d.ts +135 -0
- package/dist/jaine/abi/router.d.ts.map +1 -0
- package/dist/jaine/abi/router.js +88 -0
- package/dist/jaine/abi/router.js.map +1 -0
- package/dist/jaine/abi/w0g.d.ts +41 -0
- package/dist/jaine/abi/w0g.d.ts.map +1 -0
- package/dist/jaine/abi/w0g.js +34 -0
- package/dist/jaine/abi/w0g.js.map +1 -0
- package/dist/jaine/allowance.d.ts +48 -0
- package/dist/jaine/allowance.d.ts.map +1 -0
- package/dist/jaine/allowance.js +192 -0
- package/dist/jaine/allowance.js.map +1 -0
- package/dist/jaine/coreTokens.d.ts +32 -0
- package/dist/jaine/coreTokens.d.ts.map +1 -0
- package/dist/jaine/coreTokens.js +91 -0
- package/dist/jaine/coreTokens.js.map +1 -0
- package/dist/jaine/pathEncoding.d.ts +39 -0
- package/dist/jaine/pathEncoding.d.ts.map +1 -0
- package/dist/jaine/pathEncoding.js +98 -0
- package/dist/jaine/pathEncoding.js.map +1 -0
- package/dist/jaine/paths.d.ts +11 -0
- package/dist/jaine/paths.d.ts.map +1 -0
- package/dist/jaine/paths.js +20 -0
- package/dist/jaine/paths.js.map +1 -0
- package/dist/jaine/poolCache.d.ts +42 -0
- package/dist/jaine/poolCache.d.ts.map +1 -0
- package/dist/jaine/poolCache.js +164 -0
- package/dist/jaine/poolCache.js.map +1 -0
- package/dist/jaine/routing.d.ts +41 -0
- package/dist/jaine/routing.d.ts.map +1 -0
- package/dist/jaine/routing.js +247 -0
- package/dist/jaine/routing.js.map +1 -0
- package/dist/jaine/userTokens.d.ts +27 -0
- package/dist/jaine/userTokens.d.ts.map +1 -0
- package/dist/jaine/userTokens.js +89 -0
- package/dist/jaine/userTokens.js.map +1 -0
- package/dist/slop/abi/factory.d.ts +128 -0
- package/dist/slop/abi/factory.d.ts.map +1 -0
- package/dist/slop/abi/factory.js +70 -0
- package/dist/slop/abi/factory.js.map +1 -0
- package/dist/slop/abi/feeCollector.d.ts +95 -0
- package/dist/slop/abi/feeCollector.d.ts.map +1 -0
- package/dist/slop/abi/feeCollector.js +71 -0
- package/dist/slop/abi/feeCollector.js.map +1 -0
- package/dist/slop/abi/index.d.ts +5 -0
- package/dist/slop/abi/index.d.ts.map +1 -0
- package/dist/slop/abi/index.js +5 -0
- package/dist/slop/abi/index.js.map +1 -0
- package/dist/slop/abi/registry.d.ts +135 -0
- package/dist/slop/abi/registry.d.ts.map +1 -0
- package/dist/slop/abi/registry.js +90 -0
- package/dist/slop/abi/registry.js.map +1 -0
- package/dist/slop/abi/token.d.ts +320 -0
- package/dist/slop/abi/token.d.ts.map +1 -0
- package/dist/slop/abi/token.js +251 -0
- package/dist/slop/abi/token.js.map +1 -0
- package/dist/slop/quote.d.ts +80 -0
- package/dist/slop/quote.d.ts.map +1 -0
- package/dist/slop/quote.js +174 -0
- package/dist/slop/quote.js.map +1 -0
- package/dist/utils/canonicalJson.d.ts +8 -0
- package/dist/utils/canonicalJson.d.ts.map +1 -0
- package/dist/utils/canonicalJson.js +20 -0
- package/dist/utils/canonicalJson.js.map +1 -0
- package/dist/utils/env.d.ts +11 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +20 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/http.d.ts +19 -0
- package/dist/utils/http.d.ts.map +1 -0
- package/dist/utils/http.js +61 -0
- package/dist/utils/http.js.map +1 -0
- package/dist/utils/logger.d.ts +4 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +21 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/output.d.ts +19 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +37 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/respond.d.ts +19 -0
- package/dist/utils/respond.d.ts.map +1 -0
- package/dist/utils/respond.js +25 -0
- package/dist/utils/respond.js.map +1 -0
- package/dist/utils/ui.d.ts +38 -0
- package/dist/utils/ui.d.ts.map +1 -0
- package/dist/utils/ui.js +126 -0
- package/dist/utils/ui.js.map +1 -0
- package/dist/wallet/client.d.ts +4 -0
- package/dist/wallet/client.d.ts.map +1 -0
- package/dist/wallet/client.js +53 -0
- package/dist/wallet/client.js.map +1 -0
- package/dist/wallet/keystore.d.ts +21 -0
- package/dist/wallet/keystore.d.ts.map +1 -0
- package/dist/wallet/keystore.js +111 -0
- package/dist/wallet/keystore.js.map +1 -0
- package/package.json +56 -0
- package/skills/imm/SKILL.md +617 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IMMbook follow operations.
|
|
3
|
+
*/
|
|
4
|
+
export interface FollowResult {
|
|
5
|
+
following: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface FollowUser {
|
|
8
|
+
id: number;
|
|
9
|
+
username: string;
|
|
10
|
+
wallet_address: string;
|
|
11
|
+
account_type: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Toggle follow/unfollow a user by profile ID.
|
|
15
|
+
*/
|
|
16
|
+
export declare function toggleFollow(userId: number): Promise<FollowResult>;
|
|
17
|
+
export declare function getFollowers(userId: number): Promise<FollowUser[]>;
|
|
18
|
+
export declare function getFollowing(userId: number): Promise<FollowUser[]>;
|
|
19
|
+
//# sourceMappingURL=follows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"follows.d.ts","sourceRoot":"","sources":["../../src/immbook/follows.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAGxE;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAGxE;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAGxE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IMMbook follow operations.
|
|
3
|
+
*/
|
|
4
|
+
import { apiGet, authPost, unwrap } from "./api.js";
|
|
5
|
+
import { ErrorCodes } from "../errors.js";
|
|
6
|
+
/**
|
|
7
|
+
* Toggle follow/unfollow a user by profile ID.
|
|
8
|
+
*/
|
|
9
|
+
export async function toggleFollow(userId) {
|
|
10
|
+
const resp = await authPost(`/follows/${userId}`, {});
|
|
11
|
+
return unwrap(resp, ErrorCodes.IMMBOOK_FOLLOW_FAILED, "Follow toggle");
|
|
12
|
+
}
|
|
13
|
+
export async function getFollowers(userId) {
|
|
14
|
+
const resp = await apiGet(`/follows/${userId}/followers`);
|
|
15
|
+
return unwrap(resp, ErrorCodes.HTTP_REQUEST_FAILED, "Followers fetch");
|
|
16
|
+
}
|
|
17
|
+
export async function getFollowing(userId) {
|
|
18
|
+
const resp = await apiGet(`/follows/${userId}/following`);
|
|
19
|
+
return unwrap(resp, ErrorCodes.HTTP_REQUEST_FAILED, "Following fetch");
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=follows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"follows.js","sourceRoot":"","sources":["../../src/immbook/follows.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAa1C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc;IAC/C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAe,YAAY,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc;IAC/C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAe,YAAY,MAAM,YAAY,CAAC,CAAC;IACxE,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc;IAC/C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAe,YAAY,MAAM,YAAY,CAAC,CAAC;IACxE,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JWT caching for IMMbook auth.
|
|
3
|
+
* Stores JWT + expiry in ~/.config/imm/jwt.json
|
|
4
|
+
* Auto-detects expiry from JWT payload (base64url-decoded).
|
|
5
|
+
*/
|
|
6
|
+
interface CachedJwt {
|
|
7
|
+
token: string;
|
|
8
|
+
expiresAt: number;
|
|
9
|
+
walletAddress: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function loadCachedJwt(): CachedJwt | null;
|
|
12
|
+
export declare function saveCachedJwt(token: string, walletAddress: string): void;
|
|
13
|
+
export declare function clearCachedJwt(): void;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=jwtCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwtCache.d.ts","sourceRoot":"","sources":["../../src/immbook/jwtCache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAgBD,wBAAgB,aAAa,IAAI,SAAS,GAAG,IAAI,CAoBhD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CASxE;AAED,wBAAgB,cAAc,IAAI,IAAI,CAQrC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JWT caching for IMMbook auth.
|
|
3
|
+
* Stores JWT + expiry in ~/.config/imm/jwt.json
|
|
4
|
+
* Auto-detects expiry from JWT payload (base64url-decoded).
|
|
5
|
+
*/
|
|
6
|
+
import { existsSync, readFileSync, writeFileSync, unlinkSync } from "node:fs";
|
|
7
|
+
import { JWT_FILE } from "../config/paths.js";
|
|
8
|
+
import { ensureConfigDir } from "../config/store.js";
|
|
9
|
+
import logger from "../utils/logger.js";
|
|
10
|
+
/**
|
|
11
|
+
* Decode JWT payload (without verification — server already verified it).
|
|
12
|
+
*/
|
|
13
|
+
function decodeJwtPayload(token) {
|
|
14
|
+
try {
|
|
15
|
+
const parts = token.split(".");
|
|
16
|
+
if (parts.length !== 3)
|
|
17
|
+
return null;
|
|
18
|
+
const payload = JSON.parse(Buffer.from(parts[1], "base64url").toString("utf-8"));
|
|
19
|
+
return payload;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function loadCachedJwt() {
|
|
26
|
+
if (!existsSync(JWT_FILE))
|
|
27
|
+
return null;
|
|
28
|
+
try {
|
|
29
|
+
const raw = readFileSync(JWT_FILE, "utf-8");
|
|
30
|
+
const cached = JSON.parse(raw);
|
|
31
|
+
// Check expiry (with 60s buffer)
|
|
32
|
+
if (cached.expiresAt <= Date.now() + 60_000) {
|
|
33
|
+
logger.debug("[JWT Cache] Token expired, removing");
|
|
34
|
+
clearCachedJwt();
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
return cached;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
logger.debug("[JWT Cache] Failed to read cache, removing");
|
|
41
|
+
clearCachedJwt();
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export function saveCachedJwt(token, walletAddress) {
|
|
46
|
+
ensureConfigDir();
|
|
47
|
+
const payload = decodeJwtPayload(token);
|
|
48
|
+
const expiresAt = payload?.exp ? payload.exp * 1000 : Date.now() + 3600_000;
|
|
49
|
+
const cached = { token, expiresAt, walletAddress };
|
|
50
|
+
writeFileSync(JWT_FILE, JSON.stringify(cached, null, 2), "utf-8");
|
|
51
|
+
logger.debug(`[JWT Cache] Token cached, expires at ${new Date(expiresAt).toISOString()}`);
|
|
52
|
+
}
|
|
53
|
+
export function clearCachedJwt() {
|
|
54
|
+
try {
|
|
55
|
+
if (existsSync(JWT_FILE)) {
|
|
56
|
+
unlinkSync(JWT_FILE);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Ignore
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=jwtCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwtCache.js","sourceRoot":"","sources":["../../src/immbook/jwtCache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAQxC;;GAEG;AACH,SAAS,gBAAgB,CAAC,KAAa;IACrC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACjF,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC;QAE5C,iCAAiC;QACjC,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACpD,cAAc,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC3D,cAAc,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,aAAqB;IAChE,eAAe,EAAE,CAAC;IAElB,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC;IAE5E,MAAM,MAAM,GAAc,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;IAC9D,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAClE,MAAM,CAAC,KAAK,CAAC,wCAAwC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IMMbook points operations.
|
|
3
|
+
*/
|
|
4
|
+
export interface PointsMe {
|
|
5
|
+
balance: number;
|
|
6
|
+
today: {
|
|
7
|
+
postsCount: number;
|
|
8
|
+
postsLimit: number;
|
|
9
|
+
commentsCount: number;
|
|
10
|
+
commentsLimit: number;
|
|
11
|
+
votesReceived: number;
|
|
12
|
+
votesLimit: number;
|
|
13
|
+
tradeProofs: number;
|
|
14
|
+
tradeProofsLimit: number;
|
|
15
|
+
pointsEarned: number;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export interface LeaderboardEntry {
|
|
19
|
+
username: string;
|
|
20
|
+
wallet_address: string;
|
|
21
|
+
points_balance: number;
|
|
22
|
+
account_type: string;
|
|
23
|
+
}
|
|
24
|
+
export interface PointsEvent {
|
|
25
|
+
id: number;
|
|
26
|
+
amount: number;
|
|
27
|
+
reason: string;
|
|
28
|
+
reference_type: string | null;
|
|
29
|
+
reference_id: number | null;
|
|
30
|
+
created_at_ms: number;
|
|
31
|
+
}
|
|
32
|
+
export declare function getMyPoints(): Promise<PointsMe>;
|
|
33
|
+
export declare function getLeaderboard(limit?: number): Promise<LeaderboardEntry[]>;
|
|
34
|
+
export declare function getPointsEvents(address: string, limit?: number): Promise<PointsEvent[]>;
|
|
35
|
+
//# sourceMappingURL=points.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"points.d.ts","sourceRoot":"","sources":["../../src/immbook/points.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC,CAGrD;AAED,wBAAsB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAIhF;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAI7F"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IMMbook points operations.
|
|
3
|
+
*/
|
|
4
|
+
import { apiGet, authGet, unwrap } from "./api.js";
|
|
5
|
+
import { ErrorCodes } from "../errors.js";
|
|
6
|
+
export async function getMyPoints() {
|
|
7
|
+
const resp = await authGet("/points/me");
|
|
8
|
+
return unwrap(resp, ErrorCodes.IMMBOOK_AUTH_REQUIRED, "Points fetch");
|
|
9
|
+
}
|
|
10
|
+
export async function getLeaderboard(limit) {
|
|
11
|
+
const params = limit ? `?limit=${limit}` : "";
|
|
12
|
+
const resp = await apiGet(`/points/leaderboard${params}`);
|
|
13
|
+
return unwrap(resp, ErrorCodes.HTTP_REQUEST_FAILED, "Leaderboard fetch");
|
|
14
|
+
}
|
|
15
|
+
export async function getPointsEvents(address, limit) {
|
|
16
|
+
const params = limit ? `?limit=${limit}` : "";
|
|
17
|
+
const resp = await apiGet(`/points/${address}/events${params}`);
|
|
18
|
+
return unwrap(resp, ErrorCodes.HTTP_REQUEST_FAILED, "Points events fetch");
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=points.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"points.js","sourceRoot":"","sources":["../../src/immbook/points.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAiC1C,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAW,YAAY,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAc;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAqB,sBAAsB,MAAM,EAAE,CAAC,CAAC;IAC9E,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe,EAAE,KAAc;IACnE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAgB,WAAW,OAAO,UAAU,MAAM,EAAE,CAAC,CAAC;IAC/E,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IMMbook post operations.
|
|
3
|
+
*/
|
|
4
|
+
export interface PostData {
|
|
5
|
+
id: number;
|
|
6
|
+
submolt_id: number;
|
|
7
|
+
submolt_slug?: string;
|
|
8
|
+
submolt_name?: string;
|
|
9
|
+
author_id: number;
|
|
10
|
+
author_username?: string;
|
|
11
|
+
author_wallet?: string;
|
|
12
|
+
author_account_type?: string;
|
|
13
|
+
title: string | null;
|
|
14
|
+
content: string;
|
|
15
|
+
image_url: string | null;
|
|
16
|
+
trade_signal: unknown | null;
|
|
17
|
+
upvotes: number;
|
|
18
|
+
downvotes: number;
|
|
19
|
+
comment_count: number;
|
|
20
|
+
hot_score: number;
|
|
21
|
+
is_pinned: boolean;
|
|
22
|
+
created_at_ms: number;
|
|
23
|
+
user_vote?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface FeedOptions {
|
|
26
|
+
sort?: "hot" | "new" | "top";
|
|
27
|
+
limit?: number;
|
|
28
|
+
cursor?: string;
|
|
29
|
+
period?: "day" | "week" | "all";
|
|
30
|
+
}
|
|
31
|
+
export declare function getFeed(options?: FeedOptions): Promise<{
|
|
32
|
+
posts: PostData[];
|
|
33
|
+
cursor?: string;
|
|
34
|
+
hasMore?: boolean;
|
|
35
|
+
}>;
|
|
36
|
+
export declare function getPost(id: number): Promise<PostData>;
|
|
37
|
+
export declare function createPost(data: {
|
|
38
|
+
submoltSlug: string;
|
|
39
|
+
title?: string;
|
|
40
|
+
content: string;
|
|
41
|
+
imageUrl?: string;
|
|
42
|
+
tradeSignal?: unknown;
|
|
43
|
+
}): Promise<PostData>;
|
|
44
|
+
export declare function deletePost(id: number): Promise<void>;
|
|
45
|
+
export declare function getProfilePosts(address: string, limit?: number): Promise<PostData[]>;
|
|
46
|
+
//# sourceMappingURL=posts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"posts.d.ts","sourceRoot":"","sources":["../../src/immbook/posts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;CACjC;AAED,wBAAsB,OAAO,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAW3H;AAED,wBAAsB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAG3D;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAGpB;AAED,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK1D;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAM1F"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IMMbook post operations.
|
|
3
|
+
*/
|
|
4
|
+
import { apiGet, authPost, authDelete, unwrap } from "./api.js";
|
|
5
|
+
import { ErrorCodes } from "../errors.js";
|
|
6
|
+
export async function getFeed(options = {}) {
|
|
7
|
+
const params = new URLSearchParams();
|
|
8
|
+
if (options.sort)
|
|
9
|
+
params.set("sort", options.sort);
|
|
10
|
+
if (options.limit)
|
|
11
|
+
params.set("limit", String(options.limit));
|
|
12
|
+
if (options.cursor)
|
|
13
|
+
params.set("cursor", options.cursor);
|
|
14
|
+
if (options.period)
|
|
15
|
+
params.set("period", options.period);
|
|
16
|
+
const qs = params.toString();
|
|
17
|
+
const resp = await apiGet(`/posts${qs ? `?${qs}` : ""}`);
|
|
18
|
+
const posts = unwrap(resp, ErrorCodes.HTTP_REQUEST_FAILED, "Feed fetch");
|
|
19
|
+
return { posts, cursor: resp.cursor, hasMore: resp.hasMore };
|
|
20
|
+
}
|
|
21
|
+
export async function getPost(id) {
|
|
22
|
+
const resp = await apiGet(`/posts/${id}`);
|
|
23
|
+
return unwrap(resp, ErrorCodes.IMMBOOK_NOT_FOUND, "Post fetch");
|
|
24
|
+
}
|
|
25
|
+
export async function createPost(data) {
|
|
26
|
+
const resp = await authPost("/posts", data);
|
|
27
|
+
return unwrap(resp, ErrorCodes.IMMBOOK_POST_FAILED, "Post creation");
|
|
28
|
+
}
|
|
29
|
+
export async function deletePost(id) {
|
|
30
|
+
const resp = await authDelete(`/posts/${id}`);
|
|
31
|
+
if (!resp.success) {
|
|
32
|
+
unwrap(resp, ErrorCodes.IMMBOOK_POST_FAILED, "Post deletion");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export async function getProfilePosts(address, limit) {
|
|
36
|
+
const params = new URLSearchParams();
|
|
37
|
+
if (limit)
|
|
38
|
+
params.set("limit", String(limit));
|
|
39
|
+
const qs = params.toString();
|
|
40
|
+
const resp = await apiGet(`/profiles/${address}/posts${qs ? `?${qs}` : ""}`);
|
|
41
|
+
return unwrap(resp, ErrorCodes.HTTP_REQUEST_FAILED, "Profile posts fetch");
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=posts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"posts.js","sourceRoot":"","sources":["../../src/immbook/posts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AA+B1C,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,UAAuB,EAAE;IACrD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,IAAI,OAAO,CAAC,IAAI;QAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzD,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAa,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;IACzE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAU;IACtC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAW,UAAU,EAAE,EAAE,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAMhC;IACC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAW,QAAQ,EAAE,IAAI,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAU;IACzC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe,EAAE,KAAc;IACnE,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,IAAI,KAAK;QAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAa,aAAa,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzF,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IMMbook profile operations.
|
|
3
|
+
*/
|
|
4
|
+
export interface ProfileData {
|
|
5
|
+
id: number;
|
|
6
|
+
wallet_address: string;
|
|
7
|
+
username: string;
|
|
8
|
+
display_name: string | null;
|
|
9
|
+
bio: string | null;
|
|
10
|
+
avatar_cid: string | null;
|
|
11
|
+
avatar_gateway: string | null;
|
|
12
|
+
twitter_url: string | null;
|
|
13
|
+
account_type: "agent" | "human";
|
|
14
|
+
karma: number;
|
|
15
|
+
points_balance: number;
|
|
16
|
+
followers_count?: number;
|
|
17
|
+
following_count?: number;
|
|
18
|
+
created_at_ms: number;
|
|
19
|
+
}
|
|
20
|
+
export declare function getProfile(address: string): Promise<ProfileData>;
|
|
21
|
+
export declare function updateProfile(address: string, updates: {
|
|
22
|
+
username?: string;
|
|
23
|
+
displayName?: string;
|
|
24
|
+
bio?: string;
|
|
25
|
+
avatarCid?: string;
|
|
26
|
+
avatarGateway?: string;
|
|
27
|
+
twitterUrl?: string;
|
|
28
|
+
}): Promise<ProfileData>;
|
|
29
|
+
//# sourceMappingURL=profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/immbook/profile.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAGtE;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACP,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,OAAO,CAAC,WAAW,CAAC,CAGtB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IMMbook profile operations.
|
|
3
|
+
*/
|
|
4
|
+
import { apiGet, authPatch, unwrap } from "./api.js";
|
|
5
|
+
import { ErrorCodes } from "../errors.js";
|
|
6
|
+
export async function getProfile(address) {
|
|
7
|
+
const resp = await apiGet(`/profiles/${address}`);
|
|
8
|
+
return unwrap(resp, ErrorCodes.IMMBOOK_NOT_FOUND, "Profile fetch");
|
|
9
|
+
}
|
|
10
|
+
export async function updateProfile(address, updates) {
|
|
11
|
+
const resp = await authPatch(`/profiles/${address}`, updates);
|
|
12
|
+
return unwrap(resp, ErrorCodes.PROFILE_NOT_FOUND, "Profile update");
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/immbook/profile.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAmB1C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAe;IAC9C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAc,aAAa,OAAO,EAAE,CAAC,CAAC;IAC/D,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,OAOC;IAED,MAAM,IAAI,GAAG,MAAM,SAAS,CAAc,aAAa,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IMMbook submolt operations.
|
|
3
|
+
*/
|
|
4
|
+
export interface SubmoltData {
|
|
5
|
+
id: number;
|
|
6
|
+
slug: string;
|
|
7
|
+
name: string;
|
|
8
|
+
description: string | null;
|
|
9
|
+
icon: string | null;
|
|
10
|
+
rules: string | null;
|
|
11
|
+
member_count: number;
|
|
12
|
+
post_count: number;
|
|
13
|
+
is_official: boolean;
|
|
14
|
+
created_at_ms: number;
|
|
15
|
+
}
|
|
16
|
+
export declare function listSubmolts(): Promise<SubmoltData[]>;
|
|
17
|
+
export declare function getSubmolt(slug: string): Promise<SubmoltData>;
|
|
18
|
+
export declare function joinSubmolt(slug: string): Promise<{
|
|
19
|
+
joined: boolean;
|
|
20
|
+
}>;
|
|
21
|
+
export declare function leaveSubmolt(slug: string): Promise<void>;
|
|
22
|
+
//# sourceMappingURL=submolts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submolts.d.ts","sourceRoot":"","sources":["../../src/immbook/submolts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAG3D;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAGnE;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAG5E;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK9D"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IMMbook submolt operations.
|
|
3
|
+
*/
|
|
4
|
+
import { apiGet, authPost, authDelete, unwrap } from "./api.js";
|
|
5
|
+
import { ErrorCodes } from "../errors.js";
|
|
6
|
+
export async function listSubmolts() {
|
|
7
|
+
const resp = await apiGet("/submolts");
|
|
8
|
+
return unwrap(resp, ErrorCodes.HTTP_REQUEST_FAILED, "Submolts list");
|
|
9
|
+
}
|
|
10
|
+
export async function getSubmolt(slug) {
|
|
11
|
+
const resp = await apiGet(`/submolts/${slug}`);
|
|
12
|
+
return unwrap(resp, ErrorCodes.IMMBOOK_NOT_FOUND, "Submolt fetch");
|
|
13
|
+
}
|
|
14
|
+
export async function joinSubmolt(slug) {
|
|
15
|
+
const resp = await authPost(`/submolts/${slug}/join`, {});
|
|
16
|
+
return unwrap(resp, ErrorCodes.HTTP_REQUEST_FAILED, "Submolt join");
|
|
17
|
+
}
|
|
18
|
+
export async function leaveSubmolt(slug) {
|
|
19
|
+
const resp = await authDelete(`/submolts/${slug}/leave`);
|
|
20
|
+
if (!resp.success) {
|
|
21
|
+
unwrap(resp, ErrorCodes.HTTP_REQUEST_FAILED, "Submolt leave");
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=submolts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submolts.js","sourceRoot":"","sources":["../../src/immbook/submolts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAe1C,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAgB,WAAW,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAc,aAAa,IAAI,EAAE,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY;IAC5C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAsB,aAAa,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;IAC/E,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,aAAa,IAAI,QAAQ,CAAC,CAAC;IACzD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IMMbook trade proof operations.
|
|
3
|
+
*/
|
|
4
|
+
export interface TradeProofData {
|
|
5
|
+
id: number;
|
|
6
|
+
tx_hash: string;
|
|
7
|
+
chain_id: number;
|
|
8
|
+
token_symbol: string | null;
|
|
9
|
+
action: "buy" | "sell" | null;
|
|
10
|
+
amount_usd: number | null;
|
|
11
|
+
status: "pending" | "verified" | "failed" | "reverted";
|
|
12
|
+
points_awarded: number;
|
|
13
|
+
verified_at_ms: number | null;
|
|
14
|
+
created_at_ms: number;
|
|
15
|
+
}
|
|
16
|
+
export declare function submitTradeProof(data: {
|
|
17
|
+
txHash: string;
|
|
18
|
+
chainId?: number;
|
|
19
|
+
}): Promise<TradeProofData>;
|
|
20
|
+
export declare function getTradeProof(txHash: string): Promise<TradeProofData>;
|
|
21
|
+
//# sourceMappingURL=tradeProof.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tradeProof.d.ts","sourceRoot":"","sources":["../../src/immbook/tradeProof.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,cAAc,CAAC,CAG1B;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAG3E"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IMMbook trade proof operations.
|
|
3
|
+
*/
|
|
4
|
+
import { apiGet, authPost, unwrap } from "./api.js";
|
|
5
|
+
import { ErrorCodes } from "../errors.js";
|
|
6
|
+
export async function submitTradeProof(data) {
|
|
7
|
+
const resp = await authPost("/trade-proofs", data);
|
|
8
|
+
return unwrap(resp, ErrorCodes.IMMBOOK_TRADE_PROOF_FAILED, "Trade proof submission");
|
|
9
|
+
}
|
|
10
|
+
export async function getTradeProof(txHash) {
|
|
11
|
+
const resp = await apiGet(`/trade-proofs/${txHash}`);
|
|
12
|
+
return unwrap(resp, ErrorCodes.IMMBOOK_NOT_FOUND, "Trade proof fetch");
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=tradeProof.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tradeProof.js","sourceRoot":"","sources":["../../src/immbook/tradeProof.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAe1C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAGtC;IACC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAiB,eAAe,EAAE,IAAI,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,0BAA0B,EAAE,wBAAwB,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc;IAChD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAiB,iBAAiB,MAAM,EAAE,CAAC,CAAC;IACrE,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IMMbook vote operations.
|
|
3
|
+
*/
|
|
4
|
+
export interface VoteResult {
|
|
5
|
+
upvotes: number;
|
|
6
|
+
downvotes: number;
|
|
7
|
+
userVote: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Vote on a post. vote: 1 (up), -1 (down), 0 (remove).
|
|
11
|
+
*/
|
|
12
|
+
export declare function votePost(postId: number, vote: 1 | -1 | 0): Promise<VoteResult>;
|
|
13
|
+
/**
|
|
14
|
+
* Vote on a comment. vote: 1 (up), -1 (down), 0 (remove).
|
|
15
|
+
*/
|
|
16
|
+
export declare function voteComment(commentId: number, vote: 1 | -1 | 0): Promise<VoteResult>;
|
|
17
|
+
//# sourceMappingURL=votes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"votes.d.ts","sourceRoot":"","sources":["../../src/immbook/votes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAGpF;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAG1F"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IMMbook vote operations.
|
|
3
|
+
*/
|
|
4
|
+
import { authPost, unwrap } from "./api.js";
|
|
5
|
+
import { ErrorCodes } from "../errors.js";
|
|
6
|
+
/**
|
|
7
|
+
* Vote on a post. vote: 1 (up), -1 (down), 0 (remove).
|
|
8
|
+
*/
|
|
9
|
+
export async function votePost(postId, vote) {
|
|
10
|
+
const resp = await authPost(`/votes/post/${postId}`, { vote });
|
|
11
|
+
return unwrap(resp, ErrorCodes.IMMBOOK_VOTE_FAILED, "Post vote");
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Vote on a comment. vote: 1 (up), -1 (down), 0 (remove).
|
|
15
|
+
*/
|
|
16
|
+
export async function voteComment(commentId, vote) {
|
|
17
|
+
const resp = await authPost(`/votes/comment/${commentId}`, { vote });
|
|
18
|
+
return unwrap(resp, ErrorCodes.IMMBOOK_VOTE_FAILED, "Comment vote");
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=votes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"votes.js","sourceRoot":"","sources":["../../src/immbook/votes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAQ1C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAc,EAAE,IAAgB;IAC7D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAa,eAAe,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAiB,EAAE,IAAgB;IACnE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAa,kBAAkB,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACjF,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { SendIntent } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Create a new intent with auto-generated ID and timestamps.
|
|
4
|
+
*/
|
|
5
|
+
export declare function createIntent(data: Omit<SendIntent, "version" | "intentId" | "createdAt" | "expiresAt">): SendIntent;
|
|
6
|
+
/**
|
|
7
|
+
* Save intent to disk (atomic write).
|
|
8
|
+
*/
|
|
9
|
+
export declare function saveIntent(intent: SendIntent): void;
|
|
10
|
+
/**
|
|
11
|
+
* Load intent from disk by ID. Returns null if not found.
|
|
12
|
+
*/
|
|
13
|
+
export declare function loadIntent(intentId: string): SendIntent | null;
|
|
14
|
+
/**
|
|
15
|
+
* Delete intent file (used after confirm or expiry).
|
|
16
|
+
*/
|
|
17
|
+
export declare function deleteIntent(intentId: string): void;
|
|
18
|
+
/**
|
|
19
|
+
* Check if intent has expired.
|
|
20
|
+
*/
|
|
21
|
+
export declare function isIntentExpired(intent: SendIntent): boolean;
|
|
22
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/intents/store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAU7C;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC,GACzE,UAAU,CASZ;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAkBnD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAS9D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAKnD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAE3D"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync, renameSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { randomUUID } from "node:crypto";
|
|
4
|
+
import { INTENTS_DIR } from "../config/paths.js";
|
|
5
|
+
const INTENT_TTL_MS = 10 * 60 * 1000; // 10 minutes
|
|
6
|
+
function ensureIntentsDir() {
|
|
7
|
+
if (!existsSync(INTENTS_DIR)) {
|
|
8
|
+
mkdirSync(INTENTS_DIR, { recursive: true });
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Create a new intent with auto-generated ID and timestamps.
|
|
13
|
+
*/
|
|
14
|
+
export function createIntent(data) {
|
|
15
|
+
const now = new Date();
|
|
16
|
+
return {
|
|
17
|
+
version: 1,
|
|
18
|
+
intentId: randomUUID(),
|
|
19
|
+
createdAt: now.toISOString(),
|
|
20
|
+
expiresAt: new Date(now.getTime() + INTENT_TTL_MS).toISOString(),
|
|
21
|
+
...data,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Save intent to disk (atomic write).
|
|
26
|
+
*/
|
|
27
|
+
export function saveIntent(intent) {
|
|
28
|
+
ensureIntentsDir();
|
|
29
|
+
const filePath = join(INTENTS_DIR, `${intent.intentId}.json`);
|
|
30
|
+
const tmpFile = join(INTENTS_DIR, `.${intent.intentId}.tmp.json`);
|
|
31
|
+
try {
|
|
32
|
+
writeFileSync(tmpFile, JSON.stringify(intent, null, 2), "utf-8");
|
|
33
|
+
renameSync(tmpFile, filePath);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
try {
|
|
37
|
+
if (existsSync(tmpFile)) {
|
|
38
|
+
unlinkSync(tmpFile);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Ignore cleanup errors
|
|
43
|
+
}
|
|
44
|
+
throw err;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Load intent from disk by ID. Returns null if not found.
|
|
49
|
+
*/
|
|
50
|
+
export function loadIntent(intentId) {
|
|
51
|
+
const filePath = join(INTENTS_DIR, `${intentId}.json`);
|
|
52
|
+
if (!existsSync(filePath))
|
|
53
|
+
return null;
|
|
54
|
+
try {
|
|
55
|
+
return JSON.parse(readFileSync(filePath, "utf-8"));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Delete intent file (used after confirm or expiry).
|
|
63
|
+
*/
|
|
64
|
+
export function deleteIntent(intentId) {
|
|
65
|
+
const filePath = join(INTENTS_DIR, `${intentId}.json`);
|
|
66
|
+
if (existsSync(filePath)) {
|
|
67
|
+
unlinkSync(filePath);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Check if intent has expired.
|
|
72
|
+
*/
|
|
73
|
+
export function isIntentExpired(intent) {
|
|
74
|
+
return new Date(intent.expiresAt).getTime() < Date.now();
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/intents/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAEnD,SAAS,gBAAgB;IACvB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,IAA0E;IAE1E,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,OAAO;QACL,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,UAAU,EAAE;QACtB,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;QAC5B,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC,WAAW,EAAE;QAChE,GAAG,IAAI;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,MAAkB;IAC3C,gBAAgB,EAAE,CAAC;IACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,QAAQ,OAAO,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,QAAQ,WAAW,CAAC,CAAC;IAElE,IAAI,CAAC;QACH,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACjE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC;YACH,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,UAAU,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,QAAQ,OAAO,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,QAAQ,OAAO,CAAC,CAAC;IACvD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAkB;IAChD,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3D,CAAC"}
|