@wildo-ai/saas-technical-doc 1.1.5 → 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/dist/esm/build/csp-emit.d.ts.map +1 -1
  2. package/dist/esm/build/load-materialized-frontend-providers.d.ts.map +1 -1
  3. package/dist/esm/companion/application-documentation/application-authentication-documentation.d.ts.map +1 -1
  4. package/dist/esm/companion/application-documentation/application-connection-documentation.d.ts.map +1 -1
  5. package/dist/esm/companion/application-documentation/application-documentation-chapters.d.ts.map +1 -1
  6. package/dist/esm/companion/application-documentation/application-organization-role-documentation.d.ts.map +1 -1
  7. package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.d.ts.map +1 -1
  8. package/dist/esm/companion/application-documentation/docs-api-origin-substitution.d.ts.map +1 -1
  9. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts.map +1 -1
  10. package/dist/esm/companion/application-documentation/technical-documentation-operational-evidence.d.ts.map +1 -1
  11. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts.map +1 -1
  12. package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.d.ts.map +1 -1
  13. package/dist/esm/companion/content/application-consumer-documentation-content-loader.d.ts.map +1 -1
  14. package/dist/esm/companion/index.d.ts.map +1 -1
  15. package/dist/esm/companion/manual-controller-route-projection.d.ts.map +1 -1
  16. package/dist/esm/companion/openapi-example-derivation.d.ts +53 -0
  17. package/dist/esm/companion/openapi-example-derivation.d.ts.map +1 -0
  18. package/dist/esm/companion/openapi-example-derivation.js +229 -0
  19. package/dist/esm/companion/openapi-example-derivation.js.map +1 -0
  20. package/dist/esm/companion/openapi-generator.d.ts.map +1 -1
  21. package/dist/esm/companion/openapi-generator.js +284 -16
  22. package/dist/esm/companion/openapi-generator.js.map +1 -1
  23. package/dist/esm/companion/operation-projection.schemas.d.ts +36 -0
  24. package/dist/esm/companion/operation-projection.schemas.d.ts.map +1 -1
  25. package/dist/esm/companion/operation-projection.schemas.js +18 -0
  26. package/dist/esm/companion/operation-projection.schemas.js.map +1 -1
  27. package/dist/esm/companion/publish-result.types.d.ts.map +1 -1
  28. package/dist/esm/companion/rendering/technical-documentation-authorized-bundle-reader.d.ts.map +1 -1
  29. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.d.ts.map +1 -1
  30. package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.d.ts.map +1 -1
  31. package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.js +20 -0
  32. package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.js.map +1 -1
  33. package/dist/esm/companion/rendering/technical-documentation-markdown-links.d.ts.map +1 -1
  34. package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.d.ts +2 -0
  35. package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.d.ts.map +1 -1
  36. package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.js +48 -31
  37. package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.js.map +1 -1
  38. package/dist/esm/companion/rendering/technical-documentation-render-model.d.ts.map +1 -1
  39. package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.d.ts.map +1 -1
  40. package/dist/esm/companion/spec-to-operation-doc.d.ts +52 -10
  41. package/dist/esm/companion/spec-to-operation-doc.d.ts.map +1 -1
  42. package/dist/esm/companion/spec-to-operation-doc.js +125 -7
  43. package/dist/esm/companion/spec-to-operation-doc.js.map +1 -1
  44. package/dist/esm/companion/technical-documentation-asset-path.d.ts.map +1 -1
  45. package/dist/esm/companion/technical-documentation-capture-execution-port.d.ts.map +1 -1
  46. package/dist/esm/companion/technical-documentation-diagram-definitions.d.ts.map +1 -1
  47. package/dist/esm/companion/technical-documentation-diagram-materializer.d.ts.map +1 -1
  48. package/dist/esm/companion/technical-documentation-placeholder-materializer.d.ts.map +1 -1
  49. package/dist/esm/companion/zod-to-openapi.d.ts.map +1 -1
  50. package/dist/esm/companion-exports.d.ts.map +1 -1
  51. package/dist/esm/config/define-tech-doc-config.d.ts.map +1 -1
  52. package/dist/esm/config/index.d.ts.map +1 -1
  53. package/dist/esm/config/wildo-tech-doc-config.schemas.d.ts.map +1 -1
  54. package/dist/esm/content/application-consumer-documentation-content-manifest.schemas.d.ts.map +1 -1
  55. package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts +10 -10
  56. package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts.map +1 -1
  57. package/dist/esm/content/application-consumer-documentation-content.techdoc.js +43 -28
  58. package/dist/esm/content/application-consumer-documentation-content.techdoc.js.map +1 -1
  59. package/dist/esm/content.exports.d.ts.map +1 -1
  60. package/dist/esm/index.d.ts.map +1 -1
  61. package/dist/esm/openapi/api-reference-link-index.d.ts +3 -0
  62. package/dist/esm/openapi/api-reference-link-index.d.ts.map +1 -1
  63. package/dist/esm/openapi/api-reference-link-index.js +26 -15
  64. package/dist/esm/openapi/api-reference-link-index.js.map +1 -1
  65. package/dist/esm/openapi/api-reference-pages.d.ts +55 -0
  66. package/dist/esm/openapi/api-reference-pages.d.ts.map +1 -0
  67. package/dist/esm/openapi/api-reference-pages.js +229 -0
  68. package/dist/esm/openapi/api-reference-pages.js.map +1 -0
  69. package/dist/esm/openapi/api-reference-search.d.ts +53 -0
  70. package/dist/esm/openapi/api-reference-search.d.ts.map +1 -0
  71. package/dist/esm/openapi/api-reference-search.js +100 -0
  72. package/dist/esm/openapi/api-reference-search.js.map +1 -0
  73. package/dist/esm/openapi/api-reference-targets.d.ts +11 -0
  74. package/dist/esm/openapi/api-reference-targets.d.ts.map +1 -1
  75. package/dist/esm/openapi/api-reference-targets.js +8 -0
  76. package/dist/esm/openapi/api-reference-targets.js.map +1 -1
  77. package/dist/esm/openapi/index.d.ts +2 -0
  78. package/dist/esm/openapi/index.d.ts.map +1 -1
  79. package/dist/esm/openapi/index.js +2 -0
  80. package/dist/esm/openapi/index.js.map +1 -1
  81. package/dist/esm/openapi/openapi-generation-output.schemas.d.ts.map +1 -1
  82. package/dist/esm/openapi-reference-model.exports.d.ts +2 -0
  83. package/dist/esm/openapi-reference-model.exports.d.ts.map +1 -1
  84. package/dist/esm/openapi-reference-model.exports.js +2 -0
  85. package/dist/esm/openapi-reference-model.exports.js.map +1 -1
  86. package/dist/esm/runtime/AuthExchangePage.d.ts +45 -4
  87. package/dist/esm/runtime/AuthExchangePage.d.ts.map +1 -1
  88. package/dist/esm/runtime/AuthExchangePage.js +45 -12
  89. package/dist/esm/runtime/AuthExchangePage.js.map +1 -1
  90. package/dist/esm/runtime/DocsAuthContext.d.ts.map +1 -1
  91. package/dist/esm/runtime/DocsFrontendProviders.d.ts +15 -1
  92. package/dist/esm/runtime/DocsFrontendProviders.d.ts.map +1 -1
  93. package/dist/esm/runtime/DocsFrontendProviders.js +16 -3
  94. package/dist/esm/runtime/DocsFrontendProviders.js.map +1 -1
  95. package/dist/esm/runtime/DocsProviderComponent.d.ts +41 -0
  96. package/dist/esm/runtime/DocsProviderComponent.d.ts.map +1 -0
  97. package/dist/esm/runtime/DocsProviderComponent.js +17 -0
  98. package/dist/esm/runtime/DocsProviderComponent.js.map +1 -0
  99. package/dist/esm/runtime/decode-jwt-claims.d.ts.map +1 -1
  100. package/dist/esm/runtime/docs-auth-client.d.ts.map +1 -1
  101. package/dist/esm/runtime/docs-auth-session.schemas.d.ts.map +1 -1
  102. package/dist/esm/runtime/documentation-site-translator.d.ts +53 -0
  103. package/dist/esm/runtime/documentation-site-translator.d.ts.map +1 -0
  104. package/dist/esm/runtime/documentation-site-translator.js +51 -0
  105. package/dist/esm/runtime/documentation-site-translator.js.map +1 -0
  106. package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts.map +1 -1
  107. package/dist/esm/runtime/index.d.ts +6 -0
  108. package/dist/esm/runtime/index.d.ts.map +1 -1
  109. package/dist/esm/runtime/index.js +6 -0
  110. package/dist/esm/runtime/index.js.map +1 -1
  111. package/dist/esm/runtime/openapi-reference-conservation.d.ts.map +1 -1
  112. package/dist/esm/runtime/openapi-reference-model.d.ts +25 -0
  113. package/dist/esm/runtime/openapi-reference-model.d.ts.map +1 -1
  114. package/dist/esm/runtime/openapi-reference-model.js +82 -13
  115. package/dist/esm/runtime/openapi-reference-model.js.map +1 -1
  116. package/dist/esm/runtime/openapi-reference-navigation.d.ts +50 -0
  117. package/dist/esm/runtime/openapi-reference-navigation.d.ts.map +1 -0
  118. package/dist/esm/runtime/openapi-reference-navigation.js +46 -0
  119. package/dist/esm/runtime/openapi-reference-navigation.js.map +1 -0
  120. package/dist/esm/runtime/openapi-reference-samples.d.ts +40 -0
  121. package/dist/esm/runtime/openapi-reference-samples.d.ts.map +1 -0
  122. package/dist/esm/runtime/openapi-reference-samples.js +169 -0
  123. package/dist/esm/runtime/openapi-reference-samples.js.map +1 -0
  124. package/dist/esm/runtime/openapi-reference-styles.d.ts +28 -0
  125. package/dist/esm/runtime/openapi-reference-styles.d.ts.map +1 -0
  126. package/dist/esm/runtime/openapi-reference-styles.js +292 -0
  127. package/dist/esm/runtime/openapi-reference-styles.js.map +1 -0
  128. package/dist/esm/runtime/openapi-reference-view.d.ts +40 -5
  129. package/dist/esm/runtime/openapi-reference-view.d.ts.map +1 -1
  130. package/dist/esm/runtime/openapi-reference-view.js +828 -82
  131. package/dist/esm/runtime/openapi-reference-view.js.map +1 -1
  132. package/dist/esm/runtime/openapi-reference-words-context.d.ts +12 -0
  133. package/dist/esm/runtime/openapi-reference-words-context.d.ts.map +1 -0
  134. package/dist/esm/runtime/openapi-reference-words-context.js +30 -0
  135. package/dist/esm/runtime/openapi-reference-words-context.js.map +1 -0
  136. package/dist/esm/runtime/openapi-reference-words.d.ts +205 -0
  137. package/dist/esm/runtime/openapi-reference-words.d.ts.map +1 -0
  138. package/dist/esm/runtime/openapi-reference-words.js +162 -0
  139. package/dist/esm/runtime/openapi-reference-words.js.map +1 -0
  140. package/dist/esm/runtime/provider-component-registry.techdoc.d.ts +31 -0
  141. package/dist/esm/runtime/provider-component-registry.techdoc.d.ts.map +1 -0
  142. package/dist/esm/runtime/provider-component-registry.techdoc.js +35 -0
  143. package/dist/esm/runtime/provider-component-registry.techdoc.js.map +1 -0
  144. package/dist/esm/runtime/use-docs-auth-session.d.ts.map +1 -1
  145. package/dist/esm/runtime/use-docs-frontend-provider-registry.d.ts.map +1 -1
  146. package/dist/esm/runtime/use-docs-provider-component.d.ts +29 -0
  147. package/dist/esm/runtime/use-docs-provider-component.d.ts.map +1 -0
  148. package/dist/esm/runtime/use-docs-provider-component.js +42 -0
  149. package/dist/esm/runtime/use-docs-provider-component.js.map +1 -0
  150. package/dist/esm/runtime/use-docs-provider-scripts.d.ts +12 -5
  151. package/dist/esm/runtime/use-docs-provider-scripts.d.ts.map +1 -1
  152. package/dist/esm/runtime/use-docs-provider-scripts.js +15 -8
  153. package/dist/esm/runtime/use-docs-provider-scripts.js.map +1 -1
  154. package/dist/esm/runtime/use-docs-provider-sdks.d.ts.map +1 -1
  155. package/dist/tsconfig.build.tsbuildinfo +1 -1
  156. package/package.json +6 -6
