events.iterate.com

Event type

events.iterate.com/secret/created

Creates a secret processor on this stream. The payload is the immutable birth certificate; the DO cross-posts this event to the project root stream, where the project processor catalogs the secret.

Payload schema

configobject

The complete birth policy.

egressobject

The egress pin the secret is born with.

urlsstring[]

http(s) URLs whose ORIGINS the secret may reach: substituted requests, refresh token exchanges, and credential redirects are all refused outside this pin.

encryptedMaterialobjectoptional

Optional initial material, already encrypted by the DO.

algorithm"AES-GCM-SHA256+SECRET-CELL-V1"

The one supported scheme; a crypto change would mint a new literal.

ciphertextstring

Base64 AES-GCM ciphertext of the JSON-encoded material.

ivstring

Base64 96-bit initialization vector.

refreshobject | null

The refresh strategy the secret is born with, or null for none.

kind: "oauth-refresh-token"object
kind"oauth-refresh-token"
tokenEndpointstring

RFC 6749 refresh_token grant target (the provider's /token URL); its origin must fall within the secret's egress pin.

clientCredsobject | "material"

Where the client credential comes from: "material" reads clientId/clientSecret from this secret's own material (bring-your-own-app); a platform ref names a deployment-owned credential.

platformstring

The AppConfig path of the credential, e.g. "integrations.github".

kind: "github-app-installation"object
kind"github-app-installation"
apiBasestring

GitHub API origin (or a stand-in in e2e); must fall within the egress pin.

appIdstring

The App id — the JWT issuer.

installationIdstring

The installation this connection acts as (public — an external id).

privateKeyobject | "material"

Where the App's RS256 private key comes from: "material" reads the privateKey field of this secret's own material (bring-your-own-App); a platform ref names the first-party App key.

platformstring

The AppConfig path of the credential, e.g. "integrations.github".

kind: "waitrose-session"object
kind"waitrose-session"
graphqlUrlstring

The Waitrose GraphQL endpoint the NewSession login mutation is POSTed to (re-login IS the refresh — Waitrose has no token grant); must fall within the egress pin.

visibility"write-only" | "readable"optional

How the material may leave: "write-only" (never — the classic secret invariant) or "readable" (reveal() answers it, as often as asked). IMMUTABLE — a birth-certificate fact only, never updatable, so a write-only secret can never be retro-flipped readable to exfiltrate it. An enum so future kinds (e.g. reveal-once) extend it without a schema migration; defaulted so every pre-existing stream reduces as write-only.

Raw JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "config": {
      "type": "object",
      "properties": {
        "egress": {
          "type": "object",
          "properties": {
            "urls": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "http(s) URLs whose ORIGINS the secret may reach: substituted requests, refresh token exchanges, and credential redirects are all refused outside this pin."
            }
          },
          "required": [
            "urls"
          ],
          "description": "The egress pin the secret is born with."
        },
        "encryptedMaterial": {
          "description": "Optional initial material, already encrypted by the DO.",
          "type": "object",
          "properties": {
            "algorithm": {
              "type": "string",
              "const": "AES-GCM-SHA256+SECRET-CELL-V1",
              "description": "The one supported scheme; a crypto change would mint a new literal."
            },
            "ciphertext": {
              "type": "string",
              "minLength": 1,
              "description": "Base64 AES-GCM ciphertext of the JSON-encoded material."
            },
            "iv": {
              "type": "string",
              "minLength": 1,
              "description": "Base64 96-bit initialization vector."
            }
          },
          "required": [
            "algorithm",
            "ciphertext",
            "iv"
          ],
          "additionalProperties": false
        },
        "refresh": {
          "anyOf": [
            {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "const": "oauth-refresh-token"
                    },
                    "tokenEndpoint": {
                      "type": "string",
                      "minLength": 1,
                      "description": "RFC 6749 refresh_token grant target (the provider's /token URL); its origin must fall within the secret's egress pin."
                    },
                    "clientCreds": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "platform": {
                              "type": "string",
                              "minLength": 1,
                              "description": "The AppConfig path of the credential, e.g. \"integrations.github\"."
                            }
                          },
                          "required": [
                            "platform"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "string",
                          "const": "material"
                        }
                      ],
                      "description": "Where the client credential comes from: \"material\" reads clientId/clientSecret from this secret's own material (bring-your-own-app); a platform ref names a deployment-owned credential."
                    }
                  },
                  "required": [
                    "kind",
                    "tokenEndpoint",
                    "clientCreds"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "const": "github-app-installation"
                    },
                    "apiBase": {
                      "type": "string",
                      "minLength": 1,
                      "description": "GitHub API origin (or a stand-in in e2e); must fall within the egress pin."
                    },
                    "appId": {
                      "type": "string",
                      "minLength": 1,
                      "description": "The App id — the JWT issuer."
                    },
                    "installationId": {
                      "type": "string",
                      "minLength": 1,
                      "description": "The installation this connection acts as (public — an external id)."
                    },
                    "privateKey": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "platform": {
                              "type": "string",
                              "minLength": 1,
                              "description": "The AppConfig path of the credential, e.g. \"integrations.github\"."
                            }
                          },
                          "required": [
                            "platform"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "string",
                          "const": "material"
                        }
                      ],
                      "description": "Where the App's RS256 private key comes from: \"material\" reads the privateKey field of this secret's own material (bring-your-own-App); a platform ref names the first-party App key."
                    }
                  },
                  "required": [
                    "kind",
                    "apiBase",
                    "appId",
                    "installationId",
                    "privateKey"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "const": "waitrose-session"
                    },
                    "graphqlUrl": {
                      "type": "string",
                      "minLength": 1,
                      "description": "The Waitrose GraphQL endpoint the NewSession login mutation is POSTed to (re-login IS the refresh — Waitrose has no token grant); must fall within the egress pin."
                    }
                  },
                  "required": [
                    "kind",
                    "graphqlUrl"
                  ],
                  "additionalProperties": false
                }
              ]
            },
            {
              "type": "null"
            }
          ],
          "description": "The refresh strategy the secret is born with, or null for none."
        },
        "visibility": {
          "default": "write-only",
          "description": "How the material may leave: \"write-only\" (never — the classic secret invariant) or \"readable\" (reveal() answers it, as often as asked). IMMUTABLE — a birth-certificate fact only, never updatable, so a write-only secret can never be retro-flipped readable to exfiltrate it. An enum so future kinds (e.g. reveal-once) extend it without a schema migration; defaulted so every pre-existing stream reduces as write-only.",
          "type": "string",
          "enum": [
            "write-only",
            "readable"
          ]
        }
      },
      "required": [
        "egress",
        "refresh"
      ],
      "additionalProperties": false,
      "description": "The complete birth policy."
    }
  },
  "required": [
    "config"
  ],
  "additionalProperties": false
}