@0xobelisk/graphql-client 1.2.0-pre.24

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client.ts","../../../node_modules/.pnpm/graphql-ws@6.0.5_graphql@15.10.1_ws@8.18.2/node_modules/graphql-ws/dist/common-CGW11Fyb.js","../../../node_modules/.pnpm/graphql-ws@6.0.5_graphql@15.10.1_ws@8.18.2/node_modules/graphql-ws/dist/client.js","../../../node_modules/.pnpm/graphql-ws@6.0.5_graphql@15.10.1_ws@8.18.2/node_modules/graphql-ws/dist/index.js"],"sourcesContent":["import {\n ApolloClient,\n InMemoryCache,\n gql,\n createHttpLink,\n split,\n NormalizedCacheObject,\n WatchQueryOptions,\n QueryOptions as ApolloQueryOptions,\n SubscriptionOptions as ApolloSubscriptionOptions,\n Observable,\n from,\n ApolloLink,\n FetchPolicy,\n OperationVariables,\n} from '@apollo/client';\nimport { RetryLink } from '@apollo/client/link/retry';\nimport { GraphQLWsLink } from '@apollo/client/link/subscriptions';\nimport { getMainDefinition } from '@apollo/client/utilities';\nimport { createClient } from 'graphql-ws';\nimport pluralize from 'pluralize';\n\nimport {\n DubheClientConfig,\n Connection,\n BaseQueryParams,\n OrderBy,\n JsonPathOrder,\n QueryOptions,\n QueryResult,\n SubscriptionResult,\n SubscriptionOptions,\n StringFilter,\n NumberFilter,\n DateFilter,\n StoreTableRow,\n TypedDocumentNode,\n CachePolicy,\n MultiTableSubscriptionConfig,\n MultiTableSubscriptionResult,\n MultiTableSubscriptionData,\n ParsedTableInfo,\n DubheMetadata,\n} from './types';\n\n// Convert cache policy type\nfunction mapCachePolicyToFetchPolicy(cachePolicy: CachePolicy): FetchPolicy {\n switch (cachePolicy) {\n case 'cache-first':\n return 'cache-first';\n case 'network-only':\n return 'network-only';\n case 'cache-only':\n return 'cache-only';\n case 'no-cache':\n return 'no-cache';\n case 'standby':\n return 'standby';\n default:\n return 'cache-first';\n }\n}\n\nexport class DubheGraphqlClient {\n private apolloClient: ApolloClient<NormalizedCacheObject>;\n private subscriptionClient?: any;\n private dubheMetadata?: DubheMetadata;\n private parsedTables: Map<string, ParsedTableInfo> = new Map();\n\n constructor(config: DubheClientConfig) {\n // Save dubhe metadata\n this.dubheMetadata = config.dubheMetadata;\n\n // If dubhe metadata is provided, parse table information\n if (this.dubheMetadata) {\n this.parseTableInfoFromConfig();\n }\n\n // Create HTTP Link\n const httpLink = createHttpLink({\n uri: config.endpoint,\n headers: config.headers,\n fetch: (input, init) => fetch(input, { ...config.fetchOptions, ...init }),\n });\n\n // Create retry link\n const retryLink = new RetryLink({\n delay: {\n // Initial retry delay time (milliseconds)\n initial: config.retryOptions?.delay?.initial || 300,\n // Maximum retry delay time (milliseconds)\n max: config.retryOptions?.delay?.max || 5000,\n // Whether to add random jitter to avoid thundering herd, enabled by default\n jitter: config.retryOptions?.delay?.jitter !== false,\n },\n attempts: {\n // Maximum number of attempts (including initial request)\n max: config.retryOptions?.attempts?.max || 5,\n // Custom retry condition function\n retryIf:\n config.retryOptions?.attempts?.retryIf ||\n ((error, _operation) => {\n // Default retry strategy:\n // 1. Network connection errors\n // 2. Server errors but no GraphQL errors (indicates service temporarily unavailable)\n return Boolean(\n error &&\n (error.networkError ||\n (error.graphQLErrors && error.graphQLErrors.length === 0))\n );\n }),\n },\n });\n\n // Combine HTTP link and retry link\n const httpWithRetryLink = from([retryLink, httpLink]);\n\n let link: ApolloLink = httpWithRetryLink;\n\n // If subscription endpoint is provided, create WebSocket Link\n if (config.subscriptionEndpoint) {\n // Automatically import ws module in Node.js environment\n let webSocketImpl;\n try {\n // Check if in Node.js environment\n if (typeof window === 'undefined' && typeof global !== 'undefined') {\n // Node.js environment, need to import ws\n const wsModule = require('ws');\n webSocketImpl = wsModule.default || wsModule;\n\n // Set global WebSocket in Node.js environment to avoid apollo client internal errors\n if (typeof (global as any).WebSocket === 'undefined') {\n (global as any).WebSocket = webSocketImpl;\n }\n } else {\n // Browser environment, use native WebSocket\n webSocketImpl = WebSocket;\n }\n } catch (error) {\n // Ignore ws import errors\n }\n\n const clientOptions: any = {\n url: config.subscriptionEndpoint,\n connectionParams: {\n headers: config.headers,\n },\n };\n\n // Only add webSocketImpl if in Node.js environment and ws was successfully imported\n if (webSocketImpl && typeof window === 'undefined') {\n clientOptions.webSocketImpl = webSocketImpl;\n }\n\n this.subscriptionClient = createClient(clientOptions);\n\n const wsLink = new GraphQLWsLink(this.subscriptionClient);\n\n // Use split to decide which link to use\n link = split(\n ({ query }) => {\n const definition = getMainDefinition(query);\n return (\n definition.kind === 'OperationDefinition' &&\n definition.operation === 'subscription'\n );\n },\n wsLink,\n httpWithRetryLink\n );\n }\n\n // Create Apollo Client instance\n this.apolloClient = new ApolloClient({\n link,\n cache:\n config.cacheConfig?.paginatedTables &&\n config.cacheConfig.paginatedTables.length > 0\n ? new InMemoryCache({\n typePolicies: {\n // Configure cache strategy for Connection type\n Query: {\n fields: this.buildCacheFields(config.cacheConfig),\n },\n },\n })\n : new InMemoryCache(), // Use simple cache by default\n defaultOptions: {\n watchQuery: {\n errorPolicy: 'all',\n notifyOnNetworkStatusChange: true,\n },\n query: {\n errorPolicy: 'all',\n },\n },\n });\n }\n\n /**\n * Execute GraphQL query\n */\n async query<\n TData,\n TVariables extends OperationVariables = OperationVariables,\n >(\n query: TypedDocumentNode<TData, TVariables>,\n variables?: TVariables,\n options?: QueryOptions\n ): Promise<QueryResult<TData>> {\n try {\n const result = await this.apolloClient.query({\n query,\n variables,\n fetchPolicy: options?.cachePolicy\n ? mapCachePolicyToFetchPolicy(options.cachePolicy)\n : 'no-cache',\n // : 'cache-first',\n notifyOnNetworkStatusChange: options?.notifyOnNetworkStatusChange,\n pollInterval: options?.pollInterval,\n });\n\n return {\n data: result.data,\n loading: result.loading,\n error: result.error,\n networkStatus: result.networkStatus,\n refetch: () => this.query(query, variables, options),\n };\n } catch (error) {\n return {\n data: undefined,\n loading: false,\n error: error as Error,\n networkStatus: 8, // NetworkStatus.error\n refetch: () => this.query(query, variables, options),\n };\n }\n }\n\n /**\n * Execute GraphQL subscription\n */\n subscribe<TData, TVariables extends OperationVariables = OperationVariables>(\n subscription: TypedDocumentNode<TData, TVariables>,\n variables?: TVariables,\n options?: SubscriptionOptions\n ): Observable<SubscriptionResult<TData>> {\n return new Observable((observer: any) => {\n const sub = this.apolloClient\n .subscribe({\n query: subscription,\n variables,\n })\n .subscribe({\n next: (result: any) => {\n const subscriptionResult: SubscriptionResult<TData> = {\n data: result.data,\n loading: false,\n error: result.errors?.[0] as Error,\n };\n observer.next(subscriptionResult);\n options?.onData?.(result.data);\n },\n error: (error: any) => {\n const subscriptionResult: SubscriptionResult<TData> = {\n data: undefined,\n loading: false,\n error,\n };\n observer.next(subscriptionResult);\n options?.onError?.(error);\n },\n complete: () => {\n observer.complete();\n options?.onComplete?.();\n },\n });\n\n return () => sub.unsubscribe();\n });\n }\n\n /**\n * Query all table data - Adapted to API without store prefix\n *\n * OrderBy field name support:\n * - camelCase: { field: 'updatedAt', direction: 'DESC' } → UPDATED_AT_DESC\n * - snake_case: { field: 'updated_at', direction: 'DESC' } → UPDATED_AT_DESC\n *\n * Usage examples:\n * ```ts\n * // Using camelCase field names\n * const result = await client.getAllTables('account', {\n * orderBy: [{ field: 'updatedAt', direction: 'DESC' }]\n * });\n *\n * // Using snake_case field names\n * const result = await client.getAllTables('account', {\n * orderBy: [{ field: 'updated_at', direction: 'DESC' }]\n * });\n *\n * // Mixed usage\n * const result = await client.getAllTables('account', {\n * orderBy: [\n * { field: 'updatedAt', direction: 'DESC' },\n * { field: 'created_at', direction: 'ASC' }\n * ]\n * });\n * ```\n */\n async getAllTables<T extends StoreTableRow>(\n tableName: string,\n params?: BaseQueryParams & {\n filter?: Record<string, any>;\n orderBy?: OrderBy[];\n fields?: string[]; // Allow users to specify fields to query, auto-parse from dubhe config if not specified\n }\n ): Promise<Connection<T>> {\n // Ensure using plural form of table name\n const pluralTableName = this.getPluralTableName(tableName);\n\n // Convert OrderBy to enum values\n const orderByEnums = convertOrderByToEnum(params?.orderBy);\n\n // Dynamically build query\n const query = gql`\n query GetAllTables(\n $first: Int\n $last: Int\n $after: Cursor\n $before: Cursor\n $filter: ${this.getFilterTypeName(tableName)}\n $orderBy: [${this.getOrderByTypeName(tableName)}!]\n ) {\n ${pluralTableName}(\n first: $first\n last: $last\n after: $after\n before: $before\n filter: $filter\n orderBy: $orderBy\n ) {\n totalCount\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n edges {\n cursor\n node {\n ${this.convertTableFields(tableName, params?.fields)}\n }\n }\n }\n }\n `;\n\n // Build query parameters using enum values\n const queryParams = {\n first: params?.first,\n last: params?.last,\n after: params?.after,\n before: params?.before,\n filter: params?.filter,\n orderBy: orderByEnums,\n };\n\n // const result = await this.query(query, queryParams, {\n // cachePolicy: 'no-cache',\n // });\n\n const result = await this.query(query, queryParams);\n\n if (result.error) {\n throw result.error;\n }\n\n return (\n (result.data as any)?.[pluralTableName] || {\n edges: [],\n pageInfo: { hasNextPage: false, hasPreviousPage: false },\n }\n );\n }\n\n /**\n * Get single table record by condition - Adapted to API without store prefix\n */\n async getTableByCondition<T extends StoreTableRow>(\n tableName: string,\n condition: Record<string, any>,\n fields?: string[] // Allow users to specify fields to query\n ): Promise<T | null> {\n // Build query field name, e.g.: accountByAssetIdAndAccount\n const conditionKeys = Object.keys(condition);\n\n // Use singular form of table name for single record query\n const singularTableName = this.getSingularTableName(tableName);\n\n const query = gql`\n query GetTableByCondition(${conditionKeys.map((key, index) => `$${key}: String!`).join(', ')}) {\n ${singularTableName}(${conditionKeys.map((key) => `${key}: $${key}`).join(', ')}) {\n ${this.convertTableFields(tableName, fields)}\n }\n }\n `;\n\n const result = await this.query(query, condition);\n\n if (result.error) {\n throw result.error;\n }\n\n return (result.data as any)?.[singularTableName] || null;\n }\n\n /**\n * Subscribe to table data changes - Using PostGraphile's listen subscription feature\n */\n subscribeToTableChanges<T extends StoreTableRow>(\n tableName: string,\n options?: SubscriptionOptions & {\n fields?: string[]; // Allow users to specify fields to subscribe to\n initialEvent?: boolean; // Whether to trigger initial event immediately\n first?: number; // Limit the number of returned records\n topicPrefix?: string; // Custom topic prefix, defaults to table name\n }\n ): Observable<SubscriptionResult<{ listen: { query: any } }>> {\n // PostGraphile automatically adds 'postgraphile:' prefix to all topics\n // So here we use more concise topic naming\n const topic = options?.topicPrefix\n ? `${options.topicPrefix}${tableName}`\n : `store_${this.getSingularTableName(tableName)}`;\n\n const pluralTableName = this.getPluralTableName(tableName); // Ensure using plural form\n const fields = this.convertTableFields(tableName, options?.fields);\n\n const subscription = gql`\n subscription ListenToTableChanges($topic: String!, $initialEvent: Boolean) {\n listen(topic: $topic, initialEvent: $initialEvent) {\n query {\n ${pluralTableName}(first: ${options?.first || 10}, orderBy: UPDATED_AT_DESC) {\n totalCount\n nodes {\n ${fields}\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n `;\n\n return this.subscribe(\n subscription,\n {\n topic,\n initialEvent: options?.initialEvent || false,\n },\n options\n );\n }\n\n /**\n * Advanced listen subscription - Support custom queries\n */\n subscribeWithListen<T = any>(\n topic: string,\n query: string,\n options?: SubscriptionOptions & {\n initialEvent?: boolean;\n variables?: Record<string, any>;\n }\n ): Observable<SubscriptionResult<{ listen: { query: T } }>> {\n const subscription = gql`\n subscription CustomListenSubscription($topic: String!, $initialEvent: Boolean) {\n listen(topic: $topic, initialEvent: $initialEvent) {\n query {\n ${query}\n }\n }\n }\n `;\n\n return this.subscribe(\n subscription,\n {\n topic,\n initialEvent: options?.initialEvent || false,\n ...options?.variables,\n },\n options\n );\n }\n\n /**\n * Subscribe to data changes with specific conditions\n */\n subscribeToFilteredTableChanges<T extends StoreTableRow>(\n tableName: string,\n filter?: Record<string, any>,\n options?: SubscriptionOptions & {\n fields?: string[];\n initialEvent?: boolean;\n orderBy?: OrderBy[];\n first?: number;\n topicPrefix?: string; // Custom topic prefix\n }\n ): Observable<SubscriptionResult<{ listen: { query: any } }>> {\n // Improved topic naming, support custom prefix\n const topic = options?.topicPrefix\n ? `${options.topicPrefix}${tableName}`\n : `store_${this.getSingularTableName(tableName)}`;\n\n const pluralTableName = this.getPluralTableName(tableName); // Ensure using plural form\n const fields = this.convertTableFields(tableName, options?.fields);\n const orderByEnum = convertOrderByToEnum(options?.orderBy);\n const first = options?.first || 10;\n\n const subscription = gql`\n subscription FilteredListenSubscription(\n $topic: String!, \n $initialEvent: Boolean,\n $filter: ${this.getFilterTypeName(tableName)},\n $orderBy: [${this.getOrderByTypeName(tableName)}!],\n $first: Int\n ) {\n listen(topic: $topic, initialEvent: $initialEvent) {\n query {\n ${pluralTableName}(\n first: $first, \n filter: $filter, \n orderBy: $orderBy\n ) {\n totalCount\n nodes {\n ${fields}\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n `;\n\n return this.subscribe(\n subscription,\n {\n topic,\n initialEvent: options?.initialEvent || false,\n filter,\n orderBy: orderByEnum,\n first,\n },\n options\n );\n }\n\n /**\n * Subscribe to multiple table data changes - Support batch subscription of table name list\n */\n subscribeToMultipleTables<T extends StoreTableRow>(\n tableConfigs: MultiTableSubscriptionConfig[],\n globalOptions?: SubscriptionOptions\n ): Observable<MultiTableSubscriptionData> {\n return new Observable((observer: any) => {\n const subscriptions: Array<{ tableName: string; subscription: any }> = [];\n const latestData: MultiTableSubscriptionData = {};\n\n // Create independent subscription for each table\n tableConfigs.forEach(({ tableName, options }) => {\n const subscription = this.subscribeToFilteredTableChanges<T>(\n tableName,\n options?.filter,\n {\n ...options,\n onData: (data) => {\n // Update latest data for this table\n latestData[tableName] = data;\n\n // Call table-level callback\n if (options?.onData) {\n options.onData(data);\n }\n\n // Call global callback\n if (globalOptions?.onData) {\n globalOptions.onData(latestData);\n }\n\n // Send complete multi-table data\n observer.next({ ...latestData });\n },\n onError: (error) => {\n // Call table-level error callback\n if (options?.onError) {\n options.onError(error);\n }\n\n // Call global error callback\n if (globalOptions?.onError) {\n globalOptions.onError(error);\n }\n\n // Send error\n observer.error(error);\n },\n }\n );\n\n subscriptions.push({ tableName, subscription });\n });\n\n // Start all subscriptions\n const activeSubscriptions = subscriptions.map(({ subscription }) =>\n subscription.subscribe()\n );\n\n // Return cleanup function\n return () => {\n activeSubscriptions.forEach((sub) => sub.unsubscribe());\n\n // Call completion callback\n if (globalOptions?.onComplete) {\n globalOptions.onComplete();\n }\n };\n });\n }\n\n /**\n * Simplified multi-table subscription - Support table name array and unified configuration\n */\n subscribeToTableList<T extends StoreTableRow>(\n tableNames: string[],\n options?: SubscriptionOptions & {\n fields?: string[];\n filter?: Record<string, any>;\n initialEvent?: boolean;\n first?: number;\n topicPrefix?: string;\n }\n ): Observable<MultiTableSubscriptionData> {\n const tableConfigs: MultiTableSubscriptionConfig[] = tableNames.map(\n (tableName) => ({\n tableName,\n options: {\n ...options,\n // Use same configuration for each table\n fields: options?.fields,\n filter: options?.filter,\n initialEvent: options?.initialEvent,\n first: options?.first,\n topicPrefix: options?.topicPrefix,\n },\n })\n );\n\n return this.subscribeToMultipleTables<T>(tableConfigs, options);\n }\n\n /**\n * Build dynamic query - Adapted to API without store prefix\n */\n buildQuery(\n tableName: string,\n fields: string[],\n params?: {\n filter?: Record<string, any>;\n orderBy?: OrderBy[];\n first?: number;\n after?: string;\n }\n ): TypedDocumentNode {\n const pluralTableName = this.getPluralTableName(tableName); // Ensure using plural form\n const fieldSelection = fields.join('\\n ');\n\n return gql`\n query DynamicQuery(\n $first: Int\n $after: Cursor\n $filter: ${this.getFilterTypeName(tableName)}\n $orderBy: [${this.getOrderByTypeName(tableName)}!]\n ) {\n ${pluralTableName}(\n first: $first\n after: $after\n filter: $filter\n orderBy: $orderBy\n ) {\n totalCount\n pageInfo {\n hasNextPage\n endCursor\n }\n edges {\n cursor\n node {\n ${fieldSelection}\n }\n }\n }\n }\n `;\n }\n\n /**\n * Batch query multiple tables - Adapted to API without store prefix\n */\n async batchQuery<T extends Record<string, any>>(\n queries: Array<{\n key: string;\n tableName: string;\n params?: BaseQueryParams & {\n filter?: Record<string, any>;\n orderBy?: OrderBy[];\n fields?: string[]; // Allow users to specify fields to query\n };\n }>\n ): Promise<Record<string, Connection<StoreTableRow>>> {\n const batchPromises = queries.map(async ({ key, tableName, params }) => {\n const result = await this.getAllTables(tableName, params);\n return { key, result };\n });\n\n const results = await Promise.all(batchPromises);\n\n return results.reduce(\n (acc, { key, result }) => {\n acc[key] = result;\n return acc;\n },\n {} as Record<string, Connection<StoreTableRow>>\n );\n }\n\n /**\n * Real-time data stream listener - Adapted to API without store prefix\n */\n createRealTimeDataStream<T extends StoreTableRow>(\n tableName: string,\n initialQuery?: BaseQueryParams & { filter?: Record<string, any> }\n ): Observable<Connection<T>> {\n return new Observable((observer: any) => {\n // First execute initial query\n this.getAllTables<T>(tableName, initialQuery)\n .then((initialData) => {\n observer.next(initialData);\n })\n .catch((error) => observer.error(error));\n\n // Then subscribe to real-time updates\n const subscription = this.subscribeToTableChanges<T>(tableName, {\n onData: () => {\n // When data changes, re-execute query\n this.getAllTables<T>(tableName, initialQuery)\n .then((updatedData) => {\n observer.next(updatedData);\n })\n .catch((error) => observer.error(error));\n },\n onError: (error) => observer.error(error),\n });\n\n return () => subscription.subscribe().unsubscribe();\n });\n }\n\n // Improved table name handling methods\n private getFilterTypeName(tableName: string): string {\n // Convert to singular form and apply PascalCase conversion\n const singularName = this.getSingularTableName(tableName);\n const pascalCaseName = this.toPascalCase(singularName);\n\n // If already starts with Store, don't add Store prefix again\n if (pascalCaseName.startsWith('Store')) {\n return `${pascalCaseName}Filter`;\n }\n\n return `Store${pascalCaseName}Filter`;\n }\n\n private getOrderByTypeName(tableName: string): string {\n // Convert to plural form and apply PascalCase conversion\n const pluralName = this.getPluralTableName(tableName);\n const pascalCaseName = this.toPascalCase(pluralName);\n\n // If already starts with Store, don't add Store prefix again\n if (pascalCaseName.startsWith('Store')) {\n return `${pascalCaseName}OrderBy`;\n }\n\n return `Store${pascalCaseName}OrderBy`;\n }\n\n /**\n * Convert singular table name to plural form (using pluralize library for correctness)\n */\n private getPluralTableName(tableName: string): string {\n // First convert to camelCase\n const camelCaseName = this.toCamelCase(tableName);\n\n // Use pluralize library for pluralization\n return pluralize.plural(camelCaseName);\n }\n\n /**\n * Convert plural table name to singular form (using pluralize library for correctness)\n */\n private getSingularTableName(tableName: string): string {\n // First convert to camelCase\n const camelCaseName = this.toCamelCase(tableName);\n\n // Use pluralize library for singularization\n return pluralize.singular(camelCaseName);\n }\n\n /**\n * Convert snake_case to camelCase\n */\n private toCamelCase(str: string): string {\n return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n }\n\n /**\n * Convert snake_case to PascalCase\n */\n private toPascalCase(str: string): string {\n const camelCase = this.toCamelCase(str);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n }\n\n /**\n * Convert camelCase or snake_case to SNAKE_CASE (for GraphQL enum values)\n * Example: updatedAt -> UPDATED_AT, updated_at -> UPDATED_AT\n */\n private toSnakeCase(str: string): string {\n // If already snake_case, convert to uppercase directly\n if (str.includes('_')) {\n return str.toUpperCase();\n }\n\n // If camelCase, first convert to snake_case then uppercase\n return str\n .replace(/([A-Z])/g, '_$1') // Add underscore before uppercase letters\n .toLowerCase() // Convert to lowercase\n .replace(/^_/, '') // Remove leading underscore\n .toUpperCase(); // Convert to uppercase\n }\n\n // private buildSingleQueryName(\n // tableName: string,\n // conditionKeys: string[]\n // ): string {\n // // Use camelCase conversion\n // const camelCaseTableName = this.toCamelCase(tableName);\n // const capitalizedKeys = conditionKeys.map(\n // (key) => key.charAt(0).toUpperCase() + key.slice(1)\n // );\n // return `${camelCaseTableName}By${capitalizedKeys.join('And')}`;\n // }\n\n /**\n * Clear Apollo Client cache\n */\n async clearCache(): Promise<void> {\n await this.apolloClient.clearStore();\n }\n\n /**\n * Reset Apollo Client cache\n */\n async resetCache(): Promise<void> {\n await this.apolloClient.resetStore();\n }\n\n /**\n * Get Apollo Client instance (for advanced usage)\n */\n getApolloClient(): ApolloClient<NormalizedCacheObject> {\n return this.apolloClient;\n }\n\n /**\n * Close client connection\n */\n close(): void {\n if (this.subscriptionClient) {\n this.subscriptionClient.dispose();\n }\n }\n\n /**\n * Get Dubhe metadata\n */\n getDubheMetadata(): DubheMetadata | undefined {\n return this.dubheMetadata;\n }\n\n /**\n * Build dynamic cache field configuration\n */\n private buildCacheFields(\n cacheConfig?: DubheClientConfig['cacheConfig']\n ): Record<string, any> {\n const fields: Record<string, any> = {};\n\n // If no configuration, return empty field configuration\n if (!cacheConfig) {\n return fields;\n }\n\n // Create pagination cache strategy for each configured table\n if (cacheConfig.paginatedTables) {\n cacheConfig.paginatedTables.forEach((tableName) => {\n // Ensure using plural form of table name\n const pluralTableName = this.getPluralTableName(tableName);\n\n // Check if there's a custom merge strategy\n const customStrategy =\n cacheConfig.customMergeStrategies?.[pluralTableName];\n\n fields[pluralTableName] = {\n keyArgs: customStrategy?.keyArgs || ['filter', 'orderBy'],\n merge: customStrategy?.merge || this.defaultMergeStrategy,\n };\n });\n }\n\n // Apply custom merge strategies (if any)\n if (cacheConfig.customMergeStrategies) {\n Object.entries(cacheConfig.customMergeStrategies).forEach(\n ([tableName, strategy]) => {\n // If table name hasn't been configured yet, add it\n if (!fields[tableName]) {\n fields[tableName] = {\n keyArgs: strategy.keyArgs || ['filter', 'orderBy'],\n merge: strategy.merge || this.defaultMergeStrategy,\n };\n }\n }\n );\n }\n\n return fields;\n }\n\n /**\n * Default pagination merge strategy\n */\n private defaultMergeStrategy(existing = { edges: [] }, incoming: any) {\n // Safety check, ensure incoming has edges property\n if (!incoming || !Array.isArray(incoming.edges)) {\n return existing;\n }\n return {\n ...incoming,\n edges: [...(existing.edges || []), ...incoming.edges],\n };\n }\n\n /**\n * Parse table information from dubhe metadata\n */\n private parseTableInfoFromConfig(): void {\n if (!this.dubheMetadata) {\n return;\n }\n\n const { components = [], resources = [], enums = [] } = this.dubheMetadata;\n\n // Process components array\n components.forEach((componentObj: any) => {\n Object.entries(componentObj).forEach(\n ([componentName, componentData]: [string, any]) => {\n this.processTableData(componentName, componentData, enums);\n }\n );\n });\n\n // Process resources array\n resources.forEach((resourceObj: any) => {\n Object.entries(resourceObj).forEach(\n ([resourceName, resourceData]: [string, any]) => {\n this.processTableData(resourceName, resourceData, enums);\n }\n );\n });\n }\n\n /**\n * Process data for a single table\n */\n private processTableData(\n tableName: string,\n tableData: any,\n enums: any[]\n ): void {\n const snakeTableName = this.toSnakeCase(tableName);\n const fields: string[] = [];\n const enumFields: Record<string, string[]> = {};\n\n // Process fields array\n if (tableData.fields && Array.isArray(tableData.fields)) {\n tableData.fields.forEach((fieldObj: any) => {\n Object.entries(fieldObj).forEach(\n ([fieldName, fieldType]: [string, any]) => {\n const fieldNameCamelCase = this.toCamelCase(fieldName);\n fields.push(fieldNameCamelCase);\n // Check if it's an enum type\n // const typeStr = String(fieldType);\n // if (enums.length > 0) {\n // // Process enum types as needed here\n // // enumFields[fieldNameCamelCase] = [...];\n // }\n }\n );\n });\n }\n\n // Add system fields\n fields.push('createdAt', 'updatedAt');\n\n // Process primary keys\n const primaryKeys: string[] = tableData.keys.map((key: string) =>\n this.toCamelCase(key)\n );\n\n const tableInfo: ParsedTableInfo = {\n tableName: snakeTableName,\n fields: [...new Set(fields)], // Remove duplicates\n primaryKeys,\n enumFields,\n };\n\n this.parsedTables.set(snakeTableName, tableInfo);\n this.parsedTables.set(this.toCamelCase(snakeTableName), tableInfo);\n }\n\n /**\n * Get table field information\n */\n getTableFields(tableName: string): string[] {\n // Use getMinimalFields directly for clearer logic\n return this.getMinimalFields(tableName);\n }\n\n /**\n * Get table primary key information\n */\n getTablePrimaryKeys(tableName: string): string[] {\n const tableInfo =\n this.parsedTables.get(tableName) ||\n this.parsedTables.get(this.toSnakeCase(tableName));\n return tableInfo?.primaryKeys || [];\n }\n\n /**\n * Get table enum field information\n */\n getTableEnumFields(tableName: string): Record<string, string[]> {\n const tableInfo =\n this.parsedTables.get(tableName) ||\n this.parsedTables.get(this.toSnakeCase(tableName));\n return tableInfo?.enumFields || {};\n }\n\n /**\n * Get all parsed table information\n */\n getAllTableInfo(): Map<string, ParsedTableInfo> {\n return new Map(this.parsedTables);\n }\n\n /**\n * Get table's minimal field set (for fallback)\n */\n getMinimalFields(tableName: string): string[] {\n // If there's configuration, use fields from configuration\n const tableInfo =\n this.parsedTables.get(tableName) ||\n this.parsedTables.get(this.toSnakeCase(tableName));\n\n if (tableInfo) {\n return tableInfo.fields;\n }\n\n return ['createdAt', 'updatedAt'];\n }\n\n /**\n * Convert table fields to GraphQL query string\n */\n private convertTableFields(\n tableName: string,\n customFields?: string[]\n ): string {\n let fields: string[];\n\n if (customFields && customFields.length > 0) {\n fields = customFields;\n } else {\n // Try to get fields from dubhe configuration\n const autoFields = this.getTableFields(tableName);\n if (autoFields.length > 0) {\n fields = autoFields;\n } else {\n fields = ['createdAt', 'updatedAt'];\n }\n }\n\n // Field resolution debug logging disabled for cleaner output\n\n return fields.join('\\n ');\n }\n}\n\n// Export convenience function\nexport function createDubheGraphqlClient(\n config: DubheClientConfig\n): DubheGraphqlClient {\n return new DubheGraphqlClient(config);\n}\n\n// Export common GraphQL query builders\nexport const QueryBuilders = {\n // Build basic query - Adapted to API without store prefix\n basic: (\n tableName: string,\n fields: string[] = ['createdAt', 'updatedAt']\n ) => gql`\n query Basic${tableName.charAt(0).toUpperCase() + tableName.slice(1)}Query(\n $first: Int\n $after: String\n $filter: ${tableName.charAt(0).toUpperCase() + tableName.slice(1)}Filter\n ) {\n ${tableName}(first: $first, after: $after, filter: $filter) {\n totalCount\n pageInfo {\n hasNextPage\n endCursor\n }\n edges {\n cursor\n node {\n ${fields.join('\\n ')}\n }\n }\n }\n }\n `,\n\n // Build subscription query - Adapted to API without store prefix\n subscription: (tableName: string) => gql`\n subscription ${tableName.charAt(0).toUpperCase() + tableName.slice(1)}Subscription {\n ${tableName.charAt(0).toLowerCase() + tableName.slice(1)}Changed {\n createdAt\n updatedAt\n }\n }\n `,\n};\n\n/**\n * Helper function: Convert OrderBy format\n * Support camelCase and snake_case field names conversion to GraphQL enum values\n * Example: updatedAt -> UPDATED_AT_ASC, updated_at -> UPDATED_AT_ASC\n */\nfunction convertOrderByToEnum(orderBy?: OrderBy[]): string[] {\n if (!orderBy || orderBy.length === 0) {\n return ['NATURAL'];\n }\n\n return orderBy.map((order) => {\n // Use unified conversion function to handle field names\n const field = toSnakeCaseForEnum(order.field);\n const direction = order.direction === 'DESC' ? 'DESC' : 'ASC';\n\n // Combine field name and direction into enum value\n return `${field}_${direction}`;\n });\n}\n\n/**\n * Convert camelCase or snake_case to SNAKE_CASE (for GraphQL enum values)\n * Example: updatedAt -> UPDATED_AT, updated_at -> UPDATED_AT\n */\nfunction toSnakeCaseForEnum(str: string): string {\n // If already snake_case, convert to uppercase directly\n if (str.includes('_')) {\n return str.toUpperCase();\n }\n\n // If camelCase, first convert to snake_case then uppercase\n return str\n .replace(/([A-Z])/g, '_$1') // Add underscore before uppercase letters\n .toLowerCase() // Convert to lowercase\n .replace(/^_/, '') // Remove leading underscore\n .toUpperCase(); // Convert to uppercase\n}\n","function extendedTypeof(val) {\n if (val === null) {\n return \"null\";\n }\n if (Array.isArray(val)) {\n return \"array\";\n }\n return typeof val;\n}\nfunction isObject(val) {\n return extendedTypeof(val) === \"object\";\n}\nfunction isAsyncIterable(val) {\n return typeof Object(val)[Symbol.asyncIterator] === \"function\";\n}\nfunction isAsyncGenerator(val) {\n return isObject(val) && typeof Object(val)[Symbol.asyncIterator] === \"function\" && typeof val.return === \"function\";\n}\nfunction areGraphQLFormattedErrors(obj) {\n return Array.isArray(obj) && // must be at least one error\n obj.length > 0 && // error has at least a message\n obj.every((ob) => \"message\" in ob);\n}\nfunction limitCloseReason(reason, whenTooLong) {\n return reason.length < 124 ? reason : whenTooLong;\n}\n\nconst GRAPHQL_TRANSPORT_WS_PROTOCOL = \"graphql-transport-ws\";\nconst DEPRECATED_GRAPHQL_WS_PROTOCOL = \"graphql-ws\";\nvar CloseCode = /* @__PURE__ */ ((CloseCode2) => {\n CloseCode2[CloseCode2[\"InternalServerError\"] = 4500] = \"InternalServerError\";\n CloseCode2[CloseCode2[\"InternalClientError\"] = 4005] = \"InternalClientError\";\n CloseCode2[CloseCode2[\"BadRequest\"] = 4400] = \"BadRequest\";\n CloseCode2[CloseCode2[\"BadResponse\"] = 4004] = \"BadResponse\";\n CloseCode2[CloseCode2[\"Unauthorized\"] = 4401] = \"Unauthorized\";\n CloseCode2[CloseCode2[\"Forbidden\"] = 4403] = \"Forbidden\";\n CloseCode2[CloseCode2[\"SubprotocolNotAcceptable\"] = 4406] = \"SubprotocolNotAcceptable\";\n CloseCode2[CloseCode2[\"ConnectionInitialisationTimeout\"] = 4408] = \"ConnectionInitialisationTimeout\";\n CloseCode2[CloseCode2[\"ConnectionAcknowledgementTimeout\"] = 4504] = \"ConnectionAcknowledgementTimeout\";\n CloseCode2[CloseCode2[\"SubscriberAlreadyExists\"] = 4409] = \"SubscriberAlreadyExists\";\n CloseCode2[CloseCode2[\"TooManyInitialisationRequests\"] = 4429] = \"TooManyInitialisationRequests\";\n return CloseCode2;\n})(CloseCode || {});\nvar MessageType = /* @__PURE__ */ ((MessageType2) => {\n MessageType2[\"ConnectionInit\"] = \"connection_init\";\n MessageType2[\"ConnectionAck\"] = \"connection_ack\";\n MessageType2[\"Ping\"] = \"ping\";\n MessageType2[\"Pong\"] = \"pong\";\n MessageType2[\"Subscribe\"] = \"subscribe\";\n MessageType2[\"Next\"] = \"next\";\n MessageType2[\"Error\"] = \"error\";\n MessageType2[\"Complete\"] = \"complete\";\n return MessageType2;\n})(MessageType || {});\nfunction validateMessage(val) {\n if (!isObject(val)) {\n throw new Error(\n `Message is expected to be an object, but got ${extendedTypeof(val)}`\n );\n }\n if (!val.type) {\n throw new Error(`Message is missing the 'type' property`);\n }\n if (typeof val.type !== \"string\") {\n throw new Error(\n `Message is expects the 'type' property to be a string, but got ${extendedTypeof(\n val.type\n )}`\n );\n }\n switch (val.type) {\n case \"connection_init\" /* ConnectionInit */:\n case \"connection_ack\" /* ConnectionAck */:\n case \"ping\" /* Ping */:\n case \"pong\" /* Pong */: {\n if (val.payload != null && !isObject(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an object or nullish or missing, but got \"${val.payload}\"`\n );\n }\n break;\n }\n case \"subscribe\" /* Subscribe */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n if (!isObject(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an object, but got ${extendedTypeof(\n val.payload\n )}`\n );\n }\n if (typeof val.payload.query !== \"string\") {\n throw new Error(\n `\"${val.type}\" message payload expects the 'query' property to be a string, but got ${extendedTypeof(\n val.payload.query\n )}`\n );\n }\n if (val.payload.variables != null && !isObject(val.payload.variables)) {\n throw new Error(\n `\"${val.type}\" message payload expects the 'variables' property to be a an object or nullish or missing, but got ${extendedTypeof(\n val.payload.variables\n )}`\n );\n }\n if (val.payload.operationName != null && extendedTypeof(val.payload.operationName) !== \"string\") {\n throw new Error(\n `\"${val.type}\" message payload expects the 'operationName' property to be a string or nullish or missing, but got ${extendedTypeof(\n val.payload.operationName\n )}`\n );\n }\n if (val.payload.extensions != null && !isObject(val.payload.extensions)) {\n throw new Error(\n `\"${val.type}\" message payload expects the 'extensions' property to be a an object or nullish or missing, but got ${extendedTypeof(\n val.payload.extensions\n )}`\n );\n }\n break;\n }\n case \"next\" /* Next */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n if (!isObject(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an object, but got ${extendedTypeof(\n val.payload\n )}`\n );\n }\n break;\n }\n case \"error\" /* Error */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n if (!areGraphQLFormattedErrors(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an array of GraphQL errors, but got ${JSON.stringify(\n val.payload\n )}`\n );\n }\n break;\n }\n case \"complete\" /* Complete */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n break;\n }\n default:\n throw new Error(`Invalid message 'type' property \"${val.type}\"`);\n }\n return val;\n}\nfunction parseMessage(data, reviver) {\n return validateMessage(\n typeof data === \"string\" ? JSON.parse(data, reviver) : data\n );\n}\nfunction stringifyMessage(msg, replacer) {\n validateMessage(msg);\n return JSON.stringify(msg, replacer);\n}\n\nexport { CloseCode as C, DEPRECATED_GRAPHQL_WS_PROTOCOL as D, GRAPHQL_TRANSPORT_WS_PROTOCOL as G, MessageType as M, isAsyncGenerator as a, isAsyncIterable as b, isObject as i, limitCloseReason as l, parseMessage as p, stringifyMessage as s, validateMessage as v };\n","import { G as GRAPHQL_TRANSPORT_WS_PROTOCOL, s as stringifyMessage, M as MessageType, C as CloseCode, l as limitCloseReason, p as parseMessage, i as isObject } from './common-CGW11Fyb.js';\nexport { D as DEPRECATED_GRAPHQL_WS_PROTOCOL, v as validateMessage } from './common-CGW11Fyb.js';\n\nfunction createClient(options) {\n const {\n url,\n connectionParams,\n lazy = true,\n onNonLazyError = console.error,\n lazyCloseTimeout: lazyCloseTimeoutMs = 0,\n keepAlive = 0,\n disablePong,\n connectionAckWaitTimeout = 0,\n retryAttempts = 5,\n retryWait = async function randomisedExponentialBackoff(retries2) {\n const retryDelaySeconds = Math.pow(2, retries2);\n await new Promise(\n (resolve) => setTimeout(\n resolve,\n retryDelaySeconds * 1e3 + // add random timeout from 300ms to 3s\n Math.floor(Math.random() * (3e3 - 300) + 300)\n )\n );\n },\n shouldRetry = isLikeCloseEvent,\n on,\n webSocketImpl,\n /**\n * Generates a v4 UUID to be used as the ID using `Math`\n * as the random number generator. Supply your own generator\n * in case you need more uniqueness.\n *\n * Reference: https://gist.github.com/jed/982883\n */\n generateID = function generateUUID() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = Math.random() * 16 | 0, v = c == \"x\" ? r : r & 3 | 8;\n return v.toString(16);\n });\n },\n jsonMessageReplacer: replacer,\n jsonMessageReviver: reviver\n } = options;\n let ws;\n if (webSocketImpl) {\n if (!isWebSocket(webSocketImpl)) {\n throw new Error(\"Invalid WebSocket implementation provided\");\n }\n ws = webSocketImpl;\n } else if (typeof WebSocket !== \"undefined\") {\n ws = WebSocket;\n } else if (typeof global !== \"undefined\") {\n ws = global.WebSocket || // @ts-expect-error: Support more browsers\n global.MozWebSocket;\n } else if (typeof window !== \"undefined\") {\n ws = window.WebSocket || // @ts-expect-error: Support more browsers\n window.MozWebSocket;\n }\n if (!ws)\n throw new Error(\n \"WebSocket implementation missing; on Node you can `import WebSocket from 'ws';` and pass `webSocketImpl: WebSocket` to `createClient`\"\n );\n const WebSocketImpl = ws;\n const emitter = (() => {\n const message = /* @__PURE__ */ (() => {\n const listeners2 = {};\n return {\n on(id, listener) {\n listeners2[id] = listener;\n return () => {\n delete listeners2[id];\n };\n },\n emit(message2) {\n if (\"id\" in message2) listeners2[message2.id]?.(message2);\n }\n };\n })();\n const listeners = {\n connecting: on?.connecting ? [on.connecting] : [],\n opened: on?.opened ? [on.opened] : [],\n connected: on?.connected ? [on.connected] : [],\n ping: on?.ping ? [on.ping] : [],\n pong: on?.pong ? [on.pong] : [],\n message: on?.message ? [message.emit, on.message] : [message.emit],\n closed: on?.closed ? [on.closed] : [],\n error: on?.error ? [on.error] : []\n };\n return {\n onMessage: message.on,\n on(event, listener) {\n const l = listeners[event];\n l.push(listener);\n return () => {\n l.splice(l.indexOf(listener), 1);\n };\n },\n emit(event, ...args) {\n for (const listener of [...listeners[event]]) {\n listener(...args);\n }\n }\n };\n })();\n function errorOrClosed(cb) {\n const listening = [\n // errors are fatal and more critical than close events, throw them first\n emitter.on(\"error\", (err) => {\n listening.forEach((unlisten) => unlisten());\n cb(err);\n }),\n // closes can be graceful and not fatal, throw them second (if error didnt throw)\n emitter.on(\"closed\", (event) => {\n listening.forEach((unlisten) => unlisten());\n cb(event);\n })\n ];\n }\n let connecting, locks = 0, lazyCloseTimeout, retrying = false, retries = 0, disposed = false;\n async function connect() {\n clearTimeout(lazyCloseTimeout);\n const [socket, throwOnClose] = await (connecting ?? (connecting = new Promise(\n (connected, denied) => (async () => {\n if (retrying) {\n await retryWait(retries);\n if (!locks) {\n connecting = undefined;\n return denied({ code: 1e3, reason: \"All Subscriptions Gone\" });\n }\n retries++;\n }\n emitter.emit(\"connecting\", retrying);\n const socket2 = new WebSocketImpl(\n typeof url === \"function\" ? await url() : url,\n GRAPHQL_TRANSPORT_WS_PROTOCOL\n );\n let connectionAckTimeout, queuedPing;\n function enqueuePing() {\n if (isFinite(keepAlive) && keepAlive > 0) {\n clearTimeout(queuedPing);\n queuedPing = setTimeout(() => {\n if (socket2.readyState === WebSocketImpl.OPEN) {\n socket2.send(stringifyMessage({ type: MessageType.Ping }));\n emitter.emit(\"ping\", false, undefined);\n }\n }, keepAlive);\n }\n }\n errorOrClosed((errOrEvent) => {\n connecting = undefined;\n clearTimeout(connectionAckTimeout);\n clearTimeout(queuedPing);\n denied(errOrEvent);\n if (errOrEvent instanceof TerminatedCloseEvent) {\n socket2.close(4499, \"Terminated\");\n socket2.onerror = null;\n socket2.onclose = null;\n }\n });\n socket2.onerror = (err) => emitter.emit(\"error\", err);\n socket2.onclose = (event) => emitter.emit(\"closed\", event);\n socket2.onopen = async () => {\n try {\n emitter.emit(\"opened\", socket2);\n const payload = typeof connectionParams === \"function\" ? await connectionParams() : connectionParams;\n if (socket2.readyState !== WebSocketImpl.OPEN) return;\n socket2.send(\n stringifyMessage(\n payload ? {\n type: MessageType.ConnectionInit,\n payload\n } : {\n type: MessageType.ConnectionInit\n // payload is completely absent if not provided\n },\n replacer\n )\n );\n if (isFinite(connectionAckWaitTimeout) && connectionAckWaitTimeout > 0) {\n connectionAckTimeout = setTimeout(() => {\n socket2.close(\n CloseCode.ConnectionAcknowledgementTimeout,\n \"Connection acknowledgement timeout\"\n );\n }, connectionAckWaitTimeout);\n }\n enqueuePing();\n } catch (err) {\n emitter.emit(\"error\", err);\n socket2.close(\n CloseCode.InternalClientError,\n limitCloseReason(\n err instanceof Error ? err.message : String(err),\n \"Internal client error\"\n )\n );\n }\n };\n let acknowledged = false;\n socket2.onmessage = ({ data }) => {\n try {\n const message = parseMessage(data, reviver);\n emitter.emit(\"message\", message);\n if (message.type === \"ping\" || message.type === \"pong\") {\n emitter.emit(message.type, true, message.payload);\n if (message.type === \"pong\") {\n enqueuePing();\n } else if (!disablePong) {\n socket2.send(\n stringifyMessage(\n message.payload ? {\n type: MessageType.Pong,\n payload: message.payload\n } : {\n type: MessageType.Pong\n // payload is completely absent if not provided\n }\n )\n );\n emitter.emit(\"pong\", false, message.payload);\n }\n return;\n }\n if (acknowledged) return;\n if (message.type !== MessageType.ConnectionAck)\n throw new Error(\n `First message cannot be of type ${message.type}`\n );\n clearTimeout(connectionAckTimeout);\n acknowledged = true;\n emitter.emit(\"connected\", socket2, message.payload, retrying);\n retrying = false;\n retries = 0;\n connected([\n socket2,\n new Promise((_, reject) => errorOrClosed(reject))\n ]);\n } catch (err) {\n socket2.onmessage = null;\n emitter.emit(\"error\", err);\n socket2.close(\n CloseCode.BadResponse,\n limitCloseReason(\n err instanceof Error ? err.message : String(err),\n \"Bad response\"\n )\n );\n }\n };\n })()\n )));\n if (socket.readyState === WebSocketImpl.CLOSING) await throwOnClose;\n let release = () => {\n };\n const released = new Promise((resolve) => release = resolve);\n return [\n socket,\n release,\n Promise.race([\n // wait for\n released.then(() => {\n if (!locks) {\n const complete = () => socket.close(1e3, \"Normal Closure\");\n if (isFinite(lazyCloseTimeoutMs) && lazyCloseTimeoutMs > 0) {\n lazyCloseTimeout = setTimeout(() => {\n if (socket.readyState === WebSocketImpl.OPEN) complete();\n }, lazyCloseTimeoutMs);\n } else {\n complete();\n }\n }\n }),\n // or\n throwOnClose\n ])\n ];\n }\n function shouldRetryConnectOrThrow(errOrCloseEvent) {\n if (isLikeCloseEvent(errOrCloseEvent) && (isFatalInternalCloseCode(errOrCloseEvent.code) || [\n CloseCode.InternalServerError,\n CloseCode.InternalClientError,\n CloseCode.BadRequest,\n CloseCode.BadResponse,\n CloseCode.Unauthorized,\n // CloseCode.Forbidden, might grant access out after retry\n CloseCode.SubprotocolNotAcceptable,\n // CloseCode.ConnectionInitialisationTimeout, might not time out after retry\n // CloseCode.ConnectionAcknowledgementTimeout, might not time out after retry\n CloseCode.SubscriberAlreadyExists,\n CloseCode.TooManyInitialisationRequests\n // 4499, // Terminated, probably because the socket froze, we want to retry\n ].includes(errOrCloseEvent.code)))\n throw errOrCloseEvent;\n if (disposed) return false;\n if (isLikeCloseEvent(errOrCloseEvent) && errOrCloseEvent.code === 1e3)\n return locks > 0;\n if (!retryAttempts || retries >= retryAttempts) throw errOrCloseEvent;\n if (!shouldRetry(errOrCloseEvent)) throw errOrCloseEvent;\n return retrying = true;\n }\n if (!lazy) {\n (async () => {\n locks++;\n for (; ; ) {\n try {\n const [, , throwOnClose] = await connect();\n await throwOnClose;\n } catch (errOrCloseEvent) {\n try {\n if (!shouldRetryConnectOrThrow(errOrCloseEvent)) return;\n } catch (errOrCloseEvent2) {\n return onNonLazyError?.(errOrCloseEvent2);\n }\n }\n }\n })();\n }\n function subscribe(payload, sink) {\n const id = generateID(payload);\n let done = false, errored = false, releaser = () => {\n locks--;\n done = true;\n };\n (async () => {\n locks++;\n for (; ; ) {\n try {\n const [socket, release, waitForReleaseOrThrowOnClose] = await connect();\n if (done) return release();\n const unlisten = emitter.onMessage(id, (message) => {\n switch (message.type) {\n case MessageType.Next: {\n sink.next(message.payload);\n return;\n }\n case MessageType.Error: {\n errored = true, done = true;\n sink.error(message.payload);\n releaser();\n return;\n }\n case MessageType.Complete: {\n done = true;\n releaser();\n return;\n }\n }\n });\n socket.send(\n stringifyMessage(\n {\n id,\n type: MessageType.Subscribe,\n payload\n },\n replacer\n )\n );\n releaser = () => {\n if (!done && socket.readyState === WebSocketImpl.OPEN)\n socket.send(\n stringifyMessage(\n {\n id,\n type: MessageType.Complete\n },\n replacer\n )\n );\n locks--;\n done = true;\n release();\n };\n await waitForReleaseOrThrowOnClose.finally(unlisten);\n return;\n } catch (errOrCloseEvent) {\n if (!shouldRetryConnectOrThrow(errOrCloseEvent)) return;\n }\n }\n })().then(() => {\n if (!errored) sink.complete();\n }).catch((err) => {\n sink.error(err);\n });\n return () => {\n if (!done) releaser();\n };\n }\n return {\n on: emitter.on,\n subscribe,\n iterate(request) {\n const pending = [];\n const deferred = {\n done: false,\n error: null,\n resolve: () => {\n }\n };\n const dispose = subscribe(request, {\n next(val) {\n pending.push(val);\n deferred.resolve();\n },\n error(err) {\n deferred.done = true;\n deferred.error = err;\n deferred.resolve();\n },\n complete() {\n deferred.done = true;\n deferred.resolve();\n }\n });\n const iterator = async function* iterator2() {\n for (; ; ) {\n if (!pending.length) {\n await new Promise((resolve) => deferred.resolve = resolve);\n }\n while (pending.length) {\n yield pending.shift();\n }\n if (deferred.error) {\n throw deferred.error;\n }\n if (deferred.done) {\n return;\n }\n }\n }();\n iterator.throw = async (err) => {\n if (!deferred.done) {\n deferred.done = true;\n deferred.error = err;\n deferred.resolve();\n }\n return { done: true, value: undefined };\n };\n iterator.return = async () => {\n dispose();\n return { done: true, value: undefined };\n };\n return iterator;\n },\n async dispose() {\n disposed = true;\n if (connecting) {\n const [socket] = await connecting;\n socket.close(1e3, \"Normal Closure\");\n }\n },\n terminate() {\n if (connecting) {\n emitter.emit(\"closed\", new TerminatedCloseEvent());\n }\n }\n };\n}\nclass TerminatedCloseEvent extends Error {\n name = \"TerminatedCloseEvent\";\n message = \"4499: Terminated\";\n code = 4499;\n reason = \"Terminated\";\n wasClean = false;\n}\nfunction isLikeCloseEvent(val) {\n return isObject(val) && \"code\" in val && \"reason\" in val;\n}\nfunction isFatalInternalCloseCode(code) {\n if ([\n 1e3,\n // Normal Closure is not an erroneous close code\n 1001,\n // Going Away\n 1006,\n // Abnormal Closure\n 1005,\n // No Status Received\n 1012,\n // Service Restart\n 1013,\n // Try Again Later\n 1014\n // Bad Gateway\n ].includes(code))\n return false;\n return code >= 1e3 && code <= 1999;\n}\nfunction isWebSocket(val) {\n return typeof val === \"function\" && \"constructor\" in val && \"CLOSED\" in val && \"CLOSING\" in val && \"CONNECTING\" in val && \"OPEN\" in val;\n}\n\nexport { CloseCode, GRAPHQL_TRANSPORT_WS_PROTOCOL, MessageType, TerminatedCloseEvent, createClient, parseMessage, stringifyMessage };\n","export { TerminatedCloseEvent, createClient } from './client.js';\nexport { a as areGraphQLErrors, h as handleProtocols, m as makeServer } from './server-BN3ZJY-a.js';\nexport { C as CloseCode, D as DEPRECATED_GRAPHQL_WS_PROTOCOL, G as GRAPHQL_TRANSPORT_WS_PROTOCOL, M as MessageType, p as parseMessage, s as stringifyMessage, v as validateMessage } from './common-CGW11Fyb.js';\nimport 'graphql';\n"],"mappings":"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","names":[]}
@@ -0,0 +1,211 @@
1
+ import { DocumentNode } from '@apollo/client';
2
+ export type DubheMetadata = {
3
+ components: Array<Record<string, {
4
+ fields: Array<Record<string, any>>;
5
+ keys: string[];
6
+ }>>;
7
+ resources: Array<Record<string, {
8
+ fields: Array<Record<string, any>>;
9
+ keys: string[];
10
+ }>>;
11
+ enums: any[];
12
+ };
13
+ export interface PageInfo {
14
+ hasNextPage: boolean;
15
+ hasPreviousPage: boolean;
16
+ startCursor?: string;
17
+ endCursor?: string;
18
+ }
19
+ export interface Connection<T> {
20
+ edges: Array<{
21
+ cursor: string;
22
+ node: T;
23
+ }>;
24
+ pageInfo: PageInfo;
25
+ totalCount?: number;
26
+ }
27
+ export interface BaseQueryParams {
28
+ first?: number;
29
+ last?: number;
30
+ after?: string;
31
+ before?: string;
32
+ }
33
+ export interface OrderBy {
34
+ field: string;
35
+ direction: 'ASC' | 'DESC';
36
+ }
37
+ export interface JsonPathOrder {
38
+ path: string;
39
+ direction: 'ASC' | 'DESC';
40
+ type?: 'STRING' | 'INTEGER' | 'FLOAT' | 'BOOLEAN';
41
+ }
42
+ export interface FilterCondition {
43
+ equalTo?: any;
44
+ notEqualTo?: any;
45
+ lessThan?: any;
46
+ lessThanOrEqualTo?: any;
47
+ greaterThan?: any;
48
+ greaterThanOrEqualTo?: any;
49
+ in?: any[];
50
+ notIn?: any[];
51
+ like?: string;
52
+ notLike?: string;
53
+ isNull?: boolean;
54
+ }
55
+ export interface StringFilter extends FilterCondition {
56
+ like?: string;
57
+ notLike?: string;
58
+ ilike?: string;
59
+ notIlike?: string;
60
+ startsWith?: string;
61
+ endsWith?: string;
62
+ includes?: string;
63
+ notIncludes?: string;
64
+ }
65
+ export interface NumberFilter extends FilterCondition {
66
+ lessThan?: number;
67
+ lessThanOrEqualTo?: number;
68
+ greaterThan?: number;
69
+ greaterThanOrEqualTo?: number;
70
+ }
71
+ export interface DateFilter extends FilterCondition {
72
+ lessThan?: string;
73
+ lessThanOrEqualTo?: string;
74
+ greaterThan?: string;
75
+ greaterThanOrEqualTo?: string;
76
+ }
77
+ export interface StoreTableRow {
78
+ createdAt: string;
79
+ updatedAt: string;
80
+ [key: string]: any;
81
+ }
82
+ export interface QueryBuilder<T> {
83
+ where?: Record<string, any>;
84
+ orderBy?: OrderBy[];
85
+ first?: number;
86
+ last?: number;
87
+ after?: string;
88
+ before?: string;
89
+ }
90
+ export interface SubscriptionOptions {
91
+ onData?: (data: any) => void;
92
+ onError?: (error: Error) => void;
93
+ onComplete?: () => void;
94
+ }
95
+ export interface ListenPayload<T = any> {
96
+ query: T;
97
+ }
98
+ export interface ListenSubscriptionResult<T = any> {
99
+ listen: ListenPayload<T>;
100
+ }
101
+ export interface AdvancedSubscriptionOptions extends SubscriptionOptions {
102
+ initialEvent?: boolean;
103
+ variables?: Record<string, any>;
104
+ }
105
+ export interface ListenSubscriptionConfig {
106
+ topic: string;
107
+ initialEvent?: boolean;
108
+ filter?: Record<string, any>;
109
+ orderBy?: OrderBy[];
110
+ first?: number;
111
+ fields?: string[];
112
+ }
113
+ export type QueryOperation = 'query' | 'subscription';
114
+ export interface TypedDocumentNode<TResult = any, TVariables = any> extends DocumentNode {
115
+ __resultType?: TResult;
116
+ __variablesType?: TVariables;
117
+ }
118
+ export interface RetryOptions {
119
+ max?: number;
120
+ delay?: {
121
+ initial?: number;
122
+ max?: number;
123
+ jitter?: boolean;
124
+ };
125
+ attempts?: {
126
+ max?: number;
127
+ retryIf?: (error: any, _operation: any) => boolean;
128
+ };
129
+ }
130
+ export type CachePolicy = 'cache-first' | 'network-only' | 'cache-only' | 'no-cache' | 'standby';
131
+ export type PaginationCacheStrategy = 'none' | 'filter-only' | 'filter-orderby' | 'table-level';
132
+ export interface QueryOptions {
133
+ cachePolicy?: CachePolicy;
134
+ pollInterval?: number;
135
+ notifyOnNetworkStatusChange?: boolean;
136
+ }
137
+ export interface GraphQLFormattedError {
138
+ message: string;
139
+ locations?: Array<{
140
+ line: number;
141
+ column: number;
142
+ }>;
143
+ path?: Array<string | number>;
144
+ extensions?: any;
145
+ }
146
+ export interface QueryResult<TData = any> {
147
+ data?: TData;
148
+ loading: boolean;
149
+ error?: Error;
150
+ networkStatus: number;
151
+ refetch: () => Promise<QueryResult<TData>>;
152
+ }
153
+ export interface SubscriptionResult<TData = any> {
154
+ data?: TData;
155
+ loading: boolean;
156
+ error?: Error;
157
+ }
158
+ export interface MultiTableSubscriptionConfig {
159
+ tableName: string;
160
+ options?: SubscriptionOptions & {
161
+ fields?: string[];
162
+ filter?: Record<string, any>;
163
+ initialEvent?: boolean;
164
+ first?: number;
165
+ orderBy?: OrderBy[];
166
+ topicPrefix?: string;
167
+ };
168
+ }
169
+ export interface MultiTableSubscriptionResult {
170
+ [tableName: string]: SubscriptionResult<{
171
+ listen: {
172
+ query: any;
173
+ };
174
+ }>;
175
+ }
176
+ export interface MultiTableSubscriptionData {
177
+ [tableName: string]: {
178
+ listen: {
179
+ query: any;
180
+ };
181
+ };
182
+ }
183
+ export interface DubheComponentField {
184
+ type: string;
185
+ }
186
+ export interface DubheComponent {
187
+ fields?: Record<string, string | DubheComponentField>;
188
+ keys?: string[];
189
+ }
190
+ export interface ParsedTableInfo {
191
+ tableName: string;
192
+ fields: string[];
193
+ primaryKeys: string[];
194
+ enumFields: Record<string, string[]>;
195
+ }
196
+ export interface DubheClientConfig {
197
+ endpoint: string;
198
+ subscriptionEndpoint?: string;
199
+ headers?: Record<string, string>;
200
+ fetchOptions?: RequestInit;
201
+ retryOptions?: RetryOptions;
202
+ dubheMetadata?: any;
203
+ cacheConfig?: {
204
+ paginatedTables?: string[];
205
+ strategy?: PaginationCacheStrategy;
206
+ customMergeStrategies?: Record<string, {
207
+ keyArgs?: string[];
208
+ merge?: (existing: any, incoming: any) => any;
209
+ }>;
210
+ };
211
+ }
@@ -0,0 +1,2 @@
1
+ export declare const parseData: (data: unknown) => unknown;
2
+ export declare const parseValue: (value: unknown) => unknown;
package/package.json ADDED
@@ -0,0 +1,154 @@
1
+ {
2
+ "name": "@0xobelisk/graphql-client",
3
+ "version": "1.2.0-pre.24",
4
+ "description": "Tookit for interacting with dubhe graphql client",
5
+ "keywords": [
6
+ "sui",
7
+ "obelisk labs",
8
+ "move",
9
+ "blockchain"
10
+ ],
11
+ "author": "team@obelisk.build",
12
+ "homepage": "https://github.com/0xobelisk/dubhe/tree/main/packages/sui-client#readme",
13
+ "bugs": "https://github.com/0xobelisk/dubhe/issues",
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/0xobelisk/dubhe.git"
17
+ },
18
+ "license": "Apache-2.0",
19
+ "publishConfig": {
20
+ "access": "public"
21
+ },
22
+ "engines": {
23
+ "node": ">=18"
24
+ },
25
+ "main": "./dist/index.js",
26
+ "module": "./dist/index.mjs",
27
+ "types": "./dist/index.d.ts",
28
+ "exports": {
29
+ ".": {
30
+ "source": "./src/index.ts",
31
+ "import": "./dist/index.mjs",
32
+ "require": "./dist/index.js",
33
+ "types": "./dist/index.d.ts"
34
+ }
35
+ },
36
+ "files": [
37
+ "dist",
38
+ "src"
39
+ ],
40
+ "dependencies": {
41
+ "@apollo/client": "^3.13.8",
42
+ "@graphql-typed-document-node/core": "^3.2.0",
43
+ "@types/pluralize": "^0.0.33",
44
+ "gql.tada": "^1.7.0",
45
+ "graphql": "^16.8.1",
46
+ "husky": "^8.0.3",
47
+ "pluralize": "^8.0.0",
48
+ "process": "^0.11.10",
49
+ "superstruct": "^1.0.3",
50
+ "tmp": "^0.2.1",
51
+ "tweetnacl": "^1.0.3",
52
+ "valibot": "0.36.0",
53
+ "ws": "^8.18.0"
54
+ },
55
+ "devDependencies": {
56
+ "@commitlint/cli": "^18.0.0",
57
+ "@commitlint/config-conventional": "^18.0.0",
58
+ "@commitlint/prompt-cli": "^18.0.0",
59
+ "@types/jest": "^29.5.14",
60
+ "@types/node": "^20.8.7",
61
+ "@types/tmp": "^0.2.5",
62
+ "@types/ws": "^8.5.14",
63
+ "@typescript-eslint/eslint-plugin": "^6.8.0",
64
+ "@typescript-eslint/parser": "^6.8.0",
65
+ "dotenv": "^16.3.1",
66
+ "eslint": "^8.56.0",
67
+ "eslint-config-prettier": "^9.1.0",
68
+ "eslint-plugin-prettier": "^5.0.1",
69
+ "graphql-ws": "^6.0.2",
70
+ "jest": "^29.7.0",
71
+ "lint-staged": "^15.0.2",
72
+ "prettier": "3.3.3",
73
+ "ts-node": "^10.9.1",
74
+ "tsconfig-paths": "^4.2.0",
75
+ "tsup": "^7.1.0",
76
+ "typedoc": "^0.25.2",
77
+ "typescript": "^5.2.2"
78
+ },
79
+ "lint-staged": {
80
+ "**/*.ts": [
81
+ "pnpm run format:fix",
82
+ "pnpm run lint:fix"
83
+ ],
84
+ "**/*.json|md": [
85
+ "pnpm run format:fix"
86
+ ]
87
+ },
88
+ "commitlint": {
89
+ "extends": [
90
+ "@commitlint/config-conventional"
91
+ ]
92
+ },
93
+ "prettier": {
94
+ "trailingComma": "es5",
95
+ "tabWidth": 2,
96
+ "semi": true,
97
+ "singleQuote": true,
98
+ "useTabs": false,
99
+ "quoteProps": "as-needed",
100
+ "bracketSpacing": true,
101
+ "arrowParens": "always",
102
+ "endOfLine": "lf"
103
+ },
104
+ "eslintConfig": {
105
+ "root": true,
106
+ "env": {
107
+ "browser": true,
108
+ "node": true,
109
+ "es2022": true
110
+ },
111
+ "extends": [
112
+ "eslint:recommended",
113
+ "plugin:@typescript-eslint/eslint-recommended",
114
+ "plugin:prettier/recommended"
115
+ ],
116
+ "plugins": [
117
+ "@typescript-eslint",
118
+ "prettier"
119
+ ],
120
+ "parser": "@typescript-eslint/parser",
121
+ "rules": {
122
+ "prettier/prettier": "warn",
123
+ "@typescript-eslint/no-explicit-any": "off",
124
+ "no-unused-vars": "off",
125
+ "@typescript-eslint/no-unused-vars": [
126
+ "error",
127
+ {
128
+ "argsIgnorePattern": "^_",
129
+ "varsIgnorePattern": "^_",
130
+ "caughtErrorsIgnorePattern": "^_"
131
+ }
132
+ ]
133
+ }
134
+ },
135
+ "scripts": {
136
+ "clean": "rm -rf tsconfig.tsbuildinfo ./dist",
137
+ "build": "npm run build:types && npm run build:tsup",
138
+ "build:tsup": "tsup ./src/index.ts --format esm,cjs --sourcemap",
139
+ "build:types": "tsc --build",
140
+ "watch:tsup": "tsup ./src/index.ts --format esm,cjs --clean --splitting --watch",
141
+ "watch:types": "tsc --watch",
142
+ "watch": "pnpm run clean & pnpm run watch:types & pnpm run watch:tsup",
143
+ "test": "pnpm test:typecheck && pnpm test:unit",
144
+ "test:typecheck": "tsc -p ./test",
145
+ "format:fix": "prettier --ignore-path 'dist/* docs/*' --write '**/*.{ts,json,md}'",
146
+ "lint:fix": "eslint . --ignore-pattern dist --ext .ts --fix",
147
+ "commit": "commit",
148
+ "doc": "typedoc --out docs src/index.ts",
149
+ "format": "prettier --write .",
150
+ "format:check": "prettier --check .",
151
+ "type-check": "tsc --noEmit",
152
+ "validate": "pnpm format:check && pnpm type-check"
153
+ }
154
+ }