@instantdb/core 1.0.59 → 1.0.60-branch-sm-e2e-extra-fields-test.30932613644.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.
- package/__tests__/src/auth-extra-fields.e2e.test.ts +15 -0
- package/dist/commonjs/Reactor.d.ts +1 -1
- package/dist/commonjs/Reactor.d.ts.map +1 -1
- package/dist/commonjs/Reactor.js +2 -1
- package/dist/commonjs/Reactor.js.map +1 -1
- package/dist/commonjs/authAPI.d.ts +4 -1
- package/dist/commonjs/authAPI.d.ts.map +1 -1
- package/dist/commonjs/authAPI.js +2 -1
- package/dist/commonjs/authAPI.js.map +1 -1
- package/dist/commonjs/index.d.ts +3 -3
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js +2 -2
- package/dist/commonjs/index.js.map +1 -1
- package/dist/esm/Reactor.d.ts +1 -1
- package/dist/esm/Reactor.d.ts.map +1 -1
- package/dist/esm/Reactor.js +2 -1
- package/dist/esm/Reactor.js.map +1 -1
- package/dist/esm/authAPI.d.ts +4 -1
- package/dist/esm/authAPI.d.ts.map +1 -1
- package/dist/esm/authAPI.js +2 -1
- package/dist/esm/authAPI.js.map +1 -1
- package/dist/esm/index.d.ts +3 -3
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/standalone/index.js +11 -8
- package/dist/standalone/index.umd.cjs +3 -3
- package/package.json +2 -2
- package/src/Reactor.js +2 -1
- package/src/authAPI.ts +6 -1
- package/src/index.ts +4 -2
|
@@ -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 weakHashLegacy from './utils/weakHashLegacy.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.ts';\nimport { PersistedObject, StoreInterface } 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';\nimport { InstantStream } from './Stream.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/** @typedef {import('./clientTypes.ts').User} User */\n/** @typedef {import('./clientTypes.ts').AuthState} AuthState */\n/** @typedef {import('./framework.ts').FrameworkClient} FrameworkClient */\n\nexport const 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;\nconst ONE_DAY_MS = ONE_MIN_MS * 60 * 24;\n\nexport const COOKIE_SYNC_LAST_UPDATED_KEY = 'lastSyncedUserCookie';\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';\nconst OAUTH_EXTRA_FIELDS_ID_PARAM = '_instant_extra_fields_id';\n\nconst oauthExtraFieldsKey = 'oauthExtraFields';\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 /** @type {InstantStream} */\n _instantStream;\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 appStatusCbs = [];\n /**\n * Carries the raw server status off the public type: `disabled` is an\n * operator-level state we don't surface to apps.\n * @type {import('./clientTypes.ts').AppStatusState & { status?: 'active' | 'read-only' | 'disabled' }}\n */\n _appStatusState = { isLoading: true, isReadOnly: undefined };\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, {roomType: 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 /** @type FrameworkClient | null */\n _frameworkClient = null;\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 config.logger,\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 forceReadFromStorage: true,\n });\n await this.updateUser(res.user).catch((error) => {\n this._log.error('[error] update user', error);\n });\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._instantStream = new InstantStream({\n WStream: this.config.WritableStream || WritableStream,\n RStream: this.config.ReadableStream || ReadableStream,\n trySend: this._trySendAuthed.bind(this),\n log: this._log,\n });\n\n this._oauthCallbackResponse = this._oauthLoginInit();\n this.setupUserSyncTimer();\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 getFrameworkClient() {\n return this._frameworkClient;\n }\n\n /** @param {FrameworkClient} client */\n setFrameworkClient(client) {\n this._frameworkClient = client;\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, traceId?: string}} [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 errorMsg?.traceId,\n ),\n );\n }\n }\n }\n\n _setStatus(status, err) {\n this.status = status;\n this._errorMessage = err;\n this.notifyConnectionStatusSubs(status);\n this._instantStream.onConnectionStatusChange(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._setAppStatus(msg['app-status']?.status ?? 'active');\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 const roomType = this._rooms[roomId]?.roomType;\n this._tryJoinRoom(roomType, 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 'start-stream-ok': {\n this._instantStream.onStartStreamOk(msg);\n break;\n }\n case 'stream-flushed': {\n this._instantStream.onStreamFlushed(msg);\n break;\n }\n case 'append-failed': {\n this._instantStream.onAppendFailed(msg);\n break;\n }\n case 'stream-append': {\n this._instantStream.onStreamAppend(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 'app-status-changed': {\n const prevStatus = this._appStatusState.status;\n this._setAppStatus(msg.status);\n if (msg.status === 'disabled' && prevStatus !== 'disabled') {\n // The server has stopped serving reads; surface the typed error on\n // every registered query immediately instead of waiting for the\n // next round trip.\n const error = {\n message: 'This app is currently disabled.',\n hint: { status: 'disabled' },\n };\n Object.keys(this.queryCbs).forEach((hash) =>\n this.notifyQueryError(hash, error),\n );\n }\n if (prevStatus === 'disabled' && msg.status !== 'disabled') {\n // Leaving `disabled`: refreshes were paused server-side, so restart\n // the socket to re-add every query and get fresh results.\n this._startSocket();\n }\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('Unknown op', msg.op, msg);\n break;\n }\n }\n\n createWriteStream(opts) {\n return this._instantStream.createWriteStream(opts);\n }\n\n createReadStream(opts) {\n return this._instantStream.createReadStream(opts);\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, traceId?: string}} 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 traceId: errorMsg.traceId,\n };\n this.notifyAll();\n this.notifyAttrsSubs();\n this.notifyMutationErrorSubs(errDetails);\n this._finishTransaction(status, eventId, errorMsg);\n }\n }\n\n _handleReceiveError(msg) {\n this._log.info('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 (msg['trace-id'] || msg['original-event']?.['trace-id']) {\n const traceIds = [msg['trace-id'], msg['original-event']?.['trace-id']];\n const traceId = traceIds.filter(Boolean).join(',');\n errorMessage.traceId = traceId;\n }\n\n if (prevMutation) {\n this._handleMutationError('error', eventId, errorMessage);\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 switch (msg['original-event']?.op) {\n case 'resync-table': {\n this._syncTable.onResyncError(msg);\n return;\n }\n case 'start-sync': {\n this._syncTable.onStartSyncError(msg);\n return;\n }\n case 'start-stream':\n case 'append-stream':\n case 'subscribe-stream':\n case 'unsubscribe-stream': {\n this._instantStream.onRecieveError(msg);\n return;\n }\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 if (!prev[hash]) {\n // Legacy hash migration (sync): if a preloaded entry sits under the\n // old hash, move it to the new key so the placeholder line below\n // becomes a no-op and currentValue[hash] keeps its cached result.\n const legacyHash = weakHashLegacy(q);\n if (legacyHash !== hash && prev[legacyHash]) {\n prev[hash] = prev[legacyHash];\n delete prev[legacyHash];\n }\n }\n prev[hash] = prev[hash] || { q, result: null, eventId };\n prev[hash].lastAccessed = Date.now();\n });\n this._tryMigrateLegacyQuerySub(q, hash);\n this._trySendAuthed(eventId, { op: 'add-query', q });\n\n return eventId;\n }\n\n // Legacy hash migration (async): covers entries that weren't preloaded\n // into currentValue. Actively loads the legacy key from storage, moves\n // its result onto the new key, and notifies subscribers. Safe to remove\n // a few releases after v1.0.39.\n async _tryMigrateLegacyQuerySub(q, newHash) {\n const legacyHash = weakHashLegacy(q);\n if (legacyHash === newHash) return;\n await this.querySubs.waitForKeyToLoad(legacyHash);\n const legacy = this.querySubs.currentValue[legacyHash];\n if (!legacy) return;\n let migratedResult = false;\n this.querySubs.updateInPlace((prev) => {\n const existing = prev[newHash];\n if (existing && !existing.result && legacy.result) {\n existing.result = legacy.result;\n migratedResult = true;\n } else if (!existing) {\n prev[newHash] = legacy;\n migratedResult = !!legacy.result;\n }\n delete prev[legacyHash];\n });\n if (migratedResult) this.notifyOne(newHash);\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 // Clear the dedupe cache so the next successful result re-notifies\n // subscribers even if the data is unchanged from before the error\n delete this._dataForQueryCache[hash];\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 // The server rejects every write while read-only or disabled, so reject\n // locally instead of applying an optimistic update\n if (this._appStatusState.isReadOnly) {\n return Promise.reject(\n this._appStatusState.status === 'disabled'\n ? new InstantError('This app is currently disabled.', {\n status: 'disabled',\n })\n : new InstantError('This app is in read-only mode.', {\n status: 'read-only',\n }),\n );\n }\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 rewrittenMutations = this._rewriteMutations(\n this.ensureAttrs(),\n this._pendingMutations(),\n );\n if (rewrittenMutations !== this._pendingMutations()) {\n // Persist rewritten mutations to avoid stale attr ids in future txs.\n this.kv.updateInPlace((prev) => {\n prev.pendingMutations = rewrittenMutations;\n });\n }\n\n const muts = sortedMutationEntries(rewrittenMutations.entries());\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, {\n 'client-event-id': eventId,\n ...msg,\n });\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(OAUTH_EXTRA_FIELDS_ID_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 const extraFieldsId = params.get(OAUTH_EXTRA_FIELDS_ID_PARAM);\n this._replaceUrlAfterOAuth();\n try {\n let extraFields;\n const stored = await this.kv.waitForKeyToLoad(oauthExtraFieldsKey);\n if (extraFieldsId && stored) {\n extraFields = stored[extraFieldsId];\n }\n // Clean up all stored extraFields after login\n if (stored) {\n this.kv.updateInPlace((prev) => {\n delete prev[oauthExtraFieldsKey];\n });\n }\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 extraFields,\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 ?? null;\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 /**\n * @param {'active' | 'read-only' | 'disabled' | undefined} status\n */\n _setAppStatus(status) {\n if (!status || status === this._appStatusState.status) return;\n this._appStatusState = {\n isLoading: false,\n isReadOnly: status !== 'active',\n status,\n };\n this.notifyAppStatusSubs(this._appStatusState);\n }\n\n subscribeAppStatus(cb) {\n this.appStatusCbs.push(cb);\n cb(this._appStatusState);\n\n return () => {\n this.appStatusCbs = this.appStatusCbs.filter((x) => x !== cb);\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 notifyAppStatusSubs(state) {\n this.appStatusCbs.forEach((cb) => cb(state));\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 /**\n * @param {{ forceReadFromStorage?: boolean }} [opts]\n * @returns {Promise<User | undefined>}\n */\n async _getCurrentUser(opts) {\n if (opts?.forceReadFromStorage) {\n await this.kv.unloadKey(currentUserKey);\n }\n const user = await this.kv.waitForKeyToLoad(currentUserKey);\n return typeof user === 'string' ? JSON.parse(user) : user;\n }\n\n /**\n * @param {{ forceReadFromStorage?: boolean }} [opts]\n * @returns {Promise<AuthState>}\n */\n async getCurrentUser(opts) {\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 this._currentUserCached;\n }\n try {\n const user = await this._getCurrentUser(opts);\n const userV = { user: user, error: undefined };\n this._currentUserCached = {\n isLoading: false,\n ...userV,\n };\n return this._currentUserCached;\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\n // Clear any data in the framework client\n this._frameworkClient = null;\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 await this.updateUser(newUser);\n\n try {\n // Make sure everything is written to storage before we tell the\n // other tab to refetch\n await this.kv.flush();\n this._broadcastChannel?.postMessage({ type: 'auth' });\n } catch (error) {\n console.error('Error posting message to broadcast channel', error);\n }\n }\n\n async setupUserSyncTimer() {\n if (!this.config.firstPartyPath) return;\n try {\n const lastSynced = await this.kv.waitForKeyToLoad(\n COOKIE_SYNC_LAST_UPDATED_KEY,\n );\n const lastSyncTime = lastSynced ? new Date(lastSynced).getTime() : 0;\n const shouldSync =\n !Number.isFinite(lastSyncTime) ||\n Date.now() - lastSyncTime >= ONE_DAY_MS;\n if (!shouldSync) return;\n\n const { user } = await this.getCurrentUser();\n await this.syncUserToEndpoint(user ?? null);\n } catch (error) {\n this._log.error('Error syncing user cookie on startup', error);\n }\n }\n\n async syncUserToEndpoint(user) {\n if (!this.config.firstPartyPath) return;\n try {\n const response = await 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 if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n } catch (error) {\n this._log.error('Error syncing user with external endpoint', error);\n }\n\n this.kv.updateInPlace((prev) => {\n prev[COOKIE_SYNC_LAST_UPDATED_KEY] = new Date().toISOString();\n });\n }\n\n async updateUser(newUser) {\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.querySubs.clearUnloadedKeys();\n this._updatePendingMutations((prev) => {\n // Mark all pending mutations with an error, since we won't be able to\n // deliver the result\n for (const [eventId, _v] of prev.entries()) {\n if (this.mutationDeferredStore.get(eventId)) {\n this._finishTransaction('error', eventId, {\n message: 'User changed while transaction was in progress.',\n type: 'user-changed',\n });\n }\n }\n\n prev.clear();\n });\n\n this._reconnectTimeoutMs = 0;\n this._transport.close();\n this._oauthCallbackResponse = null;\n this.notifyAuthSubs(newV);\n try {\n await this.syncUserToEndpoint(newUser);\n } catch (error) {\n this._log.error('Error syncing user with external endpoint', error);\n }\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(params) {\n const currentUser = await this.getCurrentUser();\n const isGuest = currentUser?.user?.type === 'guest';\n const res = await authAPI.checkMagicCode({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n email: params.email,\n code: params.code,\n refreshToken: isGuest ? currentUser?.user?.refresh_token : undefined,\n extraFields: params.extraFields,\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 * @param {Record<string, any>} [params.extraFields] - Extra fields to write to $users on creation\n * @returns {string} The created authorization URL.\n */\n createAuthorizationURL({ clientName, redirectURL, extraFields }) {\n const { apiURI, appId } = this.config;\n let finalRedirectURL = redirectURL;\n if (extraFields) {\n // Store extraFields under a unique ID so multiple\n // createAuthorizationURL calls don't overwrite each other.\n // The ID is passed through the redirect URL and used\n // by _oauthLoginInit to retrieve the right extraFields.\n // All entries are cleaned up after login.\n const extraFieldsId = `${Math.random().toString(36).slice(2)}`;\n this.kv.updateInPlace((prev) => {\n const stored = prev[oauthExtraFieldsKey] || {};\n stored[extraFieldsId] = extraFields;\n prev[oauthExtraFieldsKey] = stored;\n });\n finalRedirectURL = `${redirectURL}${redirectURL.includes('?') ? '&' : '?'}${OAUTH_EXTRA_FIELDS_ID_PARAM}=${extraFieldsId}`;\n }\n return `${apiURI}/runtime/oauth/start?app_id=${appId}&client_name=${clientName}&redirect_uri=${encodeURIComponent(finalRedirectURL)}`;\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 * @param {Record<string, any>} [params.extraFields] - Extra fields to write to $users on creation\n */\n async exchangeCodeForToken({ code, codeVerifier, extraFields }) {\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 extraFields,\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 * @param {Record<string, any>} [params.extraFields] - Extra fields to write to $users on creation\n */\n async signInWithIdToken(params) {\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: params.idToken,\n clientName: params.clientName,\n nonce: params.nonce,\n refreshToken,\n extraFields: params.extraFields,\n });\n await this.changeCurrentUser(res.user);\n return res;\n }\n\n // --------\n // Rooms\n\n /**\n * @param {string} roomType\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(roomType, roomId, initialPresence) {\n let needsToSendJoin = false;\n if (!this._rooms[roomId]) {\n needsToSendJoin = true;\n this._rooms[roomId] = {\n roomType,\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(roomType, 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(roomType, roomId, data) {\n this._trySendAuthed(uuid(), {\n op: 'join-room',\n 'room-type': roomType,\n 'room-id': roomId,\n data,\n });\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 roomType,\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(roomType, roomId, topic, cb) {\n const leaveRoom = this.joinRoom(roomType, 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 weakHashLegacy from './utils/weakHashLegacy.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.ts';\nimport { PersistedObject, StoreInterface } 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';\nimport { InstantStream } from './Stream.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/** @typedef {import('./clientTypes.ts').User} User */\n/** @typedef {import('./clientTypes.ts').AuthState} AuthState */\n/** @typedef {import('./framework.ts').FrameworkClient} FrameworkClient */\n\nexport const 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;\nconst ONE_DAY_MS = ONE_MIN_MS * 60 * 24;\n\nexport const COOKIE_SYNC_LAST_UPDATED_KEY = 'lastSyncedUserCookie';\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';\nconst OAUTH_EXTRA_FIELDS_ID_PARAM = '_instant_extra_fields_id';\n\nconst oauthExtraFieldsKey = 'oauthExtraFields';\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 /** @type {InstantStream} */\n _instantStream;\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 appStatusCbs = [];\n /**\n * Carries the raw server status off the public type: `disabled` is an\n * operator-level state we don't surface to apps.\n * @type {import('./clientTypes.ts').AppStatusState & { status?: 'active' | 'read-only' | 'disabled' }}\n */\n _appStatusState = { isLoading: true, isReadOnly: undefined };\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, {roomType: 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 /** @type FrameworkClient | null */\n _frameworkClient = null;\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 config.logger,\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 forceReadFromStorage: true,\n });\n await this.updateUser(res.user).catch((error) => {\n this._log.error('[error] update user', error);\n });\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._instantStream = new InstantStream({\n WStream: this.config.WritableStream || WritableStream,\n RStream: this.config.ReadableStream || ReadableStream,\n trySend: this._trySendAuthed.bind(this),\n log: this._log,\n });\n\n this._oauthCallbackResponse = this._oauthLoginInit();\n this.setupUserSyncTimer();\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 getFrameworkClient() {\n return this._frameworkClient;\n }\n\n /** @param {FrameworkClient} client */\n setFrameworkClient(client) {\n this._frameworkClient = client;\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, traceId?: string}} [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 errorMsg?.traceId,\n ),\n );\n }\n }\n }\n\n _setStatus(status, err) {\n this.status = status;\n this._errorMessage = err;\n this.notifyConnectionStatusSubs(status);\n this._instantStream.onConnectionStatusChange(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._setAppStatus(msg['app-status']?.status ?? 'active');\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 const roomType = this._rooms[roomId]?.roomType;\n this._tryJoinRoom(roomType, 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 'start-stream-ok': {\n this._instantStream.onStartStreamOk(msg);\n break;\n }\n case 'stream-flushed': {\n this._instantStream.onStreamFlushed(msg);\n break;\n }\n case 'append-failed': {\n this._instantStream.onAppendFailed(msg);\n break;\n }\n case 'stream-append': {\n this._instantStream.onStreamAppend(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 'app-status-changed': {\n const prevStatus = this._appStatusState.status;\n this._setAppStatus(msg.status);\n if (msg.status === 'disabled' && prevStatus !== 'disabled') {\n // The server has stopped serving reads; surface the typed error on\n // every registered query immediately instead of waiting for the\n // next round trip.\n const error = {\n message: 'This app is currently disabled.',\n hint: { status: 'disabled' },\n };\n Object.keys(this.queryCbs).forEach((hash) =>\n this.notifyQueryError(hash, error),\n );\n }\n if (prevStatus === 'disabled' && msg.status !== 'disabled') {\n // Leaving `disabled`: refreshes were paused server-side, so restart\n // the socket to re-add every query and get fresh results.\n this._startSocket();\n }\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('Unknown op', msg.op, msg);\n break;\n }\n }\n\n createWriteStream(opts) {\n return this._instantStream.createWriteStream(opts);\n }\n\n createReadStream(opts) {\n return this._instantStream.createReadStream(opts);\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, traceId?: string}} 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 traceId: errorMsg.traceId,\n };\n this.notifyAll();\n this.notifyAttrsSubs();\n this.notifyMutationErrorSubs(errDetails);\n this._finishTransaction(status, eventId, errorMsg);\n }\n }\n\n _handleReceiveError(msg) {\n this._log.info('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 (msg['trace-id'] || msg['original-event']?.['trace-id']) {\n const traceIds = [msg['trace-id'], msg['original-event']?.['trace-id']];\n const traceId = traceIds.filter(Boolean).join(',');\n errorMessage.traceId = traceId;\n }\n\n if (prevMutation) {\n this._handleMutationError('error', eventId, errorMessage);\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 switch (msg['original-event']?.op) {\n case 'resync-table': {\n this._syncTable.onResyncError(msg);\n return;\n }\n case 'start-sync': {\n this._syncTable.onStartSyncError(msg);\n return;\n }\n case 'start-stream':\n case 'append-stream':\n case 'subscribe-stream':\n case 'unsubscribe-stream': {\n this._instantStream.onRecieveError(msg);\n return;\n }\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 if (!prev[hash]) {\n // Legacy hash migration (sync): if a preloaded entry sits under the\n // old hash, move it to the new key so the placeholder line below\n // becomes a no-op and currentValue[hash] keeps its cached result.\n const legacyHash = weakHashLegacy(q);\n if (legacyHash !== hash && prev[legacyHash]) {\n prev[hash] = prev[legacyHash];\n delete prev[legacyHash];\n }\n }\n prev[hash] = prev[hash] || { q, result: null, eventId };\n prev[hash].lastAccessed = Date.now();\n });\n this._tryMigrateLegacyQuerySub(q, hash);\n this._trySendAuthed(eventId, { op: 'add-query', q });\n\n return eventId;\n }\n\n // Legacy hash migration (async): covers entries that weren't preloaded\n // into currentValue. Actively loads the legacy key from storage, moves\n // its result onto the new key, and notifies subscribers. Safe to remove\n // a few releases after v1.0.39.\n async _tryMigrateLegacyQuerySub(q, newHash) {\n const legacyHash = weakHashLegacy(q);\n if (legacyHash === newHash) return;\n await this.querySubs.waitForKeyToLoad(legacyHash);\n const legacy = this.querySubs.currentValue[legacyHash];\n if (!legacy) return;\n let migratedResult = false;\n this.querySubs.updateInPlace((prev) => {\n const existing = prev[newHash];\n if (existing && !existing.result && legacy.result) {\n existing.result = legacy.result;\n migratedResult = true;\n } else if (!existing) {\n prev[newHash] = legacy;\n migratedResult = !!legacy.result;\n }\n delete prev[legacyHash];\n });\n if (migratedResult) this.notifyOne(newHash);\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 // Clear the dedupe cache so the next successful result re-notifies\n // subscribers even if the data is unchanged from before the error\n delete this._dataForQueryCache[hash];\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 // The server rejects every write while read-only or disabled, so reject\n // locally instead of applying an optimistic update\n if (this._appStatusState.isReadOnly) {\n return Promise.reject(\n this._appStatusState.status === 'disabled'\n ? new InstantError('This app is currently disabled.', {\n status: 'disabled',\n })\n : new InstantError('This app is in read-only mode.', {\n status: 'read-only',\n }),\n );\n }\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 rewrittenMutations = this._rewriteMutations(\n this.ensureAttrs(),\n this._pendingMutations(),\n );\n if (rewrittenMutations !== this._pendingMutations()) {\n // Persist rewritten mutations to avoid stale attr ids in future txs.\n this.kv.updateInPlace((prev) => {\n prev.pendingMutations = rewrittenMutations;\n });\n }\n\n const muts = sortedMutationEntries(rewrittenMutations.entries());\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, {\n 'client-event-id': eventId,\n ...msg,\n });\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(OAUTH_EXTRA_FIELDS_ID_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 const extraFieldsId = params.get(OAUTH_EXTRA_FIELDS_ID_PARAM);\n this._replaceUrlAfterOAuth();\n try {\n let extraFields;\n const stored = await this.kv.waitForKeyToLoad(oauthExtraFieldsKey);\n if (extraFieldsId && stored) {\n extraFields = stored[extraFieldsId];\n }\n // Clean up all stored extraFields after login\n if (stored) {\n this.kv.updateInPlace((prev) => {\n delete prev[oauthExtraFieldsKey];\n });\n }\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 extraFields,\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 ?? null;\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 /**\n * @param {'active' | 'read-only' | 'disabled' | undefined} status\n */\n _setAppStatus(status) {\n if (!status || status === this._appStatusState.status) return;\n this._appStatusState = {\n isLoading: false,\n isReadOnly: status !== 'active',\n status,\n };\n this.notifyAppStatusSubs(this._appStatusState);\n }\n\n subscribeAppStatus(cb) {\n this.appStatusCbs.push(cb);\n cb(this._appStatusState);\n\n return () => {\n this.appStatusCbs = this.appStatusCbs.filter((x) => x !== cb);\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 notifyAppStatusSubs(state) {\n this.appStatusCbs.forEach((cb) => cb(state));\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 /**\n * @param {{ forceReadFromStorage?: boolean }} [opts]\n * @returns {Promise<User | undefined>}\n */\n async _getCurrentUser(opts) {\n if (opts?.forceReadFromStorage) {\n await this.kv.unloadKey(currentUserKey);\n }\n const user = await this.kv.waitForKeyToLoad(currentUserKey);\n return typeof user === 'string' ? JSON.parse(user) : user;\n }\n\n /**\n * @param {{ forceReadFromStorage?: boolean }} [opts]\n * @returns {Promise<AuthState>}\n */\n async getCurrentUser(opts) {\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 this._currentUserCached;\n }\n try {\n const user = await this._getCurrentUser(opts);\n const userV = { user: user, error: undefined };\n this._currentUserCached = {\n isLoading: false,\n ...userV,\n };\n return this._currentUserCached;\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\n // Clear any data in the framework client\n this._frameworkClient = null;\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 await this.updateUser(newUser);\n\n try {\n // Make sure everything is written to storage before we tell the\n // other tab to refetch\n await this.kv.flush();\n this._broadcastChannel?.postMessage({ type: 'auth' });\n } catch (error) {\n console.error('Error posting message to broadcast channel', error);\n }\n }\n\n async setupUserSyncTimer() {\n if (!this.config.firstPartyPath) return;\n try {\n const lastSynced = await this.kv.waitForKeyToLoad(\n COOKIE_SYNC_LAST_UPDATED_KEY,\n );\n const lastSyncTime = lastSynced ? new Date(lastSynced).getTime() : 0;\n const shouldSync =\n !Number.isFinite(lastSyncTime) ||\n Date.now() - lastSyncTime >= ONE_DAY_MS;\n if (!shouldSync) return;\n\n const { user } = await this.getCurrentUser();\n await this.syncUserToEndpoint(user ?? null);\n } catch (error) {\n this._log.error('Error syncing user cookie on startup', error);\n }\n }\n\n async syncUserToEndpoint(user) {\n if (!this.config.firstPartyPath) return;\n try {\n const response = await 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 if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n } catch (error) {\n this._log.error('Error syncing user with external endpoint', error);\n }\n\n this.kv.updateInPlace((prev) => {\n prev[COOKIE_SYNC_LAST_UPDATED_KEY] = new Date().toISOString();\n });\n }\n\n async updateUser(newUser) {\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.querySubs.clearUnloadedKeys();\n this._updatePendingMutations((prev) => {\n // Mark all pending mutations with an error, since we won't be able to\n // deliver the result\n for (const [eventId, _v] of prev.entries()) {\n if (this.mutationDeferredStore.get(eventId)) {\n this._finishTransaction('error', eventId, {\n message: 'User changed while transaction was in progress.',\n type: 'user-changed',\n });\n }\n }\n\n prev.clear();\n });\n\n this._reconnectTimeoutMs = 0;\n this._transport.close();\n this._oauthCallbackResponse = null;\n this.notifyAuthSubs(newV);\n try {\n await this.syncUserToEndpoint(newUser);\n } catch (error) {\n this._log.error('Error syncing user with external endpoint', error);\n }\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(params) {\n const currentUser = await this.getCurrentUser();\n const isGuest = currentUser?.user?.type === 'guest';\n const res = await authAPI.checkMagicCode({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n email: params.email,\n code: params.code,\n refreshToken: isGuest ? currentUser?.user?.refresh_token : undefined,\n extraFields: params.extraFields,\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(params) {\n const res = await authAPI.signInAsGuest({\n apiURI: this.config.apiURI,\n appId: this.config.appId,\n extraFields: params?.extraFields,\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 * @param {Record<string, any>} [params.extraFields] - Extra fields to write to $users on creation\n * @returns {string} The created authorization URL.\n */\n createAuthorizationURL({ clientName, redirectURL, extraFields }) {\n const { apiURI, appId } = this.config;\n let finalRedirectURL = redirectURL;\n if (extraFields) {\n // Store extraFields under a unique ID so multiple\n // createAuthorizationURL calls don't overwrite each other.\n // The ID is passed through the redirect URL and used\n // by _oauthLoginInit to retrieve the right extraFields.\n // All entries are cleaned up after login.\n const extraFieldsId = `${Math.random().toString(36).slice(2)}`;\n this.kv.updateInPlace((prev) => {\n const stored = prev[oauthExtraFieldsKey] || {};\n stored[extraFieldsId] = extraFields;\n prev[oauthExtraFieldsKey] = stored;\n });\n finalRedirectURL = `${redirectURL}${redirectURL.includes('?') ? '&' : '?'}${OAUTH_EXTRA_FIELDS_ID_PARAM}=${extraFieldsId}`;\n }\n return `${apiURI}/runtime/oauth/start?app_id=${appId}&client_name=${clientName}&redirect_uri=${encodeURIComponent(finalRedirectURL)}`;\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 * @param {Record<string, any>} [params.extraFields] - Extra fields to write to $users on creation\n */\n async exchangeCodeForToken({ code, codeVerifier, extraFields }) {\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 extraFields,\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 * @param {Record<string, any>} [params.extraFields] - Extra fields to write to $users on creation\n */\n async signInWithIdToken(params) {\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: params.idToken,\n clientName: params.clientName,\n nonce: params.nonce,\n refreshToken,\n extraFields: params.extraFields,\n });\n await this.changeCurrentUser(res.user);\n return res;\n }\n\n // --------\n // Rooms\n\n /**\n * @param {string} roomType\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(roomType, roomId, initialPresence) {\n let needsToSendJoin = false;\n if (!this._rooms[roomId]) {\n needsToSendJoin = true;\n this._rooms[roomId] = {\n roomType,\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(roomType, 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(roomType, roomId, data) {\n this._trySendAuthed(uuid(), {\n op: 'join-room',\n 'room-type': roomType,\n 'room-id': roomId,\n data,\n });\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 roomType,\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(roomType, roomId, topic, cb) {\n const leaveRoom = this.joinRoom(roomType, 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"]}
|