@instantdb/core 0.22.56 → 0.22.57

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.
Files changed (57) hide show
  1. package/dist/commonjs/Reactor.d.ts +5 -0
  2. package/dist/commonjs/Reactor.d.ts.map +1 -1
  3. package/dist/commonjs/Reactor.js +43 -5
  4. package/dist/commonjs/Reactor.js.map +1 -1
  5. package/dist/commonjs/SyncTable.d.ts +140 -0
  6. package/dist/commonjs/SyncTable.d.ts.map +1 -0
  7. package/dist/commonjs/SyncTable.js +538 -0
  8. package/dist/commonjs/SyncTable.js.map +1 -0
  9. package/dist/commonjs/index.d.ts +21 -1
  10. package/dist/commonjs/index.d.ts.map +1 -1
  11. package/dist/commonjs/index.js +19 -1
  12. package/dist/commonjs/index.js.map +1 -1
  13. package/dist/commonjs/instaql.d.ts +1 -0
  14. package/dist/commonjs/instaql.d.ts.map +1 -1
  15. package/dist/commonjs/instaql.js +9 -5
  16. package/dist/commonjs/instaql.js.map +1 -1
  17. package/dist/commonjs/store.d.ts +5 -0
  18. package/dist/commonjs/store.d.ts.map +1 -1
  19. package/dist/commonjs/store.js +11 -0
  20. package/dist/commonjs/store.js.map +1 -1
  21. package/dist/commonjs/utils/PersistedObject.d.ts +11 -5
  22. package/dist/commonjs/utils/PersistedObject.d.ts.map +1 -1
  23. package/dist/commonjs/utils/PersistedObject.js +12 -2
  24. package/dist/commonjs/utils/PersistedObject.js.map +1 -1
  25. package/dist/esm/Reactor.d.ts +5 -0
  26. package/dist/esm/Reactor.d.ts.map +1 -1
  27. package/dist/esm/Reactor.js +43 -5
  28. package/dist/esm/Reactor.js.map +1 -1
  29. package/dist/esm/SyncTable.d.ts +140 -0
  30. package/dist/esm/SyncTable.d.ts.map +1 -0
  31. package/dist/esm/SyncTable.js +498 -0
  32. package/dist/esm/SyncTable.js.map +1 -0
  33. package/dist/esm/index.d.ts +21 -1
  34. package/dist/esm/index.d.ts.map +1 -1
  35. package/dist/esm/index.js +19 -1
  36. package/dist/esm/index.js.map +1 -1
  37. package/dist/esm/instaql.d.ts +1 -0
  38. package/dist/esm/instaql.d.ts.map +1 -1
  39. package/dist/esm/instaql.js +8 -5
  40. package/dist/esm/instaql.js.map +1 -1
  41. package/dist/esm/store.d.ts +5 -0
  42. package/dist/esm/store.d.ts.map +1 -1
  43. package/dist/esm/store.js +9 -3
  44. package/dist/esm/store.js.map +1 -1
  45. package/dist/esm/utils/PersistedObject.d.ts +11 -5
  46. package/dist/esm/utils/PersistedObject.d.ts.map +1 -1
  47. package/dist/esm/utils/PersistedObject.js +12 -2
  48. package/dist/esm/utils/PersistedObject.js.map +1 -1
  49. package/dist/standalone/index.js +1579 -1135
  50. package/dist/standalone/index.umd.cjs +3 -3
  51. package/package.json +2 -2
  52. package/src/Reactor.js +60 -4
  53. package/src/SyncTable.ts +821 -0
  54. package/src/index.ts +48 -0
  55. package/src/instaql.js +11 -5
  56. package/src/store.js +11 -3
  57. package/src/utils/PersistedObject.ts +15 -6
