From e4b842c572f54d84f7aa12f7829b9ffba15da07a Mon Sep 17 00:00:00 2001 From: Gael Date: Wed, 14 Oct 2026 00:15:51 -0400 Subject: [PATCH] feat: verify opaque Work Contexts through host authority --- AGENTS.md | 31 ++- CHANGELOG.md | 8 + README.md | 31 ++- SOURCE.txt | 28 +- src/saas_sdk/_gen/datasource_pb2.py | 356 +++++++++++++----------- src/saas_sdk/_gen/datasource_pb2.pyi | 186 +++++++++++++ src/saas_sdk/_gen/work_contexts_pb2.py | 56 ++-- src/saas_sdk/_gen/work_contexts_pb2.pyi | 52 +++- src/saas_sdk/verification.py | 153 ++++++++++ src/saas_sdk/work_context.py | 16 +- tests/test_verification.py | 122 ++++++++ tests/test_work_context.py | 9 +- 12 files changed, 793 insertions(+), 255 deletions(-) create mode 100644 src/saas_sdk/verification.py create mode 100644 tests/test_verification.py diff --git a/AGENTS.md b/AGENTS.md index 47e1f89..a635ff8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -10,12 +10,15 @@ is how to work *in* the repo. - **Owns:** the generated message bindings (`saas_sdk._gen`); the gateway-bound `datasource` facade; the consumer-side halves of Work Context — the mint - client and the verifier (`saas_sdk.work_context`); the current-revision client - (`saas_sdk.authorization_revision`). + client (`saas_sdk.work_context`); the host verification transport + (`saas_sdk.verification`); the current-revision client + (`saas_sdk.authorization_revision`). The existing local verifier parses Core + protobuf and checks signatures; it does not resolve live sealed authority. - **Does not own:** the protos, which live in `module-saas-starter` (`module/services/accounts/proto`); the Connect transport, which the solution - runtime owns behind `Gateway.unary`; the Work Context *signer*, which stays - authority-side in `sdk-go`; the wire format, which is pinned to `sdk-go`. + runtime owns behind `Gateway.unary`; canonical Work Context minting, wire + format and verification, which belong to `core/workcontext`. Current composed + consumers use the host port; Python never reimplements its sealed verification. - **Never hand-edit `src/saas_sdk/_gen/`.** It is regenerated from a proto ref recorded in `SOURCE.txt` — see the `regenerate-bindings` skill. - Everything ships under the single top-level package `saas_sdk`, so installing @@ -49,20 +52,18 @@ uninstallable for consumers still on protobuf 5.x. ## Parity with saas-sdk-go is a cross-repo invariant -Two fixtures are byte-identical to their Go counterparts, and CI in both repos -verifies the same bytes: +The Work Context fixture tests the existing Core-wire parser; the authorization +revision fixture remains shared with the Go SDK. Do not change either merely to +make a test pass. Core owns the Work Context encoding, and the host owns live +sealed verification. Keep the existing parser available to its consumers without +reimplementing the host's live resolver in Python. -- `tests/fixtures/work_context_wire_golden.json` ↔ sdk-go's - `TestWorkContextWireGolden`. The wire format is **not** a JWT; field order, - `uint64`-as-decimal-string encoding, scope canonicalization, base64url and - Ed25519 signing are pinned byte-for-byte. -- `tests/fixtures/authorization_revision_projection.json` ↔ the Go SDK's +- `tests/fixtures/work_context_wire_golden.json` pins an authentic Core token. +- `tests/fixtures/authorization_revision_projection.json` matches the Go SDK's `authorizationrevision/testdata/projection.json`. -Editing a fixture to make a test here pass is not a fix — it is a silent break -of the other implementation, which will keep minting or verifying the old bytes. -A wire change is one coordinated pair of pull requests. See the -`wire-format-parity` skill. +Current-host live verification is tested through the generated host RPC and the +opaque-token transport in `verification`, with Core conformance at its owner. ## When something does not work diff --git a/CHANGELOG.md b/CHANGELOG.md index f54a44d..f4cab5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ ## Unreleased +- Add `verification.Client` for the host's idempotent-only Core verification + operation on the resolved `accounts/authority` endpoint. Credentials remain + opaque; request-local results are rechecked remotely without replay writes. +- Breaking: `work_context.Client.start_task` no longer accepts `session_id`. + The current host assigns session identity and removed that request field. + Retain the existing Core-wire parser and signature-verification helpers; + composed consumers needing live authority use the host verification client. + - Add `datasource.invoke`, `lookup`, `declare_operations` and `list_operations`, also available on the existing gateway-bound client. - Add operation declarations, effects, results, receipts, UUIDv7 effect IDs, diff --git a/README.md b/README.md index 465633f..f670594 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,23 @@ Everything ships under a single top-level package, `saas_sdk`, so installing it never claims a generic name (`saas`, `buf`, `datasource`) in the consumer's import namespace. +Current Core Work Contexts are verified through `saas_sdk.verification.Client` +on Codefly's resolved `accounts/authority` endpoint. Construct it with the +callee's trusted issuer and audience and an async internal-credential callback; +`await client.verify(token)` returns request-local identity and effective scopes. +Apply resource policy locally and call `await client.recheck(result)` at each +live-authority checkpoint. Close the client with `await client.aclose()`. +The host checks the opaque credential through Core, including live installation, +epoch, execution and binding state. Only idempotent credentials are accepted. +The three-second budget includes credential refresh and the RPC. Authority +outages return `AuthorityUnavailable`; invalid credentials and denied authority +are distinct. No failure yields an identity. Tokens and results must not be logged +or persisted. `work_context.Verifier` and the JWKS helpers also parse Core +protobuf capabilities and verify their signatures, but do not establish the live +installation and binding state checked by the host port. Existing users of +those helpers retain their interface; composed callees requiring live authority +use the host verification client. + Packages: - **`saas_sdk._gen`** — private; consumers reach these types through the facades @@ -253,13 +270,11 @@ solution needs: the **mint-side** client to the accounts authority, and the **callee-side** verifier. Only the *signer* itself stays authority-side in [`sdk-go`](https://github.com/codefly-dev/sdk-go). -The wire format is **not a JWT**. A token is -`base64url(JSON payload).base64url(Ed25519 sig)`, the payload is a fixed -snake_case JSON object, and `key_id` lives *inside* the payload. Field order, -`uint64`-as-decimal-string encoding, scope canonicalization, base64url, and -Ed25519 signing are pinned byte-for-byte to `sdk-go`: the wire golden in -`tests/fixtures/work_context_wire_golden.json` is byte-identical to sdk-go's -`TestWorkContextWireGolden`, and CI in both repos verifies the same token. +The wire format is **not a JWT**. A token carries a Core `WorkContextV1` +protobuf payload and an Ed25519 signature. Core owns its canonical encoding; +the SDK's wire fixture tests the parser against an authentic Core capability. +Signature verification alone does not establish current authority: the host +verification client above checks live state through the owning authority. ### Minting (delegated caller) @@ -272,7 +287,7 @@ from saas_sdk import work_context wc = work_context.new(gateway) parent = wc.start_task( - bearer=user_bearer, org_id=org, task_id=task, session_id=session, + bearer=user_bearer, org_id=org, task_id=task, audience="accounts", scopes=[work_context.WorkContextScope(resource_kind="evidence", actions=["read"])], ) diff --git a/SOURCE.txt b/SOURCE.txt index 18a9876..e7434b9 100644 --- a/SOURCE.txt +++ b/SOURCE.txt @@ -1,14 +1,18 @@ -src/saas_sdk/_gen generated from codefly-dev/module-saas-starter@v0.0.94 +DEVELOPMENT CANDIDATE — not a published host release. +src/saas_sdk/_gen regenerated from codefly-dev/module-saas-starter@2e1fdb5c1b6bf7594db75d76cbe6a1518ca7cde0 (accounts public proto: module/services/accounts/proto) -Release tag: https://github.com/codefly-dev/module-saas-starter/releases/tag/v0.0.94 -Annotated tag object: 68f3fd38c721724166ee37e1f5ca75441fd76661 -Resolved commit: 9f6a4aa26edcbcb4d76cf4ffb47f71010e94f4eb -services: - saas.accounts.v1.DatasourceService (datasource.proto) - saas.accounts.v1.WorkContextService (work_contexts.proto) -messages: - saas.jobs.v1 (jobs.proto, as saas_sdk/_gen/jobs.proto: datasource.proto's sync state) -custom options + shared descriptors stripped — see scripts/generate.sh +Resolved commit: 2e1fdb5c1b6bf7594db75d76cbe6a1518ca7cde0 -module version: 0.1.0 (module/module.package.codefly.yaml) -This SDK's release is matched to the saas-starter module version above. +Inputs (SHA-256): +43d579e29dbfe39a2d80cb7efe7e360cbcbf951ee54772f7e28bfca10a0dfaab saas/jobs/v1/jobs.proto +8c7431b2e934fe86601bb0e13db039618565a0dc3a6ce6ddcb9468b908bbb319 saas/accounts/v1/datasource.proto +a9b70803c33add5222fbe5b18bcd1696205a107d8016e5992d0b2d47aefd7250 saas/accounts/v1/work_contexts.proto + +Generation: scripts/generate.sh /module/services/accounts/proto +Custom options/shared descriptors stripped by scripts/strip_options.py. +Core WorkContext bindings and parser retained from SDK main a954baf641068568c106dbb96e19a408cfdf4c62. + +Module version baseline: 0.1.0. No release is asserted. +RELEASE GATE: the maintained gen-drift workflow requires a released host tag. +After the host release, regenerate from that tag and record its tag object and +resolved commit here. This candidate must not be released before that check passes. diff --git a/src/saas_sdk/_gen/datasource_pb2.py b/src/saas_sdk/_gen/datasource_pb2.py index 23c1ee4..9930221 100644 --- a/src/saas_sdk/_gen/datasource_pb2.py +++ b/src/saas_sdk/_gen/datasource_pb2.py @@ -28,7 +28,7 @@ from saas_sdk._gen import jobs_pb2 as saas__sdk_dot___gen_dot_jobs__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!saas/accounts/v1/datasource.proto\x12\x10saas.accounts.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x18saas_sdk/_gen/jobs.proto\"\x83\x01\n\x16GitHubDatasourceConfig\x12\x12\n\x04repo\x18\x01 \x01(\tR\x04repo\x12\x14\n\x05paths\x18\x02 \x03(\tR\x05paths\x12\x16\n\x06\x62ranch\x18\x03 \x01(\tR\x06\x62ranch\x12\'\n\x0f\x66ile_extensions\x18\x04 \x03(\tR\x0e\x66ileExtensions\"\x97\x02\n\x0f\x41piOAuth2Config\x12=\n\x05grant\x18\x04 \x01(\x0e\x32\'.saas.accounts.v1.ApiOAuth2Config.GrantR\x05grant\x12\x1b\n\ttoken_url\x18\x01 \x01(\tR\x08tokenUrl\x12\x1b\n\tclient_id\x18\x02 \x01(\tR\x08\x63lientId\x12\x16\n\x06scopes\x18\x03 \x03(\tR\x06scopes\"s\n\x05Grant\x12\x15\n\x11GRANT_UNSPECIFIED\x10\x00\x12\x17\n\x13GRANT_REFRESH_TOKEN\x10\x01\x12\x1c\n\x18GRANT_CLIENT_CREDENTIALS\x10\x02\x12\x1c\n\x18GRANT_AUTHORIZATION_CODE\x10\x03\"\xc1\x02\n\x13\x41piDatasourceConfig\x12\x19\n\x08\x62\x61se_url\x18\x01 \x01(\tR\x07\x62\x61seUrl\x12#\n\rresource_path\x18\x02 \x01(\tR\x0cresourcePath\x12L\n\x0f\x63redential_kind\x18\x03 \x01(\x0e\x32#.saas.accounts.v1.ApiCredentialKindR\x0e\x63redentialKind\x12+\n\x11\x63redential_header\x18\x04 \x01(\tR\x10\x63redentialHeader\x12\x34\n\x16\x63redential_query_param\x18\x05 \x01(\tR\x14\x63redentialQueryParam\x12\x39\n\x06oauth2\x18\x06 \x01(\x0b\x32!.saas.accounts.v1.ApiOAuth2ConfigR\x06oauth2\"W\n\x17\x43rawlerDatasourceConfig\x12\x1f\n\x0bsitemap_url\x18\x01 \x01(\tR\nsitemapUrl\x12\x1b\n\tmax_pages\x18\x02 \x01(\rR\x08maxPages\"\xc1\x01\n\x16UploadDatasourceConfig\x12\x1a\n\x08\x65ndpoint\x18\x01 \x01(\tR\x08\x65ndpoint\x12\x16\n\x06region\x18\x02 \x01(\tR\x06region\x12\x16\n\x06\x62ucket\x18\x03 \x01(\tR\x06\x62ucket\x12\x16\n\x06prefix\x18\x04 \x01(\tR\x06prefix\x12\"\n\raccess_key_id\x18\x05 \x01(\tR\x0b\x61\x63\x63\x65ssKeyId\x12\x1f\n\x0bmax_objects\x18\x06 \x01(\rR\nmaxObjects\"\x83\t\n\nDatasource\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x15\n\x06org_id\x18\x02 \x01(\tR\x05orgId\x12@\n\x08provider\x18\x03 \x01(\x0e\x32$.saas.accounts.v1.DatasourceProviderR\x08provider\x12@\n\x06github\x18\x05 \x01(\x0b\x32(.saas.accounts.v1.GitHubDatasourceConfigR\x06github\x12:\n\x06status\x18\x06 \x01(\x0e\x32\".saas.accounts.v1.DatasourceStatusR\x06status\x12-\n\x12webhook_configured\x18\x07 \x01(\x08R\x11webhookConfigured\x12\x39\n\ncreated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12@\n\x0elast_synced_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0clastSyncedAt\x12\x37\n\x03\x61pi\x18\x0b \x01(\x0b\x32%.saas.accounts.v1.ApiDatasourceConfigR\x03\x61pi\x12\x43\n\x07\x63rawler\x18\x0c \x01(\x0b\x32).saas.accounts.v1.CrawlerDatasourceConfigR\x07\x63rawler\x12@\n\x06upload\x18\r \x01(\x0b\x32(.saas.accounts.v1.UploadDatasourceConfigR\x06upload\x12(\n\x10\x62oundary_node_id\x18\x0e \x01(\tR\x0e\x62oundaryNodeId\x12\x44\n\x10last_ingested_at\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0elastIngestedAt\x12\x30\n\x14last_ingested_commit\x18\x10 \x01(\tR\x12lastIngestedCommit\x12#\n\rstatus_reason\x18\x11 \x01(\tR\x0cstatusReason\x12%\n\x0e\x62oundary_label\x18\x12 \x01(\tR\rboundaryLabel\x12\x1e\n\nconformant\x18\x13 \x01(\x08R\nconformant\x12\'\n\x0f\x63onformance_gap\x18\x14 \x01(\tR\x0e\x63onformanceGap\x12M\n\rlive_delivery\x18\x15 \x01(\x0e\x32(.saas.accounts.v1.DatasourceLiveDeliveryR\x0cliveDelivery\x12H\n\x12reconcile_interval\x18\x16 \x01(\x0b\x32\x19.google.protobuf.DurationR\x11reconcileIntervalJ\x04\x08\x04\x10\x05R\x11target_collection\"\xe9\x02\n\x16\x41\x64\x64GitHubSourceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x12\n\x04repo\x18\x02 \x01(\tR\x04repo\x12\x14\n\x05paths\x18\x03 \x03(\tR\x05paths\x12\x16\n\x06\x62ranch\x18\x04 \x01(\tR\x06\x62ranch\x12*\n\x10\x62oundary_node_id\x18\x08 \x01(\tH\x00R\x0e\x62oundaryNodeId\x12+\n\x10\x63ollection_label\x18\t \x01(\tH\x00R\x0f\x63ollectionLabel\x12!\n\x0c\x61\x63\x63\x65ss_token\x18\x06 \x01(\tR\x0b\x61\x63\x63\x65ssToken\x12%\n\x0ewebhook_secret\x18\x07 \x01(\tR\rwebhookSecret\x12\'\n\x0f\x66ile_extensions\x18\n \x03(\tR\x0e\x66ileExtensionsB\x11\n\x08\x62oundary\x12\x05\xbaH\x02\x08\x01J\x04\x08\x05\x10\x06R\x11target_collection\"W\n\x17\x41\x64\x64GitHubSourceResponse\x12<\n\ndatasource\x18\x01 \x01(\x0b\x32\x1c.saas.accounts.v1.DatasourceR\ndatasource\"\xfd\x04\n\x10\x41\x64\x64SourceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12@\n\x08provider\x18\x02 \x01(\x0e\x32$.saas.accounts.v1.DatasourceProviderR\x08provider\x12\x42\n\x06github\x18\x04 \x01(\x0b\x32(.saas.accounts.v1.GitHubDatasourceConfigH\x00R\x06github\x12\x39\n\x03\x61pi\x18\x05 \x01(\x0b\x32%.saas.accounts.v1.ApiDatasourceConfigH\x00R\x03\x61pi\x12\x45\n\x07\x63rawler\x18\x08 \x01(\x0b\x32).saas.accounts.v1.CrawlerDatasourceConfigH\x00R\x07\x63rawler\x12\x42\n\x06upload\x18\t \x01(\x0b\x32(.saas.accounts.v1.UploadDatasourceConfigH\x00R\x06upload\x12*\n\x10\x62oundary_node_id\x18\x0c \x01(\tH\x01R\x0e\x62oundaryNodeId\x12+\n\x10\x63ollection_label\x18\r \x01(\tH\x01R\x0f\x63ollectionLabel\x12\x1e\n\ncredential\x18\x06 \x01(\tR\ncredential\x12%\n\x0ewebhook_secret\x18\x07 \x01(\tR\rwebhookSecret\x12\x30\n\x14oauth2_client_secret\x18\n \x01(\tR\x12oauth2ClientSecretB\x08\n\x06\x63onfigB\x11\n\x08\x62oundary\x12\x05\xbaH\x02\x08\x01J\x04\x08\x03\x10\x04R\x11target_collection\"Q\n\x11\x41\x64\x64SourceResponse\x12<\n\ndatasource\x18\x01 \x01(\x0b\x32\x1c.saas.accounts.v1.DatasourceR\ndatasource\"|\n\x15\x44\x61tasourceConfigField\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12!\n\x0c\x64isplay_name\x18\x02 \x01(\tR\x0b\x64isplayName\x12\x12\n\x04help\x18\x03 \x01(\tR\x04help\x12\x1a\n\x08required\x18\x04 \x01(\x08R\x08required\"\xb0\x02\n\x19\x44\x61tasourceConnectorBudget\x12+\n\x12max_items_per_call\x18\x01 \x01(\rR\x0fmaxItemsPerCall\x12+\n\x12max_bytes_per_call\x18\x02 \x01(\x03R\x0fmaxBytesPerCall\x12$\n\x0emax_item_bytes\x18\x03 \x01(\x03R\x0cmaxItemBytes\x12\x32\n\x15operations_per_window\x18\x04 \x01(\rR\x13operationsPerWindow\x12%\n\x0ewindow_seconds\x18\x05 \x01(\x03R\rwindowSeconds\x12\x38\n\x18\x62\x61\x63kground_share_percent\x18\x06 \x01(\rR\x16\x62\x61\x63kgroundSharePercent\"\xdc\x08\n\x1c\x44\x61tasourceProviderDescriptor\x12@\n\x08provider\x18\x01 \x01(\x0e\x32$.saas.accounts.v1.DatasourceProviderR\x08provider\x12!\n\x0c\x64isplay_name\x18\x02 \x01(\tR\x0b\x64isplayName\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12L\n\rconfig_fields\x18\x04 \x03(\x0b\x32\'.saas.accounts.v1.DatasourceConfigFieldR\x0c\x63onfigFields\x12)\n\x10supports_webhook\x18\x05 \x01(\x08R\x0fsupportsWebhook\x12\x61\n\x1asupported_credential_kinds\x18\x06 \x03(\x0e\x32#.saas.accounts.v1.ApiCredentialKindR\x18supportedCredentialKinds\x12\x1c\n\tconnector\x18\x07 \x01(\tR\tconnector\x12L\n\tinterface\x18\x08 \x01(\x0e\x32..saas.accounts.v1.DatasourceConnectorInterfaceR\tinterface\x12U\n\x10\x63redential_modes\x18\t \x03(\x0e\x32*.saas.accounts.v1.DatasourceCredentialModeR\x0f\x63redentialModes\x12M\n\rreaders_model\x18\n \x01(\x0e\x32(.saas.accounts.v1.DatasourceReadersModelR\x0creadersModel\x12\x43\n\x06\x62udget\x18\x0b \x01(\x0b\x32+.saas.accounts.v1.DatasourceConnectorBudgetR\x06\x62udget\x12\x1e\n\nconformant\x18\x0c \x01(\x08R\nconformant\x12\'\n\x0f\x63onformance_gap\x18\r \x01(\tR\x0e\x63onformanceGap\x12.\n\x13\x61\x63\x63\x65pts_new_sources\x18\x0e \x01(\x08R\x11\x61\x63\x63\x65ptsNewSources\x12\x38\n\x18live_delivery_configured\x18\x0f \x01(\x08R\x16liveDeliveryConfigured\x12-\n\x12\x61\x63\x63\x65pts_operations\x18\x10 \x01(\x08R\x11\x61\x63\x63\x65ptsOperations\x12%\n\x0eoperations_gap\x18\x11 \x01(\tR\roperationsGap\x12.\n\x13oauth_authorize_url\x18\x12 \x01(\tR\x11oauthAuthorizeUrl\x12&\n\x0foauth_token_url\x18\x13 \x01(\tR\roauthTokenUrl\x12!\n\x0coauth_scopes\x18\x14 \x03(\tR\x0boauthScopes\"\x1d\n\x1bGetDatasourceCatalogRequest\"l\n\x1cGetDatasourceCatalogResponse\x12L\n\tproviders\x18\x01 \x03(\x0b\x32..saas.accounts.v1.DatasourceProviderDescriptorR\tproviders\"+\n\x12ListSourcesRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\"U\n\x13ListSourcesResponse\x12>\n\x0b\x64\x61tasources\x18\x01 \x03(\x0b\x32\x1c.saas.accounts.v1.DatasourceR\x0b\x64\x61tasources\"9\n\x10GetSourceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"Q\n\x11GetSourceResponse\x12<\n\ndatasource\x18\x01 \x01(\x0b\x32\x1c.saas.accounts.v1.DatasourceR\ndatasource\"{\n\x11SyncSourceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12!\n\x0c\x61\x63\x63\x65ss_token\x18\x03 \x01(\tR\x0b\x61\x63\x63\x65ssToken\x12\x1c\n\treconnect\x18\x04 \x01(\x08R\treconnect\"+\n\x12SyncSourceResponse\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\"a\n\x14GetSourceSyncRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tsource_id\x18\x02 \x01(\tR\x08sourceId\x12\x15\n\x06job_id\x18\x03 \x01(\tR\x05jobId\"\x9c\x01\n\x12SourceSyncDelivery\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\x12,\n\x05state\x18\x02 \x01(\x0e\x32\x16.saas.jobs.v1.JobStateR\x05state\x12\x41\n\texecution\x18\x03 \x01(\x0b\x32#.saas.jobs.v1.JobExecutionReferenceR\texecution\"\xca\x01\n\x11SourceSyncChanges\x12\x14\n\x05\x66iles\x18\x01 \x01(\rR\x05\x66iles\x12\x14\n\x05\x61\x64\x64\x65\x64\x18\x02 \x01(\rR\x05\x61\x64\x64\x65\x64\x12\x1a\n\x08modified\x18\x03 \x01(\rR\x08modified\x12\x18\n\x07\x64\x65leted\x18\x04 \x01(\rR\x07\x64\x65leted\x12\x1f\n\x0bsplit_known\x18\x05 \x01(\x08R\nsplitKnown\x12\x1a\n\x08snapshot\x18\x06 \x01(\x08R\x08snapshot\x12\x16\n\x06\x63ommit\x18\x07 \x01(\tR\x06\x63ommit\"\xd7\x01\n\x11SourceSyncFailure\x12\x41\n\x06reason\x18\x01 \x01(\x0e\x32).saas.accounts.v1.SourceSyncFailureReasonR\x06reason\x12\x12\n\x04\x63ode\x18\x02 \x01(\tR\x04\x63ode\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\x12\x1a\n\x08retrying\x18\x04 \x01(\x08R\x08retrying\x12\x35\n\x08retry_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07retryAt\"\xf7\x04\n\x12SourceSyncProgress\x12\x37\n\x05phase\x18\x01 \x01(\x0e\x32!.saas.accounts.v1.SourceSyncPhaseR\x05phase\x12=\n\x07trigger\x18\x02 \x01(\x0e\x32#.saas.accounts.v1.SourceSyncTriggerR\x07trigger\x12\x37\n\tqueued_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x08queuedAt\x12;\n\x0b\x66\x65tching_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nfetchingAt\x12;\n\x0b\x63ompiled_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncompiledAt\x12>\n\rhanded_off_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0bhandedOffAt\x12;\n\x0b\x66inished_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nfinishedAt\x12=\n\x07\x63hanges\x18\x08 \x01(\x0b\x32#.saas.accounts.v1.SourceSyncChangesR\x07\x63hanges\x12=\n\x07\x66\x61ilure\x18\t \x01(\x0b\x32#.saas.accounts.v1.SourceSyncFailureR\x07\x66\x61ilure\x12\x18\n\x07\x61ttempt\x18\n \x01(\rR\x07\x61ttempt\x12!\n\x0cmax_attempts\x18\x0b \x01(\rR\x0bmaxAttempts\"\xe4\x01\n\x15GetSourceSyncResponse\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\x12,\n\x05state\x18\x02 \x01(\x0e\x32\x16.saas.jobs.v1.JobStateR\x05state\x12\x44\n\ndeliveries\x18\x03 \x03(\x0b\x32$.saas.accounts.v1.SourceSyncDeliveryR\ndeliveries\x12@\n\x08progress\x18\x04 \x01(\x0b\x32$.saas.accounts.v1.SourceSyncProgressR\x08progress\"<\n\x13\x44\x65leteSourceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"\x16\n\x14\x44\x65leteSourceResponse\"}\n\x13GitHubAppRepository\x12\x12\n\x04repo\x18\x01 \x01(\tR\x04repo\x12%\n\x0e\x64\x65\x66\x61ult_branch\x18\x02 \x01(\tR\rdefaultBranch\x12+\n\x11\x61lready_connected\x18\x03 \x01(\x08R\x10\x61lreadyConnected\"3\n\x1a\x42\x65ginGitHubAppSetupRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\"\x8f\x01\n\x1b\x42\x65ginGitHubAppSetupResponse\x12\x1f\n\x0binstall_url\x18\x01 \x01(\tR\ninstallUrl\x12\x14\n\x05state\x18\x02 \x01(\tR\x05state\x12\x39\n\nexpires_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\"\x89\x01\n\x1d\x43ompleteGitHubAppSetupRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x14\n\x05state\x18\x02 \x01(\tR\x05state\x12\'\n\x0finstallation_id\x18\x03 \x01(\tR\x0einstallationId\x12\x12\n\x04\x63ode\x18\x04 \x01(\tR\x04\x63ode\"\x94\x01\n\x1e\x43ompleteGitHubAppSetupResponse\x12\'\n\x0finstallation_id\x18\x01 \x01(\tR\x0einstallationId\x12I\n\x0crepositories\x18\x02 \x03(\x0b\x32%.saas.accounts.v1.GitHubAppRepositoryR\x0crepositories\"H\n\x1fMigrateGitHubSourceToAppRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"`\n MigrateGitHubSourceToAppResponse\x12<\n\ndatasource\x18\x01 \x01(\x0b\x32\x1c.saas.accounts.v1.DatasourceR\ndatasource\"\x96\x02\n\x15\x44\x61tasourceAccountLink\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x15\n\x06org_id\x18\x02 \x01(\tR\x05orgId\x12\x17\n\x07user_id\x18\x03 \x01(\tR\x06userId\x12\x1c\n\tconnector\x18\x04 \x01(\tR\tconnector\x12.\n\x13provider_account_id\x18\x05 \x01(\tR\x11providerAccountId\x12\x34\n\x16provider_account_login\x18\x06 \x01(\tR\x14providerAccountLogin\x12\x39\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\"\xfc\x01\n\x16\x44\x61tasourceGroupBinding\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x15\n\x06org_id\x18\x02 \x01(\tR\x05orgId\x12\x1c\n\tconnector\x18\x03 \x01(\tR\tconnector\x12*\n\x11provider_group_id\x18\x04 \x01(\tR\x0fproviderGroupId\x12\x17\n\x07team_id\x18\x05 \x01(\tR\x06teamId\x12\x1d\n\ncreated_by\x18\x06 \x01(\tR\tcreatedBy\x12\x39\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\"\xe5\x02\n\x18\x44\x61tasourceVerifiedDomain\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x15\n\x06org_id\x18\x02 \x01(\tR\x05orgId\x12\x16\n\x06\x64omain\x18\x03 \x01(\tR\x06\x64omain\x12@\n\x06status\x18\x04 \x01(\x0e\x32(.saas.accounts.v1.DatasourceDomainStatusR\x06status\x12&\n\x0ftxt_record_name\x18\x05 \x01(\tR\rtxtRecordName\x12(\n\x10txt_record_value\x18\x06 \x01(\tR\x0etxtRecordValue\x12;\n\x0bverified_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nverifiedAt\x12\x39\n\ncreated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\"=\n\x17\x44\x61tasourceDirectoryTeam\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\"\x98\x01\n!BeginDatasourceAccountLinkRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1c\n\tconnector\x18\x02 \x01(\tR\tconnector\x12!\n\x0credirect_uri\x18\x03 \x01(\tR\x0bredirectUri\x12\x1b\n\tsource_id\x18\x04 \x01(\tR\x08sourceId\"\x9a\x01\n\"BeginDatasourceAccountLinkResponse\x12#\n\rauthorize_url\x18\x01 \x01(\tR\x0c\x61uthorizeUrl\x12\x14\n\x05state\x18\x02 \x01(\tR\x05state\x12\x39\n\nexpires_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\"g\n$CompleteDatasourceAccountLinkRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x14\n\x05state\x18\x02 \x01(\tR\x05state\x12\x12\n\x04\x63ode\x18\x03 \x01(\tR\x04\x63ode\"d\n%CompleteDatasourceAccountLinkResponse\x12;\n\x04link\x18\x01 \x01(\x0b\x32\'.saas.accounts.v1.DatasourceAccountLinkR\x04link\"<\n#ListMyDatasourceAccountLinksRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\"e\n$ListMyDatasourceAccountLinksResponse\x12=\n\x05links\x18\x01 \x03(\x0b\x32\'.saas.accounts.v1.DatasourceAccountLinkR\x05links\"K\n\"DeleteDatasourceAccountLinkRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"%\n#DeleteDatasourceAccountLinkResponse\"6\n\x1dGetDatasourceDirectoryRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\"\xac\x02\n\x1eGetDatasourceDirectoryResponse\x12=\n\x05links\x18\x01 \x03(\x0b\x32\'.saas.accounts.v1.DatasourceAccountLinkR\x05links\x12\x44\n\x08\x62indings\x18\x02 \x03(\x0b\x32(.saas.accounts.v1.DatasourceGroupBindingR\x08\x62indings\x12\x44\n\x07\x64omains\x18\x03 \x03(\x0b\x32*.saas.accounts.v1.DatasourceVerifiedDomainR\x07\x64omains\x12?\n\x05teams\x18\x04 \x03(\x0b\x32).saas.accounts.v1.DatasourceDirectoryTeamR\x05teams\"\x96\x01\n\x1a\x42indDatasourceGroupRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1c\n\tconnector\x18\x02 \x01(\tR\tconnector\x12*\n\x11provider_group_id\x18\x03 \x01(\tR\x0fproviderGroupId\x12\x17\n\x07team_id\x18\x04 \x01(\tR\x06teamId\"a\n\x1b\x42indDatasourceGroupResponse\x12\x42\n\x07\x62inding\x18\x01 \x01(\x0b\x32(.saas.accounts.v1.DatasourceGroupBindingR\x07\x62inding\"E\n\x1cUnbindDatasourceGroupRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"\x1f\n\x1dUnbindDatasourceGroupResponse\"M\n\x1c\x43laimDatasourceDomainRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\"c\n\x1d\x43laimDatasourceDomainResponse\x12\x42\n\x06\x64omain\x18\x01 \x01(\x0b\x32*.saas.accounts.v1.DatasourceVerifiedDomainR\x06\x64omain\"F\n\x1dVerifyDatasourceDomainRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"d\n\x1eVerifyDatasourceDomainResponse\x12\x42\n\x06\x64omain\x18\x01 \x01(\x0b\x32*.saas.accounts.v1.DatasourceVerifiedDomainR\x06\x64omain\"F\n\x1d\x44\x65leteDatasourceDomainRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\" \n\x1e\x44\x65leteDatasourceDomainResponse\"\xf7\x02\n\x10SourceDelegation\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1b\n\tsource_id\x18\x02 \x01(\tR\x08sourceId\x12!\n\x0cprincipal_id\x18\x03 \x01(\tR\x0bprincipalId\x12\x16\n\x06module\x18\x04 \x01(\tR\x06module\x12\x18\n\x07\x62inding\x18\x05 \x01(\tR\x07\x62inding\x12\x39\n\ncreated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nrevoked_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\trevokedAt\x12L\n\nrevocation\x18\x08 \x01(\x0e\x32,.saas.accounts.v1.SourceDelegationRevocationR\nrevocation\x12\x1d\n\nrevoked_by\x18\t \x01(\tR\trevokedBy\"\x8e\x01\n\x1cListSourceDelegationsRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12 \n\tsource_id\x18\x02 \x01(\tH\x00R\x08sourceId\x88\x01\x01\x12\'\n\x0finclude_revoked\x18\x03 \x01(\x08R\x0eincludeRevokedB\x0c\n\n_source_id\"e\n\x1dListSourceDelegationsResponse\x12\x44\n\x0b\x64\x65legations\x18\x01 \x03(\x0b\x32\".saas.accounts.v1.SourceDelegationR\x0b\x64\x65legations\"F\n\x1dRevokeSourceDelegationRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"d\n\x1eRevokeSourceDelegationResponse\x12\x42\n\ndelegation\x18\x01 \x01(\x0b\x32\".saas.accounts.v1.SourceDelegationR\ndelegation\"\xd4\x03\n\x0fSourceOperation\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x02 \x01(\tR\x0b\x64\x65scription\x12\x16\n\x06method\x18\x03 \x01(\tR\x06method\x12\x12\n\x04path\x18\x04 \x01(\tR\x04path\x12\x14\n\x05query\x18\x05 \x03(\tR\x05query\x12:\n\x0cinput_schema\x18\x06 \x01(\x0b\x32\x17.google.protobuf.StructR\x0binputSchema\x12<\n\routput_schema\x18\x07 \x01(\x0b\x32\x17.google.protobuf.StructR\x0coutputSchema\x12@\n\x06\x65\x66\x66\x65\x63t\x18\x08 \x01(\x0e\x32(.saas.accounts.v1.SourceOperation.EffectR\x06\x65\x66\x66\x65\x63t\x12(\n\x10max_output_bytes\x18\t \x01(\rR\x0emaxOutputBytes\x12\x16\n\x06\x64igest\x18\n \x01(\tR\x06\x64igest\"K\n\x06\x45\x66\x66\x65\x63t\x12\x16\n\x12\x45\x46\x46\x45\x43T_UNSPECIFIED\x10\x00\x12\x14\n\x10\x45\x46\x46\x45\x43T_READ_ONLY\x10\x01\x12\x13\n\x0f\x45\x46\x46\x45\x43T_MUTATION\x10\x02\"\x97\x01\n\x1e\x44\x65\x63lareSourceOperationsRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tsource_id\x18\x02 \x01(\tR\x08sourceId\x12\x41\n\noperations\x18\x03 \x03(\x0b\x32!.saas.accounts.v1.SourceOperationR\noperations\"d\n\x1f\x44\x65\x63lareSourceOperationsResponse\x12\x41\n\noperations\x18\x01 \x03(\x0b\x32!.saas.accounts.v1.SourceOperationR\noperations\"Q\n\x1bListSourceOperationsRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tsource_id\x18\x02 \x01(\tR\x08sourceId\"a\n\x1cListSourceOperationsResponse\x12\x41\n\noperations\x18\x01 \x03(\x0b\x32!.saas.accounts.v1.SourceOperationR\noperations\"\xac\x01\n\x1cInvokeSourceOperationRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tsource_id\x18\x02 \x01(\tR\x08sourceId\x12\x1c\n\toperation\x18\x03 \x01(\tR\toperation\x12\x1d\n\ninput_json\x18\x04 \x01(\tR\tinputJson\x12\x1b\n\teffect_id\x18\x05 \x01(\tR\x08\x65\x66\x66\x65\x63tId\"\xba\x01\n\x16SourceOperationReceipt\x12\x1b\n\teffect_id\x18\x01 \x01(\tR\x08\x65\x66\x66\x65\x63tId\x12!\n\x0c\x63ommitted_at\x18\x02 \x01(\tR\x0b\x63ommittedAt\x12\x16\n\x06status\x18\x03 \x01(\tR\x06status\x12\'\n\x0fprovider_status\x18\x04 \x01(\rR\x0eproviderStatus\x12\x1f\n\x0boutput_json\x18\x05 \x01(\tR\noutputJson\"\x84\x01\n\x1dInvokeSourceOperationResponse\x12\x1f\n\x0boutput_json\x18\x01 \x01(\tR\noutputJson\x12\x42\n\x07receipt\x18\x02 \x01(\x0b\x32(.saas.accounts.v1.SourceOperationReceiptR\x07receipt\"A\n\"LookupInvokeSourceOperationRequest\x12\x1b\n\teffect_id\x18\x01 \x01(\tR\x08\x65\x66\x66\x65\x63tId\"v\n#PruneSourceOperationReceiptsRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tsource_id\x18\x02 \x01(\tR\x08sourceId\x12\x1b\n\teffect_id\x18\x03 \x01(\tR\x08\x65\x66\x66\x65\x63tId\"w\n$PruneSourceOperationReceiptsResponse\x12\x1b\n\teffect_id\x18\x01 \x01(\tR\x08\x65\x66\x66\x65\x63tId\x12\x1a\n\x08receipts\x18\x02 \x01(\x03R\x08receipts\x12\x16\n\x06status\x18\x03 \x01(\tR\x06status\"H\n)LookupPruneSourceOperationReceiptsRequest\x12\x1b\n\teffect_id\x18\x01 \x01(\tR\x08\x65\x66\x66\x65\x63tId*\xb7\x01\n\x12\x44\x61tasourceProvider\x12#\n\x1f\x44\x41TASOURCE_PROVIDER_UNSPECIFIED\x10\x00\x12\x1e\n\x1a\x44\x41TASOURCE_PROVIDER_GITHUB\x10\x01\x12\x1b\n\x17\x44\x41TASOURCE_PROVIDER_API\x10\x02\x12\x1f\n\x1b\x44\x41TASOURCE_PROVIDER_CRAWLER\x10\x03\x12\x1e\n\x1a\x44\x41TASOURCE_PROVIDER_UPLOAD\x10\x04*\x91\x01\n\x10\x44\x61tasourceStatus\x12!\n\x1d\x44\x41TASOURCE_STATUS_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x44\x41TASOURCE_STATUS_ACTIVE\x10\x01\x12\x1c\n\x18\x44\x41TASOURCE_STATUS_PAUSED\x10\x02\x12\x1e\n\x1a\x44\x41TASOURCE_STATUS_DEGRADED\x10\x03*\xbc\x01\n\x16\x44\x61tasourceLiveDelivery\x12(\n$DATASOURCE_LIVE_DELIVERY_UNSPECIFIED\x10\x00\x12!\n\x1d\x44\x41TASOURCE_LIVE_DELIVERY_NONE\x10\x01\x12+\n\'DATASOURCE_LIVE_DELIVERY_SOURCE_WEBHOOK\x10\x02\x12(\n$DATASOURCE_LIVE_DELIVERY_APP_WEBHOOK\x10\x03*\xd6\x01\n\x11\x41piCredentialKind\x12#\n\x1f\x41PI_CREDENTIAL_KIND_UNSPECIFIED\x10\x00\x12\x1e\n\x1a\x41PI_CREDENTIAL_KIND_BEARER\x10\x01\x12\x1d\n\x19\x41PI_CREDENTIAL_KIND_BASIC\x10\x02\x12\x1e\n\x1a\x41PI_CREDENTIAL_KIND_HEADER\x10\x03\x12\x1d\n\x19\x41PI_CREDENTIAL_KIND_QUERY\x10\x04\x12\x1e\n\x1a\x41PI_CREDENTIAL_KIND_OAUTH2\x10\x05*\xa6\x02\n\x1c\x44\x61tasourceConnectorInterface\x12.\n*DATASOURCE_CONNECTOR_INTERFACE_UNSPECIFIED\x10\x00\x12(\n$DATASOURCE_CONNECTOR_INTERFACE_FILES\x10\x01\x12(\n$DATASOURCE_CONNECTOR_INTERFACE_PAGES\x10\x02\x12*\n&DATASOURCE_CONNECTOR_INTERFACE_RECORDS\x10\x03\x12+\n\'DATASOURCE_CONNECTOR_INTERFACE_MESSAGES\x10\x04\x12)\n%DATASOURCE_CONNECTOR_INTERFACE_EVENTS\x10\x05*\xec\x01\n\x18\x44\x61tasourceCredentialMode\x12*\n&DATASOURCE_CREDENTIAL_MODE_UNSPECIFIED\x10\x00\x12#\n\x1f\x44\x41TASOURCE_CREDENTIAL_MODE_NONE\x10\x01\x12&\n\"DATASOURCE_CREDENTIAL_MODE_ORG_APP\x10\x02\x12)\n%DATASOURCE_CREDENTIAL_MODE_USER_OAUTH\x10\x03\x12,\n(DATASOURCE_CREDENTIAL_MODE_STATIC_SECRET\x10\x04*\x97\x01\n\x16\x44\x61tasourceReadersModel\x12(\n$DATASOURCE_READERS_MODEL_UNSPECIFIED\x10\x00\x12*\n&DATASOURCE_READERS_MODEL_SOURCE_SCOPED\x10\x01\x12\'\n#DATASOURCE_READERS_MODEL_TRANSLATED\x10\x02*\xee\x01\n\x0fSourceSyncPhase\x12!\n\x1dSOURCE_SYNC_PHASE_UNSPECIFIED\x10\x00\x12\x1c\n\x18SOURCE_SYNC_PHASE_QUEUED\x10\x01\x12\x1e\n\x1aSOURCE_SYNC_PHASE_FETCHING\x10\x02\x12\x1e\n\x1aSOURCE_SYNC_PHASE_COMPILED\x10\x03\x12 \n\x1cSOURCE_SYNC_PHASE_HANDED_OFF\x10\x04\x12\x1a\n\x16SOURCE_SYNC_PHASE_DONE\x10\x05\x12\x1c\n\x18SOURCE_SYNC_PHASE_FAILED\x10\x06*\xa6\x03\n\x17SourceSyncFailureReason\x12*\n&SOURCE_SYNC_FAILURE_REASON_UNSPECIFIED\x10\x00\x12+\n\'SOURCE_SYNC_FAILURE_REASON_RATE_LIMITED\x10\x01\x12)\n%SOURCE_SYNC_FAILURE_REASON_CREDENTIAL\x10\x02\x12,\n(SOURCE_SYNC_FAILURE_REASON_ACCESS_DENIED\x10\x03\x12(\n$SOURCE_SYNC_FAILURE_REASON_NOT_FOUND\x10\x04\x12(\n$SOURCE_SYNC_FAILURE_REASON_TOO_LARGE\x10\x05\x12/\n+SOURCE_SYNC_FAILURE_REASON_HOST_UNAVAILABLE\x10\x06\x12$\n SOURCE_SYNC_FAILURE_REASON_OTHER\x10\x07\x12.\n*SOURCE_SYNC_FAILURE_REASON_DELIVERY_FAILED\x10\x08*\x9c\x01\n\x11SourceSyncTrigger\x12#\n\x1fSOURCE_SYNC_TRIGGER_UNSPECIFIED\x10\x00\x12\x1e\n\x1aSOURCE_SYNC_TRIGGER_MANUAL\x10\x01\x12!\n\x1dSOURCE_SYNC_TRIGGER_SCHEDULED\x10\x02\x12\x1f\n\x1bSOURCE_SYNC_TRIGGER_WEBHOOK\x10\x03*\x8f\x01\n\x16\x44\x61tasourceDomainStatus\x12(\n$DATASOURCE_DOMAIN_STATUS_UNSPECIFIED\x10\x00\x12$\n DATASOURCE_DOMAIN_STATUS_PENDING\x10\x01\x12%\n!DATASOURCE_DOMAIN_STATUS_VERIFIED\x10\x02*\x95\x03\n\x1aSourceDelegationRevocation\x12,\n(SOURCE_DELEGATION_REVOCATION_UNSPECIFIED\x10\x00\x12(\n$SOURCE_DELEGATION_REVOCATION_REVOKED\x10\x01\x12)\n%SOURCE_DELEGATION_REVOCATION_REPLACED\x10\x02\x12/\n+SOURCE_DELEGATION_REVOCATION_SOURCE_DELETED\x10\x03\x12/\n+SOURCE_DELEGATION_REVOCATION_MEMBER_REMOVED\x10\x04\x12\x30\n,SOURCE_DELEGATION_REVOCATION_PERMISSION_LOST\x10\x05\x12.\n*SOURCE_DELEGATION_REVOCATION_USER_INACTIVE\x10\x06\x12\x30\n,SOURCE_DELEGATION_REVOCATION_BINDING_CHANGED\x10\x07\x32\xbd\x1b\n\x11\x44\x61tasourceService\x12\x8d\x01\n\x1cPruneSourceOperationReceipts\x12\x35.saas.accounts.v1.PruneSourceOperationReceiptsRequest\x1a\x36.saas.accounts.v1.PruneSourceOperationReceiptsResponse\x12\x99\x01\n\"LookupPruneSourceOperationReceipts\x12;.saas.accounts.v1.LookupPruneSourceOperationReceiptsRequest\x1a\x36.saas.accounts.v1.PruneSourceOperationReceiptsResponse\x12x\n\x15InvokeSourceOperation\x12..saas.accounts.v1.InvokeSourceOperationRequest\x1a/.saas.accounts.v1.InvokeSourceOperationResponse\x12\x84\x01\n\x1bLookupInvokeSourceOperation\x12\x34.saas.accounts.v1.LookupInvokeSourceOperationRequest\x1a/.saas.accounts.v1.InvokeSourceOperationResponse\x12u\n\x14ListSourceOperations\x12-.saas.accounts.v1.ListSourceOperationsRequest\x1a..saas.accounts.v1.ListSourceOperationsResponse\x12~\n\x17\x44\x65\x63lareSourceOperations\x12\x30.saas.accounts.v1.DeclareSourceOperationsRequest\x1a\x31.saas.accounts.v1.DeclareSourceOperationsResponse\x12\x66\n\x0f\x41\x64\x64GitHubSource\x12(.saas.accounts.v1.AddGitHubSourceRequest\x1a).saas.accounts.v1.AddGitHubSourceResponse\x12T\n\tAddSource\x12\".saas.accounts.v1.AddSourceRequest\x1a#.saas.accounts.v1.AddSourceResponse\x12u\n\x14GetDatasourceCatalog\x12-.saas.accounts.v1.GetDatasourceCatalogRequest\x1a..saas.accounts.v1.GetDatasourceCatalogResponse\x12Z\n\x0bListSources\x12$.saas.accounts.v1.ListSourcesRequest\x1a%.saas.accounts.v1.ListSourcesResponse\x12T\n\tGetSource\x12\".saas.accounts.v1.GetSourceRequest\x1a#.saas.accounts.v1.GetSourceResponse\x12W\n\nSyncSource\x12#.saas.accounts.v1.SyncSourceRequest\x1a$.saas.accounts.v1.SyncSourceResponse\x12`\n\rGetSourceSync\x12&.saas.accounts.v1.GetSourceSyncRequest\x1a\'.saas.accounts.v1.GetSourceSyncResponse\x12]\n\x0c\x44\x65leteSource\x12%.saas.accounts.v1.DeleteSourceRequest\x1a&.saas.accounts.v1.DeleteSourceResponse\x12r\n\x13\x42\x65ginGitHubAppSetup\x12,.saas.accounts.v1.BeginGitHubAppSetupRequest\x1a-.saas.accounts.v1.BeginGitHubAppSetupResponse\x12{\n\x16\x43ompleteGitHubAppSetup\x12/.saas.accounts.v1.CompleteGitHubAppSetupRequest\x1a\x30.saas.accounts.v1.CompleteGitHubAppSetupResponse\x12\x81\x01\n\x18MigrateGitHubSourceToApp\x12\x31.saas.accounts.v1.MigrateGitHubSourceToAppRequest\x1a\x32.saas.accounts.v1.MigrateGitHubSourceToAppResponse\x12\x87\x01\n\x1a\x42\x65ginDatasourceAccountLink\x12\x33.saas.accounts.v1.BeginDatasourceAccountLinkRequest\x1a\x34.saas.accounts.v1.BeginDatasourceAccountLinkResponse\x12\x90\x01\n\x1d\x43ompleteDatasourceAccountLink\x12\x36.saas.accounts.v1.CompleteDatasourceAccountLinkRequest\x1a\x37.saas.accounts.v1.CompleteDatasourceAccountLinkResponse\x12\x8d\x01\n\x1cListMyDatasourceAccountLinks\x12\x35.saas.accounts.v1.ListMyDatasourceAccountLinksRequest\x1a\x36.saas.accounts.v1.ListMyDatasourceAccountLinksResponse\x12\x8a\x01\n\x1b\x44\x65leteDatasourceAccountLink\x12\x34.saas.accounts.v1.DeleteDatasourceAccountLinkRequest\x1a\x35.saas.accounts.v1.DeleteDatasourceAccountLinkResponse\x12{\n\x16GetDatasourceDirectory\x12/.saas.accounts.v1.GetDatasourceDirectoryRequest\x1a\x30.saas.accounts.v1.GetDatasourceDirectoryResponse\x12r\n\x13\x42indDatasourceGroup\x12,.saas.accounts.v1.BindDatasourceGroupRequest\x1a-.saas.accounts.v1.BindDatasourceGroupResponse\x12x\n\x15UnbindDatasourceGroup\x12..saas.accounts.v1.UnbindDatasourceGroupRequest\x1a/.saas.accounts.v1.UnbindDatasourceGroupResponse\x12x\n\x15\x43laimDatasourceDomain\x12..saas.accounts.v1.ClaimDatasourceDomainRequest\x1a/.saas.accounts.v1.ClaimDatasourceDomainResponse\x12{\n\x16VerifyDatasourceDomain\x12/.saas.accounts.v1.VerifyDatasourceDomainRequest\x1a\x30.saas.accounts.v1.VerifyDatasourceDomainResponse\x12{\n\x16\x44\x65leteDatasourceDomain\x12/.saas.accounts.v1.DeleteDatasourceDomainRequest\x1a\x30.saas.accounts.v1.DeleteDatasourceDomainResponse\x12x\n\x15ListSourceDelegations\x12..saas.accounts.v1.ListSourceDelegationsRequest\x1a/.saas.accounts.v1.ListSourceDelegationsResponse\x12{\n\x16RevokeSourceDelegation\x12/.saas.accounts.v1.RevokeSourceDelegationRequest\x1a\x30.saas.accounts.v1.RevokeSourceDelegationResponseB\x89\x01\n\x14\x63om.saas.accounts.v1B\x0f\x44\x61tasourceProtoP\x01\xa2\x02\x03SAX\xaa\x02\x10Saas.Accounts.V1\xca\x02\x10Saas\\Accounts\\V1\xe2\x02\x1cSaas\\Accounts\\V1\\GPBMetadata\xea\x02\x12Saas::Accounts::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!saas/accounts/v1/datasource.proto\x12\x10saas.accounts.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x18saas_sdk/_gen/jobs.proto\"\x83\x01\n\x16GitHubDatasourceConfig\x12\x12\n\x04repo\x18\x01 \x01(\tR\x04repo\x12\x14\n\x05paths\x18\x02 \x03(\tR\x05paths\x12\x16\n\x06\x62ranch\x18\x03 \x01(\tR\x06\x62ranch\x12\'\n\x0f\x66ile_extensions\x18\x04 \x03(\tR\x0e\x66ileExtensions\"\x97\x02\n\x0f\x41piOAuth2Config\x12=\n\x05grant\x18\x04 \x01(\x0e\x32\'.saas.accounts.v1.ApiOAuth2Config.GrantR\x05grant\x12\x1b\n\ttoken_url\x18\x01 \x01(\tR\x08tokenUrl\x12\x1b\n\tclient_id\x18\x02 \x01(\tR\x08\x63lientId\x12\x16\n\x06scopes\x18\x03 \x03(\tR\x06scopes\"s\n\x05Grant\x12\x15\n\x11GRANT_UNSPECIFIED\x10\x00\x12\x17\n\x13GRANT_REFRESH_TOKEN\x10\x01\x12\x1c\n\x18GRANT_CLIENT_CREDENTIALS\x10\x02\x12\x1c\n\x18GRANT_AUTHORIZATION_CODE\x10\x03\"\xc1\x02\n\x13\x41piDatasourceConfig\x12\x19\n\x08\x62\x61se_url\x18\x01 \x01(\tR\x07\x62\x61seUrl\x12#\n\rresource_path\x18\x02 \x01(\tR\x0cresourcePath\x12L\n\x0f\x63redential_kind\x18\x03 \x01(\x0e\x32#.saas.accounts.v1.ApiCredentialKindR\x0e\x63redentialKind\x12+\n\x11\x63redential_header\x18\x04 \x01(\tR\x10\x63redentialHeader\x12\x34\n\x16\x63redential_query_param\x18\x05 \x01(\tR\x14\x63redentialQueryParam\x12\x39\n\x06oauth2\x18\x06 \x01(\x0b\x32!.saas.accounts.v1.ApiOAuth2ConfigR\x06oauth2\"W\n\x17\x43rawlerDatasourceConfig\x12\x1f\n\x0bsitemap_url\x18\x01 \x01(\tR\nsitemapUrl\x12\x1b\n\tmax_pages\x18\x02 \x01(\rR\x08maxPages\"\xc1\x01\n\x16UploadDatasourceConfig\x12\x1a\n\x08\x65ndpoint\x18\x01 \x01(\tR\x08\x65ndpoint\x12\x16\n\x06region\x18\x02 \x01(\tR\x06region\x12\x16\n\x06\x62ucket\x18\x03 \x01(\tR\x06\x62ucket\x12\x16\n\x06prefix\x18\x04 \x01(\tR\x06prefix\x12\"\n\raccess_key_id\x18\x05 \x01(\tR\x0b\x61\x63\x63\x65ssKeyId\x12\x1f\n\x0bmax_objects\x18\x06 \x01(\rR\nmaxObjects\"\x83\t\n\nDatasource\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x15\n\x06org_id\x18\x02 \x01(\tR\x05orgId\x12@\n\x08provider\x18\x03 \x01(\x0e\x32$.saas.accounts.v1.DatasourceProviderR\x08provider\x12@\n\x06github\x18\x05 \x01(\x0b\x32(.saas.accounts.v1.GitHubDatasourceConfigR\x06github\x12:\n\x06status\x18\x06 \x01(\x0e\x32\".saas.accounts.v1.DatasourceStatusR\x06status\x12-\n\x12webhook_configured\x18\x07 \x01(\x08R\x11webhookConfigured\x12\x39\n\ncreated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12@\n\x0elast_synced_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0clastSyncedAt\x12\x37\n\x03\x61pi\x18\x0b \x01(\x0b\x32%.saas.accounts.v1.ApiDatasourceConfigR\x03\x61pi\x12\x43\n\x07\x63rawler\x18\x0c \x01(\x0b\x32).saas.accounts.v1.CrawlerDatasourceConfigR\x07\x63rawler\x12@\n\x06upload\x18\r \x01(\x0b\x32(.saas.accounts.v1.UploadDatasourceConfigR\x06upload\x12(\n\x10\x62oundary_node_id\x18\x0e \x01(\tR\x0e\x62oundaryNodeId\x12\x44\n\x10last_ingested_at\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0elastIngestedAt\x12\x30\n\x14last_ingested_commit\x18\x10 \x01(\tR\x12lastIngestedCommit\x12#\n\rstatus_reason\x18\x11 \x01(\tR\x0cstatusReason\x12%\n\x0e\x62oundary_label\x18\x12 \x01(\tR\rboundaryLabel\x12\x1e\n\nconformant\x18\x13 \x01(\x08R\nconformant\x12\'\n\x0f\x63onformance_gap\x18\x14 \x01(\tR\x0e\x63onformanceGap\x12M\n\rlive_delivery\x18\x15 \x01(\x0e\x32(.saas.accounts.v1.DatasourceLiveDeliveryR\x0cliveDelivery\x12H\n\x12reconcile_interval\x18\x16 \x01(\x0b\x32\x19.google.protobuf.DurationR\x11reconcileIntervalJ\x04\x08\x04\x10\x05R\x11target_collection\"\xe9\x02\n\x16\x41\x64\x64GitHubSourceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x12\n\x04repo\x18\x02 \x01(\tR\x04repo\x12\x14\n\x05paths\x18\x03 \x03(\tR\x05paths\x12\x16\n\x06\x62ranch\x18\x04 \x01(\tR\x06\x62ranch\x12*\n\x10\x62oundary_node_id\x18\x08 \x01(\tH\x00R\x0e\x62oundaryNodeId\x12+\n\x10\x63ollection_label\x18\t \x01(\tH\x00R\x0f\x63ollectionLabel\x12!\n\x0c\x61\x63\x63\x65ss_token\x18\x06 \x01(\tR\x0b\x61\x63\x63\x65ssToken\x12%\n\x0ewebhook_secret\x18\x07 \x01(\tR\rwebhookSecret\x12\'\n\x0f\x66ile_extensions\x18\n \x03(\tR\x0e\x66ileExtensionsB\x11\n\x08\x62oundary\x12\x05\xbaH\x02\x08\x01J\x04\x08\x05\x10\x06R\x11target_collection\"W\n\x17\x41\x64\x64GitHubSourceResponse\x12<\n\ndatasource\x18\x01 \x01(\x0b\x32\x1c.saas.accounts.v1.DatasourceR\ndatasource\"\xfd\x04\n\x10\x41\x64\x64SourceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12@\n\x08provider\x18\x02 \x01(\x0e\x32$.saas.accounts.v1.DatasourceProviderR\x08provider\x12\x42\n\x06github\x18\x04 \x01(\x0b\x32(.saas.accounts.v1.GitHubDatasourceConfigH\x00R\x06github\x12\x39\n\x03\x61pi\x18\x05 \x01(\x0b\x32%.saas.accounts.v1.ApiDatasourceConfigH\x00R\x03\x61pi\x12\x45\n\x07\x63rawler\x18\x08 \x01(\x0b\x32).saas.accounts.v1.CrawlerDatasourceConfigH\x00R\x07\x63rawler\x12\x42\n\x06upload\x18\t \x01(\x0b\x32(.saas.accounts.v1.UploadDatasourceConfigH\x00R\x06upload\x12*\n\x10\x62oundary_node_id\x18\x0c \x01(\tH\x01R\x0e\x62oundaryNodeId\x12+\n\x10\x63ollection_label\x18\r \x01(\tH\x01R\x0f\x63ollectionLabel\x12\x1e\n\ncredential\x18\x06 \x01(\tR\ncredential\x12%\n\x0ewebhook_secret\x18\x07 \x01(\tR\rwebhookSecret\x12\x30\n\x14oauth2_client_secret\x18\n \x01(\tR\x12oauth2ClientSecretB\x08\n\x06\x63onfigB\x11\n\x08\x62oundary\x12\x05\xbaH\x02\x08\x01J\x04\x08\x03\x10\x04R\x11target_collection\"Q\n\x11\x41\x64\x64SourceResponse\x12<\n\ndatasource\x18\x01 \x01(\x0b\x32\x1c.saas.accounts.v1.DatasourceR\ndatasource\"\xd3\x01\n\x13UpdateSourceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x16\n\x06\x62ranch\x18\x03 \x01(\tR\x06\x62ranch\x12\x14\n\x05paths\x18\x04 \x03(\tR\x05paths\x12\'\n\x0f\x66ile_extensions\x18\x05 \x03(\tR\x0e\x66ileExtensions\x12>\n\x08\x65xpected\x18\x06 \x01(\x0b\x32\".saas.accounts.v1.SourceFetchScopeR\x08\x65xpected\"i\n\x10SourceFetchScope\x12\x16\n\x06\x62ranch\x18\x01 \x01(\tR\x06\x62ranch\x12\x14\n\x05paths\x18\x02 \x03(\tR\x05paths\x12\'\n\x0f\x66ile_extensions\x18\x03 \x03(\tR\x0e\x66ileExtensions\"k\n\x14UpdateSourceResponse\x12<\n\ndatasource\x18\x01 \x01(\x0b\x32\x1c.saas.accounts.v1.DatasourceR\ndatasource\x12\x15\n\x06job_id\x18\x02 \x01(\tR\x05jobId\"|\n\x15\x44\x61tasourceConfigField\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12!\n\x0c\x64isplay_name\x18\x02 \x01(\tR\x0b\x64isplayName\x12\x12\n\x04help\x18\x03 \x01(\tR\x04help\x12\x1a\n\x08required\x18\x04 \x01(\x08R\x08required\"\xb0\x02\n\x19\x44\x61tasourceConnectorBudget\x12+\n\x12max_items_per_call\x18\x01 \x01(\rR\x0fmaxItemsPerCall\x12+\n\x12max_bytes_per_call\x18\x02 \x01(\x03R\x0fmaxBytesPerCall\x12$\n\x0emax_item_bytes\x18\x03 \x01(\x03R\x0cmaxItemBytes\x12\x32\n\x15operations_per_window\x18\x04 \x01(\rR\x13operationsPerWindow\x12%\n\x0ewindow_seconds\x18\x05 \x01(\x03R\rwindowSeconds\x12\x38\n\x18\x62\x61\x63kground_share_percent\x18\x06 \x01(\rR\x16\x62\x61\x63kgroundSharePercent\"\xdc\x08\n\x1c\x44\x61tasourceProviderDescriptor\x12@\n\x08provider\x18\x01 \x01(\x0e\x32$.saas.accounts.v1.DatasourceProviderR\x08provider\x12!\n\x0c\x64isplay_name\x18\x02 \x01(\tR\x0b\x64isplayName\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12L\n\rconfig_fields\x18\x04 \x03(\x0b\x32\'.saas.accounts.v1.DatasourceConfigFieldR\x0c\x63onfigFields\x12)\n\x10supports_webhook\x18\x05 \x01(\x08R\x0fsupportsWebhook\x12\x61\n\x1asupported_credential_kinds\x18\x06 \x03(\x0e\x32#.saas.accounts.v1.ApiCredentialKindR\x18supportedCredentialKinds\x12\x1c\n\tconnector\x18\x07 \x01(\tR\tconnector\x12L\n\tinterface\x18\x08 \x01(\x0e\x32..saas.accounts.v1.DatasourceConnectorInterfaceR\tinterface\x12U\n\x10\x63redential_modes\x18\t \x03(\x0e\x32*.saas.accounts.v1.DatasourceCredentialModeR\x0f\x63redentialModes\x12M\n\rreaders_model\x18\n \x01(\x0e\x32(.saas.accounts.v1.DatasourceReadersModelR\x0creadersModel\x12\x43\n\x06\x62udget\x18\x0b \x01(\x0b\x32+.saas.accounts.v1.DatasourceConnectorBudgetR\x06\x62udget\x12\x1e\n\nconformant\x18\x0c \x01(\x08R\nconformant\x12\'\n\x0f\x63onformance_gap\x18\r \x01(\tR\x0e\x63onformanceGap\x12.\n\x13\x61\x63\x63\x65pts_new_sources\x18\x0e \x01(\x08R\x11\x61\x63\x63\x65ptsNewSources\x12\x38\n\x18live_delivery_configured\x18\x0f \x01(\x08R\x16liveDeliveryConfigured\x12-\n\x12\x61\x63\x63\x65pts_operations\x18\x10 \x01(\x08R\x11\x61\x63\x63\x65ptsOperations\x12%\n\x0eoperations_gap\x18\x11 \x01(\tR\roperationsGap\x12.\n\x13oauth_authorize_url\x18\x12 \x01(\tR\x11oauthAuthorizeUrl\x12&\n\x0foauth_token_url\x18\x13 \x01(\tR\roauthTokenUrl\x12!\n\x0coauth_scopes\x18\x14 \x03(\tR\x0boauthScopes\"\x1d\n\x1bGetDatasourceCatalogRequest\"l\n\x1cGetDatasourceCatalogResponse\x12L\n\tproviders\x18\x01 \x03(\x0b\x32..saas.accounts.v1.DatasourceProviderDescriptorR\tproviders\"+\n\x12ListSourcesRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\"U\n\x13ListSourcesResponse\x12>\n\x0b\x64\x61tasources\x18\x01 \x03(\x0b\x32\x1c.saas.accounts.v1.DatasourceR\x0b\x64\x61tasources\"9\n\x10GetSourceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"Q\n\x11GetSourceResponse\x12<\n\ndatasource\x18\x01 \x01(\x0b\x32\x1c.saas.accounts.v1.DatasourceR\ndatasource\"{\n\x11SyncSourceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12!\n\x0c\x61\x63\x63\x65ss_token\x18\x03 \x01(\tR\x0b\x61\x63\x63\x65ssToken\x12\x1c\n\treconnect\x18\x04 \x01(\x08R\treconnect\"+\n\x12SyncSourceResponse\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\"a\n\x14GetSourceSyncRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tsource_id\x18\x02 \x01(\tR\x08sourceId\x12\x15\n\x06job_id\x18\x03 \x01(\tR\x05jobId\"\x9c\x01\n\x12SourceSyncDelivery\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\x12,\n\x05state\x18\x02 \x01(\x0e\x32\x16.saas.jobs.v1.JobStateR\x05state\x12\x41\n\texecution\x18\x03 \x01(\x0b\x32#.saas.jobs.v1.JobExecutionReferenceR\texecution\"\xca\x01\n\x11SourceSyncChanges\x12\x14\n\x05\x66iles\x18\x01 \x01(\rR\x05\x66iles\x12\x14\n\x05\x61\x64\x64\x65\x64\x18\x02 \x01(\rR\x05\x61\x64\x64\x65\x64\x12\x1a\n\x08modified\x18\x03 \x01(\rR\x08modified\x12\x18\n\x07\x64\x65leted\x18\x04 \x01(\rR\x07\x64\x65leted\x12\x1f\n\x0bsplit_known\x18\x05 \x01(\x08R\nsplitKnown\x12\x1a\n\x08snapshot\x18\x06 \x01(\x08R\x08snapshot\x12\x16\n\x06\x63ommit\x18\x07 \x01(\tR\x06\x63ommit\"\xd7\x01\n\x11SourceSyncFailure\x12\x41\n\x06reason\x18\x01 \x01(\x0e\x32).saas.accounts.v1.SourceSyncFailureReasonR\x06reason\x12\x12\n\x04\x63ode\x18\x02 \x01(\tR\x04\x63ode\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\x12\x1a\n\x08retrying\x18\x04 \x01(\x08R\x08retrying\x12\x35\n\x08retry_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07retryAt\"\xf7\x04\n\x12SourceSyncProgress\x12\x37\n\x05phase\x18\x01 \x01(\x0e\x32!.saas.accounts.v1.SourceSyncPhaseR\x05phase\x12=\n\x07trigger\x18\x02 \x01(\x0e\x32#.saas.accounts.v1.SourceSyncTriggerR\x07trigger\x12\x37\n\tqueued_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x08queuedAt\x12;\n\x0b\x66\x65tching_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nfetchingAt\x12;\n\x0b\x63ompiled_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncompiledAt\x12>\n\rhanded_off_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0bhandedOffAt\x12;\n\x0b\x66inished_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nfinishedAt\x12=\n\x07\x63hanges\x18\x08 \x01(\x0b\x32#.saas.accounts.v1.SourceSyncChangesR\x07\x63hanges\x12=\n\x07\x66\x61ilure\x18\t \x01(\x0b\x32#.saas.accounts.v1.SourceSyncFailureR\x07\x66\x61ilure\x12\x18\n\x07\x61ttempt\x18\n \x01(\rR\x07\x61ttempt\x12!\n\x0cmax_attempts\x18\x0b \x01(\rR\x0bmaxAttempts\"\xe4\x01\n\x15GetSourceSyncResponse\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\x12,\n\x05state\x18\x02 \x01(\x0e\x32\x16.saas.jobs.v1.JobStateR\x05state\x12\x44\n\ndeliveries\x18\x03 \x03(\x0b\x32$.saas.accounts.v1.SourceSyncDeliveryR\ndeliveries\x12@\n\x08progress\x18\x04 \x01(\x0b\x32$.saas.accounts.v1.SourceSyncProgressR\x08progress\"<\n\x13\x44\x65leteSourceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"\x16\n\x14\x44\x65leteSourceResponse\"}\n\x13GitHubAppRepository\x12\x12\n\x04repo\x18\x01 \x01(\tR\x04repo\x12%\n\x0e\x64\x65\x66\x61ult_branch\x18\x02 \x01(\tR\rdefaultBranch\x12+\n\x11\x61lready_connected\x18\x03 \x01(\x08R\x10\x61lreadyConnected\"3\n\x1a\x42\x65ginGitHubAppSetupRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\"\x8f\x01\n\x1b\x42\x65ginGitHubAppSetupResponse\x12\x1f\n\x0binstall_url\x18\x01 \x01(\tR\ninstallUrl\x12\x14\n\x05state\x18\x02 \x01(\tR\x05state\x12\x39\n\nexpires_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\"\x89\x01\n\x1d\x43ompleteGitHubAppSetupRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x14\n\x05state\x18\x02 \x01(\tR\x05state\x12\'\n\x0finstallation_id\x18\x03 \x01(\tR\x0einstallationId\x12\x12\n\x04\x63ode\x18\x04 \x01(\tR\x04\x63ode\"\x94\x01\n\x1e\x43ompleteGitHubAppSetupResponse\x12\'\n\x0finstallation_id\x18\x01 \x01(\tR\x0einstallationId\x12I\n\x0crepositories\x18\x02 \x03(\x0b\x32%.saas.accounts.v1.GitHubAppRepositoryR\x0crepositories\"H\n\x1fMigrateGitHubSourceToAppRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"`\n MigrateGitHubSourceToAppResponse\x12<\n\ndatasource\x18\x01 \x01(\x0b\x32\x1c.saas.accounts.v1.DatasourceR\ndatasource\"\x96\x02\n\x15\x44\x61tasourceAccountLink\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x15\n\x06org_id\x18\x02 \x01(\tR\x05orgId\x12\x17\n\x07user_id\x18\x03 \x01(\tR\x06userId\x12\x1c\n\tconnector\x18\x04 \x01(\tR\tconnector\x12.\n\x13provider_account_id\x18\x05 \x01(\tR\x11providerAccountId\x12\x34\n\x16provider_account_login\x18\x06 \x01(\tR\x14providerAccountLogin\x12\x39\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\"\xfc\x01\n\x16\x44\x61tasourceGroupBinding\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x15\n\x06org_id\x18\x02 \x01(\tR\x05orgId\x12\x1c\n\tconnector\x18\x03 \x01(\tR\tconnector\x12*\n\x11provider_group_id\x18\x04 \x01(\tR\x0fproviderGroupId\x12\x17\n\x07team_id\x18\x05 \x01(\tR\x06teamId\x12\x1d\n\ncreated_by\x18\x06 \x01(\tR\tcreatedBy\x12\x39\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\"\xe5\x02\n\x18\x44\x61tasourceVerifiedDomain\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x15\n\x06org_id\x18\x02 \x01(\tR\x05orgId\x12\x16\n\x06\x64omain\x18\x03 \x01(\tR\x06\x64omain\x12@\n\x06status\x18\x04 \x01(\x0e\x32(.saas.accounts.v1.DatasourceDomainStatusR\x06status\x12&\n\x0ftxt_record_name\x18\x05 \x01(\tR\rtxtRecordName\x12(\n\x10txt_record_value\x18\x06 \x01(\tR\x0etxtRecordValue\x12;\n\x0bverified_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nverifiedAt\x12\x39\n\ncreated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\"=\n\x17\x44\x61tasourceDirectoryTeam\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\"\x98\x01\n!BeginDatasourceAccountLinkRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1c\n\tconnector\x18\x02 \x01(\tR\tconnector\x12!\n\x0credirect_uri\x18\x03 \x01(\tR\x0bredirectUri\x12\x1b\n\tsource_id\x18\x04 \x01(\tR\x08sourceId\"\x9a\x01\n\"BeginDatasourceAccountLinkResponse\x12#\n\rauthorize_url\x18\x01 \x01(\tR\x0c\x61uthorizeUrl\x12\x14\n\x05state\x18\x02 \x01(\tR\x05state\x12\x39\n\nexpires_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\"g\n$CompleteDatasourceAccountLinkRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x14\n\x05state\x18\x02 \x01(\tR\x05state\x12\x12\n\x04\x63ode\x18\x03 \x01(\tR\x04\x63ode\"d\n%CompleteDatasourceAccountLinkResponse\x12;\n\x04link\x18\x01 \x01(\x0b\x32\'.saas.accounts.v1.DatasourceAccountLinkR\x04link\"<\n#ListMyDatasourceAccountLinksRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\"e\n$ListMyDatasourceAccountLinksResponse\x12=\n\x05links\x18\x01 \x03(\x0b\x32\'.saas.accounts.v1.DatasourceAccountLinkR\x05links\"K\n\"DeleteDatasourceAccountLinkRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"%\n#DeleteDatasourceAccountLinkResponse\"6\n\x1dGetDatasourceDirectoryRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\"\xac\x02\n\x1eGetDatasourceDirectoryResponse\x12=\n\x05links\x18\x01 \x03(\x0b\x32\'.saas.accounts.v1.DatasourceAccountLinkR\x05links\x12\x44\n\x08\x62indings\x18\x02 \x03(\x0b\x32(.saas.accounts.v1.DatasourceGroupBindingR\x08\x62indings\x12\x44\n\x07\x64omains\x18\x03 \x03(\x0b\x32*.saas.accounts.v1.DatasourceVerifiedDomainR\x07\x64omains\x12?\n\x05teams\x18\x04 \x03(\x0b\x32).saas.accounts.v1.DatasourceDirectoryTeamR\x05teams\"\x96\x01\n\x1a\x42indDatasourceGroupRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1c\n\tconnector\x18\x02 \x01(\tR\tconnector\x12*\n\x11provider_group_id\x18\x03 \x01(\tR\x0fproviderGroupId\x12\x17\n\x07team_id\x18\x04 \x01(\tR\x06teamId\"a\n\x1b\x42indDatasourceGroupResponse\x12\x42\n\x07\x62inding\x18\x01 \x01(\x0b\x32(.saas.accounts.v1.DatasourceGroupBindingR\x07\x62inding\"E\n\x1cUnbindDatasourceGroupRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"\x1f\n\x1dUnbindDatasourceGroupResponse\"M\n\x1c\x43laimDatasourceDomainRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\"c\n\x1d\x43laimDatasourceDomainResponse\x12\x42\n\x06\x64omain\x18\x01 \x01(\x0b\x32*.saas.accounts.v1.DatasourceVerifiedDomainR\x06\x64omain\"F\n\x1dVerifyDatasourceDomainRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"d\n\x1eVerifyDatasourceDomainResponse\x12\x42\n\x06\x64omain\x18\x01 \x01(\x0b\x32*.saas.accounts.v1.DatasourceVerifiedDomainR\x06\x64omain\"F\n\x1d\x44\x65leteDatasourceDomainRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\" \n\x1e\x44\x65leteDatasourceDomainResponse\"\xf7\x02\n\x10SourceDelegation\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1b\n\tsource_id\x18\x02 \x01(\tR\x08sourceId\x12!\n\x0cprincipal_id\x18\x03 \x01(\tR\x0bprincipalId\x12\x16\n\x06module\x18\x04 \x01(\tR\x06module\x12\x18\n\x07\x62inding\x18\x05 \x01(\tR\x07\x62inding\x12\x39\n\ncreated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nrevoked_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\trevokedAt\x12L\n\nrevocation\x18\x08 \x01(\x0e\x32,.saas.accounts.v1.SourceDelegationRevocationR\nrevocation\x12\x1d\n\nrevoked_by\x18\t \x01(\tR\trevokedBy\"\x8e\x01\n\x1cListSourceDelegationsRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12 \n\tsource_id\x18\x02 \x01(\tH\x00R\x08sourceId\x88\x01\x01\x12\'\n\x0finclude_revoked\x18\x03 \x01(\x08R\x0eincludeRevokedB\x0c\n\n_source_id\"e\n\x1dListSourceDelegationsResponse\x12\x44\n\x0b\x64\x65legations\x18\x01 \x03(\x0b\x32\".saas.accounts.v1.SourceDelegationR\x0b\x64\x65legations\"F\n\x1dRevokeSourceDelegationRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"d\n\x1eRevokeSourceDelegationResponse\x12\x42\n\ndelegation\x18\x01 \x01(\x0b\x32\".saas.accounts.v1.SourceDelegationR\ndelegation\"C\n\x0fTriggerIdentity\x12\x16\n\x06source\x18\x01 \x01(\tR\x06source\x12\x18\n\x07\x62inding\x18\x02 \x01(\tR\x07\x62inding\"\xbd\x01\n\x17\x44\x65\x63laredTriggerSchedule\x12\x12\n\x04\x63ron\x18\x01 \x01(\tR\x04\x63ron\x12\x1a\n\x08timezone\x18\x02 \x01(\tR\x08timezone\x12\x1d\n\nmissed_run\x18\x03 \x01(\tR\tmissedRun\x12\x18\n\x07overlap\x18\x04 \x01(\tR\x07overlap\x12\x1a\n\x08\x64\x65\x61\x64line\x18\x05 \x01(\x03R\x08\x64\x65\x61\x64line\x12\x1d\n\ninput_json\x18\x06 \x01(\tR\tinputJson\"\xe7\x03\n\x1aTriggerDelegationReference\x12\x1c\n\treference\x18\x01 \x01(\tR\treference\x12#\n\rdelegation_id\x18\x02 \x01(\tR\x0c\x64\x65legationId\x12\x16\n\x06module\x18\x03 \x01(\tR\x06module\x12\x18\n\x07\x62inding\x18\x04 \x01(\tR\x07\x62inding\x12\x1a\n\x08\x61udience\x18\x05 \x01(\tR\x08\x61udience\x12\x16\n\x06tenant\x18\x06 \x01(\tR\x06tenant\x12,\n\x12owner_principal_id\x18\x07 \x01(\tR\x10ownerPrincipalId\x12\x16\n\x06scopes\x18\x08 \x03(\tR\x06scopes\x12\x16\n\x06\x61\x63tive\x18\t \x01(\x08R\x06\x61\x63tive\x12\x39\n\ncreated_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nrevoked_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampR\trevokedAt\x12L\n\nrevocation\x18\x0c \x01(\x0e\x32,.saas.accounts.v1.SourceDelegationRevocationR\nrevocation\"\x89\x02\n\x13TriggerChildContext\x12#\n\rdelegation_id\x18\x01 \x01(\tR\x0c\x64\x65legationId\x12\x16\n\x06module\x18\x02 \x01(\tR\x06module\x12\x18\n\x07\x62inding\x18\x03 \x01(\tR\x07\x62inding\x12\x1a\n\x08\x61udience\x18\x04 \x01(\tR\x08\x61udience\x12\x16\n\x06scopes\x18\x05 \x03(\tR\x06scopes\x12\x16\n\x06lookup\x18\x06 \x01(\x08R\x06lookup\x12\x37\n\tminted_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x08mintedAt\x12\x16\n\x06record\x18\x08 \x01(\tR\x06record\"\xb5\x03\n\x18SourceTriggerDeclaration\x12\x18\n\x07release\x18\x01 \x01(\tR\x07release\x12\x1c\n\toperation\x18\x02 \x01(\tR\toperation\x12\x45\n\x08schedule\x18\x03 \x01(\x0b\x32).saas.accounts.v1.DeclaredTriggerScheduleR\x08schedule\x12=\n\x08identity\x18\x04 \x01(\x0b\x32!.saas.accounts.v1.TriggerIdentityR\x08identity\x12\x16\n\x06\x64igest\x18\x05 \x01(\tR\x06\x64igest\x12H\n\x12last_occurrence_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x10lastOccurrenceAt\x12H\n\x12next_occurrence_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x10nextOccurrenceAt\x12/\n\x13undeclarable_reason\x18\x08 \x01(\tR\x12undeclarableReason\"S\n\x1d\x44\x65legateSourceTriggersRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tsource_id\x18\x02 \x01(\tR\x08sourceId\"p\n\x1e\x44\x65legateSourceTriggersResponse\x12N\n\x0b\x64\x65legations\x18\x01 \x03(\x0b\x32,.saas.accounts.v1.TriggerDelegationReferenceR\x0b\x64\x65legations\"X\n\"GetSourceTriggerDeclarationRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tsource_id\x18\x02 \x01(\tR\x08sourceId\"\x86\x02\n#GetSourceTriggerDeclarationResponse\x12L\n\x0b\x64\x65\x63laration\x18\x01 \x01(\x0b\x32*.saas.accounts.v1.SourceTriggerDeclarationR\x0b\x64\x65\x63laration\x12N\n\x0b\x64\x65legations\x18\x02 \x03(\x0b\x32,.saas.accounts.v1.TriggerDelegationReferenceR\x0b\x64\x65legations\x12\x41\n\x08\x63hildren\x18\x03 \x03(\x0b\x32%.saas.accounts.v1.TriggerChildContextR\x08\x63hildren\"i\n\x16ReconcileSourceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tsource_id\x18\x02 \x01(\tR\x08sourceId\x12\x1b\n\teffect_id\x18\x03 \x01(\tR\x08\x65\x66\x66\x65\x63tId\"e\n\x17ReconcileSourceResponse\x12\x1b\n\teffect_id\x18\x01 \x01(\tR\x08\x65\x66\x66\x65\x63tId\x12\x16\n\x06status\x18\x02 \x01(\tR\x06status\x12\x15\n\x06job_id\x18\x03 \x01(\tR\x05jobId\";\n\x1cLookupReconcileSourceRequest\x12\x1b\n\teffect_id\x18\x01 \x01(\tR\x08\x65\x66\x66\x65\x63tId\"\xd4\x03\n\x0fSourceOperation\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x02 \x01(\tR\x0b\x64\x65scription\x12\x16\n\x06method\x18\x03 \x01(\tR\x06method\x12\x12\n\x04path\x18\x04 \x01(\tR\x04path\x12\x14\n\x05query\x18\x05 \x03(\tR\x05query\x12:\n\x0cinput_schema\x18\x06 \x01(\x0b\x32\x17.google.protobuf.StructR\x0binputSchema\x12<\n\routput_schema\x18\x07 \x01(\x0b\x32\x17.google.protobuf.StructR\x0coutputSchema\x12@\n\x06\x65\x66\x66\x65\x63t\x18\x08 \x01(\x0e\x32(.saas.accounts.v1.SourceOperation.EffectR\x06\x65\x66\x66\x65\x63t\x12(\n\x10max_output_bytes\x18\t \x01(\rR\x0emaxOutputBytes\x12\x16\n\x06\x64igest\x18\n \x01(\tR\x06\x64igest\"K\n\x06\x45\x66\x66\x65\x63t\x12\x16\n\x12\x45\x46\x46\x45\x43T_UNSPECIFIED\x10\x00\x12\x14\n\x10\x45\x46\x46\x45\x43T_READ_ONLY\x10\x01\x12\x13\n\x0f\x45\x46\x46\x45\x43T_MUTATION\x10\x02\"\x97\x01\n\x1e\x44\x65\x63lareSourceOperationsRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tsource_id\x18\x02 \x01(\tR\x08sourceId\x12\x41\n\noperations\x18\x03 \x03(\x0b\x32!.saas.accounts.v1.SourceOperationR\noperations\"d\n\x1f\x44\x65\x63lareSourceOperationsResponse\x12\x41\n\noperations\x18\x01 \x03(\x0b\x32!.saas.accounts.v1.SourceOperationR\noperations\"Q\n\x1bListSourceOperationsRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tsource_id\x18\x02 \x01(\tR\x08sourceId\"a\n\x1cListSourceOperationsResponse\x12\x41\n\noperations\x18\x01 \x03(\x0b\x32!.saas.accounts.v1.SourceOperationR\noperations\"\xac\x01\n\x1cInvokeSourceOperationRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tsource_id\x18\x02 \x01(\tR\x08sourceId\x12\x1c\n\toperation\x18\x03 \x01(\tR\toperation\x12\x1d\n\ninput_json\x18\x04 \x01(\tR\tinputJson\x12\x1b\n\teffect_id\x18\x05 \x01(\tR\x08\x65\x66\x66\x65\x63tId\"\xba\x01\n\x16SourceOperationReceipt\x12\x1b\n\teffect_id\x18\x01 \x01(\tR\x08\x65\x66\x66\x65\x63tId\x12!\n\x0c\x63ommitted_at\x18\x02 \x01(\tR\x0b\x63ommittedAt\x12\x16\n\x06status\x18\x03 \x01(\tR\x06status\x12\'\n\x0fprovider_status\x18\x04 \x01(\rR\x0eproviderStatus\x12\x1f\n\x0boutput_json\x18\x05 \x01(\tR\noutputJson\"\x84\x01\n\x1dInvokeSourceOperationResponse\x12\x1f\n\x0boutput_json\x18\x01 \x01(\tR\noutputJson\x12\x42\n\x07receipt\x18\x02 \x01(\x0b\x32(.saas.accounts.v1.SourceOperationReceiptR\x07receipt\"A\n\"LookupInvokeSourceOperationRequest\x12\x1b\n\teffect_id\x18\x01 \x01(\tR\x08\x65\x66\x66\x65\x63tId\"v\n#PruneSourceOperationReceiptsRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tsource_id\x18\x02 \x01(\tR\x08sourceId\x12\x1b\n\teffect_id\x18\x03 \x01(\tR\x08\x65\x66\x66\x65\x63tId\"w\n$PruneSourceOperationReceiptsResponse\x12\x1b\n\teffect_id\x18\x01 \x01(\tR\x08\x65\x66\x66\x65\x63tId\x12\x1a\n\x08receipts\x18\x02 \x01(\x03R\x08receipts\x12\x16\n\x06status\x18\x03 \x01(\tR\x06status\"H\n)LookupPruneSourceOperationReceiptsRequest\x12\x1b\n\teffect_id\x18\x01 \x01(\tR\x08\x65\x66\x66\x65\x63tId*\xb7\x01\n\x12\x44\x61tasourceProvider\x12#\n\x1f\x44\x41TASOURCE_PROVIDER_UNSPECIFIED\x10\x00\x12\x1e\n\x1a\x44\x41TASOURCE_PROVIDER_GITHUB\x10\x01\x12\x1b\n\x17\x44\x41TASOURCE_PROVIDER_API\x10\x02\x12\x1f\n\x1b\x44\x41TASOURCE_PROVIDER_CRAWLER\x10\x03\x12\x1e\n\x1a\x44\x41TASOURCE_PROVIDER_UPLOAD\x10\x04*\x91\x01\n\x10\x44\x61tasourceStatus\x12!\n\x1d\x44\x41TASOURCE_STATUS_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x44\x41TASOURCE_STATUS_ACTIVE\x10\x01\x12\x1c\n\x18\x44\x41TASOURCE_STATUS_PAUSED\x10\x02\x12\x1e\n\x1a\x44\x41TASOURCE_STATUS_DEGRADED\x10\x03*\xbc\x01\n\x16\x44\x61tasourceLiveDelivery\x12(\n$DATASOURCE_LIVE_DELIVERY_UNSPECIFIED\x10\x00\x12!\n\x1d\x44\x41TASOURCE_LIVE_DELIVERY_NONE\x10\x01\x12+\n\'DATASOURCE_LIVE_DELIVERY_SOURCE_WEBHOOK\x10\x02\x12(\n$DATASOURCE_LIVE_DELIVERY_APP_WEBHOOK\x10\x03*\xd6\x01\n\x11\x41piCredentialKind\x12#\n\x1f\x41PI_CREDENTIAL_KIND_UNSPECIFIED\x10\x00\x12\x1e\n\x1a\x41PI_CREDENTIAL_KIND_BEARER\x10\x01\x12\x1d\n\x19\x41PI_CREDENTIAL_KIND_BASIC\x10\x02\x12\x1e\n\x1a\x41PI_CREDENTIAL_KIND_HEADER\x10\x03\x12\x1d\n\x19\x41PI_CREDENTIAL_KIND_QUERY\x10\x04\x12\x1e\n\x1a\x41PI_CREDENTIAL_KIND_OAUTH2\x10\x05*\xa6\x02\n\x1c\x44\x61tasourceConnectorInterface\x12.\n*DATASOURCE_CONNECTOR_INTERFACE_UNSPECIFIED\x10\x00\x12(\n$DATASOURCE_CONNECTOR_INTERFACE_FILES\x10\x01\x12(\n$DATASOURCE_CONNECTOR_INTERFACE_PAGES\x10\x02\x12*\n&DATASOURCE_CONNECTOR_INTERFACE_RECORDS\x10\x03\x12+\n\'DATASOURCE_CONNECTOR_INTERFACE_MESSAGES\x10\x04\x12)\n%DATASOURCE_CONNECTOR_INTERFACE_EVENTS\x10\x05*\xec\x01\n\x18\x44\x61tasourceCredentialMode\x12*\n&DATASOURCE_CREDENTIAL_MODE_UNSPECIFIED\x10\x00\x12#\n\x1f\x44\x41TASOURCE_CREDENTIAL_MODE_NONE\x10\x01\x12&\n\"DATASOURCE_CREDENTIAL_MODE_ORG_APP\x10\x02\x12)\n%DATASOURCE_CREDENTIAL_MODE_USER_OAUTH\x10\x03\x12,\n(DATASOURCE_CREDENTIAL_MODE_STATIC_SECRET\x10\x04*\x97\x01\n\x16\x44\x61tasourceReadersModel\x12(\n$DATASOURCE_READERS_MODEL_UNSPECIFIED\x10\x00\x12*\n&DATASOURCE_READERS_MODEL_SOURCE_SCOPED\x10\x01\x12\'\n#DATASOURCE_READERS_MODEL_TRANSLATED\x10\x02*\xee\x01\n\x0fSourceSyncPhase\x12!\n\x1dSOURCE_SYNC_PHASE_UNSPECIFIED\x10\x00\x12\x1c\n\x18SOURCE_SYNC_PHASE_QUEUED\x10\x01\x12\x1e\n\x1aSOURCE_SYNC_PHASE_FETCHING\x10\x02\x12\x1e\n\x1aSOURCE_SYNC_PHASE_COMPILED\x10\x03\x12 \n\x1cSOURCE_SYNC_PHASE_HANDED_OFF\x10\x04\x12\x1a\n\x16SOURCE_SYNC_PHASE_DONE\x10\x05\x12\x1c\n\x18SOURCE_SYNC_PHASE_FAILED\x10\x06*\xa6\x03\n\x17SourceSyncFailureReason\x12*\n&SOURCE_SYNC_FAILURE_REASON_UNSPECIFIED\x10\x00\x12+\n\'SOURCE_SYNC_FAILURE_REASON_RATE_LIMITED\x10\x01\x12)\n%SOURCE_SYNC_FAILURE_REASON_CREDENTIAL\x10\x02\x12,\n(SOURCE_SYNC_FAILURE_REASON_ACCESS_DENIED\x10\x03\x12(\n$SOURCE_SYNC_FAILURE_REASON_NOT_FOUND\x10\x04\x12(\n$SOURCE_SYNC_FAILURE_REASON_TOO_LARGE\x10\x05\x12/\n+SOURCE_SYNC_FAILURE_REASON_HOST_UNAVAILABLE\x10\x06\x12$\n SOURCE_SYNC_FAILURE_REASON_OTHER\x10\x07\x12.\n*SOURCE_SYNC_FAILURE_REASON_DELIVERY_FAILED\x10\x08*\xc2\x01\n\x11SourceSyncTrigger\x12#\n\x1fSOURCE_SYNC_TRIGGER_UNSPECIFIED\x10\x00\x12\x1e\n\x1aSOURCE_SYNC_TRIGGER_MANUAL\x10\x01\x12!\n\x1dSOURCE_SYNC_TRIGGER_SCHEDULED\x10\x02\x12\x1f\n\x1bSOURCE_SYNC_TRIGGER_WEBHOOK\x10\x03\x12$\n SOURCE_SYNC_TRIGGER_RECONFIGURED\x10\x04*\x8f\x01\n\x16\x44\x61tasourceDomainStatus\x12(\n$DATASOURCE_DOMAIN_STATUS_UNSPECIFIED\x10\x00\x12$\n DATASOURCE_DOMAIN_STATUS_PENDING\x10\x01\x12%\n!DATASOURCE_DOMAIN_STATUS_VERIFIED\x10\x02*\x95\x03\n\x1aSourceDelegationRevocation\x12,\n(SOURCE_DELEGATION_REVOCATION_UNSPECIFIED\x10\x00\x12(\n$SOURCE_DELEGATION_REVOCATION_REVOKED\x10\x01\x12)\n%SOURCE_DELEGATION_REVOCATION_REPLACED\x10\x02\x12/\n+SOURCE_DELEGATION_REVOCATION_SOURCE_DELETED\x10\x03\x12/\n+SOURCE_DELEGATION_REVOCATION_MEMBER_REMOVED\x10\x04\x12\x30\n,SOURCE_DELEGATION_REVOCATION_PERMISSION_LOST\x10\x05\x12.\n*SOURCE_DELEGATION_REVOCATION_USER_INACTIVE\x10\x06\x12\x30\n,SOURCE_DELEGATION_REVOCATION_BINDING_CHANGED\x10\x07\x32\x82 \n\x11\x44\x61tasourceService\x12\x8d\x01\n\x1cPruneSourceOperationReceipts\x12\x35.saas.accounts.v1.PruneSourceOperationReceiptsRequest\x1a\x36.saas.accounts.v1.PruneSourceOperationReceiptsResponse\x12\x99\x01\n\"LookupPruneSourceOperationReceipts\x12;.saas.accounts.v1.LookupPruneSourceOperationReceiptsRequest\x1a\x36.saas.accounts.v1.PruneSourceOperationReceiptsResponse\x12x\n\x15InvokeSourceOperation\x12..saas.accounts.v1.InvokeSourceOperationRequest\x1a/.saas.accounts.v1.InvokeSourceOperationResponse\x12\x84\x01\n\x1bLookupInvokeSourceOperation\x12\x34.saas.accounts.v1.LookupInvokeSourceOperationRequest\x1a/.saas.accounts.v1.InvokeSourceOperationResponse\x12u\n\x14ListSourceOperations\x12-.saas.accounts.v1.ListSourceOperationsRequest\x1a..saas.accounts.v1.ListSourceOperationsResponse\x12~\n\x17\x44\x65\x63lareSourceOperations\x12\x30.saas.accounts.v1.DeclareSourceOperationsRequest\x1a\x31.saas.accounts.v1.DeclareSourceOperationsResponse\x12\x66\n\x0f\x41\x64\x64GitHubSource\x12(.saas.accounts.v1.AddGitHubSourceRequest\x1a).saas.accounts.v1.AddGitHubSourceResponse\x12T\n\tAddSource\x12\".saas.accounts.v1.AddSourceRequest\x1a#.saas.accounts.v1.AddSourceResponse\x12]\n\x0cUpdateSource\x12%.saas.accounts.v1.UpdateSourceRequest\x1a&.saas.accounts.v1.UpdateSourceResponse\x12u\n\x14GetDatasourceCatalog\x12-.saas.accounts.v1.GetDatasourceCatalogRequest\x1a..saas.accounts.v1.GetDatasourceCatalogResponse\x12Z\n\x0bListSources\x12$.saas.accounts.v1.ListSourcesRequest\x1a%.saas.accounts.v1.ListSourcesResponse\x12T\n\tGetSource\x12\".saas.accounts.v1.GetSourceRequest\x1a#.saas.accounts.v1.GetSourceResponse\x12W\n\nSyncSource\x12#.saas.accounts.v1.SyncSourceRequest\x1a$.saas.accounts.v1.SyncSourceResponse\x12`\n\rGetSourceSync\x12&.saas.accounts.v1.GetSourceSyncRequest\x1a\'.saas.accounts.v1.GetSourceSyncResponse\x12]\n\x0c\x44\x65leteSource\x12%.saas.accounts.v1.DeleteSourceRequest\x1a&.saas.accounts.v1.DeleteSourceResponse\x12r\n\x13\x42\x65ginGitHubAppSetup\x12,.saas.accounts.v1.BeginGitHubAppSetupRequest\x1a-.saas.accounts.v1.BeginGitHubAppSetupResponse\x12{\n\x16\x43ompleteGitHubAppSetup\x12/.saas.accounts.v1.CompleteGitHubAppSetupRequest\x1a\x30.saas.accounts.v1.CompleteGitHubAppSetupResponse\x12\x81\x01\n\x18MigrateGitHubSourceToApp\x12\x31.saas.accounts.v1.MigrateGitHubSourceToAppRequest\x1a\x32.saas.accounts.v1.MigrateGitHubSourceToAppResponse\x12\x87\x01\n\x1a\x42\x65ginDatasourceAccountLink\x12\x33.saas.accounts.v1.BeginDatasourceAccountLinkRequest\x1a\x34.saas.accounts.v1.BeginDatasourceAccountLinkResponse\x12\x90\x01\n\x1d\x43ompleteDatasourceAccountLink\x12\x36.saas.accounts.v1.CompleteDatasourceAccountLinkRequest\x1a\x37.saas.accounts.v1.CompleteDatasourceAccountLinkResponse\x12\x8d\x01\n\x1cListMyDatasourceAccountLinks\x12\x35.saas.accounts.v1.ListMyDatasourceAccountLinksRequest\x1a\x36.saas.accounts.v1.ListMyDatasourceAccountLinksResponse\x12\x8a\x01\n\x1b\x44\x65leteDatasourceAccountLink\x12\x34.saas.accounts.v1.DeleteDatasourceAccountLinkRequest\x1a\x35.saas.accounts.v1.DeleteDatasourceAccountLinkResponse\x12{\n\x16GetDatasourceDirectory\x12/.saas.accounts.v1.GetDatasourceDirectoryRequest\x1a\x30.saas.accounts.v1.GetDatasourceDirectoryResponse\x12r\n\x13\x42indDatasourceGroup\x12,.saas.accounts.v1.BindDatasourceGroupRequest\x1a-.saas.accounts.v1.BindDatasourceGroupResponse\x12x\n\x15UnbindDatasourceGroup\x12..saas.accounts.v1.UnbindDatasourceGroupRequest\x1a/.saas.accounts.v1.UnbindDatasourceGroupResponse\x12x\n\x15\x43laimDatasourceDomain\x12..saas.accounts.v1.ClaimDatasourceDomainRequest\x1a/.saas.accounts.v1.ClaimDatasourceDomainResponse\x12{\n\x16VerifyDatasourceDomain\x12/.saas.accounts.v1.VerifyDatasourceDomainRequest\x1a\x30.saas.accounts.v1.VerifyDatasourceDomainResponse\x12{\n\x16\x44\x65leteDatasourceDomain\x12/.saas.accounts.v1.DeleteDatasourceDomainRequest\x1a\x30.saas.accounts.v1.DeleteDatasourceDomainResponse\x12x\n\x15ListSourceDelegations\x12..saas.accounts.v1.ListSourceDelegationsRequest\x1a/.saas.accounts.v1.ListSourceDelegationsResponse\x12{\n\x16RevokeSourceDelegation\x12/.saas.accounts.v1.RevokeSourceDelegationRequest\x1a\x30.saas.accounts.v1.RevokeSourceDelegationResponse\x12{\n\x16\x44\x65legateSourceTriggers\x12/.saas.accounts.v1.DelegateSourceTriggersRequest\x1a\x30.saas.accounts.v1.DelegateSourceTriggersResponse\x12\x8a\x01\n\x1bGetSourceTriggerDeclaration\x12\x34.saas.accounts.v1.GetSourceTriggerDeclarationRequest\x1a\x35.saas.accounts.v1.GetSourceTriggerDeclarationResponse\x12\x66\n\x0fReconcileSource\x12(.saas.accounts.v1.ReconcileSourceRequest\x1a).saas.accounts.v1.ReconcileSourceResponse\x12r\n\x15LookupReconcileSource\x12..saas.accounts.v1.LookupReconcileSourceRequest\x1a).saas.accounts.v1.ReconcileSourceResponseB\x89\x01\n\x14\x63om.saas.accounts.v1B\x0f\x44\x61tasourceProtoP\x01\xa2\x02\x03SAX\xaa\x02\x10Saas.Accounts.V1\xca\x02\x10Saas\\Accounts\\V1\xe2\x02\x1cSaas\\Accounts\\V1\\GPBMetadata\xea\x02\x12Saas::Accounts::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -40,30 +40,30 @@ _globals['_ADDGITHUBSOURCEREQUEST'].oneofs_by_name['boundary']._serialized_options = b'\272H\002\010\001' _globals['_ADDSOURCEREQUEST'].oneofs_by_name['boundary']._loaded_options = None _globals['_ADDSOURCEREQUEST'].oneofs_by_name['boundary']._serialized_options = b'\272H\002\010\001' - _globals['_DATASOURCEPROVIDER']._serialized_start=13618 - _globals['_DATASOURCEPROVIDER']._serialized_end=13801 - _globals['_DATASOURCESTATUS']._serialized_start=13804 - _globals['_DATASOURCESTATUS']._serialized_end=13949 - _globals['_DATASOURCELIVEDELIVERY']._serialized_start=13952 - _globals['_DATASOURCELIVEDELIVERY']._serialized_end=14140 - _globals['_APICREDENTIALKIND']._serialized_start=14143 - _globals['_APICREDENTIALKIND']._serialized_end=14357 - _globals['_DATASOURCECONNECTORINTERFACE']._serialized_start=14360 - _globals['_DATASOURCECONNECTORINTERFACE']._serialized_end=14654 - _globals['_DATASOURCECREDENTIALMODE']._serialized_start=14657 - _globals['_DATASOURCECREDENTIALMODE']._serialized_end=14893 - _globals['_DATASOURCEREADERSMODEL']._serialized_start=14896 - _globals['_DATASOURCEREADERSMODEL']._serialized_end=15047 - _globals['_SOURCESYNCPHASE']._serialized_start=15050 - _globals['_SOURCESYNCPHASE']._serialized_end=15288 - _globals['_SOURCESYNCFAILUREREASON']._serialized_start=15291 - _globals['_SOURCESYNCFAILUREREASON']._serialized_end=15713 - _globals['_SOURCESYNCTRIGGER']._serialized_start=15716 - _globals['_SOURCESYNCTRIGGER']._serialized_end=15872 - _globals['_DATASOURCEDOMAINSTATUS']._serialized_start=15875 - _globals['_DATASOURCEDOMAINSTATUS']._serialized_end=16018 - _globals['_SOURCEDELEGATIONREVOCATION']._serialized_start=16021 - _globals['_SOURCEDELEGATIONREVOCATION']._serialized_end=16426 + _globals['_DATASOURCEPROVIDER']._serialized_start=16332 + _globals['_DATASOURCEPROVIDER']._serialized_end=16515 + _globals['_DATASOURCESTATUS']._serialized_start=16518 + _globals['_DATASOURCESTATUS']._serialized_end=16663 + _globals['_DATASOURCELIVEDELIVERY']._serialized_start=16666 + _globals['_DATASOURCELIVEDELIVERY']._serialized_end=16854 + _globals['_APICREDENTIALKIND']._serialized_start=16857 + _globals['_APICREDENTIALKIND']._serialized_end=17071 + _globals['_DATASOURCECONNECTORINTERFACE']._serialized_start=17074 + _globals['_DATASOURCECONNECTORINTERFACE']._serialized_end=17368 + _globals['_DATASOURCECREDENTIALMODE']._serialized_start=17371 + _globals['_DATASOURCECREDENTIALMODE']._serialized_end=17607 + _globals['_DATASOURCEREADERSMODEL']._serialized_start=17610 + _globals['_DATASOURCEREADERSMODEL']._serialized_end=17761 + _globals['_SOURCESYNCPHASE']._serialized_start=17764 + _globals['_SOURCESYNCPHASE']._serialized_end=18002 + _globals['_SOURCESYNCFAILUREREASON']._serialized_start=18005 + _globals['_SOURCESYNCFAILUREREASON']._serialized_end=18427 + _globals['_SOURCESYNCTRIGGER']._serialized_start=18430 + _globals['_SOURCESYNCTRIGGER']._serialized_end=18624 + _globals['_DATASOURCEDOMAINSTATUS']._serialized_start=18627 + _globals['_DATASOURCEDOMAINSTATUS']._serialized_end=18770 + _globals['_SOURCEDELEGATIONREVOCATION']._serialized_start=18773 + _globals['_SOURCEDELEGATIONREVOCATION']._serialized_end=19178 _globals['_GITHUBDATASOURCECONFIG']._serialized_start=177 _globals['_GITHUBDATASOURCECONFIG']._serialized_end=308 _globals['_APIOAUTH2CONFIG']._serialized_start=311 @@ -86,142 +86,172 @@ _globals['_ADDSOURCEREQUEST']._serialized_end=3450 _globals['_ADDSOURCERESPONSE']._serialized_start=3452 _globals['_ADDSOURCERESPONSE']._serialized_end=3533 - _globals['_DATASOURCECONFIGFIELD']._serialized_start=3535 - _globals['_DATASOURCECONFIGFIELD']._serialized_end=3659 - _globals['_DATASOURCECONNECTORBUDGET']._serialized_start=3662 - _globals['_DATASOURCECONNECTORBUDGET']._serialized_end=3966 - _globals['_DATASOURCEPROVIDERDESCRIPTOR']._serialized_start=3969 - _globals['_DATASOURCEPROVIDERDESCRIPTOR']._serialized_end=5085 - _globals['_GETDATASOURCECATALOGREQUEST']._serialized_start=5087 - _globals['_GETDATASOURCECATALOGREQUEST']._serialized_end=5116 - _globals['_GETDATASOURCECATALOGRESPONSE']._serialized_start=5118 - _globals['_GETDATASOURCECATALOGRESPONSE']._serialized_end=5226 - _globals['_LISTSOURCESREQUEST']._serialized_start=5228 - _globals['_LISTSOURCESREQUEST']._serialized_end=5271 - _globals['_LISTSOURCESRESPONSE']._serialized_start=5273 - _globals['_LISTSOURCESRESPONSE']._serialized_end=5358 - _globals['_GETSOURCEREQUEST']._serialized_start=5360 - _globals['_GETSOURCEREQUEST']._serialized_end=5417 - _globals['_GETSOURCERESPONSE']._serialized_start=5419 - _globals['_GETSOURCERESPONSE']._serialized_end=5500 - _globals['_SYNCSOURCEREQUEST']._serialized_start=5502 - _globals['_SYNCSOURCEREQUEST']._serialized_end=5625 - _globals['_SYNCSOURCERESPONSE']._serialized_start=5627 - _globals['_SYNCSOURCERESPONSE']._serialized_end=5670 - _globals['_GETSOURCESYNCREQUEST']._serialized_start=5672 - _globals['_GETSOURCESYNCREQUEST']._serialized_end=5769 - _globals['_SOURCESYNCDELIVERY']._serialized_start=5772 - _globals['_SOURCESYNCDELIVERY']._serialized_end=5928 - _globals['_SOURCESYNCCHANGES']._serialized_start=5931 - _globals['_SOURCESYNCCHANGES']._serialized_end=6133 - _globals['_SOURCESYNCFAILURE']._serialized_start=6136 - _globals['_SOURCESYNCFAILURE']._serialized_end=6351 - _globals['_SOURCESYNCPROGRESS']._serialized_start=6354 - _globals['_SOURCESYNCPROGRESS']._serialized_end=6985 - _globals['_GETSOURCESYNCRESPONSE']._serialized_start=6988 - _globals['_GETSOURCESYNCRESPONSE']._serialized_end=7216 - _globals['_DELETESOURCEREQUEST']._serialized_start=7218 - _globals['_DELETESOURCEREQUEST']._serialized_end=7278 - _globals['_DELETESOURCERESPONSE']._serialized_start=7280 - _globals['_DELETESOURCERESPONSE']._serialized_end=7302 - _globals['_GITHUBAPPREPOSITORY']._serialized_start=7304 - _globals['_GITHUBAPPREPOSITORY']._serialized_end=7429 - _globals['_BEGINGITHUBAPPSETUPREQUEST']._serialized_start=7431 - _globals['_BEGINGITHUBAPPSETUPREQUEST']._serialized_end=7482 - _globals['_BEGINGITHUBAPPSETUPRESPONSE']._serialized_start=7485 - _globals['_BEGINGITHUBAPPSETUPRESPONSE']._serialized_end=7628 - _globals['_COMPLETEGITHUBAPPSETUPREQUEST']._serialized_start=7631 - _globals['_COMPLETEGITHUBAPPSETUPREQUEST']._serialized_end=7768 - _globals['_COMPLETEGITHUBAPPSETUPRESPONSE']._serialized_start=7771 - _globals['_COMPLETEGITHUBAPPSETUPRESPONSE']._serialized_end=7919 - _globals['_MIGRATEGITHUBSOURCETOAPPREQUEST']._serialized_start=7921 - _globals['_MIGRATEGITHUBSOURCETOAPPREQUEST']._serialized_end=7993 - _globals['_MIGRATEGITHUBSOURCETOAPPRESPONSE']._serialized_start=7995 - _globals['_MIGRATEGITHUBSOURCETOAPPRESPONSE']._serialized_end=8091 - _globals['_DATASOURCEACCOUNTLINK']._serialized_start=8094 - _globals['_DATASOURCEACCOUNTLINK']._serialized_end=8372 - _globals['_DATASOURCEGROUPBINDING']._serialized_start=8375 - _globals['_DATASOURCEGROUPBINDING']._serialized_end=8627 - _globals['_DATASOURCEVERIFIEDDOMAIN']._serialized_start=8630 - _globals['_DATASOURCEVERIFIEDDOMAIN']._serialized_end=8987 - _globals['_DATASOURCEDIRECTORYTEAM']._serialized_start=8989 - _globals['_DATASOURCEDIRECTORYTEAM']._serialized_end=9050 - _globals['_BEGINDATASOURCEACCOUNTLINKREQUEST']._serialized_start=9053 - _globals['_BEGINDATASOURCEACCOUNTLINKREQUEST']._serialized_end=9205 - _globals['_BEGINDATASOURCEACCOUNTLINKRESPONSE']._serialized_start=9208 - _globals['_BEGINDATASOURCEACCOUNTLINKRESPONSE']._serialized_end=9362 - _globals['_COMPLETEDATASOURCEACCOUNTLINKREQUEST']._serialized_start=9364 - _globals['_COMPLETEDATASOURCEACCOUNTLINKREQUEST']._serialized_end=9467 - _globals['_COMPLETEDATASOURCEACCOUNTLINKRESPONSE']._serialized_start=9469 - _globals['_COMPLETEDATASOURCEACCOUNTLINKRESPONSE']._serialized_end=9569 - _globals['_LISTMYDATASOURCEACCOUNTLINKSREQUEST']._serialized_start=9571 - _globals['_LISTMYDATASOURCEACCOUNTLINKSREQUEST']._serialized_end=9631 - _globals['_LISTMYDATASOURCEACCOUNTLINKSRESPONSE']._serialized_start=9633 - _globals['_LISTMYDATASOURCEACCOUNTLINKSRESPONSE']._serialized_end=9734 - _globals['_DELETEDATASOURCEACCOUNTLINKREQUEST']._serialized_start=9736 - _globals['_DELETEDATASOURCEACCOUNTLINKREQUEST']._serialized_end=9811 - _globals['_DELETEDATASOURCEACCOUNTLINKRESPONSE']._serialized_start=9813 - _globals['_DELETEDATASOURCEACCOUNTLINKRESPONSE']._serialized_end=9850 - _globals['_GETDATASOURCEDIRECTORYREQUEST']._serialized_start=9852 - _globals['_GETDATASOURCEDIRECTORYREQUEST']._serialized_end=9906 - _globals['_GETDATASOURCEDIRECTORYRESPONSE']._serialized_start=9909 - _globals['_GETDATASOURCEDIRECTORYRESPONSE']._serialized_end=10209 - _globals['_BINDDATASOURCEGROUPREQUEST']._serialized_start=10212 - _globals['_BINDDATASOURCEGROUPREQUEST']._serialized_end=10362 - _globals['_BINDDATASOURCEGROUPRESPONSE']._serialized_start=10364 - _globals['_BINDDATASOURCEGROUPRESPONSE']._serialized_end=10461 - _globals['_UNBINDDATASOURCEGROUPREQUEST']._serialized_start=10463 - _globals['_UNBINDDATASOURCEGROUPREQUEST']._serialized_end=10532 - _globals['_UNBINDDATASOURCEGROUPRESPONSE']._serialized_start=10534 - _globals['_UNBINDDATASOURCEGROUPRESPONSE']._serialized_end=10565 - _globals['_CLAIMDATASOURCEDOMAINREQUEST']._serialized_start=10567 - _globals['_CLAIMDATASOURCEDOMAINREQUEST']._serialized_end=10644 - _globals['_CLAIMDATASOURCEDOMAINRESPONSE']._serialized_start=10646 - _globals['_CLAIMDATASOURCEDOMAINRESPONSE']._serialized_end=10745 - _globals['_VERIFYDATASOURCEDOMAINREQUEST']._serialized_start=10747 - _globals['_VERIFYDATASOURCEDOMAINREQUEST']._serialized_end=10817 - _globals['_VERIFYDATASOURCEDOMAINRESPONSE']._serialized_start=10819 - _globals['_VERIFYDATASOURCEDOMAINRESPONSE']._serialized_end=10919 - _globals['_DELETEDATASOURCEDOMAINREQUEST']._serialized_start=10921 - _globals['_DELETEDATASOURCEDOMAINREQUEST']._serialized_end=10991 - _globals['_DELETEDATASOURCEDOMAINRESPONSE']._serialized_start=10993 - _globals['_DELETEDATASOURCEDOMAINRESPONSE']._serialized_end=11025 - _globals['_SOURCEDELEGATION']._serialized_start=11028 - _globals['_SOURCEDELEGATION']._serialized_end=11403 - _globals['_LISTSOURCEDELEGATIONSREQUEST']._serialized_start=11406 - _globals['_LISTSOURCEDELEGATIONSREQUEST']._serialized_end=11548 - _globals['_LISTSOURCEDELEGATIONSRESPONSE']._serialized_start=11550 - _globals['_LISTSOURCEDELEGATIONSRESPONSE']._serialized_end=11651 - _globals['_REVOKESOURCEDELEGATIONREQUEST']._serialized_start=11653 - _globals['_REVOKESOURCEDELEGATIONREQUEST']._serialized_end=11723 - _globals['_REVOKESOURCEDELEGATIONRESPONSE']._serialized_start=11725 - _globals['_REVOKESOURCEDELEGATIONRESPONSE']._serialized_end=11825 - _globals['_SOURCEOPERATION']._serialized_start=11828 - _globals['_SOURCEOPERATION']._serialized_end=12296 - _globals['_SOURCEOPERATION_EFFECT']._serialized_start=12221 - _globals['_SOURCEOPERATION_EFFECT']._serialized_end=12296 - _globals['_DECLARESOURCEOPERATIONSREQUEST']._serialized_start=12299 - _globals['_DECLARESOURCEOPERATIONSREQUEST']._serialized_end=12450 - _globals['_DECLARESOURCEOPERATIONSRESPONSE']._serialized_start=12452 - _globals['_DECLARESOURCEOPERATIONSRESPONSE']._serialized_end=12552 - _globals['_LISTSOURCEOPERATIONSREQUEST']._serialized_start=12554 - _globals['_LISTSOURCEOPERATIONSREQUEST']._serialized_end=12635 - _globals['_LISTSOURCEOPERATIONSRESPONSE']._serialized_start=12637 - _globals['_LISTSOURCEOPERATIONSRESPONSE']._serialized_end=12734 - _globals['_INVOKESOURCEOPERATIONREQUEST']._serialized_start=12737 - _globals['_INVOKESOURCEOPERATIONREQUEST']._serialized_end=12909 - _globals['_SOURCEOPERATIONRECEIPT']._serialized_start=12912 - _globals['_SOURCEOPERATIONRECEIPT']._serialized_end=13098 - _globals['_INVOKESOURCEOPERATIONRESPONSE']._serialized_start=13101 - _globals['_INVOKESOURCEOPERATIONRESPONSE']._serialized_end=13233 - _globals['_LOOKUPINVOKESOURCEOPERATIONREQUEST']._serialized_start=13235 - _globals['_LOOKUPINVOKESOURCEOPERATIONREQUEST']._serialized_end=13300 - _globals['_PRUNESOURCEOPERATIONRECEIPTSREQUEST']._serialized_start=13302 - _globals['_PRUNESOURCEOPERATIONRECEIPTSREQUEST']._serialized_end=13420 - _globals['_PRUNESOURCEOPERATIONRECEIPTSRESPONSE']._serialized_start=13422 - _globals['_PRUNESOURCEOPERATIONRECEIPTSRESPONSE']._serialized_end=13541 - _globals['_LOOKUPPRUNESOURCEOPERATIONRECEIPTSREQUEST']._serialized_start=13543 - _globals['_LOOKUPPRUNESOURCEOPERATIONRECEIPTSREQUEST']._serialized_end=13615 - _globals['_DATASOURCESERVICE']._serialized_start=16429 - _globals['_DATASOURCESERVICE']._serialized_end=19946 + _globals['_UPDATESOURCEREQUEST']._serialized_start=3536 + _globals['_UPDATESOURCEREQUEST']._serialized_end=3747 + _globals['_SOURCEFETCHSCOPE']._serialized_start=3749 + _globals['_SOURCEFETCHSCOPE']._serialized_end=3854 + _globals['_UPDATESOURCERESPONSE']._serialized_start=3856 + _globals['_UPDATESOURCERESPONSE']._serialized_end=3963 + _globals['_DATASOURCECONFIGFIELD']._serialized_start=3965 + _globals['_DATASOURCECONFIGFIELD']._serialized_end=4089 + _globals['_DATASOURCECONNECTORBUDGET']._serialized_start=4092 + _globals['_DATASOURCECONNECTORBUDGET']._serialized_end=4396 + _globals['_DATASOURCEPROVIDERDESCRIPTOR']._serialized_start=4399 + _globals['_DATASOURCEPROVIDERDESCRIPTOR']._serialized_end=5515 + _globals['_GETDATASOURCECATALOGREQUEST']._serialized_start=5517 + _globals['_GETDATASOURCECATALOGREQUEST']._serialized_end=5546 + _globals['_GETDATASOURCECATALOGRESPONSE']._serialized_start=5548 + _globals['_GETDATASOURCECATALOGRESPONSE']._serialized_end=5656 + _globals['_LISTSOURCESREQUEST']._serialized_start=5658 + _globals['_LISTSOURCESREQUEST']._serialized_end=5701 + _globals['_LISTSOURCESRESPONSE']._serialized_start=5703 + _globals['_LISTSOURCESRESPONSE']._serialized_end=5788 + _globals['_GETSOURCEREQUEST']._serialized_start=5790 + _globals['_GETSOURCEREQUEST']._serialized_end=5847 + _globals['_GETSOURCERESPONSE']._serialized_start=5849 + _globals['_GETSOURCERESPONSE']._serialized_end=5930 + _globals['_SYNCSOURCEREQUEST']._serialized_start=5932 + _globals['_SYNCSOURCEREQUEST']._serialized_end=6055 + _globals['_SYNCSOURCERESPONSE']._serialized_start=6057 + _globals['_SYNCSOURCERESPONSE']._serialized_end=6100 + _globals['_GETSOURCESYNCREQUEST']._serialized_start=6102 + _globals['_GETSOURCESYNCREQUEST']._serialized_end=6199 + _globals['_SOURCESYNCDELIVERY']._serialized_start=6202 + _globals['_SOURCESYNCDELIVERY']._serialized_end=6358 + _globals['_SOURCESYNCCHANGES']._serialized_start=6361 + _globals['_SOURCESYNCCHANGES']._serialized_end=6563 + _globals['_SOURCESYNCFAILURE']._serialized_start=6566 + _globals['_SOURCESYNCFAILURE']._serialized_end=6781 + _globals['_SOURCESYNCPROGRESS']._serialized_start=6784 + _globals['_SOURCESYNCPROGRESS']._serialized_end=7415 + _globals['_GETSOURCESYNCRESPONSE']._serialized_start=7418 + _globals['_GETSOURCESYNCRESPONSE']._serialized_end=7646 + _globals['_DELETESOURCEREQUEST']._serialized_start=7648 + _globals['_DELETESOURCEREQUEST']._serialized_end=7708 + _globals['_DELETESOURCERESPONSE']._serialized_start=7710 + _globals['_DELETESOURCERESPONSE']._serialized_end=7732 + _globals['_GITHUBAPPREPOSITORY']._serialized_start=7734 + _globals['_GITHUBAPPREPOSITORY']._serialized_end=7859 + _globals['_BEGINGITHUBAPPSETUPREQUEST']._serialized_start=7861 + _globals['_BEGINGITHUBAPPSETUPREQUEST']._serialized_end=7912 + _globals['_BEGINGITHUBAPPSETUPRESPONSE']._serialized_start=7915 + _globals['_BEGINGITHUBAPPSETUPRESPONSE']._serialized_end=8058 + _globals['_COMPLETEGITHUBAPPSETUPREQUEST']._serialized_start=8061 + _globals['_COMPLETEGITHUBAPPSETUPREQUEST']._serialized_end=8198 + _globals['_COMPLETEGITHUBAPPSETUPRESPONSE']._serialized_start=8201 + _globals['_COMPLETEGITHUBAPPSETUPRESPONSE']._serialized_end=8349 + _globals['_MIGRATEGITHUBSOURCETOAPPREQUEST']._serialized_start=8351 + _globals['_MIGRATEGITHUBSOURCETOAPPREQUEST']._serialized_end=8423 + _globals['_MIGRATEGITHUBSOURCETOAPPRESPONSE']._serialized_start=8425 + _globals['_MIGRATEGITHUBSOURCETOAPPRESPONSE']._serialized_end=8521 + _globals['_DATASOURCEACCOUNTLINK']._serialized_start=8524 + _globals['_DATASOURCEACCOUNTLINK']._serialized_end=8802 + _globals['_DATASOURCEGROUPBINDING']._serialized_start=8805 + _globals['_DATASOURCEGROUPBINDING']._serialized_end=9057 + _globals['_DATASOURCEVERIFIEDDOMAIN']._serialized_start=9060 + _globals['_DATASOURCEVERIFIEDDOMAIN']._serialized_end=9417 + _globals['_DATASOURCEDIRECTORYTEAM']._serialized_start=9419 + _globals['_DATASOURCEDIRECTORYTEAM']._serialized_end=9480 + _globals['_BEGINDATASOURCEACCOUNTLINKREQUEST']._serialized_start=9483 + _globals['_BEGINDATASOURCEACCOUNTLINKREQUEST']._serialized_end=9635 + _globals['_BEGINDATASOURCEACCOUNTLINKRESPONSE']._serialized_start=9638 + _globals['_BEGINDATASOURCEACCOUNTLINKRESPONSE']._serialized_end=9792 + _globals['_COMPLETEDATASOURCEACCOUNTLINKREQUEST']._serialized_start=9794 + _globals['_COMPLETEDATASOURCEACCOUNTLINKREQUEST']._serialized_end=9897 + _globals['_COMPLETEDATASOURCEACCOUNTLINKRESPONSE']._serialized_start=9899 + _globals['_COMPLETEDATASOURCEACCOUNTLINKRESPONSE']._serialized_end=9999 + _globals['_LISTMYDATASOURCEACCOUNTLINKSREQUEST']._serialized_start=10001 + _globals['_LISTMYDATASOURCEACCOUNTLINKSREQUEST']._serialized_end=10061 + _globals['_LISTMYDATASOURCEACCOUNTLINKSRESPONSE']._serialized_start=10063 + _globals['_LISTMYDATASOURCEACCOUNTLINKSRESPONSE']._serialized_end=10164 + _globals['_DELETEDATASOURCEACCOUNTLINKREQUEST']._serialized_start=10166 + _globals['_DELETEDATASOURCEACCOUNTLINKREQUEST']._serialized_end=10241 + _globals['_DELETEDATASOURCEACCOUNTLINKRESPONSE']._serialized_start=10243 + _globals['_DELETEDATASOURCEACCOUNTLINKRESPONSE']._serialized_end=10280 + _globals['_GETDATASOURCEDIRECTORYREQUEST']._serialized_start=10282 + _globals['_GETDATASOURCEDIRECTORYREQUEST']._serialized_end=10336 + _globals['_GETDATASOURCEDIRECTORYRESPONSE']._serialized_start=10339 + _globals['_GETDATASOURCEDIRECTORYRESPONSE']._serialized_end=10639 + _globals['_BINDDATASOURCEGROUPREQUEST']._serialized_start=10642 + _globals['_BINDDATASOURCEGROUPREQUEST']._serialized_end=10792 + _globals['_BINDDATASOURCEGROUPRESPONSE']._serialized_start=10794 + _globals['_BINDDATASOURCEGROUPRESPONSE']._serialized_end=10891 + _globals['_UNBINDDATASOURCEGROUPREQUEST']._serialized_start=10893 + _globals['_UNBINDDATASOURCEGROUPREQUEST']._serialized_end=10962 + _globals['_UNBINDDATASOURCEGROUPRESPONSE']._serialized_start=10964 + _globals['_UNBINDDATASOURCEGROUPRESPONSE']._serialized_end=10995 + _globals['_CLAIMDATASOURCEDOMAINREQUEST']._serialized_start=10997 + _globals['_CLAIMDATASOURCEDOMAINREQUEST']._serialized_end=11074 + _globals['_CLAIMDATASOURCEDOMAINRESPONSE']._serialized_start=11076 + _globals['_CLAIMDATASOURCEDOMAINRESPONSE']._serialized_end=11175 + _globals['_VERIFYDATASOURCEDOMAINREQUEST']._serialized_start=11177 + _globals['_VERIFYDATASOURCEDOMAINREQUEST']._serialized_end=11247 + _globals['_VERIFYDATASOURCEDOMAINRESPONSE']._serialized_start=11249 + _globals['_VERIFYDATASOURCEDOMAINRESPONSE']._serialized_end=11349 + _globals['_DELETEDATASOURCEDOMAINREQUEST']._serialized_start=11351 + _globals['_DELETEDATASOURCEDOMAINREQUEST']._serialized_end=11421 + _globals['_DELETEDATASOURCEDOMAINRESPONSE']._serialized_start=11423 + _globals['_DELETEDATASOURCEDOMAINRESPONSE']._serialized_end=11455 + _globals['_SOURCEDELEGATION']._serialized_start=11458 + _globals['_SOURCEDELEGATION']._serialized_end=11833 + _globals['_LISTSOURCEDELEGATIONSREQUEST']._serialized_start=11836 + _globals['_LISTSOURCEDELEGATIONSREQUEST']._serialized_end=11978 + _globals['_LISTSOURCEDELEGATIONSRESPONSE']._serialized_start=11980 + _globals['_LISTSOURCEDELEGATIONSRESPONSE']._serialized_end=12081 + _globals['_REVOKESOURCEDELEGATIONREQUEST']._serialized_start=12083 + _globals['_REVOKESOURCEDELEGATIONREQUEST']._serialized_end=12153 + _globals['_REVOKESOURCEDELEGATIONRESPONSE']._serialized_start=12155 + _globals['_REVOKESOURCEDELEGATIONRESPONSE']._serialized_end=12255 + _globals['_TRIGGERIDENTITY']._serialized_start=12257 + _globals['_TRIGGERIDENTITY']._serialized_end=12324 + _globals['_DECLAREDTRIGGERSCHEDULE']._serialized_start=12327 + _globals['_DECLAREDTRIGGERSCHEDULE']._serialized_end=12516 + _globals['_TRIGGERDELEGATIONREFERENCE']._serialized_start=12519 + _globals['_TRIGGERDELEGATIONREFERENCE']._serialized_end=13006 + _globals['_TRIGGERCHILDCONTEXT']._serialized_start=13009 + _globals['_TRIGGERCHILDCONTEXT']._serialized_end=13274 + _globals['_SOURCETRIGGERDECLARATION']._serialized_start=13277 + _globals['_SOURCETRIGGERDECLARATION']._serialized_end=13714 + _globals['_DELEGATESOURCETRIGGERSREQUEST']._serialized_start=13716 + _globals['_DELEGATESOURCETRIGGERSREQUEST']._serialized_end=13799 + _globals['_DELEGATESOURCETRIGGERSRESPONSE']._serialized_start=13801 + _globals['_DELEGATESOURCETRIGGERSRESPONSE']._serialized_end=13913 + _globals['_GETSOURCETRIGGERDECLARATIONREQUEST']._serialized_start=13915 + _globals['_GETSOURCETRIGGERDECLARATIONREQUEST']._serialized_end=14003 + _globals['_GETSOURCETRIGGERDECLARATIONRESPONSE']._serialized_start=14006 + _globals['_GETSOURCETRIGGERDECLARATIONRESPONSE']._serialized_end=14268 + _globals['_RECONCILESOURCEREQUEST']._serialized_start=14270 + _globals['_RECONCILESOURCEREQUEST']._serialized_end=14375 + _globals['_RECONCILESOURCERESPONSE']._serialized_start=14377 + _globals['_RECONCILESOURCERESPONSE']._serialized_end=14478 + _globals['_LOOKUPRECONCILESOURCEREQUEST']._serialized_start=14480 + _globals['_LOOKUPRECONCILESOURCEREQUEST']._serialized_end=14539 + _globals['_SOURCEOPERATION']._serialized_start=14542 + _globals['_SOURCEOPERATION']._serialized_end=15010 + _globals['_SOURCEOPERATION_EFFECT']._serialized_start=14935 + _globals['_SOURCEOPERATION_EFFECT']._serialized_end=15010 + _globals['_DECLARESOURCEOPERATIONSREQUEST']._serialized_start=15013 + _globals['_DECLARESOURCEOPERATIONSREQUEST']._serialized_end=15164 + _globals['_DECLARESOURCEOPERATIONSRESPONSE']._serialized_start=15166 + _globals['_DECLARESOURCEOPERATIONSRESPONSE']._serialized_end=15266 + _globals['_LISTSOURCEOPERATIONSREQUEST']._serialized_start=15268 + _globals['_LISTSOURCEOPERATIONSREQUEST']._serialized_end=15349 + _globals['_LISTSOURCEOPERATIONSRESPONSE']._serialized_start=15351 + _globals['_LISTSOURCEOPERATIONSRESPONSE']._serialized_end=15448 + _globals['_INVOKESOURCEOPERATIONREQUEST']._serialized_start=15451 + _globals['_INVOKESOURCEOPERATIONREQUEST']._serialized_end=15623 + _globals['_SOURCEOPERATIONRECEIPT']._serialized_start=15626 + _globals['_SOURCEOPERATIONRECEIPT']._serialized_end=15812 + _globals['_INVOKESOURCEOPERATIONRESPONSE']._serialized_start=15815 + _globals['_INVOKESOURCEOPERATIONRESPONSE']._serialized_end=15947 + _globals['_LOOKUPINVOKESOURCEOPERATIONREQUEST']._serialized_start=15949 + _globals['_LOOKUPINVOKESOURCEOPERATIONREQUEST']._serialized_end=16014 + _globals['_PRUNESOURCEOPERATIONRECEIPTSREQUEST']._serialized_start=16016 + _globals['_PRUNESOURCEOPERATIONRECEIPTSREQUEST']._serialized_end=16134 + _globals['_PRUNESOURCEOPERATIONRECEIPTSRESPONSE']._serialized_start=16136 + _globals['_PRUNESOURCEOPERATIONRECEIPTSRESPONSE']._serialized_end=16255 + _globals['_LOOKUPPRUNESOURCEOPERATIONRECEIPTSREQUEST']._serialized_start=16257 + _globals['_LOOKUPPRUNESOURCEOPERATIONRECEIPTSREQUEST']._serialized_end=16329 + _globals['_DATASOURCESERVICE']._serialized_start=19181 + _globals['_DATASOURCESERVICE']._serialized_end=23279 # @@protoc_insertion_point(module_scope) diff --git a/src/saas_sdk/_gen/datasource_pb2.pyi b/src/saas_sdk/_gen/datasource_pb2.pyi index b57dfac..8a548ed 100644 --- a/src/saas_sdk/_gen/datasource_pb2.pyi +++ b/src/saas_sdk/_gen/datasource_pb2.pyi @@ -92,6 +92,7 @@ class SourceSyncTrigger(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): SOURCE_SYNC_TRIGGER_MANUAL: _ClassVar[SourceSyncTrigger] SOURCE_SYNC_TRIGGER_SCHEDULED: _ClassVar[SourceSyncTrigger] SOURCE_SYNC_TRIGGER_WEBHOOK: _ClassVar[SourceSyncTrigger] + SOURCE_SYNC_TRIGGER_RECONFIGURED: _ClassVar[SourceSyncTrigger] class DatasourceDomainStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () @@ -162,6 +163,7 @@ SOURCE_SYNC_TRIGGER_UNSPECIFIED: SourceSyncTrigger SOURCE_SYNC_TRIGGER_MANUAL: SourceSyncTrigger SOURCE_SYNC_TRIGGER_SCHEDULED: SourceSyncTrigger SOURCE_SYNC_TRIGGER_WEBHOOK: SourceSyncTrigger +SOURCE_SYNC_TRIGGER_RECONFIGURED: SourceSyncTrigger DATASOURCE_DOMAIN_STATUS_UNSPECIFIED: DatasourceDomainStatus DATASOURCE_DOMAIN_STATUS_PENDING: DatasourceDomainStatus DATASOURCE_DOMAIN_STATUS_VERIFIED: DatasourceDomainStatus @@ -354,6 +356,40 @@ class AddSourceResponse(_message.Message): datasource: Datasource def __init__(self, datasource: _Optional[_Union[Datasource, _Mapping]] = ...) -> None: ... +class UpdateSourceRequest(_message.Message): + __slots__ = ("org_id", "id", "branch", "paths", "file_extensions", "expected") + ORG_ID_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + BRANCH_FIELD_NUMBER: _ClassVar[int] + PATHS_FIELD_NUMBER: _ClassVar[int] + FILE_EXTENSIONS_FIELD_NUMBER: _ClassVar[int] + EXPECTED_FIELD_NUMBER: _ClassVar[int] + org_id: str + id: str + branch: str + paths: _containers.RepeatedScalarFieldContainer[str] + file_extensions: _containers.RepeatedScalarFieldContainer[str] + expected: SourceFetchScope + def __init__(self, org_id: _Optional[str] = ..., id: _Optional[str] = ..., branch: _Optional[str] = ..., paths: _Optional[_Iterable[str]] = ..., file_extensions: _Optional[_Iterable[str]] = ..., expected: _Optional[_Union[SourceFetchScope, _Mapping]] = ...) -> None: ... + +class SourceFetchScope(_message.Message): + __slots__ = ("branch", "paths", "file_extensions") + BRANCH_FIELD_NUMBER: _ClassVar[int] + PATHS_FIELD_NUMBER: _ClassVar[int] + FILE_EXTENSIONS_FIELD_NUMBER: _ClassVar[int] + branch: str + paths: _containers.RepeatedScalarFieldContainer[str] + file_extensions: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, branch: _Optional[str] = ..., paths: _Optional[_Iterable[str]] = ..., file_extensions: _Optional[_Iterable[str]] = ...) -> None: ... + +class UpdateSourceResponse(_message.Message): + __slots__ = ("datasource", "job_id") + DATASOURCE_FIELD_NUMBER: _ClassVar[int] + JOB_ID_FIELD_NUMBER: _ClassVar[int] + datasource: Datasource + job_id: str + def __init__(self, datasource: _Optional[_Union[Datasource, _Mapping]] = ..., job_id: _Optional[str] = ...) -> None: ... + class DatasourceConfigField(_message.Message): __slots__ = ("key", "display_name", "help", "required") KEY_FIELD_NUMBER: _ClassVar[int] @@ -908,6 +944,156 @@ class RevokeSourceDelegationResponse(_message.Message): delegation: SourceDelegation def __init__(self, delegation: _Optional[_Union[SourceDelegation, _Mapping]] = ...) -> None: ... +class TriggerIdentity(_message.Message): + __slots__ = ("source", "binding") + SOURCE_FIELD_NUMBER: _ClassVar[int] + BINDING_FIELD_NUMBER: _ClassVar[int] + source: str + binding: str + def __init__(self, source: _Optional[str] = ..., binding: _Optional[str] = ...) -> None: ... + +class DeclaredTriggerSchedule(_message.Message): + __slots__ = ("cron", "timezone", "missed_run", "overlap", "deadline", "input_json") + CRON_FIELD_NUMBER: _ClassVar[int] + TIMEZONE_FIELD_NUMBER: _ClassVar[int] + MISSED_RUN_FIELD_NUMBER: _ClassVar[int] + OVERLAP_FIELD_NUMBER: _ClassVar[int] + DEADLINE_FIELD_NUMBER: _ClassVar[int] + INPUT_JSON_FIELD_NUMBER: _ClassVar[int] + cron: str + timezone: str + missed_run: str + overlap: str + deadline: int + input_json: str + def __init__(self, cron: _Optional[str] = ..., timezone: _Optional[str] = ..., missed_run: _Optional[str] = ..., overlap: _Optional[str] = ..., deadline: _Optional[int] = ..., input_json: _Optional[str] = ...) -> None: ... + +class TriggerDelegationReference(_message.Message): + __slots__ = ("reference", "delegation_id", "module", "binding", "audience", "tenant", "owner_principal_id", "scopes", "active", "created_at", "revoked_at", "revocation") + REFERENCE_FIELD_NUMBER: _ClassVar[int] + DELEGATION_ID_FIELD_NUMBER: _ClassVar[int] + MODULE_FIELD_NUMBER: _ClassVar[int] + BINDING_FIELD_NUMBER: _ClassVar[int] + AUDIENCE_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + OWNER_PRINCIPAL_ID_FIELD_NUMBER: _ClassVar[int] + SCOPES_FIELD_NUMBER: _ClassVar[int] + ACTIVE_FIELD_NUMBER: _ClassVar[int] + CREATED_AT_FIELD_NUMBER: _ClassVar[int] + REVOKED_AT_FIELD_NUMBER: _ClassVar[int] + REVOCATION_FIELD_NUMBER: _ClassVar[int] + reference: str + delegation_id: str + module: str + binding: str + audience: str + tenant: str + owner_principal_id: str + scopes: _containers.RepeatedScalarFieldContainer[str] + active: bool + created_at: _timestamp_pb2.Timestamp + revoked_at: _timestamp_pb2.Timestamp + revocation: SourceDelegationRevocation + def __init__(self, reference: _Optional[str] = ..., delegation_id: _Optional[str] = ..., module: _Optional[str] = ..., binding: _Optional[str] = ..., audience: _Optional[str] = ..., tenant: _Optional[str] = ..., owner_principal_id: _Optional[str] = ..., scopes: _Optional[_Iterable[str]] = ..., active: bool = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., revoked_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., revocation: _Optional[_Union[SourceDelegationRevocation, str]] = ...) -> None: ... + +class TriggerChildContext(_message.Message): + __slots__ = ("delegation_id", "module", "binding", "audience", "scopes", "lookup", "minted_at", "record") + DELEGATION_ID_FIELD_NUMBER: _ClassVar[int] + MODULE_FIELD_NUMBER: _ClassVar[int] + BINDING_FIELD_NUMBER: _ClassVar[int] + AUDIENCE_FIELD_NUMBER: _ClassVar[int] + SCOPES_FIELD_NUMBER: _ClassVar[int] + LOOKUP_FIELD_NUMBER: _ClassVar[int] + MINTED_AT_FIELD_NUMBER: _ClassVar[int] + RECORD_FIELD_NUMBER: _ClassVar[int] + delegation_id: str + module: str + binding: str + audience: str + scopes: _containers.RepeatedScalarFieldContainer[str] + lookup: bool + minted_at: _timestamp_pb2.Timestamp + record: str + def __init__(self, delegation_id: _Optional[str] = ..., module: _Optional[str] = ..., binding: _Optional[str] = ..., audience: _Optional[str] = ..., scopes: _Optional[_Iterable[str]] = ..., lookup: bool = ..., minted_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., record: _Optional[str] = ...) -> None: ... + +class SourceTriggerDeclaration(_message.Message): + __slots__ = ("release", "operation", "schedule", "identity", "digest", "last_occurrence_at", "next_occurrence_at", "undeclarable_reason") + RELEASE_FIELD_NUMBER: _ClassVar[int] + OPERATION_FIELD_NUMBER: _ClassVar[int] + SCHEDULE_FIELD_NUMBER: _ClassVar[int] + IDENTITY_FIELD_NUMBER: _ClassVar[int] + DIGEST_FIELD_NUMBER: _ClassVar[int] + LAST_OCCURRENCE_AT_FIELD_NUMBER: _ClassVar[int] + NEXT_OCCURRENCE_AT_FIELD_NUMBER: _ClassVar[int] + UNDECLARABLE_REASON_FIELD_NUMBER: _ClassVar[int] + release: str + operation: str + schedule: DeclaredTriggerSchedule + identity: TriggerIdentity + digest: str + last_occurrence_at: _timestamp_pb2.Timestamp + next_occurrence_at: _timestamp_pb2.Timestamp + undeclarable_reason: str + def __init__(self, release: _Optional[str] = ..., operation: _Optional[str] = ..., schedule: _Optional[_Union[DeclaredTriggerSchedule, _Mapping]] = ..., identity: _Optional[_Union[TriggerIdentity, _Mapping]] = ..., digest: _Optional[str] = ..., last_occurrence_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., next_occurrence_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., undeclarable_reason: _Optional[str] = ...) -> None: ... + +class DelegateSourceTriggersRequest(_message.Message): + __slots__ = ("org_id", "source_id") + ORG_ID_FIELD_NUMBER: _ClassVar[int] + SOURCE_ID_FIELD_NUMBER: _ClassVar[int] + org_id: str + source_id: str + def __init__(self, org_id: _Optional[str] = ..., source_id: _Optional[str] = ...) -> None: ... + +class DelegateSourceTriggersResponse(_message.Message): + __slots__ = ("delegations",) + DELEGATIONS_FIELD_NUMBER: _ClassVar[int] + delegations: _containers.RepeatedCompositeFieldContainer[TriggerDelegationReference] + def __init__(self, delegations: _Optional[_Iterable[_Union[TriggerDelegationReference, _Mapping]]] = ...) -> None: ... + +class GetSourceTriggerDeclarationRequest(_message.Message): + __slots__ = ("org_id", "source_id") + ORG_ID_FIELD_NUMBER: _ClassVar[int] + SOURCE_ID_FIELD_NUMBER: _ClassVar[int] + org_id: str + source_id: str + def __init__(self, org_id: _Optional[str] = ..., source_id: _Optional[str] = ...) -> None: ... + +class GetSourceTriggerDeclarationResponse(_message.Message): + __slots__ = ("declaration", "delegations", "children") + DECLARATION_FIELD_NUMBER: _ClassVar[int] + DELEGATIONS_FIELD_NUMBER: _ClassVar[int] + CHILDREN_FIELD_NUMBER: _ClassVar[int] + declaration: SourceTriggerDeclaration + delegations: _containers.RepeatedCompositeFieldContainer[TriggerDelegationReference] + children: _containers.RepeatedCompositeFieldContainer[TriggerChildContext] + def __init__(self, declaration: _Optional[_Union[SourceTriggerDeclaration, _Mapping]] = ..., delegations: _Optional[_Iterable[_Union[TriggerDelegationReference, _Mapping]]] = ..., children: _Optional[_Iterable[_Union[TriggerChildContext, _Mapping]]] = ...) -> None: ... + +class ReconcileSourceRequest(_message.Message): + __slots__ = ("org_id", "source_id", "effect_id") + ORG_ID_FIELD_NUMBER: _ClassVar[int] + SOURCE_ID_FIELD_NUMBER: _ClassVar[int] + EFFECT_ID_FIELD_NUMBER: _ClassVar[int] + org_id: str + source_id: str + effect_id: str + def __init__(self, org_id: _Optional[str] = ..., source_id: _Optional[str] = ..., effect_id: _Optional[str] = ...) -> None: ... + +class ReconcileSourceResponse(_message.Message): + __slots__ = ("effect_id", "status", "job_id") + EFFECT_ID_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + JOB_ID_FIELD_NUMBER: _ClassVar[int] + effect_id: str + status: str + job_id: str + def __init__(self, effect_id: _Optional[str] = ..., status: _Optional[str] = ..., job_id: _Optional[str] = ...) -> None: ... + +class LookupReconcileSourceRequest(_message.Message): + __slots__ = ("effect_id",) + EFFECT_ID_FIELD_NUMBER: _ClassVar[int] + effect_id: str + def __init__(self, effect_id: _Optional[str] = ...) -> None: ... + class SourceOperation(_message.Message): __slots__ = ("name", "description", "method", "path", "query", "input_schema", "output_schema", "effect", "max_output_bytes", "digest") class Effect(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): diff --git a/src/saas_sdk/_gen/work_contexts_pb2.py b/src/saas_sdk/_gen/work_contexts_pb2.py index 81b396d..bfc0944 100644 --- a/src/saas_sdk/_gen/work_contexts_pb2.py +++ b/src/saas_sdk/_gen/work_contexts_pb2.py @@ -26,7 +26,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$saas/accounts/v1/work_contexts.proto\x12\x10saas.accounts.v1\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"t\n\x10WorkContextScope\x12#\n\rresource_kind\x18\x01 \x01(\tR\x0cresourceKind\x12\x18\n\x07\x61\x63tions\x18\x02 \x03(\tR\x07\x61\x63tions\x12!\n\x0cresource_ids\x18\x03 \x03(\tR\x0bresourceIds\"\xe2\x03\n\x1bStartTaskWorkContextRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x17\n\x07task_id\x18\x02 \x01(\tR\x06taskId\x12\x1d\n\nsession_id\x18\x03 \x01(\tR\tsessionId\x12,\n\x12\x61\x63tor_principal_id\x18\x04 \x01(\tR\x10\x61\x63torPrincipalId\x12M\n\x10\x61uthority_scopes\x18\x05 \x03(\x0b\x32\".saas.accounts.v1.WorkContextScopeR\x0f\x61uthorityScopes\x12\x1a\n\x08\x61udience\x18\x06 \x01(\tR\x08\x61udience\x12N\n\rreplay_policy\x18\x07 \x01(\x0e\x32).saas.accounts.v1.WorkContextReplayPolicyR\x0creplayPolicy\x12\x1f\n\x0bttl_seconds\x18\x08 \x01(\x05R\nttlSeconds\x12&\n\x0cworkspace_id\x18\t \x01(\tH\x00R\x0bworkspaceId\x88\x01\x01\x12\"\n\nproject_id\x18\n \x01(\tH\x01R\tprojectId\x88\x01\x01\x42\x0f\n\r_workspace_idB\r\n\x0b_project_id\"\xde\x03\n\x1cStartInstallationTaskRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\'\n\x0finstallation_id\x18\x02 \x01(\tR\x0einstallationId\x12\x17\n\x07task_id\x18\x03 \x01(\tR\x06taskId\x12\x1d\n\nsession_id\x18\x04 \x01(\tR\tsessionId\x12M\n\x10\x61uthority_scopes\x18\x05 \x03(\x0b\x32\".saas.accounts.v1.WorkContextScopeR\x0f\x61uthorityScopes\x12\x1a\n\x08\x61udience\x18\x06 \x01(\tR\x08\x61udience\x12N\n\rreplay_policy\x18\x07 \x01(\x0e\x32).saas.accounts.v1.WorkContextReplayPolicyR\x0creplayPolicy\x12\x1f\n\x0bttl_seconds\x18\x08 \x01(\x05R\nttlSeconds\x12&\n\x0cworkspace_id\x18\t \x01(\tH\x00R\x0bworkspaceId\x88\x01\x01\x12\"\n\nproject_id\x18\n \x01(\tH\x01R\tprojectId\x88\x01\x01\x42\x0f\n\r_workspace_idB\r\n\x0b_project_id\"\xa2\x02\n\"StartRootSessionWorkContextRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x39\n\x19parent_work_context_token\x18\x02 \x01(\tR\x16parentWorkContextToken\x12\x1d\n\nsession_id\x18\x03 \x01(\tR\tsessionId\x12\x1a\n\x08\x61udience\x18\x04 \x01(\tR\x08\x61udience\x12N\n\rreplay_policy\x18\x05 \x01(\x0e\x32).saas.accounts.v1.WorkContextReplayPolicyR\x0creplayPolicy\x12\x1f\n\x0bttl_seconds\x18\x06 \x01(\x05R\nttlSeconds\"\xd4\x02\n\"ExchangeWorkContextAudienceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x39\n\x19parent_work_context_token\x18\x02 \x01(\tR\x16parentWorkContextToken\x12\x1a\n\x08\x61udience\x18\x03 \x01(\tR\x08\x61udience\x12O\n\x11\x61ttenuated_scopes\x18\x04 \x03(\x0b\x32\".saas.accounts.v1.WorkContextScopeR\x10\x61ttenuatedScopes\x12N\n\rreplay_policy\x18\x05 \x01(\x0e\x32).saas.accounts.v1.WorkContextReplayPolicyR\x0creplayPolicy\x12\x1f\n\x0bttl_seconds\x18\x06 \x01(\x05R\nttlSeconds\"\x9c\x03\n#StartChildSessionWorkContextRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x39\n\x19parent_work_context_token\x18\x02 \x01(\tR\x16parentWorkContextToken\x12\x1d\n\nsession_id\x18\x03 \x01(\tR\tsessionId\x12,\n\x12\x61\x63tor_principal_id\x18\x04 \x01(\tR\x10\x61\x63torPrincipalId\x12I\n\x0egranted_scopes\x18\x05 \x03(\x0b\x32\".saas.accounts.v1.WorkContextScopeR\rgrantedScopes\x12\x1a\n\x08\x61udience\x18\x06 \x01(\tR\x08\x61udience\x12N\n\rreplay_policy\x18\x07 \x01(\x0e\x32).saas.accounts.v1.WorkContextReplayPolicyR\x0creplayPolicy\x12\x1f\n\x0bttl_seconds\x18\x08 \x01(\x05R\nttlSeconds\"\xdb\x02\n\x17RenewWorkContextRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x39\n\x19parent_work_context_token\x18\x02 \x01(\tR\x16parentWorkContextToken\x12\x1f\n\x08\x61udience\x18\x03 \x01(\tH\x00R\x08\x61udience\x88\x01\x01\x12O\n\x11\x61ttenuated_scopes\x18\x04 \x03(\x0b\x32\".saas.accounts.v1.WorkContextScopeR\x10\x61ttenuatedScopes\x12N\n\rreplay_policy\x18\x05 \x01(\x0e\x32).saas.accounts.v1.WorkContextReplayPolicyR\x0creplayPolicy\x12\x1f\n\x0bttl_seconds\x18\x06 \x01(\x05R\nttlSecondsB\x0b\n\t_audience\"\x88\x04\n\x11IssuedWorkContext\x12\x14\n\x05token\x18\x01 \x01(\tR\x05token\x12\x15\n\x06org_id\x18\x02 \x01(\tR\x05orgId\x12,\n\x12owner_principal_id\x18\x03 \x01(\tR\x10ownerPrincipalId\x12\x17\n\x07task_id\x18\x04 \x01(\tR\x06taskId\x12\x1d\n\nsession_id\x18\x05 \x01(\tR\tsessionId\x12/\n\x11parent_session_id\x18\x06 \x01(\tH\x00R\x0fparentSessionId\x88\x01\x01\x12;\n\x1a\x63urrent_actor_principal_id\x18\x07 \x01(\tR\x17\x63urrentActorPrincipalId\x12\x35\n\x16\x61uthorization_revision\x18\x08 \x01(\x04R\x15\x61uthorizationRevision\x12\x39\n\nexpires_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12&\n\x0cworkspace_id\x18\n \x01(\tH\x01R\x0bworkspaceId\x88\x01\x01\x12\"\n\nproject_id\x18\x0b \x01(\tH\x02R\tprojectId\x88\x01\x01\x42\x14\n\x12_parent_session_idB\x0f\n\r_workspace_idB\r\n\x0b_project_id\"{\n\x1aWorkContextRevisionSubject\x12!\n\x0cprincipal_id\x18\x01 \x01(\tR\x0bprincipalId\x12:\n\x06scopes\x18\x02 \x03(\x0b\x32\".saas.accounts.v1.WorkContextScopeR\x06scopes\"\xe9\x01\n!CheckAuthorizationRevisionRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12,\n\x12owner_principal_id\x18\x02 \x01(\tR\x10ownerPrincipalId\x12\x35\n\x16\x61uthorization_revision\x18\x03 \x01(\x04R\x15\x61uthorizationRevision\x12H\n\x08subjects\x18\x04 \x03(\x0b\x32,.saas.accounts.v1.WorkContextRevisionSubjectR\x08subjects\"\x8c\x02\n\x1c\x41uthorizeEvidenceReadRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12.\n\x13\x63\x61ller_principal_id\x18\x02 \x01(\tR\x11\x63\x61llerPrincipalId\x12\x31\n\x12owner_principal_id\x18\x03 \x01(\tH\x00R\x10ownerPrincipalId\x88\x01\x01\x12\x1c\n\x07task_id\x18\x04 \x01(\tH\x01R\x06taskId\x88\x01\x01\x12\"\n\nsession_id\x18\x05 \x01(\tH\x02R\tsessionId\x88\x01\x01\x42\x15\n\x13_owner_principal_idB\n\n\x08_task_idB\r\n\x0b_session_id\"\x95\x01\n\"ConsumeSingleUseWorkContextRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1d\n\ncontext_id\x18\x02 \x01(\tR\tcontextId\x12\x39\n\nexpires_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt*\x9b\x01\n\x17WorkContextReplayPolicy\x12*\n&WORK_CONTEXT_REPLAY_POLICY_UNSPECIFIED\x10\x00\x12)\n%WORK_CONTEXT_REPLAY_POLICY_IDEMPOTENT\x10\x01\x12)\n%WORK_CONTEXT_REPLAY_POLICY_SINGLE_USE\x10\x02\x32\xc4\x07\n\x12WorkContextService\x12i\n\x1a\x43heckAuthorizationRevision\x12\x33.saas.accounts.v1.CheckAuthorizationRevisionRequest\x1a\x16.google.protobuf.Empty\x12_\n\x15\x41uthorizeEvidenceRead\x12..saas.accounts.v1.AuthorizeEvidenceReadRequest\x1a\x16.google.protobuf.Empty\x12`\n\x10\x43onsumeSingleUse\x12\x34.saas.accounts.v1.ConsumeSingleUseWorkContextRequest\x1a\x16.google.protobuf.Empty\x12_\n\tStartTask\x12-.saas.accounts.v1.StartTaskWorkContextRequest\x1a#.saas.accounts.v1.IssuedWorkContext\x12l\n\x15StartInstallationTask\x12..saas.accounts.v1.StartInstallationTaskRequest\x1a#.saas.accounts.v1.IssuedWorkContext\x12m\n\x10StartRootSession\x12\x34.saas.accounts.v1.StartRootSessionWorkContextRequest\x1a#.saas.accounts.v1.IssuedWorkContext\x12m\n\x10\x45xchangeAudience\x12\x34.saas.accounts.v1.ExchangeWorkContextAudienceRequest\x1a#.saas.accounts.v1.IssuedWorkContext\x12o\n\x11StartChildSession\x12\x35.saas.accounts.v1.StartChildSessionWorkContextRequest\x1a#.saas.accounts.v1.IssuedWorkContext\x12\x62\n\x10RenewWorkContext\x12).saas.accounts.v1.RenewWorkContextRequest\x1a#.saas.accounts.v1.IssuedWorkContextB\x8b\x01\n\x14\x63om.saas.accounts.v1B\x11WorkContextsProtoP\x01\xa2\x02\x03SAX\xaa\x02\x10Saas.Accounts.V1\xca\x02\x10Saas\\Accounts\\V1\xe2\x02\x1cSaas\\Accounts\\V1\\GPBMetadata\xea\x02\x12Saas::Accounts::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$saas/accounts/v1/work_contexts.proto\x12\x10saas.accounts.v1\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"t\n\x10WorkContextScope\x12#\n\rresource_kind\x18\x01 \x01(\tR\x0cresourceKind\x12\x18\n\x07\x61\x63tions\x18\x02 \x03(\tR\x07\x61\x63tions\x12!\n\x0cresource_ids\x18\x03 \x03(\tR\x0bresourceIds\"\xd5\x03\n\x1bStartTaskWorkContextRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x17\n\x07task_id\x18\x02 \x01(\tR\x06taskId\x12,\n\x12\x61\x63tor_principal_id\x18\x04 \x01(\tR\x10\x61\x63torPrincipalId\x12M\n\x10\x61uthority_scopes\x18\x05 \x03(\x0b\x32\".saas.accounts.v1.WorkContextScopeR\x0f\x61uthorityScopes\x12\x1a\n\x08\x61udience\x18\x06 \x01(\tR\x08\x61udience\x12N\n\rreplay_policy\x18\x07 \x01(\x0e\x32).saas.accounts.v1.WorkContextReplayPolicyR\x0creplayPolicy\x12\x1f\n\x0bttl_seconds\x18\x08 \x01(\x05R\nttlSeconds\x12&\n\x0cworkspace_id\x18\t \x01(\tH\x00R\x0bworkspaceId\x88\x01\x01\x12\"\n\nproject_id\x18\n \x01(\tH\x01R\tprojectId\x88\x01\x01\x42\x0f\n\r_workspace_idB\r\n\x0b_project_idJ\x04\x08\x03\x10\x04R\nsession_id\"\xd1\x03\n\x1cStartInstallationTaskRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\'\n\x0finstallation_id\x18\x02 \x01(\tR\x0einstallationId\x12\x17\n\x07task_id\x18\x03 \x01(\tR\x06taskId\x12M\n\x10\x61uthority_scopes\x18\x05 \x03(\x0b\x32\".saas.accounts.v1.WorkContextScopeR\x0f\x61uthorityScopes\x12\x1a\n\x08\x61udience\x18\x06 \x01(\tR\x08\x61udience\x12N\n\rreplay_policy\x18\x07 \x01(\x0e\x32).saas.accounts.v1.WorkContextReplayPolicyR\x0creplayPolicy\x12\x1f\n\x0bttl_seconds\x18\x08 \x01(\x05R\nttlSeconds\x12&\n\x0cworkspace_id\x18\t \x01(\tH\x00R\x0bworkspaceId\x88\x01\x01\x12\"\n\nproject_id\x18\n \x01(\tH\x01R\tprojectId\x88\x01\x01\x42\x0f\n\r_workspace_idB\r\n\x0b_project_idJ\x04\x08\x04\x10\x05R\nsession_id\"\xa2\x02\n\"StartRootSessionWorkContextRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x39\n\x19parent_work_context_token\x18\x02 \x01(\tR\x16parentWorkContextToken\x12\x1d\n\nsession_id\x18\x03 \x01(\tR\tsessionId\x12\x1a\n\x08\x61udience\x18\x04 \x01(\tR\x08\x61udience\x12N\n\rreplay_policy\x18\x05 \x01(\x0e\x32).saas.accounts.v1.WorkContextReplayPolicyR\x0creplayPolicy\x12\x1f\n\x0bttl_seconds\x18\x06 \x01(\x05R\nttlSeconds\"\xd4\x02\n\"ExchangeWorkContextAudienceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x39\n\x19parent_work_context_token\x18\x02 \x01(\tR\x16parentWorkContextToken\x12\x1a\n\x08\x61udience\x18\x03 \x01(\tR\x08\x61udience\x12O\n\x11\x61ttenuated_scopes\x18\x04 \x03(\x0b\x32\".saas.accounts.v1.WorkContextScopeR\x10\x61ttenuatedScopes\x12N\n\rreplay_policy\x18\x05 \x01(\x0e\x32).saas.accounts.v1.WorkContextReplayPolicyR\x0creplayPolicy\x12\x1f\n\x0bttl_seconds\x18\x06 \x01(\x05R\nttlSeconds\"\x8f\x03\n#StartChildSessionWorkContextRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x39\n\x19parent_work_context_token\x18\x02 \x01(\tR\x16parentWorkContextToken\x12,\n\x12\x61\x63tor_principal_id\x18\x04 \x01(\tR\x10\x61\x63torPrincipalId\x12I\n\x0egranted_scopes\x18\x05 \x03(\x0b\x32\".saas.accounts.v1.WorkContextScopeR\rgrantedScopes\x12\x1a\n\x08\x61udience\x18\x06 \x01(\tR\x08\x61udience\x12N\n\rreplay_policy\x18\x07 \x01(\x0e\x32).saas.accounts.v1.WorkContextReplayPolicyR\x0creplayPolicy\x12\x1f\n\x0bttl_seconds\x18\x08 \x01(\x05R\nttlSecondsJ\x04\x08\x03\x10\x04R\nsession_id\"\xdb\x02\n\x17RenewWorkContextRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x39\n\x19parent_work_context_token\x18\x02 \x01(\tR\x16parentWorkContextToken\x12\x1f\n\x08\x61udience\x18\x03 \x01(\tH\x00R\x08\x61udience\x88\x01\x01\x12O\n\x11\x61ttenuated_scopes\x18\x04 \x03(\x0b\x32\".saas.accounts.v1.WorkContextScopeR\x10\x61ttenuatedScopes\x12N\n\rreplay_policy\x18\x05 \x01(\x0e\x32).saas.accounts.v1.WorkContextReplayPolicyR\x0creplayPolicy\x12\x1f\n\x0bttl_seconds\x18\x06 \x01(\x05R\nttlSecondsB\x0b\n\t_audience\"\x88\x04\n\x11IssuedWorkContext\x12\x14\n\x05token\x18\x01 \x01(\tR\x05token\x12\x15\n\x06org_id\x18\x02 \x01(\tR\x05orgId\x12,\n\x12owner_principal_id\x18\x03 \x01(\tR\x10ownerPrincipalId\x12\x17\n\x07task_id\x18\x04 \x01(\tR\x06taskId\x12\x1d\n\nsession_id\x18\x05 \x01(\tR\tsessionId\x12/\n\x11parent_session_id\x18\x06 \x01(\tH\x00R\x0fparentSessionId\x88\x01\x01\x12;\n\x1a\x63urrent_actor_principal_id\x18\x07 \x01(\tR\x17\x63urrentActorPrincipalId\x12\x35\n\x16\x61uthorization_revision\x18\x08 \x01(\x04R\x15\x61uthorizationRevision\x12\x39\n\nexpires_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12&\n\x0cworkspace_id\x18\n \x01(\tH\x01R\x0bworkspaceId\x88\x01\x01\x12\"\n\nproject_id\x18\x0b \x01(\tH\x02R\tprojectId\x88\x01\x01\x42\x14\n\x12_parent_session_idB\x0f\n\r_workspace_idB\r\n\x0b_project_id\"{\n\x1aWorkContextRevisionSubject\x12!\n\x0cprincipal_id\x18\x01 \x01(\tR\x0bprincipalId\x12:\n\x06scopes\x18\x02 \x03(\x0b\x32\".saas.accounts.v1.WorkContextScopeR\x06scopes\"\xfd\x02\n!CheckAuthorizationRevisionRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12,\n\x12owner_principal_id\x18\x02 \x01(\tR\x10ownerPrincipalId\x12\x35\n\x16\x61uthorization_revision\x18\x03 \x01(\x04R\x15\x61uthorizationRevision\x12H\n\x08subjects\x18\x04 \x03(\x0b\x32,.saas.accounts.v1.WorkContextRevisionSubjectR\x08subjects\x12\x35\n\x14operation_binding_id\x18\x05 \x01(\tH\x00R\x12operationBindingId\x88\x01\x01\x12-\n\x10seals_no_binding\x18\x06 \x01(\x08H\x01R\x0esealsNoBinding\x88\x01\x01\x42\x17\n\x15_operation_binding_idB\x13\n\x11_seals_no_binding\"\x8c\x02\n\x1c\x41uthorizeEvidenceReadRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12.\n\x13\x63\x61ller_principal_id\x18\x02 \x01(\tR\x11\x63\x61llerPrincipalId\x12\x31\n\x12owner_principal_id\x18\x03 \x01(\tH\x00R\x10ownerPrincipalId\x88\x01\x01\x12\x1c\n\x07task_id\x18\x04 \x01(\tH\x01R\x06taskId\x88\x01\x01\x12\"\n\nsession_id\x18\x05 \x01(\tH\x02R\tsessionId\x88\x01\x01\x42\x15\n\x13_owner_principal_idB\n\n\x08_task_idB\r\n\x0b_session_id\"\x95\x01\n\"ConsumeSingleUseWorkContextRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1d\n\ncontext_id\x18\x02 \x01(\tR\tcontextId\x12\x39\n\nexpires_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\"\xa8\x01\n\"VerifyIdempotentWorkContextRequest\x12,\n\x12work_context_token\x18\x01 \x01(\tR\x10workContextToken\x12\'\n\x0f\x65xpected_issuer\x18\x02 \x01(\tR\x0e\x65xpectedIssuer\x12+\n\x11\x65xpected_audience\x18\x03 \x01(\tR\x10\x65xpectedAudience\"\xd0\x02\n#VerifyIdempotentWorkContextResponse\x12\x1b\n\ttenant_id\x18\x01 \x01(\tR\x08tenantId\x12,\n\x12owner_principal_id\x18\x02 \x01(\tR\x10ownerPrincipalId\x12;\n\x1a\x63urrent_actor_principal_id\x18\x03 \x01(\tR\x17\x63urrentActorPrincipalId\x12\x17\n\x07task_id\x18\x04 \x01(\tR\x06taskId\x12\x39\n\nexpires_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12M\n\x10\x65\x66\x66\x65\x63tive_scopes\x18\x06 \x03(\x0b\x32\".saas.accounts.v1.WorkContextScopeR\x0f\x65\x66\x66\x65\x63tiveScopes*\x9b\x01\n\x17WorkContextReplayPolicy\x12*\n&WORK_CONTEXT_REPLAY_POLICY_UNSPECIFIED\x10\x00\x12)\n%WORK_CONTEXT_REPLAY_POLICY_IDEMPOTENT\x10\x01\x12)\n%WORK_CONTEXT_REPLAY_POLICY_SINGLE_USE\x10\x02\x32\xc5\x08\n\x12WorkContextService\x12\x7f\n\x10VerifyIdempotent\x12\x34.saas.accounts.v1.VerifyIdempotentWorkContextRequest\x1a\x35.saas.accounts.v1.VerifyIdempotentWorkContextResponse\x12i\n\x1a\x43heckAuthorizationRevision\x12\x33.saas.accounts.v1.CheckAuthorizationRevisionRequest\x1a\x16.google.protobuf.Empty\x12_\n\x15\x41uthorizeEvidenceRead\x12..saas.accounts.v1.AuthorizeEvidenceReadRequest\x1a\x16.google.protobuf.Empty\x12`\n\x10\x43onsumeSingleUse\x12\x34.saas.accounts.v1.ConsumeSingleUseWorkContextRequest\x1a\x16.google.protobuf.Empty\x12_\n\tStartTask\x12-.saas.accounts.v1.StartTaskWorkContextRequest\x1a#.saas.accounts.v1.IssuedWorkContext\x12l\n\x15StartInstallationTask\x12..saas.accounts.v1.StartInstallationTaskRequest\x1a#.saas.accounts.v1.IssuedWorkContext\x12m\n\x10StartRootSession\x12\x34.saas.accounts.v1.StartRootSessionWorkContextRequest\x1a#.saas.accounts.v1.IssuedWorkContext\x12m\n\x10\x45xchangeAudience\x12\x34.saas.accounts.v1.ExchangeWorkContextAudienceRequest\x1a#.saas.accounts.v1.IssuedWorkContext\x12o\n\x11StartChildSession\x12\x35.saas.accounts.v1.StartChildSessionWorkContextRequest\x1a#.saas.accounts.v1.IssuedWorkContext\x12\x62\n\x10RenewWorkContext\x12).saas.accounts.v1.RenewWorkContextRequest\x1a#.saas.accounts.v1.IssuedWorkContextB\x8b\x01\n\x14\x63om.saas.accounts.v1B\x11WorkContextsProtoP\x01\xa2\x02\x03SAX\xaa\x02\x10Saas.Accounts.V1\xca\x02\x10Saas\\Accounts\\V1\xe2\x02\x1cSaas\\Accounts\\V1\\GPBMetadata\xea\x02\x12Saas::Accounts::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -34,32 +34,36 @@ if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'\n\024com.saas.accounts.v1B\021WorkContextsProtoP\001\242\002\003SAX\252\002\020Saas.Accounts.V1\312\002\020Saas\\Accounts\\V1\342\002\034Saas\\Accounts\\V1\\GPBMetadata\352\002\022Saas::Accounts::V1' - _globals['_WORKCONTEXTREPLAYPOLICY']._serialized_start=3913 - _globals['_WORKCONTEXTREPLAYPOLICY']._serialized_end=4068 + _globals['_WORKCONTEXTREPLAYPOLICY']._serialized_start=4532 + _globals['_WORKCONTEXTREPLAYPOLICY']._serialized_end=4687 _globals['_WORKCONTEXTSCOPE']._serialized_start=120 _globals['_WORKCONTEXTSCOPE']._serialized_end=236 _globals['_STARTTASKWORKCONTEXTREQUEST']._serialized_start=239 - _globals['_STARTTASKWORKCONTEXTREQUEST']._serialized_end=721 - _globals['_STARTINSTALLATIONTASKREQUEST']._serialized_start=724 - _globals['_STARTINSTALLATIONTASKREQUEST']._serialized_end=1202 - _globals['_STARTROOTSESSIONWORKCONTEXTREQUEST']._serialized_start=1205 - _globals['_STARTROOTSESSIONWORKCONTEXTREQUEST']._serialized_end=1495 - _globals['_EXCHANGEWORKCONTEXTAUDIENCEREQUEST']._serialized_start=1498 - _globals['_EXCHANGEWORKCONTEXTAUDIENCEREQUEST']._serialized_end=1838 - _globals['_STARTCHILDSESSIONWORKCONTEXTREQUEST']._serialized_start=1841 - _globals['_STARTCHILDSESSIONWORKCONTEXTREQUEST']._serialized_end=2253 - _globals['_RENEWWORKCONTEXTREQUEST']._serialized_start=2256 - _globals['_RENEWWORKCONTEXTREQUEST']._serialized_end=2603 - _globals['_ISSUEDWORKCONTEXT']._serialized_start=2606 - _globals['_ISSUEDWORKCONTEXT']._serialized_end=3126 - _globals['_WORKCONTEXTREVISIONSUBJECT']._serialized_start=3128 - _globals['_WORKCONTEXTREVISIONSUBJECT']._serialized_end=3251 - _globals['_CHECKAUTHORIZATIONREVISIONREQUEST']._serialized_start=3254 - _globals['_CHECKAUTHORIZATIONREVISIONREQUEST']._serialized_end=3487 - _globals['_AUTHORIZEEVIDENCEREADREQUEST']._serialized_start=3490 - _globals['_AUTHORIZEEVIDENCEREADREQUEST']._serialized_end=3758 - _globals['_CONSUMESINGLEUSEWORKCONTEXTREQUEST']._serialized_start=3761 - _globals['_CONSUMESINGLEUSEWORKCONTEXTREQUEST']._serialized_end=3910 - _globals['_WORKCONTEXTSERVICE']._serialized_start=4071 - _globals['_WORKCONTEXTSERVICE']._serialized_end=5035 + _globals['_STARTTASKWORKCONTEXTREQUEST']._serialized_end=708 + _globals['_STARTINSTALLATIONTASKREQUEST']._serialized_start=711 + _globals['_STARTINSTALLATIONTASKREQUEST']._serialized_end=1176 + _globals['_STARTROOTSESSIONWORKCONTEXTREQUEST']._serialized_start=1179 + _globals['_STARTROOTSESSIONWORKCONTEXTREQUEST']._serialized_end=1469 + _globals['_EXCHANGEWORKCONTEXTAUDIENCEREQUEST']._serialized_start=1472 + _globals['_EXCHANGEWORKCONTEXTAUDIENCEREQUEST']._serialized_end=1812 + _globals['_STARTCHILDSESSIONWORKCONTEXTREQUEST']._serialized_start=1815 + _globals['_STARTCHILDSESSIONWORKCONTEXTREQUEST']._serialized_end=2214 + _globals['_RENEWWORKCONTEXTREQUEST']._serialized_start=2217 + _globals['_RENEWWORKCONTEXTREQUEST']._serialized_end=2564 + _globals['_ISSUEDWORKCONTEXT']._serialized_start=2567 + _globals['_ISSUEDWORKCONTEXT']._serialized_end=3087 + _globals['_WORKCONTEXTREVISIONSUBJECT']._serialized_start=3089 + _globals['_WORKCONTEXTREVISIONSUBJECT']._serialized_end=3212 + _globals['_CHECKAUTHORIZATIONREVISIONREQUEST']._serialized_start=3215 + _globals['_CHECKAUTHORIZATIONREVISIONREQUEST']._serialized_end=3596 + _globals['_AUTHORIZEEVIDENCEREADREQUEST']._serialized_start=3599 + _globals['_AUTHORIZEEVIDENCEREADREQUEST']._serialized_end=3867 + _globals['_CONSUMESINGLEUSEWORKCONTEXTREQUEST']._serialized_start=3870 + _globals['_CONSUMESINGLEUSEWORKCONTEXTREQUEST']._serialized_end=4019 + _globals['_VERIFYIDEMPOTENTWORKCONTEXTREQUEST']._serialized_start=4022 + _globals['_VERIFYIDEMPOTENTWORKCONTEXTREQUEST']._serialized_end=4190 + _globals['_VERIFYIDEMPOTENTWORKCONTEXTRESPONSE']._serialized_start=4193 + _globals['_VERIFYIDEMPOTENTWORKCONTEXTRESPONSE']._serialized_end=4529 + _globals['_WORKCONTEXTSERVICE']._serialized_start=4690 + _globals['_WORKCONTEXTSERVICE']._serialized_end=5783 # @@protoc_insertion_point(module_scope) diff --git a/src/saas_sdk/_gen/work_contexts_pb2.pyi b/src/saas_sdk/_gen/work_contexts_pb2.pyi index 54e0de4..81e37f3 100644 --- a/src/saas_sdk/_gen/work_contexts_pb2.pyi +++ b/src/saas_sdk/_gen/work_contexts_pb2.pyi @@ -28,10 +28,9 @@ class WorkContextScope(_message.Message): def __init__(self, resource_kind: _Optional[str] = ..., actions: _Optional[_Iterable[str]] = ..., resource_ids: _Optional[_Iterable[str]] = ...) -> None: ... class StartTaskWorkContextRequest(_message.Message): - __slots__ = ("org_id", "task_id", "session_id", "actor_principal_id", "authority_scopes", "audience", "replay_policy", "ttl_seconds", "workspace_id", "project_id") + __slots__ = ("org_id", "task_id", "actor_principal_id", "authority_scopes", "audience", "replay_policy", "ttl_seconds", "workspace_id", "project_id") ORG_ID_FIELD_NUMBER: _ClassVar[int] TASK_ID_FIELD_NUMBER: _ClassVar[int] - SESSION_ID_FIELD_NUMBER: _ClassVar[int] ACTOR_PRINCIPAL_ID_FIELD_NUMBER: _ClassVar[int] AUTHORITY_SCOPES_FIELD_NUMBER: _ClassVar[int] AUDIENCE_FIELD_NUMBER: _ClassVar[int] @@ -41,7 +40,6 @@ class StartTaskWorkContextRequest(_message.Message): PROJECT_ID_FIELD_NUMBER: _ClassVar[int] org_id: str task_id: str - session_id: str actor_principal_id: str authority_scopes: _containers.RepeatedCompositeFieldContainer[WorkContextScope] audience: str @@ -49,14 +47,13 @@ class StartTaskWorkContextRequest(_message.Message): ttl_seconds: int workspace_id: str project_id: str - def __init__(self, org_id: _Optional[str] = ..., task_id: _Optional[str] = ..., session_id: _Optional[str] = ..., actor_principal_id: _Optional[str] = ..., authority_scopes: _Optional[_Iterable[_Union[WorkContextScope, _Mapping]]] = ..., audience: _Optional[str] = ..., replay_policy: _Optional[_Union[WorkContextReplayPolicy, str]] = ..., ttl_seconds: _Optional[int] = ..., workspace_id: _Optional[str] = ..., project_id: _Optional[str] = ...) -> None: ... + def __init__(self, org_id: _Optional[str] = ..., task_id: _Optional[str] = ..., actor_principal_id: _Optional[str] = ..., authority_scopes: _Optional[_Iterable[_Union[WorkContextScope, _Mapping]]] = ..., audience: _Optional[str] = ..., replay_policy: _Optional[_Union[WorkContextReplayPolicy, str]] = ..., ttl_seconds: _Optional[int] = ..., workspace_id: _Optional[str] = ..., project_id: _Optional[str] = ...) -> None: ... class StartInstallationTaskRequest(_message.Message): - __slots__ = ("org_id", "installation_id", "task_id", "session_id", "authority_scopes", "audience", "replay_policy", "ttl_seconds", "workspace_id", "project_id") + __slots__ = ("org_id", "installation_id", "task_id", "authority_scopes", "audience", "replay_policy", "ttl_seconds", "workspace_id", "project_id") ORG_ID_FIELD_NUMBER: _ClassVar[int] INSTALLATION_ID_FIELD_NUMBER: _ClassVar[int] TASK_ID_FIELD_NUMBER: _ClassVar[int] - SESSION_ID_FIELD_NUMBER: _ClassVar[int] AUTHORITY_SCOPES_FIELD_NUMBER: _ClassVar[int] AUDIENCE_FIELD_NUMBER: _ClassVar[int] REPLAY_POLICY_FIELD_NUMBER: _ClassVar[int] @@ -66,14 +63,13 @@ class StartInstallationTaskRequest(_message.Message): org_id: str installation_id: str task_id: str - session_id: str authority_scopes: _containers.RepeatedCompositeFieldContainer[WorkContextScope] audience: str replay_policy: WorkContextReplayPolicy ttl_seconds: int workspace_id: str project_id: str - def __init__(self, org_id: _Optional[str] = ..., installation_id: _Optional[str] = ..., task_id: _Optional[str] = ..., session_id: _Optional[str] = ..., authority_scopes: _Optional[_Iterable[_Union[WorkContextScope, _Mapping]]] = ..., audience: _Optional[str] = ..., replay_policy: _Optional[_Union[WorkContextReplayPolicy, str]] = ..., ttl_seconds: _Optional[int] = ..., workspace_id: _Optional[str] = ..., project_id: _Optional[str] = ...) -> None: ... + def __init__(self, org_id: _Optional[str] = ..., installation_id: _Optional[str] = ..., task_id: _Optional[str] = ..., authority_scopes: _Optional[_Iterable[_Union[WorkContextScope, _Mapping]]] = ..., audience: _Optional[str] = ..., replay_policy: _Optional[_Union[WorkContextReplayPolicy, str]] = ..., ttl_seconds: _Optional[int] = ..., workspace_id: _Optional[str] = ..., project_id: _Optional[str] = ...) -> None: ... class StartRootSessionWorkContextRequest(_message.Message): __slots__ = ("org_id", "parent_work_context_token", "session_id", "audience", "replay_policy", "ttl_seconds") @@ -108,10 +104,9 @@ class ExchangeWorkContextAudienceRequest(_message.Message): def __init__(self, org_id: _Optional[str] = ..., parent_work_context_token: _Optional[str] = ..., audience: _Optional[str] = ..., attenuated_scopes: _Optional[_Iterable[_Union[WorkContextScope, _Mapping]]] = ..., replay_policy: _Optional[_Union[WorkContextReplayPolicy, str]] = ..., ttl_seconds: _Optional[int] = ...) -> None: ... class StartChildSessionWorkContextRequest(_message.Message): - __slots__ = ("org_id", "parent_work_context_token", "session_id", "actor_principal_id", "granted_scopes", "audience", "replay_policy", "ttl_seconds") + __slots__ = ("org_id", "parent_work_context_token", "actor_principal_id", "granted_scopes", "audience", "replay_policy", "ttl_seconds") ORG_ID_FIELD_NUMBER: _ClassVar[int] PARENT_WORK_CONTEXT_TOKEN_FIELD_NUMBER: _ClassVar[int] - SESSION_ID_FIELD_NUMBER: _ClassVar[int] ACTOR_PRINCIPAL_ID_FIELD_NUMBER: _ClassVar[int] GRANTED_SCOPES_FIELD_NUMBER: _ClassVar[int] AUDIENCE_FIELD_NUMBER: _ClassVar[int] @@ -119,13 +114,12 @@ class StartChildSessionWorkContextRequest(_message.Message): TTL_SECONDS_FIELD_NUMBER: _ClassVar[int] org_id: str parent_work_context_token: str - session_id: str actor_principal_id: str granted_scopes: _containers.RepeatedCompositeFieldContainer[WorkContextScope] audience: str replay_policy: WorkContextReplayPolicy ttl_seconds: int - def __init__(self, org_id: _Optional[str] = ..., parent_work_context_token: _Optional[str] = ..., session_id: _Optional[str] = ..., actor_principal_id: _Optional[str] = ..., granted_scopes: _Optional[_Iterable[_Union[WorkContextScope, _Mapping]]] = ..., audience: _Optional[str] = ..., replay_policy: _Optional[_Union[WorkContextReplayPolicy, str]] = ..., ttl_seconds: _Optional[int] = ...) -> None: ... + def __init__(self, org_id: _Optional[str] = ..., parent_work_context_token: _Optional[str] = ..., actor_principal_id: _Optional[str] = ..., granted_scopes: _Optional[_Iterable[_Union[WorkContextScope, _Mapping]]] = ..., audience: _Optional[str] = ..., replay_policy: _Optional[_Union[WorkContextReplayPolicy, str]] = ..., ttl_seconds: _Optional[int] = ...) -> None: ... class RenewWorkContextRequest(_message.Message): __slots__ = ("org_id", "parent_work_context_token", "audience", "attenuated_scopes", "replay_policy", "ttl_seconds") @@ -178,16 +172,20 @@ class WorkContextRevisionSubject(_message.Message): def __init__(self, principal_id: _Optional[str] = ..., scopes: _Optional[_Iterable[_Union[WorkContextScope, _Mapping]]] = ...) -> None: ... class CheckAuthorizationRevisionRequest(_message.Message): - __slots__ = ("org_id", "owner_principal_id", "authorization_revision", "subjects") + __slots__ = ("org_id", "owner_principal_id", "authorization_revision", "subjects", "operation_binding_id", "seals_no_binding") ORG_ID_FIELD_NUMBER: _ClassVar[int] OWNER_PRINCIPAL_ID_FIELD_NUMBER: _ClassVar[int] AUTHORIZATION_REVISION_FIELD_NUMBER: _ClassVar[int] SUBJECTS_FIELD_NUMBER: _ClassVar[int] + OPERATION_BINDING_ID_FIELD_NUMBER: _ClassVar[int] + SEALS_NO_BINDING_FIELD_NUMBER: _ClassVar[int] org_id: str owner_principal_id: str authorization_revision: int subjects: _containers.RepeatedCompositeFieldContainer[WorkContextRevisionSubject] - def __init__(self, org_id: _Optional[str] = ..., owner_principal_id: _Optional[str] = ..., authorization_revision: _Optional[int] = ..., subjects: _Optional[_Iterable[_Union[WorkContextRevisionSubject, _Mapping]]] = ...) -> None: ... + operation_binding_id: str + seals_no_binding: bool + def __init__(self, org_id: _Optional[str] = ..., owner_principal_id: _Optional[str] = ..., authorization_revision: _Optional[int] = ..., subjects: _Optional[_Iterable[_Union[WorkContextRevisionSubject, _Mapping]]] = ..., operation_binding_id: _Optional[str] = ..., seals_no_binding: bool = ...) -> None: ... class AuthorizeEvidenceReadRequest(_message.Message): __slots__ = ("org_id", "caller_principal_id", "owner_principal_id", "task_id", "session_id") @@ -212,3 +210,29 @@ class ConsumeSingleUseWorkContextRequest(_message.Message): context_id: str expires_at: _timestamp_pb2.Timestamp def __init__(self, org_id: _Optional[str] = ..., context_id: _Optional[str] = ..., expires_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... + +class VerifyIdempotentWorkContextRequest(_message.Message): + __slots__ = ("work_context_token", "expected_issuer", "expected_audience") + WORK_CONTEXT_TOKEN_FIELD_NUMBER: _ClassVar[int] + EXPECTED_ISSUER_FIELD_NUMBER: _ClassVar[int] + EXPECTED_AUDIENCE_FIELD_NUMBER: _ClassVar[int] + work_context_token: str + expected_issuer: str + expected_audience: str + def __init__(self, work_context_token: _Optional[str] = ..., expected_issuer: _Optional[str] = ..., expected_audience: _Optional[str] = ...) -> None: ... + +class VerifyIdempotentWorkContextResponse(_message.Message): + __slots__ = ("tenant_id", "owner_principal_id", "current_actor_principal_id", "task_id", "expires_at", "effective_scopes") + TENANT_ID_FIELD_NUMBER: _ClassVar[int] + OWNER_PRINCIPAL_ID_FIELD_NUMBER: _ClassVar[int] + CURRENT_ACTOR_PRINCIPAL_ID_FIELD_NUMBER: _ClassVar[int] + TASK_ID_FIELD_NUMBER: _ClassVar[int] + EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] + EFFECTIVE_SCOPES_FIELD_NUMBER: _ClassVar[int] + tenant_id: str + owner_principal_id: str + current_actor_principal_id: str + task_id: str + expires_at: _timestamp_pb2.Timestamp + effective_scopes: _containers.RepeatedCompositeFieldContainer[WorkContextScope] + def __init__(self, tenant_id: _Optional[str] = ..., owner_principal_id: _Optional[str] = ..., current_actor_principal_id: _Optional[str] = ..., task_id: _Optional[str] = ..., expires_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., effective_scopes: _Optional[_Iterable[_Union[WorkContextScope, _Mapping]]] = ...) -> None: ... diff --git a/src/saas_sdk/verification.py b/src/saas_sdk/verification.py new file mode 100644 index 0000000..9a4861a --- /dev/null +++ b/src/saas_sdk/verification.py @@ -0,0 +1,153 @@ +"""Request-local Core verification through the host's accounts/authority port. + +Tokens remain opaque. This client owns transport and result bounds, never token +parsing, signature verification, sealed authority, replay state or resource policy. +""" + +import asyncio +from dataclasses import dataclass, field +from datetime import timezone + +from google.protobuf.message import DecodeError + +from ._gen import work_contexts_pb2 as pb +from .authorization_revision import ( + RevisionUnavailable, + _internal_credential, + _mesh_address, +) + +__all__ = [ + "VERIFY_PATH", "InvalidContext", "AuthorityDenied", "AuthorityUnavailable", + "Scope", "VerifiedContext", "Client", +] + +try: + import grpc +except ImportError: + grpc = None + +_SERVICE = pb.DESCRIPTOR.services_by_name["WorkContextService"] +VERIFY_PATH = "/" + _SERVICE.full_name + "/" + _SERVICE.methods_by_name["VerifyIdempotent"].name + + +class InvalidContext(Exception): + """The host refused the presented capability.""" + + +class AuthorityDenied(Exception): + """The host refused revoked authority or an unsupported replay form.""" + + +class AuthorityUnavailable(Exception): + """No authority decision was obtained; no identity is available.""" + + +@dataclass(frozen=True) +class Scope: + resource_kind: str + actions: tuple[str, ...] + resource_ids: tuple[str, ...] + + +@dataclass(frozen=True) +class VerifiedContext: + """A host answer for one request, not a credential or Core Verified object. + + Recheck the original token at each authority checkpoint. Never persist this + object. Its private association prevents rechecking it with another client. + """ + + tenant_id: str + owner_principal_id: str + current_actor_principal_id: str + task_id: str + expires_at_unix: int + effective_scopes: tuple[Scope, ...] + _token: str = field(repr=False) + _client: object = field(repr=False) + + +def _bounded(value, maximum): + return isinstance(value, str) and 0 < len(value.encode("utf-8")) <= maximum + + +class Client: + """h2c on Codefly's resolved accounts/authority endpoint, protected by mesh. + + Supply independently configured issuer/audience and a fresh internal-token + callback. The total three-second budget includes credential acquisition. + There is no retry, fallback origin, authority cache or replay consumption. + """ + + def __init__(self, address, credential, *, issuer, audience): + if grpc is None: + raise ImportError("Install saas-sdk-python[revision-grpc] for verification") + if not _bounded(issuer, 512) or not _bounded(audience, 512): + raise ValueError("Work Context issuer and audience must be configured") + self.issuer, self.audience, self.credential = issuer, audience, credential + self._seal = object() + self.channel = grpc.aio.insecure_channel( + _mesh_address(address), + options=(("grpc.enable_retries", 0), ("grpc.enable_http_proxy", 0), + ("grpc.max_receive_message_length", 65536), + ("grpc.max_send_message_length", 65536)), + ) + self.rpc = self.channel.unary_unary( + VERIFY_PATH, + request_serializer=pb.VerifyIdempotentWorkContextRequest.SerializeToString, + response_deserializer=pb.VerifyIdempotentWorkContextResponse.FromString, + ) + + async def verify(self, token: str) -> VerifiedContext: + if not _bounded(token, 32768): + raise InvalidContext("Invalid Work Context") + try: + return await asyncio.wait_for(self._verify(token), timeout=3.0) + except (asyncio.TimeoutError, RevisionUnavailable, OSError, ValueError, DecodeError): + raise AuthorityUnavailable("Work Context authority is unavailable") from None + except grpc.aio.AioRpcError as error: + if error.code() == grpc.StatusCode.INVALID_ARGUMENT: + raise InvalidContext("Invalid Work Context") from None + if error.code() in (grpc.StatusCode.PERMISSION_DENIED, grpc.StatusCode.FAILED_PRECONDITION): + raise AuthorityDenied("Work Context authority was not confirmed") from None + raise AuthorityUnavailable("Work Context authority is unavailable") from None + + async def _verify(self, token): + credential = await _internal_credential(self.credential) + response = await self.rpc( + pb.VerifyIdempotentWorkContextRequest( + work_context_token=token, + expected_issuer=self.issuer, + expected_audience=self.audience, + ), + metadata=(("x-codefly-internal-token", credential),), + timeout=3.0, wait_for_ready=False, + ) + identifiers = (response.tenant_id, response.owner_principal_id, + response.current_actor_principal_id, response.task_id) + if not all(_bounded(value, 512) for value in identifiers) or not response.HasField("expires_at"): + raise ValueError("Invalid verification response") + response.expires_at.ToDatetime(tzinfo=timezone.utc) # Validate timestamp range. + if response.expires_at.nanos != 0 or response.expires_at.seconds <= 0 or len(response.effective_scopes) > 64: + raise ValueError("Invalid verification response") + scopes = [] + for scope in response.effective_scopes: + if (not _bounded(scope.resource_kind, 128) + or not 1 <= len(scope.actions) <= 64 + or not all(_bounded(value, 128) for value in scope.actions) + or len(scope.resource_ids) > 256 + or not all(_bounded(value, 512) for value in scope.resource_ids)): + raise ValueError("Invalid verification scope") + scopes.append(Scope(scope.resource_kind, tuple(scope.actions), tuple(scope.resource_ids))) + return VerifiedContext(*identifiers, response.expires_at.seconds, tuple(scopes), token, self._seal) + + async def recheck(self, verified: VerifiedContext) -> None: + if not isinstance(verified, VerifiedContext) or verified._client is not self._seal: + raise InvalidContext("Request-local verification evidence is required") + current = await self.verify(verified._token) + if current != verified: + raise InvalidContext("Verified identity or authority changed") + + async def aclose(self) -> None: + await self.channel.close() diff --git a/src/saas_sdk/work_context.py b/src/saas_sdk/work_context.py index abed65c..366b89b 100644 --- a/src/saas_sdk/work_context.py +++ b/src/saas_sdk/work_context.py @@ -12,13 +12,12 @@ * **Callee side** — :class:`Verifier` / :class:`JWKSVerifier` *verify* a presented context so a service can act on delegated authority. -The wire format is **not a JWT**: a token is ``base64url(payload).base64url(sig)`` -where ``payload`` is a fixed snake_case JSON object, ``sig`` is a raw 64-byte -Ed25519 signature over the exact payload bytes, and ``key_id`` lives *inside* the -payload. Field order, uint64-as-decimal-string encoding, scope sorting, and -base64url are pinned byte-for-byte to ``sdk-go`` (see the wire golden in -``tests/fixtures``), so a token minted by any Codefly SDK verifies identically -here. +The wire format is **not a JWT**: a token is ``base64url(payload).base64url(sig)``. +The payload is Core's ``WorkContextV1`` protobuf; the Ed25519 signature covers +its exact canonical bytes. The fixture in ``tests/fixtures`` pins an authentic +Core capability. These helpers check encoding and signatures; live sealed +installation and binding checks belong to the host verification port exposed by +``saas_sdk.verification``. Two verifiers are provided: @@ -907,7 +906,6 @@ def start_task( bearer: str, org_id: str, task_id: str, - session_id: str, audience: str, scopes: Sequence[WorkContextScope], actor_principal_id: str = "", @@ -920,11 +918,11 @@ def start_task( ``actor_principal_id`` empty means a direct human-owned task; otherwise it names the agent principal acting under the user's authority. + The host assigns the session; callers cannot choose its identity. """ request = pb.StartTaskWorkContextRequest( org_id=org_id, task_id=task_id, - session_id=session_id, audience=audience, authority_scopes=list(scopes), replay_policy=replay_policy, diff --git a/tests/test_verification.py b/tests/test_verification.py new file mode 100644 index 0000000..56ba2b5 --- /dev/null +++ b/tests/test_verification.py @@ -0,0 +1,122 @@ +import asyncio +from dataclasses import replace + +import grpc +import pytest +import pytest_asyncio + +from saas_sdk import verification as v +from saas_sdk._gen import work_contexts_pb2 as pb + + +@pytest_asyncio.fixture +async def authority(): + state = {"calls": [], "code": None, "response": pb.VerifyIdempotentWorkContextResponse( + tenant_id="tenant", owner_principal_id="owner", current_actor_principal_id="actor", + task_id="task", expires_at={"seconds": 2000000000}, + effective_scopes=[{"resource_kind": "records", "actions": ["read"], "resource_ids": ["one"]}], + )} + + async def verify(request, context): + state["calls"].append((request, dict(context.invocation_metadata()))) + if state["code"]: + await context.abort(state["code"], "private provider failure must not escape") + return state["response"] + + server = grpc.aio.server() + server.add_generic_rpc_handlers((grpc.method_handlers_generic_handler( + "saas.accounts.v1.WorkContextService", {"VerifyIdempotent": grpc.unary_unary_rpc_method_handler( + verify, + request_deserializer=pb.VerifyIdempotentWorkContextRequest.FromString, + response_serializer=pb.VerifyIdempotentWorkContextResponse.SerializeToString, + )}),)) + port = server.add_insecure_port("127.0.0.1:0") + await server.start() + refreshes = [] + + async def credential(): + refreshes.append(len(refreshes) + 1) + return f"perimeter-{len(refreshes)}" + + client = v.Client(f"127.0.0.1:{port}", credential, issuer="trusted-issuer", audience="consumer") + try: + yield client, state, refreshes + finally: + await client.aclose() + await server.stop(0) + + +@pytest.mark.asyncio +async def test_opaque_token_trusted_expectations_and_fresh_recheck(authority): + client, state, refreshes = authority + token = "opaque-presented-capability" + verified = await client.verify(token) + assert verified.tenant_id == "tenant" + assert verified.effective_scopes == (v.Scope("records", ("read",), ("one",)),) + assert token not in repr(verified) + await client.recheck(verified) + assert refreshes == [1, 2] + for i, (request, metadata) in enumerate(state["calls"], 1): + assert request.work_context_token == token + assert request.expected_issuer == "trusted-issuer" + assert request.expected_audience == "consumer" + assert metadata["x-codefly-internal-token"] == f"perimeter-{i}" + with pytest.raises(v.InvalidContext): + await client.recheck(replace(verified, _client=object())) + state["response"].owner_principal_id = "different-owner" + with pytest.raises(v.InvalidContext): + await client.recheck(verified) + + +@pytest.mark.asyncio +@pytest.mark.parametrize("code,exception", [ + (grpc.StatusCode.INVALID_ARGUMENT, v.InvalidContext), + (grpc.StatusCode.FAILED_PRECONDITION, v.AuthorityDenied), + (grpc.StatusCode.PERMISSION_DENIED, v.AuthorityDenied), + (grpc.StatusCode.UNAUTHENTICATED, v.AuthorityUnavailable), + (grpc.StatusCode.UNAVAILABLE, v.AuthorityUnavailable), + (grpc.StatusCode.DEADLINE_EXCEEDED, v.AuthorityUnavailable), +]) +async def test_failures_never_return_identity_or_disclose_details(authority, code, exception): + client, state, _ = authority + state["code"] = code + with pytest.raises(exception) as caught: + await client.verify("opaque") + assert "private" not in str(caught.value) + + +@pytest.mark.asyncio +async def test_empty_or_changed_response_fails_closed(authority): + client, state, _ = authority + state["response"].ClearField("tenant_id") + with pytest.raises(v.AuthorityUnavailable): + await client.verify("opaque") + + +@pytest.mark.asyncio +async def test_credential_failure_and_deadline_do_not_call_host(authority): + client, state, _ = authority + + async def failure(): + raise RuntimeError("sensitive detail") + + client.credential = failure + with pytest.raises(v.AuthorityUnavailable): + await client.verify("opaque") + + async def slow(): + await asyncio.sleep(30) + return "never" + + client.credential = slow + with pytest.raises(v.AuthorityUnavailable): + await asyncio.wait_for(client.verify("opaque"), timeout=4) + assert not state["calls"] + + +@pytest.mark.asyncio +async def test_oversize_token_is_refused_before_transport(authority): + client, state, _ = authority + with pytest.raises(v.InvalidContext): + await client.verify("x" * 32769) + assert not state["calls"] diff --git a/tests/test_work_context.py b/tests/test_work_context.py index d8dc7ed..fa54cd9 100644 --- a/tests/test_work_context.py +++ b/tests/test_work_context.py @@ -114,7 +114,6 @@ def test_start_task_maps_fields_presents_bearer_and_defaults_ttl(server): bearer="user-token", org_id=ORG, task_id=TASK, - session_id=SESSION, audience="accounts", scopes=[SCOPE], actor_principal_id="agent-1", @@ -125,7 +124,7 @@ def test_start_task_maps_fields_presents_bearer_and_defaults_ttl(server): assert authorization == "Bearer user-token" assert request.org_id == ORG assert request.task_id == TASK - assert request.session_id == SESSION + assert "session_id" not in request.DESCRIPTOR.fields_by_name assert request.audience == "accounts" assert request.actor_principal_id == "agent-1" assert list(request.authority_scopes) == [SCOPE] @@ -142,7 +141,6 @@ def test_start_task_omits_unset_optionals(server): bearer="t", org_id=ORG, task_id=TASK, - session_id=SESSION, audience="accounts", scopes=[SCOPE], ttl=timedelta(minutes=10), @@ -210,7 +208,6 @@ def test_ttl_outside_bounds_rejected_before_any_rpc(server, ttl): bearer="t", org_id=ORG, task_id=TASK, - session_id=SESSION, audience="accounts", scopes=[SCOPE], ttl=ttl, @@ -259,7 +256,6 @@ def test_start_task_sets_workspace_and_project_when_given(server): bearer="user-token", org_id=ORG, task_id=TASK, - session_id=SESSION, audience="accounts", scopes=[SCOPE], workspace_id="ws-1", @@ -278,7 +274,6 @@ def test_issued_token_round_trips_through_attach(server): bearer="user-token", org_id=ORG, task_id=TASK, - session_id=SESSION, audience="accounts", scopes=[SCOPE], ) @@ -308,7 +303,6 @@ def test_ttl_none_or_zero_defaults_to_five_minutes(server, ttl): bearer="t", org_id=ORG, task_id=TASK, - session_id=SESSION, audience="accounts", scopes=[SCOPE], ttl=ttl, @@ -331,7 +325,6 @@ def unary(self, procedure, request, response_type): bearer="t", org_id=ORG, task_id=TASK, - session_id=SESSION, audience="accounts", scopes=[SCOPE], )