paygate-mcp 10.13.0 → 10.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,129 @@
1
+ /**
2
+ * ABTestingManager — Experiment management with traffic splitting and metric tracking.
3
+ *
4
+ * Create experiments with variant groups, deterministically assign keys to variants,
5
+ * record metrics per variant, and compute basic statistical results.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * const mgr = new ABTestingManager();
10
+ *
11
+ * mgr.createExperiment({
12
+ * name: 'pricing_test',
13
+ * variants: [
14
+ * { name: 'control', weight: 50, config: { priceMultiplier: 1.0 } },
15
+ * { name: 'higher_price', weight: 50, config: { priceMultiplier: 1.5 } },
16
+ * ],
17
+ * });
18
+ *
19
+ * const variant = mgr.assignVariant('pricing_test', 'key_abc');
20
+ * mgr.recordMetric('pricing_test', 'key_abc', 'revenue', 10);
21
+ * ```
22
+ */
23
+ export interface Variant {
24
+ name: string;
25
+ weight: number;
26
+ config: Record<string, unknown>;
27
+ }
28
+ export interface Experiment {
29
+ id: string;
30
+ name: string;
31
+ description: string;
32
+ variants: Variant[];
33
+ status: 'draft' | 'running' | 'paused' | 'completed';
34
+ startedAt: number | null;
35
+ completedAt: number | null;
36
+ createdAt: number;
37
+ }
38
+ export interface ExperimentCreateParams {
39
+ name: string;
40
+ description?: string;
41
+ variants: Variant[];
42
+ autoStart?: boolean;
43
+ }
44
+ export interface VariantAssignment {
45
+ experimentName: string;
46
+ key: string;
47
+ variant: string;
48
+ assignedAt: number;
49
+ }
50
+ export interface MetricRecord {
51
+ experimentName: string;
52
+ key: string;
53
+ variant: string;
54
+ metric: string;
55
+ value: number;
56
+ timestamp: number;
57
+ }
58
+ export interface VariantMetrics {
59
+ variant: string;
60
+ sampleSize: number;
61
+ metrics: Map<string, {
62
+ count: number;
63
+ sum: number;
64
+ avg: number;
65
+ min: number;
66
+ max: number;
67
+ }>;
68
+ }
69
+ export interface ExperimentResults {
70
+ name: string;
71
+ status: string;
72
+ totalAssignments: number;
73
+ variants: VariantMetrics[];
74
+ }
75
+ export interface ABTestingConfig {
76
+ /** Max experiments. Default 100. */
77
+ maxExperiments?: number;
78
+ /** Max assignments per experiment. Default 100000. */
79
+ maxAssignments?: number;
80
+ }
81
+ export interface ABTestingStats {
82
+ totalExperiments: number;
83
+ runningExperiments: number;
84
+ completedExperiments: number;
85
+ totalAssignments: number;
86
+ totalMetrics: number;
87
+ }
88
+ export declare class ABTestingManager {
89
+ private experiments;
90
+ private assignments;
91
+ private metrics;
92
+ private nextId;
93
+ private maxExperiments;
94
+ private maxAssignments;
95
+ constructor(config?: ABTestingConfig);
96
+ /** Create an experiment. */
97
+ createExperiment(params: ExperimentCreateParams): Experiment;
98
+ /** Get experiment by name. */
99
+ getExperimentByName(name: string): Experiment | null;
100
+ /** Get experiment by ID. */
101
+ getExperiment(id: string): Experiment | null;
102
+ /** List all experiments. */
103
+ listExperiments(): Experiment[];
104
+ /** Start an experiment. */
105
+ startExperiment(name: string): void;
106
+ /** Pause an experiment. */
107
+ pauseExperiment(name: string): void;
108
+ /** Complete an experiment. */
109
+ completeExperiment(name: string): void;
110
+ /** Remove an experiment. */
111
+ removeExperiment(name: string): boolean;
112
+ /** Assign a key to a variant (deterministic). */
113
+ assignVariant(experimentName: string, key: string): VariantAssignment;
114
+ /** Get the variant assignment for a key. */
115
+ getAssignment(experimentName: string, key: string): VariantAssignment | null;
116
+ /** Get variant config for an assigned key. */
117
+ getVariantConfig(experimentName: string, key: string): Record<string, unknown> | null;
118
+ /** Get all assignments for an experiment. */
119
+ getAssignments(experimentName: string): VariantAssignment[];
120
+ /** Record a metric for a key in an experiment. */
121
+ recordMetric(experimentName: string, key: string, metric: string, value: number): MetricRecord;
122
+ /** Get experiment results with per-variant metrics. */
123
+ getResults(experimentName: string): ExperimentResults;
124
+ getStats(): ABTestingStats;
125
+ /** Clear all data. */
126
+ destroy(): void;
127
+ private hashKey;
128
+ }
129
+ //# sourceMappingURL=ab-testing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ab-testing.d.ts","sourceRoot":"","sources":["../src/ab-testing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,290 @@
1
+ "use strict";
2
+ /**
3
+ * ABTestingManager — Experiment management with traffic splitting and metric tracking.
4
+ *
5
+ * Create experiments with variant groups, deterministically assign keys to variants,
6
+ * record metrics per variant, and compute basic statistical results.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * const mgr = new ABTestingManager();
11
+ *
12
+ * mgr.createExperiment({
13
+ * name: 'pricing_test',
14
+ * variants: [
15
+ * { name: 'control', weight: 50, config: { priceMultiplier: 1.0 } },
16
+ * { name: 'higher_price', weight: 50, config: { priceMultiplier: 1.5 } },
17
+ * ],
18
+ * });
19
+ *
20
+ * const variant = mgr.assignVariant('pricing_test', 'key_abc');
21
+ * mgr.recordMetric('pricing_test', 'key_abc', 'revenue', 10);
22
+ * ```
23
+ */
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.ABTestingManager = void 0;
26
+ // ── Implementation ───────────────────────────────────────────────────
27
+ class ABTestingManager {
28
+ experiments = new Map();
29
+ assignments = new Map(); // expName → key → assignment
30
+ metrics = [];
31
+ nextId = 1;
32
+ maxExperiments;
33
+ maxAssignments;
34
+ constructor(config = {}) {
35
+ this.maxExperiments = config.maxExperiments ?? 100;
36
+ this.maxAssignments = config.maxAssignments ?? 100_000;
37
+ }
38
+ // ── Experiment Management ──────────────────────────────────────
39
+ /** Create an experiment. */
40
+ createExperiment(params) {
41
+ if (!params.name)
42
+ throw new Error('Experiment name is required');
43
+ if (this.getExperimentByName(params.name)) {
44
+ throw new Error(`Experiment '${params.name}' already exists`);
45
+ }
46
+ if (!params.variants || params.variants.length < 2) {
47
+ throw new Error('At least 2 variants are required');
48
+ }
49
+ if (this.experiments.size >= this.maxExperiments) {
50
+ throw new Error(`Maximum ${this.maxExperiments} experiments reached`);
51
+ }
52
+ const totalWeight = params.variants.reduce((s, v) => s + v.weight, 0);
53
+ if (totalWeight <= 0)
54
+ throw new Error('Total variant weight must be positive');
55
+ const experiment = {
56
+ id: `exp_${this.nextId++}`,
57
+ name: params.name,
58
+ description: params.description ?? '',
59
+ variants: params.variants.map(v => ({ ...v })),
60
+ status: params.autoStart ? 'running' : 'draft',
61
+ startedAt: params.autoStart ? Date.now() : null,
62
+ completedAt: null,
63
+ createdAt: Date.now(),
64
+ };
65
+ this.experiments.set(experiment.id, experiment);
66
+ this.assignments.set(experiment.name, new Map());
67
+ return experiment;
68
+ }
69
+ /** Get experiment by name. */
70
+ getExperimentByName(name) {
71
+ for (const exp of this.experiments.values()) {
72
+ if (exp.name === name)
73
+ return exp;
74
+ }
75
+ return null;
76
+ }
77
+ /** Get experiment by ID. */
78
+ getExperiment(id) {
79
+ return this.experiments.get(id) ?? null;
80
+ }
81
+ /** List all experiments. */
82
+ listExperiments() {
83
+ return [...this.experiments.values()];
84
+ }
85
+ /** Start an experiment. */
86
+ startExperiment(name) {
87
+ const exp = this.getExperimentByName(name);
88
+ if (!exp)
89
+ throw new Error(`Experiment '${name}' not found`);
90
+ if (exp.status === 'running')
91
+ return;
92
+ if (exp.status === 'completed')
93
+ throw new Error('Cannot restart completed experiment');
94
+ exp.status = 'running';
95
+ exp.startedAt = exp.startedAt ?? Date.now();
96
+ }
97
+ /** Pause an experiment. */
98
+ pauseExperiment(name) {
99
+ const exp = this.getExperimentByName(name);
100
+ if (!exp)
101
+ throw new Error(`Experiment '${name}' not found`);
102
+ exp.status = 'paused';
103
+ }
104
+ /** Complete an experiment. */
105
+ completeExperiment(name) {
106
+ const exp = this.getExperimentByName(name);
107
+ if (!exp)
108
+ throw new Error(`Experiment '${name}' not found`);
109
+ exp.status = 'completed';
110
+ exp.completedAt = Date.now();
111
+ }
112
+ /** Remove an experiment. */
113
+ removeExperiment(name) {
114
+ const exp = this.getExperimentByName(name);
115
+ if (!exp)
116
+ return false;
117
+ this.experiments.delete(exp.id);
118
+ this.assignments.delete(name);
119
+ this.metrics = this.metrics.filter(m => m.experimentName !== name);
120
+ return true;
121
+ }
122
+ // ── Variant Assignment ─────────────────────────────────────────
123
+ /** Assign a key to a variant (deterministic). */
124
+ assignVariant(experimentName, key) {
125
+ const exp = this.getExperimentByName(experimentName);
126
+ if (!exp)
127
+ throw new Error(`Experiment '${experimentName}' not found`);
128
+ if (exp.status !== 'running')
129
+ throw new Error(`Experiment '${experimentName}' is not running`);
130
+ const expAssignments = this.assignments.get(experimentName);
131
+ // Return existing assignment if already assigned
132
+ const existing = expAssignments.get(key);
133
+ if (existing)
134
+ return existing;
135
+ // Deterministic bucket assignment
136
+ const hash = this.hashKey(`${experimentName}:${key}`);
137
+ const totalWeight = exp.variants.reduce((s, v) => s + v.weight, 0);
138
+ const bucket = hash % totalWeight;
139
+ let cumulative = 0;
140
+ let assignedVariant = exp.variants[0].name;
141
+ for (const variant of exp.variants) {
142
+ cumulative += variant.weight;
143
+ if (bucket < cumulative) {
144
+ assignedVariant = variant.name;
145
+ break;
146
+ }
147
+ }
148
+ const assignment = {
149
+ experimentName,
150
+ key,
151
+ variant: assignedVariant,
152
+ assignedAt: Date.now(),
153
+ };
154
+ if (expAssignments.size >= this.maxAssignments) {
155
+ throw new Error(`Maximum ${this.maxAssignments} assignments reached for experiment`);
156
+ }
157
+ expAssignments.set(key, assignment);
158
+ return assignment;
159
+ }
160
+ /** Get the variant assignment for a key. */
161
+ getAssignment(experimentName, key) {
162
+ return this.assignments.get(experimentName)?.get(key) ?? null;
163
+ }
164
+ /** Get variant config for an assigned key. */
165
+ getVariantConfig(experimentName, key) {
166
+ const assignment = this.getAssignment(experimentName, key);
167
+ if (!assignment)
168
+ return null;
169
+ const exp = this.getExperimentByName(experimentName);
170
+ if (!exp)
171
+ return null;
172
+ const variant = exp.variants.find(v => v.name === assignment.variant);
173
+ return variant?.config ?? null;
174
+ }
175
+ /** Get all assignments for an experiment. */
176
+ getAssignments(experimentName) {
177
+ const m = this.assignments.get(experimentName);
178
+ return m ? [...m.values()] : [];
179
+ }
180
+ // ── Metrics ────────────────────────────────────────────────────
181
+ /** Record a metric for a key in an experiment. */
182
+ recordMetric(experimentName, key, metric, value) {
183
+ const assignment = this.getAssignment(experimentName, key);
184
+ if (!assignment)
185
+ throw new Error(`Key '${key}' not assigned to experiment '${experimentName}'`);
186
+ const record = {
187
+ experimentName,
188
+ key,
189
+ variant: assignment.variant,
190
+ metric,
191
+ value,
192
+ timestamp: Date.now(),
193
+ };
194
+ this.metrics.push(record);
195
+ return record;
196
+ }
197
+ /** Get experiment results with per-variant metrics. */
198
+ getResults(experimentName) {
199
+ const exp = this.getExperimentByName(experimentName);
200
+ if (!exp)
201
+ throw new Error(`Experiment '${experimentName}' not found`);
202
+ const expAssignments = this.assignments.get(experimentName);
203
+ const expMetrics = this.metrics.filter(m => m.experimentName === experimentName);
204
+ // Group metrics by variant
205
+ const variantData = new Map();
206
+ for (const v of exp.variants) {
207
+ variantData.set(v.name, { keys: new Set(), metrics: new Map() });
208
+ }
209
+ // Count assignments per variant
210
+ for (const a of expAssignments.values()) {
211
+ const vd = variantData.get(a.variant);
212
+ if (vd)
213
+ vd.keys.add(a.key);
214
+ }
215
+ // Aggregate metrics
216
+ for (const m of expMetrics) {
217
+ const vd = variantData.get(m.variant);
218
+ if (!vd)
219
+ continue;
220
+ if (!vd.metrics.has(m.metric))
221
+ vd.metrics.set(m.metric, []);
222
+ vd.metrics.get(m.metric).push(m.value);
223
+ }
224
+ const variants = [];
225
+ for (const [variantName, data] of variantData) {
226
+ const metricsMap = new Map();
227
+ for (const [metricName, values] of data.metrics) {
228
+ const sum = values.reduce((s, v) => s + v, 0);
229
+ metricsMap.set(metricName, {
230
+ count: values.length,
231
+ sum,
232
+ avg: values.length > 0 ? sum / values.length : 0,
233
+ min: values.length > 0 ? Math.min(...values) : 0,
234
+ max: values.length > 0 ? Math.max(...values) : 0,
235
+ });
236
+ }
237
+ variants.push({
238
+ variant: variantName,
239
+ sampleSize: data.keys.size,
240
+ metrics: metricsMap,
241
+ });
242
+ }
243
+ return {
244
+ name: experimentName,
245
+ status: exp.status,
246
+ totalAssignments: expAssignments.size,
247
+ variants,
248
+ };
249
+ }
250
+ // ── Stats ───────────────────────────────────────────────────────
251
+ getStats() {
252
+ let running = 0;
253
+ let completed = 0;
254
+ let totalAssignments = 0;
255
+ for (const exp of this.experiments.values()) {
256
+ if (exp.status === 'running')
257
+ running++;
258
+ if (exp.status === 'completed')
259
+ completed++;
260
+ }
261
+ for (const m of this.assignments.values()) {
262
+ totalAssignments += m.size;
263
+ }
264
+ return {
265
+ totalExperiments: this.experiments.size,
266
+ runningExperiments: running,
267
+ completedExperiments: completed,
268
+ totalAssignments,
269
+ totalMetrics: this.metrics.length,
270
+ };
271
+ }
272
+ /** Clear all data. */
273
+ destroy() {
274
+ this.experiments.clear();
275
+ this.assignments.clear();
276
+ this.metrics = [];
277
+ }
278
+ // ── Private ─────────────────────────────────────────────────────
279
+ hashKey(input) {
280
+ let hash = 0;
281
+ for (let i = 0; i < input.length; i++) {
282
+ const chr = input.charCodeAt(i);
283
+ hash = ((hash << 5) - hash) + chr;
284
+ hash |= 0;
285
+ }
286
+ return Math.abs(hash);
287
+ }
288
+ }
289
+ exports.ABTestingManager = ABTestingManager;
290
+ //# sourceMappingURL=ab-testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ab-testing.js","sourceRoot":"","sources":["../src/ab-testing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * AuditTrailManager — Compliance-ready audit trail with tamper detection.
3
+ *
4
+ * Records every significant action with actor, target, and metadata.
5
+ * Uses hash chains for tamper detection — each entry's hash includes
6
+ * the previous entry's hash, creating a verifiable chain of custody.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * const audit = new AuditTrailManager();
11
+ *
12
+ * audit.record({
13
+ * action: 'key.created',
14
+ * actor: 'admin_1',
15
+ * target: 'key_abc',
16
+ * details: { credits: 1000 },
17
+ * });
18
+ *
19
+ * const entries = audit.query({ actor: 'admin_1' });
20
+ * const valid = audit.verifyChain(); // true if no tampering
21
+ * ```
22
+ */
23
+ export interface AuditEntry {
24
+ id: string;
25
+ sequence: number;
26
+ action: string;
27
+ actor: string;
28
+ actorType?: string;
29
+ target: string;
30
+ targetType?: string;
31
+ details: Record<string, unknown>;
32
+ timestamp: number;
33
+ /** IP address or origin. */
34
+ source?: string;
35
+ /** Hash of this entry (includes previous hash for chain). */
36
+ hash: string;
37
+ /** Hash of the previous entry. */
38
+ previousHash: string;
39
+ }
40
+ export interface AuditRecordParams {
41
+ action: string;
42
+ actor: string;
43
+ actorType?: string;
44
+ target: string;
45
+ targetType?: string;
46
+ details?: Record<string, unknown>;
47
+ source?: string;
48
+ }
49
+ export interface AuditQuery {
50
+ action?: string;
51
+ actions?: string[];
52
+ actor?: string;
53
+ actorType?: string;
54
+ target?: string;
55
+ targetType?: string;
56
+ startTime?: number;
57
+ endTime?: number;
58
+ limit?: number;
59
+ offset?: number;
60
+ }
61
+ export interface AuditQueryResult {
62
+ entries: AuditEntry[];
63
+ total: number;
64
+ hasMore: boolean;
65
+ }
66
+ export interface ChainVerification {
67
+ valid: boolean;
68
+ totalEntries: number;
69
+ firstBrokenAt?: number;
70
+ brokenEntry?: string;
71
+ }
72
+ export interface AuditTrailConfig {
73
+ maxEntries?: number;
74
+ }
75
+ export interface AuditTrailStats {
76
+ totalEntries: number;
77
+ totalActors: number;
78
+ totalActions: number;
79
+ chainValid: boolean;
80
+ oldestEntry: number | null;
81
+ newestEntry: number | null;
82
+ }
83
+ export declare class AuditTrailManager {
84
+ private entries;
85
+ private sequence;
86
+ private maxEntries;
87
+ private lastHash;
88
+ constructor(config?: AuditTrailConfig);
89
+ /** Record an audit entry. Returns the entry ID. */
90
+ record(params: AuditRecordParams): string;
91
+ /** Record multiple entries. */
92
+ recordBatch(params: AuditRecordParams[]): string[];
93
+ /** Query audit entries with filters. */
94
+ query(q?: AuditQuery): AuditQueryResult;
95
+ /** Get a single entry by ID. */
96
+ getEntry(id: string): AuditEntry | null;
97
+ /** Get all entries for a specific target. */
98
+ getTargetHistory(target: string): AuditEntry[];
99
+ /** Get all entries by a specific actor. */
100
+ getActorHistory(actor: string): AuditEntry[];
101
+ /** Verify the integrity of the audit chain. */
102
+ verifyChain(): ChainVerification;
103
+ /** Get action frequency counts. */
104
+ getActionCounts(): Map<string, number>;
105
+ /** Get unique actors. */
106
+ getActors(): string[];
107
+ /** Get unique targets. */
108
+ getTargets(): string[];
109
+ getStats(): AuditTrailStats;
110
+ /** Clear all data. */
111
+ destroy(): void;
112
+ /** Simple hash function for chain integrity. Production should use crypto. */
113
+ private simpleHash;
114
+ }
115
+ //# sourceMappingURL=audit-trail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-trail.d.ts","sourceRoot":"","sources":["../src/audit-trail.ts"],"names":[],"mappings":"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"}