@xyo-network/module-abstract-mongodb 3.3.0 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"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/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 '@xylabs/assert'\nimport type { BaseMongoSdkPrivateConfig } from '@xyo-network/sdk-xyo-mongo-js'\nimport { BaseMongoSdk } from '@xyo-network/sdk-xyo-mongo-js'\nimport type { Document } from 'mongodb'\n\nimport { getMongoDBConfig } from './getMongoDBConfig.js'\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 if (process.env.MONGO_CONNECTION_STRING) {\n env.MONGO_CONNECTION_STRING = process.env.MONGO_CONNECTION_STRING\n }\n if (process.env.MONGO_DOMAIN) {\n env.MONGO_DATABASE = process.env.MONGO_DATABASE\n env.MONGO_DOMAIN = process.env.MONGO_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 '@xylabs/exists'\n\nimport { getMongoDBConfig } from './getMongoDBConfig.js'\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 } from '@xylabs/assert'\nimport { merge } from '@xylabs/lodash'\nimport { staticImplements } from '@xylabs/static-implements'\nimport { Module } from '@xyo-network/module-model'\nimport {\n MongoDBModule, MongoDBModuleParams, MongoDBModuleStatic, MongoDBStorageClassLabels,\n} from '@xyo-network/module-model-mongodb'\nimport { BoundWitnessWithMongoMeta, PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport { BaseMongoSdk, BaseMongoSdkConfig } from '@xyo-network/sdk-xyo-mongo-js'\nimport { MongoServerError } from 'mongodb'\n\nimport { COLLECTIONS } from './Collections.js'\nimport { getBaseMongoSdkPrivateConfig } from './config/index.js'\nimport { IndexDescription } from './IndexDescription.js'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyAbstractModule<TParams extends MongoDBModuleParams = MongoDBModuleParams> = abstract new (...args: any[]) => Module<TParams>\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<MongoDBModuleStatic>()\n abstract class MongoModuleBase extends ModuleBase implements MongoDBModule {\n static labels = MongoDBStorageClassLabels\n _boundWitnessSdk: BaseMongoSdk<BoundWitnessWithMongoMeta> | undefined\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 = this._boundWitnessSdk ?? new BaseMongoSdk<BoundWitnessWithMongoMeta>(this.boundWitnessSdkConfig)\n return assertEx(this._boundWitnessSdk)\n }\n\n get 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 = 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))\n if (indexes.length === 0) return\n for (const ix of indexes) {\n try {\n await collection.createIndexes([ix])\n } catch (error) {\n const mongoServerError = error as MongoServerError\n const { codeName } = 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}: ${error}`)\n throw error\n }\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"]}
1
+ {"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/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 '@xylabs/assert'\nimport type { BaseMongoSdkPrivateConfig } from '@xyo-network/sdk-xyo-mongo-js'\nimport { BaseMongoSdk } from '@xyo-network/sdk-xyo-mongo-js'\nimport type { Document } from 'mongodb'\n\nimport { getMongoDBConfig } from './getMongoDBConfig.js'\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 if (process.env.MONGO_CONNECTION_STRING) {\n env.MONGO_CONNECTION_STRING = process.env.MONGO_CONNECTION_STRING\n }\n if (process.env.MONGO_DOMAIN) {\n env.MONGO_DATABASE = process.env.MONGO_DATABASE\n env.MONGO_DOMAIN = process.env.MONGO_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 '@xylabs/exists'\n\nimport { getMongoDBConfig } from './getMongoDBConfig.js'\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 } from '@xylabs/assert'\nimport { merge } from '@xylabs/lodash'\nimport { staticImplements } from '@xylabs/static-implements'\nimport {\n MongoDBModule, MongoDBModuleParams, MongoDBModuleStatic, MongoDBStorageClassLabels,\n} from '@xyo-network/module-model-mongodb'\nimport { BoundWitnessWithMongoMeta, PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport { BaseMongoSdk, BaseMongoSdkConfig } from '@xyo-network/sdk-xyo-mongo-js'\nimport { MongoServerError } from 'mongodb'\n\nimport { AnyAbstractModule } from './AnyAbstractModule.ts'\nimport { COLLECTIONS } from './Collections.js'\nimport { getBaseMongoSdkPrivateConfig } from './config/index.js'\nimport { IndexDescription } from './IndexDescription.js'\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<MongoDBModuleStatic>()\n abstract class MongoModuleBase extends ModuleBase implements MongoDBModule {\n static labels = MongoDBStorageClassLabels\n _boundWitnessSdk: BaseMongoSdk<BoundWitnessWithMongoMeta> | undefined\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 = this._boundWitnessSdk ?? new BaseMongoSdk<BoundWitnessWithMongoMeta>(this.boundWitnessSdkConfig)\n return assertEx(this._boundWitnessSdk)\n }\n\n get 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 = 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))\n if (indexes.length === 0) return\n for (const ix of indexes) {\n try {\n await collection.createIndexes([ix])\n } catch (error) {\n const mongoServerError = error as MongoServerError\n const { codeName } = 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}: ${error}`)\n throw error\n }\n }\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport { merge } from '@xylabs/lodash'\nimport { staticImplements } from '@xylabs/static-implements'\nimport {\n MongoDBModuleParamsV2, MongoDBModuleStatic, MongoDBModuleV2, MongoDBStorageClassLabels,\n} from '@xyo-network/module-model-mongodb'\nimport { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport { BaseMongoSdk, BaseMongoSdkConfig } from '@xyo-network/sdk-xyo-mongo-js'\nimport { MongoServerError } from 'mongodb'\n\nimport { AnyAbstractModule } from './AnyAbstractModule.ts'\nimport { COLLECTIONS } from './Collections.ts'\nimport { getBaseMongoSdkPrivateConfig } from './config/index.ts'\nimport { IndexDescription } from './IndexDescription.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 labels = MongoDBStorageClassLabels\n _payloadSdk: BaseMongoSdk<PayloadWithMongoMeta> | undefined\n\n get 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 = 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 payloadCollectionName = this.payloadSdkConfig.collection\n\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>,\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))\n if (indexes.length === 0) return\n for (const ix of indexes) {\n try {\n await collection.createIndexes([ix])\n } catch (error) {\n const mongoServerError = error as MongoServerError\n const { codeName } = 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}: ${error}`)\n throw error\n }\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","merge","staticImplements","MongoDBStorageClassLabels","BaseMongoSdk","standardIndexes","assertEx","merge","BaseMongoSdk","ensureIndexesExistOnCollection","MongoDBStorageClassLabels","staticImplements"]}
@@ -0,0 +1,4 @@
1
+ import type { Module } from '@xyo-network/module-model';
2
+ import type { MongoDBModuleParams } from '@xyo-network/module-model-mongodb';
3
+ export type AnyAbstractModule<TParams extends MongoDBModuleParams = MongoDBModuleParams> = abstract new (...args: any[]) => Module<TParams>;
4
+ //# sourceMappingURL=AnyAbstractModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnyAbstractModule.d.ts","sourceRoot":"","sources":["../../src/AnyAbstractModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AAG5E,MAAM,MAAM,iBAAiB,CAAC,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC,CAAA"}
@@ -1,12 +1,11 @@
1
- import { Module } from '@xyo-network/module-model';
2
1
  import { MongoDBModuleParams, MongoDBStorageClassLabels } from '@xyo-network/module-model-mongodb';
