on-zero 0.4.31 → 0.4.32

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 (118) hide show
  1. package/dist/cjs/cli.native.js.map +1 -1
  2. package/dist/cjs/combineZeroClients.native.js.map +1 -1
  3. package/dist/cjs/createPermissions.native.js.map +1 -1
  4. package/dist/cjs/createSchemaFromDrizzle.native.js.map +1 -1
  5. package/dist/cjs/createUseQuery.native.js.map +1 -1
  6. package/dist/cjs/createZeroClient.authData.test.cjs +67 -0
  7. package/dist/cjs/createZeroClient.authData.test.native.js +72 -0
  8. package/dist/cjs/createZeroClient.authData.test.native.js.map +1 -0
  9. package/dist/cjs/createZeroClient.cjs +41 -26
  10. package/dist/cjs/createZeroClient.native.js +47 -26
  11. package/dist/cjs/createZeroClient.native.js.map +1 -1
  12. package/dist/cjs/createZeroServer.native.js.map +1 -1
  13. package/dist/cjs/generate-helpers.native.js.map +1 -1
  14. package/dist/cjs/generate-lite.native.js.map +1 -1
  15. package/dist/cjs/generate-lite.test.native.js.map +1 -1
  16. package/dist/cjs/generate.native.js.map +1 -1
  17. package/dist/cjs/generate.test.native.js.map +1 -1
  18. package/dist/cjs/helpers/batchQuery.native.js.map +1 -1
  19. package/dist/cjs/helpers/clearZeroClientData.native.js.map +1 -1
  20. package/dist/cjs/helpers/createMutators.native.js.map +1 -1
  21. package/dist/cjs/helpers/didRunPermissionCheck.native.js.map +1 -1
  22. package/dist/cjs/helpers/ensureLoggedIn.native.js.map +1 -1
  23. package/dist/cjs/helpers/getAuth.native.js.map +1 -1
  24. package/dist/cjs/helpers/mutatorContext.native.js.map +1 -1
  25. package/dist/cjs/helpers/prettyFormatZeroQuery.native.js.map +1 -1
  26. package/dist/cjs/helpers/queryContext.native.js.map +1 -1
  27. package/dist/cjs/helpers/recoverZeroClient.cjs +101 -0
  28. package/dist/cjs/helpers/recoverZeroClient.native.js +130 -0
  29. package/dist/cjs/helpers/recoverZeroClient.native.js.map +1 -0
  30. package/dist/cjs/helpers/recoverZeroClient.test.cjs +201 -0
  31. package/dist/cjs/helpers/recoverZeroClient.test.native.js +256 -0
  32. package/dist/cjs/helpers/recoverZeroClient.test.native.js.map +1 -0
  33. package/dist/cjs/helpers/showZeroClientError.native.js.map +1 -1
  34. package/dist/cjs/helpers/useMutation.native.js.map +1 -1
  35. package/dist/cjs/helpers/useMutation.test.native.js.map +1 -1
  36. package/dist/cjs/helpers/useZeroDebug.native.js.map +1 -1
  37. package/dist/cjs/httpPull/auth.test.native.js.map +1 -1
  38. package/dist/cjs/httpPull/churn.test.native.js.map +1 -1
  39. package/dist/cjs/httpPull/fixtureSchema.native.js.map +1 -1
  40. package/dist/cjs/httpPull/fixtureServer.native.js.map +1 -1
  41. package/dist/cjs/httpPull/integration.test.native.js.map +1 -1
  42. package/dist/cjs/httpPull/rebase.test.native.js.map +1 -1
  43. package/dist/cjs/httpPull/relations.test.native.js.map +1 -1
  44. package/dist/cjs/httpPull/testHarness.native.js.map +1 -1
  45. package/dist/cjs/httpPull/transport.test.native.js.map +1 -1
  46. package/dist/cjs/httpPullTransport.native.js.map +1 -1
  47. package/dist/cjs/index.cjs +4 -1
  48. package/dist/cjs/index.native.js +3 -0
  49. package/dist/cjs/index.native.js.map +1 -1
  50. package/dist/cjs/instanceRegistry.native.js.map +1 -1
  51. package/dist/cjs/modelRegistry.native.js.map +1 -1
  52. package/dist/cjs/multiInstance.test.cjs +4 -3
  53. package/dist/cjs/multiInstance.test.native.js +6 -6
  54. package/dist/cjs/multiInstance.test.native.js.map +1 -1
  55. package/dist/cjs/multiInstanceNested.test.native.js.map +1 -1
  56. package/dist/cjs/mutations.native.js.map +1 -1
  57. package/dist/cjs/queryRegistry.native.js.map +1 -1
  58. package/dist/cjs/resolveQuery.native.js.map +1 -1
  59. package/dist/cjs/run.native.js.map +1 -1
  60. package/dist/cjs/serverWhere.native.js.map +1 -1
  61. package/dist/cjs/serverWhere.test.native.js.map +1 -1
  62. package/dist/cjs/state.native.js.map +1 -1
  63. package/dist/cjs/types.native.js.map +1 -1
  64. package/dist/cjs/usePermission.test.native.js.map +1 -1
  65. package/dist/cjs/vite-plugin.native.js.map +1 -1
  66. package/dist/cjs/where.native.js.map +1 -1
  67. package/dist/cjs/zeroRunner.native.js.map +1 -1
  68. package/dist/cjs/zql.native.js.map +1 -1
  69. package/dist/esm/createZeroClient.authData.test.mjs +68 -0
  70. package/dist/esm/createZeroClient.authData.test.mjs.map +1 -0
  71. package/dist/esm/createZeroClient.authData.test.native.js +70 -0
  72. package/dist/esm/createZeroClient.authData.test.native.js.map +1 -0
  73. package/dist/esm/createZeroClient.mjs +42 -27
  74. package/dist/esm/createZeroClient.mjs.map +1 -1
  75. package/dist/esm/createZeroClient.native.js +48 -27
  76. package/dist/esm/createZeroClient.native.js.map +1 -1
  77. package/dist/esm/createZeroServer.mjs.map +1 -1
  78. package/dist/esm/helpers/recoverZeroClient.mjs +74 -0
  79. package/dist/esm/helpers/recoverZeroClient.mjs.map +1 -0
  80. package/dist/esm/helpers/recoverZeroClient.native.js +100 -0
  81. package/dist/esm/helpers/recoverZeroClient.native.js.map +1 -0
  82. package/dist/esm/helpers/recoverZeroClient.test.mjs +202 -0
  83. package/dist/esm/helpers/recoverZeroClient.test.mjs.map +1 -0
  84. package/dist/esm/helpers/recoverZeroClient.test.native.js +254 -0
  85. package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -0
  86. package/dist/esm/index.js +2 -1
  87. package/dist/esm/index.js.map +1 -1
  88. package/dist/esm/index.mjs +2 -1
  89. package/dist/esm/index.mjs.map +1 -1
  90. package/dist/esm/index.native.js +2 -1
  91. package/dist/esm/index.native.js.map +1 -1
  92. package/dist/esm/multiInstance.test.mjs +4 -3
  93. package/dist/esm/multiInstance.test.mjs.map +1 -1
  94. package/dist/esm/multiInstance.test.native.js +6 -6
  95. package/dist/esm/multiInstance.test.native.js.map +1 -1
  96. package/package.json +2 -2
  97. package/src/createZeroClient.authData.test.tsx +73 -0
  98. package/src/createZeroClient.tsx +60 -47
  99. package/src/createZeroServer.ts +2 -2
  100. package/src/helpers/recoverZeroClient.test.ts +172 -0
  101. package/src/helpers/recoverZeroClient.ts +173 -0
  102. package/src/index.ts +5 -0
  103. package/src/multiInstance.test.tsx +5 -3
  104. package/src/multiInstanceNested.test.tsx +1 -1
  105. package/src/types.ts +6 -1
  106. package/types/createZeroClient.authData.test.d.ts +5 -0
  107. package/types/createZeroClient.authData.test.d.ts.map +1 -0
  108. package/types/createZeroClient.d.ts +2 -1
  109. package/types/createZeroClient.d.ts.map +1 -1
  110. package/types/createZeroServer.d.ts +4 -4
  111. package/types/helpers/recoverZeroClient.d.ts +17 -0
  112. package/types/helpers/recoverZeroClient.d.ts.map +1 -0
  113. package/types/helpers/recoverZeroClient.test.d.ts +2 -0
  114. package/types/helpers/recoverZeroClient.test.d.ts.map +1 -0
  115. package/types/index.d.ts +1 -0
  116. package/types/index.d.ts.map +1 -1
  117. package/types/types.d.ts +6 -0
  118. package/types/types.d.ts.map +1 -1
