@instantdb/core 0.22.97 → 0.22.98-experimental.drewh-ts-target.20762041587.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/dist/commonjs/Connection.js +50 -51
  2. package/dist/commonjs/Connection.js.map +1 -1
  3. package/dist/commonjs/InMemoryStorage.js +13 -32
  4. package/dist/commonjs/InMemoryStorage.js.map +1 -1
  5. package/dist/commonjs/IndexedDBStorage.js +193 -217
  6. package/dist/commonjs/IndexedDBStorage.js.map +1 -1
  7. package/dist/commonjs/InstantError.js +1 -0
  8. package/dist/commonjs/InstantError.js.map +1 -1
  9. package/dist/commonjs/Reactor.js +566 -610
  10. package/dist/commonjs/Reactor.js.map +1 -1
  11. package/dist/commonjs/StorageAPI.js +51 -70
  12. package/dist/commonjs/StorageAPI.js.map +1 -1
  13. package/dist/commonjs/SyncTable.js +68 -81
  14. package/dist/commonjs/SyncTable.js.map +1 -1
  15. package/dist/commonjs/WindowNetworkListener.js +2 -13
  16. package/dist/commonjs/WindowNetworkListener.js.map +1 -1
  17. package/dist/commonjs/__types__/fieldsTypeTest.js +8 -16
  18. package/dist/commonjs/__types__/fieldsTypeTest.js.map +1 -1
  19. package/dist/commonjs/__types__/useDatesTypeTest.js +3 -6
  20. package/dist/commonjs/__types__/useDatesTypeTest.js.map +1 -1
  21. package/dist/commonjs/authAPI.js +62 -79
  22. package/dist/commonjs/authAPI.js.map +1 -1
  23. package/dist/commonjs/createRouteHandler.js +5 -15
  24. package/dist/commonjs/createRouteHandler.js.map +1 -1
  25. package/dist/commonjs/datalog.js +1 -1
  26. package/dist/commonjs/datalog.js.map +1 -1
  27. package/dist/commonjs/devtool.js +26 -8
  28. package/dist/commonjs/devtool.js.map +1 -1
  29. package/dist/commonjs/framework.d.ts.map +1 -1
  30. package/dist/commonjs/framework.js +142 -152
  31. package/dist/commonjs/framework.js.map +1 -1
  32. package/dist/commonjs/index.js +204 -190
  33. package/dist/commonjs/index.js.map +1 -1
  34. package/dist/commonjs/instaml.js +44 -30
  35. package/dist/commonjs/instaml.js.map +1 -1
  36. package/dist/commonjs/instaql.js +25 -33
  37. package/dist/commonjs/instaql.js.map +1 -1
  38. package/dist/commonjs/parseSchemaFromJSON.js +6 -7
  39. package/dist/commonjs/parseSchemaFromJSON.js.map +1 -1
  40. package/dist/commonjs/presence.js +7 -8
  41. package/dist/commonjs/presence.js.map +1 -1
  42. package/dist/commonjs/queryValidation.js +1 -2
  43. package/dist/commonjs/queryValidation.js.map +1 -1
  44. package/dist/commonjs/schema.js +8 -6
  45. package/dist/commonjs/schema.js.map +1 -1
  46. package/dist/commonjs/schemaTypes.js +22 -3
  47. package/dist/commonjs/schemaTypes.js.map +1 -1
  48. package/dist/commonjs/store.js +29 -38
  49. package/dist/commonjs/store.js.map +1 -1
  50. package/dist/commonjs/transactionValidation.js +1 -2
  51. package/dist/commonjs/transactionValidation.js.map +1 -1
  52. package/dist/commonjs/utils/Deferred.js +3 -0
  53. package/dist/commonjs/utils/Deferred.js.map +1 -1
  54. package/dist/commonjs/utils/PersistedObject.js +216 -233
  55. package/dist/commonjs/utils/PersistedObject.js.map +1 -1
  56. package/dist/commonjs/utils/fetch.js +9 -19
  57. package/dist/commonjs/utils/fetch.js.map +1 -1
  58. package/dist/commonjs/utils/linkIndex.js +2 -4
  59. package/dist/commonjs/utils/linkIndex.js.map +1 -1
  60. package/dist/commonjs/utils/object.js +1 -1
  61. package/dist/commonjs/utils/object.js.map +1 -1
  62. package/dist/esm/Connection.js +50 -51
  63. package/dist/esm/Connection.js.map +1 -1
  64. package/dist/esm/InMemoryStorage.js +13 -32
  65. package/dist/esm/InMemoryStorage.js.map +1 -1
  66. package/dist/esm/IndexedDBStorage.js +193 -217
  67. package/dist/esm/IndexedDBStorage.js.map +1 -1
  68. package/dist/esm/InstantError.js +1 -0
  69. package/dist/esm/InstantError.js.map +1 -1
  70. package/dist/esm/Reactor.js +566 -610
  71. package/dist/esm/Reactor.js.map +1 -1
  72. package/dist/esm/StorageAPI.js +51 -70
  73. package/dist/esm/StorageAPI.js.map +1 -1
  74. package/dist/esm/SyncTable.js +68 -81
  75. package/dist/esm/SyncTable.js.map +1 -1
  76. package/dist/esm/WindowNetworkListener.js +2 -13
  77. package/dist/esm/WindowNetworkListener.js.map +1 -1
  78. package/dist/esm/__types__/fieldsTypeTest.js +8 -16
  79. package/dist/esm/__types__/fieldsTypeTest.js.map +1 -1
  80. package/dist/esm/__types__/useDatesTypeTest.js +3 -6
  81. package/dist/esm/__types__/useDatesTypeTest.js.map +1 -1
  82. package/dist/esm/authAPI.js +62 -79
  83. package/dist/esm/authAPI.js.map +1 -1
  84. package/dist/esm/createRouteHandler.js +5 -15
  85. package/dist/esm/createRouteHandler.js.map +1 -1
  86. package/dist/esm/datalog.js +1 -1
  87. package/dist/esm/datalog.js.map +1 -1
  88. package/dist/esm/devtool.js +26 -8
  89. package/dist/esm/devtool.js.map +1 -1
  90. package/dist/esm/framework.d.ts.map +1 -1
  91. package/dist/esm/framework.js +142 -152
  92. package/dist/esm/framework.js.map +1 -1
  93. package/dist/esm/index.js +204 -190
  94. package/dist/esm/index.js.map +1 -1
  95. package/dist/esm/instaml.js +44 -30
  96. package/dist/esm/instaml.js.map +1 -1
  97. package/dist/esm/instaql.js +25 -33
  98. package/dist/esm/instaql.js.map +1 -1
  99. package/dist/esm/parseSchemaFromJSON.js +6 -7
  100. package/dist/esm/parseSchemaFromJSON.js.map +1 -1
  101. package/dist/esm/presence.js +7 -8
  102. package/dist/esm/presence.js.map +1 -1
  103. package/dist/esm/queryValidation.js +1 -2
  104. package/dist/esm/queryValidation.js.map +1 -1
  105. package/dist/esm/schema.js +8 -6
  106. package/dist/esm/schema.js.map +1 -1
  107. package/dist/esm/schemaTypes.js +22 -3
  108. package/dist/esm/schemaTypes.js.map +1 -1
  109. package/dist/esm/store.js +29 -38
  110. package/dist/esm/store.js.map +1 -1
  111. package/dist/esm/transactionValidation.js +1 -2
  112. package/dist/esm/transactionValidation.js.map +1 -1
  113. package/dist/esm/utils/Deferred.js +3 -0
  114. package/dist/esm/utils/Deferred.js.map +1 -1
  115. package/dist/esm/utils/PersistedObject.js +216 -233
  116. package/dist/esm/utils/PersistedObject.js.map +1 -1
  117. package/dist/esm/utils/fetch.js +9 -19
  118. package/dist/esm/utils/fetch.js.map +1 -1
  119. package/dist/esm/utils/linkIndex.js +2 -4
  120. package/dist/esm/utils/linkIndex.js.map +1 -1
  121. package/dist/esm/utils/object.js +1 -1
  122. package/dist/esm/utils/object.js.map +1 -1
  123. package/dist/standalone/index.js +2610 -2367
  124. package/dist/standalone/index.umd.cjs +3 -3
  125. package/package.json +2 -2
  126. package/src/framework.ts +0 -1
