@canopy-io/node 0.5.0 → 0.6.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/dist/index.d.cts CHANGED
@@ -514,7 +514,7 @@ interface paths {
514
514
  head?: never;
515
515
  /**
516
516
  * Update an identity
517
- * @description Updates an identity's mutable profile fields (`first_name`, `last_name`, `is_active`, `metadata`) in the current Environment. `email` and `external_id` are immutable here — `external_id` is owned by the SSO/SCIM provisioning path and cannot be re-pointed through this endpoint. Returns the updated identity and writes an `identity.updated` audit row for the profile fields; a change to `is_active` writes `identity.status_set` instead, the account-wide activation switch. Returns `404` when the identity has no membership in this Environment.
517
+ * @description Updates an identity's mutable profile fields (`first_name`, `last_name`, `metadata`) in the current Environment. `email` and `external_id` are immutable here — `external_id` is owned by the SSO/SCIM provisioning path and cannot be re-pointed through this endpoint. The account-wide `is_active` switch is not settable from an Environment; to cut off access here, remove the identity from the Environment. Returns the updated identity and writes an `identity.updated` audit row. Returns `404` when the identity has no membership in this Environment.
518
518
  */
519
519
  patch: operations["ApiIdentitiesController_updateIdentity"];
520
520
  trace?: never;
@@ -539,46 +539,6 @@ interface paths {
539
539
  patch?: never;
540
540
  trace?: never;
541
541
  };
542
- "/api/v1/identities/{id}/activate": {
543
- parameters: {
544
- query?: never;
545
- header?: never;
546
- path?: never;
547
- cookie?: never;
548
- };
549
- get?: never;
550
- put?: never;
551
- /**
552
- * Activate an identity
553
- * @description Reactivates an identity by setting `is_active = true`, the account-wide switch, allowing it to authenticate again in every Environment it belongs to. Writes an `identity.status_set` audit row (the same event the Console's account route emits), delivered to the account's subscriptions and to those of every Environment the identity is a member of. Returns a `200` message envelope. Returns `404` when the identity has no membership in this Environment.
554
- */
555
- post: operations["ApiIdentitiesController_activateIdentity"];
556
- delete?: never;
557
- options?: never;
558
- head?: never;
559
- patch?: never;
560
- trace?: never;
561
- };
562
- "/api/v1/identities/{id}/deactivate": {
563
- parameters: {
564
- query?: never;
565
- header?: never;
566
- path?: never;
567
- cookie?: never;
568
- };
569
- get?: never;
570
- put?: never;
571
- /**
572
- * Deactivate an identity
573
- * @description Deactivates an identity by setting `is_active = false`, the account-wide switch, blocking future sign-in in every Environment it belongs to. Writes an `identity.status_set` audit row (the same event the Console's account route emits), delivered to the account's subscriptions and to those of every Environment the identity is a member of. Returns a `200` message envelope. Returns `404` when the identity has no membership in this Environment.
574
- */
575
- post: operations["ApiIdentitiesController_deactivateIdentity"];
576
- delete?: never;
577
- options?: never;
578
- head?: never;
579
- patch?: never;
580
- trace?: never;
581
- };
582
542
  "/api/v1/identities/{id}/password": {
583
543
  parameters: {
584
544
  query?: never;
@@ -834,7 +794,7 @@ interface paths {
834
794
  put?: never;
835
795
  /**
836
796
  * Create an invite
837
- * @description Creates a single identity invite in the active Environment and returns it along with a tokenized `accept_url`. The effective intent is derived server-side from existing identity state — a net-new email becomes `activate`, an existing identity without active access becomes `add_to_app`, and `password_reset` is honored only for an existing identity. An optional `role_id` + `node_id` pair (both or neither) seeds an initial role assignment applied at acceptance. Invites expire after 7 days; the email is sent unless `send_email: false`, in which case the caller delivers `accept_url` itself. A duplicate pending invite for the same recipient returns `409`.
797
+ * @description Creates a single identity invite in the active Environment and returns it along with a tokenized `accept_url`. The effective intent is derived server-side from existing identity state — a net-new email becomes `activate`, an existing identity without active access becomes `add_to_app`, and `password_reset` is honored only for an existing identity. An optional `role_id` + `node_id` pair (both or neither) seeds an initial role assignment applied at acceptance. Invites expire after 7 days, or 24 hours for `password_reset`; the email is sent unless `send_email: false`, in which case the caller delivers `accept_url` itself. A duplicate pending invite for the same recipient returns `409`.
838
798
  */
839
799
  post: operations["ApiIdentityInvitesController_createInvite"];
840
800
  delete?: never;
@@ -894,7 +854,7 @@ interface paths {
894
854
  put?: never;
895
855
  /**
896
856
  * Resend an invite
897
- * @description Resends the email for a `pending` invite in the active Environment, generating a fresh token, invalidating the previous one, and resetting the 7-day expiry. Returns the new tokenized `accept_url`. Subject to a 5-minute cooldown between resends. Returns `404` when the invite is not found and `400` when it is not in `pending` status or the cooldown has not elapsed.
857
+ * @description Resends the email for a `pending` invite in the active Environment, generating a fresh token, invalidating the previous one, and resetting the expiry (7 days, or 24 hours for `password_reset`). Returns the new tokenized `accept_url`. Subject to a 5-minute cooldown between resends. Returns `404` when the invite is not found and `400` when it is not in `pending` status or the cooldown has not elapsed.
898
858
  */
899
859
  post: operations["ApiIdentityInvitesController_resendInvite"];
900
860
  delete?: never;
@@ -1355,7 +1315,7 @@ interface paths {
1355
1315
  post?: never;
1356
1316
  /**
1357
1317
  * Unbind an SSO connection from an organization
1358
- * @description Removes the binding; logins through the connection fall back to the Environment's placement. Existing memberships are untouched. Returns `404` when the connection is not bound to this organization. Requires the `hierarchy.manage` permission at the organization and emits `organization.sso_connection.unbound`.
1318
+ * @description Removes the binding; logins through the connection fall back to the Environment's placement. Existing memberships are untouched. Returns `404` when the connection is not bound to this organization, and `409` (`organization.sso_connection_owned_cannot_unbind`) when the organization set the connection up itself: an owned connection stays with its organization, so disable or delete it instead. Requires the `hierarchy.manage` permission at the organization and emits `organization.sso_connection.unbound`.
1359
1319
  */
1360
1320
  delete: operations["ApiOrganizationsController_unbindSsoConnection"];
1361
1321
  options?: never;
@@ -1874,7 +1834,7 @@ interface paths {
1874
1834
  head?: never;
1875
1835
  /**
1876
1836
  * Update a role
1877
- * @description Updates a role's `name`, `description`, and/or `is_active` flag by `id`. A name that collides with another role in the Environment returns `409`, and a missing role returns `404`. Supports optimistic concurrency via the `If-Match` header carrying the role's current version (`409` on a version mismatch). Requires the `rbac.manage_roles` permission.
1837
+ * @description Updates a role's `name`, `description`, and/or `is_active` flag by `id`. Setting `is_active` to `false` hides the role from pickers, refuses new assignments to it, and withholds its permissions from every current holder until it is set back to `true`; the assignments themselves are kept. A name that collides with another role in the Environment returns `409`, and a missing role returns `404`. Supports optimistic concurrency via the `If-Match` header carrying the role's current version (`409` on a version mismatch). Requires the `rbac.manage_roles` permission.
1878
1838
  */
1879
1839
  patch: operations["ApiRolesController_updateRole"];
1880
1840
  trace?: never;
@@ -2430,6 +2390,7 @@ interface components {
2430
2390
  scope_evaluated: "node" | "app_wide";
2431
2391
  /** @description The hierarchy node the decision was anchored to. Always set for `scope_evaluated: "node"`; always null for `scope_evaluated: "app_wide"` because the answer is org-scoped, not node-scoped. */
2432
2392
  effective_node_id?: string | null;
2393
+ /** @description Ids of the roles whose assignments produced a node-scoped allow. Always empty for `scope_evaluated: "app_wide"`, whose answer is not tied to a node, and for a deny. */
2433
2394
  granting_roles: string[];
2434
2395
  denial_reason?: string | null;
2435
2396
  };
@@ -2464,7 +2425,7 @@ interface components {
2464
2425
  assignment_id: string;
2465
2426
  role_id: string;
2466
2427
  role_name: string;
2467
- /** @description Whether the assignment is within its effective_from/effective_to window right now. */
2428
+ /** @description Whether the assignment counts right now: within its effective_from/effective_to window, and its role is active. An inactive role's assignments are kept but grant nothing. */
2468
2429
  active: boolean;
2469
2430
  effective_from?: string | null;
2470
2431
  effective_to?: string | null;
@@ -2560,11 +2521,13 @@ interface components {
2560
2521
  email: string;
2561
2522
  first_name: string;
2562
2523
  last_name: string;
2563
- /** @description Initial password. 8-64 characters. No composition rules — NIST SP 800-63B aligned. A HaveIBeenPwned breach check runs server-side. The effective policy is published on `GET /v1/identity/auth/config`, so a client can state the rules before submit rather than after. Omit to create a passwordless identity (sign-in via SSO/social or forgot-password reset). */
2524
+ /** @description Initial password. 8-64 characters. No composition rules — NIST SP 800-63B aligned. A HaveIBeenPwned breach check runs server-side. The effective policy is published on `GET /v1/identity/auth/config`, so a client can state the rules before submit rather than after. Omit to create a passwordless identity (sign-in via SSO or a password reset). */
2564
2525
  password?: string;
2565
2526
  external_id?: string;
2566
2527
  metadata?: Record<string, unknown>;
2528
+ /** @description Role for an initial assignment — required if node_id is provided */
2567
2529
  role_id?: string;
2530
+ /** @description Node for an initial assignment — required if role_id is provided */
2568
2531
  node_id?: string;
2569
2532
  };
2570
2533
  BulkCreateIdentitiesDto: {
@@ -2588,13 +2551,9 @@ interface components {
2588
2551
  /** Format: date-time */
2589
2552
  updated_at: string;
2590
2553
  };
2591
- MessageResponseDto: {
2592
- message: string;
2593
- };
2594
2554
  UpdateIdentityDto: {
2595
2555
  first_name?: string;
2596
2556
  last_name?: string;
2597
- is_active?: boolean;
2598
2557
  metadata?: Record<string, unknown> | null;
2599
2558
  };
2600
2559
  SetIdentityPasswordDto: {
@@ -2653,7 +2612,7 @@ interface components {
2653
2612
  email_verified: boolean;
2654
2613
  /** Format: date-time */
2655
2614
  email_verified_at?: string | null;
2656
- /** @description Whether the identity has a usable password. False for passwordless (SSO/social/code-only) identities. */
2615
+ /** @description Whether the identity has a usable password. False for passwordless (SSO or email-code-only) identities. */
2657
2616
  password_set: boolean;
2658
2617
  /** @description True while the identity is in an active failed-login lockout window. */
2659
2618
  locked: boolean;
@@ -2706,10 +2665,6 @@ interface components {
2706
2665
  name: string;
2707
2666
  role_id?: string | null;
2708
2667
  node_id?: string | null;
2709
- /** @description Environment the invite targets, or null for a directory-only (account-tier) invite created with the Environment field left empty. */
2710
- environment_id?: string | null;
2711
- /** @description Display name of the target Environment, or null for a directory-only invite. */
2712
- environment_name?: string | null;
2713
2668
  has_initial_assignment: boolean;
2714
2669
  /** @enum {string} */
2715
2670
  status: "pending" | "accepted" | "revoked" | "expired";
@@ -2741,10 +2696,6 @@ interface components {
2741
2696
  name: string;
2742
2697
  role_id?: string | null;
2743
2698
  node_id?: string | null;
2744
- /** @description Environment the invite targets, or null for a directory-only (account-tier) invite created with the Environment field left empty. */
2745
- environment_id?: string | null;
2746
- /** @description Display name of the target Environment, or null for a directory-only invite. */
2747
- environment_name?: string | null;
2748
2699
  has_initial_assignment: boolean;
2749
2700
  /** @enum {string} */
2750
2701
  status: "pending" | "accepted" | "revoked" | "expired";
@@ -3106,6 +3057,8 @@ interface components {
3106
3057
  /** @enum {string} */
3107
3058
  type: "saml" | "oidc";
3108
3059
  status: string;
3060
+ /** @description The organization that set the connection up from the organization portal, or null. A connection owned by this organization cannot be unbound from it. */
3061
+ owner_organization_node_id?: string | null;
3109
3062
  };
3110
3063
  OrganizationSsoRoleSummaryDto: {
3111
3064
  id: string;
@@ -3228,7 +3181,11 @@ interface components {
3228
3181
  type: "saml" | "oidc";
3229
3182
  name: string;
3230
3183
  /** @enum {string} */
3231
- status: "configuring" | "active" | "disabled" | "failed";
3184
+ status: "configuring" | "active" | "disabled";
3185
+ /** @description The organization that owns the connection, when its administrator set it up from the organization portal; null for a connection the developer created. An owned connection cannot be moved to another organization or Environment, and its administrators are emailed when the developer changes its provider settings, disables or deletes it. */
3186
+ owner_organization_node_id?: string | null;
3187
+ /** @description True when an organization's administrator set the connection up from the organization portal. */
3188
+ owned_by_organization: boolean;
3232
3189
  /** @description The HTTPS address the identity provider's SAML metadata was last imported from. `null` when the metadata was pasted as a document or never imported. */
3233
3190
  saml_metadata_url?: string | null;
3234
3191
  /** @description The last test sign-in run against the connection. Cleared when its provider settings change, since a test no longer proves them. */
@@ -3253,11 +3210,6 @@ interface components {
3253
3210
  /** Format: date-time */
3254
3211
  last_login_at?: string | null;
3255
3212
  /** Format: date-time */
3256
- last_login_failure_at?: string | null;
3257
- consecutive_failures: number;
3258
- /** Format: date-time */
3259
- auto_disabled_at?: string | null;
3260
- /** Format: date-time */
3261
3213
  created_at: string;
3262
3214
  /** Format: date-time */
3263
3215
  updated_at: string;
@@ -3491,9 +3443,12 @@ interface components {
3491
3443
  name?: string;
3492
3444
  /** @description Updated role description */
3493
3445
  description?: string | null;
3494
- /** @description Whether the role is active */
3446
+ /** @description Whether the role is active. An inactive role is hidden from pickers, cannot be newly assigned, and grants nothing to its current holders until it is reactivated; their assignments are kept. */
3495
3447
  is_active?: boolean;
3496
3448
  };
3449
+ MessageResponseDto: {
3450
+ message: string;
3451
+ };
3497
3452
  SetRolePermissionsDto: {
3498
3453
  permission_keys: string[];
3499
3454
  };
@@ -3736,7 +3691,7 @@ interface components {
3736
3691
  /** @description Allowed node types (e.g. ['region', 'district', 'team']). Order is informational, not structural — parent/child rules are governed by `allowed_children`. Names starting with `canopy:` are reserved; with organizations enabled the list starts with `canopy:organization`. */
3737
3692
  node_types: string[];
3738
3693
  /**
3739
- * @description Map from node type to allowed child node types. Empty array means leaf-only.
3694
+ * @description Map from node type to allowed child node types. An empty array makes that type a leaf: nothing may be created or moved beneath it. A type the map does not mention accepts any child.
3740
3695
  * @example {
3741
3696
  * "region": [
3742
3697
  * "district"
@@ -7121,222 +7076,6 @@ interface operations {
7121
7076
  };
7122
7077
  };
7123
7078
  };
7124
- ApiIdentitiesController_activateIdentity: {
7125
- parameters: {
7126
- query?: never;
7127
- header?: never;
7128
- path: {
7129
- id: string;
7130
- };
7131
- cookie?: never;
7132
- };
7133
- requestBody?: never;
7134
- responses: {
7135
- /** @description Identity activated */
7136
- 200: {
7137
- headers: {
7138
- [name: string]: unknown;
7139
- };
7140
- content: {
7141
- "application/json": {
7142
- data: components["schemas"]["MessageResponseDto"];
7143
- };
7144
- };
7145
- };
7146
- /** @description The request failed validation: a body field, a query parameter or an id in the path is missing, malformed or out of range; or the request sent both an `X-API-Key` and an `Authorization` header */
7147
- 400: {
7148
- headers: {
7149
- [name: string]: unknown;
7150
- };
7151
- content: {
7152
- /**
7153
- * @example {
7154
- * "error": {
7155
- * "statusCode": 400,
7156
- * "code": null,
7157
- * "message": "The request failed validation: a body field, a query parameter or an id in the path is missing, malformed or out of range; or the request sent both an `X-API-Key` and an `Authorization` header",
7158
- * "timestamp": "2026-04-20T12:00:00.000Z",
7159
- * "path": "/api/v1/identities/{id}/activate",
7160
- * "method": "POST"
7161
- * }
7162
- * }
7163
- */
7164
- "application/json": components["schemas"]["ErrorResponseDto"];
7165
- };
7166
- };
7167
- /** @description Invalid or expired token */
7168
- 401: {
7169
- headers: {
7170
- [name: string]: unknown;
7171
- };
7172
- content: {
7173
- /**
7174
- * @example {
7175
- * "error": {
7176
- * "statusCode": 401,
7177
- * "code": null,
7178
- * "message": "Invalid or expired token",
7179
- * "timestamp": "2026-04-20T12:00:00.000Z",
7180
- * "path": "/api/v1/identities",
7181
- * "method": "GET"
7182
- * }
7183
- * }
7184
- */
7185
- "application/json": components["schemas"]["ErrorResponseDto"];
7186
- };
7187
- };
7188
- /** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
7189
- 403: {
7190
- headers: {
7191
- [name: string]: unknown;
7192
- };
7193
- content: {
7194
- /**
7195
- * @example {
7196
- * "error": {
7197
- * "statusCode": 403,
7198
- * "code": null,
7199
- * "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
7200
- * "timestamp": "2026-04-20T12:00:00.000Z",
7201
- * "path": "/api/v1/identities",
7202
- * "method": "GET"
7203
- * }
7204
- * }
7205
- */
7206
- "application/json": components["schemas"]["ErrorResponseDto"];
7207
- };
7208
- };
7209
- /** @description Identity not found */
7210
- 404: {
7211
- headers: {
7212
- [name: string]: unknown;
7213
- };
7214
- content: {
7215
- /**
7216
- * @example {
7217
- * "error": {
7218
- * "statusCode": 404,
7219
- * "code": null,
7220
- * "message": "Identity not found",
7221
- * "timestamp": "2026-04-20T12:00:00.000Z",
7222
- * "path": "/api/v1/identities/{id}/activate",
7223
- * "method": "POST"
7224
- * }
7225
- * }
7226
- */
7227
- "application/json": components["schemas"]["ErrorResponseDto"];
7228
- };
7229
- };
7230
- };
7231
- };
7232
- ApiIdentitiesController_deactivateIdentity: {
7233
- parameters: {
7234
- query?: never;
7235
- header?: never;
7236
- path: {
7237
- id: string;
7238
- };
7239
- cookie?: never;
7240
- };
7241
- requestBody?: never;
7242
- responses: {
7243
- /** @description Identity deactivated */
7244
- 200: {
7245
- headers: {
7246
- [name: string]: unknown;
7247
- };
7248
- content: {
7249
- "application/json": {
7250
- data: components["schemas"]["MessageResponseDto"];
7251
- };
7252
- };
7253
- };
7254
- /** @description The request failed validation: a body field, a query parameter or an id in the path is missing, malformed or out of range; or the request sent both an `X-API-Key` and an `Authorization` header */
7255
- 400: {
7256
- headers: {
7257
- [name: string]: unknown;
7258
- };
7259
- content: {
7260
- /**
7261
- * @example {
7262
- * "error": {
7263
- * "statusCode": 400,
7264
- * "code": null,
7265
- * "message": "The request failed validation: a body field, a query parameter or an id in the path is missing, malformed or out of range; or the request sent both an `X-API-Key` and an `Authorization` header",
7266
- * "timestamp": "2026-04-20T12:00:00.000Z",
7267
- * "path": "/api/v1/identities/{id}/deactivate",
7268
- * "method": "POST"
7269
- * }
7270
- * }
7271
- */
7272
- "application/json": components["schemas"]["ErrorResponseDto"];
7273
- };
7274
- };
7275
- /** @description Invalid or expired token */
7276
- 401: {
7277
- headers: {
7278
- [name: string]: unknown;
7279
- };
7280
- content: {
7281
- /**
7282
- * @example {
7283
- * "error": {
7284
- * "statusCode": 401,
7285
- * "code": null,
7286
- * "message": "Invalid or expired token",
7287
- * "timestamp": "2026-04-20T12:00:00.000Z",
7288
- * "path": "/api/v1/identities",
7289
- * "method": "GET"
7290
- * }
7291
- * }
7292
- */
7293
- "application/json": components["schemas"]["ErrorResponseDto"];
7294
- };
7295
- };
7296
- /** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
7297
- 403: {
7298
- headers: {
7299
- [name: string]: unknown;
7300
- };
7301
- content: {
7302
- /**
7303
- * @example {
7304
- * "error": {
7305
- * "statusCode": 403,
7306
- * "code": null,
7307
- * "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
7308
- * "timestamp": "2026-04-20T12:00:00.000Z",
7309
- * "path": "/api/v1/identities",
7310
- * "method": "GET"
7311
- * }
7312
- * }
7313
- */
7314
- "application/json": components["schemas"]["ErrorResponseDto"];
7315
- };
7316
- };
7317
- /** @description Identity not found */
7318
- 404: {
7319
- headers: {
7320
- [name: string]: unknown;
7321
- };
7322
- content: {
7323
- /**
7324
- * @example {
7325
- * "error": {
7326
- * "statusCode": 404,
7327
- * "code": null,
7328
- * "message": "Identity not found",
7329
- * "timestamp": "2026-04-20T12:00:00.000Z",
7330
- * "path": "/api/v1/identities/{id}/deactivate",
7331
- * "method": "POST"
7332
- * }
7333
- * }
7334
- */
7335
- "application/json": components["schemas"]["ErrorResponseDto"];
7336
- };
7337
- };
7338
- };
7339
- };
7340
7079
  ApiIdentitiesController_setIdentityPassword: {
7341
7080
  parameters: {
7342
7081
  query?: never;
@@ -8635,14 +8374,12 @@ interface operations {
8635
8374
  take?: number;
8636
8375
  /** @description Search term */
8637
8376
  q?: string;
8638
- /** @description Column to sort by. Allowed values depend on the endpoint. */
8639
- sort_by?: string;
8377
+ /** @description Column to sort by. Defaults to `created`, newest first. */
8378
+ sort_by?: "name" | "email" | "created";
8640
8379
  /** @description Sort direction */
8641
8380
  order?: "asc" | "desc";
8642
8381
  /** @description Filter by invite status */
8643
8382
  status?: "pending" | "accepted" | "revoked" | "expired";
8644
- /** @description Filter by target Environment. Pass the literal `none` to return only directory-only invites (environment_id is null). */
8645
- environment_id?: string;
8646
8383
  };
8647
8384
  header?: never;
8648
8385
  path?: never;
@@ -12641,6 +12378,27 @@ interface operations {
12641
12378
  "application/json": components["schemas"]["ErrorResponseDto"];
12642
12379
  };
12643
12380
  };
12381
+ /** @description The organization set this connection up itself; it stays bound. Disable or delete the connection instead. */
12382
+ 409: {
12383
+ headers: {
12384
+ [name: string]: unknown;
12385
+ };
12386
+ content: {
12387
+ /**
12388
+ * @example {
12389
+ * "error": {
12390
+ * "statusCode": 409,
12391
+ * "code": null,
12392
+ * "message": "The organization set this connection up itself; it stays bound. Disable or delete the connection instead.",
12393
+ * "timestamp": "2026-04-20T12:00:00.000Z",
12394
+ * "path": "/api/v1/organizations/{id}/sso-connections/{connectionId}",
12395
+ * "method": "DELETE"
12396
+ * }
12397
+ * }
12398
+ */
12399
+ "application/json": components["schemas"]["ErrorResponseDto"];
12400
+ };
12401
+ };
12644
12402
  };
12645
12403
  };
12646
12404
  ApiOrganizationsController_listMembers: {
@@ -20694,14 +20452,14 @@ declare class Identities {
20694
20452
  get(id: string): Promise<ResponseBody<"ApiIdentitiesController_getIdentity">>;
20695
20453
  create(input: RequestBody<"ApiIdentitiesController_createIdentity">): Promise<ResponseBody<"ApiIdentitiesController_createIdentity">>;
20696
20454
  update(id: string, input: RequestBody<"ApiIdentitiesController_updateIdentity">): Promise<ResponseBody<"ApiIdentitiesController_updateIdentity">>;
20697
- delete(id: string): Promise<void>;
20698
20455
  /**
20699
- * Deactivation is the reversible counterpart to `delete` — sessions are
20700
- * revoked and sign-in refused, but the identity and its assignments survive.
20701
- * Prefer it for offboarding you may need to undo.
20456
+ * Takes the identity out of this key's Environment: its membership here is
20457
+ * deactivated and its role assignments here are dropped. The identity and
20458
+ * its access to other Environments are untouched. Deactivating an identity
20459
+ * everywhere is an Account-level action, not available to an
20460
+ * Environment-scoped key.
20702
20461
  */
20703
- deactivate(id: string): Promise<ResponseBody<"ApiIdentitiesController_deactivateIdentity">>;
20704
- activate(id: string): Promise<ResponseBody<"ApiIdentitiesController_activateIdentity">>;
20462
+ delete(id: string): Promise<void>;
20705
20463
  /**
20706
20464
  * Every role this identity holds, and where — across all pages.
20707
20465
  *
@@ -20739,7 +20497,7 @@ declare class Identities {
20739
20497
  * Ends every session the identity holds, so the next refresh on any device
20740
20498
  * fails and the person signs in again. Access tokens already issued keep
20741
20499
  * working until their short lifetime runs out. For a suspected compromise;
20742
- * `deactivate` also refuses the next sign-in.
20500
+ * `delete` also takes the identity out of this Environment.
20743
20501
  */
20744
20502
  revokeSessions(id: string): Promise<void>;
20745
20503
  }
@@ -21082,7 +20840,9 @@ declare class LocalAuthorizer {
21082
20840
  * With no argument, everything goes: grants and the hierarchy tree. Not
21083
20841
  * needed in normal operation, where entries expire on their own; useful in
21084
20842
  * tests and after a change whose reach you cannot name (a role's
21085
- * permissions edited, a node moved).
20843
+ * permissions edited, a role deactivated or reactivated, a node moved). A
20844
+ * deactivated role grants nothing to anyone holding it, so until the cache
20845
+ * is cleared or expires, its holders keep being allowed locally.
21086
20846
  *
21087
20847
  * Multi-instance honesty: an invalidation reaches THIS process only. A
21088
20848
  * webhook lands on one instance behind a load balancer; the others serve