{
  "version": 3,
  "sources": ["../../src/modules/payloadset-plugin/createPlugin.ts", "../../src/modules/payloadset-plugin/Plugin.ts", "../../src/modules/payloadset-plugin/Resolver.ts"],
  "sourcesContent": ["import type { PayloadSetPayload } from '@xyo-network/sdk-protocol'\n\nimport type { DivinerModule } from '#diviner-model'\nimport type { WitnessModule } from '#witness-model'\n\nimport type {\n  PayloadSetDivinerPlugin, PayloadSetDualPlugin, PayloadSetWitnessPlugin,\n} from './Plugin.ts'\n\nexport const createPayloadSetDualPlugin = <TWitness extends WitnessModule = WitnessModule, TDiviner extends DivinerModule = DivinerModule>(\n  set: PayloadSetPayload,\n  plugin: Omit<PayloadSetDualPlugin<TWitness, TDiviner>, 'set'>,\n): PayloadSetDualPlugin<TWitness, TDiviner> => {\n  return {\n    ...plugin,\n    set,\n  }\n}\n\nexport const createPayloadSetWitnessPlugin = <TModule extends WitnessModule = WitnessModule>(\n  set: PayloadSetPayload,\n  plugin: Omit<PayloadSetWitnessPlugin<TModule>, 'set'>,\n): PayloadSetWitnessPlugin<TModule> => {\n  return {\n    ...plugin,\n    set,\n  }\n}\n\nexport const createPayloadSetDivinerPlugin = <TModule extends DivinerModule = DivinerModule>(\n  set: PayloadSetPayload,\n  plugin: Omit<PayloadSetDivinerPlugin<TModule>, 'set'>,\n): PayloadSetDivinerPlugin<TModule> => {\n  return {\n    ...plugin,\n    set,\n  }\n}\n", "import type { Promisable, Validator } from '@ariestools/sdk'\nimport type {\n  PayloadSetPayload, QueryBoundWitness, QueryBoundWitnessWrapper,\n} from '@xyo-network/sdk-protocol'\n\nimport type { DivinerModule } from '#diviner-model'\nimport type { WitnessModule } from '#witness-model'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PayloadSetPluginFunc = () => PayloadSetPlugin<any>\n\nexport interface PayloadSetDivinerField<TDiviner extends DivinerModule = DivinerModule> {\n  diviner: (params: TDiviner['params']) => Promisable<TDiviner>\n  params?: TDiviner['params']\n}\n\nexport interface PayloadSetWitnessField<TWitness extends WitnessModule = WitnessModule> {\n  params?: TWitness['params']\n  witness: (params: TWitness['params']) => Promisable<TWitness>\n}\n\nexport interface PayloadSetPluginShared {\n  set: PayloadSetPayload\n  validate?: (boundwitness: QueryBoundWitness) => Validator<QueryBoundWitness>\n  wrap?: (boundwitness: QueryBoundWitness) => QueryBoundWitnessWrapper\n}\n\nexport type PayloadSetWitnessPlugin<TWitness extends WitnessModule = WitnessModule> = PayloadSetPluginShared & PayloadSetWitnessField<TWitness>\n\nexport type PayloadSetDivinerPlugin<TDiviner extends DivinerModule = DivinerModule> = PayloadSetPluginShared & PayloadSetDivinerField<TDiviner>\n\nexport type PayloadSetDualPlugin<\n  TWitness extends WitnessModule = WitnessModule,\n  TDiviner extends DivinerModule = DivinerModule,\n> = PayloadSetWitnessPlugin<TWitness> & PayloadSetDivinerPlugin<TDiviner>\n\nexport type PayloadSetPlugin<TModule extends WitnessModule | DivinerModule = WitnessModule | DivinerModule>\n  = TModule extends WitnessModule ? PayloadSetWitnessPlugin<TModule>\n    : TModule extends DivinerModule ? PayloadSetDivinerPlugin<TModule>\n      : never\n\nexport const isPayloadSetWitnessPlugin = (plugin: PayloadSetPlugin): plugin is PayloadSetWitnessPlugin => {\n  return (plugin as PayloadSetWitnessPlugin)?.witness != undefined\n}\n\nexport const tryAsPayloadSetWitnessPlugin = (payloadSetPlugin: PayloadSetPlugin): PayloadSetWitnessPlugin | undefined => {\n  return isPayloadSetWitnessPlugin(payloadSetPlugin) ? payloadSetPlugin : undefined\n}\n\nexport const isPayloadSetDivinerPlugin = (plugin: PayloadSetPlugin): plugin is PayloadSetDivinerPlugin => {\n  return (plugin as PayloadSetDivinerPlugin)?.diviner != undefined\n}\n\nexport const tryAsPayloadSetDivinerPlugin = (payloadSetPlugin: PayloadSetPlugin): PayloadSetDivinerPlugin | undefined => {\n  return isPayloadSetDivinerPlugin(payloadSetPlugin) ? payloadSetPlugin : undefined\n}\n", "import { forget, isString } from '@ariestools/sdk'\nimport type { PayloadSetPayload } from '@xyo-network/sdk-protocol'\nimport { PayloadBuilder } from '@xyo-network/sdk-protocol'\n\nimport type { DivinerModule, DivinerParams } from '#diviner-model'\nimport type { WitnessModule, WitnessParams } from '#witness-model'\n\nimport type {\n  PayloadSetDivinerPlugin,\n  PayloadSetPlugin,\n  PayloadSetWitnessPlugin,\n} from './Plugin.ts'\nimport {\n  isPayloadSetDivinerPlugin,\n  isPayloadSetWitnessPlugin,\n  tryAsPayloadSetDivinerPlugin,\n  tryAsPayloadSetWitnessPlugin,\n} from './Plugin.ts'\n\nexport class PayloadSetPluginResolver {\n  protected _params: Record<string, PayloadSetPlugin['params'] | undefined> = {}\n  protected _plugins: Record<string, PayloadSetPlugin> = {}\n\n  constructor(\n    /** @param plugins The initial set of plugins */\n    plugins?: PayloadSetPlugin[],\n  ) {\n    for (const plugin of plugins ?? []) forget(this.register(plugin))\n  }\n\n  async diviner(set: PayloadSetPayload): Promise<DivinerModule | undefined>\n  async diviner(set: string): Promise<DivinerModule | undefined>\n  async diviner(set: string | PayloadSetPayload): Promise<DivinerModule | undefined> {\n    const setHash = typeof set === 'string' ? set : await PayloadBuilder.dataHash(set)\n    return await tryAsPayloadSetDivinerPlugin(this._plugins[setHash])?.diviner?.(this._params[setHash] as DivinerParams)\n  }\n\n  diviners(): PayloadSetDivinerPlugin[] {\n    return Object.values(this._plugins).filter(isPayloadSetDivinerPlugin)\n  }\n\n  params(): (PayloadSetPlugin['params'] | undefined)[] {\n    return Object.values(this._params)\n  }\n\n  plugins(): PayloadSetPlugin[] {\n    return Object.values(this._plugins)\n  }\n\n  async register<TModule extends WitnessModule | DivinerModule>(plugin: PayloadSetPlugin<TModule>, params?: TModule['params']): Promise<this> {\n    const setHash = await PayloadBuilder.dataHash(plugin.set)\n    this._plugins[setHash] = plugin\n    this._params[setHash] = params\n    return this\n  }\n\n  async resolve(set?: PayloadSetPayload): Promise<PayloadSetPlugin | undefined>\n  async resolve(set?: string): Promise<PayloadSetPlugin | undefined>\n  async resolve(set?: string | PayloadSetPayload): Promise<PayloadSetPlugin | undefined> {\n    const setHash\n      = typeof set === 'string'\n        ? set\n        : set\n          ? await PayloadBuilder.dataHash(set)\n          : undefined\n    return isString(setHash) ? this._plugins[setHash] : undefined\n  }\n\n  sets(): PayloadSetPayload[] {\n    return Object.values(this._plugins).map(value => value.set)\n  }\n\n  async witness(set: PayloadSetPayload): Promise<WitnessModule | undefined>\n  async witness(set: string): Promise<WitnessModule | undefined>\n  async witness(set: string | PayloadSetPayload): Promise<WitnessModule | undefined> {\n    const setHash = typeof set === 'string' ? set : await PayloadBuilder.dataHash(set)\n    return await tryAsPayloadSetWitnessPlugin(this._plugins[setHash])?.witness?.(this._params[setHash] as WitnessParams)\n  }\n\n  witnesses(): PayloadSetWitnessPlugin[] {\n    return Object.values(this._plugins).filter(isPayloadSetWitnessPlugin)\n  }\n}\n"],
  "mappings": ";AASO,IAAM,6BAA6B,CACxC,KACA,WAC6C;AAC7C,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,EACF;AACF;AAEO,IAAM,gCAAgC,CAC3C,KACA,WACqC;AACrC,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,EACF;AACF;AAEO,IAAM,gCAAgC,CAC3C,KACA,WACqC;AACrC,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,EACF;AACF;;;ACIO,IAAM,4BAA4B,CAAC,WAAgE;AACxG,SAAQ,QAAoC,WAAW;AACzD;AAEO,IAAM,+BAA+B,CAAC,qBAA4E;AACvH,SAAO,0BAA0B,gBAAgB,IAAI,mBAAmB;AAC1E;AAEO,IAAM,4BAA4B,CAAC,WAAgE;AACxG,SAAQ,QAAoC,WAAW;AACzD;AAEO,IAAM,+BAA+B,CAAC,qBAA4E;AACvH,SAAO,0BAA0B,gBAAgB,IAAI,mBAAmB;AAC1E;;;ACvDA,SAAS,QAAQ,gBAAgB;AAEjC,SAAS,sBAAsB;AAiBxB,IAAM,2BAAN,MAA+B;AAAA,EAC1B,UAAkE,CAAC;AAAA,EACnE,WAA6C,CAAC;AAAA,EAExD,YAEE,SACA;AACA,eAAW,UAAU,WAAW,CAAC,EAAG,QAAO,KAAK,SAAS,MAAM,CAAC;AAAA,EAClE;AAAA,EAIA,MAAM,QAAQ,KAAqE;AACjF,UAAM,UAAU,OAAO,QAAQ,WAAW,MAAM,MAAM,eAAe,SAAS,GAAG;AACjF,WAAO,MAAM,6BAA6B,KAAK,SAAS,OAAO,CAAC,GAAG,UAAU,KAAK,QAAQ,OAAO,CAAkB;AAAA,EACrH;AAAA,EAEA,WAAsC;AACpC,WAAO,OAAO,OAAO,KAAK,QAAQ,EAAE,OAAO,yBAAyB;AAAA,EACtE;AAAA,EAEA,SAAqD;AACnD,WAAO,OAAO,OAAO,KAAK,OAAO;AAAA,EACnC;AAAA,EAEA,UAA8B;AAC5B,WAAO,OAAO,OAAO,KAAK,QAAQ;AAAA,EACpC;AAAA,EAEA,MAAM,SAAwD,QAAmC,QAA2C;AAC1I,UAAM,UAAU,MAAM,eAAe,SAAS,OAAO,GAAG;AACxD,SAAK,SAAS,OAAO,IAAI;AACzB,SAAK,QAAQ,OAAO,IAAI;AACxB,WAAO;AAAA,EACT;AAAA,EAIA,MAAM,QAAQ,KAAyE;AACrF,UAAM,UACF,OAAO,QAAQ,WACb,MACA,MACE,MAAM,eAAe,SAAS,GAAG,IACjC;AACR,WAAO,SAAS,OAAO,IAAI,KAAK,SAAS,OAAO,IAAI;AAAA,EACtD;AAAA,EAEA,OAA4B;AAC1B,WAAO,OAAO,OAAO,KAAK,QAAQ,EAAE,IAAI,WAAS,MAAM,GAAG;AAAA,EAC5D;AAAA,EAIA,MAAM,QAAQ,KAAqE;AACjF,UAAM,UAAU,OAAO,QAAQ,WAAW,MAAM,MAAM,eAAe,SAAS,GAAG;AACjF,WAAO,MAAM,6BAA6B,KAAK,SAAS,OAAO,CAAC,GAAG,UAAU,KAAK,QAAQ,OAAO,CAAkB;AAAA,EACrH;AAAA,EAEA,YAAuC;AACrC,WAAO,OAAO,OAAO,KAAK,QAAQ,EAAE,OAAO,yBAAyB;AAAA,EACtE;AACF;",
  "names": []
}
