orez-lite 0.9.7

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 (190) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +12 -0
  3. package/dist/browser/generated/sqlite3-browser.wasm +0 -0
  4. package/dist/browser/generated/sync_wasm.js +922 -0
  5. package/dist/browser/generated/sync_wasm_bg.wasm +0 -0
  6. package/dist/browser/host.d.ts +10 -0
  7. package/dist/browser/host.d.ts.map +1 -0
  8. package/dist/browser/host.js +496 -0
  9. package/dist/browser/host.js.map +1 -0
  10. package/dist/browser/idb-snapshot.d.ts +11 -0
  11. package/dist/browser/idb-snapshot.d.ts.map +1 -0
  12. package/dist/browser/idb-snapshot.js +122 -0
  13. package/dist/browser/idb-snapshot.js.map +1 -0
  14. package/dist/browser/index.d.ts +5 -0
  15. package/dist/browser/index.d.ts.map +1 -0
  16. package/dist/browser/index.js +5 -0
  17. package/dist/browser/index.js.map +1 -0
  18. package/dist/browser/message-port.d.ts +7 -0
  19. package/dist/browser/message-port.d.ts.map +1 -0
  20. package/dist/browser/message-port.js +188 -0
  21. package/dist/browser/message-port.js.map +1 -0
  22. package/dist/browser/sqlite-adapter.d.ts +53 -0
  23. package/dist/browser/sqlite-adapter.d.ts.map +1 -0
  24. package/dist/browser/sqlite-adapter.js +126 -0
  25. package/dist/browser/sqlite-adapter.js.map +1 -0
  26. package/dist/browser/types.d.ts +52 -0
  27. package/dist/browser/types.d.ts.map +1 -0
  28. package/dist/browser/types.js +2 -0
  29. package/dist/browser/types.js.map +1 -0
  30. package/dist/cf-deploy/bundle.d.ts +18 -0
  31. package/dist/cf-deploy/bundle.d.ts.map +1 -0
  32. package/dist/cf-deploy/bundle.js +273 -0
  33. package/dist/cf-deploy/bundle.js.map +1 -0
  34. package/dist/cf-deploy/config.d.ts +12 -0
  35. package/dist/cf-deploy/config.d.ts.map +1 -0
  36. package/dist/cf-deploy/config.js +11 -0
  37. package/dist/cf-deploy/config.js.map +1 -0
  38. package/dist/cf-deploy/index.d.ts +10 -0
  39. package/dist/cf-deploy/index.d.ts.map +1 -0
  40. package/dist/cf-deploy/index.js +12 -0
  41. package/dist/cf-deploy/index.js.map +1 -0
  42. package/dist/cf-deploy/leaves.d.ts +8 -0
  43. package/dist/cf-deploy/leaves.d.ts.map +1 -0
  44. package/dist/cf-deploy/leaves.js +66 -0
  45. package/dist/cf-deploy/leaves.js.map +1 -0
  46. package/dist/cf-deploy/migration.d.ts +27 -0
  47. package/dist/cf-deploy/migration.d.ts.map +1 -0
  48. package/dist/cf-deploy/migration.js +734 -0
  49. package/dist/cf-deploy/migration.js.map +1 -0
  50. package/dist/cf-deploy/nativeMigrations.d.ts +24 -0
  51. package/dist/cf-deploy/nativeMigrations.d.ts.map +1 -0
  52. package/dist/cf-deploy/nativeMigrations.js +185 -0
  53. package/dist/cf-deploy/nativeMigrations.js.map +1 -0
  54. package/dist/cf-deploy/prune.d.ts +14 -0
  55. package/dist/cf-deploy/prune.d.ts.map +1 -0
  56. package/dist/cf-deploy/prune.js +235 -0
  57. package/dist/cf-deploy/prune.js.map +1 -0
  58. package/dist/cf-deploy/readiness.d.ts +11 -0
  59. package/dist/cf-deploy/readiness.d.ts.map +1 -0
  60. package/dist/cf-deploy/readiness.js +56 -0
  61. package/dist/cf-deploy/readiness.js.map +1 -0
  62. package/dist/cf-deploy/sources.d.ts +3 -0
  63. package/dist/cf-deploy/sources.d.ts.map +1 -0
  64. package/dist/cf-deploy/sources.js +24 -0
  65. package/dist/cf-deploy/sources.js.map +1 -0
  66. package/dist/cf-deploy/wrangler.d.ts +9 -0
  67. package/dist/cf-deploy/wrangler.d.ts.map +1 -0
  68. package/dist/cf-deploy/wrangler.js +48 -0
  69. package/dist/cf-deploy/wrangler.js.map +1 -0
  70. package/dist/cf-do/application-sql.d.ts +49 -0
  71. package/dist/cf-do/application-sql.d.ts.map +1 -0
  72. package/dist/cf-do/application-sql.js +124 -0
  73. package/dist/cf-do/application-sql.js.map +1 -0
  74. package/dist/cf-do/cdc.d.ts +155 -0
  75. package/dist/cf-do/cdc.d.ts.map +1 -0
  76. package/dist/cf-do/cdc.js +723 -0
  77. package/dist/cf-do/cdc.js.map +1 -0
  78. package/dist/cf-do/cursor-pull.d.ts +27 -0
  79. package/dist/cf-do/cursor-pull.d.ts.map +1 -0
  80. package/dist/cf-do/cursor-pull.js +78 -0
  81. package/dist/cf-do/cursor-pull.js.map +1 -0
  82. package/dist/cf-do/lite-data-worker.d.ts +171 -0
  83. package/dist/cf-do/lite-data-worker.d.ts.map +1 -0
  84. package/dist/cf-do/lite-data-worker.js +685 -0
  85. package/dist/cf-do/lite-data-worker.js.map +1 -0
  86. package/dist/cf-do/namespace-backup.d.ts +85 -0
  87. package/dist/cf-do/namespace-backup.d.ts.map +1 -0
  88. package/dist/cf-do/namespace-backup.js +470 -0
  89. package/dist/cf-do/namespace-backup.js.map +1 -0
  90. package/dist/cf-do/row-undo.d.ts +36 -0
  91. package/dist/cf-do/row-undo.d.ts.map +1 -0
  92. package/dist/cf-do/row-undo.js +221 -0
  93. package/dist/cf-do/row-undo.js.map +1 -0
  94. package/dist/cf-do/tx-journal.d.ts +118 -0
  95. package/dist/cf-do/tx-journal.d.ts.map +1 -0
  96. package/dist/cf-do/tx-journal.js +717 -0
  97. package/dist/cf-do/tx-journal.js.map +1 -0
  98. package/dist/cf-do/watermark.d.ts +29 -0
  99. package/dist/cf-do/watermark.d.ts.map +1 -0
  100. package/dist/cf-do/watermark.js +105 -0
  101. package/dist/cf-do/watermark.js.map +1 -0
  102. package/dist/cf-do/worker.d.ts +282 -0
  103. package/dist/cf-do/worker.d.ts.map +1 -0
  104. package/dist/cf-do/worker.js +1999 -0
  105. package/dist/cf-do/worker.js.map +1 -0
  106. package/dist/client.d.ts +2 -0
  107. package/dist/client.d.ts.map +1 -0
  108. package/dist/client.js +2 -0
  109. package/dist/client.js.map +1 -0
  110. package/dist/cloudflare-build.d.ts +9 -0
  111. package/dist/cloudflare-build.d.ts.map +1 -0
  112. package/dist/cloudflare-build.js +9 -0
  113. package/dist/cloudflare-build.js.map +1 -0
  114. package/dist/cloudflare-bun-wasm-loader.d.ts +2 -0
  115. package/dist/cloudflare-bun-wasm-loader.d.ts.map +1 -0
  116. package/dist/cloudflare-bun-wasm-loader.js +2 -0
  117. package/dist/cloudflare-bun-wasm-loader.js.map +1 -0
  118. package/dist/cloudflare-query-compiler.d.ts +2 -0
  119. package/dist/cloudflare-query-compiler.d.ts.map +1 -0
  120. package/dist/cloudflare-query-compiler.js +2 -0
  121. package/dist/cloudflare-query-compiler.js.map +1 -0
  122. package/dist/cloudflare-runtime.d.ts +15 -0
  123. package/dist/cloudflare-runtime.d.ts.map +1 -0
  124. package/dist/cloudflare-runtime.js +11 -0
  125. package/dist/cloudflare-runtime.js.map +1 -0
  126. package/dist/cloudflare-sync.d.ts +3 -0
  127. package/dist/cloudflare-sync.d.ts.map +1 -0
  128. package/dist/cloudflare-sync.js +3 -0
  129. package/dist/cloudflare-sync.js.map +1 -0
  130. package/dist/cloudflare-transaction-query.d.ts +2 -0
  131. package/dist/cloudflare-transaction-query.d.ts.map +1 -0
  132. package/dist/cloudflare-transaction-query.js +2 -0
  133. package/dist/cloudflare-transaction-query.js.map +1 -0
  134. package/dist/cloudflare-vite-wasm-loader.d.ts +2 -0
  135. package/dist/cloudflare-vite-wasm-loader.d.ts.map +1 -0
  136. package/dist/cloudflare-vite-wasm-loader.js +2 -0
  137. package/dist/cloudflare-vite-wasm-loader.js.map +1 -0
  138. package/dist/cloudflare.d.ts +3 -0
  139. package/dist/cloudflare.d.ts.map +1 -0
  140. package/dist/cloudflare.js +3 -0
  141. package/dist/cloudflare.js.map +1 -0
  142. package/dist/do-sql-tracking.d.ts +114 -0
  143. package/dist/do-sql-tracking.d.ts.map +1 -0
  144. package/dist/do-sql-tracking.js +280 -0
  145. package/dist/do-sql-tracking.js.map +1 -0
  146. package/dist/index.d.ts +4 -0
  147. package/dist/index.d.ts.map +1 -0
  148. package/dist/index.js +3 -0
  149. package/dist/index.js.map +1 -0
  150. package/dist/wake.d.ts +22 -0
  151. package/dist/wake.d.ts.map +1 -0
  152. package/dist/wake.js +114 -0
  153. package/dist/wake.js.map +1 -0
  154. package/dist/worker/cf-do-shim.d.ts +53 -0
  155. package/dist/worker/cf-do-shim.d.ts.map +1 -0
  156. package/dist/worker/cf-do-shim.js +66 -0
  157. package/dist/worker/cf-do-shim.js.map +1 -0
  158. package/dist/zero-http/encrypted-column-codec.d.ts +46 -0
  159. package/dist/zero-http/encrypted-column-codec.d.ts.map +1 -0
  160. package/dist/zero-http/encrypted-column-codec.js +676 -0
  161. package/dist/zero-http/encrypted-column-codec.js.map +1 -0
  162. package/dist/zero-http/encrypted-column-conformance.d.ts +7 -0
  163. package/dist/zero-http/encrypted-column-conformance.d.ts.map +1 -0
  164. package/dist/zero-http/encrypted-column-conformance.js +161 -0
  165. package/dist/zero-http/encrypted-column-conformance.js.map +1 -0
  166. package/dist/zero-http/fixture-schema.d.ts +127 -0
  167. package/dist/zero-http/fixture-schema.d.ts.map +1 -0
  168. package/dist/zero-http/fixture-schema.js +56 -0
  169. package/dist/zero-http/fixture-schema.js.map +1 -0
  170. package/dist/zero-http/mount.d.ts +71 -0
  171. package/dist/zero-http/mount.d.ts.map +1 -0
  172. package/dist/zero-http/mount.js +594 -0
  173. package/dist/zero-http/mount.js.map +1 -0
  174. package/dist/zero-http/payload-codec.d.ts +91 -0
  175. package/dist/zero-http/payload-codec.d.ts.map +1 -0
  176. package/dist/zero-http/payload-codec.js +10 -0
  177. package/dist/zero-http/payload-codec.js.map +1 -0
  178. package/dist/zero-http/server.d.ts +16 -0
  179. package/dist/zero-http/server.d.ts.map +1 -0
  180. package/dist/zero-http/server.js +270 -0
  181. package/dist/zero-http/server.js.map +1 -0
  182. package/dist/zero-http/test-harness.d.ts +32 -0
  183. package/dist/zero-http/test-harness.d.ts.map +1 -0
  184. package/dist/zero-http/test-harness.js +77 -0
  185. package/dist/zero-http/test-harness.js.map +1 -0
  186. package/dist/zero-http/transport.d.ts +71 -0
  187. package/dist/zero-http/transport.d.ts.map +1 -0
  188. package/dist/zero-http/transport.js +1106 -0
  189. package/dist/zero-http/transport.js.map +1 -0
  190. package/package.json +116 -0
