@andrewkimjoseph/celina 0.2.2 → 0.2.3

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.
@@ -0,0 +1,61 @@
1
+ export declare const goodDollarIdentityAbi: readonly [{
2
+ readonly name: "identities";
3
+ readonly type: "function";
4
+ readonly stateMutability: "view";
5
+ readonly inputs: readonly [{
6
+ readonly name: "account";
7
+ readonly type: "address";
8
+ }];
9
+ readonly outputs: readonly [{
10
+ readonly name: "dateAuthenticated";
11
+ readonly type: "uint256";
12
+ }, {
13
+ readonly name: "dateAdded";
14
+ readonly type: "uint256";
15
+ }, {
16
+ readonly name: "did";
17
+ readonly type: "string";
18
+ }, {
19
+ readonly name: "whitelistedOnChainId";
20
+ readonly type: "uint256";
21
+ }, {
22
+ readonly name: "status";
23
+ readonly type: "uint8";
24
+ }, {
25
+ readonly name: "authCount";
26
+ readonly type: "uint32";
27
+ }];
28
+ }, {
29
+ readonly name: "isWhitelisted";
30
+ readonly type: "function";
31
+ readonly stateMutability: "view";
32
+ readonly inputs: readonly [{
33
+ readonly name: "account";
34
+ readonly type: "address";
35
+ }];
36
+ readonly outputs: readonly [{
37
+ readonly name: "";
38
+ readonly type: "bool";
39
+ }];
40
+ }, {
41
+ readonly name: "authenticationPeriod";
42
+ readonly type: "function";
43
+ readonly stateMutability: "view";
44
+ readonly inputs: readonly [];
45
+ readonly outputs: readonly [{
46
+ readonly name: "";
47
+ readonly type: "uint256";
48
+ }];
49
+ }, {
50
+ readonly name: "reverifyDaysOptions";
51
+ readonly type: "function";
52
+ readonly stateMutability: "view";
53
+ readonly inputs: readonly [{
54
+ readonly name: "";
55
+ readonly type: "uint256";
56
+ }];
57
+ readonly outputs: readonly [{
58
+ readonly name: "";
59
+ readonly type: "uint8";
60
+ }];
61
+ }];
@@ -0,0 +1,38 @@
1
+ export const goodDollarIdentityAbi = [
2
+ {
3
+ name: "identities",
4
+ type: "function",
5
+ stateMutability: "view",
6
+ inputs: [{ name: "account", type: "address" }],
7
+ outputs: [
8
+ { name: "dateAuthenticated", type: "uint256" },
9
+ { name: "dateAdded", type: "uint256" },
10
+ { name: "did", type: "string" },
11
+ { name: "whitelistedOnChainId", type: "uint256" },
12
+ { name: "status", type: "uint8" },
13
+ { name: "authCount", type: "uint32" },
14
+ ],
15
+ },
16
+ {
17
+ name: "isWhitelisted",
18
+ type: "function",
19
+ stateMutability: "view",
20
+ inputs: [{ name: "account", type: "address" }],
21
+ outputs: [{ name: "", type: "bool" }],
22
+ },
23
+ {
24
+ name: "authenticationPeriod",
25
+ type: "function",
26
+ stateMutability: "view",
27
+ inputs: [],
28
+ outputs: [{ name: "", type: "uint256" }],
29
+ },
30
+ {
31
+ name: "reverifyDaysOptions",
32
+ type: "function",
33
+ stateMutability: "view",
34
+ inputs: [{ name: "", type: "uint256" }],
35
+ outputs: [{ name: "", type: "uint8" }],
36
+ },
37
+ ];
38
+ //# sourceMappingURL=gooddollar-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gooddollar-identity.js","sourceRoot":"","sources":["../../src/abis/gooddollar-identity.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,MAAM;QACvB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC9C,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE;YAC9C,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE;YACtC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC/B,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,SAAS,EAAE;YACjD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;YACjC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;SACtC;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,MAAM;QACvB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC9C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;KACtC;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,MAAM;QACvB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;KACzC;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,MAAM;QACvB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACvC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;KACvC;CACqB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const GOODDOLLAR_IDENTITY_ADDRESS: "0xC361A6E67822a0EDc17D899227dd9FC50BD62F42";
@@ -0,0 +1,2 @@
1
+ export const GOODDOLLAR_IDENTITY_ADDRESS = "0xC361A6E67822a0EDc17D899227dd9FC50BD62F42";
2
+ //# sourceMappingURL=gooddollar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gooddollar.js","sourceRoot":"","sources":["../../src/config/gooddollar.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GACtC,4CAAqD,CAAC"}
@@ -3,6 +3,7 @@ import { BlockchainService } from "../services/blockchain.service.js";
3
3
  import { AccountService } from "../services/account.service.js";
