@instantdb/core 0.22.95 → 0.22.96-experimental.add-posthog-frontend.20386914944.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 (63) hide show
  1. package/dist/commonjs/Reactor.d.ts +1 -13
  2. package/dist/commonjs/Reactor.d.ts.map +1 -1
  3. package/dist/commonjs/Reactor.js +5 -72
  4. package/dist/commonjs/Reactor.js.map +1 -1
  5. package/dist/commonjs/SyncTable.d.ts.map +1 -1
  6. package/dist/commonjs/SyncTable.js +6 -7
  7. package/dist/commonjs/SyncTable.js.map +1 -1
  8. package/dist/commonjs/index.d.ts +1 -5
  9. package/dist/commonjs/index.d.ts.map +1 -1
  10. package/dist/commonjs/index.js +1 -7
  11. package/dist/commonjs/index.js.map +1 -1
  12. package/dist/commonjs/reactorTypes.d.ts +4 -5
  13. package/dist/commonjs/reactorTypes.d.ts.map +1 -1
  14. package/dist/commonjs/reactorTypes.js.map +1 -1
  15. package/dist/esm/Reactor.d.ts +1 -13
  16. package/dist/esm/Reactor.d.ts.map +1 -1
  17. package/dist/esm/Reactor.js +5 -72
  18. package/dist/esm/Reactor.js.map +1 -1
  19. package/dist/esm/SyncTable.d.ts.map +1 -1
  20. package/dist/esm/SyncTable.js +6 -7
  21. package/dist/esm/SyncTable.js.map +1 -1
  22. package/dist/esm/index.d.ts +1 -5
  23. package/dist/esm/index.d.ts.map +1 -1
  24. package/dist/esm/index.js +2 -5
  25. package/dist/esm/index.js.map +1 -1
  26. package/dist/esm/reactorTypes.d.ts +4 -5
  27. package/dist/esm/reactorTypes.d.ts.map +1 -1
  28. package/dist/esm/reactorTypes.js.map +1 -1
  29. package/dist/standalone/index.js +2400 -2735
  30. package/dist/standalone/index.umd.cjs +3 -3
  31. package/package.json +2 -2
  32. package/src/Reactor.js +6 -83
  33. package/src/SyncTable.ts +14 -18
  34. package/src/index.ts +0 -9
  35. package/src/reactorTypes.ts +4 -5
  36. package/__tests__/src/serializeSchema.test.ts +0 -123
  37. package/dist/commonjs/createRouteHandler.d.ts +0 -8
  38. package/dist/commonjs/createRouteHandler.d.ts.map +0 -1
  39. package/dist/commonjs/createRouteHandler.js +0 -66
  40. package/dist/commonjs/createRouteHandler.js.map +0 -1
  41. package/dist/commonjs/framework.d.ts +0 -77
  42. package/dist/commonjs/framework.d.ts.map +0 -1
  43. package/dist/commonjs/framework.js +0 -228
  44. package/dist/commonjs/framework.js.map +0 -1
  45. package/dist/commonjs/parseSchemaFromJSON.d.ts +0 -3
  46. package/dist/commonjs/parseSchemaFromJSON.d.ts.map +0 -1
  47. package/dist/commonjs/parseSchemaFromJSON.js +0 -148
  48. package/dist/commonjs/parseSchemaFromJSON.js.map +0 -1
  49. package/dist/esm/createRouteHandler.d.ts +0 -8
  50. package/dist/esm/createRouteHandler.d.ts.map +0 -1
  51. package/dist/esm/createRouteHandler.js +0 -62
  52. package/dist/esm/createRouteHandler.js.map +0 -1
  53. package/dist/esm/framework.d.ts +0 -77
  54. package/dist/esm/framework.d.ts.map +0 -1
  55. package/dist/esm/framework.js +0 -188
  56. package/dist/esm/framework.js.map +0 -1
  57. package/dist/esm/parseSchemaFromJSON.d.ts +0 -3
  58. package/dist/esm/parseSchemaFromJSON.d.ts.map +0 -1
  59. package/dist/esm/parseSchemaFromJSON.js +0 -144
  60. package/dist/esm/parseSchemaFromJSON.js.map +0 -1
  61. package/src/createRouteHandler.ts +0 -63
  62. package/src/framework.ts +0 -318
  63. package/src/parseSchemaFromJSON.ts +0 -176
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instantdb/core",
3
- "version": "0.22.95",
3
+ "version": "0.22.96-experimental.add-posthog-frontend.20386914944.1",
4
4
  "description": "Instant's core local abstraction",
