@powerhousedao/reactor-browser 6.2.3-dev.1 → 6.2.3-dev.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{attachment-service-CdwHrbDH.d.ts → attachment-service-C14mVTk_.d.ts} +125 -19
- package/dist/attachment-service-C14mVTk_.d.ts.map +1 -0
- package/dist/{client-BIHN_UyR.d.ts → client-CxJD0Ck2.d.ts} +2 -2
- package/dist/{client-BIHN_UyR.d.ts.map → client-CxJD0Ck2.d.ts.map} +1 -1
- package/dist/{client-D66jVnot.js → client-D4bkR4pH.js} +114 -1
- package/dist/client-D4bkR4pH.js.map +1 -0
- package/dist/{document-by-id-BSZqTN66.js → document-by-id-iXB59Ge-.js} +211 -5
- package/dist/document-by-id-iXB59Ge-.js.map +1 -0
- package/dist/{document-model-modules-DfQBNGc-.js → document-model-modules-BSwKnUR_.js} +35 -35
- package/dist/{document-model-modules-DfQBNGc-.js.map → document-model-modules-BSwKnUR_.js.map} +1 -1
- package/dist/{document-operations-Bgo6A6W2.js → document-operations-BjZmu1JC.js} +146 -85
- package/dist/document-operations-BjZmu1JC.js.map +1 -0
- package/dist/{global-BggszP4X.d.ts → global-D4e836Hk.d.ts} +30 -5
- package/dist/global-D4e836Hk.d.ts.map +1 -0
- package/dist/{index-CkJNhsQo.d.ts → index-BvJaeywJ.d.ts} +4 -3
- package/dist/{index-CkJNhsQo.d.ts.map → index-BvJaeywJ.d.ts.map} +1 -1
- package/dist/index.d.ts +45 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -12
- package/dist/index.js.map +1 -1
- package/dist/{relational-D4sxGPz7.js → relational-D1RB45sA.js} +2 -2
- package/dist/{relational-D4sxGPz7.js.map → relational-D1RB45sA.js.map} +1 -1
- package/dist/{renown-BIEv6bSI.js → renown-rqK8sokh.js} +20 -5
- package/dist/renown-rqK8sokh.js.map +1 -0
- package/dist/src/ai/index.js +2 -2
- package/dist/src/analytics/index.js +1 -1
- package/dist/src/graphql/client.d.ts +2 -2
- package/dist/src/graphql/client.js +1 -1
- package/dist/src/graphql-client/entry.d.ts +4 -4
- package/dist/src/graphql-client/entry.js +4 -4
- package/dist/src/relational/index.js +1 -1
- package/dist/src/renown/index.d.ts +2 -2
- package/dist/src/renown/index.js +2 -2
- package/dist/src/rpc/index.d.ts +8 -0
- package/dist/src/rpc/index.d.ts.map +1 -1
- package/dist/src/rpc/index.js +14 -1
- package/dist/src/rpc/index.js.map +1 -1
- package/dist/{switchboard-D4-_jwk-.js → switchboard-Yt6ASJRx.js} +4 -4
- package/dist/{switchboard-D4-_jwk-.js.map → switchboard-Yt6ASJRx.js.map} +1 -1
- package/dist/{types-Dcv1ZLoW.d.ts → types-N3Jy6Nry.d.ts} +72 -2
- package/dist/types-N3Jy6Nry.d.ts.map +1 -0
- package/package.json +9 -9
- package/dist/attachment-service-CdwHrbDH.d.ts.map +0 -1
- package/dist/client-D66jVnot.js.map +0 -1
- package/dist/document-by-id-BSZqTN66.js.map +0 -1
- package/dist/document-operations-Bgo6A6W2.js.map +0 -1
- package/dist/global-BggszP4X.d.ts.map +0 -1
- package/dist/renown-BIEv6bSI.js.map +0 -1
- package/dist/types-Dcv1ZLoW.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-D4bkR4pH.js","names":[],"sources":["../src/graphql/gen/schema.ts","../src/graphql/batch-queries.ts","../src/graphql/client.ts"],"sourcesContent":["import type { GraphQLClient, RequestOptions } from \"graphql-request\";\nimport { gql } from \"graphql-tag\";\nexport type Maybe<T> = T | null | undefined;\nexport type InputMaybe<T> = T | null | undefined;\nexport type Exact<T extends { [key: string]: unknown }> = {\n [K in keyof T]: T[K];\n};\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & {\n [SubKey in K]?: Maybe<T[SubKey]>;\n};\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & {\n [SubKey in K]: Maybe<T[SubKey]>;\n};\nexport type MakeEmpty<\n T extends { [key: string]: unknown },\n K extends keyof T,\n> = { [_ in K]?: never };\nexport type Incremental<T> =\n | T\n | {\n [P in keyof T]?: P extends \" $fragmentName\" | \"__typename\" ? T[P] : never;\n };\ntype GraphQLClientRequestHeaders = RequestOptions[\"requestHeaders\"];\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: { input: string; output: string };\n String: { input: string; output: string };\n Boolean: { input: boolean; output: boolean };\n Int: { input: number; output: number };\n Float: { input: number; output: number };\n DateTime: { input: string | Date; output: string | Date };\n JSONObject: { input: NonNullable<unknown>; output: NonNullable<unknown> };\n};\n\nexport type Action = {\n readonly context?: Maybe<ActionContext>;\n readonly id: Scalars[\"String\"][\"output\"];\n readonly input: Scalars[\"JSONObject\"][\"output\"];\n readonly scope: Scalars[\"String\"][\"output\"];\n readonly timestampUtcMs: Scalars[\"String\"][\"output\"];\n readonly type: Scalars[\"String\"][\"output\"];\n};\n\n/**\n * One operation an authorization preflight predicts a verdict for.\n *\n * `input` is what a conditional grant reads, so a candidate standing for a\n * filled-in form carries that form's input. Omitting it predicts the verdict an\n * empty input earns, not the verdict the filled-in form will get.\n */\nexport type ActionCandidateInput = {\n readonly input?: InputMaybe<Scalars[\"JSONObject\"][\"input\"]>;\n readonly scope: Scalars[\"String\"][\"input\"];\n readonly type: Scalars[\"String\"][\"input\"];\n};\n\nexport type ActionContext = {\n readonly signer?: Maybe<ReactorSigner>;\n};\n\n/**\n * An action's context, as a caller submits it.\n *\n * Declares every field `ActionContext` carries, because an input object rejects a\n * field it does not declare: an action stamped with the head it applies to - which\n * is what a signing client sends - is refused outright if these are missing, and\n * that refusal is a whole-request one, not a per-field one.\n *\n * `prevOpHash` and `prevOpIndex` are the scope head the action was composed\n * against. They are recorded rather than enforced; a signature is verified from\n * the params carried in its own tuple, which do not include them.\n */\nexport type ActionContextInput = {\n /** Covers replay of an operation that would otherwise be a no-op. */\n readonly nonce?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n /** The hash of the state the action applies to. */\n readonly prevOpHash?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n /** The index of the last operation in the scope the action applies to. */\n readonly prevOpIndex?: InputMaybe<Scalars[\"Int\"][\"input\"]>;\n readonly signer?: InputMaybe<ReactorSignerInput>;\n};\n\n/**\n * One candidate's predicted verdict. `reason` carries the refusal a DENY is\n * recorded with, and is null on an ALLOW.\n */\nexport type ActionEvaluation = {\n readonly decision: AuthDecision;\n readonly reason?: Maybe<Scalars[\"String\"][\"output\"]>;\n};\n\n/**\n * The predicted verdicts for a set of candidates, in the order they were given,\n * with the aggregates a caller branches on.\n *\n * The aggregates are redundant -- a verdict is binary -- and all four are returned\n * so a caller reads the one its question is phrased in rather than negating\n * another. Over no candidates every aggregate is false: nothing is allowed and\n * nothing is denied.\n */\nexport type ActionEvaluations = {\n readonly allAllowed: Scalars[\"Boolean\"][\"output\"];\n readonly allDenied: Scalars[\"Boolean\"][\"output\"];\n readonly anyAllowed: Scalars[\"Boolean\"][\"output\"];\n readonly anyDenied: Scalars[\"Boolean\"][\"output\"];\n readonly evaluations: ReadonlyArray<ActionEvaluation>;\n};\n\nexport type ActionInput = {\n readonly context?: InputMaybe<ActionContextInput>;\n readonly id: Scalars[\"String\"][\"input\"];\n readonly input: Scalars[\"JSONObject\"][\"input\"];\n readonly scope: Scalars[\"String\"][\"input\"];\n readonly timestampUtcMs: Scalars[\"String\"][\"input\"];\n readonly type: Scalars[\"String\"][\"input\"];\n};\n\nexport enum AuthDecision {\n Allow = \"ALLOW\",\n Deny = \"DENY\",\n}\n\nexport type ChannelMeta = {\n readonly id: Scalars[\"String\"][\"output\"];\n};\n\nexport type ChannelMetaInput = {\n readonly id: Scalars[\"String\"][\"input\"];\n};\n\nexport type DeadLetterInfo = {\n readonly branch: Scalars[\"String\"][\"output\"];\n readonly documentId: Scalars[\"String\"][\"output\"];\n readonly error: Scalars[\"String\"][\"output\"];\n /**\n * How the origin classified the failure. A peer needs this to mirror the origin's\n * quarantine decision; without it a held auth operation would freeze the document\n * on the peer side while the origin kept syncing.\n */\n readonly errorType?: Maybe<Scalars[\"String\"][\"output\"]>;\n readonly jobId: Scalars[\"String\"][\"output\"];\n readonly operationCount: Scalars[\"Int\"][\"output\"];\n readonly scopes: ReadonlyArray<Scalars[\"String\"][\"output\"]>;\n};\n\nexport type DocumentChangeContext = {\n readonly childId?: Maybe<Scalars[\"String\"][\"output\"]>;\n readonly parentId?: Maybe<Scalars[\"String\"][\"output\"]>;\n};\n\nexport type DocumentChangeEvent = {\n readonly context?: Maybe<DocumentChangeContext>;\n readonly documents: ReadonlyArray<PhDocument>;\n readonly type: DocumentChangeType;\n};\n\nexport enum DocumentChangeType {\n ChildAdded = \"CHILD_ADDED\",\n ChildRemoved = \"CHILD_REMOVED\",\n Created = \"CREATED\",\n Deleted = \"DELETED\",\n ParentAdded = \"PARENT_ADDED\",\n ParentRemoved = \"PARENT_REMOVED\",\n Updated = \"UPDATED\",\n}\n\nexport type DocumentModelGlobalState = {\n readonly id: Scalars[\"String\"][\"output\"];\n readonly name: Scalars[\"String\"][\"output\"];\n readonly namespace?: Maybe<Scalars[\"String\"][\"output\"]>;\n readonly specification: Scalars[\"JSONObject\"][\"output\"];\n readonly version?: Maybe<Scalars[\"String\"][\"output\"]>;\n};\n\nexport type DocumentModelResultPage = {\n readonly cursor?: Maybe<Scalars[\"String\"][\"output\"]>;\n readonly hasNextPage: Scalars[\"Boolean\"][\"output\"];\n readonly hasPreviousPage: Scalars[\"Boolean\"][\"output\"];\n readonly items: ReadonlyArray<DocumentModelGlobalState>;\n readonly totalCount: Scalars[\"Int\"][\"output\"];\n};\n\nexport type DocumentOperationsFilterInput = {\n readonly actionTypes?: InputMaybe<ReadonlyArray<Scalars[\"String\"][\"input\"]>>;\n readonly branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n readonly scopes?: InputMaybe<ReadonlyArray<Scalars[\"String\"][\"input\"]>>;\n readonly sinceRevision?: InputMaybe<Scalars[\"Int\"][\"input\"]>;\n readonly timestampFrom?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n readonly timestampTo?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n};\n\nexport type DocumentRelationship = {\n readonly createdAt: Scalars[\"DateTime\"][\"output\"];\n readonly metadata?: Maybe<Scalars[\"JSONObject\"][\"output\"]>;\n readonly relationshipType: Scalars[\"String\"][\"output\"];\n readonly sourceId: Scalars[\"String\"][\"output\"];\n readonly targetId: Scalars[\"String\"][\"output\"];\n readonly updatedAt: Scalars[\"DateTime\"][\"output\"];\n};\n\nexport type DocumentRelationshipResultPage = {\n readonly cursor?: Maybe<Scalars[\"String\"][\"output\"]>;\n readonly hasNextPage: Scalars[\"Boolean\"][\"output\"];\n readonly hasPreviousPage: Scalars[\"Boolean\"][\"output\"];\n readonly items: ReadonlyArray<DocumentRelationship>;\n readonly totalCount: Scalars[\"Int\"][\"output\"];\n};\n\nexport type DocumentWithChildren = {\n readonly childIds: ReadonlyArray<Scalars[\"String\"][\"output\"]>;\n readonly document: PhDocument;\n};\n\nexport type JobChangeEvent = {\n readonly error?: Maybe<Scalars[\"String\"][\"output\"]>;\n readonly jobId: Scalars[\"String\"][\"output\"];\n /**\n * What the job produced, once it has produced anything. Nullable for the same\n * reason as `JobInfo.result`: a job that has not written yet has produced\n * nothing, and an empty object would claim otherwise.\n */\n readonly result?: Maybe<Scalars[\"JSONObject\"][\"output\"]>;\n readonly status: Scalars[\"String\"][\"output\"];\n};\n\nexport type JobInfo = {\n readonly completedAt?: Maybe<Scalars[\"DateTime\"][\"output\"]>;\n readonly createdAt: Scalars[\"DateTime\"][\"output\"];\n readonly error?: Maybe<Scalars[\"String\"][\"output\"]>;\n readonly id: Scalars[\"String\"][\"output\"];\n /**\n * What the job produced, once it has produced anything. Null until then, which\n * is the state every job is in when it is handed back from a submission.\n */\n readonly result?: Maybe<Scalars[\"JSONObject\"][\"output\"]>;\n readonly status: Scalars[\"String\"][\"output\"];\n};\n\nexport type MoveRelationshipResult = {\n readonly source: PhDocument;\n readonly target: PhDocument;\n};\n\nexport type Mutation = {\n readonly addRelationship: PhDocument;\n readonly createDocument: PhDocument;\n readonly createEmptyDocument: PhDocument;\n readonly deleteDocument: Scalars[\"Boolean\"][\"output\"];\n readonly deleteDocuments: Scalars[\"Boolean\"][\"output\"];\n /**\n * Applies actions to a document and waits for the result.\n *\n * Each action is coerced against `ActionInput`, so one missing a field the wire\n * declares is refused before any work starts. The id in particular: it is hashed\n * into the operation id and replay dedupes by it, so an action without one is\n * stored under an operation id shared by every id-less operation on the same\n * document, scope and branch.\n *\n * Named for `IReactorClient.execute`, which this is the wire form of. `branch`\n * defaults to `main`.\n */\n readonly execute: PhDocument;\n /**\n * Submits actions to a document and returns the job that will apply them.\n *\n * Coerced exactly as `execute` is, so a malformed action is refused here rather\n * than surfacing later as a failed job. Returns the job rather than only its id,\n * so a caller has the status and the creation time it would otherwise have to\n * ask for; `result` is null until the job produces one.\n */\n readonly executeAsync: JobInfo;\n readonly moveRelationship: MoveRelationshipResult;\n /** @deprecated Use execute. Actions here are untyped, so a malformed one is refused by a hand-written check rather than by the schema, and `view.scopes` is accepted but ignored. */\n readonly mutateDocument: PhDocument;\n /** @deprecated Use executeAsync, which is typed and returns the job rather than only its id. */\n readonly mutateDocumentAsync: Scalars[\"String\"][\"output\"];\n readonly pushSyncEnvelopes: Scalars[\"Boolean\"][\"output\"];\n readonly removeRelationship: PhDocument;\n readonly renameDocument: PhDocument;\n readonly setPreferredEditor: PhDocument;\n readonly touchChannel: TouchChannelResult;\n readonly updateRelationship: PhDocument;\n};\n\nexport type MutationAddRelationshipArgs = {\n branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n metadata?: InputMaybe<Scalars[\"JSONObject\"][\"input\"]>;\n relationshipType: Scalars[\"String\"][\"input\"];\n sourceIdentifier: Scalars[\"String\"][\"input\"];\n targetIdentifier: Scalars[\"String\"][\"input\"];\n};\n\nexport type MutationCreateDocumentArgs = {\n document: Scalars[\"JSONObject\"][\"input\"];\n parentIdentifier?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n};\n\nexport type MutationCreateEmptyDocumentArgs = {\n documentType: Scalars[\"String\"][\"input\"];\n parentIdentifier?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n};\n\nexport type MutationDeleteDocumentArgs = {\n identifier: Scalars[\"String\"][\"input\"];\n propagate?: InputMaybe<PropagationMode>;\n};\n\nexport type MutationDeleteDocumentsArgs = {\n identifiers: ReadonlyArray<Scalars[\"String\"][\"input\"]>;\n propagate?: InputMaybe<PropagationMode>;\n};\n\nexport type MutationExecuteArgs = {\n actions: ReadonlyArray<ActionInput>;\n branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n documentIdentifier: Scalars[\"String\"][\"input\"];\n};\n\nexport type MutationExecuteAsyncArgs = {\n actions: ReadonlyArray<ActionInput>;\n branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n documentIdentifier: Scalars[\"String\"][\"input\"];\n};\n\nexport type MutationMoveRelationshipArgs = {\n branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n relationshipType: Scalars[\"String\"][\"input\"];\n sourceParentIdentifier: Scalars[\"String\"][\"input\"];\n targetIdentifier: Scalars[\"String\"][\"input\"];\n targetParentIdentifier: Scalars[\"String\"][\"input\"];\n};\n\nexport type MutationMutateDocumentArgs = {\n actions: ReadonlyArray<Scalars[\"JSONObject\"][\"input\"]>;\n documentIdentifier: Scalars[\"String\"][\"input\"];\n view?: InputMaybe<ViewFilterInput>;\n};\n\nexport type MutationMutateDocumentAsyncArgs = {\n actions: ReadonlyArray<Scalars[\"JSONObject\"][\"input\"]>;\n documentIdentifier: Scalars[\"String\"][\"input\"];\n view?: InputMaybe<ViewFilterInput>;\n};\n\nexport type MutationPushSyncEnvelopesArgs = {\n envelopes: ReadonlyArray<SyncEnvelopeInput>;\n};\n\nexport type MutationRemoveRelationshipArgs = {\n branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n relationshipType: Scalars[\"String\"][\"input\"];\n sourceIdentifier: Scalars[\"String\"][\"input\"];\n targetIdentifier: Scalars[\"String\"][\"input\"];\n};\n\nexport type MutationRenameDocumentArgs = {\n branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n documentIdentifier: Scalars[\"String\"][\"input\"];\n name: Scalars[\"String\"][\"input\"];\n};\n\nexport type MutationSetPreferredEditorArgs = {\n branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n documentIdentifier: Scalars[\"String\"][\"input\"];\n preferredEditor?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n};\n\nexport type MutationTouchChannelArgs = {\n input: TouchChannelInput;\n};\n\nexport type MutationUpdateRelationshipArgs = {\n branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n metadata?: InputMaybe<Scalars[\"JSONObject\"][\"input\"]>;\n relationshipType: Scalars[\"String\"][\"input\"];\n sourceIdentifier: Scalars[\"String\"][\"input\"];\n targetIdentifier: Scalars[\"String\"][\"input\"];\n};\n\nexport type OperationContext = {\n readonly branch: Scalars[\"String\"][\"output\"];\n readonly documentId: Scalars[\"String\"][\"output\"];\n readonly documentType: Scalars[\"String\"][\"output\"];\n readonly ordinal: Scalars[\"Int\"][\"output\"];\n readonly scope: Scalars[\"String\"][\"output\"];\n};\n\nexport type OperationContextInput = {\n readonly branch: Scalars[\"String\"][\"input\"];\n readonly documentId: Scalars[\"String\"][\"input\"];\n readonly documentType: Scalars[\"String\"][\"input\"];\n readonly ordinal: Scalars[\"Int\"][\"input\"];\n readonly scope: Scalars[\"String\"][\"input\"];\n};\n\nexport type OperationInput = {\n readonly action: ActionInput;\n readonly deniedReason?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n readonly error?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n readonly hash: Scalars[\"String\"][\"input\"];\n readonly id?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n readonly index: Scalars[\"Int\"][\"input\"];\n readonly skip: Scalars[\"Int\"][\"input\"];\n readonly timestampUtcMs: Scalars[\"String\"][\"input\"];\n};\n\nexport type OperationWithContext = {\n readonly context: OperationContext;\n readonly operation: ReactorOperation;\n};\n\nexport type OperationWithContextInput = {\n readonly context: OperationContextInput;\n readonly operation: OperationInput;\n};\n\nexport type OperationsFilterInput = {\n readonly actionTypes?: InputMaybe<ReadonlyArray<Scalars[\"String\"][\"input\"]>>;\n readonly branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n readonly documentId: Scalars[\"String\"][\"input\"];\n readonly scopes?: InputMaybe<ReadonlyArray<Scalars[\"String\"][\"input\"]>>;\n readonly sinceRevision?: InputMaybe<Scalars[\"Int\"][\"input\"]>;\n readonly timestampFrom?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n readonly timestampTo?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n};\n\nexport type PhDocument = {\n readonly createdAtUtcIso: Scalars[\"DateTime\"][\"output\"];\n readonly documentType: Scalars[\"String\"][\"output\"];\n readonly id: Scalars[\"String\"][\"output\"];\n readonly lastModifiedAtUtcIso: Scalars[\"DateTime\"][\"output\"];\n readonly name: Scalars[\"String\"][\"output\"];\n readonly operations?: Maybe<ReactorOperationResultPage>;\n readonly preferredEditor?: Maybe<Scalars[\"String\"][\"output\"]>;\n readonly revisionsList: ReadonlyArray<Revision>;\n readonly slug?: Maybe<Scalars[\"String\"][\"output\"]>;\n readonly state: Scalars[\"JSONObject\"][\"output\"];\n};\n\nexport type PhDocumentOperationsArgs = {\n filter?: InputMaybe<DocumentOperationsFilterInput>;\n paging?: InputMaybe<PagingInput>;\n};\n\nexport type PhDocumentResultPage = {\n readonly cursor?: Maybe<Scalars[\"String\"][\"output\"]>;\n readonly hasNextPage: Scalars[\"Boolean\"][\"output\"];\n readonly hasPreviousPage: Scalars[\"Boolean\"][\"output\"];\n readonly items: ReadonlyArray<PhDocument>;\n readonly totalCount: Scalars[\"Int\"][\"output\"];\n};\n\nexport type PagingInput = {\n readonly cursor?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n readonly limit?: InputMaybe<Scalars[\"Int\"][\"input\"]>;\n readonly offset?: InputMaybe<Scalars[\"Int\"][\"input\"]>;\n};\n\nexport type PollSyncEnvelopesResult = {\n readonly ackOrdinal: Scalars[\"Int\"][\"output\"];\n readonly deadLetters: ReadonlyArray<DeadLetterInfo>;\n readonly envelopes: ReadonlyArray<SyncEnvelope>;\n readonly hasMore: Scalars[\"Boolean\"][\"output\"];\n};\n\nexport enum PropagationMode {\n Cascade = \"CASCADE\",\n Orphan = \"ORPHAN\",\n}\n\nexport type Query = {\n readonly document?: Maybe<DocumentWithChildren>;\n readonly documentIncomingRelationshipEdges: DocumentRelationshipResultPage;\n readonly documentIncomingRelationships: PhDocumentResultPage;\n readonly documentModels: DocumentModelResultPage;\n readonly documentOperations: ReactorOperationResultPage;\n readonly documentOutgoingRelationshipEdges: DocumentRelationshipResultPage;\n readonly documentOutgoingRelationships: PhDocumentResultPage;\n /**\n * Predicts whether the calling subject would be admitted to execute each of a\n * set of candidate operations, without submitting any of them. A UI asks this to\n * disable a control rather than offer an action that fails on submit.\n *\n * The answer is a prediction, not a promise:\n *\n * - Real admission compiles an append condition over everything it read and the\n * store enforces it at write time. A preflight reads no future, so a policy\n * change landing between this answer and the submit changes the verdict. The\n * submit path stays the only authority.\n * - The verdict is evaluated at the stream heads, so it is correct for a\n * candidate about to be submitted. A backdated submission is out of contract;\n * the reactor decides that one by position.\n * - A candidate whose verdict depends on its input has to carry that input, since\n * a conditional grant reads it.\n *\n * The subject is the authenticated caller and cannot be named in the request:\n * answering for an arbitrary subject would disclose what a policy grants\n * somebody else. It carries both the caller's address and the did:key of the app\n * instance whose token authenticated the request, so a policy naming either\n * matches the same principal the write path presents.\n *\n * Requires the reactor's authEnforcement feature flag. Without it the reactor\n * holds no decision model, so this fails with extensions.code\n * AUTH_EVALUATION_UNSUPPORTED rather than guessing.\n */\n readonly evaluateActions: ActionEvaluations;\n readonly findDocuments: PhDocumentResultPage;\n readonly jobStatus?: Maybe<JobInfo>;\n /**\n * Polls for sync envelopes from a channel.\n *\n * An operation stored before the API required an action id cannot be\n * represented by this schema, and rather than serving a partial response beside\n * a bare non-null violation, this fails with extensions.code\n * MALFORMED_STORED_OPERATION naming the operation. That code means the failure\n * is worth polling through: the document holding the operation needs repairing,\n * but the channel serves every other document, and a peer that stopped polling\n * would stop receiving those too.\n */\n readonly pollSyncEnvelopes: PollSyncEnvelopesResult;\n};\n\nexport type QueryDocumentArgs = {\n identifier: Scalars[\"String\"][\"input\"];\n view?: InputMaybe<ViewFilterInput>;\n};\n\nexport type QueryDocumentIncomingRelationshipEdgesArgs = {\n paging?: InputMaybe<PagingInput>;\n relationshipType?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n targetIdentifier: Scalars[\"String\"][\"input\"];\n view?: InputMaybe<ViewFilterInput>;\n};\n\nexport type QueryDocumentIncomingRelationshipsArgs = {\n paging?: InputMaybe<PagingInput>;\n relationshipType: Scalars[\"String\"][\"input\"];\n targetIdentifier: Scalars[\"String\"][\"input\"];\n view?: InputMaybe<ViewFilterInput>;\n};\n\nexport type QueryDocumentModelsArgs = {\n namespace?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n paging?: InputMaybe<PagingInput>;\n};\n\nexport type QueryDocumentOperationsArgs = {\n filter: OperationsFilterInput;\n paging?: InputMaybe<PagingInput>;\n};\n\nexport type QueryDocumentOutgoingRelationshipEdgesArgs = {\n paging?: InputMaybe<PagingInput>;\n relationshipType?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n sourceIdentifier: Scalars[\"String\"][\"input\"];\n view?: InputMaybe<ViewFilterInput>;\n};\n\nexport type QueryDocumentOutgoingRelationshipsArgs = {\n paging?: InputMaybe<PagingInput>;\n relationshipType: Scalars[\"String\"][\"input\"];\n sourceIdentifier: Scalars[\"String\"][\"input\"];\n view?: InputMaybe<ViewFilterInput>;\n};\n\nexport type QueryEvaluateActionsArgs = {\n branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n candidates: ReadonlyArray<ActionCandidateInput>;\n documentIdentifier: Scalars[\"String\"][\"input\"];\n};\n\nexport type QueryFindDocumentsArgs = {\n paging?: InputMaybe<PagingInput>;\n search?: InputMaybe<SearchFilterInput>;\n view?: InputMaybe<ViewFilterInput>;\n};\n\nexport type QueryJobStatusArgs = {\n jobId: Scalars[\"String\"][\"input\"];\n};\n\nexport type QueryPollSyncEnvelopesArgs = {\n channelId: Scalars[\"String\"][\"input\"];\n outboxAck: Scalars[\"Int\"][\"input\"];\n outboxLatest: Scalars[\"Int\"][\"input\"];\n};\n\nexport type ReactorOperation = {\n readonly action: Action;\n readonly deniedReason?: Maybe<Scalars[\"String\"][\"output\"]>;\n readonly error?: Maybe<Scalars[\"String\"][\"output\"]>;\n readonly hash: Scalars[\"String\"][\"output\"];\n readonly id?: Maybe<Scalars[\"String\"][\"output\"]>;\n readonly index: Scalars[\"Int\"][\"output\"];\n readonly skip: Scalars[\"Int\"][\"output\"];\n readonly timestampUtcMs: Scalars[\"String\"][\"output\"];\n};\n\nexport type ReactorOperationResultPage = {\n readonly cursor?: Maybe<Scalars[\"String\"][\"output\"]>;\n readonly hasNextPage: Scalars[\"Boolean\"][\"output\"];\n readonly hasPreviousPage: Scalars[\"Boolean\"][\"output\"];\n readonly items: ReadonlyArray<ReactorOperation>;\n readonly totalCount: Scalars[\"Int\"][\"output\"];\n};\n\nexport type ReactorSigner = {\n readonly app?: Maybe<ReactorSignerApp>;\n readonly signatures: ReadonlyArray<Scalars[\"String\"][\"output\"]>;\n readonly user?: Maybe<ReactorSignerUser>;\n};\n\nexport type ReactorSignerApp = {\n readonly key: Scalars[\"String\"][\"output\"];\n readonly name: Scalars[\"String\"][\"output\"];\n};\n\nexport type ReactorSignerAppInput = {\n readonly key: Scalars[\"String\"][\"input\"];\n readonly name: Scalars[\"String\"][\"input\"];\n};\n\nexport type ReactorSignerInput = {\n readonly app?: InputMaybe<ReactorSignerAppInput>;\n readonly signatures: ReadonlyArray<Scalars[\"String\"][\"input\"]>;\n readonly user?: InputMaybe<ReactorSignerUserInput>;\n};\n\nexport type ReactorSignerUser = {\n readonly address: Scalars[\"String\"][\"output\"];\n readonly chainId: Scalars[\"Int\"][\"output\"];\n readonly networkId: Scalars[\"String\"][\"output\"];\n};\n\nexport type ReactorSignerUserInput = {\n readonly address: Scalars[\"String\"][\"input\"];\n readonly chainId: Scalars[\"Int\"][\"input\"];\n readonly networkId: Scalars[\"String\"][\"input\"];\n};\n\nexport type RemoteCursor = {\n readonly cursorOrdinal: Scalars[\"Int\"][\"output\"];\n readonly lastSyncedAtUtcMs?: Maybe<Scalars[\"String\"][\"output\"]>;\n readonly remoteName: Scalars[\"String\"][\"output\"];\n};\n\nexport type RemoteCursorInput = {\n readonly cursorOrdinal: Scalars[\"Int\"][\"input\"];\n readonly lastSyncedAtUtcMs?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n readonly remoteName: Scalars[\"String\"][\"input\"];\n};\n\nexport type RemoteFilterInput = {\n readonly branch: Scalars[\"String\"][\"input\"];\n readonly documentId: ReadonlyArray<Scalars[\"String\"][\"input\"]>;\n readonly scope: ReadonlyArray<Scalars[\"String\"][\"input\"]>;\n};\n\nexport type Revision = {\n readonly revision: Scalars[\"Int\"][\"output\"];\n readonly scope: Scalars[\"String\"][\"output\"];\n};\n\nexport type SearchFilterInput = {\n readonly identifiers?: InputMaybe<ReadonlyArray<Scalars[\"String\"][\"input\"]>>;\n readonly parentId?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n readonly type?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n};\n\nexport type Subscription = {\n readonly documentChanges: DocumentChangeEvent;\n readonly jobChanges: JobChangeEvent;\n};\n\nexport type SubscriptionDocumentChangesArgs = {\n search?: InputMaybe<SearchFilterInput>;\n view?: InputMaybe<ViewFilterInput>;\n};\n\nexport type SubscriptionJobChangesArgs = {\n jobId: Scalars[\"String\"][\"input\"];\n};\n\nexport type SyncEnvelope = {\n readonly channelMeta: ChannelMeta;\n readonly cursor?: Maybe<RemoteCursor>;\n readonly dependsOn?: Maybe<ReadonlyArray<Scalars[\"String\"][\"output\"]>>;\n readonly key?: Maybe<Scalars[\"String\"][\"output\"]>;\n readonly operations?: Maybe<ReadonlyArray<OperationWithContext>>;\n readonly type: SyncEnvelopeType;\n};\n\nexport type SyncEnvelopeInput = {\n readonly channelMeta: ChannelMetaInput;\n readonly cursor?: InputMaybe<RemoteCursorInput>;\n readonly dependsOn?: InputMaybe<ReadonlyArray<Scalars[\"String\"][\"input\"]>>;\n readonly key?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n readonly operations?: InputMaybe<ReadonlyArray<OperationWithContextInput>>;\n readonly type: SyncEnvelopeType;\n};\n\nexport enum SyncEnvelopeType {\n Ack = \"ACK\",\n Operations = \"OPERATIONS\",\n}\n\nexport type TouchChannelInput = {\n readonly collectionId: Scalars[\"String\"][\"input\"];\n readonly filter: RemoteFilterInput;\n readonly id: Scalars[\"String\"][\"input\"];\n readonly name: Scalars[\"String\"][\"input\"];\n readonly sinceTimestampUtcMs: Scalars[\"String\"][\"input\"];\n};\n\nexport type TouchChannelResult = {\n readonly ackOrdinal: Scalars[\"Int\"][\"output\"];\n readonly success: Scalars[\"Boolean\"][\"output\"];\n};\n\nexport type ViewFilterInput = {\n readonly branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n readonly scopes?: InputMaybe<ReadonlyArray<Scalars[\"String\"][\"input\"]>>;\n};\n\nexport type PhDocumentFieldsFragment = {\n readonly id: string;\n readonly slug?: string | null | undefined;\n readonly name: string;\n readonly documentType: string;\n readonly state: NonNullable<unknown>;\n readonly createdAtUtcIso: string | Date;\n readonly lastModifiedAtUtcIso: string | Date;\n readonly revisionsList: ReadonlyArray<{\n readonly scope: string;\n readonly revision: number;\n }>;\n};\n\nexport type DocumentRelationshipFieldsFragment = {\n readonly sourceId: string;\n readonly targetId: string;\n readonly relationshipType: string;\n readonly metadata?: NonNullable<unknown> | null | undefined;\n readonly createdAt: string | Date;\n readonly updatedAt: string | Date;\n};\n\nexport type GetDocumentModelsQueryVariables = Exact<{\n namespace?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n paging?: InputMaybe<PagingInput>;\n}>;\n\nexport type GetDocumentModelsQuery = {\n readonly documentModels: {\n readonly totalCount: number;\n readonly hasNextPage: boolean;\n readonly hasPreviousPage: boolean;\n readonly cursor?: string | null | undefined;\n readonly items: ReadonlyArray<{\n readonly id: string;\n readonly name: string;\n readonly namespace?: string | null | undefined;\n readonly version?: string | null | undefined;\n readonly specification: NonNullable<unknown>;\n }>;\n };\n};\n\nexport type GetDocumentQueryVariables = Exact<{\n identifier: Scalars[\"String\"][\"input\"];\n view?: InputMaybe<ViewFilterInput>;\n}>;\n\nexport type GetDocumentQuery = {\n readonly document?:\n | {\n readonly childIds: ReadonlyArray<string>;\n readonly document: {\n readonly id: string;\n readonly slug?: string | null | undefined;\n readonly name: string;\n readonly documentType: string;\n readonly state: NonNullable<unknown>;\n readonly createdAtUtcIso: string | Date;\n readonly lastModifiedAtUtcIso: string | Date;\n readonly revisionsList: ReadonlyArray<{\n readonly scope: string;\n readonly revision: number;\n }>;\n };\n }\n | null\n | undefined;\n};\n\nexport type GetDocumentWithOperationsQueryVariables = Exact<{\n identifier: Scalars[\"String\"][\"input\"];\n view?: InputMaybe<ViewFilterInput>;\n operationsFilter?: InputMaybe<DocumentOperationsFilterInput>;\n operationsPaging?: InputMaybe<PagingInput>;\n}>;\n\nexport type GetDocumentWithOperationsQuery = {\n readonly document?:\n | {\n readonly childIds: ReadonlyArray<string>;\n readonly document: {\n readonly id: string;\n readonly slug?: string | null | undefined;\n readonly name: string;\n readonly documentType: string;\n readonly state: NonNullable<unknown>;\n readonly createdAtUtcIso: string | Date;\n readonly lastModifiedAtUtcIso: string | Date;\n readonly operations?:\n | {\n readonly totalCount: number;\n readonly hasNextPage: boolean;\n readonly hasPreviousPage: boolean;\n readonly cursor?: string | null | undefined;\n readonly items: ReadonlyArray<{\n readonly index: number;\n readonly timestampUtcMs: string;\n readonly hash: string;\n readonly skip: number;\n readonly error?: string | null | undefined;\n readonly deniedReason?: string | null | undefined;\n readonly id?: string | null | undefined;\n readonly action: {\n readonly id: string;\n readonly type: string;\n readonly timestampUtcMs: string;\n readonly input: NonNullable<unknown>;\n readonly scope: string;\n readonly context?:\n | {\n readonly signer?:\n | {\n readonly signatures: ReadonlyArray<string>;\n readonly user?:\n | {\n readonly address: string;\n readonly networkId: string;\n readonly chainId: number;\n }\n | null\n | undefined;\n readonly app?:\n | {\n readonly name: string;\n readonly key: string;\n }\n | null\n | undefined;\n }\n | null\n | undefined;\n }\n | null\n | undefined;\n };\n }>;\n }\n | null\n | undefined;\n readonly revisionsList: ReadonlyArray<{\n readonly scope: string;\n readonly revision: number;\n }>;\n };\n }\n | null\n | undefined;\n};\n\nexport type GetDocumentOutgoingRelationshipsQueryVariables = Exact<{\n sourceIdentifier: Scalars[\"String\"][\"input\"];\n relationshipType: Scalars[\"String\"][\"input\"];\n view?: InputMaybe<ViewFilterInput>;\n paging?: InputMaybe<PagingInput>;\n}>;\n\nexport type GetDocumentOutgoingRelationshipsQuery = {\n readonly documentOutgoingRelationships: {\n readonly totalCount: number;\n readonly hasNextPage: boolean;\n readonly hasPreviousPage: boolean;\n readonly cursor?: string | null | undefined;\n readonly items: ReadonlyArray<{\n readonly id: string;\n readonly slug?: string | null | undefined;\n readonly name: string;\n readonly documentType: string;\n readonly state: NonNullable<unknown>;\n readonly createdAtUtcIso: string | Date;\n readonly lastModifiedAtUtcIso: string | Date;\n readonly revisionsList: ReadonlyArray<{\n readonly scope: string;\n readonly revision: number;\n }>;\n }>;\n };\n};\n\nexport type GetDocumentIncomingRelationshipsQueryVariables = Exact<{\n targetIdentifier: Scalars[\"String\"][\"input\"];\n relationshipType: Scalars[\"String\"][\"input\"];\n view?: InputMaybe<ViewFilterInput>;\n paging?: InputMaybe<PagingInput>;\n}>;\n\nexport type GetDocumentIncomingRelationshipsQuery = {\n readonly documentIncomingRelationships: {\n readonly totalCount: number;\n readonly hasNextPage: boolean;\n readonly hasPreviousPage: boolean;\n readonly cursor?: string | null | undefined;\n readonly items: ReadonlyArray<{\n readonly id: string;\n readonly slug?: string | null | undefined;\n readonly name: string;\n readonly documentType: string;\n readonly state: NonNullable<unknown>;\n readonly createdAtUtcIso: string | Date;\n readonly lastModifiedAtUtcIso: string | Date;\n readonly revisionsList: ReadonlyArray<{\n readonly scope: string;\n readonly revision: number;\n }>;\n }>;\n };\n};\n\nexport type GetDocumentOutgoingRelationshipEdgesQueryVariables = Exact<{\n sourceIdentifier: Scalars[\"String\"][\"input\"];\n relationshipType?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n view?: InputMaybe<ViewFilterInput>;\n paging?: InputMaybe<PagingInput>;\n}>;\n\nexport type GetDocumentOutgoingRelationshipEdgesQuery = {\n readonly documentOutgoingRelationshipEdges: {\n readonly totalCount: number;\n readonly hasNextPage: boolean;\n readonly hasPreviousPage: boolean;\n readonly cursor?: string | null | undefined;\n readonly items: ReadonlyArray<{\n readonly sourceId: string;\n readonly targetId: string;\n readonly relationshipType: string;\n readonly metadata?: NonNullable<unknown> | null | undefined;\n readonly createdAt: string | Date;\n readonly updatedAt: string | Date;\n }>;\n };\n};\n\nexport type GetDocumentIncomingRelationshipEdgesQueryVariables = Exact<{\n targetIdentifier: Scalars[\"String\"][\"input\"];\n relationshipType?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n view?: InputMaybe<ViewFilterInput>;\n paging?: InputMaybe<PagingInput>;\n}>;\n\nexport type GetDocumentIncomingRelationshipEdgesQuery = {\n readonly documentIncomingRelationshipEdges: {\n readonly totalCount: number;\n readonly hasNextPage: boolean;\n readonly hasPreviousPage: boolean;\n readonly cursor?: string | null | undefined;\n readonly items: ReadonlyArray<{\n readonly sourceId: string;\n readonly targetId: string;\n readonly relationshipType: string;\n readonly metadata?: NonNullable<unknown> | null | undefined;\n readonly createdAt: string | Date;\n readonly updatedAt: string | Date;\n }>;\n };\n};\n\nexport type FindDocumentsQueryVariables = Exact<{\n search?: InputMaybe<SearchFilterInput>;\n view?: InputMaybe<ViewFilterInput>;\n paging?: InputMaybe<PagingInput>;\n}>;\n\nexport type FindDocumentsQuery = {\n readonly findDocuments: {\n readonly totalCount: number;\n readonly hasNextPage: boolean;\n readonly hasPreviousPage: boolean;\n readonly cursor?: string | null | undefined;\n readonly items: ReadonlyArray<{\n readonly id: string;\n readonly slug?: string | null | undefined;\n readonly name: string;\n readonly documentType: string;\n readonly state: NonNullable<unknown>;\n readonly createdAtUtcIso: string | Date;\n readonly lastModifiedAtUtcIso: string | Date;\n readonly revisionsList: ReadonlyArray<{\n readonly scope: string;\n readonly revision: number;\n }>;\n }>;\n };\n};\n\nexport type GetDocumentOperationsQueryVariables = Exact<{\n filter: OperationsFilterInput;\n paging?: InputMaybe<PagingInput>;\n}>;\n\nexport type GetDocumentOperationsQuery = {\n readonly documentOperations: {\n readonly totalCount: number;\n readonly hasNextPage: boolean;\n readonly hasPreviousPage: boolean;\n readonly cursor?: string | null | undefined;\n readonly items: ReadonlyArray<{\n readonly index: number;\n readonly timestampUtcMs: string;\n readonly hash: string;\n readonly skip: number;\n readonly error?: string | null | undefined;\n readonly deniedReason?: string | null | undefined;\n readonly id?: string | null | undefined;\n readonly action: {\n readonly id: string;\n readonly type: string;\n readonly timestampUtcMs: string;\n readonly input: NonNullable<unknown>;\n readonly scope: string;\n readonly context?:\n | {\n readonly signer?:\n | {\n readonly signatures: ReadonlyArray<string>;\n readonly user?:\n | {\n readonly address: string;\n readonly networkId: string;\n readonly chainId: number;\n }\n | null\n | undefined;\n readonly app?:\n | { readonly name: string; readonly key: string }\n | null\n | undefined;\n }\n | null\n | undefined;\n }\n | null\n | undefined;\n };\n }>;\n };\n};\n\nexport type GetJobStatusQueryVariables = Exact<{\n jobId: Scalars[\"String\"][\"input\"];\n}>;\n\nexport type GetJobStatusQuery = {\n readonly jobStatus?:\n | {\n readonly id: string;\n readonly status: string;\n readonly result?: NonNullable<unknown> | null | undefined;\n readonly error?: string | null | undefined;\n readonly createdAt: string | Date;\n readonly completedAt?: string | Date | null | undefined;\n }\n | null\n | undefined;\n};\n\nexport type EvaluateActionsQueryVariables = Exact<{\n documentIdentifier: Scalars[\"String\"][\"input\"];\n branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n candidates: ReadonlyArray<ActionCandidateInput>;\n}>;\n\nexport type EvaluateActionsQuery = {\n readonly evaluateActions: {\n readonly allAllowed: boolean;\n readonly anyAllowed: boolean;\n readonly allDenied: boolean;\n readonly anyDenied: boolean;\n readonly evaluations: ReadonlyArray<{\n readonly decision: AuthDecision;\n readonly reason?: string | null | undefined;\n }>;\n };\n};\n\nexport type CreateDocumentMutationVariables = Exact<{\n document: Scalars[\"JSONObject\"][\"input\"];\n parentIdentifier?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n}>;\n\nexport type CreateDocumentMutation = {\n readonly createDocument: {\n readonly id: string;\n readonly slug?: string | null | undefined;\n readonly name: string;\n readonly documentType: string;\n readonly state: NonNullable<unknown>;\n readonly createdAtUtcIso: string | Date;\n readonly lastModifiedAtUtcIso: string | Date;\n readonly revisionsList: ReadonlyArray<{\n readonly scope: string;\n readonly revision: number;\n }>;\n };\n};\n\nexport type CreateEmptyDocumentMutationVariables = Exact<{\n documentType: Scalars[\"String\"][\"input\"];\n parentIdentifier?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n}>;\n\nexport type CreateEmptyDocumentMutation = {\n readonly createEmptyDocument: {\n readonly id: string;\n readonly slug?: string | null | undefined;\n readonly name: string;\n readonly documentType: string;\n readonly state: NonNullable<unknown>;\n readonly createdAtUtcIso: string | Date;\n readonly lastModifiedAtUtcIso: string | Date;\n readonly revisionsList: ReadonlyArray<{\n readonly scope: string;\n readonly revision: number;\n }>;\n };\n};\n\nexport type MutateDocumentMutationVariables = Exact<{\n documentIdentifier: Scalars[\"String\"][\"input\"];\n actions: ReadonlyArray<ActionInput>;\n branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n}>;\n\nexport type MutateDocumentMutation = {\n readonly mutateDocument: {\n readonly id: string;\n readonly slug?: string | null | undefined;\n readonly name: string;\n readonly documentType: string;\n readonly state: NonNullable<unknown>;\n readonly createdAtUtcIso: string | Date;\n readonly lastModifiedAtUtcIso: string | Date;\n readonly revisionsList: ReadonlyArray<{\n readonly scope: string;\n readonly revision: number;\n }>;\n };\n};\n\nexport type MutateDocumentAsyncMutationVariables = Exact<{\n documentIdentifier: Scalars[\"String\"][\"input\"];\n actions: ReadonlyArray<ActionInput>;\n branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n}>;\n\nexport type MutateDocumentAsyncMutation = {\n readonly mutateDocumentAsync: {\n readonly id: string;\n readonly status: string;\n readonly result?: NonNullable<unknown> | null | undefined;\n readonly error?: string | null | undefined;\n readonly createdAt: string | Date;\n readonly completedAt?: string | Date | null | undefined;\n };\n};\n\nexport type RenameDocumentMutationVariables = Exact<{\n documentIdentifier: Scalars[\"String\"][\"input\"];\n name: Scalars[\"String\"][\"input\"];\n branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n}>;\n\nexport type RenameDocumentMutation = {\n readonly renameDocument: {\n readonly id: string;\n readonly slug?: string | null | undefined;\n readonly name: string;\n readonly documentType: string;\n readonly state: NonNullable<unknown>;\n readonly createdAtUtcIso: string | Date;\n readonly lastModifiedAtUtcIso: string | Date;\n readonly revisionsList: ReadonlyArray<{\n readonly scope: string;\n readonly revision: number;\n }>;\n };\n};\n\nexport type SetPreferredEditorMutationVariables = Exact<{\n documentIdentifier: Scalars[\"String\"][\"input\"];\n preferredEditor?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n}>;\n\nexport type SetPreferredEditorMutation = {\n readonly setPreferredEditor: {\n readonly id: string;\n readonly slug?: string | null | undefined;\n readonly name: string;\n readonly documentType: string;\n readonly state: NonNullable<unknown>;\n readonly createdAtUtcIso: string | Date;\n readonly lastModifiedAtUtcIso: string | Date;\n readonly revisionsList: ReadonlyArray<{\n readonly scope: string;\n readonly revision: number;\n }>;\n };\n};\n\nexport type AddRelationshipMutationVariables = Exact<{\n sourceIdentifier: Scalars[\"String\"][\"input\"];\n targetIdentifier: Scalars[\"String\"][\"input\"];\n relationshipType: Scalars[\"String\"][\"input\"];\n metadata?: InputMaybe<Scalars[\"JSONObject\"][\"input\"]>;\n branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n}>;\n\nexport type AddRelationshipMutation = {\n readonly addRelationship: {\n readonly id: string;\n readonly slug?: string | null | undefined;\n readonly name: string;\n readonly documentType: string;\n readonly state: NonNullable<unknown>;\n readonly createdAtUtcIso: string | Date;\n readonly lastModifiedAtUtcIso: string | Date;\n readonly revisionsList: ReadonlyArray<{\n readonly scope: string;\n readonly revision: number;\n }>;\n };\n};\n\nexport type UpdateRelationshipMutationVariables = Exact<{\n sourceIdentifier: Scalars[\"String\"][\"input\"];\n targetIdentifier: Scalars[\"String\"][\"input\"];\n relationshipType: Scalars[\"String\"][\"input\"];\n metadata?: InputMaybe<Scalars[\"JSONObject\"][\"input\"]>;\n branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n}>;\n\nexport type UpdateRelationshipMutation = {\n readonly updateRelationship: {\n readonly id: string;\n readonly slug?: string | null | undefined;\n readonly name: string;\n readonly documentType: string;\n readonly state: NonNullable<unknown>;\n readonly createdAtUtcIso: string | Date;\n readonly lastModifiedAtUtcIso: string | Date;\n readonly revisionsList: ReadonlyArray<{\n readonly scope: string;\n readonly revision: number;\n }>;\n };\n};\n\nexport type RemoveRelationshipMutationVariables = Exact<{\n sourceIdentifier: Scalars[\"String\"][\"input\"];\n targetIdentifier: Scalars[\"String\"][\"input\"];\n relationshipType: Scalars[\"String\"][\"input\"];\n branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n}>;\n\nexport type RemoveRelationshipMutation = {\n readonly removeRelationship: {\n readonly id: string;\n readonly slug?: string | null | undefined;\n readonly name: string;\n readonly documentType: string;\n readonly state: NonNullable<unknown>;\n readonly createdAtUtcIso: string | Date;\n readonly lastModifiedAtUtcIso: string | Date;\n readonly revisionsList: ReadonlyArray<{\n readonly scope: string;\n readonly revision: number;\n }>;\n };\n};\n\nexport type MoveRelationshipMutationVariables = Exact<{\n sourceParentIdentifier: Scalars[\"String\"][\"input\"];\n targetParentIdentifier: Scalars[\"String\"][\"input\"];\n targetIdentifier: Scalars[\"String\"][\"input\"];\n relationshipType: Scalars[\"String\"][\"input\"];\n branch?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n}>;\n\nexport type MoveRelationshipMutation = {\n readonly moveRelationship: {\n readonly source: {\n readonly id: string;\n readonly slug?: string | null | undefined;\n readonly name: string;\n readonly documentType: string;\n readonly state: NonNullable<unknown>;\n readonly createdAtUtcIso: string | Date;\n readonly lastModifiedAtUtcIso: string | Date;\n readonly revisionsList: ReadonlyArray<{\n readonly scope: string;\n readonly revision: number;\n }>;\n };\n readonly target: {\n readonly id: string;\n readonly slug?: string | null | undefined;\n readonly name: string;\n readonly documentType: string;\n readonly state: NonNullable<unknown>;\n readonly createdAtUtcIso: string | Date;\n readonly lastModifiedAtUtcIso: string | Date;\n readonly revisionsList: ReadonlyArray<{\n readonly scope: string;\n readonly revision: number;\n }>;\n };\n };\n};\n\nexport type DeleteDocumentMutationVariables = Exact<{\n identifier: Scalars[\"String\"][\"input\"];\n propagate?: InputMaybe<PropagationMode>;\n}>;\n\nexport type DeleteDocumentMutation = { readonly deleteDocument: boolean };\n\nexport type DeleteDocumentsMutationVariables = Exact<{\n identifiers: ReadonlyArray<Scalars[\"String\"][\"input\"]>;\n propagate?: InputMaybe<PropagationMode>;\n}>;\n\nexport type DeleteDocumentsMutation = { readonly deleteDocuments: boolean };\n\nexport type DocumentChangesSubscriptionVariables = Exact<{\n search?: InputMaybe<SearchFilterInput>;\n view?: InputMaybe<ViewFilterInput>;\n}>;\n\nexport type DocumentChangesSubscription = {\n readonly documentChanges: {\n readonly type: DocumentChangeType;\n readonly documents: ReadonlyArray<{\n readonly id: string;\n readonly slug?: string | null | undefined;\n readonly name: string;\n readonly documentType: string;\n readonly state: NonNullable<unknown>;\n readonly createdAtUtcIso: string | Date;\n readonly lastModifiedAtUtcIso: string | Date;\n readonly revisionsList: ReadonlyArray<{\n readonly scope: string;\n readonly revision: number;\n }>;\n }>;\n readonly context?:\n | {\n readonly parentId?: string | null | undefined;\n readonly childId?: string | null | undefined;\n }\n | null\n | undefined;\n };\n};\n\nexport type JobChangesSubscriptionVariables = Exact<{\n jobId: Scalars[\"String\"][\"input\"];\n}>;\n\nexport type JobChangesSubscription = {\n readonly jobChanges: {\n readonly jobId: string;\n readonly status: string;\n readonly result?: NonNullable<unknown> | null | undefined;\n readonly error?: string | null | undefined;\n };\n};\n\nexport type PollSyncEnvelopesQueryVariables = Exact<{\n channelId: Scalars[\"String\"][\"input\"];\n outboxAck: Scalars[\"Int\"][\"input\"];\n outboxLatest: Scalars[\"Int\"][\"input\"];\n}>;\n\nexport type PollSyncEnvelopesQuery = {\n readonly pollSyncEnvelopes: {\n readonly ackOrdinal: number;\n readonly hasMore: boolean;\n readonly envelopes: ReadonlyArray<{\n readonly type: SyncEnvelopeType;\n readonly key?: string | null | undefined;\n readonly dependsOn?: ReadonlyArray<string> | null | undefined;\n readonly channelMeta: { readonly id: string };\n readonly operations?:\n | ReadonlyArray<{\n readonly operation: {\n readonly index: number;\n readonly timestampUtcMs: string;\n readonly hash: string;\n readonly skip: number;\n readonly error?: string | null | undefined;\n readonly deniedReason?: string | null | undefined;\n readonly id?: string | null | undefined;\n readonly action: {\n readonly id: string;\n readonly type: string;\n readonly timestampUtcMs: string;\n readonly input: NonNullable<unknown>;\n readonly scope: string;\n readonly context?:\n | {\n readonly signer?:\n | {\n readonly signatures: ReadonlyArray<string>;\n readonly user?:\n | {\n readonly address: string;\n readonly networkId: string;\n readonly chainId: number;\n }\n | null\n | undefined;\n readonly app?:\n | { readonly name: string; readonly key: string }\n | null\n | undefined;\n }\n | null\n | undefined;\n }\n | null\n | undefined;\n };\n };\n readonly context: {\n readonly documentId: string;\n readonly documentType: string;\n readonly scope: string;\n readonly branch: string;\n };\n }>\n | null\n | undefined;\n readonly cursor?:\n | {\n readonly remoteName: string;\n readonly cursorOrdinal: number;\n readonly lastSyncedAtUtcMs?: string | null | undefined;\n }\n | null\n | undefined;\n }>;\n readonly deadLetters: ReadonlyArray<{\n readonly documentId: string;\n readonly error: string;\n readonly errorType?: string | null | undefined;\n }>;\n };\n};\n\nexport type TouchChannelMutationVariables = Exact<{\n input: TouchChannelInput;\n}>;\n\nexport type TouchChannelMutation = {\n readonly touchChannel: {\n readonly success: boolean;\n readonly ackOrdinal: number;\n };\n};\n\nexport type PushSyncEnvelopesMutationVariables = Exact<{\n envelopes: ReadonlyArray<SyncEnvelopeInput>;\n}>;\n\nexport type PushSyncEnvelopesMutation = { readonly pushSyncEnvelopes: boolean };\n\nexport const PhDocumentFieldsFragmentDoc = gql`\n fragment PHDocumentFields on PHDocument {\n id\n slug\n name\n documentType\n state\n revisionsList {\n scope\n revision\n }\n createdAtUtcIso\n lastModifiedAtUtcIso\n }\n`;\nexport const DocumentRelationshipFieldsFragmentDoc = gql`\n fragment DocumentRelationshipFields on DocumentRelationship {\n sourceId\n targetId\n relationshipType\n metadata\n createdAt\n updatedAt\n }\n`;\nexport const GetDocumentModelsDocument = gql`\n query GetDocumentModels($namespace: String, $paging: PagingInput) {\n documentModels(namespace: $namespace, paging: $paging) {\n items {\n id\n name\n namespace\n version\n specification\n }\n totalCount\n hasNextPage\n hasPreviousPage\n cursor\n }\n }\n`;\nexport const GetDocumentDocument = gql`\n query GetDocument($identifier: String!, $view: ViewFilterInput) {\n document(identifier: $identifier, view: $view) {\n document {\n ...PHDocumentFields\n }\n childIds\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nexport const GetDocumentWithOperationsDocument = gql`\n query GetDocumentWithOperations(\n $identifier: String!\n $view: ViewFilterInput\n $operationsFilter: DocumentOperationsFilterInput\n $operationsPaging: PagingInput\n ) {\n document(identifier: $identifier, view: $view) {\n document {\n ...PHDocumentFields\n operations(filter: $operationsFilter, paging: $operationsPaging) {\n items {\n index\n timestampUtcMs\n hash\n skip\n error\n deniedReason\n id\n action {\n id\n type\n timestampUtcMs\n input\n scope\n context {\n signer {\n user {\n address\n networkId\n chainId\n }\n app {\n name\n key\n }\n signatures\n }\n }\n }\n }\n totalCount\n hasNextPage\n hasPreviousPage\n cursor\n }\n }\n childIds\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nexport const GetDocumentOutgoingRelationshipsDocument = gql`\n query GetDocumentOutgoingRelationships(\n $sourceIdentifier: String!\n $relationshipType: String!\n $view: ViewFilterInput\n $paging: PagingInput\n ) {\n documentOutgoingRelationships(\n sourceIdentifier: $sourceIdentifier\n relationshipType: $relationshipType\n view: $view\n paging: $paging\n ) {\n items {\n ...PHDocumentFields\n }\n totalCount\n hasNextPage\n hasPreviousPage\n cursor\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nexport const GetDocumentIncomingRelationshipsDocument = gql`\n query GetDocumentIncomingRelationships(\n $targetIdentifier: String!\n $relationshipType: String!\n $view: ViewFilterInput\n $paging: PagingInput\n ) {\n documentIncomingRelationships(\n targetIdentifier: $targetIdentifier\n relationshipType: $relationshipType\n view: $view\n paging: $paging\n ) {\n items {\n ...PHDocumentFields\n }\n totalCount\n hasNextPage\n hasPreviousPage\n cursor\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nexport const GetDocumentOutgoingRelationshipEdgesDocument = gql`\n query GetDocumentOutgoingRelationshipEdges(\n $sourceIdentifier: String!\n $relationshipType: String\n $view: ViewFilterInput\n $paging: PagingInput\n ) {\n documentOutgoingRelationshipEdges(\n sourceIdentifier: $sourceIdentifier\n relationshipType: $relationshipType\n view: $view\n paging: $paging\n ) {\n items {\n ...DocumentRelationshipFields\n }\n totalCount\n hasNextPage\n hasPreviousPage\n cursor\n }\n }\n ${DocumentRelationshipFieldsFragmentDoc}\n`;\nexport const GetDocumentIncomingRelationshipEdgesDocument = gql`\n query GetDocumentIncomingRelationshipEdges(\n $targetIdentifier: String!\n $relationshipType: String\n $view: ViewFilterInput\n $paging: PagingInput\n ) {\n documentIncomingRelationshipEdges(\n targetIdentifier: $targetIdentifier\n relationshipType: $relationshipType\n view: $view\n paging: $paging\n ) {\n items {\n ...DocumentRelationshipFields\n }\n totalCount\n hasNextPage\n hasPreviousPage\n cursor\n }\n }\n ${DocumentRelationshipFieldsFragmentDoc}\n`;\nexport const FindDocumentsDocument = gql`\n query FindDocuments(\n $search: SearchFilterInput\n $view: ViewFilterInput\n $paging: PagingInput\n ) {\n findDocuments(search: $search, view: $view, paging: $paging) {\n items {\n ...PHDocumentFields\n }\n totalCount\n hasNextPage\n hasPreviousPage\n cursor\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nexport const GetDocumentOperationsDocument = gql`\n query GetDocumentOperations(\n $filter: OperationsFilterInput!\n $paging: PagingInput\n ) {\n documentOperations(filter: $filter, paging: $paging) {\n items {\n index\n timestampUtcMs\n hash\n skip\n error\n deniedReason\n id\n action {\n id\n type\n timestampUtcMs\n input\n scope\n context {\n signer {\n user {\n address\n networkId\n chainId\n }\n app {\n name\n key\n }\n signatures\n }\n }\n }\n }\n totalCount\n hasNextPage\n hasPreviousPage\n cursor\n }\n }\n`;\nexport const GetJobStatusDocument = gql`\n query GetJobStatus($jobId: String!) {\n jobStatus(jobId: $jobId) {\n id\n status\n result\n error\n createdAt\n completedAt\n }\n }\n`;\nexport const EvaluateActionsDocument = gql`\n query EvaluateActions(\n $documentIdentifier: String!\n $branch: String\n $candidates: [ActionCandidateInput!]!\n ) {\n evaluateActions(\n documentIdentifier: $documentIdentifier\n branch: $branch\n candidates: $candidates\n ) {\n evaluations {\n decision\n reason\n }\n allAllowed\n anyAllowed\n allDenied\n anyDenied\n }\n }\n`;\nexport const CreateDocumentDocument = gql`\n mutation CreateDocument($document: JSONObject!, $parentIdentifier: String) {\n createDocument(document: $document, parentIdentifier: $parentIdentifier) {\n ...PHDocumentFields\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nexport const CreateEmptyDocumentDocument = gql`\n mutation CreateEmptyDocument(\n $documentType: String!\n $parentIdentifier: String\n ) {\n createEmptyDocument(\n documentType: $documentType\n parentIdentifier: $parentIdentifier\n ) {\n ...PHDocumentFields\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nexport const MutateDocumentDocument = gql`\n mutation MutateDocument(\n $documentIdentifier: String!\n $actions: [ActionInput!]!\n $branch: String\n ) {\n mutateDocument: execute(\n documentIdentifier: $documentIdentifier\n actions: $actions\n branch: $branch\n ) {\n ...PHDocumentFields\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nexport const MutateDocumentAsyncDocument = gql`\n mutation MutateDocumentAsync(\n $documentIdentifier: String!\n $actions: [ActionInput!]!\n $branch: String\n ) {\n mutateDocumentAsync: executeAsync(\n documentIdentifier: $documentIdentifier\n actions: $actions\n branch: $branch\n ) {\n id\n status\n result\n error\n createdAt\n completedAt\n }\n }\n`;\nexport const RenameDocumentDocument = gql`\n mutation RenameDocument(\n $documentIdentifier: String!\n $name: String!\n $branch: String\n ) {\n renameDocument(\n documentIdentifier: $documentIdentifier\n name: $name\n branch: $branch\n ) {\n ...PHDocumentFields\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nexport const SetPreferredEditorDocument = gql`\n mutation SetPreferredEditor(\n $documentIdentifier: String!\n $preferredEditor: String\n $branch: String\n ) {\n setPreferredEditor(\n documentIdentifier: $documentIdentifier\n preferredEditor: $preferredEditor\n branch: $branch\n ) {\n ...PHDocumentFields\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nexport const AddRelationshipDocument = gql`\n mutation AddRelationship(\n $sourceIdentifier: String!\n $targetIdentifier: String!\n $relationshipType: String!\n $metadata: JSONObject\n $branch: String\n ) {\n addRelationship(\n sourceIdentifier: $sourceIdentifier\n targetIdentifier: $targetIdentifier\n relationshipType: $relationshipType\n metadata: $metadata\n branch: $branch\n ) {\n ...PHDocumentFields\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nexport const UpdateRelationshipDocument = gql`\n mutation UpdateRelationship(\n $sourceIdentifier: String!\n $targetIdentifier: String!\n $relationshipType: String!\n $metadata: JSONObject\n $branch: String\n ) {\n updateRelationship(\n sourceIdentifier: $sourceIdentifier\n targetIdentifier: $targetIdentifier\n relationshipType: $relationshipType\n metadata: $metadata\n branch: $branch\n ) {\n ...PHDocumentFields\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nexport const RemoveRelationshipDocument = gql`\n mutation RemoveRelationship(\n $sourceIdentifier: String!\n $targetIdentifier: String!\n $relationshipType: String!\n $branch: String\n ) {\n removeRelationship(\n sourceIdentifier: $sourceIdentifier\n targetIdentifier: $targetIdentifier\n relationshipType: $relationshipType\n branch: $branch\n ) {\n ...PHDocumentFields\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nexport const MoveRelationshipDocument = gql`\n mutation MoveRelationship(\n $sourceParentIdentifier: String!\n $targetParentIdentifier: String!\n $targetIdentifier: String!\n $relationshipType: String!\n $branch: String\n ) {\n moveRelationship(\n sourceParentIdentifier: $sourceParentIdentifier\n targetParentIdentifier: $targetParentIdentifier\n targetIdentifier: $targetIdentifier\n relationshipType: $relationshipType\n branch: $branch\n ) {\n source {\n ...PHDocumentFields\n }\n target {\n ...PHDocumentFields\n }\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nexport const DeleteDocumentDocument = gql`\n mutation DeleteDocument($identifier: String!, $propagate: PropagationMode) {\n deleteDocument(identifier: $identifier, propagate: $propagate)\n }\n`;\nexport const DeleteDocumentsDocument = gql`\n mutation DeleteDocuments(\n $identifiers: [String!]!\n $propagate: PropagationMode\n ) {\n deleteDocuments(identifiers: $identifiers, propagate: $propagate)\n }\n`;\nexport const DocumentChangesDocument = gql`\n subscription DocumentChanges(\n $search: SearchFilterInput\n $view: ViewFilterInput\n ) {\n documentChanges(search: $search, view: $view) {\n type\n documents {\n ...PHDocumentFields\n }\n context {\n parentId\n childId\n }\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nexport const JobChangesDocument = gql`\n subscription JobChanges($jobId: String!) {\n jobChanges(jobId: $jobId) {\n jobId\n status\n result\n error\n }\n }\n`;\nexport const PollSyncEnvelopesDocument = gql`\n query PollSyncEnvelopes(\n $channelId: String!\n $outboxAck: Int!\n $outboxLatest: Int!\n ) {\n pollSyncEnvelopes(\n channelId: $channelId\n outboxAck: $outboxAck\n outboxLatest: $outboxLatest\n ) {\n envelopes {\n type\n channelMeta {\n id\n }\n operations {\n operation {\n index\n timestampUtcMs\n hash\n skip\n error\n deniedReason\n id\n action {\n id\n type\n timestampUtcMs\n input\n scope\n context {\n signer {\n user {\n address\n networkId\n chainId\n }\n app {\n name\n key\n }\n signatures\n }\n }\n }\n }\n context {\n documentId\n documentType\n scope\n branch\n }\n }\n cursor {\n remoteName\n cursorOrdinal\n lastSyncedAtUtcMs\n }\n key\n dependsOn\n }\n ackOrdinal\n deadLetters {\n documentId\n error\n errorType\n }\n hasMore\n }\n }\n`;\nexport const TouchChannelDocument = gql`\n mutation TouchChannel($input: TouchChannelInput!) {\n touchChannel(input: $input) {\n success\n ackOrdinal\n }\n }\n`;\nexport const PushSyncEnvelopesDocument = gql`\n mutation PushSyncEnvelopes($envelopes: [SyncEnvelopeInput!]!) {\n pushSyncEnvelopes(envelopes: $envelopes)\n }\n`;\n\nexport type SdkFunctionWrapper = <T>(\n action: (requestHeaders?: Record<string, string>) => Promise<T>,\n operationName: string,\n operationType?: string,\n variables?: any,\n) => Promise<T>;\n\nconst defaultWrapper: SdkFunctionWrapper = (\n action,\n _operationName,\n _operationType,\n _variables,\n) => action();\n\nexport function getSdk(\n client: GraphQLClient,\n withWrapper: SdkFunctionWrapper = defaultWrapper,\n) {\n return {\n GetDocumentModels(\n variables?: GetDocumentModelsQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<GetDocumentModelsQuery> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<GetDocumentModelsQuery>({\n document: GetDocumentModelsDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"GetDocumentModels\",\n \"query\",\n variables,\n );\n },\n GetDocument(\n variables: GetDocumentQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<GetDocumentQuery> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<GetDocumentQuery>({\n document: GetDocumentDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"GetDocument\",\n \"query\",\n variables,\n );\n },\n GetDocumentWithOperations(\n variables: GetDocumentWithOperationsQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<GetDocumentWithOperationsQuery> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<GetDocumentWithOperationsQuery>({\n document: GetDocumentWithOperationsDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"GetDocumentWithOperations\",\n \"query\",\n variables,\n );\n },\n GetDocumentOutgoingRelationships(\n variables: GetDocumentOutgoingRelationshipsQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<GetDocumentOutgoingRelationshipsQuery> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<GetDocumentOutgoingRelationshipsQuery>({\n document: GetDocumentOutgoingRelationshipsDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"GetDocumentOutgoingRelationships\",\n \"query\",\n variables,\n );\n },\n GetDocumentIncomingRelationships(\n variables: GetDocumentIncomingRelationshipsQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<GetDocumentIncomingRelationshipsQuery> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<GetDocumentIncomingRelationshipsQuery>({\n document: GetDocumentIncomingRelationshipsDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"GetDocumentIncomingRelationships\",\n \"query\",\n variables,\n );\n },\n GetDocumentOutgoingRelationshipEdges(\n variables: GetDocumentOutgoingRelationshipEdgesQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<GetDocumentOutgoingRelationshipEdgesQuery> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<GetDocumentOutgoingRelationshipEdgesQuery>({\n document: GetDocumentOutgoingRelationshipEdgesDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"GetDocumentOutgoingRelationshipEdges\",\n \"query\",\n variables,\n );\n },\n GetDocumentIncomingRelationshipEdges(\n variables: GetDocumentIncomingRelationshipEdgesQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<GetDocumentIncomingRelationshipEdgesQuery> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<GetDocumentIncomingRelationshipEdgesQuery>({\n document: GetDocumentIncomingRelationshipEdgesDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"GetDocumentIncomingRelationshipEdges\",\n \"query\",\n variables,\n );\n },\n FindDocuments(\n variables?: FindDocumentsQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<FindDocumentsQuery> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<FindDocumentsQuery>({\n document: FindDocumentsDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"FindDocuments\",\n \"query\",\n variables,\n );\n },\n GetDocumentOperations(\n variables: GetDocumentOperationsQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<GetDocumentOperationsQuery> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<GetDocumentOperationsQuery>({\n document: GetDocumentOperationsDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"GetDocumentOperations\",\n \"query\",\n variables,\n );\n },\n GetJobStatus(\n variables: GetJobStatusQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<GetJobStatusQuery> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<GetJobStatusQuery>({\n document: GetJobStatusDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"GetJobStatus\",\n \"query\",\n variables,\n );\n },\n EvaluateActions(\n variables: EvaluateActionsQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<EvaluateActionsQuery> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<EvaluateActionsQuery>({\n document: EvaluateActionsDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"EvaluateActions\",\n \"query\",\n variables,\n );\n },\n CreateDocument(\n variables: CreateDocumentMutationVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<CreateDocumentMutation> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<CreateDocumentMutation>({\n document: CreateDocumentDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"CreateDocument\",\n \"mutation\",\n variables,\n );\n },\n CreateEmptyDocument(\n variables: CreateEmptyDocumentMutationVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<CreateEmptyDocumentMutation> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<CreateEmptyDocumentMutation>({\n document: CreateEmptyDocumentDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"CreateEmptyDocument\",\n \"mutation\",\n variables,\n );\n },\n MutateDocument(\n variables: MutateDocumentMutationVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<MutateDocumentMutation> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<MutateDocumentMutation>({\n document: MutateDocumentDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"MutateDocument\",\n \"mutation\",\n variables,\n );\n },\n MutateDocumentAsync(\n variables: MutateDocumentAsyncMutationVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<MutateDocumentAsyncMutation> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<MutateDocumentAsyncMutation>({\n document: MutateDocumentAsyncDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"MutateDocumentAsync\",\n \"mutation\",\n variables,\n );\n },\n RenameDocument(\n variables: RenameDocumentMutationVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<RenameDocumentMutation> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<RenameDocumentMutation>({\n document: RenameDocumentDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"RenameDocument\",\n \"mutation\",\n variables,\n );\n },\n SetPreferredEditor(\n variables: SetPreferredEditorMutationVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<SetPreferredEditorMutation> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<SetPreferredEditorMutation>({\n document: SetPreferredEditorDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"SetPreferredEditor\",\n \"mutation\",\n variables,\n );\n },\n AddRelationship(\n variables: AddRelationshipMutationVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<AddRelationshipMutation> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<AddRelationshipMutation>({\n document: AddRelationshipDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"AddRelationship\",\n \"mutation\",\n variables,\n );\n },\n UpdateRelationship(\n variables: UpdateRelationshipMutationVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<UpdateRelationshipMutation> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<UpdateRelationshipMutation>({\n document: UpdateRelationshipDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"UpdateRelationship\",\n \"mutation\",\n variables,\n );\n },\n RemoveRelationship(\n variables: RemoveRelationshipMutationVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<RemoveRelationshipMutation> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<RemoveRelationshipMutation>({\n document: RemoveRelationshipDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"RemoveRelationship\",\n \"mutation\",\n variables,\n );\n },\n MoveRelationship(\n variables: MoveRelationshipMutationVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<MoveRelationshipMutation> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<MoveRelationshipMutation>({\n document: MoveRelationshipDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"MoveRelationship\",\n \"mutation\",\n variables,\n );\n },\n DeleteDocument(\n variables: DeleteDocumentMutationVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<DeleteDocumentMutation> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<DeleteDocumentMutation>({\n document: DeleteDocumentDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"DeleteDocument\",\n \"mutation\",\n variables,\n );\n },\n DeleteDocuments(\n variables: DeleteDocumentsMutationVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<DeleteDocumentsMutation> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<DeleteDocumentsMutation>({\n document: DeleteDocumentsDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"DeleteDocuments\",\n \"mutation\",\n variables,\n );\n },\n DocumentChanges(\n variables?: DocumentChangesSubscriptionVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<DocumentChangesSubscription> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<DocumentChangesSubscription>({\n document: DocumentChangesDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"DocumentChanges\",\n \"subscription\",\n variables,\n );\n },\n JobChanges(\n variables: JobChangesSubscriptionVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<JobChangesSubscription> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<JobChangesSubscription>({\n document: JobChangesDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"JobChanges\",\n \"subscription\",\n variables,\n );\n },\n PollSyncEnvelopes(\n variables: PollSyncEnvelopesQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<PollSyncEnvelopesQuery> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<PollSyncEnvelopesQuery>({\n document: PollSyncEnvelopesDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"PollSyncEnvelopes\",\n \"query\",\n variables,\n );\n },\n TouchChannel(\n variables: TouchChannelMutationVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<TouchChannelMutation> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<TouchChannelMutation>({\n document: TouchChannelDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"TouchChannel\",\n \"mutation\",\n variables,\n );\n },\n PushSyncEnvelopes(\n variables: PushSyncEnvelopesMutationVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<PushSyncEnvelopesMutation> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<PushSyncEnvelopesMutation>({\n document: PushSyncEnvelopesDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"PushSyncEnvelopes\",\n \"mutation\",\n variables,\n );\n },\n };\n}\nexport type Sdk = ReturnType<typeof getSdk>;\n","import {\n GetDocumentDocument,\n GetDocumentOperationsDocument,\n type OperationsFilterInput,\n type PagingInput,\n type ViewFilterInput,\n} from \"./gen/schema.js\";\n\n/** Get the source string from a GraphQL document (string or DocumentNode). */\nfunction getDocumentSource(doc: unknown): string {\n return typeof doc === \"string\"\n ? doc\n : ((doc as { loc?: { source: { body: string } } }).loc?.source.body ?? \"\");\n}\n\n/**\n * Extract the inner selection set of a named field from a GraphQL document source.\n * Returns the `{ ... }` block including braces.\n */\nfunction extractSelectionSet(\n doc: unknown,\n fieldName: string,\n fallback: string,\n): string {\n const source = getDocumentSource(doc);\n\n const regex = new RegExp(\n `${fieldName}\\\\([^)]*\\\\)\\\\s*(\\\\{[\\\\s\\\\S]*\\\\})\\\\s*\\\\}`,\n );\n return regex.exec(source)?.[1] ?? fallback;\n}\n\n/**\n * Extract the query body and any fragment definitions from a GraphQL document.\n * Returns { body, fragments } where body is the content inside the query `{ ... }`\n * and fragments are any trailing fragment definitions.\n */\nfunction extractQueryParts(\n doc: unknown,\n fallbackBody: string,\n): { body: string; fragments: string } {\n const source = getDocumentSource(doc);\n\n // Match the query body: everything between the first `{` and its closing `}`\n // before any fragment definitions\n const queryMatch = /^[^{]*\\{([\\s\\S]*?)\\}\\s*(fragment[\\s\\S]*)?$/.exec(source);\n const body = queryMatch?.[1]?.trim() ?? fallbackBody;\n const fragments = queryMatch?.[2]?.trim() ?? \"\";\n\n return { body, fragments };\n}\n\nconst operationsSelectionSet = extractSelectionSet(\n GetDocumentOperationsDocument,\n \"documentOperations\",\n \"{ items { index } }\",\n);\n\nconst documentParts = extractQueryParts(\n GetDocumentDocument,\n \"document(identifier: $identifier) { document { id name documentType state revisionsList { scope revision } createdAtUtcIso lastModifiedAtUtcIso } childIds }\",\n);\n\n/**\n * Build a single GraphQL query that fetches documentOperations for\n * multiple filters using aliases. Each filter gets its own alias\n * (`scope_0`, `scope_1`, …) so all scopes are fetched in one HTTP request.\n */\nexport function buildBatchOperationsQuery(\n filters: OperationsFilterInput[],\n pagings: (PagingInput | undefined | null)[],\n) {\n const varDefs = filters\n .flatMap((_, i) => [\n `$filter_${i}: OperationsFilterInput!`,\n `$paging_${i}: PagingInput`,\n ])\n .join(\", \");\n\n const fields = filters\n .map(\n (_, i) =>\n `scope_${i}: documentOperations(filter: $filter_${i}, paging: $paging_${i}) ${operationsSelectionSet}`,\n )\n .join(\"\\n \");\n\n const query = `query BatchGetDocumentOperations(${varDefs}) {\n ${fields}\n }`;\n\n const variables: Record<string, unknown> = {};\n for (let i = 0; i < filters.length; i++) {\n variables[`filter_${i}`] = filters[i];\n variables[`paging_${i}`] = pagings[i] ?? null;\n }\n\n return { query, variables };\n}\n\n/**\n * Build a single GraphQL query that fetches a document AND\n * documentOperations for multiple filters, all in one HTTP request.\n */\nexport function buildBatchDocumentWithOperationsQuery(\n identifier: string,\n view: ViewFilterInput | undefined,\n filters: OperationsFilterInput[],\n pagings: (PagingInput | undefined)[],\n) {\n const docVarDefs = \"$identifier: String!, $view: ViewFilterInput\";\n const opsVarDefs = filters\n .flatMap((_, i) => [\n `$filter_${i}: OperationsFilterInput!`,\n `$paging_${i}: PagingInput`,\n ])\n .join(\", \");\n\n const opsFields = filters\n .map(\n (_, i) =>\n `scope_${i}: documentOperations(filter: $filter_${i}, paging: $paging_${i}) ${operationsSelectionSet}`,\n )\n .join(\"\\n \");\n\n const query = `query BatchGetDocumentWithOperations(${docVarDefs}, ${opsVarDefs}) {\n ${documentParts.body}\n ${opsFields}\n }\n ${documentParts.fragments}`;\n\n const variables: Record<string, unknown> = {\n identifier,\n view: view ?? null,\n };\n for (let i = 0; i < filters.length; i++) {\n variables[`filter_${i}`] = filters[i];\n variables[`paging_${i}`] = pagings[i] ?? null;\n }\n\n return { query, variables };\n}\n","import { GraphQLClient, type Variables } from \"graphql-request\";\nimport {\n buildBatchDocumentWithOperationsQuery,\n buildBatchOperationsQuery,\n} from \"./batch-queries.js\";\nimport {\n getSdk,\n type GetDocumentOperationsQuery,\n type GetDocumentQuery,\n type OperationsFilterInput,\n type PagingInput,\n type SdkFunctionWrapper,\n type ViewFilterInput,\n} from \"./gen/schema.js\";\nimport type { ReactorGraphQLClient, RunDocumentOptions } from \"./types.js\";\n\nexport type { ReactorGraphQLClient, RunDocumentOptions } from \"./types.js\";\n\ntype DocumentOperationsPage = GetDocumentOperationsQuery[\"documentOperations\"];\n\ntype DocumentResult = NonNullable<GetDocumentQuery[\"document\"]>;\n\n/**\n * Creates a GraphQL client for the Reactor Subgraph API.\n * @param urlOrGQLClient The URL of the GraphQL API or a GraphQL client instance.\n * @param middleware An optional middleware function to wrap the GraphQL client calls.\n * @returns A GraphQL client for the Reactor Subgraph API.\n */\nexport function createClient(\n urlOrGQLClient: string | GraphQLClient,\n middleware?: SdkFunctionWrapper,\n): ReactorGraphQLClient {\n const client =\n typeof urlOrGQLClient === \"string\"\n ? new GraphQLClient(urlOrGQLClient)\n : urlOrGQLClient;\n\n // The hand-written batch methods below call `client.request` directly,\n // bypassing the middleware that `getSdk` applies. Wrap them in the same\n // shape so auth/logging/tracing middleware runs for batch calls too.\n const runWithMiddleware = async <T>(\n operationName: string,\n run: (requestHeaders?: Record<string, string>) => Promise<T>,\n operationType = \"query\",\n variables?: Variables,\n ): Promise<T> => {\n if (!middleware) return run();\n return middleware(run, operationName, operationType, variables);\n };\n\n return {\n ...getSdk(client, middleware),\n\n /**\n * Run a hand-authored GraphQL document through the same transport and\n * middleware as the generated SDK methods.\n */\n async RunDocument<TData>(options: RunDocumentOptions): Promise<TData> {\n const { document, variables, signal } = options;\n return runWithMiddleware<TData>(\n options.operationName,\n (wrappedRequestHeaders) =>\n client.request<TData>({\n document,\n variables,\n requestHeaders: {\n ...options.requestHeaders,\n ...wrappedRequestHeaders,\n },\n signal,\n }),\n options.operationType,\n variables,\n );\n },\n\n /**\n * Fetch documentOperations for multiple filters in a single HTTP request\n * using GraphQL aliases. Each filter has its own paging parameters.\n * Returns one result page per filter, in order.\n */\n async BatchGetDocumentOperations(\n filters: OperationsFilterInput[],\n pagings: (PagingInput | undefined | null)[],\n ): Promise<DocumentOperationsPage[]> {\n const { query, variables } = buildBatchOperationsQuery(filters, pagings);\n const data = await runWithMiddleware(\n \"BatchGetDocumentOperations\",\n (requestHeaders) =>\n client.request<Record<string, DocumentOperationsPage>>(\n query,\n variables,\n requestHeaders,\n ),\n );\n return filters.map((_, i) => data[`scope_${i}`]);\n },\n\n /**\n * Fetch a document AND documentOperations for multiple filters\n * in a single HTTP request. Combines GetDocument + BatchGetDocumentOperations.\n */\n async BatchGetDocumentWithOperations(\n identifier: string,\n view: ViewFilterInput | undefined,\n filters: OperationsFilterInput[],\n pagings: (PagingInput | undefined)[],\n ): Promise<{\n document: DocumentResult | null;\n operations: DocumentOperationsPage[];\n }> {\n const { query, variables } = buildBatchDocumentWithOperationsQuery(\n identifier,\n view,\n filters,\n pagings,\n );\n const data = await runWithMiddleware(\n \"BatchGetDocumentWithOperations\",\n (requestHeaders) =>\n client.request<\n Record<string, unknown> & { document?: DocumentResult }\n >(query, variables, requestHeaders),\n );\n return {\n document: data.document ?? null,\n operations: filters.map(\n (_, i) => data[`scope_${i}`] as DocumentOperationsPage,\n ),\n };\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -195,11 +195,42 @@ function fulfilledOnly(promises) {
|
|
|
195
195
|
return documents;
|
|
196
196
|
});
|
|
197
197
|
}
|
|
198
|
+
/** The snapshot every uncached document scope reads as. One frozen object, so `useSyncExternalStore` sees a stable value. */
|
|
199
|
+
const IDLE_OPERATIONS_ENTRY = Object.freeze({
|
|
200
|
+
status: "idle",
|
|
201
|
+
operations: Object.freeze([]),
|
|
202
|
+
error: void 0,
|
|
203
|
+
hasNextPage: false,
|
|
204
|
+
totalCount: void 0
|
|
205
|
+
});
|
|
206
|
+
/** Whether a document cache also serves operation history. `GraphQLClientDocumentCache` does not. */
|
|
207
|
+
function isOperationCache(cache) {
|
|
208
|
+
if (typeof cache !== "object" || cache === null) return false;
|
|
209
|
+
const candidate = cache;
|
|
210
|
+
return typeof candidate.getOperationsState === "function" && typeof candidate.loadOperations === "function" && typeof candidate.loadMoreOperations === "function" && typeof candidate.invalidateOperations === "function" && typeof candidate.subscribeOperations === "function";
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Page size used to refresh a scope whose request record has gone missing.
|
|
214
|
+
* A loaded scope always has one, so this is a floor rather than a default.
|
|
215
|
+
*/
|
|
216
|
+
const FALLBACK_REFRESH_LIMIT = 100;
|
|
217
|
+
/**
|
|
218
|
+
* The highest revision among the operations loaded so far, or -1 for none.
|
|
219
|
+
* Pages arrive oldest first, so this is normally the last entry; it is
|
|
220
|
+
* computed rather than assumed because nothing in the cache enforces that.
|
|
221
|
+
*/
|
|
222
|
+
function highestOperationIndex(operations) {
|
|
223
|
+
let highest = -1;
|
|
224
|
+
for (const operation of operations) if (operation.index > highest) highest = operation.index;
|
|
225
|
+
return highest;
|
|
226
|
+
}
|
|
198
227
|
/**
|
|
199
228
|
* Document cache implementation that uses the new ReactorClient API.
|
|
200
229
|
*
|
|
201
230
|
* This cache subscribes to document change events via IReactorBrowserClient.subscribe()
|
|
202
231
|
* and automatically updates the cache when documents are created, updated, or deleted.
|
|
232
|
+
* It also holds paginated operation history per document scope (see `IOperationCache`),
|
|
233
|
+
* which is dropped for a document whenever a change event for it arrives.
|
|
203
234
|
*/
|
|
204
235
|
var DocumentCache = class {
|
|
205
236
|
documents = /* @__PURE__ */ new Map();
|
|
@@ -213,6 +244,11 @@ var DocumentCache = class {
|
|
|
213
244
|
* the same document is cached under.
|
|
214
245
|
*/
|
|
215
246
|
aliasKeys = /* @__PURE__ */ new Map();
|
|
247
|
+
/** Operations by document id, then scope. Entries are replaced, never mutated. */
|
|
248
|
+
operationEntries = /* @__PURE__ */ new Map();
|
|
249
|
+
/** In-flight controllers and the next page's cursor/limit, by document id then scope. */
|
|
250
|
+
operationRequests = /* @__PURE__ */ new Map();
|
|
251
|
+
operationListeners = /* @__PURE__ */ new Map();
|
|
216
252
|
unsubscribe = null;
|
|
217
253
|
constructor(client) {
|
|
218
254
|
this.client = client;
|
|
@@ -223,8 +259,16 @@ var DocumentCache = class {
|
|
|
223
259
|
handleDocumentChange(event) {
|
|
224
260
|
if (event.type === DOCUMENT_CHANGE_TYPE.Deleted) {
|
|
225
261
|
const documentId = event.context?.childId;
|
|
226
|
-
if (documentId)
|
|
227
|
-
|
|
262
|
+
if (documentId) {
|
|
263
|
+
const keys = this.cacheKeysFor(documentId);
|
|
264
|
+
this.handleDocumentDeleted(documentId);
|
|
265
|
+
for (const key of keys) this.invalidateOperations(key);
|
|
266
|
+
}
|
|
267
|
+
} else if (event.type === DOCUMENT_CHANGE_TYPE.Updated) for (const doc of event.documents) {
|
|
268
|
+
const keys = this.cacheKeysFor(doc.header.id);
|
|
269
|
+
this.handleDocumentUpdated(doc.header.id).catch(console.warn);
|
|
270
|
+
for (const key of keys) this.refreshOperations(key);
|
|
271
|
+
}
|
|
228
272
|
}
|
|
229
273
|
handleDocumentDeleted(documentId) {
|
|
230
274
|
for (const key of this.cacheKeysFor(documentId)) {
|
|
@@ -319,6 +363,162 @@ var DocumentCache = class {
|
|
|
319
363
|
}
|
|
320
364
|
};
|
|
321
365
|
}
|
|
366
|
+
getOperationsState(documentId, scope) {
|
|
367
|
+
return this.operationEntries.get(documentId)?.get(scope) ?? IDLE_OPERATIONS_ENTRY;
|
|
368
|
+
}
|
|
369
|
+
loadOperations(documentId, scope, limit) {
|
|
370
|
+
const current = this.getOperationsState(documentId, scope);
|
|
371
|
+
if (current.status !== "idle") return;
|
|
372
|
+
const controller = new AbortController();
|
|
373
|
+
this.setOperationsRequest(documentId, scope, {
|
|
374
|
+
controller,
|
|
375
|
+
nextCursor: void 0,
|
|
376
|
+
limit
|
|
377
|
+
});
|
|
378
|
+
this.setOperationsEntry(documentId, scope, {
|
|
379
|
+
...current,
|
|
380
|
+
status: "pending"
|
|
381
|
+
});
|
|
382
|
+
this.settleOperationsPage(documentId, scope, this.client.getOperations(documentId, { scopes: [scope] }, void 0, {
|
|
383
|
+
cursor: "",
|
|
384
|
+
limit
|
|
385
|
+
}, controller.signal), controller, limit);
|
|
386
|
+
}
|
|
387
|
+
loadMoreOperations(documentId, scope) {
|
|
388
|
+
const current = this.getOperationsState(documentId, scope);
|
|
389
|
+
const request = this.operationRequests.get(documentId)?.get(scope);
|
|
390
|
+
if (current.status !== "success" || !current.hasNextPage || !request?.nextCursor) return;
|
|
391
|
+
const controller = new AbortController();
|
|
392
|
+
const { nextCursor, limit } = request;
|
|
393
|
+
this.setOperationsRequest(documentId, scope, {
|
|
394
|
+
controller,
|
|
395
|
+
nextCursor,
|
|
396
|
+
limit
|
|
397
|
+
});
|
|
398
|
+
this.setOperationsEntry(documentId, scope, {
|
|
399
|
+
...current,
|
|
400
|
+
status: "pending"
|
|
401
|
+
});
|
|
402
|
+
this.settleOperationsPage(documentId, scope, this.client.getOperations(documentId, { scopes: [scope] }, void 0, {
|
|
403
|
+
cursor: nextCursor,
|
|
404
|
+
limit
|
|
405
|
+
}, controller.signal), controller, limit);
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Bring a document's cached scopes up to date after it changed, without
|
|
409
|
+
* throwing away what is already loaded.
|
|
410
|
+
*
|
|
411
|
+
* The operation stream is append-only: an update adds operations at higher
|
|
412
|
+
* revisions and never rewrites the ones below, so history already paged in
|
|
413
|
+
* is still correct. Dropping it meant a panel showing a fully loaded
|
|
414
|
+
* document re-walked every page on each edit -- the cost of which grows
|
|
415
|
+
* with the document, exactly where it hurts most. Each scope instead asks
|
|
416
|
+
* only for what comes after the newest revision it holds, using the
|
|
417
|
+
* `sinceRevision` filter, and appends the answer.
|
|
418
|
+
*
|
|
419
|
+
* A scope that has not finished paging is dropped as before: it has no
|
|
420
|
+
* meaningful "newest revision" to resume from, since asking for everything
|
|
421
|
+
* past the newest row it happens to hold would skip the pages between that
|
|
422
|
+
* row and the end of the stream.
|
|
423
|
+
*/
|
|
424
|
+
refreshOperations(documentId) {
|
|
425
|
+
const scopes = this.operationEntries.get(documentId);
|
|
426
|
+
if (!scopes) return;
|
|
427
|
+
for (const [scope, entry] of [...scopes.entries()]) {
|
|
428
|
+
if (entry.status !== "success" || entry.hasNextPage) {
|
|
429
|
+
this.invalidateOperationsScope(documentId, scope);
|
|
430
|
+
continue;
|
|
431
|
+
}
|
|
432
|
+
const previous = this.operationRequests.get(documentId)?.get(scope);
|
|
433
|
+
const limit = previous?.limit ?? FALLBACK_REFRESH_LIMIT;
|
|
434
|
+
previous?.controller.abort();
|
|
435
|
+
const controller = new AbortController();
|
|
436
|
+
this.setOperationsRequest(documentId, scope, {
|
|
437
|
+
controller,
|
|
438
|
+
nextCursor: void 0,
|
|
439
|
+
limit
|
|
440
|
+
});
|
|
441
|
+
this.setOperationsEntry(documentId, scope, {
|
|
442
|
+
...entry,
|
|
443
|
+
status: "pending"
|
|
444
|
+
});
|
|
445
|
+
this.settleOperationsPage(documentId, scope, this.client.getOperations(documentId, { scopes: [scope] }, { sinceRevision: highestOperationIndex(entry.operations) + 1 }, {
|
|
446
|
+
cursor: "",
|
|
447
|
+
limit
|
|
448
|
+
}, controller.signal), controller, limit);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
/** Drops one scope of a document, aborting its request if one is in flight. */
|
|
452
|
+
invalidateOperationsScope(documentId, scope) {
|
|
453
|
+
const requests = this.operationRequests.get(documentId);
|
|
454
|
+
const request = requests?.get(scope);
|
|
455
|
+
if (request && requests) {
|
|
456
|
+
request.controller.abort();
|
|
457
|
+
requests.delete(scope);
|
|
458
|
+
if (requests.size === 0) this.operationRequests.delete(documentId);
|
|
459
|
+
}
|
|
460
|
+
const scopes = this.operationEntries.get(documentId);
|
|
461
|
+
if (scopes?.delete(scope)) {
|
|
462
|
+
if (scopes.size === 0) this.operationEntries.delete(documentId);
|
|
463
|
+
this.notifyOperationListeners(documentId);
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
invalidateOperations(documentId) {
|
|
467
|
+
const requests = this.operationRequests.get(documentId);
|
|
468
|
+
if (requests) {
|
|
469
|
+
for (const request of requests.values()) request.controller.abort();
|
|
470
|
+
this.operationRequests.delete(documentId);
|
|
471
|
+
}
|
|
472
|
+
if (this.operationEntries.delete(documentId)) this.notifyOperationListeners(documentId);
|
|
473
|
+
}
|
|
474
|
+
subscribeOperations(documentId, callback) {
|
|
475
|
+
const listeners = this.operationListeners.get(documentId) ?? [];
|
|
476
|
+
this.operationListeners.set(documentId, [...listeners, callback]);
|
|
477
|
+
return () => {
|
|
478
|
+
const current = this.operationListeners.get(documentId) ?? [];
|
|
479
|
+
this.operationListeners.set(documentId, current.filter((listener) => listener !== callback));
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
settleOperationsPage(documentId, scope, page, controller, limit) {
|
|
483
|
+
page.then((result) => {
|
|
484
|
+
if (controller.signal.aborted) return;
|
|
485
|
+
const current = this.getOperationsState(documentId, scope);
|
|
486
|
+
this.setOperationsRequest(documentId, scope, {
|
|
487
|
+
controller,
|
|
488
|
+
nextCursor: result.nextCursor,
|
|
489
|
+
limit
|
|
490
|
+
});
|
|
491
|
+
this.setOperationsEntry(documentId, scope, {
|
|
492
|
+
status: "success",
|
|
493
|
+
operations: [...current.operations, ...result.results],
|
|
494
|
+
error: void 0,
|
|
495
|
+
hasNextPage: !!result.nextCursor,
|
|
496
|
+
totalCount: result.totalCount
|
|
497
|
+
});
|
|
498
|
+
}, (reason) => {
|
|
499
|
+
if (controller.signal.aborted) return;
|
|
500
|
+
const current = this.getOperationsState(documentId, scope);
|
|
501
|
+
this.setOperationsEntry(documentId, scope, {
|
|
502
|
+
...current,
|
|
503
|
+
status: "error",
|
|
504
|
+
error: reason
|
|
505
|
+
});
|
|
506
|
+
});
|
|
507
|
+
}
|
|
508
|
+
setOperationsEntry(documentId, scope, entry) {
|
|
509
|
+
const scopes = this.operationEntries.get(documentId) ?? /* @__PURE__ */ new Map();
|
|
510
|
+
scopes.set(scope, entry);
|
|
511
|
+
this.operationEntries.set(documentId, scopes);
|
|
512
|
+
this.notifyOperationListeners(documentId);
|
|
513
|
+
}
|
|
514
|
+
setOperationsRequest(documentId, scope, request) {
|
|
515
|
+
const scopes = this.operationRequests.get(documentId) ?? /* @__PURE__ */ new Map();
|
|
516
|
+
scopes.set(scope, request);
|
|
517
|
+
this.operationRequests.set(documentId, scopes);
|
|
518
|
+
}
|
|
519
|
+
notifyOperationListeners(documentId) {
|
|
520
|
+
for (const listener of this.operationListeners.get(documentId) ?? []) listener();
|
|
521
|
+
}
|
|
322
522
|
/**
|
|
323
523
|
* Disposes of the cache and unsubscribes from document change events.
|
|
324
524
|
*/
|
|
@@ -327,6 +527,10 @@ var DocumentCache = class {
|
|
|
327
527
|
this.unsubscribe();
|
|
328
528
|
this.unsubscribe = null;
|
|
329
529
|
}
|
|
530
|
+
for (const requests of this.operationRequests.values()) for (const request of requests.values()) request.controller.abort();
|
|
531
|
+
this.operationRequests.clear();
|
|
532
|
+
this.operationEntries.clear();
|
|
533
|
+
this.operationListeners.clear();
|
|
330
534
|
}
|
|
331
535
|
};
|
|
332
536
|
//#endregion
|
|
@@ -495,7 +699,9 @@ function useDispatch(document) {
|
|
|
495
699
|
* @param onErrors - Callback invoked with any errors that occurred during action execution.
|
|
496
700
|
*/
|
|
497
701
|
function dispatch(actionOrActions, onErrors, onSuccess) {
|
|
498
|
-
dispatchActions(actionOrActions, document, onErrors, onSuccess).catch(
|
|
702
|
+
dispatchActions(actionOrActions, document, onErrors, onSuccess).catch((error) => {
|
|
703
|
+
logger.error("Failed to dispatch actions: @error", error);
|
|
704
|
+
});
|
|
499
705
|
}
|
|
500
706
|
return [document, dispatch];
|
|
501
707
|
}
|
|
@@ -512,6 +718,6 @@ function useDocumentsByIds(ids) {
|
|
|
512
718
|
return useDocuments(ids);
|
|
513
719
|
}
|
|
514
720
|
//#endregion
|
|
515
|
-
export {
|
|
721
|
+
export { queueOperations as C, queueActions as S, readPromiseState as _, setDocumentCache as a, isDuplicateModuleError as b, useDocumentSafe as c, useGetDocumentAsync as d, useGetDocuments as f, isOperationCache as g, addPromiseState as h, addDocumentCacheEventHandler as i, useDocuments as l, IDLE_OPERATIONS_ENTRY as m, useDocumentsByIds as n, useDocument as o, DocumentCache as p, useDispatch as r, useDocumentCache as s, useDocumentById as t, useGetDocument as u, DOCUMENT_CHANGE_TYPE as v, uploadOperations as w, dispatchActions as x, isDuplicateManifestError as y };
|
|
516
722
|
|
|
517
|
-
//# sourceMappingURL=document-by-id-
|
|
723
|
+
//# sourceMappingURL=document-by-id-iXB59Ge-.js.map
|