4
4
  import { TokenService } from "../services/token.service.js";
5
5
  import { TransactionService } from "../services/transaction.service.js";
6
+ import { GoodDollarService } from "../services/gooddollar.service.js";
6
7
  export interface AppContext {
7
8
  config: {
8
9
  hasWallet: boolean;
@@ -12,5 +13,6 @@ export interface AppContext {
12
13
  account: AccountService;
13
14
  token: TokenService;
14
15
  transaction: TransactionService;
16
+ gooddollar: GoodDollarService;
15
17
  }
16
18
  export declare function createAppContext(clientFactory: CeloClientFactory, walletAddress?: `0x${string}`): AppContext;
@@ -2,6 +2,7 @@ import { BlockchainService } from "../services/blockchain.service.js";
2
2
  import { AccountService } from "../services/account.service.js";
3
3
  import { TokenService } from "../services/token.service.js";
4
4
  import { TransactionService } from "../services/transaction.service.js";
5
+ import { GoodDollarService } from "../services/gooddollar.service.js";
5
6
  export function createAppContext(clientFactory, walletAddress) {
6
7
  return {
7
8
  config: {
@@ -12,6 +13,7 @@ export function createAppContext(clientFactory, walletAddress) {
12
13
  account: new AccountService(clientFactory),
13
14
  token: new TokenService(clientFactory),
14
15
  transaction: new TransactionService(clientFactory),
16
+ gooddollar: new GoodDollarService(clientFactory),
15
17
  };
16
18
  }
17
19
  //# sourceMappingURL=app-context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-context.js","sourceRoot":"","sources":["../../src/context/app-context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAaxE,MAAM,UAAU,gBAAgB,CAC9B,aAAgC,EAChC,aAA6B;IAE7B,OAAO;QACL,MAAM,EAAE;YACN,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC;YACjC,aAAa;SACd;QACD,UAAU,EAAE,IAAI,iBAAiB,CAAC,aAAa,CAAC;QAChD,OAAO,EAAE,IAAI,cAAc,CAAC,aAAa,CAAC;QAC1C,KAAK,EAAE,IAAI,YAAY,CAAC,aAAa,CAAC;QACtC,WAAW,EAAE,IAAI,kBAAkB,CAAC,aAAa,CAAC;KACnD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"app-context.js","sourceRoot":"","sources":["../../src/context/app-context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AActE,MAAM,UAAU,gBAAgB,CAC9B,aAAgC,EAChC,aAA6B;IAE7B,OAAO;QACL,MAAM,EAAE;YACN,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC;YACjC,aAAa;SACd;QACD,UAAU,EAAE,IAAI,iBAAiB,CAAC,aAAa,CAAC;QAChD,OAAO,EAAE,IAAI,cAAc,CAAC,aAAa,CAAC;QAC1C,KAAK,EAAE,IAAI,YAAY,CAAC,aAAa,CAAC;QACtC,WAAW,EAAE,IAAI,kBAAkB,CAAC,aAAa,CAAC;QAClD,UAAU,EAAE,IAAI,iBAAiB,CAAC,aAAa,CAAC;KACjD,CAAC;AACJ,CAAC"}
@@ -7,6 +7,7 @@ Guidelines:
7
7
  - Write tools require CELO_PRIVATE_KEY in the server environment.
8
8
  - Known tokens are defined in a single registry: CELO (native), mainnet stablecoins (USDm, EURm, USDC, USDT, etc.), and GoodDollar.
9
9
  - Use get_stablecoin_balances to scan all stablecoins at once; use get_celo_balances with a tokens list for specific symbols.
10
+ - Use get_gooddollar_whitelisting_info to check GoodDollar IdentityV4 whitelist status, whitelisting date, and reverification progress for a wallet.
10
11
 
11
12
  Future tools (add as new modules in src/tools/): lend on Aave, Self verify, Self Agent ID check.
12
13
  `.trim();
@@ -1 +1 @@
1
- {"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/server/instructions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;CAWlC,CAAC,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/server/instructions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;CAYlC,CAAC,IAAI,EAAE,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { CeloClientFactory } from "../clients/celo-client.js";
2
+ export declare class GoodDollarService {
3
+ private readonly clientFactory;
4
+ constructor(clientFactory: CeloClientFactory);
5
+ getWhitelistingInfo(address: `0x${string}`): Promise<{
6
+ address: `0x${string}`;
7
+ contract: "0xC361A6E67822a0EDc17D899227dd9FC50BD62F42";
8
+ isCurrentlyWhitelisted: boolean;
9
+ status: number;
10
+ statusLabel: string;
11
+ whitelistedOn: string | null;
12
+ lastAuthenticatedOn: string | null;
13
+ fieldDescriptions: {
14
+ whitelistedOn: string;
15
+ lastAuthenticatedOn: string;
16
+ };
17
+ reverification: {
18
+ daysSinceLastAuthentication: number;
19
+ currentReverificationPeriodDays: number;
20
+ maxReverificationPeriodDays: number;
21
+ daysUntilReverificationRequired: number;
22
+ reverificationRequiredOn: string;
23
+ reverificationProgressPercent: number;
24
+ isReverificationOverdue: boolean;
25
+ } | null;
26
+ identity: {
27
+ dateAuthenticated: number;
28
+ dateAdded: number;
29
+ did: string;
30
+ whitelistedOnChainId: number;
31
+ status: number;
32
+ authCount: number;
33
+ };
34
+ }>;
35
+ private effectiveAuthCount;
36
+ private fetchReverifyDaysOptions;
37
+ private buildReverificationProgress;
38
+ }
@@ -0,0 +1,127 @@
1
+ import { goodDollarIdentityAbi } from "../abis/gooddollar-identity.js";
2
+ import { GOODDOLLAR_IDENTITY_ADDRESS } from "../config/gooddollar.js";
3
+ import { formatUnixDate } from "../utils/format-date.js";
4
+ const STATUS_LABELS = {
5
+ 0: "none",
6
+ 1: "whitelisted",
7
+ 2: "dao_contract",
8
+ 255: "blacklisted",
9
+ };
10
+ // Post-upgrade users authenticated before this timestamp use the last reverify step.
11
+ const LEGACY_AUTH_CUTOFF = 1772697574;
12
+ function statusLabel(status) {
13
+ return STATUS_LABELS[status] ?? "unknown";
14
+ }
15
+ export class GoodDollarService {
16
+ clientFactory;
17
+ constructor(clientFactory) {
18
+ this.clientFactory = clientFactory;
19
+ }
20
+ async getWhitelistingInfo(address) {
21
+ const { public: client } = this.clientFactory.getClients();
22
+ const contract = GOODDOLLAR_IDENTITY_ADDRESS;
23
+ const [identityResult, isCurrentlyWhitelisted, maxReverificationPeriodDays, reverifyDaysOptions,] = await Promise.all([
24
+ client.readContract({
25
+ address: contract,
26
+ abi: goodDollarIdentityAbi,
27
+ functionName: "identities",
28
+ args: [address],
29
+ }),
30
+ client.readContract({
31
+ address: contract,
32
+ abi: goodDollarIdentityAbi,
33
+ functionName: "isWhitelisted",
34
+ args: [address],
35
+ }),
36
+ client.readContract({
37
+ address: contract,
38
+ abi: goodDollarIdentityAbi,
39
+ functionName: "authenticationPeriod",
40
+ }),
41
+ this.fetchReverifyDaysOptions(client, contract),
42
+ ]);
43
+ const [dateAuthenticated, dateAdded, did, whitelistedOnChainId, status, authCount,] = identityResult;
44
+ const statusNum = Number(status);
45
+ const dateAuthenticatedNum = Number(dateAuthenticated);
46
+ const dateAddedNum = Number(dateAdded);
47
+ const authCountNum = Number(authCount);
48
+ let currentReverificationPeriodDays = null;
49
+ if (statusNum === 1 && dateAuthenticatedNum > 0 && reverifyDaysOptions.length > 0) {
50
+ const effectiveAuthCount = this.effectiveAuthCount(dateAuthenticatedNum, authCountNum, reverifyDaysOptions.length);
51
+ currentReverificationPeriodDays =
52
+ reverifyDaysOptions[effectiveAuthCount] ?? null;
53
+ }
54
+ const isWhitelistedStatus = statusNum === 1 && dateAddedNum > 0;
55
+ const reverification = statusNum === 1 && dateAuthenticatedNum > 0 && currentReverificationPeriodDays !== null
56
+ ? this.buildReverificationProgress(dateAuthenticatedNum, currentReverificationPeriodDays, Number(maxReverificationPeriodDays))
57
+ : null;
58
+ return {
59
+ address,
60
+ contract,
61
+ isCurrentlyWhitelisted,
62
+ status: statusNum,
63
+ statusLabel: statusLabel(statusNum),
64
+ whitelistedOn: isWhitelistedStatus ? formatUnixDate(dateAddedNum) : null,
65
+ lastAuthenticatedOn: dateAuthenticatedNum > 0 ? formatUnixDate(dateAuthenticatedNum) : null,
66
+ fieldDescriptions: {
67
+ whitelistedOn: "When the wallet was first added to the GoodDollar whitelist.",
68
+ lastAuthenticatedOn: "When the wallet last verified its identity. Periodic reverification is required to remain whitelisted.",
69
+ },
70
+ reverification,
71
+ identity: {
72
+ dateAuthenticated: dateAuthenticatedNum,
73
+ dateAdded: dateAddedNum,
74
+ did,
75
+ whitelistedOnChainId: Number(whitelistedOnChainId),
76
+ status: statusNum,
77
+ authCount: authCountNum,
78
+ },
79
+ };
80
+ }
81
+ effectiveAuthCount(dateAuthenticated, authCount, optionsLength) {
82
+ if (dateAuthenticated < LEGACY_AUTH_CUTOFF) {
83
+ return optionsLength - 1;
84
+ }
85
+ if (authCount >= optionsLength) {
86
+ return 0;
87
+ }
88
+ return authCount;
89
+ }
90
+ async fetchReverifyDaysOptions(client, contract) {
91
+ const options = [];
92
+ for (let index = 0; index < 8; index++) {
93
+ try {
94
+ const value = await client.readContract({
95
+ address: contract,
96
+ abi: goodDollarIdentityAbi,
97
+ functionName: "reverifyDaysOptions",
98
+ args: [BigInt(index)],
99
+ });
100
+ options.push(Number(value));
101
+ }
102
+ catch {
103
+ break;
104
+ }
105
+ }
106
+ return options;
107
+ }
108
+ buildReverificationProgress(dateAuthenticated, currentReverificationPeriodDays, maxReverificationPeriodDays) {
109
+ const nowSec = Math.floor(Date.now() / 1000);
110
+ const daysSinceLastAuthentication = Math.floor((nowSec - dateAuthenticated) / 86400);
111
+ const daysUntilReverificationRequired = currentReverificationPeriodDays - daysSinceLastAuthentication;
112
+ const reverificationRequiredTimestamp = dateAuthenticated + currentReverificationPeriodDays * 86400;
113
+ const isReverificationOverdue = daysUntilReverificationRequired < 0;
114
+ const reverificationProgressPercent = Math.min(100, Math.max(0, Math.round((daysSinceLastAuthentication / currentReverificationPeriodDays) *
115
+ 100)));
116
+ return {
117
+ daysSinceLastAuthentication,
118
+ currentReverificationPeriodDays,
119
+ maxReverificationPeriodDays,
120
+ daysUntilReverificationRequired,
121
+ reverificationRequiredOn: formatUnixDate(reverificationRequiredTimestamp),
122
+ reverificationProgressPercent,
123
+ isReverificationOverdue,
124
+ };
125
+ }
126
+ }
127
+ //# sourceMappingURL=gooddollar.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gooddollar.service.js","sourceRoot":"","sources":["../../src/services/gooddollar.service.ts"],"names":[],"mappings":"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"}
@@ -66,6 +66,10 @@ export class TransactionService {
66
66
  if (!wallet || !from) {
67
67
  throw new Error("Wallet client unavailable. Provide encryptedPrivateKey or set CELO_PRIVATE_KEY.");
68
68
  }
69
+ const account = wallet.account;
70
+ if (!account) {
71
+ throw new Error("Wallet account unavailable.");
72
+ }
69
73
  const resolved = this.tokenService.resolveToken(token);
70
74
  const chain = client.chain;
71
75
  if (!chain) {
@@ -74,7 +78,7 @@ export class TransactionService {
74
78
  if (resolved.address === "native") {
75
79
  const hash = await wallet.sendTransaction({
76
80
  chain,
77
- account: from,
81
+ account,
78
82
  to,
79
83
  value: parseEther(amount),
80
84
  });
@@ -92,7 +96,7 @@ export class TransactionService {
92
96
  const tokenAmount = this.tokenService.parseAmount(amount, resolved.decimals);
93
97
  const hash = await wallet.writeContract({
94
98
  chain,
95
- account: from,
99
+ account,
96
100
  address: resolved.address,
97
101
  abi: erc20Abi,
98
102
  functionName: "transfer",
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.service.js","sourceRoot":"","sources":["../../src/services/transaction.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transaction.service.js","sourceRoot":"","sources":["../../src/services/transaction.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,OAAO,kBAAkB;IAGA;IAFZ,YAAY,CAAe;IAE5C,YAA6B,aAAgC;QAAhC,kBAAa,GAAb,aAAa,CAAmB;QAC3D,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC;IAEO,cAAc,CAAC,mBAA4B;QACjD,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,UAAU,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CACb,2IAA2I,CAC5I,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,EAAiB,EACjB,KAAa,EACb,MAAc,EACd,mBAA4B;QAE5B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,cAAc,CAClE,mBAAmB,CACpB,CAAC;QAEF,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAEvD,IAAI,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;gBACnC,OAAO,EAAE,IAAI;gBACb,EAAE;gBACF,KAAK;aACN,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,SAAS;gBAClB,IAAI;gBACJ,EAAE;gBACF,KAAK,EAAE,QAAQ,CAAC,MAAM;gBACtB,MAAM;gBACN,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;aACpB,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,kBAAkB,CAAC;YAC9B,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,UAAU;YACxB,IAAI,EAAE,CAAC,EAAE,EAAE,WAAW,CAAC;SACxB,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;YACnC,OAAO,EAAE,IAAI;YACb,EAAE,EAAE,QAAQ,CAAC,OAAO;YACpB,IAAI;SACL,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,IAAI;YACJ,EAAE;YACF,KAAK,EAAE,QAAQ,CAAC,MAAM;YACtB,MAAM;YACN,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;SACpB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CACb,EAAiB,EACjB,KAAa,EACb,MAAc,EACd,mBAA4B;QAE5B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,cAAc,CAC1E,mBAAmB,CACpB,CAAC;QAEF,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC;gBACxC,KAAK;gBACL,OAAO;gBACP,EAAE;gBACF,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC;aAC1B,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,OAAO;gBACL,OAAO,EAAE,SAAS;gBAClB,IAAI;gBACJ,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,IAAI;gBACJ,EAAE;gBACF,KAAK,EAAE,QAAQ,CAAC,MAAM;gBACtB,MAAM;aACP,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;YACtC,KAAK;YACL,OAAO;YACP,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,UAAU;YACxB,IAAI,EAAE,CAAC,EAAE,EAAE,WAAW,CAAC;SACxB,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,IAAI;YACJ,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI;YACJ,EAAE;YACF,KAAK,EAAE,QAAQ,CAAC,MAAM;YACtB,MAAM;SACP,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,OAAe,EAAE,MAAc;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAEnD,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,iBAAiB;YACzB,OAAO,EACL,0HAA0H;YAC5H,SAAS,EAAE,IAAI,CAAC,MAAM;YACtB,OAAO,EAAE,EAAE,CAAC,MAAM;YAClB,MAAM;YACN,QAAQ,EACN,iFAAiF;SACpF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ import type { ToolModule } from "./types.js";
2
+ export declare const gooddollarTools: ToolModule;
@@ -0,0 +1,23 @@
1
+ import { z } from "zod";
2
+ import { addressSchema } from "../schemas/common.js";
3
+ import { err, ok } from "./helpers.js";
4
+ export const gooddollarTools = {
5
+ register(server, ctx) {
6
+ server.registerTool("get_gooddollar_whitelisting_info", {
7
+ title: "Get GoodDollar Whitelisting Info",
8
+ description: "Returns GoodDollar IdentityV4 whitelisting status for a wallet, including when it was whitelisted, last authentication date, and reverification progress.",
9
+ inputSchema: z.object({
10
+ address: addressSchema,
11
+ }),
12
+ annotations: { readOnlyHint: true, idempotentHint: true },
13
+ }, async ({ address }) => {
14
+ try {
15
+ return ok(await ctx.gooddollar.getWhitelistingInfo(address));
16
+ }
17
+ catch (error) {
18
+ return err(error instanceof Error ? error.message : String(error));
19
+ }
20
+ });
21
+ },
22
+ };
23
+ //# sourceMappingURL=gooddollar.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gooddollar.tools.js","sourceRoot":"","sources":["../../src/tools/gooddollar.tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,CAAC,MAAM,eAAe,GAAe;IACzC,QAAQ,CAAC,MAAiB,EAAE,GAAe;QACzC,MAAM,CAAC,YAAY,CACjB,kCAAkC,EAClC;YACE,KAAK,EAAE,kCAAkC;YACzC,WAAW,EACT,2JAA2J;YAC7J,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,OAAO,EAAE,aAAa;aACvB,CAAC;YACF,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SAC1D,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YACpB,IAAI,CAAC;gBACH,OAAO,EAAE,CACP,MAAM,GAAG,CAAC,UAAU,CAAC,mBAAmB,CAAC,OAAwB,CAAC,CACnE,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { accountTools, blockchainTools } from "./blockchain.tools.js";
2
+ import { gooddollarTools } from "./gooddollar.tools.js";
2
3
  import { tokenTools } from "./token.tools.js";
3
4
  import { transactionTools } from "./transaction.tools.js";
4
5
  import { walletTools } from "./wallet.tools.js";
@@ -8,6 +9,7 @@ export const toolModules = [
8
9
  tokenTools,
9
10
  walletTools,
10
11
  transactionTools,
12
+ gooddollarTools,
11
13
  ];
12
14
  export function registerAllTools(server, ctx) {
13
15
  for (const module of toolModules) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,eAAe;IACf,YAAY;IACZ,UAAU;IACV,WAAW;IACX,gBAAgB;CACjB,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,GAAe;IACjE,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,eAAe;IACf,YAAY;IACZ,UAAU;IACV,WAAW;IACX,gBAAgB;IAChB,eAAe;CAChB,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,GAAe;IACjE,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function formatUnixDate(unixSeconds: number | bigint): string;
@@ -0,0 +1,12 @@
1
+ export function formatUnixDate(unixSeconds) {
2
+ const date = new Date(Number(unixSeconds) * 1000);
3
+ return new Intl.DateTimeFormat("en-US", {
4
+ month: "long",
5
+ day: "numeric",
6
+ year: "numeric",
7
+ timeZone: "UTC",
8
+ })
9
+ .format(date)
10
+ .replace(",", "");
11
+ }
12
+ //# sourceMappingURL=format-date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-date.js","sourceRoot":"","sources":["../../src/utils/format-date.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAAC,WAA4B;IACzD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;IAClD,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QACtC,KAAK,EAAE,MAAM;QACb,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,KAAK;KAChB,CAAC;SACC,MAAM,CAAC,IAAI,CAAC;SACZ,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACtB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andrewkimjoseph/celina",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "Celina — MCP server for Celo mainnet. Balances, transfers, swaps, and chain reads for LLM agents.",
5
5
  "type": "module",
6
6
  "main": "build/index.js",