{"version":3,"file":"config.cjs","names":["AsyncLocalStorageProviderSingleton","CONFIG_KEY_SCRATCHPAD"],"sources":["../../../src/pregel/utils/config.ts"],"sourcesContent":["import { RunnableConfig } from \"@langchain/core/runnables\";\nimport { AsyncLocalStorageProviderSingleton } from \"@langchain/core/singletons\";\nimport { BaseStore } from \"@langchain/langgraph-checkpoint\";\nimport { LangGraphRunnableConfig } from \"../runnable_types.js\";\nimport {\n  CHECKPOINT_NAMESPACE_END,\n  CHECKPOINT_NAMESPACE_SEPARATOR,\n  CONFIG_KEY_SCRATCHPAD,\n} from \"../../constants.js\";\n\nconst COPIABLE_KEYS = [\"tags\", \"metadata\", \"callbacks\", \"configurable\"];\n\nconst CONFIG_KEYS = [\n  \"tags\",\n  \"metadata\",\n  \"callbacks\",\n  \"runName\",\n  \"maxConcurrency\",\n  \"recursionLimit\",\n  \"configurable\",\n  \"runId\",\n  \"outputKeys\",\n  \"streamMode\",\n  \"store\",\n  \"writer\",\n  \"interrupt\",\n  \"context\",\n  \"interruptBefore\",\n  \"interruptAfter\",\n  \"checkpointDuring\",\n  \"durability\",\n  \"signal\",\n  \"executionInfo\",\n  \"serverInfo\",\n];\n\nconst DEFAULT_RECURSION_LIMIT = 25;\nexport const PROPAGATE_TO_METADATA = new Set([\n  \"thread_id\",\n  \"checkpoint_id\",\n  \"checkpoint_ns\",\n  \"task_id\",\n  \"run_id\",\n  \"assistant_id\",\n  \"graph_id\",\n]);\n\nexport function propagateConfigurableToMetadata(\n  configurable?: Record<string, unknown>,\n  metadata?: Record<string, unknown>\n): Record<string, unknown> | undefined {\n  if (!configurable) {\n    return metadata;\n  }\n  const result = metadata ?? {};\n  for (const key of PROPAGATE_TO_METADATA) {\n    if (key in result) {\n      continue;\n    }\n    const value = configurable[key];\n    if (value !== undefined) {\n      result[key] = value;\n    }\n  }\n  return result;\n}\n\nexport function ensureLangGraphConfig(\n  ...configs: (LangGraphRunnableConfig | undefined)[]\n): RunnableConfig {\n  const empty: LangGraphRunnableConfig = {\n    tags: [],\n    metadata: {},\n    callbacks: undefined,\n    recursionLimit: DEFAULT_RECURSION_LIMIT,\n    configurable: {},\n  };\n\n  const implicitConfig: RunnableConfig =\n    AsyncLocalStorageProviderSingleton.getRunnableConfig();\n  if (implicitConfig !== undefined) {\n    for (const [k, v] of Object.entries(implicitConfig)) {\n      if (v !== undefined) {\n        if (COPIABLE_KEYS.includes(k)) {\n          let copiedValue;\n          if (Array.isArray(v)) {\n            copiedValue = [...v];\n          } else if (typeof v === \"object\") {\n            if (\n              k === \"callbacks\" &&\n              \"copy\" in v &&\n              typeof v.copy === \"function\"\n            ) {\n              copiedValue = v.copy();\n            } else {\n              copiedValue = { ...v };\n            }\n          } else {\n            copiedValue = v;\n          }\n          empty[k as keyof RunnableConfig] = copiedValue;\n        } else {\n          empty[k as keyof RunnableConfig] = v;\n        }\n      }\n    }\n  }\n\n  for (const config of configs) {\n    if (config === undefined) {\n      continue;\n    }\n\n    for (const [k, v] of Object.entries(config)) {\n      if (v !== undefined && CONFIG_KEYS.includes(k)) {\n        empty[k as keyof LangGraphRunnableConfig] = v;\n      }\n    }\n  }\n\n  empty.metadata =\n    propagateConfigurableToMetadata(\n      empty.configurable as Record<string, unknown> | undefined,\n      empty.metadata as Record<string, unknown> | undefined\n    ) ?? {};\n  return empty;\n}\n\n/**\n * A helper utility function that returns the {@link BaseStore} that was set when the graph was initialized\n *\n * @returns a reference to the {@link BaseStore} that was set when the graph was initialized\n */\nexport function getStore(\n  config?: LangGraphRunnableConfig\n): BaseStore | undefined {\n  const runConfig: LangGraphRunnableConfig =\n    config ?? AsyncLocalStorageProviderSingleton.getRunnableConfig();\n\n  if (runConfig === undefined) {\n    throw new Error(\n      [\n        \"Config not retrievable. This is likely because you are running in an environment without support for AsyncLocalStorage.\",\n        \"If you're running `getStore` in such environment, pass the `config` from the node function directly.\",\n      ].join(\"\\n\")\n    );\n  }\n\n  return runConfig?.store;\n}\n\n/**\n * A helper utility function that returns the {@link LangGraphRunnableConfig#writer} if \"custom\" stream mode is enabled, otherwise undefined.\n *\n * @returns a reference to the {@link LangGraphRunnableConfig#writer} if \"custom\" stream mode is enabled, otherwise undefined\n */\nexport function getWriter(\n  config?: LangGraphRunnableConfig\n): ((chunk: unknown) => void) | undefined {\n  const runConfig: LangGraphRunnableConfig =\n    config ?? AsyncLocalStorageProviderSingleton.getRunnableConfig();\n\n  if (runConfig === undefined) {\n    throw new Error(\n      [\n        \"Config not retrievable. This is likely because you are running in an environment without support for AsyncLocalStorage.\",\n        \"If you're running `getWriter` in such environment, pass the `config` from the node function directly.\",\n      ].join(\"\\n\")\n    );\n  }\n\n  return runConfig?.writer || runConfig?.configurable?.writer;\n}\n\n/**\n * A helper utility function that returns the {@link LangGraphRunnableConfig} that was set when the graph was initialized.\n *\n * Note: This only works when running in an environment that supports node:async_hooks and AsyncLocalStorage. If you're running this in a\n * web environment, access the LangGraphRunnableConfig from the node function directly.\n *\n * @returns the {@link LangGraphRunnableConfig} that was set when the graph was initialized\n */\nexport function getConfig(): LangGraphRunnableConfig {\n  return AsyncLocalStorageProviderSingleton.getRunnableConfig();\n}\n\n/**\n * A helper utility function that returns the input for the currently executing task\n *\n * @returns the input for the currently executing task\n */\nexport function getCurrentTaskInput<T = unknown>(\n  config?: LangGraphRunnableConfig\n): T {\n  const runConfig: LangGraphRunnableConfig =\n    config ?? AsyncLocalStorageProviderSingleton.getRunnableConfig();\n\n  if (runConfig === undefined) {\n    throw new Error(\n      [\n        \"Config not retrievable. This is likely because you are running in an environment without support for AsyncLocalStorage.\",\n        \"If you're running `getCurrentTaskInput` in such environment, pass the `config` from the node function directly.\",\n      ].join(\"\\n\")\n    );\n  }\n\n  if (\n    runConfig.configurable?.[CONFIG_KEY_SCRATCHPAD]?.currentTaskInput ===\n    undefined\n  ) {\n    throw new Error(\"BUG: internal scratchpad not initialized.\");\n  }\n\n  return runConfig!.configurable![CONFIG_KEY_SCRATCHPAD]!.currentTaskInput as T;\n}\n\nexport function recastCheckpointNamespace(namespace: string): string {\n  return namespace\n    .split(CHECKPOINT_NAMESPACE_SEPARATOR)\n    .filter((part) => !part.match(/^\\d+$/))\n    .map((part) => part.split(CHECKPOINT_NAMESPACE_END)[0])\n    .join(CHECKPOINT_NAMESPACE_SEPARATOR);\n}\n\nexport function getParentCheckpointNamespace(namespace: string): string {\n  const parts = namespace.split(CHECKPOINT_NAMESPACE_SEPARATOR);\n  while (parts.length > 1 && parts[parts.length - 1].match(/^\\d+$/)) {\n    parts.pop();\n  }\n  return parts.slice(0, -1).join(CHECKPOINT_NAMESPACE_SEPARATOR);\n}\n"],"mappings":"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"}