@@ -1593,11 +1593,13 @@ not rotate secret material or repair an ownerless key.
1593
1593
 
1594
1594
  ## Close the change with evidence
1595
1595
 
1596
- {{CONSUMER_FACT:source:consumer-fact:access-api-keys#usageStatisticsLimitationMarkdown}}
1596
+ {{CONSUMER_FACT:source:consumer-fact:access-api-keys#usageStatisticsMarkdown}}
1597
1597
 
1598
- Until per-key tracking exists, prove deployment and retirement from controlled
1599
- requests, application audit evidence and the workload's own secret-access and
1600
- execution logs. A page of zero counters is not a safe deletion decision.
1598
+ After a rotation, the new key should show accepted requests and a recent
1599
+ last-accepted time, and the key it replaced should stop being accepted. The
1600
+ counters cover a rolling week, so a key a workload uses less often than weekly
1601
+ can show none: read its last-accepted time before calling it unused, and confirm
1602
+ with the owning workload before deleting a key that time does not settle.
1601
1603
 
1602
1604
  Retain a non-secret lifecycle record containing:
1603
1605
 
@@ -1647,11 +1649,14 @@ flowchart TD
1647
1649
  The non-secret prefix helps identify the credential record; it cannot prove
1648
1650
  that the workload received the current complete secret.
1649
1651
 
1650
- {{CONSUMER_FACT:source:consumer-fact:access-api-keys#usageStatisticsLimitationMarkdown}}
1652
+ {{CONSUMER_FACT:source:consumer-fact:access-api-keys#usageStatisticsMarkdown}}
1651
1653
 
1652
- Do not diagnose an apparently unused key from those counters. Correlate the
1653
- workload's execution logs, secret-access logs, application audit trail and one
1654
- controlled request instead.
1654
+ Only requests the application ACCEPTED the key for are counted. A key sent with
1655
+ the wrong secret, past its expiry or after deactivation is refused and leaves no
1656
+ count, and neither does a request stopped before it reaches the application. So
1657
+ a key with no recent use points at the workload not sending it; failures on a
1658
+ key with recent use point at the request itself (its scope, roles or payload).
1659
+ Confirm either reading with one controlled request.
1655
1660
 
1656
1661
  The request must carry the complete opaque value in this maintained header
1657
1662
  shape:
@@ -2194,7 +2199,7 @@ The maintained registered-client lifecycle is:
2194
2199
 
2195
2200
  {{CONSUMER_FACT:source:consumer-fact:access-oauth-clients#lifecycleMarkdown}}
2196
2201
 
2197
- {{CONSUMER_FACT:source:consumer-fact:access-oauth-clients#currentUsageEvidenceMarkdown}}
2202
+ {{CONSUMER_FACT:source:consumer-fact:access-oauth-clients#usageEvidenceMarkdown}}
2198
2203
 
2199
2204
  ## Change the correct lifecycle layer
2200
2205
 
@@ -4936,7 +4941,8 @@ parser, transformation, index or detection rule accepted the event.
4936
4941
  | One HTTPS request containing one JSON object, with a static header or HMAC credential | Test direct delivery | This matches the current structured-JSON worker closely |
4937
4942
  | A provider-specific wrapper around the event | Use a narrow relay unless the exact endpoint accepts the native envelope | The relay owns the wrapper while preserving source identifiers |
4938
4943
  | Short-lived OAuth access tokens or managed identity | Use a provider-side relay | Token acquisition and refresh do not belong in a static credential field |
4939
- | A JSON array or provider batch protocol | Use a relay that batches deliberately | Current delivery is one event per request; configured batch fields are reserved |
4944
+ | A plain JSON array of events | Test direct delivery with \`batchSize\` above 1 | A batch of \`json_structured\` or \`ocsf\` events is sent as one JSON array |
4945
+ | A provider-specific batch protocol | Use a relay that batches deliberately | Batching sends a plain array or one line per event, never a provider wrapper |
4940
4946
  | A syslog, agent, queue or private-network input | Use an adapter or relay inside that boundary | The application sends outbound HTTPS webhooks, not those transports |
4941
4947
  | CEF, LEEF or OCSF ingestion | Test actual emitted samples with the receiver | A format name does not prove field mapping, escaping, severity or class compatibility |
4942
4948
 
@@ -4994,14 +5000,23 @@ application path you operate.
4994
5000
 
4995
5001
  {{CONSUMER_FACT:source:consumer-fact:organization-siem-export#deliveryValuesMarkdown}}
4996
5002
 
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.
5003
+ With the default \`batchSize\` of 1, each event is its own HTTP request. Set
5004
+ \`batchSize\` above 1 and this destination's events wait, then travel together:
5005
+ a batch is sent as soon as \`batchSize\` events are waiting, or when the oldest has
5006
+ waited \`batchWindowSeconds\`. A batch is one request body, framed the way its format
5007
+ frames several records:
5000
5008
 
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.
5009
+ | Format | Body of a batch |
5010
+ | --- | --- |
5011
+ | \`json_structured\`, \`ocsf\` | A JSON array of the events |
5012
+ | \`cef\`, \`leef\` | One line per event, separated by newlines |
5013
+
5014
+ A batch that holds one event is sent exactly like a single event, with no array and
5015
+ no trailing newline, so a receiver written for one event per request keeps working
5016
+ until you raise \`batchSize\`. If the receiver answers \`413 Payload Too Large\`, the
5017
+ batch is halved and sent again until the receiver accepts it; the events left out
5018
+ go in the next request. Size a receiver, load balancer or billing estimate on the
5019
+ batch size you choose.
5005
5020
 
5006
5021
  ## Limit what an exported event carries
5007
5022
 
@@ -5210,7 +5225,7 @@ Recommended application settings:
5210
5225
  | Destination | Relay HTTPS URL dedicated to the organization/environment |
5211
5226
  | Authentication | \`hmac_sha256\` or a dedicated \`api_key_header\` |
5212
5227
  | Format | \`json_structured\` |
5213
- | Delivery | One event per request; choose timeout/retry values below the relay’s bounded acknowledgement time |
5228
+ | Delivery | \`batchSize\` 1 (one event per request) unless the relay accepts a JSON array; choose timeout/retry values below the relay’s bounded acknowledgement time |
5214
5229
 
5215
5230
  If a controlled test proves direct HEC compatibility, configure:
5216
5231
 
@@ -5262,9 +5277,9 @@ this guide defines the application envelope that must be conserved.`,
5262
5277
  Microsoft Sentinel commonly receives custom data through the Azure Monitor Logs
5263
5278
  Ingestion API. That API requires a Data Collection Rule (DCR), a matching JSON
5264
5279
  schema and Microsoft Entra OAuth authorization. The application’s SIEM exporter
5265
- uses a static outbound credential and posts one JSON object per event; it does
5266
- not acquire or refresh Azure OAuth tokens and does not wrap events as the JSON
5267
- array expected by Logs Ingestion. **Use an Azure-hosted relay rather than pointing
5280
+ uses a static outbound credential and posts one JSON object per event, or a plain
5281
+ JSON array when \`batchSize\` is above 1; it does not acquire or refresh Azure OAuth
5282
+ tokens and does not shape events to the Data Collection Rule's schema. **Use an Azure-hosted relay rather than pointing
5268
5283
  the application directly at the Logs Ingestion API.**
5269
5284
 
5270
5285
  {{CONSUMER_FACT:source:consumer-fact:organization-siem-export#markdown}}
@@ -5458,8 +5473,8 @@ cause uncontrolled field growth.
5458
5473
  the document is absent.
5459
5474
  6. Return a temporary 503, restore the endpoint and prove dead-letter recovery
5460
5475
  without an unintended duplicate detection.
5461
- 7. Record receiver capacity for **one request per selected event**; application
5462
- batching fields are currently reserved and do not reduce that rate.
5476
+ 7. Record receiver capacity for the request rate you configure: **one request per
5477
+ selected event** at the default \`batchSize\` of 1, or one per batch above it.
5463
5478
 
5464
5479
  ## Elastic documentation to keep with the runbook
5465
5480
 
@@ -7285,7 +7300,7 @@ A concrete request and its response, using the members of your own organization:
7285
7300
 
7286
7301
  ~~~bash
7287
7302
  curl --fail-with-body \\
7288
- --url "$BASE_URL/api/v1/organizations/$ORGANIZATION_ID/organization-members?page=1&limit=20&sort=joinedAt:desc" \\
7303
+ --url "$BASE_URL/api/v1/organizations/$ORGANIZATION_ID/organization-members?page=1&limit=20&sort=createdAt:desc" \\
7289
7304
  --header "Authorization: $ORGANIZATION_API_KEY" \\
7290
7305
  --header "accept: application/json"
7291
7306
  ~~~
@@ -7391,7 +7406,7 @@ Now list the organization's members. This exercises the collection envelope you
7391
7406
 
7392
7407
  ~~~bash
7393
7408
  curl --fail-with-body \\
7394
- --url "$BASE_URL/api/v1/organizations/$ORGANIZATION_ID/organization-members?limit=5&sort=joinedAt:desc" \\
7409
+ --url "$BASE_URL/api/v1/organizations/$ORGANIZATION_ID/organization-members?limit=5&sort=createdAt:desc" \\
7395
7410
  --header "Authorization: $ORGANIZATION_API_KEY" \\
7396
7411
  --header "accept: application/json"
7397
7412
  ~~~
@@ -7456,7 +7471,7 @@ An empty \`data\` array on page 1 is a valid answer. Confirm the organization an
7456
7471
  page=1
7457
7472
  while : ; do
7458
7473
  response=$(curl --fail-with-body --silent \\
7459
- --url "$BASE_URL/api/v1/organizations/$ORGANIZATION_ID/organization-members?page=$page&limit=100&sort=joinedAt:asc" \\
7474
+ --url "$BASE_URL/api/v1/organizations/$ORGANIZATION_ID/organization-members?page=$page&limit=100&sort=createdAt:asc" \\
7460
7475
  --header "Authorization: $ORGANIZATION_API_KEY" \\
7461
7476
  --header "accept: application/json")
7462
7477
  echo "$response" | jq -c '.data[]' >> members.ndjson
@@ -7468,7 +7483,7 @@ done
7468
7483
 
7469
7484
  Three rules keep a scan correct:
7470
7485
 
7471
- 1. **Sort by a field the reference lists as sortable, or a stable timestamp** such as \`joinedAt:asc\` for members, when you walk more than one page. A sort field the operation does not accept is ignored, not refused, and the default order applies; sorting by a field that changes during the scan (a status, a name being edited) can move a record between pages and make you skip or repeat it.
7486
+ 1. **Sort by a field the reference lists as sortable, or a stable timestamp** such as \`createdAt:asc\` for members (when the membership was created), when you walk more than one page. A sort field the operation does not accept is ignored, not refused, and the default order applies; sorting by a field that changes during the scan (a status, a name being edited) can move a record between pages and make you skip or repeat it.
7472
7487
  2. **Stop on \`totalPages\`**, not on a short page. The last page is short by definition; an earlier page is short only when records were deleted while you scanned.
7473
7488
  3. **Process each record idempotently** and key your own records on \`_id\`. If the scan is interrupted, resume from the last page whose work you completed; repeating a page is safe when processing is idempotent, skipping one never is.
7474
7489
 
@@ -7478,7 +7493,7 @@ Search operations (\`…/search\`) add \`q\` for free text. Combine it with filt
7478
7493
 
7479
7494
  ~~~bash
7480
7495
  curl --fail-with-body \\
7481
- --url "$BASE_URL/api/v1/organizations/$ORGANIZATION_ID/organization-members/search?q=morgan&status=ACTIVE&sort=joinedAt:desc" \\
7496
+ --url "$BASE_URL/api/v1/organizations/$ORGANIZATION_ID/organization-members/search?q=morgan&status=ACTIVE&sort=createdAt:desc" \\
7482
7497
  --header "Authorization: $ORGANIZATION_API_KEY" \\
7483
7498
  --header "accept: application/json"
7484
7499
  ~~~