{"version":3,"sources":["../../src/partykit/index.ts","../../src/connection-from-store.ts","../../src/partykit/gateway.ts"],"sourcesContent":["import { ConnectFunction, connectionFactory, makeKeyBagUrlExtractable } from \"../connection-from-store.js\";\nimport { bs, Database } from \"@fireproof/core\";\nimport { registerPartyKitStoreProtocol } from \"./gateway.js\";\nimport { BuildURI, KeyedResolvOnce, runtimeFn } from \"@adviser/cement\";\n\n// Usage:\n//\n// import { useFireproof } from 'use-fireproof'\n// import { connect } from '@fireproof/partykit'\n//\n// const { db } = useFireproof('test')\n//\n// const cx = connect.partykit(db);\n\n// TODO need to set the keybag url automatically\n\n// if (!process.env.FP_KEYBAG_URL) {\n//   process.env.FP_KEYBAG_URL = \"file://./dist/kb-dir-partykit?fs=mem\";\n// }\n\nif (!runtimeFn().isBrowser) {\n  const url = BuildURI.from(process.env.FP_KEYBAG_URL || \"file://./dist/kb-dir-partykit\");\n  url.setParam(\"extractKey\", \"_deprecated_internal_api\");\n  process.env.FP_KEYBAG_URL = url.toString();\n}\n\nregisterPartyKitStoreProtocol();\n\nconst connectionCache = new KeyedResolvOnce<bs.Connection>();\nexport const connect: ConnectFunction = (\n  db: Database,\n  remoteDbName = \"\",\n  url = \"http://localhost:1999?protocol=ws\"\n) => {\n  const { sthis, blockstore, name: dbName } = db;\n  if (!dbName) {\n    throw new Error(\"dbName is required\");\n  }\n  const urlObj = BuildURI.from(url);\n  const existingName = urlObj.getParam(\"name\");\n  urlObj.defParam(\"name\", remoteDbName || existingName || dbName);\n  urlObj.defParam(\"localName\", dbName);\n  urlObj.defParam(\"storekey\", `@${dbName}:data@`);\n  const fpUrl = urlObj.toString().replace(\"http://\", \"partykit://\").replace(\"https://\", \"partykit://\");\n  return connectionCache.get(fpUrl).once(() => {\n    makeKeyBagUrlExtractable(sthis);\n    const connection = connectionFactory(sthis, fpUrl);\n    connection.connect_X(blockstore);\n    return connection;\n  });\n};\n","import { BuildURI, CoerceURI, runtimeFn, URI } from \"@adviser/cement\";\nimport { bs, Database, ensureLogger, SuperThis } from \"@fireproof/core\";\n\n// export interface StoreOptions {\n//   readonly data: bs.DataStore;\n//   readonly meta: bs.MetaStore;\n//   readonly wal: bs.WALState;\n// }\n\nexport class ConnectionFromStore extends bs.ConnectionBase {\n  stores?: {\n    readonly data: bs.DataStore;\n    readonly meta: bs.MetaStore;\n  } = undefined;\n\n  // readonly urlData: URI;\n  // readonly urlMeta: URI;\n\n  readonly sthis: SuperThis;\n  constructor(sthis: SuperThis, url: URI) {\n    const logger = ensureLogger(sthis, \"ConnectionFromStore\", {\n      url: () => url.toString(),\n      this: 1,\n      log: 1,\n    });\n    super(url, logger);\n    this.sthis = sthis;\n    // this.urlData = url;\n    // this.urlMeta = url;\n  }\n  async onConnect(): Promise<void> {\n    this.logger.Debug().Msg(\"onConnect-start\");\n    const stores = {\n      base: this.url,\n      // data: this.urlData,\n      // meta: this.urlMeta,\n    };\n    const rName = this.url.getParamResult(\"name\");\n    if (rName.isErr()) {\n      throw this.logger.Error().Err(rName).Msg(\"missing Parameter\").AsError();\n    }\n    const storeRuntime = bs.toStoreRuntime({ stores }, this.sthis);\n    const loader = {\n      name: rName.Ok(),\n      ebOpts: {\n        logger: this.logger,\n        store: { stores },\n        storeRuntime,\n      },\n      sthis: this.sthis,\n    } as bs.Loadable;\n\n    this.stores = {\n      data: await storeRuntime.makeDataStore(loader),\n      meta: await storeRuntime.makeMetaStore(loader),\n    };\n    // await this.stores.data.start();\n    // await this.stores.meta.start();\n    this.logger.Debug().Msg(\"onConnect-done\");\n    return;\n  }\n}\n\nexport function connectionFactory(sthis: SuperThis, iurl: CoerceURI): bs.ConnectionBase {\n  return new ConnectionFromStore(sthis, URI.from(iurl));\n}\n\nexport function makeKeyBagUrlExtractable(sthis: SuperThis) {\n  let base = sthis.env.get(\"FP_KEYBAG_URL\");\n  if (!base) {\n    if (runtimeFn().isBrowser) {\n      base = \"indexdb://fp-keybag\";\n    } else {\n      base = \"file://./dist/kb-dir-partykit\";\n    }\n  }\n  const kbUrl = BuildURI.from(base);\n  kbUrl.defParam(\"extractKey\", \"_deprecated_internal_api\");\n  sthis.env.set(\"FP_KEYBAG_URL\", kbUrl.toString());\n  sthis.logger.Debug().Url(kbUrl, \"keyBagUrl\").Msg(\"Make keybag url extractable\");\n}\n\nexport type ConnectFunction = (db: Database, name?: string, url?: string) => bs.Connection;\n","import { PartySocket, PartySocketOptions } from \"partysocket\";\nimport { Result, URI, BuildURI, KeyedResolvOnce, runtimeFn, exception2Result } from \"@adviser/cement\";\nimport { bs, ensureLogger, getStore, Logger, rt, SuperThis } from \"@fireproof/core\";\n\nexport class PartyKitGateway implements bs.Gateway {\n  readonly logger: Logger;\n  readonly sthis: SuperThis;\n  readonly id: string;\n  party?: PartySocket;\n  url?: URI;\n\n  constructor(sthis: SuperThis) {\n    this.sthis = sthis;\n    this.id = sthis.nextId().str;\n    this.logger = ensureLogger(sthis, \"PartyKitGateway\", {\n      url: () => this.url?.toString(),\n      this: this.id,\n    }); //.EnableLevel(Level.DEBUG);\n    this.logger.Debug().Msg(\"constructor\");\n  }\n\n  async buildUrl(baseUrl: URI, key: string): Promise<Result<URI>> {\n    return Result.Ok(baseUrl.build().setParam(\"key\", key).URI());\n  }\n\n  pso?: PartySocketOptions;\n  async start(uri: URI): Promise<Result<URI>> {\n    this.logger.Debug().Msg(\"Starting PartyKitGateway with URI: \" + uri.toString());\n\n    await this.sthis.start();\n\n    this.url = uri;\n    const ret = uri.build().defParam(\"version\", \"v0.1-partykit\");\n\n    const rName = uri.getParamResult(\"name\");\n    if (rName.isErr()) {\n      return this.logger.Error().Err(rName).Msg(\"name not found\").ResultError();\n    }\n    let dbName = rName.Ok();\n    if (this.url.hasParam(\"index\")) {\n      dbName = dbName + \"-idx\";\n    }\n    ret.defParam(\"party\", \"fireproof\");\n    ret.defParam(\"protocol\", \"wss\");\n    // const party = uri.getParam(\"party\") || \"fireproof\";\n    // const proto = uri.getParam(\"protocol\") || \"wss\";\n    let possibleUndef: {\n      protocol: \"wss\" | \"ws\" | undefined;\n      protocols?: string[];\n      prefix?: string;\n    } = { protocol: ret.getParam(\"protocol\") as \"wss\" | \"ws\" };\n\n    const protocolsStr = uri.getParam(\"protocols\");\n    if (protocolsStr) {\n      const ps = protocolsStr\n        .split(\",\")\n        .map((x) => x.trim())\n        .filter((x) => x);\n      if (ps.length > 0) {\n        possibleUndef = { ...possibleUndef, protocols: ps };\n      }\n    }\n    const prefixStr = uri.getParam(\"prefix\");\n    if (prefixStr) {\n      possibleUndef = { ...possibleUndef, prefix: prefixStr };\n    }\n\n    const query: PartySocketOptions[\"query\"] = {};\n\n    const partySockOpts: PartySocketOptions = {\n      id: this.id,\n      host: this.url.host,\n      room: dbName,\n      party: ret.getParam(\"party\"),\n      ...possibleUndef,\n      query,\n      path: this.url.pathname.replace(/^\\//, \"\"),\n    };\n\n    if (runtimeFn().isNodeIsh) {\n      const { WebSocket } = await import(\"ws\");\n      partySockOpts.WebSocket = WebSocket;\n    }\n    this.pso = partySockOpts;\n\n    return Result.Ok(ret.URI());\n  }\n\n  async ready(): Promise<void> {\n    this.logger.Debug().Msg(\"ready\");\n  }\n\n  async connectPartyKit() {\n    const pkKeyThis = pkKey(this.pso);\n    return pkSockets.get(pkKeyThis).once(async () => {\n      if (!this.pso) {\n        throw new Error(\"Party socket options not found\");\n      }\n      this.party = new PartySocket(this.pso);\n      let exposedResolve: (value: boolean) => void;\n      const openFn = () => {\n        this.logger.Debug().Msg(\"party open\");\n        this.party?.addEventListener(\"message\", async (event: MessageEvent<string>) => {\n          this.logger.Debug().Msg(`got message: ${event.data}`);\n          const mbin = this.sthis.txt.encode(event.data);\n          this.notifySubscribers(mbin);\n        });\n        exposedResolve(true);\n      };\n      return await new Promise<boolean>((resolve) => {\n        exposedResolve = resolve;\n        this.party?.addEventListener(\"open\", openFn);\n      });\n    });\n  }\n\n  async close(): Promise<bs.VoidResult> {\n    await this.ready();\n    this.logger.Debug().Msg(\"close\");\n    this.party?.close();\n    return Result.Ok(undefined);\n  }\n\n  async put(uri: URI, body: Uint8Array): Promise<Result<void>> {\n    await this.ready();\n    const { store } = getStore(uri, this.sthis, (...args) => args.join(\"/\"));\n    if (store === \"meta\") {\n      const bodyRes = await bs.addCryptoKeyToGatewayMetaPayload(uri, this.sthis, body);\n      if (bodyRes.isErr()) {\n        this.logger.Error().Err(bodyRes.Err()).Msg(\"Error in addCryptoKeyToGatewayMetaPayload\");\n        throw bodyRes.Err();\n      }\n      body = bodyRes.Ok();\n    }\n    const rkey = uri.getParamResult(\"key\");\n    if (rkey.isErr()) return Result.Err(rkey.Err());\n    const key = rkey.Ok();\n    const uploadUrl = store === \"meta\" ? pkMetaURL(uri, key) : pkCarURL(uri, key);\n    return exception2Result(async () => {\n      const response = await fetch(uploadUrl.asURL(), { method: \"PUT\", body: body });\n      if (response.status === 404) {\n        throw this.logger.Error().Url(uploadUrl).Msg(`Failure in uploading ${store}!`).AsError();\n      }\n    });\n  }\n\n  private readonly subscriberCallbacks = new Set<(data: Uint8Array) => void>();\n\n  private notifySubscribers(data: Uint8Array): void {\n    for (const callback of this.subscriberCallbacks) {\n      try {\n        callback(data);\n      } catch (error) {\n        this.logger.Error().Err(error).Msg(\"Error in subscriber callback execution\");\n      }\n    }\n  }\n  async subscribe(uri: URI, callback: (meta: Uint8Array) => void): Promise<bs.UnsubscribeResult> {\n    await this.ready();\n    await this.connectPartyKit();\n\n    const store = uri.getParam(\"store\");\n    if (store !== \"meta\") {\n      return Result.Err(new Error(\"store must be meta\"));\n    }\n\n    this.subscriberCallbacks.add(callback);\n\n    return Result.Ok(() => {\n      this.subscriberCallbacks.delete(callback);\n    });\n  }\n\n  async get(uri: URI): Promise<bs.GetResult> {\n    await this.ready();\n    return exception2Result(async () => {\n      const { store } = getStore(uri, this.sthis, (...args) => args.join(\"/\"));\n      const key = uri.getParam(\"key\");\n      if (!key) throw new Error(\"key not found\");\n      const downloadUrl = store === \"meta\" ? pkMetaURL(uri, key) : pkCarURL(uri, key);\n      const response = await fetch(downloadUrl.toString(), { method: \"GET\" });\n      if (response.status === 404) {\n        throw new Error(`Failure in downloading ${store}!`);\n      }\n      const body = new Uint8Array(await response.arrayBuffer());\n      if (store === \"meta\") {\n        const resKeyInfo = await bs.setCryptoKeyFromGatewayMetaPayload(uri, this.sthis, body);\n        if (resKeyInfo.isErr()) {\n          this.logger\n            .Error()\n            .Url(uri)\n            .Err(resKeyInfo)\n            .Any(\"body\", body)\n            .Msg(\"Error in setCryptoKeyFromGatewayMetaPayload\");\n          throw resKeyInfo.Err();\n        }\n      }\n      return body;\n    });\n  }\n\n  async delete(uri: URI): Promise<bs.VoidResult> {\n    await this.ready();\n    return exception2Result(async () => {\n      const { store } = getStore(uri, this.sthis, (...args) => args.join(\"/\"));\n      const key = uri.getParam(\"key\");\n      if (!key) throw new Error(\"key not found\");\n      if (store === \"meta\") throw new Error(\"Cannot delete from meta store\");\n      const deleteUrl = pkCarURL(uri, key);\n      const response = await fetch(deleteUrl.toString(), { method: \"DELETE\" });\n      if (response.status === 404) {\n        throw new Error(`Failure in deleting ${store}!`);\n      }\n    });\n  }\n\n  async destroy(uri: URI): Promise<Result<void>> {\n    await this.ready();\n    return exception2Result(async () => {\n      const deleteUrl = pkBaseURL(uri);\n      const response = await fetch(deleteUrl.asURL(), { method: \"DELETE\" });\n      if (response.status === 404) {\n        throw new Error(\"Failure in deleting data!\");\n      }\n      return Result.Ok(undefined);\n    });\n  }\n}\n\nconst pkSockets = new KeyedResolvOnce<PartySocket>();\n\nfunction pkKey(set?: PartySocketOptions): string {\n  const ret = JSON.stringify(\n    Object.entries(set || {})\n      .sort(([a], [b]) => a.localeCompare(b))\n      .filter(([k]) => k !== \"id\")\n      .map(([k, v]) => ({ [k]: v }))\n  );\n  return ret;\n}\n// ws://localhost:1999/parties/fireproof/test-public-api?_pk=zp9BXhS6u\n// partykit://localhost:1999/?name=test-public-api&protocol=ws&store=meta\nfunction pkURL(uri: URI, key: string, type: \"car\" | \"meta\"): URI {\n  const host = uri.host;\n  const name = uri.getParam(\"name\");\n  const idx = uri.getParam(\"index\") || \"\";\n  const protocol = uri.getParam(\"protocol\") === \"ws\" ? \"http\" : \"https\";\n  // TODO extract url from uri\n  const path = `/parties/fireproof/${name}${idx}`;\n  return BuildURI.from(`${protocol}://${host}${path}`).setParam(type, key).URI();\n}\n\nfunction pkBaseURL(uri: URI): URI {\n  const host = uri.host;\n  const name = uri.getParam(\"name\");\n  const idx = uri.getParam(\"index\") || \"\";\n  const protocol = uri.getParam(\"protocol\") === \"ws\" ? \"http\" : \"https\";\n  // TODO extract url from uri\n  const path = `/parties/fireproof/${name}${idx}`;\n  return BuildURI.from(`${protocol}://${host}${path}`).URI();\n}\n\nfunction pkCarURL(uri: URI, key: string): URI {\n  return pkURL(uri, key, \"car\");\n}\n\nfunction pkMetaURL(uri: URI, key: string): URI {\n  return pkURL(uri, key, \"meta\");\n}\n\nexport class PartyKitTestStore implements bs.TestGateway {\n  readonly logger: Logger;\n  readonly sthis: SuperThis;\n  readonly gateway: bs.Gateway;\n  constructor(gw: bs.Gateway, sthis: SuperThis) {\n    this.sthis = sthis;\n    this.logger = ensureLogger(sthis, \"PartyKitTestStore\");\n    this.gateway = gw;\n  }\n  async get(uri: URI, key: string): Promise<Uint8Array> {\n    const url = uri.build().setParam(\"key\", key).URI();\n    const dbFile = this.sthis.pathOps.join(rt.getPath(url, this.sthis), rt.getFileName(url, this.sthis));\n    this.logger.Debug().Url(url).Str(\"dbFile\", dbFile).Msg(\"get\");\n    const buffer = await this.gateway.get(url);\n    this.logger.Debug().Url(url).Str(\"dbFile\", dbFile).Len(buffer).Msg(\"got\");\n    return buffer.Ok();\n  }\n}\n\nconst onceRegisterPartyKitStoreProtocol = new KeyedResolvOnce<() => void>();\nexport function registerPartyKitStoreProtocol(protocol = \"partykit:\", overrideBaseURL?: string) {\n  return onceRegisterPartyKitStoreProtocol.get(protocol).once(() => {\n    URI.protocolHasHostpart(protocol);\n    return bs.registerStoreProtocol({\n      protocol,\n      overrideBaseURL,\n      gateway: async (sthis) => {\n        return new PartyKitGateway(sthis);\n      },\n      test: async (sthis: SuperThis) => {\n        const gateway = new PartyKitGateway(sthis);\n        return new PartyKitTestStore(gateway, sthis);\n      },\n    });\n  });\n}\n"],"mappings":"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","names":["import_cement","import_core","import_cement"]}