3
2
  import { BoundWitnessWithMongoMeta, PayloadWithMongoMeta } from '@xyo-network/payload-mongodb';
4
3
  import { BaseMongoSdk, BaseMongoSdkConfig } from '@xyo-network/sdk-xyo-mongo-js';
5
- export type AnyAbstractModule<TParams extends MongoDBModuleParams = MongoDBModuleParams> = abstract new (...args: any[]) => Module<TParams>;
4
+ import { AnyAbstractModule } from './AnyAbstractModule.ts';
6
5
  export declare const MongoDBModuleMixin: <TParams extends MongoDBModuleParams = import("@xylabs/object").BaseParamsFields & {
7
- account?: import(".store/@xyo-network-account-model-virtual-4dfb258538/package").AccountInstance | "random";
6
+ account?: import(".store/@xyo-network-account-model-virtual-2eddd29fdf/package").AccountInstance | "random";
8
7
  addToResolvers?: boolean;
9
- additionalSigners?: import(".store/@xyo-network-account-model-virtual-4dfb258538/package").AccountInstance[];
8
+ additionalSigners?: import(".store/@xyo-network-account-model-virtual-2eddd29fdf/package").AccountInstance[];
10
9
  allowNameResolution?: boolean;
11
10
  config: import("@xylabs/object").DeepRestrictToStringKeys<{
12
11
  schema: import("@xyo-network/payload-model").Schema;
@@ -89,11 +88,11 @@ export declare const MongoDBModuleMixin: <TParams extends MongoDBModuleParams =
89
88
  emit<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventName: TEventName, eventArgs: import("@xyo-network/module-model").ModuleEventData<object>[TEventName]): Promise<void>;
90
89
  emitSerial<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventName: TEventName, eventArgs: import("@xyo-network/module-model").ModuleEventData<object>[TEventName]): Promise<void>;
91
90
  listenerCount(eventNames: keyof import("@xyo-network/module-model").ModuleEventData<object> | (keyof import("@xyo-network/module-model").ModuleEventData<object>)[]): number;
92
- off<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventNames: TEventName | TEventName[], listener: import(".store/@xyo-network-module-events-npm-3.7.1-7396da93c6/package").EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): void;
93
- offAny(listener: import(".store/@xyo-network-module-events-npm-3.7.1-7396da93c6/package").EventAnyListener | Promise<void>): void;
94
- on<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventNames: TEventName | TEventName[], listener: import(".store/@xyo-network-module-events-npm-3.7.1-7396da93c6/package").EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): import(".store/@xyo-network-module-events-npm-3.7.1-7396da93c6/package").EventUnsubscribeFunction;
95
- onAny(listener: import(".store/@xyo-network-module-events-npm-3.7.1-7396da93c6/package").EventAnyListener): import(".store/@xyo-network-module-events-npm-3.7.1-7396da93c6/package").EventUnsubscribeFunction;
96
- once<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventName: TEventName, listener: import(".store/@xyo-network-module-events-npm-3.7.1-7396da93c6/package").EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): import(".store/@xyo-network-module-events-npm-3.7.1-7396da93c6/package").EventUnsubscribeFunction;
91
+ off<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventNames: TEventName | TEventName[], listener: import(".store/@xyo-network-module-events-npm-3.8.0-7e0bbfb689/package").EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): void;
92
+ offAny(listener: import(".store/@xyo-network-module-events-npm-3.8.0-7e0bbfb689/package").EventAnyListener | Promise<void>): void;
93
+ on<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventNames: TEventName | TEventName[], listener: import(".store/@xyo-network-module-events-npm-3.8.0-7e0bbfb689/package").EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): import(".store/@xyo-network-module-events-npm-3.8.0-7e0bbfb689/package").EventUnsubscribeFunction;
94
+ onAny(listener: import(".store/@xyo-network-module-events-npm-3.8.0-7e0bbfb689/package").EventAnyListener): import(".store/@xyo-network-module-events-npm-3.8.0-7e0bbfb689/package").EventUnsubscribeFunction;
95
+ once<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventName: TEventName, listener: import(".store/@xyo-network-module-events-npm-3.8.0-7e0bbfb689/package").EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): import(".store/@xyo-network-module-events-npm-3.8.0-7e0bbfb689/package").EventUnsubscribeFunction;
97
96
  }) & {
98
97
  labels: MongoDBStorageClassLabels;
99
98
  }) & TModule;
