{
  "version": 3,
  "sources": ["../../src/Collections.ts", "../../src/config/getBaseMongoSdk.ts", "../../src/config/getMongoDbConfig.ts", "../../src/config/hasMongoDbConfig.ts", "../../src/Databases.ts", "../../src/Defaults.ts", "../../src/Module.ts", "../../src/merge.ts", "../../src/ModuleV2.ts", "../../src/util/dbProperty.ts"],
  "sourcesContent": ["// TODO: By DB\nexport const COLLECTIONS = {\n  AddressInfo: 'address_info' as const,\n  ArchivistStats: 'archivist_stats' as const,\n  BoundWitnesses: 'bound_witnesses' as const,\n  Payloads: 'payloads' as const,\n  Thumbnails: 'thumbnails' as const,\n  Users: 'users' as const,\n}\n", "import { assertEx } from '@ariestools/sdk'\nimport type { BaseMongoSdkPrivateConfig } from '@ariestools/storage-adapters/mongo'\nimport { BaseMongoSdk } from '@ariestools/storage-adapters/mongo'\nimport type { Document } from 'mongodb'\n\nimport { getMongoDBConfig } from './getMongoDbConfig.ts'\n\nexport const getBaseMongoSdkPrivateConfig = (): BaseMongoSdkPrivateConfig => {\n  const env = getMongoDBConfig()\n  return {\n    dbConnectionString: env.MONGO_CONNECTION_STRING,\n    dbDomain: assertEx(env.MONGO_DOMAIN, () => 'Missing Mongo Domain'),\n    dbName: assertEx(env.MONGO_DATABASE, () => 'Missing Mongo Database'),\n    dbPassword: assertEx(env.MONGO_PASSWORD, () => 'Missing Mongo Password'),\n    dbUserName: assertEx(env.MONGO_USERNAME, () => 'Missing Mongo Username'),\n  }\n}\n\nexport const getBaseMongoSdk = <T extends Document>(collection: string) => {\n  return new BaseMongoSdk<T>({ ...getBaseMongoSdkPrivateConfig(), collection })\n}\n", "export type MongoDbConnectionStringEnvVar = 'MONGO_CONNECTION_STRING'\nexport type MongoDbEnvVars = 'MONGO_DATABASE' | 'MONGO_DOMAIN' | 'MONGO_PASSWORD' | 'MONGO_USERNAME'\n\nexport type MongoEnv = Record<MongoDbEnvVars | MongoDbConnectionStringEnvVar, string | undefined>\n\nexport const getMongoDBConfig = (): MongoEnv => {\n  const env: MongoEnv = {} as MongoEnv\n  const connectionString = process.env.MONGO_CONNECTION_STRING\n  if (connectionString !== undefined && connectionString !== '') {\n    env.MONGO_CONNECTION_STRING = connectionString\n  }\n  const domain = process.env.MONGO_DOMAIN\n  if (domain !== undefined && domain !== '') {\n    env.MONGO_DATABASE = process.env.MONGO_DATABASE\n    env.MONGO_DOMAIN = domain\n    env.MONGO_PASSWORD = process.env.MONGO_PASSWORD\n    env.MONGO_USERNAME = process.env.MONGO_USERNAME\n  }\n  return env\n}\n", "import { exists } from '@ariestools/sdk'\n\nimport { getMongoDBConfig } from './getMongoDbConfig.ts'\n\nexport const hasMongoDBConfig = (): boolean => {\n  const env = getMongoDBConfig()\n  const requiredValues = [env.MONGO_CONNECTION_STRING, env.MONGO_DATABASE, env.MONGO_DOMAIN, env.MONGO_PASSWORD, env.MONGO_USERNAME]\n  return requiredValues.every(exists)\n}\n", "export const DATABASES = { Archivist: 'archivist' as const }\n", "export const DefaultAggregateTimeoutMs = 10_000\nexport const DefaultLimit = 20\nexport const DefaultMaxTimeMS = 2000\nexport const DefaultOrder = 'desc'\n", "import { assertEx, staticImplements } from '@ariestools/sdk'\nimport type { BaseMongoSdkConfig } from '@ariestools/storage-adapters/mongo'\nimport { BaseMongoSdk } from '@ariestools/storage-adapters/mongo'\nimport type {\n  JobQueue,\n  MongoDBModule, MongoDBModuleParams,\n} from '@xyo-network/module-model-mongodb'\nimport { MongoDBStorageClassLabels } from '@xyo-network/module-model-mongodb'\nimport type { BoundWitnessWithMongoMeta, PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport type { MongoServerError } from 'mongodb'\n\nimport type { AnyAbstractModule } from './AnyAbstractModule.ts'\nimport { COLLECTIONS } from './Collections.ts'\nimport { getBaseMongoSdkPrivateConfig } from './config/index.ts'\nimport type { IndexDescription } from './IndexDescription.ts'\nimport { merge } from './merge.ts'\n\nconst standardIndexes: IndexDescription[] = [\n  {\n    name: 'IX__hash', key: { _hash: 1 }, unique: false,\n  },\n  {\n    name: 'IX__dataHash', key: { _dataHash: 1 }, unique: false,\n  },\n  {\n    name: 'IX__sequence', key: { _sequence: 1 }, unique: false,\n  },\n]\n\nexport const MongoDBModuleMixin = <\n  TParams extends MongoDBModuleParams = MongoDBModuleParams,\n  TModule extends AnyAbstractModule<TParams> = AnyAbstractModule<TParams>,\n>(\n  ModuleBase: TModule,\n) => {\n  @staticImplements<TModule>()\n  abstract class MongoModuleBase extends ModuleBase implements MongoDBModule {\n    static readonly labels = MongoDBStorageClassLabels\n    // Private fields cannot be # on an exported mixin class (TS4094).\n    // eslint-disable-next-line unicorn/prefer-private-class-fields\n    _boundWitnessSdk: BaseMongoSdk<BoundWitnessWithMongoMeta> | undefined\n    // eslint-disable-next-line unicorn/prefer-private-class-fields\n    _payloadSdk: BaseMongoSdk<PayloadWithMongoMeta> | undefined\n\n    get boundWitnessSdkConfig(): BaseMongoSdkConfig {\n      const config = { collection: COLLECTIONS.BoundWitnesses, ...getBaseMongoSdkPrivateConfig() }\n      return merge(\n        config,\n        this.params.boundWitnessSdkConfig,\n        this.config.boundWitnessSdkConfig,\n        { collection: this.config.boundWitnessSdkConfig?.collection ?? this.params.boundWitnessSdkConfig?.collection ?? COLLECTIONS.BoundWitnesses },\n      )\n    }\n\n    get boundWitnesses() {\n      this._boundWitnessSdk ??= new BaseMongoSdk<BoundWitnessWithMongoMeta>(this.boundWitnessSdkConfig)\n      return assertEx(this._boundWitnessSdk)\n    }\n\n    get jobQueue(): JobQueue {\n      return assertEx(this.params.jobQueue, () => 'MongoDBModule Error: jobQueue required for this module but is not defined')\n    }\n\n    get payloadSdkConfig(): BaseMongoSdkConfig {\n      const config = { collection: COLLECTIONS.Payloads, ...getBaseMongoSdkPrivateConfig() }\n      return merge(\n        config,\n        this.params.payloadSdkConfig,\n        this.config.payloadSdkConfig,\n        { collection: this.config.payloadSdkConfig?.collection ?? this.params.payloadSdkConfig?.collection ?? COLLECTIONS.Payloads },\n      )\n    }\n\n    get payloads() {\n      this._payloadSdk ??= new BaseMongoSdk<PayloadWithMongoMeta>(this.payloadSdkConfig)\n      return assertEx(this._payloadSdk)\n    }\n\n    /**\n     * Ensures any indexes specified within the config are created. This method should be idempotent\n     * allowing for multiple calls without causing errors while ensuring the desired state.\n     */\n    async ensureIndexes(): Promise<void> {\n      const configIndexes = (this.config as { storage?: { indexes?: IndexDescription[] } })?.storage?.indexes ?? []\n      const boundWitnessesCollectionName = this.boundWitnessSdkConfig.collection\n      const payloadCollectionName = this.payloadSdkConfig.collection\n\n      const bwStandardIndexes = standardIndexes.map(ix => ({ ...ix, name: `${boundWitnessesCollectionName}.${ix.name}` }))\n      await ensureIndexesExistOnCollection(this.boundWitnesses, [...bwStandardIndexes, ...configIndexes])\n      const payloadStandardIndexes = standardIndexes.map(ix => ({ ...ix, name: `${payloadCollectionName}.${ix.name}` }))\n      await ensureIndexesExistOnCollection(this.payloads, [...payloadStandardIndexes, ...configIndexes])\n    }\n  }\n  return MongoModuleBase\n}\n\n/**\n * Ensures the specified indexes exist on the collection\n * @param sdk The SDK to use for the collection\n * @param configIndexes The indexes to ensure exist on the collection\n */\nconst ensureIndexesExistOnCollection = async (\n  sdk: BaseMongoSdk<PayloadWithMongoMeta> | BaseMongoSdk<BoundWitnessWithMongoMeta>,\n  configIndexes: IndexDescription[],\n) => {\n  await sdk.useCollection(async (collection) => {\n    const collectionName = collection.collectionName.toLowerCase()\n    const indexes = configIndexes.filter(ix => ix?.name?.toLowerCase().startsWith(collectionName) ?? false)\n    if (indexes.length === 0) return\n    for (const ix of indexes) {\n      try {\n        await collection.createIndexes([ix])\n      } catch (error) {\n        const { codeName } = error as MongoServerError\n        if (codeName === 'IndexKeySpecsConflict' || codeName === 'IndexOptionsConflict') {\n          // Index already exists which is fine OR index exists with another name which is fine\n          // TODO: For the latter case (IndexOptionsConflict) we could get into this case\n          // if we change the TTL an existing index.  We currently don't support TTLs so\n          // we'll need to revisit this assumption if we do.\n          continue\n        }\n        console.error(`Error creating index ${ix.name} for collection ${collectionName}: ${String(error)}`)\n        throw error\n      }\n    }\n  })\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */\nfunction isObject(val: unknown): val is Record<string, any> {\n  return val !== null && typeof val === 'object'\n}\n\nexport function merge<T extends object>(target: T, ...sources: any[]): T {\n  if (!isObject(target)) {\n    throw new TypeError('Target must be an object')\n  }\n\n  for (const source of sources) {\n    if (!isObject(source)) {\n      continue\n    }\n\n    for (const [key, sourceVal] of Object.entries(source)) {\n      const targetVal = (target as any)[key]\n\n      if (Array.isArray(sourceVal)) {\n        // Arrays are replaced, not deeply merged (lodash behavior)\n        (target as any)[key] = [...sourceVal]\n      } else if (isObject(sourceVal)) {\n        if (!isObject(targetVal)) {\n          (target as any)[key] = {}\n        }\n        merge((target as any)[key], sourceVal)\n      } else {\n        (target as any)[key] = sourceVal\n      }\n    }\n  }\n\n  return target\n}\n", "import {\n  assertEx, isDefined, staticImplements,\n} from '@ariestools/sdk'\nimport type { BaseMongoSdkConfig } from '@ariestools/storage-adapters/mongo'\nimport { BaseMongoSdk } from '@ariestools/storage-adapters/mongo'\nimport type {\n  JobQueue,\n  MongoDBModuleParamsV2, MongoDBModuleStatic, MongoDBModuleV2,\n} from '@xyo-network/module-model-mongodb'\nimport { MongoDBStorageClassLabels } from '@xyo-network/module-model-mongodb'\nimport type { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport type { Db, MongoServerError } from 'mongodb'\n\nimport type { AnyAbstractModule } from './AnyAbstractModule.ts'\nimport { COLLECTIONS } from './Collections.ts'\nimport { getBaseMongoSdkPrivateConfig } from './config/index.ts'\nimport type { IndexDescription } from './IndexDescription.ts'\nimport { merge } from './merge.ts'\n\nconst standardIndexes: IndexDescription[] = [\n  {\n    name: 'UX__hash', key: { _hash: 1 }, unique: true,\n  },\n  {\n    name: 'IX__dataHash', key: { _dataHash: 1 }, unique: false,\n  },\n  {\n    name: 'UX__sequence', key: { _sequence: 1 }, unique: true,\n  },\n]\n\nexport const MongoDBModuleMixinV2 = <\n  TParams extends MongoDBModuleParamsV2 = MongoDBModuleParamsV2,\n  TModule extends AnyAbstractModule<TParams> = AnyAbstractModule<TParams>,\n>(\n  ModuleBase: TModule,\n) => {\n  @staticImplements<MongoDBModuleStatic>()\n  abstract class MongoModuleBase extends ModuleBase implements MongoDBModuleV2 {\n    static readonly labels = MongoDBStorageClassLabels\n    // Private fields cannot be # on an exported mixin class (TS4094).\n    // eslint-disable-next-line unicorn/prefer-private-class-fields\n    _payloadSdk: BaseMongoSdk<PayloadWithMongoMeta> | undefined\n\n    get jobQueue(): JobQueue {\n      return assertEx(this.params.jobQueue, () => 'MongoDBModule Error: jobQueue required for this module but is not defined')\n    }\n\n    get payloadSdkConfig(): BaseMongoSdkConfig {\n      const defaultConfig = { collection: COLLECTIONS.Payloads }\n      // If the params of config have payloadSdkConfig, merge it with the default config\n      const paramsPayloadSdkConfig = this.params.payloadSdkConfig\n      const configPayloadSdkConfig = this.config.payloadSdkConfig\n      if (isDefined(paramsPayloadSdkConfig) || isDefined(configPayloadSdkConfig)) {\n        return merge(\n          defaultConfig,\n          configPayloadSdkConfig ?? {},\n          paramsPayloadSdkConfig ?? {},\n        )\n      }\n      // Otherwise, attempt to get the config from the environment\n      // TODO: Deprecate this in favor of params/config injection\n      // This is a temporary solution to maintain backward compatibility\n      // and should be removed in the future.\n      const envConfig = getBaseMongoSdkPrivateConfig()\n      return merge(\n        defaultConfig,\n        envConfig,\n      )\n    }\n\n    get payloads() {\n      this._payloadSdk ??= new BaseMongoSdk<PayloadWithMongoMeta>(this.payloadSdkConfig)\n      return assertEx(this._payloadSdk)\n    }\n\n    /**\n     * Ensures any indexes specified within the config are created. This method should be idempotent\n     * allowing for multiple calls without causing errors while ensuring the desired state.\n     */\n    async ensureCollection(): Promise<void> {\n      const { max } = this.config\n      const payloadCollectionName = this.payloadSdkConfig.collection\n\n      const payloadStandardIndexes = standardIndexes.map(ix => ({ ...ix, name: `${payloadCollectionName}.${ix.name}` }))\n\n      if (isDefined(max)) {\n        // Create capped collection if it doesn't exist or convert it if it does\n        await ensureCappedCollection(this.payloads, max)\n        // Recreate indexes after creating/converting a capped collection as\n        // capped will remove all indexes on existing collections.\n        // https://www.mongodb.com/docs/manual/reference/command/convertToCapped/\n        await ensureIndexesExistOnCollection(this.payloads, [...payloadStandardIndexes])\n      } else {\n      // Create indexes (creates collection without having to write data to it)\n        await ensureIndexesExistOnCollection(this.payloads, [...payloadStandardIndexes])\n      }\n    }\n  }\n  return MongoModuleBase\n}\n\nconst collectionExists = async (db: Db, name: string): Promise<boolean> => {\n  const collections = await db.listCollections({ name }).toArray()\n  return collections.length > 0\n}\n\n/**\n * Ensures the specified indexes exist on the collection\n * @param sdk The SDK to use for the collection\n * @param configIndexes The indexes to ensure exist on the collection\n */\nconst ensureIndexesExistOnCollection = async (\n  sdk: BaseMongoSdk<PayloadWithMongoMeta>,\n  configIndexes: IndexDescription[],\n) => {\n  await sdk.useCollection(async (collection) => {\n    const collectionName = collection.collectionName.toLowerCase()\n    const indexes = configIndexes.filter(ix => ix?.name?.toLowerCase().startsWith(collectionName) ?? false)\n    if (indexes.length === 0) return\n    for (const ix of indexes) {\n      try {\n        await collection.createIndexes([ix])\n      } catch (error) {\n        const { codeName = '' } = error as MongoServerError\n        if (['IndexKeySpecsConflict', 'IndexOptionsConflict', 'Unauthorized'].includes(codeName)) {\n          // Allowed errors:\n          // - IndexKeySpecsConflict: Index already exists which is fine\n          // - IndexOptionsConflict: Index already exists with another name which is fine\n          // - Unauthorized: Index can't be created since we don't have permission to create indexes\n          //   which is fine so long as we're only viewing collection as readonly (determined by connection\n          //   string passed in so presumably the desired configuration)\n          // TODO: For the latter case (IndexOptionsConflict) we could get into this case\n          // if we change the TTL an existing index.  We currently don't support TTLs so\n          // we'll need to revisit this assumption if we do.\n          continue\n        }\n        console.error(`Error creating index ${ix.name} for collection ${collectionName}: ${String(error)}`)\n        throw error\n      }\n    }\n  })\n}\n\n/**\n * Ensures that a collection is capped with a max document count and a reasonable size.\n * If the collection exists and is not capped, it will be converted.\n * If it doesn't exist, it will be created.\n *\n * @param name The name of the collection.\n * @param count The maximum number of documents to retain.\n * @param documentSize Estimated average document size in bytes if collection is empty.\n */\nconst ensureCappedCollection = async (sdk: BaseMongoSdk<PayloadWithMongoMeta>, max: number, docSize = 1024) => {\n  await sdk.useCollection(async (collection) => {\n    const name = collection.collectionName.toLowerCase()\n    await sdk.useMongo(async (client) => {\n      const db = client.db(collection.dbName)\n      const exists = await collectionExists(db, name)\n      const size = docSize * max\n      return exists\n        ? await ensureExistingCollectionIsCapped(sdk, max, size)\n        // Create capped collection\n        : await db.createCollection(name, {\n            capped: true, size, max,\n          })\n    })\n  })\n}\n\n/**\n * Converts an existing collection to a capped collection with a max document count.\n * Since MongoDB doesn't support `max` in `convertToCapped` or `cloneCollectionAsCapped`,\n * this function recreates the collection to work around Mongo's limitations.\n * https://www.mongodb.com/docs/manual/reference/command/convertToCapped/\n * https://www.mongodb.com/docs/manual/reference/command/clonecollectionascapped/\n * @param db - The MongoDB database instance\n * @param name - The name of the collection to convert\n * @param max - The maximum number of documents to retain\n * @param docSize - Fallback size (in bytes) to use if no documents exist (default 1KB)\n */\nconst ensureExistingCollectionIsCapped = async (\n  sdk: BaseMongoSdk<PayloadWithMongoMeta>,\n  max: number,\n  docSize = 1024,\n): Promise<void> => {\n  await sdk.useCollection(async (collection) => {\n    const name = collection.collectionName.toLowerCase()\n    await sdk.useMongo(async (client) => {\n      const db = client.db(collection.dbName)\n      const exists = await collectionExists(db, name)\n      if (!exists) throw new Error(`Collection '${name}' does not exist`)\n\n      const size = docSize * max\n\n      const stats = await db.command({ collStats: name })\n      if (stats.capped === true && stats.max === max && stats.maxSize === size) {\n        return\n      }\n\n      const tmpName = `${name}_tmp_capped`\n\n      // Create new capped collection\n      await db.createCollection(tmpName, {\n        capped: true, size, max,\n      })\n\n      // Copy most recent documents\n      const docs = await collection\n        .find()\n\n        .sort({ $natural: -1 })\n        .limit(max)\n        .toArray()\n\n      if (docs.length > 0) await db.collection(tmpName).insertMany(docs.toReversed())\n\n      // Replace old collection\n      await collection.drop()\n      await db.collection(tmpName).rename(name)\n    })\n  })\n}\n", "export const escapeChar = '#'\n\nexport const toDbProperty = (value: string) => value.replaceAll('.', () => escapeChar)\n\nexport const fromDbProperty = (value: string) => value.replaceAll(escapeChar, '.')\n"],
  "mappings": "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",
  "names": ["assertEx", "BaseMongoSdk", "BaseMongoSdk", "assertEx", "assertEx", "staticImplements", "BaseMongoSdk", "MongoDBStorageClassLabels", "standardIndexes", "assertEx", "BaseMongoSdk", "ensureIndexesExistOnCollection", "MongoDBStorageClassLabels", "staticImplements", "exists"]
}
