@apitoll/shared 0.1.0-beta.3 → 0.1.0-beta.5
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/LICENSE +21 -0
- package/dist/env.d.ts +54 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +93 -0
- package/dist/env.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +95 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -1
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +3 -9
- package/dist/utils.js.map +1 -1
- package/package.json +19 -4
- package/dist/utils.test.d.ts +0 -2
- package/dist/utils.test.d.ts.map +0 -1
- package/dist/utils.test.js +0 -522
- package/dist/utils.test.js.map +0 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 TasnidChain
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/env.d.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates required environment variables at startup.
|
|
3
|
+
* Throws a clear error if any are missing.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* ```ts
|
|
7
|
+
* import { validateEnv } from "@apitoll/shared";
|
|
8
|
+
*
|
|
9
|
+
* validateEnv({
|
|
10
|
+
* required: ["SELLER_WALLET", "FACILITATOR_URL"],
|
|
11
|
+
* optional: ["REDIS_URL", "LOG_LEVEL"],
|
|
12
|
+
* });
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export interface EnvValidationConfig {
|
|
16
|
+
/** Environment variables that MUST be set */
|
|
17
|
+
required: string[];
|
|
18
|
+
/** Optional vars — logged as warnings if missing */
|
|
19
|
+
optional?: string[];
|
|
20
|
+
/** Prefix for logging (e.g. "facilitator", "seller-api") */
|
|
21
|
+
service?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface EnvValidationResult {
|
|
24
|
+
valid: boolean;
|
|
25
|
+
missing: string[];
|
|
26
|
+
present: string[];
|
|
27
|
+
warnings: string[];
|
|
28
|
+
}
|
|
29
|
+
export declare function validateEnv(config: EnvValidationConfig): EnvValidationResult;
|
|
30
|
+
/**
|
|
31
|
+
* Safely reads an env var with a typed default.
|
|
32
|
+
*/
|
|
33
|
+
export declare function envString(key: string, defaultValue: string): string;
|
|
34
|
+
export declare function envNumber(key: string, defaultValue: number): number;
|
|
35
|
+
export declare function envBool(key: string, defaultValue: boolean): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Standard health check response shape.
|
|
38
|
+
*/
|
|
39
|
+
export interface HealthCheckResult {
|
|
40
|
+
status: "ok" | "degraded" | "error";
|
|
41
|
+
service: string;
|
|
42
|
+
version: string;
|
|
43
|
+
uptime: number;
|
|
44
|
+
timestamp: string;
|
|
45
|
+
checks: Record<string, {
|
|
46
|
+
status: "ok" | "warn" | "error";
|
|
47
|
+
message?: string;
|
|
48
|
+
}>;
|
|
49
|
+
}
|
|
50
|
+
export declare function createHealthCheck(service: string, version: string, checks: Record<string, () => {
|
|
51
|
+
status: "ok" | "warn" | "error";
|
|
52
|
+
message?: string;
|
|
53
|
+
}>): () => HealthCheckResult;
|
|
54
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB,CA+B5E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAMnE;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAInE;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,IAAI,GAAG,UAAU,GAAG,OAAO,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/E;AAID,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM;IAAE,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAClF,MAAM,iBAAiB,CA0BzB"}
|
package/dist/env.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates required environment variables at startup.
|
|
3
|
+
* Throws a clear error if any are missing.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* ```ts
|
|
7
|
+
* import { validateEnv } from "@apitoll/shared";
|
|
8
|
+
*
|
|
9
|
+
* validateEnv({
|
|
10
|
+
* required: ["SELLER_WALLET", "FACILITATOR_URL"],
|
|
11
|
+
* optional: ["REDIS_URL", "LOG_LEVEL"],
|
|
12
|
+
* });
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export function validateEnv(config) {
|
|
16
|
+
const { required, optional = [], service = "apitoll" } = config;
|
|
17
|
+
const missing = [];
|
|
18
|
+
const present = [];
|
|
19
|
+
const warnings = [];
|
|
20
|
+
for (const key of required) {
|
|
21
|
+
if (process.env[key]) {
|
|
22
|
+
present.push(key);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
missing.push(key);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
for (const key of optional) {
|
|
29
|
+
if (!process.env[key]) {
|
|
30
|
+
warnings.push(`[${service}] Optional env var ${key} is not set`);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
present.push(key);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const valid = missing.length === 0;
|
|
37
|
+
if (!valid) {
|
|
38
|
+
const msg = `[${service}] Missing required environment variables: ${missing.join(", ")}`;
|
|
39
|
+
throw new Error(msg);
|
|
40
|
+
}
|
|
41
|
+
return { valid, missing, present, warnings };
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Safely reads an env var with a typed default.
|
|
45
|
+
*/
|
|
46
|
+
export function envString(key, defaultValue) {
|
|
47
|
+
return process.env[key] || defaultValue;
|
|
48
|
+
}
|
|
49
|
+
export function envNumber(key, defaultValue) {
|
|
50
|
+
const raw = process.env[key];
|
|
51
|
+
if (!raw)
|
|
52
|
+
return defaultValue;
|
|
53
|
+
const parsed = Number(raw);
|
|
54
|
+
if (isNaN(parsed))
|
|
55
|
+
return defaultValue;
|
|
56
|
+
return parsed;
|
|
57
|
+
}
|
|
58
|
+
export function envBool(key, defaultValue) {
|
|
59
|
+
const raw = process.env[key];
|
|
60
|
+
if (!raw)
|
|
61
|
+
return defaultValue;
|
|
62
|
+
return raw === "true" || raw === "1" || raw === "yes";
|
|
63
|
+
}
|
|
64
|
+
const startTime = Date.now();
|
|
65
|
+
export function createHealthCheck(service, version, checks) {
|
|
66
|
+
return () => {
|
|
67
|
+
const checkResults = {};
|
|
68
|
+
let overallStatus = "ok";
|
|
69
|
+
for (const [name, check] of Object.entries(checks)) {
|
|
70
|
+
try {
|
|
71
|
+
const result = check();
|
|
72
|
+
checkResults[name] = result;
|
|
73
|
+
if (result.status === "error")
|
|
74
|
+
overallStatus = "error";
|
|
75
|
+
else if (result.status === "warn" && overallStatus !== "error")
|
|
76
|
+
overallStatus = "degraded";
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
checkResults[name] = { status: "error", message: err instanceof Error ? err.message : String(err) };
|
|
80
|
+
overallStatus = "error";
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
status: overallStatus,
|
|
85
|
+
service,
|
|
86
|
+
version,
|
|
87
|
+
uptime: Math.floor((Date.now() - startTime) / 1000),
|
|
88
|
+
timestamp: new Date().toISOString(),
|
|
89
|
+
checks: checkResults,
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -11,6 +11,10 @@ export type ChainConfig = {
|
|
|
11
11
|
facilitatorUrl: string;
|
|
12
12
|
};
|
|
13
13
|
export declare const DEFAULT_CHAIN_CONFIGS: Record<SupportedChain, ChainConfig>;
|
|
14
|
+
/** Base USDC contract address — single source of truth */
|
|
15
|
+
export declare const BASE_USDC_ADDRESS: string;
|
|
16
|
+
/** Solana USDC mint address — single source of truth */
|
|
17
|
+
export declare const SOLANA_USDC_ADDRESS: string;
|
|
14
18
|
export type PaymentScheme = "exact";
|
|
15
19
|
export interface PaymentRequirement {
|
|
16
20
|
/** Scheme for payment (currently only "exact") */
|
|
@@ -310,6 +314,97 @@ export interface PlatformEvent {
|
|
|
310
314
|
message: string;
|
|
311
315
|
};
|
|
312
316
|
}
|
|
317
|
+
export type MutationType = "preference_boost" | "escrow_enabled" | "chain_optimized" | "topup_adjusted";
|
|
318
|
+
export interface MutationEvent {
|
|
319
|
+
type: MutationType | string;
|
|
320
|
+
from?: string;
|
|
321
|
+
to?: string;
|
|
322
|
+
successRate?: number;
|
|
323
|
+
timestamp: number;
|
|
324
|
+
}
|
|
325
|
+
export interface EvolutionState {
|
|
326
|
+
mutationDepth: number;
|
|
327
|
+
generation: number;
|
|
328
|
+
fitness: number;
|
|
329
|
+
traits: string[];
|
|
330
|
+
preferApitoll?: number;
|
|
331
|
+
escrowEnabled?: boolean;
|
|
332
|
+
preferredChains?: string[];
|
|
333
|
+
autoTopUpThreshold?: number;
|
|
334
|
+
}
|
|
335
|
+
export interface GossipEvent {
|
|
336
|
+
agentId: string;
|
|
337
|
+
endpoint: string;
|
|
338
|
+
chain: SupportedChain;
|
|
339
|
+
amount: number;
|
|
340
|
+
latencyMs: number;
|
|
341
|
+
mutationTriggered: boolean;
|
|
342
|
+
createdAt: number;
|
|
343
|
+
}
|
|
344
|
+
export interface TrendingEndpoint {
|
|
345
|
+
endpoint: string;
|
|
346
|
+
host: string;
|
|
347
|
+
discoveries: number;
|
|
348
|
+
uniqueAgents: number;
|
|
349
|
+
totalVolume: number;
|
|
350
|
+
avgLatencyMs: number;
|
|
351
|
+
chains: string[];
|
|
352
|
+
mutations: number;
|
|
353
|
+
trendingScore: number;
|
|
354
|
+
firstSeen: number;
|
|
355
|
+
lastSeen: number;
|
|
356
|
+
}
|
|
357
|
+
export type ReputationTier = "New" | "Active" | "Trusted" | "Elite";
|
|
358
|
+
export interface ReputationScore {
|
|
359
|
+
identifier: string;
|
|
360
|
+
score: number;
|
|
361
|
+
tier: ReputationTier;
|
|
362
|
+
benefits: {
|
|
363
|
+
feeDiscountPct: number;
|
|
364
|
+
priorityRouting: boolean;
|
|
365
|
+
escrowAccess: boolean;
|
|
366
|
+
mutationEligible: boolean;
|
|
367
|
+
};
|
|
368
|
+
activity: {
|
|
369
|
+
totalTransactions: number;
|
|
370
|
+
totalVolumeUsdc: number;
|
|
371
|
+
uniqueEndpoints: number;
|
|
372
|
+
mutations: number;
|
|
373
|
+
chains: string[];
|
|
374
|
+
};
|
|
375
|
+
evolution?: {
|
|
376
|
+
generation: number;
|
|
377
|
+
fitness: number;
|
|
378
|
+
mutationDepth: number;
|
|
379
|
+
totalMutations: number;
|
|
380
|
+
} | null;
|
|
381
|
+
nextTier?: {
|
|
382
|
+
name: ReputationTier;
|
|
383
|
+
minScore: number;
|
|
384
|
+
pointsNeeded: number;
|
|
385
|
+
} | null;
|
|
386
|
+
}
|
|
387
|
+
export interface LeaderboardEntry {
|
|
388
|
+
agentId: string;
|
|
389
|
+
combinedScore: number;
|
|
390
|
+
reputation: {
|
|
391
|
+
score: number;
|
|
392
|
+
tier: ReputationTier;
|
|
393
|
+
};
|
|
394
|
+
activity: {
|
|
395
|
+
transactions: number;
|
|
396
|
+
totalSpent: number;
|
|
397
|
+
mutations: number;
|
|
398
|
+
uniqueEndpoints: number;
|
|
399
|
+
chains: string[];
|
|
400
|
+
};
|
|
401
|
+
evolution?: {
|
|
402
|
+
generation: number;
|
|
403
|
+
fitness: number;
|
|
404
|
+
mutationDepth: number;
|
|
405
|
+
} | null;
|
|
406
|
+
lastActive: number;
|
|
407
|
+
}
|
|
313
408
|
export interface ApiResponse<T> {
|
|
314
409
|
success: boolean;
|
|
315
410
|
data?: T;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// ─── Chain & Network Types ──────────────────────────────────────
|
|
2
1
|
export const DEFAULT_CHAIN_CONFIGS = {
|
|
3
2
|
base: {
|
|
4
3
|
chain: "base",
|
|
@@ -15,6 +14,10 @@ export const DEFAULT_CHAIN_CONFIGS = {
|
|
|
15
14
|
facilitatorUrl: "https://x402.org/facilitator",
|
|
16
15
|
},
|
|
17
16
|
};
|
|
17
|
+
/** Base USDC contract address — single source of truth */
|
|
18
|
+
export const BASE_USDC_ADDRESS = DEFAULT_CHAIN_CONFIGS.base.usdcAddress;
|
|
19
|
+
/** Solana USDC mint address — single source of truth */
|
|
20
|
+
export const SOLANA_USDC_ADDRESS = DEFAULT_CHAIN_CONFIGS.solana.usdcAddress;
|
|
18
21
|
export const PLAN_LIMITS = {
|
|
19
22
|
free: {
|
|
20
23
|
maxCallsPerDay: 1000,
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,qBAAqB,GAAwC;IACxE,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,aAAa;QACxB,MAAM,EAAE,0BAA0B;QAClC,WAAW,EAAE,4CAA4C;QACzD,cAAc,EAAE,8BAA8B;KAC/C;IACD,MAAM,EAAE;QACN,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE,yCAAyC;QACpD,MAAM,EAAE,qCAAqC;QAC7C,WAAW,EAAE,8CAA8C;QAC3D,cAAc,EAAE,8BAA8B;KAC/C;CACF,CAAC;AAEF,0DAA0D;AAC1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC;AAExE,wDAAwD;AACxD,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,MAAM,CAAC,WAAW,CAAC;AA6M5E,MAAM,CAAC,MAAM,WAAW,GAAiC;IACvD,IAAI,EAAE;QACJ,cAAc,EAAE,IAAI;QACpB,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,sBAAsB,EAAE,CAAC;QACzB,eAAe,EAAE,KAAK;QACtB,gBAAgB,EAAE,KAAK;QACvB,gBAAgB,EAAE,KAAK;QACvB,cAAc,EAAE,KAAK;KACtB;IACD,GAAG,EAAE;QACH,cAAc,EAAE,OAAO;QACvB,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,EAAE;QACd,sBAAsB,EAAE,EAAE;QAC1B,eAAe,EAAE,IAAI;QACrB,gBAAgB,EAAE,IAAI;QACtB,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE,IAAI;KACrB;IACD,UAAU,EAAE;QACV,cAAc,EAAE,QAAQ;QACxB,SAAS,EAAE,QAAQ;QACnB,UAAU,EAAE,QAAQ;QACpB,sBAAsB,EAAE,GAAG;QAC3B,eAAe,EAAE,IAAI;QACrB,gBAAgB,EAAE,IAAI;QACtB,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE,IAAI;KACrB;CACF,CAAC"}
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGxI;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAK3D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAoBT;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,aAAa,CAAC,EAAE,GAChE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.js
CHANGED
|
@@ -62,13 +62,11 @@ export function checkBudgetPolicy(policy, amount, recentTransactions) {
|
|
|
62
62
|
if (todaySpend + amount > policy.dailyCap) {
|
|
63
63
|
return `Adding $${amount} would exceed daily cap of $${policy.dailyCap} (already spent $${todaySpend.toFixed(4)} today)`;
|
|
64
64
|
}
|
|
65
|
-
// Check weekly cap
|
|
65
|
+
// Check weekly cap (rolling 7-day window)
|
|
66
66
|
if (policy.weeklyCap) {
|
|
67
|
-
const
|
|
68
|
-
weekStart.setDate(weekStart.getDate() - weekStart.getDay());
|
|
69
|
-
weekStart.setHours(0, 0, 0, 0);
|
|
67
|
+
const sevenDaysAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
|
|
70
68
|
const weekSpend = recentTransactions
|
|
71
|
-
.filter((tx) => new Date(tx.requestedAt) >=
|
|
69
|
+
.filter((tx) => new Date(tx.requestedAt) >= sevenDaysAgo)
|
|
72
70
|
.reduce((sum, tx) => sum + parseFloat(tx.amount), 0);
|
|
73
71
|
if (weekSpend + amount > policy.weeklyCap) {
|
|
74
72
|
return `Adding $${amount} would exceed weekly cap of $${policy.weeklyCap} (already spent $${weekSpend.toFixed(4)} this week)`;
|
|
@@ -117,7 +115,6 @@ export function generateId(prefix = "") {
|
|
|
117
115
|
export function resolveChains(chains) {
|
|
118
116
|
return chains && chains.length > 0 ? chains : ["base"];
|
|
119
117
|
}
|
|
120
|
-
// ─── Platform Fee Utilities ──────────────────────────────────────
|
|
121
118
|
/**
|
|
122
119
|
* Calculate fee breakdown for a given price and platform fee config.
|
|
123
120
|
* Fee is deducted from the total — buyer pays the listed price,
|
|
@@ -144,7 +141,6 @@ export function getPlatformWallet(chain, feeConfig) {
|
|
|
144
141
|
return undefined;
|
|
145
142
|
return chain === "base" ? feeConfig.platformWalletBase : feeConfig.platformWalletSolana;
|
|
146
143
|
}
|
|
147
|
-
// ─── Plan Enforcement Utilities ──────────────────────────────────
|
|
148
144
|
/**
|
|
149
145
|
* Get the limits for a given plan tier.
|
|
150
146
|
*/
|
|
@@ -166,7 +162,6 @@ export function checkPlanLimit(plan, metric, currentValue) {
|
|
|
166
162
|
}
|
|
167
163
|
return null;
|
|
168
164
|
}
|
|
169
|
-
// ─── Input Validation Utilities ──────────────────────────────────
|
|
170
165
|
/**
|
|
171
166
|
* Validate an Ethereum address (0x + 40 hex chars).
|
|
172
167
|
* Does NOT verify checksum — use viem for that.
|
|
@@ -259,7 +254,6 @@ export async function verifyHmacSignature(payload, secret, providedSignature) {
|
|
|
259
254
|
const expected = await computeHmacSignature(payload, secret);
|
|
260
255
|
return secureCompare(expected, providedSignature);
|
|
261
256
|
}
|
|
262
|
-
// ─── Security Utilities ──────────────────────────────────────────
|
|
263
257
|
/**
|
|
264
258
|
* Generate a cryptographically secure API key with prefix.
|
|
265
259
|
*/
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,26 +1,41 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apitoll/shared",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.5",
|
|
4
4
|
"description": "Shared types and utilities for API Toll packages",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
|
+
"module": "dist/index.js",
|
|
8
9
|
"types": "dist/index.d.ts",
|
|
9
|
-
"
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"default": "./dist/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"files": ["dist", "README.md", "LICENSE"],
|
|
19
|
+
"sideEffects": false,
|
|
10
20
|
"engines": {
|
|
11
21
|
"node": ">=18"
|
|
12
22
|
},
|
|
23
|
+
"homepage": "https://apitoll.com",
|
|
24
|
+
"bugs": "https://github.com/TasnidChain/APITOLL/issues",
|
|
13
25
|
"repository": {
|
|
14
26
|
"type": "git",
|
|
15
|
-
"url": "https://github.com/TasnidChain/APITOLL"
|
|
27
|
+
"url": "https://github.com/TasnidChain/APITOLL",
|
|
28
|
+
"directory": "packages/shared"
|
|
16
29
|
},
|
|
17
30
|
"publishConfig": {
|
|
18
31
|
"access": "public"
|
|
19
32
|
},
|
|
20
33
|
"scripts": {
|
|
21
34
|
"build": "tsc",
|
|
22
|
-
"dev": "tsc --watch"
|
|
35
|
+
"dev": "tsc --watch",
|
|
36
|
+
"test": "vitest"
|
|
23
37
|
},
|
|
38
|
+
"keywords": ["x402", "types", "usdc", "micropayments", "agent", "shared"],
|
|
24
39
|
"devDependencies": {
|
|
25
40
|
"typescript": "^5.4.0"
|
|
26
41
|
}
|
package/dist/utils.test.d.ts
DELETED
package/dist/utils.test.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../src/utils.test.ts"],"names":[],"mappings":""}
|
package/dist/utils.test.js
DELETED
|
@@ -1,522 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { usdcToSmallestUnit, usdcFromSmallestUnit, matchRoute, checkBudgetPolicy, findBudgetPolicy, isVendorAllowed, calculateFeeBreakdown, getPlatformWallet, generateId, resolveChains, secureCompare, clampInt, clampFloat, checkPlanLimit, isOriginAllowed, isValidEvmAddress, isValidSolanaAddress, isValidPaymentAmount, isValidNonce, NonceTracker, computeHmacSignature, verifyHmacSignature, } from "./utils";
|
|
3
|
-
// ─── USDC Conversion ────────────────────────────────────────────
|
|
4
|
-
describe("usdcToSmallestUnit", () => {
|
|
5
|
-
it("converts whole numbers", () => {
|
|
6
|
-
expect(usdcToSmallestUnit("1")).toBe("1000000");
|
|
7
|
-
expect(usdcToSmallestUnit("100")).toBe("100000000");
|
|
8
|
-
});
|
|
9
|
-
it("converts decimals", () => {
|
|
10
|
-
expect(usdcToSmallestUnit("1.50")).toBe("1500000");
|
|
11
|
-
expect(usdcToSmallestUnit("0.005")).toBe("5000");
|
|
12
|
-
});
|
|
13
|
-
it("truncates beyond 6 decimal places", () => {
|
|
14
|
-
expect(usdcToSmallestUnit("1.1234567")).toBe("1123456");
|
|
15
|
-
});
|
|
16
|
-
it("handles zero", () => {
|
|
17
|
-
expect(usdcToSmallestUnit("0")).toBe("0");
|
|
18
|
-
expect(usdcToSmallestUnit("0.000000")).toBe("0");
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
describe("usdcFromSmallestUnit", () => {
|
|
22
|
-
it("converts back to human-readable", () => {
|
|
23
|
-
expect(usdcFromSmallestUnit("1500000")).toBe("1.500000");
|
|
24
|
-
expect(usdcFromSmallestUnit("5000")).toBe("0.005000");
|
|
25
|
-
});
|
|
26
|
-
it("handles zero", () => {
|
|
27
|
-
expect(usdcFromSmallestUnit("0")).toBe("0.000000");
|
|
28
|
-
});
|
|
29
|
-
it("handles large amounts", () => {
|
|
30
|
-
expect(usdcFromSmallestUnit("100000000")).toBe("100.000000");
|
|
31
|
-
});
|
|
32
|
-
it("round-trips correctly", () => {
|
|
33
|
-
const original = "42.123456";
|
|
34
|
-
expect(usdcFromSmallestUnit(usdcToSmallestUnit(original))).toBe(original);
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
// ─── Route Matching ─────────────────────────────────────────────
|
|
38
|
-
describe("matchRoute", () => {
|
|
39
|
-
it("matches exact routes", () => {
|
|
40
|
-
expect(matchRoute("GET", "/api/data", "GET /api/data")).toBe(true);
|
|
41
|
-
});
|
|
42
|
-
it("rejects method mismatch", () => {
|
|
43
|
-
expect(matchRoute("POST", "/api/data", "GET /api/data")).toBe(false);
|
|
44
|
-
});
|
|
45
|
-
it("supports wildcard method", () => {
|
|
46
|
-
expect(matchRoute("GET", "/api/data", "* /api/data")).toBe(true);
|
|
47
|
-
expect(matchRoute("POST", "/api/data", "* /api/data")).toBe(true);
|
|
48
|
-
});
|
|
49
|
-
it("matches path parameters", () => {
|
|
50
|
-
expect(matchRoute("GET", "/api/users/123", "GET /api/users/:id")).toBe(true);
|
|
51
|
-
});
|
|
52
|
-
it("rejects path length mismatch", () => {
|
|
53
|
-
expect(matchRoute("GET", "/api/data/extra", "GET /api/data")).toBe(false);
|
|
54
|
-
});
|
|
55
|
-
it("is case-insensitive on method", () => {
|
|
56
|
-
expect(matchRoute("get", "/api/data", "GET /api/data")).toBe(true);
|
|
57
|
-
});
|
|
58
|
-
it("returns false for malformed patterns", () => {
|
|
59
|
-
expect(matchRoute("GET", "/api/data", "invalid")).toBe(false);
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
// ─── Budget Policy ──────────────────────────────────────────────
|
|
63
|
-
describe("checkBudgetPolicy", () => {
|
|
64
|
-
const policy = {
|
|
65
|
-
type: "budget",
|
|
66
|
-
dailyCap: 50,
|
|
67
|
-
maxPerRequest: 10,
|
|
68
|
-
weeklyCap: 200,
|
|
69
|
-
};
|
|
70
|
-
it("allows valid transactions", () => {
|
|
71
|
-
expect(checkBudgetPolicy(policy, 5, [])).toBeNull();
|
|
72
|
-
});
|
|
73
|
-
it("rejects amounts exceeding per-request limit", () => {
|
|
74
|
-
const result = checkBudgetPolicy(policy, 15, []);
|
|
75
|
-
expect(result).toContain("exceeds max per-request limit");
|
|
76
|
-
});
|
|
77
|
-
it("rejects when daily cap would be exceeded", () => {
|
|
78
|
-
const today = new Date().toISOString();
|
|
79
|
-
const transactions = [
|
|
80
|
-
{ amount: "45", requestedAt: today },
|
|
81
|
-
];
|
|
82
|
-
const result = checkBudgetPolicy(policy, 10, transactions);
|
|
83
|
-
expect(result).toContain("daily cap");
|
|
84
|
-
});
|
|
85
|
-
it("allows when daily spend is under cap", () => {
|
|
86
|
-
const today = new Date().toISOString();
|
|
87
|
-
const transactions = [
|
|
88
|
-
{ amount: "10", requestedAt: today },
|
|
89
|
-
];
|
|
90
|
-
expect(checkBudgetPolicy(policy, 5, transactions)).toBeNull();
|
|
91
|
-
});
|
|
92
|
-
it("ignores transactions from previous days for daily cap", () => {
|
|
93
|
-
const yesterday = new Date();
|
|
94
|
-
yesterday.setDate(yesterday.getDate() - 1);
|
|
95
|
-
yesterday.setHours(0, 0, 0, 0);
|
|
96
|
-
const transactions = [
|
|
97
|
-
{ amount: "49", requestedAt: yesterday.toISOString() },
|
|
98
|
-
];
|
|
99
|
-
expect(checkBudgetPolicy(policy, 5, transactions)).toBeNull();
|
|
100
|
-
});
|
|
101
|
-
it("rejects when weekly cap would be exceeded", () => {
|
|
102
|
-
const today = new Date().toISOString();
|
|
103
|
-
const transactions = [
|
|
104
|
-
{ amount: "195", requestedAt: today },
|
|
105
|
-
];
|
|
106
|
-
const result = checkBudgetPolicy(policy, 10, transactions);
|
|
107
|
-
// This will hit daily cap first since 195 + 10 > 50.
|
|
108
|
-
// Let's construct a case that hits weekly but not daily.
|
|
109
|
-
expect(result).not.toBeNull();
|
|
110
|
-
});
|
|
111
|
-
it("enforces weekly cap across multiple days", () => {
|
|
112
|
-
const policyNoDaily = {
|
|
113
|
-
type: "budget",
|
|
114
|
-
dailyCap: 100,
|
|
115
|
-
maxPerRequest: 50,
|
|
116
|
-
weeklyCap: 200,
|
|
117
|
-
};
|
|
118
|
-
// Transactions spread across the current week
|
|
119
|
-
const daysAgo = (n) => {
|
|
120
|
-
const d = new Date();
|
|
121
|
-
d.setDate(d.getDate() - n);
|
|
122
|
-
return d.toISOString();
|
|
123
|
-
};
|
|
124
|
-
const transactions = [
|
|
125
|
-
{ amount: "80", requestedAt: daysAgo(1) },
|
|
126
|
-
{ amount: "80", requestedAt: daysAgo(2) },
|
|
127
|
-
{ amount: "30", requestedAt: daysAgo(3) },
|
|
128
|
-
];
|
|
129
|
-
const result = checkBudgetPolicy(policyNoDaily, 20, transactions);
|
|
130
|
-
expect(result).toContain("weekly cap");
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
describe("findBudgetPolicy", () => {
|
|
134
|
-
it("finds budget policy in list", () => {
|
|
135
|
-
const policies = [
|
|
136
|
-
{ type: "vendor_acl", allowedVendors: ["*"] },
|
|
137
|
-
{ type: "budget", dailyCap: 50, maxPerRequest: 10 },
|
|
138
|
-
];
|
|
139
|
-
const result = findBudgetPolicy(policies);
|
|
140
|
-
expect(result).toBeDefined();
|
|
141
|
-
expect(result?.type).toBe("budget");
|
|
142
|
-
expect(result?.dailyCap).toBe(50);
|
|
143
|
-
});
|
|
144
|
-
it("returns undefined when no budget policy exists", () => {
|
|
145
|
-
const policies = [
|
|
146
|
-
{ type: "vendor_acl", allowedVendors: ["*"] },
|
|
147
|
-
];
|
|
148
|
-
expect(findBudgetPolicy(policies)).toBeUndefined();
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
// ─── Vendor ACL ─────────────────────────────────────────────────
|
|
152
|
-
describe("isVendorAllowed", () => {
|
|
153
|
-
it("allows all when no ACL policies exist", () => {
|
|
154
|
-
expect(isVendorAllowed([], "any-vendor")).toBe(true);
|
|
155
|
-
});
|
|
156
|
-
it("allows vendors in the allowedVendors list", () => {
|
|
157
|
-
const policies = [
|
|
158
|
-
{ type: "vendor_acl", allowedVendors: ["seller-a", "seller-b"] },
|
|
159
|
-
];
|
|
160
|
-
expect(isVendorAllowed(policies, "seller-a")).toBe(true);
|
|
161
|
-
expect(isVendorAllowed(policies, "seller-b")).toBe(true);
|
|
162
|
-
});
|
|
163
|
-
it("rejects vendors not in the allowedVendors list", () => {
|
|
164
|
-
const policies = [
|
|
165
|
-
{ type: "vendor_acl", allowedVendors: ["seller-a"] },
|
|
166
|
-
];
|
|
167
|
-
expect(isVendorAllowed(policies, "seller-x")).toBe(false);
|
|
168
|
-
});
|
|
169
|
-
it("allows all vendors when wildcard is used", () => {
|
|
170
|
-
const policies = [
|
|
171
|
-
{ type: "vendor_acl", allowedVendors: ["*"] },
|
|
172
|
-
];
|
|
173
|
-
expect(isVendorAllowed(policies, "any-vendor")).toBe(true);
|
|
174
|
-
});
|
|
175
|
-
it("blocks vendors in blockedVendors even if wildcard allows", () => {
|
|
176
|
-
const policies = [
|
|
177
|
-
{
|
|
178
|
-
type: "vendor_acl",
|
|
179
|
-
allowedVendors: ["*"],
|
|
180
|
-
blockedVendors: ["bad-vendor"],
|
|
181
|
-
},
|
|
182
|
-
];
|
|
183
|
-
expect(isVendorAllowed(policies, "bad-vendor")).toBe(false);
|
|
184
|
-
expect(isVendorAllowed(policies, "good-vendor")).toBe(true);
|
|
185
|
-
});
|
|
186
|
-
});
|
|
187
|
-
// ─── Fee Calculation ────────────────────────────────────────────
|
|
188
|
-
describe("calculateFeeBreakdown", () => {
|
|
189
|
-
it("calculates 3% fee (300 bps)", () => {
|
|
190
|
-
const result = calculateFeeBreakdown("10.000000", {
|
|
191
|
-
feeBps: 300,
|
|
192
|
-
platformWalletBase: "0xPlatform",
|
|
193
|
-
});
|
|
194
|
-
expect(result.totalAmount).toBe("10.000000");
|
|
195
|
-
expect(result.platformFee).toBe("0.300000");
|
|
196
|
-
expect(result.sellerAmount).toBe("9.700000");
|
|
197
|
-
expect(result.feeBps).toBe(300);
|
|
198
|
-
});
|
|
199
|
-
it("calculates 0% fee", () => {
|
|
200
|
-
const result = calculateFeeBreakdown("10.000000", { feeBps: 0 });
|
|
201
|
-
expect(result.platformFee).toBe("0.000000");
|
|
202
|
-
expect(result.sellerAmount).toBe("10.000000");
|
|
203
|
-
});
|
|
204
|
-
it("handles no fee config (defaults to 0)", () => {
|
|
205
|
-
const result = calculateFeeBreakdown("5.000000");
|
|
206
|
-
expect(result.platformFee).toBe("0.000000");
|
|
207
|
-
expect(result.sellerAmount).toBe("5.000000");
|
|
208
|
-
});
|
|
209
|
-
it("fee + seller always equals total", () => {
|
|
210
|
-
const amounts = ["0.005", "1.00", "50.123456", "999.999999"];
|
|
211
|
-
const fees = [100, 250, 300, 500, 1000];
|
|
212
|
-
for (const amount of amounts) {
|
|
213
|
-
for (const feeBps of fees) {
|
|
214
|
-
const result = calculateFeeBreakdown(amount, { feeBps });
|
|
215
|
-
const total = BigInt(usdcToSmallestUnit(result.sellerAmount)) +
|
|
216
|
-
BigInt(usdcToSmallestUnit(result.platformFee));
|
|
217
|
-
expect(total.toString()).toBe(usdcToSmallestUnit(result.totalAmount));
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
});
|
|
221
|
-
it("handles micropayment amounts correctly", () => {
|
|
222
|
-
const result = calculateFeeBreakdown("0.005000", { feeBps: 300 });
|
|
223
|
-
// 5000 * 300 / 10000 = 150
|
|
224
|
-
expect(result.platformFee).toBe("0.000150");
|
|
225
|
-
expect(result.sellerAmount).toBe("0.004850");
|
|
226
|
-
});
|
|
227
|
-
});
|
|
228
|
-
describe("getPlatformWallet", () => {
|
|
229
|
-
it("returns base wallet for base chain", () => {
|
|
230
|
-
const config = { feeBps: 300, platformWalletBase: "0xBase", platformWalletSolana: "SolWallet" };
|
|
231
|
-
expect(getPlatformWallet("base", config)).toBe("0xBase");
|
|
232
|
-
});
|
|
233
|
-
it("returns solana wallet for solana chain", () => {
|
|
234
|
-
const config = { feeBps: 300, platformWalletBase: "0xBase", platformWalletSolana: "SolWallet" };
|
|
235
|
-
expect(getPlatformWallet("solana", config)).toBe("SolWallet");
|
|
236
|
-
});
|
|
237
|
-
it("returns undefined when no config", () => {
|
|
238
|
-
expect(getPlatformWallet("base")).toBeUndefined();
|
|
239
|
-
});
|
|
240
|
-
});
|
|
241
|
-
// ─── Utility Functions ──────────────────────────────────────────
|
|
242
|
-
describe("generateId", () => {
|
|
243
|
-
it("generates unique IDs", () => {
|
|
244
|
-
const id1 = generateId("tx");
|
|
245
|
-
const id2 = generateId("tx");
|
|
246
|
-
expect(id1).not.toBe(id2);
|
|
247
|
-
});
|
|
248
|
-
it("applies prefix", () => {
|
|
249
|
-
const id = generateId("tx");
|
|
250
|
-
expect(id.startsWith("tx_")).toBe(true);
|
|
251
|
-
});
|
|
252
|
-
it("works without prefix", () => {
|
|
253
|
-
const id = generateId();
|
|
254
|
-
expect(id).toBeTruthy();
|
|
255
|
-
expect(id.includes("_")).toBe(false);
|
|
256
|
-
});
|
|
257
|
-
});
|
|
258
|
-
describe("resolveChains", () => {
|
|
259
|
-
it("returns provided chains", () => {
|
|
260
|
-
expect(resolveChains(["base", "solana"])).toEqual(["base", "solana"]);
|
|
261
|
-
});
|
|
262
|
-
it("defaults to base when empty", () => {
|
|
263
|
-
expect(resolveChains([])).toEqual(["base"]);
|
|
264
|
-
});
|
|
265
|
-
it("defaults to base when undefined", () => {
|
|
266
|
-
expect(resolveChains()).toEqual(["base"]);
|
|
267
|
-
});
|
|
268
|
-
});
|
|
269
|
-
describe("secureCompare", () => {
|
|
270
|
-
it("returns true for equal strings", () => {
|
|
271
|
-
expect(secureCompare("abc123", "abc123")).toBe(true);
|
|
272
|
-
});
|
|
273
|
-
it("returns false for different strings", () => {
|
|
274
|
-
expect(secureCompare("abc123", "abc124")).toBe(false);
|
|
275
|
-
});
|
|
276
|
-
it("returns false for different lengths", () => {
|
|
277
|
-
expect(secureCompare("short", "longer_string")).toBe(false);
|
|
278
|
-
});
|
|
279
|
-
});
|
|
280
|
-
describe("clampInt", () => {
|
|
281
|
-
it("returns default for null", () => {
|
|
282
|
-
expect(clampInt(null, 1, 100, 10)).toBe(10);
|
|
283
|
-
});
|
|
284
|
-
it("returns default for NaN", () => {
|
|
285
|
-
expect(clampInt("abc", 1, 100, 10)).toBe(10);
|
|
286
|
-
});
|
|
287
|
-
it("clamps to min", () => {
|
|
288
|
-
expect(clampInt("-5", 1, 100, 10)).toBe(1);
|
|
289
|
-
});
|
|
290
|
-
it("clamps to max", () => {
|
|
291
|
-
expect(clampInt("500", 1, 100, 10)).toBe(100);
|
|
292
|
-
});
|
|
293
|
-
it("returns parsed value within range", () => {
|
|
294
|
-
expect(clampInt("42", 1, 100, 10)).toBe(42);
|
|
295
|
-
});
|
|
296
|
-
});
|
|
297
|
-
describe("clampFloat", () => {
|
|
298
|
-
it("returns default for null", () => {
|
|
299
|
-
expect(clampFloat(null, 0, 1, 0.5)).toBe(0.5);
|
|
300
|
-
});
|
|
301
|
-
it("clamps to range", () => {
|
|
302
|
-
expect(clampFloat("1.5", 0, 1, 0.5)).toBe(1);
|
|
303
|
-
expect(clampFloat("-0.5", 0, 1, 0.5)).toBe(0);
|
|
304
|
-
});
|
|
305
|
-
});
|
|
306
|
-
describe("isOriginAllowed", () => {
|
|
307
|
-
it("rejects null origin", () => {
|
|
308
|
-
expect(isOriginAllowed(null, ["https://example.com"])).toBe(false);
|
|
309
|
-
});
|
|
310
|
-
it("allows matching origin", () => {
|
|
311
|
-
expect(isOriginAllowed("https://example.com", ["https://example.com"])).toBe(true);
|
|
312
|
-
});
|
|
313
|
-
it("rejects non-matching origin", () => {
|
|
314
|
-
expect(isOriginAllowed("https://evil.com", ["https://example.com"])).toBe(false);
|
|
315
|
-
});
|
|
316
|
-
it("allows all with wildcard", () => {
|
|
317
|
-
expect(isOriginAllowed("https://anything.com", ["*"])).toBe(true);
|
|
318
|
-
});
|
|
319
|
-
});
|
|
320
|
-
describe("checkPlanLimit", () => {
|
|
321
|
-
it("allows within free plan limits", () => {
|
|
322
|
-
expect(checkPlanLimit("free", "maxAgents", 0)).toBeNull();
|
|
323
|
-
});
|
|
324
|
-
it("rejects when limit exceeded", () => {
|
|
325
|
-
const result = checkPlanLimit("free", "maxAgents", 1);
|
|
326
|
-
expect(result).toContain("Plan limit exceeded");
|
|
327
|
-
});
|
|
328
|
-
it("rejects disabled features", () => {
|
|
329
|
-
const result = checkPlanLimit("free", "webhooksEnabled", 0);
|
|
330
|
-
expect(result).toContain("not available on free plan");
|
|
331
|
-
});
|
|
332
|
-
it("allows features on pro plan", () => {
|
|
333
|
-
expect(checkPlanLimit("pro", "webhooksEnabled", 0)).toBeNull();
|
|
334
|
-
});
|
|
335
|
-
it("allows unlimited on enterprise", () => {
|
|
336
|
-
expect(checkPlanLimit("enterprise", "maxAgents", 99999)).toBeNull();
|
|
337
|
-
});
|
|
338
|
-
});
|
|
339
|
-
// ─── Address Validation ─────────────────────────────────────────
|
|
340
|
-
describe("isValidEvmAddress", () => {
|
|
341
|
-
it("accepts valid lowercase address", () => {
|
|
342
|
-
expect(isValidEvmAddress("0x833589fcd6edb6e08f4c7c32d4f71b54bda02913")).toBe(true);
|
|
343
|
-
});
|
|
344
|
-
it("accepts valid mixed-case address", () => {
|
|
345
|
-
expect(isValidEvmAddress("0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913")).toBe(true);
|
|
346
|
-
});
|
|
347
|
-
it("rejects too-short address", () => {
|
|
348
|
-
expect(isValidEvmAddress("0x1234")).toBe(false);
|
|
349
|
-
});
|
|
350
|
-
it("rejects too-long address", () => {
|
|
351
|
-
expect(isValidEvmAddress("0x" + "a".repeat(41))).toBe(false);
|
|
352
|
-
});
|
|
353
|
-
it("rejects missing 0x prefix", () => {
|
|
354
|
-
expect(isValidEvmAddress("833589fcd6edb6e08f4c7c32d4f71b54bda02913")).toBe(false);
|
|
355
|
-
});
|
|
356
|
-
it("rejects non-hex characters", () => {
|
|
357
|
-
expect(isValidEvmAddress("0x" + "g".repeat(40))).toBe(false);
|
|
358
|
-
expect(isValidEvmAddress("0x" + "Z".repeat(40))).toBe(false);
|
|
359
|
-
});
|
|
360
|
-
it("rejects empty string", () => {
|
|
361
|
-
expect(isValidEvmAddress("")).toBe(false);
|
|
362
|
-
});
|
|
363
|
-
it("rejects bare 0x", () => {
|
|
364
|
-
expect(isValidEvmAddress("0x")).toBe(false);
|
|
365
|
-
});
|
|
366
|
-
});
|
|
367
|
-
describe("isValidSolanaAddress", () => {
|
|
368
|
-
it("accepts valid Solana address", () => {
|
|
369
|
-
expect(isValidSolanaAddress("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v")).toBe(true);
|
|
370
|
-
});
|
|
371
|
-
it("rejects too-short address", () => {
|
|
372
|
-
expect(isValidSolanaAddress("short")).toBe(false);
|
|
373
|
-
});
|
|
374
|
-
it("rejects invalid base58 characters (0, O, I, l)", () => {
|
|
375
|
-
expect(isValidSolanaAddress("0" + "A".repeat(43))).toBe(false);
|
|
376
|
-
expect(isValidSolanaAddress("O" + "A".repeat(43))).toBe(false);
|
|
377
|
-
expect(isValidSolanaAddress("I" + "A".repeat(43))).toBe(false);
|
|
378
|
-
expect(isValidSolanaAddress("l" + "A".repeat(43))).toBe(false);
|
|
379
|
-
});
|
|
380
|
-
it("rejects empty string", () => {
|
|
381
|
-
expect(isValidSolanaAddress("")).toBe(false);
|
|
382
|
-
});
|
|
383
|
-
});
|
|
384
|
-
// ─── Payment Amount Validation ──────────────────────────────────
|
|
385
|
-
describe("isValidPaymentAmount", () => {
|
|
386
|
-
it("accepts valid whole number", () => {
|
|
387
|
-
expect(isValidPaymentAmount("10")).toBe(true);
|
|
388
|
-
});
|
|
389
|
-
it("accepts valid decimal", () => {
|
|
390
|
-
expect(isValidPaymentAmount("0.005")).toBe(true);
|
|
391
|
-
expect(isValidPaymentAmount("1.50")).toBe(true);
|
|
392
|
-
});
|
|
393
|
-
it("rejects zero", () => {
|
|
394
|
-
expect(isValidPaymentAmount("0")).toBe(false);
|
|
395
|
-
expect(isValidPaymentAmount("0.000000")).toBe(false);
|
|
396
|
-
});
|
|
397
|
-
it("rejects negative amounts", () => {
|
|
398
|
-
expect(isValidPaymentAmount("-1")).toBe(false);
|
|
399
|
-
expect(isValidPaymentAmount("-0.005")).toBe(false);
|
|
400
|
-
});
|
|
401
|
-
it("rejects non-numeric strings", () => {
|
|
402
|
-
expect(isValidPaymentAmount("abc")).toBe(false);
|
|
403
|
-
expect(isValidPaymentAmount("")).toBe(false);
|
|
404
|
-
expect(isValidPaymentAmount("1e5")).toBe(false);
|
|
405
|
-
});
|
|
406
|
-
it("rejects amounts with spaces", () => {
|
|
407
|
-
expect(isValidPaymentAmount(" 10 ")).toBe(false);
|
|
408
|
-
});
|
|
409
|
-
});
|
|
410
|
-
// ─── Nonce Validation ───────────────────────────────────────────
|
|
411
|
-
describe("isValidNonce", () => {
|
|
412
|
-
it("accepts valid 32-byte hex nonce", () => {
|
|
413
|
-
const nonce = "0x" + "a1b2c3d4".repeat(8);
|
|
414
|
-
expect(isValidNonce(nonce)).toBe(true);
|
|
415
|
-
});
|
|
416
|
-
it("rejects too-short nonce", () => {
|
|
417
|
-
expect(isValidNonce("0x1234")).toBe(false);
|
|
418
|
-
});
|
|
419
|
-
it("rejects too-long nonce", () => {
|
|
420
|
-
expect(isValidNonce("0x" + "a".repeat(65))).toBe(false);
|
|
421
|
-
});
|
|
422
|
-
it("rejects missing 0x prefix", () => {
|
|
423
|
-
expect(isValidNonce("a".repeat(64))).toBe(false);
|
|
424
|
-
});
|
|
425
|
-
it("rejects non-hex characters", () => {
|
|
426
|
-
expect(isValidNonce("0x" + "g".repeat(64))).toBe(false);
|
|
427
|
-
});
|
|
428
|
-
});
|
|
429
|
-
// ─── Nonce Tracker (Replay Protection) ──────────────────────────
|
|
430
|
-
describe("NonceTracker", () => {
|
|
431
|
-
it("accepts new nonces", () => {
|
|
432
|
-
const tracker = new NonceTracker();
|
|
433
|
-
expect(tracker.tryUse("nonce-1")).toBe(true);
|
|
434
|
-
expect(tracker.tryUse("nonce-2")).toBe(true);
|
|
435
|
-
});
|
|
436
|
-
it("rejects replayed nonces", () => {
|
|
437
|
-
const tracker = new NonceTracker();
|
|
438
|
-
expect(tracker.tryUse("nonce-1")).toBe(true);
|
|
439
|
-
expect(tracker.tryUse("nonce-1")).toBe(false); // replay!
|
|
440
|
-
});
|
|
441
|
-
it("tracks usage count", () => {
|
|
442
|
-
const tracker = new NonceTracker();
|
|
443
|
-
tracker.tryUse("a");
|
|
444
|
-
tracker.tryUse("b");
|
|
445
|
-
tracker.tryUse("c");
|
|
446
|
-
expect(tracker.size).toBe(3);
|
|
447
|
-
});
|
|
448
|
-
it("hasBeenUsed returns correct state", () => {
|
|
449
|
-
const tracker = new NonceTracker();
|
|
450
|
-
expect(tracker.hasBeenUsed("nonce-1")).toBe(false);
|
|
451
|
-
tracker.tryUse("nonce-1");
|
|
452
|
-
expect(tracker.hasBeenUsed("nonce-1")).toBe(true);
|
|
453
|
-
});
|
|
454
|
-
it("evicts oldest entries when maxSize reached", () => {
|
|
455
|
-
const tracker = new NonceTracker(10);
|
|
456
|
-
// Fill to capacity
|
|
457
|
-
for (let i = 0; i < 10; i++) {
|
|
458
|
-
tracker.tryUse(`nonce-${i}`);
|
|
459
|
-
}
|
|
460
|
-
expect(tracker.size).toBe(10);
|
|
461
|
-
// Adding one more should trigger eviction of ~10%
|
|
462
|
-
tracker.tryUse("nonce-new");
|
|
463
|
-
expect(tracker.size).toBeLessThanOrEqual(10);
|
|
464
|
-
});
|
|
465
|
-
it("allows re-use after eviction", () => {
|
|
466
|
-
const tracker = new NonceTracker(5);
|
|
467
|
-
// Fill with nonces 0-4
|
|
468
|
-
for (let i = 0; i < 5; i++) {
|
|
469
|
-
tracker.tryUse(`nonce-${i}`);
|
|
470
|
-
}
|
|
471
|
-
// This triggers eviction — nonce-0 should be evicted (oldest)
|
|
472
|
-
tracker.tryUse("nonce-trigger");
|
|
473
|
-
// nonce-0 was evicted, so it should be usable again
|
|
474
|
-
// (This is the expected limitation of in-memory — production should use DB)
|
|
475
|
-
// Just verify the tracker doesn't crash and stays bounded
|
|
476
|
-
expect(tracker.size).toBeLessThanOrEqual(6);
|
|
477
|
-
});
|
|
478
|
-
});
|
|
479
|
-
// ─── HMAC Webhook Signing ───────────────────────────────────────
|
|
480
|
-
describe("computeHmacSignature", () => {
|
|
481
|
-
it("produces consistent signatures for same input", async () => {
|
|
482
|
-
const sig1 = await computeHmacSignature("hello", "secret");
|
|
483
|
-
const sig2 = await computeHmacSignature("hello", "secret");
|
|
484
|
-
expect(sig1).toBe(sig2);
|
|
485
|
-
});
|
|
486
|
-
it("produces different signatures for different payloads", async () => {
|
|
487
|
-
const sig1 = await computeHmacSignature("payload-a", "secret");
|
|
488
|
-
const sig2 = await computeHmacSignature("payload-b", "secret");
|
|
489
|
-
expect(sig1).not.toBe(sig2);
|
|
490
|
-
});
|
|
491
|
-
it("produces different signatures for different secrets", async () => {
|
|
492
|
-
const sig1 = await computeHmacSignature("payload", "secret-1");
|
|
493
|
-
const sig2 = await computeHmacSignature("payload", "secret-2");
|
|
494
|
-
expect(sig1).not.toBe(sig2);
|
|
495
|
-
});
|
|
496
|
-
it("returns a hex string", async () => {
|
|
497
|
-
const sig = await computeHmacSignature("test", "key");
|
|
498
|
-
expect(sig).toMatch(/^[a-f0-9]{64}$/); // SHA-256 = 32 bytes = 64 hex
|
|
499
|
-
});
|
|
500
|
-
});
|
|
501
|
-
describe("verifyHmacSignature", () => {
|
|
502
|
-
it("verifies valid signature", async () => {
|
|
503
|
-
const payload = '{"type":"transaction.settled"}';
|
|
504
|
-
const secret = "webhook-secret-key";
|
|
505
|
-
const sig = await computeHmacSignature(payload, secret);
|
|
506
|
-
expect(await verifyHmacSignature(payload, secret, sig)).toBe(true);
|
|
507
|
-
});
|
|
508
|
-
it("rejects tampered payload", async () => {
|
|
509
|
-
const secret = "webhook-secret-key";
|
|
510
|
-
const sig = await computeHmacSignature("original", secret);
|
|
511
|
-
expect(await verifyHmacSignature("tampered", secret, sig)).toBe(false);
|
|
512
|
-
});
|
|
513
|
-
it("rejects wrong secret", async () => {
|
|
514
|
-
const payload = "data";
|
|
515
|
-
const sig = await computeHmacSignature(payload, "correct-secret");
|
|
516
|
-
expect(await verifyHmacSignature(payload, "wrong-secret", sig)).toBe(false);
|
|
517
|
-
});
|
|
518
|
-
it("rejects garbage signature", async () => {
|
|
519
|
-
expect(await verifyHmacSignature("data", "secret", "not-a-real-signature")).toBe(false);
|
|
520
|
-
});
|
|
521
|
-
});
|
|
522
|
-
//# sourceMappingURL=utils.test.js.map
|
package/dist/utils.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../src/utils.test.ts"],"names":[],"mappings":"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"}
|