@@ -1 +1 @@
1
- {"version":3,"file":"Module.d.ts","sourceRoot":"","sources":["../../src/Module.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAClD,OAAO,EACU,mBAAmB,EAAuB,yBAAyB,EACnF,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAC9F,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAQhF,MAAM,MAAM,iBAAiB,CAAC,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC,CAAA;AAc3I,eAAO,MAAM,kBAAkB,GAC7B,OAAO,SAAS,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GACnC,OAAO,SAAS,iBAAiB,CAAC,OAAO,CAAC,2CAE9B,OAAO,8BAlB6F,GAAG,EAAE;sBAuBjG,YAAY,CAAC,yBAAyB,CAAC,GAAG,SAAS;iBACxD,YAAY,CAAC,oBAAoB,CAAC,GAAG,SAAS;oCAE9B,kBAAkB;;;+BAmBvB,kBAAkB;;IAe1C;;;OAGG;qBACoB,OAAO,CAAC,IAAI,CAAC;;;;;;;;sRAhE8F,CAAC,6DAErH,CAAC;4RAQf,CAAH,6DAAyB,CAAA;;;;;;;;;;;;;;;YAkEzB,CAAA"}
1
+ {"version":3,"file":"Module.d.ts","sourceRoot":"","sources":["../../src/Module.ts"],"names":[],"mappings":"AAGA,OAAO,EACU,mBAAmB,EAAuB,yBAAyB,EACnF,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAC9F,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAGhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAiB1D,eAAO,MAAM,kBAAkB,GAC7B,OAAO,SAAS,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GACnC,OAAO,SAAS,iBAAiB,CAAC,OAAO,CAAC,2CAE9B,OAAO;sBAKC,YAAY,CAAC,yBAAyB,CAAC,GAAG,SAAS;iBACxD,YAAY,CAAC,oBAAoB,CAAC,GAAG,SAAS;oCAE9B,kBAAkB;;;+BAmBvB,kBAAkB;;IAe1C;;;OAGG;qBACoB,OAAO,CAAC,IAAI,CAAC;;;;;;;;sRAtDpC,CAAF,6DAAwB,CAAC;4RAMA,CAAC,6DAAwB,CAAC;;;;;;;;;;;;;;;YA4DpD,CAAA"}
@@ -0,0 +1,90 @@
1
+ import { MongoDBModuleParamsV2, MongoDBStorageClassLabels } from '@xyo-network/module-model-mongodb';
2
+ import { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb';
3
+ import { BaseMongoSdk, BaseMongoSdkConfig } from '@xyo-network/sdk-xyo-mongo-js';
4
+ import { AnyAbstractModule } from './AnyAbstractModule.ts';
5
+ export declare const MongoDBModuleMixinV2: <TParams extends MongoDBModuleParamsV2 = import("@xylabs/object").BaseParamsFields & {
6
+ account?: import(".store/@xyo-network-account-model-virtual-2eddd29fdf/package").AccountInstance | "random";
7
+ addToResolvers?: boolean;
8
+ additionalSigners?: import(".store/@xyo-network-account-model-virtual-2eddd29fdf/package").AccountInstance[];
9
+ allowNameResolution?: boolean;
10
+ config: import("@xylabs/object").DeepRestrictToStringKeys<{
11
+ schema: import("@xyo-network/payload-model").Schema;
12
+ readonly archivist?: import("@xyo-network/module-model").ModuleIdentifier | undefined;
13
+ readonly archiving?: {
14
+ readonly archivists?: string[] | undefined;
15
+ readonly queries?: string[] | undefined;
16
+ } | undefined;
17
+ readonly allowedQueries?: string[] | undefined;
18
+ readonly consoleLogger?: import(".store/@xylabs-logger-npm-4.5.1-a411051254/package").LogLevel | undefined;
19
+ readonly labels?: {
20
+ [x: string]: string | undefined;
21
+ } | undefined;
22
+ readonly name?: import("@xyo-network/module-model").ModuleName | undefined;
23
+ readonly paging?: {
24
+ [x: string]: {
25
+ size?: number | undefined;
26
+ };
27
+ } | undefined;
28
+ readonly retry?: {
29
+ backoff?: number | undefined;
30
+ interval?: number | undefined;
31
+ retries?: number | undefined;
32
+ } | undefined;
33
+ readonly security?: {
34
+ readonly allowAnonymous?: boolean | undefined;
35
+ readonly allowed?: {
36
+ [x: string]: (Lowercase<string> | Lowercase<string>[])[];
37
+ } | undefined;
38
+ readonly disallowed?: {
39
+ [x: string]: Lowercase<string>[];
40
+ } | undefined;
41
+ } | undefined;
42
+ readonly sign?: boolean | undefined;
43
+ readonly storeQueries?: boolean | undefined;
44
+ readonly timestamp?: boolean | undefined;
45
+ payloadSdkConfig?: {
46
+ closeDelay?: number | undefined;
47
+ collection?: string | undefined;
48
+ maxPoolSize?: number | undefined;
49
+ } | undefined;
50
+ }>;
51
+ ephemeralQueryAccountEnabled?: boolean;
52
+ moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
53
+ } & {
54
+ jobQueue?: import("@xyo-network/node-core-model").JobQueue;
55
+ payloadSdkConfig?: (import("@xyo-network/sdk-xyo-mongo-js").BaseMongoSdkPrivateConfig & Partial<import("@xyo-network/sdk-xyo-mongo-js").BaseMongoSdkPublicConfig>) | undefined;
56
+ }, TModule extends AnyAbstractModule<TParams> = AnyAbstractModule<TParams>>(ModuleBase: TModule) => ((abstract new (...args: any[]) => {
57
+ _payloadSdk: BaseMongoSdk<PayloadWithMongoMeta> | undefined;
58
+ readonly jobQueue: import("@xyo-network/node-core-model").JobQueue;
59
+ readonly payloadSdkConfig: BaseMongoSdkConfig;
60
+ readonly payloads: BaseMongoSdk<PayloadWithMongoMeta>;
61
+ /**
62
+ * Ensures any indexes specified within the config are created. This method should be idempotent
63
+ * allowing for multiple calls without causing errors while ensuring the desired state.
64
+ */
65
+ ensureIndexes(): Promise<void>;
66
+ address: import("@xylabs/hex").Address;
67
+ config: TParams["config"];
68
+ id: string;
69
+ modName?: import("@xyo-network/module-model").ModuleName;
70
+ params: TParams;
71
+ previousHash: () => import(".store/@xylabs-promise-npm-4.5.1-97d36b712b/package").Promisable<string | undefined>;
72
+ queries: string[];
73
+ query: <T extends import("@xyo-network/boundwitness-model").QueryBoundWitness = import("@xyo-network/boundwitness-model").QueryBoundWitness, TConf extends import("@xyo-network/module-model").ModuleConfig = import("@xyo-network/module-model").ModuleConfig>(query: T, payloads?: import("@xyo-network/payload-model").Payload[], queryConfig?: TConf) => import(".store/@xylabs-promise-npm-4.5.1-97d36b712b/package").Promisable<import("@xyo-network/module-model").ModuleQueryResult>;
74
+ queryable: <T extends import("@xyo-network/boundwitness-model").QueryBoundWitness = import("@xyo-network/boundwitness-model").QueryBoundWitness, TConf_1 extends import("@xyo-network/module-model").ModuleConfig = import("@xyo-network/module-model").ModuleConfig>(query: T, payloads?: import("@xyo-network/payload-model").Payload[], queryConfig?: TConf_1) => import(".store/@xylabs-promise-npm-4.5.1-97d36b712b/package").Promisable<boolean>;
75
+ start?: () => import(".store/@xylabs-promise-npm-4.5.1-97d36b712b/package").Promisable<boolean>;
76
+ stop?: () => import(".store/@xylabs-promise-npm-4.5.1-97d36b712b/package").Promisable<boolean>;
77
+ eventData: import("@xyo-network/module-model").ModuleEventData<object>;
78
+ clearListeners(eventNames: keyof import("@xyo-network/module-model").ModuleEventData<object> | (keyof import("@xyo-network/module-model").ModuleEventData<object>)[]): void;
79
+ emit<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventName: TEventName, eventArgs: import("@xyo-network/module-model").ModuleEventData<object>[TEventName]): Promise<void>;
80
+ emitSerial<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventName: TEventName, eventArgs: import("@xyo-network/module-model").ModuleEventData<object>[TEventName]): Promise<void>;
81
+ listenerCount(eventNames: keyof import("@xyo-network/module-model").ModuleEventData<object> | (keyof import("@xyo-network/module-model").ModuleEventData<object>)[]): number;
82
+ off<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventNames: TEventName | TEventName[], listener: import(".store/@xyo-network-module-events-npm-3.8.0-7e0bbfb689/package").EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): void;
83
+ offAny(listener: import(".store/@xyo-network-module-events-npm-3.8.0-7e0bbfb689/package").EventAnyListener | Promise<void>): void;
84
+ on<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventNames: TEventName | TEventName[], listener: import(".store/@xyo-network-module-events-npm-3.8.0-7e0bbfb689/package").EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): import(".store/@xyo-network-module-events-npm-3.8.0-7e0bbfb689/package").EventUnsubscribeFunction;
85
+ onAny(listener: import(".store/@xyo-network-module-events-npm-3.8.0-7e0bbfb689/package").EventAnyListener): import(".store/@xyo-network-module-events-npm-3.8.0-7e0bbfb689/package").EventUnsubscribeFunction;
86
+ once<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventName: TEventName, listener: import(".store/@xyo-network-module-events-npm-3.8.0-7e0bbfb689/package").EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): import(".store/@xyo-network-module-events-npm-3.8.0-7e0bbfb689/package").EventUnsubscribeFunction;
87
+ }) & {
88
+ labels: MongoDBStorageClassLabels;
89
+ }) & TModule;
90
+ //# sourceMappingURL=ModuleV2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModuleV2.d.ts","sourceRoot":"","sources":["../../src/ModuleV2.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,qBAAqB,EAAwC,yBAAyB,EACvF,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAGhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAiB1D,eAAO,MAAM,oBAAoB,GAC/B,OAAO,SAAS,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GACrC,OAAO,SAAS,iBAAiB,CAAC,OAAO,CAAC,2CAE9B,OAAO;iBAKJ,YAAY,CAAC,oBAAoB,CAAC,GAAG,SAAS;;+BAMnC,kBAAkB;;IAe1C;;;OAGG;qBACoB,OAAO,CAAC,IAAI,CAAC;;;;;;;;sRAtCd,CAAA,6DAAwB,CAAC;4RAMJ,CAAA,6DAAwB,CAAC;;;;;;;;;;;;;;;YAyCvE,CAAA"}
@@ -5,5 +5,6 @@ export * from './Defaults.js';
5
5
  export * from './IndexDescription.js';
