@andrewkimjoseph/celina-sdk 0.7.2 → 0.7.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.
- package/README.md +1 -1
- package/build/analytics/amplitude.d.ts +6 -2
- package/build/analytics/amplitude.js +7 -2
- package/build/analytics/amplitude.js.map +1 -1
- package/build/analytics/wallet-context.d.ts +11 -0
- package/build/analytics/wallet-context.js +81 -0
- package/build/analytics/wallet-context.js.map +1 -0
- package/build/analytics/wallet-extract.d.ts +9 -0
- package/build/analytics/wallet-extract.js +18 -0
- package/build/analytics/wallet-extract.js.map +1 -0
- package/build/analytics/wrap-service.js +5 -3
- package/build/analytics/wrap-service.js.map +1 -1
- package/build/config/sdk-config.d.ts +5 -0
- package/build/config/sdk-config.js +1 -0
- package/build/config/sdk-config.js.map +1 -1
- package/build/index.d.ts +1 -0
- package/build/index.js +1 -0
- package/build/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -44,7 +44,7 @@ For MCP servers and chat APIs (Vercel AI SDK, etc.), import shared tool definiti
|
|
|
44
44
|
- [Carbon DeFi on Celo](docs/guides/carbon.md) — hybrid REST + `@bancor/carbon-sdk` (25 operations)
|
|
45
45
|
- [GoodDollar](docs/guides/gooddollar.md) — UBI whitelist/claim and G$ ↔ USDm reserve swaps
|
|
46
46
|
- [Self Agent ID](docs/guides/self-agent-id.md) — verify, register, refresh human-backed agents
|
|
47
|
-
- [Telemetry](docs/guides/telemetry.md) — optional Amplitude read metrics (`CELINA_ANALYTICS_DISABLED=1`)
|
|
47
|
+
- [Telemetry](docs/guides/telemetry.md) — optional Amplitude read metrics (`device_id` per project, `user_id` per wallet; `CELINA_ANALYTICS_DISABLED=1`)
|
|
48
48
|
- [API reference](https://andrewkimjoseph.gitbook.io/celina-sdk/api-reference)
|
|
49
49
|
|
|
50
50
|
Docs source lives in [`docs/`](docs/) in this repository.
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import type { SdkConfig } from "../config/sdk-config.js";
|
|
2
|
+
export type TrackMcpToolContext = {
|
|
3
|
+
methodKey: string;
|
|
4
|
+
args: readonly unknown[];
|
|
5
|
+
};
|
|
2
6
|
/** Test-only hook to assert telemetry without calling Amplitude. */
|
|
3
|
-
export declare function setTrackFnForTests(fn: ((eventName: string, config: SdkConfig) => void) | null): void;
|
|
7
|
+
export declare function setTrackFnForTests(fn: ((eventName: string, config: SdkConfig, context: TrackMcpToolContext, userId: string | undefined) => void) | null): void;
|
|
4
8
|
/** Fire-and-forget MCP tool name event; never throws to callers. */
|
|
5
|
-
export declare function trackMcpTool(eventName: string, config: SdkConfig): void;
|
|
9
|
+
export declare function trackMcpTool(eventName: string, config: SdkConfig, context?: TrackMcpToolContext): void;
|
|
6
10
|
/** Await any queued Amplitude events (e.g. end of a Next.js route via `after()`). */
|
|
7
11
|
export declare function flushCelinaAnalytics(): Promise<void>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { isAnalyticsEnabled, resolveAmplitudeApiKey, resolveDeviceId, } from "./config.js";
|
|
2
|
+
import { resolveAnalyticsWallet } from "./wallet-context.js";
|
|
2
3
|
let initialized = false;
|
|
3
4
|
let testTrackFn = null;
|
|
4
5
|
/** Test-only hook to assert telemetry without calling Amplitude. */
|
|
@@ -25,13 +26,16 @@ async function ensureInit(config) {
|
|
|
25
26
|
}
|
|
26
27
|
}
|
|
27
28
|
/** Fire-and-forget MCP tool name event; never throws to callers. */
|
|
28
|
-
export function trackMcpTool(eventName, config) {
|
|
29
|
+
export function trackMcpTool(eventName, config, context) {
|
|
29
30
|
if (!isAnalyticsEnabled(config)) {
|
|
30
31
|
return;
|
|
31
32
|
}
|
|
33
|
+
const userId = context
|
|
34
|
+
? resolveAnalyticsWallet(context.methodKey, context.args, config)
|
|
35
|
+
: undefined;
|
|
32
36
|
if (testTrackFn) {
|
|
33
37
|
try {
|
|
34
|
-
testTrackFn(eventName, config);
|
|
38
|
+
testTrackFn(eventName, config, context ?? { methodKey: "", args: [] }, userId);
|
|
35
39
|
}
|
|
36
40
|
catch {
|
|
37
41
|
// ignore test hook failures
|
|
@@ -46,6 +50,7 @@ export function trackMcpTool(eventName, config) {
|
|
|
46
50
|
const amplitude = await import("@amplitude/analytics-node");
|
|
47
51
|
await amplitude.track(eventName, undefined, {
|
|
48
52
|
device_id: resolveDeviceId(config),
|
|
53
|
+
...(userId ? { user_id: userId } : {}),
|
|
49
54
|
}).promise;
|
|
50
55
|
// Serverless (Vercel, Lambda) freezes when the handler returns unless we flush.
|
|
51
56
|
await amplitude.flush().promise;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amplitude.js","sourceRoot":"","sources":["../../src/analytics/amplitude.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,GAChB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"amplitude.js","sourceRoot":"","sources":["../../src/analytics/amplitude.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAO7D,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,IAAI,WAAW,GAOJ,IAAI,CAAC;AAEhB,oEAAoE;AACpE,MAAM,UAAU,kBAAkB,CAChC,EAOQ;IAER,WAAW,GAAG,EAAE,CAAC;IACjB,WAAW,GAAG,KAAK,CAAC;AACtB,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,MAAiB;IACzC,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAC5D,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,WAAW,GAAG,IAAI,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,YAAY,CAC1B,SAAiB,EACjB,MAAiB,EACjB,OAA6B;IAE7B,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,OAAO;QACpB,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;QACjE,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QACjF,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;QACD,OAAO;IACT,CAAC;IAED,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,IAAI,CAAC;YACH,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBAChC,OAAO;YACT,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YAC5D,MAAM,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE;gBAC1C,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC;gBAClC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvC,CAAC,CAAC,OAAO,CAAC;YACX,gFAAgF;YAChF,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;AACP,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAC5D,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SdkConfig } from "../config/sdk-config.js";
|
|
2
|
+
/** Validate and normalize a Celo address for telemetry `user_id`. */
|
|
3
|
+
export declare function normalizeWalletAddress(value: unknown): string | undefined;
|
|
4
|
+
/** Extract wallet from read args using catalog-generated rules. */
|
|
5
|
+
export declare function extractWalletFromReadArgs(methodKey: string, args: readonly unknown[]): string | undefined;
|
|
6
|
+
/** Run async/sync work with a request-scoped analytics wallet (singleton SDK clients). */
|
|
7
|
+
export declare function runWithAnalyticsWallet<T>(address: string | undefined, fn: () => T): T;
|
|
8
|
+
/** Resolve wallet for telemetry: read args → ALS → config default. */
|
|
9
|
+
export declare function resolveAnalyticsWallet(methodKey: string, args: readonly unknown[], config: SdkConfig): string | undefined;
|
|
10
|
+
/** Test-only: clear ALS between cases. */
|
|
11
|
+
export declare function resetAnalyticsWalletStorageForTests(): void;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
import { WALLET_EXTRACT_BY_SDK_METHOD } from "./wallet-extract.js";
|
|
3
|
+
const WALLET_RE = /^0x[a-fA-F0-9]{40}$/;
|
|
4
|
+
const analyticsWalletStorage = new AsyncLocalStorage();
|
|
5
|
+
/** Validate and normalize a Celo address for telemetry `user_id`. */
|
|
6
|
+
export function normalizeWalletAddress(value) {
|
|
7
|
+
if (typeof value !== "string") {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
const trimmed = value.trim();
|
|
11
|
+
if (!WALLET_RE.test(trimmed)) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
return trimmed.toLowerCase();
|
|
15
|
+
}
|
|
16
|
+
function walletFromArgValue(value) {
|
|
17
|
+
const direct = normalizeWalletAddress(value);
|
|
18
|
+
if (direct) {
|
|
19
|
+
return direct;
|
|
20
|
+
}
|
|
21
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
22
|
+
for (const key of [
|
|
23
|
+
"address",
|
|
24
|
+
"wallet_address",
|
|
25
|
+
"from",
|
|
26
|
+
"owner",
|
|
27
|
+
"accountAddress",
|
|
28
|
+
"fromAddress",
|
|
29
|
+
]) {
|
|
30
|
+
const nested = normalizeWalletAddress(value[key]);
|
|
31
|
+
if (nested) {
|
|
32
|
+
return nested;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
/** Extract wallet from read args using catalog-generated rules. */
|
|
39
|
+
export function extractWalletFromReadArgs(methodKey, args) {
|
|
40
|
+
const rule = WALLET_EXTRACT_BY_SDK_METHOD[methodKey];
|
|
41
|
+
if (!rule) {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
if (rule.positional !== undefined) {
|
|
45
|
+
const fromPos = walletFromArgValue(args[rule.positional]);
|
|
46
|
+
if (fromPos) {
|
|
47
|
+
return fromPos;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (rule.objectKeys) {
|
|
51
|
+
for (const arg of args) {
|
|
52
|
+
if (!arg || typeof arg !== "object" || Array.isArray(arg)) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const obj = arg;
|
|
56
|
+
for (const key of rule.objectKeys) {
|
|
57
|
+
const found = normalizeWalletAddress(obj[key]);
|
|
58
|
+
if (found) {
|
|
59
|
+
return found;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
/** Run async/sync work with a request-scoped analytics wallet (singleton SDK clients). */
|
|
67
|
+
export function runWithAnalyticsWallet(address, fn) {
|
|
68
|
+
const normalized = normalizeWalletAddress(address);
|
|
69
|
+
return analyticsWalletStorage.run(normalized, fn);
|
|
70
|
+
}
|
|
71
|
+
/** Resolve wallet for telemetry: read args → ALS → config default. */
|
|
72
|
+
export function resolveAnalyticsWallet(methodKey, args, config) {
|
|
73
|
+
return (extractWalletFromReadArgs(methodKey, args) ??
|
|
74
|
+
analyticsWalletStorage.getStore() ??
|
|
75
|
+
normalizeWalletAddress(config.analyticsWalletAddress));
|
|
76
|
+
}
|
|
77
|
+
/** Test-only: clear ALS between cases. */
|
|
78
|
+
export function resetAnalyticsWalletStorageForTests() {
|
|
79
|
+
analyticsWalletStorage.disable();
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=wallet-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-context.js","sourceRoot":"","sources":["../../src/analytics/wallet-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated by scripts/generate-mcp-analytics-map.mjs — do not edit by hand.
|
|
3
|
+
* Catalog-derived rules for extracting wallet addresses from SDK read call args.
|
|
4
|
+
*/
|
|
5
|
+
export type WalletExtractRule = {
|
|
6
|
+
positional?: number;
|
|
7
|
+
objectKeys?: readonly string[];
|
|
8
|
+
};
|
|
9
|
+
export declare const WALLET_EXTRACT_BY_SDK_METHOD: Readonly<Record<string, WalletExtractRule>>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const WALLET_EXTRACT_BY_SDK_METHOD = {
|
|
2
|
+
"account.getAccount": { positional: 0, objectKeys: ["address"] },
|
|
3
|
+
"carbon.getActivity": { objectKeys: ["address", "wallet_address"] },
|
|
4
|
+
"carbon.getStrategies": { positional: 0, objectKeys: ["address", "wallet_address"] },
|
|
5
|
+
"contract.estimateGas": { objectKeys: ["fromAddress"] },
|
|
6
|
+
"gooddollar.getUbiClaimEligibility": { positional: 0, objectKeys: ["address"] },
|
|
7
|
+
"gooddollar.getWhitelistingInfo": { positional: 0, objectKeys: ["address"] },
|
|
8
|
+
"nft.getNftBalance": { objectKeys: ["address"] },
|
|
9
|
+
"self.verifySelfAgent": { objectKeys: ["address"] },
|
|
10
|
+
"staking.getActivatableStakes": { positional: 0, objectKeys: ["address"] },
|
|
11
|
+
"staking.getStakingBalances": { positional: 0, objectKeys: ["address"] },
|
|
12
|
+
"token.getBalances": { objectKeys: ["address"] },
|
|
13
|
+
"token.getStablecoinBalances": { positional: 0, objectKeys: ["address"] },
|
|
14
|
+
"token.getTokenBalance": { positional: 1, objectKeys: ["address"] },
|
|
15
|
+
"transaction.estimateSend": { positional: 1 },
|
|
16
|
+
"transaction.estimateTransaction": { objectKeys: ["from"] },
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=wallet-extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-extract.js","sourceRoot":"","sources":["../../src/analytics/wallet-extract.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,4BAA4B,GAErC;IACF,oBAAoB,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAChE,oBAAoB,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,EAAC,gBAAgB,CAAC,EAAE;IAClE,sBAAsB,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,EAAC,gBAAgB,CAAC,EAAE;IACnF,sBAAsB,EAAE,EAAE,UAAU,EAAE,CAAC,aAAa,CAAC,EAAE;IACvD,mCAAmC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC/E,gCAAgC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC5E,mBAAmB,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAChD,sBAAsB,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACnD,8BAA8B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC1E,4BAA4B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACxE,mBAAmB,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAChD,6BAA6B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACzE,uBAAuB,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACnE,0BAA0B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;IAC7C,iCAAiC,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE;CACnD,CAAC"}
|
|
@@ -14,20 +14,22 @@ export function wrapServiceForAnalytics(serviceKey, service, config) {
|
|
|
14
14
|
if (typeof prop !== "string" || typeof value !== "function") {
|
|
15
15
|
return value;
|
|
16
16
|
}
|
|
17
|
-
const
|
|
17
|
+
const methodKey = `${serviceKey}.${prop}`;
|
|
18
|
+
const eventName = MCP_TOOL_EVENT_BY_SDK_METHOD[methodKey];
|
|
18
19
|
if (!eventName) {
|
|
19
20
|
return value.bind(target);
|
|
20
21
|
}
|
|
21
22
|
const fn = value;
|
|
22
23
|
return (...args) => {
|
|
23
24
|
const result = fn.apply(target, args);
|
|
25
|
+
const context = { methodKey, args };
|
|
24
26
|
if (result !== null && typeof result === "object" && "then" in result) {
|
|
25
27
|
return result.then((resolved) => {
|
|
26
|
-
trackMcpTool(eventName, config);
|
|
28
|
+
trackMcpTool(eventName, config, context);
|
|
27
29
|
return resolved;
|
|
28
30
|
});
|
|
29
31
|
}
|
|
30
|
-
trackMcpTool(eventName, config);
|
|
32
|
+
trackMcpTool(eventName, config, context);
|
|
31
33
|
return result;
|
|
32
34
|
};
|
|
33
35
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap-service.js","sourceRoot":"","sources":["../../src/analytics/wrap-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAEpE;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAAkB,EAClB,OAAU,EACV,MAAiB;IAEjB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;QACxB,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;YACxB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAClD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAC5D,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"wrap-service.js","sourceRoot":"","sources":["../../src/analytics/wrap-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAEpE;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAAkB,EAClB,OAAU,EACV,MAAiB;IAEjB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;QACxB,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;YACxB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAClD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAC5D,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,SAAS,GAAG,GAAG,UAAU,IAAI,IAAI,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,4BAA4B,CAAC,SAAS,CAAC,CAAC;YAC1D,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YAED,MAAM,EAAE,GAAG,KAAwC,CAAC;YACpD,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE;gBAC5B,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACtC,MAAM,OAAO,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;gBACpC,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;oBACtE,OAAQ,MAA2B,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;wBACpD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;wBACzC,OAAO,QAAQ,CAAC;oBAClB,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACzC,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -22,6 +22,11 @@ export interface SdkConfig {
|
|
|
22
22
|
* then `CELINA_ANALYTICS_DEVICE_ID`, then `celina-sdk`.
|
|
23
23
|
*/
|
|
24
24
|
analyticsDeviceId?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Default wallet for read telemetry `user_id` when args omit an address
|
|
27
|
+
* (e.g. MCP session signer with `CELO_PRIVATE_KEY`).
|
|
28
|
+
*/
|
|
29
|
+
analyticsWalletAddress?: string;
|
|
25
30
|
}
|
|
26
31
|
/** Default Celo RPC when `rpcUrl` is omitted. */
|
|
27
32
|
export declare const DEFAULT_RPC_URL = "https://forno.celo.org";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-config.js","sourceRoot":"","sources":["../../src/config/sdk-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"sdk-config.js","sourceRoot":"","sources":["../../src/config/sdk-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAiC7E,iDAAiD;AACjD,MAAM,CAAC,MAAM,eAAe,GAAG,wBAAwB,CAAC;AAExD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAyB;IACxD,MAAM,mBAAmB,GACvB,IAAI,EAAE,mBAAmB;QACzB,CAAC,OAAO,OAAO,KAAK,WAAW;YAC7B,CAAC,CAAE,OAAO,CAAC,GAAG,CAAC,sBAAoD;YACnE,CAAC,CAAC,SAAS,CAAC,CAAC;IAEjB,OAAO;QACL,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,eAAe;QACvC,SAAS,EAAE,IAAI,EAAE,SAAS;QAC1B,iBAAiB,EACf,IAAI,EAAE,iBAAiB;YACvB,OAAO,CAAC,GAAG,CAAC,mBAAmB;YAC/B,4BAA4B;QAC9B,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,IAAI,IAAI;QAClD,mBAAmB;QACnB,WAAW,EACT,IAAI,EAAE,WAAW;YACjB,CAAC,OAAO,OAAO,KAAK,WAAW;gBAC7B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB;gBACjC,CAAC,CAAC,SAAS,CAAC;QAChB,gBAAgB,EAAE,IAAI,EAAE,gBAAgB;QACxC,eAAe,EAAE,IAAI,EAAE,eAAe;QACtC,iBAAiB,EACf,IAAI,EAAE,iBAAiB;YACvB,CAAC,OAAO,OAAO,KAAK,WAAW;gBAC7B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B;gBACxC,CAAC,CAAC,SAAS,CAAC;YACd,yBAAyB,EAAE;QAC7B,sBAAsB,EAAE,IAAI,EAAE,sBAAsB;KACrD,CAAC;AACJ,CAAC"}
|
package/build/index.d.ts
CHANGED
|
@@ -97,3 +97,4 @@ export { selfDemoUrl, SELF_DEMO_NETWORK, SELF_HEADERS, } from "./config/self.js"
|
|
|
97
97
|
export { resolveSelfSessionLinks, formatSelfSessionLinksDisplay, type SelfSessionLinks, } from "./utils/self-format.js";
|
|
98
98
|
export { clearSelfSessionsForTests } from "./services/self-session-store.js";
|
|
99
99
|
export { flushCelinaAnalytics } from "./analytics/amplitude.js";
|
|
100
|
+
export { runWithAnalyticsWallet } from "./analytics/wallet-context.js";
|
package/build/index.js
CHANGED
|
@@ -68,4 +68,5 @@ export { selfDemoUrl, SELF_DEMO_NETWORK, SELF_HEADERS, } from "./config/self.js"
|
|
|
68
68
|
export { resolveSelfSessionLinks, formatSelfSessionLinksDisplay, } from "./utils/self-format.js";
|
|
69
69
|
export { clearSelfSessionsForTests } from "./services/self-session-store.js";
|
|
70
70
|
export { flushCelinaAnalytics } from "./analytics/amplitude.js";
|
|
71
|
+
export { runWithAnalyticsWallet } from "./analytics/wallet-context.js";
|
|
71
72
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|