@wildo-ai/saas-technical-doc 1.1.3 → 1.1.5
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/esm/companion/application-documentation/application-connection-documentation.d.ts +37 -0
- package/dist/esm/companion/application-documentation/application-connection-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-connection-documentation.js +46 -5
- package/dist/esm/companion/application-documentation/application-connection-documentation.js.map +1 -1
- package/dist/esm/companion/application-documentation/application-documentation-chapters.d.ts +101 -0
- package/dist/esm/companion/application-documentation/application-documentation-chapters.d.ts.map +1 -0
- package/dist/esm/companion/application-documentation/application-documentation-chapters.js +205 -0
- package/dist/esm/companion/application-documentation/application-documentation-chapters.js.map +1 -0
- package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.js +3 -0
- package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.js.map +1 -1
- package/dist/esm/companion/application-documentation/docs-api-origin-substitution.d.ts +34 -0
- package/dist/esm/companion/application-documentation/docs-api-origin-substitution.d.ts.map +1 -0
- package/dist/esm/companion/application-documentation/docs-api-origin-substitution.js +45 -0
- package/dist/esm/companion/application-documentation/docs-api-origin-substitution.js.map +1 -0
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts +24 -10
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js +25 -15
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts +11 -3
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js +9 -2
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.js +10 -4
- package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.js.map +1 -1
- package/dist/esm/companion/index.d.ts +2 -0
- package/dist/esm/companion/index.d.ts.map +1 -1
- package/dist/esm/companion/index.js +2 -0
- package/dist/esm/companion/index.js.map +1 -1
- package/dist/esm/companion/openapi-generator.d.ts +8 -4
- package/dist/esm/companion/openapi-generator.d.ts.map +1 -1
- package/dist/esm/companion/openapi-generator.js +43 -17
- package/dist/esm/companion/openapi-generator.js.map +1 -1
- package/dist/esm/companion/operation-projection.schemas.d.ts +21 -1
- package/dist/esm/companion/operation-projection.schemas.d.ts.map +1 -1
- package/dist/esm/companion/operation-projection.schemas.js +11 -0
- package/dist/esm/companion/operation-projection.schemas.js.map +1 -1
- package/dist/esm/companion/publish-result.types.d.ts +37 -4
- package/dist/esm/companion/publish-result.types.d.ts.map +1 -1
- package/dist/esm/companion/publish-result.types.js.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js +8 -0
- package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-render-model.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-render-model.js +26 -10
- package/dist/esm/companion/rendering/technical-documentation-render-model.js.map +1 -1
- package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts +18 -15
- package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts.map +1 -1
- package/dist/esm/content/application-consumer-documentation-content.techdoc.js +169 -61
- package/dist/esm/content/application-consumer-documentation-content.techdoc.js.map +1 -1
- package/dist/esm/runtime/DocsAuthContext.d.ts +2 -2
- package/dist/esm/runtime/DocsAuthContext.d.ts.map +1 -1
- package/dist/esm/runtime/DocsAuthContext.js +8 -4
- package/dist/esm/runtime/DocsAuthContext.js.map +1 -1
- package/dist/esm/runtime/DocsFrontendProviders.d.ts +16 -0
- package/dist/esm/runtime/DocsFrontendProviders.d.ts.map +1 -0
- package/dist/esm/runtime/DocsFrontendProviders.js +26 -0
- package/dist/esm/runtime/DocsFrontendProviders.js.map +1 -0
- package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts +1 -2
- package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts.map +1 -1
- package/dist/esm/runtime/frontend-provider-registry.techdoc.js.map +1 -1
- package/dist/esm/runtime/index.d.ts +2 -0
- package/dist/esm/runtime/index.d.ts.map +1 -1
- package/dist/esm/runtime/index.js +2 -0
- package/dist/esm/runtime/index.js.map +1 -1
- package/dist/esm/runtime/openapi-reference-model.d.ts +5 -0
- package/dist/esm/runtime/openapi-reference-model.d.ts.map +1 -1
- package/dist/esm/runtime/openapi-reference-model.js +5 -0
- package/dist/esm/runtime/openapi-reference-model.js.map +1 -1
- package/dist/esm/runtime/openapi-reference-view.js +1 -1
- package/dist/esm/runtime/openapi-reference-view.js.map +1 -1
- package/dist/esm/runtime/use-docs-frontend-provider-registry.d.ts +1 -0
- package/dist/esm/runtime/use-docs-frontend-provider-registry.d.ts.map +1 -1
- package/dist/esm/runtime/use-docs-frontend-provider-registry.js +10 -2
- package/dist/esm/runtime/use-docs-frontend-provider-registry.js.map +1 -1
- package/dist/esm/runtime/use-docs-provider-scripts.d.ts +30 -0
- package/dist/esm/runtime/use-docs-provider-scripts.d.ts.map +1 -0
- package/dist/esm/runtime/use-docs-provider-scripts.js +40 -0
- package/dist/esm/runtime/use-docs-provider-scripts.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +8 -24
- package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.d.ts +0 -0
- package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.d.ts.map +0 -0
- package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.js +0 -0
- package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.js.map +0 -0
|
@@ -20,9 +20,12 @@
|
|
|
20
20
|
* fact in it is projected from sources the application already accepted — its own resource
|
|
21
21
|
* registry, its declared API-reference categories, and each specification's purpose and lifecycle.
|
|
22
22
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
23
|
+
* A page PER resource followed, as a generated tier with its own reserved namespace (see
|
|
24
|
+
* `pathForUnit`). And a cross-resource BUSINESS use case — the journey this module can never write,
|
|
25
|
+
* because it belongs to one application — is authored by that application as a documentation
|
|
26
|
+
* chapter its plan declares (#874, `application-documentation-chapters.ts`), again in a reserved
|
|
27
|
+
* namespace. A unit whose ref an application chose freely still fails closed rather than acquiring
|
|
28
|
+
* an implicit route.
|
|
26
29
|
*/
|
|
27
30
|
export const APPLICATION_CONSUMER_DOCUMENTATION_AUTHORED_CONTENT_V1 = [
|
|
28
31
|
{
|
|
@@ -737,11 +740,6 @@ administration surface permits that sequence. Do not mark it as default yet.
|
|
|
737
740
|
|
|
738
741
|
{{CONSUMER_FACT:source:consumer-fact:access-single-sign-on#connectionConfigurationMarkdown}}
|
|
739
742
|
|
|
740
|
-
> **Current limitation:** keep \`bypassAppMFA\` off. The configuration field is
|
|
741
|
-
> present, but the current authentication runtime does not use it to decide
|
|
742
|
-
> whether the application requests another factor. Prove the actual sign-in
|
|
743
|
-
> journey with a controlled account; do not use this field as audit evidence.
|
|
744
|
-
|
|
745
743
|
> **SSO role mapping is an access grant.** Test every mapped value, keep the
|
|
746
744
|
> fallback role non-administrative, and verify an expected refusal. A provider
|
|
747
745
|
> group name should never become broad application authority merely because it
|
|
@@ -974,7 +972,7 @@ that can reveal a mapping defect:
|
|
|
974
972
|
| Newly eligible person, when first-sign-in creation is enabled | The intended user and membership lifecycle occurs with the fallback role |
|
|
975
973
|
| Person with a mapped provider role or group | The exact external value maps to the intended application role |
|
|
976
974
|
| Person outside an allowed domain or mapping | The connection refuses the identity without revealing another account |
|
|
977
|
-
| Person with application MFA requirements | The actual post-provider journey is observed
|
|
975
|
+
| Person with application MFA requirements | The actual post-provider journey is observed. A connection cannot exempt anyone from the application's requirement: the declared policy is enforced on the federated lane too, and an organization may only tighten it |
|
|
978
976
|
| Independent recovery administrator | Provider outage or mapping failure does not remove all administrative access |
|
|
979
977
|
|
|
980
978
|
Use controlled test identities and non-sensitive application actions. Do not
|
|
@@ -3494,9 +3492,10 @@ credentials and unnecessary personal data.`,
|
|
|
3494
3492
|
|
|
3495
3493
|
SCIM lets an identity directory maintain a defined population of users and
|
|
3496
3494
|
organization memberships. Choose it when your directory should own repeatable
|
|
3497
|
-
joiner, mover and leaver changes. The application supports **SCIM Users
|
|
3498
|
-
SCIM Groups
|
|
3499
|
-
organization unit
|
|
3495
|
+
joiner, mover and leaver changes. The application supports **SCIM Users** and
|
|
3496
|
+
**SCIM Groups**. A directory \`department\` can be mapped to one existing
|
|
3497
|
+
organization unit, and a directory group can become an organization unit of its
|
|
3498
|
+
own — see *Provision organization units from your directory*.
|
|
3500
3499
|
|
|
3501
3500
|
> **SCIM provisions access; it does not sign people in.** Configure and prove
|
|
3502
3501
|
> single sign-on separately. A directory-managed person needs both a correctly
|
|
@@ -3588,8 +3587,8 @@ same membership or unit assignment.`,
|
|
|
3588
3587
|
|
|
3589
3588
|
Use this page to decide whether a directory or provisioning bridge is compatible
|
|
3590
3589
|
with this application **before** configuring production users. The application
|
|
3591
|
-
implements a focused SCIM 2.0 User service. It is not a generic LDAP
|
|
3592
|
-
|
|
3590
|
+
implements a focused SCIM 2.0 User and Group service. It is not a generic LDAP
|
|
3591
|
+
endpoint, and its Group resource maps to organization units rather than to roles.
|
|
3593
3592
|
|
|
3594
3593
|
## Supported profile at a glance
|
|
3595
3594
|
|
|
@@ -3597,12 +3596,12 @@ it does not implement SCIM Groups.
|
|
|
3597
3596
|
| --- | --- | --- |
|
|
3598
3597
|
| Protocol | SCIM 2.0 over HTTPS with \`application/scim+json\` | SCIM 1.1 and direct LDAP binds are not accepted |
|
|
3599
3598
|
| Authentication | A dedicated organization SCIM bearer token | The token selects one organization; it is not a user session or ordinary API key |
|
|
3600
|
-
| Resources | \`Users\`
|
|
3601
|
-
| User operations | Create, list, read, full replace, partial update and deactivate; Bulk accepts up to 100 operations | Organization-unit reconciliation differs by operation, as shown below |
|
|
3599
|
+
| Resources | \`Users\`, \`Groups\` and SCIM discovery documents | A \`Group\` is an organization unit, not a role. It is available only once an administrator sets the unit role on the SCIM provisioning configuration; until then every \`/Groups\` request answers 403 |
|
|
3600
|
+
| User operations | Create, list, read, full replace, partial update and deactivate; Bulk accepts up to 100 User or Group operations | Organization-unit reconciliation differs by operation, as shown below |
|
|
3602
3601
|
| Filtering | User lookup filters with a published maximum result size of 200 | Test the provider’s exact matching query before broad rollout |
|
|
3603
3602
|
| Password changes | Not supported | Use the configured human sign-in or SSO journey; do not synchronize directory passwords |
|
|
3604
3603
|
| Sorting and ETags | Not supported | A provider must not require sorting or conditional ETag writes |
|
|
3605
|
-
| Request budget |
|
|
3604
|
+
| Request budget | 6,000 requests per minute for each SCIM token, sized for the request bursts Microsoft Entra ID and Okta send (neither uses Bulk) | A 429 response carries an integer \`Retry-After\`; follow it rather than rotating addresses |
|
|
3606
3605
|
|
|
3607
3606
|
The public discovery documents are available beneath the SCIM base URL:
|
|
3608
3607
|
|
|
@@ -3648,7 +3647,7 @@ and does not prove that the person can complete SSO.
|
|
|
3648
3647
|
| Provider requirement | Compatible expectation |
|
|
3649
3648
|
| --- | --- |
|
|
3650
3649
|
| Discovery | The provider can read \`ServiceProviderConfig\`, \`Schemas\` and \`ResourceTypes\` and respect the advertised feature set |
|
|
3651
|
-
| Resource types | User provisioning works
|
|
3650
|
+
| Resource types | \`/ResourceTypes\` lists both \`User\` and \`Group\`. User provisioning works whether or not the provider calls \`/Groups\` |
|
|
3652
3651
|
| Update behavior | The provider can operate with the documented PUT/PATCH consequences, especially when department controls unit access |
|
|
3653
3652
|
| Authentication | The provider can send the dedicated bearer token in the HTTPS \`Authorization\` header |
|
|
3654
3653
|
| Matching and pagination | Its exact user filter and result-window behavior work within the published limit |
|
|
@@ -3711,9 +3710,9 @@ matched exactly, after trimming, against the organization-unit mapping.
|
|
|
3711
3710
|
| --- | --- | --- |
|
|
3712
3711
|
| \`POST /Users\` | Creates or links the person according to the lifecycle configuration | Reconciles an exact mapped department when unit mapping and a default unit role are configured |
|
|
3713
3712
|
| \`PUT /Users/{id}\` | Replaces the maintained profile and active state | Performs authoritative unit reconciliation from the full department value |
|
|
3714
|
-
| \`PATCH /Users/{id}\` | Applies supported partial profile or active-state changes |
|
|
3713
|
+
| \`PATCH /Users/{id}\` | Applies supported partial profile or active-state changes | Reconciles units only when the PATCH sets or removes the department; a PATCH that does not touch the department leaves unit assignments unchanged |
|
|
3715
3714
|
| \`DELETE /Users/{id}\` | Runs the configured deactivation behavior; it does not physically erase the person | Does not perform a department-to-unit reconciliation |
|
|
3716
|
-
| \`POST /Bulk\` | Executes
|
|
3715
|
+
| \`POST /Bulk\` | Executes each User or Group operation individually, exactly as the same request would on its own | The same effect as the individual operation: a Bulk PUT reconciles like \`PUT\`, a Bulk PATCH like \`PATCH\`. A \`bulkId:\` reference to a resource created earlier in the same request is replaced by its id, so one request can create a user and add them to a new group |
|
|
3717
3716
|
|
|
3718
3717
|
This difference matters with providers that normally send PATCH. Do not enable
|
|
3719
3718
|
authoritative department-to-unit mapping merely because user creation worked.
|
|
@@ -3858,18 +3857,24 @@ plaintext secret is returned once; store it immediately in the identity
|
|
|
3858
3857
|
provider’s secret store. Keep it out of source control, screenshots, logs,
|
|
3859
3858
|
tickets and reusable examples.
|
|
3860
3859
|
|
|
3861
|
-
The current request budget is **
|
|
3862
|
-
|
|
3863
|
-
|
|
3860
|
+
The current request budget is **6,000 requests per minute per token**. It is
|
|
3861
|
+
sized for how identity providers really push: neither Microsoft Entra ID nor
|
|
3862
|
+
Okta uses SCIM Bulk, so a first sync arrives as a burst of individual requests.
|
|
3863
|
+
When the service returns a rate limit, it states an integer \`Retry-After\` in
|
|
3864
|
+
seconds; follow it instead of starting parallel retries.
|
|
3864
3865
|
|
|
3865
3866
|
## Treat deactivation as a high-impact choice
|
|
3866
3867
|
|
|
3867
|
-
|
|
3868
|
-
|
|
3869
|
-
|
|
3870
|
-
|
|
3871
|
-
|
|
3872
|
-
|
|
3868
|
+
Deactivation withdraws the person's membership in **this organization only**,
|
|
3869
|
+
together with the access that membership conferred. Their account and their
|
|
3870
|
+
memberships in other organizations are not touched: one organization's
|
|
3871
|
+
directory cannot lock a person out of another.
|
|
3872
|
+
|
|
3873
|
+
A later \`active:true\` restores the membership with the organization's
|
|
3874
|
+
**current default role**, not the roles the person held before. Re-grant any
|
|
3875
|
+
additional role deliberately. A person whose account was disabled by the
|
|
3876
|
+
application operator is not re-enabled by the directory; restoring them is the
|
|
3877
|
+
operator's decision.`,
|
|
3873
3878
|
},
|
|
3874
3879
|
{
|
|
3875
3880
|
managedPath: 'user-administration/scim-microsoft-entra.md',
|
|
@@ -3944,18 +3949,36 @@ Keep the first mapping small and observable:
|
|
|
3944
3949
|
| Account-enabled expression | \`active\` | Test disable and re-enable as separate access events |
|
|
3945
3950
|
| \`department\` | Enterprise User \`department\` | Enable only if department is an access-control authority |
|
|
3946
3951
|
|
|
3947
|
-
This application
|
|
3948
|
-
|
|
3949
|
-
|
|
3950
|
-
|
|
3952
|
+
This application exposes **Users** and **Groups**. A pushed Entra group becomes
|
|
3953
|
+
an organization UNIT, and its members become assignments in that unit carrying
|
|
3954
|
+
the unit role configured on the SCIM provisioning configuration — it does not
|
|
3955
|
+
become a role or a permission set. Enable group provisioning only if you intend
|
|
3956
|
+
your directory's groups to define unit access; leave it off and Entra groups
|
|
3957
|
+
remain purely an Entra-side way to decide who is assigned to the enterprise
|
|
3958
|
+
application.
|
|
3959
|
+
|
|
3960
|
+
Two consequences to plan for. A group this application did not create is never
|
|
3961
|
+
adopted, so an Entra group whose name matches a unit an administrator authored
|
|
3962
|
+
creates a second unit rather than taking over the first. And a group Entra
|
|
3963
|
+
deletes takes its unit, and every assignment in it, with it.
|
|
3964
|
+
|
|
3965
|
+
While the directory is connected, a unit it created is **managed by the
|
|
3966
|
+
directory**: its name and its members are refused if changed in this
|
|
3967
|
+
application, because the next push would put them back. The organization-units
|
|
3968
|
+
screen marks such a unit with its source (SCIM) and the directory's own group
|
|
3969
|
+
identifier. Rename the group, or change who is in it, in Entra. An assignment's
|
|
3970
|
+
unit role, and the unit's code, type, status and position, are not
|
|
3971
|
+
directory-managed and stay editable here. If the directory is disconnected —
|
|
3972
|
+
every SCIM token revoked — the unit becomes editable like any other.
|
|
3951
3973
|
|
|
3952
3974
|
## Treat department-to-unit mapping as a controlled rollout
|
|
3953
3975
|
|
|
3954
|
-
The application reconciles organization units on
|
|
3955
|
-
\`PUT /Users/{id}\`
|
|
3956
|
-
|
|
3957
|
-
|
|
3958
|
-
|
|
3976
|
+
The application reconciles organization units on \`POST /Users\`, on full
|
|
3977
|
+
\`PUT /Users/{id}\`, and on a \`PATCH\` that sets or removes the department — and
|
|
3978
|
+
on the same operations inside \`Bulk\`. A PATCH that does not touch the department
|
|
3979
|
+
leaves unit assignments unchanged. Entra sends PATCH for attribute changes, so
|
|
3980
|
+
confirm that a department move actually reaches the application as a department
|
|
3981
|
+
change before relying on it to remove former unit access.
|
|
3959
3982
|
|
|
3960
3983
|
Before making department authoritative:
|
|
3961
3984
|
|
|
@@ -4030,10 +4053,20 @@ another Okta application whose provisioning connector lets you supply a SCIM
|
|
|
4030
4053
|
base URL and bearer token. If the application later has a reviewed Okta
|
|
4031
4054
|
Integration Network entry, follow that entry instead of duplicating it.
|
|
4032
4055
|
|
|
4033
|
-
The application accepts SCIM **User** resources.
|
|
4034
|
-
|
|
4035
|
-
|
|
4036
|
-
|
|
4056
|
+
The application accepts SCIM **User** and **Group** resources. A pushed group
|
|
4057
|
+
becomes an organization UNIT rather than a role: its members receive the unit
|
|
4058
|
+
role configured on the SCIM provisioning configuration, which confines which
|
|
4059
|
+
records they reach and never widens their permissions. Enable Push Groups only
|
|
4060
|
+
if that is what you intend; otherwise an Okta group can still control which users
|
|
4061
|
+
are assigned to the Okta application without being pushed.
|
|
4062
|
+
|
|
4063
|
+
Note that Okta creates a group without an \`externalId\`, which this application
|
|
4064
|
+
handles: the group is identified by the id returned when it was created.
|
|
4065
|
+
|
|
4066
|
+
A pushed group's name and members are managed by Okta while it stays connected:
|
|
4067
|
+
changing either in this application is refused, because the next push would
|
|
4068
|
+
restore it. Make those changes in Okta; unit roles and the unit's other settings
|
|
4069
|
+
stay editable here.
|
|
4037
4070
|
|
|
4038
4071
|
## Connect Okta
|
|
4039
4072
|
|
|
@@ -4068,10 +4101,11 @@ Map Okta’s department to the SCIM Enterprise User extension only when it is
|
|
|
4068
4101
|
authoritative enough to change access. Then map exact department values to
|
|
4069
4102
|
existing application organization units.
|
|
4070
4103
|
|
|
4071
|
-
> **Operation
|
|
4072
|
-
>
|
|
4073
|
-
>
|
|
4074
|
-
>
|
|
4104
|
+
> **Operation boundary:** organization-unit reconciliation runs on user creation,
|
|
4105
|
+
> full replacement, and a PATCH that sets or removes the department, including the
|
|
4106
|
+
> same operations inside Bulk. A PATCH that does not touch the department leaves
|
|
4107
|
+
> unit assignments unchanged. Capture the operation Okta sends for a department
|
|
4108
|
+
> change and prove that the old unit assignment is removed before production rollout.
|
|
4075
4109
|
|
|
4076
4110
|
## Prove one complete lifecycle
|
|
4077
4111
|
|
|
@@ -4152,7 +4186,7 @@ compliant SCIM User. A common starting point is:
|
|
|
4152
4186
|
| \`sn\` | \`name.familyName\` | Empty-value behavior |
|
|
4153
4187
|
| \`displayName\` | \`displayName\` | Which system owns later edits |
|
|
4154
4188
|
| \`department\` | Enterprise User \`department\` | Whether it is authoritative for unit access |
|
|
4155
|
-
| Disabled-account state | \`active:false\` |
|
|
4189
|
+
| Disabled-account state | \`active:false\` | Withdraws the membership in this organization only; the account and other memberships stay |
|
|
4156
4190
|
|
|
4157
4191
|
These are mapping decisions, not guaranteed attributes in every LDAP schema.
|
|
4158
4192
|
Inspect representative entries and document the source object classes,
|
|
@@ -4198,8 +4232,10 @@ A production bridge needs all of the following:
|
|
|
4198
4232
|
- a tested response to rate limiting, token rotation and partial batch failure.
|
|
4199
4233
|
|
|
4200
4234
|
Do not use Bulk for a first implementation merely for speed. The application
|
|
4201
|
-
supports a bounded Bulk request
|
|
4202
|
-
|
|
4235
|
+
supports a bounded Bulk request whose operations behave exactly as the same
|
|
4236
|
+
individual requests, but a Bulk response reports each operation's status
|
|
4237
|
+
separately, which makes failures harder to observe. Start with observable
|
|
4238
|
+
individual operations.
|
|
4203
4239
|
|
|
4204
4240
|
## Validate before production
|
|
4205
4241
|
|
|
@@ -4304,8 +4340,9 @@ flowchart LR
|
|
|
4304
4340
|
Reconciliation becomes active only with at least one explicit mapping and a
|
|
4305
4341
|
default unit role. On supported direct user creation and full replacement, the
|
|
4306
4342
|
directory becomes authoritative: a changed, blank or unmapped department can
|
|
4307
|
-
remove former assignments, including manual ones.
|
|
4308
|
-
|
|
4343
|
+
remove former assignments, including manual ones. A PATCH performs this
|
|
4344
|
+
reconciliation only when it sets or removes the department; Bulk operations
|
|
4345
|
+
behave as the same individual requests. Prove the exact operation used by
|
|
4309
4346
|
your identity provider.`,
|
|
4310
4347
|
},
|
|
4311
4348
|
{
|
|
@@ -4345,8 +4382,9 @@ unit assignment and sign-in behavior after every change.
|
|
|
4345
4382
|
unit assignment was removed.
|
|
4346
4383
|
6. **Send blank, unmapped and wrong-case departments.** Verify the exact result
|
|
4347
4384
|
before making mapping authoritative.
|
|
4348
|
-
7. **Deactivate a multi-organization person.**
|
|
4349
|
-
|
|
4385
|
+
7. **Deactivate a multi-organization person.** Confirm that only this
|
|
4386
|
+
organization's membership became inactive and their other memberships
|
|
4387
|
+
are unchanged.
|
|
4350
4388
|
8. **Recover the person.** Confirm that the user and intended membership are
|
|
4351
4389
|
both **Active** and that enterprise sign-in succeeds.
|
|
4352
4390
|
|
|
@@ -4417,7 +4455,7 @@ change completed successfully.
|
|
|
4417
4455
|
| **409** | An existing identity or membership conflicts; inspect it instead of creating a duplicate |
|
|
4418
4456
|
| **429** | Follow retry information and reduce concurrency |
|
|
4419
4457
|
| Profile value is missing | Test the exact mapping expression against the real directory payload |
|
|
4420
|
-
| Unit did not change | Confirm exact department value and case, explicit mapping, existing unit, default role and
|
|
4458
|
+
| Unit did not change | Confirm exact department value and case, explicit mapping, existing unit, default role, and that the operation carried the department (create, full replacement, or a PATCH that sets it) |
|
|
4421
4459
|
| Person remains unable to sign in | Check enterprise sign-in, global user state and organization membership state separately |
|
|
4422
4460
|
|
|
4423
4461
|
## Recover safely
|
|
@@ -4956,13 +4994,83 @@ application path you operate.
|
|
|
4956
4994
|
|
|
4957
4995
|
{{CONSUMER_FACT:source:consumer-fact:organization-siem-export#deliveryValuesMarkdown}}
|
|
4958
4996
|
|
|
4959
|
-
The current worker posts **one event per HTTP request
|
|
4960
|
-
receiver, load balancer or billing estimate on
|
|
4961
|
-
|
|
4962
|
-
|
|
4963
|
-
|
|
4964
|
-
|
|
4965
|
-
|
|
4997
|
+
The current worker posts **one event per HTTP request**, and there is no setting
|
|
4998
|
+
that changes that — size a receiver, load balancer or billing estimate on one
|
|
4999
|
+
request per event.
|
|
5000
|
+
|
|
5001
|
+
Two configuration fields used to sit here promising otherwise — \`batchSize\` and
|
|
5002
|
+
\`batchWindowSeconds\` — each accepted, stored and read by nothing. They were
|
|
5003
|
+
removed rather than documented as reserved: a stored number that does not change
|
|
5004
|
+
behaviour is worse than its absence, because a receiver sized on it is sized wrong.
|
|
5005
|
+
|
|
5006
|
+
## Limit what an exported event carries
|
|
5007
|
+
|
|
5008
|
+
\`exportProjection\` decides what this destination receives. It is the only place
|
|
5009
|
+
an export can be narrowed **before** the data leaves; everything else — a filter,
|
|
5010
|
+
a severity minimum — decides *whether* an event is sent, not *what* it contains.
|
|
5011
|
+
|
|
5012
|
+
Set it per destination, not per application: two receivers under two different
|
|
5013
|
+
agreements are two different answers.
|
|
5014
|
+
|
|
5015
|
+
| Declaration | Admits |
|
|
5016
|
+
| --- | --- |
|
|
5017
|
+
| \`disclosedTiers: ["attribution"]\` | the user's email address, IP address, user agent, geolocation and client-install identifier |
|
|
5018
|
+
| \`disclosedTiers: ["context"]\` | correlation identifier, originating frontend, organization and application names, authentication method and source |
|
|
5019
|
+
| \`disclosedTiers: ["detail"]\` | the per-event \`eventData\` object **and the outcome reason**, subject to the next row |
|
|
5020
|
+
| \`disclosedEventDataClasses: ["administrative"]\` | only the \`eventData\` of events describing configuration or system state |
|
|
5021
|
+
| \`disclosedEventDataClasses: ["subject-detail"]\` | also the \`eventData\` of events describing a person |
|
|
5022
|
+
|
|
5023
|
+
**Declaring \`detail\` while withholding \`attribution\` is the mistake to avoid.**
|
|
5024
|
+
An authentication event's \`eventData\` carries the email address and IP address
|
|
5025
|
+
that withholding attribution was meant to keep back, so the narrowing reads as a
|
|
5026
|
+
control while changing nothing that matters. Pair it with
|
|
5027
|
+
\`disclosedEventDataClasses: ["administrative"]\`.
|
|
5028
|
+
|
|
5029
|
+
The outcome reason sits in \`detail\` rather than \`context\` for the same reason,
|
|
5030
|
+
and it is worth understanding before you rely on either tier. It is not a field of
|
|
5031
|
+
its own: the application lifts it out of the event's own \`eventData\`. Most of the
|
|
5032
|
+
time it is a short, impersonal failure reason — but **19 event types carry a
|
|
5033
|
+
reason somebody typed**, including organization lifecycle changes, emergency
|
|
5034
|
+
access, forced password resets and retained-data access, where it is the
|
|
5035
|
+
operator's own words and may name anyone. Withholding an event's detail therefore
|
|
5036
|
+
withholds its reason too.
|
|
5037
|
+
|
|
5038
|
+
A **floor always survives** whatever you declare: event identifier, event type,
|
|
5039
|
+
category, severity, timestamp, organization, the acting user's identifier, source
|
|
5040
|
+
service, source version, source environment, and outcome. Two reasons, and only
|
|
5041
|
+
the first is about privacy. The event identifier is what your receiver
|
|
5042
|
+
de-duplicates on, and deliveries are retried — an export minimized past it
|
|
5043
|
+
produces duplicates in your SIEM rather than fewer records. The event type,
|
|
5044
|
+
severity and source version are header fields of the CEF and LEEF grammars, which
|
|
5045
|
+
are positional: omitting one does not shorten the record, it corrupts every field
|
|
5046
|
+
after it. The acting user's identifier is an opaque reference, never a name or an
|
|
5047
|
+
address, so it lets you correlate one actor's activity without receiving their
|
|
5048
|
+
identity — which is usually the trade a minimized export exists to make.
|
|
5049
|
+
|
|
5050
|
+
One capability cost to know about, because nothing warns you at the time:
|
|
5051
|
+
withholding \`detail\` makes OCSF exports coarser. The application refines an
|
|
5052
|
+
API-activity event's \`activity_id\` by reading the verb out of \`eventData\`, so
|
|
5053
|
+
with the object withheld a create and a delete both report the generic
|
|
5054
|
+
\`Other\` activity and share a \`type_uid\`. The event type is still carried in
|
|
5055
|
+
\`activity_name\` and \`metadata.event_code\`, so nothing is wrong — but a
|
|
5056
|
+
detection rule or dashboard that groups by \`type_uid\` will stop separating them.
|
|
5057
|
+
CEF, LEEF and structured JSON are unaffected.
|
|
5058
|
+
|
|
5059
|
+
Withheld fields are **absent**, not empty. No blank CEF custom-string slot, no
|
|
5060
|
+
null JSON key, no empty OCSF attribute — so a receiver's "field is present but
|
|
5061
|
+
empty" rule will not fire, and a rule keyed on a withheld field simply never
|
|
5062
|
+
matches. The same projection applies to every wire format, because it is applied
|
|
5063
|
+
once, before the event is signed and queued, rather than per format.
|
|
5064
|
+
|
|
5065
|
+
Omit the whole block and the destination receives the full envelope. That is the
|
|
5066
|
+
behaviour of every destination configured before this control existed, so
|
|
5067
|
+
introducing it changes nothing until you declare a narrowing.
|
|
5068
|
+
|
|
5069
|
+
Verify a narrowing the way you verify a filter: perform one controlled event,
|
|
5070
|
+
read the received copy, and confirm both that the withheld fields are absent and
|
|
5071
|
+
that the event identifier still matches the source audit record. Minimization
|
|
5072
|
+
does not alter the source audit trail — the full record remains in the
|
|
5073
|
+
application, and a narrowed feed is not evidence that less was recorded.
|
|
4966
5074
|
|
|
4967
5075
|
## Filter for purpose and volume
|
|
4968
5076
|
|