@instantdb/core 0.22.61 → 0.22.62-experimental.codex-mcp.19585792766.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/__tests__/src/utils/PersistedObject.test.ts +2 -0
  2. package/dist/commonjs/IndexedDBStorage.js +2 -1
  3. package/dist/commonjs/IndexedDBStorage.js.map +1 -1
  4. package/dist/commonjs/Reactor.d.ts +12 -10
  5. package/dist/commonjs/Reactor.d.ts.map +1 -1
  6. package/dist/commonjs/Reactor.js +6 -5
  7. package/dist/commonjs/Reactor.js.map +1 -1
  8. package/dist/commonjs/SyncTable.d.ts.map +1 -1
  9. package/dist/commonjs/SyncTable.js +36 -23
  10. package/dist/commonjs/SyncTable.js.map +1 -1
  11. package/dist/commonjs/authAPI.d.ts +1 -1
  12. package/dist/commonjs/authAPI.d.ts.map +1 -1
  13. package/dist/commonjs/authAPI.js.map +1 -1
  14. package/dist/commonjs/schema.js.map +1 -1
  15. package/dist/commonjs/schemaTypes.d.ts +3 -3
  16. package/dist/commonjs/schemaTypes.d.ts.map +1 -1
  17. package/dist/commonjs/schemaTypes.js.map +1 -1
  18. package/dist/commonjs/utils/PersistedObject.d.ts.map +1 -1
  19. package/dist/commonjs/utils/PersistedObject.js +2 -0
  20. package/dist/commonjs/utils/PersistedObject.js.map +1 -1
  21. package/dist/commonjs/utils/uuid.js.map +1 -1
  22. package/dist/esm/IndexedDBStorage.js +2 -1
  23. package/dist/esm/IndexedDBStorage.js.map +1 -1
  24. package/dist/esm/Reactor.d.ts +12 -10
  25. package/dist/esm/Reactor.d.ts.map +1 -1
  26. package/dist/esm/Reactor.js +6 -5
  27. package/dist/esm/Reactor.js.map +1 -1
  28. package/dist/esm/SyncTable.d.ts.map +1 -1
  29. package/dist/esm/SyncTable.js +36 -23
  30. package/dist/esm/SyncTable.js.map +1 -1
  31. package/dist/esm/authAPI.d.ts +1 -1
  32. package/dist/esm/authAPI.d.ts.map +1 -1
  33. package/dist/esm/authAPI.js.map +1 -1
  34. package/dist/esm/schema.js.map +1 -1
  35. package/dist/esm/schemaTypes.d.ts +3 -3
  36. package/dist/esm/schemaTypes.d.ts.map +1 -1
  37. package/dist/esm/schemaTypes.js.map +1 -1
  38. package/dist/esm/utils/PersistedObject.d.ts.map +1 -1
  39. package/dist/esm/utils/PersistedObject.js +2 -0
  40. package/dist/esm/utils/PersistedObject.js.map +1 -1
  41. package/dist/esm/utils/uuid.js.map +1 -1
  42. package/dist/standalone/index.js +645 -621
  43. package/dist/standalone/index.umd.cjs +3 -3
  44. package/package.json +2 -2
  45. package/src/IndexedDBStorage.ts +2 -2
  46. package/src/Reactor.js +14 -5
  47. package/src/SyncTable.ts +66 -42
  48. package/src/authAPI.ts +1 -1
  49. package/src/schema.ts +1 -1
  50. package/src/schemaTypes.ts +5 -3
  51. package/src/utils/PersistedObject.ts +10 -9
  52. package/src/utils/uuid.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SyncTable.d.ts","sourceRoot":"","sources":["../../src/SyncTable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SyncTable.d.ts","sourceRoot":"","sources":["../../src/SyncTable.ts"],"names":[],"mappings":"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"}
@@ -81,8 +81,9 @@ function syncSubToStorage(_k, sub) {
81
81
  }
82
82
  }
83
83
  function onMergeSub(_key, storageSub, inMemorySub) {
84
- const storageTxId = storageSub === null || storageSub === void 0 ? void 0 : storageSub.state.txId;
85
- const memoryTxId = inMemorySub === null || inMemorySub === void 0 ? void 0 : inMemorySub.state.txId;
84
+ var _a, _b;
85
+ const storageTxId = (_a = storageSub === null || storageSub === void 0 ? void 0 : storageSub.state) === null || _a === void 0 ? void 0 : _a.txId;
86
+ const memoryTxId = (_b = inMemorySub === null || inMemorySub === void 0 ? void 0 : inMemorySub.state) === null || _b === void 0 ? void 0 : _b.txId;
86
87
  if (storageTxId && (!memoryTxId || storageTxId > memoryTxId)) {
87
88
  return storageSub;
88
89
  }
@@ -145,13 +146,33 @@ function changedFieldsOfChanges(store, changes) {
145
146
  break;
146
147
  }
147
148
  }
149
+ for (const k of Object.keys(changedFields)) {
150
+ const { oldValue, newValue } = changedFields[k];
151
+ if (oldValue === newValue) {
152
+ delete changedFields[k];
153
+ }
154
+ }
148
155
  return changedFields;
149
156
  }
150
157
  function subData(sub, entities) {
151
158
  return { [sub.table]: entities.map((e) => e.entity) };
152
159
  }
