@grantex/sdk 0.6.0 → 0.7.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.
- package/LICENSE +185 -185
- package/NOTICE +16 -16
- package/README.md +974 -947
- package/dist/authorization-details.d.ts +86 -0
- package/dist/authorization-details.d.ts.map +1 -0
- package/dist/authorization-details.js +209 -0
- package/dist/authorization-details.js.map +1 -0
- package/dist/canonical.d.ts +47 -0
- package/dist/canonical.d.ts.map +1 -0
- package/dist/canonical.js +163 -0
- package/dist/canonical.js.map +1 -0
- package/dist/caps/index.d.ts +19 -0
- package/dist/caps/index.d.ts.map +1 -0
- package/dist/caps/index.js +19 -0
- package/dist/caps/index.js.map +1 -0
- package/dist/caps/limits.d.ts +40 -0
- package/dist/caps/limits.d.ts.map +1 -0
- package/dist/caps/limits.js +109 -0
- package/dist/caps/limits.js.map +1 -0
- package/dist/caps/memory.d.ts +15 -0
- package/dist/caps/memory.d.ts.map +1 -0
- package/dist/caps/memory.js +57 -0
- package/dist/caps/memory.js.map +1 -0
- package/dist/caps/meter.d.ts +107 -0
- package/dist/caps/meter.d.ts.map +1 -0
- package/dist/caps/meter.js +200 -0
- package/dist/caps/meter.js.map +1 -0
- package/dist/caps/postgres.d.ts +64 -0
- package/dist/caps/postgres.d.ts.map +1 -0
- package/dist/caps/postgres.js +221 -0
- package/dist/caps/postgres.js.map +1 -0
- package/dist/caps/redis.d.ts +45 -0
- package/dist/caps/redis.d.ts.map +1 -0
- package/dist/caps/redis.js +173 -0
- package/dist/caps/redis.js.map +1 -0
- package/dist/client.d.ts +12 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +517 -57
- package/dist/client.js.map +1 -1
- package/dist/decisions/action.d.ts +51 -0
- package/dist/decisions/action.d.ts.map +1 -0
- package/dist/decisions/action.js +237 -0
- package/dist/decisions/action.js.map +1 -0
- package/dist/decisions/index.d.ts +11 -0
- package/dist/decisions/index.d.ts.map +1 -0
- package/dist/decisions/index.js +8 -0
- package/dist/decisions/index.js.map +1 -0
- package/dist/decisions/verify.d.ts +103 -0
- package/dist/decisions/verify.d.ts.map +1 -0
- package/dist/decisions/verify.js +277 -0
- package/dist/decisions/verify.js.map +1 -0
- package/dist/denials.d.ts +132 -0
- package/dist/denials.d.ts.map +1 -0
- package/dist/denials.js +129 -0
- package/dist/denials.js.map +1 -0
- package/dist/evidence/build.d.ts +63 -0
- package/dist/evidence/build.d.ts.map +1 -0
- package/dist/evidence/build.js +201 -0
- package/dist/evidence/build.js.map +1 -0
- package/dist/evidence/canonical.d.ts +3 -0
- package/dist/evidence/canonical.d.ts.map +1 -0
- package/dist/evidence/canonical.js +3 -0
- package/dist/evidence/canonical.js.map +1 -0
- package/dist/evidence/checks.d.ts +13 -0
- package/dist/evidence/checks.d.ts.map +1 -0
- package/dist/evidence/checks.js +406 -0
- package/dist/evidence/checks.js.map +1 -0
- package/dist/evidence/document.d.ts +8 -0
- package/dist/evidence/document.d.ts.map +1 -0
- package/dist/evidence/document.js +298 -0
- package/dist/evidence/document.js.map +1 -0
- package/dist/evidence/hashing.d.ts +37 -0
- package/dist/evidence/hashing.d.ts.map +1 -0
- package/dist/evidence/hashing.js +106 -0
- package/dist/evidence/hashing.js.map +1 -0
- package/dist/evidence/index.d.ts +24 -0
- package/dist/evidence/index.d.ts.map +1 -0
- package/dist/evidence/index.js +24 -0
- package/dist/evidence/index.js.map +1 -0
- package/dist/evidence/result.d.ts +88 -0
- package/dist/evidence/result.d.ts.map +1 -0
- package/dist/evidence/result.js +88 -0
- package/dist/evidence/result.js.map +1 -0
- package/dist/evidence/schema-1.0.d.ts +2 -0
- package/dist/evidence/schema-1.0.d.ts.map +1 -0
- package/dist/evidence/schema-1.0.js +1398 -0
- package/dist/evidence/schema-1.0.js.map +1 -0
- package/dist/evidence/schema.d.ts +13 -0
- package/dist/evidence/schema.d.ts.map +1 -0
- package/dist/evidence/schema.js +264 -0
- package/dist/evidence/schema.js.map +1 -0
- package/dist/evidence/signature.d.ts +23 -0
- package/dist/evidence/signature.d.ts.map +1 -0
- package/dist/evidence/signature.js +136 -0
- package/dist/evidence/signature.js.map +1 -0
- package/dist/evidence/trace.d.ts +23 -0
- package/dist/evidence/trace.d.ts.map +1 -0
- package/dist/evidence/trace.js +69 -0
- package/dist/evidence/trace.js.map +1 -0
- package/dist/evidence/verify.d.ts +29 -0
- package/dist/evidence/verify.d.ts.map +1 -0
- package/dist/evidence/verify.js +163 -0
- package/dist/evidence/verify.js.map +1 -0
- package/dist/http.d.ts +12 -1
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +11 -5
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +16 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -2
- package/dist/index.js.map +1 -1
- package/dist/manifest.d.ts +178 -9
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +379 -16
- package/dist/manifest.js.map +1 -1
- package/dist/purpose.d.ts +29 -0
- package/dist/purpose.d.ts.map +1 -0
- package/dist/purpose.js +60 -0
- package/dist/purpose.js.map +1 -0
- package/dist/resources/agents.js +3 -3
- package/dist/resources/agents.js.map +1 -1
- package/dist/resources/anomalies.d.ts +3 -1
- package/dist/resources/anomalies.d.ts.map +1 -1
- package/dist/resources/anomalies.js +7 -1
- package/dist/resources/anomalies.js.map +1 -1
- package/dist/resources/audit.js +1 -1
- package/dist/resources/audit.js.map +1 -1
- package/dist/resources/budgets.js +2 -2
- package/dist/resources/budgets.js.map +1 -1
- package/dist/resources/credentials.js +1 -1
- package/dist/resources/credentials.js.map +1 -1
- package/dist/resources/decisions.d.ts +69 -0
- package/dist/resources/decisions.d.ts.map +1 -0
- package/dist/resources/decisions.js +115 -0
- package/dist/resources/decisions.js.map +1 -0
- package/dist/resources/domains.js +2 -2
- package/dist/resources/domains.js.map +1 -1
- package/dist/resources/dpdp.js +4 -4
- package/dist/resources/dpdp.js.map +1 -1
- package/dist/resources/grants.js +2 -2
- package/dist/resources/grants.js.map +1 -1
- package/dist/resources/policies.js +3 -3
- package/dist/resources/policies.js.map +1 -1
- package/dist/resources/scim.js +5 -5
- package/dist/resources/scim.js.map +1 -1
- package/dist/resources/tokens.d.ts.map +1 -1
- package/dist/resources/tokens.js +5 -1
- package/dist/resources/tokens.js.map +1 -1
- package/dist/resources/vault.js +2 -2
- package/dist/resources/vault.js.map +1 -1
- package/dist/resources/webauthn.d.ts +6 -1
- package/dist/resources/webauthn.d.ts.map +1 -1
- package/dist/resources/webauthn.js +5 -1
- package/dist/resources/webauthn.js.map +1 -1
- package/dist/resources/webhooks.js +1 -1
- package/dist/resources/webhooks.js.map +1 -1
- package/dist/revocations/feed.d.ts +61 -0
- package/dist/revocations/feed.d.ts.map +1 -0
- package/dist/revocations/feed.js +282 -0
- package/dist/revocations/feed.js.map +1 -0
- package/dist/revocations/index.d.ts +20 -0
- package/dist/revocations/index.d.ts.map +1 -0
- package/dist/revocations/index.js +19 -0
- package/dist/revocations/index.js.map +1 -0
- package/dist/revocations/set.d.ts +59 -0
- package/dist/revocations/set.d.ts.map +1 -0
- package/dist/revocations/set.js +87 -0
- package/dist/revocations/set.js.map +1 -0
- package/dist/scopes.d.ts +26 -0
- package/dist/scopes.d.ts.map +1 -0
- package/dist/scopes.js +37 -0
- package/dist/scopes.js.map +1 -0
- package/dist/types.d.ts +121 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -1
- package/dist/types.js.map +1 -1
- package/dist/verify.d.ts +31 -2
- package/dist/verify.d.ts.map +1 -1
- package/dist/verify.js +236 -29
- package/dist/verify.js.map +1 -1
- package/package.json +92 -84
package/dist/manifest.js
CHANGED
|
@@ -51,17 +51,287 @@ export function permissionCovers(granted, required) {
|
|
|
51
51
|
const requiredLevel = PERMISSION_LEVELS[required] ?? 99;
|
|
52
52
|
return grantedLevel >= requiredLevel;
|
|
53
53
|
}
|
|
54
|
+
/* ------------------------------------------------------------------ */
|
|
55
|
+
/* Manifest 0.6 tool declarations */
|
|
56
|
+
/* ------------------------------------------------------------------ */
|
|
57
|
+
/** `$id` of the manifest 0.6 JSON Schema. */
|
|
58
|
+
export const MANIFEST_SCHEMA_ID = 'https://grantex.dev/spec/manifest-0.6.schema.json';
|
|
59
|
+
/** Largest cap or cost-unit value a manifest may declare. */
|
|
60
|
+
export const MAX_COUNT = 2147483647;
|
|
61
|
+
/** Not allowed as a tool name: grant `caps` use it for the cost-unit budget. */
|
|
62
|
+
export const RESERVED_TOOL_NAME = 'cost_units';
|
|
63
|
+
const TOP_LEVEL_KEYS = ['$schema', 'connector', 'version', 'description', 'tools'];
|
|
64
|
+
const TOOL_KEYS = [
|
|
65
|
+
'permission',
|
|
66
|
+
'allowed_purposes',
|
|
67
|
+
'caps',
|
|
68
|
+
'cost_units',
|
|
69
|
+
'requires_decision',
|
|
70
|
+
'four_eyes_on',
|
|
71
|
+
'decision_fields',
|
|
72
|
+
];
|
|
73
|
+
const CORE_DECISION_FIELDS = ['case_id', 'action', 'decision', 'subject', 'amount', 'extra'];
|
|
74
|
+
/** Most extra semantic fields a tool may declare for decision grants. */
|
|
75
|
+
export const MAX_DECISION_FIELDS = 16;
|
|
76
|
+
const CAP_KEYS = ['per_hour', 'per_day', 'per_case'];
|
|
77
|
+
const NAME_RE = /^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$/;
|
|
78
|
+
const UNIT_RE = /^[a-z][a-z0-9_]{0,63}$/;
|
|
79
|
+
const SEG = '[a-z][a-z0-9_]*';
|
|
80
|
+
const ORG = 'x-[a-z0-9]+(?:-[a-z0-9]+)*';
|
|
81
|
+
/** Syntax of an `allowed_purposes` entry (a purpose or a `prefix.*` wildcard). */
|
|
82
|
+
export const PURPOSE_PATTERN_RE = new RegExp(`^(?:${SEG}(?:\\.${SEG})*(?:\\.\\*)?|${ORG}(?:(?:\\.${SEG})+(?:\\.\\*)?|\\.\\*))$`);
|
|
83
|
+
const MAX_PURPOSE_LENGTH = 128;
|
|
84
|
+
/** A manifest does not conform to manifest schema 0.6. The message names the offending path. */
|
|
85
|
+
export class ManifestValidationError extends Error {
|
|
86
|
+
constructor(message) {
|
|
87
|
+
super(message);
|
|
88
|
+
this.name = 'ManifestValidationError';
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function q(value) {
|
|
92
|
+
const out = JSON.stringify(value);
|
|
93
|
+
return out === undefined ? String(value) : out;
|
|
94
|
+
}
|
|
95
|
+
function fail(message) {
|
|
96
|
+
return new ManifestValidationError(`ToolManifest: ${message}`);
|
|
97
|
+
}
|
|
98
|
+
function isPlainObject(value) {
|
|
99
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
100
|
+
}
|
|
101
|
+
function isPermission(value) {
|
|
102
|
+
return typeof value === 'string' && Object.values(Permission).includes(value);
|
|
103
|
+
}
|
|
104
|
+
function invalidPermission(value, tool) {
|
|
105
|
+
return fail(`invalid permission ${q(value)} for tool ${q(tool)}. Must be one of: ${Object.values(Permission).join(', ')}`);
|
|
106
|
+
}
|
|
107
|
+
function count(value, path) {
|
|
108
|
+
if (typeof value !== 'number' || !Number.isInteger(value) || value < 0 || value > MAX_COUNT) {
|
|
109
|
+
throw fail(`${path}: must be an integer between 0 and ${MAX_COUNT}`);
|
|
110
|
+
}
|
|
111
|
+
return value;
|
|
112
|
+
}
|
|
113
|
+
/** Whether `value` is a syntactically valid `allowed_purposes` entry. */
|
|
114
|
+
export function isValidPurposePattern(value) {
|
|
115
|
+
return (typeof value === 'string' && value.length <= MAX_PURPOSE_LENGTH && PURPOSE_PATTERN_RE.test(value));
|
|
116
|
+
}
|
|
117
|
+
function checkNames(connector, tools) {
|
|
118
|
+
if (typeof connector !== 'string' || !NAME_RE.test(connector)) {
|
|
119
|
+
throw fail(`invalid connector name ${q(connector)}`);
|
|
120
|
+
}
|
|
121
|
+
for (const name of Object.keys(tools)) {
|
|
122
|
+
if (!NAME_RE.test(name))
|
|
123
|
+
throw fail(`invalid tool name ${q(name)}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Validate one tool value (string or object form) and return its ToolSpec.
|
|
128
|
+
*
|
|
129
|
+
* @throws {ManifestValidationError} the value does not conform to manifest 0.6.
|
|
130
|
+
*/
|
|
131
|
+
export function parseToolDeclaration(tool, value) {
|
|
132
|
+
if (tool === RESERVED_TOOL_NAME) {
|
|
133
|
+
throw fail(`tool name ${q(tool)} is reserved: it names the cost-unit budget in grant caps`);
|
|
134
|
+
}
|
|
135
|
+
if (typeof value === 'string') {
|
|
136
|
+
if (!isPermission(value))
|
|
137
|
+
throw invalidPermission(value, tool);
|
|
138
|
+
return { permission: value, requiresDecision: false, fourEyesOn: [] };
|
|
139
|
+
}
|
|
140
|
+
if (!isPlainObject(value)) {
|
|
141
|
+
throw fail(`tools.${tool}: must be a permission string or an object`);
|
|
142
|
+
}
|
|
143
|
+
const path = `tools.${tool}`;
|
|
144
|
+
for (const key of Object.keys(value)) {
|
|
145
|
+
if (!TOOL_KEYS.includes(key)) {
|
|
146
|
+
throw fail(`${path}: unknown key ${q(key)} (allowed: ${TOOL_KEYS.join(', ')})`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (!('permission' in value))
|
|
150
|
+
throw fail(`${path}: missing required key "permission"`);
|
|
151
|
+
const permission = value['permission'];
|
|
152
|
+
if (!isPermission(permission))
|
|
153
|
+
throw invalidPermission(permission, tool);
|
|
154
|
+
const spec = { permission, requiresDecision: false, fourEyesOn: [] };
|
|
155
|
+
if ('allowed_purposes' in value) {
|
|
156
|
+
const raw = value['allowed_purposes'];
|
|
157
|
+
const message = `${path}.allowed_purposes: must be a non-empty array of unique purpose patterns`;
|
|
158
|
+
if (!Array.isArray(raw) || raw.length === 0)
|
|
159
|
+
throw fail(message);
|
|
160
|
+
raw.forEach((pattern, index) => {
|
|
161
|
+
if (!isValidPurposePattern(pattern)) {
|
|
162
|
+
throw fail(`${path}.allowed_purposes[${index}]: invalid purpose pattern ${q(pattern)}`);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
if (new Set(raw).size !== raw.length)
|
|
166
|
+
throw fail(message);
|
|
167
|
+
spec.allowedPurposes = Object.freeze([...raw]);
|
|
168
|
+
}
|
|
169
|
+
if ('caps' in value) {
|
|
170
|
+
const raw = value['caps'];
|
|
171
|
+
if (!isPlainObject(raw))
|
|
172
|
+
throw fail(`${path}.caps: must be an object`);
|
|
173
|
+
for (const key of Object.keys(raw)) {
|
|
174
|
+
if (!CAP_KEYS.includes(key)) {
|
|
175
|
+
throw fail(`${path}.caps: unknown key ${q(key)} (allowed: ${CAP_KEYS.join(', ')})`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (Object.keys(raw).length === 0) {
|
|
179
|
+
throw fail(`${path}.caps: must declare at least one of ${CAP_KEYS.join(', ')}`);
|
|
180
|
+
}
|
|
181
|
+
const caps = {};
|
|
182
|
+
if ('per_hour' in raw)
|
|
183
|
+
caps.perHour = count(raw['per_hour'], `${path}.caps.per_hour`);
|
|
184
|
+
if ('per_day' in raw)
|
|
185
|
+
caps.perDay = count(raw['per_day'], `${path}.caps.per_day`);
|
|
186
|
+
if ('per_case' in raw)
|
|
187
|
+
caps.perCase = count(raw['per_case'], `${path}.caps.per_case`);
|
|
188
|
+
spec.caps = Object.freeze(caps);
|
|
189
|
+
}
|
|
190
|
+
if ('cost_units' in value) {
|
|
191
|
+
const raw = value['cost_units'];
|
|
192
|
+
if (!isPlainObject(raw) || Object.keys(raw).length === 0) {
|
|
193
|
+
throw fail(`${path}.cost_units: must be a non-empty object`);
|
|
194
|
+
}
|
|
195
|
+
const units = {};
|
|
196
|
+
for (const [unit, amount] of Object.entries(raw)) {
|
|
197
|
+
if (!UNIT_RE.test(unit))
|
|
198
|
+
throw fail(`${path}.cost_units: invalid cost unit name ${q(unit)}`);
|
|
199
|
+
units[unit] = count(amount, `${path}.cost_units.${unit}`);
|
|
200
|
+
}
|
|
201
|
+
spec.costUnits = Object.freeze(units);
|
|
202
|
+
}
|
|
203
|
+
if ('requires_decision' in value) {
|
|
204
|
+
if (typeof value['requires_decision'] !== 'boolean') {
|
|
205
|
+
throw fail(`${path}.requires_decision: must be a boolean`);
|
|
206
|
+
}
|
|
207
|
+
spec.requiresDecision = value['requires_decision'];
|
|
208
|
+
}
|
|
209
|
+
if ('four_eyes_on' in value) {
|
|
210
|
+
const raw = value['four_eyes_on'];
|
|
211
|
+
const message = `${path}.four_eyes_on: must be a non-empty array of unique decision names`;
|
|
212
|
+
if (!Array.isArray(raw) || raw.length === 0)
|
|
213
|
+
throw fail(message);
|
|
214
|
+
raw.forEach((decision, index) => {
|
|
215
|
+
if (typeof decision !== 'string' || !UNIT_RE.test(decision)) {
|
|
216
|
+
throw fail(`${path}.four_eyes_on[${index}]: invalid decision name ${q(decision)}`);
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
if (new Set(raw).size !== raw.length)
|
|
220
|
+
throw fail(message);
|
|
221
|
+
spec.fourEyesOn = Object.freeze([...raw]);
|
|
222
|
+
}
|
|
223
|
+
if ('decision_fields' in value) {
|
|
224
|
+
const raw = value['decision_fields'];
|
|
225
|
+
const message = `${path}.decision_fields: must be a non-empty array of at most ${MAX_DECISION_FIELDS} unique field names`;
|
|
226
|
+
if (!Array.isArray(raw) || raw.length === 0 || raw.length > MAX_DECISION_FIELDS)
|
|
227
|
+
throw fail(message);
|
|
228
|
+
raw.forEach((name, index) => {
|
|
229
|
+
if (typeof name !== 'string' || !UNIT_RE.test(name) || CORE_DECISION_FIELDS.includes(name)) {
|
|
230
|
+
throw fail(`${path}.decision_fields[${index}]: invalid field name ${q(name)}`);
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
if (new Set(raw).size !== raw.length)
|
|
234
|
+
throw fail(message);
|
|
235
|
+
spec.decisionFields = Object.freeze([...raw]);
|
|
236
|
+
}
|
|
237
|
+
if (spec.requiresDecision && permission === Permission.READ) {
|
|
238
|
+
throw fail(`${path}: requires_decision is not allowed on a tool with read permission`);
|
|
239
|
+
}
|
|
240
|
+
if (spec.fourEyesOn.length > 0 && !spec.requiresDecision) {
|
|
241
|
+
throw fail(`${path}.four_eyes_on: requires requires_decision: true`);
|
|
242
|
+
}
|
|
243
|
+
if (spec.decisionFields !== undefined && !spec.requiresDecision) {
|
|
244
|
+
throw fail(`${path}.decision_fields: requires requires_decision: true`);
|
|
245
|
+
}
|
|
246
|
+
return spec;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Parse manifest JSON text, rejecting a key repeated in any object. `JSON.parse`
|
|
250
|
+
* alone keeps the last value, so a tool declared twice would load silently.
|
|
251
|
+
*/
|
|
252
|
+
export function parseManifestJson(text) {
|
|
253
|
+
const data = JSON.parse(text);
|
|
254
|
+
const duplicate = findDuplicateKey(text);
|
|
255
|
+
if (duplicate !== undefined)
|
|
256
|
+
throw fail(`duplicate key ${q(duplicate)} in manifest file`);
|
|
257
|
+
return data;
|
|
258
|
+
}
|
|
259
|
+
/** First key repeated within one object of already-valid JSON `text`. */
|
|
260
|
+
function findDuplicateKey(text) {
|
|
261
|
+
const stack = [];
|
|
262
|
+
let i = 0;
|
|
263
|
+
while (i < text.length) {
|
|
264
|
+
const ch = text[i];
|
|
265
|
+
if (ch === '"') {
|
|
266
|
+
let j = i + 1;
|
|
267
|
+
while (j < text.length && text[j] !== '"')
|
|
268
|
+
j += text[j] === '\\' ? 2 : 1;
|
|
269
|
+
const top = stack[stack.length - 1];
|
|
270
|
+
if (top?.keys && top.expectKey) {
|
|
271
|
+
const key = JSON.parse(text.slice(i, j + 1));
|
|
272
|
+
if (top.keys.has(key))
|
|
273
|
+
return key;
|
|
274
|
+
top.keys.add(key);
|
|
275
|
+
top.expectKey = false;
|
|
276
|
+
}
|
|
277
|
+
i = j + 1;
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
if (ch === '{')
|
|
281
|
+
stack.push({ keys: new Set(), expectKey: true });
|
|
282
|
+
else if (ch === '[')
|
|
283
|
+
stack.push({ keys: null, expectKey: false });
|
|
284
|
+
else if (ch === '}' || ch === ']')
|
|
285
|
+
stack.pop();
|
|
286
|
+
else if (ch === ',') {
|
|
287
|
+
const top = stack[stack.length - 1];
|
|
288
|
+
if (top?.keys)
|
|
289
|
+
top.expectKey = true;
|
|
290
|
+
}
|
|
291
|
+
i += 1;
|
|
292
|
+
}
|
|
293
|
+
return undefined;
|
|
294
|
+
}
|
|
295
|
+
/** Render a ToolSpec in manifest 0.6 object form (omitting unset fields). */
|
|
296
|
+
export function toolSpecToObject(spec) {
|
|
297
|
+
const out = { permission: spec.permission };
|
|
298
|
+
if (spec.allowedPurposes !== undefined)
|
|
299
|
+
out.allowed_purposes = [...spec.allowedPurposes];
|
|
300
|
+
if (spec.caps !== undefined) {
|
|
301
|
+
const caps = {};
|
|
302
|
+
if (spec.caps.perHour !== undefined)
|
|
303
|
+
caps.per_hour = spec.caps.perHour;
|
|
304
|
+
if (spec.caps.perDay !== undefined)
|
|
305
|
+
caps.per_day = spec.caps.perDay;
|
|
306
|
+
if (spec.caps.perCase !== undefined)
|
|
307
|
+
caps.per_case = spec.caps.perCase;
|
|
308
|
+
out.caps = caps;
|
|
309
|
+
}
|
|
310
|
+
if (spec.costUnits !== undefined)
|
|
311
|
+
out.cost_units = { ...spec.costUnits };
|
|
312
|
+
if (spec.requiresDecision)
|
|
313
|
+
out.requires_decision = true;
|
|
314
|
+
if (spec.fourEyesOn.length > 0)
|
|
315
|
+
out.four_eyes_on = [...spec.fourEyesOn];
|
|
316
|
+
if (spec.decisionFields !== undefined)
|
|
317
|
+
out.decision_fields = [...spec.decisionFields];
|
|
318
|
+
return out;
|
|
319
|
+
}
|
|
54
320
|
/**
|
|
55
321
|
* Declares the required permission level for each tool on a connector.
|
|
56
322
|
*
|
|
57
323
|
* Load manifests via `grantex.loadManifest()` and they will be used
|
|
58
324
|
* automatically by `grantex.enforce()`.
|
|
325
|
+
*
|
|
326
|
+
* `tools` maps each tool to its permission (as before 0.6); `getToolSpec()`
|
|
327
|
+
* returns the full declaration including constraints.
|
|
59
328
|
*/
|
|
60
329
|
export class ToolManifest {
|
|
61
330
|
connector;
|
|
62
331
|
tools;
|
|
63
332
|
version;
|
|
64
333
|
description;
|
|
334
|
+
#specs = new Map();
|
|
65
335
|
constructor(options) {
|
|
66
336
|
if (!options.connector) {
|
|
67
337
|
throw new Error('ToolManifest: connector name is required');
|
|
@@ -69,28 +339,81 @@ export class ToolManifest {
|
|
|
69
339
|
if (!options.tools || Object.keys(options.tools).length === 0) {
|
|
70
340
|
throw new Error('ToolManifest: at least one tool is required');
|
|
71
341
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
342
|
+
// A manifest that uses the object form anywhere is a 0.6 manifest and is
|
|
343
|
+
// validated in full: names as well as values.
|
|
344
|
+
if (Object.values(options.tools).some((v) => typeof v !== 'string')) {
|
|
345
|
+
checkNames(options.connector, options.tools);
|
|
346
|
+
}
|
|
347
|
+
const tools = {};
|
|
348
|
+
for (const [name, value] of Object.entries(options.tools)) {
|
|
349
|
+
const spec = parseToolDeclaration(name, value);
|
|
350
|
+
this.#specs.set(name, spec);
|
|
351
|
+
Object.defineProperty(tools, name, { value: spec.permission, enumerable: true, writable: true, configurable: true });
|
|
76
352
|
}
|
|
77
353
|
this.connector = options.connector;
|
|
78
|
-
this.tools =
|
|
354
|
+
this.tools = tools;
|
|
79
355
|
this.version = options.version ?? '1.0.0';
|
|
80
356
|
this.description = options.description ?? '';
|
|
81
357
|
}
|
|
82
358
|
/** Get the declared permission for a tool. Returns undefined if not found. */
|
|
83
359
|
getPermission(toolName) {
|
|
84
|
-
return this.tools[toolName];
|
|
360
|
+
return Object.prototype.hasOwnProperty.call(this.tools, toolName) ? this.tools[toolName] : undefined;
|
|
85
361
|
}
|
|
86
|
-
/**
|
|
362
|
+
/**
|
|
363
|
+
* Get a tool's full declaration. Returns undefined if the tool is not declared.
|
|
364
|
+
*
|
|
365
|
+
* The permission always reflects `tools`; constraints declared for the tool
|
|
366
|
+
* are kept even if `tools` was edited directly.
|
|
367
|
+
*
|
|
368
|
+
* @throws {ManifestValidationError} `tools` was edited into a combination the
|
|
369
|
+
* schema forbids (for example `read` on a decision tool).
|
|
370
|
+
*/
|
|
371
|
+
getToolSpec(toolName) {
|
|
372
|
+
const permission = this.getPermission(toolName);
|
|
373
|
+
if (permission === undefined)
|
|
374
|
+
return undefined;
|
|
375
|
+
const spec = this.#specs.get(toolName);
|
|
376
|
+
if (spec === undefined)
|
|
377
|
+
return { permission, requiresDecision: false, fourEyesOn: [] };
|
|
378
|
+
if (spec.permission !== permission) {
|
|
379
|
+
return parseToolDeclaration(toolName, { ...toolSpecToObject(spec), permission });
|
|
380
|
+
}
|
|
381
|
+
return spec;
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Add or update a tool. `permission` is a permission string or a manifest
|
|
385
|
+
* 0.6 tool object; replacing a tool replaces its whole declaration.
|
|
386
|
+
*/
|
|
87
387
|
addTool(toolName, permission) {
|
|
88
|
-
|
|
388
|
+
const spec = parseToolDeclaration(toolName, permission);
|
|
389
|
+
this.#specs.set(toolName, spec);
|
|
390
|
+
Object.defineProperty(this.tools, toolName, { value: spec.permission, enumerable: true, writable: true, configurable: true });
|
|
89
391
|
}
|
|
90
392
|
/** Number of tools in this manifest. */
|
|
91
393
|
get toolCount() {
|
|
92
394
|
return Object.keys(this.tools).length;
|
|
93
395
|
}
|
|
396
|
+
/** Render this manifest as a manifest 0.6 document. */
|
|
397
|
+
toJSON() {
|
|
398
|
+
const tools = {};
|
|
399
|
+
for (const name of Object.keys(this.tools)) {
|
|
400
|
+
const spec = this.getToolSpec(name) ?? { permission: this.tools[name], requiresDecision: false, fourEyesOn: [] };
|
|
401
|
+
const rendered = toolSpecToObject(spec);
|
|
402
|
+
// defineProperty keeps a tool named "__proto__" as an own property.
|
|
403
|
+
Object.defineProperty(tools, name, {
|
|
404
|
+
value: Object.keys(rendered).length === 1 ? spec.permission : rendered,
|
|
405
|
+
enumerable: true,
|
|
406
|
+
writable: true,
|
|
407
|
+
configurable: true,
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
return {
|
|
411
|
+
connector: this.connector,
|
|
412
|
+
version: this.version,
|
|
413
|
+
...(this.description ? { description: this.description } : {}),
|
|
414
|
+
tools,
|
|
415
|
+
};
|
|
416
|
+
}
|
|
94
417
|
/**
|
|
95
418
|
* Load a ToolManifest from a JSON or YAML file.
|
|
96
419
|
* YAML requires the `yaml` package to be installed.
|
|
@@ -98,25 +421,34 @@ export class ToolManifest {
|
|
|
98
421
|
static async fromFile(filePath) {
|
|
99
422
|
const fs = await import('node:fs');
|
|
100
423
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
424
|
+
let data;
|
|
101
425
|
if (filePath.endsWith('.yaml') || filePath.endsWith('.yml')) {
|
|
426
|
+
let yaml;
|
|
102
427
|
try {
|
|
103
428
|
// Dynamic import — yaml is an optional peer dependency
|
|
104
|
-
|
|
105
|
-
return ToolManifest.fromJSON(yaml.parse(content));
|
|
429
|
+
yaml = (await import('yaml'));
|
|
106
430
|
}
|
|
107
431
|
catch {
|
|
108
432
|
throw new Error('yaml package required for YAML manifests: npm install yaml');
|
|
109
433
|
}
|
|
434
|
+
// uniqueKeys makes the parser throw on a repeated key.
|
|
435
|
+
data = yaml.parse(content, { uniqueKeys: true });
|
|
436
|
+
}
|
|
437
|
+
else {
|
|
438
|
+
data = parseManifestJson(content);
|
|
110
439
|
}
|
|
111
|
-
|
|
440
|
+
if (!isPlainObject(data))
|
|
441
|
+
throw fail('a manifest must be a JSON object');
|
|
442
|
+
return ToolManifest.fromJSON(data);
|
|
112
443
|
}
|
|
113
444
|
/**
|
|
114
445
|
* Create a ToolManifest from a JSON object (e.g., loaded from file).
|
|
115
446
|
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
447
|
+
* A manifest that declares `$schema` or uses the object form for any tool
|
|
448
|
+
* is validated against manifest schema 0.6, and an unknown key anywhere is
|
|
449
|
+
* rejected. A manifest made only of permission strings keeps its pre-0.6
|
|
450
|
+
* behaviour: unknown top-level keys are ignored with a deprecation warning
|
|
451
|
+
* (a future minor release will reject them).
|
|
120
452
|
*/
|
|
121
453
|
static fromJSON(data) {
|
|
122
454
|
const connector = data['connector'];
|
|
@@ -124,8 +456,39 @@ export class ToolManifest {
|
|
|
124
456
|
if (!connector || !tools) {
|
|
125
457
|
throw new Error('ToolManifest.fromJSON: missing "connector" or "tools" field');
|
|
126
458
|
}
|
|
459
|
+
if (!isPlainObject(tools)) {
|
|
460
|
+
throw fail('tools: must be an object mapping tool names to declarations');
|
|
461
|
+
}
|
|
462
|
+
const strict = '$schema' in data || Object.values(tools).some((v) => typeof v !== 'string');
|
|
463
|
+
const unknown = Object.keys(data).filter((k) => !TOP_LEVEL_KEYS.includes(k));
|
|
464
|
+
if (strict) {
|
|
465
|
+
if (unknown.length > 0) {
|
|
466
|
+
throw fail(`unknown top-level key ${q(unknown[0])} (allowed: ${TOP_LEVEL_KEYS.join(', ')})`);
|
|
467
|
+
}
|
|
468
|
+
if ('$schema' in data && typeof data['$schema'] !== 'string') {
|
|
469
|
+
throw fail('$schema: must be a string');
|
|
470
|
+
}
|
|
471
|
+
const version = 'version' in data ? data['version'] : '1.0.0';
|
|
472
|
+
const description = 'description' in data ? data['description'] : '';
|
|
473
|
+
checkNames(connector, tools);
|
|
474
|
+
if (typeof version !== 'string' || version.length === 0 || version.length > 64) {
|
|
475
|
+
throw fail('version: must be a non-empty string of at most 64 characters');
|
|
476
|
+
}
|
|
477
|
+
if (typeof description !== 'string')
|
|
478
|
+
throw fail('description: must be a string');
|
|
479
|
+
return new ToolManifest({
|
|
480
|
+
connector: connector,
|
|
481
|
+
tools: tools,
|
|
482
|
+
version,
|
|
483
|
+
description,
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
if (unknown.length > 0 && typeof process !== 'undefined' && typeof process.emitWarning === 'function') {
|
|
487
|
+
process.emitWarning(`ToolManifest: ignoring unknown top-level key ${q(unknown[0])} in manifest for ${q(connector)}; ` +
|
|
488
|
+
'manifest schema 0.6 rejects unknown keys and a future minor release of @grantex/sdk will too', 'DeprecationWarning');
|
|
489
|
+
}
|
|
127
490
|
return new ToolManifest({
|
|
128
|
-
connector,
|
|
491
|
+
connector: connector,
|
|
129
492
|
tools: tools,
|
|
130
493
|
version: data['version'] ?? '1.0.0',
|
|
131
494
|
description: data['description'] ?? '',
|
package/dist/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Purpose vocabulary and matching for purpose-bound grants.
|
|
3
|
+
*
|
|
4
|
+
* A grant carries one purpose from a controlled vocabulary, or a private term
|
|
5
|
+
* `x-<org>.<term>`. A manifest tool may restrict the purposes it can be called
|
|
6
|
+
* for with `allowed_purposes` patterns. Matching is by whole dot-separated
|
|
7
|
+
* segments:
|
|
8
|
+
*
|
|
9
|
+
* - a pattern without a wildcard matches only the identical purpose;
|
|
10
|
+
* - `prefix.*` matches any purpose that has `prefix` as its leading segments
|
|
11
|
+
* and at least one more segment: `aml.cdd.*` matches `aml.cdd.onboarding`
|
|
12
|
+
* but not `aml.cdd` itself and not `aml.cddx`.
|
|
13
|
+
*
|
|
14
|
+
* Every function returns a negative answer, never throws, for malformed input,
|
|
15
|
+
* so a malformed pattern or purpose can only ever deny. The Python SDK
|
|
16
|
+
* implements the same rules in `grantex.purpose`.
|
|
17
|
+
*/
|
|
18
|
+
/** The controlled purpose vocabulary. Private terms use `x-<org>.<term>`. */
|
|
19
|
+
export declare const PURPOSE_VOCABULARY: ReadonlySet<string>;
|
|
20
|
+
export declare const PRIVATE_PURPOSE_PREFIX = "x-";
|
|
21
|
+
/** Whether `value` is syntactically a purpose (no wildcard). */
|
|
22
|
+
export declare function isValidPurpose(value: unknown): value is string;
|
|
23
|
+
/** Whether `value` is a vocabulary term or a well-formed private term. */
|
|
24
|
+
export declare function isKnownPurpose(value: unknown): value is string;
|
|
25
|
+
/** Whether `purpose` matches one `allowed_purposes` `pattern`. False when either is malformed. */
|
|
26
|
+
export declare function purposeMatches(pattern: unknown, purpose: unknown): boolean;
|
|
27
|
+
/** The first pattern in `patterns` that `purpose` matches, or undefined. */
|
|
28
|
+
export declare function matchPurpose(patterns: readonly unknown[] | undefined, purpose: unknown): string | undefined;
|
|
29
|
+
//# sourceMappingURL=purpose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"purpose.d.ts","sourceRoot":"","sources":["../src/purpose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,6EAA6E;AAC7E,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAMjD,CAAC;AAEH,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAO3C,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE9D;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE9D;AAED,kGAAkG;AAClG,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAO1E;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAM3G"}
|
package/dist/purpose.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Purpose vocabulary and matching for purpose-bound grants.
|
|
3
|
+
*
|
|
4
|
+
* A grant carries one purpose from a controlled vocabulary, or a private term
|
|
5
|
+
* `x-<org>.<term>`. A manifest tool may restrict the purposes it can be called
|
|
6
|
+
* for with `allowed_purposes` patterns. Matching is by whole dot-separated
|
|
7
|
+
* segments:
|
|
8
|
+
*
|
|
9
|
+
* - a pattern without a wildcard matches only the identical purpose;
|
|
10
|
+
* - `prefix.*` matches any purpose that has `prefix` as its leading segments
|
|
11
|
+
* and at least one more segment: `aml.cdd.*` matches `aml.cdd.onboarding`
|
|
12
|
+
* but not `aml.cdd` itself and not `aml.cddx`.
|
|
13
|
+
*
|
|
14
|
+
* Every function returns a negative answer, never throws, for malformed input,
|
|
15
|
+
* so a malformed pattern or purpose can only ever deny. The Python SDK
|
|
16
|
+
* implements the same rules in `grantex.purpose`.
|
|
17
|
+
*/
|
|
18
|
+
import { isValidPurposePattern } from './manifest.js';
|
|
19
|
+
/** The controlled purpose vocabulary. Private terms use `x-<org>.<term>`. */
|
|
20
|
+
export const PURPOSE_VOCABULARY = new Set([
|
|
21
|
+
'aml.cdd.onboarding',
|
|
22
|
+
'aml.cdd.ongoing',
|
|
23
|
+
'aml.screening',
|
|
24
|
+
'procurement.vendor_onboarding',
|
|
25
|
+
'payments.payout',
|
|
26
|
+
]);
|
|
27
|
+
export const PRIVATE_PURPOSE_PREFIX = 'x-';
|
|
28
|
+
const SEG = '[a-z][a-z0-9_]*';
|
|
29
|
+
const ORG = 'x-[a-z0-9]+(?:-[a-z0-9]+)*';
|
|
30
|
+
const PURPOSE_RE = new RegExp(`^(?:${SEG}(?:\\.${SEG})*|${ORG}(?:\\.${SEG})+)$`);
|
|
31
|
+
const MAX_PURPOSE_LENGTH = 128;
|
|
32
|
+
/** Whether `value` is syntactically a purpose (no wildcard). */
|
|
33
|
+
export function isValidPurpose(value) {
|
|
34
|
+
return typeof value === 'string' && value.length <= MAX_PURPOSE_LENGTH && PURPOSE_RE.test(value);
|
|
35
|
+
}
|
|
36
|
+
/** Whether `value` is a vocabulary term or a well-formed private term. */
|
|
37
|
+
export function isKnownPurpose(value) {
|
|
38
|
+
return isValidPurpose(value) && (PURPOSE_VOCABULARY.has(value) || value.startsWith(PRIVATE_PURPOSE_PREFIX));
|
|
39
|
+
}
|
|
40
|
+
/** Whether `purpose` matches one `allowed_purposes` `pattern`. False when either is malformed. */
|
|
41
|
+
export function purposeMatches(pattern, purpose) {
|
|
42
|
+
if (!isValidPurposePattern(pattern) || !isValidPurpose(purpose))
|
|
43
|
+
return false;
|
|
44
|
+
if (pattern.endsWith('.*')) {
|
|
45
|
+
const prefix = pattern.slice(0, -1); // keep the trailing dot: "aml.cdd."
|
|
46
|
+
return purpose.startsWith(prefix) && purpose.length > prefix.length;
|
|
47
|
+
}
|
|
48
|
+
return purpose === pattern;
|
|
49
|
+
}
|
|
50
|
+
/** The first pattern in `patterns` that `purpose` matches, or undefined. */
|
|
51
|
+
export function matchPurpose(patterns, purpose) {
|
|
52
|
+
if (patterns === undefined)
|
|
53
|
+
return undefined;
|
|
54
|
+
for (const pattern of patterns) {
|
|
55
|
+
if (purposeMatches(pattern, purpose))
|
|
56
|
+
return pattern;
|
|
57
|
+
}
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=purpose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"purpose.js","sourceRoot":"","sources":["../src/purpose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC;IAC7D,oBAAoB;IACpB,iBAAiB;IACjB,eAAe;IACf,+BAA+B;IAC/B,iBAAiB;CAClB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAE3C,MAAM,GAAG,GAAG,iBAAiB,CAAC;AAC9B,MAAM,GAAG,GAAG,4BAA4B,CAAC;AACzC,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC;AACjF,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,gEAAgE;AAChE,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,kBAAkB,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnG,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAC9G,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,cAAc,CAAC,OAAgB,EAAE,OAAgB;IAC/D,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9E,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,oCAAoC;QACzE,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACtE,CAAC;IACD,OAAO,OAAO,KAAK,OAAO,CAAC;AAC7B,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,YAAY,CAAC,QAAwC,EAAE,OAAgB;IACrF,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC7C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC;YAAE,OAAO,OAAiB,CAAC;IACjE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/resources/agents.js
CHANGED
|
@@ -7,17 +7,17 @@ export class AgentsClient {
|
|
|
7
7
|
return normalizeAgent(await this.#http.post('/v1/agents', params));
|
|
8
8
|
}
|
|
9
9
|
async get(agentId) {
|
|
10
|
-
return normalizeAgent(await this.#http.get(`/v1/agents/${agentId}`));
|
|
10
|
+
return normalizeAgent(await this.#http.get(`/v1/agents/${encodeURIComponent(agentId)}`));
|
|
11
11
|
}
|
|
12
12
|
async list() {
|
|
13
13
|
const response = await this.#http.get('/v1/agents');
|
|
14
14
|
return { ...response, agents: response.agents.map(normalizeAgent) };
|
|
15
15
|
}
|
|
16
16
|
async update(agentId, params) {
|
|
17
|
-
return normalizeAgent(await this.#http.patch(`/v1/agents/${agentId}`, params));
|
|
17
|
+
return normalizeAgent(await this.#http.patch(`/v1/agents/${encodeURIComponent(agentId)}`, params));
|
|
18
18
|
}
|
|
19
19
|
delete(agentId) {
|
|
20
|
-
return this.#http.delete(`/v1/agents/${agentId}`);
|
|
20
|
+
return this.#http.delete(`/v1/agents/${encodeURIComponent(agentId)}`);
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
function normalizeAgent(response) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/resources/agents.ts"],"names":[],"mappings":"AAiBA,MAAM,OAAO,YAAY;IACd,KAAK,CAAa;IAE3B,YAAY,IAAgB;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAA2B;QACxC,OAAO,cAAc,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAgB,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAe;QACvB,OAAO,cAAc,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/resources/agents.ts"],"names":[],"mappings":"AAiBA,MAAM,OAAO,YAAY;IACd,KAAK,CAAa;IAE3B,YAAY,IAAgB;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAA2B;QACxC,OAAO,cAAc,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAgB,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAe;QACvB,OAAO,cAAc,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,cAAc,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1G,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAwB,YAAY,CAAC,CAAC;QAC3E,OAAO,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,MAAyB;QACrD,OAAO,cAAc,CACnB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAgB,cAAc,kBAAkB,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAC3F,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,OAAe;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAO,cAAc,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;CACF;AAED,SAAS,cAAc,CAAC,QAAuB;IAC7C,IAAI,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,EAAE,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxE,MAAM,IAAI,SAAS,CAAC,oDAAoD,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,OAAO,CAAC;IAC3C,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { HttpClient } from '../http.js';
|
|
2
|
-
import type { Anomaly, DetectAnomaliesResponse, ListAnomaliesResponse } from '../types.js';
|
|
2
|
+
import type { Anomaly, DetectAnomaliesResponse, ListAnomaliesResponse, IrregularityResponsePolicy, IrregularityResponseMode } from '../types.js';
|
|
3
3
|
export declare class AnomaliesClient {
|
|
4
4
|
#private;
|
|
5
5
|
constructor(http: HttpClient);
|
|
6
|
+
getResponsePolicy(): Promise<IrregularityResponsePolicy>;
|
|
7
|
+
setResponsePolicy(mode: IrregularityResponseMode): Promise<IrregularityResponsePolicy>;
|
|
6
8
|
/** Run anomaly detection across all agents and return detected anomalies. */
|
|
7
9
|
detect(): Promise<DetectAnomaliesResponse>;
|
|
8
10
|
/** List stored anomalies. Pass `{ unacknowledged: true }` to filter to open ones only. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anomalies.d.ts","sourceRoot":"","sources":["../../src/resources/anomalies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EACV,OAAO,EACP,uBAAuB,EACvB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"anomalies.d.ts","sourceRoot":"","sources":["../../src/resources/anomalies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EACV,OAAO,EACP,uBAAuB,EACvB,qBAAqB,EACrB,0BAA0B,EAC1B,wBAAwB,EACzB,MAAM,aAAa,CAAC;AAErB,qBAAa,eAAe;;IAG1B,YAAY,IAAI,EAAE,UAAU,EAE3B;IAED,iBAAiB,IAAI,OAAO,CAAC,0BAA0B,CAAC,CAEvD;IAED,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAErF;IAED,6EAA6E;IAC7E,MAAM,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAEzC;IAED,0FAA0F;IAC1F,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAG1E;IAED,oCAAoC;IACpC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE/C;CACF"}
|