@@ -1 +1 @@
1
- {"version":3,"file":"Reactor.js","sourceRoot":"","sources":["../../src/Reactor.js"],"names":[],"mappings":"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","sourcesContent":["// @ts-check\nimport weakHash from './utils/weakHash.ts';\nimport instaql from './instaql.js';\nimport * as instaml from './instaml.js';\nimport * as s from './store.js';\nimport uuid from './utils/uuid.ts';\nimport IndexedDBStorage from './IndexedDBStorage.ts';\nimport WindowNetworkListener from './WindowNetworkListener.js';\nimport * as authAPI from './authAPI.ts';\nimport * as StorageApi from './StorageAPI.ts';\nimport * as flags from './utils/flags.ts';\nimport { buildPresenceSlice, hasPresenceResponseChanged } from './presence.ts';\nimport { Deferred } from './utils/Deferred.js';\nimport { PersistedObject } from './utils/PersistedObject.ts';\nimport { extractTriples } from './model/instaqlResult.js';\nimport {\n areObjectsDeepEqual,\n assocInMutative,\n dissocInMutative,\n insertInMutative,\n} from './utils/object.js';\nimport { createLinkIndex } from './utils/linkIndex.ts';\nimport version from './version.ts';\nimport { create } from 'mutative';\nimport createLogger from './utils/log.ts';\nimport { validateQuery } from './queryValidation.ts';\nimport { validateTransactions } from './transactionValidation.ts';\nimport { InstantError } from './InstantError.ts';\nimport { InstantAPIError } from './utils/fetch.ts';\nimport { validate as validateUUID } from 'uuid';\nimport { WSConnection, SSEConnection } from './Connection.ts';\n\n/** @typedef {import('./utils/log.ts').Logger} Logger */\n/** @typedef {import('./Connection.ts').Connection} Connection */\n/** @typedef {import('./Connection.ts').TransportType} TransportType */\n/** @typedef {import('./Connection.ts').EventSourceConstructor} EventSourceConstructor */\n\nconst STATUS = {\n CONNECTING: 'connecting',\n OPENED: 'opened',\n AUTHENTICATED: 'authenticated',\n CLOSED: 'closed',\n ERRORED: 'errored',\n};\n\nconst QUERY_ONCE_TIMEOUT = 30_000;\nconst PENDING_TX_CLEANUP_TIMEOUT = 30_000;\nconst PENDING_MUTATION_CLEANUP_THRESHOLD = 200;\n\nconst defaultConfig = {\n apiURI: 'https://api.instantdb.com',\n websocketURI: 'wss://api.instantdb.com/runtime/session',\n};\n\n// Param that the backend adds if this is an oauth redirect\nconst OAUTH_REDIRECT_PARAM = '_instant_oauth_redirect';\n\nconst currentUserKey = `currentUser`;\n\n/**\n * @param {Object} config\n * @param {TransportType} config.transportType\n * @param {string} config.appId\n * @param {string} config.apiURI\n * @param {string} config.wsURI\n * @param {EventSourceConstructor} config.EventSourceImpl\n * @returns {WSConnection | SSEConnection}\n */\nfunction createTransport({\n transportType,\n appId,\n apiURI,\n wsURI,\n EventSourceImpl,\n}) {\n if (!EventSourceImpl) {\n return new WSConnection(`${wsURI}?app_id=${appId}`);\n }\n switch (transportType) {\n case 'ws':\n return new WSConnection(`${wsURI}?app_id=${appId}`);\n case 'sse':\n return new SSEConnection(\n EventSourceImpl,\n `${apiURI}/runtime/sse?app_id=${appId}`,\n );\n default:\n throw new Error('Unknown transport type ' + transportType);\n }\n}\n\nfunction isClient() {\n const hasWindow = typeof window !== 'undefined';\n // this checks if we are running in a chrome extension\n // @ts-expect-error\n const isChrome = typeof chrome !== 'undefined';\n\n return hasWindow || isChrome;\n}\n\nconst ignoreLogging = {\n 'set-presence': true,\n 'set-presence-ok': true,\n 'refresh-presence': true,\n 'patch-presence': true,\n};\n\nfunction querySubsFromStorage(x, useDateObjects) {\n const parsed = typeof x === 'string' ? JSON.parse(x) : x;\n for (const key in parsed) {\n const v = parsed[key];\n if (v?.result?.store) {\n const storeJSON = v.result.store;\n v.result.store = s.fromJSON({\n ...storeJSON,\n useDateObjects: useDateObjects,\n });\n }\n }\n return parsed;\n}\n\nfunction querySubsToStorage(querySubs) {\n const jsonSubs = {};\n for (const key in querySubs) {\n const sub = querySubs[key];\n const jsonSub = { ...sub };\n if (sub.result?.store) {\n jsonSub.result = {\n ...sub.result,\n store: s.toJSON(sub.result.store),\n };\n }\n jsonSubs[key] = jsonSub;\n }\n return jsonSubs;\n}\n\nfunction sortedMutationEntries(entries) {\n return [...entries].sort((a, b) => {\n const [ka, muta] = a;\n const [kb, mutb] = b;\n const a_order = muta.order || 0;\n const b_order = mutb.order || 0;\n if (a_order == b_order) {\n return ka < kb ? -1 : ka > kb ? 1 : 0;\n }\n return a_order - b_order;\n });\n}\n\n/**\n * @template {import('./presence.ts').RoomSchemaShape} [RoomSchema = {}]\n */\nexport default class Reactor {\n attrs;\n _isOnline = true;\n _isShutdown = false;\n status = STATUS.CONNECTING;\n\n /** @type {PersistedObject} */\n querySubs;\n /** @type {PersistedObject} */\n pendingMutations;\n\n /** @type {Record<string, Array<{ q: any, cb: (data: any) => any }>>} */\n queryCbs = {};\n /** @type {Record<string, Array<{ q: any, eventId: string, dfd: Deferred }>>} */\n queryOnceDfds = {};\n authCbs = [];\n attrsCbs = [];\n mutationErrorCbs = [];\n connectionStatusCbs = [];\n config;\n _persister;\n mutationDeferredStore = new Map();\n _reconnectTimeoutId = null;\n _reconnectTimeoutMs = 0;\n /** @type {Connection} */\n _transport;\n /** @type {TransportType} */\n _transportType = 'ws';\n\n /** @type {EventSourceConstructor} */\n _EventSource;\n /** @type {boolean | null} */\n _wsOk = null;\n _localIdPromises = {};\n _errorMessage = null;\n /** @type {Promise<null | {error: {message: string}}>}**/\n _oauthCallbackResponse = null;\n\n /** @type {null | import('./utils/linkIndex.ts').LinkIndex}} */\n _linkIndex = null;\n\n /** @type BroadcastChannel | undefined */\n _broadcastChannel;\n\n /** @type {Record<string, {isConnected: boolean; error: any}>} */\n _rooms = {};\n /** @type {Record<string, boolean>} */\n _roomsPendingLeave = {};\n _presence = {};\n _broadcastQueue = [];\n _broadcastSubs = {};\n _currentUserCached = { isLoading: true, error: undefined, user: undefined };\n _beforeUnloadCbs = [];\n _dataForQueryCache = {};\n /** @type {Logger} */\n _log;\n _pendingTxCleanupTimeout;\n _pendingMutationCleanupThreshold;\n _inFlightMutationEventIds = new Set();\n\n constructor(\n config,\n Storage = IndexedDBStorage,\n NetworkListener = WindowNetworkListener,\n versions,\n EventSourceConstructor,\n ) {\n this._EventSource = EventSourceConstructor;\n\n this.config = { ...defaultConfig, ...config };\n this.queryCacheLimit = this.config.queryCacheLimit ?? 10;\n this._pendingTxCleanupTimeout =\n this.config.pendingTxCleanupTimeout ?? PENDING_TX_CLEANUP_TIMEOUT;\n this._pendingMutationCleanupThreshold =\n this.config.pendingMutationCleanupThreshold ??\n PENDING_MUTATION_CLEANUP_THRESHOLD;\n\n this._log = createLogger(\n config.verbose || flags.devBackend || flags.instantLogs,\n () => this._reactorStats(),\n );\n\n this.versions = { ...(versions || {}), '@instantdb/core': version };\n\n if (this.config.schema) {\n this._linkIndex = createLinkIndex(this.config.schema);\n }\n\n // This is to protect us against running\n // server-side.\n if (!isClient()) {\n return;\n }\n\n if (!config.appId) {\n throw new Error('Instant must be initialized with an appId.');\n }\n\n if (!validateUUID(config.appId)) {\n throw new Error(\n `Instant must be initialized with a valid appId. \\`${config.appId}\\` is not a valid uuid.`,\n );\n }\n\n if (typeof BroadcastChannel === 'function') {\n this._broadcastChannel = new BroadcastChannel('@instantdb');\n this._broadcastChannel.addEventListener('message', async (e) => {\n try {\n if (e.data?.type === 'auth') {\n const res = await this.getCurrentUser();\n this.updateUser(res.user);\n }\n } catch (e) {\n this._log.error('[error] handle broadcast channel', e);\n }\n });\n }\n\n this._initStorage(Storage);\n\n this._oauthCallbackResponse = this._oauthLoginInit();\n\n // kick off a request to cache it\n this.getCurrentUser();\n\n NetworkListener.getIsOnline().then((isOnline) => {\n this._isOnline = isOnline;\n this._startSocket();\n NetworkListener.listen((isOnline) => {\n // We do this because react native's NetInfo\n // fires multiple online events.\n // We only want to handle one state change\n if (isOnline === this._isOnline) {\n return;\n }\n this._log.info('[network] online =', isOnline);\n this._isOnline = isOnline;\n if (this._isOnline) {\n this._startSocket();\n } else {\n this._log.info(\n 'Changing status from',\n this.status,\n 'to',\n STATUS.CLOSED,\n );\n this._setStatus(STATUS.CLOSED);\n }\n });\n });\n\n if (typeof addEventListener !== 'undefined') {\n this._beforeUnload = this._beforeUnload.bind(this);\n addEventListener('beforeunload', this._beforeUnload);\n }\n }\n\n updateSchema(schema) {\n this.config = {\n ...this.config,\n schema: schema,\n cardinalityInference: Boolean(schema),\n };\n this._linkIndex = schema ? createLinkIndex(this.config.schema) : null;\n }\n\n _reactorStats() {\n return {\n inFlightMutationCount: this._inFlightMutationEventIds.size,\n pendingMutationCount: this.pendingMutations.currentValue.size,\n transportType: this._transportType,\n };\n }\n\n _initStorage(Storage) {\n this._persister = new Storage(`instant_${this.config.appId}_5`);\n this.querySubs = new PersistedObject(\n this._persister,\n 'querySubs',\n {},\n this._onMergeQuerySubs,\n querySubsToStorage,\n (x) => querySubsFromStorage(x, this.config.useDateObjects),\n );\n this.pendingMutations = new PersistedObject(\n this._persister,\n 'pendingMutations',\n new Map(),\n this._onMergePendingMutations,\n (x) => {\n return [...x.entries()];\n },\n (x) => {\n return new Map(typeof x === 'string' ? JSON.parse(x) : x);\n },\n 100, // throttle\n 100, // idlecallback timeout, flush more often for mutations\n );\n this._beforeUnloadCbs.push(() => {\n this.pendingMutations.flush();\n this.querySubs.flush();\n });\n }\n\n _beforeUnload() {\n for (const cb of this._beforeUnloadCbs) {\n cb();\n }\n }\n\n /**\n * @param {'enqueued' | 'pending' | 'synced' | 'timeout' | 'error' } status\n * @param {string} eventId\n * @param {{message?: string, type?: string, status?: number, hint?: unknown}} [errorMsg]\n */\n _finishTransaction(status, eventId, errorMsg) {\n const dfd = this.mutationDeferredStore.get(eventId);\n this.mutationDeferredStore.delete(eventId);\n const ok = status !== 'error' && status !== 'timeout';\n\n if (!dfd && !ok) {\n // console.erroring here, as there are no listeners to let know\n console.error('Mutation failed', { status, eventId, ...errorMsg });\n }\n if (!dfd) {\n return;\n }\n if (ok) {\n dfd.resolve({ status, eventId });\n } else {\n // Check if error comes from server or client\n if (errorMsg.type) {\n const { status, ...body } = errorMsg;\n dfd.reject(\n new InstantAPIError({\n // @ts-expect-error body.type is not constant typed\n body,\n status,\n }),\n );\n } else {\n dfd.reject(new InstantError(errorMsg.message, errorMsg.hint));\n }\n }\n }\n\n _setStatus(status, err) {\n this.status = status;\n this._errorMessage = err;\n this.notifyConnectionStatusSubs(status);\n }\n\n /**\n * merge querySubs from storage and in memory. Has the following side\n * effects:\n * - We notify all queryCbs because results may been added during merge\n */\n _onMergeQuerySubs = (_storageSubs, inMemorySubs) => {\n const storageSubs = _storageSubs || {};\n const ret = { ...inMemorySubs };\n\n // Consider an inMemorySub with no result;\n // If we have a result from storageSubs, let's add it\n Object.entries(inMemorySubs).forEach(([hash, querySub]) => {\n const storageResult = storageSubs?.[hash]?.result;\n const memoryResult = querySub.result;\n if (storageResult && !memoryResult) {\n ret[hash].result = storageResult;\n }\n });\n\n // Consider a storageSub with no corresponding inMemorySub\n // This means that at least at this point,\n // the user has not asked to subscribe to the query.\n // We may _still_ want to add it, because in just a\n // few milliseconds, the user will ask to subscribe to the\n // query.\n // For now, we can't really tell if the user will ask to subscribe\n // or not. So for now let's just add the first 10 queries from storage.\n // Eventually, we could be smarter about this. For example,\n // we can keep usage information about which queries are popular.\n const storageKsToAdd = Object.keys(storageSubs)\n .filter((k) => !inMemorySubs[k])\n .sort((a, b) => {\n // Sort by lastAccessed, newest first\n const aTime = storageSubs[a]?.lastAccessed || 0;\n const bTime = storageSubs[b]?.lastAccessed || 0;\n return bTime - aTime;\n })\n .slice(0, this.queryCacheLimit);\n\n storageKsToAdd.forEach((k) => {\n ret[k] = storageSubs[k];\n });\n\n // Okay, now we have merged our querySubs\n this.querySubs.set((_) => ret);\n\n this.loadedNotifyAll();\n };\n\n /**\n * merge pendingMutations from storage and in memory. Has a side effect of\n * sending mutations that were stored but not acked\n */\n _onMergePendingMutations = (storageMuts, inMemoryMuts) => {\n const ret = new Map([...storageMuts.entries(), ...inMemoryMuts.entries()]);\n this.pendingMutations.set((_) => ret);\n this.loadedNotifyAll();\n const rewrittenStorageMuts = this._rewriteMutationsSorted(\n this.attrs,\n storageMuts,\n );\n rewrittenStorageMuts.forEach(([k, mut]) => {\n if (!inMemoryMuts.has(k) && !mut['tx-id']) {\n this._sendMutation(k, mut);\n }\n });\n };\n\n _flushEnqueuedRoomData(roomId) {\n const enqueuedUserPresence = this._presence[roomId]?.result?.user;\n const enqueuedBroadcasts = this._broadcastQueue[roomId];\n\n this._broadcastQueue[roomId] = [];\n\n if (enqueuedUserPresence) {\n this._trySetPresence(roomId, enqueuedUserPresence);\n }\n\n if (enqueuedBroadcasts) {\n for (const item of enqueuedBroadcasts) {\n const { topic, roomType, data } = item;\n this._tryBroadcast(roomId, roomType, topic, data);\n }\n }\n }\n\n _handleReceive(connId, msg) {\n // opt-out, enabled by default if schema\n const enableCardinalityInference =\n Boolean(this.config.schema) &&\n ('cardinalityInference' in this.config\n ? Boolean(this.config.cardinalityInference)\n : true);\n if (!ignoreLogging[msg.op]) {\n this._log.info('[receive]', connId, msg.op, msg);\n }\n switch (msg.op) {\n case 'init-ok':\n this._setStatus(STATUS.AUTHENTICATED);\n this._reconnectTimeoutMs = 0;\n this._setAttrs(msg.attrs);\n this._flushPendingMessages();\n // (EPH): set session-id, so we know\n // which item is us\n this._sessionId = msg['session-id'];\n\n for (const roomId of Object.keys(this._rooms)) {\n const enqueuedUserPresence = this._presence[roomId]?.result?.user;\n this._tryJoinRoom(roomId, enqueuedUserPresence);\n }\n break;\n case 'add-query-exists':\n this.notifyOneQueryOnce(weakHash(msg.q));\n break;\n case 'add-query-ok':\n const { q, result } = msg;\n const hash = weakHash(q);\n const pageInfo = result?.[0]?.data?.['page-info'];\n const aggregate = result?.[0]?.data?.['aggregate'];\n const triples = extractTriples(result);\n const store = s.createStore(\n this.attrs,\n triples,\n enableCardinalityInference,\n this._linkIndex,\n this.config.useDateObjects,\n );\n this.querySubs.set((prev) => {\n prev[hash].result = {\n store,\n pageInfo,\n aggregate,\n processedTxId: msg['processed-tx-id'],\n };\n return prev;\n });\n this._cleanupPendingMutationsQueries();\n this.notifyOne(hash);\n this.notifyOneQueryOnce(hash);\n this._cleanupPendingMutationsTimeout();\n break;\n case 'refresh-ok':\n const { computations, attrs } = msg;\n const processedTxId = msg['processed-tx-id'];\n if (attrs) {\n this._setAttrs(attrs);\n }\n\n this._cleanupPendingMutationsTimeout();\n\n const rewrittenMutations = this._rewriteMutations(\n this.attrs,\n this.pendingMutations.currentValue,\n processedTxId,\n );\n\n if (rewrittenMutations !== this.pendingMutations.currentValue) {\n // We know we've changed the mutations to fix the attr ids and removed\n // processed attrs, so we'll persist those changes to prevent optimisticAttrs\n // from using old attr definitions\n this.pendingMutations.set(() => rewrittenMutations);\n }\n\n const mutations = sortedMutationEntries(rewrittenMutations.entries());\n\n const updates = computations.map((x) => {\n const q = x['instaql-query'];\n const result = x['instaql-result'];\n const hash = weakHash(q);\n const triples = extractTriples(result);\n const store = s.createStore(\n this.attrs,\n triples,\n enableCardinalityInference,\n this._linkIndex,\n this.config.useDateObjects,\n );\n const newStore = this._applyOptimisticUpdates(\n store,\n mutations,\n processedTxId,\n );\n const pageInfo = result?.[0]?.data?.['page-info'];\n const aggregate = result?.[0]?.data?.['aggregate'];\n return { hash, store: newStore, pageInfo, aggregate };\n });\n\n updates.forEach(({ hash, store, pageInfo, aggregate }) => {\n this.querySubs.set((prev) => {\n prev[hash].result = { store, pageInfo, aggregate, processedTxId };\n return prev;\n });\n });\n\n this._cleanupPendingMutationsQueries();\n\n updates.forEach(({ hash }) => {\n this.notifyOne(hash);\n });\n break;\n case 'transact-ok': {\n const { 'client-event-id': eventId, 'tx-id': txId } = msg;\n\n this._inFlightMutationEventIds.delete(eventId);\n\n const muts = this._rewriteMutations(\n this.attrs,\n this.pendingMutations.currentValue,\n );\n const prevMutation = muts.get(eventId);\n if (!prevMutation) {\n break;\n }\n\n // update pendingMutation with server-side tx-id\n this.pendingMutations.set((prev) => {\n prev.set(eventId, {\n ...prev.get(eventId),\n 'tx-id': txId,\n confirmed: Date.now(),\n });\n return prev;\n });\n\n const newAttrs = prevMutation['tx-steps']\n .filter(([action, ..._args]) => action === 'add-attr')\n .map(([_action, attr]) => attr)\n .concat(Object.values(this.attrs));\n\n this._setAttrs(newAttrs);\n\n this._finishTransaction('synced', eventId);\n\n this._cleanupPendingMutationsTimeout();\n\n break;\n }\n case 'patch-presence': {\n const roomId = msg['room-id'];\n this._trySetRoomConnected(roomId, true);\n this._patchPresencePeers(roomId, msg['edits']);\n this._notifyPresenceSubs(roomId);\n break;\n }\n case 'refresh-presence': {\n const roomId = msg['room-id'];\n this._trySetRoomConnected(roomId, true);\n this._setPresencePeers(roomId, msg['data']);\n this._notifyPresenceSubs(roomId);\n break;\n }\n case 'server-broadcast': {\n const room = msg['room-id'];\n const topic = msg.topic;\n this._trySetRoomConnected(room, true);\n this._notifyBroadcastSubs(room, topic, msg);\n break;\n }\n case 'join-room-ok': {\n const loadingRoomId = msg['room-id'];\n const joinedRoom = this._rooms[loadingRoomId];\n\n if (!joinedRoom) {\n if (this._roomsPendingLeave[loadingRoomId]) {\n this._tryLeaveRoom(loadingRoomId);\n delete this._roomsPendingLeave[loadingRoomId];\n }\n\n break;\n }\n\n this._trySetRoomConnected(loadingRoomId, true);\n this._flushEnqueuedRoomData(loadingRoomId);\n break;\n }\n case 'leave-room-ok': {\n const roomId = msg['room-id'];\n this._trySetRoomConnected(roomId, false);\n break;\n }\n case 'join-room-error':\n const errorRoomId = msg['room-id'];\n const errorRoom = this._rooms[errorRoomId];\n if (errorRoom) {\n errorRoom.error = msg['error'];\n }\n this._notifyPresenceSubs(errorRoomId);\n break;\n case 'error':\n this._handleReceiveError(msg);\n break;\n default:\n break;\n }\n }\n\n /**\n * @param {'timeout' | 'error'} status\n * @param {string} eventId\n * @param {{message: string, type?: string, status?: number, hint?: unknown}} errorMsg\n */\n _handleMutationError(status, eventId, errorMsg) {\n const mut = this.pendingMutations.currentValue.get(eventId);\n\n if (mut && (status !== 'timeout' || !mut['tx-id'])) {\n this.pendingMutations.set((prev) => {\n prev.delete(eventId);\n return prev;\n });\n this._inFlightMutationEventIds.delete(eventId);\n const errDetails = {\n message: errorMsg.message,\n hint: errorMsg.hint,\n };\n this.notifyAll();\n this.notifyAttrsSubs();\n this.notifyMutationErrorSubs(errDetails);\n this._finishTransaction(status, eventId, errorMsg);\n }\n }\n\n _handleReceiveError(msg) {\n console.log('error', msg);\n const eventId = msg['client-event-id'];\n // This might not be a mutation, but it can't hurt to delete it\n this._inFlightMutationEventIds.delete(eventId);\n const prevMutation = this.pendingMutations.currentValue.get(eventId);\n const errorMessage = {\n message: msg.message || 'Uh-oh, something went wrong. Ping Joe & Stopa.',\n };\n\n if (msg.hint) {\n errorMessage.hint = msg.hint;\n }\n\n if (prevMutation) {\n this._handleMutationError('error', eventId, msg);\n return;\n }\n\n if (\n msg['original-event']?.hasOwnProperty('q') &&\n msg['original-event']?.op === 'add-query'\n ) {\n const q = msg['original-event']?.q;\n const hash = weakHash(q);\n this.notifyQueryError(weakHash(q), errorMessage);\n this.notifyQueryOnceError(q, hash, eventId, errorMessage);\n return;\n }\n\n const isInitError = msg['original-event']?.op === 'init';\n if (isInitError) {\n if (\n msg.type === 'record-not-found' &&\n msg.hint?.['record-type'] === 'app-user'\n ) {\n // User has been logged out\n this.changeCurrentUser(null);\n return;\n }\n\n // We failed to init\n\n this._setStatus(STATUS.ERRORED, errorMessage);\n this.notifyAll();\n return;\n }\n // We've caught some error which has no corresponding listener.\n // Let's console.error to let the user know.\n const errorObj = { ...msg };\n delete errorObj.message;\n delete errorObj.hint;\n console.error(msg.message, errorObj);\n if (msg.hint) {\n console.error(\n 'This error comes with some debugging information. Here it is: \\n',\n msg.hint,\n );\n }\n }\n\n notifyQueryOnceError(q, hash, eventId, e) {\n const r = this.queryOnceDfds[hash]?.find((r) => r.eventId === eventId);\n if (!r) return;\n r.dfd.reject(e);\n this._completeQueryOnce(q, hash, r.dfd);\n }\n\n _setAttrs(attrs) {\n this.attrs = attrs.reduce((acc, attr) => {\n acc[attr.id] = attr;\n return acc;\n }, {});\n\n this.notifyAttrsSubs();\n }\n\n // ---------------------------\n // Queries\n\n getPreviousResult = (q) => {\n const hash = weakHash(q);\n return this.dataForQuery(hash);\n };\n\n _startQuerySub(q, hash) {\n const eventId = uuid();\n this.querySubs.set((prev) => {\n prev[hash] = prev[hash] || { q, result: null, eventId };\n prev[hash].lastAccessed = Date.now();\n return prev;\n });\n this._trySendAuthed(eventId, { op: 'add-query', q });\n\n return eventId;\n }\n\n /**\n * When a user subscribes to a query the following side effects occur:\n *\n * - We update querySubs to include the new query\n * - We update queryCbs to include the new cb\n * - If we already have a result for the query we call cb immediately\n * - We send the server an `add-query` message\n *\n * Returns an unsubscribe function\n */\n subscribeQuery(q, cb, opts) {\n if (!this.config.disableValidation) {\n validateQuery(q, this.config.schema);\n }\n if (opts && 'ruleParams' in opts) {\n q = { $$ruleParams: opts['ruleParams'], ...q };\n }\n\n const hash = weakHash(q);\n\n const prevResult = this.getPreviousResult(q);\n if (prevResult) {\n cb(prevResult);\n }\n\n this.queryCbs[hash] = this.queryCbs[hash] ?? [];\n this.queryCbs[hash].push({ q, cb });\n\n this._startQuerySub(q, hash);\n\n return () => {\n this._unsubQuery(q, hash, cb);\n };\n }\n\n queryOnce(q, opts) {\n if (!this.config.disableValidation) {\n validateQuery(q, this.config.schema);\n }\n\n if (opts && 'ruleParams' in opts) {\n q = { $$ruleParams: opts['ruleParams'], ...q };\n }\n\n const dfd = new Deferred();\n\n if (!this._isOnline) {\n dfd.reject(\n new Error(\"We can't run `queryOnce`, because the device is offline.\"),\n );\n return dfd.promise;\n }\n\n if (!this.querySubs) {\n dfd.reject(\n new Error(\n \"We can't run `queryOnce` on the backend. Use adminAPI.query instead: https://www.instantdb.com/docs/backend#query\",\n ),\n );\n return dfd.promise;\n }\n\n const hash = weakHash(q);\n\n const eventId = this._startQuerySub(q, hash);\n\n this.queryOnceDfds[hash] = this.queryOnceDfds[hash] ?? [];\n this.queryOnceDfds[hash].push({ q, dfd, eventId });\n\n setTimeout(\n () => dfd.reject(new Error('Query timed out')),\n QUERY_ONCE_TIMEOUT,\n );\n\n return dfd.promise;\n }\n\n _completeQueryOnce(q, hash, dfd) {\n if (!this.queryOnceDfds[hash]) return;\n\n this.queryOnceDfds[hash] = this.queryOnceDfds[hash].filter(\n (r) => r.dfd !== dfd,\n );\n\n this._cleanupQuery(q, hash);\n }\n\n _unsubQuery(q, hash, cb) {\n if (!this.queryCbs[hash]) return;\n\n this.queryCbs[hash] = this.queryCbs[hash].filter((r) => r.cb !== cb);\n\n this._cleanupQuery(q, hash);\n }\n\n _cleanupQuery(q, hash) {\n const hasListeners =\n this.queryCbs[hash]?.length || this.queryOnceDfds[hash]?.length;\n\n if (hasListeners) return;\n\n delete this.queryCbs[hash];\n delete this.queryOnceDfds[hash];\n\n this._trySendAuthed(uuid(), { op: 'remove-query', q });\n }\n\n // When we `pushTx`, it's possible that we don't yet have `this.attrs`\n // This means that `tx-steps` in `pendingMutations` will include `add-attr`\n // commands for attrs that already exist.\n //\n // This will also affect `add-triple` and `retract-triple` which\n // reference attr-ids that do not match the server.\n //\n // We fix this by rewriting `tx-steps` in each `pendingMutation`.\n // We remove `add-attr` commands for attrs that already exist.\n // We update `add-triple` and `retract-triple` commands to use the\n // server attr-ids.\n _rewriteMutations(attrs, muts, processedTxId) {\n if (!attrs) return muts;\n const findExistingAttr = (attr) => {\n const [_, etype, label] = attr['forward-identity'];\n const existing = instaml.getAttrByFwdIdentName(attrs, etype, label);\n return existing;\n };\n const findReverseAttr = (attr) => {\n const [_, etype, label] = attr['forward-identity'];\n const revAttr = instaml.getAttrByReverseIdentName(attrs, etype, label);\n return revAttr;\n };\n const mapping = { attrIdMap: {}, refSwapAttrIds: new Set() };\n let mappingChanged = false;\n\n const rewriteTxSteps = (txSteps, txId) => {\n const retTxSteps = [];\n for (const txStep of txSteps) {\n const [action] = txStep;\n\n // Handles add-attr\n // If existing, we drop it, and track it\n // to update add/retract triples\n if (action === 'add-attr') {\n const [_action, attr] = txStep;\n const existing = findExistingAttr(attr);\n if (existing && attr.id !== existing.id) {\n mapping.attrIdMap[attr.id] = existing.id;\n mappingChanged = true;\n continue;\n }\n if (attr['value-type'] === 'ref') {\n const revAttr = findReverseAttr(attr);\n if (revAttr) {\n mapping.attrIdMap[attr.id] = revAttr.id;\n mapping.refSwapAttrIds.add(attr.id);\n mappingChanged = true;\n continue;\n }\n }\n }\n\n if (\n (processedTxId &&\n txId &&\n processedTxId >= txId &&\n action === 'add-attr') ||\n action === 'update-attr' ||\n action === 'delete-attr'\n ) {\n mappingChanged = true;\n // Don't add this step because we already have the newer attrs\n continue;\n }\n // Handles add-triple|retract-triple\n // If in mapping, we update the attr-id\n const newTxStep = mappingChanged\n ? instaml.rewriteStep(mapping, txStep)\n : txStep;\n\n retTxSteps.push(newTxStep);\n }\n\n return mappingChanged ? retTxSteps : txSteps;\n };\n\n const rewritten = new Map();\n for (const [k, mut] of muts.entries()) {\n rewritten.set(k, {\n ...mut,\n 'tx-steps': rewriteTxSteps(mut['tx-steps'], mut['tx-id']),\n });\n }\n if (!mappingChanged) {\n return muts;\n }\n return rewritten;\n }\n\n _rewriteMutationsSorted(attrs, muts) {\n return sortedMutationEntries(this._rewriteMutations(attrs, muts).entries());\n }\n\n // ---------------------------\n // Transact\n\n optimisticAttrs() {\n const pendingMutationSteps = [\n ...this.pendingMutations.currentValue.values(),\n ] // hack due to Map()\n .flatMap((x) => x['tx-steps']);\n\n const deletedAttrIds = new Set(\n pendingMutationSteps\n .filter(([action, _attr]) => action === 'delete-attr')\n .map(([_action, id]) => id),\n );\n\n const pendingAttrs = [];\n for (const [_action, attr] of pendingMutationSteps) {\n if (_action === 'add-attr') {\n pendingAttrs.push(attr);\n } else if (\n _action === 'update-attr' &&\n attr.id &&\n this.attrs?.[attr.id]\n ) {\n const fullAttr = { ...this.attrs[attr.id], ...attr };\n pendingAttrs.push(fullAttr);\n }\n }\n\n const attrsWithoutDeleted = [\n ...Object.values(this.attrs || {}),\n ...pendingAttrs,\n ].filter((a) => !deletedAttrIds.has(a.id));\n\n const attrsRecord = Object.fromEntries(\n attrsWithoutDeleted.map((a) => [a.id, a]),\n );\n\n return attrsRecord;\n }\n\n /** Runs instaql on a query and a store */\n dataForQuery(hash) {\n const errorMessage = this._errorMessage;\n if (errorMessage) {\n return { error: errorMessage };\n }\n if (!this.querySubs) return;\n if (!this.pendingMutations) return;\n const querySubVersion = this.querySubs.version();\n const querySubs = this.querySubs.currentValue;\n const pendingMutationsVersion = this.pendingMutations.version();\n const pendingMutations = this.pendingMutations.currentValue;\n\n const { q, result } = querySubs[hash] || {};\n if (!result) return;\n\n const cached = this._dataForQueryCache[hash];\n if (\n cached &&\n querySubVersion === cached.querySubVersion &&\n pendingMutationsVersion === cached.pendingMutationsVersion\n ) {\n return cached.data;\n }\n\n const { store, pageInfo, aggregate, processedTxId } = result;\n const mutations = this._rewriteMutationsSorted(\n store.attrs,\n pendingMutations,\n );\n const newStore = this._applyOptimisticUpdates(\n store,\n mutations,\n processedTxId,\n );\n const resp = instaql({ store: newStore, pageInfo, aggregate }, q);\n\n this._dataForQueryCache[hash] = {\n querySubVersion,\n pendingMutationsVersion,\n data: resp,\n };\n\n return resp;\n }\n\n _applyOptimisticUpdates(store, mutations, processedTxId) {\n for (const [_, mut] of mutations) {\n if (!mut['tx-id'] || (processedTxId && mut['tx-id'] > processedTxId)) {\n store = s.transact(store, mut['tx-steps']);\n }\n }\n return store;\n }\n\n /** Re-run instaql and call all callbacks with new data */\n notifyOne = (hash) => {\n const cbs = this.queryCbs[hash] ?? [];\n const prevData = this._dataForQueryCache[hash]?.data;\n const data = this.dataForQuery(hash);\n\n if (!data) return;\n if (areObjectsDeepEqual(data, prevData)) return;\n\n cbs.forEach((r) => r.cb(data));\n };\n\n notifyOneQueryOnce = (hash) => {\n const dfds = this.queryOnceDfds[hash] ?? [];\n const data = this.dataForQuery(hash);\n\n dfds.forEach((r) => {\n this._completeQueryOnce(r.q, hash, r.dfd);\n r.dfd.resolve(data);\n });\n };\n\n notifyQueryError = (hash, error) => {\n const cbs = this.queryCbs[hash] || [];\n cbs.forEach((r) => r.cb({ error }));\n };\n\n /** Re-compute all subscriptions */\n notifyAll() {\n Object.keys(this.queryCbs).forEach((hash) => {\n this.notifyOne(hash);\n });\n }\n\n loadedNotifyAll() {\n if (this.pendingMutations.isLoading() || this.querySubs.isLoading()) return;\n this.notifyAll();\n }\n\n /** Applies transactions locally and sends transact message to server */\n pushTx = (chunks) => {\n // Throws if transactions are invalid\n if (!this.config.disableValidation) {\n validateTransactions(chunks, this.config.schema);\n }\n try {\n const txSteps = instaml.transform(\n {\n attrs: this.optimisticAttrs(),\n schema: this.config.schema,\n stores: Object.values(this.querySubs.currentValue).map(\n (sub) => sub?.result?.store,\n ),\n useDateObjects: this.config.useDateObjects,\n },\n chunks,\n );\n return this.pushOps(txSteps);\n } catch (e) {\n return this.pushOps([], e);\n }\n };\n\n /**\n * @param {*} txSteps\n * @param {*} [error]\n * @returns\n */\n pushOps = (txSteps, error) => {\n const eventId = uuid();\n const mutations = [...this.pendingMutations.currentValue.values()];\n const order = Math.max(0, ...mutations.map((mut) => mut.order || 0)) + 1;\n const mutation = {\n op: 'transact',\n 'tx-steps': txSteps,\n created: Date.now(),\n error,\n order,\n };\n this.pendingMutations.set((prev) => {\n prev.set(eventId, mutation);\n return prev;\n });\n\n const dfd = new Deferred();\n this.mutationDeferredStore.set(eventId, dfd);\n this._sendMutation(eventId, mutation);\n\n this.notifyAll();\n\n return dfd.promise;\n };\n\n shutdown() {\n this._log.info('[shutdown]', this.config.appId);\n this._isShutdown = true;\n this._transport?.close();\n }\n\n /**\n * Sends mutation to server and schedules a timeout to cancel it if\n * we don't hear back in time.\n * Note: If we're offline we don't schedule a timeout, we'll schedule it\n * later once we're back online and send the mutation again\n *\n */\n _sendMutation(eventId, mutation) {\n if (mutation.error) {\n this._handleMutationError('error', eventId, {\n message: mutation.error.message,\n });\n return;\n }\n if (this.status !== STATUS.AUTHENTICATED) {\n this._finishTransaction('enqueued', eventId);\n return;\n }\n const timeoutMs = Math.max(\n 6000,\n Math.min(\n this._inFlightMutationEventIds.size + 1,\n // Defensive code in case we don't clean up in flight mutation event ids\n this.pendingMutations.currentValue.size + 1,\n ) * 6000,\n );\n\n if (!this._isOnline) {\n this._finishTransaction('enqueued', eventId);\n } else {\n this._trySend(eventId, mutation);\n\n setTimeout(() => {\n if (!this._isOnline) {\n return;\n }\n // If we are here, this means that we have sent this mutation, we are online\n // but we have not received a response. If it's this long, something must be wrong,\n // so we error with a timeout.\n this._handleMutationError('timeout', eventId, {\n message: 'transaction timed out',\n });\n }, timeoutMs);\n }\n }\n\n // ---------------------------\n // Websocket\n\n /** Send messages we accumulated while we were connecting */\n _flushPendingMessages() {\n const subs = Object.keys(this.queryCbs).map((hash) => {\n return this.querySubs.currentValue[hash];\n });\n // Note: we should not have any nulls in subs, but we're\n // doing this defensively just in case.\n const safeSubs = subs.filter((x) => x);\n safeSubs.forEach(({ eventId, q }) => {\n this._trySendAuthed(eventId, { op: 'add-query', q });\n });\n\n Object.values(this.queryOnceDfds)\n .flat()\n .forEach(({ eventId, q }) => {\n this._trySendAuthed(eventId, { op: 'add-query', q });\n });\n\n const muts = this._rewriteMutationsSorted(\n this.attrs,\n this.pendingMutations.currentValue,\n );\n muts.forEach(([eventId, mut]) => {\n if (!mut['tx-id']) {\n this._sendMutation(eventId, mut);\n }\n });\n }\n\n /**\n * Clean up pendingMutations that all queries have seen\n */\n _cleanupPendingMutationsQueries() {\n let minProcessedTxId = Number.MAX_SAFE_INTEGER;\n for (const { result } of Object.values(this.querySubs.currentValue)) {\n if (result?.processedTxId) {\n minProcessedTxId = Math.min(minProcessedTxId, result?.processedTxId);\n }\n }\n\n this.pendingMutations.set((prev) => {\n for (const [eventId, mut] of Array.from(prev.entries())) {\n if (mut['tx-id'] && mut['tx-id'] <= minProcessedTxId) {\n prev.delete(eventId);\n }\n }\n return prev;\n });\n }\n\n /**\n * After mutations is confirmed by server, we give each query 30 sec\n * to update its results. If that doesn't happen, we assume query is\n * unaffected by this mutation and it’s safe to delete it from local queue\n */\n _cleanupPendingMutationsTimeout() {\n if (\n this.pendingMutations.currentValue.size <\n this._pendingMutationCleanupThreshold\n ) {\n return;\n }\n\n const now = Date.now();\n\n this.pendingMutations.set((prev) => {\n for (const [eventId, mut] of Array.from(prev.entries())) {\n if (\n mut.confirmed &&\n mut.confirmed + this._pendingTxCleanupTimeout < now\n ) {\n prev.delete(eventId);\n }\n }\n\n return prev;\n });\n }\n\n _trySendAuthed(...args) {\n if (this.status !== STATUS.AUTHENTICATED) {\n return;\n }\n this._trySend(...args);\n }\n\n _trySend(eventId, msg, opts) {\n if (!this._transport.isOpen()) {\n return;\n }\n if (!ignoreLogging[msg.op]) {\n this._log.info('[send]', this._transport.id, msg.op, msg);\n }\n switch (msg.op) {\n case 'transact': {\n this._inFlightMutationEventIds.add(eventId);\n break;\n }\n case 'init': {\n // New connection, so we can't have any mutations in flight\n this._inFlightMutationEventIds.clear();\n }\n }\n this._transport.send({ 'client-event-id': eventId, ...msg });\n }\n\n _transportOnOpen = (e) => {\n const targetTransport = e.target;\n if (this._transport !== targetTransport) {\n this._log.info(\n '[socket][open]',\n targetTransport.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n this._log.info('[socket][open]', this._transport.id);\n this._setStatus(STATUS.OPENED);\n\n this.getCurrentUser()\n .then((resp) => {\n this._trySend(uuid(), {\n op: 'init',\n 'app-id': this.config.appId,\n 'refresh-token': resp.user?.['refresh_token'],\n versions: this.versions,\n // If an admin token is provided for an app, we will\n // skip all permission checks. This is an advanced feature,\n // to let users write internal tools\n // This option is not exposed in `Config`, as it's\n // not ready for prime time\n '__admin-token': this.config.__adminToken,\n });\n })\n .catch((e) => {\n this._log.error('[socket][error]', targetTransport.id, e);\n });\n };\n\n _transportOnMessage = (e) => {\n const targetTransport = e.target;\n const m = e.message;\n if (this._transport !== targetTransport) {\n this._log.info(\n '[socket][message]',\n targetTransport.id,\n m,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n\n if (!this._wsOk && targetTransport.type === 'ws') {\n this._wsOk = true;\n }\n // Try to reconnect via websocket the next time we connect\n this._transportType = 'ws';\n this._handleReceive(targetTransport.id, e.message);\n };\n\n _transportOnError = (e) => {\n const targetTransport = e.target;\n if (this._transport !== targetTransport) {\n this._log.info(\n '[socket][error]',\n targetTransport.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n this._log.error('[socket][error]', targetTransport.id, e);\n };\n\n _scheduleReconnect = () => {\n // If we couldn't connect with a websocket last time, try sse\n if (!this._wsOk && this._transportType !== 'sse') {\n this._transportType = 'sse';\n this._reconnectTimeoutMs = 0;\n }\n setTimeout(() => {\n this._reconnectTimeoutMs = Math.min(\n this._reconnectTimeoutMs + 1000,\n 10000,\n );\n if (!this._isOnline) {\n this._log.info(\n '[socket][close]',\n this._transport.id,\n 'we are offline, no need to start socket',\n );\n return;\n }\n\n this._startSocket();\n }, this._reconnectTimeoutMs);\n };\n\n _transportOnClose = (e) => {\n const targetTransport = e.target;\n if (this._transport !== targetTransport) {\n this._log.info(\n '[socket][close]',\n targetTransport.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n\n this._setStatus(STATUS.CLOSED);\n\n for (const room of Object.values(this._rooms)) {\n room.isConnected = false;\n }\n\n if (this._isShutdown) {\n this._log.info(\n '[socket][close]',\n targetTransport.id,\n 'Reactor has been shut down and will not reconnect',\n );\n return;\n }\n this._log.info(\n '[socket][close]',\n targetTransport.id,\n 'schedule reconnect, ms =',\n this._reconnectTimeoutMs,\n );\n this._scheduleReconnect();\n };\n\n _startSocket() {\n // Reset whether we support websockets each time we connect\n // new networks may not support websockets\n this._wsOk = null;\n if (this._isShutdown) {\n this._log.info(\n '[socket][start]',\n this.config.appId,\n 'Reactor has been shut down and will not start a new socket',\n );\n return;\n }\n if (this._transport && this._transport.isConnecting()) {\n // Our current websocket is in a 'connecting' state.\n // There's no need to start another one, as the socket is\n // effectively fresh.\n this._log.info(\n '[socket][start]',\n this._transport.id,\n 'maintained as current transport, we were still in a connecting state',\n );\n return;\n }\n const prevTransport = this._transport;\n this._transport = createTransport({\n transportType: this._transportType,\n appId: this.config.appId,\n apiURI: this.config.apiURI,\n wsURI: this.config.websocketURI,\n EventSourceImpl: this._EventSource,\n });\n this._transport.onopen = this._transportOnOpen;\n this._transport.onmessage = this._transportOnMessage;\n this._transport.onclose = this._transportOnClose;\n this._transport.onerror = this._transportOnError;\n this._log.info('[socket][start]', this._transport.id);\n if (prevTransport?.isOpen()) {\n // When the network dies, it doesn't always mean that our\n // socket connection will fire a close event.\n //\n // We _could_ re-use the old socket, if the network drop was a\n // few seconds. But, to be safe right now we always create a new socket.\n //\n // This means that we have to make sure to kill the previous one ourselves.\n // c.f https://issues.chromium.org/issues/41343684\n this._log.info(\n '[socket][start]',\n this._transport.id,\n 'close previous transport id = ',\n prevTransport.id,\n );\n prevTransport.close();\n }\n }\n\n /**\n * Given a key, returns a stable local id, unique to this device and app.\n *\n * This can be useful if you want to create guest ids for example.\n *\n * Note: If the user deletes their local storage, this id will change.\n *\n * We use this._localIdPromises to ensure that we only generate a local\n * id once, even if multiple callers call this function concurrently.\n */\n async getLocalId(name) {\n const k = `localToken_${name}`;\n const id = await this._persister.getItem(k);\n if (id) return id;\n if (this._localIdPromises[k]) {\n return this._localIdPromises[k];\n }\n const newId = uuid();\n this._localIdPromises[k] = this._persister\n .setItem(k, newId)\n .then(() => newId);\n return this._localIdPromises[k];\n }\n\n // ----\n // Auth\n _replaceUrlAfterOAuth() {\n if (typeof URL === 'undefined') {\n return;\n }\n const url = new URL(window.location.href);\n if (url.searchParams.get(OAUTH_REDIRECT_PARAM)) {\n const startUrl = url.toString();\n url.searchParams.delete(OAUTH_REDIRECT_PARAM);\n url.searchParams.delete('code');\n url.searchParams.delete('error');\n const newPath =\n url.pathname +\n (url.searchParams.size ? '?' + url.searchParams : '') +\n url.hash;\n // Note: In next.js, this will revert to the old state if user navigates\n // back. We would need to allow framework specific routing to work\n // around that problem.\n history.replaceState(history.state, '', newPath);\n\n // navigation is part of the HTML spec, but not supported by Safari\n // or Firefox yet:\n // https://developer.mozilla.org/en-US/docs/Web/API/Navigation_API#browser_compatibility\n if (\n // @ts-ignore (waiting for ts support)\n typeof navigation === 'object' &&\n // @ts-ignore (waiting for ts support)\n typeof navigation.addEventListener === 'function' &&\n // @ts-ignore (waiting for ts support)\n typeof navigation.removeEventListener === 'function'\n ) {\n let ran = false;\n\n // The next.js app router will reset the URL when the router loads.\n // This puts it back after the router loads.\n const listener = (e) => {\n if (!ran) {\n ran = true;\n // @ts-ignore (waiting for ts support)\n navigation.removeEventListener('navigate', listener);\n if (\n !e.userInitiated &&\n e.navigationType === 'replace' &&\n e.destination?.url === startUrl\n ) {\n history.replaceState(history.state, '', newPath);\n }\n }\n };\n // @ts-ignore (waiting for ts support)\n navigation.addEventListener('navigate', listener);\n }\n }\n }\n\n /**\n *\n * @returns Promise<null | {error: {message: string}}>\n */\n async _oauthLoginInit() {\n if (\n typeof window === 'undefined' ||\n typeof window.location === 'undefined' ||\n typeof URLSearchParams === 'undefined'\n ) {\n return null;\n }\n const params = new URLSearchParams(window.location.search);\n if (!params.get(OAUTH_REDIRECT_PARAM)) {\n return null;\n }\n\n const error = params.get('error');\n if (error) {\n this._replaceUrlAfterOAuth();\n return { error: { message: error } };\n }\n const code = params.get('code');\n if (!code) {\n return null;\n }\n this._replaceUrlAfterOAuth();\n try {\n const currentUser = await this._getCurrentUser();\n const isGuest = currentUser?.type === 'guest';\n const { user } = await authAPI.exchangeCodeForToken({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n code,\n refreshToken: isGuest ? currentUser.refresh_token : undefined,\n });\n this.setCurrentUser(user);\n return null;\n } catch (e) {\n if (\n e?.body?.type === 'record-not-found' &&\n e?.body?.hint?.['record-type'] === 'app-oauth-code' &&\n (await this._hasCurrentUser())\n ) {\n // We probably just weren't able to clean up the URL, so\n // let's just ignore this error\n return null;\n }\n const message = e?.body?.message || 'Error logging in.';\n return { error: { message } };\n }\n }\n\n async _waitForOAuthCallbackResponse() {\n return await this._oauthCallbackResponse;\n }\n\n __subscribeMutationErrors(cb) {\n this.mutationErrorCbs.push(cb);\n\n return () => {\n this.mutationErrorCbs = this.mutationErrorCbs.filter((x) => x !== cb);\n };\n }\n\n subscribeAuth(cb) {\n this.authCbs.push(cb);\n const currUserCached = this._currentUserCached;\n if (!currUserCached.isLoading) {\n cb(this._currentUserCached);\n }\n let unsubbed = false;\n this.getCurrentUser().then((resp) => {\n if (unsubbed) return;\n if (areObjectsDeepEqual(resp, currUserCached)) return;\n cb(resp);\n });\n return () => {\n unsubbed = true;\n this.authCbs = this.authCbs.filter((x) => x !== cb);\n };\n }\n\n async getAuth() {\n const { user, error } = await this.getCurrentUser();\n if (error) {\n throw new InstantError('Could not get current user: ' + error.message);\n }\n return user;\n }\n\n subscribeConnectionStatus(cb) {\n this.connectionStatusCbs.push(cb);\n\n return () => {\n this.connectionStatusCbs = this.connectionStatusCbs.filter(\n (x) => x !== cb,\n );\n };\n }\n\n subscribeAttrs(cb) {\n this.attrsCbs.push(cb);\n\n if (this.attrs) {\n cb(this.attrs);\n }\n\n return () => {\n this.attrsCbs = this.attrsCbs.filter((x) => x !== cb);\n };\n }\n\n notifyAuthSubs(user) {\n this.authCbs.forEach((cb) => cb(user));\n }\n\n notifyMutationErrorSubs(error) {\n this.mutationErrorCbs.forEach((cb) => cb(error));\n }\n\n notifyAttrsSubs() {\n if (!this.attrs) return;\n const oas = this.optimisticAttrs();\n this.attrsCbs.forEach((cb) => cb(oas));\n }\n\n notifyConnectionStatusSubs(status) {\n this.connectionStatusCbs.forEach((cb) => cb(status));\n }\n\n async setCurrentUser(user) {\n await this._persister.setItem(currentUserKey, user);\n }\n\n getCurrentUserCached() {\n return this._currentUserCached;\n }\n\n async _getCurrentUser() {\n const user = await this._persister.getItem(currentUserKey);\n return typeof user === 'string' ? JSON.parse(user) : user;\n }\n\n async getCurrentUser() {\n const oauthResp = await this._waitForOAuthCallbackResponse();\n if (oauthResp?.error) {\n const errorV = { error: oauthResp.error, user: undefined };\n this._currentUserCached = { isLoading: false, ...errorV };\n return errorV;\n }\n const user = await this._getCurrentUser();\n const userV = { user: user, error: undefined };\n this._currentUserCached = {\n isLoading: false,\n ...userV,\n };\n return userV;\n }\n\n async _hasCurrentUser() {\n const user = await this._persister.getItem(currentUserKey);\n return JSON.parse(user) != null;\n }\n\n async changeCurrentUser(newUser) {\n const { user: oldUser } = await this.getCurrentUser();\n if (areObjectsDeepEqual(oldUser, newUser)) {\n // We were already logged in as the newUser, don't\n // bother updating\n return;\n }\n await this.setCurrentUser(newUser);\n // We need to remove all `result` from querySubs,\n // as they are no longer valid for the new user\n this.updateUser(newUser);\n\n try {\n this._broadcastChannel?.postMessage({ type: 'auth' });\n } catch (error) {\n console.error('Error posting message to broadcast channel', error);\n }\n }\n\n updateUser(newUser) {\n const newV = { error: undefined, user: newUser };\n this._currentUserCached = { isLoading: false, ...newV };\n this._dataForQueryCache = {};\n this.querySubs.set((prev) => {\n Object.keys(prev).forEach((k) => {\n delete prev[k].result;\n });\n return prev;\n });\n this._reconnectTimeoutMs = 0;\n this._transport.close();\n this._oauthCallbackResponse = null;\n this.notifyAuthSubs(newV);\n }\n\n sendMagicCode({ email }) {\n return authAPI.sendMagicCode({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n email: email,\n });\n }\n\n async signInWithMagicCode({ email, code }) {\n const currentUser = await this.getCurrentUser();\n const isGuest = currentUser?.user?.type === 'guest';\n const res = await authAPI.verifyMagicCode({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n email,\n code,\n refreshToken: isGuest ? currentUser.user.refresh_token : undefined,\n });\n await this.changeCurrentUser(res.user);\n return res;\n }\n\n async signInWithCustomToken(authToken) {\n const res = await authAPI.verifyRefreshToken({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n refreshToken: authToken,\n });\n await this.changeCurrentUser(res.user);\n return res;\n }\n\n async signInAsGuest() {\n const res = await authAPI.signInAsGuest({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n });\n await this.changeCurrentUser(res.user);\n return res;\n }\n\n potentiallyInvalidateToken(currentUser, opts) {\n const refreshToken = currentUser?.user?.refresh_token;\n if (!refreshToken) {\n return;\n }\n const wantsToSkip = opts.invalidateToken === false;\n if (wantsToSkip) {\n this._log.info('[auth-invalidate] skipped invalidateToken');\n return;\n }\n authAPI\n .signOut({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n refreshToken,\n })\n .then(() => {\n this._log.info('[auth-invalidate] completed invalidateToken');\n })\n .catch((e) => {});\n }\n\n async signOut(opts) {\n const currentUser = await this.getCurrentUser();\n this.potentiallyInvalidateToken(currentUser, opts);\n await this.changeCurrentUser(null);\n }\n\n /**\n * Creates an OAuth authorization URL.\n *\n * @param {Object} params - The parameters to create the authorization URL.\n * @param {string} params.clientName - The name of the client requesting authorization.\n * @param {string} params.redirectURL - The URL to redirect users to after authorization.\n * @returns {string} The created authorization URL.\n */\n createAuthorizationURL({ clientName, redirectURL }) {\n const { apiURI, appId } = this.config;\n return `${apiURI}/runtime/oauth/start?app_id=${appId}&client_name=${clientName}&redirect_uri=${redirectURL}`;\n }\n\n /**\n * @param {Object} params\n * @param {string} params.code - The code received from the OAuth service.\n * @param {string} [params.codeVerifier] - The code verifier used to generate the code challenge.\n */\n async exchangeCodeForToken({ code, codeVerifier }) {\n const currentUser = await this.getCurrentUser();\n const isGuest = currentUser?.user?.type === 'guest';\n const res = await authAPI.exchangeCodeForToken({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n code: code,\n codeVerifier,\n refreshToken: isGuest ? currentUser.user.refresh_token : undefined,\n });\n await this.changeCurrentUser(res.user);\n return res;\n }\n\n issuerURI() {\n const { apiURI, appId } = this.config;\n return `${apiURI}/runtime/${appId}`;\n }\n\n /**\n * @param {Object} params\n * @param {string} params.clientName - The name of the client requesting authorization.\n * @param {string} params.idToken - The id_token from the external service\n * @param {string | null | undefined} [params.nonce] - The nonce used when requesting the id_token from the external service\n */\n async signInWithIdToken({ idToken, clientName, nonce }) {\n const currentUser = await this.getCurrentUser();\n const refreshToken = currentUser?.user?.refresh_token;\n\n const res = await authAPI.signInWithIdToken({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n idToken,\n clientName,\n nonce,\n refreshToken,\n });\n await this.changeCurrentUser(res.user);\n return res;\n }\n\n // --------\n // Rooms\n\n /**\n * @param {string} roomId\n * @param {any | null | undefined} [initialPresence] -- initial presence data to send when joining the room\n * @returns () => void\n */\n joinRoom(roomId, initialPresence) {\n let needsToSendJoin = false;\n if (!this._rooms[roomId]) {\n needsToSendJoin = true;\n this._rooms[roomId] = {\n isConnected: false,\n error: undefined,\n };\n }\n\n this._presence[roomId] = this._presence[roomId] || {};\n const previousResult = this._presence[roomId].result;\n if (initialPresence && !previousResult) {\n this._presence[roomId].result = this._presence[roomId].result || {};\n this._presence[roomId].result.user = initialPresence;\n this._notifyPresenceSubs(roomId);\n }\n\n if (needsToSendJoin) {\n this._tryJoinRoom(roomId, initialPresence);\n }\n\n return () => {\n this._cleanupRoom(roomId);\n };\n }\n\n _cleanupRoom(roomId) {\n if (\n !this._presence[roomId]?.handlers?.length &&\n !Object.keys(this._broadcastSubs[roomId] ?? {}).length\n ) {\n const isConnected = this._rooms[roomId]?.isConnected;\n\n delete this._rooms[roomId];\n delete this._presence[roomId];\n delete this._broadcastSubs[roomId];\n\n if (isConnected) {\n this._tryLeaveRoom(roomId);\n } else {\n this._roomsPendingLeave[roomId] = true;\n }\n }\n }\n\n // --------\n // Presence\n\n // TODO: look into typing again\n getPresence(roomType, roomId, opts = {}) {\n const room = this._rooms[roomId];\n const presence = this._presence[roomId];\n if (!room || !presence || !presence.result) return null;\n\n return {\n ...buildPresenceSlice(presence.result, opts, this._sessionId),\n isLoading: !room.isConnected,\n error: room.error,\n };\n }\n\n // TODO: look into typing again\n publishPresence(roomType, roomId, partialData) {\n const room = this._rooms[roomId];\n const presence = this._presence[roomId];\n\n if (!room || !presence) {\n return;\n }\n\n presence.result = presence.result || {};\n const data = {\n ...presence.result.user,\n ...partialData,\n };\n\n presence.result.user = data;\n\n if (!room.isConnected) {\n return;\n }\n\n this._trySetPresence(roomId, data);\n this._notifyPresenceSubs(roomId);\n }\n\n _trySetPresence(roomId, data) {\n this._trySendAuthed(uuid(), {\n op: 'set-presence',\n 'room-id': roomId,\n data,\n });\n }\n\n _tryJoinRoom(roomId, data) {\n this._trySendAuthed(uuid(), { op: 'join-room', 'room-id': roomId, data });\n delete this._roomsPendingLeave[roomId];\n }\n\n _tryLeaveRoom(roomId) {\n this._trySendAuthed(uuid(), { op: 'leave-room', 'room-id': roomId });\n }\n\n _trySetRoomConnected(roomId, isConnected) {\n const room = this._rooms[roomId];\n if (room) {\n room.isConnected = isConnected;\n }\n }\n\n // TODO: look into typing again\n subscribePresence(roomType, roomId, opts, cb) {\n const leaveRoom = this.joinRoom(\n roomId,\n // Oct 28, 2025\n // Note: initialData is deprecated.\n // Keeping here for backwards compatibility\n opts.initialPresence || opts.initialData,\n );\n\n const handler = { ...opts, roomId, cb, prev: null };\n\n this._presence[roomId] = this._presence[roomId] || {};\n this._presence[roomId].handlers = this._presence[roomId].handlers || [];\n this._presence[roomId].handlers.push(handler);\n\n this._notifyPresenceSub(roomId, handler);\n\n return () => {\n this._presence[roomId].handlers =\n this._presence[roomId]?.handlers?.filter((x) => x !== handler) ?? [];\n\n leaveRoom();\n };\n }\n\n _notifyPresenceSubs(roomId) {\n this._presence[roomId]?.handlers?.forEach((handler) => {\n this._notifyPresenceSub(roomId, handler);\n });\n }\n\n _notifyPresenceSub(roomId, handler) {\n const slice = this.getPresence('', roomId, handler);\n\n if (!slice) {\n return;\n }\n\n if (handler.prev && !hasPresenceResponseChanged(slice, handler.prev)) {\n return;\n }\n\n handler.prev = slice;\n handler.cb(slice);\n }\n\n _patchPresencePeers(roomId, edits) {\n const peers = this._presence[roomId]?.result?.peers || {};\n let sessions = Object.fromEntries(\n Object.entries(peers).map(([k, v]) => [k, { data: v }]),\n );\n const myPresence = this._presence[roomId]?.result;\n const newSessions = create(sessions, (draft) => {\n for (let [path, op, value] of edits) {\n switch (op) {\n case '+':\n insertInMutative(draft, path, value);\n break;\n case 'r':\n assocInMutative(draft, path, value);\n break;\n case '-':\n dissocInMutative(draft, path);\n break;\n }\n }\n // Ignore our own edits\n delete draft[this._sessionId];\n });\n\n this._setPresencePeers(roomId, newSessions);\n }\n\n _setPresencePeers(roomId, data) {\n const sessions = { ...data };\n // no need to keep track of `user`\n delete sessions[this._sessionId];\n const peers = Object.fromEntries(\n Object.entries(sessions).map(([k, v]) => [k, v.data]),\n );\n\n this._presence = create(this._presence, (draft) => {\n assocInMutative(draft, [roomId, 'result', 'peers'], peers);\n });\n }\n\n // --------\n // Broadcast\n\n publishTopic({ roomType, roomId, topic, data }) {\n const room = this._rooms[roomId];\n\n if (!room) {\n return;\n }\n\n if (!room.isConnected) {\n this._broadcastQueue[roomId] = this._broadcastQueue[roomId] ?? [];\n this._broadcastQueue[roomId].push({ topic, roomType, data });\n\n return;\n }\n\n this._tryBroadcast(roomId, roomType, topic, data);\n }\n\n _tryBroadcast(roomId, roomType, topic, data) {\n this._trySendAuthed(uuid(), {\n op: 'client-broadcast',\n 'room-id': roomId,\n roomType,\n topic,\n data,\n });\n }\n\n subscribeTopic(roomId, topic, cb) {\n const leaveRoom = this.joinRoom(roomId);\n\n this._broadcastSubs[roomId] = this._broadcastSubs[roomId] || {};\n this._broadcastSubs[roomId][topic] =\n this._broadcastSubs[roomId][topic] || [];\n this._broadcastSubs[roomId][topic].push(cb);\n this._presence[roomId] = this._presence[roomId] || {};\n\n return () => {\n this._broadcastSubs[roomId][topic] = this._broadcastSubs[roomId][\n topic\n ].filter((x) => x !== cb);\n\n if (!this._broadcastSubs[roomId][topic].length) {\n delete this._broadcastSubs[roomId][topic];\n }\n\n leaveRoom();\n };\n }\n\n _notifyBroadcastSubs(room, topic, msg) {\n this._broadcastSubs?.[room]?.[topic]?.forEach((cb) => {\n const data = msg.data?.data;\n\n const peer =\n msg.data['peer-id'] === this._sessionId\n ? this._presence[room]?.result?.user\n : this._presence[room]?.result?.peers?.[msg.data['peer-id']];\n\n return cb(data, peer);\n });\n }\n\n // --------\n // Storage\n\n async uploadFile(path, file, opts) {\n const currentUser = await this.getCurrentUser();\n const refreshToken = currentUser?.user?.refresh_token;\n return StorageApi.uploadFile({\n ...opts,\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n path: path,\n file,\n refreshToken: refreshToken,\n });\n }\n\n async deleteFile(path) {\n const currentUser = await this.getCurrentUser();\n const refreshToken = currentUser?.user?.refresh_token;\n const result = await StorageApi.deleteFile({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n path,\n refreshToken: refreshToken,\n });\n\n return result;\n }\n\n // Deprecated Storage API (Jan 2025)\n // ---------------------------------\n\n async upload(path, file) {\n const currentUser = await this.getCurrentUser();\n const refreshToken = currentUser?.user?.refresh_token;\n const fileName = path || file.name;\n const url = await StorageApi.getSignedUploadUrl({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n fileName: fileName,\n refreshToken: refreshToken,\n });\n const isSuccess = await StorageApi.upload(url, file);\n\n return isSuccess;\n }\n\n async getDownloadUrl(path) {\n const currentUser = await this.getCurrentUser();\n const refreshToken = currentUser?.user?.refresh_token;\n const url = await StorageApi.getDownloadUrl({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n path: path,\n refreshToken: refreshToken,\n });\n\n return url;\n }\n}\n"]}
1
+ {"version":3,"file":"Reactor.js","sourceRoot":"","sources":["../../src/Reactor.js"],"names":[],"mappings":"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","sourcesContent":["// @ts-check\nimport weakHash from './utils/weakHash.ts';\nimport instaql from './instaql.js';\nimport * as instaml from './instaml.js';\nimport * as s from './store.js';\nimport uuid from './utils/uuid.ts';\nimport IndexedDBStorage from './IndexedDBStorage.ts';\nimport WindowNetworkListener from './WindowNetworkListener.js';\nimport * as authAPI from './authAPI.ts';\nimport * as StorageApi from './StorageAPI.ts';\nimport * as flags from './utils/flags.ts';\nimport { buildPresenceSlice, hasPresenceResponseChanged } from './presence.ts';\nimport { Deferred } from './utils/Deferred.js';\nimport { PersistedObject } from './utils/PersistedObject.ts';\nimport { extractTriples } from './model/instaqlResult.js';\nimport {\n areObjectsDeepEqual,\n assocInMutative,\n dissocInMutative,\n insertInMutative,\n} from './utils/object.js';\nimport { createLinkIndex } from './utils/linkIndex.ts';\nimport version from './version.ts';\nimport { create } from 'mutative';\nimport createLogger from './utils/log.ts';\nimport { validateQuery } from './queryValidation.ts';\nimport { validateTransactions } from './transactionValidation.ts';\nimport { InstantError } from './InstantError.ts';\nimport { InstantAPIError } from './utils/fetch.ts';\nimport { validate as validateUUID } from 'uuid';\nimport { WSConnection, SSEConnection } from './Connection.ts';\nimport { SyncTable } from './SyncTable.ts';\n\n/** @typedef {import('./utils/log.ts').Logger} Logger */\n/** @typedef {import('./Connection.ts').Connection} Connection */\n/** @typedef {import('./Connection.ts').TransportType} TransportType */\n/** @typedef {import('./Connection.ts').EventSourceConstructor} EventSourceConstructor */\n\nconst STATUS = {\n CONNECTING: 'connecting',\n OPENED: 'opened',\n AUTHENTICATED: 'authenticated',\n CLOSED: 'closed',\n ERRORED: 'errored',\n};\n\nconst QUERY_ONCE_TIMEOUT = 30_000;\nconst PENDING_TX_CLEANUP_TIMEOUT = 30_000;\nconst PENDING_MUTATION_CLEANUP_THRESHOLD = 200;\n\nconst defaultConfig = {\n apiURI: 'https://api.instantdb.com',\n websocketURI: 'wss://api.instantdb.com/runtime/session',\n};\n\n// Param that the backend adds if this is an oauth redirect\nconst OAUTH_REDIRECT_PARAM = '_instant_oauth_redirect';\n\nconst currentUserKey = `currentUser`;\n\n/**\n * @param {Object} config\n * @param {TransportType} config.transportType\n * @param {string} config.appId\n * @param {string} config.apiURI\n * @param {string} config.wsURI\n * @param {EventSourceConstructor} config.EventSourceImpl\n * @returns {WSConnection | SSEConnection}\n */\nfunction createTransport({\n transportType,\n appId,\n apiURI,\n wsURI,\n EventSourceImpl,\n}) {\n if (!EventSourceImpl) {\n return new WSConnection(`${wsURI}?app_id=${appId}`);\n }\n switch (transportType) {\n case 'ws':\n return new WSConnection(`${wsURI}?app_id=${appId}`);\n case 'sse':\n return new SSEConnection(\n EventSourceImpl,\n `${apiURI}/runtime/sse?app_id=${appId}`,\n );\n default:\n throw new Error('Unknown transport type ' + transportType);\n }\n}\n\nfunction isClient() {\n const hasWindow = typeof window !== 'undefined';\n // this checks if we are running in a chrome extension\n // @ts-expect-error\n const isChrome = typeof chrome !== 'undefined';\n\n return hasWindow || isChrome;\n}\n\nconst ignoreLogging = {\n 'set-presence': true,\n 'set-presence-ok': true,\n 'refresh-presence': true,\n 'patch-presence': true,\n};\n\nfunction querySubsFromStorage(x, useDateObjects) {\n const parsed = typeof x === 'string' ? JSON.parse(x) : x;\n for (const key in parsed) {\n const v = parsed[key];\n if (v?.result?.store) {\n const storeJSON = v.result.store;\n v.result.store = s.fromJSON({\n ...storeJSON,\n useDateObjects: useDateObjects,\n });\n }\n }\n return parsed;\n}\n\nfunction querySubsToStorage(querySubs) {\n const jsonSubs = {};\n for (const key in querySubs) {\n const sub = querySubs[key];\n const jsonSub = { ...sub };\n if (sub.result?.store) {\n jsonSub.result = {\n ...sub.result,\n store: s.toJSON(sub.result.store),\n };\n }\n jsonSubs[key] = jsonSub;\n }\n return jsonSubs;\n}\n\nfunction sortedMutationEntries(entries) {\n return [...entries].sort((a, b) => {\n const [ka, muta] = a;\n const [kb, mutb] = b;\n const a_order = muta.order || 0;\n const b_order = mutb.order || 0;\n if (a_order == b_order) {\n return ka < kb ? -1 : ka > kb ? 1 : 0;\n }\n return a_order - b_order;\n });\n}\n\n/**\n * @template {import('./presence.ts').RoomSchemaShape} [RoomSchema = {}]\n */\nexport default class Reactor {\n attrs;\n _isOnline = true;\n _isShutdown = false;\n status = STATUS.CONNECTING;\n\n /** @type {PersistedObject} */\n querySubs;\n /** @type {PersistedObject} */\n pendingMutations;\n\n /** @type {Record<string, Array<{ q: any, cb: (data: any) => any }>>} */\n queryCbs = {};\n /** @type {Record<string, Array<{ q: any, eventId: string, dfd: Deferred }>>} */\n queryOnceDfds = {};\n authCbs = [];\n attrsCbs = [];\n mutationErrorCbs = [];\n connectionStatusCbs = [];\n config;\n _persister;\n mutationDeferredStore = new Map();\n _reconnectTimeoutId = null;\n _reconnectTimeoutMs = 0;\n /** @type {Connection} */\n _transport;\n /** @type {TransportType} */\n _transportType = 'ws';\n\n /** @type {EventSourceConstructor} */\n _EventSource;\n /** @type {boolean | null} */\n _wsOk = null;\n _localIdPromises = {};\n _errorMessage = null;\n /** @type {Promise<null | {error: {message: string}}>}**/\n _oauthCallbackResponse = null;\n\n /** @type {null | import('./utils/linkIndex.ts').LinkIndex}} */\n _linkIndex = null;\n\n /** @type BroadcastChannel | undefined */\n _broadcastChannel;\n\n /** @type {Record<string, {isConnected: boolean; error: any}>} */\n _rooms = {};\n /** @type {Record<string, boolean>} */\n _roomsPendingLeave = {};\n _presence = {};\n _broadcastQueue = [];\n _broadcastSubs = {};\n _currentUserCached = { isLoading: true, error: undefined, user: undefined };\n _beforeUnloadCbs = [];\n _dataForQueryCache = {};\n /** @type {Logger} */\n _log;\n _pendingTxCleanupTimeout;\n _pendingMutationCleanupThreshold;\n _inFlightMutationEventIds = new Set();\n\n constructor(\n config,\n Storage = IndexedDBStorage,\n NetworkListener = WindowNetworkListener,\n versions,\n EventSourceConstructor,\n ) {\n this._EventSource = EventSourceConstructor;\n\n this.config = { ...defaultConfig, ...config };\n this.queryCacheLimit = this.config.queryCacheLimit ?? 10;\n this._pendingTxCleanupTimeout =\n this.config.pendingTxCleanupTimeout ?? PENDING_TX_CLEANUP_TIMEOUT;\n this._pendingMutationCleanupThreshold =\n this.config.pendingMutationCleanupThreshold ??\n PENDING_MUTATION_CLEANUP_THRESHOLD;\n\n this._log = createLogger(\n config.verbose || flags.devBackend || flags.instantLogs,\n () => this._reactorStats(),\n );\n\n this.versions = { ...(versions || {}), '@instantdb/core': version };\n\n if (this.config.schema) {\n this._linkIndex = createLinkIndex(this.config.schema);\n }\n\n // This is to protect us against running\n // server-side.\n if (!isClient()) {\n return;\n }\n\n if (!config.appId) {\n throw new Error('Instant must be initialized with an appId.');\n }\n\n if (!validateUUID(config.appId)) {\n throw new Error(\n `Instant must be initialized with a valid appId. \\`${config.appId}\\` is not a valid uuid.`,\n );\n }\n\n if (typeof BroadcastChannel === 'function') {\n this._broadcastChannel = new BroadcastChannel('@instantdb');\n this._broadcastChannel.addEventListener('message', async (e) => {\n try {\n if (e.data?.type === 'auth') {\n const res = await this.getCurrentUser();\n this.updateUser(res.user);\n }\n } catch (e) {\n this._log.error('[error] handle broadcast channel', e);\n }\n });\n }\n\n this._initStorage(Storage);\n\n this._syncTable = new SyncTable(\n this._trySendAuthed.bind(this),\n this._persister,\n {\n useDateObjects: this.config.useDateObjects,\n },\n this._log,\n (triples) =>\n s.createStore(\n this.attrs,\n triples,\n this.config.enableCardinalityInference,\n this._linkIndex,\n this.config.useDateObjects,\n ),\n );\n\n this._oauthCallbackResponse = this._oauthLoginInit();\n\n // kick off a request to cache it\n this.getCurrentUser();\n\n NetworkListener.getIsOnline().then((isOnline) => {\n this._isOnline = isOnline;\n this._startSocket();\n NetworkListener.listen((isOnline) => {\n // We do this because react native's NetInfo\n // fires multiple online events.\n // We only want to handle one state change\n if (isOnline === this._isOnline) {\n return;\n }\n this._log.info('[network] online =', isOnline);\n this._isOnline = isOnline;\n if (this._isOnline) {\n this._startSocket();\n } else {\n this._log.info(\n 'Changing status from',\n this.status,\n 'to',\n STATUS.CLOSED,\n );\n this._setStatus(STATUS.CLOSED);\n }\n });\n });\n\n if (typeof addEventListener !== 'undefined') {\n this._beforeUnload = this._beforeUnload.bind(this);\n addEventListener('beforeunload', this._beforeUnload);\n }\n }\n\n updateSchema(schema) {\n this.config = {\n ...this.config,\n schema: schema,\n cardinalityInference: Boolean(schema),\n };\n this._linkIndex = schema ? createLinkIndex(this.config.schema) : null;\n }\n\n _reactorStats() {\n return {\n inFlightMutationCount: this._inFlightMutationEventIds.size,\n pendingMutationCount: this.pendingMutations.currentValue.size,\n transportType: this._transportType,\n };\n }\n\n _initStorage(Storage) {\n this._persister = new Storage(`instant_${this.config.appId}_5`);\n this.querySubs = new PersistedObject(\n this._persister,\n 'querySubs',\n {},\n this._onMergeQuerySubs,\n querySubsToStorage,\n (x) => querySubsFromStorage(x, this.config.useDateObjects),\n );\n this.pendingMutations = new PersistedObject(\n this._persister,\n 'pendingMutations',\n new Map(),\n this._onMergePendingMutations,\n (x) => {\n return [...x.entries()];\n },\n (x) => {\n return new Map(typeof x === 'string' ? JSON.parse(x) : x);\n },\n 100, // throttle\n 100, // idlecallback timeout, flush more often for mutations\n );\n this._beforeUnloadCbs.push(() => {\n this.pendingMutations.flush();\n this.querySubs.flush();\n });\n }\n\n _beforeUnload() {\n for (const cb of this._beforeUnloadCbs) {\n cb();\n }\n this._syncTable.beforeUnload();\n }\n\n /**\n * @param {'enqueued' | 'pending' | 'synced' | 'timeout' | 'error' } status\n * @param {string} eventId\n * @param {{message?: string, type?: string, status?: number, hint?: unknown}} [errorMsg]\n */\n _finishTransaction(status, eventId, errorMsg) {\n const dfd = this.mutationDeferredStore.get(eventId);\n this.mutationDeferredStore.delete(eventId);\n const ok = status !== 'error' && status !== 'timeout';\n\n if (!dfd && !ok) {\n // console.erroring here, as there are no listeners to let know\n console.error('Mutation failed', { status, eventId, ...errorMsg });\n }\n if (!dfd) {\n return;\n }\n if (ok) {\n dfd.resolve({ status, eventId });\n } else {\n // Check if error comes from server or client\n if (errorMsg.type) {\n const { status, ...body } = errorMsg;\n dfd.reject(\n new InstantAPIError({\n // @ts-expect-error body.type is not constant typed\n body,\n status,\n }),\n );\n } else {\n dfd.reject(new InstantError(errorMsg.message, errorMsg.hint));\n }\n }\n }\n\n _setStatus(status, err) {\n this.status = status;\n this._errorMessage = err;\n this.notifyConnectionStatusSubs(status);\n }\n\n /**\n * merge querySubs from storage and in memory. Has the following side\n * effects:\n * - We notify all queryCbs because results may been added during merge\n */\n _onMergeQuerySubs = (_storageSubs, inMemorySubs) => {\n const storageSubs = _storageSubs || {};\n const ret = { ...inMemorySubs };\n\n // Consider an inMemorySub with no result;\n // If we have a result from storageSubs, let's add it\n Object.entries(inMemorySubs).forEach(([hash, querySub]) => {\n const storageResult = storageSubs?.[hash]?.result;\n const memoryResult = querySub.result;\n if (storageResult && !memoryResult) {\n ret[hash].result = storageResult;\n }\n });\n\n // Consider a storageSub with no corresponding inMemorySub\n // This means that at least at this point,\n // the user has not asked to subscribe to the query.\n // We may _still_ want to add it, because in just a\n // few milliseconds, the user will ask to subscribe to the\n // query.\n // For now, we can't really tell if the user will ask to subscribe\n // or not. So for now let's just add the first 10 queries from storage.\n // Eventually, we could be smarter about this. For example,\n // we can keep usage information about which queries are popular.\n const storageKsToAdd = Object.keys(storageSubs)\n .filter((k) => !inMemorySubs[k])\n .sort((a, b) => {\n // Sort by lastAccessed, newest first\n const aTime = storageSubs[a]?.lastAccessed || 0;\n const bTime = storageSubs[b]?.lastAccessed || 0;\n return bTime - aTime;\n })\n .slice(0, this.queryCacheLimit);\n\n storageKsToAdd.forEach((k) => {\n ret[k] = storageSubs[k];\n });\n\n // Okay, now we have merged our querySubs\n this.querySubs.set((_) => ret);\n\n this.loadedNotifyAll();\n };\n\n /**\n * merge pendingMutations from storage and in memory. Has a side effect of\n * sending mutations that were stored but not acked\n */\n _onMergePendingMutations = (storageMuts, inMemoryMuts) => {\n const ret = new Map([...storageMuts.entries(), ...inMemoryMuts.entries()]);\n this.pendingMutations.set((_) => ret);\n this.loadedNotifyAll();\n const rewrittenStorageMuts = this._rewriteMutationsSorted(\n this.attrs,\n storageMuts,\n );\n rewrittenStorageMuts.forEach(([k, mut]) => {\n if (!inMemoryMuts.has(k) && !mut['tx-id']) {\n this._sendMutation(k, mut);\n }\n });\n };\n\n _flushEnqueuedRoomData(roomId) {\n const enqueuedUserPresence = this._presence[roomId]?.result?.user;\n const enqueuedBroadcasts = this._broadcastQueue[roomId];\n\n this._broadcastQueue[roomId] = [];\n\n if (enqueuedUserPresence) {\n this._trySetPresence(roomId, enqueuedUserPresence);\n }\n\n if (enqueuedBroadcasts) {\n for (const item of enqueuedBroadcasts) {\n const { topic, roomType, data } = item;\n this._tryBroadcast(roomId, roomType, topic, data);\n }\n }\n }\n\n _handleReceive(connId, msg) {\n // opt-out, enabled by default if schema\n const enableCardinalityInference =\n Boolean(this.config.schema) &&\n ('cardinalityInference' in this.config\n ? Boolean(this.config.cardinalityInference)\n : true);\n if (!ignoreLogging[msg.op]) {\n this._log.info('[receive]', connId, msg.op, msg);\n }\n switch (msg.op) {\n case 'init-ok': {\n this._setStatus(STATUS.AUTHENTICATED);\n this._reconnectTimeoutMs = 0;\n this._setAttrs(msg.attrs);\n this._flushPendingMessages();\n // (EPH): set session-id, so we know\n // which item is us\n this._sessionId = msg['session-id'];\n\n for (const roomId of Object.keys(this._rooms)) {\n const enqueuedUserPresence = this._presence[roomId]?.result?.user;\n this._tryJoinRoom(roomId, enqueuedUserPresence);\n }\n break;\n }\n case 'add-query-exists': {\n this.notifyOneQueryOnce(weakHash(msg.q));\n break;\n }\n case 'add-query-ok': {\n const { q, result } = msg;\n const hash = weakHash(q);\n const pageInfo = result?.[0]?.data?.['page-info'];\n const aggregate = result?.[0]?.data?.['aggregate'];\n const triples = extractTriples(result);\n const store = s.createStore(\n this.attrs,\n triples,\n enableCardinalityInference,\n this._linkIndex,\n this.config.useDateObjects,\n );\n this.querySubs.set((prev) => {\n prev[hash].result = {\n store,\n pageInfo,\n aggregate,\n processedTxId: msg['processed-tx-id'],\n };\n return prev;\n });\n this._cleanupPendingMutationsQueries();\n this.notifyOne(hash);\n this.notifyOneQueryOnce(hash);\n this._cleanupPendingMutationsTimeout();\n break;\n }\n case 'start-sync-ok': {\n this._syncTable.onStartSyncOk(msg);\n break;\n }\n case 'sync-load-batch': {\n this._syncTable.onSyncLoadBatch(msg);\n break;\n }\n case 'sync-init-finish': {\n this._syncTable.onSyncInitFinish(msg);\n break;\n }\n case 'sync-update-triples': {\n this._syncTable.onSyncUpdateTriples(msg);\n break;\n }\n case 'refresh-ok': {\n const { computations, attrs } = msg;\n const processedTxId = msg['processed-tx-id'];\n if (attrs) {\n this._setAttrs(attrs);\n }\n\n this._cleanupPendingMutationsTimeout();\n\n const rewrittenMutations = this._rewriteMutations(\n this.attrs,\n this.pendingMutations.currentValue,\n processedTxId,\n );\n\n if (rewrittenMutations !== this.pendingMutations.currentValue) {\n // We know we've changed the mutations to fix the attr ids and removed\n // processed attrs, so we'll persist those changes to prevent optimisticAttrs\n // from using old attr definitions\n this.pendingMutations.set(() => rewrittenMutations);\n }\n\n const mutations = sortedMutationEntries(rewrittenMutations.entries());\n\n const updates = computations.map((x) => {\n const q = x['instaql-query'];\n const result = x['instaql-result'];\n const hash = weakHash(q);\n const triples = extractTriples(result);\n const store = s.createStore(\n this.attrs,\n triples,\n enableCardinalityInference,\n this._linkIndex,\n this.config.useDateObjects,\n );\n const newStore = this._applyOptimisticUpdates(\n store,\n mutations,\n processedTxId,\n );\n const pageInfo = result?.[0]?.data?.['page-info'];\n const aggregate = result?.[0]?.data?.['aggregate'];\n return { hash, store: newStore, pageInfo, aggregate };\n });\n\n updates.forEach(({ hash, store, pageInfo, aggregate }) => {\n this.querySubs.set((prev) => {\n prev[hash].result = { store, pageInfo, aggregate, processedTxId };\n return prev;\n });\n });\n\n this._cleanupPendingMutationsQueries();\n\n updates.forEach(({ hash }) => {\n this.notifyOne(hash);\n });\n break;\n }\n case 'transact-ok': {\n const { 'client-event-id': eventId, 'tx-id': txId } = msg;\n\n this._inFlightMutationEventIds.delete(eventId);\n\n const muts = this._rewriteMutations(\n this.attrs,\n this.pendingMutations.currentValue,\n );\n const prevMutation = muts.get(eventId);\n if (!prevMutation) {\n break;\n }\n\n // update pendingMutation with server-side tx-id\n this.pendingMutations.set((prev) => {\n prev.set(eventId, {\n ...prev.get(eventId),\n 'tx-id': txId,\n confirmed: Date.now(),\n });\n return prev;\n });\n\n const newAttrs = prevMutation['tx-steps']\n .filter(([action, ..._args]) => action === 'add-attr')\n .map(([_action, attr]) => attr)\n .concat(Object.values(this.attrs));\n\n this._setAttrs(newAttrs);\n\n this._finishTransaction('synced', eventId);\n\n this._cleanupPendingMutationsTimeout();\n\n break;\n }\n case 'patch-presence': {\n const roomId = msg['room-id'];\n this._trySetRoomConnected(roomId, true);\n this._patchPresencePeers(roomId, msg['edits']);\n this._notifyPresenceSubs(roomId);\n break;\n }\n case 'refresh-presence': {\n const roomId = msg['room-id'];\n this._trySetRoomConnected(roomId, true);\n this._setPresencePeers(roomId, msg['data']);\n this._notifyPresenceSubs(roomId);\n break;\n }\n case 'server-broadcast': {\n const room = msg['room-id'];\n const topic = msg.topic;\n this._trySetRoomConnected(room, true);\n this._notifyBroadcastSubs(room, topic, msg);\n break;\n }\n case 'join-room-ok': {\n const loadingRoomId = msg['room-id'];\n const joinedRoom = this._rooms[loadingRoomId];\n\n if (!joinedRoom) {\n if (this._roomsPendingLeave[loadingRoomId]) {\n this._tryLeaveRoom(loadingRoomId);\n delete this._roomsPendingLeave[loadingRoomId];\n }\n\n break;\n }\n\n this._trySetRoomConnected(loadingRoomId, true);\n this._flushEnqueuedRoomData(loadingRoomId);\n break;\n }\n case 'leave-room-ok': {\n const roomId = msg['room-id'];\n this._trySetRoomConnected(roomId, false);\n break;\n }\n case 'join-room-error':\n const errorRoomId = msg['room-id'];\n const errorRoom = this._rooms[errorRoomId];\n if (errorRoom) {\n errorRoom.error = msg['error'];\n }\n this._notifyPresenceSubs(errorRoomId);\n break;\n case 'error':\n this._handleReceiveError(msg);\n break;\n default:\n this._log.info('Uknown op', msg.op, msg);\n break;\n }\n }\n\n /**\n * @param {'timeout' | 'error'} status\n * @param {string} eventId\n * @param {{message: string, type?: string, status?: number, hint?: unknown}} errorMsg\n */\n _handleMutationError(status, eventId, errorMsg) {\n const mut = this.pendingMutations.currentValue.get(eventId);\n\n if (mut && (status !== 'timeout' || !mut['tx-id'])) {\n this.pendingMutations.set((prev) => {\n prev.delete(eventId);\n return prev;\n });\n this._inFlightMutationEventIds.delete(eventId);\n const errDetails = {\n message: errorMsg.message,\n hint: errorMsg.hint,\n };\n this.notifyAll();\n this.notifyAttrsSubs();\n this.notifyMutationErrorSubs(errDetails);\n this._finishTransaction(status, eventId, errorMsg);\n }\n }\n\n _handleReceiveError(msg) {\n console.log('error', msg);\n const eventId = msg['client-event-id'];\n // This might not be a mutation, but it can't hurt to delete it\n this._inFlightMutationEventIds.delete(eventId);\n const prevMutation = this.pendingMutations.currentValue.get(eventId);\n const errorMessage = {\n message: msg.message || 'Uh-oh, something went wrong. Ping Joe & Stopa.',\n };\n\n if (msg.hint) {\n errorMessage.hint = msg.hint;\n }\n\n if (prevMutation) {\n this._handleMutationError('error', eventId, msg);\n return;\n }\n\n if (\n msg['original-event']?.hasOwnProperty('q') &&\n msg['original-event']?.op === 'add-query'\n ) {\n const q = msg['original-event']?.q;\n const hash = weakHash(q);\n this.notifyQueryError(weakHash(q), errorMessage);\n this.notifyQueryOnceError(q, hash, eventId, errorMessage);\n return;\n }\n\n const isInitError = msg['original-event']?.op === 'init';\n if (isInitError) {\n if (\n msg.type === 'record-not-found' &&\n msg.hint?.['record-type'] === 'app-user'\n ) {\n // User has been logged out\n this.changeCurrentUser(null);\n return;\n }\n\n // We failed to init\n\n this._setStatus(STATUS.ERRORED, errorMessage);\n this.notifyAll();\n return;\n }\n\n if (msg['original-event']?.op === 'resync-table') {\n this._syncTable.onResyncError(msg);\n return;\n }\n\n if (msg['original-event']?.op === 'start-sync') {\n this._syncTable.onStartSyncError(msg);\n return;\n }\n // We've caught some error which has no corresponding listener.\n // Let's console.error to let the user know.\n const errorObj = { ...msg };\n delete errorObj.message;\n delete errorObj.hint;\n console.error(msg.message, errorObj);\n if (msg.hint) {\n console.error(\n 'This error comes with some debugging information. Here it is: \\n',\n msg.hint,\n );\n }\n }\n\n notifyQueryOnceError(q, hash, eventId, e) {\n const r = this.queryOnceDfds[hash]?.find((r) => r.eventId === eventId);\n if (!r) return;\n r.dfd.reject(e);\n this._completeQueryOnce(q, hash, r.dfd);\n }\n\n _setAttrs(attrs) {\n this.attrs = attrs.reduce((acc, attr) => {\n acc[attr.id] = attr;\n return acc;\n }, {});\n\n this.notifyAttrsSubs();\n }\n\n // ---------------------------\n // Queries\n\n getPreviousResult = (q) => {\n const hash = weakHash(q);\n return this.dataForQuery(hash);\n };\n\n _startQuerySub(q, hash) {\n const eventId = uuid();\n this.querySubs.set((prev) => {\n prev[hash] = prev[hash] || { q, result: null, eventId };\n prev[hash].lastAccessed = Date.now();\n return prev;\n });\n this._trySendAuthed(eventId, { op: 'add-query', q });\n\n return eventId;\n }\n\n subscribeTable(q, cb) {\n return this._syncTable.subscribe(q, cb);\n }\n\n /**\n * When a user subscribes to a query the following side effects occur:\n *\n * - We update querySubs to include the new query\n * - We update queryCbs to include the new cb\n * - If we already have a result for the query we call cb immediately\n * - We send the server an `add-query` message\n *\n * Returns an unsubscribe function\n */\n subscribeQuery(q, cb, opts) {\n if (!this.config.disableValidation) {\n validateQuery(q, this.config.schema);\n }\n if (opts && 'ruleParams' in opts) {\n q = { $$ruleParams: opts['ruleParams'], ...q };\n }\n\n const hash = weakHash(q);\n\n const prevResult = this.getPreviousResult(q);\n if (prevResult) {\n cb(prevResult);\n }\n\n this.queryCbs[hash] = this.queryCbs[hash] ?? [];\n this.queryCbs[hash].push({ q, cb });\n\n this._startQuerySub(q, hash);\n\n return () => {\n this._unsubQuery(q, hash, cb);\n };\n }\n\n queryOnce(q, opts) {\n if (!this.config.disableValidation) {\n validateQuery(q, this.config.schema);\n }\n\n if (opts && 'ruleParams' in opts) {\n q = { $$ruleParams: opts['ruleParams'], ...q };\n }\n\n const dfd = new Deferred();\n\n if (!this._isOnline) {\n dfd.reject(\n new Error(\"We can't run `queryOnce`, because the device is offline.\"),\n );\n return dfd.promise;\n }\n\n if (!this.querySubs) {\n dfd.reject(\n new Error(\n \"We can't run `queryOnce` on the backend. Use adminAPI.query instead: https://www.instantdb.com/docs/backend#query\",\n ),\n );\n return dfd.promise;\n }\n\n const hash = weakHash(q);\n\n const eventId = this._startQuerySub(q, hash);\n\n this.queryOnceDfds[hash] = this.queryOnceDfds[hash] ?? [];\n this.queryOnceDfds[hash].push({ q, dfd, eventId });\n\n setTimeout(\n () => dfd.reject(new Error('Query timed out')),\n QUERY_ONCE_TIMEOUT,\n );\n\n return dfd.promise;\n }\n\n _completeQueryOnce(q, hash, dfd) {\n if (!this.queryOnceDfds[hash]) return;\n\n this.queryOnceDfds[hash] = this.queryOnceDfds[hash].filter(\n (r) => r.dfd !== dfd,\n );\n\n this._cleanupQuery(q, hash);\n }\n\n _unsubQuery(q, hash, cb) {\n if (!this.queryCbs[hash]) return;\n\n this.queryCbs[hash] = this.queryCbs[hash].filter((r) => r.cb !== cb);\n\n this._cleanupQuery(q, hash);\n }\n\n _cleanupQuery(q, hash) {\n const hasListeners =\n this.queryCbs[hash]?.length || this.queryOnceDfds[hash]?.length;\n\n if (hasListeners) return;\n\n delete this.queryCbs[hash];\n delete this.queryOnceDfds[hash];\n\n this._trySendAuthed(uuid(), { op: 'remove-query', q });\n }\n\n // When we `pushTx`, it's possible that we don't yet have `this.attrs`\n // This means that `tx-steps` in `pendingMutations` will include `add-attr`\n // commands for attrs that already exist.\n //\n // This will also affect `add-triple` and `retract-triple` which\n // reference attr-ids that do not match the server.\n //\n // We fix this by rewriting `tx-steps` in each `pendingMutation`.\n // We remove `add-attr` commands for attrs that already exist.\n // We update `add-triple` and `retract-triple` commands to use the\n // server attr-ids.\n _rewriteMutations(attrs, muts, processedTxId) {\n if (!attrs) return muts;\n const findExistingAttr = (attr) => {\n const [_, etype, label] = attr['forward-identity'];\n const existing = instaml.getAttrByFwdIdentName(attrs, etype, label);\n return existing;\n };\n const findReverseAttr = (attr) => {\n const [_, etype, label] = attr['forward-identity'];\n const revAttr = instaml.getAttrByReverseIdentName(attrs, etype, label);\n return revAttr;\n };\n const mapping = { attrIdMap: {}, refSwapAttrIds: new Set() };\n let mappingChanged = false;\n\n const rewriteTxSteps = (txSteps, txId) => {\n const retTxSteps = [];\n for (const txStep of txSteps) {\n const [action] = txStep;\n\n // Handles add-attr\n // If existing, we drop it, and track it\n // to update add/retract triples\n if (action === 'add-attr') {\n const [_action, attr] = txStep;\n const existing = findExistingAttr(attr);\n if (existing && attr.id !== existing.id) {\n mapping.attrIdMap[attr.id] = existing.id;\n mappingChanged = true;\n continue;\n }\n if (attr['value-type'] === 'ref') {\n const revAttr = findReverseAttr(attr);\n if (revAttr) {\n mapping.attrIdMap[attr.id] = revAttr.id;\n mapping.refSwapAttrIds.add(attr.id);\n mappingChanged = true;\n continue;\n }\n }\n }\n\n if (\n (processedTxId &&\n txId &&\n processedTxId >= txId &&\n action === 'add-attr') ||\n action === 'update-attr' ||\n action === 'delete-attr'\n ) {\n mappingChanged = true;\n // Don't add this step because we already have the newer attrs\n continue;\n }\n // Handles add-triple|retract-triple\n // If in mapping, we update the attr-id\n const newTxStep = mappingChanged\n ? instaml.rewriteStep(mapping, txStep)\n : txStep;\n\n retTxSteps.push(newTxStep);\n }\n\n return mappingChanged ? retTxSteps : txSteps;\n };\n\n const rewritten = new Map();\n for (const [k, mut] of muts.entries()) {\n rewritten.set(k, {\n ...mut,\n 'tx-steps': rewriteTxSteps(mut['tx-steps'], mut['tx-id']),\n });\n }\n if (!mappingChanged) {\n return muts;\n }\n return rewritten;\n }\n\n _rewriteMutationsSorted(attrs, muts) {\n return sortedMutationEntries(this._rewriteMutations(attrs, muts).entries());\n }\n\n // ---------------------------\n // Transact\n\n optimisticAttrs() {\n const pendingMutationSteps = [\n ...this.pendingMutations.currentValue.values(),\n ] // hack due to Map()\n .flatMap((x) => x['tx-steps']);\n\n const deletedAttrIds = new Set(\n pendingMutationSteps\n .filter(([action, _attr]) => action === 'delete-attr')\n .map(([_action, id]) => id),\n );\n\n const pendingAttrs = [];\n for (const [_action, attr] of pendingMutationSteps) {\n if (_action === 'add-attr') {\n pendingAttrs.push(attr);\n } else if (\n _action === 'update-attr' &&\n attr.id &&\n this.attrs?.[attr.id]\n ) {\n const fullAttr = { ...this.attrs[attr.id], ...attr };\n pendingAttrs.push(fullAttr);\n }\n }\n\n const attrsWithoutDeleted = [\n ...Object.values(this.attrs || {}),\n ...pendingAttrs,\n ].filter((a) => !deletedAttrIds.has(a.id));\n\n const attrsRecord = Object.fromEntries(\n attrsWithoutDeleted.map((a) => [a.id, a]),\n );\n\n return attrsRecord;\n }\n\n /** Runs instaql on a query and a store */\n dataForQuery(hash) {\n const errorMessage = this._errorMessage;\n if (errorMessage) {\n return { error: errorMessage };\n }\n if (!this.querySubs) return;\n if (!this.pendingMutations) return;\n const querySubVersion = this.querySubs.version();\n const querySubs = this.querySubs.currentValue;\n const pendingMutationsVersion = this.pendingMutations.version();\n const pendingMutations = this.pendingMutations.currentValue;\n\n const { q, result } = querySubs[hash] || {};\n if (!result) return;\n\n const cached = this._dataForQueryCache[hash];\n if (\n cached &&\n querySubVersion === cached.querySubVersion &&\n pendingMutationsVersion === cached.pendingMutationsVersion\n ) {\n return cached.data;\n }\n\n const { store, pageInfo, aggregate, processedTxId } = result;\n const mutations = this._rewriteMutationsSorted(\n store.attrs,\n pendingMutations,\n );\n const newStore = this._applyOptimisticUpdates(\n store,\n mutations,\n processedTxId,\n );\n const resp = instaql({ store: newStore, pageInfo, aggregate }, q);\n\n this._dataForQueryCache[hash] = {\n querySubVersion,\n pendingMutationsVersion,\n data: resp,\n };\n\n return resp;\n }\n\n _applyOptimisticUpdates(store, mutations, processedTxId) {\n for (const [_, mut] of mutations) {\n if (!mut['tx-id'] || (processedTxId && mut['tx-id'] > processedTxId)) {\n store = s.transact(store, mut['tx-steps']);\n }\n }\n return store;\n }\n\n /** Re-run instaql and call all callbacks with new data */\n notifyOne = (hash) => {\n const cbs = this.queryCbs[hash] ?? [];\n const prevData = this._dataForQueryCache[hash]?.data;\n const data = this.dataForQuery(hash);\n\n if (!data) return;\n if (areObjectsDeepEqual(data, prevData)) return;\n\n cbs.forEach((r) => r.cb(data));\n };\n\n notifyOneQueryOnce = (hash) => {\n const dfds = this.queryOnceDfds[hash] ?? [];\n const data = this.dataForQuery(hash);\n\n dfds.forEach((r) => {\n this._completeQueryOnce(r.q, hash, r.dfd);\n r.dfd.resolve(data);\n });\n };\n\n notifyQueryError = (hash, error) => {\n const cbs = this.queryCbs[hash] || [];\n cbs.forEach((r) => r.cb({ error }));\n };\n\n /** Re-compute all subscriptions */\n notifyAll() {\n Object.keys(this.queryCbs).forEach((hash) => {\n this.notifyOne(hash);\n });\n }\n\n loadedNotifyAll() {\n if (this.pendingMutations.isLoading() || this.querySubs.isLoading()) return;\n this.notifyAll();\n }\n\n /** Applies transactions locally and sends transact message to server */\n pushTx = (chunks) => {\n // Throws if transactions are invalid\n if (!this.config.disableValidation) {\n validateTransactions(chunks, this.config.schema);\n }\n try {\n const txSteps = instaml.transform(\n {\n attrs: this.optimisticAttrs(),\n schema: this.config.schema,\n stores: Object.values(this.querySubs.currentValue).map(\n (sub) => sub?.result?.store,\n ),\n useDateObjects: this.config.useDateObjects,\n },\n chunks,\n );\n return this.pushOps(txSteps);\n } catch (e) {\n return this.pushOps([], e);\n }\n };\n\n /**\n * @param {*} txSteps\n * @param {*} [error]\n * @returns\n */\n pushOps = (txSteps, error) => {\n const eventId = uuid();\n const mutations = [...this.pendingMutations.currentValue.values()];\n const order = Math.max(0, ...mutations.map((mut) => mut.order || 0)) + 1;\n const mutation = {\n op: 'transact',\n 'tx-steps': txSteps,\n created: Date.now(),\n error,\n order,\n };\n this.pendingMutations.set((prev) => {\n prev.set(eventId, mutation);\n return prev;\n });\n\n const dfd = new Deferred();\n this.mutationDeferredStore.set(eventId, dfd);\n this._sendMutation(eventId, mutation);\n\n this.notifyAll();\n\n return dfd.promise;\n };\n\n shutdown() {\n this._log.info('[shutdown]', this.config.appId);\n this._isShutdown = true;\n this._transport?.close();\n }\n\n /**\n * Sends mutation to server and schedules a timeout to cancel it if\n * we don't hear back in time.\n * Note: If we're offline we don't schedule a timeout, we'll schedule it\n * later once we're back online and send the mutation again\n *\n */\n _sendMutation(eventId, mutation) {\n if (mutation.error) {\n this._handleMutationError('error', eventId, {\n message: mutation.error.message,\n });\n return;\n }\n if (this.status !== STATUS.AUTHENTICATED) {\n this._finishTransaction('enqueued', eventId);\n return;\n }\n const timeoutMs = Math.max(\n 6000,\n Math.min(\n this._inFlightMutationEventIds.size + 1,\n // Defensive code in case we don't clean up in flight mutation event ids\n this.pendingMutations.currentValue.size + 1,\n ) * 6000,\n );\n\n if (!this._isOnline) {\n this._finishTransaction('enqueued', eventId);\n } else {\n this._trySend(eventId, mutation);\n\n setTimeout(() => {\n if (!this._isOnline) {\n return;\n }\n // If we are here, this means that we have sent this mutation, we are online\n // but we have not received a response. If it's this long, something must be wrong,\n // so we error with a timeout.\n this._handleMutationError('timeout', eventId, {\n message: 'transaction timed out',\n });\n }, timeoutMs);\n }\n }\n\n // ---------------------------\n // Websocket\n\n /** Send messages we accumulated while we were connecting */\n _flushPendingMessages() {\n const subs = Object.keys(this.queryCbs).map((hash) => {\n return this.querySubs.currentValue[hash];\n });\n // Note: we should not have any nulls in subs, but we're\n // doing this defensively just in case.\n const safeSubs = subs.filter((x) => x);\n safeSubs.forEach(({ eventId, q }) => {\n this._trySendAuthed(eventId, { op: 'add-query', q });\n });\n\n Object.values(this.queryOnceDfds)\n .flat()\n .forEach(({ eventId, q }) => {\n this._trySendAuthed(eventId, { op: 'add-query', q });\n });\n\n const muts = this._rewriteMutationsSorted(\n this.attrs,\n this.pendingMutations.currentValue,\n );\n muts.forEach(([eventId, mut]) => {\n if (!mut['tx-id']) {\n this._sendMutation(eventId, mut);\n }\n });\n\n this._syncTable.flushPending();\n }\n\n /**\n * Clean up pendingMutations that all queries have seen\n */\n _cleanupPendingMutationsQueries() {\n let minProcessedTxId = Number.MAX_SAFE_INTEGER;\n for (const { result } of Object.values(this.querySubs.currentValue)) {\n if (result?.processedTxId) {\n minProcessedTxId = Math.min(minProcessedTxId, result?.processedTxId);\n }\n }\n\n this.pendingMutations.set((prev) => {\n for (const [eventId, mut] of Array.from(prev.entries())) {\n if (mut['tx-id'] && mut['tx-id'] <= minProcessedTxId) {\n prev.delete(eventId);\n }\n }\n return prev;\n });\n }\n\n /**\n * After mutations is confirmed by server, we give each query 30 sec\n * to update its results. If that doesn't happen, we assume query is\n * unaffected by this mutation and it’s safe to delete it from local queue\n */\n _cleanupPendingMutationsTimeout() {\n if (\n this.pendingMutations.currentValue.size <\n this._pendingMutationCleanupThreshold\n ) {\n return;\n }\n\n const now = Date.now();\n\n this.pendingMutations.set((prev) => {\n for (const [eventId, mut] of Array.from(prev.entries())) {\n if (\n mut.confirmed &&\n mut.confirmed + this._pendingTxCleanupTimeout < now\n ) {\n prev.delete(eventId);\n }\n }\n\n return prev;\n });\n }\n\n _trySendAuthed(...args) {\n if (this.status !== STATUS.AUTHENTICATED) {\n return;\n }\n this._trySend(...args);\n }\n\n _trySend(eventId, msg, opts) {\n if (!this._transport.isOpen()) {\n return;\n }\n if (!ignoreLogging[msg.op]) {\n this._log.info('[send]', this._transport.id, msg.op, msg);\n }\n switch (msg.op) {\n case 'transact': {\n this._inFlightMutationEventIds.add(eventId);\n break;\n }\n case 'init': {\n // New connection, so we can't have any mutations in flight\n this._inFlightMutationEventIds.clear();\n }\n }\n this._transport.send({ 'client-event-id': eventId, ...msg });\n }\n\n _transportOnOpen = (e) => {\n const targetTransport = e.target;\n if (this._transport !== targetTransport) {\n this._log.info(\n '[socket][open]',\n targetTransport.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n this._log.info('[socket][open]', this._transport.id);\n this._setStatus(STATUS.OPENED);\n\n this.getCurrentUser()\n .then((resp) => {\n this._trySend(uuid(), {\n op: 'init',\n 'app-id': this.config.appId,\n 'refresh-token': resp.user?.['refresh_token'],\n versions: this.versions,\n // If an admin token is provided for an app, we will\n // skip all permission checks. This is an advanced feature,\n // to let users write internal tools\n // This option is not exposed in `Config`, as it's\n // not ready for prime time\n '__admin-token': this.config.__adminToken,\n });\n })\n .catch((e) => {\n this._log.error('[socket][error]', targetTransport.id, e);\n });\n };\n\n _transportOnMessage = (e) => {\n const targetTransport = e.target;\n const m = e.message;\n if (this._transport !== targetTransport) {\n this._log.info(\n '[socket][message]',\n targetTransport.id,\n m,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n\n if (!this._wsOk && targetTransport.type === 'ws') {\n this._wsOk = true;\n }\n // Try to reconnect via websocket the next time we connect\n this._transportType = 'ws';\n this._handleReceive(targetTransport.id, e.message);\n };\n\n _transportOnError = (e) => {\n const targetTransport = e.target;\n if (this._transport !== targetTransport) {\n this._log.info(\n '[socket][error]',\n targetTransport.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n this._log.error('[socket][error]', targetTransport.id, e);\n };\n\n _scheduleReconnect = () => {\n // If we couldn't connect with a websocket last time, try sse\n if (!this._wsOk && this._transportType !== 'sse') {\n this._transportType = 'sse';\n this._reconnectTimeoutMs = 0;\n }\n setTimeout(() => {\n this._reconnectTimeoutMs = Math.min(\n this._reconnectTimeoutMs + 1000,\n 10000,\n );\n if (!this._isOnline) {\n this._log.info(\n '[socket][close]',\n this._transport.id,\n 'we are offline, no need to start socket',\n );\n return;\n }\n\n this._startSocket();\n }, this._reconnectTimeoutMs);\n };\n\n _transportOnClose = (e) => {\n const targetTransport = e.target;\n if (this._transport !== targetTransport) {\n this._log.info(\n '[socket][close]',\n targetTransport.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n\n this._setStatus(STATUS.CLOSED);\n\n for (const room of Object.values(this._rooms)) {\n room.isConnected = false;\n }\n\n if (this._isShutdown) {\n this._log.info(\n '[socket][close]',\n targetTransport.id,\n 'Reactor has been shut down and will not reconnect',\n );\n return;\n }\n this._log.info(\n '[socket][close]',\n targetTransport.id,\n 'schedule reconnect, ms =',\n this._reconnectTimeoutMs,\n );\n this._scheduleReconnect();\n };\n\n _startSocket() {\n // Reset whether we support websockets each time we connect\n // new networks may not support websockets\n this._wsOk = null;\n if (this._isShutdown) {\n this._log.info(\n '[socket][start]',\n this.config.appId,\n 'Reactor has been shut down and will not start a new socket',\n );\n return;\n }\n if (this._transport && this._transport.isConnecting()) {\n // Our current websocket is in a 'connecting' state.\n // There's no need to start another one, as the socket is\n // effectively fresh.\n this._log.info(\n '[socket][start]',\n this._transport.id,\n 'maintained as current transport, we were still in a connecting state',\n );\n return;\n }\n const prevTransport = this._transport;\n this._transport = createTransport({\n transportType: this._transportType,\n appId: this.config.appId,\n apiURI: this.config.apiURI,\n wsURI: this.config.websocketURI,\n EventSourceImpl: this._EventSource,\n });\n this._transport.onopen = this._transportOnOpen;\n this._transport.onmessage = this._transportOnMessage;\n this._transport.onclose = this._transportOnClose;\n this._transport.onerror = this._transportOnError;\n this._log.info('[socket][start]', this._transport.id);\n if (prevTransport?.isOpen()) {\n // When the network dies, it doesn't always mean that our\n // socket connection will fire a close event.\n //\n // We _could_ re-use the old socket, if the network drop was a\n // few seconds. But, to be safe right now we always create a new socket.\n //\n // This means that we have to make sure to kill the previous one ourselves.\n // c.f https://issues.chromium.org/issues/41343684\n this._log.info(\n '[socket][start]',\n this._transport.id,\n 'close previous transport id = ',\n prevTransport.id,\n );\n prevTransport.close();\n }\n }\n\n /**\n * Given a key, returns a stable local id, unique to this device and app.\n *\n * This can be useful if you want to create guest ids for example.\n *\n * Note: If the user deletes their local storage, this id will change.\n *\n * We use this._localIdPromises to ensure that we only generate a local\n * id once, even if multiple callers call this function concurrently.\n */\n async getLocalId(name) {\n const k = `localToken_${name}`;\n const id = await this._persister.getItem(k);\n if (id) return id;\n if (this._localIdPromises[k]) {\n return this._localIdPromises[k];\n }\n const newId = uuid();\n this._localIdPromises[k] = this._persister\n .setItem(k, newId)\n .then(() => newId);\n return this._localIdPromises[k];\n }\n\n // ----\n // Auth\n _replaceUrlAfterOAuth() {\n if (typeof URL === 'undefined') {\n return;\n }\n const url = new URL(window.location.href);\n if (url.searchParams.get(OAUTH_REDIRECT_PARAM)) {\n const startUrl = url.toString();\n url.searchParams.delete(OAUTH_REDIRECT_PARAM);\n url.searchParams.delete('code');\n url.searchParams.delete('error');\n const newPath =\n url.pathname +\n (url.searchParams.size ? '?' + url.searchParams : '') +\n url.hash;\n // Note: In next.js, this will revert to the old state if user navigates\n // back. We would need to allow framework specific routing to work\n // around that problem.\n history.replaceState(history.state, '', newPath);\n\n // navigation is part of the HTML spec, but not supported by Safari\n // or Firefox yet:\n // https://developer.mozilla.org/en-US/docs/Web/API/Navigation_API#browser_compatibility\n if (\n // @ts-ignore (waiting for ts support)\n typeof navigation === 'object' &&\n // @ts-ignore (waiting for ts support)\n typeof navigation.addEventListener === 'function' &&\n // @ts-ignore (waiting for ts support)\n typeof navigation.removeEventListener === 'function'\n ) {\n let ran = false;\n\n // The next.js app router will reset the URL when the router loads.\n // This puts it back after the router loads.\n const listener = (e) => {\n if (!ran) {\n ran = true;\n // @ts-ignore (waiting for ts support)\n navigation.removeEventListener('navigate', listener);\n if (\n !e.userInitiated &&\n e.navigationType === 'replace' &&\n e.destination?.url === startUrl\n ) {\n history.replaceState(history.state, '', newPath);\n }\n }\n };\n // @ts-ignore (waiting for ts support)\n navigation.addEventListener('navigate', listener);\n }\n }\n }\n\n /**\n *\n * @returns Promise<null | {error: {message: string}}>\n */\n async _oauthLoginInit() {\n if (\n typeof window === 'undefined' ||\n typeof window.location === 'undefined' ||\n typeof URLSearchParams === 'undefined'\n ) {\n return null;\n }\n const params = new URLSearchParams(window.location.search);\n if (!params.get(OAUTH_REDIRECT_PARAM)) {\n return null;\n }\n\n const error = params.get('error');\n if (error) {\n this._replaceUrlAfterOAuth();\n return { error: { message: error } };\n }\n const code = params.get('code');\n if (!code) {\n return null;\n }\n this._replaceUrlAfterOAuth();\n try {\n const currentUser = await this._getCurrentUser();\n const isGuest = currentUser?.type === 'guest';\n const { user } = await authAPI.exchangeCodeForToken({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n code,\n refreshToken: isGuest ? currentUser.refresh_token : undefined,\n });\n this.setCurrentUser(user);\n return null;\n } catch (e) {\n if (\n e?.body?.type === 'record-not-found' &&\n e?.body?.hint?.['record-type'] === 'app-oauth-code' &&\n (await this._hasCurrentUser())\n ) {\n // We probably just weren't able to clean up the URL, so\n // let's just ignore this error\n return null;\n }\n const message = e?.body?.message || 'Error logging in.';\n return { error: { message } };\n }\n }\n\n async _waitForOAuthCallbackResponse() {\n return await this._oauthCallbackResponse;\n }\n\n __subscribeMutationErrors(cb) {\n this.mutationErrorCbs.push(cb);\n\n return () => {\n this.mutationErrorCbs = this.mutationErrorCbs.filter((x) => x !== cb);\n };\n }\n\n subscribeAuth(cb) {\n this.authCbs.push(cb);\n const currUserCached = this._currentUserCached;\n if (!currUserCached.isLoading) {\n cb(this._currentUserCached);\n }\n let unsubbed = false;\n this.getCurrentUser().then((resp) => {\n if (unsubbed) return;\n if (areObjectsDeepEqual(resp, currUserCached)) return;\n cb(resp);\n });\n return () => {\n unsubbed = true;\n this.authCbs = this.authCbs.filter((x) => x !== cb);\n };\n }\n\n async getAuth() {\n const { user, error } = await this.getCurrentUser();\n if (error) {\n throw new InstantError('Could not get current user: ' + error.message);\n }\n return user;\n }\n\n subscribeConnectionStatus(cb) {\n this.connectionStatusCbs.push(cb);\n\n return () => {\n this.connectionStatusCbs = this.connectionStatusCbs.filter(\n (x) => x !== cb,\n );\n };\n }\n\n subscribeAttrs(cb) {\n this.attrsCbs.push(cb);\n\n if (this.attrs) {\n cb(this.attrs);\n }\n\n return () => {\n this.attrsCbs = this.attrsCbs.filter((x) => x !== cb);\n };\n }\n\n notifyAuthSubs(user) {\n this.authCbs.forEach((cb) => cb(user));\n }\n\n notifyMutationErrorSubs(error) {\n this.mutationErrorCbs.forEach((cb) => cb(error));\n }\n\n notifyAttrsSubs() {\n if (!this.attrs) return;\n const oas = this.optimisticAttrs();\n this.attrsCbs.forEach((cb) => cb(oas));\n }\n\n notifyConnectionStatusSubs(status) {\n this.connectionStatusCbs.forEach((cb) => cb(status));\n }\n\n async setCurrentUser(user) {\n await this._persister.setItem(currentUserKey, user);\n }\n\n getCurrentUserCached() {\n return this._currentUserCached;\n }\n\n async _getCurrentUser() {\n const user = await this._persister.getItem(currentUserKey);\n return typeof user === 'string' ? JSON.parse(user) : user;\n }\n\n async getCurrentUser() {\n const oauthResp = await this._waitForOAuthCallbackResponse();\n if (oauthResp?.error) {\n const errorV = { error: oauthResp.error, user: undefined };\n this._currentUserCached = { isLoading: false, ...errorV };\n return errorV;\n }\n const user = await this._getCurrentUser();\n const userV = { user: user, error: undefined };\n this._currentUserCached = {\n isLoading: false,\n ...userV,\n };\n return userV;\n }\n\n async _hasCurrentUser() {\n const user = await this._persister.getItem(currentUserKey);\n return JSON.parse(user) != null;\n }\n\n async changeCurrentUser(newUser) {\n const { user: oldUser } = await this.getCurrentUser();\n if (areObjectsDeepEqual(oldUser, newUser)) {\n // We were already logged in as the newUser, don't\n // bother updating\n return;\n }\n await this.setCurrentUser(newUser);\n // We need to remove all `result` from querySubs,\n // as they are no longer valid for the new user\n this.updateUser(newUser);\n\n try {\n this._broadcastChannel?.postMessage({ type: 'auth' });\n } catch (error) {\n console.error('Error posting message to broadcast channel', error);\n }\n }\n\n updateUser(newUser) {\n const newV = { error: undefined, user: newUser };\n this._currentUserCached = { isLoading: false, ...newV };\n this._dataForQueryCache = {};\n this.querySubs.set((prev) => {\n Object.keys(prev).forEach((k) => {\n delete prev[k].result;\n });\n return prev;\n });\n this._reconnectTimeoutMs = 0;\n this._transport.close();\n this._oauthCallbackResponse = null;\n this.notifyAuthSubs(newV);\n }\n\n sendMagicCode({ email }) {\n return authAPI.sendMagicCode({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n email: email,\n });\n }\n\n async signInWithMagicCode({ email, code }) {\n const currentUser = await this.getCurrentUser();\n const isGuest = currentUser?.user?.type === 'guest';\n const res = await authAPI.verifyMagicCode({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n email,\n code,\n refreshToken: isGuest ? currentUser.user.refresh_token : undefined,\n });\n await this.changeCurrentUser(res.user);\n return res;\n }\n\n async signInWithCustomToken(authToken) {\n const res = await authAPI.verifyRefreshToken({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n refreshToken: authToken,\n });\n await this.changeCurrentUser(res.user);\n return res;\n }\n\n async signInAsGuest() {\n const res = await authAPI.signInAsGuest({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n });\n await this.changeCurrentUser(res.user);\n return res;\n }\n\n potentiallyInvalidateToken(currentUser, opts) {\n const refreshToken = currentUser?.user?.refresh_token;\n if (!refreshToken) {\n return;\n }\n const wantsToSkip = opts.invalidateToken === false;\n if (wantsToSkip) {\n this._log.info('[auth-invalidate] skipped invalidateToken');\n return;\n }\n authAPI\n .signOut({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n refreshToken,\n })\n .then(() => {\n this._log.info('[auth-invalidate] completed invalidateToken');\n })\n .catch((e) => {});\n }\n\n async signOut(opts) {\n const currentUser = await this.getCurrentUser();\n this.potentiallyInvalidateToken(currentUser, opts);\n await this.changeCurrentUser(null);\n }\n\n /**\n * Creates an OAuth authorization URL.\n *\n * @param {Object} params - The parameters to create the authorization URL.\n * @param {string} params.clientName - The name of the client requesting authorization.\n * @param {string} params.redirectURL - The URL to redirect users to after authorization.\n * @returns {string} The created authorization URL.\n */\n createAuthorizationURL({ clientName, redirectURL }) {\n const { apiURI, appId } = this.config;\n return `${apiURI}/runtime/oauth/start?app_id=${appId}&client_name=${clientName}&redirect_uri=${redirectURL}`;\n }\n\n /**\n * @param {Object} params\n * @param {string} params.code - The code received from the OAuth service.\n * @param {string} [params.codeVerifier] - The code verifier used to generate the code challenge.\n */\n async exchangeCodeForToken({ code, codeVerifier }) {\n const currentUser = await this.getCurrentUser();\n const isGuest = currentUser?.user?.type === 'guest';\n const res = await authAPI.exchangeCodeForToken({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n code: code,\n codeVerifier,\n refreshToken: isGuest ? currentUser.user.refresh_token : undefined,\n });\n await this.changeCurrentUser(res.user);\n return res;\n }\n\n issuerURI() {\n const { apiURI, appId } = this.config;\n return `${apiURI}/runtime/${appId}`;\n }\n\n /**\n * @param {Object} params\n * @param {string} params.clientName - The name of the client requesting authorization.\n * @param {string} params.idToken - The id_token from the external service\n * @param {string | null | undefined} [params.nonce] - The nonce used when requesting the id_token from the external service\n */\n async signInWithIdToken({ idToken, clientName, nonce }) {\n const currentUser = await this.getCurrentUser();\n const refreshToken = currentUser?.user?.refresh_token;\n\n const res = await authAPI.signInWithIdToken({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n idToken,\n clientName,\n nonce,\n refreshToken,\n });\n await this.changeCurrentUser(res.user);\n return res;\n }\n\n // --------\n // Rooms\n\n /**\n * @param {string} roomId\n * @param {any | null | undefined} [initialPresence] -- initial presence data to send when joining the room\n * @returns () => void\n */\n joinRoom(roomId, initialPresence) {\n let needsToSendJoin = false;\n if (!this._rooms[roomId]) {\n needsToSendJoin = true;\n this._rooms[roomId] = {\n isConnected: false,\n error: undefined,\n };\n }\n\n this._presence[roomId] = this._presence[roomId] || {};\n const previousResult = this._presence[roomId].result;\n if (initialPresence && !previousResult) {\n this._presence[roomId].result = this._presence[roomId].result || {};\n this._presence[roomId].result.user = initialPresence;\n this._notifyPresenceSubs(roomId);\n }\n\n if (needsToSendJoin) {\n this._tryJoinRoom(roomId, initialPresence);\n }\n\n return () => {\n this._cleanupRoom(roomId);\n };\n }\n\n _cleanupRoom(roomId) {\n if (\n !this._presence[roomId]?.handlers?.length &&\n !Object.keys(this._broadcastSubs[roomId] ?? {}).length\n ) {\n const isConnected = this._rooms[roomId]?.isConnected;\n\n delete this._rooms[roomId];\n delete this._presence[roomId];\n delete this._broadcastSubs[roomId];\n\n if (isConnected) {\n this._tryLeaveRoom(roomId);\n } else {\n this._roomsPendingLeave[roomId] = true;\n }\n }\n }\n\n // --------\n // Presence\n\n // TODO: look into typing again\n getPresence(roomType, roomId, opts = {}) {\n const room = this._rooms[roomId];\n const presence = this._presence[roomId];\n if (!room || !presence || !presence.result) return null;\n\n return {\n ...buildPresenceSlice(presence.result, opts, this._sessionId),\n isLoading: !room.isConnected,\n error: room.error,\n };\n }\n\n // TODO: look into typing again\n publishPresence(roomType, roomId, partialData) {\n const room = this._rooms[roomId];\n const presence = this._presence[roomId];\n\n if (!room || !presence) {\n return;\n }\n\n presence.result = presence.result || {};\n const data = {\n ...presence.result.user,\n ...partialData,\n };\n\n presence.result.user = data;\n\n if (!room.isConnected) {\n return;\n }\n\n this._trySetPresence(roomId, data);\n this._notifyPresenceSubs(roomId);\n }\n\n _trySetPresence(roomId, data) {\n this._trySendAuthed(uuid(), {\n op: 'set-presence',\n 'room-id': roomId,\n data,\n });\n }\n\n _tryJoinRoom(roomId, data) {\n this._trySendAuthed(uuid(), { op: 'join-room', 'room-id': roomId, data });\n delete this._roomsPendingLeave[roomId];\n }\n\n _tryLeaveRoom(roomId) {\n this._trySendAuthed(uuid(), { op: 'leave-room', 'room-id': roomId });\n }\n\n _trySetRoomConnected(roomId, isConnected) {\n const room = this._rooms[roomId];\n if (room) {\n room.isConnected = isConnected;\n }\n }\n\n // TODO: look into typing again\n subscribePresence(roomType, roomId, opts, cb) {\n const leaveRoom = this.joinRoom(\n roomId,\n // Oct 28, 2025\n // Note: initialData is deprecated.\n // Keeping here for backwards compatibility\n opts.initialPresence || opts.initialData,\n );\n\n const handler = { ...opts, roomId, cb, prev: null };\n\n this._presence[roomId] = this._presence[roomId] || {};\n this._presence[roomId].handlers = this._presence[roomId].handlers || [];\n this._presence[roomId].handlers.push(handler);\n\n this._notifyPresenceSub(roomId, handler);\n\n return () => {\n this._presence[roomId].handlers =\n this._presence[roomId]?.handlers?.filter((x) => x !== handler) ?? [];\n\n leaveRoom();\n };\n }\n\n _notifyPresenceSubs(roomId) {\n this._presence[roomId]?.handlers?.forEach((handler) => {\n this._notifyPresenceSub(roomId, handler);\n });\n }\n\n _notifyPresenceSub(roomId, handler) {\n const slice = this.getPresence('', roomId, handler);\n\n if (!slice) {\n return;\n }\n\n if (handler.prev && !hasPresenceResponseChanged(slice, handler.prev)) {\n return;\n }\n\n handler.prev = slice;\n handler.cb(slice);\n }\n\n _patchPresencePeers(roomId, edits) {\n const peers = this._presence[roomId]?.result?.peers || {};\n let sessions = Object.fromEntries(\n Object.entries(peers).map(([k, v]) => [k, { data: v }]),\n );\n const myPresence = this._presence[roomId]?.result;\n const newSessions = create(sessions, (draft) => {\n for (let [path, op, value] of edits) {\n switch (op) {\n case '+':\n insertInMutative(draft, path, value);\n break;\n case 'r':\n assocInMutative(draft, path, value);\n break;\n case '-':\n dissocInMutative(draft, path);\n break;\n }\n }\n // Ignore our own edits\n delete draft[this._sessionId];\n });\n\n this._setPresencePeers(roomId, newSessions);\n }\n\n _setPresencePeers(roomId, data) {\n const sessions = { ...data };\n // no need to keep track of `user`\n delete sessions[this._sessionId];\n const peers = Object.fromEntries(\n Object.entries(sessions).map(([k, v]) => [k, v.data]),\n );\n\n this._presence = create(this._presence, (draft) => {\n assocInMutative(draft, [roomId, 'result', 'peers'], peers);\n });\n }\n\n // --------\n // Broadcast\n\n publishTopic({ roomType, roomId, topic, data }) {\n const room = this._rooms[roomId];\n\n if (!room) {\n return;\n }\n\n if (!room.isConnected) {\n this._broadcastQueue[roomId] = this._broadcastQueue[roomId] ?? [];\n this._broadcastQueue[roomId].push({ topic, roomType, data });\n\n return;\n }\n\n this._tryBroadcast(roomId, roomType, topic, data);\n }\n\n _tryBroadcast(roomId, roomType, topic, data) {\n this._trySendAuthed(uuid(), {\n op: 'client-broadcast',\n 'room-id': roomId,\n roomType,\n topic,\n data,\n });\n }\n\n subscribeTopic(roomId, topic, cb) {\n const leaveRoom = this.joinRoom(roomId);\n\n this._broadcastSubs[roomId] = this._broadcastSubs[roomId] || {};\n this._broadcastSubs[roomId][topic] =\n this._broadcastSubs[roomId][topic] || [];\n this._broadcastSubs[roomId][topic].push(cb);\n this._presence[roomId] = this._presence[roomId] || {};\n\n return () => {\n this._broadcastSubs[roomId][topic] = this._broadcastSubs[roomId][\n topic\n ].filter((x) => x !== cb);\n\n if (!this._broadcastSubs[roomId][topic].length) {\n delete this._broadcastSubs[roomId][topic];\n }\n\n leaveRoom();\n };\n }\n\n _notifyBroadcastSubs(room, topic, msg) {\n this._broadcastSubs?.[room]?.[topic]?.forEach((cb) => {\n const data = msg.data?.data;\n\n const peer =\n msg.data['peer-id'] === this._sessionId\n ? this._presence[room]?.result?.user\n : this._presence[room]?.result?.peers?.[msg.data['peer-id']];\n\n return cb(data, peer);\n });\n }\n\n // --------\n // Storage\n\n async uploadFile(path, file, opts) {\n const currentUser = await this.getCurrentUser();\n const refreshToken = currentUser?.user?.refresh_token;\n return StorageApi.uploadFile({\n ...opts,\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n path: path,\n file,\n refreshToken: refreshToken,\n });\n }\n\n async deleteFile(path) {\n const currentUser = await this.getCurrentUser();\n const refreshToken = currentUser?.user?.refresh_token;\n const result = await StorageApi.deleteFile({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n path,\n refreshToken: refreshToken,\n });\n\n return result;\n }\n\n // Deprecated Storage API (Jan 2025)\n // ---------------------------------\n\n async upload(path, file) {\n const currentUser = await this.getCurrentUser();\n const refreshToken = currentUser?.user?.refresh_token;\n const fileName = path || file.name;\n const url = await StorageApi.getSignedUploadUrl({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n fileName: fileName,\n refreshToken: refreshToken,\n });\n const isSuccess = await StorageApi.upload(url, file);\n\n return isSuccess;\n }\n\n async getDownloadUrl(path) {\n const currentUser = await this.getCurrentUser();\n const refreshToken = currentUser?.user?.refresh_token;\n const url = await StorageApi.getDownloadUrl({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n path: path,\n refreshToken: refreshToken,\n });\n\n return url;\n }\n}\n"]}