@@ -0,0 +1,173 @@
1
+ import type { Emitter } from '@take-out/helpers'
2
+ import type { ZeroEvent } from '../types'
3
+ import type { UpdateNeededReason } from '@rocicorp/zero'
4
+ import type { Context, LogLevel, LogSink } from '@rocicorp/logger'
5
+
6
+ // per-reason guard window: the SAME reason re-failing right after its reload is
7
+ // surfaced as fatal instead of reload-storming on something the reload can't fix.
8
+ const RECOVER_GUARD_MS = 60_000
9
+
10
+ // the fatal local-store-loss signature Zero logs when the IndexedDB it expects
11
+ // is gone (evicted, or deleted by another tab).
12
+ const LOCAL_STORE_LOST = 'Expected IndexedDB not found'
13
+
14
+ export type ZeroRecoveryDeps = {
15
+ // delete THIS client's local persistent state (its own scoped IDB). pass the
16
+ // instance's `.delete`. recovery is per-instance, so a combined client drops
17
+ // EVERY underlying store; the latch below keeps it to one reload.
18
+ deleteLocalState: () => Promise<unknown>
19
+ // recovery lifecycle for consumers (preview postMessage, toast, …).
20
+ zeroEvents: Emitter<ZeroEvent | null>
21
+ // awaited before the reload — e.g. wait for the dev origin to come back so the
22
+ // reload doesn't land on a restarting server. optional.
23
+ beforeReload?: () => Promise<void>
24
+ // injectable for tests; defaults to a real page reload.
25
+ reload?: () => void
26
+ }
27
+
28
+ // one reload per page-load. the local-state deletes that must precede it are
29
+ // collected here so EVERY affected instance (a combined client has several) drops
30
+ // its own store before we reload — not just whichever instance fired first.
31
+ let reloadScheduled = false
32
+ const pendingDeletes: Array<Promise<unknown>> = []
33
+
34
+ // cross-page-load, per-reason guard: distinct keys mean a NewClientGroup recovery
35
+ // never suppresses a later SchemaVersionNotSupported one. it survives the reload
36
+ // (sessionStorage), so a reason that reloaded then immediately re-fires is caught
37
+ // as a genuine fatal instead of reload-storming across loads.
38
+ function recoveryGuardOpen(reasonKey: string): boolean {
39
+ try {
40
+ const key = `on-zero-recover-${reasonKey}`
41
+ const last = Number(window.sessionStorage.getItem(key) || 0)
42
+ if (Date.now() - last < RECOVER_GUARD_MS) return false
43
+ window.sessionStorage.setItem(key, String(Date.now()))
44
+ } catch {
45
+ // no sessionStorage (private mode) — fall back to the in-memory latch.
46
+ }
47
+ return true
48
+ }
49
+
50
+ function recover(
51
+ deps: ZeroRecoveryDeps,
52
+ reasonKey: string,
53
+ message: string,
54
+ dropLocalState: boolean,
55
+ ): void {
56
+ if (typeof window === 'undefined') return
57
+ // each affected instance drops its OWN stale store, even when a reload is
58
+ // already queued — otherwise a sibling's store survives the reload and
59
+ // fatal-loops on the next boot. the single scheduled reload awaits these.
60
+ if (dropLocalState) {
61
+ pendingDeletes.push(
62
+ Promise.resolve()
63
+ .then(deps.deleteLocalState)
64
+ .catch(() => {}),
65
+ )
66
+ }
67
+ // only ONE reload per page-load; a later trigger just contributes its delete.
68
+ if (reloadScheduled) return
69
+ if (!recoveryGuardOpen(reasonKey)) {
70
+ console.error(`[on-zero] ${message} — already recovered once, not reloading`)
71
+ deps.zeroEvents.emit({ type: 'fatal', reason: message })
72
+ return
73
+ }
74
+ reloadScheduled = true
75
+ console.warn(`[on-zero] ${message} — recovering`)
76
+ deps.zeroEvents.emit({ type: 'recovering', reason: message })
77
+ const doReload = deps.reload ?? (() => window.location.reload())
78
+ // defer one microtask so sibling instances failing in the same tick enqueue
79
+ // their deletes first, then await them all before reloading.
80
+ Promise.resolve()
81
+ .then(() => Promise.allSettled(pendingDeletes))
82
+ .then(() => deps.beforeReload?.())
83
+ .catch(() => {})
84
+ .finally(doReload)
85
+ }
86
+
87
+ // passing our own onUpdateNeeded/onClientStateNotFound DISABLES Zero's built-in
88
+ // reloadWithReason, so these handlers are the ONLY recovery — they must cover
89
+ // every reason or the app fatal-blanks forever.
90
+ export function makeZeroRecovery(deps: ZeroRecoveryDeps) {
91
+ return {
92
+ onUpdateNeeded(reason: UpdateNeededReason) {
93
+ // every update-needed reason needs new client code → reload. but only
94
+ // SchemaVersionNotSupported means the local rows are now incompatible:
95
+ // mirror Zero's own decision (it disables the client group only for that
96
+ // reason). NewClientGroup / VersionNotSupported are code-version mismatches
97
+ // whose data is still valid — and delete() there would wipe the IndexedDB
98
+ // OTHER live tabs of this user share (the store is keyed by user+storageKey,
99
+ // not per-tab), e.g. the newer tab that triggered NewClientGroup.
100
+ const dropLocalState = reason.type === 'SchemaVersionNotSupported'
101
+ recover(
102
+ deps,
103
+ reason.type,
104
+ `update needed (${reason.message || reason.type})`,
105
+ dropLocalState,
106
+ )
107
+ },
108
+ onClientStateNotFound() {
109
+ // local/server sync state is gone or rejected — the store is unusable, so
110
+ // drop it and reload into a fresh client.
111
+ recover(deps, 'client-state-not-found', 'client state not found', true)
112
+ },
113
+ }
114
+ }
115
+
116
+ // preserve Zero's default console output: we MUST install a logSink to watch for
117
+ // the corruption signature, but doing so replaces Zero's built-in console sink —
118
+ // so when the consumer passes none, mirror Zero's key=value context prefix here
119
+ // instead of silently swallowing every log.
120
+ function logToConsole(
121
+ level: LogLevel,
122
+ context: Context | undefined,
123
+ ...args: unknown[]
124
+ ): void {
125
+ const prefix = context
126
+ ? Object.entries(context)
127
+ .map(([key, value]) => (value === undefined ? key : `${key}=${value}`))
128
+ .join(' ')
129
+ : ''
130
+ const method = level === 'debug' ? 'debug' : level
131
+ console[method](...(prefix ? [prefix] : []), ...args)
132
+ }
133
+
134
+ // watch error-level logs for the local-store-lost signature (the one fatal Zero
135
+ // surfaces only through the log, not the structured callbacks) and trigger the
136
+ // same recovery. forwards to the consumer sink, or to the console when there is
137
+ // none. wire this ONLY when the consumer didn't pass their own logSink, so a
138
+ // consumer that owns log-based recovery isn't double-fired.
139
+ export function composeRecoveryLogSink(
140
+ deps: ZeroRecoveryDeps,
141
+ consumerLogSink?: LogSink,
142
+ ): LogSink {
143
+ const consumerFlush = consumerLogSink?.flush
144
+ return {
145
+ log(level: LogLevel, context: Context | undefined, ...args: unknown[]): void {
146
+ if (consumerLogSink) consumerLogSink.log(level, context, ...args)
147
+ else logToConsole(level, context, ...args)
148
+ if (level !== 'error') return
149
+ const text = args
150
+ .map((arg) =>
151
+ typeof arg === 'string'
152
+ ? arg
153
+ : arg && typeof arg === 'object' && 'message' in arg
154
+ ? String((arg as { message: unknown }).message)
155
+ : '',
156
+ )
157
+ .join(' ')
158
+ if (text.includes(LOCAL_STORE_LOST)) {
159
+ recover(deps, 'local-store', 'local store lost', true)
160
+ }
161
+ },
162
+ // call through the consumer sink so a class-based sink keeps its `this`,
163
+ // rather than handing Zero a detached method reference.
164
+ flush: consumerFlush ? () => consumerFlush.call(consumerLogSink) : undefined,
165
+ }
166
+ }
167
+
168
+ // test-only: the reload latch + pending deletes are in-memory (a real page reload
169
+ // clears them); tests simulate that reset between successive "page loads".
170
+ export function resetRecoveryStateForTests() {
171
+ reloadScheduled = false
172
+ pendingDeletes.length = 0
173
+ }
package/src/index.ts CHANGED
@@ -37,3 +37,8 @@ export {
37
37
  type ShowZeroClientErrorOptions,
38
38
  type ZeroClientErrorInfo,
39
39
  } from './helpers/showZeroClientError'