5
5
  "homepage": "https://github.com/instantdb/instant/tree/main/client/packages/core",
6
6
  "repository": {
@@ -53,7 +53,7 @@
53
53
  "dependencies": {
54
54
  "mutative": "^1.0.10",
55
55
  "uuid": "^11.1.0",
56
- "@instantdb/version": "0.22.95"
56
+ "@instantdb/version": "0.22.96-experimental.add-posthog-frontend.20386914944.1"
57
57
  },
58
58
  "scripts": {
59
59
  "test": "vitest",
package/src/Reactor.js CHANGED
@@ -50,7 +50,6 @@ const STATUS = {
50
50
  const QUERY_ONCE_TIMEOUT = 30_000;
51
51
  const PENDING_TX_CLEANUP_TIMEOUT = 30_000;
52
52
  const PENDING_MUTATION_CLEANUP_THRESHOLD = 200;
53
- const ONE_MIN_MS = 1_000 * 60;
54
53
 
55
54
  const defaultConfig = {
56
55
  apiURI: 'https://api.instantdb.com',
@@ -349,14 +348,7 @@ export default class Reactor {
349
348
  this._oauthCallbackResponse = this._oauthLoginInit();
350
349
 
351
350
  // kick off a request to cache it
352
- this.getCurrentUser().then((userInfo) => {
353
- this.syncUserToEndpoint(userInfo.user);
354
- });
355
-
356
- setInterval(async () => {
357
- const currentUser = await this.getCurrentUser();
358
- this.syncUserToEndpoint(currentUser.user);
359
- }, ONE_MIN_MS);
351
+ this.getCurrentUser();
360
352
 
361
353
  NetworkListener.getIsOnline().then((isOnline) => {
362
354
  this._isOnline = isOnline;
@@ -557,43 +549,6 @@ export default class Reactor {
557
549
  }
558
550
  }
559
551
 
560
- /**
561
- * Does the same thing as add-query-ok
562
- * but called as a result of receiving query info from ssr
563
- * @param {any} q
564
- * @param {{ triples: any; pageInfo: any; }} result
565
- * @param {boolean} enableCardinalityInference
566
- */
567
- _addQueryData(q, result, enableCardinalityInference) {
568
- if (!this.attrs) {
569
- throw new Error('Attrs in reactor have not been set');
570
- }
571
- const queryHash = weakHash(q);
572
- const attrsStore = this.ensureAttrs();
573
- const store = s.createStore(
574
- this.attrs,
575
- result.triples,
576
- enableCardinalityInference,
577
- this.config.useDateObjects,
578
- );
579
- this.querySubs.updateInPlace((prev) => {
580
- prev[queryHash] = {
581
- result: {
582
- store,
583
- attrsStore,
584
- pageInfo: result.pageInfo,
585
- processedTxId: undefined,
586
- isExternal: true,
587
- },
588
- q,
589
- };
590
- });
591
- this._cleanupPendingMutationsQueries();
592
- this.notifyOne(queryHash);
593
- this.notifyOneQueryOnce(queryHash);
594
- this._cleanupPendingMutationsTimeout();
595
- }
596
-
597
552
  _handleReceive(connId, msg) {
598
553
  // opt-out, enabled by default if schema
599
554
  const enableCardinalityInference =
@@ -1266,7 +1221,7 @@ export default class Reactor {
1266
1221
  }
1267
1222
 
1268
1223
  /** Runs instaql on a query and a store */
1269
- dataForQuery(hash, applyOptimistic = true) {
1224
+ dataForQuery(hash) {
1270
1225
  const errorMessage = this._errorMessage;
1271
1226
  if (errorMessage) {
1272
1227
  return { error: errorMessage };
@@ -1290,26 +1245,15 @@ export default class Reactor {
1290
1245
  return cached;
1291
1246
  }
1292
1247
 
1293
- let store = result.store;
1294
- let attrsStore = result.attrsStore;
1295
- const { pageInfo, aggregate, processedTxId } = result;
1248
+ const { store, attrsStore, pageInfo, aggregate, processedTxId } = result;
1296
1249
  const mutations = this._rewriteMutationsSorted(
1297
1250
  attrsStore,
1298
1251
  pendingMutations,
1299
1252
  );
1300
- if (applyOptimistic) {
1301
- const optimisticResult = this._applyOptimisticUpdates(
1302
- store,
1303
- attrsStore,
1304
- mutations,
1305
- processedTxId,
1306
- );
1307
-
1308
- store = optimisticResult.store;
1309
- attrsStore = optimisticResult.attrsStore;
1310
- }
1253
+ const { store: newStore, attrsStore: newAttrsStore } =
1254
+ this._applyOptimisticUpdates(store, attrsStore, mutations, processedTxId);
1311
1255
  const resp = instaql(
1312
- { store: store, attrsStore: attrsStore, pageInfo, aggregate },
1256
+ { store: newStore, attrsStore: newAttrsStore, pageInfo, aggregate },
1313
1257
  q,
1314
1258
  );
1315
1259
 
@@ -2045,28 +1989,7 @@ export default class Reactor {
2045
1989
  }
2046
1990
  }
2047
1991
 
2048
- async syncUserToEndpoint(user) {
2049
- if (!this.config.firstPartyPath) return;
2050
- try {
2051
- fetch(this.config.firstPartyPath + '/', {
2052
- method: 'POST',
2053
- body: JSON.stringify({
2054
- type: 'sync-user',
2055
- appId: this.config.appId,
2056
- user: user,
2057
- }),
2058
- headers: {
2059
- 'Content-Type': 'application/json',
2060
- },
2061
- });
2062
- } catch (error) {
2063
- this._log.error('Error syncing user with external endpoint', error);
2064
- }
2065
- }
2066
-
2067
1992
  updateUser(newUser) {
2068
- this.syncUserToEndpoint(newUser);
2069
-
2070
1993
  const newV = { error: undefined, user: newUser };
2071
1994
  this._currentUserCached = { isLoading: false, ...newV };
2072
1995
  this._dataForQueryCache = {};
package/src/SyncTable.ts CHANGED
@@ -199,18 +199,20 @@ function applyChangesToStore(
199
199
  }
200
200
  }
201
201
 
202
- type ChangedFieldsOfChanges = {
203
- [eid: string]: { [field: string]: { oldValue: unknown; newValue: unknown } };
204
- };
205
-
206
202
  function changedFieldsOfChanges(
207
203
  store: s.Store,
208
204
  attrsStore: s.AttrsStore,
209
205
  changes: SyncUpdateTriplesMsg['txes'][number]['changes'],
210
- ): ChangedFieldsOfChanges {
206
+ ): {
207
+ [eid: string]: SyncTransaction<
208
+ any,
209
+ any,
210
+ any
211
+ >['updated'][number]['changedFields'];
212
+ } {
211
213
  // This will be more complicated when we include links, we can either add a
212
214
  // changedLinks field or we can have something like 'bookshelves.title`
213
- const changedFields: ChangedFieldsOfChanges = {};
215
+ const changedFields = {};
214
216
  for (const { action, triple } of changes) {
215
217
  const [e, a, v] = triple;
216
218
  const field = attrsStore.getAttr(a)?.['forward-identity']?.[2];
@@ -220,6 +222,7 @@ function changedFieldsOfChanges(
220
222
  changedFields[e] = fields;
221
223
 
222
224
  const oldNew = fields[field] ?? {};
225
+ fields[field] = oldNew;
223
226
 
224
227
  switch (action) {
225
228
  case 'added':
@@ -232,15 +235,12 @@ function changedFieldsOfChanges(
232
235
  }
233
236
  break;
234
237
  }
235
-
236
- fields[field] = oldNew;
237
238
  }
238
239
 
239
- for (const [_eid, fields] of Object.entries(changedFields)) {
240
- for (const [k, { oldValue, newValue }] of Object.entries(fields)) {
241
- if (oldValue === newValue) {
242
- delete fields[k];
243
- }
240
+ for (const k of Object.keys(changedFields)) {
241
+ const { oldValue, newValue } = changedFields[k];
242
+ if (oldValue === newValue) {
243
+ delete changedFields[k];
244
244
  }
245
245
  }
246
246
  return changedFields;
@@ -783,11 +783,7 @@ export class SyncTable {
783
783
  updated.push({
784
784
  oldEntity: ent.entity,
785
785
  newEntity: entity,
786
- changedFields: (changedFields || {}) as SyncTransaction<
787
- any,
788
- any,
789
- any
790
- >['updated'][number]['changedFields'],
786
+ changedFields: changedFields || {},
791
787
  });
792
788
  ent.entity = entity;
793
789
  } else {
package/src/index.ts CHANGED
@@ -20,13 +20,10 @@ import {
20
20
  validateTransactions,
21
21
  TransactionValidationError,
22
22
  } from './transactionValidation.ts';
23
-
24
23
  import {
25
24
  StorageInterface,
26
25
  type StorageInterfaceStoreName,
27
26
  } from './utils/PersistedObject.ts';
28
- import { createInstantRouteHandler } from './createRouteHandler.ts';
29
- import { parseSchemaFromJSON } from './parseSchemaFromJSON.ts';
30
27
 
31
28
  import type {
32
29
  PresenceOpts,
@@ -106,7 +103,6 @@ import type {
106
103
  } from './schemaTypes.ts';
107
104
  import type { InstantRules } from './rulesTypes.ts';
108
105
  import type { UploadFileResponse, DeleteFileResponse } from './StorageAPI.ts';
109
- import { FrameworkClient, type FrameworkConfig } from './framework.ts';
110
106
 
111
107
  import type {
112
108
  ExchangeCodeForTokenParams,
@@ -157,7 +153,6 @@ export type InstantConfig<
157
153
  appId: string;
158
154
  schema?: S;
159
155
  websocketURI?: string;
160
- firstPartyPath?: string;
161
156
  apiURI?: string;
162
157
  devtool?: boolean | DevtoolConfig;
163
158
  verbose?: boolean;
@@ -908,9 +903,7 @@ export {
908
903
  validateQuery,
909
904
  QueryValidationError,
910
905
  validateTransactions,
911
- parseSchemaFromJSON,
912
906
  TransactionValidationError,
913
- FrameworkClient,
914
907
 
915
908
  // error
916
909
  InstantAPIError,
@@ -1026,7 +1019,6 @@ export {
1026
1019
 
1027
1020
  // SSE
1028
1021
  type EventSourceType,
1029
- type FrameworkConfig,
1030
1022
 
1031
1023
  // sync table types
1032
1024
  type SyncTableCallback,
@@ -1043,5 +1035,4 @@ export {
1043
1035
  // storage (e.g. indexeddb) interface
1044
1036
  StorageInterface,
1045
1037
  type StorageInterfaceStoreName,
1046
- createInstantRouteHandler,
1047
1038
  };
@@ -6,13 +6,12 @@ export type QuerySubResult = {
6
6
  attrsStore: AttrsStore;
7
7
  pageInfo?: PageInfoResponse<any> | null | undefined;
8
8
  aggregate?: any;
9
- processedTxId?: number;
10
- isExternal?: boolean;
9
+ processedTxId: number;
11
10
  };
12
11
 
13
12
  export type QuerySub = {
14
13
  q: Object;
15
- eventId?: string;
14
+ eventId: string;
16
15
  lastAccessed?: number | null | undefined;
17
16
  result?: QuerySubResult;
18
17
  };
@@ -22,12 +21,12 @@ export type QuerySubResultInStorage = {
22
21
  attrsStore: AttrsStoreJson;
23
22
  pageInfo?: PageInfoResponse<any> | null | undefined;
24
23
  aggregate?: any;
25
- processedTxId?: number;
24
+ processedTxId: number;
26
25
  };
27
26
 
28
27
  export type QuerySubInStorage = {
29
28
  q: Object;
30
- eventId?: string;
29
+ eventId: string;
31
30
  lastAccessed?: number | null | undefined;
32
31
  result?: QuerySubResultInStorage;
33
32
  };
@@ -1,123 +0,0 @@
1
- import { expect, test } from 'vitest';
2
- import { i } from '../../src/schema';
3
- import { parseSchemaFromJSON } from '../../src/parseSchemaFromJSON';
4
- import { InstantSchemaDef } from '../../src/schemaTypes';
5
-
6
- const schema = i.schema({
7
- entities: {
8
- users: i.entity({
9
- name: i.string(),
10
- email: i.string().indexed().unique(),
11
- bio: i.string().optional(),
12
- // this is a convenient way to typecheck custom JSON fields
13
- // though we should probably have a backend solution for this
14
- stuff: i.json<{ custom: string }>(),
15
- junk: i.any(),
16
- }),
17
- posts: i.entity({
18
- title: i.string().optional(),
19
- body: i.string(),
20
- }),
21
- comments: i.entity({
22
- body: i.string().indexed(),
23
- likes: i.number(),
24
- }),
25
-
26
- birthdays: i.entity({
27
- date: i.date(),
28
- message: i.string(),
29
- prizes: i.json<string | number>(),
30
- }),
31
- },
32
- links: {
33
- usersPosts: {
34
- forward: {
35
- on: 'users',
36
- has: 'many',
37
- label: 'posts',
38
- },
39
- reverse: {
40
- on: 'posts',
41
- has: 'one',
42
- label: 'author',
43
- },
44
- },
45
- postsComments: {
46
- forward: {
47
- on: 'posts',
48
- has: 'many',
49
- label: 'comments',
50
- },
51
- reverse: {
52
- on: 'comments',
53
- has: 'one',
54
- label: 'post',
55
- },
56
- },
57
- friendships: {
58
- forward: {
59
- on: 'users',
60
- has: 'many',
61
- label: 'friends',
62
- },
63
- reverse: {
64
- on: 'users',
65
- has: 'many',
66
- label: '_friends',
67
- },
68
- },
69
- referrals: {
70
- forward: {
71
- on: 'users',
72
- has: 'many',
73
- label: 'referred',
74
- },
75
- reverse: {
76
- on: 'users',
77
- has: 'one',
78
- label: 'referrer',
79
- },
80
- },
81
- },
82
- rooms: {
83
- chat: {
84
- presence: i.entity({
85
- name: i.string(),
86
- status: i.string(),
87
- }),
88
- topics: {
89
- sendEmoji: i.entity({
90
- emoji: i.string(),
91
- }),
92
- },
93
- },
94
- },
95
- });
96
-
97
- type AnySchema = InstantSchemaDef<any, any, any>;
98
-
99
- // compare schemas by stringifying them with json and comparing the strings
100
- const compareSchemas = (schema1: AnySchema, schema2: AnySchema) => {
101
- expect(JSON.stringify(schema1, null, 2)).toBe(
102
- JSON.stringify(schema2, null, 2),
103
- );
104
- };
105
-
106
- test('ability to parse stringified schema into real schema object', () => {
107
- const stringified = JSON.stringify(schema, null, 2);
108
- const parsed = JSON.parse(stringified);
109
- console.log(stringified);
110
-
111
- const otherSide = parseSchemaFromJSON(parsed);
112
-
113
- compareSchemas(schema, otherSide);
114
-
115
- expect(schema.entities.comments.links).toEqual(
116
- otherSide.entities.comments.links,
117
- );
118
- expect(schema.entities.comments.asType).toEqual(
119
- otherSide.entities.comments.asType,
120
- );
121
-
122
- expect(schema).toStrictEqual(otherSide);
123
- });
@@ -1,8 +0,0 @@
1
- type CreateRouteHandlerConfig = {
2
- appId: string;
3
- };
4
- export declare const createInstantRouteHandler: (config: CreateRouteHandlerConfig) => {
5
- POST: (req: Request) => Promise<Response>;
6
- };
7
- export {};
8
- //# sourceMappingURL=createRouteHandler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createRouteHandler.d.ts","sourceRoot":"","sources":["../../src/createRouteHandler.ts"],"names":[],"mappings":"AAEA,KAAK,wBAAwB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAgCF,eAAO,MAAM,yBAAyB,GAAI,QAAQ,wBAAwB;gBAEpD,OAAO;CAwB5B,CAAC"}
@@ -1,66 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.createInstantRouteHandler = void 0;
13
- function createUserSyncResponse(config, user) {
14
- if (user && user.refresh_token) {
15
- return new Response(JSON.stringify({ ok: true }), {
16
- headers: {
17
- 'Content-Type': 'application/json',
18
- // 7 day expiry
19
- 'Set-Cookie': `instant_user_${config.appId}=${JSON.stringify(user)}; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=604800`,
20
- },
21
- });
22
- }
23
- else {
24
- return new Response(JSON.stringify({ ok: true }), {
25
- headers: {
26
- 'Content-Type': 'application/json',
27
- // remove the cookie (some browsers)
28
- 'Set-Cookie': `instant_user_${config.appId}=; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=-1`,
29
- },
30
- });
31
- }
32
- }
33
- function errorResponse(status, message) {
34
- return new Response(JSON.stringify({ ok: false, error: message }), {
35
- status,
36
- headers: { 'Content-Type': 'application/json' },
37
- });
38
- }
39
- const createInstantRouteHandler = (config) => {
40
- return {
41
- POST: (req) => __awaiter(void 0, void 0, void 0, function* () {
42
- var _a;
43
- let body;
44
- try {
45
- body = yield req.json();
46
- }
47
- catch (_b) {
48
- return errorResponse(400, 'Invalid JSON body');
49
- }
50
- if (!body.type) {
51
- return errorResponse(400, 'Missing "type" field');
52
- }
53
- if (body.appId !== config.appId) {
54
- return errorResponse(403, 'App ID mismatch');
55
- }
56
- switch (body.type) {
57
- case 'sync-user':
58
- return createUserSyncResponse(config, (_a = body.user) !== null && _a !== void 0 ? _a : null);
59
- default:
60
- return errorResponse(400, `Unknown type: ${body.type}`);
61
- }
62
- }),
63
- };
64
- };
65
- exports.createInstantRouteHandler = createInstantRouteHandler;
66
- //# sourceMappingURL=createRouteHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createRouteHandler.js","sourceRoot":"","sources":["../../src/createRouteHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAMA,SAAS,sBAAsB,CAC7B,MAAgC,EAChC,IAAiB;IAEjB,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QAC/B,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;YAChD,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe;gBACf,YAAY,EAAE,gBAAgB,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,6DAA6D;aAChI;SACF,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;YAChD,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,oCAAoC;gBACpC,YAAY,EAAE,gBAAgB,MAAM,CAAC,KAAK,0DAA0D;aACrG;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,MAAc,EAAE,OAAe;IACpD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;QACjE,MAAM;QACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;AACL,CAAC;AAEM,MAAM,yBAAyB,GAAG,CAAC,MAAgC,EAAE,EAAE;IAC5E,OAAO;QACL,IAAI,EAAE,CAAO,GAAY,EAAE,EAAE;;YAC3B,IAAI,IAA2D,CAAC;YAChE,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC1B,CAAC;YAAC,WAAM,CAAC;gBACP,OAAO,aAAa,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;YACjD,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,aAAa,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;YACpD,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChC,OAAO,aAAa,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAC/C,CAAC;YAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,WAAW;oBACd,OAAO,sBAAsB,CAAC,MAAM,EAAE,MAAA,IAAI,CAAC,IAAI,mCAAI,IAAI,CAAC,CAAC;gBAC3D;oBACE,OAAO,aAAa,CAAC,GAAG,EAAE,iBAAiB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAA;KACF,CAAC;AACJ,CAAC,CAAC;AA1BW,QAAA,yBAAyB,6BA0BpC","sourcesContent":["import type { User } from './clientTypes.js';\n\ntype CreateRouteHandlerConfig = {\n appId: string;\n};\n\nfunction createUserSyncResponse(\n config: CreateRouteHandlerConfig,\n user: User | null,\n) {\n if (user && user.refresh_token) {\n return new Response(JSON.stringify({ ok: true }), {\n headers: {\n 'Content-Type': 'application/json',\n // 7 day expiry\n 'Set-Cookie': `instant_user_${config.appId}=${JSON.stringify(user)}; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=604800`,\n },\n });\n } else {\n return new Response(JSON.stringify({ ok: true }), {\n headers: {\n 'Content-Type': 'application/json',\n // remove the cookie (some browsers)\n 'Set-Cookie': `instant_user_${config.appId}=; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=-1`,\n },\n });\n }\n}\n\nfunction errorResponse(status: number, message: string) {\n return new Response(JSON.stringify({ ok: false, error: message }), {\n status,\n headers: { 'Content-Type': 'application/json' },\n });\n}\n\nexport const createInstantRouteHandler = (config: CreateRouteHandlerConfig) => {\n return {\n POST: async (req: Request) => {\n let body: { type?: string; appId?: string; user?: User | null };\n try {\n body = await req.json();\n } catch {\n return errorResponse(400, 'Invalid JSON body');\n }\n\n if (!body.type) {\n return errorResponse(400, 'Missing \"type\" field');\n }\n\n if (body.appId !== config.appId) {\n return errorResponse(403, 'App ID mismatch');\n }\n\n switch (body.type) {\n case 'sync-user':\n return createUserSyncResponse(config, body.user ?? null);\n default:\n return errorResponse(400, `Unknown type: ${body.type}`);\n }\n },\n };\n};\n"]}
@@ -1,77 +0,0 @@
1
- import { InstantCoreDatabase, InstantDBAttr } from './index.ts';
2
- import { RuleParams } from './schemaTypes.ts';
3
- export declare const isServer: boolean;
4
- export type FrameworkConfig = {
5
- token?: string | null;
6
- db: InstantCoreDatabase<any, any>;
7
- };
8
- type QueryPromise = {
9
- type: 'http';
10
- triples: any;
11
- attrs: any;
12
- queryHash: any;
13
- query: any;
14
- pageInfo?: any;
15
- } | {
16
- type: 'session';
17
- queryResult: any;
18
- };
19
- export declare class FrameworkClient {
20
- private params;
21
- private db;
22
- resultMap: Map<string, {
23
- status: 'pending' | 'success' | 'error';
24
- type: 'http' | 'session';
25
- promise?: Promise<QueryPromise> | null;
26
- data?: any;
27
- error?: any;
28
- }>;
29
- private queryResolvedCallbacks;
30
- constructor(params: FrameworkConfig);
31
- subscribe: (callback: (result: {
32
- triples: any;
33
- attrs: any;
34
- queryHash: string;
35
- pageInfo?: any;
36
- }) => void) => void;
37
- addQueryResult: (queryKey: string, value: any) => void;
38
- query: (_query: any, opts?: {
39
- ruleParams: RuleParams;
40
- }) => {
41
- type: "http" | "session";
42
- status: "pending" | "success" | "error";
43
- promise?: Promise<QueryPromise>;
44
- data?: any;
45
- error?: any;
46
- };
47
- getExistingResultForQuery: (_query: any, opts?: {
48
- ruleParams: RuleParams;
49
- }) => {
50
- status: "pending" | "success" | "error";
51
- type: "http" | "session";
52
- promise?: Promise<QueryPromise> | null;
53
- data?: any;
54
- error?: any;
55
- } | undefined;
56
- completeIsomorphic: (query: any, triples: any[], attrs: InstantDBAttr[], pageInfo?: any) => {
57
- data: any;
58
- pageInfo?: any;
59
- aggregate?: any;
60
- };
61
- hashQuery: (_query: any, opts?: {
62
- ruleParams: RuleParams;
63
- }) => {
64
- hash: string;
65
- query: any;
66
- };
67
- getTriplesAndAttrsForQuery: (query: any) => Promise<{
68
- triples: any[];
69
- attrs: InstantDBAttr[];
70
- query: any;
71
- queryHash: string;
72
- type: "http";
73
- pageInfo?: any;
74
- }>;
75
- }
76
- export {};
77
- //# sourceMappingURL=framework.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"framework.d.ts","sourceRoot":"","sources":["../../src/framework.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,mBAAmB,EACnB,aAAa,EAEd,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,eAAO,MAAM,QAAQ,SAAwD,CAAC;AAE9E,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,EAAE,EAAE,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;CACnC,CAAC;AAIF,KAAK,YAAY,GACb;IACE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,GAAG,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,SAAS,EAAE,GAAG,CAAC;IACf,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB,GACD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,GAAG,CAAC;CAClB,CAAC;AAEN,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,EAAE,CAAgC;IAInC,SAAS,EAAE,GAAG,CACnB,MAAM,EACN;QACE,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;QACxC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;QACvC,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,KAAK,CAAC,EAAE,GAAG,CAAC;KACb,CACF,CAAa;IAEd,OAAO,CAAC,sBAAsB,CAMX;gBAEP,MAAM,EAAE,eAAe;IAe5B,SAAS,GACd,UAAU,CAAC,MAAM,EAAE;QACjB,OAAO,EAAE,GAAG,CAAC;QACb,KAAK,EAAE,GAAG,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,GAAG,CAAC;KAChB,KAAK,IAAI,UAGV;IAGK,cAAc,GAAI,UAAU,MAAM,EAAE,OAAO,GAAG,UAoBnD;IAIK,KAAK,GACV,QAAQ,GAAG,EACX,OAAO;QACL,UAAU,EAAE,UAAU,CAAC;KACxB,KACA;QACD,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;QACxC,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,KAAK,CAAC,EAAE,GAAG,CAAC;KACb,CA4DC;IAEK,yBAAyB,GAC9B,QAAQ,GAAG,EACX,OAAO;QACL,UAAU,EAAE,UAAU,CAAC;KACxB;gBAhJS,SAAS,GAAG,SAAS,GAAG,OAAO;cACjC,MAAM,GAAG,SAAS;kBACd,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;eAC/B,GAAG;gBACF,GAAG;kBAgJb;IAIK,kBAAkB,GACvB,OAAO,GAAG,EACV,SAAS,GAAG,EAAE,EACd,OAAO,aAAa,EAAE,EACtB,WAAW,GAAG;;;;MAqCd;IAEK,SAAS,GACd,QAAQ,GAAG,EACX,OAAO;QACL,UAAU,EAAE,UAAU,CAAC;KACxB,KACA;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAM7B;IAGK,0BAA0B,GAC/B,OAAO,GAAG,KACT,OAAO,CAAC;QACT,OAAO,EAAE,GAAG,EAAE,CAAC;QACf,KAAK,EAAE,aAAa,EAAE,CAAC;QACvB,KAAK,EAAE,GAAG,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,GAAG,CAAC;KAChB,CAAC,CAoDA;CACH"}