@@ -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.ts';\nimport * as instaml from './instaml.ts';\nimport * as s from './store.ts';\nimport uuid from './utils/id.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';\n\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/** @typedef {import('./reactorTypes.ts').QuerySub} QuerySub */\n/** @typedef {import('./reactorTypes.ts').QuerySubInStorage} QuerySubInStorage */\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;\nconst ONE_MIN_MS = 1_000 * 60;\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\n/**\n * @param {QuerySubInStorage} x\n * @param {boolean | null} useDateObjects\n * @returns {QuerySub}\n */\nfunction querySubFromStorage(x, useDateObjects) {\n const v = typeof x === 'string' ? JSON.parse(x) : x;\n\n if (v?.result?.store) {\n const attrsStore = s.attrsStoreFromJSON(\n v.result.attrsStore,\n v.result.store,\n );\n if (attrsStore) {\n const storeJSON = v.result.store;\n v.result.store = s.fromJSON(attrsStore, {\n ...storeJSON,\n useDateObjects: useDateObjects,\n });\n v.result.attrsStore = attrsStore;\n }\n }\n\n return v;\n}\n\n/**\n *\n * @param {string} _key\n * @param {QuerySub} sub\n * @returns QuerySubInStorage\n */\nfunction querySubToStorage(_key, sub) {\n const { result, ...rest } = sub;\n const jsonSub = /** @type {import('./reactorTypes.ts').QuerySubInStorage} */ (\n rest\n );\n if (result) {\n /** @type {import('./reactorTypes.ts').QuerySubResultInStorage} */\n const jsonResult = {\n ...result,\n store: s.toJSON(result.store),\n attrsStore: result.attrsStore.toJSON(),\n };\n\n jsonSub.result = jsonResult;\n }\n return jsonSub;\n}\n\nfunction kvFromStorage(key, x) {\n switch (key) {\n case 'pendingMutations':\n return new Map(typeof x === 'string' ? JSON.parse(x) : x);\n default:\n return x;\n }\n}\n\nfunction kvToStorage(key, x) {\n switch (key) {\n case 'pendingMutations':\n return [...x.entries()];\n default:\n return x;\n }\n}\n\nfunction onMergeQuerySub(_k, storageSub, inMemorySub) {\n const storageResult = storageSub?.result;\n const memoryResult = inMemorySub?.result;\n if (storageResult && !memoryResult && inMemorySub) {\n inMemorySub.result = storageResult;\n }\n return inMemorySub || storageSub;\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 /** @type {s.AttrsStore | undefined} */\n attrs;\n _isOnline = true;\n _isShutdown = false;\n status = STATUS.CONNECTING;\n\n /** @type {PersistedObject<string, QuerySub, QuerySubInStorage>} */\n querySubs;\n\n /** @type {PersistedObject} */\n kv;\n\n /** @type {SyncTable} */\n _syncTable;\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 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}}> | null}**/\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 /** @type {{isLoading: boolean; error: any | undefined, user: any | undefined}} */\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 new Storage(this.config.appId, 'syncSubs'),\n {\n useDateObjects: this.config.useDateObjects,\n },\n this._log,\n (triples) => {\n return s.createStore(\n this.ensureAttrs(),\n triples,\n this.config.enableCardinalityInference,\n this.config.useDateObjects,\n );\n },\n () => this.ensureAttrs(),\n );\n\n this._oauthCallbackResponse = this._oauthLoginInit();\n\n // kick off a request to cache it\n this.getCurrentUser().then((userInfo) => {\n this.syncUserToEndpoint(userInfo.user);\n });\n\n setInterval(async () => {\n const currentUser = await this.getCurrentUser();\n this.syncUserToEndpoint(currentUser.user);\n }, ONE_MIN_MS);\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 ensureAttrs() {\n if (!this.attrs) {\n throw new Error('attrs have not loaded.');\n }\n return this.attrs;\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 storedMutationCount: this._pendingMutations().size,\n transportType: this._transportType,\n };\n }\n\n _onQuerySubLoaded(hash) {\n this.kv\n .waitForKeyToLoad('pendingMutations')\n .then(() => this.notifyOne(hash));\n }\n\n _initStorage(Storage) {\n this.querySubs = new PersistedObject({\n persister: new Storage(this.config.appId, 'querySubs'),\n merge: onMergeQuerySub,\n serialize: querySubToStorage,\n parse: (_key, x) => querySubFromStorage(x, this.config.useDateObjects),\n // objectSize\n objectSize: (x) => x?.result?.store?.triples?.length ?? 0,\n logger: this._log,\n preloadEntryCount: 10,\n gc: {\n maxAgeMs: 1000 * 60 * 60 * 24 * 7 * 52, // 1 year\n maxEntries: 1000,\n // Size of each query is the number of triples\n maxSize: 1_000_000, // 1 million triples\n },\n });\n this.querySubs.onKeyLoaded = (k) => this._onQuerySubLoaded(k);\n this.kv = new PersistedObject({\n persister: new Storage(this.config.appId, 'kv'),\n merge: this._onMergeKv,\n serialize: kvToStorage,\n parse: kvFromStorage,\n objectSize: () => 0,\n logger: this._log,\n saveThrottleMs: 100,\n idleCallbackMaxWaitMs: 100,\n // Don't GC the kv store\n gc: null,\n });\n this.kv.onKeyLoaded = (k) => {\n if (k === 'pendingMutations') {\n this.notifyAll();\n }\n };\n // Trigger immediate load for pendingMutations and currentUser\n this.kv.waitForKeyToLoad('pendingMutations');\n this.kv.waitForKeyToLoad(currentUserKey);\n this._beforeUnloadCbs.push(() => {\n this.kv.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: status ?? 0,\n }),\n );\n } else {\n dfd.reject(\n new InstantError(\n errorMsg?.message || 'Unknown error',\n errorMsg?.hint,\n ),\n );\n }\n }\n }\n\n _setStatus(status, err) {\n this.status = status;\n this._errorMessage = err;\n this.notifyConnectionStatusSubs(status);\n }\n\n _onMergeKv = (key, storageV, inMemoryV) => {\n switch (key) {\n case 'pendingMutations': {\n const storageEntries = storageV?.entries() ?? [];\n const inMemoryEntries = inMemoryV?.entries() ?? [];\n const muts = new Map([...storageEntries, ...inMemoryEntries]);\n const rewrittenStorageMuts = storageV\n ? this._rewriteMutationsSorted(this.attrs, storageV)\n : [];\n rewrittenStorageMuts.forEach(([k, mut]) => {\n if (!inMemoryV?.pendingMutations?.has(k) && !mut['tx-id']) {\n this._sendMutation(k, mut);\n }\n });\n return muts;\n }\n default:\n return inMemoryV || storageV;\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 /**\n * Does the same thing as add-query-ok\n * but called as a result of receiving query info from ssr\n * @param {any} q\n * @param {{ triples: any; pageInfo: any; }} result\n * @param {boolean} enableCardinalityInference\n */\n _addQueryData(q, result, enableCardinalityInference) {\n if (!this.attrs) {\n throw new Error('Attrs in reactor have not been set');\n }\n const queryHash = weakHash(q);\n const attrsStore = this.ensureAttrs();\n const store = s.createStore(\n this.attrs,\n result.triples,\n enableCardinalityInference,\n this.config.useDateObjects,\n );\n this.querySubs.updateInPlace((prev) => {\n prev[queryHash] = {\n result: {\n store,\n attrsStore,\n pageInfo: result.pageInfo,\n processedTxId: undefined,\n isExternal: true,\n },\n q,\n };\n });\n this._cleanupPendingMutationsQueries();\n this.notifyOne(queryHash);\n this.notifyOneQueryOnce(queryHash);\n this._cleanupPendingMutationsTimeout();\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 if (!this._hasQueryListeners() && !this.querySubs.currentValue[hash]) {\n break;\n }\n const pageInfo = result?.[0]?.data?.['page-info'];\n const aggregate = result?.[0]?.data?.['aggregate'];\n const triples = extractTriples(result);\n const attrsStore = this.ensureAttrs();\n const store = s.createStore(\n attrsStore,\n triples,\n enableCardinalityInference,\n this.config.useDateObjects,\n );\n\n this.querySubs.updateInPlace((prev) => {\n if (!prev[hash]) {\n this._log.info('Missing value in querySubs', { hash, q });\n return;\n }\n prev[hash].result = {\n store,\n attrsStore,\n pageInfo,\n aggregate,\n processedTxId: msg['processed-tx-id'],\n };\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.ensureAttrs(),\n this._pendingMutations(),\n processedTxId,\n );\n\n if (rewrittenMutations !== this._pendingMutations()) {\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.kv.updateInPlace((prev) => {\n prev.pendingMutations = rewrittenMutations;\n });\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 attrsStore = this.ensureAttrs();\n const store = s.createStore(\n attrsStore,\n triples,\n enableCardinalityInference,\n this.config.useDateObjects,\n );\n const { store: newStore, attrsStore: newAttrsStore } =\n this._applyOptimisticUpdates(\n store,\n attrsStore,\n mutations,\n processedTxId,\n );\n const pageInfo = result?.[0]?.data?.['page-info'];\n const aggregate = result?.[0]?.data?.['aggregate'];\n return {\n q,\n hash,\n store: newStore,\n attrsStore: newAttrsStore,\n pageInfo,\n aggregate,\n };\n });\n\n updates.forEach(\n ({ hash, q, store, attrsStore, pageInfo, aggregate }) => {\n this.querySubs.updateInPlace((prev) => {\n if (!prev[hash]) {\n this._log.error('Missing value in querySubs', { hash, q });\n return;\n }\n prev[hash].result = {\n store,\n attrsStore,\n pageInfo,\n aggregate,\n processedTxId,\n };\n });\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.ensureAttrs(),\n this._pendingMutations(),\n );\n const prevMutation = muts.get(eventId);\n if (!prevMutation) {\n break;\n }\n\n // update pendingMutation with server-side tx-id\n this._updatePendingMutations((prev) => {\n prev.set(eventId, {\n ...prev.get(eventId),\n 'tx-id': txId,\n confirmed: Date.now(),\n });\n });\n\n const newAttrs = [];\n for (const step of prevMutation['tx-steps']) {\n if (step[0] === 'add-attr') {\n const attr = step[1];\n newAttrs.push(attr);\n }\n }\n if (newAttrs.length) {\n const existingAttrs = Object.values(this.ensureAttrs().attrs);\n this._setAttrs([...existingAttrs, ...newAttrs]);\n }\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 _pendingMutations() {\n return this.kv.currentValue.pendingMutations ?? new Map();\n }\n\n _updatePendingMutations(f) {\n this.kv.updateInPlace((prev) => {\n const muts = prev.pendingMutations ?? new Map();\n prev.pendingMutations = muts;\n f(muts);\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().get(eventId);\n\n if (mut && (status !== 'timeout' || !mut['tx-id'])) {\n this._updatePendingMutations((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().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 = new s.AttrsStoreClass(\n attrs.reduce((acc, attr) => {\n acc[attr.id] = attr;\n return acc;\n }, {}),\n this._linkIndex,\n );\n\n this.notifyAttrsSubs();\n }\n\n // ---------------------------\n // Queries\n\n getPreviousResult = (q) => {\n const hash = weakHash(q);\n return this.dataForQuery(hash)?.data;\n };\n\n _startQuerySub(q, hash) {\n const eventId = uuid();\n this.querySubs.updateInPlace((prev) => {\n prev[hash] = prev[hash] || { q, result: null, eventId };\n prev[hash].lastAccessed = Date.now();\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 _hasQueryListeners(hash) {\n return !!(this.queryCbs[hash]?.length || this.queryOnceDfds[hash]?.length);\n }\n\n _cleanupQuery(q, hash) {\n const hasListeners = this._hasQueryListeners(hash);\n if (hasListeners) return;\n delete this.queryCbs[hash];\n delete this.queryOnceDfds[hash];\n delete this._dataForQueryCache[hash];\n this.querySubs.unloadKey(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 /**\n *\n * @param {s.AttrsStore} attrs\n * @param {any} muts\n * @param {number} [processedTxId]\n */\n _rewriteMutations(attrs, muts, processedTxId) {\n if (!attrs) return muts;\n if (!muts) return new Map();\n const findExistingAttr = (attr) => {\n const [_, etype, label] = attr['forward-identity'];\n const existing = s.getAttrByFwdIdentName(attrs, etype, label);\n return existing;\n };\n const findReverseAttr = (attr) => {\n const [_, etype, label] = attr['forward-identity'];\n const revAttr = s.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 /**\n * @returns {s.AttrsStore}\n */\n optimisticAttrs() {\n const pendingMutationSteps = [...this._pendingMutations().values()] // 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?.getAttr(attr.id)\n ) {\n const fullAttr = { ...this.attrs.getAttr(attr.id), ...attr };\n pendingAttrs.push(fullAttr);\n }\n }\n\n if (!deletedAttrIds.size && !pendingAttrs.length) {\n return this.attrs || new s.AttrsStoreClass({}, this._linkIndex);\n }\n\n const attrs = { ...(this.attrs?.attrs || {}) };\n for (const attr of pendingAttrs) {\n attrs[attr.id] = attr;\n }\n for (const id of deletedAttrIds) {\n delete attrs[id];\n }\n\n return new s.AttrsStoreClass(attrs, this._linkIndex);\n }\n\n /** Runs instaql on a query and a store */\n dataForQuery(hash, applyOptimistic = true) {\n const errorMessage = this._errorMessage;\n if (errorMessage) {\n return { error: errorMessage };\n }\n if (!this.querySubs) return;\n if (!this.kv.currentValue.pendingMutations) return;\n const querySubVersion = this.querySubs.version();\n const querySubs = this.querySubs.currentValue;\n const pendingMutationsVersion = this.kv.version();\n const pendingMutations = this._pendingMutations();\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;\n }\n\n let store = result.store;\n let attrsStore = result.attrsStore;\n const { pageInfo, aggregate, processedTxId } = result;\n const mutations = this._rewriteMutationsSorted(\n attrsStore,\n pendingMutations,\n );\n if (applyOptimistic) {\n const optimisticResult = this._applyOptimisticUpdates(\n store,\n attrsStore,\n mutations,\n processedTxId,\n );\n\n store = optimisticResult.store;\n attrsStore = optimisticResult.attrsStore;\n }\n const resp = instaql(\n { store: store, attrsStore: attrsStore, pageInfo, aggregate },\n q,\n );\n\n return { data: resp, querySubVersion, pendingMutationsVersion };\n }\n\n _applyOptimisticUpdates(store, attrsStore, mutations, processedTxId) {\n for (const [_, mut] of mutations) {\n if (!mut['tx-id'] || (processedTxId && mut['tx-id'] > processedTxId)) {\n const result = s.transact(store, attrsStore, mut['tx-steps']);\n store = result.store;\n attrsStore = result.attrsStore;\n }\n }\n return { store, attrsStore };\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 resp = this.dataForQuery(hash);\n\n if (!resp?.data) return;\n this._dataForQueryCache[hash] = resp;\n if (areObjectsDeepEqual(resp.data, prevData)) return;\n\n cbs.forEach((r) => r.cb(resp.data));\n };\n\n notifyOneQueryOnce = (hash) => {\n const dfds = this.queryOnceDfds[hash] ?? [];\n const data = this.dataForQuery(hash)?.data;\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.querySubs\n .waitForKeyToLoad(hash)\n .then(() => this.notifyOne(hash))\n .catch(() => this.notifyOne(hash));\n });\n }\n\n loadedNotifyAll() {\n this.kv\n .waitForKeyToLoad('pendingMutations')\n .then(() => this.notifyAll())\n .catch(() => 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 attrsStore: 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().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._updatePendingMutations((prev) => {\n prev.set(eventId, mutation);\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().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.ensureAttrs(),\n this._pendingMutations(),\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._updatePendingMutations((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 });\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 (this._pendingMutations().size < this._pendingMutationCleanupThreshold) {\n return;\n }\n\n const now = Date.now();\n\n this._updatePendingMutations((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 }\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 if (Array.isArray(e.message)) {\n for (const msg of e.message) {\n this._handleReceive(targetTransport.id, msg);\n }\n } else {\n this._handleReceive(targetTransport.id, e.message);\n }\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 */\n async getLocalId(name) {\n const k = `localToken_${name}`;\n if (this.kv.currentValue[k]) {\n return this.kv.currentValue[k];\n }\n\n const current = await this.kv.waitForKeyToLoad(k);\n if (current) {\n return current;\n }\n const newId = uuid();\n this.kv.updateInPlace((prev) => {\n if (prev[k]) return;\n prev[k] = newId;\n });\n return await this.kv.waitForKeyToLoad(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.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.attrs));\n }\n\n notifyConnectionStatusSubs(status) {\n this.connectionStatusCbs.forEach((cb) => cb(status));\n }\n\n async setCurrentUser(user) {\n this.kv.updateInPlace((prev) => {\n prev[currentUserKey] = user;\n });\n await this.kv.waitForKeyToLoad(currentUserKey);\n }\n\n getCurrentUserCached() {\n return this._currentUserCached;\n }\n\n async _getCurrentUser() {\n const user = await this.kv.waitForKeyToLoad(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 try {\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 } catch (e) {\n return {\n user: undefined,\n isLoading: false,\n error: { message: e?.message || 'Error loading user' },\n };\n }\n }\n\n async _hasCurrentUser() {\n const user = await this.kv.waitForKeyToLoad(currentUserKey);\n return typeof user === 'string' ? JSON.parse(user) != null : 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 async syncUserToEndpoint(user) {\n if (!this.config.firstPartyPath) return;\n try {\n fetch(this.config.firstPartyPath + '/', {\n method: 'POST',\n body: JSON.stringify({\n type: 'sync-user',\n appId: this.config.appId,\n user: user,\n }),\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n } catch (error) {\n this._log.error('Error syncing user with external endpoint', error);\n }\n }\n\n updateUser(newUser) {\n this.syncUserToEndpoint(newUser);\n\n const newV = { error: undefined, user: newUser };\n this._currentUserCached = { isLoading: false, ...newV };\n this._dataForQueryCache = {};\n this.querySubs.updateInPlace((prev) => {\n Object.keys(prev).forEach((k) => {\n delete prev[k].result;\n });\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.ts';\nimport * as instaml from './instaml.ts';\nimport * as s from './store.ts';\nimport uuid from './utils/id.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';\n\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/** @typedef {import('./reactorTypes.ts').QuerySub} QuerySub */\n/** @typedef {import('./reactorTypes.ts').QuerySubInStorage} QuerySubInStorage */\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;\nconst ONE_MIN_MS = 1_000 * 60;\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\n/**\n * @param {QuerySubInStorage} x\n * @param {boolean | null} useDateObjects\n * @returns {QuerySub}\n */\nfunction querySubFromStorage(x, useDateObjects) {\n const v = typeof x === 'string' ? JSON.parse(x) : x;\n\n if (v?.result?.store) {\n const attrsStore = s.attrsStoreFromJSON(\n v.result.attrsStore,\n v.result.store,\n );\n if (attrsStore) {\n const storeJSON = v.result.store;\n v.result.store = s.fromJSON(attrsStore, {\n ...storeJSON,\n useDateObjects: useDateObjects,\n });\n v.result.attrsStore = attrsStore;\n }\n }\n\n return v;\n}\n\n/**\n *\n * @param {string} _key\n * @param {QuerySub} sub\n * @returns QuerySubInStorage\n */\nfunction querySubToStorage(_key, sub) {\n const { result, ...rest } = sub;\n const jsonSub = /** @type {import('./reactorTypes.ts').QuerySubInStorage} */ (\n rest\n );\n if (result) {\n /** @type {import('./reactorTypes.ts').QuerySubResultInStorage} */\n const jsonResult = {\n ...result,\n store: s.toJSON(result.store),\n attrsStore: result.attrsStore.toJSON(),\n };\n\n jsonSub.result = jsonResult;\n }\n return jsonSub;\n}\n\nfunction kvFromStorage(key, x) {\n switch (key) {\n case 'pendingMutations':\n return new Map(typeof x === 'string' ? JSON.parse(x) : x);\n default:\n return x;\n }\n}\n\nfunction kvToStorage(key, x) {\n switch (key) {\n case 'pendingMutations':\n return [...x.entries()];\n default:\n return x;\n }\n}\n\nfunction onMergeQuerySub(_k, storageSub, inMemorySub) {\n const storageResult = storageSub?.result;\n const memoryResult = inMemorySub?.result;\n if (storageResult && !memoryResult && inMemorySub) {\n inMemorySub.result = storageResult;\n }\n return inMemorySub || storageSub;\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 /** @type {s.AttrsStore | undefined} */\n attrs;\n _isOnline = true;\n _isShutdown = false;\n status = STATUS.CONNECTING;\n\n /** @type {PersistedObject<string, QuerySub, QuerySubInStorage>} */\n querySubs;\n\n /** @type {PersistedObject} */\n kv;\n\n /** @type {SyncTable} */\n _syncTable;\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 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}}> | null}**/\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 /** @type {{isLoading: boolean; error: any | undefined, user: any | undefined}} */\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 new Storage(this.config.appId, 'syncSubs'),\n {\n useDateObjects: this.config.useDateObjects,\n },\n this._log,\n (triples) => {\n return s.createStore(\n this.ensureAttrs(),\n triples,\n this.config.enableCardinalityInference,\n this.config.useDateObjects,\n );\n },\n () => this.ensureAttrs(),\n );\n\n this._oauthCallbackResponse = this._oauthLoginInit();\n\n // kick off a request to cache it\n this.getCurrentUser().then((userInfo) => {\n this.syncUserToEndpoint(userInfo.user);\n });\n\n setInterval(async () => {\n const currentUser = await this.getCurrentUser();\n this.syncUserToEndpoint(currentUser.user);\n }, ONE_MIN_MS);\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 ensureAttrs() {\n if (!this.attrs) {\n throw new Error('attrs have not loaded.');\n }\n return this.attrs;\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 storedMutationCount: this._pendingMutations().size,\n transportType: this._transportType,\n };\n }\n\n _onQuerySubLoaded(hash) {\n this.kv\n .waitForKeyToLoad('pendingMutations')\n .then(() => this.notifyOne(hash));\n }\n\n _initStorage(Storage) {\n this.querySubs = new PersistedObject({\n persister: new Storage(this.config.appId, 'querySubs'),\n merge: onMergeQuerySub,\n serialize: querySubToStorage,\n parse: (_key, x) => querySubFromStorage(x, this.config.useDateObjects),\n // objectSize\n objectSize: (x) => x?.result?.store?.triples?.length ?? 0,\n logger: this._log,\n preloadEntryCount: 10,\n gc: {\n maxAgeMs: 1000 * 60 * 60 * 24 * 7 * 52, // 1 year\n maxEntries: 1000,\n // Size of each query is the number of triples\n maxSize: 1_000_000, // 1 million triples\n },\n });\n this.querySubs.onKeyLoaded = (k) => this._onQuerySubLoaded(k);\n this.kv = new PersistedObject({\n persister: new Storage(this.config.appId, 'kv'),\n merge: this._onMergeKv,\n serialize: kvToStorage,\n parse: kvFromStorage,\n objectSize: () => 0,\n logger: this._log,\n saveThrottleMs: 100,\n idleCallbackMaxWaitMs: 100,\n // Don't GC the kv store\n gc: null,\n });\n this.kv.onKeyLoaded = (k) => {\n if (k === 'pendingMutations') {\n this.notifyAll();\n }\n };\n // Trigger immediate load for pendingMutations and currentUser\n this.kv.waitForKeyToLoad('pendingMutations');\n this.kv.waitForKeyToLoad(currentUserKey);\n this._beforeUnloadCbs.push(() => {\n this.kv.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: status ?? 0,\n }),\n );\n } else {\n dfd.reject(\n new InstantError(\n errorMsg?.message || 'Unknown error',\n errorMsg?.hint,\n ),\n );\n }\n }\n }\n\n _setStatus(status, err) {\n this.status = status;\n this._errorMessage = err;\n this.notifyConnectionStatusSubs(status);\n }\n\n _onMergeKv = (key, storageV, inMemoryV) => {\n switch (key) {\n case 'pendingMutations': {\n const storageEntries = storageV?.entries() ?? [];\n const inMemoryEntries = inMemoryV?.entries() ?? [];\n const muts = new Map([...storageEntries, ...inMemoryEntries]);\n const rewrittenStorageMuts = storageV\n ? this._rewriteMutationsSorted(this.attrs, storageV)\n : [];\n rewrittenStorageMuts.forEach(([k, mut]) => {\n if (!inMemoryV?.pendingMutations?.has(k) && !mut['tx-id']) {\n this._sendMutation(k, mut);\n }\n });\n return muts;\n }\n default:\n return inMemoryV || storageV;\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 /**\n * Does the same thing as add-query-ok\n * but called as a result of receiving query info from ssr\n * @param {any} q\n * @param {{ triples: any; pageInfo: any; }} result\n * @param {boolean} enableCardinalityInference\n */\n _addQueryData(q, result, enableCardinalityInference) {\n if (!this.attrs) {\n throw new Error('Attrs in reactor have not been set');\n }\n const queryHash = weakHash(q);\n const attrsStore = this.ensureAttrs();\n const store = s.createStore(\n this.attrs,\n result.triples,\n enableCardinalityInference,\n this.config.useDateObjects,\n );\n this.querySubs.updateInPlace((prev) => {\n prev[queryHash] = {\n result: {\n store,\n attrsStore,\n pageInfo: result.pageInfo,\n processedTxId: undefined,\n isExternal: true,\n },\n q,\n };\n });\n this._cleanupPendingMutationsQueries();\n this.notifyOne(queryHash);\n this.notifyOneQueryOnce(queryHash);\n this._cleanupPendingMutationsTimeout();\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 if (!this._hasQueryListeners() && !this.querySubs.currentValue[hash]) {\n break;\n }\n const pageInfo = result?.[0]?.data?.['page-info'];\n const aggregate = result?.[0]?.data?.['aggregate'];\n const triples = extractTriples(result);\n const attrsStore = this.ensureAttrs();\n const store = s.createStore(\n attrsStore,\n triples,\n enableCardinalityInference,\n this.config.useDateObjects,\n );\n\n this.querySubs.updateInPlace((prev) => {\n if (!prev[hash]) {\n this._log.info('Missing value in querySubs', { hash, q });\n return;\n }\n prev[hash].result = {\n store,\n attrsStore,\n pageInfo,\n aggregate,\n processedTxId: msg['processed-tx-id'],\n };\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.ensureAttrs(),\n this._pendingMutations(),\n processedTxId,\n );\n\n if (rewrittenMutations !== this._pendingMutations()) {\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.kv.updateInPlace((prev) => {\n prev.pendingMutations = rewrittenMutations;\n });\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 attrsStore = this.ensureAttrs();\n const store = s.createStore(\n attrsStore,\n triples,\n enableCardinalityInference,\n this.config.useDateObjects,\n );\n const { store: newStore, attrsStore: newAttrsStore } =\n this._applyOptimisticUpdates(\n store,\n attrsStore,\n mutations,\n processedTxId,\n );\n const pageInfo = result?.[0]?.data?.['page-info'];\n const aggregate = result?.[0]?.data?.['aggregate'];\n return {\n q,\n hash,\n store: newStore,\n attrsStore: newAttrsStore,\n pageInfo,\n aggregate,\n };\n });\n\n updates.forEach(\n ({ hash, q, store, attrsStore, pageInfo, aggregate }) => {\n this.querySubs.updateInPlace((prev) => {\n if (!prev[hash]) {\n this._log.error('Missing value in querySubs', { hash, q });\n return;\n }\n prev[hash].result = {\n store,\n attrsStore,\n pageInfo,\n aggregate,\n processedTxId,\n };\n });\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.ensureAttrs(),\n this._pendingMutations(),\n );\n const prevMutation = muts.get(eventId);\n if (!prevMutation) {\n break;\n }\n\n // update pendingMutation with server-side tx-id\n this._updatePendingMutations((prev) => {\n prev.set(eventId, {\n ...prev.get(eventId),\n 'tx-id': txId,\n confirmed: Date.now(),\n });\n });\n\n const newAttrs = [];\n for (const step of prevMutation['tx-steps']) {\n if (step[0] === 'add-attr') {\n const attr = step[1];\n newAttrs.push(attr);\n }\n }\n if (newAttrs.length) {\n const existingAttrs = Object.values(this.ensureAttrs().attrs);\n this._setAttrs([...existingAttrs, ...newAttrs]);\n }\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 _pendingMutations() {\n return this.kv.currentValue.pendingMutations ?? new Map();\n }\n\n _updatePendingMutations(f) {\n this.kv.updateInPlace((prev) => {\n const muts = prev.pendingMutations ?? new Map();\n prev.pendingMutations = muts;\n f(muts);\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().get(eventId);\n\n if (mut && (status !== 'timeout' || !mut['tx-id'])) {\n this._updatePendingMutations((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().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 = new s.AttrsStoreClass(\n attrs.reduce((acc, attr) => {\n acc[attr.id] = attr;\n return acc;\n }, {}),\n this._linkIndex,\n );\n\n this.notifyAttrsSubs();\n }\n\n // ---------------------------\n // Queries\n\n getPreviousResult = (q) => {\n const hash = weakHash(q);\n return this.dataForQuery(hash)?.data;\n };\n\n _startQuerySub(q, hash) {\n const eventId = uuid();\n this.querySubs.updateInPlace((prev) => {\n prev[hash] = prev[hash] || { q, result: null, eventId };\n prev[hash].lastAccessed = Date.now();\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 _hasQueryListeners(hash) {\n return !!(this.queryCbs[hash]?.length || this.queryOnceDfds[hash]?.length);\n }\n\n _cleanupQuery(q, hash) {\n const hasListeners = this._hasQueryListeners(hash);\n if (hasListeners) return;\n delete this.queryCbs[hash];\n delete this.queryOnceDfds[hash];\n delete this._dataForQueryCache[hash];\n this.querySubs.unloadKey(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 /**\n *\n * @param {s.AttrsStore} attrs\n * @param {any} muts\n * @param {number} [processedTxId]\n */\n _rewriteMutations(attrs, muts, processedTxId) {\n if (!attrs) return muts;\n if (!muts) return new Map();\n const findExistingAttr = (attr) => {\n const [_, etype, label] = attr['forward-identity'];\n const existing = s.getAttrByFwdIdentName(attrs, etype, label);\n return existing;\n };\n const findReverseAttr = (attr) => {\n const [_, etype, label] = attr['forward-identity'];\n const revAttr = s.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 /**\n * @returns {s.AttrsStore}\n */\n optimisticAttrs() {\n const pendingMutationSteps = [...this._pendingMutations().values()] // 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?.getAttr(attr.id)\n ) {\n const fullAttr = { ...this.attrs.getAttr(attr.id), ...attr };\n pendingAttrs.push(fullAttr);\n }\n }\n\n if (!deletedAttrIds.size && !pendingAttrs.length) {\n return this.attrs || new s.AttrsStoreClass({}, this._linkIndex);\n }\n\n const attrs = { ...(this.attrs?.attrs || {}) };\n for (const attr of pendingAttrs) {\n attrs[attr.id] = attr;\n }\n for (const id of deletedAttrIds) {\n delete attrs[id];\n }\n\n return new s.AttrsStoreClass(attrs, this._linkIndex);\n }\n\n /** Runs instaql on a query and a store */\n dataForQuery(hash, applyOptimistic = true) {\n const errorMessage = this._errorMessage;\n if (errorMessage) {\n return { error: errorMessage };\n }\n if (!this.querySubs) return;\n if (!this.kv.currentValue.pendingMutations) return;\n const querySubVersion = this.querySubs.version();\n const querySubs = this.querySubs.currentValue;\n const pendingMutationsVersion = this.kv.version();\n const pendingMutations = this._pendingMutations();\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;\n }\n\n let store = result.store;\n let attrsStore = result.attrsStore;\n const { pageInfo, aggregate, processedTxId } = result;\n const mutations = this._rewriteMutationsSorted(\n attrsStore,\n pendingMutations,\n );\n if (applyOptimistic) {\n const optimisticResult = this._applyOptimisticUpdates(\n store,\n attrsStore,\n mutations,\n processedTxId,\n );\n\n store = optimisticResult.store;\n attrsStore = optimisticResult.attrsStore;\n }\n const resp = instaql(\n { store: store, attrsStore: attrsStore, pageInfo, aggregate },\n q,\n );\n\n return { data: resp, querySubVersion, pendingMutationsVersion };\n }\n\n _applyOptimisticUpdates(store, attrsStore, mutations, processedTxId) {\n for (const [_, mut] of mutations) {\n if (!mut['tx-id'] || (processedTxId && mut['tx-id'] > processedTxId)) {\n const result = s.transact(store, attrsStore, mut['tx-steps']);\n store = result.store;\n attrsStore = result.attrsStore;\n }\n }\n return { store, attrsStore };\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 resp = this.dataForQuery(hash);\n\n if (!resp?.data) return;\n this._dataForQueryCache[hash] = resp;\n if (areObjectsDeepEqual(resp.data, prevData)) return;\n\n cbs.forEach((r) => r.cb(resp.data));\n };\n\n notifyOneQueryOnce = (hash) => {\n const dfds = this.queryOnceDfds[hash] ?? [];\n const data = this.dataForQuery(hash)?.data;\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.querySubs\n .waitForKeyToLoad(hash)\n .then(() => this.notifyOne(hash))\n .catch(() => this.notifyOne(hash));\n });\n }\n\n loadedNotifyAll() {\n this.kv\n .waitForKeyToLoad('pendingMutations')\n .then(() => this.notifyAll())\n .catch(() => 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 attrsStore: 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().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._updatePendingMutations((prev) => {\n prev.set(eventId, mutation);\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().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.ensureAttrs(),\n this._pendingMutations(),\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._updatePendingMutations((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 });\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 (this._pendingMutations().size < this._pendingMutationCleanupThreshold) {\n return;\n }\n\n const now = Date.now();\n\n this._updatePendingMutations((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 }\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 if (Array.isArray(e.message)) {\n for (const msg of e.message) {\n this._handleReceive(targetTransport.id, msg);\n }\n } else {\n this._handleReceive(targetTransport.id, e.message);\n }\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 */\n async getLocalId(name) {\n const k = `localToken_${name}`;\n if (this.kv.currentValue[k]) {\n return this.kv.currentValue[k];\n }\n\n const current = await this.kv.waitForKeyToLoad(k);\n if (current) {\n return current;\n }\n const newId = uuid();\n this.kv.updateInPlace((prev) => {\n if (prev[k]) return;\n prev[k] = newId;\n });\n return await this.kv.waitForKeyToLoad(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.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.attrs));\n }\n\n notifyConnectionStatusSubs(status) {\n this.connectionStatusCbs.forEach((cb) => cb(status));\n }\n\n async setCurrentUser(user) {\n this.kv.updateInPlace((prev) => {\n prev[currentUserKey] = user;\n });\n await this.kv.waitForKeyToLoad(currentUserKey);\n }\n\n getCurrentUserCached() {\n return this._currentUserCached;\n }\n\n async _getCurrentUser() {\n const user = await this.kv.waitForKeyToLoad(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 try {\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 } catch (e) {\n return {\n user: undefined,\n isLoading: false,\n error: { message: e?.message || 'Error loading user' },\n };\n }\n }\n\n async _hasCurrentUser() {\n const user = await this.kv.waitForKeyToLoad(currentUserKey);\n return typeof user === 'string' ? JSON.parse(user) != null : 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 async syncUserToEndpoint(user) {\n if (!this.config.firstPartyPath) return;\n try {\n fetch(this.config.firstPartyPath + '/', {\n method: 'POST',\n body: JSON.stringify({\n type: 'sync-user',\n appId: this.config.appId,\n user: user,\n }),\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n } catch (error) {\n this._log.error('Error syncing user with external endpoint', error);\n }\n }\n\n updateUser(newUser) {\n this.syncUserToEndpoint(newUser);\n\n const newV = { error: undefined, user: newUser };\n this._currentUserCached = { isLoading: false, ...newV };\n this._dataForQueryCache = {};\n this.querySubs.updateInPlace((prev) => {\n Object.keys(prev).forEach((k) => {\n delete prev[k].result;\n });\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"]}