{"version":3,"sources":["../src/storage/storageWithInit.ts"],"names":[],"mappings":";;;AAGA,IAAM,iBAAA,0BAA2B,aAAa,CAAA;AAEvC,SAAS,gBAAgB,OAAA,EAAqD;AACnF,EAAA,IAAI,cAAA,GAAuC,IAAA;AAI3C,EAAA,MAAM,SAAA,GAAY,MACf,OAAA,CAA8D,MAAA;AAOjE,EAAA,MAAM,SAAA,GAAY,CAAC,UAAA,KAAoD;AACrE,IAAA,MAAM,UAAU,OAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA,CAAE,IAAA,CAAK,QAAW,CAAA,GAAA,KAAO;AACjE,MAAA,IAAI,mBAAmB,OAAA,EAAS;AAC9B,QAAA,cAAA,GAAiB,IAAA;AAAA,MACnB;AAKA,MAAA,SAAA,IAAa,KAAA,CAAM,sDAAA,EAAwD,EAAE,KAAA,EAAO,KAAK,CAAA;AACzF,MAAA,MAAM,GAAA;AAAA,IACR,CAAC,CAAA;AACD,IAAA,cAAA,GAAiB,OAAA;AACjB,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,aAAa,YAAY;AAE7B,IAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,2BAAA,KAAgC,MAAA,EAAQ;AACtD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,cAAA,IAAkB,SAAA,CAAU,OAAA,CAAQ,MAAM,CAAA;AAE1D,IAAA,MAAM,OAAA;AAAA,EACR,CAAA;AAKA,EAAA,IAAI,OAAA,CAAQ,iBAAiB,CAAA,EAAG;AAC9B,IAAA,OAAO,OAAA;AAAA,EACT;AAGA,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAA,EAAS;AAAA,IAC/B,GAAA,CAAI,QAAQ,IAAA,EAAM;AAEhB,MAAA,IAAI,SAAS,iBAAA,EAAmB;AAC9B,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,MAAM,KAAA,GAAQ,OAAO,IAA2B,CAAA;AAChD,MAAA,IAAI,OAAO,UAAU,UAAA,EAAY;AAE/B,QAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,UAAA,OAAO,UAAU,IAAA,KAAoB;AACnC,YAAA,OAAO,kBAAkB,SAAA,CAAU,OAAA,CAAQ,MAAM,KAAA,EAAO,MAAA,EAAQ,IAAI,CAAkB,CAAA;AAAA,UACxF,CAAA;AAAA,QACF;AAGA,QAAA,OAAO,UAAU,IAAA,KAAoB;AACnC,UAAA,MAAM,UAAA,EAAW;AAEjB,UAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,MAAA,EAAQ,IAAI,CAAA;AAAA,QAC1C,CAAA;AAAA,MACF;AAEA,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA;AAAA,IACjC;AAAA,GACD,CAAA;AAED,EAAA,OAAO,KAAA;AACT","file":"chunk-7SJKLQA7.cjs","sourcesContent":["import type { IMastraLogger } from '../logger';\nimport type { MastraCompositeStore } from './base';\n\nconst isAugmentedSymbol = Symbol('isAugmented');\n\nexport function augmentWithInit(storage: MastraCompositeStore): MastraCompositeStore {\n  let hasInitialized: null | Promise<void> = null;\n\n  // `logger` is protected on MastraBase, but always assigned at construction\n  // time, so we can read it at runtime through a narrow cast.\n  const getLogger = (): IMastraLogger | undefined =>\n    (storage as MastraCompositeStore & { logger?: IMastraLogger }).logger;\n\n  // Wrap init so a rejection clears the cached promise. Without this,\n  // a single transient init failure (e.g. a network blip during boot)\n  // would cache the rejection forever and every subsequent storage call\n  // would surface the same error with no way to recover short of process\n  // restart.\n  const cacheInit = (initResult: Promise<void> | void): Promise<void> => {\n    const wrapped = Promise.resolve(initResult).then(undefined, err => {\n      if (hasInitialized === wrapped) {\n        hasInitialized = null;\n      }\n      // Surface failures even when a follow-up call's retry succeeds.\n      // Otherwise transient init failures would recover silently and only\n      // be visible to whichever caller happened to be waiting when init\n      // first failed.\n      getLogger()?.error('Storage init failed; will retry on next storage call', { error: err });\n      throw err;\n    });\n    hasInitialized = wrapped;\n    return wrapped;\n  };\n\n  const ensureInit = async () => {\n    // Skip auto-initialization if disableInit is true\n    if (storage.disableInit) {\n      return;\n    }\n\n    // Environment variable equivalent of disableInit - used by migration CLI\n    if (process.env.MASTRA_DISABLE_STORAGE_INIT === 'true') {\n      return;\n    }\n\n    const promise = hasInitialized ?? cacheInit(storage.init());\n\n    await promise;\n  };\n\n  // if we already have a proxy, return it\n  // instanceof Proxy doesnt work in vitest https://github.com/vitejs/vite/discussions/14490\n  // @ts-expect-error - symbol is not defined on the storage\n  if (storage[isAugmentedSymbol]) {\n    return storage;\n  }\n\n  // override al functions to wait until init is complete\n  const proxy = new Proxy(storage, {\n    get(target, prop) {\n      // Handle the isAugmentedSymbol specifically\n      if (prop === isAugmentedSymbol) {\n        return true;\n      }\n\n      const value = target[prop as keyof typeof target];\n      if (typeof value === 'function') {\n        // Special handling for init to track that it was called\n        if (prop === 'init') {\n          return async (...args: unknown[]) => {\n            return hasInitialized ?? cacheInit(Reflect.apply(value, target, args) as Promise<void>);\n          };\n        }\n\n        // All other functions wait for init\n        return async (...args: unknown[]) => {\n          await ensureInit();\n\n          return Reflect.apply(value, target, args);\n        };\n      }\n\n      return Reflect.get(target, prop);\n    },\n  });\n\n  return proxy;\n}\n"]}