40
+ export {
41
+ makeZeroRecovery,
42
+ composeRecoveryLogSink,
43
+ type ZeroRecoveryDeps,
44
+ } from './helpers/recoverZeroClient'
@@ -276,9 +276,11 @@ describe('combineZeroClients facade', () => {
276
276
  a.zeroEvents.emit({ type: 'error', message: 'from-a' })
277
277
  b.zeroEvents.emit({ type: 'error', message: 'from-b' })
278
278
 
279
- expect(seen.map((event) => event?.message)).toEqual(['from-a', 'from-b'])
279
+ const messageOf = (event: ZeroEvent | null) =>
280
+ event?.type === 'error' ? event.message : undefined
281
+ expect(seen.map(messageOf)).toEqual(['from-a', 'from-b'])
280
282
  // the source emitters stay independent of each other
281
- expect(a.zeroEvents.value?.message).toBe('from-a')
282
- expect(b.zeroEvents.value?.message).toBe('from-b')
283
+ expect(messageOf(a.zeroEvents.value)).toBe('from-a')
284
+ expect(messageOf(b.zeroEvents.value)).toBe('from-b')
283
285
  })
284
286
  })
@@ -220,7 +220,7 @@ test('direct-path views re-materialize when the owning instance rotates', async
220
220
  await waitFor(() => probe.data?.name === 'before-rotation', 'pre-rotation row')
221
221
 
222
222
  // identity change rotates the mounted zero instance (new client group,
223
- // fresh store) the same mechanism a zeroInstanceGeneration bump uses
223
+ // fresh store) via the instanceKey change
224
224
  await render(<App userID="rot-2" />)
225
225
  await waitFor(() => probe.data === undefined, 'view reset to the new empty store')
226
226
 
package/src/types.ts CHANGED
@@ -135,7 +135,12 @@ export type TablePrimaryKeys<TS extends GenericTable> = TupleToUnion<
135
135
  GetTableSchema<TS>['primaryKey']
136
136
  >
137
137
 
138
- export type ZeroEvent = { type: 'error'; message: string }
138
+ export type ZeroEvent =
139
+ | { type: 'error'; message: string }
140
+ // recovery lifecycle: 'recovering' = dropping local state + reloading;
141
+ // 'fatal' = recovery already attempted (loop guard tripped), not reloading.
142
+ | { type: 'recovering'; reason: string }
143
+ | { type: 'fatal'; reason: string }
139
144
 
140
145
  /**
141
146
  * Admin role bypass for permissions:
@@ -0,0 +1,5 @@
1
+ declare global {
2
+ var IS_REACT_ACT_ENVIRONMENT: boolean | undefined;
3
+ }
4
+ export {};
5
+ //# sourceMappingURL=createZeroClient.authData.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createZeroClient.authData.test.d.ts","sourceRoot":"","sources":["../src/createZeroClient.authData.test.tsx"],"names":[],"mappings":"AAeA,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,wBAAwB,EAAE,OAAO,GAAG,SAAS,CAAA;CAClD"}
@@ -18,12 +18,13 @@ export declare function createZeroClient<Schema extends ZeroSchema, Models exten
18
18
  }): {
19
19
  instanceName: string;
20
20
  zeroEvents: import("@take-out/helpers").Emitter<ZeroEvent | null>;
21
- ProvideZero: ({ children, authData: authDataIn, disable, transport, pullIntervalMs, ...props }: Omit<ZeroOptions<Schema, GetZeroMutators<Models>>, "schema" | "mutators"> & {
21
+ ProvideZero: ({ children, authData: authDataIn, disable, transport, pullIntervalMs, beforeReload, ...props }: Omit<ZeroOptions<Schema, GetZeroMutators<Models>>, "schema" | "mutators"> & {
22
22
  children: ReactNode;
23
23
  authData?: AuthData | null;
24
24
  disable?: boolean;
25
25
  transport?: "http-pull";
26
26
  pullIntervalMs?: number;
27
+ beforeReload?: () => Promise<void>;
27
28
  }) => string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | import("react/jsx-runtime").JSX.Element | null | undefined;
28
29
  ControlQueries: ({ children, action, whenDisabled, }: {
29
30
  children: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"createZeroClient.d.ts","sourceRoot":"","sources":["../src/createZeroClient.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createZeroClient.d.ts","sourceRoot":"","sources":["../src/createZeroClient.tsx"],"names":[],"mappings":"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"}
@@ -124,7 +124,7 @@ export declare function createZeroServer<Schema extends ZeroSchema, Models exten
124
124
  clientID: string;
125
125
  }[];
126
126
  origin: "zeroCache";
127
- reason: "parse" | "internal" | "timeout";
127
+ reason: "parse" | "timeout" | "internal";
128
128
  } | {
129
129
  mutations: {
130
130
  id: {
@@ -200,7 +200,7 @@ export declare function createZeroServer<Schema extends ZeroSchema, Models exten
200
200
  clientID: string;
201
201
  }[];
202
202
  origin: "zeroCache";
203
- reason: "parse" | "internal" | "timeout";
203
+ reason: "parse" | "timeout" | "internal";
204
204
  };
205
205
  asyncTasks: AsyncAction[];
206
206
  }>;
@@ -250,7 +250,7 @@ export declare function createZeroServer<Schema extends ZeroSchema, Models exten
250
250
  kind: "TransformFailed";
251
251
  queryIDs: string[];
252
252
  origin: "zeroCache";
253
- reason: "parse" | "internal" | "timeout";
253
+ reason: "parse" | "timeout" | "internal";
254
254
  } | ["transformed", ({
255
255
  id: string;
256
256
  name: string;
@@ -289,7 +289,7 @@ export declare function createZeroServer<Schema extends ZeroSchema, Models exten
289
289
  kind: "TransformFailed";
290
290
  queryIDs: string[];
291
291
  origin: "zeroCache";
292
- reason: "parse" | "internal" | "timeout";
292
+ reason: "parse" | "timeout" | "internal";
293
293
  }];
294
294
  }>;
295
295
  transaction: <CB extends (tx: Transaction) => Promise<any>, Returns extends CB extends (tx: Transaction) => Promise<infer X> ? X : never>(query: CB) => Promise<Returns>;
@@ -0,0 +1,17 @@
1
+ import type { Emitter } from '@take-out/helpers';
2
+ import type { ZeroEvent } from '../types';
3
+ import type { UpdateNeededReason } from '@rocicorp/zero';
4
+ import type { LogSink } from '@rocicorp/logger';
5
+ export type ZeroRecoveryDeps = {
6
+ deleteLocalState: () => Promise<unknown>;
7
+ zeroEvents: Emitter<ZeroEvent | null>;
8
+ beforeReload?: () => Promise<void>;
9
+ reload?: () => void;
10
+ };
11
+ export declare function makeZeroRecovery(deps: ZeroRecoveryDeps): {
12
+ onUpdateNeeded(reason: UpdateNeededReason): void;
13
+ onClientStateNotFound(): void;
14
+ };
15
+ export declare function composeRecoveryLogSink(deps: ZeroRecoveryDeps, consumerLogSink?: LogSink): LogSink;
16
+ export declare function resetRecoveryStateForTests(): void;
17
+ //# sourceMappingURL=recoverZeroClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recoverZeroClient.d.ts","sourceRoot":"","sources":["../../src/helpers/recoverZeroClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,KAAK,EAAqB,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAUlE,MAAM,MAAM,gBAAgB,GAAG;IAI7B,gBAAgB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAExC,UAAU,EAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;IAGrC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAElC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAgED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB;2BAE5B,kBAAkB;;EAsB5C;AAyBD,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,gBAAgB,EACtB,eAAe,CAAC,EAAE,OAAO,GACxB,OAAO,CAwBT;AAID,wBAAgB,0BAA0B,SAGzC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=recoverZeroClient.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recoverZeroClient.test.d.ts","sourceRoot":"","sources":["../../src/helpers/recoverZeroClient.test.ts"],"names":[],"mappings":""}
package/types/index.d.ts CHANGED
@@ -22,4 +22,5 @@ export { defineQuery, defineQueries } from '@rocicorp/zero';
22
22
  export type * from './types';
23
23
  export { clearZeroClientData, type ClearZeroClientDataOptions, } from './helpers/clearZeroClientData';
24
24
  export { showZeroClientErrorOnce, resetShownZeroClientError, type ShowZeroClientErrorOptions, type ZeroClientErrorInfo, } from './helpers/showZeroClientError';
25
+ export { makeZeroRecovery, composeRecoveryLogSink, type ZeroRecoveryDeps, } from './helpers/recoverZeroClient';
25
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAErD,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,OAAO,CAAA;AACrB,OAAO,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AACzD,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,OAAO,CAAA;AACrB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAM3D,mBAAmB,SAAS,CAAA;AAE5B,OAAO,EACL,mBAAmB,EACnB,KAAK,0BAA0B,GAChC,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,GACzB,MAAM,+BAA+B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAErD,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,OAAO,CAAA;AACrB,OAAO,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AACzD,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,OAAO,CAAA;AACrB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAM3D,mBAAmB,SAAS,CAAA;AAE5B,OAAO,EACL,mBAAmB,EACnB,KAAK,0BAA0B,GAChC,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,GACzB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,gBAAgB,GACtB,MAAM,6BAA6B,CAAA"}
package/types/types.d.ts CHANGED
@@ -73,6 +73,12 @@ export type TablePrimaryKeys<TS extends GenericTable> = TupleToUnion<GetTableSch
73
73
  export type ZeroEvent = {
74
74
  type: 'error';
75
75
  message: string;
76
+ } | {
77
+ type: 'recovering';
78
+ reason: string;
79
+ } | {
80
+ type: 'fatal';
81
+ reason: string;
76
82
  };
77
83
  /**
78
84
  * Admin role bypass for permissions:
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}