@epilot/sdk 2.20.74 → 2.20.76

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 (137) hide show
  1. package/definitions/environments.json +42 -2
  2. package/definitions/identity.json +8 -3
  3. package/dist/apis/access-token.cjs +6 -6
  4. package/dist/apis/access-token.js +1 -1
  5. package/dist/apis/address-suggestions.cjs +6 -6
  6. package/dist/apis/address-suggestions.js +1 -1
  7. package/dist/apis/address.cjs +6 -6
  8. package/dist/apis/address.js +1 -1
  9. package/dist/apis/ai-agents.cjs +6 -6
  10. package/dist/apis/ai-agents.js +1 -1
  11. package/dist/apis/app.cjs +6 -6
  12. package/dist/apis/app.js +1 -1
  13. package/dist/apis/audit-logs.cjs +6 -6
  14. package/dist/apis/audit-logs.js +1 -1
  15. package/dist/apis/automation.cjs +6 -6
  16. package/dist/apis/automation.js +1 -1
  17. package/dist/apis/billing.cjs +6 -6
  18. package/dist/apis/billing.js +1 -1
  19. package/dist/apis/blueprint-manifest.cjs +6 -6
  20. package/dist/apis/blueprint-manifest.js +1 -1
  21. package/dist/apis/calendar.cjs +6 -6
  22. package/dist/apis/calendar.js +1 -1
  23. package/dist/apis/chat.cjs +6 -6
  24. package/dist/apis/chat.js +1 -1
  25. package/dist/apis/configuration-hub.cjs +6 -6
  26. package/dist/apis/configuration-hub.js +1 -1
  27. package/dist/apis/consent.cjs +6 -6
  28. package/dist/apis/consent.js +1 -1
  29. package/dist/apis/customer-portal.cjs +6 -6
  30. package/dist/apis/customer-portal.js +1 -1
  31. package/dist/apis/dashboard.cjs +6 -6
  32. package/dist/apis/dashboard.js +1 -1
  33. package/dist/apis/data-governance.cjs +6 -6
  34. package/dist/apis/data-governance.js +1 -1
  35. package/dist/apis/deduplication.cjs +6 -6
  36. package/dist/apis/deduplication.js +1 -1
  37. package/dist/apis/design.cjs +6 -6
  38. package/dist/apis/design.js +1 -1
  39. package/dist/apis/document.cjs +6 -6
  40. package/dist/apis/document.js +1 -1
  41. package/dist/apis/email-settings.cjs +6 -6
  42. package/dist/apis/email-settings.js +1 -1
  43. package/dist/apis/email-template.cjs +6 -6
  44. package/dist/apis/email-template.js +1 -1
  45. package/dist/apis/entity-mapping.cjs +6 -6
  46. package/dist/apis/entity-mapping.js +1 -1
  47. package/dist/apis/entity.cjs +6 -6
  48. package/dist/apis/entity.js +1 -1
  49. package/dist/apis/environments.cjs +6 -6
  50. package/dist/apis/environments.d.cts +2 -2
  51. package/dist/apis/environments.d.ts +2 -2
  52. package/dist/apis/environments.js +1 -1
  53. package/dist/apis/event-catalog.cjs +6 -6
  54. package/dist/apis/event-catalog.js +1 -1
  55. package/dist/apis/external-values.cjs +6 -6
  56. package/dist/apis/external-values.js +1 -1
  57. package/dist/apis/file.cjs +6 -6
  58. package/dist/apis/file.js +1 -1
  59. package/dist/apis/iban.cjs +6 -6
  60. package/dist/apis/iban.js +1 -1
  61. package/dist/apis/identity.cjs +6 -6
  62. package/dist/apis/identity.d.cts +2 -2
  63. package/dist/apis/identity.d.ts +2 -2
  64. package/dist/apis/identity.js +1 -1
  65. package/dist/apis/integration-toolkit.cjs +6 -6
  66. package/dist/apis/integration-toolkit.js +1 -1
  67. package/dist/apis/journey.cjs +6 -6
  68. package/dist/apis/journey.js +1 -1
  69. package/dist/apis/kanban.cjs +6 -6
  70. package/dist/apis/kanban.js +1 -1
  71. package/dist/apis/message.cjs +6 -6
  72. package/dist/apis/message.js +1 -1
  73. package/dist/apis/metering.cjs +6 -6
  74. package/dist/apis/metering.js +1 -1
  75. package/dist/apis/notes.cjs +6 -6
  76. package/dist/apis/notes.js +1 -1
  77. package/dist/apis/notification.cjs +6 -6
  78. package/dist/apis/notification.js +1 -1
  79. package/dist/apis/organization.cjs +6 -6
  80. package/dist/apis/organization.js +1 -1
  81. package/dist/apis/partner-directory.cjs +6 -6
  82. package/dist/apis/partner-directory.js +1 -1
  83. package/dist/apis/permissions.cjs +6 -6
  84. package/dist/apis/permissions.js +1 -1
  85. package/dist/apis/phone-integration.cjs +6 -6
  86. package/dist/apis/phone-integration.js +1 -1
  87. package/dist/apis/pricing-tier.cjs +6 -6
  88. package/dist/apis/pricing-tier.js +1 -1
  89. package/dist/apis/pricing.cjs +6 -6
  90. package/dist/apis/pricing.js +1 -1
  91. package/dist/apis/purpose.cjs +6 -6
  92. package/dist/apis/purpose.js +1 -1
  93. package/dist/apis/query.cjs +6 -6
  94. package/dist/apis/query.js +1 -1
  95. package/dist/apis/sandbox.cjs +6 -6
  96. package/dist/apis/sandbox.js +1 -1
  97. package/dist/apis/sharing.cjs +6 -6
  98. package/dist/apis/sharing.js +1 -1
  99. package/dist/apis/snapshot.cjs +6 -6
  100. package/dist/apis/snapshot.js +1 -1
  101. package/dist/apis/submission.cjs +6 -6
  102. package/dist/apis/submission.js +1 -1
  103. package/dist/apis/target.cjs +6 -6
  104. package/dist/apis/target.js +1 -1
  105. package/dist/apis/targeting.cjs +6 -6
  106. package/dist/apis/targeting.js +1 -1
  107. package/dist/apis/template-variables.cjs +6 -6
  108. package/dist/apis/template-variables.js +1 -1
  109. package/dist/apis/user.cjs +6 -6
  110. package/dist/apis/user.js +1 -1
  111. package/dist/apis/validation-rules.cjs +6 -6
  112. package/dist/apis/validation-rules.js +1 -1
  113. package/dist/apis/webhooks.cjs +6 -6
  114. package/dist/apis/webhooks.js +1 -1
  115. package/dist/apis/workflow-definition.cjs +6 -6
  116. package/dist/apis/workflow-definition.js +1 -1
  117. package/dist/apis/workflow.cjs +6 -6
  118. package/dist/apis/workflow.js +1 -1
  119. package/dist/{chunk-5PG5IEQ7.cjs → chunk-H65UWQLJ.cjs} +2 -2
  120. package/dist/{chunk-WG7OKIQ3.js → chunk-OETNMHSD.js} +2 -2
  121. package/dist/environments-MKY6TF4Z.js +7 -0
  122. package/dist/environments-QII3AKWU.cjs +7 -0
  123. package/dist/{environments.d-qL1urwAq.d.cts → environments.d-BC2zAtBO.d.cts} +40 -28
  124. package/dist/{environments.d-qL1urwAq.d.ts → environments.d-BC2zAtBO.d.ts} +40 -28
  125. package/dist/{identity-F5XHYPXY.js → identity-OT3MIWHV.js} +1 -1
  126. package/dist/{identity-JDTGYAOV.cjs → identity-XCFH3MIW.cjs} +1 -1
  127. package/dist/{identity.d-CieYn1WL.d.ts → identity.d-DUcoy_-W.d.cts} +11 -1
  128. package/dist/{identity.d-CieYn1WL.d.cts → identity.d-DUcoy_-W.d.ts} +11 -1
  129. package/dist/index.cjs +8 -8
  130. package/dist/index.d.cts +2 -2
  131. package/dist/index.d.ts +2 -2
  132. package/dist/index.js +1 -1
  133. package/docs/environments.md +4 -3
  134. package/docs/identity.md +3 -3
  135. package/package.json +1 -1
  136. package/dist/environments-OYCH6VUD.js +0 -7
  137. package/dist/environments-S3O6ASTY.cjs +0 -7