6
6
  export * from './Indexes/index.js';
7
7
  export * from './Module.js';
8
+ export * from './ModuleV2.ts';
8
9
  export * from './util/index.js';
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA"}
@@ -171,6 +171,88 @@ var ensureIndexesExistOnCollection = async (sdk, configIndexes) => {
171
171
  });
172
172
  };
173
173
 
174
+ // src/ModuleV2.ts
175
+ import { assertEx as assertEx3 } from "@xylabs/assert";
176
+ import { merge as merge2 } from "@xylabs/lodash";
177
+ import { staticImplements as staticImplements2 } from "@xylabs/static-implements";
178
+ import {
179
+ MongoDBStorageClassLabels as MongoDBStorageClassLabels2
180
+ } from "@xyo-network/module-model-mongodb";
181
+ import { BaseMongoSdk as BaseMongoSdk3 } from "@xyo-network/sdk-xyo-mongo-js";
182
+ var standardIndexes2 = [
183
+ {
184
+ name: "UX__hash",
185
+ key: { _hash: 1 },
186
+ unique: true
187
+ },
188
+ {
189
+ name: "IX__dataHash",
190
+ key: { _dataHash: 1 },
191
+ unique: false
192
+ },
193
+ {
194
+ name: "UX__sequence",
195
+ key: { _sequence: 1 },
196
+ unique: true
197
+ }
198
+ ];
199
+ var MongoDBModuleMixinV2 = (ModuleBase) => {
200
+ let MongoModuleBase = class extends ModuleBase {
201
+ _payloadSdk;
202
+ get jobQueue() {
203
+ return assertEx3(this.params.jobQueue, () => "MongoDBModule Error: jobQueue required for this module but is not defined");
204
+ }
205
+ get payloadSdkConfig() {
206
+ const config = { collection: COLLECTIONS.Payloads, ...getBaseMongoSdkPrivateConfig() };
207
+ return merge2(
208
+ config,
209
+ this.params.payloadSdkConfig,
210
+ this.config.payloadSdkConfig,
211
+ { collection: this.config.payloadSdkConfig?.collection ?? this.params.payloadSdkConfig?.collection ?? COLLECTIONS.Payloads }
212
+ );
213
+ }
214
+ get payloads() {
215
+ this._payloadSdk = this._payloadSdk ?? new BaseMongoSdk3(this.payloadSdkConfig);
216
+ return assertEx3(this._payloadSdk);
217
+ }
218
+ /**
219
+ * Ensures any indexes specified within the config are created. This method should be idempotent
220
+ * allowing for multiple calls without causing errors while ensuring the desired state.
221
+ */
222
+ async ensureIndexes() {
223
+ const configIndexes = this.config?.storage?.indexes ?? [];
224
+ const payloadCollectionName = this.payloadSdkConfig.collection;
225
+ const payloadStandardIndexes = standardIndexes2.map((ix) => ({ ...ix, name: `${payloadCollectionName}.${ix.name}` }));
226
+ await ensureIndexesExistOnCollection2(this.payloads, [...payloadStandardIndexes, ...configIndexes]);
227
+ }
228
+ };
229
+ __publicField(MongoModuleBase, "labels", MongoDBStorageClassLabels2);
230
+ MongoModuleBase = __decorateClass([
231
+ staticImplements2()
232
+ ], MongoModuleBase);
233
+ return MongoModuleBase;
234
+ };
235
+ var ensureIndexesExistOnCollection2 = async (sdk, configIndexes) => {
236
+ await sdk.useCollection(async (collection) => {
237
+ const collectionName = collection.collectionName.toLowerCase();
238
+ const indexes = configIndexes.filter((ix) => ix?.name?.toLowerCase().startsWith(collectionName));
239
+ if (indexes.length === 0) return;
240
+ for (const ix of indexes) {
241
+ try {
242
+ await collection.createIndexes([ix]);
243
+ } catch (error) {
244
+ const mongoServerError = error;
245
+ const { codeName } = mongoServerError;
246
+ if (codeName === "IndexKeySpecsConflict" || codeName === "IndexOptionsConflict") {
247
+ continue;
248
+ }
249
+ console.error(`Error creating index ${ix.name} for collection ${collectionName}: ${error}`);
250
+ throw error;
251
+ }
252
+ }
253
+ });
254
+ };
255
+
174
256
  // src/util/dbProperty.ts
