@vectros-ai/mcp-server 0.14.0 → 0.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.
- package/CHANGELOG.md +23 -0
- package/README.md +2 -2
- package/dist/cli-http.js +118 -62
- package/dist/cli-http.js.map +1 -1
- package/dist/cli-http.mjs +118 -62
- package/dist/cli-http.mjs.map +1 -1
- package/dist/cli.js +118 -62
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +118 -62
- package/dist/cli.mjs.map +1 -1
- package/dist/index.js +118 -62
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +118 -62
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/cli-http.js
CHANGED
|
@@ -2847,7 +2847,7 @@ var AuthClient = class {
|
|
|
2847
2847
|
);
|
|
2848
2848
|
}
|
|
2849
2849
|
/**
|
|
2850
|
-
* Creates a new access profile under the given app context. This call is idempotent by `principalId`: if a profile with the same `principalId` already exists, the existing profile is returned (with status 200) instead of creating a duplicate. The response's `created` field (and the HTTP status — 201 when created, 200 when an existing profile was returned) tells the two apart. To overwrite an existing profile's `scopes`/`roleId`, `identityOverrides`, and `status` instead of returning it unchanged, set `?upsert=true` (this also requires the `profiles:u` scope, and applies the same `identityOverrides` bounds the update endpoint documents — a scoped credential may not repoint or clear an identity value it does not itself hold). You must provide exactly one of `scopes` (an inline list of scopes) or `roleId` (a reference to a role); supplying both, or neither, is rejected. `identityOverrides` is keyed by ownership namespace in `scope:<namespace>` form — `scope:org` and `scope:client` for the reserved namespaces, or any namespace you have registered — and may name at most two; any other key (including the account identifier or `userId`) is rejected. If you use a scoped credential, the profile's effective scopes may not exceed your own; a root API key (`sk_`) is exempt. Requires the `profiles:c` scope.
|
|
2850
|
+
* Creates a new access profile under the given app context. This call is idempotent by `principalId`: if a profile with the same `principalId` already exists, the existing profile is returned (with status 200) instead of creating a duplicate. The response's `created` field (and the HTTP status — 201 when created, 200 when an existing profile was returned) tells the two apart. To overwrite an existing profile's `scopes`/`roleId`, `identityOverrides`, and `status` instead of returning it unchanged, set `?upsert=true` (this also requires the `profiles:u` scope, and applies the same `identityOverrides` bounds the update endpoint documents — a scoped credential may not repoint or clear an identity value it does not itself hold). The `principalId` must name a principal that already exists: a `usr_` principal must be a live user in your tenant, so create the user before granting it a profile. A `usr_` id that names no such user is rejected, and no profile is created. `key_` principals are not checked this way. You must provide exactly one of `scopes` (an inline list of scopes) or `roleId` (a reference to a role); supplying both, or neither, is rejected. `identityOverrides` is keyed by ownership namespace in `scope:<namespace>` form — `scope:org` and `scope:client` for the reserved namespaces, or any namespace you have registered — and may name at most two; any other key (including the account identifier or `userId`) is rejected. If you use a scoped credential, the profile's effective scopes may not exceed your own; a root API key (`sk_`) is exempt. Requires the `profiles:c` scope.
|
|
2851
2851
|
*
|
|
2852
2852
|
* @param {Vectros.CreateAccessProfileRequest} request
|
|
2853
2853
|
* @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
@@ -3948,7 +3948,7 @@ var AuthClient = class {
|
|
|
3948
3948
|
);
|
|
3949
3949
|
}
|
|
3950
3950
|
/**
|
|
3951
|
-
* Returns full usage detail for the requested calendar month, broken down by category (search, documents, and records) with per-category credit estimates and a split between your live and test environments. Defaults to the current month when `year` and `month` are omitted. Requires the `billing:r` scope on scoped tokens; API keys always have access.
|
|
3951
|
+
* Returns full usage detail for the requested calendar month, broken down by category (search, documents, and records) with per-category credit estimates and a split between your live and test environments. Defaults to the current month when `year` and `month` are omitted. Requires the `billing:r` scope on scoped tokens; API keys always have access. **A token confined to a single app context sees only that context's usage**: totals, the environment split, and the `contexts` breakdown narrow to it, and the environment your context is not bound to is omitted (`null`), not zeroed. Only a token with cross-context reach sees your full account-wide totals. Two exceptions to the narrowing, since they have no per-context breakdown to narrow to: `reads.calls.used`/`reads.dataOut.bytes` (metered per account, not per context) read as `0` for a confined token rather than a narrowed figure — the corresponding overage-credit charge fields narrow correctly; and `credits.limit` stays your whole plan's ceiling, so `credits.remaining` may overstate the account's true remaining room.
|
|
3952
3952
|
*
|
|
3953
3953
|
* @param {Vectros.GetUsageRequest} request
|
|
3954
3954
|
* @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
@@ -4011,7 +4011,7 @@ var AuthClient = class {
|
|
|
4011
4011
|
return handleNonStatusCodeError(_response.error, _response.rawResponse, "GET", "/v1/usage");
|
|
4012
4012
|
}
|
|
4013
4013
|
/**
|
|
4014
|
-
* Retrieves a single registered issuer by issuerId. Requires a root API key or the bootstrap's provisioning capability.
|
|
4014
|
+
* Retrieves a single registered issuer by issuerId. Requires a root API key or the bootstrap's provisioning capability. A credential confined to one app context sees only an issuer registered in that context; naming one registered in another context returns 404, identically to a nonexistent issuerId. A root API key sees every context.
|
|
4015
4015
|
*
|
|
4016
4016
|
* @param {Vectros.GetIssuerRequest} request
|
|
4017
4017
|
* @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
@@ -4069,13 +4069,14 @@ var AuthClient = class {
|
|
|
4069
4069
|
return handleNonStatusCodeError(_response.error, _response.rawResponse, "GET", "/v1/auth/issuers/{issuerId}");
|
|
4070
4070
|
}
|
|
4071
4071
|
/**
|
|
4072
|
-
* Deregisters a trusted third-party IdP issuer. Requires a root API key or the bootstrap's provisioning capability.
|
|
4072
|
+
* Deregisters a trusted third-party IdP issuer. Requires a root API key or the bootstrap's provisioning capability. A credential confined to one app context may only deregister an issuer registered in that context; naming one registered in another context returns 404, identically to a nonexistent issuerId. A root API key may deregister any issuer. Refused if any user account was ever created or matched via this issuer (by a prior self-signup or accepted invite, through `POST /v1/auth/token/exchange`) — that access cannot be silently orphaned. Deactivate the affected users first if you intend to cut off their access, or register a replacement issuer before removing this one. An issuer that has never been used for an exchange (no bound users yet) can always be deregistered.
|
|
4073
4073
|
*
|
|
4074
4074
|
* @param {Vectros.DeleteIssuerRequest} request
|
|
4075
4075
|
* @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
4076
4076
|
*
|
|
4077
4077
|
* @throws {@link Vectros.ForbiddenError}
|
|
4078
4078
|
* @throws {@link Vectros.NotFoundError}
|
|
4079
|
+
* @throws {@link Vectros.ConflictError}
|
|
4079
4080
|
* @throws {@link Vectros.TooManyRequestsError}
|
|
4080
4081
|
*
|
|
4081
4082
|
* @example
|
|
@@ -4117,6 +4118,8 @@ var AuthClient = class {
|
|
|
4117
4118
|
throw new ForbiddenError(_response.error.body, _response.rawResponse);
|
|
4118
4119
|
case 404:
|
|
4119
4120
|
throw new NotFoundError(_response.error.body, _response.rawResponse);
|
|
4121
|
+
case 409:
|
|
4122
|
+
throw new ConflictError(_response.error.body, _response.rawResponse);
|
|
4120
4123
|
case 429:
|
|
4121
4124
|
throw new TooManyRequestsError(_response.error.body, _response.rawResponse);
|
|
4122
4125
|
default:
|
|
@@ -4135,7 +4138,7 @@ var AuthClient = class {
|
|
|
4135
4138
|
);
|
|
4136
4139
|
}
|
|
4137
4140
|
/**
|
|
4138
|
-
* Returns the issuers registered in your tenant. Requires a root API key or the bootstrap's provisioning capability. Returns a `{data, nextCursor}` envelope.
|
|
4141
|
+
* Returns the issuers registered in your tenant. Requires a root API key or the bootstrap's provisioning capability. A credential confined to one app context sees only the issuers registered in that context; a root API key sees every context. Returns a `{data, nextCursor}` envelope.
|
|
4139
4142
|
*
|
|
4140
4143
|
* @param {Vectros.ListIssuersRequest} request
|
|
4141
4144
|
* @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
@@ -4192,7 +4195,7 @@ var AuthClient = class {
|
|
|
4192
4195
|
return handleNonStatusCodeError(_response.error, _response.rawResponse, "GET", "/v1/auth/issuers");
|
|
4193
4196
|
}
|
|
4194
4197
|
/**
|
|
4195
|
-
* Registers a trusted third-party IdP issuer that BYO-IdP token exchange (`POST /v1/auth/token/exchange`) may accept a `subject_token` from. Requires a root API key or the CLI bootstrap's provisioning capability — never an ordinary partner-grantable scope. Idempotent by `issuerId` within your tenant; the `(issuer, audience)` pair must not already be registered by a different issuerId/tenant.
|
|
4198
|
+
* Registers a trusted third-party IdP issuer that BYO-IdP token exchange (`POST /v1/auth/token/exchange`) may accept a `subject_token` from. Requires a root API key or the CLI bootstrap's provisioning capability — never an ordinary partner-grantable scope. Idempotent by `issuerId` within your tenant; the `(issuer, audience)` pair must not already be registered by a different issuerId/tenant. An app context may have at most one active issuer — deregister the existing one first if you need to replace it. One issuer MAY serve several contexts today, each via its own registration row with a distinct `audience`.
|
|
4196
4199
|
*
|
|
4197
4200
|
* @param {Vectros.IssuerRequest} request
|
|
4198
4201
|
* @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
@@ -4303,7 +4306,7 @@ var AuthClient = class {
|
|
|
4303
4306
|
return handleNonStatusCodeError(_response.error, _response.rawResponse, "GET", "/v1/ping");
|
|
4304
4307
|
}
|
|
4305
4308
|
/**
|
|
4306
|
-
* Returns the access profiles for the given principal across
|
|
4309
|
+
* Returns the access profiles for the given principal. Looking up your OWN principal — or holding the `context-directory-read` capability — returns the profiles across ALL of your contexts, letting you answer questions like "which apps does this user have access to?". A context-bound credential looking up a DIFFERENT principal instead sees only that principal's profile in your credential's own context (at most one result), never across contexts it has no authority over. Results are always confined to your account. Requires the `profiles:r` scope.
|
|
4307
4310
|
*
|
|
4308
4311
|
* @param {Vectros.ListProfilesForPrincipalRequest} request
|
|
4309
4312
|
* @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
@@ -4582,7 +4585,7 @@ var AuthClient = class {
|
|
|
4582
4585
|
return handleNonStatusCodeError(_response.error, _response.rawResponse, "POST", "/v1/users/invite/resend");
|
|
4583
4586
|
}
|
|
4584
4587
|
/**
|
|
4585
|
-
* RFC 8693 OAuth 2.0 Token Exchange. Trades a JWT issued by a third-party identity provider you've registered (`POST /v1/auth/issuers`) for a Vectros `st_*` scoped bearer token — no Vectros credential required to call this endpoint. The exchanged token's scope is resolved entirely server-side from the matched user's access profile; this endpoint accepts no caller-supplied scope, resource, or audience parameter (RFC 8693 §2.1's `resource`/`audience`/`scope` are not used in v1 — the registered `(issuer, audience)` pair alone pins the target tenant and app context). On a first-time login (no existing Vectros identity for this subject), two opt-in binding paths exist: `invite_token` (a `PENDING` sub-user invitation), and — if the registration declares one or more self-signup policies — `signup_type` (a brand-new user is created and bound to the policy's configured role). If `invite_token` is present at all, it is the ONLY path tried — a failed invite never falls through to self-signup. Neither field is required for a subject with an existing identity. Uses the OAuth-standard error envelope (`{"error":..., "error_description":...}`, RFC 6749 §5.2), NOT this API's usual `{"message":...}` shape — its client is generic OAuth tooling, not the Vectros SDK.
|
|
4588
|
+
* RFC 8693 OAuth 2.0 Token Exchange. Trades a JWT issued by a third-party identity provider you've registered (`POST /v1/auth/issuers`) for a Vectros `st_*` scoped bearer token — no Vectros credential required to call this endpoint. The exchanged token's scope is resolved entirely server-side from the matched user's access profile; this endpoint accepts no caller-supplied scope, resource, or audience parameter (RFC 8693 §2.1's `resource`/`audience`/`scope` are not used in v1 — the registered `(issuer, audience)` pair alone pins the target tenant and app context). On a first-time login (no existing Vectros identity for this subject), two opt-in binding paths exist: `invite_token` (a `PENDING` sub-user invitation), and — if the registration declares one or more self-signup policies — `signup_type` (a brand-new user is created and bound to the policy's configured role). If `invite_token` is present at all, it is the ONLY path tried — a failed invite never falls through to self-signup. Neither field is required for a subject with an existing identity. If your issuer is registered against more than one app context (each via its own audience), `context_id` selects which one to target; omit it when your token's `aud` claim matches only one registered context — the common case, unaffected by this field. Uses the OAuth-standard error envelope (`{"error":..., "error_description":...}`, RFC 6749 §5.2), NOT this API's usual `{"message":...}` shape — its client is generic OAuth tooling, not the Vectros SDK.
|
|
4586
4589
|
*
|
|
4587
4590
|
* @param {Vectros.TokenExchangeRequest} request
|
|
4588
4591
|
* @param {AuthClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
@@ -6124,6 +6127,7 @@ var IdentityClient = class {
|
|
|
6124
6127
|
* @example
|
|
6125
6128
|
* await client.identity.listEntities({
|
|
6126
6129
|
* namespace: "team",
|
|
6130
|
+
* contextId: "myapp",
|
|
6127
6131
|
* startFrom: "b3BhcXVlLWN1cnNvci1mcm9tLXRoZS1wcmV2aW91cy1wYWdl"
|
|
6128
6132
|
* })
|
|
6129
6133
|
*/
|
|
@@ -6133,6 +6137,7 @@ var IdentityClient = class {
|
|
|
6133
6137
|
async __listEntities(request, requestOptions) {
|
|
6134
6138
|
const {
|
|
6135
6139
|
namespace,
|
|
6140
|
+
contextId,
|
|
6136
6141
|
userId,
|
|
6137
6142
|
externalId,
|
|
6138
6143
|
scope,
|
|
@@ -6147,6 +6152,7 @@ var IdentityClient = class {
|
|
|
6147
6152
|
limit
|
|
6148
6153
|
} = request;
|
|
6149
6154
|
const _queryParams = {
|
|
6155
|
+
contextId,
|
|
6150
6156
|
userId,
|
|
6151
6157
|
externalId,
|
|
6152
6158
|
scope,
|
|
@@ -6205,6 +6211,7 @@ var IdentityClient = class {
|
|
|
6205
6211
|
* @example
|
|
6206
6212
|
* await client.identity.createEntity({
|
|
6207
6213
|
* namespace: "team",
|
|
6214
|
+
* contextId: "myapp",
|
|
6208
6215
|
* body: {
|
|
6209
6216
|
* externalId: "team_eng_platform"
|
|
6210
6217
|
* }
|
|
@@ -6214,9 +6221,10 @@ var IdentityClient = class {
|
|
|
6214
6221
|
return HttpResponsePromise.fromPromise(this.__createEntity(request, requestOptions));
|
|
6215
6222
|
}
|
|
6216
6223
|
async __createEntity(request, requestOptions) {
|
|
6217
|
-
const { namespace, upsert, body: _body } = request;
|
|
6224
|
+
const { namespace, upsert, contextId, body: _body } = request;
|
|
6218
6225
|
const _queryParams = {
|
|
6219
|
-
upsert
|
|
6226
|
+
upsert,
|
|
6227
|
+
contextId
|
|
6220
6228
|
};
|
|
6221
6229
|
const _authRequest = await this._options.authProvider.getAuthRequest();
|
|
6222
6230
|
const _headers = mergeHeaders(
|
|
@@ -6273,14 +6281,18 @@ var IdentityClient = class {
|
|
|
6273
6281
|
* @example
|
|
6274
6282
|
* await client.identity.getEntity({
|
|
6275
6283
|
* namespace: "team",
|
|
6276
|
-
* id: "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
|
|
6284
|
+
* id: "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
|
|
6285
|
+
* contextId: "myapp"
|
|
6277
6286
|
* })
|
|
6278
6287
|
*/
|
|
6279
6288
|
getEntity(request, requestOptions) {
|
|
6280
6289
|
return HttpResponsePromise.fromPromise(this.__getEntity(request, requestOptions));
|
|
6281
6290
|
}
|
|
6282
6291
|
async __getEntity(request, requestOptions) {
|
|
6283
|
-
const { namespace, id } = request;
|
|
6292
|
+
const { namespace, id, contextId } = request;
|
|
6293
|
+
const _queryParams = {
|
|
6294
|
+
contextId
|
|
6295
|
+
};
|
|
6284
6296
|
const _authRequest = await this._options.authProvider.getAuthRequest();
|
|
6285
6297
|
const _headers = mergeHeaders(
|
|
6286
6298
|
_authRequest.headers,
|
|
@@ -6294,7 +6306,7 @@ var IdentityClient = class {
|
|
|
6294
6306
|
),
|
|
6295
6307
|
method: "GET",
|
|
6296
6308
|
headers: _headers,
|
|
6297
|
-
queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),
|
|
6309
|
+
queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),
|
|
6298
6310
|
timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,
|
|
6299
6311
|
maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
|
|
6300
6312
|
abortSignal: requestOptions?.abortSignal,
|
|
@@ -6331,6 +6343,7 @@ var IdentityClient = class {
|
|
|
6331
6343
|
* await client.identity.updateEntity({
|
|
6332
6344
|
* namespace: "team",
|
|
6333
6345
|
* id: "id",
|
|
6346
|
+
* contextId: "myapp",
|
|
6334
6347
|
* body: {
|
|
6335
6348
|
* externalId: "team_eng_platform"
|
|
6336
6349
|
* }
|
|
@@ -6340,7 +6353,10 @@ var IdentityClient = class {
|
|
|
6340
6353
|
return HttpResponsePromise.fromPromise(this.__updateEntity(request, requestOptions));
|
|
6341
6354
|
}
|
|
6342
6355
|
async __updateEntity(request, requestOptions) {
|
|
6343
|
-
const { namespace, id, body: _body } = request;
|
|
6356
|
+
const { namespace, id, contextId, body: _body } = request;
|
|
6357
|
+
const _queryParams = {
|
|
6358
|
+
contextId
|
|
6359
|
+
};
|
|
6344
6360
|
const _authRequest = await this._options.authProvider.getAuthRequest();
|
|
6345
6361
|
const _headers = mergeHeaders(
|
|
6346
6362
|
_authRequest.headers,
|
|
@@ -6355,7 +6371,7 @@ var IdentityClient = class {
|
|
|
6355
6371
|
method: "PUT",
|
|
6356
6372
|
headers: _headers,
|
|
6357
6373
|
contentType: "application/json",
|
|
6358
|
-
queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),
|
|
6374
|
+
queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),
|
|
6359
6375
|
requestType: "json",
|
|
6360
6376
|
body: _body,
|
|
6361
6377
|
timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,
|
|
@@ -6395,14 +6411,18 @@ var IdentityClient = class {
|
|
|
6395
6411
|
* @example
|
|
6396
6412
|
* await client.identity.deleteEntity({
|
|
6397
6413
|
* namespace: "team",
|
|
6398
|
-
* id: "id"
|
|
6414
|
+
* id: "id",
|
|
6415
|
+
* contextId: "myapp"
|
|
6399
6416
|
* })
|
|
6400
6417
|
*/
|
|
6401
6418
|
deleteEntity(request, requestOptions) {
|
|
6402
6419
|
return HttpResponsePromise.fromPromise(this.__deleteEntity(request, requestOptions));
|
|
6403
6420
|
}
|
|
6404
6421
|
async __deleteEntity(request, requestOptions) {
|
|
6405
|
-
const { namespace, id } = request;
|
|
6422
|
+
const { namespace, id, contextId } = request;
|
|
6423
|
+
const _queryParams = {
|
|
6424
|
+
contextId
|
|
6425
|
+
};
|
|
6406
6426
|
const _authRequest = await this._options.authProvider.getAuthRequest();
|
|
6407
6427
|
const _headers = mergeHeaders(
|
|
6408
6428
|
_authRequest.headers,
|
|
@@ -6416,7 +6436,7 @@ var IdentityClient = class {
|
|
|
6416
6436
|
),
|
|
6417
6437
|
method: "DELETE",
|
|
6418
6438
|
headers: _headers,
|
|
6419
|
-
queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),
|
|
6439
|
+
queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),
|
|
6420
6440
|
timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,
|
|
6421
6441
|
maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
|
|
6422
6442
|
abortSignal: requestOptions?.abortSignal,
|
|
@@ -6459,6 +6479,7 @@ var IdentityClient = class {
|
|
|
6459
6479
|
* @example
|
|
6460
6480
|
* await client.identity.lookupEntities({
|
|
6461
6481
|
* namespace: "team",
|
|
6482
|
+
* contextId: "myapp",
|
|
6462
6483
|
* body: {
|
|
6463
6484
|
* type: "person_v1",
|
|
6464
6485
|
* field: "ssn"
|
|
@@ -6469,7 +6490,10 @@ var IdentityClient = class {
|
|
|
6469
6490
|
return HttpResponsePromise.fromPromise(this.__lookupEntities(request, requestOptions));
|
|
6470
6491
|
}
|
|
6471
6492
|
async __lookupEntities(request, requestOptions) {
|
|
6472
|
-
const { namespace, body: _body } = request;
|
|
6493
|
+
const { namespace, contextId, body: _body } = request;
|
|
6494
|
+
const _queryParams = {
|
|
6495
|
+
contextId
|
|
6496
|
+
};
|
|
6473
6497
|
const _authRequest = await this._options.authProvider.getAuthRequest();
|
|
6474
6498
|
const _headers = mergeHeaders(
|
|
6475
6499
|
_authRequest.headers,
|
|
@@ -6484,7 +6508,7 @@ var IdentityClient = class {
|
|
|
6484
6508
|
method: "POST",
|
|
6485
6509
|
headers: _headers,
|
|
6486
6510
|
contentType: "application/json",
|
|
6487
|
-
queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),
|
|
6511
|
+
queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),
|
|
6488
6512
|
requestType: "json",
|
|
6489
6513
|
body: _body,
|
|
6490
6514
|
timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,
|
|
@@ -6528,15 +6552,17 @@ var IdentityClient = class {
|
|
|
6528
6552
|
* @example
|
|
6529
6553
|
* await client.identity.getEntityVersions({
|
|
6530
6554
|
* namespace: "team",
|
|
6531
|
-
* id: "id"
|
|
6555
|
+
* id: "id",
|
|
6556
|
+
* contextId: "myapp"
|
|
6532
6557
|
* })
|
|
6533
6558
|
*/
|
|
6534
6559
|
getEntityVersions(request, requestOptions) {
|
|
6535
6560
|
return HttpResponsePromise.fromPromise(this.__getEntityVersions(request, requestOptions));
|
|
6536
6561
|
}
|
|
6537
6562
|
async __getEntityVersions(request, requestOptions) {
|
|
6538
|
-
const { namespace, id, startFrom } = request;
|
|
6563
|
+
const { namespace, id, contextId, startFrom } = request;
|
|
6539
6564
|
const _queryParams = {
|
|
6565
|
+
contextId,
|
|
6540
6566
|
startFrom
|
|
6541
6567
|
};
|
|
6542
6568
|
const _authRequest = await this._options.authProvider.getAuthRequest();
|
|
@@ -6598,7 +6624,10 @@ var IdentityClient = class {
|
|
|
6598
6624
|
return HttpResponsePromise.fromPromise(this.__getNamespace(request, requestOptions));
|
|
6599
6625
|
}
|
|
6600
6626
|
async __getNamespace(request, requestOptions) {
|
|
6601
|
-
const { namespace } = request;
|
|
6627
|
+
const { namespace, contextId } = request;
|
|
6628
|
+
const _queryParams = {
|
|
6629
|
+
contextId
|
|
6630
|
+
};
|
|
6602
6631
|
const _authRequest = await this._options.authProvider.getAuthRequest();
|
|
6603
6632
|
const _headers = mergeHeaders(
|
|
6604
6633
|
_authRequest.headers,
|
|
@@ -6612,7 +6641,7 @@ var IdentityClient = class {
|
|
|
6612
6641
|
),
|
|
6613
6642
|
method: "GET",
|
|
6614
6643
|
headers: _headers,
|
|
6615
|
-
queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),
|
|
6644
|
+
queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),
|
|
6616
6645
|
timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,
|
|
6617
6646
|
maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
|
|
6618
6647
|
abortSignal: requestOptions?.abortSignal,
|
|
@@ -6637,7 +6666,7 @@ var IdentityClient = class {
|
|
|
6637
6666
|
return handleNonStatusCodeError(_response.error, _response.rawResponse, "GET", "/v1/namespaces/{namespace}");
|
|
6638
6667
|
}
|
|
6639
6668
|
/**
|
|
6640
|
-
* Updates the mutable fields (`entityBacked`, `defaultSchemaId`, `specificityRank`) of a registered namespace. The namespace name
|
|
6669
|
+
* Updates the mutable fields (`entityBacked`, `defaultSchemaId`, `specificityRank`) of a registered namespace. The namespace name and its `contextId` (which row is selected) are both immutable. Requires a root API key. `org` and `client` are updatable like any other namespace — there is no reserved-built-in exception.
|
|
6641
6670
|
*
|
|
6642
6671
|
* @param {Vectros.UpdateNamespaceRequest} request
|
|
6643
6672
|
* @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
@@ -6659,7 +6688,10 @@ var IdentityClient = class {
|
|
|
6659
6688
|
return HttpResponsePromise.fromPromise(this.__updateNamespace(request, requestOptions));
|
|
6660
6689
|
}
|
|
6661
6690
|
async __updateNamespace(request, requestOptions) {
|
|
6662
|
-
const { namespace, body: _body } = request;
|
|
6691
|
+
const { namespace, contextId, body: _body } = request;
|
|
6692
|
+
const _queryParams = {
|
|
6693
|
+
contextId
|
|
6694
|
+
};
|
|
6663
6695
|
const _authRequest = await this._options.authProvider.getAuthRequest();
|
|
6664
6696
|
const _headers = mergeHeaders(
|
|
6665
6697
|
_authRequest.headers,
|
|
@@ -6674,7 +6706,7 @@ var IdentityClient = class {
|
|
|
6674
6706
|
method: "PUT",
|
|
6675
6707
|
headers: _headers,
|
|
6676
6708
|
contentType: "application/json",
|
|
6677
|
-
queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),
|
|
6709
|
+
queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),
|
|
6678
6710
|
requestType: "json",
|
|
6679
6711
|
body: _body,
|
|
6680
6712
|
timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,
|
|
@@ -6705,7 +6737,7 @@ var IdentityClient = class {
|
|
|
6705
6737
|
return handleNonStatusCodeError(_response.error, _response.rawResponse, "PUT", "/v1/namespaces/{namespace}");
|
|
6706
6738
|
}
|
|
6707
6739
|
/**
|
|
6708
|
-
* Deletes a registered scope namespace. Requires a root API key.
|
|
6740
|
+
* Deletes a registered scope namespace. Requires a root API key. `org` and `client` are deletable like any other namespace — there is no reserved-built-in exception. A namespace that still has entities cannot be deleted (409) — delete its entities first; this keeps them reachable by the account-teardown and erasure sweeps.
|
|
6709
6741
|
*
|
|
6710
6742
|
* @param {Vectros.DeleteNamespaceRequest} request
|
|
6711
6743
|
* @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
@@ -6723,7 +6755,10 @@ var IdentityClient = class {
|
|
|
6723
6755
|
return HttpResponsePromise.fromPromise(this.__deleteNamespace(request, requestOptions));
|
|
6724
6756
|
}
|
|
6725
6757
|
async __deleteNamespace(request, requestOptions) {
|
|
6726
|
-
const { namespace } = request;
|
|
6758
|
+
const { namespace, contextId } = request;
|
|
6759
|
+
const _queryParams = {
|
|
6760
|
+
contextId
|
|
6761
|
+
};
|
|
6727
6762
|
const _authRequest = await this._options.authProvider.getAuthRequest();
|
|
6728
6763
|
const _headers = mergeHeaders(
|
|
6729
6764
|
_authRequest.headers,
|
|
@@ -6737,7 +6772,7 @@ var IdentityClient = class {
|
|
|
6737
6772
|
),
|
|
6738
6773
|
method: "DELETE",
|
|
6739
6774
|
headers: _headers,
|
|
6740
|
-
queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),
|
|
6775
|
+
queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),
|
|
6741
6776
|
timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,
|
|
6742
6777
|
maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
|
|
6743
6778
|
abortSignal: requestOptions?.abortSignal,
|
|
@@ -6766,7 +6801,7 @@ var IdentityClient = class {
|
|
|
6766
6801
|
return handleNonStatusCodeError(_response.error, _response.rawResponse, "DELETE", "/v1/namespaces/{namespace}");
|
|
6767
6802
|
}
|
|
6768
6803
|
/**
|
|
6769
|
-
* Returns the scope namespaces
|
|
6804
|
+
* Returns the scope namespaces in your account, including `org` and `client`, which are provisioned for you when the account is created. Returns a `{data, nextCursor}` envelope.
|
|
6770
6805
|
*
|
|
6771
6806
|
* @param {Vectros.ListNamespacesRequest} request
|
|
6772
6807
|
* @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
@@ -6778,10 +6813,11 @@ var IdentityClient = class {
|
|
|
6778
6813
|
return HttpResponsePromise.fromPromise(this.__listNamespaces(request, requestOptions));
|
|
6779
6814
|
}
|
|
6780
6815
|
async __listNamespaces(request = {}, requestOptions) {
|
|
6781
|
-
const { startFrom, limit } = request;
|
|
6816
|
+
const { startFrom, limit, contextId } = request;
|
|
6782
6817
|
const _queryParams = {
|
|
6783
6818
|
startFrom,
|
|
6784
|
-
limit
|
|
6819
|
+
limit,
|
|
6820
|
+
contextId
|
|
6785
6821
|
};
|
|
6786
6822
|
const _authRequest = await this._options.authProvider.getAuthRequest();
|
|
6787
6823
|
const _headers = mergeHeaders(
|
|
@@ -6816,9 +6852,9 @@ var IdentityClient = class {
|
|
|
6816
6852
|
return handleNonStatusCodeError(_response.error, _response.rawResponse, "GET", "/v1/namespaces");
|
|
6817
6853
|
}
|
|
6818
6854
|
/**
|
|
6819
|
-
* Registers a new scope namespace and declares whether its values resolve to identity entities (`entityBacked`). Also requires `specificityRank`, an explicit, account-unique position in the specificity order used to break recordType schema-resolution ties. Requires a root API key
|
|
6855
|
+
* Registers a new scope namespace and declares whether its values resolve to identity entities (`entityBacked`). Also requires `specificityRank`, an explicit, account-unique position in the specificity order used to break recordType schema-resolution ties. Requires a root API key or the CLI bootstrap's provisioning capability — never an ordinary partner-grantable scope. `org` and `client` are provisioned when your account is created, so registering either returns the already-registered error.
|
|
6820
6856
|
*
|
|
6821
|
-
* @param {Vectros.
|
|
6857
|
+
* @param {Vectros.RegisterNamespaceRequest} request
|
|
6822
6858
|
* @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
6823
6859
|
*
|
|
6824
6860
|
* @throws {@link Vectros.BadRequestError}
|
|
@@ -6827,14 +6863,20 @@ var IdentityClient = class {
|
|
|
6827
6863
|
*
|
|
6828
6864
|
* @example
|
|
6829
6865
|
* await client.identity.registerNamespace({
|
|
6830
|
-
*
|
|
6831
|
-
*
|
|
6866
|
+
* body: {
|
|
6867
|
+
* namespace: "team",
|
|
6868
|
+
* specificityRank: 1500
|
|
6869
|
+
* }
|
|
6832
6870
|
* })
|
|
6833
6871
|
*/
|
|
6834
6872
|
registerNamespace(request, requestOptions) {
|
|
6835
6873
|
return HttpResponsePromise.fromPromise(this.__registerNamespace(request, requestOptions));
|
|
6836
6874
|
}
|
|
6837
6875
|
async __registerNamespace(request, requestOptions) {
|
|
6876
|
+
const { contextId, body: _body } = request;
|
|
6877
|
+
const _queryParams = {
|
|
6878
|
+
contextId
|
|
6879
|
+
};
|
|
6838
6880
|
const _authRequest = await this._options.authProvider.getAuthRequest();
|
|
6839
6881
|
const _headers = mergeHeaders(
|
|
6840
6882
|
_authRequest.headers,
|
|
@@ -6849,9 +6891,9 @@ var IdentityClient = class {
|
|
|
6849
6891
|
method: "POST",
|
|
6850
6892
|
headers: _headers,
|
|
6851
6893
|
contentType: "application/json",
|
|
6852
|
-
queryString: url_exports.queryBuilder().mergeAdditional(requestOptions?.queryParams).build(),
|
|
6894
|
+
queryString: url_exports.queryBuilder().addMany(_queryParams).mergeAdditional(requestOptions?.queryParams).build(),
|
|
6853
6895
|
requestType: "json",
|
|
6854
|
-
body:
|
|
6896
|
+
body: _body,
|
|
6855
6897
|
timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1e3,
|
|
6856
6898
|
maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
|
|
6857
6899
|
abortSignal: requestOptions?.abortSignal,
|
|
@@ -7136,12 +7178,13 @@ var IdentityClient = class {
|
|
|
7136
7178
|
return handleNonStatusCodeError(_response.error, _response.rawResponse, "PUT", "/v1/users/{id}");
|
|
7137
7179
|
}
|
|
7138
7180
|
/**
|
|
7139
|
-
* Permanently deletes a user identity. This cannot be undone. If the user is a pending invitation, the associated access profile created for that invitation is also removed. Requires the `users:d` scope.
|
|
7181
|
+
* Permanently deletes a user identity. This cannot be undone. If the user is a pending invitation, the associated access profile created for that invitation is also removed. Requires the `users:d` scope. Deleting your account's last OWNER is refused (409) — an account must always retain at least one owner.
|
|
7140
7182
|
*
|
|
7141
7183
|
* @param {Vectros.DeleteUserRequest} request
|
|
7142
7184
|
* @param {IdentityClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
7143
7185
|
*
|
|
7144
7186
|
* @throws {@link Vectros.NotFoundError}
|
|
7187
|
+
* @throws {@link Vectros.ConflictError}
|
|
7145
7188
|
* @throws {@link Vectros.TooManyRequestsError}
|
|
7146
7189
|
*
|
|
7147
7190
|
* @example
|
|
@@ -7181,6 +7224,8 @@ var IdentityClient = class {
|
|
|
7181
7224
|
switch (_response.error.statusCode) {
|
|
7182
7225
|
case 404:
|
|
7183
7226
|
throw new NotFoundError(_response.error.body, _response.rawResponse);
|
|
7227
|
+
case 409:
|
|
7228
|
+
throw new ConflictError(_response.error.body, _response.rawResponse);
|
|
7184
7229
|
case 429:
|
|
7185
7230
|
throw new TooManyRequestsError(_response.error.body, _response.rawResponse);
|
|
7186
7231
|
default:
|
|
@@ -9080,8 +9125,8 @@ function warnOnSuboptimalKey(key, log) {
|
|
|
9080
9125
|
|
|
9081
9126
|
// src/build-info.ts
|
|
9082
9127
|
var BUILD_INFO = {
|
|
9083
|
-
mcpServer: true ? "0.
|
|
9084
|
-
sdk: true ? "0.
|
|
9128
|
+
mcpServer: true ? "0.15.0" : "dev",
|
|
9129
|
+
sdk: true ? "0.40.0" : "dev"
|
|
9085
9130
|
};
|
|
9086
9131
|
|
|
9087
9132
|
// src/log.ts
|
|
@@ -9389,7 +9434,7 @@ var inputSchema = {
|
|
|
9389
9434
|
// Ownership.
|
|
9390
9435
|
userId: import_zod.z.string().optional().describe("Restrict to content owned by this user (Vectros UUID)."),
|
|
9391
9436
|
scope: import_zod.z.string().optional().describe(
|
|
9392
|
-
'Restrict to content carrying this scope value, in `namespace:value` form (e.g. "org:<uuid>", "client:<uuid>", "group:eng-team"). `org` and `client` are
|
|
9437
|
+
'Restrict to content carrying this scope value, in `namespace:value` form (e.g. "org:<uuid>", "client:<uuid>", "group:eng-team"). `org` and `client` are reserved namespace names, registered like any other; others are namespaces you registered yourself.'
|
|
9393
9438
|
),
|
|
9394
9439
|
// Date window.
|
|
9395
9440
|
createdAfter: import_zod.z.string().optional().describe("Restrict to content created at/after this ISO 8601 UTC timestamp."),
|
|
@@ -9529,7 +9574,7 @@ var inputSchema2 = {
|
|
|
9529
9574
|
// List-mode args:
|
|
9530
9575
|
userId: import_zod2.z.string().optional().describe("List mode: scope to records owned by this user."),
|
|
9531
9576
|
scope: import_zod2.z.string().optional().describe(
|
|
9532
|
-
'List mode: filter to records carrying this scope value, in `namespace:value` form (e.g. "org:<uuid>", "client:<uuid>", "group:eng-team"). `org` and `client` are
|
|
9577
|
+
'List mode: filter to records carrying this scope value, in `namespace:value` form (e.g. "org:<uuid>", "client:<uuid>", "group:eng-team"). `org` and `client` are reserved namespace names, registered like any other; others are namespaces you registered yourself.'
|
|
9533
9578
|
),
|
|
9534
9579
|
startFrom: import_zod2.z.string().optional().describe("Pagination cursor \u2014 pass the `nextCursor` from the previous page to fetch the next. Works in both list and lookup mode."),
|
|
9535
9580
|
limit: import_zod2.z.number().int().min(1).max(MCP_MAX_LIMIT2).optional().describe(
|
|
@@ -9780,7 +9825,7 @@ var inputSchema4 = {
|
|
|
9780
9825
|
folderId: import_zod4.z.string().optional().describe("Group this record into a folder."),
|
|
9781
9826
|
userId: import_zod4.z.string().optional().describe("Owning user id."),
|
|
9782
9827
|
scopes: import_zod4.z.array(import_zod4.z.string()).optional().describe(
|
|
9783
|
-
'Scope ownership as `namespace:value` entries, at most 2 (e.g. ["org:<uuid>", "group:eng-team"]). `org` and `client` are
|
|
9828
|
+
'Scope ownership as `namespace:value` entries, at most 2 (e.g. ["org:<uuid>", "group:eng-team"]). `org` and `client` are reserved namespace names, registered like any other; others are namespaces you registered yourself. This is the record\'s COMPLETE scope declaration and values must come from the credential\'s own identity. An empty array `[]` creates a PRIVATE record owned by the calling user alone. Omit to stamp the credential\'s full identity \u2014 the default.'
|
|
9784
9829
|
)
|
|
9785
9830
|
};
|
|
9786
9831
|
var recordCreate = ({ client, log }) => ({
|
|
@@ -9904,7 +9949,7 @@ var inputSchema7 = {
|
|
|
9904
9949
|
// whole-tenant corpus.
|
|
9905
9950
|
userId: import_zod7.z.string().optional().describe("Restrict retrieval to content owned by this user (Vectros UUID)."),
|
|
9906
9951
|
scope: import_zod7.z.string().optional().describe(
|
|
9907
|
-
'Restrict retrieval to content carrying this scope value, in `namespace:value` form (e.g. "org:<uuid>", "client:<uuid>", "group:eng-team"). `org` and `client` are
|
|
9952
|
+
'Restrict retrieval to content carrying this scope value, in `namespace:value` form (e.g. "org:<uuid>", "client:<uuid>", "group:eng-team"). `org` and `client` are reserved namespace names, registered like any other; others are namespaces you registered yourself.'
|
|
9908
9953
|
),
|
|
9909
9954
|
folderId: import_zod7.z.string().optional().describe("Restrict retrieval to this exact folder."),
|
|
9910
9955
|
rootFolderId: import_zod7.z.string().optional().describe("Restrict retrieval to this folder and all its descendants."),
|
|
@@ -10078,7 +10123,7 @@ var inputSchema9 = {
|
|
|
10078
10123
|
"Filter to schemas visible to a specific user. Optional; default returns all schemas the credential can see."
|
|
10079
10124
|
),
|
|
10080
10125
|
scope: import_zod9.z.string().optional().describe(
|
|
10081
|
-
'Filter to schemas carrying this scope value, in `namespace:value` form (e.g. "org:<uuid>", "group:eng-team"). `org` and `client` are
|
|
10126
|
+
'Filter to schemas carrying this scope value, in `namespace:value` form (e.g. "org:<uuid>", "group:eng-team"). `org` and `client` are reserved namespace names, registered like any other. Optional; default returns all schemas the credential can see.'
|
|
10082
10127
|
),
|
|
10083
10128
|
surface: import_zod9.z.enum(["record", "document", "user", "entity"]).optional().describe(
|
|
10084
10129
|
"Filter to schemas bindable to this surface \u2014 e.g. `document` to list only document types, or `record` for record types. Identity entities in any namespace (org/client/one you registered) bind under the single `entity` surface; `user` and `entity` are account-wide. Optional."
|
|
@@ -10228,7 +10273,7 @@ var inputSchema11 = {
|
|
|
10228
10273
|
folderId: import_zod11.z.string().optional().describe("List mode: only documents in this folder (Vectros folder id)."),
|
|
10229
10274
|
userId: import_zod11.z.string().optional().describe("List mode: scope to documents owned by this user."),
|
|
10230
10275
|
scope: import_zod11.z.string().optional().describe(
|
|
10231
|
-
'List mode: filter to documents carrying this scope value, in `namespace:value` form (e.g. "org:<uuid>", "client:<uuid>", "group:eng-team"). `org` and `client` are
|
|
10276
|
+
'List mode: filter to documents carrying this scope value, in `namespace:value` form (e.g. "org:<uuid>", "client:<uuid>", "group:eng-team"). `org` and `client` are reserved namespace names, registered like any other; others are namespaces you registered yourself.'
|
|
10232
10277
|
),
|
|
10233
10278
|
startFrom: import_zod11.z.string().optional().describe("Pagination cursor \u2014 pass the `nextCursor` from the previous page to fetch the next. Works in both list and lookup mode."),
|
|
10234
10279
|
limit: import_zod11.z.number().int().min(1).max(MCP_MAX_LIMIT3).optional().describe(
|
|
@@ -10339,7 +10384,7 @@ var inputSchema12 = {
|
|
|
10339
10384
|
),
|
|
10340
10385
|
userId: import_zod12.z.string().optional().describe("Reassign the owning user (Vectros UUID)."),
|
|
10341
10386
|
scopes: import_zod12.z.array(import_zod12.z.string()).optional().describe(
|
|
10342
|
-
'Reassign scope ownership as `namespace:value` entries, at most 2 (e.g. ["org:<uuid>", "group:eng-team"]) \u2014 the COMPLETE new parent set. `org`/`client` are
|
|
10387
|
+
'Reassign scope ownership as `namespace:value` entries, at most 2 (e.g. ["org:<uuid>", "group:eng-team"]) \u2014 the COMPLETE new parent set. `org`/`client` are reserved namespace names, registered like any other. Omit to leave ownership unchanged; `[]` clears it (private to the owning user).'
|
|
10343
10388
|
),
|
|
10344
10389
|
expectedVersion: import_zod12.z.number().int().optional().describe(
|
|
10345
10390
|
"Optimistic concurrency: the version you last read. If the document changed since, the update is refused as a conflict (re-read and retry). Omit for last-write-wins."
|
|
@@ -10423,7 +10468,7 @@ var inputSchema14 = {
|
|
|
10423
10468
|
parentId: import_zod14.z.string().optional().describe("List mode: direct children of this folder (tree navigation). Omit for a flat tenant list."),
|
|
10424
10469
|
userId: import_zod14.z.string().optional().describe("List mode: scope to folders owned by this user."),
|
|
10425
10470
|
scope: import_zod14.z.string().optional().describe(
|
|
10426
|
-
'List mode: filter to folders carrying this scope value, in `namespace:value` form (e.g. "org:<uuid>", "client:<uuid>", "group:eng-team"). `org` and `client` are
|
|
10471
|
+
'List mode: filter to folders carrying this scope value, in `namespace:value` form (e.g. "org:<uuid>", "client:<uuid>", "group:eng-team"). `org` and `client` are reserved namespace names, registered like any other; others are namespaces you registered yourself.'
|
|
10427
10472
|
),
|
|
10428
10473
|
startFrom: import_zod14.z.string().optional().describe("List mode: pagination cursor \u2014 pass the `nextCursor` from the previous page to fetch the next."),
|
|
10429
10474
|
limit: import_zod14.z.number().int().min(1).max(MCP_MAX_LIMIT4).optional().describe(
|
|
@@ -10472,7 +10517,7 @@ var inputSchema15 = {
|
|
|
10472
10517
|
slug: import_zod15.z.string().optional().describe("Optional stable slug (sibling-unique; idempotency key). Lowercase letters/digits/hyphens. Derived from name when omitted."),
|
|
10473
10518
|
userId: import_zod15.z.string().optional().describe("Owning user (Vectros UUID)."),
|
|
10474
10519
|
scopes: import_zod15.z.array(import_zod15.z.string()).optional().describe(
|
|
10475
|
-
'Scope ownership as `namespace:value` entries, at most 2 (e.g. ["org:<uuid>", "group:eng-team"]). `org` and `client` are
|
|
10520
|
+
'Scope ownership as `namespace:value` entries, at most 2 (e.g. ["org:<uuid>", "group:eng-team"]). `org` and `client` are reserved namespace names, registered like any other; others are namespaces you registered yourself. This is the folder\'s COMPLETE scope declaration and values must come from the credential\'s own identity. An empty array `[]` creates a PRIVATE folder owned by the calling user alone. Omit to stamp the credential\'s full identity \u2014 the default.'
|
|
10476
10521
|
)
|
|
10477
10522
|
};
|
|
10478
10523
|
var folderCreate = ({ client, log }) => ({
|
|
@@ -10510,7 +10555,7 @@ var inputSchema16 = {
|
|
|
10510
10555
|
description: import_zod16.z.string().optional().describe("New description. Omit to leave unchanged."),
|
|
10511
10556
|
userId: import_zod16.z.string().optional().describe("Reassign the owning user (Vectros UUID)."),
|
|
10512
10557
|
scopes: import_zod16.z.array(import_zod16.z.string()).optional().describe(
|
|
10513
|
-
'Reassign scope ownership as `namespace:value` entries, at most 2 (e.g. ["org:<uuid>", "group:eng-team"]) \u2014 the COMPLETE new parent set. `org`/`client` are
|
|
10558
|
+
'Reassign scope ownership as `namespace:value` entries, at most 2 (e.g. ["org:<uuid>", "group:eng-team"]) \u2014 the COMPLETE new parent set. `org`/`client` are reserved namespace names, registered like any other. Omit to leave ownership unchanged; `[]` clears it (private to the owning user).'
|
|
10514
10559
|
),
|
|
10515
10560
|
expectedVersion: import_zod16.z.number().int().optional().describe(
|
|
10516
10561
|
"Optimistic concurrency: the version you last read. If the folder changed since, the update is refused as a conflict (re-read and retry). Omit for last-write-wins."
|
|
@@ -10577,7 +10622,7 @@ var inputSchema18 = {
|
|
|
10577
10622
|
var currentIdentity = ({ log, apiKey, environment }) => ({
|
|
10578
10623
|
name: "current_identity",
|
|
10579
10624
|
title: "Current identity (tenant + principal scope)",
|
|
10580
|
-
description: "Describe the credential the MCP server is operating under. Returns tenantId, environment (staging|production), principalType (root_key|scoped_key|token), principalKeyId, principalLabel, and (for scoped credentials) allowedActions plus dataScope \u2014 the credential's reach as { userId, scopes[] }, where each scope is a `namespace:value` string (e.g. \"org:<uuid>\"). Also reports mcpServerVersion (this server's own package version) and sdkVersion (the bundled @vectros-ai/sdk version) so a caller can tell what build it's talking to. Use this when the user asks 'what can you do here?', 'what tenant am I in?', or 'what version is this?'. Calls GET /v1/ping under the hood.",
|
|
10625
|
+
description: "Describe the credential the MCP server is operating under. Returns tenantId, environment (staging|production), principalType (root_key|scoped_key|token), principalKeyId, principalLabel, and (for scoped credentials) allowedActions plus dataScope \u2014 the credential's verb+ownership reach as { userId, scopes[] }, where each scope is a `namespace:value` string (e.g. \"org:<uuid>\"). Note: this does not yet include granted_capabilities (member-lifecycle / forensic-read / context-directory-read / delegate-mint) \u2014 a separate reach dimension a scope clause can carry as of API 0.40.0 that /v1/ping does not report yet, so allowedActions+dataScope may understate a credential's true reach. Also reports mcpServerVersion (this server's own package version) and sdkVersion (the bundled @vectros-ai/sdk version) so a caller can tell what build it's talking to. Use this when the user asks 'what can you do here?', 'what tenant am I in?', or 'what version is this?'. Calls GET /v1/ping under the hood.",
|
|
10581
10626
|
inputSchema: inputSchema18,
|
|
10582
10627
|
handler: async () => {
|
|
10583
10628
|
try {
|
|
@@ -10700,7 +10745,7 @@ var inputSchema19 = {
|
|
|
10700
10745
|
folderId: import_zod18.z.string().optional().describe("Optional folder to ingest into. Default: tenant root."),
|
|
10701
10746
|
userId: import_zod18.z.string().optional().describe("Owning user ID. Optional."),
|
|
10702
10747
|
scopes: import_zod18.z.array(import_zod18.z.string()).optional().describe(
|
|
10703
|
-
"TEXT MODE ONLY. Scope ownership as `namespace:value` entries, at most 2 (e.g. [\"org:<uuid>\", \"group:eng-team\"]). `org` and `client` are
|
|
10748
|
+
"TEXT MODE ONLY. Scope ownership as `namespace:value` entries, at most 2 (e.g. [\"org:<uuid>\", \"group:eng-team\"]). `org` and `client` are reserved namespace names, registered like any other; others are namespaces you registered yourself. This is the document's COMPLETE scope declaration and values must come from the credential's own identity. An empty array `[]` creates a PRIVATE document owned by the calling user alone. Omit to stamp the credential's full identity \u2014 the default. Rejected with `filePath` (file uploads do not accept a scope declaration): a file-uploaded document is stamped with the credential's full identity."
|
|
10704
10749
|
)
|
|
10705
10750
|
};
|
|
10706
10751
|
var documentIngest = ({ client, log, transport, ingestRoot }) => ({
|
|
@@ -10864,11 +10909,14 @@ var MCP_DEFAULT_LIMIT5 = 10;
|
|
|
10864
10909
|
var MCP_MAX_LIMIT5 = 100;
|
|
10865
10910
|
var inputSchema20 = {
|
|
10866
10911
|
kind: import_zod19.z.string().describe(
|
|
10867
|
-
'Which principal to look up: "user" (the fixed principal surface), or an entity namespace \u2014 "org", "client" (
|
|
10912
|
+
'Which principal to look up: "user" (the fixed principal surface), or an entity namespace \u2014 "org", "client" (reserved, registered like any other), or a namespace you registered.'
|
|
10868
10913
|
),
|
|
10869
10914
|
externalId: import_zod19.z.string().optional().describe(
|
|
10870
10915
|
"Resolve mode: your own stable identifier for the principal. Returns the single matching principal (with its Vectros UUID), or an empty array if none. The fastest path to the UUID the ownership filters need. Takes precedence if both this and a `field` lookup are supplied."
|
|
10871
10916
|
),
|
|
10917
|
+
contextId: import_zod19.z.string().optional().describe(
|
|
10918
|
+
"Entity kinds only (not `user`, which is always tenant-wide): the app context to look up entities in, for a namespace registered as context-owned rather than tenant-wide. A context-confined credential's own context is used automatically without this; supply it to name a context explicitly (required for an unconfined/root credential to reach a context-owned namespace). Rejected if the namespace turns out to be tenant-wide."
|
|
10919
|
+
),
|
|
10872
10920
|
// Lookup-mode args — provide `field` plus EXACTLY ONE of: value | from+to | prefix.
|
|
10873
10921
|
type: import_zod19.z.string().optional().describe('Lookup mode: the identity schema\'s record type (e.g. "person_v1"). Required with `field`.'),
|
|
10874
10922
|
field: import_zod19.z.string().optional().describe('Lookup mode: name of the schema-declared lookup field to query by (e.g. "email").'),
|
|
@@ -10885,13 +10933,14 @@ var inputSchema20 = {
|
|
|
10885
10933
|
var lookupPrincipal = ({ client, log }) => ({
|
|
10886
10934
|
name: "lookup_principal",
|
|
10887
10935
|
title: "Look up a user identity or a namespaced identity entity",
|
|
10888
|
-
description: "Resolve a user, or an identity entity in a namespace (org/client/one you registered). Two modes:\n \u2022 Resolve by your own id: pass `externalId` \u2192 the matching principal incl. its Vectros UUID (the id the ownership filters on record_query / hybrid_search / rag_ask expect).\n \u2022 Lookup by a schema field: pass `type` and `field` plus exactly one of `value` (exact), `from`+`to` (range), or `prefix`. Sensitive-field-safe. (If both `externalId` and a `field` lookup are given, `externalId` wins.) Returns a `{ data, nextCursor }` page (default 10, max 100 \u2014 raise it in one call when you can accept the payload); a non-null `nextCursor` means more remain \u2014 pass it back as `startFrom`. Read-only \u2014 does not create or modify identities.",
|
|
10936
|
+
description: "Resolve a user, or an identity entity in a namespace (org/client/one you registered). Two modes:\n \u2022 Resolve by your own id: pass `externalId` \u2192 the matching principal incl. its Vectros UUID (the id the ownership filters on record_query / hybrid_search / rag_ask expect).\n \u2022 Lookup by a schema field: pass `type` and `field` plus exactly one of `value` (exact), `from`+`to` (range), or `prefix`. Sensitive-field-safe. (If both `externalId` and a `field` lookup are given, `externalId` wins.) For an entity kind, `contextId` names a specific app context when the namespace is context-owned rather than tenant-wide; a context-confined credential's own context is used automatically without it. Returns a `{ data, nextCursor }` page (default 10, max 100 \u2014 raise it in one call when you can accept the payload); a non-null `nextCursor` means more remain \u2014 pass it back as `startFrom`. Read-only \u2014 does not create or modify identities.",
|
|
10889
10937
|
inputSchema: inputSchema20,
|
|
10890
10938
|
handler: async (args) => {
|
|
10891
10939
|
const kind = args.kind;
|
|
10892
10940
|
const isUser = kind === "user";
|
|
10893
10941
|
const limit = args.limit ?? MCP_DEFAULT_LIMIT5;
|
|
10894
10942
|
const externalId = args.externalId;
|
|
10943
|
+
const contextId = args.contextId;
|
|
10895
10944
|
const type = args.type;
|
|
10896
10945
|
const field = args.field;
|
|
10897
10946
|
const value = args.value;
|
|
@@ -10900,11 +10949,18 @@ var lookupPrincipal = ({ client, log }) => ({
|
|
|
10900
10949
|
const prefix = args.prefix;
|
|
10901
10950
|
const order = args.order;
|
|
10902
10951
|
const startFrom = args.startFrom;
|
|
10952
|
+
if (contextId !== void 0 && isUser) {
|
|
10953
|
+
return toolError(
|
|
10954
|
+
"lookup_principal",
|
|
10955
|
+
new Error("'contextId' does not apply to kind 'user' \u2014 the user surface is always tenant-wide.")
|
|
10956
|
+
);
|
|
10957
|
+
}
|
|
10958
|
+
const contextIdArg = contextId !== void 0 ? { contextId } : {};
|
|
10903
10959
|
try {
|
|
10904
10960
|
let page;
|
|
10905
10961
|
if (externalId !== void 0) {
|
|
10906
|
-
page = isUser ? await client.identity.listUsers({ externalId, limit }) : await client.identity.listEntities({ namespace: kind, externalId, limit });
|
|
10907
|
-
log.debug({ tool: "lookup_principal", mode: "resolve", kind }, "lookup_principal resolve ok");
|
|
10962
|
+
page = isUser ? await client.identity.listUsers({ externalId, limit }) : await client.identity.listEntities({ namespace: kind, ...contextIdArg, externalId, limit });
|
|
10963
|
+
log.debug({ tool: "lookup_principal", mode: "resolve", kind, contextId }, "lookup_principal resolve ok");
|
|
10908
10964
|
} else if (field !== void 0) {
|
|
10909
10965
|
const hasEquality = value !== void 0;
|
|
10910
10966
|
const hasRange = from !== void 0 || to !== void 0;
|
|
@@ -10932,8 +10988,8 @@ var lookupPrincipal = ({ client, log }) => ({
|
|
|
10932
10988
|
);
|
|
10933
10989
|
}
|
|
10934
10990
|
const req = { type, field, value, from, to, prefix, order, startFrom, limit };
|
|
10935
|
-
page = isUser ? await client.identity.lookupUsers(req) : await client.identity.lookupEntities({ namespace: kind, body: req });
|
|
10936
|
-
log.debug({ tool: "lookup_principal", mode: "lookup", kind, type, field }, "lookup_principal lookup ok");
|
|
10991
|
+
page = isUser ? await client.identity.lookupUsers(req) : await client.identity.lookupEntities({ namespace: kind, ...contextIdArg, body: req });
|
|
10992
|
+
log.debug({ tool: "lookup_principal", mode: "lookup", kind, type, field, contextId }, "lookup_principal lookup ok");
|
|
10937
10993
|
} else {
|
|
10938
10994
|
return toolError(
|
|
10939
10995
|
"lookup_principal",
|
|
@@ -10944,7 +11000,7 @@ var lookupPrincipal = ({ client, log }) => ({
|
|
|
10944
11000
|
const nextCursor = page.nextCursor ?? null;
|
|
10945
11001
|
return { content: [{ type: "text", text: JSON.stringify({ data: principals, nextCursor }, null, 2) }] };
|
|
10946
11002
|
} catch (err) {
|
|
10947
|
-
log.warn({ tool: "lookup_principal", kind, err: String(err) }, "lookup_principal failed");
|
|
11003
|
+
log.warn({ tool: "lookup_principal", kind, contextId, err: String(err) }, "lookup_principal failed");
|
|
10948
11004
|
return toolError("lookup_principal", err);
|
|
10949
11005
|
}
|
|
10950
11006
|
}
|
|
@@ -11055,7 +11111,7 @@ var identityResource = ({ log, apiKey, environment }) => ({
|
|
|
11055
11111
|
name: "identity",
|
|
11056
11112
|
uri: "vectros://identity",
|
|
11057
11113
|
title: "Current identity (tenant + principal scope)",
|
|
11058
|
-
description: "The tenant + principal scope the MCP server is authenticated as. Returns the same payload as the `current_identity` tool: status, tenantId, environment, principalType, principalKeyId, principalLabel, (for scoped credentials) allowedActions + dataScope ({ userId, scopes[] }),
|
|
11114
|
+
description: "The tenant + principal scope the MCP server is authenticated as. Returns the same payload as the `current_identity` tool: status, tenantId, environment, principalType, principalKeyId, principalLabel, (for scoped credentials) allowedActions + dataScope ({ userId, scopes[] }). Note: this does not yet include granted_capabilities (member-lifecycle / forensic-read / context-directory-read / delegate-mint) \u2014 a separate reach dimension a scope clause can carry as of API 0.40.0 that /v1/ping does not report yet, so allowedActions+dataScope may understate a credential's true reach. Also reports mcpServerVersion and sdkVersion (this build's own version and the bundled @vectros-ai/sdk version). The /v1/ping backing call ships the extended shape today; the version fields are always client-derived.",
|
|
11059
11115
|
mimeType: "application/json",
|
|
11060
11116
|
read: async () => {
|
|
11061
11117
|
const identity = await resolveIdentity({ log, apiKey, environment });
|