@@ -0,0 +1,91 @@
1
+ export type JSONPrimitive = null | boolean | number | string;
2
+ export type JSONValue = JSONPrimitive | readonly JSONValue[] | {
3
+ readonly [key: string]: JSONValue;
4
+ };
5
+ export type JSONObject = Readonly<Record<string, JSONValue>>;
6
+ export type PushMutation = JSONObject & {
7
+ readonly type: string;
8
+ readonly clientID: string;
9
+ readonly id: number;
10
+ readonly name?: string;
11
+ readonly args?: readonly JSONValue[];
12
+ };
13
+ export type PushRequest = JSONObject & {
14
+ readonly mutations: readonly PushMutation[];
15
+ };
16
+ export type GotQueryPatchOp = {
17
+ readonly op: 'clear';
18
+ } | {
19
+ readonly op: 'put' | 'del';
20
+ readonly hash: string;
21
+ };
22
+ export type ServerGotQueries = {
23
+ readonly version: number;
24
+ readonly patch: readonly GotQueryPatchOp[];
25
+ };
26
+ export type PullResponse = {
27
+ readonly [key: string]: JSONValue | undefined;
28
+ readonly cookie: number;
29
+ readonly lastMutationIDChanges: Readonly<Record<string, number>>;
30
+ readonly rowsPatch: readonly JSONValue[];
31
+ readonly unchanged?: false;
32
+ readonly gotQueries?: ServerGotQueries;
33
+ } | {
34
+ readonly [key: string]: JSONValue | undefined;
35
+ readonly cookie: number | null;
36
+ readonly unchanged: true;
37
+ readonly gotQueries?: ServerGotQueries;
38
+ };
39
+ export interface PayloadCodec {
40
+ /** stable configuration identity used to detect conflicting transports. */
41
+ readonly id: string;
42
+ /** called exactly once for each serialized /push attempt. */
43
+ encodePush(body: PushRequest): Promise<PushRequest>;
44
+ /** called for every successful /pull response before any poke is emitted. */
45
+ decodePull(response: PullResponse): Promise<PullResponse>;
46
+ }
47
+ export type EncryptedColumnManifest = {
48
+ readonly version: 1;
49
+ readonly networkID: string;
50
+ readonly schemaID: string;
51
+ readonly rowMutations: Readonly<Record<string, {
52
+ readonly argumentIndex: number;
53
+ readonly format: 'orez-row-batch-v1';
54
+ }>>;
55
+ readonly tables: Readonly<Record<string, {
56
+ readonly serverName?: string;
57
+ readonly primaryKey: readonly string[];
58
+ /** physical names for renamed primary-key columns. */
59
+ readonly primaryKeyServerNames?: Readonly<Record<string, string>>;
60
+ readonly columns: Readonly<Record<string, {
61
+ readonly serverName?: string;
62
+ }>>;
63
+ }>>;
64
+ };
65
+ export type EncryptedRowBatch = {
66
+ readonly sourceID: string;
67
+ readonly fromSeq: number;
68
+ readonly throughSeq: number;
69
+ readonly rows: readonly ({
70
+ readonly seq: number;
71
+ readonly op: 'put';
72
+ readonly table: string;
73
+ readonly value: JSONObject;
74
+ } | {
75
+ readonly seq: number;
76
+ readonly op: 'del';
77
+ readonly table: string;
78
+ readonly key: JSONObject;
79
+ })[];
80
+ };
81
+ export interface EncryptionKeyring {
82
+ /** current writable epoch and its 32-byte network content key. */
83
+ current(): Promise<{
84
+ readonly epoch: number;
85
+ readonly key: Uint8Array;
86
+ } | undefined>;
87
+ /** key for a readable current or historical epoch, or undefined. */
88
+ get(epoch: number): Promise<Uint8Array | undefined>;
89
+ }
90
+ export declare const identityPayloadCodec: PayloadCodec;
91
+ //# sourceMappingURL=payload-codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-codec.d.ts","sourceRoot":"","sources":["../../src/zero-http/payload-codec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export const identityPayloadCodec = Object.freeze({
2
+ id: 'orez-identity-v1',
3
+ async encodePush(body) {
4
+ return body;
5
+ },
6
+ async decodePull(response) {
7
+ return response;
8
+ },
9
+ });
10
+ //# sourceMappingURL=payload-codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-codec.js","sourceRoot":"","sources":["../../src/zero-http/payload-codec.ts"],"names":[],"mappings":"AAuHA,MAAM,CAAC,MAAM,oBAAoB,GAAiB,MAAM,CAAC,MAAM,CAAC;IAC9D,EAAE,EAAE,kBAAkB;IACtB,KAAK,CAAC,UAAU,CAAC,IAAiB;QAChC,OAAO,IAAI,CAAA;IACb,CAAC;IACD,KAAK,CAAC,UAAU,CAAC,QAAsB;QACrC,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,16 @@
1
+ export type Row = Record<string, string>;
2
+ type Seed = {
3
+ user?: Row[];
4
+ project?: Row[];
5
+ member?: Row[];
6
+ };
7
+ export declare function startZeroHttpServer(opts?: {
8
+ seed?: Seed;
9
+ }): Promise<{
10
+ url: string;
11
+ version(): Promise<number>;
12
+ rows(table: string): Row[];
13
+ close(): Promise<void>;
14
+ }>;
15
+ export {};
16
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/zero-http/server.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAGxC,KAAK,IAAI,GAAG;IAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;CAAE,CAAA;AAyH7D,wBAAsB,mBAAmB,CAAC,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC;IACzE,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,CAAA;IAC1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB,CAAC,CAiHD"}
@@ -0,0 +1,270 @@
1
+ import { createServer } from 'node:http';
2
+ import { DatabaseSync } from 'node:sqlite';
3
+ import { MutationApplicationError } from 'orez-sync-executor';
4
+ import { zeroHttpFixtureSchema } from './fixture-schema.js';
5
+ import { createZeroHttpApplicationDatabase, createZeroHttpSyncServer, } from './mount.js';
6
+ const tables = {
7
+ user: {
8
+ physical: 'user_record',
9
+ columns: { id: 'user_id', name: 'display_name' },
10
+ },
11
+ project: {
12
+ physical: 'project_record',
13
+ columns: { id: 'project_id', ownerId: 'owner_id', name: 'project_name' },
14
+ },
15
+ member: {
16
+ physical: 'project_member',
17
+ columns: { id: 'member_id', projectId: 'project_id', userId: 'user_id' },
18
+ },
19
+ };
20
+ const effects = {
21
+ runBackground(promise) {
22
+ return promise;
23
+ },
24
+ report(error) {
25
+ throw error;
26
+ },
27
+ };
28
+ function createDatabase(sqlite) {
29
+ return {
30
+ exec(sql, params = []) {
31
+ sqlite.prepare(sql).run(...params);
32
+ },
33
+ all(sql, params = []) {
34
+ return sqlite.prepare(sql).all(...params);
35
+ },
36
+ transaction(work) {
37
+ sqlite.exec('BEGIN');
38
+ try {
39
+ const result = work();
40
+ sqlite.exec('COMMIT');
41
+ return result;
42
+ }
43
+ catch (error) {
44
+ sqlite.exec('ROLLBACK');
45
+ throw error;
46
+ }
47
+ },
48
+ };
49
+ }
50
+ function createMutators() {
51
+ return {
52
+ 'project|create': async ({ tx, args, ctx }) => {
53
+ const value = args;
54
+ if (value.ownerId !== ctx.claims.userID) {
55
+ throw new MutationApplicationError('forbidden');
56
+ }
57
+ await tx.mutate.project.insert(value);
58
+ },
59
+ 'project|rename': async ({ tx, args, ctx }) => {
60
+ const value = args;
61
+ const rows = Array.from(await tx.dbTransaction.query('SELECT owner_id AS ownerID FROM project_record WHERE project_id = ?', [value.id]));
62
+ if (rows.length === 0)
63
+ throw new MutationApplicationError('not-found');
64
+ if (rows[0].ownerID !== ctx.claims.userID) {
65
+ throw new MutationApplicationError('forbidden');
66
+ }
67
+ await tx.mutate.project.update(value);
68
+ },
69
+ 'member|add': async ({ tx, args, ctx }) => {
70
+ const value = args;
71
+ const rows = Array.from(await tx.dbTransaction.query('SELECT project_id FROM project_record WHERE project_id = ? AND owner_id = ?', [value.projectId, ctx.claims.userID]));
72
+ if (rows.length === 0)
73
+ throw new MutationApplicationError('forbidden');
74
+ await tx.mutate.member.insert(value);
75
+ },
76
+ 'member|touch': async ({ tx, args, ctx }) => {
77
+ const value = args;
78
+ const rows = Array.from(await tx.dbTransaction.query(`SELECT m.project_id AS projectId, m.user_id AS userId
79
+ FROM project_member m
80
+ JOIN project_record p ON p.project_id = m.project_id
81
+ WHERE m.member_id = ? AND p.owner_id = ?`, [value.id, ctx.claims.userID]));
82
+ if (rows.length === 0)
83
+ throw new MutationApplicationError('forbidden');
84
+ await tx.mutate.member.update({
85
+ id: value.id,
86
+ projectId: String(rows[0].projectId),
87
+ userId: String(rows[0].userId),
88
+ });
89
+ },
90
+ 'member|remove': async ({ tx, args, ctx }) => {
91
+ const value = args;
92
+ const members = Array.from(await tx.dbTransaction.query('SELECT project_id AS projectId FROM project_member WHERE member_id = ?', [value.id]));
93
+ if (members.length === 0)
94
+ throw new MutationApplicationError('not-found');
95
+ const projects = Array.from(await tx.dbTransaction.query('SELECT project_id FROM project_record WHERE project_id = ? AND owner_id = ?', [members[0].projectId, ctx.claims.userID]));
96
+ if (projects.length === 0)
97
+ throw new MutationApplicationError('forbidden');
98
+ await tx.mutate.member.delete(value);
99
+ },
100
+ };
101
+ }
102
+ export async function startZeroHttpServer(opts) {
103
+ const sqlite = new DatabaseSync(':memory:');
104
+ initializeApplicationTables(sqlite, opts?.seed);
105
+ const db = createDatabase(sqlite);
106
+ const sync = createZeroHttpSyncServer({
107
+ applicationDatabase: createZeroHttpApplicationDatabase(db),
108
+ effects,
109
+ schema: zeroHttpFixtureSchema,
110
+ tables: ['user', 'project', 'member'],
111
+ mutators: createMutators(),
112
+ visible(table, userID) {
113
+ if (table === 'user') {
114
+ return {
115
+ where: 'user_record.user_id = ?',
116
+ params: [userID],
117
+ };
118
+ }
119
+ if (table === 'project') {
120
+ return {
121
+ where: `project_record.owner_id = ? OR EXISTS (
122
+ SELECT 1 FROM project_member m
123
+ WHERE m.project_id = project_record.project_id AND m.user_id = ?
124
+ )`,
125
+ params: [userID, userID],
126
+ };
127
+ }
128
+ return {
129
+ where: `EXISTS (
130
+ SELECT 1 FROM project_record p
131
+ WHERE p.project_id = project_member.project_id
132
+ AND (p.owner_id = ? OR EXISTS (
133
+ SELECT 1 FROM project_member viewer
134
+ WHERE viewer.project_id = p.project_id AND viewer.user_id = ?
135
+ ))
136
+ )`,
137
+ params: [userID, userID],
138
+ };
139
+ },
140
+ visibilityInvalidation: {
141
+ capture: { member: ['projectId', 'userId'] },
142
+ shouldReset({ changes, userID }) {
143
+ return changes.some((change) => {
144
+ if (change.table !== 'member')
145
+ return false;
146
+ const before = change.before;
147
+ const after = change.after;
148
+ return ((before?.userId === userID &&
149
+ (after?.userId !== before.userId ||
150
+ after?.projectId !== before.projectId)) ||
151
+ (after?.userId === userID &&
152
+ (before?.userId !== after.userId || before?.projectId !== after.projectId)));
153
+ });
154
+ },
155
+ },
156
+ });
157
+ await sync.ready();
158
+ const server = createServer(async (req, res) => {
159
+ try {
160
+ if (req.method !== 'POST') {
161
+ sendJSON(res, 404, { error: 'not found' });
162
+ return;
163
+ }
164
+ const userID = authenticate(req, sqlite);
165
+ if (!userID) {
166
+ sendJSON(res, 401, { error: 'unauthorized' });
167
+ return;
168
+ }
169
+ const path = new URL(req.url || '/', 'http://127.0.0.1').pathname;
170
+ const body = await readJSON(req);
171
+ if (path === '/push') {
172
+ sendJSON(res, 200, await sync.handlePush(body, { id: userID }));
173
+ return;
174
+ }
175
+ if (path === '/pull') {
176
+ sendJSON(res, 200, await sync.handlePull(body, { id: userID }));
177
+ return;
178
+ }
179
+ sendJSON(res, 404, { error: 'not found' });
180
+ }
181
+ catch (error) {
182
+ const status = typeof error === 'object' && error !== null && 'status' in error
183
+ ? Number(error.status)
184
+ : error instanceof SyntaxError
185
+ ? 400
186
+ : 500;
187
+ sendJSON(res, status, {
188
+ error: error instanceof Error ? error.message : String(error),
189
+ });
190
+ }
191
+ });
192
+ await new Promise((resolve, reject) => {
193
+ server.once('error', reject);
194
+ server.listen(0, '127.0.0.1', () => {
195
+ server.off('error', reject);
196
+ resolve();
197
+ });
198
+ });
199
+ const address = server.address();
200
+ return {
201
+ url: `http://127.0.0.1:${address.port}`,
202
+ version: () => sync.watermark(),
203
+ rows: (table) => rowsForTable(sqlite, table),
204
+ close: () => new Promise((resolve, reject) => {
205
+ server.close((error) => {
206
+ sqlite.close();
207
+ error ? reject(error) : resolve();
208
+ });
209
+ }),
210
+ };
211
+ }
212
+ function initializeApplicationTables(sqlite, seed) {
213
+ sqlite.exec(`CREATE TABLE user_record (
214
+ user_id TEXT PRIMARY KEY,
215
+ display_name TEXT NOT NULL
216
+ )`);
217
+ sqlite.exec(`CREATE TABLE project_record (
218
+ project_id TEXT PRIMARY KEY,
219
+ owner_id TEXT NOT NULL,
220
+ project_name TEXT NOT NULL
221
+ )`);
222
+ sqlite.exec(`CREATE TABLE project_member (
223
+ member_id TEXT PRIMARY KEY,
224
+ project_id TEXT NOT NULL,
225
+ user_id TEXT NOT NULL
226
+ )`);
227
+ for (const table of Object.keys(tables)) {
228
+ const config = tables[table];
229
+ for (const row of seed?.[table] ?? []) {
230
+ const columns = Object.keys(row);
231
+ const physicalColumns = columns.map((column) => config.columns[column]);
232
+ sqlite
233
+ .prepare(`INSERT INTO "${config.physical}" (${physicalColumns
234
+ .map((column) => `"${column}"`)
235
+ .join(', ')}) VALUES (${columns.map(() => '?').join(', ')})`)
236
+ .run(...columns.map((column) => row[column]));
237
+ }
238
+ }
239
+ }
240
+ function authenticate(req, sqlite) {
241
+ const header = req.headers.authorization;
242
+ if (!header?.startsWith('Bearer token-'))
243
+ return null;
244
+ const userID = header.slice('Bearer token-'.length);
245
+ const row = sqlite
246
+ .prepare('SELECT user_id FROM user_record WHERE user_id = ?')
247
+ .get(userID);
248
+ return row ? userID : null;
249
+ }
250
+ function rowsForTable(sqlite, table) {
251
+ if (!(table in tables))
252
+ return [];
253
+ const config = tables[table];
254
+ const logicalColumns = Object.entries(config.columns);
255
+ return sqlite
256
+ .prepare(`SELECT * FROM "${config.physical}"`)
257
+ .all()
258
+ .map((row) => Object.fromEntries(logicalColumns.map(([logical, physical]) => [logical, String(row[physical])])));
259
+ }
260
+ async function readJSON(req) {
261
+ let body = '';
262
+ for await (const chunk of req)
263
+ body += chunk;
264
+ return body ? JSON.parse(body) : {};
265
+ }
266
+ function sendJSON(res, status, body) {
267
+ res.writeHead(status, { 'content-type': 'application/json' });
268
+ res.end(JSON.stringify(body));
269
+ }
270
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/zero-http/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { Zero } from '@rocicorp/zero';
2
+ import { zeroHttpFixtureMutators, zeroHttpFixtureSchema } from './fixture-schema.js';
3
+ import { type Row } from './server.js';
4
+ export type FixtureZero = Zero<typeof zeroHttpFixtureSchema, typeof zeroHttpFixtureMutators>;
5
+ export type ZeroHttpHarness = Awaited<ReturnType<typeof startZeroHttpHarness>>;
6
+ export declare function startZeroHttpHarness(opts?: {
7
+ seed?: {
8
+ user?: Row[];
9
+ project?: Row[];
10
+ member?: Row[];
11
+ };
12
+ interceptFetch?: (next: typeof fetch) => typeof fetch;
13
+ }): Promise<{
14
+ server: {
15
+ url: string;
16
+ version(): Promise<number>;
17
+ rows(table: string): Row[];
18
+ close(): Promise<void>;
19
+ };
20
+ transport: import("./transport.js").HttpPullTransport;
21
+ createZero(userID: string, createOpts?: {
22
+ storageKey?: string;
23
+ pingTimeoutMs?: number;
24
+ }): FixtureZero;
25
+ close(): Promise<void>;
26
+ }>;
27
+ export declare function waitForComplete<T>(view: {
28
+ addListener(listener: (data: any, resultType: string) => void): () => void;
29
+ }): Promise<T>;
30
+ export declare function eventually(assertion: () => void | Promise<void>, timeout?: number): Promise<void>;
31
+ export declare function sleep(ms: number): Promise<unknown>;
32
+ //# sourceMappingURL=test-harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-harness.d.ts","sourceRoot":"","sources":["../../src/zero-http/test-harness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAErC,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AACpF,OAAO,EAAuB,KAAK,GAAG,EAAE,MAAM,aAAa,CAAA;AAK3D,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,OAAO,qBAAqB,EAC5B,OAAO,uBAAuB,CAC/B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAA;AAE9E,wBAAsB,oBAAoB,CAAC,IAAI,CAAC,EAAE;IAChD,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,CAAA;IACxD,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,KAAK,OAAO,KAAK,CAAA;CACtD;;;;;;;;uBAca,MAAM,eACD;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3D,WAAW;;GAqBjB;AAID,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE;IACvC,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;CAC3E,GAAG,OAAO,CAAC,CAAC,CAAC,CAiBb;AAED,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,SAAQ,iBAatF;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,oBAE/B"}
@@ -0,0 +1,77 @@
1
+ import { Zero } from '@rocicorp/zero';
2
+ import { zeroHttpFixtureMutators, zeroHttpFixtureSchema } from './fixture-schema.js';
3
+ import { startZeroHttpServer } from './server.js';
4
+ import { installHttpPullTransport } from './transport.js';
5
+ let storageID = 0;
6
+ export async function startZeroHttpHarness(opts) {
7
+ const server = await startZeroHttpServer({ seed: opts?.seed });
8
+ const baseFetch = (input, init) => globalThis.fetch(input, init);
9
+ const transportFetch = opts?.interceptFetch ? opts.interceptFetch(baseFetch) : baseFetch;
10
+ const transport = installHttpPullTransport({
11
+ origin: server.url,
12
+ fetch: transportFetch,
13
+ });
14
+ const clients = [];
15
+ return {
16
+ server,
17
+ transport,
18
+ createZero(userID, createOpts) {
19
+ const zero = new Zero({
20
+ server: server.url,
21
+ userID,
22
+ auth: `token-${userID}`,
23
+ schema: zeroHttpFixtureSchema,
24
+ kvStore: 'mem',
25
+ storageKey: createOpts?.storageKey ?? `zero-http-harness-${++storageID}`,
26
+ mutators: zeroHttpFixtureMutators,
27
+ pingTimeoutMs: createOpts?.pingTimeoutMs,
28
+ });
29
+ clients.push(zero);
30
+ return zero;
31
+ },
32
+ async close() {
33
+ await transport.pull().catch(() => { });
34
+ while (clients.length)
35
+ await clients.pop()?.close();
36
+ transport.uninstall();
37
+ await server.close();
38
+ },
39
+ };
40
+ }
41
+ // the view's listener data is Immutable<T>; results are deep-cloned to a
42
+ // plain mutable T for assertions, so the listener param is typed loosely
43
+ export function waitForComplete(view) {
44
+ return new Promise((resolve, reject) => {
45
+ // the reconnect path waits out the zero client's fixed ~5s run-loop
46
+ // backoff before a complete can arrive, so the margin must sit well
47
+ // above that (still under the 15s vitest testTimeout)
48
+ const timeout = setTimeout(() => reject(new Error('timed out waiting for complete query')), 10_000);
49
+ let cleanup = () => { };
50
+ cleanup = view.addListener((data, resultType) => {
51
+ if (resultType !== 'complete')
52
+ return;
53
+ clearTimeout(timeout);
54
+ cleanup();
55
+ resolve(JSON.parse(JSON.stringify(data)));
56
+ });
57
+ });
58
+ }
59
+ export async function eventually(assertion, timeout = 3_000) {
60
+ const started = Date.now();
61
+ let lastError;
62
+ while (Date.now() - started < timeout) {
63
+ try {
64
+ await assertion();
65
+ return;
66
+ }
67
+ catch (error) {
68
+ lastError = error;
69
+ await sleep(10);
70
+ }
71
+ }
72
+ throw lastError;
73
+ }
74
+ export function sleep(ms) {
75
+ return new Promise((resolve) => setTimeout(resolve, ms));
76
+ }
77
+ //# sourceMappingURL=test-harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-harness.js","sourceRoot":"","sources":["../../src/zero-http/test-harness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import type { PayloadCodec } from './payload-codec.js';
2
+ export type { EncryptedColumnManifest, EncryptedRowBatch, EncryptionKeyring, JSONObject, JSONPrimitive, JSONValue, PayloadCodec, PullResponse, PushMutation, PushRequest, } from './payload-codec.js';
3
+ type SocketEventType = 'open' | 'message' | 'close' | 'error';
4
+ export type QueryTransform = (name: string, args: readonly unknown[]) => unknown;
5
+ export type HttpPullTransport = {
6
+ pull(): Promise<void>;
7
+ flush(): Promise<void>;
8
+ readonly connections: number;
9
+ readonly pageID: string;
10
+ readonly transportID: string;
11
+ uninstall(): void;
12
+ };
13
+ export type WakeTokenFetchInit = RequestInit | (() => RequestInit | Promise<RequestInit>);
14
+ export declare function createWakeTokenFetcher(tokenURL: string | URL, init?: WakeTokenFetchInit, fetchImplementation?: typeof fetch): () => Promise<string>;
15
+ export type HttpPullTransportOptions = {
16
+ appID?: string;
17
+ shardNum?: number;
18
+ origin: string;
19
+ pullOrigin?: string;
20
+ pushOrigin?: string;
21
+ fetch?: typeof fetch;
22
+ pullIntervalMs?: number;
23
+ /**
24
+ * opens a notification-only socket to <origin>/wake and pulls immediately on
25
+ * any wake, demoting interval polling to a safety net. true preserves the
26
+ * bare unauthenticated URL. for an authenticated host, pass getToken: each
27
+ * socket attempt calls it afresh and appends the result as wakeToken because
28
+ * browser WebSockets cannot send headers. consumers should implement
29
+ * getToken by calling an authenticated edge route that mints a short-lived,
30
+ * namespace-scoped signed token; the consumer's authorizeWake callback must
31
+ * verify that token. mint failures leave this advisory channel down and retry
32
+ * with backoff; pulls remain the source of correctness.
33
+ */
34
+ wake?: boolean | {
35
+ getToken(): Promise<string>;
36
+ };
37
+ queryTransform?: QueryTransform;
38
+ payloadCodec?: PayloadCodec;
39
+ lifecycle?: (event: HttpPullLifecycleEvent) => void;
40
+ };
41
+ export type HttpPullLifecycleEvent = {
42
+ type: 'created' | 'listener' | 'open' | 'close' | 'failure' | 'superseded' | 'aborted' | 'push';
43
+ pageID: string;
44
+ transportID: string;
45
+ zeroInstanceID: string;
46
+ clientGroupID: string;
47
+ connectionAttemptID: string;
48
+ socketID: string;
49
+ generation: number;
50
+ activeGeneration: number;
51
+ clientID: string;
52
+ wsid: string;
53
+ timestamp: number;
54
+ attemptStartedAt: number | undefined;
55
+ attemptAgeMs: number | undefined;
56
+ listener?: SocketEventType;
57
+ code?: number;
58
+ reason?: string;
59
+ pushFrameCount?: number;
60
+ mutationCount?: number;
61
+ };
62
+ export declare function installHttpPullTransport(opts: HttpPullTransportOptions): HttpPullTransport;
63
+ export declare function ensureHttpPullTransport(opts: HttpPullTransportOptions): HttpPullTransport;
64
+ export type ZeroClientTransportPlugin = {
65
+ readonly type: 'orez-client';
66
+ install(origin: string): HttpPullTransport;
67
+ };
68
+ export declare function createZeroClientTransport(options?: Omit<HttpPullTransportOptions, 'origin'>): ZeroClientTransportPlugin;
69
+ export declare function flushHttpPullTransports(): Promise<void>;
70
+ export declare function pullHttpPullTransports(): Promise<void>;
71
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/zero-http/transport.ts"],"names":[],"mappings":"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"}