175
257
  var escapeChar = "#";
176
258
  var toDbProperty = (value) => value.replaceAll(".", escapeChar);
@@ -183,6 +265,7 @@ export {
183
265
  DefaultMaxTimeMS,
184
266
  DefaultOrder,
185
267
  MongoDBModuleMixin,
268
+ MongoDBModuleMixinV2,
186
269
  escapeChar,
187
270
  fromDbProperty,
188
271
  getBaseMongoSdk,
@@ -1 +1 @@
1
- {"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/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 '@xylabs/assert'\nimport type { BaseMongoSdkPrivateConfig } from '@xyo-network/sdk-xyo-mongo-js'\nimport { BaseMongoSdk } from '@xyo-network/sdk-xyo-mongo-js'\nimport type { Document } from 'mongodb'\n\nimport { getMongoDBConfig } from './getMongoDBConfig.js'\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 if (process.env.MONGO_CONNECTION_STRING) {\n env.MONGO_CONNECTION_STRING = process.env.MONGO_CONNECTION_STRING\n }\n if (process.env.MONGO_DOMAIN) {\n env.MONGO_DATABASE = process.env.MONGO_DATABASE\n env.MONGO_DOMAIN = process.env.MONGO_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 '@xylabs/exists'\n\nimport { getMongoDBConfig } from './getMongoDBConfig.js'\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 } from '@xylabs/assert'\nimport { merge } from '@xylabs/lodash'\nimport { staticImplements } from '@xylabs/static-implements'\nimport { Module } from '@xyo-network/module-model'\nimport {\n MongoDBModule, MongoDBModuleParams, MongoDBModuleStatic, MongoDBStorageClassLabels,\n} from '@xyo-network/module-model-mongodb'\nimport { BoundWitnessWithMongoMeta, PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport { BaseMongoSdk, BaseMongoSdkConfig } from '@xyo-network/sdk-xyo-mongo-js'\nimport { MongoServerError } from 'mongodb'\n\nimport { COLLECTIONS } from './Collections.js'\nimport { getBaseMongoSdkPrivateConfig } from './config/index.js'\nimport { IndexDescription } from './IndexDescription.js'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyAbstractModule<TParams extends MongoDBModuleParams = MongoDBModuleParams> = abstract new (...args: any[]) => Module<TParams>\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<MongoDBModuleStatic>()\n abstract class MongoModuleBase extends ModuleBase implements MongoDBModule {\n static labels = MongoDBStorageClassLabels\n _boundWitnessSdk: BaseMongoSdk<BoundWitnessWithMongoMeta> | undefined\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 = this._boundWitnessSdk ?? new BaseMongoSdk<BoundWitnessWithMongoMeta>(this.boundWitnessSdkConfig)\n return assertEx(this._boundWitnessSdk)\n }\n\n get 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 = 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))\n if (indexes.length === 0) return\n for (const ix of indexes) {\n try {\n await collection.createIndexes([ix])\n } catch (error) {\n const mongoServerError = error as MongoServerError\n const { codeName } = 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}: ${error}`)\n throw error\n }\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"]}
1
+ {"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/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 '@xylabs/assert'\nimport type { BaseMongoSdkPrivateConfig } from '@xyo-network/sdk-xyo-mongo-js'\nimport { BaseMongoSdk } from '@xyo-network/sdk-xyo-mongo-js'\nimport type { Document } from 'mongodb'\n\nimport { getMongoDBConfig } from './getMongoDBConfig.js'\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 if (process.env.MONGO_CONNECTION_STRING) {\n env.MONGO_CONNECTION_STRING = process.env.MONGO_CONNECTION_STRING\n }\n if (process.env.MONGO_DOMAIN) {\n env.MONGO_DATABASE = process.env.MONGO_DATABASE\n env.MONGO_DOMAIN = process.env.MONGO_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 '@xylabs/exists'\n\nimport { getMongoDBConfig } from './getMongoDBConfig.js'\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 } from '@xylabs/assert'\nimport { merge } from '@xylabs/lodash'\nimport { staticImplements } from '@xylabs/static-implements'\nimport {\n MongoDBModule, MongoDBModuleParams, MongoDBModuleStatic, MongoDBStorageClassLabels,\n} from '@xyo-network/module-model-mongodb'\nimport { BoundWitnessWithMongoMeta, PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport { BaseMongoSdk, BaseMongoSdkConfig } from '@xyo-network/sdk-xyo-mongo-js'\nimport { MongoServerError } from 'mongodb'\n\nimport { AnyAbstractModule } from './AnyAbstractModule.ts'\nimport { COLLECTIONS } from './Collections.js'\nimport { getBaseMongoSdkPrivateConfig } from './config/index.js'\nimport { IndexDescription } from './IndexDescription.js'\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<MongoDBModuleStatic>()\n abstract class MongoModuleBase extends ModuleBase implements MongoDBModule {\n static labels = MongoDBStorageClassLabels\n _boundWitnessSdk: BaseMongoSdk<BoundWitnessWithMongoMeta> | undefined\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 = this._boundWitnessSdk ?? new BaseMongoSdk<BoundWitnessWithMongoMeta>(this.boundWitnessSdkConfig)\n return assertEx(this._boundWitnessSdk)\n }\n\n get 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 = 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))\n if (indexes.length === 0) return\n for (const ix of indexes) {\n try {\n await collection.createIndexes([ix])\n } catch (error) {\n const mongoServerError = error as MongoServerError\n const { codeName } = 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}: ${error}`)\n throw error\n }\n }\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport { merge } from '@xylabs/lodash'\nimport { staticImplements } from '@xylabs/static-implements'\nimport {\n MongoDBModuleParamsV2, MongoDBModuleStatic, MongoDBModuleV2, MongoDBStorageClassLabels,\n} from '@xyo-network/module-model-mongodb'\nimport { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport { BaseMongoSdk, BaseMongoSdkConfig } from '@xyo-network/sdk-xyo-mongo-js'\nimport { MongoServerError } from 'mongodb'\n\nimport { AnyAbstractModule } from './AnyAbstractModule.ts'\nimport { COLLECTIONS } from './Collections.ts'\nimport { getBaseMongoSdkPrivateConfig } from './config/index.ts'\nimport { IndexDescription } from './IndexDescription.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 labels = MongoDBStorageClassLabels\n _payloadSdk: BaseMongoSdk<PayloadWithMongoMeta> | undefined\n\n get 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 = 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 payloadCollectionName = this.payloadSdkConfig.collection\n\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>,\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))\n if (indexes.length === 0) return\n for (const ix of indexes) {\n try {\n await collection.createIndexes([ix])\n } catch (error) {\n const mongoServerError = error as MongoServerError\n const { codeName } = 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}: ${error}`)\n throw error\n }\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","merge","staticImplements","MongoDBStorageClassLabels","BaseMongoSdk","standardIndexes","assertEx","merge","BaseMongoSdk","ensureIndexesExistOnCollection","MongoDBStorageClassLabels","staticImplements"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/module-abstract-mongodb",
3
- "version": "3.3.0",
3
+ "version": "3.3.1",
4
4
  "description": "Primary SDK for using XYO Protocol 2.0",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -41,11 +41,11 @@
41
41
  "@xylabs/exists": "^4.5.1",
42
42
  "@xylabs/lodash": "^4.5.1",
43
43
  "@xylabs/static-implements": "^4.5.1",
44
- "@xyo-network/module-model": "^3.7.1",
45
- "@xyo-network/module-model-mongodb": "^3.3.0",
46
- "@xyo-network/payload-mongodb": "^3.3.0",
47
- "@xyo-network/sdk-xyo-mongo-js": "^3.3.0",
48
- "mongodb": "~6.12.0"
44
+ "@xyo-network/module-model": "^3.8.0",
45
+ "@xyo-network/module-model-mongodb": "^3.3.1",
46
+ "@xyo-network/payload-mongodb": "^3.3.1",
47
+ "@xyo-network/sdk-xyo-mongo-js": "^3.3.1",
48
+ "mongodb": "~6.13.0"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@xylabs/ts-scripts-yarn3": "^4.2.6",
@@ -0,0 +1,5 @@
1
+ import type { Module } from '@xyo-network/module-model'
2
+ import type { MongoDBModuleParams } from '@xyo-network/module-model-mongodb'
3
+
4
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+ export type AnyAbstractModule<TParams extends MongoDBModuleParams = MongoDBModuleParams> = abstract new (...args: any[]) => Module<TParams>
package/src/Module.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { assertEx } from '@xylabs/assert'
2
2
  import { merge } from '@xylabs/lodash'
3
3
  import { staticImplements } from '@xylabs/static-implements'
4
- import { Module } from '@xyo-network/module-model'
5
4
  import {
6
5
  MongoDBModule, MongoDBModuleParams, MongoDBModuleStatic, MongoDBStorageClassLabels,
7
6
  } from '@xyo-network/module-model-mongodb'
@@ -9,13 +8,11 @@ import { BoundWitnessWithMongoMeta, PayloadWithMongoMeta } from '@xyo-network/pa
9
8
  import { BaseMongoSdk, BaseMongoSdkConfig } from '@xyo-network/sdk-xyo-mongo-js'
10
9
  import { MongoServerError } from 'mongodb'
11
10
 
11
+ import { AnyAbstractModule } from './AnyAbstractModule.ts'
12
12
  import { COLLECTIONS } from './Collections.js'
13
13
  import { getBaseMongoSdkPrivateConfig } from './config/index.js'
14
14
  import { IndexDescription } from './IndexDescription.js'
15
15
 
16
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
- export type AnyAbstractModule<TParams extends MongoDBModuleParams = MongoDBModuleParams> = abstract new (...args: any[]) => Module<TParams>
18
-
19
16
  const standardIndexes: IndexDescription[] = [
20
17
  {
21
18
  name: 'IX__hash', key: { _hash: 1 }, unique: false,
@@ -0,0 +1,104 @@
1
+ import { assertEx } from '@xylabs/assert'
2
+ import { merge } from '@xylabs/lodash'
3
+ import { staticImplements } from '@xylabs/static-implements'
4
+ import {
5
+ MongoDBModuleParamsV2, MongoDBModuleStatic, MongoDBModuleV2, MongoDBStorageClassLabels,
6
+ } from '@xyo-network/module-model-mongodb'
7
+ import { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'
8
+ import { BaseMongoSdk, BaseMongoSdkConfig } from '@xyo-network/sdk-xyo-mongo-js'
9
+ import { MongoServerError } from 'mongodb'
10
+
11
+ import { AnyAbstractModule } from './AnyAbstractModule.ts'
12
+ import { COLLECTIONS } from './Collections.ts'
13
+ import { getBaseMongoSdkPrivateConfig } from './config/index.ts'
14
+ import { IndexDescription } from './IndexDescription.ts'
15
+
16
+ const standardIndexes: IndexDescription[] = [
17
+ {
18
+ name: 'UX__hash', key: { _hash: 1 }, unique: true,
19
+ },
20
+ {
21
+ name: 'IX__dataHash', key: { _dataHash: 1 }, unique: false,
22
+ },
23
+ {
24
+ name: 'UX__sequence', key: { _sequence: 1 }, unique: true,
25
+ },
26
+ ]
27
+
28
+ export const MongoDBModuleMixinV2 = <
29
+ TParams extends MongoDBModuleParamsV2 = MongoDBModuleParamsV2,
30
+ TModule extends AnyAbstractModule<TParams> = AnyAbstractModule<TParams>,
31
+ >(
32
+ ModuleBase: TModule,
33
+ ) => {
34
+ @staticImplements<MongoDBModuleStatic>()
35
+ abstract class MongoModuleBase extends ModuleBase implements MongoDBModuleV2 {
36
+ static labels = MongoDBStorageClassLabels
37
+ _payloadSdk: BaseMongoSdk<PayloadWithMongoMeta> | undefined
38
+
39
+ get jobQueue() {
40
+ return assertEx(this.params.jobQueue, () => 'MongoDBModule Error: jobQueue required for this module but is not defined')
41
+ }
42
+
43
+ get payloadSdkConfig(): BaseMongoSdkConfig {
44
+ const config = { collection: COLLECTIONS.Payloads, ...getBaseMongoSdkPrivateConfig() }
45
+ return merge(
46
+ config,
47
+ this.params.payloadSdkConfig,
48
+ this.config.payloadSdkConfig,
49
+ { collection: this.config.payloadSdkConfig?.collection ?? this.params.payloadSdkConfig?.collection ?? COLLECTIONS.Payloads },
50
+ )
51
+ }
52
+
53
+ get payloads() {
54
+ this._payloadSdk = this._payloadSdk ?? new BaseMongoSdk<PayloadWithMongoMeta>(this.payloadSdkConfig)
55
+ return assertEx(this._payloadSdk)
56
+ }
57
+
58
+ /**
59
+ * Ensures any indexes specified within the config are created. This method should be idempotent
60
+ * allowing for multiple calls without causing errors while ensuring the desired state.
61
+ */
62
+ async ensureIndexes(): Promise<void> {
63
+ const configIndexes = (this.config as { storage?: { indexes?: IndexDescription[] } })?.storage?.indexes ?? []
64
+ const payloadCollectionName = this.payloadSdkConfig.collection
65
+
66
+ const payloadStandardIndexes = standardIndexes.map(ix => ({ ...ix, name: `${payloadCollectionName}.${ix.name}` }))
67
+ await ensureIndexesExistOnCollection(this.payloads, [...payloadStandardIndexes, ...configIndexes])
68
+ }
69
+ }
70
+ return MongoModuleBase
71
+ }
72
+
73
+ /**
74
+ * Ensures the specified indexes exist on the collection
75
+ * @param sdk The sdk to use for the collection
76
+ * @param configIndexes The indexes to ensure exist on the collection
77
+ */
78
+ const ensureIndexesExistOnCollection = async (
79
+ sdk: BaseMongoSdk<PayloadWithMongoMeta>,
80
+ configIndexes: IndexDescription[],
81
+ ) => {
82
+ await sdk.useCollection(async (collection) => {
83
+ const collectionName = collection.collectionName.toLowerCase()
84
+ const indexes = configIndexes.filter(ix => ix?.name?.toLowerCase().startsWith(collectionName))
85
+ if (indexes.length === 0) return
86
+ for (const ix of indexes) {
87
+ try {
88
+ await collection.createIndexes([ix])
89
+ } catch (error) {
90
+ const mongoServerError = error as MongoServerError
91
+ const { codeName } = mongoServerError
92
+ if (codeName === 'IndexKeySpecsConflict' || codeName === 'IndexOptionsConflict') {
93
+ // Index already exists which is fine OR index exists with another name which is fine
94
+ // TODO: For the latter case (IndexOptionsConflict) we could get into this case
95
+ // if we change the TTL an existing index. We currently don't support TTLs so
96
+ // we'll need to revisit this assumption if we do.
97
+ continue
98
+ }
99
+ console.error(`Error creating index ${ix.name} for collection ${collectionName}: ${error}`)
100
+ throw error
101
+ }
102
+ }
103
+ })
104
+ }
package/src/index.ts CHANGED
@@ -5,4 +5,5 @@ export * from './Defaults.js'
5
5
  export * from './IndexDescription.js'
6
6
  export * from './Indexes/index.js'
7
7
  export * from './Module.js'
8
+ export * from './ModuleV2.ts'
8
9
  export * from './util/index.js'