153
- function sortEntitiesInPlace(sub, entities) {
154
- const dataType = sub.orderFieldType;
160
+ // Updates the sub order field type if it hasn't been set
161
+ // and returns the type. We have to wait until the attrs
162
+ // are loaded before we can determine the type.
163
+ function orderFieldTypeMutative(sub, createStore) {
164
+ var _a;
165
+ if (sub.orderFieldType) {
166
+ return sub.orderFieldType;
167
+ }
168
+ const orderFieldType = sub.orderField === 'serverCreatedAt'
169
+ ? 'number'
170
+ : (_a = s.getAttrByFwdIdentName(createStore([]), sub.table, sub.orderField)) === null || _a === void 0 ? void 0 : _a['checked-data-type'];
171
+ sub.orderFieldType = orderFieldType;
172
+ return orderFieldType;
173
+ }
174
+ function sortEntitiesInPlace(sub, orderFieldType, entities) {
175
+ const dataType = orderFieldType;
155
176
  if (sub.orderField === 'serverCreatedAt') {
156
177
  entities.sort(sub.orderDirection === 'asc'
157
178
  ? function compareEntities(a, b) {
@@ -222,7 +243,7 @@ class SyncTable {
222
243
  delete this.callbacks[hash];
223
244
  const sub = this.subs.currentValue[hash];
224
245
  if (sub === null || sub === void 0 ? void 0 : sub.state) {
225
- this.clearSubscriptionData(sub.state.subscriptionId, keepSubscription);
246
+ this.clearSubscriptionData(sub.state.subscriptionId, !!keepSubscription);
226
247
  }
227
248
  if (!keepSubscription) {
228
249
  this.subs.updateInPlace((prev) => {
@@ -237,13 +258,13 @@ class SyncTable {
237
258
  q: query,
238
259
  });
239
260
  }
240
- sendResync(sub, state) {
261
+ sendResync(sub, state, txId) {
241
262
  // Make sure we can find the hash from the subscriptionId
242
263
  this.idToHash[state.subscriptionId] = sub.hash;
243
264
  this.trySend(state.subscriptionId, {
244
265
  op: 'resync-table',
245
266
  'subscription-id': state.subscriptionId,
246
- 'tx-id': state.txId,
267
+ 'tx-id': txId,
247
268
  token: state.token,
248
269
  });
249
270
  }
@@ -256,14 +277,13 @@ class SyncTable {
256
277
  }
257
278
  initSubscription(query, hash, cb) {
258
279
  return __awaiter(this, void 0, void 0, function* () {
259
- var _a, _b, _c, _d, _e;
280
+ var _a, _b, _c, _d;
260
281
  // Wait for storage to load so that we know if we already have an existing subscription
261
282
  yield this.subs.waitForKeyToLoad(hash);
262
283
  const existingSub = this.subs.currentValue[hash];
263
284
  if (existingSub && existingSub.state && existingSub.state.txId) {
264
- this.sendResync(existingSub, existingSub.state);
285
+ this.sendResync(existingSub, existingSub.state, existingSub.state.txId);
265
286
  if (((_a = existingSub.values) === null || _a === void 0 ? void 0 : _a.entities) && cb) {
266
- const k = Object.keys(query)[0];
267
287
  cb({
268
288
  type: CallbackEventType.LoadFromStorage,
269
289
  data: subData(existingSub, (_b = existingSub.values) === null || _b === void 0 ? void 0 : _b.entities),
@@ -274,9 +294,6 @@ class SyncTable {
274
294
  const table = Object.keys(query)[0];
275
295
  const orderBy = ((_d = (_c = query[table]) === null || _c === void 0 ? void 0 : _c.$) === null || _d === void 0 ? void 0 : _d.order) || { serverCreatedAt: 'asc' };
276
296
  const [orderField, orderDirection] = Object.entries(orderBy)[0];
277
- const orderFieldType = orderField === 'serverCreatedAt'
278
- ? 'number'
279
- : (_e = s.getAttrByFwdIdentName(this.createStore([]), table, orderField)) === null || _e === void 0 ? void 0 : _e['checked-data-type'];
280
297
  this.subs.updateInPlace((prev) => {
281
298
  prev[hash] = {
282
299
  query,
@@ -284,7 +301,6 @@ class SyncTable {
284
301
  table,
285
302
  orderDirection,
286
303
  orderField,
287
- orderFieldType,
288
304
  createdAt: Date.now(),
289
305
  updatedAt: Date.now(),
290
306
  };
@@ -423,7 +439,7 @@ class SyncTable {
423
439
  return;
424
440
  }
425
441
  for (const tx of msg.txes) {
426
- if (state.txId >= tx['tx-id']) {
442
+ if (state.txId && state.txId >= tx['tx-id']) {
427
443
  continue;
428
444
  }
429
445
  state.txId = tx['tx-id'];
@@ -444,16 +460,12 @@ class SyncTable {
444
460
  const updated = [];
445
461
  // Update the existing stores, if we already know about this entity
446
462
  eidLoop: for (const [eid, changes] of Object.entries(byEid)) {
447
- for (const [entIdx, ent] of Object.entries(entities)) {
463
+ for (let i = 0; i < entities.length; i++) {
464
+ const ent = entities[i];
448
465
  if (s.hasEntity(ent.store, eid)) {
449
466
  applyChangesToStore(ent.store, changes);
450
467
  const entity = queryEntity(sub, ent.store);
451
468
  const changedFields = changedFieldsOfChanges(ent.store, changes)[eid];
452
- for (const [k, { oldValue, newValue }] of Object.entries(changedFields || {})) {
453
- if (oldValue === newValue) {
454
- delete changedFields[k];
455
- }
456
- }
457
469
  if (entity) {
458
470
  updated.push({
459
471
  oldEntity: ent.entity,
@@ -463,7 +475,7 @@ class SyncTable {
463
475
  ent.entity = entity;
464
476
  }
465
477
  else {
466
- idxesToDelete.push(entIdx);
478
+ idxesToDelete.push(i);
467
479
  }
468
480
  delete byEid[eid];
469
481
  continue eidLoop;
@@ -497,7 +509,8 @@ class SyncTable {
497
509
  removed.push(entities[idx].entity);
498
510
  entities.splice(idx, 1);
499
511
  }
500
- sortEntitiesInPlace(sub, entities);
512
+ const orderFieldType = orderFieldTypeMutative(sub, this.createStore);
513
+ sortEntitiesInPlace(sub, orderFieldType, entities);
501
514
  this.notifyCbs(hash, {
502
515
  type: CallbackEventType.SyncTransaction,
503
516
  data: subData(sub, (_c = sub.values) === null || _c === void 0 ? void 0 : _c.entities),
@@ -1 +1 @@
1
- {"version":3,"file":"SyncTable.js","sourceRoot":"","sources":["../../src/SyncTable.ts"],"names":[],"mappings":"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","sourcesContent":["import { PersistedObject } from './utils/PersistedObject.ts';\nimport * as s from './store.js';\nimport weakHash from './utils/weakHash.ts';\nimport uuid from './utils/uuid.ts';\nimport { Logger } from './Reactor.js';\nimport instaql, { compareOrder } from './instaql.js';\nimport { InstaQLResponse, ValidQuery } from './queryTypes.ts';\nimport { EntitiesDef, IContainEntitiesAndLinks } from './schemaTypes.ts';\nimport { StorageInterface } from './index.ts';\n\ntype SubState = {\n txId?: number;\n subscriptionId: string;\n token: string;\n};\n\ntype Sub = {\n query: any;\n hash: string;\n table: string;\n orderField: string;\n orderDirection: 'asc' | 'desc';\n orderFieldType: 'string' | 'number' | 'date' | 'boolean';\n state?: SubState;\n values?: {\n attrs: Record<string, any>;\n entities: Array<{ entity: any; store: any; serverCreatedAt: number }>;\n };\n createdAt: number;\n updatedAt: number;\n};\n\n// We could make a better type for this if we had a return type for s.toJSON\ntype SubInStorage = Sub;\n\ntype StartMsg = {\n op: 'start-sync';\n q: string;\n};\n\ntype EndMsg = {\n op: 'remove-sync';\n 'subscription-id': string;\n 'keep-subscription': boolean;\n};\n\ntype ResyncMsg = {\n op: 'resync-table';\n 'subscription-id': string;\n 'tx-id': number;\n token: string;\n};\n\ntype SendMsg = StartMsg | EndMsg | ResyncMsg;\n\ntype StartSyncOkMsg = {\n 'subscription-id': string;\n 'client-event-id': string;\n q: string;\n token: string;\n};\n\ntype Triple = [string, string, any, number];\n\ntype SyncLoadBatchMsg = {\n 'subscription-id': string;\n 'join-rows': Array<Triple[]>;\n};\n\ntype SyncInitFinishMsg = {\n 'subscription-id': string;\n 'tx-id': number;\n};\n\ntype SyncUpdateTriplesMsg = {\n 'subscription-id': string;\n txes: {\n 'tx-id': number;\n changes: { action: 'added' | 'removed'; triple: Triple }[];\n }[];\n};\n\ntype TrySend = (eventId: string, msg: SendMsg) => void;\n\ntype Config = { useDateObjects: boolean };\n\n// Modifies the data in place because it comes directly from storage\nfunction syncSubFromStorage(sub: SubInStorage, useDateObjects: boolean): Sub {\n const values = sub.values;\n if (values) {\n for (const e of values.entities || []) {\n e.store.useDateObjects = useDateObjects;\n e.store.attrs = values.attrs;\n e.store = s.fromJSON(e.store);\n }\n }\n\n return sub;\n}\n\nfunction syncSubToStorage(_k: string, sub: Sub): SubInStorage {\n if (sub.values?.entities) {\n const entities = [];\n for (const e of sub.values?.entities) {\n const store = s.toJSON(e.store);\n // We'll store the attrs once on values, and put the\n // attrs back into the store on hydration\n delete store['attrs'];\n entities.push({ ...e, store });\n }\n return { ...sub, values: { ...sub.values, entities } };\n } else {\n return sub;\n }\n}\n\nfunction onMergeSub(\n _key: string,\n storageSub: SubInStorage | null,\n inMemorySub: Sub | null,\n): Sub {\n const storageTxId = storageSub?.state.txId;\n const memoryTxId = inMemorySub?.state.txId;\n\n if (storageTxId && (!memoryTxId || storageTxId > memoryTxId)) {\n return storageSub;\n }\n\n if (memoryTxId && (!storageTxId || memoryTxId > storageTxId)) {\n return inMemorySub;\n }\n\n return storageSub || inMemorySub;\n}\n\nfunction queryEntity(sub: Sub, store: any) {\n const res = instaql({ store, pageInfo: null, aggregate: null }, sub.query);\n return res.data[sub.table][0];\n}\n\nfunction getServerCreatedAt(sub: Sub, store: any, entityId: string): number {\n const aid = s.getAttrByFwdIdentName(store, sub.table, 'id')?.id;\n if (!aid) {\n return -1;\n }\n const t = s.getInMap(store.eav, [entityId, aid, entityId]);\n if (!t) {\n return -1;\n }\n return t[3];\n}\n\nfunction applyChangesToStore(\n store: any,\n changes: SyncUpdateTriplesMsg['txes'][number]['changes'],\n): void {\n for (const { action, triple } of changes) {\n switch (action) {\n case 'added':\n s.addTriple(store, triple);\n break;\n case 'removed':\n s.retractTriple(store, triple);\n break;\n }\n }\n}\n\nfunction changedFieldsOfChanges(\n store: any,\n changes: SyncUpdateTriplesMsg['txes'][number]['changes'],\n): {\n [eid: string]: SyncTransaction<\n any,\n any,\n any\n >['updated'][number]['changedFields'];\n} {\n // This will be more complicated when we include links, we can either add a\n // changedLinks field or we can have something like 'bookshelves.title`\n const changedFields = {};\n for (const { action, triple } of changes) {\n const [e, a, v] = triple;\n const field = store.attrs[a]?.['forward-identity']?.[2];\n if (!field) continue;\n\n const fields = changedFields[e] ?? {};\n changedFields[e] = fields;\n\n const oldNew = fields[field] ?? {};\n fields[field] = oldNew;\n\n switch (action) {\n case 'added':\n oldNew.newValue = v;\n break;\n case 'removed':\n // Only take the first thing that was removed, in case we modified things in the middle\n if (oldNew.oldValue === undefined) {\n oldNew.oldValue = v;\n }\n break;\n }\n }\n return changedFields;\n}\n\nfunction subData(sub: Sub, entities: NonNullable<Sub['values']['entities']>) {\n return { [sub.table]: entities.map((e) => e.entity) };\n}\n\nfunction sortEntitiesInPlace(\n sub: Sub,\n entities: NonNullable<Sub['values']['entities']>,\n) {\n const dataType = sub.orderFieldType;\n if (sub.orderField === 'serverCreatedAt') {\n entities.sort(\n sub.orderDirection === 'asc'\n ? function compareEntities(a, b) {\n return compareOrder(\n a.entity.id,\n a.serverCreatedAt,\n b.entity.id,\n b.serverCreatedAt,\n dataType,\n );\n }\n : function compareEntities(b, a) {\n return compareOrder(\n a.entity.id,\n a.serverCreatedAt,\n b.entity.id,\n b.serverCreatedAt,\n dataType,\n );\n },\n );\n return;\n }\n\n const field = sub.orderField;\n\n entities.sort(\n sub.orderDirection === 'asc'\n ? function compareEntities(a, b) {\n return compareOrder(\n a.entity.id,\n a.entity[field],\n b.entity.id,\n b.entity[field],\n dataType,\n );\n }\n : function compareEntities(b, a) {\n return compareOrder(\n a.entity.id,\n a.entity[field],\n b.entity.id,\n b.entity[field],\n dataType,\n );\n },\n );\n}\n\nexport enum CallbackEventType {\n InitialSyncBatch = 'InitialSyncBatch',\n InitialSyncComplete = 'InitialSyncComplete',\n LoadFromStorage = 'LoadFromStorage',\n SyncTransaction = 'SyncTransaction',\n Error = 'Error',\n}\n\ntype QueryEntities<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> = InstaQLResponse<Schema, Q, UseDates>[keyof InstaQLResponse<\n Schema,\n Q,\n UseDates\n>];\n\ntype QueryEntity<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> = QueryEntities<Schema, Q, UseDates> extends (infer E)[] ? E : never;\n\ntype ChangedFields<Entity> = {\n [K in keyof Entity]?: {\n oldValue: Entity[K];\n newValue: Entity[K];\n };\n};\n\nexport interface BaseCallbackEvent<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> {\n type: CallbackEventType;\n data: InstaQLResponse<Schema, Q, UseDates>;\n}\n\nexport interface InitialSyncBatch<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.InitialSyncBatch;\n batch: QueryEntities<Schema, Q, UseDates>;\n}\n\nexport interface InitialSyncComplete<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.InitialSyncComplete;\n}\n\nexport interface SyncTransaction<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.SyncTransaction;\n added: QueryEntities<Schema, Q, UseDates>;\n removed: QueryEntities<Schema, Q, UseDates>;\n updated: {\n oldEntity: QueryEntity<Schema, Q, UseDates>;\n newEntity: QueryEntity<Schema, Q, UseDates>;\n changedFields: ChangedFields<QueryEntity<Schema, Q, UseDates>>;\n }[];\n}\n\nexport interface LoadFromStorage<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.LoadFromStorage;\n}\n\nexport interface SetupError<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.Error;\n error: { message: string; hint?: any; type: string; status: number };\n}\n\nexport type CallbackEvent<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> =\n | InitialSyncBatch<Schema, Q, UseDates>\n | InitialSyncComplete<Schema, Q, UseDates>\n | SyncTransaction<Schema, Q, UseDates>\n | LoadFromStorage<Schema, Q, UseDates>\n | SetupError<Schema, Q, UseDates>;\n\nexport type SyncTableCallback<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> = (event: CallbackEvent<Schema, Q, UseDates>) => void;\n\nexport class SyncTable {\n private trySend: TrySend;\n private subs: PersistedObject<string, Sub, SubInStorage>;\n // Using any for the SyncCallback because we'd need Reactor to be typed\n private callbacks: { [hash: string]: SyncTableCallback<any, any, any>[] } =\n {};\n private config: Config;\n private idToHash: { [subscriptionId: string]: string } = {};\n private log: Logger;\n private createStore: (triples: Triple[]) => any;\n\n constructor(\n trySend: TrySend,\n storage: StorageInterface,\n config: Config,\n log: Logger,\n createStore: (triples: Triple[]) => any,\n ) {\n this.trySend = trySend;\n this.config = config;\n this.log = log;\n this.createStore = createStore;\n\n this.subs = new PersistedObject<string, Sub, SubInStorage>({\n persister: storage,\n merge: onMergeSub,\n serialize: syncSubToStorage,\n parse: (_key, x) => syncSubFromStorage(x, this.config.useDateObjects),\n objectSize: (sub) => sub.values?.entities.length || 0,\n logger: log,\n gc: {\n maxAgeMs: 1000 * 60 * 60 * 24 * 7 * 52, // 1 year\n maxEntries: 1000,\n // Size of each sub is the number of entity\n maxSize: 1_000_000, // 1 million entities\n },\n });\n }\n\n public beforeUnload() {\n this.subs.flush();\n }\n\n public subscribe(\n q: any,\n cb: SyncTableCallback<any, any, any>,\n ): (\n opts?: { keepSubscription?: boolean | null | undefined } | null | undefined,\n ) => void {\n const hash = weakHash(q);\n this.callbacks[hash] = this.callbacks[hash] || [];\n this.callbacks[hash].push(cb);\n\n this.initSubscription(q, hash, cb);\n\n return (opts?: { keepSubscription?: boolean | null | undefined }) => {\n this.unsubscribe(hash, cb, opts?.keepSubscription);\n };\n }\n\n private unsubscribe(\n hash: string,\n cb: SyncTableCallback<any, any, any>,\n keepSubscription: boolean | null | undefined,\n ) {\n const cbs = (this.callbacks[hash] || []).filter((x) => x !== cb);\n this.callbacks[hash] = cbs;\n\n if (!cbs.length) {\n delete this.callbacks[hash];\n const sub = this.subs.currentValue[hash];\n if (sub?.state) {\n this.clearSubscriptionData(sub.state.subscriptionId, keepSubscription);\n }\n if (!keepSubscription) {\n this.subs.updateInPlace((prev) => {\n delete prev[hash];\n });\n }\n }\n }\n\n private sendStart(query: string) {\n this.trySend(uuid(), {\n op: 'start-sync',\n q: query,\n });\n }\n\n private sendResync(sub: Sub, state: SubState) {\n // Make sure we can find the hash from the subscriptionId\n this.idToHash[state.subscriptionId] = sub.hash;\n this.trySend(state.subscriptionId, {\n op: 'resync-table',\n 'subscription-id': state.subscriptionId,\n 'tx-id': state.txId,\n token: state.token,\n });\n }\n\n private sendRemove(state: SubState, keepSubscription: boolean) {\n this.trySend(uuid(), {\n op: 'remove-sync',\n 'subscription-id': state.subscriptionId,\n 'keep-subscription': keepSubscription,\n });\n }\n\n private async initSubscription(\n query: any,\n hash: string,\n cb?: SyncTableCallback<any, any, any>,\n ) {\n // Wait for storage to load so that we know if we already have an existing subscription\n await this.subs.waitForKeyToLoad(hash);\n const existingSub = this.subs.currentValue[hash];\n\n if (existingSub && existingSub.state && existingSub.state.txId) {\n this.sendResync(existingSub, existingSub.state);\n\n if (existingSub.values?.entities && cb) {\n const k = Object.keys(query)[0];\n cb({\n type: CallbackEventType.LoadFromStorage,\n data: subData(existingSub, existingSub.values?.entities),\n });\n }\n\n return;\n }\n\n const table = Object.keys(query)[0];\n const orderBy = query[table]?.$?.order || { serverCreatedAt: 'asc' };\n const [orderField, orderDirection] = Object.entries(orderBy)[0] as [\n string,\n 'asc' | 'desc',\n ];\n\n const orderFieldType =\n orderField === 'serverCreatedAt'\n ? 'number'\n : s.getAttrByFwdIdentName(this.createStore([]), table, orderField)?.[\n 'checked-data-type'\n ];\n\n this.subs.updateInPlace((prev) => {\n prev[hash] = {\n query,\n hash: hash,\n table,\n orderDirection,\n orderField,\n orderFieldType,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n };\n });\n\n this.sendStart(query);\n }\n\n public async flushPending() {\n for (const hash of Object.keys(this.callbacks)) {\n await this.subs.waitForKeyToLoad(hash);\n const sub = this.subs.currentValue[hash];\n if (sub) {\n await this.initSubscription(sub.query, sub.hash);\n } else {\n this.log.error('Missing sub for hash in flushPending', hash);\n }\n }\n }\n\n public onStartSyncOk(msg: StartSyncOkMsg) {\n const subscriptionId = msg['subscription-id'];\n const q = msg.q;\n const hash = weakHash(q);\n\n this.idToHash[subscriptionId] = hash;\n\n this.subs.updateInPlace((prev) => {\n const sub = prev[hash];\n if (!sub) {\n this.log.error(\n 'Missing sub for hash',\n hash,\n 'subscription-id',\n subscriptionId,\n 'query',\n q,\n );\n return prev;\n }\n\n sub.state = {\n subscriptionId: subscriptionId,\n token: msg.token,\n };\n });\n }\n\n private notifyCbs(hash: string, event: CallbackEvent<any, any, any>) {\n for (const cb of this.callbacks[hash] || []) {\n cb(event);\n }\n }\n\n public onSyncLoadBatch(msg: SyncLoadBatchMsg) {\n const subscriptionId = msg['subscription-id'];\n const joinRows = msg['join-rows'];\n const hash = this.idToHash[subscriptionId];\n if (!hash) {\n this.log.error('Missing hash for subscription', msg);\n return;\n }\n\n const batch = [];\n const sub = this.subs.currentValue[hash];\n if (!sub) {\n this.log.error('Missing sub for hash', hash, msg);\n return;\n }\n\n const values = sub.values ?? {\n entities: [],\n attrs: this.createStore([]).attrs,\n };\n sub.values = values;\n const entities = values.entities;\n\n for (const entRows of joinRows) {\n const store = this.createStore(entRows);\n values.attrs = store.attrs;\n const entity = queryEntity(sub, store);\n entities.push({\n store,\n entity,\n serverCreatedAt: getServerCreatedAt(sub, store, entity.id),\n });\n batch.push(entity);\n }\n\n this.subs.updateInPlace((prev) => {\n prev[hash] = sub;\n // Make sure we write a field or mutative won't\n // see the change because sub === prev[hash]\n prev[hash].updatedAt = Date.now();\n });\n\n if (sub.values) {\n this.notifyCbs(hash, {\n type: CallbackEventType.InitialSyncBatch,\n data: subData(sub, sub.values.entities),\n batch,\n });\n }\n }\n\n public onSyncInitFinish(msg: SyncInitFinishMsg) {\n const subscriptionId = msg['subscription-id'];\n const hash = this.idToHash[subscriptionId];\n if (!hash) {\n this.log.error('Missing hash for subscription', msg);\n return;\n }\n this.subs.updateInPlace((prev) => {\n const sub = prev[hash];\n if (!sub) {\n this.log.error('Missing sub for hash', hash, msg);\n return;\n }\n const state = sub.state;\n if (!state) {\n this.log.error('Sub never set init, missing result', sub, msg);\n return prev;\n }\n state.txId = msg['tx-id'];\n sub.updatedAt = Date.now();\n });\n\n const sub = this.subs.currentValue[hash];\n\n if (sub) {\n this.notifyCbs(hash, {\n type: CallbackEventType.InitialSyncComplete,\n data: subData(sub, sub.values?.entities || []),\n });\n }\n }\n\n public onSyncUpdateTriples(msg: SyncUpdateTriplesMsg) {\n const subscriptionId = msg['subscription-id'];\n const hash = this.idToHash[subscriptionId];\n if (!hash) {\n this.log.error('Missing hash for subscription', msg);\n return;\n }\n\n const sub = this.subs.currentValue[hash];\n if (!sub) {\n this.log.error('Missing sub for hash', hash, msg);\n return;\n }\n\n const state = sub.state;\n if (!state) {\n this.log.error('Missing state for sub', sub, msg);\n return;\n }\n\n for (const tx of msg.txes) {\n if (state.txId >= tx['tx-id']) {\n continue;\n }\n state.txId = tx['tx-id'];\n const idxesToDelete = [];\n // Note: this won't work as well when links are involved\n const byEid: {\n [eid: string]: SyncUpdateTriplesMsg['txes'][number]['changes'];\n } = {};\n for (const change of tx.changes) {\n const eidChanges = byEid[change.triple[0]] ?? [];\n byEid[change.triple[0]] = eidChanges;\n eidChanges.push(change);\n }\n\n const values = sub.values ?? {\n entities: [],\n attrs: this.createStore([]).attrs,\n };\n const entities = values.entities;\n sub.values = values;\n\n const updated: SyncTransaction<any, any, any>['updated'] = [];\n // Update the existing stores, if we already know about this entity\n eidLoop: for (const [eid, changes] of Object.entries(byEid)) {\n for (const [entIdx, ent] of Object.entries(entities)) {\n if (s.hasEntity(ent.store, eid)) {\n applyChangesToStore(ent.store, changes);\n const entity = queryEntity(sub, ent.store);\n const changedFields = changedFieldsOfChanges(ent.store, changes)[\n eid\n ];\n for (const [k, { oldValue, newValue }] of Object.entries(\n changedFields || {},\n )) {\n if (oldValue === newValue) {\n delete changedFields[k];\n }\n }\n if (entity) {\n updated.push({\n oldEntity: ent.entity,\n newEntity: entity,\n changedFields: changedFields || {},\n });\n ent.entity = entity;\n } else {\n idxesToDelete.push(entIdx);\n }\n delete byEid[eid];\n continue eidLoop;\n }\n }\n }\n\n const added = [];\n // If we have anything left in byEid, then this must be a new entity we don't know about\n for (const [_eid, changes] of Object.entries(byEid)) {\n const store = this.createStore([]);\n values.attrs = store.attrs;\n applyChangesToStore(store, changes);\n const entity = queryEntity(sub, store);\n if (!entity) {\n this.log.error('No entity found after applying change', {\n sub,\n changes,\n store,\n });\n continue;\n }\n entities.push({\n store,\n entity,\n serverCreatedAt: getServerCreatedAt(sub, store, entity.id),\n });\n added.push(entity);\n }\n\n const removed = [];\n\n for (const idx of idxesToDelete.sort().reverse()) {\n removed.push(entities[idx].entity);\n entities.splice(idx, 1);\n }\n\n sortEntitiesInPlace(sub, entities);\n this.notifyCbs(hash, {\n type: CallbackEventType.SyncTransaction,\n data: subData(sub, sub.values?.entities),\n added,\n removed,\n updated,\n });\n }\n this.subs.updateInPlace((prev) => {\n prev[hash] = sub;\n // Make sure we write a field or mutative won't\n // see the change because sub === prev[hash]\n prev[hash].updatedAt = Date.now();\n });\n }\n\n private clearSubscriptionData(\n subscriptionId: string,\n keepSubscription: boolean,\n ) {\n const hash = this.idToHash[subscriptionId];\n if (hash) {\n delete this.idToHash[subscriptionId];\n const sub = this.subs.currentValue[hash];\n if (sub.state) {\n this.sendRemove(sub.state, keepSubscription);\n }\n if (keepSubscription) {\n this.subs.unloadKey(hash);\n } else {\n this.subs.updateInPlace((prev) => {\n delete prev[hash];\n });\n }\n if (sub) {\n return sub;\n }\n }\n }\n\n public onStartSyncError(msg: {\n op: 'error';\n 'original-event': StartMsg;\n 'client-event-id': string;\n status: number;\n type: string;\n message?: string;\n hint?: any;\n }) {\n const hash = weakHash(msg['original-event']['q']);\n const error = {\n message: msg.message || 'Uh-oh, something went wrong. Ping Joe & Stopa.',\n status: msg.status,\n type: msg.type,\n hint: msg.hint,\n };\n\n const k = Object.keys(msg['original-event']['q'])[0];\n this.notifyCbs(hash, {\n type: CallbackEventType.Error,\n data: { [k]: [] },\n error,\n });\n }\n\n public onResyncError(msg: {\n op: 'error';\n 'original-event': ResyncMsg;\n status: number;\n type: string;\n }) {\n // Clear the subscription and start from scrath on any resync error\n // This can happen if the auth changed and we need to refetch with the\n // new auth or if the subscription is too far behind.\n const subscriptionId = msg['original-event']['subscription-id'];\n const removedSub = this.clearSubscriptionData(subscriptionId, false);\n if (removedSub) {\n this.initSubscription(removedSub.query, removedSub.hash);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"SyncTable.js","sourceRoot":"","sources":["../../src/SyncTable.ts"],"names":[],"mappings":"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","sourcesContent":["import { PersistedObject } from './utils/PersistedObject.ts';\nimport * as s from './store.js';\nimport weakHash from './utils/weakHash.ts';\nimport uuid from './utils/uuid.ts';\nimport { Logger } from './Reactor.js';\nimport instaql, { compareOrder } from './instaql.js';\nimport { InstaQLResponse, ValidQuery } from './queryTypes.ts';\nimport { EntitiesDef, IContainEntitiesAndLinks } from './schemaTypes.ts';\nimport { StorageInterface } from './index.ts';\n\ntype SubState = {\n txId?: number;\n subscriptionId: string;\n token: string;\n};\n\ntype SubEntity = {\n entity: any;\n store: any;\n serverCreatedAt: number;\n};\n\ntype SubValues = {\n attrs: Record<string, any>;\n entities: Array<SubEntity>;\n};\n\ntype Sub = {\n query: any;\n hash: string;\n table: string;\n orderField: string;\n orderDirection: 'asc' | 'desc';\n orderFieldType?: 'string' | 'number' | 'date' | 'boolean';\n state?: SubState;\n values?: SubValues;\n createdAt: number;\n updatedAt: number;\n};\n\n// We could make a better type for this if we had a return type for s.toJSON\ntype SubInStorage = Sub;\n\ntype StartMsg = {\n op: 'start-sync';\n q: string;\n};\n\ntype EndMsg = {\n op: 'remove-sync';\n 'subscription-id': string;\n 'keep-subscription': boolean;\n};\n\ntype ResyncMsg = {\n op: 'resync-table';\n 'subscription-id': string;\n 'tx-id': number;\n token: string;\n};\n\ntype SendMsg = StartMsg | EndMsg | ResyncMsg;\n\ntype StartSyncOkMsg = {\n 'subscription-id': string;\n 'client-event-id': string;\n q: string;\n token: string;\n};\n\ntype Triple = [string, string, any, number];\n\ntype SyncLoadBatchMsg = {\n 'subscription-id': string;\n 'join-rows': Array<Triple[]>;\n};\n\ntype SyncInitFinishMsg = {\n 'subscription-id': string;\n 'tx-id': number;\n};\n\ntype SyncUpdateTriplesMsg = {\n 'subscription-id': string;\n txes: {\n 'tx-id': number;\n changes: { action: 'added' | 'removed'; triple: Triple }[];\n }[];\n};\n\ntype TrySend = (eventId: string, msg: SendMsg) => void;\n\ntype Config = { useDateObjects: boolean };\n\n// Modifies the data in place because it comes directly from storage\nfunction syncSubFromStorage(sub: SubInStorage, useDateObjects: boolean): Sub {\n const values = sub.values;\n if (values) {\n for (const e of values.entities || []) {\n e.store.useDateObjects = useDateObjects;\n e.store.attrs = values.attrs;\n e.store = s.fromJSON(e.store);\n }\n }\n\n return sub;\n}\n\nfunction syncSubToStorage(_k: string, sub: Sub): SubInStorage {\n if (sub.values?.entities) {\n const entities: SubEntity[] = [];\n for (const e of sub.values?.entities) {\n const store = s.toJSON(e.store);\n // We'll store the attrs once on values, and put the\n // attrs back into the store on hydration\n delete store['attrs'];\n entities.push({ ...e, store });\n }\n return { ...sub, values: { ...sub.values, entities } };\n } else {\n return sub;\n }\n}\n\nfunction onMergeSub(\n _key: string,\n storageSub: SubInStorage,\n inMemorySub: Sub | null,\n): Sub {\n const storageTxId = storageSub?.state?.txId;\n const memoryTxId = inMemorySub?.state?.txId;\n\n if (storageTxId && (!memoryTxId || storageTxId > memoryTxId)) {\n return storageSub;\n }\n\n if (memoryTxId && (!storageTxId || memoryTxId > storageTxId)) {\n return inMemorySub;\n }\n\n return storageSub || inMemorySub;\n}\n\nfunction queryEntity(sub: Sub, store: any) {\n const res = instaql({ store, pageInfo: null, aggregate: null }, sub.query);\n return res.data[sub.table][0];\n}\n\nfunction getServerCreatedAt(sub: Sub, store: any, entityId: string): number {\n const aid = s.getAttrByFwdIdentName(store, sub.table, 'id')?.id;\n if (!aid) {\n return -1;\n }\n const t = s.getInMap(store.eav, [entityId, aid, entityId]);\n if (!t) {\n return -1;\n }\n return t[3];\n}\n\nfunction applyChangesToStore(\n store: any,\n changes: SyncUpdateTriplesMsg['txes'][number]['changes'],\n): void {\n for (const { action, triple } of changes) {\n switch (action) {\n case 'added':\n s.addTriple(store, triple);\n break;\n case 'removed':\n s.retractTriple(store, triple);\n break;\n }\n }\n}\n\nfunction changedFieldsOfChanges(\n store: any,\n changes: SyncUpdateTriplesMsg['txes'][number]['changes'],\n): {\n [eid: string]: SyncTransaction<\n any,\n any,\n any\n >['updated'][number]['changedFields'];\n} {\n // This will be more complicated when we include links, we can either add a\n // changedLinks field or we can have something like 'bookshelves.title`\n const changedFields = {};\n for (const { action, triple } of changes) {\n const [e, a, v] = triple;\n const field = store.attrs[a]?.['forward-identity']?.[2];\n if (!field) continue;\n\n const fields = changedFields[e] ?? {};\n changedFields[e] = fields;\n\n const oldNew = fields[field] ?? {};\n fields[field] = oldNew;\n\n switch (action) {\n case 'added':\n oldNew.newValue = v;\n break;\n case 'removed':\n // Only take the first thing that was removed, in case we modified things in the middle\n if (oldNew.oldValue === undefined) {\n oldNew.oldValue = v;\n }\n break;\n }\n }\n\n for (const k of Object.keys(changedFields)) {\n const { oldValue, newValue } = changedFields[k];\n if (oldValue === newValue) {\n delete changedFields[k];\n }\n }\n return changedFields;\n}\n\nfunction subData(sub: Sub, entities: NonNullable<Sub['values']>['entities']) {\n return { [sub.table]: entities.map((e) => e.entity) };\n}\n\n// Updates the sub order field type if it hasn't been set\n// and returns the type. We have to wait until the attrs\n// are loaded before we can determine the type.\nfunction orderFieldTypeMutative(sub: Sub, createStore) {\n if (sub.orderFieldType) {\n return sub.orderFieldType;\n }\n const orderFieldType =\n sub.orderField === 'serverCreatedAt'\n ? 'number'\n : s.getAttrByFwdIdentName(createStore([]), sub.table, sub.orderField)?.[\n 'checked-data-type'\n ];\n\n sub.orderFieldType = orderFieldType;\n return orderFieldType;\n}\n\nfunction sortEntitiesInPlace(\n sub: Sub,\n orderFieldType: NonNullable<Sub['orderFieldType']>,\n entities: NonNullable<Sub['values']>['entities'],\n) {\n const dataType = orderFieldType;\n if (sub.orderField === 'serverCreatedAt') {\n entities.sort(\n sub.orderDirection === 'asc'\n ? function compareEntities(a, b) {\n return compareOrder(\n a.entity.id,\n a.serverCreatedAt,\n b.entity.id,\n b.serverCreatedAt,\n dataType,\n );\n }\n : function compareEntities(b, a) {\n return compareOrder(\n a.entity.id,\n a.serverCreatedAt,\n b.entity.id,\n b.serverCreatedAt,\n dataType,\n );\n },\n );\n return;\n }\n\n const field = sub.orderField;\n\n entities.sort(\n sub.orderDirection === 'asc'\n ? function compareEntities(a, b) {\n return compareOrder(\n a.entity.id,\n a.entity[field],\n b.entity.id,\n b.entity[field],\n dataType,\n );\n }\n : function compareEntities(b, a) {\n return compareOrder(\n a.entity.id,\n a.entity[field],\n b.entity.id,\n b.entity[field],\n dataType,\n );\n },\n );\n}\n\nexport enum CallbackEventType {\n InitialSyncBatch = 'InitialSyncBatch',\n InitialSyncComplete = 'InitialSyncComplete',\n LoadFromStorage = 'LoadFromStorage',\n SyncTransaction = 'SyncTransaction',\n Error = 'Error',\n}\n\ntype QueryEntities<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> = InstaQLResponse<Schema, Q, UseDates>[keyof InstaQLResponse<\n Schema,\n Q,\n UseDates\n>];\n\ntype QueryEntity<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> = QueryEntities<Schema, Q, UseDates> extends (infer E)[] ? E : never;\n\ntype ChangedFields<Entity> = {\n [K in keyof Entity]?: {\n oldValue: Entity[K];\n newValue: Entity[K];\n };\n};\n\nexport interface BaseCallbackEvent<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> {\n type: CallbackEventType;\n data: InstaQLResponse<Schema, Q, UseDates>;\n}\n\nexport interface InitialSyncBatch<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.InitialSyncBatch;\n batch: QueryEntities<Schema, Q, UseDates>;\n}\n\nexport interface InitialSyncComplete<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.InitialSyncComplete;\n}\n\nexport interface SyncTransaction<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.SyncTransaction;\n added: QueryEntities<Schema, Q, UseDates>;\n removed: QueryEntities<Schema, Q, UseDates>;\n updated: {\n oldEntity: QueryEntity<Schema, Q, UseDates>;\n newEntity: QueryEntity<Schema, Q, UseDates>;\n changedFields: ChangedFields<QueryEntity<Schema, Q, UseDates>>;\n }[];\n}\n\nexport interface LoadFromStorage<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.LoadFromStorage;\n}\n\nexport interface SetupError<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.Error;\n error: { message: string; hint?: any; type: string; status: number };\n}\n\nexport type CallbackEvent<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> =\n | InitialSyncBatch<Schema, Q, UseDates>\n | InitialSyncComplete<Schema, Q, UseDates>\n | SyncTransaction<Schema, Q, UseDates>\n | LoadFromStorage<Schema, Q, UseDates>\n | SetupError<Schema, Q, UseDates>;\n\nexport type SyncTableCallback<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> = (event: CallbackEvent<Schema, Q, UseDates>) => void;\n\nexport class SyncTable {\n private trySend: TrySend;\n private subs: PersistedObject<string, Sub, SubInStorage>;\n // Using any for the SyncCallback because we'd need Reactor to be typed\n private callbacks: { [hash: string]: SyncTableCallback<any, any, any>[] } =\n {};\n private config: Config;\n private idToHash: { [subscriptionId: string]: string } = {};\n private log: Logger;\n private createStore: (triples: Triple[]) => any;\n\n constructor(\n trySend: TrySend,\n storage: StorageInterface,\n config: Config,\n log: Logger,\n createStore: (triples: Triple[]) => any,\n ) {\n this.trySend = trySend;\n this.config = config;\n this.log = log;\n this.createStore = createStore;\n\n this.subs = new PersistedObject<string, Sub, SubInStorage>({\n persister: storage,\n merge: onMergeSub,\n serialize: syncSubToStorage,\n parse: (_key, x) => syncSubFromStorage(x, this.config.useDateObjects),\n objectSize: (sub) => sub.values?.entities.length || 0,\n logger: log,\n gc: {\n maxAgeMs: 1000 * 60 * 60 * 24 * 7 * 52, // 1 year\n maxEntries: 1000,\n // Size of each sub is the number of entity\n maxSize: 1_000_000, // 1 million entities\n },\n });\n }\n\n public beforeUnload() {\n this.subs.flush();\n }\n\n public subscribe(\n q: any,\n cb: SyncTableCallback<any, any, any>,\n ): (\n opts?: { keepSubscription?: boolean | null | undefined } | null | undefined,\n ) => void {\n const hash = weakHash(q);\n this.callbacks[hash] = this.callbacks[hash] || [];\n this.callbacks[hash].push(cb);\n\n this.initSubscription(q, hash, cb);\n\n return (opts?: { keepSubscription?: boolean | null | undefined }) => {\n this.unsubscribe(hash, cb, opts?.keepSubscription);\n };\n }\n\n private unsubscribe(\n hash: string,\n cb: SyncTableCallback<any, any, any>,\n keepSubscription: boolean | null | undefined,\n ) {\n const cbs = (this.callbacks[hash] || []).filter((x) => x !== cb);\n this.callbacks[hash] = cbs;\n\n if (!cbs.length) {\n delete this.callbacks[hash];\n const sub = this.subs.currentValue[hash];\n if (sub?.state) {\n this.clearSubscriptionData(\n sub.state.subscriptionId,\n !!keepSubscription,\n );\n }\n if (!keepSubscription) {\n this.subs.updateInPlace((prev) => {\n delete prev[hash];\n });\n }\n }\n }\n\n private sendStart(query: string) {\n this.trySend(uuid(), {\n op: 'start-sync',\n q: query,\n });\n }\n\n private sendResync(sub: Sub, state: SubState, txId: number) {\n // Make sure we can find the hash from the subscriptionId\n this.idToHash[state.subscriptionId] = sub.hash;\n this.trySend(state.subscriptionId, {\n op: 'resync-table',\n 'subscription-id': state.subscriptionId,\n 'tx-id': txId,\n token: state.token,\n });\n }\n\n private sendRemove(state: SubState, keepSubscription: boolean) {\n this.trySend(uuid(), {\n op: 'remove-sync',\n 'subscription-id': state.subscriptionId,\n 'keep-subscription': keepSubscription,\n });\n }\n\n private async initSubscription(\n query: any,\n hash: string,\n cb?: SyncTableCallback<any, any, any>,\n ) {\n // Wait for storage to load so that we know if we already have an existing subscription\n await this.subs.waitForKeyToLoad(hash);\n const existingSub = this.subs.currentValue[hash];\n\n if (existingSub && existingSub.state && existingSub.state.txId) {\n this.sendResync(existingSub, existingSub.state, existingSub.state.txId);\n\n if (existingSub.values?.entities && cb) {\n cb({\n type: CallbackEventType.LoadFromStorage,\n data: subData(existingSub, existingSub.values?.entities),\n });\n }\n\n return;\n }\n\n const table = Object.keys(query)[0];\n const orderBy = query[table]?.$?.order || { serverCreatedAt: 'asc' };\n const [orderField, orderDirection] = Object.entries(orderBy)[0] as [\n string,\n 'asc' | 'desc',\n ];\n\n this.subs.updateInPlace((prev) => {\n prev[hash] = {\n query,\n hash: hash,\n table,\n orderDirection,\n orderField,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n };\n });\n\n this.sendStart(query);\n }\n\n public async flushPending() {\n for (const hash of Object.keys(this.callbacks)) {\n await this.subs.waitForKeyToLoad(hash);\n const sub = this.subs.currentValue[hash];\n if (sub) {\n await this.initSubscription(sub.query, sub.hash);\n } else {\n this.log.error('Missing sub for hash in flushPending', hash);\n }\n }\n }\n\n public onStartSyncOk(msg: StartSyncOkMsg) {\n const subscriptionId = msg['subscription-id'];\n const q = msg.q;\n const hash = weakHash(q);\n\n this.idToHash[subscriptionId] = hash;\n\n this.subs.updateInPlace((prev) => {\n const sub = prev[hash];\n if (!sub) {\n this.log.error(\n 'Missing sub for hash',\n hash,\n 'subscription-id',\n subscriptionId,\n 'query',\n q,\n );\n return prev;\n }\n\n sub.state = {\n subscriptionId: subscriptionId,\n token: msg.token,\n };\n });\n }\n\n private notifyCbs(hash: string, event: CallbackEvent<any, any, any>) {\n for (const cb of this.callbacks[hash] || []) {\n cb(event);\n }\n }\n\n public onSyncLoadBatch(msg: SyncLoadBatchMsg) {\n const subscriptionId = msg['subscription-id'];\n const joinRows = msg['join-rows'];\n const hash = this.idToHash[subscriptionId];\n if (!hash) {\n this.log.error('Missing hash for subscription', msg);\n return;\n }\n\n const batch: any[] = [];\n const sub = this.subs.currentValue[hash];\n if (!sub) {\n this.log.error('Missing sub for hash', hash, msg);\n return;\n }\n\n const values: SubValues = sub.values ?? {\n entities: [],\n attrs: this.createStore([]).attrs,\n };\n sub.values = values;\n const entities = values.entities;\n\n for (const entRows of joinRows) {\n const store = this.createStore(entRows);\n values.attrs = store.attrs;\n const entity = queryEntity(sub, store);\n entities.push({\n store,\n entity,\n serverCreatedAt: getServerCreatedAt(sub, store, entity.id),\n });\n batch.push(entity);\n }\n\n this.subs.updateInPlace((prev) => {\n prev[hash] = sub;\n // Make sure we write a field or mutative won't\n // see the change because sub === prev[hash]\n prev[hash].updatedAt = Date.now();\n });\n\n if (sub.values) {\n this.notifyCbs(hash, {\n type: CallbackEventType.InitialSyncBatch,\n data: subData(sub, sub.values.entities),\n batch,\n });\n }\n }\n\n public onSyncInitFinish(msg: SyncInitFinishMsg) {\n const subscriptionId = msg['subscription-id'];\n const hash = this.idToHash[subscriptionId];\n if (!hash) {\n this.log.error('Missing hash for subscription', msg);\n return;\n }\n this.subs.updateInPlace((prev) => {\n const sub = prev[hash];\n if (!sub) {\n this.log.error('Missing sub for hash', hash, msg);\n return;\n }\n const state = sub.state;\n if (!state) {\n this.log.error('Sub never set init, missing result', sub, msg);\n return prev;\n }\n state.txId = msg['tx-id'];\n sub.updatedAt = Date.now();\n });\n\n const sub = this.subs.currentValue[hash];\n\n if (sub) {\n this.notifyCbs(hash, {\n type: CallbackEventType.InitialSyncComplete,\n data: subData(sub, sub.values?.entities || []),\n });\n }\n }\n\n public onSyncUpdateTriples(msg: SyncUpdateTriplesMsg) {\n const subscriptionId = msg['subscription-id'];\n const hash = this.idToHash[subscriptionId];\n if (!hash) {\n this.log.error('Missing hash for subscription', msg);\n return;\n }\n\n const sub = this.subs.currentValue[hash];\n if (!sub) {\n this.log.error('Missing sub for hash', hash, msg);\n return;\n }\n\n const state = sub.state;\n if (!state) {\n this.log.error('Missing state for sub', sub, msg);\n return;\n }\n\n for (const tx of msg.txes) {\n if (state.txId && state.txId >= tx['tx-id']) {\n continue;\n }\n state.txId = tx['tx-id'];\n const idxesToDelete: number[] = [];\n // Note: this won't work as well when links are involved\n const byEid: {\n [eid: string]: SyncUpdateTriplesMsg['txes'][number]['changes'];\n } = {};\n for (const change of tx.changes) {\n const eidChanges = byEid[change.triple[0]] ?? [];\n byEid[change.triple[0]] = eidChanges;\n eidChanges.push(change);\n }\n\n const values: SubValues = sub.values ?? {\n entities: [],\n attrs: this.createStore([]).attrs,\n };\n const entities = values.entities;\n sub.values = values;\n\n const updated: SyncTransaction<any, any, any>['updated'] = [];\n // Update the existing stores, if we already know about this entity\n eidLoop: for (const [eid, changes] of Object.entries(byEid)) {\n for (let i = 0; i < entities.length; i++) {\n const ent = entities[i];\n if (s.hasEntity(ent.store, eid)) {\n applyChangesToStore(ent.store, changes);\n const entity = queryEntity(sub, ent.store);\n const changedFields = changedFieldsOfChanges(ent.store, changes)[\n eid\n ];\n if (entity) {\n updated.push({\n oldEntity: ent.entity,\n newEntity: entity,\n changedFields: changedFields || {},\n });\n ent.entity = entity;\n } else {\n idxesToDelete.push(i);\n }\n delete byEid[eid];\n continue eidLoop;\n }\n }\n }\n\n const added: any[] = [];\n // If we have anything left in byEid, then this must be a new entity we don't know about\n for (const [_eid, changes] of Object.entries(byEid)) {\n const store = this.createStore([]);\n values.attrs = store.attrs;\n applyChangesToStore(store, changes);\n const entity = queryEntity(sub, store);\n if (!entity) {\n this.log.error('No entity found after applying change', {\n sub,\n changes,\n store,\n });\n continue;\n }\n entities.push({\n store,\n entity,\n serverCreatedAt: getServerCreatedAt(sub, store, entity.id),\n });\n added.push(entity);\n }\n\n const removed: any[] = [];\n\n for (const idx of idxesToDelete.sort().reverse()) {\n removed.push(entities[idx].entity);\n entities.splice(idx, 1);\n }\n\n const orderFieldType = orderFieldTypeMutative(sub, this.createStore);\n\n sortEntitiesInPlace(sub, orderFieldType, entities);\n this.notifyCbs(hash, {\n type: CallbackEventType.SyncTransaction,\n data: subData(sub, sub.values?.entities),\n added,\n removed,\n updated,\n });\n }\n this.subs.updateInPlace((prev) => {\n prev[hash] = sub;\n // Make sure we write a field or mutative won't\n // see the change because sub === prev[hash]\n prev[hash].updatedAt = Date.now();\n });\n }\n\n private clearSubscriptionData(\n subscriptionId: string,\n keepSubscription: boolean,\n ) {\n const hash = this.idToHash[subscriptionId];\n if (hash) {\n delete this.idToHash[subscriptionId];\n const sub = this.subs.currentValue[hash];\n if (sub.state) {\n this.sendRemove(sub.state, keepSubscription);\n }\n if (keepSubscription) {\n this.subs.unloadKey(hash);\n } else {\n this.subs.updateInPlace((prev) => {\n delete prev[hash];\n });\n }\n if (sub) {\n return sub;\n }\n }\n }\n\n public onStartSyncError(msg: {\n op: 'error';\n 'original-event': StartMsg;\n 'client-event-id': string;\n status: number;\n type: string;\n message?: string;\n hint?: any;\n }) {\n const hash = weakHash(msg['original-event']['q']);\n const error = {\n message: msg.message || 'Uh-oh, something went wrong. Ping Joe & Stopa.',\n status: msg.status,\n type: msg.type,\n hint: msg.hint,\n };\n\n const k = Object.keys(msg['original-event']['q'])[0];\n this.notifyCbs(hash, {\n type: CallbackEventType.Error,\n data: { [k]: [] },\n error,\n });\n }\n\n public onResyncError(msg: {\n op: 'error';\n 'original-event': ResyncMsg;\n status: number;\n type: string;\n }) {\n // Clear the subscription and start from scrath on any resync error\n // This can happen if the auth changed and we need to refetch with the\n // new auth or if the subscription is too far behind.\n const subscriptionId = msg['original-event']['subscription-id'];\n const removedSub = this.clearSubscriptionData(subscriptionId, false);\n if (removedSub) {\n this.initSubscription(removedSub.query, removedSub.hash);\n }\n }\n}\n"]}
@@ -31,7 +31,7 @@ export type ExchangeCodeForTokenParams = {
31
31
  };
32
32
  export declare function exchangeCodeForToken({ apiURI, appId, code, codeVerifier, refreshToken, }: SharedInput & ExchangeCodeForTokenParams): Promise<VerifyResponse>;
33
33
  export type SignInWithIdTokenParams = {
34
- nonce?: string;
34
+ nonce?: string | null | undefined;
35
35
  idToken: string;
36
36
  clientName: string;
37
37
  refreshToken?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"authAPI.d.ts","sourceRoot":"","sources":["../../src/authAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACpD,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,KAAK,EACL,KAAK,GACN,EAAE,WAAW,GAAG,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAMpE;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,CAAC;AACF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AACF,wBAAsB,eAAe,CAAC,EACpC,MAAM,EACN,KAAK,EACL,KAAK,EACL,IAAI,EACJ,YAAY,GACb,EAAE,WAAW,GAAG,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CAY/D;AAED,MAAM,MAAM,wBAAwB,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAChE,wBAAsB,kBAAkB,CAAC,EACvC,MAAM,EACN,KAAK,EACL,YAAY,GACb,EAAE,WAAW,GAAG,wBAAwB,GAAG,OAAO,CAAC,cAAc,CAAC,CAUlE;AAED,wBAAsB,aAAa,CAAC,EAClC,MAAM,EACN,KAAK,GACN,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CASvC;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,CAAC;AAEF,wBAAsB,oBAAoB,CAAC,EACzC,MAAM,EACN,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,YAAY,GACb,EAAE,WAAW,GAAG,0BAA0B,GAAG,OAAO,CAAC,cAAc,CAAC,CAYpE;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAsB,iBAAiB,CAAC,EACtC,MAAM,EACN,KAAK,EACL,KAAK,EACL,OAAO,EACP,UAAU,EACV,YAAY,GACb,EAAE,WAAW,GAAG,uBAAuB,GAAG,OAAO,CAAC,cAAc,CAAC,CAajE;AAED,MAAM,MAAM,aAAa,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AACrD,wBAAsB,OAAO,CAAC,EAC5B,MAAM,EACN,KAAK,EACL,YAAY,GACb,EAAE,WAAW,GAAG,aAAa,GAAG,OAAO,CAAC,EAAE,CAAC,CAY3C"}
1
+ {"version":3,"file":"authAPI.d.ts","sourceRoot":"","sources":["../../src/authAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACpD,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,KAAK,EACL,KAAK,GACN,EAAE,WAAW,GAAG,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAMpE;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,CAAC;AACF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AACF,wBAAsB,eAAe,CAAC,EACpC,MAAM,EACN,KAAK,EACL,KAAK,EACL,IAAI,EACJ,YAAY,GACb,EAAE,WAAW,GAAG,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CAY/D;AAED,MAAM,MAAM,wBAAwB,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAChE,wBAAsB,kBAAkB,CAAC,EACvC,MAAM,EACN,KAAK,EACL,YAAY,GACb,EAAE,WAAW,GAAG,wBAAwB,GAAG,OAAO,CAAC,cAAc,CAAC,CAUlE;AAED,wBAAsB,aAAa,CAAC,EAClC,MAAM,EACN,KAAK,GACN,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CASvC;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,CAAC;AAEF,wBAAsB,oBAAoB,CAAC,EACzC,MAAM,EACN,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,YAAY,GACb,EAAE,WAAW,GAAG,0BAA0B,GAAG,OAAO,CAAC,cAAc,CAAC,CAYpE;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAsB,iBAAiB,CAAC,EACtC,MAAM,EACN,KAAK,EACL,KAAK,EACL,OAAO,EACP,UAAU,EACV,YAAY,GACb,EAAE,WAAW,GAAG,uBAAuB,GAAG,OAAO,CAAC,cAAc,CAAC,CAajE;AAED,MAAM,MAAM,aAAa,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AACrD,wBAAsB,OAAO,CAAC,EAC5B,MAAM,EACN,KAAK,EACL,YAAY,GACb,EAAE,WAAW,GAAG,aAAa,GAAG,OAAO,CAAC,EAAE,CAAC,CAY3C"}
@@ -1 +1 @@
1
- {"version":3,"file":"authAPI.js","sourceRoot":"","sources":["../../src/authAPI.ts"],"names":[],"mappings":"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","sourcesContent":["import { User } from './clientTypes.ts';\nimport { jsonFetch } from './utils/fetch.js';\n\ntype SharedInput = {\n apiURI: string;\n appId: string;\n};\n\nexport type SendMagicCodeParams = { email: string };\nexport type SendMagicCodeResponse = {\n sent: true;\n};\n\nexport function sendMagicCode({\n apiURI,\n appId,\n email,\n}: SharedInput & SendMagicCodeParams): Promise<SendMagicCodeResponse> {\n return jsonFetch(`${apiURI}/runtime/auth/send_magic_code`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ 'app-id': appId, email }),\n });\n}\n\nexport type VerifyMagicCodeParams = {\n email: string;\n code: string;\n refreshToken?: string | undefined;\n};\nexport type VerifyResponse = {\n user: User;\n};\nexport async function verifyMagicCode({\n apiURI,\n appId,\n email,\n code,\n refreshToken,\n}: SharedInput & VerifyMagicCodeParams): Promise<VerifyResponse> {\n const res = await jsonFetch(`${apiURI}/runtime/auth/verify_magic_code`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n 'app-id': appId,\n email,\n code,\n ...(refreshToken ? { 'refresh-token': refreshToken } : {}),\n }),\n });\n return res;\n}\n\nexport type VerifyRefreshTokenParams = { refreshToken: string };\nexport async function verifyRefreshToken({\n apiURI,\n appId,\n refreshToken,\n}: SharedInput & VerifyRefreshTokenParams): Promise<VerifyResponse> {\n const res = await jsonFetch(`${apiURI}/runtime/auth/verify_refresh_token`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n 'app-id': appId,\n 'refresh-token': refreshToken,\n }),\n });\n return res;\n}\n\nexport async function signInAsGuest({\n apiURI,\n appId,\n}: SharedInput): Promise<VerifyResponse> {\n const res = await jsonFetch(`${apiURI}/runtime/auth/sign_in_guest`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n 'app-id': appId,\n }),\n });\n return res;\n}\n\nexport type ExchangeCodeForTokenParams = {\n code: string;\n codeVerifier?: string;\n refreshToken?: string | undefined;\n};\n\nexport async function exchangeCodeForToken({\n apiURI,\n appId,\n code,\n codeVerifier,\n refreshToken,\n}: SharedInput & ExchangeCodeForTokenParams): Promise<VerifyResponse> {\n const res = await jsonFetch(`${apiURI}/runtime/oauth/token`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n app_id: appId,\n code: code,\n code_verifier: codeVerifier,\n refresh_token: refreshToken,\n }),\n });\n return res;\n}\n\nexport type SignInWithIdTokenParams = {\n nonce?: string;\n idToken: string;\n clientName: string;\n refreshToken?: string;\n};\n\nexport async function signInWithIdToken({\n apiURI,\n appId,\n nonce,\n idToken,\n clientName,\n refreshToken,\n}: SharedInput & SignInWithIdTokenParams): Promise<VerifyResponse> {\n const res = await jsonFetch(`${apiURI}/runtime/oauth/id_token`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n app_id: appId,\n nonce,\n id_token: idToken,\n client_name: clientName,\n refresh_token: refreshToken,\n }),\n });\n return res;\n}\n\nexport type SignoutParams = { refreshToken: string };\nexport async function signOut({\n apiURI,\n appId,\n refreshToken,\n}: SharedInput & SignoutParams): Promise<{}> {\n const res = await jsonFetch(`${apiURI}/runtime/signout`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify({\n app_id: appId,\n refresh_token: refreshToken,\n }),\n });\n return res;\n}\n"]}
1
+ {"version":3,"file":"authAPI.js","sourceRoot":"","sources":["../../src/authAPI.ts"],"names":[],"mappings":"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","sourcesContent":["import { User } from './clientTypes.ts';\nimport { jsonFetch } from './utils/fetch.js';\n\ntype SharedInput = {\n apiURI: string;\n appId: string;\n};\n\nexport type SendMagicCodeParams = { email: string };\nexport type SendMagicCodeResponse = {\n sent: true;\n};\n\nexport function sendMagicCode({\n apiURI,\n appId,\n email,\n}: SharedInput & SendMagicCodeParams): Promise<SendMagicCodeResponse> {\n return jsonFetch(`${apiURI}/runtime/auth/send_magic_code`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ 'app-id': appId, email }),\n });\n}\n\nexport type VerifyMagicCodeParams = {\n email: string;\n code: string;\n refreshToken?: string | undefined;\n};\nexport type VerifyResponse = {\n user: User;\n};\nexport async function verifyMagicCode({\n apiURI,\n appId,\n email,\n code,\n refreshToken,\n}: SharedInput & VerifyMagicCodeParams): Promise<VerifyResponse> {\n const res = await jsonFetch(`${apiURI}/runtime/auth/verify_magic_code`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n 'app-id': appId,\n email,\n code,\n ...(refreshToken ? { 'refresh-token': refreshToken } : {}),\n }),\n });\n return res;\n}\n\nexport type VerifyRefreshTokenParams = { refreshToken: string };\nexport async function verifyRefreshToken({\n apiURI,\n appId,\n refreshToken,\n}: SharedInput & VerifyRefreshTokenParams): Promise<VerifyResponse> {\n const res = await jsonFetch(`${apiURI}/runtime/auth/verify_refresh_token`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n 'app-id': appId,\n 'refresh-token': refreshToken,\n }),\n });\n return res;\n}\n\nexport async function signInAsGuest({\n apiURI,\n appId,\n}: SharedInput): Promise<VerifyResponse> {\n const res = await jsonFetch(`${apiURI}/runtime/auth/sign_in_guest`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n 'app-id': appId,\n }),\n });\n return res;\n}\n\nexport type ExchangeCodeForTokenParams = {\n code: string;\n codeVerifier?: string;\n refreshToken?: string | undefined;\n};\n\nexport async function exchangeCodeForToken({\n apiURI,\n appId,\n code,\n codeVerifier,\n refreshToken,\n}: SharedInput & ExchangeCodeForTokenParams): Promise<VerifyResponse> {\n const res = await jsonFetch(`${apiURI}/runtime/oauth/token`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n app_id: appId,\n code: code,\n code_verifier: codeVerifier,\n refresh_token: refreshToken,\n }),\n });\n return res;\n}\n\nexport type SignInWithIdTokenParams = {\n nonce?: string | null | undefined;\n idToken: string;\n clientName: string;\n refreshToken?: string;\n};\n\nexport async function signInWithIdToken({\n apiURI,\n appId,\n nonce,\n idToken,\n clientName,\n refreshToken,\n}: SharedInput & SignInWithIdTokenParams): Promise<VerifyResponse> {\n const res = await jsonFetch(`${apiURI}/runtime/oauth/id_token`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n app_id: appId,\n nonce,\n id_token: idToken,\n client_name: clientName,\n refresh_token: refreshToken,\n }),\n });\n return res;\n}\n\nexport type SignoutParams = { refreshToken: string };\nexport async function signOut({\n apiURI,\n appId,\n refreshToken,\n}: SharedInput & SignoutParams): Promise<{}> {\n const res = await jsonFetch(`${apiURI}/runtime/signout`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify({\n app_id: appId,\n refresh_token: refreshToken,\n }),\n });\n return res;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n EntityDef,\n DataAttrDef,\n InstantSchemaDef,\n type EntitiesDef,\n type AttrsDefs,\n type EntitiesWithLinks,\n type LinksDef,\n type RoomsDef,\n type UnknownRooms,\n} from './schemaTypes.ts';\n\n// ==========\n// API\n\n/**\n * @deprecated\n * `i.graph` is deprecated. Use `i.schema` instead.\n *\n * @example\n * // Before\n * i.graph(entities, links).withRoomSchema<RoomType>();\n *\n * // After\n * i.schema({ entities, links, rooms })\n *\n * @see\n * https://instantdb.com/docs/modeling-data\n */\nfunction graph<\n EntitiesWithoutLinks extends EntitiesDef,\n const Links extends LinksDef<EntitiesWithoutLinks>,\n>(entities: EntitiesWithoutLinks, links: Links) {\n return new InstantSchemaDef(\n enrichEntitiesWithLinks<EntitiesWithoutLinks, Links>(entities, links),\n // (XXX): LinksDef<any> stems from TypeScript’s inability to reconcile the\n // type EntitiesWithLinks<EntitiesWithoutLinks, Links> with\n // EntitiesWithoutLinks. TypeScript is strict about ensuring that types are\n // correctly aligned and does not allow for substituting a type that might\n // be broader or have additional properties.\n links as LinksDef<any>,\n undefined as UnknownRooms,\n );\n}\n\n/**\n * Creates an entity definition, to be used in conjunction with `i.graph`.\n *\n * @see https://instantdb.com/docs/modeling-data\n * @example\n * {\n * posts: i.entity({\n * title: i.string(),\n * body: i.string(),\n * }),\n * comments: i.entity({\n * body: i.string(),\n * })\n * }\n */\nfunction entity<Attrs extends AttrsDefs>(\n attrs: Attrs,\n): EntityDef<Attrs, {}, void> {\n return new EntityDef(attrs, {});\n}\n\nfunction string<StringEnum extends string = string>(): DataAttrDef<\n StringEnum,\n true,\n false\n> {\n return new DataAttrDef('string', true, false);\n}\n\nfunction number(): DataAttrDef<number, true, false> {\n return new DataAttrDef('number', true, false);\n}\n\nfunction boolean(): DataAttrDef<boolean, true, false> {\n return new DataAttrDef('boolean', true, false);\n}\n\nfunction date(): DataAttrDef<Date, true, false> {\n return new DataAttrDef('date', true, false);\n}\n\nfunction json<T = any>(): DataAttrDef<T, true, false> {\n return new DataAttrDef('json', true, false);\n}\n\nfunction any(): DataAttrDef<any, true, false> {\n return new DataAttrDef('json', true, false);\n}\n\n// ==========\n// internal\n\nfunction enrichEntitiesWithLinks<\n EntitiesWithoutLinks extends EntitiesDef,\n Links extends LinksDef<any>,\n EnrichedEntities = EntitiesWithLinks<EntitiesWithoutLinks, Links>,\n>(entities: EntitiesWithoutLinks, links: Links): EnrichedEntities {\n const linksIndex: LinksIndex = { fwd: {}, rev: {} };\n\n for (const linkDef of Object.values(links)) {\n linksIndex.fwd[linkDef.forward.on as string] ||= {};\n linksIndex.rev[linkDef.reverse.on as string] ||= {};\n\n linksIndex.fwd[linkDef.forward.on as string][linkDef.forward.label] = {\n entityName: linkDef.reverse.on as string,\n cardinality: linkDef.forward.has,\n };\n\n linksIndex.rev[linkDef.reverse.on as string][linkDef.reverse.label] = {\n entityName: linkDef.forward.on as string,\n cardinality: linkDef.reverse.has,\n };\n }\n\n const enrichedEntities = Object.fromEntries(\n Object.entries(entities).map(([name, def]) => [\n name,\n new EntityDef(def.attrs, {\n ...linksIndex.fwd[name],\n ...linksIndex.rev[name],\n }),\n ]),\n );\n\n return enrichedEntities as EnrichedEntities;\n}\n\ntype LinksIndex = Record<\n 'fwd' | 'rev',\n Record<string, Record<string, { entityName: string; cardinality: string }>>\n>;\n\n/**\n * Lets you define a schema for your database.\n *\n * You can define entities, links between entities, and if you use\n * presence, you can define rooms.\n *\n * You can push this schema to your database with the CLI,\n * or use it inside `init`, to get typesafety and autocompletion.\n *\n * @see https://instantdb.com/docs/modeling-data\n * @example\n * i.schema({\n * entities: { },\n * links: { },\n * rooms: { }\n * });\n */\nfunction schema<\n EntitiesWithoutLinks extends EntitiesDef,\n const Links extends LinksDef<EntitiesWithoutLinks>,\n Rooms extends RoomsDef = {},\n>({\n entities,\n links,\n rooms,\n}: {\n entities: EntitiesWithoutLinks;\n links?: Links;\n rooms?: Rooms;\n}) {\n const linksDef = (links ?? {}) as Links;\n const roomsDef = (rooms ?? {}) as Rooms;\n return new InstantSchemaDef(\n enrichEntitiesWithLinks<EntitiesWithoutLinks, Links>(entities, linksDef),\n // (XXX): LinksDef<any> stems from TypeScript's inability to reconcile the\n // type EntitiesWithLinks<EntitiesWithoutLinks, Links> with\n // EntitiesWithoutLinks. TypeScript is strict about ensuring that types are\n // correctly aligned and does not allow for substituting a type that might\n // be broader or have additional properties.\n linksDef as LinksDef<any>,\n roomsDef,\n );\n}\n\nexport const i = {\n // constructs\n graph,\n schema,\n entity,\n // value types\n string,\n number,\n boolean,\n date,\n json,\n any,\n};\n"]}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n EntityDef,\n DataAttrDef,\n InstantSchemaDef,\n type EntitiesDef,\n type AttrsDefs,\n type EntitiesWithLinks,\n type LinksDef,\n type RoomsDef,\n type UnknownRooms,\n} from './schemaTypes.ts';\n\n// ==========\n// API\n\n/**\n * @deprecated\n * `i.graph` is deprecated. Use `i.schema` instead.\n *\n * @example\n * // Before\n * i.graph(entities, links).withRoomSchema<RoomType>();\n *\n * // After\n * i.schema({ entities, links, rooms })\n *\n * @see\n * https://instantdb.com/docs/modeling-data\n */\nfunction graph<\n EntitiesWithoutLinks extends EntitiesDef,\n const Links extends LinksDef<EntitiesWithoutLinks>,\n>(entities: EntitiesWithoutLinks, links: Links) {\n return new InstantSchemaDef(\n enrichEntitiesWithLinks<EntitiesWithoutLinks, Links>(entities, links),\n // (XXX): LinksDef<any> stems from TypeScript’s inability to reconcile the\n // type EntitiesWithLinks<EntitiesWithoutLinks, Links> with\n // EntitiesWithoutLinks. TypeScript is strict about ensuring that types are\n // correctly aligned and does not allow for substituting a type that might\n // be broader or have additional properties.\n links as LinksDef<any>,\n undefined as unknown as UnknownRooms,\n );\n}\n\n/**\n * Creates an entity definition, to be used in conjunction with `i.graph`.\n *\n * @see https://instantdb.com/docs/modeling-data\n * @example\n * {\n * posts: i.entity({\n * title: i.string(),\n * body: i.string(),\n * }),\n * comments: i.entity({\n * body: i.string(),\n * })\n * }\n */\nfunction entity<Attrs extends AttrsDefs>(\n attrs: Attrs,\n): EntityDef<Attrs, {}, void> {\n return new EntityDef(attrs, {});\n}\n\nfunction string<StringEnum extends string = string>(): DataAttrDef<\n StringEnum,\n true,\n false\n> {\n return new DataAttrDef('string', true, false);\n}\n\nfunction number(): DataAttrDef<number, true, false> {\n return new DataAttrDef('number', true, false);\n}\n\nfunction boolean(): DataAttrDef<boolean, true, false> {\n return new DataAttrDef('boolean', true, false);\n}\n\nfunction date(): DataAttrDef<Date, true, false> {\n return new DataAttrDef('date', true, false);\n}\n\nfunction json<T = any>(): DataAttrDef<T, true, false> {\n return new DataAttrDef('json', true, false);\n}\n\nfunction any(): DataAttrDef<any, true, false> {\n return new DataAttrDef('json', true, false);\n}\n\n// ==========\n// internal\n\nfunction enrichEntitiesWithLinks<\n EntitiesWithoutLinks extends EntitiesDef,\n Links extends LinksDef<any>,\n EnrichedEntities = EntitiesWithLinks<EntitiesWithoutLinks, Links>,\n>(entities: EntitiesWithoutLinks, links: Links): EnrichedEntities {\n const linksIndex: LinksIndex = { fwd: {}, rev: {} };\n\n for (const linkDef of Object.values(links)) {\n linksIndex.fwd[linkDef.forward.on as string] ||= {};\n linksIndex.rev[linkDef.reverse.on as string] ||= {};\n\n linksIndex.fwd[linkDef.forward.on as string][linkDef.forward.label] = {\n entityName: linkDef.reverse.on as string,\n cardinality: linkDef.forward.has,\n };\n\n linksIndex.rev[linkDef.reverse.on as string][linkDef.reverse.label] = {\n entityName: linkDef.forward.on as string,\n cardinality: linkDef.reverse.has,\n };\n }\n\n const enrichedEntities = Object.fromEntries(\n Object.entries(entities).map(([name, def]) => [\n name,\n new EntityDef(def.attrs, {\n ...linksIndex.fwd[name],\n ...linksIndex.rev[name],\n }),\n ]),\n );\n\n return enrichedEntities as EnrichedEntities;\n}\n\ntype LinksIndex = Record<\n 'fwd' | 'rev',\n Record<string, Record<string, { entityName: string; cardinality: string }>>\n>;\n\n/**\n * Lets you define a schema for your database.\n *\n * You can define entities, links between entities, and if you use\n * presence, you can define rooms.\n *\n * You can push this schema to your database with the CLI,\n * or use it inside `init`, to get typesafety and autocompletion.\n *\n * @see https://instantdb.com/docs/modeling-data\n * @example\n * i.schema({\n * entities: { },\n * links: { },\n * rooms: { }\n * });\n */\nfunction schema<\n EntitiesWithoutLinks extends EntitiesDef,\n const Links extends LinksDef<EntitiesWithoutLinks>,\n Rooms extends RoomsDef = {},\n>({\n entities,\n links,\n rooms,\n}: {\n entities: EntitiesWithoutLinks;\n links?: Links;\n rooms?: Rooms;\n}) {\n const linksDef = (links ?? {}) as Links;\n const roomsDef = (rooms ?? {}) as Rooms;\n return new InstantSchemaDef(\n enrichEntitiesWithLinks<EntitiesWithoutLinks, Links>(entities, linksDef),\n // (XXX): LinksDef<any> stems from TypeScript's inability to reconcile the\n // type EntitiesWithLinks<EntitiesWithoutLinks, Links> with\n // EntitiesWithoutLinks. TypeScript is strict about ensuring that types are\n // correctly aligned and does not allow for substituting a type that might\n // be broader or have additional properties.\n linksDef as LinksDef<any>,\n roomsDef,\n );\n}\n\nexport const i = {\n // constructs\n graph,\n schema,\n entity,\n // value types\n string,\n number,\n boolean,\n date,\n json,\n any,\n};\n"]}
@@ -105,7 +105,7 @@ export type RoomsFromDef<RDef extends RoomsDef> = {
105
105
  [RoomName in keyof RDef]: {
106
106
  presence: Expand<ResolveEntityAttrs<RDef[RoomName]['presence']>>;
107
107
  topics: {
108
- [TopicName in keyof RDef[RoomName]['topics']]: Expand<ResolveEntityAttrs<RDef[RoomName]['topics'][TopicName]>>;
108
+ [TopicName in keyof RDef[RoomName]['topics']]: Expand<ResolveEntityAttrs<NonNullable<RDef[RoomName]['topics']>[TopicName]>>;
109
109
  };
110
110
  };
111
111
  };
@@ -171,9 +171,9 @@ type EntityDefFromRoomSlice<Shape extends {
171
171
  }, any, void>;
172
172
  type RoomDefFromShape<RoomSchema extends RoomSchemaShape> = {
173
173
  [RoomName in keyof RoomSchema]: {
174
- presence: EntityDefFromRoomSlice<RoomSchema[RoomName]['presence']>;
174
+ presence: EntityDefFromRoomSlice<NonNullable<RoomSchema[RoomName]['presence']>>;
175
175
  topics: {
176
- [TopicName in keyof RoomSchema[RoomName]['topics']]: EntityDefFromRoomSlice<RoomSchema[RoomName]['topics'][TopicName]>;
176
+ [TopicName in keyof RoomSchema[RoomName]['topics']]: EntityDefFromRoomSlice<NonNullable<RoomSchema[RoomName]['topics'][TopicName]>>;
177
177
  };
178
178
  };
179
179
  };
@@ -1 +1 @@
1
- {"version":3,"file":"schemaTypes.d.ts","sourceRoot":"","sources":["../../src/schemaTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemaTypes.d.ts","sourceRoot":"","sources":["../../src/schemaTypes.ts"],"names":[],"mappings":"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"}