@@ -0,0 +1,7 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-NJK5F5TF.cjs');
2
+
3
+ // src/docs/environments.json
4
+ var environments_default = '# Environments API\n\n- **Base URL:** `https://environments.sls.epilot.io`\n- **Full API Docs:** [https://docs.epilot.io/api/environments](https://docs.epilot.io/api/environments)\n\n## Usage\n\n```ts\nimport { epilot } from \'@epilot/sdk\'\n\nepilot.authorize(() => \'<token>\')\nconst { data } = await epilot.environments.listEnvironmentVariables(...)\n```\n\n### Tree-shakeable import\n\n```ts\nimport { getClient, authorize } from \'@epilot/sdk/environments\'\n\nconst environmentsClient = getClient()\nauthorize(environmentsClient, () => \'<token>\')\nconst { data } = await environmentsClient.listEnvironmentVariables(...)\n```\n\n## Operations\n\n**environments**\n- [`listEnvironmentVariables`](#listenvironmentvariables)\n- [`createEnvironmentVariable`](#createenvironmentvariable)\n- [`listEnvironmentGroups`](#listenvironmentgroups)\n- [`putEnvironmentGroup`](#putenvironmentgroup)\n- [`deleteEnvironmentGroup`](#deleteenvironmentgroup)\n- [`getEnvironmentVariable`](#getenvironmentvariable)\n- [`updateEnvironmentVariable`](#updateenvironmentvariable)\n- [`deleteEnvironmentVariable`](#deleteenvironmentvariable)\n\n**Schemas**\n- [`EnvironmentValueType`](#environmentvaluetype)\n- [`StringTranslations`](#stringtranslations)\n- [`MapEntry`](#mapentry)\n- [`MapValue`](#mapvalue)\n- [`JsonValue`](#jsonvalue)\n- [`LinkValue`](#linkvalue)\n- [`LinkFields`](#linkfields)\n- [`ListItemType`](#listitemtype)\n- [`ListOfText`](#listoftext)\n- [`ListOfString`](#listofstring)\n- [`ListOfSecretString`](#listofsecretstring)\n- [`ListOfNumber`](#listofnumber)\n- [`ListOfBoolean`](#listofboolean)\n- [`ListOfJson`](#listofjson)\n- [`ListOfLink`](#listoflink)\n- [`ListValue`](#listvalue)\n- [`EnvironmentValue`](#environmentvalue)\n- [`EnvironmentVariable`](#environmentvariable)\n- [`EnvironmentVariableListItem`](#environmentvariablelistitem)\n- [`EnvironmentVariableList`](#environmentvariablelist)\n- [`EnvironmentVariableCreateRequest`](#environmentvariablecreaterequest)\n- [`EnvironmentVariableUpdateRequest`](#environmentvariableupdaterequest)\n- [`EnvironmentGroup`](#environmentgroup)\n- [`EnvironmentGroupList`](#environmentgrouplist)\n- [`EnvironmentGroupUpsertRequest`](#environmentgroupupsertrequest)\n\n### `listEnvironmentVariables`\n\nList all environment variables for the organization. Returns metadata only, no secret values.\n\n`GET /v1/environments`\n\n```ts\nconst { data } = await client.listEnvironmentVariables()\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "items": [\n {\n "key": "string",\n "type": "String",\n "item_type": "String",\n "description": "string",\n "group": "string",\n "value": "string",\n "protected": true,\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `createEnvironmentVariable`\n\nCreate a new environment variable or secret for the organization. If `group` is provided and the group does not yet exist, it is created automatically.\n\n`POST /v1/environments`\n\n```ts\nconst { data } = await client.createEnvironmentVariable(\n null,\n {\n key: \'string\',\n type: \'String\',\n description: \'string\',\n group: \'string\',\n value: \'string\',\n protected: true\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "key": "string",\n "type": "String",\n "item_type": "String",\n "description": "string",\n "group": "string",\n "value": "string",\n "protected": true,\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `listEnvironmentGroups`\n\nList all environment groups for the organization.\n\n`GET /v1/environments/groups`\n\n```ts\nconst { data } = await client.listEnvironmentGroups()\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "items": [\n {\n "name": "string",\n "description": "string",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `putEnvironmentGroup`\n\nCreate or update an environment group by name. Acts as an upsert \u2014 creates the group if it does not exist.\n\n`PUT /v1/environments/groups/{name}`\n\n```ts\nconst { data } = await client.putEnvironmentGroup(\n {\n name: \'example\',\n },\n {\n description: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "name": "string",\n "description": "string",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `deleteEnvironmentGroup`\n\nDeletes a group. Variables assigned to this group become ungrouped.\n\n`DELETE /v1/environments/groups/{name}`\n\n```ts\nconst { data } = await client.deleteEnvironmentGroup({\n name: \'example\',\n})\n```\n\n---\n\n### `getEnvironmentVariable`\n\nGet an environment variable by key. Returns value for non-secret types, omitted for SecretString.\n\n`GET /v1/environments/{key}`\n\n```ts\nconst { data } = await client.getEnvironmentVariable({\n key: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "key": "string",\n "type": "String",\n "item_type": "String",\n "description": "string",\n "group": "string",\n "value": "string",\n "protected": true,\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `updateEnvironmentVariable`\n\nCreate or update an environment variable. Acts as an upsert \u2014 creates the variable if it does not exist. If `group` is provided and the group does not yet exist, it is created automatically.\n\n`PUT /v1/environments/{key}`\n\n```ts\nconst { data } = await client.updateEnvironmentVariable(\n {\n key: \'example\',\n },\n {\n type: \'String\',\n value: \'string\',\n description: \'string\',\n group: \'string\',\n protected: true\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "key": "string",\n "type": "String",\n "item_type": "String",\n "description": "string",\n "group": "string",\n "value": "string",\n "protected": true,\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `deleteEnvironmentVariable`\n\nDelete an environment variable by key.\n\n`DELETE /v1/environments/{key}`\n\n```ts\nconst { data } = await client.deleteEnvironmentVariable({\n key: \'example\',\n})\n```\n\n---\n\n## Schemas\n\n### `EnvironmentValueType`\n\nThe structure a variable\'s value holds. `SecretString` is encrypted at rest and\nits value is never returned. Every other type\nmay be served to browser-facing consumers. A `List` inherits this from its element\ntype: a `List`<SecretString>`` is never served.\n\n\n```ts\ntype EnvironmentValueType = "String" | "SecretString" | "Text" | "Number" | "Boolean" | "Map" | "JSON" | "Link" | "List"\n```\n\n### `StringTranslations`\n\nA string translated per language. Keys are language codes (e.g. `de`,\n`en-US`), matching the hyphen-only BCP-47 form epilot\'s i18n stack uses\neverywhere else: `^[a-z]{2,3}(-[A-Za-z0-9]+)*$`. The server enforces\nthat with LANGUAGE_KEY_PATTERN in src/core/value-types.ts \u2014 the two are\nnot otherwise lin\n\n```ts\ntype StringTranslations = Record<string, string>\n```\n\n### `MapEntry`\n\nOne entry of a Map. `key` is the token a journey submits; `value` is\nwhat the customer reads \u2014 either one string, or one string per\nlanguage. Every entry of a Map must agree on which of the two it uses.\n\n\n```ts\ntype MapEntry = {\n key: string\n value: string | Record<string, string>\n}\n```\n\n### `MapValue`\n\n```ts\ntype MapValue = {\n fallbackLanguage?: string\n options: Array<{\n key: string\n value: string | Record<string, string>\n }>\n}\n```\n\n### `JsonValue`\n\nArbitrary JSON object, e.g. a flat key/value map used by integrations for\nenum translation: {"Mr.": 1, "Ms. / Mrs.": 2}. Max 32 KB serialised.\n\n\n```ts\ntype JsonValue = Record<string, unknown>\n```\n\n### `LinkValue`\n\nOne URL with a label and description a customer reads. `label` and\n`description` are each either a plain string or one string per language;\nthe two fields decide that independently \u2014 a plain string means "the\nsame in every language". A translated field must carry the fallback\nlanguage.\n\nThe URL must\n\n```ts\ntype LinkValue = {\n url: string\n label: string | Record<string, string>\n description?: string | Record<string, string>\n fallbackLanguage?: string\n}\n```\n\n### `LinkFields`\n\nThe fields of a link, without a fallback language \u2014 the shape a `List`\nitem carries. Inside a list the fallback belongs to the wrapper, which\nowns the language tabs for every row.\n\nRestated rather than composed with `LinkValue`: `allOf` plus\n`additionalProperties: false` is rejected by most validato\n\n```ts\ntype LinkFields = {\n url: string\n label: string | Record<string, string>\n description?: string | Record<string, string>\n}\n```\n\n### `ListItemType`\n\nThe element type a `List` holds \u2014 every value type except the\ncontainers. `Map` is already a keyed collection and a list of lists has\nno consumer. A list is exactly as client-safe and exactly as secret as\nits element type: a list of `SecretString` is encrypted per item and its\nvalue is never returne\n\n```ts\ntype ListItemType = "String" | "SecretString" | "Text" | "Number" | "Boolean" | "JSON" | "Link"\n```\n\n### `ListOfText`\n\n```ts\ntype ListOfText = {\n itemType: "Text"\n items: string[]\n}\n```\n\n### `ListOfString`\n\n```ts\ntype ListOfString = {\n itemType: "String"\n items: string[]\n}\n```\n\n### `ListOfSecretString`\n\nWrite-only in effect: the items are encrypted per item at rest and the\nwhole value is omitted from every read response, exactly as a\n`SecretString` variable\'s value is. Read `item_type` to learn what a\nlist holds when its value is withheld.\n\n\n```ts\ntype ListOfSecretString = {\n itemType: "SecretString"\n items: string[]\n}\n```\n\n### `ListOfNumber`\n\n```ts\ntype ListOfNumber = {\n itemType: "Number"\n items: number[]\n}\n```\n\n### `ListOfBoolean`\n\n```ts\ntype ListOfBoolean = {\n itemType: "Boolean"\n items: boolean[]\n}\n```\n\n### `ListOfJson`\n\n```ts\ntype ListOfJson = {\n itemType: "JSON"\n items: Record<string, unknown>[]\n}\n```\n\n### `ListOfLink`\n\nA list of links. `fallbackLanguage` applies to every item\'s translated\n`label` and `description`; items may mix plain and translated fields\nfreely, since a plain string is a complete answer for any language.\n\n\n```ts\ntype ListOfLink = {\n itemType: "Link"\n fallbackLanguage?: string\n items: Array<{\n url: string\n label: string | Record<string, string>\n description?: string | Record<string, string>\n }>\n}\n```\n\n### `ListValue`\n\nAn ordered collection of one declared element type. Items round-trip in\nthe order written; nothing sorts them. Holds at most 100 items.\n\nThe whole value is limited to 32768 characters when serialised \u2014 the\nserver enforces this, and it is not expressible per-property here.\n\n\n```ts\ntype ListValue = {\n itemType: "Text"\n items: string[]\n} | {\n itemType: "Number"\n items: number[]\n} | {\n itemType: "Boolean"\n items: boolean[]\n} | {\n itemType: "JSON"\n items: Record<string, unknown>[]\n} | {\n itemType: "Link"\n fallbackLanguage?: string\n items: Array<{\n url: string\n label: string | Record<string, string>\n description?: string | Record<string, string>\n }>\n} | {\n itemType: "String"\n items: string[]\n} | {\n itemType: "SecretString"\n items: string[]\n}\n```\n\n### `EnvironmentValue`\n\nA variable\'s value. The JSON type corresponds to the variable\'s `type`:\n`String`, `SecretString` and `Text` are strings, `Number` is a number,\n`Boolean` is a boolean, and `Map`, `JSON`, `Link` and `List` are objects.\nNumbers are IEEE 754 doubles; integers above 2^53 may lose precision on\nround-trip.\n\n```ts\ntype EnvironmentValue = string | number | boolean | {\n fallbackLanguage?: string\n options: Array<{\n key: string\n value: string | Record<string, string>\n }>\n} | Record<string, unknown> | {\n url: string\n label: string | Record<string, string>\n description?: string | Record<string, string>\n fallbackLanguage?: string\n} | {\n itemType: "Text"\n items: string[]\n} | {\n itemType: "Number"\n items: number[]\n} | {\n itemType: "Boolean"\n items: boolean[]\n} | {\n itemType: "JSON"\n items: Record<string, unknown>[]\n} | {\n itemType: "Link"\n fallbackLanguage?: string\n items: Array<{\n url: string\n label: string | Record<string, string>\n description?: string | Record<string, string>\n }>\n} | {\n itemType: "String"\n items: string[]\n} | {\n itemType: "SecretString"\n items: string[]\n}\n```\n\n### `EnvironmentVariable`\n\n```ts\ntype EnvironmentVariable = {\n key: string\n type: "String" | "SecretString" | "Text" | "Number" | "Boolean" | "Map" | "JSON" | "Link" | "List"\n item_type?: "String" | "SecretString" | "Text" | "Number" | "Boolean" | "JSON" | "Link"\n description?: string\n group?: string\n value?: string | number | boolean | {\n fallbackLanguage?: string\n options: Array<{\n key: { ... }\n value: { ... }\n }>\n } | Record<string, unknown> | {\n url: string\n label: string | Record<string, string>\n description?: string | Record<string, string>\n fallbackLanguage?: string\n } | {\n itemType: "Text"\n items: string[]\n } | {\n itemType: "Number"\n items: number[]\n } | {\n itemType: "Boolean"\n items: boolean[]\n } | {\n itemType: "JSON"\n items: Record<string, unknown>[]\n } | {\n itemType: "Link"\n fallbackLanguage?: string\n items: Array<{\n url: { ... }\n label: { ... }\n description?: { ... }\n }>\n } | {\n itemType: "String"\n items: string[]\n } | {\n itemType: "SecretString"\n items: string[]\n }\n protected?: boolean\n created_at: string // date-time\n updated_at: string // date-time\n}\n```\n\n### `EnvironmentVariableListItem`\n\n```ts\ntype EnvironmentVariableListItem = {\n key: string\n type: "String" | "SecretString" | "Text" | "Number" | "Boolean" | "Map" | "JSON" | "Link" | "List"\n item_type?: "String" | "SecretString" | "Text" | "Number" | "Boolean" | "JSON" | "Link"\n description?: string\n group?: string\n value?: string | number | boolean | {\n fallbackLanguage?: string\n options: Array<{\n key: { ... }\n value: { ... }\n }>\n } | Record<string, unknown> | {\n url: string\n label: string | Record<string, string>\n description?: string | Record<string, string>\n fallbackLanguage?: string\n } | {\n itemType: "Text"\n items: string[]\n } | {\n itemType: "Number"\n items: number[]\n } | {\n itemType: "Boolean"\n items: boolean[]\n } | {\n itemType: "JSON"\n items: Record<string, unknown>[]\n } | {\n itemType: "Link"\n fallbackLanguage?: string\n items: Array<{\n url: { ... }\n label: { ... }\n description?: { ... }\n }>\n } | {\n itemType: "String"\n items: string[]\n } | {\n itemType: "SecretString"\n items: string[]\n }\n protected?: boolean\n created_at: string // date-time\n updated_at: string // date-time\n}\n```\n\n### `EnvironmentVariableList`\n\n```ts\ntype EnvironmentVariableList = {\n items: Array<{\n key: string\n type: "String" | "SecretString" | "Text" | "Number" | "Boolean" | "Map" | "JSON" | "Link" | "List"\n item_type?: "String" | "SecretString" | "Text" | "Number" | "Boolean" | "JSON" | "Link"\n description?: string\n group?: string\n value?: string | number | boolean | {\n fallbackLanguage?: { ... }\n options: { ... }\n } | Record<string, unknown> | {\n url: { ... }\n label: { ... }\n description?: { ... }\n fallbackLanguage?: { ... }\n } | {\n itemType: { ... }\n items: { ... }\n } | {\n itemType: { ... }\n items: { ... }\n } | {\n itemType: { ... }\n items: { ... }\n } | {\n itemType: { ... }\n items: { ... }\n } | {\n itemType: { ... }\n fallbackLanguage?: { ... }\n items: { ... }\n } | {\n itemType: { ... }\n items: { ... }\n } | {\n itemType: { ... }\n items: { ... }\n }\n protected?: boolean\n created_at: string // date-time\n updated_at: string // date-time\n }>\n}\n```\n\n### `EnvironmentVariableCreateRequest`\n\n```ts\ntype EnvironmentVariableCreateRequest = {\n key: string\n type: "String" | "SecretString" | "Text" | "Number" | "Boolean" | "Map" | "JSON" | "Link" | "List"\n description?: string\n group?: string\n value?: string | number | boolean | {\n fallbackLanguage?: string\n options: Array<{\n key: { ... }\n value: { ... }\n }>\n } | Record<string, unknown> | {\n url: string\n label: string | Record<string, string>\n description?: string | Record<string, string>\n fallbackLanguage?: string\n } | {\n itemType: "Text"\n items: string[]\n } | {\n itemType: "Number"\n items: number[]\n } | {\n itemType: "Boolean"\n items: boolean[]\n } | {\n itemType: "JSON"\n items: Record<string, unknown>[]\n } | {\n itemType: "Link"\n fallbackLanguage?: string\n items: Array<{\n url: { ... }\n label: { ... }\n description?: { ... }\n }>\n } | {\n itemType: "String"\n items: string[]\n } | {\n itemType: "SecretString"\n items: string[]\n }\n protected?: boolean\n}\n```\n\n### `EnvironmentVariableUpdateRequest`\n\n```ts\ntype EnvironmentVariableUpdateRequest = {\n type?: "String" | "SecretString" | "Text" | "Number" | "Boolean" | "Map" | "JSON" | "Link" | "List"\n value?: string | number | boolean | {\n fallbackLanguage?: string\n options: Array<{\n key: { ... }\n value: { ... }\n }>\n } | Record<string, unknown> | {\n url: string\n label: string | Record<string, string>\n description?: string | Record<string, string>\n fallbackLanguage?: string\n } | {\n itemType: "Text"\n items: string[]\n } | {\n itemType: "Number"\n items: number[]\n } | {\n itemType: "Boolean"\n items: boolean[]\n } | {\n itemType: "JSON"\n items: Record<string, unknown>[]\n } | {\n itemType: "Link"\n fallbackLanguage?: string\n items: Array<{\n url: { ... }\n label: { ... }\n description?: { ... }\n }>\n } | {\n itemType: "String"\n items: string[]\n } | {\n itemType: "SecretString"\n items: string[]\n }\n description?: string\n group?: string\n protected?: boolean\n}\n```\n\n### `EnvironmentGroup`\n\n```ts\ntype EnvironmentGroup = {\n name: string\n description?: string\n created_at: string // date-time\n updated_at: string // date-time\n}\n```\n\n### `EnvironmentGroupList`\n\n```ts\ntype EnvironmentGroupList = {\n items: Array<{\n name: string\n description?: string\n created_at: string // date-time\n updated_at: string // date-time\n }>\n}\n```\n\n### `EnvironmentGroupUpsertRequest`\n\n```ts\ntype EnvironmentGroupUpsertRequest = {\n description?: string\n}\n```\n';
5
+
6
+
7
+ exports.default = environments_default;
@@ -45,9 +45,13 @@ declare namespace Components {
45
45
  * same in every language". A translated field must carry the fallback
46
46
  * language.
47
47
  *
48
- * The URL must be absolute and `http`/`https` only. This value is served
49
- * to browser-facing consumers, so `javascript:` and `data:` URLs are
50
- * rejected at write time.
48
+ * The URL must be absolute and use `http`, `https`, `mailto` or `tel`.
49
+ * `mailto:` needs at least one address (`name@domain`) and may carry
50
+ * `?subject=…`; `tel:` needs a phone number (digits, an optional leading
51
+ * `+`, spaces, `-`, `.`, `(`, `)`) and may carry `;ext=…`. The checks are
52
+ * deliberately light. This value is served to browser-facing consumers,
53
+ * so every other scheme — `javascript:` and `data:` included — is rejected
54
+ * at write time.
51
55
  *
52
56
  * Written flat rather than composed from a shared field set: `allOf` plus
53
57
  * `additionalProperties: false` is rejected by most validators, because
@@ -72,10 +76,9 @@ declare namespace Components {
72
76
  ListValue;
73
77
  /**
74
78
  * The structure a variable's value holds. `SecretString` is encrypted at rest and
75
- * its value is never returned. `Text`, `Number`, `Boolean`, `Map`, `JSON` and `Link`
76
- * may be served to browser-facing consumers; `String` and `SecretString` may not. A
77
- * `List` inherits this from its element type: a `List` is served only when its
78
- * `itemType` is itself client-safe, so a `List<String>` or `List<SecretString>` is not.
79
+ * its value is never returned. Every other type
80
+ * may be served to browser-facing consumers. A `List` inherits this from its element
81
+ * type: a `List<SecretString>` is never served.
79
82
  *
80
83
  */
81
84
  export type EnvironmentValueType = "String" | "SecretString" | "Text" | "Number" | "Boolean" | "Map" | "JSON" | "Link" | "List";
@@ -83,10 +86,9 @@ declare namespace Components {
83
86
  key: string; // ^[a-z0-9][a-z0-9_.\-]{0,127}$
84
87
  type: /**
85
88
  * The structure a variable's value holds. `SecretString` is encrypted at rest and
86
- * its value is never returned. `Text`, `Number`, `Boolean`, `Map`, `JSON` and `Link`
87
- * may be served to browser-facing consumers; `String` and `SecretString` may not. A
88
- * `List` inherits this from its element type: a `List` is served only when its
89
- * `itemType` is itself client-safe, so a `List<String>` or `List<SecretString>` is not.
89
+ * its value is never returned. Every other type
90
+ * may be served to browser-facing consumers. A `List` inherits this from its element
91
+ * type: a `List<SecretString>` is never served.
90
92
  *
91
93
  */
92
94
  EnvironmentValueType;
@@ -129,9 +131,13 @@ declare namespace Components {
129
131
  * same in every language". A translated field must carry the fallback
130
132
  * language.
131
133
  *
132
- * The URL must be absolute and `http`/`https` only. This value is served
133
- * to browser-facing consumers, so `javascript:` and `data:` URLs are
134
- * rejected at write time.
134
+ * The URL must be absolute and use `http`, `https`, `mailto` or `tel`.
135
+ * `mailto:` needs at least one address (`name@domain`) and may carry
136
+ * `?subject=…`; `tel:` needs a phone number (digits, an optional leading
137
+ * `+`, spaces, `-`, `.`, `(`, `)`) and may carry `;ext=…`. The checks are
138
+ * deliberately light. This value is served to browser-facing consumers,
139
+ * so every other scheme — `javascript:` and `data:` included — is rejected
140
+ * at write time.
135
141
  *
136
142
  * Written flat rather than composed from a shared field set: `allOf` plus
137
143
  * `additionalProperties: false` is rejected by most validators, because
@@ -165,10 +171,9 @@ declare namespace Components {
165
171
  key: string; // ^[a-z0-9][a-z0-9_.\-]{0,127}$
166
172
  type: /**
167
173
  * The structure a variable's value holds. `SecretString` is encrypted at rest and
168
- * its value is never returned. `Text`, `Number`, `Boolean`, `Map`, `JSON` and `Link`
169
- * may be served to browser-facing consumers; `String` and `SecretString` may not. A
170
- * `List` inherits this from its element type: a `List` is served only when its
171
- * `itemType` is itself client-safe, so a `List<String>` or `List<SecretString>` is not.
174
+ * its value is never returned. Every other type
175
+ * may be served to browser-facing consumers. A `List` inherits this from its element
176
+ * type: a `List<SecretString>` is never served.
172
177
  *
173
178
  */
174
179
  EnvironmentValueType;
@@ -195,10 +200,9 @@ declare namespace Components {
195
200
  key: string;
196
201
  type: /**
197
202
  * The structure a variable's value holds. `SecretString` is encrypted at rest and
198
- * its value is never returned. `Text`, `Number`, `Boolean`, `Map`, `JSON` and `Link`
199
- * may be served to browser-facing consumers; `String` and `SecretString` may not. A
200
- * `List` inherits this from its element type: a `List` is served only when its
201
- * `itemType` is itself client-safe, so a `List<String>` or `List<SecretString>` is not.
203
+ * its value is never returned. Every other type
204
+ * may be served to browser-facing consumers. A `List` inherits this from its element
205
+ * type: a `List<SecretString>` is never served.
202
206
  *
203
207
  */
204
208
  EnvironmentValueType;
@@ -241,9 +245,13 @@ declare namespace Components {
241
245
  * same in every language". A translated field must carry the fallback
242
246
  * language.
243
247
  *
244
- * The URL must be absolute and `http`/`https` only. This value is served
245
- * to browser-facing consumers, so `javascript:` and `data:` URLs are
246
- * rejected at write time.
248
+ * The URL must be absolute and use `http`, `https`, `mailto` or `tel`.
249
+ * `mailto:` needs at least one address (`name@domain`) and may carry
250
+ * `?subject=…`; `tel:` needs a phone number (digits, an optional leading
251
+ * `+`, spaces, `-`, `.`, `(`, `)`) and may carry `;ext=…`. The checks are
252
+ * deliberately light. This value is served to browser-facing consumers,
253
+ * so every other scheme — `javascript:` and `data:` included — is rejected
254
+ * at write time.
247
255
  *
248
256
  * Written flat rather than composed from a shared field set: `allOf` plus
249
257
  * `additionalProperties: false` is rejected by most validators, because
@@ -345,9 +353,13 @@ declare namespace Components {
345
353
  * same in every language". A translated field must carry the fallback
346
354
  * language.
347
355
  *
348
- * The URL must be absolute and `http`/`https` only. This value is served
349
- * to browser-facing consumers, so `javascript:` and `data:` URLs are
350
- * rejected at write time.
356
+ * The URL must be absolute and use `http`, `https`, `mailto` or `tel`.
357
+ * `mailto:` needs at least one address (`name@domain`) and may carry
358
+ * `?subject=…`; `tel:` needs a phone number (digits, an optional leading
359
+ * `+`, spaces, `-`, `.`, `(`, `)`) and may carry `;ext=…`. The checks are
360
+ * deliberately light. This value is served to browser-facing consumers,
361
+ * so every other scheme — `javascript:` and `data:` included — is rejected
362
+ * at write time.
351
363
  *
352
364
  * Written flat rather than composed from a shared field set: `allOf` plus
353
365
  * `additionalProperties: false` is rejected by most validators, because
@@ -45,9 +45,13 @@ declare namespace Components {
45
45
  * same in every language". A translated field must carry the fallback
46
46
  * language.
47
47
  *
48
- * The URL must be absolute and `http`/`https` only. This value is served
49
- * to browser-facing consumers, so `javascript:` and `data:` URLs are
50
- * rejected at write time.
48
+ * The URL must be absolute and use `http`, `https`, `mailto` or `tel`.
49
+ * `mailto:` needs at least one address (`name@domain`) and may carry
50
+ * `?subject=…`; `tel:` needs a phone number (digits, an optional leading
51
+ * `+`, spaces, `-`, `.`, `(`, `)`) and may carry `;ext=…`. The checks are
52
+ * deliberately light. This value is served to browser-facing consumers,
53
+ * so every other scheme — `javascript:` and `data:` included — is rejected
54
+ * at write time.
51
55
  *
52
56
  * Written flat rather than composed from a shared field set: `allOf` plus
53
57
  * `additionalProperties: false` is rejected by most validators, because
@@ -72,10 +76,9 @@ declare namespace Components {
72
76
  ListValue;
73
77
  /**
74
78
  * The structure a variable's value holds. `SecretString` is encrypted at rest and
75
- * its value is never returned. `Text`, `Number`, `Boolean`, `Map`, `JSON` and `Link`
76
- * may be served to browser-facing consumers; `String` and `SecretString` may not. A
77
- * `List` inherits this from its element type: a `List` is served only when its
78
- * `itemType` is itself client-safe, so a `List<String>` or `List<SecretString>` is not.
79
+ * its value is never returned. Every other type
80
+ * may be served to browser-facing consumers. A `List` inherits this from its element
81
+ * type: a `List<SecretString>` is never served.
79
82
  *
80
83
  */
81
84
  export type EnvironmentValueType = "String" | "SecretString" | "Text" | "Number" | "Boolean" | "Map" | "JSON" | "Link" | "List";
@@ -83,10 +86,9 @@ declare namespace Components {
83
86
  key: string; // ^[a-z0-9][a-z0-9_.\-]{0,127}$
84
87
  type: /**
85
88
  * The structure a variable's value holds. `SecretString` is encrypted at rest and
86
- * its value is never returned. `Text`, `Number`, `Boolean`, `Map`, `JSON` and `Link`
87
- * may be served to browser-facing consumers; `String` and `SecretString` may not. A
88
- * `List` inherits this from its element type: a `List` is served only when its
89
- * `itemType` is itself client-safe, so a `List<String>` or `List<SecretString>` is not.
89
+ * its value is never returned. Every other type
90
+ * may be served to browser-facing consumers. A `List` inherits this from its element
91
+ * type: a `List<SecretString>` is never served.
90
92
  *
91
93
  */
92
94
  EnvironmentValueType;
@@ -129,9 +131,13 @@ declare namespace Components {
129
131
  * same in every language". A translated field must carry the fallback
130
132
  * language.
131
133
  *
132
- * The URL must be absolute and `http`/`https` only. This value is served
133
- * to browser-facing consumers, so `javascript:` and `data:` URLs are
134
- * rejected at write time.
134
+ * The URL must be absolute and use `http`, `https`, `mailto` or `tel`.
135
+ * `mailto:` needs at least one address (`name@domain`) and may carry
136
+ * `?subject=…`; `tel:` needs a phone number (digits, an optional leading
137
+ * `+`, spaces, `-`, `.`, `(`, `)`) and may carry `;ext=…`. The checks are
138
+ * deliberately light. This value is served to browser-facing consumers,
139
+ * so every other scheme — `javascript:` and `data:` included — is rejected
140
+ * at write time.
135
141
  *
136
142
  * Written flat rather than composed from a shared field set: `allOf` plus
137
143
  * `additionalProperties: false` is rejected by most validators, because
@@ -165,10 +171,9 @@ declare namespace Components {
165
171
  key: string; // ^[a-z0-9][a-z0-9_.\-]{0,127}$
166
172
  type: /**
167
173
  * The structure a variable's value holds. `SecretString` is encrypted at rest and
168
- * its value is never returned. `Text`, `Number`, `Boolean`, `Map`, `JSON` and `Link`
169
- * may be served to browser-facing consumers; `String` and `SecretString` may not. A
170
- * `List` inherits this from its element type: a `List` is served only when its
171
- * `itemType` is itself client-safe, so a `List<String>` or `List<SecretString>` is not.
174
+ * its value is never returned. Every other type
175
+ * may be served to browser-facing consumers. A `List` inherits this from its element
176
+ * type: a `List<SecretString>` is never served.
172
177
  *
173
178
  */
174
179
  EnvironmentValueType;
@@ -195,10 +200,9 @@ declare namespace Components {
195
200
  key: string;
196
201
  type: /**
197
202
  * The structure a variable's value holds. `SecretString` is encrypted at rest and
198
- * its value is never returned. `Text`, `Number`, `Boolean`, `Map`, `JSON` and `Link`
199
- * may be served to browser-facing consumers; `String` and `SecretString` may not. A
200
- * `List` inherits this from its element type: a `List` is served only when its
201
- * `itemType` is itself client-safe, so a `List<String>` or `List<SecretString>` is not.
203
+ * its value is never returned. Every other type
204
+ * may be served to browser-facing consumers. A `List` inherits this from its element
205
+ * type: a `List<SecretString>` is never served.
202
206
  *
203
207
  */
204
208
  EnvironmentValueType;
@@ -241,9 +245,13 @@ declare namespace Components {
241
245
  * same in every language". A translated field must carry the fallback
242
246
  * language.
243
247
  *
244
- * The URL must be absolute and `http`/`https` only. This value is served
245
- * to browser-facing consumers, so `javascript:` and `data:` URLs are
246
- * rejected at write time.
248
+ * The URL must be absolute and use `http`, `https`, `mailto` or `tel`.
249
+ * `mailto:` needs at least one address (`name@domain`) and may carry
250
+ * `?subject=…`; `tel:` needs a phone number (digits, an optional leading
251
+ * `+`, spaces, `-`, `.`, `(`, `)`) and may carry `;ext=…`. The checks are
252
+ * deliberately light. This value is served to browser-facing consumers,
253
+ * so every other scheme — `javascript:` and `data:` included — is rejected
254
+ * at write time.
247
255
  *
248
256
  * Written flat rather than composed from a shared field set: `allOf` plus
249
257
  * `additionalProperties: false` is rejected by most validators, because
@@ -345,9 +353,13 @@ declare namespace Components {
345
353
  * same in every language". A translated field must carry the fallback
346
354
  * language.
347
355
  *
348
- * The URL must be absolute and `http`/`https` only. This value is served
349
- * to browser-facing consumers, so `javascript:` and `data:` URLs are
350
- * rejected at write time.
356
+ * The URL must be absolute and use `http`, `https`, `mailto` or `tel`.
357
+ * `mailto:` needs at least one address (`name@domain`) and may carry
358
+ * `?subject=…`; `tel:` needs a phone number (digits, an optional leading
359
+ * `+`, spaces, `-`, `.`, `(`, `)`) and may carry `;ext=…`. The checks are
360
+ * deliberately light. This value is served to browser-facing consumers,
361
+ * so every other scheme — `javascript:` and `data:` included — is rejected
362
+ * at write time.
351
363
  *
352
364
  * Written flat rather than composed from a shared field set: `allOf` plus
353
365
  * `additionalProperties: false` is rejected by most validators, because
@@ -1,7 +1,7 @@
1
1
  import "./chunk-YPSWSI3M.js";
2
2
 
3
3
  // src/docs/identity.json
4
- var identity_default = '# Identity API\n\n- **Base URL:** `https://id.epilot.cloud`\n- **Full API Docs:** [https://docs.epilot.io/api/identity](https://docs.epilot.io/api/identity)\n\n## Usage\n\n```ts\nimport { epilot } from \'@epilot/sdk\'\n\nepilot.authorize(() => \'<token>\')\nconst { data } = await epilot.identity.listClients(...)\n```\n\n### Tree-shakeable import\n\n```ts\nimport { getClient, authorize } from \'@epilot/sdk/identity\'\n\nconst identityClient = getClient()\nauthorize(identityClient, () => \'<token>\')\nconst { data } = await identityClient.listClients(...)\n```\n\n## Operations\n\n**Operator Clients**\n- [`listClients`](#listclients)\n- [`createOidcClient`](#createoidcclient)\n- [`getOidcClient`](#getoidcclient)\n- [`updateClient`](#updateclient)\n- [`retireClient`](#retireclient)\n- [`activateClient`](#activateclient)\n- [`suspendClient`](#suspendclient)\n- [`rotateClientSecret`](#rotateclientsecret)\n\n**Operator Organizations**\n- [`listClientOrganizations`](#listclientorganizations)\n- [`enableClientOrganization`](#enableclientorganization)\n- [`getClientOrganization`](#getclientorganization)\n- [`updateClientOrganization`](#updateclientorganization)\n- [`revokeClientOrganization`](#revokeclientorganization)\n- [`suspendClientOrganization`](#suspendclientorganization)\n- [`activateClientOrganization`](#activateclientorganization)\n- [`getUserSubject`](#getusersubject)\n\n**Session**\n- [`createIdentitySession`](#createidentitysession)\n- [`deleteIdentitySession`](#deleteidentitysession)\n\n**Launch**\n- [`launchClient`](#launchclient)\n\n**Schemas**\n- [`Error`](#error)\n- [`PartnerClientId`](#partnerclientid)\n- [`OrgId`](#orgid)\n- [`UserId`](#userid)\n- [`Environment`](#environment)\n- [`PartnerClientStatus`](#partnerclientstatus)\n- [`Scope`](#scope)\n- [`HttpsUri`](#httpsuri)\n- [`PartnerClientCreate`](#partnerclientcreate)\n- [`PartnerClientUpdate`](#partnerclientupdate)\n- [`PartnerClient`](#partnerclient)\n- [`PartnerClientWithSecret`](#partnerclientwithsecret)\n- [`PartnerClientList`](#partnerclientlist)\n- [`StatusChangeRequest`](#statuschangerequest)\n- [`RotateSecretRequest`](#rotatesecretrequest)\n- [`AuthorizationPolicyInput`](#authorizationpolicyinput)\n- [`AuthorizationPolicy`](#authorizationpolicy)\n- [`OrgEnablementStatus`](#orgenablementstatus)\n- [`OrgEnablementCreate`](#orgenablementcreate)\n- [`OrgEnablementUpdate`](#orgenablementupdate)\n- [`OrgEnablement`](#orgenablement)\n- [`OrgEnablementList`](#orgenablementlist)\n- [`IdentitySession`](#identitysession)\n- [`UserSubject`](#usersubject)\n\n### `listClients`\n\nList registered partner clients. The client secret is never returned.\n\n`GET /v1/identity/operator/clients`\n\n```ts\nconst { data } = await client.listClients({\n partner_key: \'example\',\n status: \'example\',\n size: 1,\n cursor: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "results": [\n {\n "client_id": "bf-prod-x7k2",\n "partner_key": "string",\n "display_name": "string",\n "description": "string",\n "environment": "dev",\n "redirect_uris": ["https://partner.example.com/auth/callback"],\n "sector_identifier_uri": "https://partner.example.com/auth/callback",\n "initiate_login_uri": "https://partner.example.com/auth/callback",\n "launch_target_prefixes": ["string"],\n "token_endpoint_auth_method": "client_secret_basic",\n "grant_types": ["authorization_code"],\n "scopes_allowed": ["openid"],\n "status": "draft",\n "status_reason": "string",\n "config_version": 1,\n "secret_rotated_at": "1970-01-01T00:00:00.000Z",\n "previous_secret_expires_at": "1970-01-01T00:00:00.000Z",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n }\n ],\n "next_cursor": "string"\n}\n```\n\n</details>\n\n---\n\n### `createOidcClient`\n\nCreate a partner client in `draft` status. The client secret is returned exactly once in this\nresponse and can never be read again; use `rotateClientSecret` to obtain a new one.\n\n`POST /v1/identity/operator/clients`\n\n```ts\nconst { data } = await client.createOidcClient(\n null,\n {\n partner_key: \'babelforce\',\n display_name: \'Babelforce\',\n description: \'string\',\n environment: \'dev\',\n redirect_uris: [\'https://partner.example.com/auth/callback\'],\n sector_identifier_uri: \'https://partner.example.com/auth/callback\',\n initiate_login_uri: \'https://partner.example.com/auth/callback\',\n launch_target_prefixes: [\'string\'],\n scopes_allowed: [\'openid\']\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "partner_key": "string",\n "display_name": "string",\n "description": "string",\n "environment": "dev",\n "redirect_uris": ["https://partner.example.com/auth/callback"],\n "sector_identifier_uri": "https://partner.example.com/auth/callback",\n "initiate_login_uri": "https://partner.example.com/auth/callback",\n "launch_target_prefixes": ["string"],\n "token_endpoint_auth_method": "client_secret_basic",\n "grant_types": ["authorization_code"],\n "scopes_allowed": ["openid"],\n "status": "draft",\n "status_reason": "string",\n "config_version": 1,\n "secret_rotated_at": "1970-01-01T00:00:00.000Z",\n "previous_secret_expires_at": "1970-01-01T00:00:00.000Z",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string",\n "client_secret": "string"\n}\n```\n\n</details>\n\n---\n\n### `getOidcClient`\n\nRead a partner client. The client secret is never returned.\n\n`GET /v1/identity/operator/clients/{client_id}`\n\n```ts\nconst { data } = await client.getOidcClient({\n client_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "partner_key": "string",\n "display_name": "string",\n "description": "string",\n "environment": "dev",\n "redirect_uris": ["https://partner.example.com/auth/callback"],\n "sector_identifier_uri": "https://partner.example.com/auth/callback",\n "initiate_login_uri": "https://partner.example.com/auth/callback",\n "launch_target_prefixes": ["string"],\n "token_endpoint_auth_method": "client_secret_basic",\n "grant_types": ["authorization_code"],\n "scopes_allowed": ["openid"],\n "status": "draft",\n "status_reason": "string",\n "config_version": 1,\n "secret_rotated_at": "1970-01-01T00:00:00.000Z",\n "previous_secret_expires_at": "1970-01-01T00:00:00.000Z",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `updateClient`\n\nReplace the mutable configuration of a client. `config_version` must equal the current\nversion (compare-and-swap); a mismatch is rejected with `409`.\n\n`PUT /v1/identity/operator/clients/{client_id}`\n\n```ts\nconst { data } = await client.updateClient(\n {\n client_id: \'example\',\n },\n {\n config_version: 1,\n allow_sector_change: false,\n display_name: \'string\',\n description: \'string\',\n redirect_uris: [\'https://partner.example.com/auth/callback\'],\n sector_identifier_uri: \'https://partner.example.com/auth/callback\',\n initiate_login_uri: \'https://partner.example.com/auth/callback\',\n launch_target_prefixes: [\'string\'],\n scopes_allowed: [\'openid\']\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "partner_key": "string",\n "display_name": "string",\n "description": "string",\n "environment": "dev",\n "redirect_uris": ["https://partner.example.com/auth/callback"],\n "sector_identifier_uri": "https://partner.example.com/auth/callback",\n "initiate_login_uri": "https://partner.example.com/auth/callback",\n "launch_target_prefixes": ["string"],\n "token_endpoint_auth_method": "client_secret_basic",\n "grant_types": ["authorization_code"],\n "scopes_allowed": ["openid"],\n "status": "draft",\n "status_reason": "string",\n "config_version": 1,\n "secret_rotated_at": "1970-01-01T00:00:00.000Z",\n "previous_secret_expires_at": "1970-01-01T00:00:00.000Z",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `retireClient`\n\nRetire a client. The record is kept as a tombstone, the `client_id` is never reused, every\norganization enablement is revoked and all provider-side artefacts are revoked.\n\n`DELETE /v1/identity/operator/clients/{client_id}`\n\n```ts\nconst { data } = await client.retireClient({\n client_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "partner_key": "string",\n "display_name": "string",\n "description": "string",\n "environment": "dev",\n "redirect_uris": ["https://partner.example.com/auth/callback"],\n "sector_identifier_uri": "https://partner.example.com/auth/callback",\n "initiate_login_uri": "https://partner.example.com/auth/callback",\n "launch_target_prefixes": ["string"],\n "token_endpoint_auth_method": "client_secret_basic",\n "grant_types": ["authorization_code"],\n "scopes_allowed": ["openid"],\n "status": "draft",\n "status_reason": "string",\n "config_version": 1,\n "secret_rotated_at": "1970-01-01T00:00:00.000Z",\n "previous_secret_expires_at": "1970-01-01T00:00:00.000Z",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `activateClient`\n\nActivate a `draft` or `suspended` client. Validates that every redirect URI is an absolute\nHTTPS URL without fragment, that `scopes_allowed` contains `openid`, and that the\nauthentication method is `c\n\n`POST /v1/identity/operator/clients/{client_id}:activate`\n\n```ts\nconst { data } = await client.activateClient({\n client_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "partner_key": "string",\n "display_name": "string",\n "description": "string",\n "environment": "dev",\n "redirect_uris": ["https://partner.example.com/auth/callback"],\n "sector_identifier_uri": "https://partner.example.com/auth/callback",\n "initiate_login_uri": "https://partner.example.com/auth/callback",\n "launch_target_prefixes": ["string"],\n "token_endpoint_auth_method": "client_secret_basic",\n "grant_types": ["authorization_code"],\n "scopes_allowed": ["openid"],\n "status": "draft",\n "status_reason": "string",\n "config_version": 1,\n "secret_rotated_at": "1970-01-01T00:00:00.000Z",\n "previous_secret_expires_at": "1970-01-01T00:00:00.000Z",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `suspendClient`\n\nImmediately block the client for every organization. Provider-side artefacts (codes, tokens,\ngrants) are revoked; the audit trail is kept. Reversible with `activateClient`.\n\n`POST /v1/identity/operator/clients/{client_id}:suspend`\n\n```ts\nconst { data } = await client.suspendClient(\n {\n client_id: \'example\',\n },\n {\n reason: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "partner_key": "string",\n "display_name": "string",\n "description": "string",\n "environment": "dev",\n "redirect_uris": ["https://partner.example.com/auth/callback"],\n "sector_identifier_uri": "https://partner.example.com/auth/callback",\n "initiate_login_uri": "https://partner.example.com/auth/callback",\n "launch_target_prefixes": ["string"],\n "token_endpoint_auth_method": "client_secret_basic",\n "grant_types": ["authorization_code"],\n "scopes_allowed": ["openid"],\n "status": "draft",\n "status_reason": "string",\n "config_version": 1,\n "secret_rotated_at": "1970-01-01T00:00:00.000Z",\n "previous_secret_expires_at": "1970-01-01T00:00:00.000Z",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `rotateClientSecret`\n\nIssue a new client secret. The new secret is returned exactly once. The previous secret\nkeeps working until `previous_secret_expires_at` unless `compromise_mode` is set, in which\ncase it stops working\n\n`POST /v1/identity/operator/clients/{client_id}:rotateSecret`\n\n```ts\nconst { data } = await client.rotateClientSecret(\n {\n client_id: \'example\',\n },\n {\n compromise_mode: false,\n migration_window_seconds: 86400\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "partner_key": "string",\n "display_name": "string",\n "description": "string",\n "environment": "dev",\n "redirect_uris": ["https://partner.example.com/auth/callback"],\n "sector_identifier_uri": "https://partner.example.com/auth/callback",\n "initiate_login_uri": "https://partner.example.com/auth/callback",\n "launch_target_prefixes": ["string"],\n "token_endpoint_auth_method": "client_secret_basic",\n "grant_types": ["authorization_code"],\n "scopes_allowed": ["openid"],\n "status": "draft",\n "status_reason": "string",\n "config_version": 1,\n "secret_rotated_at": "1970-01-01T00:00:00.000Z",\n "previous_secret_expires_at": "1970-01-01T00:00:00.000Z",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string",\n "client_secret": "string"\n}\n```\n\n</details>\n\n---\n\n### `listClientOrganizations`\n\nList the organizations enabled on a client, including suspended and revoked ones.\n\n`GET /v1/identity/operator/clients/{client_id}/organizations`\n\n```ts\nconst { data } = await client.listClientOrganizations({\n client_id: \'example\',\n status: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "results": [\n {\n "client_id": "bf-prod-x7k2",\n "org_id": "739224",\n "status": "active",\n "status_reason": "string",\n "authorization_policy": {\n "mode": "preauthorized",\n "population": "all_current_org_members",\n "allowed_scopes": ["openid"],\n "customer_approval_ref": "string",\n "approved_at": "1970-01-01T00:00:00.000Z",\n "version": 1,\n "mandatory_claims": ["org_id"],\n "recorded_by": "string",\n "recorded_at": "1970-01-01T00:00:00.000Z"\n },\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `enableClientOrganization`\n\nEnable an epilot organization on a client, recording the customer\'s authorization policy\n(version 1). `allowed_scopes` must contain `openid` and be a subset of the client\'s\n`scopes_allowed`.\n\n`POST /v1/identity/operator/clients/{client_id}/organizations`\n\n```ts\nconst { data } = await client.enableClientOrganization(\n {\n client_id: \'example\',\n },\n {\n org_id: \'739224\',\n authorization_policy: {\n mode: \'preauthorized\',\n population: \'all_current_org_members\',\n allowed_scopes: [\'openid\'],\n customer_approval_ref: \'string\',\n approved_at: \'1970-01-01T00:00:00.000Z\'\n }\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "org_id": "739224",\n "status": "active",\n "status_reason": "string",\n "authorization_policy": {\n "mode": "preauthorized",\n "population": "all_current_org_members",\n "allowed_scopes": ["openid"],\n "customer_approval_ref": "string",\n "approved_at": "1970-01-01T00:00:00.000Z",\n "version": 1,\n "mandatory_claims": ["org_id"],\n "recorded_by": "string",\n "recorded_at": "1970-01-01T00:00:00.000Z"\n },\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `getClientOrganization`\n\nRead one organization enablement.\n\n`GET /v1/identity/operator/clients/{client_id}/organizations/{org_id}`\n\n```ts\nconst { data } = await client.getClientOrganization({\n client_id: \'example\',\n org_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "org_id": "739224",\n "status": "active",\n "status_reason": "string",\n "authorization_policy": {\n "mode": "preauthorized",\n "population": "all_current_org_members",\n "allowed_scopes": ["openid"],\n "customer_approval_ref": "string",\n "approved_at": "1970-01-01T00:00:00.000Z",\n "version": 1,\n "mandatory_claims": ["org_id"],\n "recorded_by": "string",\n "recorded_at": "1970-01-01T00:00:00.000Z"\n },\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `updateClientOrganization`\n\nRecord a new version of the customer\'s authorization policy. `expected_policy_version` must\nequal the current version (compare-and-swap); a mismatch is rejected with `409`.\n\n`PUT /v1/identity/operator/clients/{client_id}/organizations/{org_id}`\n\n```ts\nconst { data } = await client.updateClientOrganization(\n {\n client_id: \'example\',\n org_id: \'example\',\n },\n {\n expected_policy_version: 1,\n authorization_policy: {\n mode: \'preauthorized\',\n population: \'all_current_org_members\',\n allowed_scopes: [\'openid\'],\n customer_approval_ref: \'string\',\n approved_at: \'1970-01-01T00:00:00.000Z\'\n }\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "org_id": "739224",\n "status": "active",\n "status_reason": "string",\n "authorization_policy": {\n "mode": "preauthorized",\n "population": "all_current_org_members",\n "allowed_scopes": ["openid"],\n "customer_approval_ref": "string",\n "approved_at": "1970-01-01T00:00:00.000Z",\n "version": 1,\n "mandatory_claims": ["org_id"],\n "recorded_by": "string",\n "recorded_at": "1970-01-01T00:00:00.000Z"\n },\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `revokeClientOrganization`\n\nRevoke an organization\'s enablement. The record is kept as an audited tombstone; future\nauthorizations for this organization fail with `access_denied` and provider-side artefacts\nbound to it are revok\n\n`DELETE /v1/identity/operator/clients/{client_id}/organizations/{org_id}`\n\n```ts\nconst { data } = await client.revokeClientOrganization(\n {\n client_id: \'example\',\n org_id: \'example\',\n },\n {\n reason: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "org_id": "739224",\n "status": "active",\n "status_reason": "string",\n "authorization_policy": {\n "mode": "preauthorized",\n "population": "all_current_org_members",\n "allowed_scopes": ["openid"],\n "customer_approval_ref": "string",\n "approved_at": "1970-01-01T00:00:00.000Z",\n "version": 1,\n "mandatory_claims": ["org_id"],\n "recorded_by": "string",\n "recorded_at": "1970-01-01T00:00:00.000Z"\n },\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `suspendClientOrganization`\n\nTemporarily block one organization on this client. Reversible with `activateClientOrganization`.\n\n`POST /v1/identity/operator/clients/{client_id}/organizations/{org_id}:suspend`\n\n```ts\nconst { data } = await client.suspendClientOrganization(\n {\n client_id: \'example\',\n org_id: \'example\',\n },\n {\n reason: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "org_id": "739224",\n "status": "active",\n "status_reason": "string",\n "authorization_policy": {\n "mode": "preauthorized",\n "population": "all_current_org_members",\n "allowed_scopes": ["openid"],\n "customer_approval_ref": "string",\n "approved_at": "1970-01-01T00:00:00.000Z",\n "version": 1,\n "mandatory_claims": ["org_id"],\n "recorded_by": "string",\n "recorded_at": "1970-01-01T00:00:00.000Z"\n },\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `activateClientOrganization`\n\nResume a suspended organization on this client. Revoked enablements cannot be re-activated; enabling the organization again (`POST \u2026/organizations`) replaces the revoked entry and continues its policy\n\n`POST /v1/identity/operator/clients/{client_id}/organizations/{org_id}:activate`\n\n```ts\nconst { data } = await client.activateClientOrganization({\n client_id: \'example\',\n org_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "org_id": "739224",\n "status": "active",\n "status_reason": "string",\n "authorization_policy": {\n "mode": "preauthorized",\n "population": "all_current_org_members",\n "allowed_scopes": ["openid"],\n "customer_approval_ref": "string",\n "approved_at": "1970-01-01T00:00:00.000Z",\n "version": 1,\n "mandatory_claims": ["org_id"],\n "recorded_by": "string",\n "recorded_at": "1970-01-01T00:00:00.000Z"\n },\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `getUserSubject`\n\nThe pairwise `sub` this client receives for one epilot user, so the partner can bind the person on its\nside **before** the first sign-in (for example a Babelforce agent provisioned through SCIM with\n`\n\n`GET /v1/identity/operator/clients/{client_id}/organizations/{org_id}/users/{user_id}:subject`\n\n```ts\nconst { data } = await client.getUserSubject({\n client_id: \'example\',\n org_id: \'example\',\n user_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "org_id": "739224",\n "user_id": "100321",\n "sub": "v1.dGhpcy1pcy1hLWR1bW15LXN1YmplY3QtdmFsdWUtMDAx",\n "key_version": "v1",\n "sector": "portal.epilot.cloud"\n}\n```\n\n</details>\n\n---\n\n### `createIdentitySession`\n\nCalled by the epilot portal through the portal-host proxy after every persisted 360 session.\nValidates the 360 bearer token itself and mirrors it into the `identity_session` cookie\n(`HttpOnly; Secure;\n\n`GET /v1/identity/session`\n\n```ts\nconst { data } = await client.createIdentitySession()\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "org_id": "739224",\n "user_id": "string",\n "expires_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `deleteIdentitySession`\n\nClears the `identity_session` cookie. Called by the portal on logout.\n\n`DELETE /v1/identity/session`\n\n```ts\nconst { data } = await client.deleteIdentitySession()\n```\n\n---\n\n### `launchClient`\n\nOne validated place for partner start links (manager UI, hosted apps). Redirects the browser to the\nclient\'s registered `initiate_login_uri` with `iss` set to this issuer and, when given, the deep lin\n\n`GET /v1/identity/launch/{client_id}`\n\n```ts\nconst { data } = await client.launchClient({\n client_id: \'example\',\n target: \'example\',\n extra: \'example\',\n})\n```\n\n---\n\n## Schemas\n\n### `Error`\n\n```ts\ntype Error = {\n status: number\n error: string\n details?: Record<string, unknown>[]\n}\n```\n\n### `PartnerClientId`\n\nOpaque client identifier, unique within the issuer, never reused\n\n```ts\ntype PartnerClientId = string\n```\n\n### `OrgId`\n\nepilot organization id, an opaque case-sensitive string\n\n```ts\ntype OrgId = string\n```\n\n### `UserId`\n\nepilot user id (`custom:ivy_user_id` in a 360 token). A user belongs to exactly one organization.\n\n```ts\ntype UserId = string\n```\n\n### `Environment`\n\nPartner-side environment this client belongs to\n\n```ts\ntype Environment = "dev" | "staging" | "production"\n```\n\n### `PartnerClientStatus`\n\n```ts\ntype PartnerClientStatus = "draft" | "active" | "suspended" | "retired"\n```\n\n### `Scope`\n\n```ts\ntype Scope = "openid" | "email" | "profile"\n```\n\n### `HttpsUri`\n\nAbsolute HTTPS URL without fragment\n\n```ts\ntype HttpsUri = string // uri\n```\n\n### `PartnerClientCreate`\n\n```ts\ntype PartnerClientCreate = {\n partner_key: string\n display_name: string\n description?: string\n environment: "dev" | "staging" | "production"\n redirect_uris: string // uri[]\n sector_identifier_uri?: string // uri\n initiate_login_uri?: string // uri\n launch_target_prefixes?: string[]\n scopes_allowed?: "openid" | "email" | "profile"[]\n}\n```\n\n### `PartnerClientUpdate`\n\n```ts\ntype PartnerClientUpdate = {\n config_version: number\n allow_sector_change?: boolean\n display_name: string\n description?: string\n redirect_uris: string // uri[]\n sector_identifier_uri?: string // uri\n initiate_login_uri?: string // uri\n launch_target_prefixes?: string[]\n scopes_allowed: "openid" | "email" | "profile"[]\n}\n```\n\n### `PartnerClient`\n\n```ts\ntype PartnerClient = {\n client_id: string\n partner_key: string\n display_name: string\n description?: string\n environment: "dev" | "staging" | "production"\n redirect_uris: string // uri[]\n sector_identifier_uri?: string // uri\n initiate_login_uri?: string // uri\n launch_target_prefixes?: string[]\n token_endpoint_auth_method: "client_secret_basic"\n grant_types: "authorization_code"[]\n scopes_allowed: "openid" | "email" | "profile"[]\n status: "draft" | "active" | "suspended" | "retired"\n status_reason?: string\n config_version: number\n secret_rotated_at?: string // date-time\n previous_secret_expires_at?: string // date-time\n created_at: string // date-time\n updated_at: string // date-time\n created_by?: string\n updated_by?: string\n}\n```\n\n### `PartnerClientWithSecret`\n\n```ts\ntype PartnerClientWithSecret = {\n client_id: string\n partner_key: string\n display_name: string\n description?: string\n environment: "dev" | "staging" | "production"\n redirect_uris: string // uri[]\n sector_identifier_uri?: string // uri\n initiate_login_uri?: string // uri\n launch_target_prefixes?: string[]\n token_endpoint_auth_method: "client_secret_basic"\n grant_types: "authorization_code"[]\n scopes_allowed: "openid" | "email" | "profile"[]\n status: "draft" | "active" | "suspended" | "retired"\n status_reason?: string\n config_version: number\n secret_rotated_at?: string // date-time\n previous_secret_expires_at?: string // date-time\n created_at: string // date-time\n updated_at: string // date-time\n created_by?: string\n updated_by?: string\n client_secret: string\n}\n```\n\n### `PartnerClientList`\n\n```ts\ntype PartnerClientList = {\n results: Array<{\n client_id: string\n partner_key: string\n display_name: string\n description?: string\n environment: "dev" | "staging" | "production"\n redirect_uris: string // uri[]\n sector_identifier_uri?: string // uri\n initiate_login_uri?: string // uri\n launch_target_prefixes?: string[]\n token_endpoint_auth_method: "client_secret_basic"\n grant_types: "authorization_code"[]\n scopes_allowed: "openid" | "email" | "profile"[]\n status: "draft" | "active" | "suspended" | "retired"\n status_reason?: string\n config_version: number\n secret_rotated_at?: string // date-time\n previous_secret_expires_at?: string // date-time\n created_at: string // date-time\n updated_at: string // date-time\n created_by?: string\n updated_by?: string\n }>\n next_cursor?: string\n}\n```\n\n### `StatusChangeRequest`\n\n```ts\ntype StatusChangeRequest = {\n reason?: string\n}\n```\n\n### `RotateSecretRequest`\n\n```ts\ntype RotateSecretRequest = {\n compromise_mode?: boolean\n migration_window_seconds?: number\n}\n```\n\n### `AuthorizationPolicyInput`\n\n```ts\ntype AuthorizationPolicyInput = {\n mode?: "preauthorized"\n population?: "all_current_org_members"\n allowed_scopes: "openid" | "email" | "profile"[]\n customer_approval_ref: string\n approved_at: string // date-time\n}\n```\n\n### `AuthorizationPolicy`\n\n```ts\ntype AuthorizationPolicy = {\n mode?: "preauthorized"\n population?: "all_current_org_members"\n allowed_scopes: "openid" | "email" | "profile"[]\n customer_approval_ref: string\n approved_at: string // date-time\n version: number\n mandatory_claims: "org_id"[]\n recorded_by: string\n recorded_at: string // date-time\n}\n```\n\n### `OrgEnablementStatus`\n\n```ts\ntype OrgEnablementStatus = "active" | "suspended" | "revoked"\n```\n\n### `OrgEnablementCreate`\n\n```ts\ntype OrgEnablementCreate = {\n org_id: string\n authorization_policy: {\n mode?: "preauthorized"\n population?: "all_current_org_members"\n allowed_scopes: "openid" | "email" | "profile"[]\n customer_approval_ref: string\n approved_at: string // date-time\n }\n}\n```\n\n### `OrgEnablementUpdate`\n\n```ts\ntype OrgEnablementUpdate = {\n expected_policy_version: number\n authorization_policy: {\n mode?: "preauthorized"\n population?: "all_current_org_members"\n allowed_scopes: "openid" | "email" | "profile"[]\n customer_approval_ref: string\n approved_at: string // date-time\n }\n}\n```\n\n### `OrgEnablement`\n\n```ts\ntype OrgEnablement = {\n client_id: string\n org_id: string\n status: "active" | "suspended" | "revoked"\n status_reason?: string\n authorization_policy: {\n mode?: "preauthorized"\n population?: "all_current_org_members"\n allowed_scopes: "openid" | "email" | "profile"[]\n customer_approval_ref: string\n approved_at: string // date-time\n version: number\n mandatory_claims: "org_id"[]\n recorded_by: string\n recorded_at: string // date-time\n }\n created_at: string // date-time\n updated_at: string // date-time\n created_by?: string\n updated_by?: string\n}\n```\n\n### `OrgEnablementList`\n\n```ts\ntype OrgEnablementList = {\n results: Array<{\n client_id: string\n org_id: string\n status: "active" | "suspended" | "revoked"\n status_reason?: string\n authorization_policy: {\n mode?: { ... }\n population?: { ... }\n allowed_scopes: { ... }\n customer_approval_ref: { ... }\n approved_at: { ... }\n version: { ... }\n mandatory_claims: { ... }\n recorded_by: { ... }\n recorded_at: { ... }\n }\n created_at: string // date-time\n updated_at: string // date-time\n created_by?: string\n updated_by?: string\n }>\n}\n```\n\n### `IdentitySession`\n\n```ts\ntype IdentitySession = {\n org_id: string\n user_id: string\n expires_at: string // date-time\n}\n```\n\n### `UserSubject`\n\n```ts\ntype UserSubject = {\n client_id: string\n org_id: string\n user_id: string\n sub: string\n key_version: string\n sector: string\n}\n```\n';
4
+ var identity_default = '# Identity API\n\n- **Base URL:** `https://id.epilot.cloud`\n- **Full API Docs:** [https://docs.epilot.io/api/identity](https://docs.epilot.io/api/identity)\n\n## Usage\n\n```ts\nimport { epilot } from \'@epilot/sdk\'\n\nepilot.authorize(() => \'<token>\')\nconst { data } = await epilot.identity.listClients(...)\n```\n\n### Tree-shakeable import\n\n```ts\nimport { getClient, authorize } from \'@epilot/sdk/identity\'\n\nconst identityClient = getClient()\nauthorize(identityClient, () => \'<token>\')\nconst { data } = await identityClient.listClients(...)\n```\n\n## Operations\n\n**Operator Clients**\n- [`listClients`](#listclients)\n- [`createOidcClient`](#createoidcclient)\n- [`getOidcClient`](#getoidcclient)\n- [`updateClient`](#updateclient)\n- [`retireClient`](#retireclient)\n- [`activateClient`](#activateclient)\n- [`suspendClient`](#suspendclient)\n- [`rotateClientSecret`](#rotateclientsecret)\n\n**Operator Organizations**\n- [`listClientOrganizations`](#listclientorganizations)\n- [`enableClientOrganization`](#enableclientorganization)\n- [`getClientOrganization`](#getclientorganization)\n- [`updateClientOrganization`](#updateclientorganization)\n- [`revokeClientOrganization`](#revokeclientorganization)\n- [`suspendClientOrganization`](#suspendclientorganization)\n- [`activateClientOrganization`](#activateclientorganization)\n- [`getUserSubject`](#getusersubject)\n\n**Session**\n- [`createIdentitySession`](#createidentitysession)\n- [`deleteIdentitySession`](#deleteidentitysession)\n\n**Launch**\n- [`launchClient`](#launchclient)\n\n**Schemas**\n- [`Error`](#error)\n- [`PartnerClientId`](#partnerclientid)\n- [`OrgId`](#orgid)\n- [`UserId`](#userid)\n- [`Environment`](#environment)\n- [`PartnerClientStatus`](#partnerclientstatus)\n- [`Scope`](#scope)\n- [`HttpsUri`](#httpsuri)\n- [`PartnerClientCreate`](#partnerclientcreate)\n- [`PartnerClientUpdate`](#partnerclientupdate)\n- [`PartnerClient`](#partnerclient)\n- [`PartnerClientWithSecret`](#partnerclientwithsecret)\n- [`PartnerClientList`](#partnerclientlist)\n- [`StatusChangeRequest`](#statuschangerequest)\n- [`RotateSecretRequest`](#rotatesecretrequest)\n- [`AuthorizationPolicyInput`](#authorizationpolicyinput)\n- [`AuthorizationPolicy`](#authorizationpolicy)\n- [`OrgEnablementStatus`](#orgenablementstatus)\n- [`OrgEnablementCreate`](#orgenablementcreate)\n- [`OrgEnablementUpdate`](#orgenablementupdate)\n- [`OrgEnablement`](#orgenablement)\n- [`OrgEnablementList`](#orgenablementlist)\n- [`IdentitySession`](#identitysession)\n- [`UserSubject`](#usersubject)\n\n### `listClients`\n\nList registered partner clients. The client secret is never returned.\n\n`GET /v1/identity/operator/clients`\n\n```ts\nconst { data } = await client.listClients({\n partner_key: \'example\',\n status: \'example\',\n size: 1,\n cursor: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "results": [\n {\n "client_id": "bf-prod-x7k2",\n "partner_key": "string",\n "display_name": "string",\n "description": "string",\n "environment": "dev",\n "redirect_uris": ["https://partner.example.com/auth/callback"],\n "sector_identifier_uri": "https://partner.example.com/auth/callback",\n "initiate_login_uri": "https://partner.example.com/auth/callback",\n "launch_target_prefixes": ["string"],\n "token_endpoint_auth_method": "client_secret_basic",\n "grant_types": ["authorization_code"],\n "scopes_allowed": ["openid"],\n "status": "draft",\n "status_reason": "string",\n "config_version": 1,\n "secret_rotated_at": "1970-01-01T00:00:00.000Z",\n "previous_secret_expires_at": "1970-01-01T00:00:00.000Z",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n }\n ],\n "next_cursor": "string"\n}\n```\n\n</details>\n\n---\n\n### `createOidcClient`\n\nCreate a partner client in `draft` status. The client secret is returned exactly once in this\nresponse and can never be read again; use `rotateClientSecret` to obtain a new one.\n\n`POST /v1/identity/operator/clients`\n\n```ts\nconst { data } = await client.createOidcClient(\n null,\n {\n partner_key: \'babelforce\',\n display_name: \'Babelforce\',\n description: \'string\',\n environment: \'dev\',\n redirect_uris: [\'https://partner.example.com/auth/callback\'],\n sector_identifier_uri: \'https://partner.example.com/auth/callback\',\n initiate_login_uri: \'https://partner.example.com/auth/callback\',\n launch_target_prefixes: [\'string\'],\n scopes_allowed: [\'openid\']\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "partner_key": "string",\n "display_name": "string",\n "description": "string",\n "environment": "dev",\n "redirect_uris": ["https://partner.example.com/auth/callback"],\n "sector_identifier_uri": "https://partner.example.com/auth/callback",\n "initiate_login_uri": "https://partner.example.com/auth/callback",\n "launch_target_prefixes": ["string"],\n "token_endpoint_auth_method": "client_secret_basic",\n "grant_types": ["authorization_code"],\n "scopes_allowed": ["openid"],\n "status": "draft",\n "status_reason": "string",\n "config_version": 1,\n "secret_rotated_at": "1970-01-01T00:00:00.000Z",\n "previous_secret_expires_at": "1970-01-01T00:00:00.000Z",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string",\n "client_secret": "string"\n}\n```\n\n</details>\n\n---\n\n### `getOidcClient`\n\nRead a partner client. The client secret is never returned.\n\n`GET /v1/identity/operator/clients/{client_id}`\n\n```ts\nconst { data } = await client.getOidcClient({\n client_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "partner_key": "string",\n "display_name": "string",\n "description": "string",\n "environment": "dev",\n "redirect_uris": ["https://partner.example.com/auth/callback"],\n "sector_identifier_uri": "https://partner.example.com/auth/callback",\n "initiate_login_uri": "https://partner.example.com/auth/callback",\n "launch_target_prefixes": ["string"],\n "token_endpoint_auth_method": "client_secret_basic",\n "grant_types": ["authorization_code"],\n "scopes_allowed": ["openid"],\n "status": "draft",\n "status_reason": "string",\n "config_version": 1,\n "secret_rotated_at": "1970-01-01T00:00:00.000Z",\n "previous_secret_expires_at": "1970-01-01T00:00:00.000Z",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `updateClient`\n\nReplace the mutable configuration of a client. `config_version` must equal the current\nversion (compare-and-swap); a mismatch is rejected with `409`.\n\n`PUT /v1/identity/operator/clients/{client_id}`\n\n```ts\nconst { data } = await client.updateClient(\n {\n client_id: \'example\',\n },\n {\n config_version: 1,\n allow_sector_change: false,\n display_name: \'string\',\n description: \'string\',\n redirect_uris: [\'https://partner.example.com/auth/callback\'],\n sector_identifier_uri: \'https://partner.example.com/auth/callback\',\n initiate_login_uri: \'https://partner.example.com/auth/callback\',\n launch_target_prefixes: [\'string\'],\n scopes_allowed: [\'openid\']\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "partner_key": "string",\n "display_name": "string",\n "description": "string",\n "environment": "dev",\n "redirect_uris": ["https://partner.example.com/auth/callback"],\n "sector_identifier_uri": "https://partner.example.com/auth/callback",\n "initiate_login_uri": "https://partner.example.com/auth/callback",\n "launch_target_prefixes": ["string"],\n "token_endpoint_auth_method": "client_secret_basic",\n "grant_types": ["authorization_code"],\n "scopes_allowed": ["openid"],\n "status": "draft",\n "status_reason": "string",\n "config_version": 1,\n "secret_rotated_at": "1970-01-01T00:00:00.000Z",\n "previous_secret_expires_at": "1970-01-01T00:00:00.000Z",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `retireClient`\n\nRetire a client. The record is kept as a tombstone, the `client_id` is never reused, every\norganization enablement is revoked and all provider-side artefacts are revoked.\n\n`DELETE /v1/identity/operator/clients/{client_id}`\n\n```ts\nconst { data } = await client.retireClient({\n client_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "partner_key": "string",\n "display_name": "string",\n "description": "string",\n "environment": "dev",\n "redirect_uris": ["https://partner.example.com/auth/callback"],\n "sector_identifier_uri": "https://partner.example.com/auth/callback",\n "initiate_login_uri": "https://partner.example.com/auth/callback",\n "launch_target_prefixes": ["string"],\n "token_endpoint_auth_method": "client_secret_basic",\n "grant_types": ["authorization_code"],\n "scopes_allowed": ["openid"],\n "status": "draft",\n "status_reason": "string",\n "config_version": 1,\n "secret_rotated_at": "1970-01-01T00:00:00.000Z",\n "previous_secret_expires_at": "1970-01-01T00:00:00.000Z",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `activateClient`\n\nActivate a `draft` or `suspended` client. Validates that every redirect URI is an absolute\nHTTPS URL without fragment, that `scopes_allowed` contains `openid`, and that the\nauthentication method is `c\n\n`POST /v1/identity/operator/clients/{client_id}:activate`\n\n```ts\nconst { data } = await client.activateClient({\n client_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "partner_key": "string",\n "display_name": "string",\n "description": "string",\n "environment": "dev",\n "redirect_uris": ["https://partner.example.com/auth/callback"],\n "sector_identifier_uri": "https://partner.example.com/auth/callback",\n "initiate_login_uri": "https://partner.example.com/auth/callback",\n "launch_target_prefixes": ["string"],\n "token_endpoint_auth_method": "client_secret_basic",\n "grant_types": ["authorization_code"],\n "scopes_allowed": ["openid"],\n "status": "draft",\n "status_reason": "string",\n "config_version": 1,\n "secret_rotated_at": "1970-01-01T00:00:00.000Z",\n "previous_secret_expires_at": "1970-01-01T00:00:00.000Z",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `suspendClient`\n\nImmediately block the client for every organization. Provider-side artefacts (codes, tokens,\ngrants) are revoked; the audit trail is kept. Reversible with `activateClient`.\n\n`POST /v1/identity/operator/clients/{client_id}:suspend`\n\n```ts\nconst { data } = await client.suspendClient(\n {\n client_id: \'example\',\n },\n {\n reason: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "partner_key": "string",\n "display_name": "string",\n "description": "string",\n "environment": "dev",\n "redirect_uris": ["https://partner.example.com/auth/callback"],\n "sector_identifier_uri": "https://partner.example.com/auth/callback",\n "initiate_login_uri": "https://partner.example.com/auth/callback",\n "launch_target_prefixes": ["string"],\n "token_endpoint_auth_method": "client_secret_basic",\n "grant_types": ["authorization_code"],\n "scopes_allowed": ["openid"],\n "status": "draft",\n "status_reason": "string",\n "config_version": 1,\n "secret_rotated_at": "1970-01-01T00:00:00.000Z",\n "previous_secret_expires_at": "1970-01-01T00:00:00.000Z",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `rotateClientSecret`\n\nIssue a new client secret. The new secret is returned exactly once. The previous secret\nkeeps working until `previous_secret_expires_at` unless `compromise_mode` is set, in which\ncase it stops working\n\n`POST /v1/identity/operator/clients/{client_id}:rotateSecret`\n\n```ts\nconst { data } = await client.rotateClientSecret(\n {\n client_id: \'example\',\n },\n {\n compromise_mode: false,\n migration_window_seconds: 86400\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "partner_key": "string",\n "display_name": "string",\n "description": "string",\n "environment": "dev",\n "redirect_uris": ["https://partner.example.com/auth/callback"],\n "sector_identifier_uri": "https://partner.example.com/auth/callback",\n "initiate_login_uri": "https://partner.example.com/auth/callback",\n "launch_target_prefixes": ["string"],\n "token_endpoint_auth_method": "client_secret_basic",\n "grant_types": ["authorization_code"],\n "scopes_allowed": ["openid"],\n "status": "draft",\n "status_reason": "string",\n "config_version": 1,\n "secret_rotated_at": "1970-01-01T00:00:00.000Z",\n "previous_secret_expires_at": "1970-01-01T00:00:00.000Z",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string",\n "client_secret": "string"\n}\n```\n\n</details>\n\n---\n\n### `listClientOrganizations`\n\nList the organizations enabled on a client, including suspended and revoked ones.\n\n`GET /v1/identity/operator/clients/{client_id}/organizations`\n\n```ts\nconst { data } = await client.listClientOrganizations({\n client_id: \'example\',\n status: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "results": [\n {\n "client_id": "bf-prod-x7k2",\n "org_id": "739224",\n "status": "active",\n "status_reason": "string",\n "authorization_policy": {\n "mode": "preauthorized",\n "population": "all_current_org_members",\n "allowed_scopes": ["openid"],\n "customer_approval_ref": "string",\n "approved_at": "1970-01-01T00:00:00.000Z",\n "version": 1,\n "mandatory_claims": ["org_id"],\n "recorded_by": "string",\n "recorded_at": "1970-01-01T00:00:00.000Z"\n },\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `enableClientOrganization`\n\nEnable an epilot organization on a client, recording the customer\'s authorization policy\n(version 1). `allowed_scopes` must contain `openid` and be a subset of the client\'s\n`scopes_allowed`.\n\n`POST /v1/identity/operator/clients/{client_id}/organizations`\n\n```ts\nconst { data } = await client.enableClientOrganization(\n {\n client_id: \'example\',\n },\n {\n org_id: \'739224\',\n authorization_policy: {\n mode: \'preauthorized\',\n population: \'all_current_org_members\',\n allowed_scopes: [\'openid\'],\n customer_approval_ref: \'string\',\n approved_at: \'1970-01-01T00:00:00.000Z\'\n }\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "org_id": "739224",\n "status": "active",\n "status_reason": "string",\n "authorization_policy": {\n "mode": "preauthorized",\n "population": "all_current_org_members",\n "allowed_scopes": ["openid"],\n "customer_approval_ref": "string",\n "approved_at": "1970-01-01T00:00:00.000Z",\n "version": 1,\n "mandatory_claims": ["org_id"],\n "recorded_by": "string",\n "recorded_at": "1970-01-01T00:00:00.000Z"\n },\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `getClientOrganization`\n\nRead one organization enablement.\n\n`GET /v1/identity/operator/clients/{client_id}/organizations/{org_id}`\n\n```ts\nconst { data } = await client.getClientOrganization({\n client_id: \'example\',\n org_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "org_id": "739224",\n "status": "active",\n "status_reason": "string",\n "authorization_policy": {\n "mode": "preauthorized",\n "population": "all_current_org_members",\n "allowed_scopes": ["openid"],\n "customer_approval_ref": "string",\n "approved_at": "1970-01-01T00:00:00.000Z",\n "version": 1,\n "mandatory_claims": ["org_id"],\n "recorded_by": "string",\n "recorded_at": "1970-01-01T00:00:00.000Z"\n },\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `updateClientOrganization`\n\nRecord a new version of the customer\'s authorization policy. `expected_policy_version` must\nequal the current version (compare-and-swap); a mismatch is rejected with `409`.\n\n`PUT /v1/identity/operator/clients/{client_id}/organizations/{org_id}`\n\n```ts\nconst { data } = await client.updateClientOrganization(\n {\n client_id: \'example\',\n org_id: \'example\',\n },\n {\n expected_policy_version: 1,\n authorization_policy: {\n mode: \'preauthorized\',\n population: \'all_current_org_members\',\n allowed_scopes: [\'openid\'],\n customer_approval_ref: \'string\',\n approved_at: \'1970-01-01T00:00:00.000Z\'\n }\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "org_id": "739224",\n "status": "active",\n "status_reason": "string",\n "authorization_policy": {\n "mode": "preauthorized",\n "population": "all_current_org_members",\n "allowed_scopes": ["openid"],\n "customer_approval_ref": "string",\n "approved_at": "1970-01-01T00:00:00.000Z",\n "version": 1,\n "mandatory_claims": ["org_id"],\n "recorded_by": "string",\n "recorded_at": "1970-01-01T00:00:00.000Z"\n },\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `revokeClientOrganization`\n\nRevoke an organization\'s enablement. The record is kept as an audited tombstone; future\nauthorizations for this organization fail with `access_denied` and provider-side artefacts\nbound to it are revok\n\n`DELETE /v1/identity/operator/clients/{client_id}/organizations/{org_id}`\n\n```ts\nconst { data } = await client.revokeClientOrganization(\n {\n client_id: \'example\',\n org_id: \'example\',\n },\n {\n reason: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "org_id": "739224",\n "status": "active",\n "status_reason": "string",\n "authorization_policy": {\n "mode": "preauthorized",\n "population": "all_current_org_members",\n "allowed_scopes": ["openid"],\n "customer_approval_ref": "string",\n "approved_at": "1970-01-01T00:00:00.000Z",\n "version": 1,\n "mandatory_claims": ["org_id"],\n "recorded_by": "string",\n "recorded_at": "1970-01-01T00:00:00.000Z"\n },\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `suspendClientOrganization`\n\nTemporarily block one organization on this client. Reversible with `activateClientOrganization`.\n\n`POST /v1/identity/operator/clients/{client_id}/organizations/{org_id}:suspend`\n\n```ts\nconst { data } = await client.suspendClientOrganization(\n {\n client_id: \'example\',\n org_id: \'example\',\n },\n {\n reason: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "org_id": "739224",\n "status": "active",\n "status_reason": "string",\n "authorization_policy": {\n "mode": "preauthorized",\n "population": "all_current_org_members",\n "allowed_scopes": ["openid"],\n "customer_approval_ref": "string",\n "approved_at": "1970-01-01T00:00:00.000Z",\n "version": 1,\n "mandatory_claims": ["org_id"],\n "recorded_by": "string",\n "recorded_at": "1970-01-01T00:00:00.000Z"\n },\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `activateClientOrganization`\n\nResume a suspended organization on this client. Revoked enablements cannot be re-activated; enabling the organization again (`POST \u2026/organizations`) replaces the revoked entry and continues its policy\n\n`POST /v1/identity/operator/clients/{client_id}/organizations/{org_id}:activate`\n\n```ts\nconst { data } = await client.activateClientOrganization({\n client_id: \'example\',\n org_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "org_id": "739224",\n "status": "active",\n "status_reason": "string",\n "authorization_policy": {\n "mode": "preauthorized",\n "population": "all_current_org_members",\n "allowed_scopes": ["openid"],\n "customer_approval_ref": "string",\n "approved_at": "1970-01-01T00:00:00.000Z",\n "version": 1,\n "mandatory_claims": ["org_id"],\n "recorded_by": "string",\n "recorded_at": "1970-01-01T00:00:00.000Z"\n },\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `getUserSubject`\n\nThe pairwise `sub` this client receives for one epilot user, so the partner can bind the person on its\nside **before** the first sign-in (for example a Babelforce agent provisioned through SCIM with\n`\n\n`GET /v1/identity/operator/clients/{client_id}/organizations/{org_id}/users/{user_id}:subject`\n\n```ts\nconst { data } = await client.getUserSubject({\n client_id: \'example\',\n org_id: \'example\',\n user_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "client_id": "bf-prod-x7k2",\n "org_id": "739224",\n "user_id": "100321",\n "sub": "v1.dGhpcy1pcy1hLWR1bW15LXN1YmplY3QtdmFsdWUtMDAx",\n "key_version": "v1",\n "sector": "portal.epilot.cloud"\n}\n```\n\n</details>\n\n---\n\n### `createIdentitySession`\n\nCalled by the epilot portal through the portal-host proxy after every persisted 360 session.\nValidates the 360 bearer token itself and mirrors it into the `identity_session` cookie\n(`HttpOnly; Secure;\n\n`GET /v1/identity/session`\n\n```ts\nconst { data } = await client.createIdentitySession()\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "org_id": "739224",\n "user_id": "string",\n "expires_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `deleteIdentitySession`\n\nClears the `identity_session` cookie. Called by the portal on logout.\n\n`DELETE /v1/identity/session`\n\n```ts\nconst { data } = await client.deleteIdentitySession()\n```\n\n---\n\n### `launchClient`\n\nOne validated place for partner start links (manager UI, hosted apps). Redirects the browser to the\nclient\'s registered `initiate_login_uri` with `iss` set to this issuer and, when given, the deep lin\n\n`GET /v1/identity/launch/{client_id}`\n\n```ts\nconst { data } = await client.launchClient({\n client_id: \'example\',\n target: \'example\',\n extra: \'example\',\n})\n```\n\n---\n\n## Schemas\n\n### `Error`\n\n```ts\ntype Error = {\n status: number\n error: string\n details?: Record<string, unknown>[]\n}\n```\n\n### `PartnerClientId`\n\nOpaque client identifier, unique within the issuer, never reused\n\n```ts\ntype PartnerClientId = string\n```\n\n### `OrgId`\n\nepilot organization id, an opaque case-sensitive string\n\n```ts\ntype OrgId = string\n```\n\n### `UserId`\n\nepilot user id (`custom:ivy_user_id` in a 360 token). A user belongs to exactly one organization.\n\n```ts\ntype UserId = string\n```\n\n### `Environment`\n\nPartner-side environment this client belongs to\n\n```ts\ntype Environment = "dev" | "staging" | "production"\n```\n\n### `PartnerClientStatus`\n\n```ts\ntype PartnerClientStatus = "draft" | "active" | "suspended" | "retired"\n```\n\n### `Scope`\n\n```ts\ntype Scope = "openid" | "email" | "profile"\n```\n\n### `HttpsUri`\n\nAbsolute HTTPS URL without fragment\n\n```ts\ntype HttpsUri = string // uri\n```\n\n### `PartnerClientCreate`\n\n```ts\ntype PartnerClientCreate = {\n partner_key: string\n display_name: string\n description?: string\n environment: "dev" | "staging" | "production"\n redirect_uris: string // uri[]\n sector_identifier_uri?: string // uri\n initiate_login_uri?: string // uri\n launch_target_prefixes?: string[]\n scopes_allowed?: "openid" | "email" | "profile"[]\n}\n```\n\n### `PartnerClientUpdate`\n\n```ts\ntype PartnerClientUpdate = {\n config_version: number\n allow_sector_change?: boolean\n display_name: string\n description?: string\n redirect_uris: string // uri[]\n sector_identifier_uri?: string // uri\n initiate_login_uri?: string // uri\n launch_target_prefixes?: string[]\n scopes_allowed: "openid" | "email" | "profile"[]\n}\n```\n\n### `PartnerClient`\n\n```ts\ntype PartnerClient = {\n client_id: string\n partner_key: string\n display_name: string\n description?: string\n environment: "dev" | "staging" | "production"\n redirect_uris: string // uri[]\n sector_identifier_uri?: string // uri\n initiate_login_uri?: string // uri\n launch_target_prefixes?: string[]\n token_endpoint_auth_method: "client_secret_basic"\n grant_types: "authorization_code"[]\n scopes_allowed: "openid" | "email" | "profile"[]\n status: "draft" | "active" | "suspended" | "retired"\n status_reason?: string\n config_version: number\n secret_rotated_at?: string // date-time\n previous_secret_expires_at?: string // date-time\n created_at: string // date-time\n updated_at: string // date-time\n created_by?: string\n updated_by?: string\n}\n```\n\n### `PartnerClientWithSecret`\n\n```ts\ntype PartnerClientWithSecret = {\n client_id: string\n partner_key: string\n display_name: string\n description?: string\n environment: "dev" | "staging" | "production"\n redirect_uris: string // uri[]\n sector_identifier_uri?: string // uri\n initiate_login_uri?: string // uri\n launch_target_prefixes?: string[]\n token_endpoint_auth_method: "client_secret_basic"\n grant_types: "authorization_code"[]\n scopes_allowed: "openid" | "email" | "profile"[]\n status: "draft" | "active" | "suspended" | "retired"\n status_reason?: string\n config_version: number\n secret_rotated_at?: string // date-time\n previous_secret_expires_at?: string // date-time\n created_at: string // date-time\n updated_at: string // date-time\n created_by?: string\n updated_by?: string\n client_secret: string\n}\n```\n\n### `PartnerClientList`\n\n```ts\ntype PartnerClientList = {\n results: Array<{\n client_id: string\n partner_key: string\n display_name: string\n description?: string\n environment: "dev" | "staging" | "production"\n redirect_uris: string // uri[]\n sector_identifier_uri?: string // uri\n initiate_login_uri?: string // uri\n launch_target_prefixes?: string[]\n token_endpoint_auth_method: "client_secret_basic"\n grant_types: "authorization_code"[]\n scopes_allowed: "openid" | "email" | "profile"[]\n status: "draft" | "active" | "suspended" | "retired"\n status_reason?: string\n config_version: number\n secret_rotated_at?: string // date-time\n previous_secret_expires_at?: string // date-time\n created_at: string // date-time\n updated_at: string // date-time\n created_by?: string\n updated_by?: string\n }>\n next_cursor?: string\n}\n```\n\n### `StatusChangeRequest`\n\n```ts\ntype StatusChangeRequest = {\n reason?: string\n}\n```\n\n### `RotateSecretRequest`\n\n```ts\ntype RotateSecretRequest = {\n compromise_mode?: boolean\n migration_window_seconds?: number\n}\n```\n\n### `AuthorizationPolicyInput`\n\n```ts\ntype AuthorizationPolicyInput = {\n mode?: "preauthorized"\n population?: "all_current_org_members"\n allowed_scopes: "openid" | "email" | "profile"[]\n customer_approval_ref: string\n approved_at?: string // date-time\n}\n```\n\n### `AuthorizationPolicy`\n\n```ts\ntype AuthorizationPolicy = {\n mode?: "preauthorized"\n population?: "all_current_org_members"\n allowed_scopes: "openid" | "email" | "profile"[]\n customer_approval_ref: string\n approved_at: string // date-time\n version: number\n mandatory_claims: "org_id"[]\n recorded_by: string\n recorded_at: string // date-time\n}\n```\n\n### `OrgEnablementStatus`\n\n```ts\ntype OrgEnablementStatus = "active" | "suspended" | "revoked"\n```\n\n### `OrgEnablementCreate`\n\n```ts\ntype OrgEnablementCreate = {\n org_id: string\n authorization_policy: {\n mode?: "preauthorized"\n population?: "all_current_org_members"\n allowed_scopes: "openid" | "email" | "profile"[]\n customer_approval_ref: string\n approved_at?: string // date-time\n }\n}\n```\n\n### `OrgEnablementUpdate`\n\n```ts\ntype OrgEnablementUpdate = {\n expected_policy_version: number\n authorization_policy: {\n mode?: "preauthorized"\n population?: "all_current_org_members"\n allowed_scopes: "openid" | "email" | "profile"[]\n customer_approval_ref: string\n approved_at?: string // date-time\n }\n}\n```\n\n### `OrgEnablement`\n\n```ts\ntype OrgEnablement = {\n client_id: string\n org_id: string\n status: "active" | "suspended" | "revoked"\n status_reason?: string\n authorization_policy: {\n mode?: "preauthorized"\n population?: "all_current_org_members"\n allowed_scopes: "openid" | "email" | "profile"[]\n customer_approval_ref: string\n approved_at: string // date-time\n version: number\n mandatory_claims: "org_id"[]\n recorded_by: string\n recorded_at: string // date-time\n }\n created_at: string // date-time\n updated_at: string // date-time\n created_by?: string\n updated_by?: string\n}\n```\n\n### `OrgEnablementList`\n\n```ts\ntype OrgEnablementList = {\n results: Array<{\n client_id: string\n org_id: string\n status: "active" | "suspended" | "revoked"\n status_reason?: string\n authorization_policy: {\n mode?: { ... }\n population?: { ... }\n allowed_scopes: { ... }\n customer_approval_ref: { ... }\n approved_at: { ... }\n version: { ... }\n mandatory_claims: { ... }\n recorded_by: { ... }\n recorded_at: { ... }\n }\n created_at: string // date-time\n updated_at: string // date-time\n created_by?: string\n updated_by?: string\n }>\n}\n```\n\n### `IdentitySession`\n\n```ts\ntype IdentitySession = {\n org_id: string\n user_id: string\n expires_at: string // date-time\n}\n```\n\n### `UserSubject`\n\n```ts\ntype UserSubject = {\n client_id: string\n org_id: string\n user_id: string\n sub: string\n key_version: string\n sector: string\n}\n```\n';
5
5
  export {
6
6
  identity_default as default
7
7
  };