@schoolai/spicedb-zed-schema-parser
Version:
SpiceDB .zed file format parser and analyzer written in Typescript
1 lines • 42.7 kB
Source Map (JSON)
{"version":3,"sources":["../../src/builder/index.ts","../../src/builder/check.ts","../../src/builder/types.ts","../../src/builder/delete.ts","../../src/builder/lookup.ts","../../src/builder/query.ts","../../src/builder/transaction.ts","../../src/builder/write.ts","../../src/builder/operations.ts"],"sourcesContent":["export * from './check'\nexport * from './delete'\nexport * from './lookup'\nexport * from './operations'\nexport * from './query'\nexport * from './transaction'\nexport * from './types'\nexport * from './write'\n","import { v1 } from '@authzed/authzed-node'\nimport { Operation, parseReference, SpiceDBClient } from './types'\n\n/**\n * Operation for checking permissions\n */\nexport class CheckOperation implements Operation<boolean> {\n protected subjectRef?: string\n protected resourceRef?: string\n protected consistency?: v1.Consistency\n\n constructor(protected permission: string) {}\n\n subject(ref: string): this {\n this.subjectRef = ref\n return this\n }\n\n resource(ref: string): this {\n this.resourceRef = ref\n return this\n }\n\n withConsistency(token: string): this {\n this.consistency = v1.Consistency.create({\n requirement: {\n oneofKind: 'atLeastAsFresh',\n atLeastAsFresh: v1.ZedToken.create({ token }),\n },\n })\n return this\n }\n\n async execute(client: SpiceDBClient): Promise<boolean> {\n if (!this.subjectRef || !this.resourceRef) {\n throw new Error('Check operation requires both subject and resource')\n }\n\n const [subjectType, subjectId] = parseReference(this.subjectRef)\n const [resourceType, resourceId] = parseReference(this.resourceRef)\n\n const request = v1.CheckPermissionRequest.create({\n resource: v1.ObjectReference.create({\n objectType: resourceType,\n objectId: resourceId,\n }),\n permission: this.permission,\n subject: v1.SubjectReference.create({\n object: v1.ObjectReference.create({\n objectType: subjectType,\n objectId: subjectId,\n }),\n }),\n consistency: this.consistency,\n })\n\n const response = await client.checkPermission(request)\n\n return (\n response.permissionship ===\n v1.CheckPermissionResponse_Permissionship.HAS_PERMISSION\n )\n }\n\n toJSON() {\n return {\n permission: this.permission,\n subject: this.subjectRef,\n resource: this.resourceRef,\n consistency: this.consistency,\n }\n }\n}\n\n/**\n * Bound version of CheckOperation\n */\nexport class BoundCheckOperation extends CheckOperation {\n constructor(\n private client: SpiceDBClient,\n permission: string,\n ) {\n super(permission)\n }\n\n async execute(): Promise<boolean> {\n return super.execute(this.client)\n }\n}\n","import { v1 } from '@authzed/authzed-node'\n\nexport type SpiceDBClient = v1.ZedPromiseClientInterface\n/**\n * Base interface for all operations\n */\nexport interface Operation<T> {\n execute(client: SpiceDBClient): Promise<T>\n}\n\n/**\n * Helper function to parse resource references\n */\nexport function parseReference(ref: string): [string, string] {\n const [part1, part2] = ref.split(':')\n if (!part1 || !part2) {\n throw new Error(\n `Invalid reference format: ${ref}. Expected format: type:id`,\n )\n }\n return [part1, part2]\n}\n\n/**\n * Result types\n */\nexport interface QueryResult {\n type: string\n id: string\n relation?: string\n subjectType?: string\n subjectId?: string\n permissionship?: v1.LookupPermissionship\n}\n\nexport interface LookupResult {\n type: string\n id: string\n permissionship?: v1.LookupPermissionship\n}\n\nexport interface TransactionResult {\n token: string | null\n succeeded: boolean\n operationCount: number\n}\n","import { v1 } from '@authzed/authzed-node'\nimport { Operation, parseReference, SpiceDBClient } from './types'\n\n/**\n * Operation for deleting relationships\n */\nexport class DeleteOperation implements Operation<string | null> {\n protected filter: {\n subjectType?: string\n subjectId?: string\n relation?: string\n resourceType?: string\n resourceId?: string\n } = {}\n\n subject(ref: string): this {\n const [type, id] = parseReference(ref)\n this.filter.subjectType = type\n this.filter.subjectId = id\n return this\n }\n\n relation(rel: string): this {\n this.filter.relation = rel\n return this\n }\n\n resource(ref: string): this {\n const [type, id] = parseReference(ref)\n this.filter.resourceType = type\n this.filter.resourceId = id\n return this\n }\n\n where(filter: {\n resourceType?: string\n resourceId?: string\n relation?: string\n subjectType?: string\n subjectId?: string\n }): this {\n this.filter = { ...this.filter, ...filter }\n return this\n }\n\n async execute(client: SpiceDBClient): Promise<string | null> {\n const relationshipFilter: Partial<v1.RelationshipFilter> = {}\n\n if (this.filter.resourceType) {\n relationshipFilter.resourceType = this.filter.resourceType\n }\n if (this.filter.resourceId) {\n relationshipFilter.optionalResourceId = this.filter.resourceId\n }\n if (this.filter.relation) {\n relationshipFilter.optionalRelation = this.filter.relation\n }\n\n if (this.filter.subjectType || this.filter.subjectId) {\n const subjectFilter: Partial<v1.SubjectFilter> = {}\n if (this.filter.subjectType) {\n subjectFilter.subjectType = this.filter.subjectType\n }\n if (this.filter.subjectId) {\n subjectFilter.optionalSubjectId = this.filter.subjectId\n }\n relationshipFilter.optionalSubjectFilter =\n v1.SubjectFilter.create(subjectFilter)\n }\n\n const request = v1.DeleteRelationshipsRequest.create({\n relationshipFilter: v1.RelationshipFilter.create(relationshipFilter),\n })\n\n const response = await client.deleteRelationships(request)\n\n return response.deletedAt?.token || null\n }\n\n toJSON() {\n return {\n filter: this.filter,\n }\n }\n}\n\n/**\n * Bound version of DeleteOperation\n */\nexport class BoundDeleteOperation extends DeleteOperation {\n constructor(private client: SpiceDBClient) {\n super()\n }\n\n async execute(): Promise<string | null> {\n return super.execute(this.client)\n }\n}\n","import { v1 } from '@authzed/authzed-node'\nimport { LookupResult, Operation, parseReference, SpiceDBClient } from './types'\n\n/**\n * Lookup operation for finding accessible resources or subjects with permissions\n */\nexport class LookupOperation implements Operation<LookupResult[]> {\n protected lookupType?: 'resources' | 'subjects'\n protected resourceFilter?: { type: string; id?: string }\n protected subjectFilter?: { type: string; id?: string }\n protected permission?: string\n protected consistency?: v1.Consistency\n\n resourcesAccessibleBy(subjectRef: string): this {\n this.lookupType = 'resources'\n const [type, id] = parseReference(subjectRef)\n this.subjectFilter = { type, id }\n return this\n }\n\n subjectsWithAccessTo(resourceRef: string): this {\n this.lookupType = 'subjects'\n const [type, id] = parseReference(resourceRef)\n this.resourceFilter = { type, id }\n return this\n }\n\n ofType(type: string): this {\n if (this.lookupType === 'resources') {\n this.resourceFilter = { type }\n } else if (this.lookupType === 'subjects') {\n this.subjectFilter = { type }\n }\n return this\n }\n\n withPermission(permission: string): this {\n this.permission = permission\n return this\n }\n\n withConsistency(token: string): this {\n this.consistency = v1.Consistency.create({\n requirement: {\n oneofKind: 'atLeastAsFresh',\n atLeastAsFresh: v1.ZedToken.create({ token }),\n },\n })\n return this\n }\n\n async execute(client: SpiceDBClient): Promise<LookupResult[]> {\n if (!this.permission) {\n throw new Error('Lookup operation requires permission')\n }\n\n if (this.lookupType === 'resources' && this.subjectFilter) {\n const request = v1.LookupResourcesRequest.create({\n resourceObjectType: this.resourceFilter?.type || 'document',\n permission: this.permission,\n subject: v1.SubjectReference.create({\n object: v1.ObjectReference.create({\n objectType: this.subjectFilter.type,\n objectId: this.subjectFilter.id!,\n }),\n }),\n consistency: this.consistency,\n })\n\n const stream = await client.lookupResources(request)\n\n const results: LookupResult[] = []\n for (const result of stream) {\n if (result.resourceObjectId) {\n results.push({\n type: this.resourceFilter?.type || 'document',\n id: result.resourceObjectId,\n permissionship: result.permissionship,\n })\n }\n }\n return results\n }\n\n if (this.lookupType === 'subjects' && this.resourceFilter?.id) {\n const request = v1.LookupSubjectsRequest.create({\n resource: v1.ObjectReference.create({\n objectType: this.resourceFilter.type,\n objectId: this.resourceFilter.id,\n }),\n permission: this.permission,\n subjectObjectType: this.subjectFilter?.type || 'user',\n consistency: this.consistency,\n })\n\n const stream = await client.lookupSubjects(request)\n\n const results: LookupResult[] = []\n for (const result of stream) {\n if (result.subject?.subjectObjectId) {\n results.push({\n type: this.subjectFilter?.type || 'user',\n id: result.subject.subjectObjectId,\n permissionship: result.subject.permissionship,\n })\n }\n }\n return results\n }\n\n throw new Error('Invalid lookup configuration')\n }\n\n /**\n * Special helper for looking up subjects with multiple permission levels\n */\n async withPermissions(\n permissions: string[],\n client?: SpiceDBClient,\n ): Promise<Map<string, string>> {\n if (!this.resourceFilter?.id) {\n throw new Error('Multiple permission lookup requires a specific resource')\n }\n\n // This method needs a client, either passed in or error\n if (!client) {\n throw new Error(\n 'withPermissions requires a client. Use execute(client) or pass client as second parameter.',\n )\n }\n\n const resultMap = new Map<string, string>()\n\n // Query each permission level\n for (const permission of permissions) {\n const request = v1.LookupSubjectsRequest.create({\n resource: v1.ObjectReference.create({\n objectType: this.resourceFilter.type,\n objectId: this.resourceFilter.id,\n }),\n permission,\n subjectObjectType: this.subjectFilter?.type || 'user',\n consistency: this.consistency,\n })\n\n const stream = await client.lookupSubjects(request)\n\n for (const result of stream) {\n if (result.subject?.subjectObjectId) {\n // Only set if not already set (maintains hierarchy)\n if (!resultMap.has(result.subject.subjectObjectId)) {\n resultMap.set(result.subject.subjectObjectId, permission)\n }\n }\n }\n }\n\n return resultMap\n }\n\n toJSON() {\n return {\n lookupType: this.lookupType,\n resourceFilter: this.resourceFilter,\n subjectFilter: this.subjectFilter,\n permission: this.permission,\n consistency: this.consistency,\n }\n }\n}\n\n/**\n * Bound version of LookupOperation\n */\nexport class BoundLookupOperation extends LookupOperation {\n constructor(private client: SpiceDBClient) {\n super()\n }\n\n async execute(): Promise<LookupResult[]> {\n return super.execute(this.client)\n }\n\n async withPermissions(permissions: string[]): Promise<Map<string, string>> {\n return super.withPermissions(permissions, this.client)\n }\n}\n","import { v1 } from '@authzed/authzed-node'\nimport { Operation, parseReference, QueryResult, SpiceDBClient } from './types'\n\n/**\n * Operation for querying relationships\n */\nexport class QueryOperation implements Operation<QueryResult[]> {\n protected filter: {\n subjectType?: string\n subjectId?: string\n relation?: string\n resourceType?: string\n resourceId?: string\n } = {}\n protected queryType?: 'subjects' | 'resources'\n protected permission?: string\n protected consistency?: v1.Consistency\n\n subjects(type?: string): this {\n this.queryType = 'subjects'\n if (type) this.filter.subjectType = type\n return this\n }\n\n resources(type?: string): this {\n this.queryType = 'resources'\n if (type) this.filter.resourceType = type\n return this\n }\n\n subject(ref: string): this {\n if (ref.includes('*')) {\n const [type] = parseReference(ref)\n this.filter.subjectType = type\n } else {\n const [type, id] = parseReference(ref)\n this.filter.subjectType = type\n this.filter.subjectId = id\n }\n return this\n }\n\n relation(rel: string): this {\n if (rel !== '*') {\n this.filter.relation = rel\n }\n return this\n }\n\n resource(ref: string): this {\n if (ref.includes('*')) {\n const [type] = parseReference(ref)\n this.filter.resourceType = type\n } else {\n const [type, id] = parseReference(ref)\n this.filter.resourceType = type\n this.filter.resourceId = id\n }\n return this\n }\n\n withPermission(permission: string): this {\n this.permission = permission\n return this\n }\n\n withConsistency(token: string): this {\n this.consistency = v1.Consistency.create({\n requirement: {\n oneofKind: 'atLeastAsFresh',\n atLeastAsFresh: v1.ZedToken.create({ token }),\n },\n })\n return this\n }\n\n async execute(client: SpiceDBClient): Promise<QueryResult[]> {\n // If looking up subjects for a specific resource/permission\n if (\n this.queryType === 'subjects' &&\n this.filter.resourceType &&\n this.filter.resourceId &&\n this.permission\n ) {\n const request = v1.LookupSubjectsRequest.create({\n resource: v1.ObjectReference.create({\n objectType: this.filter.resourceType,\n objectId: this.filter.resourceId,\n }),\n permission: this.permission,\n subjectObjectType: this.filter.subjectType || 'user',\n consistency: this.consistency,\n })\n\n const stream = await client.lookupSubjects(request)\n\n const results: QueryResult[] = []\n for (const result of stream) {\n if (result.subject?.subjectObjectId) {\n results.push({\n type: this.filter.subjectType || 'user',\n id: result.subject.subjectObjectId,\n relation:\n result.subject.permissionship ===\n v1.LookupPermissionship.HAS_PERMISSION\n ? this.permission\n : undefined,\n })\n }\n }\n return results\n }\n\n // If looking up resources accessible to a subject\n if (\n this.queryType === 'resources' &&\n this.filter.subjectType &&\n this.filter.subjectId &&\n this.permission\n ) {\n const request = v1.LookupResourcesRequest.create({\n resourceObjectType: this.filter.resourceType || 'document',\n permission: this.permission,\n subject: v1.SubjectReference.create({\n object: v1.ObjectReference.create({\n objectType: this.filter.subjectType,\n objectId: this.filter.subjectId,\n }),\n }),\n consistency: this.consistency,\n })\n\n const stream = await client.lookupResources(request)\n\n const results: QueryResult[] = []\n for (const result of stream) {\n if (result.resourceObjectId) {\n results.push({\n type: this.filter.resourceType || 'document',\n id: result.resourceObjectId,\n permissionship: result.permissionship,\n })\n }\n }\n return results\n }\n\n // For general relationship queries, use ReadRelationships\n const filter: Partial<v1.RelationshipFilter> = {}\n\n if (this.filter.resourceType) {\n filter.resourceType = this.filter.resourceType\n }\n if (this.filter.resourceId) {\n filter.optionalResourceId = this.filter.resourceId\n }\n if (this.filter.relation) {\n filter.optionalRelation = this.filter.relation\n }\n\n if (this.filter.subjectType || this.filter.subjectId) {\n const subjectFilter: Partial<v1.SubjectFilter> = {}\n if (this.filter.subjectType) {\n subjectFilter.subjectType = this.filter.subjectType\n }\n if (this.filter.subjectId) {\n subjectFilter.optionalSubjectId = this.filter.subjectId\n }\n filter.optionalSubjectFilter = v1.SubjectFilter.create(subjectFilter)\n }\n\n const request = v1.ReadRelationshipsRequest.create({\n relationshipFilter: v1.RelationshipFilter.create(filter),\n consistency: this.consistency,\n })\n\n const stream = await client.readRelationships(request)\n const results: QueryResult[] = []\n\n for (const result of stream) {\n if (result.relationship) {\n results.push({\n type: result.relationship.resource?.objectType || '',\n id: result.relationship.resource?.objectId || '',\n relation: result.relationship.relation,\n subjectType: result.relationship.subject?.object?.objectType || '',\n subjectId: result.relationship.subject?.object?.objectId || '',\n })\n }\n }\n\n return results\n }\n\n toJSON() {\n return {\n queryType: this.queryType,\n filter: this.filter,\n permission: this.permission,\n consistency: this.consistency,\n }\n }\n}\n\n/**\n * Bound version of QueryOperation\n */\nexport class BoundQueryOperation extends QueryOperation {\n constructor(private client: SpiceDBClient) {\n super()\n }\n\n async execute(): Promise<QueryResult[]> {\n return super.execute(this.client)\n }\n}\n","import { v1 } from '@authzed/authzed-node'\nimport {\n Operation,\n parseReference,\n SpiceDBClient,\n TransactionResult,\n} from './types'\n\n/**\n * Transaction for batching multiple operations\n */\nexport class Transaction implements Operation<TransactionResult> {\n protected operations: (() => v1.RelationshipUpdate)[] = []\n\n grant(relation: string): TransactionWriteOperation<Transaction> {\n return new TransactionWriteOperation(this, 'grant', relation)\n }\n\n revoke(relation: string): TransactionWriteOperation<Transaction> {\n return new TransactionWriteOperation(this, 'revoke', relation)\n }\n\n add(operation: () => v1.RelationshipUpdate): this {\n this.operations.push(operation)\n return this\n }\n\n async execute(client: SpiceDBClient): Promise<TransactionResult> {\n const updates = this.operations.map(op => op())\n\n const request = v1.WriteRelationshipsRequest.create({ updates })\n const response = await client.writeRelationships(request)\n\n return {\n token: response.writtenAt?.token || null,\n succeeded: true,\n operationCount: updates.length,\n }\n }\n\n toJSON() {\n return {\n operationCount: this.operations.length,\n }\n }\n}\n\n/**\n * Bound version of Transaction\n */\nexport class BoundTransaction extends Transaction {\n constructor(private client: SpiceDBClient) {\n super()\n }\n\n grant(relation: string): TransactionWriteOperation<BoundTransaction> {\n return new TransactionWriteOperation(this, 'grant', relation)\n }\n\n revoke(relation: string): TransactionWriteOperation<BoundTransaction> {\n return new TransactionWriteOperation(this, 'revoke', relation)\n }\n\n async execute(): Promise<TransactionResult> {\n return super.execute(this.client)\n }\n\n async commit(): Promise<TransactionResult> {\n return this.execute()\n }\n}\n\n/**\n * Write operation within a transaction\n */\nexport class TransactionWriteOperation<T extends Transaction> {\n private subjects: string[] = []\n private resources: string[] = []\n\n constructor(\n private transaction: T,\n private operation: 'grant' | 'revoke',\n private relation: string,\n ) {}\n\n subject(ref: string | string[]): this {\n this.subjects = Array.isArray(ref) ? ref : [ref]\n return this\n }\n\n resource(ref: string | string[]): this {\n this.resources = Array.isArray(ref) ? ref : [ref]\n return this\n }\n\n and(): T {\n // Add all combinations to transaction\n for (const subjectRef of this.subjects) {\n for (const resourceRef of this.resources) {\n this.transaction.add(() => {\n const [subjectType, subjectId] = parseReference(subjectRef)\n const [resourceType, resourceId] = parseReference(resourceRef)\n\n const relationship = v1.Relationship.create({\n resource: v1.ObjectReference.create({\n objectType: resourceType,\n objectId: resourceId,\n }),\n relation: this.relation,\n subject: v1.SubjectReference.create({\n object: v1.ObjectReference.create({\n objectType: subjectType,\n objectId: subjectId,\n }),\n }),\n })\n\n return v1.RelationshipUpdate.create({\n relationship,\n operation:\n this.operation === 'grant'\n ? v1.RelationshipUpdate_Operation.TOUCH\n : v1.RelationshipUpdate_Operation.DELETE,\n })\n })\n }\n }\n\n return this.transaction\n }\n}\n","import { v1 } from '@authzed/authzed-node'\nimport { Operation, parseReference, SpiceDBClient } from './types'\n\n/**\n * Base class for operations that write relationships\n */\nexport class WriteOperation implements Operation<string | null> {\n protected subjects: string[] = []\n protected resources: string[] = []\n protected consistency?: v1.Consistency\n\n constructor(\n protected operation: 'grant' | 'revoke',\n protected relation: string,\n ) {}\n\n subject(ref: string | string[]): this {\n this.subjects = Array.isArray(ref) ? ref : [ref]\n return this\n }\n\n resource(ref: string | string[]): this {\n this.resources = Array.isArray(ref) ? ref : [ref]\n return this\n }\n\n withConsistency(token: string): this {\n this.consistency = v1.Consistency.create({\n requirement: {\n oneofKind: 'atLeastAsFresh',\n atLeastAsFresh: v1.ZedToken.create({ token }),\n },\n })\n return this\n }\n\n async execute(client: SpiceDBClient): Promise<string | null> {\n const updates: v1.RelationshipUpdate[] = []\n\n for (const subjectRef of this.subjects) {\n for (const resourceRef of this.resources) {\n const [subjectType, subjectId] = parseReference(subjectRef)\n const [resourceType, resourceId] = parseReference(resourceRef)\n\n const relationship = v1.Relationship.create({\n resource: v1.ObjectReference.create({\n objectType: resourceType,\n objectId: resourceId,\n }),\n relation: this.relation,\n subject: v1.SubjectReference.create({\n object: v1.ObjectReference.create({\n objectType: subjectType,\n objectId: subjectId,\n }),\n }),\n })\n\n updates.push(\n v1.RelationshipUpdate.create({\n relationship,\n operation:\n this.operation === 'grant'\n ? v1.RelationshipUpdate_Operation.TOUCH\n : v1.RelationshipUpdate_Operation.DELETE,\n }),\n )\n }\n }\n\n const request = v1.WriteRelationshipsRequest.create({ updates })\n const response = await client.writeRelationships(request)\n\n return response.writtenAt?.token || null\n }\n\n /**\n * Convert to a plain object for serialization\n */\n toJSON() {\n return {\n operation: this.operation,\n relation: this.relation,\n subjects: this.subjects,\n resources: this.resources,\n consistency: this.consistency,\n }\n }\n}\n\n/**\n * Bound version of WriteOperation with immediate execute\n */\nexport class BoundWriteOperation extends WriteOperation {\n constructor(\n private client: SpiceDBClient,\n operation: 'grant' | 'revoke',\n relation: string,\n ) {\n super(operation, relation)\n }\n\n async execute(): Promise<string | null> {\n return super.execute(this.client)\n }\n}\n","import { BoundCheckOperation, CheckOperation } from './check'\nimport { BoundDeleteOperation, DeleteOperation } from './delete'\nimport { BoundLookupOperation, LookupOperation } from './lookup'\nimport { BoundQueryOperation, QueryOperation } from './query'\nimport { BoundTransaction, Transaction } from './transaction'\nimport { Operation, SpiceDBClient } from './types'\nimport { BoundWriteOperation, WriteOperation } from './write'\n\n/**\n * Static builders for creating pure operations without a client\n */\n// biome-ignore lint/complexity/noStaticOnlyClass: builder class is intended\nexport class PermissionOperations {\n /**\n * Create a grant operation\n */\n static grant(relation: string): WriteOperation {\n return new WriteOperation('grant', relation)\n }\n\n /**\n * Create a revoke operation\n */\n static revoke(relation: string): WriteOperation {\n return new WriteOperation('revoke', relation)\n }\n\n /**\n * Create a check operation\n */\n static check(permission: string): CheckOperation {\n return new CheckOperation(permission)\n }\n\n /**\n * Create a find/query operation\n */\n static find(): QueryOperation {\n return new QueryOperation()\n }\n\n /**\n * Create a delete operation\n */\n static delete(): DeleteOperation {\n return new DeleteOperation()\n }\n\n /**\n * Create a batch transaction\n */\n static batch(): Transaction {\n return new Transaction()\n }\n\n /**\n * Create a lookup operation\n */\n static lookup(): LookupOperation {\n return new LookupOperation()\n }\n}\n\n/**\n * Main entry point for the permissions DSL with bound client\n */\nexport class Permissions {\n constructor(private client: SpiceDBClient) {}\n\n /**\n * Grant a relation between subjects and resources\n */\n grant(relation: string): BoundWriteOperation {\n return new BoundWriteOperation(this.client, 'grant', relation)\n }\n\n /**\n * Revoke a relation between subjects and resources\n */\n revoke(relation: string): BoundWriteOperation {\n return new BoundWriteOperation(this.client, 'revoke', relation)\n }\n\n /**\n * Check if a subject has a permission on a resource\n */\n check(permission: string): BoundCheckOperation {\n return new BoundCheckOperation(this.client, permission)\n }\n\n /**\n * Find subjects or resources matching criteria\n */\n find(): BoundQueryOperation {\n return new BoundQueryOperation(this.client)\n }\n\n /**\n * Delete relationships matching a filter\n */\n delete(): BoundDeleteOperation {\n return new BoundDeleteOperation(this.client)\n }\n\n /**\n * Create a batch transaction\n */\n batch(): BoundTransaction {\n return new BoundTransaction(this.client)\n }\n\n /**\n * Lookup resources accessible to a subject\n */\n lookup(): BoundLookupOperation {\n return new BoundLookupOperation(this.client)\n }\n\n /**\n * Execute a pure operation with this instance's client\n */\n async execute<T>(operation: Operation<T>): Promise<T> {\n return operation.execute(this.client)\n }\n}\n\n/**\n * Create a permissions instance with bound client\n */\nexport function createPermissions(client: SpiceDBClient): Permissions {\n return new Permissions(client)\n}\n\n/**\n * Export the static builders for convenience\n */\nexport const Operations = PermissionOperations\n"],"mappings":"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","names":["import_authzed_node","import_authzed_node","import_authzed_node","request","stream","results","import_authzed_node","import_authzed_node"]}