mcp-usage-control 1.0.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.
Files changed (47) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +141 -0
  3. package/dist/index.d.ts +533 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +2131 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/observability.d.ts +154 -0
  8. package/dist/observability.d.ts.map +1 -0
  9. package/dist/observability.js +171 -0
  10. package/dist/observability.js.map +1 -0
  11. package/dist/operational.d.ts +87 -0
  12. package/dist/operational.d.ts.map +1 -0
  13. package/dist/operational.js +193 -0
  14. package/dist/operational.js.map +1 -0
  15. package/dist/progressive-store-conformance.d.ts +4 -0
  16. package/dist/progressive-store-conformance.d.ts.map +1 -0
  17. package/dist/progressive-store-conformance.js +333 -0
  18. package/dist/progressive-store-conformance.js.map +1 -0
  19. package/dist/reconciliation-conformance.d.ts +36 -0
  20. package/dist/reconciliation-conformance.d.ts.map +1 -0
  21. package/dist/reconciliation-conformance.js +211 -0
  22. package/dist/reconciliation-conformance.js.map +1 -0
  23. package/dist/settlement-outcomes.d.ts +24 -0
  24. package/dist/settlement-outcomes.d.ts.map +1 -0
  25. package/dist/settlement-outcomes.js +68 -0
  26. package/dist/settlement-outcomes.js.map +1 -0
  27. package/dist/store-conformance.d.ts +50 -0
  28. package/dist/store-conformance.d.ts.map +1 -0
  29. package/dist/store-conformance.js +378 -0
  30. package/dist/store-conformance.js.map +1 -0
  31. package/dist/thresholds.d.ts +26 -0
  32. package/dist/thresholds.d.ts.map +1 -0
  33. package/dist/thresholds.js +56 -0
  34. package/dist/thresholds.js.map +1 -0
  35. package/dist/vector-store-conformance.d.ts +4 -0
  36. package/dist/vector-store-conformance.d.ts.map +1 -0
  37. package/dist/vector-store-conformance.js +297 -0
  38. package/dist/vector-store-conformance.js.map +1 -0
  39. package/dist/weighted-credits.d.ts +41 -0
  40. package/dist/weighted-credits.d.ts.map +1 -0
  41. package/dist/weighted-credits.js +143 -0
  42. package/dist/weighted-credits.js.map +1 -0
  43. package/dist/windowed-budget-keys.d.ts +36 -0
  44. package/dist/windowed-budget-keys.d.ts.map +1 -0
  45. package/dist/windowed-budget-keys.js +178 -0
  46. package/dist/windowed-budget-keys.js.map +1 -0
  47. package/package.json +113 -0
