opacity-issuer-core 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +44 -0
  3. package/dist/chunk-2STMWRIV.js +164 -0
  4. package/dist/chunk-2STMWRIV.js.map +1 -0
  5. package/dist/chunk-3L7NNVUV.cjs +184 -0
  6. package/dist/chunk-3L7NNVUV.cjs.map +1 -0
  7. package/dist/chunk-54Q3MU62.js +29 -0
  8. package/dist/chunk-54Q3MU62.js.map +1 -0
  9. package/dist/chunk-7ODYBEZH.js +889 -0
  10. package/dist/chunk-7ODYBEZH.js.map +1 -0
  11. package/dist/chunk-GMPQFX25.cjs +923 -0
  12. package/dist/chunk-GMPQFX25.cjs.map +1 -0
  13. package/dist/chunk-HJQZWNZJ.cjs +33 -0
  14. package/dist/chunk-HJQZWNZJ.cjs.map +1 -0
  15. package/dist/documents/index.cjs +170 -0
  16. package/dist/documents/index.cjs.map +1 -0
  17. package/dist/documents/index.d.cts +1370 -0
  18. package/dist/documents/index.d.ts +1370 -0
  19. package/dist/documents/index.js +5 -0
  20. package/dist/documents/index.js.map +1 -0
  21. package/dist/documents/validate.cjs +53 -0
  22. package/dist/documents/validate.cjs.map +1 -0
  23. package/dist/documents/validate.d.cts +70 -0
  24. package/dist/documents/validate.d.ts +70 -0
  25. package/dist/documents/validate.js +4 -0
  26. package/dist/documents/validate.js.map +1 -0
  27. package/dist/index.cjs +8917 -0
  28. package/dist/index.cjs.map +1 -0
  29. package/dist/index.d.cts +11088 -0
  30. package/dist/index.d.ts +11088 -0
  31. package/dist/index.js +8647 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/subgraph.cjs +891 -0
  34. package/dist/subgraph.cjs.map +1 -0
  35. package/dist/subgraph.d.cts +456 -0
  36. package/dist/subgraph.d.ts +456 -0
  37. package/dist/subgraph.js +882 -0
  38. package/dist/subgraph.js.map +1 -0
  39. package/dist/transport-0_X4HTI6.d.ts +39 -0
  40. package/dist/transport-uaC5Yl3p.d.cts +39 -0
  41. package/dist/types-B4Yi7WA4.d.cts +108 -0
  42. package/dist/types-B4Yi7WA4.d.ts +108 -0
  43. package/package.json +75 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/indexer/errors.ts","../src/indexer/executor.ts","../src/indexer/arguments.ts","../src/indexer/index.ts","../src/indexer/wire.ts","../src/indexer/client.ts"],"names":["OpacityIssuerError","options","invalid","uint","address","bytes32","object","blockNumber","page","vault","meta","record"],"mappings":"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","file":"subgraph.cjs","sourcesContent":["import { OpacityIssuerError } from '../errors.js';\n\nexport type IndexerErrorCode =\n | 'NOT_CONFIGURED'\n | 'INVALID_ARGUMENT'\n | 'ABORTED'\n | 'TIMEOUT'\n | 'TRANSPORT'\n | 'HTTP'\n | 'GRAPHQL'\n | 'INDEXING_ERROR'\n | 'INVALID_RESPONSE'\n | 'DEPLOYMENT_CHANGED'\n | 'SNAPSHOT_CHANGED';\n\n/** Indexer failures never represent a failed on-chain transaction. */\nexport class OpacityIndexerError extends OpacityIssuerError {\n constructor(\n readonly code: IndexerErrorCode,\n message: string,\n options?: { cause?: unknown },\n ) {\n super(message, options);\n this.name = 'OpacityIndexerError';\n }\n}\n","import type { FetchLike } from '../transport.js';\nimport { OpacityIndexerError } from './errors.js';\n\nexport interface GraphqlRequestOptions {\n signal?: AbortSignal;\n timeoutMs?: number;\n}\nexport interface GraphqlExecutorConfig {\n url?: string | undefined;\n fetch?: FetchLike;\n timeoutMs?: number;\n headers?: Record<string, string>;\n}\n\nexport function validateSubgraphUrl(url: string): void {\n try {\n const parsed = new URL(url);\n if (!['http:', 'https:'].includes(parsed.protocol) || parsed.username || parsed.password)\n throw new Error('Invalid URL');\n } catch (cause) {\n throw new OpacityIndexerError(\n 'INVALID_ARGUMENT',\n 'Subgraph URL must use HTTP(S) without embedded credentials.',\n { cause },\n );\n }\n}\n\n/** The single network boundary for generic GraphQL and typed indexed reads. */\nexport function createGraphqlExecutor(config: GraphqlExecutorConfig) {\n const fetchImpl = config.fetch ?? globalThis.fetch?.bind(globalThis);\n if (config.url) validateSubgraphUrl(config.url);\n\n return async (\n query: string,\n variables: Record<string, unknown> = {},\n options: GraphqlRequestOptions = {},\n ): Promise<Record<string, unknown>> => {\n if (!config.url)\n throw new OpacityIndexerError(\n 'NOT_CONFIGURED',\n 'Configure a subgraph URL to use indexed reads.',\n );\n if (!fetchImpl)\n throw new OpacityIndexerError('NOT_CONFIGURED', 'A fetch implementation is required.');\n const timeoutMs = options.timeoutMs ?? config.timeoutMs ?? 30_000;\n if (!Number.isInteger(timeoutMs) || timeoutMs <= 0 || timeoutMs > 2147483647)\n throw new OpacityIndexerError(\n 'INVALID_ARGUMENT',\n 'timeoutMs must be a positive 32-bit integer.',\n );\n if (options.signal?.aborted)\n throw new OpacityIndexerError('ABORTED', 'Subgraph request cancelled before it started.');\n\n const controller = new AbortController();\n let timedOut = false;\n const onAbort = () => controller.abort();\n options.signal?.addEventListener('abort', onAbort, { once: true });\n const timer = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeoutMs);\n let cancellation: (() => void) | undefined;\n const cancellationError = (cause?: unknown) =>\n new OpacityIndexerError(\n timedOut ? 'TIMEOUT' : 'ABORTED',\n timedOut ? 'Subgraph request timed out.' : 'Subgraph request cancelled.',\n { cause },\n );\n const aborted = new Promise<never>((_, reject) => {\n cancellation = () => reject(cancellationError());\n controller.signal.addEventListener('abort', cancellation, { once: true });\n });\n try {\n // Covers fetch and body consumption even when an injected implementation ignores abort.\n return await Promise.race([\n (async () => {\n const response = await fetchImpl(config.url!, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n 'content-type': 'application/json',\n ...config.headers,\n },\n credentials: 'omit',\n signal: controller.signal,\n body: JSON.stringify({ query, variables }),\n });\n if (!response.ok)\n throw new OpacityIndexerError('HTTP', `Subgraph returned HTTP ${response.status}.`);\n const payload: unknown = await response.json();\n if (!payload || typeof payload !== 'object' || Array.isArray(payload))\n throw new OpacityIndexerError('INVALID_RESPONSE', 'Malformed subgraph response.');\n const envelope = payload as Record<string, unknown>;\n if (envelope['errors'] !== undefined) {\n if (!Array.isArray(envelope['errors']))\n throw new OpacityIndexerError('INVALID_RESPONSE', 'Malformed subgraph errors.');\n if (envelope['errors'].length > 0)\n throw new OpacityIndexerError(\n 'GRAPHQL',\n 'Subgraph returned GraphQL errors; partial data was discarded.',\n { cause: envelope['errors'] },\n );\n }\n if (\n !envelope['data'] ||\n typeof envelope['data'] !== 'object' ||\n Array.isArray(envelope['data'])\n )\n throw new OpacityIndexerError('INVALID_RESPONSE', 'Subgraph returned no data object.');\n return envelope['data'] as Record<string, unknown>;\n })(),\n aborted,\n ]);\n } catch (cause) {\n if (cause instanceof OpacityIndexerError) throw cause;\n if (controller.signal.aborted) throw cancellationError(cause);\n throw new OpacityIndexerError('TRANSPORT', 'Subgraph request or response decoding failed.', {\n cause,\n });\n } finally {\n clearTimeout(timer);\n options.signal?.removeEventListener('abort', onAbort);\n // Detach the rejection listener first: cleanup is resource disposal, not cancellation\n // of a successfully completed query. Abort also closes any unread error response body.\n if (cancellation) controller.signal.removeEventListener('abort', cancellation);\n controller.abort();\n }\n };\n}\n","import { OpacityIndexerError } from './errors.js';\nimport type { OpacityIndexerNamespace } from './index.js';\n\nexport type IndexerOperation = keyof OpacityIndexerNamespace;\ntype Rule = (value: unknown, path: string) => void;\n\nfunction invalid(path: string): never {\n throw new OpacityIndexerError('INVALID_ARGUMENT', `Invalid indexer argument at ${path}.`);\n}\nconst optional =\n (rule: Rule): Rule =>\n (value, path) => {\n if (value !== undefined) rule(value, path);\n };\nconst string =\n (pattern: RegExp, min = 0, max = Infinity): Rule =>\n (value, path) => {\n if (\n typeof value !== 'string' ||\n value.length < min ||\n value.length > max ||\n !pattern.test(value)\n )\n invalid(path);\n };\nconst address = string(/^0x[0-9a-fA-F]{40}$/);\nconst bytes32 = string(/^0x[0-9a-fA-F]{64}$/);\nconst uint =\n (max: bigint): Rule =>\n (value, path) => {\n if (typeof value !== 'bigint' || value < 0n || value > max) invalid(path);\n };\nconst uint256 = uint((1n << 256n) - 1n);\nconst blockNumber = uint(2147483647n);\nconst integer =\n (min: number, max: number): Rule =>\n (value, path) => {\n if (typeof value !== 'number' || !Number.isInteger(value) || value < min || value > max)\n invalid(path);\n };\nconst boolean: Rule = (value, path) => {\n if (typeof value !== 'boolean') invalid(path);\n};\nconst object =\n (fields: Record<string, Rule>, refine?: Rule): Rule =>\n (value, path) => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) invalid(path);\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) invalid(path);\n const input = value as Record<string, unknown>;\n for (const key of Object.keys(input)) {\n if (!Object.hasOwn(fields, key)) invalid(`${path}.${key}`);\n }\n for (const [key, rule] of Object.entries(fields)) rule(input[key], `${path}.${key}`);\n refine?.(input, path);\n };\nconst snapshot = {\n blockNumber: optional(blockNumber),\n blockHash: optional(bytes32),\n timeoutMs: optional(integer(1, 2147483647)),\n // Signals are local request controls. JSON objects cannot impersonate an AbortSignal.\n signal: optional((value, path) => {\n if (typeof AbortSignal === 'undefined' || !(value instanceof AbortSignal)) invalid(path);\n }),\n};\nconst page = {\n ...snapshot,\n pageSize: optional(integer(1, 999)),\n cursor: optional(\n object({\n after: string(/^0x(?:[0-9a-fA-F]{2})*$/, 2, 1024),\n blockNumber,\n blockHash: (value, path) => {\n if (value !== null) bytes32(value, path);\n },\n deployment: string(/[\\s\\S]*/, 1, 512),\n scope: string(/[\\s\\S]*/, 1, 4096),\n }),\n ),\n};\nconst options = optional(object(snapshot));\nconst list = (fields: Record<string, Rule>, required = false, refine?: Rule): readonly Rule[] => {\n const params = object({ ...page, ...fields }, refine);\n return [required ? params : optional(params)];\n};\nconst vault = { token: optional(address), vault: optional(address) };\n\n// Exhaustive against the public namespace: adding an operation requires its argument contract.\nconst operationArguments = {\n getMetadata: [options],\n getRegistry: [options],\n getToken: [address, options],\n getAccount: [address, options],\n getUser: [bytes32, options],\n getVault: [address, options],\n listTokens: list({ issuer: optional(address), registry: optional(address) }),\n listTokenIds: list({ token: address }, true),\n listTokenURIs: list({ token: address }, true),\n listPolicies: list({ token: address, active: optional(boolean) }, true),\n listUserAccounts: list({ userId: bytes32 }, true),\n listGlobalTraits: list({ userId: bytes32 }, true),\n listTokenTraits: list({ userId: bytes32, token: optional(address) }, true),\n listBalances: list(\n {\n wallet: optional(address),\n userId: optional(bytes32),\n token: optional(address),\n tokenId: optional(uint256),\n positiveOnly: optional(boolean),\n },\n false,\n (value, path) => {\n const input = value as Record<string, unknown>;\n if (input['wallet'] !== undefined && input['userId'] !== undefined)\n invalid(`${path}.wallet/userId`);\n },\n ),\n listTransfers: list({\n wallet: optional(address),\n token: optional(address),\n tokenId: optional(uint256),\n }),\n listDocumentAttestations: list({\n wallet: optional(address),\n userId: optional(bytes32),\n traitId: optional(bytes32),\n }),\n listVaults: list({ token: optional(address) }),\n listVaultDeposits: list({ ...vault, wallet: optional(address) }),\n listVaultWithdrawals: list({ ...vault, wallet: optional(address) }),\n listVaultAdminExecutions: list({ ...vault, owner: optional(address), target: optional(address) }),\n} satisfies Record<IndexerOperation, readonly Rule[]>;\n\n/** Named operations only; hosted requests never carry arbitrary GraphQL or upstream URLs. */\nexport const INDEXER_OPERATIONS: readonly IndexerOperation[] = Object.freeze(\n Object.keys(operationArguments) as IndexerOperation[],\n);\n\n/** Validate decoded arguments for both direct clients and API adapters without changing defaults. */\nexport function validateIndexerOperationArgs(\n operation: IndexerOperation,\n args: unknown,\n): unknown[] {\n if (!Object.hasOwn(operationArguments, operation) || !Array.isArray(args)) invalid('args');\n const rules: readonly Rule[] = operationArguments[operation];\n if (args.length > rules.length) invalid('args.length');\n rules.forEach((rule, index) => rule(args[index], `args[${index}]`));\n return [...args];\n}\n","import type { Address, Hex } from 'viem';\n\nimport type { FetchLike } from '../transport.js';\nimport { OpacityIndexerError } from './errors.js';\nimport { createGraphqlExecutor } from './executor.js';\nimport { INDEXER_OPERATIONS, validateIndexerOperationArgs } from './arguments.js';\n\nexport { OpacityIndexerError } from './errors.js';\nexport type { IndexerErrorCode } from './errors.js';\n\n// The same schema selects GraphQL fields and validates/decodes the response. Graph BigInt wire\n// values must be decimal strings; no financial value is ever routed through Number.\ninterface Field<T> {\n selection?: string;\n parse(value: unknown, path: string, domain?: boolean): T;\n}\ntype Parsed<T> = T extends Field<infer V> ? V : never;\n\nfunction invalid(path: string): never {\n throw new OpacityIndexerError('INVALID_RESPONSE', `Malformed indexer response at ${path}.`);\n}\nfunction record(value: unknown, path: string): Record<string, unknown> {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) invalid(path);\n return value as Record<string, unknown>;\n}\nconst stringField: Field<string> = {\n parse: (v, p) => (typeof v === 'string' ? v : invalid(p)),\n};\nconst bool: Field<boolean> = {\n parse: (v, p) => (typeof v === 'boolean' ? v : invalid(p)),\n};\nconst uint: Field<bigint> = {\n parse: (v, p, domain) =>\n domain\n ? typeof v === 'bigint' && v >= 0n\n ? v\n : invalid(p)\n : typeof v === 'string' && /^(0|[1-9][0-9]*)$/.test(v)\n ? BigInt(v)\n : invalid(p),\n};\nconst graphInt: Field<bigint> = {\n parse: (v, p, domain) =>\n domain\n ? typeof v === 'bigint' && v >= 0n && v <= BigInt(Number.MAX_SAFE_INTEGER)\n ? v\n : invalid(p)\n : typeof v === 'number' && Number.isSafeInteger(v) && v >= 0\n ? BigInt(v)\n : invalid(p),\n};\nfunction hex(bytes?: number): Field<Hex> {\n return {\n parse: (v, p) => {\n if (typeof v !== 'string' || !/^0x(?:[0-9a-fA-F]{2})*$/.test(v)) invalid(p);\n if (bytes !== undefined && v.length !== 2 + bytes * 2) invalid(p);\n return v.toLowerCase() as Hex;\n },\n };\n}\nconst address: Field<Address> = hex(20);\nconst bytes32 = hex(32);\nfunction nullable<T>(field: Field<T>): Field<T | null> {\n return {\n ...(field.selection === undefined ? {} : { selection: field.selection }),\n parse: (v, p, domain) => (v === null ? null : field.parse(v, p, domain)),\n };\n}\nfunction array<T>(field: Field<T>): Field<T[]> {\n return {\n parse: (v, p, domain) => {\n if (!Array.isArray(v)) invalid(p);\n return v.map((item, i) => field.parse(item, `${p}[${i}]`, domain));\n },\n };\n}\nfunction enumeration<const T extends readonly string[]>(values: T): Field<T[number]> {\n return {\n parse: (v, p) => (typeof v === 'string' && values.includes(v) ? (v as T[number]) : invalid(p)),\n };\n}\nfunction object<T extends Record<string, Field<unknown>>>(\n fields: T,\n): Field<{\n [K in keyof T]: Parsed<T[K]>;\n}> {\n return {\n selection: Object.entries(fields)\n .map(([key, field]) => `${key}${field.selection ? ` { ${field.selection} }` : ''}`)\n .join(' '),\n parse: (v, p, domain) => {\n const input = record(v, p);\n return Object.fromEntries(\n Object.entries(fields).map(([key, field]) => [\n key,\n field.parse(input[key], `${p}.${key}`, domain),\n ]),\n ) as { [K in keyof T]: Parsed<T[K]> };\n },\n };\n}\n\nconst addressRef = object({ id: address });\nconst userRef = object({ id: bytes32 });\nconst metaField = object({\n deployment: stringField,\n hasIndexingErrors: bool,\n block: object({ number: graphInt, hash: nullable(bytes32), timestamp: nullable(graphInt) }),\n});\nconst tokenField = object({\n id: address,\n issuer: addressRef,\n issuerAdmin: nullable(address),\n allowlistRegistry: address,\n name: nullable(stringField),\n symbol: nullable(stringField),\n paused: bool,\n mintingPaused: bool,\n policyEngine: nullable(address),\n transferOperator: nullable(address),\n tokenTraitRegistry: nullable(address),\n maxPolicies: nullable(uint),\n activePolicyCount: uint,\n activeRuleSetSnapshot: nullable(bytes32),\n ruleSetDeploymentCount: uint,\n deployedAtBlock: uint,\n deployedAtTimestamp: uint,\n deployTxHash: bytes32,\n beaconVariant: nullable(object({ id: bytes32, beacon: address, isActive: bool })),\n});\nconst supplyField = object({\n id: hex(),\n token: addressRef,\n tokenId: uint,\n totalSupply: uint,\n maxSupply: uint,\n holderCount: uint,\n});\nconst policyType = enumeration([\n 'TRADING_DISABLED_V1',\n 'ALLOWED_TRANSFEREE_V1',\n 'HOLDER_COUNT_CAP_V1',\n 'CEILING_BALANCE_V1',\n 'FLOOR_BALANCE_V1',\n 'DENYLIST_V1',\n 'INSIDER_FREEZE_V1',\n 'SELF_TRANSFER_ONLY_V1',\n 'UNKNOWN',\n] as const);\nconst guardMode = enumeration([\n 'NONE',\n 'ONLY_IF_FROM_HAS',\n 'ONLY_IF_TO_HAS',\n 'ONLY_IF_EITHER_HAS',\n] as const);\nconst policyField = object({\n id: hex(),\n token: addressRef,\n implementation: object({\n id: address,\n status: enumeration(['UNKNOWN', 'PENDING', 'APPROVED', 'REVOKED', 'CANCELLED'] as const),\n }),\n policyType,\n scopeKey: bytes32,\n active: bool,\n rawConfig: hex(),\n guardTrait: bytes32,\n guardMode,\n guardTraitIsGlobal: bool,\n configEnabled: nullable(bool),\n configMaxHolders: nullable(uint),\n configIsPercentage: nullable(bool),\n configCeiling: nullable(uint),\n configDenominatorMode: nullable(enumeration(['CURRENT_SUPPLY', 'MAX_SUPPLY'] as const)),\n configTraitList: nullable(array(bytes32)),\n configRequireAll: nullable(bool),\n attachedAtBlock: uint,\n lastReconfiguredAtBlock: nullable(uint),\n});\nconst entryField = object({\n id: address,\n status: enumeration(['VERIFIED', 'COMPLIANCE_REMOVAL', 'USER_REMOVAL', 'MIGRATED'] as const),\n user: nullable(userRef),\n expiresAt: nullable(uint),\n addedBy: nullable(address),\n migratedTo: nullable(address),\n migratedFrom: nullable(address),\n lastUpdatedBlock: uint,\n lastUpdatedTimestamp: uint,\n});\nconst accountField = object({\n id: address,\n isAuthorizedIssuer: bool,\n allowlistEntry: nullable(entryField),\n});\nconst globalTraitField = object({\n id: hex(),\n user: userRef,\n traitId: bytes32,\n enabled: bool,\n lastUpdatedBy: address,\n lastUpdatedBlock: uint,\n lastUpdatedTimestamp: uint,\n traitConfig: object({ expiryDuration: uint, teeEnableable: bool, writerEnableable: bool }),\n});\nconst tokenTraitField = object({\n id: hex(),\n token: addressRef,\n user: userRef,\n traitId: bytes32,\n enabled: bool,\n lastUpdatedBlock: uint,\n lastUpdatedTimestamp: uint,\n});\nconst walletBalanceField = object({\n id: hex(),\n token: addressRef,\n account: addressRef,\n tokenId: uint,\n balance: uint,\n frozenAmount: uint,\n});\nconst userBalanceField = object({\n id: hex(),\n token: addressRef,\n user: userRef,\n tokenId: uint,\n balance: uint,\n openIntervalId: nullable(hex()),\n});\nconst transferField = object({\n id: hex(),\n token: addressRef,\n operator: address,\n from: addressRef,\n to: addressRef,\n tokenId: uint,\n value: uint,\n isBatch: bool,\n batchIndex: graphInt,\n blockNumber: uint,\n blockTimestamp: uint,\n transactionHash: bytes32,\n logIndex: uint,\n});\nconst attestationField = object({\n id: bytes32,\n attestor: addressRef,\n document: object({ id: bytes32 }),\n user: userRef,\n wallet: address,\n traitId: bytes32,\n docHash: bytes32,\n nonce: bytes32,\n globalTrait: object({ id: hex(), enabled: bool }),\n blockNumber: uint,\n blockTimestamp: uint,\n transactionHash: bytes32,\n logIndex: uint,\n});\nconst registryField = object({\n id: stringField,\n contractAddress: address,\n paused: bool,\n defaultExpiryDuration: nullable(uint),\n authorizedSigner: nullable(address),\n teeTraitAllowlistEnforced: bool,\n});\nconst uriField = object({\n id: hex(),\n token: addressRef,\n tokenId: uint,\n uri: stringField,\n lastUpdatedBlock: uint,\n});\nconst vaultField = object({\n id: address,\n token: addressRef,\n tokenId: uint,\n stablecoin: address,\n firstObservedAtBlock: uint,\n firstObservedAtTimestamp: uint,\n firstObservedTxHash: bytes32,\n depositCount: uint,\n withdrawalCount: uint,\n totalDeposited: uint,\n totalWithdrawn: uint,\n adminExecutionCount: uint,\n});\nconst vaultEventFields = {\n id: hex(),\n vault: addressRef,\n token: addressRef,\n blockNumber: uint,\n blockTimestamp: uint,\n transactionHash: bytes32,\n};\nconst vaultMovementField = object({ ...vaultEventFields, user: addressRef, amount: uint });\nconst vaultAdminField = object({\n ...vaultEventFields,\n owner: address,\n target: address,\n selector: hex(4),\n});\n\nexport type IndexerMetadata = Parsed<typeof metaField>;\nexport type IndexedToken = Parsed<typeof tokenField>;\nexport type IndexedTokenId = Parsed<typeof supplyField>;\nexport type IndexedPolicy = Parsed<typeof policyField>;\nexport type IndexedAccount = Parsed<typeof accountField>;\nexport type IndexedUser = Parsed<typeof userRef>;\nexport type IndexedAllowlistEntry = Parsed<typeof entryField>;\nexport type IndexedGlobalTrait = Parsed<typeof globalTraitField>;\nexport type IndexedTokenTrait = Parsed<typeof tokenTraitField>;\nexport type IndexedWalletBalance = Parsed<typeof walletBalanceField>;\nexport type IndexedUserBalance = Parsed<typeof userBalanceField>;\nexport type IndexedBalance = IndexedWalletBalance | IndexedUserBalance;\nexport type IndexedTransfer = Parsed<typeof transferField>;\nexport type IndexedDocumentAttestation = Parsed<typeof attestationField>;\nexport type IndexedRegistry = Parsed<typeof registryField>;\nexport type IndexedTokenURI = Parsed<typeof uriField>;\n/** Event totals are historical activity, not current reserves or redemption liquidity. */\nexport type IndexedVault = Parsed<typeof vaultField>;\nexport type IndexedVaultMovement = Parsed<typeof vaultMovementField>;\nexport type IndexedVaultAdminExecution = Parsed<typeof vaultAdminField>;\n\nexport interface IndexerRequestOptions {\n signal?: AbortSignal;\n timeoutMs?: number;\n /** Indexed historical state; Graph Node may prune old blocks. Omit to read its current head. */\n blockNumber?: bigint;\n /** Prefer a block hash from getMetadata() to keep a snapshot stable across chain reorgs. */\n blockHash?: Hex;\n}\n/** Opaque to consumers: reuse unchanged with the same method and filters. */\nexport interface IndexerCursor {\n after: Hex;\n blockNumber: bigint;\n /** Null when Graph Node did not expose the historical block hash. */\n blockHash: Hex | null;\n deployment: string;\n scope: string;\n}\nexport interface IndexerPageOptions extends IndexerRequestOptions {\n /** Default 100; integer 1–999. A further row is fetched to detect continuation. */\n pageSize?: number;\n cursor?: IndexerCursor;\n}\nexport interface IndexedResult<T> {\n item: T | null;\n meta: IndexerMetadata;\n}\nexport interface IndexedPage<T> {\n items: T[];\n meta: IndexerMetadata;\n nextCursor: IndexerCursor | null;\n}\nexport interface ListIndexedTokensParams extends IndexerPageOptions {\n issuer?: Address;\n registry?: Address;\n}\nexport interface TokenIndexPageParams extends IndexerPageOptions {\n token: Address;\n}\nexport interface ListIndexedPoliciesParams extends TokenIndexPageParams {\n /** Defaults to true. Pass false for detached policies. */\n active?: boolean;\n}\nexport interface UserIndexPageParams extends IndexerPageOptions {\n userId: Hex;\n}\nexport interface ListIndexedTokenTraitsParams extends UserIndexPageParams {\n token?: Address;\n}\nexport interface ListIndexedBalancesParams extends IndexerPageOptions {\n /** Mutually exclusive with userId. Without either filter, lists wallet balances. */\n wallet?: Address;\n userId?: Hex;\n token?: Address;\n tokenId?: bigint;\n /** Defaults to true; false also includes zero balances. */\n positiveOnly?: boolean;\n}\nexport interface ListIndexedTransfersParams extends IndexerPageOptions {\n wallet?: Address;\n token?: Address;\n tokenId?: bigint;\n}\nexport interface ListIndexedDocumentAttestationsParams extends IndexerPageOptions {\n wallet?: Address;\n userId?: Hex;\n traitId?: Hex;\n}\nexport interface ListIndexedVaultsParams extends IndexerPageOptions {\n token?: Address;\n}\nexport interface ListIndexedVaultMovementsParams extends ListIndexedVaultsParams {\n vault?: Address;\n wallet?: Address;\n}\nexport interface ListIndexedVaultAdminExecutionsParams extends ListIndexedVaultsParams {\n vault?: Address;\n owner?: Address;\n target?: Address;\n}\n\n/**\n * Event-indexed views, not transaction preflight or live balances. The endpoint defines the\n * indexed chain/registry; Graph metadata identifies a deployment, not a chain id. Verify that\n * deployment and token.allowlistRegistry against your intended contract environment.\n *\n * Arrays are separate paged queries so traits, token IDs and histories cannot truncate silently.\n * getUser supplies the identity row; use listUserAccounts/listGlobalTraits/listTokenTraits to\n * traverse it. A historical attestation does not establish a currently enabled trait.\n */\nexport interface OpacityIndexerNamespace {\n getMetadata(options?: IndexerRequestOptions): Promise<IndexerMetadata>;\n getRegistry(options?: IndexerRequestOptions): Promise<IndexedResult<IndexedRegistry>>;\n listTokens(params?: ListIndexedTokensParams): Promise<IndexedPage<IndexedToken>>;\n getToken(token: Address, options?: IndexerRequestOptions): Promise<IndexedResult<IndexedToken>>;\n listTokenIds(params: TokenIndexPageParams): Promise<IndexedPage<IndexedTokenId>>;\n listTokenURIs(params: TokenIndexPageParams): Promise<IndexedPage<IndexedTokenURI>>;\n listPolicies(params: ListIndexedPoliciesParams): Promise<IndexedPage<IndexedPolicy>>;\n getAccount(\n wallet: Address,\n options?: IndexerRequestOptions,\n ): Promise<IndexedResult<IndexedAccount>>;\n getUser(userId: Hex, options?: IndexerRequestOptions): Promise<IndexedResult<IndexedUser>>;\n listUserAccounts(params: UserIndexPageParams): Promise<IndexedPage<IndexedAllowlistEntry>>;\n listGlobalTraits(params: UserIndexPageParams): Promise<IndexedPage<IndexedGlobalTrait>>;\n listTokenTraits(params: ListIndexedTokenTraitsParams): Promise<IndexedPage<IndexedTokenTrait>>;\n listBalances(params?: ListIndexedBalancesParams): Promise<IndexedPage<IndexedBalance>>;\n listTransfers(params?: ListIndexedTransfersParams): Promise<IndexedPage<IndexedTransfer>>;\n listDocumentAttestations(\n params?: ListIndexedDocumentAttestationsParams,\n ): Promise<IndexedPage<IndexedDocumentAttestation>>;\n /** Requires the sandbox v3 subgraph schema; includes previously assigned vaults. */\n getVault(vault: Address, options?: IndexerRequestOptions): Promise<IndexedResult<IndexedVault>>;\n listVaults(params?: ListIndexedVaultsParams): Promise<IndexedPage<IndexedVault>>;\n listVaultDeposits(\n params?: ListIndexedVaultMovementsParams,\n ): Promise<IndexedPage<IndexedVaultMovement>>;\n listVaultWithdrawals(\n params?: ListIndexedVaultMovementsParams,\n ): Promise<IndexedPage<IndexedVaultMovement>>;\n listVaultAdminExecutions(\n params?: ListIndexedVaultAdminExecutionsParams,\n ): Promise<IndexedPage<IndexedVaultAdminExecution>>;\n}\n\nfunction argument<T>(field: Field<T>, value: unknown, name: string): T {\n try {\n return field.parse(value, name);\n } catch (cause) {\n throw new OpacityIndexerError('INVALID_ARGUMENT', `Invalid ${name}.`, { cause });\n }\n}\nfunction bigintArgument(value: unknown, name: string): string {\n if (typeof value !== 'bigint' || value < 0n) {\n throw new OpacityIndexerError('INVALID_ARGUMENT', `${name} must be a nonnegative bigint.`);\n }\n return value.toString();\n}\nfunction blockVariable(\n value: bigint | undefined,\n hash?: Hex,\n): { number: number } | { hash: Hex } | null {\n if (value !== undefined) bigintArgument(value, 'blockNumber');\n // GraphQL Block_height.number is Int (signed 32 bit), rather than BigInt.\n if (value !== undefined && value > 2147483647n) {\n throw new OpacityIndexerError('INVALID_ARGUMENT', 'blockNumber exceeds the GraphQL Int range.');\n }\n if (hash !== undefined) return { hash: argument(bytes32, hash, 'blockHash') };\n return value === undefined ? null : { number: Number(value) };\n}\n\nfunction validateSnapshot(meta: IndexerMetadata, blockNumber?: bigint, blockHash?: Hex): void {\n if (blockNumber !== undefined && meta.block.number !== blockNumber) invalid('_meta.block.number');\n if (\n blockHash !== undefined &&\n meta.block.hash !== null &&\n meta.block.hash !== blockHash.toLowerCase()\n ) {\n throw new OpacityIndexerError(\n 'SNAPSHOT_CHANGED',\n 'Indexed block hash changed; restart the snapshot.',\n );\n }\n}\n\nfunction requireHealthyIndex(meta: IndexerMetadata): void {\n if (meta.hasIndexingErrors) {\n throw new OpacityIndexerError(\n 'INDEXING_ERROR',\n 'Subgraph reports indexing errors; indexed entity data was discarded.',\n );\n }\n}\n/** Separate unauthenticated transport: mobile-api headers and wallet auth never enter this factory. */\nexport function createIndexerNamespace(config: {\n url?: string | undefined;\n fetch?: FetchLike;\n timeoutMs?: number;\n}): OpacityIndexerNamespace {\n const request = createGraphqlExecutor(config);\n\n async function single<T>(\n entity: string,\n id: string,\n field: Field<T>,\n options: IndexerRequestOptions = {},\n ): Promise<IndexedResult<T>> {\n const data = await request(\n `query IndexedSingle($id:ID!,$block:Block_height){item:${entity}(id:$id,block:$block){${field.selection}} _meta(block:$block){${metaField.selection}}}`,\n { id, block: blockVariable(options.blockNumber, options.blockHash) },\n options,\n );\n const item = nullable(field).parse(data.item, 'item');\n if (item !== null && record(item, 'item').id !== id) invalid('item.id');\n const meta = metaField.parse(data._meta, '_meta');\n validateSnapshot(meta, options.blockNumber, options.blockHash);\n requireHealthyIndex(meta);\n return { item, meta };\n }\n\n async function page<T extends { id: Hex }>(\n entity: string,\n filterType: string,\n field: Field<T>,\n filters: Record<string, unknown>,\n options: IndexerPageOptions,\n ): Promise<IndexedPage<T>> {\n const size = options.pageSize ?? 100;\n if (!Number.isInteger(size) || size < 1 || size > 999) {\n throw new OpacityIndexerError('INVALID_ARGUMENT', 'pageSize must be an integer from 1–999.');\n }\n const scope = `${entity}:${JSON.stringify(filters)}`;\n const cursor = options.cursor;\n if (cursor) {\n argument(hex(), cursor.after, 'cursor.after');\n bigintArgument(cursor.blockNumber, 'cursor.blockNumber');\n argument(stringField, cursor.deployment, 'cursor.deployment');\n argument(nullable(bytes32), cursor.blockHash, 'cursor.blockHash');\n if (\n cursor.scope !== scope ||\n (options.blockNumber !== undefined && options.blockNumber !== cursor.blockNumber) ||\n (options.blockHash !== undefined && options.blockHash.toLowerCase() !== cursor.blockHash)\n ) {\n throw new OpacityIndexerError(\n 'INVALID_ARGUMENT',\n 'Cursor does not match the query filters or block.',\n );\n }\n }\n const after = cursor?.after ?? '0x';\n const blockNumber = cursor?.blockNumber ?? options.blockNumber;\n const blockHash = cursor?.blockHash ?? options.blockHash;\n const block = blockVariable(blockNumber, blockHash);\n // graph-node disallows column filters alongside `or`. Put the cursor inside each branch.\n const where = Array.isArray(filters.or)\n ? { or: filters.or.map((branch) => ({ ...record(branch, 'filter'), id_gt: after })) }\n : { ...filters, id_gt: after };\n const data = await request(\n `query IndexedPage($first:Int!,$where:${filterType}!,$block:Block_height){items:${entity}(first:$first,orderBy:id,orderDirection:asc,where:$where,block:$block){${field.selection}} _meta(block:$block){${metaField.selection}}}`,\n { first: size + 1, where, block },\n options,\n );\n const meta = metaField.parse(data._meta, '_meta');\n requireHealthyIndex(meta);\n if (cursor && cursor.deployment !== meta.deployment) {\n throw new OpacityIndexerError(\n 'DEPLOYMENT_CHANGED',\n 'Subgraph deployment changed; restart pagination.',\n );\n }\n validateSnapshot(meta, blockNumber, blockHash);\n const rows = array(field).parse(data.items, 'items');\n if (rows.length > size + 1) invalid('items.length');\n let previous = after;\n for (const row of rows) {\n if (row.id <= previous) invalid('items.id order');\n previous = row.id;\n }\n const items = rows.slice(0, size);\n return {\n items,\n meta,\n nextCursor:\n rows.length > size\n ? {\n after: items[items.length - 1]!.id,\n blockNumber: meta.block.number,\n blockHash: blockHash ?? meta.block.hash,\n deployment: meta.deployment,\n scope,\n }\n : null,\n };\n }\n\n const tokenFilters = (p: { token: Address }) => ({ token: argument(address, p.token, 'token') });\n const userFilters = (p: { userId: Hex }) => ({ user: argument(bytes32, p.userId, 'userId') });\n const vaultFilters = (p: { token?: Address; vault?: Address }) => ({\n ...(p.token === undefined ? {} : tokenFilters({ token: p.token })),\n ...(p.vault === undefined ? {} : { vault: argument(address, p.vault, 'vault') }),\n });\n const vaultMovementFilters = (p: ListIndexedVaultMovementsParams) => ({\n ...vaultFilters(p),\n ...(p.wallet === undefined ? {} : { user: argument(address, p.wallet, 'wallet') }),\n });\n\n const namespace: OpacityIndexerNamespace = {\n async getMetadata(options = {}) {\n const data = await request(\n `query IndexingMetadata($block:Block_height){_meta(block:$block){${metaField.selection}}}`,\n { block: blockVariable(options.blockNumber, options.blockHash) },\n options,\n );\n const meta = metaField.parse(data._meta, '_meta');\n validateSnapshot(meta, options.blockNumber, options.blockHash);\n return meta;\n },\n getRegistry: (options) => single('allowlistRegistryState', 'registry', registryField, options),\n getVault: (vault, options) =>\n single('issuerVault', argument(address, vault, 'vault'), vaultField, options),\n listVaults: (p = {}) =>\n page('issuerVaults', 'IssuerVault_filter', vaultField, vaultFilters(p), p),\n listVaultDeposits: (p = {}) =>\n page(\n 'vaultDepositEvents',\n 'VaultDepositEvent_filter',\n vaultMovementField,\n vaultMovementFilters(p),\n p,\n ),\n listVaultWithdrawals: (p = {}) =>\n page(\n 'vaultWithdrawalEvents',\n 'VaultWithdrawalEvent_filter',\n vaultMovementField,\n vaultMovementFilters(p),\n p,\n ),\n listVaultAdminExecutions: (p = {}) =>\n page(\n 'vaultAdminExecutedEvents',\n 'VaultAdminExecutedEvent_filter',\n vaultAdminField,\n {\n ...vaultFilters(p),\n ...(p.owner === undefined ? {} : { owner: argument(address, p.owner, 'owner') }),\n ...(p.target === undefined ? {} : { target: argument(address, p.target, 'target') }),\n },\n p,\n ),\n listTokens: (p = {}) =>\n page(\n 'tokens',\n 'Token_filter',\n tokenField,\n {\n ...(p.issuer === undefined ? {} : { issuer: argument(address, p.issuer, 'issuer') }),\n ...(p.registry === undefined\n ? {}\n : { allowlistRegistry: argument(address, p.registry, 'registry') }),\n },\n p,\n ),\n getToken: (token, options) =>\n single('token', argument(address, token, 'token'), tokenField, options),\n listTokenIds: (p) =>\n page('tokenSupplies', 'TokenSupply_filter', supplyField, tokenFilters(p), p),\n listTokenURIs: (p) => page('tokenURIs', 'TokenURI_filter', uriField, tokenFilters(p), p),\n listPolicies: (p) =>\n page(\n 'attachedPolicies',\n 'AttachedPolicy_filter',\n policyField,\n { ...tokenFilters(p), active: argument(bool, p.active ?? true, 'active') },\n p,\n ),\n getAccount: (wallet, options) =>\n single('account', argument(address, wallet, 'wallet'), accountField, options),\n getUser: (userId, options) =>\n single('user', argument(bytes32, userId, 'userId'), userRef, options),\n listUserAccounts: (p) =>\n page('allowlistEntries', 'AllowlistEntry_filter', entryField, userFilters(p), p),\n listGlobalTraits: (p) =>\n page('globalTraits', 'GlobalTrait_filter', globalTraitField, userFilters(p), p),\n listTokenTraits: (p) =>\n page(\n 'tokenTraits',\n 'TokenTrait_filter',\n tokenTraitField,\n { ...userFilters(p), ...(p.token === undefined ? {} : tokenFilters({ token: p.token })) },\n p,\n ),\n listBalances(p = {}) {\n if (p.wallet !== undefined && p.userId !== undefined) {\n throw new OpacityIndexerError(\n 'INVALID_ARGUMENT',\n 'Choose wallet or userId for balances, not both.',\n );\n }\n const filters = {\n ...(p.token === undefined ? {} : tokenFilters({ token: p.token })),\n ...(p.tokenId === undefined ? {} : { tokenId: bigintArgument(p.tokenId, 'tokenId') }),\n ...(argument(bool, p.positiveOnly ?? true, 'positiveOnly') ? { balance_gt: '0' } : {}),\n };\n if (p.userId !== undefined) {\n return page(\n 'userBalances',\n 'UserBalance_filter',\n userBalanceField,\n { ...filters, ...userFilters({ userId: p.userId }) },\n p,\n );\n }\n return page(\n 'tokenBalances',\n 'TokenBalance_filter',\n walletBalanceField,\n {\n ...filters,\n ...(p.wallet === undefined ? {} : { account: argument(address, p.wallet, 'wallet') }),\n },\n p,\n );\n },\n listTransfers(p = {}) {\n const filters = {\n ...(p.token === undefined ? {} : tokenFilters({ token: p.token })),\n ...(p.tokenId === undefined ? {} : { tokenId: bigintArgument(p.tokenId, 'tokenId') }),\n };\n const where =\n p.wallet === undefined\n ? filters\n : {\n or: [\n { ...filters, from: argument(address, p.wallet, 'wallet') },\n { ...filters, to: argument(address, p.wallet, 'wallet') },\n ],\n };\n return page('transferEvents', 'TransferEvent_filter', transferField, where, p);\n },\n listDocumentAttestations: (p = {}) =>\n page(\n 'documentAttestations',\n 'DocumentAttestation_filter',\n attestationField,\n {\n ...(p.wallet === undefined ? {} : { wallet: argument(address, p.wallet, 'wallet') }),\n ...(p.userId === undefined ? {} : userFilters({ userId: p.userId })),\n ...(p.traitId === undefined ? {} : { traitId: argument(bytes32, p.traitId, 'traitId') }),\n },\n p,\n ),\n };\n // Both direct and hosted reads use the same argument contract. Domain checks such as cursor\n // scope still run when constructing the query because they depend on the selected filters.\n return Object.fromEntries(\n INDEXER_OPERATIONS.map((operation) => [\n operation,\n async (...args: unknown[]) => {\n const validated = validateIndexerOperationArgs(operation, args);\n const invoke = namespace[operation] as (...values: unknown[]) => Promise<unknown>;\n return invoke(...validated);\n },\n ]),\n ) as unknown as OpacityIndexerNamespace;\n}\n\n/** Validate API-decoded domain values with the same schemas used for direct GraphQL data. */\nexport function validateIndexerOperationResult(\n operation: keyof OpacityIndexerNamespace,\n value: unknown,\n args: readonly unknown[] = [],\n): unknown {\n const last = args.at(-1);\n const options =\n last && typeof last === 'object' && !Array.isArray(last) ? (last as IndexerPageOptions) : {};\n const requestedBlock = options.cursor?.blockNumber ?? options.blockNumber;\n const requestedHash = options.cursor?.blockHash ?? options.blockHash;\n if (operation === 'getMetadata') {\n const meta = metaField.parse(value, 'metadata', true);\n validateSnapshot(meta, requestedBlock, requestedHash ?? undefined);\n return meta;\n }\n const result = record(value, 'result');\n const meta = metaField.parse(result['meta'], 'meta', true);\n requireHealthyIndex(meta);\n validateSnapshot(meta, requestedBlock, requestedHash ?? undefined);\n if (options.cursor && options.cursor.deployment !== meta.deployment)\n throw new OpacityIndexerError(\n 'DEPLOYMENT_CHANGED',\n 'Subgraph deployment changed; restart pagination.',\n );\n const fields: Record<Exclude<keyof OpacityIndexerNamespace, 'getMetadata'>, Field<unknown>> = {\n getRegistry: registryField,\n getToken: tokenField,\n getAccount: accountField,\n getUser: userRef,\n getVault: vaultField,\n listTokens: tokenField,\n listTokenIds: supplyField,\n listTokenURIs: uriField,\n listPolicies: policyField,\n listUserAccounts: entryField,\n listGlobalTraits: globalTraitField,\n listTokenTraits: tokenTraitField,\n listBalances:\n args[0] &&\n typeof args[0] === 'object' &&\n (args[0] as Record<string, unknown>)['userId'] !== undefined\n ? userBalanceField\n : walletBalanceField,\n listTransfers: transferField,\n listDocumentAttestations: attestationField,\n listVaults: vaultField,\n listVaultDeposits: vaultMovementField,\n listVaultWithdrawals: vaultMovementField,\n listVaultAdminExecutions: vaultAdminField,\n };\n const field = fields[operation];\n if (operation.startsWith('get')) {\n const item = nullable(field).parse(result['item'], 'item', true);\n const id =\n operation === 'getRegistry'\n ? 'registry'\n : typeof args[0] === 'string'\n ? args[0].toLowerCase()\n : undefined;\n if (item !== null && record(item, 'item')['id'] !== id) invalid('item.id');\n return { item, meta };\n }\n const items = array(field).parse(result['items'], 'items', true);\n if (items.length > (options.pageSize ?? 100)) invalid('items.length');\n const cursorField = object({\n after: hex(),\n blockNumber: uint,\n blockHash: nullable(bytes32),\n deployment: stringField,\n scope: stringField,\n });\n const nextCursor = nullable(cursorField).parse(result['nextCursor'], 'nextCursor', true);\n if (\n nextCursor &&\n (nextCursor.deployment !== meta.deployment ||\n nextCursor.blockNumber !== meta.block.number ||\n (meta.block.hash !== null && nextCursor.blockHash !== meta.block.hash))\n )\n invalid('nextCursor.snapshot');\n if (nextCursor && options.cursor && nextCursor.scope !== options.cursor.scope)\n invalid('nextCursor.scope');\n let previous = options.cursor?.after ?? '';\n for (const item of items) {\n const id = record(item, 'item')['id'];\n if (typeof id !== 'string' || id <= previous) invalid('items.id order');\n previous = id;\n }\n if (nextCursor && nextCursor.after !== previous) invalid('nextCursor.after');\n return { items, meta, nextCursor };\n}\n","import { OpacityIndexerError } from './errors.js';\nexport { INDEXER_OPERATIONS } from './arguments.js';\nexport type { IndexerOperation } from './arguments.js';\n\nexport type WireValue =\n null | boolean | number | string | WireValue[] | { [key: string]: WireValue };\n\n/** Lossless JSON encoding. The reserved __bigint marker must contain only a decimal integer. */\nexport function encodeWireValue(value: unknown): WireValue {\n if (typeof value === 'bigint') return { __bigint: value.toString() };\n if (value === null || typeof value === 'boolean' || typeof value === 'string') return value;\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (Array.isArray(value)) return value.map(encodeWireValue);\n if (\n typeof value === 'object' &&\n value !== null &&\n Object.getPrototypeOf(value) === Object.prototype\n ) {\n if ('__bigint' in value)\n throw new OpacityIndexerError('INVALID_ARGUMENT', '__bigint is reserved.');\n return Object.fromEntries(\n Object.entries(value)\n .filter(([, item]) => item !== undefined)\n .map(([key, item]) => [key, encodeWireValue(item)]),\n );\n }\n throw new OpacityIndexerError(\n 'INVALID_ARGUMENT',\n 'Indexer arguments must be JSON values or bigint.',\n );\n}\n\n/** Decode only the reserved marker; ordinary decimal strings remain strings. */\nexport function decodeWireValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(decodeWireValue);\n if (typeof value === 'object' && value !== null) {\n const record = value as Record<string, unknown>;\n if ('__bigint' in record) {\n if (\n Object.keys(record).length !== 1 ||\n typeof record['__bigint'] !== 'string' ||\n !/^-?(0|[1-9]\\d*)$/.test(record['__bigint'])\n ) {\n throw new OpacityIndexerError('INVALID_RESPONSE', 'Malformed bigint in indexer response.');\n }\n return BigInt(record['__bigint']);\n }\n return Object.fromEntries(\n Object.entries(record).map(([key, item]) => [key, decodeWireValue(item)]),\n );\n }\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean' ||\n (typeof value === 'number' && Number.isFinite(value))\n )\n return value;\n throw new OpacityIndexerError('INVALID_RESPONSE', 'Malformed indexer wire value.');\n}\n","import type { FetchLike } from '../transport.js';\nimport { createGraphqlExecutor, validateSubgraphUrl } from './executor.js';\n\nexport interface SubgraphRequestOptions {\n signal?: AbortSignal;\n timeoutMs?: number;\n}\nexport interface SubgraphClientConfig {\n url: string;\n fetch?: FetchLike;\n timeoutMs?: number;\n headers?: Record<string, string>;\n}\nexport interface SubgraphClient {\n query<T>(\n query: string,\n variables?: Record<string, unknown>,\n options?: SubgraphRequestOptions,\n ): Promise<T>;\n}\n\n/** Direct GraphQL adapter for trusted applications that own their endpoint configuration. */\nexport function createSubgraphClient(config: SubgraphClientConfig): SubgraphClient {\n validateSubgraphUrl(config.url);\n const request = createGraphqlExecutor(config);\n return {\n async query<T>(\n query: string,\n variables?: Record<string, unknown>,\n options?: SubgraphRequestOptions,\n ): Promise<T> {\n return (await request(query, variables, options)) as T;\n },\n };\n}\n"]}
@@ -0,0 +1,456 @@
1
+ import { Hex, Address } from 'viem';
2
+ import { O as OpacityIssuerError, F as FetchLike } from './transport-uaC5Yl3p.cjs';
3
+ import './types-B4Yi7WA4.cjs';
4
+
5
+ type IndexerErrorCode = 'NOT_CONFIGURED' | 'INVALID_ARGUMENT' | 'ABORTED' | 'TIMEOUT' | 'TRANSPORT' | 'HTTP' | 'GRAPHQL' | 'INDEXING_ERROR' | 'INVALID_RESPONSE' | 'DEPLOYMENT_CHANGED' | 'SNAPSHOT_CHANGED';
6
+ /** Indexer failures never represent a failed on-chain transaction. */
7
+ declare class OpacityIndexerError extends OpacityIssuerError {
8
+ readonly code: IndexerErrorCode;
9
+ constructor(code: IndexerErrorCode, message: string, options?: {
10
+ cause?: unknown;
11
+ });
12
+ }
13
+
14
+ interface Field<T> {
15
+ selection?: string;
16
+ parse(value: unknown, path: string, domain?: boolean): T;
17
+ }
18
+ type Parsed<T> = T extends Field<infer V> ? V : never;
19
+ declare const userRef: Field<{
20
+ id: `0x${string}`;
21
+ }>;
22
+ declare const metaField: Field<{
23
+ deployment: string;
24
+ hasIndexingErrors: boolean;
25
+ block: {
26
+ number: bigint;
27
+ hash: `0x${string}` | null;
28
+ timestamp: bigint | null;
29
+ };
30
+ }>;
31
+ declare const tokenField: Field<{
32
+ id: `0x${string}`;
33
+ issuer: {
34
+ id: `0x${string}`;
35
+ };
36
+ issuerAdmin: `0x${string}` | null;
37
+ allowlistRegistry: `0x${string}`;
38
+ name: string | null;
39
+ symbol: string | null;
40
+ paused: boolean;
41
+ mintingPaused: boolean;
42
+ policyEngine: `0x${string}` | null;
43
+ transferOperator: `0x${string}` | null;
44
+ tokenTraitRegistry: `0x${string}` | null;
45
+ maxPolicies: bigint | null;
46
+ activePolicyCount: bigint;
47
+ activeRuleSetSnapshot: `0x${string}` | null;
48
+ ruleSetDeploymentCount: bigint;
49
+ deployedAtBlock: bigint;
50
+ deployedAtTimestamp: bigint;
51
+ deployTxHash: `0x${string}`;
52
+ beaconVariant: {
53
+ id: `0x${string}`;
54
+ beacon: `0x${string}`;
55
+ isActive: boolean;
56
+ } | null;
57
+ }>;
58
+ declare const supplyField: Field<{
59
+ id: `0x${string}`;
60
+ token: {
61
+ id: `0x${string}`;
62
+ };
63
+ tokenId: bigint;
64
+ totalSupply: bigint;
65
+ maxSupply: bigint;
66
+ holderCount: bigint;
67
+ }>;
68
+ declare const policyField: Field<{
69
+ id: `0x${string}`;
70
+ token: {
71
+ id: `0x${string}`;
72
+ };
73
+ implementation: {
74
+ id: `0x${string}`;
75
+ status: "UNKNOWN" | "PENDING" | "APPROVED" | "REVOKED" | "CANCELLED";
76
+ };
77
+ policyType: "TRADING_DISABLED_V1" | "ALLOWED_TRANSFEREE_V1" | "HOLDER_COUNT_CAP_V1" | "CEILING_BALANCE_V1" | "FLOOR_BALANCE_V1" | "DENYLIST_V1" | "INSIDER_FREEZE_V1" | "SELF_TRANSFER_ONLY_V1" | "UNKNOWN";
78
+ scopeKey: `0x${string}`;
79
+ active: boolean;
80
+ rawConfig: `0x${string}`;
81
+ guardTrait: `0x${string}`;
82
+ guardMode: "NONE" | "ONLY_IF_FROM_HAS" | "ONLY_IF_TO_HAS" | "ONLY_IF_EITHER_HAS";
83
+ guardTraitIsGlobal: boolean;
84
+ configEnabled: boolean | null;
85
+ configMaxHolders: bigint | null;
86
+ configIsPercentage: boolean | null;
87
+ configCeiling: bigint | null;
88
+ configDenominatorMode: "CURRENT_SUPPLY" | "MAX_SUPPLY" | null;
89
+ configTraitList: `0x${string}`[] | null;
90
+ configRequireAll: boolean | null;
91
+ attachedAtBlock: bigint;
92
+ lastReconfiguredAtBlock: bigint | null;
93
+ }>;
94
+ declare const entryField: Field<{
95
+ id: `0x${string}`;
96
+ status: "VERIFIED" | "COMPLIANCE_REMOVAL" | "USER_REMOVAL" | "MIGRATED";
97
+ user: {
98
+ id: `0x${string}`;
99
+ } | null;
100
+ expiresAt: bigint | null;
101
+ addedBy: `0x${string}` | null;
102
+ migratedTo: `0x${string}` | null;
103
+ migratedFrom: `0x${string}` | null;
104
+ lastUpdatedBlock: bigint;
105
+ lastUpdatedTimestamp: bigint;
106
+ }>;
107
+ declare const accountField: Field<{
108
+ id: `0x${string}`;
109
+ isAuthorizedIssuer: boolean;
110
+ allowlistEntry: {
111
+ id: `0x${string}`;
112
+ status: "VERIFIED" | "COMPLIANCE_REMOVAL" | "USER_REMOVAL" | "MIGRATED";
113
+ user: {
114
+ id: `0x${string}`;
115
+ } | null;
116
+ expiresAt: bigint | null;
117
+ addedBy: `0x${string}` | null;
118
+ migratedTo: `0x${string}` | null;
119
+ migratedFrom: `0x${string}` | null;
120
+ lastUpdatedBlock: bigint;
121
+ lastUpdatedTimestamp: bigint;
122
+ } | null;
123
+ }>;
124
+ declare const globalTraitField: Field<{
125
+ id: `0x${string}`;
126
+ user: {
127
+ id: `0x${string}`;
128
+ };
129
+ traitId: `0x${string}`;
130
+ enabled: boolean;
131
+ lastUpdatedBy: `0x${string}`;
132
+ lastUpdatedBlock: bigint;
133
+ lastUpdatedTimestamp: bigint;
134
+ traitConfig: {
135
+ expiryDuration: bigint;
136
+ teeEnableable: boolean;
137
+ writerEnableable: boolean;
138
+ };
139
+ }>;
140
+ declare const tokenTraitField: Field<{
141
+ id: `0x${string}`;
142
+ token: {
143
+ id: `0x${string}`;
144
+ };
145
+ user: {
146
+ id: `0x${string}`;
147
+ };
148
+ traitId: `0x${string}`;
149
+ enabled: boolean;
150
+ lastUpdatedBlock: bigint;
151
+ lastUpdatedTimestamp: bigint;
152
+ }>;
153
+ declare const walletBalanceField: Field<{
154
+ id: `0x${string}`;
155
+ token: {
156
+ id: `0x${string}`;
157
+ };
158
+ account: {
159
+ id: `0x${string}`;
160
+ };
161
+ tokenId: bigint;
162
+ balance: bigint;
163
+ frozenAmount: bigint;
164
+ }>;
165
+ declare const userBalanceField: Field<{
166
+ id: `0x${string}`;
167
+ token: {
168
+ id: `0x${string}`;
169
+ };
170
+ user: {
171
+ id: `0x${string}`;
172
+ };
173
+ tokenId: bigint;
174
+ balance: bigint;
175
+ openIntervalId: `0x${string}` | null;
176
+ }>;
177
+ declare const transferField: Field<{
178
+ id: `0x${string}`;
179
+ token: {
180
+ id: `0x${string}`;
181
+ };
182
+ operator: `0x${string}`;
183
+ from: {
184
+ id: `0x${string}`;
185
+ };
186
+ to: {
187
+ id: `0x${string}`;
188
+ };
189
+ tokenId: bigint;
190
+ value: bigint;
191
+ isBatch: boolean;
192
+ batchIndex: bigint;
193
+ blockNumber: bigint;
194
+ blockTimestamp: bigint;
195
+ transactionHash: `0x${string}`;
196
+ logIndex: bigint;
197
+ }>;
198
+ declare const attestationField: Field<{
199
+ id: `0x${string}`;
200
+ attestor: {
201
+ id: `0x${string}`;
202
+ };
203
+ document: {
204
+ id: `0x${string}`;
205
+ };
206
+ user: {
207
+ id: `0x${string}`;
208
+ };
209
+ wallet: `0x${string}`;
210
+ traitId: `0x${string}`;
211
+ docHash: `0x${string}`;
212
+ nonce: `0x${string}`;
213
+ globalTrait: {
214
+ id: `0x${string}`;
215
+ enabled: boolean;
216
+ };
217
+ blockNumber: bigint;
218
+ blockTimestamp: bigint;
219
+ transactionHash: `0x${string}`;
220
+ logIndex: bigint;
221
+ }>;
222
+ declare const registryField: Field<{
223
+ id: string;
224
+ contractAddress: `0x${string}`;
225
+ paused: boolean;
226
+ defaultExpiryDuration: bigint | null;
227
+ authorizedSigner: `0x${string}` | null;
228
+ teeTraitAllowlistEnforced: boolean;
229
+ }>;
230
+ declare const uriField: Field<{
231
+ id: `0x${string}`;
232
+ token: {
233
+ id: `0x${string}`;
234
+ };
235
+ tokenId: bigint;
236
+ uri: string;
237
+ lastUpdatedBlock: bigint;
238
+ }>;
239
+ declare const vaultField: Field<{
240
+ id: `0x${string}`;
241
+ token: {
242
+ id: `0x${string}`;
243
+ };
244
+ tokenId: bigint;
245
+ stablecoin: `0x${string}`;
246
+ firstObservedAtBlock: bigint;
247
+ firstObservedAtTimestamp: bigint;
248
+ firstObservedTxHash: `0x${string}`;
249
+ depositCount: bigint;
250
+ withdrawalCount: bigint;
251
+ totalDeposited: bigint;
252
+ totalWithdrawn: bigint;
253
+ adminExecutionCount: bigint;
254
+ }>;
255
+ declare const vaultMovementField: Field<{
256
+ user: {
257
+ id: `0x${string}`;
258
+ };
259
+ amount: bigint;
260
+ id: `0x${string}`;
261
+ vault: {
262
+ id: `0x${string}`;
263
+ };
264
+ token: {
265
+ id: `0x${string}`;
266
+ };
267
+ blockNumber: bigint;
268
+ blockTimestamp: bigint;
269
+ transactionHash: `0x${string}`;
270
+ }>;
271
+ declare const vaultAdminField: Field<{
272
+ owner: `0x${string}`;
273
+ target: `0x${string}`;
274
+ selector: `0x${string}`;
275
+ id: `0x${string}`;
276
+ vault: {
277
+ id: `0x${string}`;
278
+ };
279
+ token: {
280
+ id: `0x${string}`;
281
+ };
282
+ blockNumber: bigint;
283
+ blockTimestamp: bigint;
284
+ transactionHash: `0x${string}`;
285
+ }>;
286
+ type IndexerMetadata = Parsed<typeof metaField>;
287
+ type IndexedToken = Parsed<typeof tokenField>;
288
+ type IndexedTokenId = Parsed<typeof supplyField>;
289
+ type IndexedPolicy = Parsed<typeof policyField>;
290
+ type IndexedAccount = Parsed<typeof accountField>;
291
+ type IndexedUser = Parsed<typeof userRef>;
292
+ type IndexedAllowlistEntry = Parsed<typeof entryField>;
293
+ type IndexedGlobalTrait = Parsed<typeof globalTraitField>;
294
+ type IndexedTokenTrait = Parsed<typeof tokenTraitField>;
295
+ type IndexedWalletBalance = Parsed<typeof walletBalanceField>;
296
+ type IndexedUserBalance = Parsed<typeof userBalanceField>;
297
+ type IndexedBalance = IndexedWalletBalance | IndexedUserBalance;
298
+ type IndexedTransfer = Parsed<typeof transferField>;
299
+ type IndexedDocumentAttestation = Parsed<typeof attestationField>;
300
+ type IndexedRegistry = Parsed<typeof registryField>;
301
+ type IndexedTokenURI = Parsed<typeof uriField>;
302
+ /** Event totals are historical activity, not current reserves or redemption liquidity. */
303
+ type IndexedVault = Parsed<typeof vaultField>;
304
+ type IndexedVaultMovement = Parsed<typeof vaultMovementField>;
305
+ type IndexedVaultAdminExecution = Parsed<typeof vaultAdminField>;
306
+ interface IndexerRequestOptions {
307
+ signal?: AbortSignal;
308
+ timeoutMs?: number;
309
+ /** Indexed historical state; Graph Node may prune old blocks. Omit to read its current head. */
310
+ blockNumber?: bigint;
311
+ /** Prefer a block hash from getMetadata() to keep a snapshot stable across chain reorgs. */
312
+ blockHash?: Hex;
313
+ }
314
+ /** Opaque to consumers: reuse unchanged with the same method and filters. */
315
+ interface IndexerCursor {
316
+ after: Hex;
317
+ blockNumber: bigint;
318
+ /** Null when Graph Node did not expose the historical block hash. */
319
+ blockHash: Hex | null;
320
+ deployment: string;
321
+ scope: string;
322
+ }
323
+ interface IndexerPageOptions extends IndexerRequestOptions {
324
+ /** Default 100; integer 1–999. A further row is fetched to detect continuation. */
325
+ pageSize?: number;
326
+ cursor?: IndexerCursor;
327
+ }
328
+ interface IndexedResult<T> {
329
+ item: T | null;
330
+ meta: IndexerMetadata;
331
+ }
332
+ interface IndexedPage<T> {
333
+ items: T[];
334
+ meta: IndexerMetadata;
335
+ nextCursor: IndexerCursor | null;
336
+ }
337
+ interface ListIndexedTokensParams extends IndexerPageOptions {
338
+ issuer?: Address;
339
+ registry?: Address;
340
+ }
341
+ interface TokenIndexPageParams extends IndexerPageOptions {
342
+ token: Address;
343
+ }
344
+ interface ListIndexedPoliciesParams extends TokenIndexPageParams {
345
+ /** Defaults to true. Pass false for detached policies. */
346
+ active?: boolean;
347
+ }
348
+ interface UserIndexPageParams extends IndexerPageOptions {
349
+ userId: Hex;
350
+ }
351
+ interface ListIndexedTokenTraitsParams extends UserIndexPageParams {
352
+ token?: Address;
353
+ }
354
+ interface ListIndexedBalancesParams extends IndexerPageOptions {
355
+ /** Mutually exclusive with userId. Without either filter, lists wallet balances. */
356
+ wallet?: Address;
357
+ userId?: Hex;
358
+ token?: Address;
359
+ tokenId?: bigint;
360
+ /** Defaults to true; false also includes zero balances. */
361
+ positiveOnly?: boolean;
362
+ }
363
+ interface ListIndexedTransfersParams extends IndexerPageOptions {
364
+ wallet?: Address;
365
+ token?: Address;
366
+ tokenId?: bigint;
367
+ }
368
+ interface ListIndexedDocumentAttestationsParams extends IndexerPageOptions {
369
+ wallet?: Address;
370
+ userId?: Hex;
371
+ traitId?: Hex;
372
+ }
373
+ interface ListIndexedVaultsParams extends IndexerPageOptions {
374
+ token?: Address;
375
+ }
376
+ interface ListIndexedVaultMovementsParams extends ListIndexedVaultsParams {
377
+ vault?: Address;
378
+ wallet?: Address;
379
+ }
380
+ interface ListIndexedVaultAdminExecutionsParams extends ListIndexedVaultsParams {
381
+ vault?: Address;
382
+ owner?: Address;
383
+ target?: Address;
384
+ }
385
+ /**
386
+ * Event-indexed views, not transaction preflight or live balances. The endpoint defines the
387
+ * indexed chain/registry; Graph metadata identifies a deployment, not a chain id. Verify that
388
+ * deployment and token.allowlistRegistry against your intended contract environment.
389
+ *
390
+ * Arrays are separate paged queries so traits, token IDs and histories cannot truncate silently.
391
+ * getUser supplies the identity row; use listUserAccounts/listGlobalTraits/listTokenTraits to
392
+ * traverse it. A historical attestation does not establish a currently enabled trait.
393
+ */
394
+ interface OpacityIndexerNamespace {
395
+ getMetadata(options?: IndexerRequestOptions): Promise<IndexerMetadata>;
396
+ getRegistry(options?: IndexerRequestOptions): Promise<IndexedResult<IndexedRegistry>>;
397
+ listTokens(params?: ListIndexedTokensParams): Promise<IndexedPage<IndexedToken>>;
398
+ getToken(token: Address, options?: IndexerRequestOptions): Promise<IndexedResult<IndexedToken>>;
399
+ listTokenIds(params: TokenIndexPageParams): Promise<IndexedPage<IndexedTokenId>>;
400
+ listTokenURIs(params: TokenIndexPageParams): Promise<IndexedPage<IndexedTokenURI>>;
401
+ listPolicies(params: ListIndexedPoliciesParams): Promise<IndexedPage<IndexedPolicy>>;
402
+ getAccount(wallet: Address, options?: IndexerRequestOptions): Promise<IndexedResult<IndexedAccount>>;
403
+ getUser(userId: Hex, options?: IndexerRequestOptions): Promise<IndexedResult<IndexedUser>>;
404
+ listUserAccounts(params: UserIndexPageParams): Promise<IndexedPage<IndexedAllowlistEntry>>;
405
+ listGlobalTraits(params: UserIndexPageParams): Promise<IndexedPage<IndexedGlobalTrait>>;
406
+ listTokenTraits(params: ListIndexedTokenTraitsParams): Promise<IndexedPage<IndexedTokenTrait>>;
407
+ listBalances(params?: ListIndexedBalancesParams): Promise<IndexedPage<IndexedBalance>>;
408
+ listTransfers(params?: ListIndexedTransfersParams): Promise<IndexedPage<IndexedTransfer>>;
409
+ listDocumentAttestations(params?: ListIndexedDocumentAttestationsParams): Promise<IndexedPage<IndexedDocumentAttestation>>;
410
+ /** Requires the sandbox v3 subgraph schema; includes previously assigned vaults. */
411
+ getVault(vault: Address, options?: IndexerRequestOptions): Promise<IndexedResult<IndexedVault>>;
412
+ listVaults(params?: ListIndexedVaultsParams): Promise<IndexedPage<IndexedVault>>;
413
+ listVaultDeposits(params?: ListIndexedVaultMovementsParams): Promise<IndexedPage<IndexedVaultMovement>>;
414
+ listVaultWithdrawals(params?: ListIndexedVaultMovementsParams): Promise<IndexedPage<IndexedVaultMovement>>;
415
+ listVaultAdminExecutions(params?: ListIndexedVaultAdminExecutionsParams): Promise<IndexedPage<IndexedVaultAdminExecution>>;
416
+ }
417
+ /** Separate unauthenticated transport: mobile-api headers and wallet auth never enter this factory. */
418
+ declare function createIndexerNamespace(config: {
419
+ url?: string | undefined;
420
+ fetch?: FetchLike;
421
+ timeoutMs?: number;
422
+ }): OpacityIndexerNamespace;
423
+ /** Validate API-decoded domain values with the same schemas used for direct GraphQL data. */
424
+ declare function validateIndexerOperationResult(operation: keyof OpacityIndexerNamespace, value: unknown, args?: readonly unknown[]): unknown;
425
+
426
+ type IndexerOperation = keyof OpacityIndexerNamespace;
427
+ /** Named operations only; hosted requests never carry arbitrary GraphQL or upstream URLs. */
428
+ declare const INDEXER_OPERATIONS: readonly IndexerOperation[];
429
+ /** Validate decoded arguments for both direct clients and API adapters without changing defaults. */
430
+ declare function validateIndexerOperationArgs(operation: IndexerOperation, args: unknown): unknown[];
431
+
432
+ type WireValue = null | boolean | number | string | WireValue[] | {
433
+ [key: string]: WireValue;
434
+ };
435
+ /** Lossless JSON encoding. The reserved __bigint marker must contain only a decimal integer. */
436
+ declare function encodeWireValue(value: unknown): WireValue;
437
+ /** Decode only the reserved marker; ordinary decimal strings remain strings. */
438
+ declare function decodeWireValue(value: unknown): unknown;
439
+
440
+ interface SubgraphRequestOptions {
441
+ signal?: AbortSignal;
442
+ timeoutMs?: number;
443
+ }
444
+ interface SubgraphClientConfig {
445
+ url: string;
446
+ fetch?: FetchLike;
447
+ timeoutMs?: number;
448
+ headers?: Record<string, string>;
449
+ }
450
+ interface SubgraphClient {
451
+ query<T>(query: string, variables?: Record<string, unknown>, options?: SubgraphRequestOptions): Promise<T>;
452
+ }
453
+ /** Direct GraphQL adapter for trusted applications that own their endpoint configuration. */
454
+ declare function createSubgraphClient(config: SubgraphClientConfig): SubgraphClient;
455
+
456
+ export { INDEXER_OPERATIONS, type IndexedAccount, type IndexedAllowlistEntry, type IndexedBalance, type IndexedDocumentAttestation, type IndexedGlobalTrait, type IndexedPage, type IndexedPolicy, type IndexedRegistry, type IndexedResult, type IndexedToken, type IndexedTokenId, type IndexedTokenTrait, type IndexedTokenURI, type IndexedTransfer, type IndexedUser, type IndexedUserBalance, type IndexedVault, type IndexedVaultAdminExecution, type IndexedVaultMovement, type IndexedWalletBalance, type IndexerCursor, type IndexerErrorCode, type IndexerMetadata, type IndexerOperation, type IndexerPageOptions, type IndexerRequestOptions, type ListIndexedBalancesParams, type ListIndexedDocumentAttestationsParams, type ListIndexedPoliciesParams, type ListIndexedTokenTraitsParams, type ListIndexedTokensParams, type ListIndexedTransfersParams, type ListIndexedVaultAdminExecutionsParams, type ListIndexedVaultMovementsParams, type ListIndexedVaultsParams, OpacityIndexerError, type OpacityIndexerNamespace, type SubgraphClient, type SubgraphClientConfig, type SubgraphRequestOptions, type TokenIndexPageParams, type UserIndexPageParams, type WireValue, createIndexerNamespace, createSubgraphClient, decodeWireValue, encodeWireValue, validateIndexerOperationArgs, validateIndexerOperationResult };