@@ -0,0 +1,178 @@
1
+ const DAY_SEARCH_SPAN_MS = 3 * 24 * 60 * 60 * 1000;
2
+ const MONTH_SEARCH_SPAN_MS = 40 * 24 * 60 * 60 * 1000;
3
+ /**
4
+ * Create a pure calendar-window budget-key helper.
5
+ *
6
+ * The Store never observes wall-clock rollover. A caller selects a new accounting
7
+ * bucket only by deriving a new key from explicit inputs. The configured time-zone
8
+ * literal is part of key identity, so changing it intentionally selects fresh state
9
+ * instead of silently reusing an old bucket with different boundary semantics.
10
+ */
11
+ export function createWindowedBudgetKey(config) {
12
+ assertPlainRecord(config, 'config');
13
+ assertExactKeys(config, ['period', 'timeZone', 'namespace', 'clock'], ['period', 'timeZone', 'namespace'], 'config');
14
+ if (config.period !== 'calendar-day' && config.period !== 'calendar-month') {
15
+ throw new TypeError('config.period must be "calendar-day" or "calendar-month"');
16
+ }
17
+ assertIdentityString(config.timeZone, 'config.timeZone');
18
+ assertIdentityString(config.namespace, 'config.namespace');
19
+ if (config.clock !== undefined && typeof config.clock !== 'function') {
20
+ throw new TypeError('config.clock must be a function when provided');
21
+ }
22
+ const period = config.period;
23
+ const periodToken = period === 'calendar-day' ? 'day' : 'month';
24
+ const timeZone = config.timeZone;
25
+ const namespace = encodeIdentitySegment(config.namespace, 'config.namespace');
26
+ const timeZoneSegment = encodeIdentitySegment(timeZone, 'config.timeZone');
27
+ const clock = config.clock;
28
+ let formatter;
29
+ try {
30
+ formatter = new Intl.DateTimeFormat('en-US-u-ca-iso8601-nu-latn', {
31
+ timeZone,
32
+ year: 'numeric',
33
+ month: '2-digit',
34
+ day: '2-digit',
35
+ });
36
+ }
37
+ catch {
38
+ throw new RangeError(`config.timeZone is not supported: ${JSON.stringify(timeZone)}`);
39
+ }
40
+ function resolve(input) {
41
+ assertPlainRecord(input, 'input');
42
+ assertExactKeys(input, ['scope', 'id', 'now'], ['scope', 'id'], 'input');
43
+ assertIdentityString(input.scope, 'input.scope');
44
+ assertIdentityString(input.id, 'input.id');
45
+ const instant = input.now ?? clock?.();
46
+ if (instant === undefined) {
47
+ throw new TypeError('input.now is required when config.clock is not configured');
48
+ }
49
+ const date = toValidDate(instant, input.now === undefined ? 'config.clock result' : 'input.now');
50
+ const windowId = formatWindowId(formatter, date, period);
51
+ return {
52
+ timestamp: date.getTime(),
53
+ windowId,
54
+ key: [
55
+ namespace,
56
+ periodToken,
57
+ `tz=${timeZoneSegment}`,
58
+ encodeIdentitySegment(input.scope, 'input.scope'),
59
+ encodeIdentitySegment(input.id, 'input.id'),
60
+ windowId,
61
+ ].join(':'),
62
+ };
63
+ }
64
+ return Object.freeze({
65
+ key(input) {
66
+ return resolve(input).key;
67
+ },
68
+ window(input) {
69
+ const resolved = resolve(input);
70
+ const searchSpanMs = period === 'calendar-day' ? DAY_SEARCH_SPAN_MS : MONTH_SEARCH_SPAN_MS;
71
+ return {
72
+ key: resolved.key,
73
+ startsAt: findWindowBoundary(formatter, period, resolved.windowId, resolved.timestamp, -1, searchSpanMs),
74
+ endsAt: findWindowBoundary(formatter, period, resolved.windowId, resolved.timestamp, 1, searchSpanMs),
75
+ };
76
+ },
77
+ });
78
+ }
79
+ function findWindowBoundary(formatter, period, currentWindowId, timestamp, direction, searchSpanMs) {
80
+ const outside = timestamp + direction * searchSpanMs;
81
+ const outsideDate = new Date(outside);
82
+ if (!Number.isFinite(outsideDate.getTime())) {
83
+ throw new RangeError('accounting window boundary is outside the supported Date range');
84
+ }
85
+ if (formatWindowId(formatter, outsideDate, period) === currentWindowId) {
86
+ throw new RangeError('unable to bracket accounting window boundary');
87
+ }
88
+ let low;
89
+ let high;
90
+ if (direction < 0) {
91
+ low = outside;
92
+ high = timestamp;
93
+ while (low + 1 < high) {
94
+ const mid = low + Math.floor((high - low) / 2);
95
+ if (formatWindowId(formatter, new Date(mid), period) === currentWindowId)
96
+ high = mid;
97
+ else
98
+ low = mid;
99
+ }
100
+ return high;
101
+ }
102
+ low = timestamp;
103
+ high = outside;
104
+ while (low + 1 < high) {
105
+ const mid = low + Math.floor((high - low) / 2);
106
+ if (formatWindowId(formatter, new Date(mid), period) === currentWindowId)
107
+ low = mid;
108
+ else
109
+ high = mid;
110
+ }
111
+ return high;
112
+ }
113
+ function formatWindowId(formatter, date, period) {
114
+ let year;
115
+ let month;
116
+ let day;
117
+ for (const part of formatter.formatToParts(date)) {
118
+ if (part.type === 'year')
119
+ year = part.value;
120
+ else if (part.type === 'month')
121
+ month = part.value;
122
+ else if (part.type === 'day')
123
+ day = part.value;
124
+ }
125
+ if (year === undefined || month === undefined || day === undefined) {
126
+ throw new RangeError('unable to derive ISO calendar window from the configured time zone');
127
+ }
128
+ return period === 'calendar-day' ? `${year}-${month}-${day}` : `${year}-${month}`;
129
+ }
130
+ function toValidDate(value, name) {
131
+ let timestamp;
132
+ if (value instanceof Date)
133
+ timestamp = value.getTime();
134
+ else if (typeof value === 'number')
135
+ timestamp = value;
136
+ else
137
+ throw new TypeError(`${name} must be a Date or epoch-millisecond number`);
138
+ if (!Number.isFinite(timestamp))
139
+ throw new RangeError(`${name} must be a finite valid instant`);
140
+ const date = new Date(timestamp);
141
+ if (!Number.isFinite(date.getTime()))
142
+ throw new RangeError(`${name} must be a finite valid instant`);
143
+ return date;
144
+ }
145
+ function encodeIdentitySegment(value, name) {
146
+ try {
147
+ return encodeURIComponent(value);
148
+ }
149
+ catch {
150
+ throw new TypeError(`${name} contains malformed Unicode`);
151
+ }
152
+ }
153
+ function assertIdentityString(value, name) {
154
+ if (typeof value !== 'string' || value.length === 0 || value.trim().length === 0) {
155
+ throw new TypeError(`${name} must be a non-empty string`);
156
+ }
157
+ }
158
+ function assertPlainRecord(value, name) {
159
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
160
+ throw new TypeError(`${name} must be a plain object`);
161
+ }
162
+ const proto = Object.getPrototypeOf(value);
163
+ if (proto !== Object.prototype && proto !== null) {
164
+ throw new TypeError(`${name} must be a plain object`);
165
+ }
166
+ }
167
+ function assertExactKeys(value, allowed, required, name) {
168
+ const allowedSet = new Set(allowed);
169
+ for (const key of Object.keys(value)) {
170
+ if (!allowedSet.has(key))
171
+ throw new TypeError(`${name} contains unknown field ${JSON.stringify(key)}`);
172
+ }
173
+ for (const key of required) {
174
+ if (!(key in value))
175
+ throw new TypeError(`${name}.${key} is required`);
176
+ }
177
+ }
178
+ //# sourceMappingURL=windowed-budget-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windowed-budget-keys.js","sourceRoot":"","sources":["../src/windowed-budget-keys.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,113 @@
1
+ {
2
+ "name": "mcp-usage-control",
3
+ "version": "1.0.0",
4
+ "description": "Concurrency-safe usage enforcement primitives for MCP tool execution.",
5
+ "type": "module",
6
+ "license": "Apache-2.0",
7
+ "sideEffects": false,
8
+ "main": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js",
14
+ "default": "./dist/index.js"
15
+ },
16
+ "./operational": {
17
+ "types": "./dist/operational.d.ts",
18
+ "import": "./dist/operational.js",
19
+ "default": "./dist/operational.js"
20
+ },
21
+ "./settlement-outcomes": {
22
+ "types": "./dist/settlement-outcomes.d.ts",
23
+ "import": "./dist/settlement-outcomes.js",
24
+ "default": "./dist/settlement-outcomes.js"
25
+ },
26
+ "./thresholds": {
27
+ "types": "./dist/thresholds.d.ts",
28
+ "import": "./dist/thresholds.js",
29
+ "default": "./dist/thresholds.js"
30
+ },
31
+ "./conformance": {
32
+ "types": "./dist/store-conformance.d.ts",
33
+ "import": "./dist/store-conformance.js",
34
+ "default": "./dist/store-conformance.js"
35
+ }
36
+ },
37
+ "files": [
38
+ "dist/index.js",
39
+ "dist/index.js.map",
40
+ "dist/index.d.ts",
41
+ "dist/index.d.ts.map",
42
+ "dist/observability.js",
43
+ "dist/observability.js.map",
44
+ "dist/observability.d.ts",
45
+ "dist/observability.d.ts.map",
46
+ "dist/operational.js",
47
+ "dist/operational.js.map",
48
+ "dist/operational.d.ts",
49
+ "dist/operational.d.ts.map",
50
+ "dist/settlement-outcomes.js",
51
+ "dist/settlement-outcomes.js.map",
52
+ "dist/settlement-outcomes.d.ts",
53
+ "dist/settlement-outcomes.d.ts.map",
54
+ "dist/thresholds.js",
55
+ "dist/thresholds.js.map",
56
+ "dist/thresholds.d.ts",
57
+ "dist/thresholds.d.ts.map",
58
+ "dist/weighted-credits.js",
59
+ "dist/weighted-credits.js.map",
60
+ "dist/weighted-credits.d.ts",
61
+ "dist/weighted-credits.d.ts.map",
62
+ "dist/windowed-budget-keys.js",
63
+ "dist/windowed-budget-keys.js.map",
64
+ "dist/windowed-budget-keys.d.ts",
65
+ "dist/windowed-budget-keys.d.ts.map",
66
+ "dist/store-conformance.js",
67
+ "dist/store-conformance.js.map",
68
+ "dist/store-conformance.d.ts",
69
+ "dist/store-conformance.d.ts.map",
70
+ "dist/progressive-store-conformance.js",
71
+ "dist/progressive-store-conformance.js.map",
72
+ "dist/progressive-store-conformance.d.ts",
73
+ "dist/progressive-store-conformance.d.ts.map",
74
+ "dist/reconciliation-conformance.js",
75
+ "dist/reconciliation-conformance.js.map",
76
+ "dist/reconciliation-conformance.d.ts",
77
+ "dist/reconciliation-conformance.d.ts.map",
78
+ "dist/vector-store-conformance.js",
79
+ "dist/vector-store-conformance.js.map",
80
+ "dist/vector-store-conformance.d.ts",
81
+ "dist/vector-store-conformance.d.ts.map",
82
+ "README.md",
83
+ "LICENSE"
84
+ ],
85
+ "engines": {
86
+ "node": ">=22"
87
+ },
88
+ "repository": {
89
+ "type": "git",
90
+ "url": "git+https://github.com/git-ksk/mcp-usage-control.git",
91
+ "directory": "packages/core"
92
+ },
93
+ "homepage": "https://github.com/git-ksk/mcp-usage-control#readme",
94
+ "bugs": {
95
+ "url": "https://github.com/git-ksk/mcp-usage-control/issues"
96
+ },
97
+ "keywords": [
98
+ "mcp",
99
+ "model-context-protocol",
100
+ "usage",
101
+ "quota",
102
+ "entitlements",
103
+ "credits",
104
+ "observability"
105
+ ],
106
+ "publishConfig": {
107
+ "access": "public"
108
+ },
109
+ "scripts": {
110
+ "build": "tsc -p tsconfig.json",
111
+ "test": "vitest run"
112
+ }
113
+ }