@livestore/sync-cf 0.4.0 → 0.5.0-dev.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 (134) hide show
  1. package/README.md +5 -5
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/cf-worker/do/durable-object.d.ts.map +1 -1
  4. package/dist/cf-worker/do/durable-object.js +53 -36
  5. package/dist/cf-worker/do/durable-object.js.map +1 -1
  6. package/dist/cf-worker/do/layer.d.ts +22 -18
  7. package/dist/cf-worker/do/layer.d.ts.map +1 -1
  8. package/dist/cf-worker/do/layer.js +45 -35
  9. package/dist/cf-worker/do/layer.js.map +1 -1
  10. package/dist/cf-worker/do/observability.d.ts +23 -0
  11. package/dist/cf-worker/do/observability.d.ts.map +1 -0
  12. package/dist/cf-worker/do/observability.js +52 -0
  13. package/dist/cf-worker/do/observability.js.map +1 -0
  14. package/dist/cf-worker/do/observability.test.d.ts +2 -0
  15. package/dist/cf-worker/do/observability.test.d.ts.map +1 -0
  16. package/dist/cf-worker/do/observability.test.js +204 -0
  17. package/dist/cf-worker/do/observability.test.js.map +1 -0
  18. package/dist/cf-worker/do/pull.d.ts +3 -3
  19. package/dist/cf-worker/do/pull.d.ts.map +1 -1
  20. package/dist/cf-worker/do/pull.js +19 -20
  21. package/dist/cf-worker/do/pull.js.map +1 -1
  22. package/dist/cf-worker/do/push.d.ts +16 -3
  23. package/dist/cf-worker/do/push.d.ts.map +1 -1
  24. package/dist/cf-worker/do/push.js +74 -53
  25. package/dist/cf-worker/do/push.js.map +1 -1
  26. package/dist/cf-worker/do/push.test.d.ts +2 -0
  27. package/dist/cf-worker/do/push.test.d.ts.map +1 -0
  28. package/dist/cf-worker/do/push.test.js +30 -0
  29. package/dist/cf-worker/do/push.test.js.map +1 -0
  30. package/dist/cf-worker/do/sqlite.d.ts +34 -46
  31. package/dist/cf-worker/do/sqlite.d.ts.map +1 -1
  32. package/dist/cf-worker/do/sqlite.js +2 -2
  33. package/dist/cf-worker/do/sqlite.js.map +1 -1
  34. package/dist/cf-worker/do/sync-storage.d.ts +7 -6
  35. package/dist/cf-worker/do/sync-storage.d.ts.map +1 -1
  36. package/dist/cf-worker/do/sync-storage.js +29 -17
  37. package/dist/cf-worker/do/sync-storage.js.map +1 -1
  38. package/dist/cf-worker/do/transport/do-rpc-server.d.ts +17 -2
  39. package/dist/cf-worker/do/transport/do-rpc-server.d.ts.map +1 -1
  40. package/dist/cf-worker/do/transport/do-rpc-server.js +41 -23
  41. package/dist/cf-worker/do/transport/do-rpc-server.js.map +1 -1
  42. package/dist/cf-worker/do/transport/do-rpc-server.test.d.ts +2 -0
  43. package/dist/cf-worker/do/transport/do-rpc-server.test.d.ts.map +1 -0
  44. package/dist/cf-worker/do/transport/do-rpc-server.test.js +28 -0
  45. package/dist/cf-worker/do/transport/do-rpc-server.test.js.map +1 -0
  46. package/dist/cf-worker/do/transport/http-rpc-server.d.ts +2 -2
  47. package/dist/cf-worker/do/transport/http-rpc-server.d.ts.map +1 -1
  48. package/dist/cf-worker/do/transport/http-rpc-server.js +12 -12
  49. package/dist/cf-worker/do/transport/http-rpc-server.js.map +1 -1
  50. package/dist/cf-worker/do/transport/ws-rpc-server.d.ts +9 -2
  51. package/dist/cf-worker/do/transport/ws-rpc-server.d.ts.map +1 -1
  52. package/dist/cf-worker/do/transport/ws-rpc-server.js +37 -29
  53. package/dist/cf-worker/do/transport/ws-rpc-server.js.map +1 -1
  54. package/dist/cf-worker/mod.js +3 -3
  55. package/dist/cf-worker/shared.d.ts +37 -29
  56. package/dist/cf-worker/shared.d.ts.map +1 -1
  57. package/dist/cf-worker/shared.js +14 -12
  58. package/dist/cf-worker/shared.js.map +1 -1
  59. package/dist/cf-worker/worker.d.ts +9 -9
  60. package/dist/cf-worker/worker.d.ts.map +1 -1
  61. package/dist/cf-worker/worker.js +17 -15
  62. package/dist/cf-worker/worker.js.map +1 -1
  63. package/dist/client/mod.js +3 -3
  64. package/dist/client/transport/do-rpc-client.d.ts +18 -6
  65. package/dist/client/transport/do-rpc-client.d.ts.map +1 -1
  66. package/dist/client/transport/do-rpc-client.js +112 -38
  67. package/dist/client/transport/do-rpc-client.js.map +1 -1
  68. package/dist/client/transport/do-rpc-client.test.d.ts +2 -0
  69. package/dist/client/transport/do-rpc-client.test.d.ts.map +1 -0
  70. package/dist/client/transport/do-rpc-client.test.js +268 -0
  71. package/dist/client/transport/do-rpc-client.test.js.map +1 -0
  72. package/dist/client/transport/http-rpc-client.d.ts +3 -3
  73. package/dist/client/transport/http-rpc-client.d.ts.map +1 -1
  74. package/dist/client/transport/http-rpc-client.js +48 -29
  75. package/dist/client/transport/http-rpc-client.js.map +1 -1
  76. package/dist/client/transport/rpc-client-error.d.ts +5 -0
  77. package/dist/client/transport/rpc-client-error.d.ts.map +1 -0
  78. package/dist/client/transport/rpc-client-error.js +8 -0
  79. package/dist/client/transport/rpc-client-error.js.map +1 -0
  80. package/dist/client/transport/rpc-client-error.test.d.ts +2 -0
  81. package/dist/client/transport/rpc-client-error.test.d.ts.map +1 -0
  82. package/dist/client/transport/rpc-client-error.test.js +33 -0
  83. package/dist/client/transport/rpc-client-error.test.js.map +1 -0
  84. package/dist/client/transport/ws-rpc-client.d.ts +3 -3
  85. package/dist/client/transport/ws-rpc-client.d.ts.map +1 -1
  86. package/dist/client/transport/ws-rpc-client.js +33 -23
  87. package/dist/client/transport/ws-rpc-client.js.map +1 -1
  88. package/dist/common/do-rpc-schema.d.ts +53 -41
  89. package/dist/common/do-rpc-schema.d.ts.map +1 -1
  90. package/dist/common/do-rpc-schema.js +13 -4
  91. package/dist/common/do-rpc-schema.js.map +1 -1
  92. package/dist/common/http-rpc-schema.d.ts +38 -39
  93. package/dist/common/http-rpc-schema.d.ts.map +1 -1
  94. package/dist/common/http-rpc-schema.js +6 -6
  95. package/dist/common/http-rpc-schema.js.map +1 -1
  96. package/dist/common/mod.d.ts +5 -5
  97. package/dist/common/mod.d.ts.map +1 -1
  98. package/dist/common/mod.js +7 -7
  99. package/dist/common/mod.js.map +1 -1
  100. package/dist/common/sync-message-types.d.ts +116 -133
  101. package/dist/common/sync-message-types.d.ts.map +1 -1
  102. package/dist/common/sync-message-types.js +26 -14
  103. package/dist/common/sync-message-types.js.map +1 -1
  104. package/dist/common/ws-rpc-schema.d.ts +33 -34
  105. package/dist/common/ws-rpc-schema.d.ts.map +1 -1
  106. package/dist/common/ws-rpc-schema.js +5 -5
  107. package/dist/common/ws-rpc-schema.js.map +1 -1
  108. package/package.json +42 -58
  109. package/src/cf-worker/do/durable-object.ts +70 -64
  110. package/src/cf-worker/do/layer.ts +142 -99
  111. package/src/cf-worker/do/observability.test.ts +337 -0
  112. package/src/cf-worker/do/observability.ts +121 -0
  113. package/src/cf-worker/do/pull.ts +28 -28
  114. package/src/cf-worker/do/push.test.ts +40 -0
  115. package/src/cf-worker/do/push.ts +139 -115
  116. package/src/cf-worker/do/sqlite.ts +1 -1
  117. package/src/cf-worker/do/sync-storage.ts +34 -21
  118. package/src/cf-worker/do/transport/do-rpc-server.test.ts +32 -0
  119. package/src/cf-worker/do/transport/do-rpc-server.ts +46 -35
  120. package/src/cf-worker/do/transport/http-rpc-server.ts +7 -10
  121. package/src/cf-worker/do/transport/ws-rpc-server.ts +52 -28
  122. package/src/cf-worker/shared.ts +29 -17
  123. package/src/cf-worker/worker.ts +21 -22
  124. package/src/client/transport/do-rpc-client.test.ts +411 -0
  125. package/src/client/transport/do-rpc-client.ts +175 -51
  126. package/src/client/transport/http-rpc-client.ts +66 -45
  127. package/src/client/transport/rpc-client-error.test.ts +41 -0
  128. package/src/client/transport/rpc-client-error.ts +9 -0
  129. package/src/client/transport/ws-rpc-client.ts +40 -32
  130. package/src/common/do-rpc-schema.ts +13 -3
  131. package/src/common/http-rpc-schema.ts +5 -5
  132. package/src/common/mod.ts +4 -4
  133. package/src/common/sync-message-types.ts +16 -16
  134. package/src/common/ws-rpc-schema.ts +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"durable-object.d.ts","sourceRoot":"","sources":["../../../src/cf-worker/do/durable-object.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,OAAO,EAAkC,MAAM,sBAAsB,CAAA;AAcnF,OAAO,EACL,KAAK,GAAG,EAER,KAAK,6BAA6B,EAElC,KAAK,uBAAuB,EAE7B,MAAM,cAAc,CAAA;AAmBrB,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAA;AAChD,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,OAAO,CAAC,aAAa,GAAG,CAAC,CAAA;AAEnD,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,CAAC,EAAE,6BAA6B,KAAK;IAChF,KAAK,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAAA;CAChE,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,iBAAiB,EAAE,sBA8J/B,CAAA"}
1
+ {"version":3,"file":"durable-object.d.ts","sourceRoot":"","sources":["../../../src/cf-worker/do/durable-object.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,OAAO,EAAkC,MAAM,sBAAsB,CAAA;AAInF,OAAO,EACL,KAAK,GAAG,EAER,KAAK,6BAA6B,EAElC,KAAK,uBAAuB,EAE7B,MAAM,cAAc,CAAA;AAoBrB,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAA;AAChD,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,OAAO,CAAC,aAAa,GAAG,CAAC,CAAA;AAEnD,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,CAAC,EAAE,6BAA6B,KAAK;IAChF,KAAK,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAAA;CAChE,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,iBAAiB,EAAE,sBAoJ/B,CAAA"}
@@ -2,12 +2,18 @@
2
2
  import { DurableObject } from 'cloudflare:workers';
3
3
  import { setupDurableObjectWebSocketRpc } from '@livestore/common-cf';
4
4
  import { CfDeclare } from '@livestore/common-cf/declare';
5
- import { Effect, FetchHttpClient, Layer, Logger, LogLevel, Otlp, RpcMessage, Schema, } from '@livestore/utils/effect';
6
- import { extractForwardedHeaders, matchSyncRequest, WebSocketAttachmentSchema, } from "../shared.js";
7
- import { DoCtx } from "./layer.js";
8
- import { createDoRpcHandler } from "./transport/do-rpc-server.js";
9
- import { createHttpRpcHandler } from "./transport/http-rpc-server.js";
10
- import { makeRpcServer } from "./transport/ws-rpc-server.js";
5
+ import { Effect, Layer, Logger, References, RpcMessage, Schema } from '@livestore/utils/effect';
6
+ import { extractForwardedHeaders, matchSyncRequest, WebSocketAttachmentSchema, } from '../shared.js';
7
+ import * as DoCtx from './layer.js';
8
+ import { makeObservability } from './observability.js';
9
+ import { createDoRpcHandler } from './transport/do-rpc-server.js';
10
+ import { createHttpRpcHandler } from './transport/http-rpc-server.js';
11
+ import { makeRpcServer } from './transport/ws-rpc-server.js';
12
+ const Response = CfDeclare.Response;
13
+ const WebSocketPair = CfDeclare.WebSocketPair;
14
+ const WebSocketRequestResponsePair = CfDeclare.WebSocketRequestResponsePair;
15
+ /** Module-scoped JSON encoder; keeping the sync codec out of Effect generators avoids `schemaSyncInEffect`. */
16
+ const jsonStringify = Schema.encodeSync(Schema.fromJsonString(Schema.Unknown));
11
17
  const DurableObjectBase = DurableObject;
12
18
  /**
13
19
  * Creates a Durable Object class for handling WebSocket-based sync.
@@ -47,21 +53,16 @@ const DurableObjectBase = DurableObject;
47
53
  */
48
54
  export const makeDurableObject = (options) => {
49
55
  const enabledTransports = options?.enabledTransports ?? new Set(['http', 'ws', 'do-rpc']);
50
- const Logging = Logger.consoleWithThread('SyncDo');
51
- const Observability = options?.otel?.baseUrl !== undefined
52
- ? Otlp.layer({
53
- baseUrl: options.otel.baseUrl,
54
- tracerExportInterval: 50,
55
- resource: {
56
- serviceName: options.otel.serviceName ?? 'sync-cf-do',
57
- },
58
- }).pipe(Layer.provide(FetchHttpClient.layer))
59
- : Layer.empty;
60
56
  return class SyncBackendDOBase extends DurableObjectBase {
61
57
  __DURABLE_OBJECT_BRAND = 'SyncBackendDOBase';
58
+ observability = makeObservability(options?.otel);
62
59
  constructor(ctx, env) {
63
60
  super(ctx, env);
64
- const WebSocketRpcServerLive = makeRpcServer({ doSelf: this, doOptions: options });
61
+ const WebSocketRpcServerLive = makeRpcServer({
62
+ doSelf: this,
63
+ doOptions: options,
64
+ observability: this.observability,
65
+ });
65
66
  // This registers the `webSocketMessage` and `webSocketClose` handlers
66
67
  if (enabledTransports.has('ws') === true) {
67
68
  setupDurableObjectWebSocketRpc({
@@ -72,30 +73,20 @@ export const makeDurableObject = (options) => {
72
73
  // in combination with DO hibernation
73
74
  onMessage: (request, ws) => {
74
75
  if (request._tag === 'Request' && request.tag === 'SyncWsRpc.Pull') {
75
- // Is Pull request: add requestId to pullRequestIds
76
76
  const attachment = ws.deserializeAttachment();
77
- const { pullRequestIds, ...rest } = Schema.decodeSync(WebSocketAttachmentSchema)(attachment);
77
+ const { pullRequestIds, ...rest } = Schema.decodeUnknownSync(WebSocketAttachmentSchema)(attachment);
78
78
  ws.serializeAttachment(Schema.encodeSync(WebSocketAttachmentSchema)({
79
79
  ...rest,
80
80
  pullRequestIds: [...pullRequestIds, request.id],
81
81
  }));
82
82
  }
83
- else if (request._tag === 'Interrupt') {
84
- // Is Interrupt request: remove requestId from pullRequestIds
85
- const attachment = ws.deserializeAttachment();
86
- const { pullRequestIds, ...rest } = Schema.decodeSync(WebSocketAttachmentSchema)(attachment);
87
- ws.serializeAttachment(Schema.encodeSync(WebSocketAttachmentSchema)({
88
- ...rest,
89
- pullRequestIds: pullRequestIds.filter((id) => id !== request.requestId),
90
- }));
91
- // TODO also emit `Exit` stream RPC message
92
- }
93
83
  },
94
- mainLayer: Observability,
84
+ onRequestExit: (requestId, ws) => removePullRequestId(ws, requestId),
85
+ onProtocolDefect: clearPullRequestIds,
95
86
  });
96
87
  }
97
88
  }
98
- fetch = async (request) => Effect.gen(this, function* () {
89
+ fetch = async (request) => Effect.gen({ self: this }, function* () {
99
90
  const searchParams = matchSyncRequest(request);
100
91
  if (searchParams === undefined) {
101
92
  throw new Error('No search params found in request URL');
@@ -113,11 +104,20 @@ export const makeDurableObject = (options) => {
113
104
  const { 0: client, 1: server } = new WebSocketPair();
114
105
  // Since we're using websocket hibernation, we need to remember the storeId for subsequent `webSocketMessage` calls
115
106
  // Also store forwarded headers so they're available after hibernation resume
116
- server.serializeAttachment(Schema.encodeSync(WebSocketAttachmentSchema)({ storeId, payload, pullRequestIds: [], headers }));
107
+ // Encoding known-valid domain data: an encode failure is an invariant violation (a defect),
108
+ // so `Effect.orDie` is the correct modeling. serializeAttachment takes the value synchronously,
109
+ // so resolve the encoded value first, then pass it in.
110
+ const attachment = yield* Schema.encodeEffect(WebSocketAttachmentSchema)({
111
+ storeId,
112
+ payload,
113
+ pullRequestIds: [],
114
+ headers,
115
+ }).pipe(Effect.orDie);
116
+ server.serializeAttachment(attachment);
117
117
  // See https://developers.cloudflare.com/durable-objects/examples/websocket-hibernation-server
118
118
  this.ctx.acceptWebSocket(server);
119
119
  // Ping requests are sent by Effect RPC internally
120
- this.ctx.setWebSocketAutoResponse(new WebSocketRequestResponsePair(JSON.stringify(RpcMessage.constPing), JSON.stringify(RpcMessage.constPong)));
120
+ this.ctx.setWebSocketAutoResponse(new WebSocketRequestResponsePair(jsonStringify(RpcMessage.constPing), jsonStringify(RpcMessage.constPong)));
121
121
  return new Response(null, {
122
122
  status: 101,
123
123
  webSocket: client,
@@ -129,7 +129,7 @@ export const makeDurableObject = (options) => {
129
129
  statusText: 'Bad Request',
130
130
  });
131
131
  }).pipe(Effect.tapCauseLogPretty, // Also log errors to console before catching them
132
- Effect.catchAllCause((cause) => Effect.succeed(new Response('Error', { status: 500, statusText: cause.toString() }))), Effect.withSpan('@livestore/sync-cf:durable-object:fetch'), Effect.provide(DoCtx.Default({ doSelf: this, doOptions: options, from: request })), this.runEffectAsPromise);
132
+ Effect.catchCause((cause) => Effect.succeed(new Response('Error', { status: 500, statusText: cause.toString() }))), Effect.withSpan('@livestore/sync-cf:durable-object:fetch'), Effect.provide(DoCtx.layer({ doSelf: this, doOptions: options, from: request })), this.runEffectAsPromise);
133
133
  /**
134
134
  * Handles DO <-> DO RPC calls
135
135
  */
@@ -137,7 +137,11 @@ export const makeDurableObject = (options) => {
137
137
  if (enabledTransports.has('do-rpc') === false) {
138
138
  throw new Error('Do RPC transport is not enabled (based on `options.enabledTransports`)');
139
139
  }
140
- return createDoRpcHandler({ payload, input: { doSelf: this, doOptions: options } }).pipe(Effect.withSpan('@livestore/sync-cf:durable-object:rpc'), this.runEffectAsPromise);
140
+ return createDoRpcHandler({
141
+ payload,
142
+ input: { doSelf: this, doOptions: options },
143
+ observability: this.observability,
144
+ }).pipe(Effect.withSpan('@livestore/sync-cf:durable-object:rpc'), this.runEffectAsPromise);
141
145
  }
142
146
  /**
143
147
  * Handles HTTP RPC calls
@@ -149,7 +153,20 @@ export const makeDurableObject = (options) => {
149
153
  ...(options?.http?.responseHeaders !== undefined ? { responseHeaders: options.http.responseHeaders } : {}),
150
154
  ...(forwardedHeaders !== undefined ? { forwardedHeaders } : {}),
151
155
  }).pipe(Effect.withSpan('@livestore/sync-cf:durable-object:handleHttp'));
152
- runEffectAsPromise = (effect) => effect.pipe(Effect.tapCauseLogPretty, Logger.withMinimumLogLevel(LogLevel.Debug), Effect.provide(Layer.mergeAll(Observability, Logging)), Effect.scoped, Effect.runPromise);
156
+ runEffectAsPromise = (effect) => effect.pipe(Effect.tapCauseLogPretty, Effect.annotateLogs({ thread: 'SyncDo' }), Effect.provide(Layer.mergeAll(Logger.layer([Logger.consoleStructured]), Layer.succeed(References.MinimumLogLevel, 'Debug'))), Effect.scoped, this.observability.effect, Effect.runPromise);
153
157
  };
154
158
  };
159
+ const removePullRequestId = (ws, requestId) => updatePullRequestIds(ws, (pullRequestIds) => pullRequestIds.includes(requestId) === true ? pullRequestIds.filter((id) => id !== requestId) : pullRequestIds);
160
+ const clearPullRequestIds = (ws) => updatePullRequestIds(ws, (pullRequestIds) => (pullRequestIds.length === 0 ? pullRequestIds : []));
161
+ const updatePullRequestIds = (ws, update) => {
162
+ const attachment = ws.deserializeAttachment();
163
+ const { pullRequestIds, ...rest } = Schema.decodeUnknownSync(WebSocketAttachmentSchema)(attachment);
164
+ const nextPullRequestIds = update(pullRequestIds);
165
+ if (nextPullRequestIds === pullRequestIds)
166
+ return;
167
+ ws.serializeAttachment(Schema.encodeSync(WebSocketAttachmentSchema)({
168
+ ...rest,
169
+ pullRequestIds: nextPullRequestIds,
170
+ }));
171
+ };
155
172
  //# sourceMappingURL=durable-object.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"durable-object.js","sourceRoot":"","sources":["../../../src/cf-worker/do/durable-object.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"durable-object.js","sourceRoot":"","sources":["../../../src/cf-worker/do/durable-object.ts"],"names":[],"mappings":"AAAA,mDAAmD;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAgB,8BAA8B,EAAE,MAAM,sBAAsB,CAAA;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAc,MAAM,yBAAyB,CAAA;AAE3G,OAAO,EAEL,uBAAuB,EAEvB,gBAAgB,EAEhB,yBAAyB,GAC1B,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAE5D,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAA;AACnC,MAAM,aAAa,GAAG,SAAS,CAAC,aAAa,CAAA;AAC7C,MAAM,4BAA4B,GAAG,SAAS,CAAC,4BAA4B,CAAA;AAE3E,+GAA+G;AAC/G,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;AAE9E,MAAM,iBAAiB,GAAG,aAGgD,CAAA;AAU1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA2B,CAAC,OAAO,EAAE,EAAE;IACnE,MAAM,iBAAiB,GAAG,OAAO,EAAE,iBAAiB,IAAI,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEzF,OAAO,MAAM,iBAAkB,SAAQ,iBAAiB;QACtD,sBAAsB,GAAG,mBAA4B,CAAA;QACpC,aAAa,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAEjE,YAAY,GAA+B,EAAE,GAAQ;YACnD,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YAEf,MAAM,sBAAsB,GAAG,aAAa,CAAC;gBAC3C,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,OAAO;gBAClB,aAAa,EAAE,IAAI,CAAC,aAAa;aAClC,CAAC,CAAA;YAEF,sEAAsE;YACtE,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACzC,8BAA8B,CAAC;oBAC7B,MAAM,EAAE,IAAI;oBACZ,QAAQ,EAAE,sBAAsB;oBAChC,aAAa,EAAE,WAAW;oBAC1B,oFAAoF;oBACpF,qCAAqC;oBACrC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE;wBACzB,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,KAAK,gBAAgB,EAAE,CAAC;4BACnE,MAAM,UAAU,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAA;4BAC7C,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,CAAC,UAAU,CAAC,CAAA;4BACnG,EAAE,CAAC,mBAAmB,CACpB,MAAM,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;gCAC3C,GAAG,IAAI;gCACP,cAAc,EAAE,CAAC,GAAG,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC;6BAChD,CAAC,CACH,CAAA;wBACH,CAAC;oBACH,CAAC;oBACD,aAAa,EAAE,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,SAAS,CAAC;oBACpE,gBAAgB,EAAE,mBAAmB;iBACtC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAEQ,KAAK,GAAG,KAAK,EAAE,OAAwB,EAA6B,EAAE,CAC7E,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC;YAClC,MAAM,YAAY,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;YAC9C,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;YAC1D,CAAC;YAED,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,YAAY,CAAA;YAEpD,IAAI,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/C,MAAM,IAAI,KAAK,CAAC,aAAa,SAAS,0DAA0D,CAAC,CAAA;YACnG,CAAC;YAED,mFAAmF;YACnF,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAAA;YAEzE,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YACjD,CAAC;YAED,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACvB,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,aAAa,EAAE,CAAA;gBAEpD,mHAAmH;gBACnH,6EAA6E;gBAC7E,4FAA4F;gBAC5F,gGAAgG;gBAChG,uDAAuD;gBACvD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC;oBACvE,OAAO;oBACP,OAAO;oBACP,cAAc,EAAE,EAAE;oBAClB,OAAO;iBACR,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACrB,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAA;gBAEtC,8FAA8F;gBAE9F,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;gBAEhC,kDAAkD;gBAClD,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAC/B,IAAI,4BAA4B,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAC3G,CAAA;gBAED,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACxB,MAAM,EAAE,GAAG;oBACX,SAAS,EAAE,MAAM;iBAClB,CAAC,CAAA;YACJ,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;YAE1C,OAAO,IAAI,QAAQ,CAAC,cAAc,EAAE;gBAClC,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,aAAa;aAC1B,CAAC,CAAA;QACJ,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,iBAAiB,EAAE,kDAAkD;QAC5E,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE,CAC1B,MAAM,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CACrF,EACD,MAAM,CAAC,QAAQ,CAAC,yCAAyC,CAAC,EAC1D,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAChF,IAAI,CAAC,kBAAkB,CACxB,CAAA;QAEH;;WAEG;QACH,KAAK,CAAC,GAAG,CAAC,OAAgC;YACxC,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAA;YAC3F,CAAC;YAED,OAAO,kBAAkB,CAAC;gBACxB,OAAO;gBACP,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE;gBAC3C,aAAa,EAAE,IAAI,CAAC,aAAa;aAClC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,uCAAuC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAC5F,CAAC;QAED;;;;WAIG;QACK,UAAU,GAAG,CAAC,OAAwB,EAAE,gBAAoD,EAAE,EAAE,CACtG,oBAAoB,CAAC;YACnB,OAAO;YACP,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1G,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,8CAA8C,CAAC,CAAC,CAAA;QAElE,kBAAkB,GAAG,CAAe,MAAwC,EAAc,EAAE,CAClG,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EACzC,MAAM,CAAC,OAAO,CACZ,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAC7G,EACD,MAAM,CAAC,MAAM,EACb,IAAI,CAAC,aAAa,CAAC,MAAM,EACzB,MAAM,CAAC,UAAU,CAClB,CAAA;KACJ,CAAA;AACH,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,CAAC,EAAqB,EAAE,SAA0B,EAAE,EAAE,CAChF,oBAAoB,CAAC,EAAE,EAAE,CAAC,cAAc,EAAE,EAAE,CAC1C,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,CAC/G,CAAA;AAEH,MAAM,mBAAmB,GAAG,CAAC,EAAqB,EAAE,EAAE,CACpD,oBAAoB,CAAC,EAAE,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAEnG,MAAM,oBAAoB,GAAG,CAC3B,EAAqB,EACrB,MAA0F,EAC1F,EAAE;IACF,MAAM,UAAU,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAA;IAC7C,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,CAAC,UAAU,CAAC,CAAA;IACnG,MAAM,kBAAkB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAA;IACjD,IAAI,kBAAkB,KAAK,cAAc;QAAE,OAAM;IAEjD,EAAE,CAAC,mBAAmB,CACpB,MAAM,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;QAC3C,GAAG,IAAI;QACP,cAAc,EAAE,kBAAkB;KACnC,CAAC,CACH,CAAA;AACH,CAAC,CAAA"}
@@ -1,9 +1,10 @@
1
1
  import { UnknownError } from '@livestore/common';
2
2
  import type { CfTypes } from '@livestore/common-cf';
3
3
  import { EventSequenceNumber } from '@livestore/common/schema';
4
- import { Effect } from '@livestore/utils/effect';
5
- import type { Env, MakeDurableObjectClassOptions, RpcSubscription } from '../shared.ts';
6
- export interface DoCtxInput {
4
+ import { Context, Effect, Layer, Semaphore } from '@livestore/utils/effect';
5
+ import type { Env, MakeDurableObjectClassOptions } from '../shared.ts';
6
+ import { type SyncStorage } from './sync-storage.ts';
7
+ export interface Options {
7
8
  doSelf: CfTypes.DurableObject & {
8
9
  ctx: CfTypes.DurableObjectState;
9
10
  env: Env;
@@ -13,22 +14,25 @@ export interface DoCtxInput {
13
14
  storeId: string;
14
15
  };
15
16
  }
16
- declare const DoCtx_base: Effect.Service.Class<DoCtx, "DoCtx", {
17
- readonly effect: (args_0: DoCtxInput) => Effect.Effect<{
18
- storeId: string;
19
- backendId: string;
20
- currentHeadRef: {
21
- current: number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">;
22
- };
23
- updateCurrentHead: (currentHead: EventSequenceNumber.Global.Type) => void;
24
- storage: import("./sync-storage.ts").SyncStorage;
25
- doOptions: MakeDurableObjectClassOptions | undefined;
26
- env: Env;
27
- ctx: CfTypes.DurableObjectState<unknown>;
28
- rpcSubscriptions: Map<string, RpcSubscription>;
29
- }, UnknownError, never>;
30
- }>;
17
+ export type DoCtxInput = Options;
18
+ export interface Service {
19
+ readonly storeId: string;
20
+ readonly backendId: string;
21
+ readonly currentHeadRef: {
22
+ current: EventSequenceNumber.Global.Type;
23
+ };
24
+ readonly updateCurrentHead: (currentHead: EventSequenceNumber.Global.Type) => void;
25
+ /** Serializes push admission across concurrent RPC fibers for this Durable Object instance. */
26
+ readonly pushSemaphore: Semaphore.Semaphore;
27
+ readonly storage: SyncStorage;
28
+ readonly doOptions: MakeDurableObjectClassOptions | undefined;
29
+ readonly env: Env;
30
+ readonly ctx: CfTypes.DurableObjectState;
31
+ }
32
+ declare const DoCtx_base: Context.ServiceClass<DoCtx, "@livestore/sync-cf/DoCtx", Service>;
31
33
  export declare class DoCtx extends DoCtx_base {
32
34
  }
35
+ export declare const make: (args_0: Options) => Effect.Effect<Service, UnknownError, never>;
36
+ export declare const layer: (options: Options) => Layer.Layer<DoCtx, UnknownError, never>;
33
37
  export {};
34
38
  //# sourceMappingURL=layer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"layer.d.ts","sourceRoot":"","sources":["../../../src/cf-worker/do/layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAS,MAAM,0BAA0B,CAAA;AAErE,OAAO,EAAE,MAAM,EAAa,MAAM,yBAAyB,CAAA;AAG3D,OAAO,KAAK,EAAE,GAAG,EAAE,6BAA6B,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAMvF,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC,aAAa,GAAG;QAC9B,GAAG,EAAE,OAAO,CAAC,kBAAkB,CAAA;QAC/B,GAAG,EAAE,GAAG,CAAA;KACT,CAAA;IACD,SAAS,EAAE,6BAA6B,GAAG,SAAS,CAAA;IACpD,IAAI,EAAE,OAAO,CAAC,OAAO,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC5C;;;;;;;;yCAmE6C,mBAAmB,CAAC,MAAM,CAAC,IAAI;;;;;;;;AAjE7E,qBAAa,KAAM,SAAQ,UA0GzB;CAAG"}
1
+ {"version":3,"file":"layer.d.ts","sourceRoot":"","sources":["../../../src/cf-worker/do/layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAS,MAAM,0BAA0B,CAAA;AAErE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAa,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAGtF,OAAO,KAAK,EAAE,GAAG,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAA;AAEtE,OAAO,EAAmC,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAKrF,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,OAAO,CAAC,aAAa,GAAG;QAC9B,GAAG,EAAE,OAAO,CAAC,kBAAkB,CAAA;QAC/B,GAAG,EAAE,GAAG,CAAA;KACT,CAAA;IACD,SAAS,EAAE,6BAA6B,GAAG,SAAS,CAAA;IACpD,IAAI,EAAE,OAAO,CAAC,OAAO,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC5C;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,CAAA;AAEhC,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,cAAc,EAAE;QAAE,OAAO,EAAE,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAA;KAAE,CAAA;IACrE,QAAQ,CAAC,iBAAiB,EAAE,CAAC,WAAW,EAAE,mBAAmB,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAA;IAClF,+FAA+F;IAC/F,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,SAAS,CAAA;IAC3C,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,SAAS,EAAE,6BAA6B,GAAG,SAAS,CAAA;IAC7D,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IACjB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,kBAAkB,CAAA;CACzC;;AAED,qBAAa,KAAM,SAAQ,UAA6D;CAAG;AAO3F,eAAO,MAAM,IAAI,kEAqGhB,CAAA;AAED,eAAO,MAAM,KAAK,YAAa,OAAO,4CAAuC,CAAA"}
@@ -1,15 +1,26 @@
1
1
  import { UnknownError } from '@livestore/common';
2
2
  import { EventSequenceNumber, State } from '@livestore/common/schema';
3
3
  import { shouldNeverHappen } from '@livestore/utils';
4
- import { Effect, Predicate } from '@livestore/utils/effect';
4
+ import { Context, Effect, Layer, Predicate, Semaphore } from '@livestore/utils/effect';
5
5
  import { nanoid } from '@livestore/utils/nanoid';
6
- import { contextTable, eventlogTable } from "./sqlite.js";
7
- import { makeStorage } from "./sync-storage.js";
6
+ import { contextTable, eventlogTable } from './sqlite.js';
7
+ import { makeStorage } from './sync-storage.js';
8
8
  const CacheSymbol = Symbol('Cache');
9
- export class DoCtx extends Effect.Service()('DoCtx', {
10
- effect: Effect.fn(function* ({ doSelf, doOptions, from }) {
11
- if (doSelf[CacheSymbol] !== undefined) {
12
- return doSelf[CacheSymbol];
9
+ const InitializationSemaphoreSymbol = Symbol('InitializationSemaphore');
10
+ export class DoCtx extends Context.Service()('@livestore/sync-cf/DoCtx') {
11
+ }
12
+ export const make = Effect.fn(function* ({ doSelf, doOptions, from }) {
13
+ const cacheHost = doSelf;
14
+ if (cacheHost[CacheSymbol] !== undefined) {
15
+ return DoCtx.of(cacheHost[CacheSymbol]);
16
+ }
17
+ // Request layers can be constructed concurrently during the first RPCs to a DO.
18
+ // Install this lock synchronously so every contender shares the same initializer.
19
+ const initializationSemaphore = cacheHost[InitializationSemaphoreSymbol] ?? Semaphore.makeUnsafe(1);
20
+ cacheHost[InitializationSemaphoreSymbol] = initializationSemaphore;
21
+ return yield* initializationSemaphore.withPermits(1)(Effect.gen(function* () {
22
+ if (cacheHost[CacheSymbol] !== undefined) {
23
+ return DoCtx.of(cacheHost[CacheSymbol]);
13
24
  }
14
25
  const getStoreId = (from) => {
15
26
  if (Predicate.hasProperty(from, 'url') === true) {
@@ -19,23 +30,7 @@ export class DoCtx extends Effect.Service()('DoCtx', {
19
30
  return from.storeId;
20
31
  };
21
32
  const storeId = getStoreId(from);
22
- // Resolve storage engine
23
- const makeEngine = Effect.gen(function* () {
24
- const opt = doOptions?.storage;
25
- if (opt?._tag === 'd1') {
26
- const db = doSelf.env[opt.binding];
27
- if (db == null) {
28
- return yield* UnknownError.make({ cause: new Error(`D1 binding '${opt.binding}' not found on env`) });
29
- }
30
- return { _tag: 'd1', db };
31
- }
32
- else if (opt?._tag === 'do-sqlite' || opt === undefined) {
33
- return { _tag: 'do-sqlite' };
34
- }
35
- else
36
- return shouldNeverHappen(`Invalid storage engine`, opt);
37
- });
38
- const engine = yield* makeEngine;
33
+ const engine = yield* resolveStorageEngine(doOptions?.storage, doSelf.env);
39
34
  const storage = makeStorage(doSelf.ctx, storeId, engine);
40
35
  // Initialize database tables
41
36
  {
@@ -57,35 +52,50 @@ export class DoCtx extends Effect.Service()('DoCtx', {
57
52
  .exec(`SELECT * FROM "${contextTable.sqliteDef.name}" WHERE storeId = ?`, storeId)
58
53
  .toArray()[0];
59
54
  const currentHeadRef = { current: storageRow?.currentHead ?? EventSequenceNumber.Client.ROOT.global };
60
- // TODO do concistency check with eventlog table to make sure the head is consistent
55
+ const pushSemaphore = yield* Semaphore.make(1);
56
+ // TODO: Reconcile this persisted head with the event log's highest sequence number.
57
+ // D1 event batches and this DO-local context row cannot be updated atomically, so a
58
+ // failure between those writes can leave push admission using a stale head after restart.
61
59
  // Should be the same backendId for lifetime of the Durable Object
62
60
  const backendId = storageRow?.backendId ?? nanoid();
63
61
  const updateCurrentHead = (currentHead) => {
64
62
  doSelf.ctx.storage.sql.exec(`INSERT OR REPLACE INTO "${contextTable.sqliteDef.name}" (storeId, currentHead, backendId) VALUES (?, ?, ?)`, storeId, currentHead, backendId);
65
63
  currentHeadRef.current = currentHead;
66
- // I still don't know why we need to re-assign this ref to the `doSelf` object but somehow this seems to be needed 😵‍💫
67
- // @ts-expect-error
68
- doSelf[CacheSymbol].currentHeadRef = { current: currentHead };
69
64
  };
70
- const rpcSubscriptions = new Map();
71
65
  const storageCache = {
72
66
  storeId,
73
67
  backendId,
74
68
  currentHeadRef,
75
69
  updateCurrentHead,
70
+ pushSemaphore,
76
71
  storage,
77
72
  doOptions,
78
73
  env: doSelf.env,
79
74
  ctx: doSelf.ctx,
80
- rpcSubscriptions,
81
75
  };
82
- doSelf[CacheSymbol] = storageCache;
76
+ cacheHost[CacheSymbol] = storageCache;
83
77
  // Set initial current head to root
84
78
  if (storageRow === undefined) {
85
79
  updateCurrentHead(EventSequenceNumber.Client.ROOT.global);
86
80
  }
87
- return storageCache;
88
- }, UnknownError.mapToUnknownError, Effect.withSpan('@livestore/sync-cf:durable-object:makeDoCtx')),
89
- }) {
90
- }
81
+ return DoCtx.of(storageCache);
82
+ }));
83
+ }, UnknownError.mapToUnknownError, Effect.withSpan('@livestore/sync-cf:durable-object:makeDoCtx'));
84
+ export const layer = (options) => Layer.effect(DoCtx, make(options));
85
+ /** Resolves storage configuration into the concrete database handle used at runtime. */
86
+ const resolveStorageEngine = Effect.fn(function* (storageOption, env) {
87
+ if (storageOption === undefined || storageOption._tag === 'do-sqlite') {
88
+ return { _tag: 'do-sqlite' };
89
+ }
90
+ if (storageOption._tag === 'd1') {
91
+ const db = env[storageOption.binding];
92
+ if (db === undefined) {
93
+ return yield* UnknownError.make({
94
+ cause: new Error(`D1 binding '${storageOption.binding}' not found on env`),
95
+ });
96
+ }
97
+ return { _tag: 'd1', db };
98
+ }
99
+ return shouldNeverHappen(`Invalid storage engine`, storageOption);
100
+ });
91
101
  //# sourceMappingURL=layer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layer.js","sourceRoot":"","sources":["../../../src/cf-worker/do/layer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layer.js","sourceRoot":"","sources":["../../../src/cf-worker/do/layer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { BackendIdMismatchError, ServerAheadError, UnknownError } from '@livestore/common';
2
+ import { Effect, Option, Stream, type Tracer } from '@livestore/utils/effect';
3
+ import type { SyncBackendOtelOptions } from '../shared.ts';
4
+ /** Keep exporter ownership separate from sync scopes: their finalizers must not delay acknowledgments. */
5
+ export declare const makeObservability: (options: SyncBackendOtelOptions | undefined) => {
6
+ effect: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
7
+ stream: <A, E, R>(stream: Stream.Stream<A, E, R>) => Stream.Stream<A, E, R>;
8
+ };
9
+ /**
10
+ * Effect RPC's envelope lives until a live subscription closes and may never be exported.
11
+ * Give finite sync work its own exported boundary, attached to a sampled caller or a new backend root.
12
+ */
13
+ export declare const rpcSpanOptions: Effect.Effect<Tracer.SpanOptions | {
14
+ root: boolean;
15
+ }, never, never>;
16
+ export declare const makeRpcSpanOptions: (parent: Option.Option<Tracer.AnySpan>) => Tracer.SpanOptions;
17
+ /** Keep expected sync-recovery results out of error telemetry while preserving the typed failure for RPC callers. */
18
+ export declare const withRpcSpan: <A, E extends SyncRpcError, R>(effect: Effect.Effect<A, E, R>, name: string, options?: Tracer.SpanOptions) => Effect.Effect<A, E, R>;
19
+ /** Stream equivalent of `withRpcSpan`; expected failures are restored after the boundary span ends successfully. */
20
+ export declare const withRpcStreamSpan: <A, E extends SyncRpcError, R>(stream: Stream.Stream<A, E, R>, name: string, options?: Tracer.SpanOptions) => Stream.Stream<A, E, R>;
21
+ type SyncRpcError = UnknownError | ServerAheadError | BackendIdMismatchError;
22
+ export {};
23
+ //# sourceMappingURL=observability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../../../src/cf-worker/do/observability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC/F,OAAO,EACL,MAAM,EAGN,MAAM,EAKN,MAAM,EACN,KAAK,MAAM,EACZ,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAE1D,0GAA0G;AAC1G,eAAO,MAAM,iBAAiB,YAAa,sBAAsB,GAAG,SAAS;IAUzE,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEzE,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAGnD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc;;gBAG1B,CAAA;AAED,eAAO,MAAM,kBAAkB,WAAY,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAG,MAAM,CAAC,WAOhF,CAAA;AAEF,qHAAqH;AACrH,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,CAAC,SAAS,YAAY,EAAE,CAAC,UAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QACxB,MAAM,YACF,MAAM,CAAC,WAAW,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAMrB,CAAA;AAEH,oHAAoH;AACpH,eAAO,MAAM,iBAAiB,GAAI,CAAC,EAAE,CAAC,SAAS,YAAY,EAAE,CAAC,UACpD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QACxB,MAAM,YACF,MAAM,CAAC,WAAW,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAqBrB,CAAA;AAEH,KAAK,YAAY,GAAG,YAAY,GAAG,gBAAgB,GAAG,sBAAsB,CAAA"}
@@ -0,0 +1,52 @@
1
+ import { Effect, FetchHttpClient, Layer, Option, Otlp, Ref, Result, Scope, Stream, } from '@livestore/utils/effect';
2
+ /** Keep exporter ownership separate from sync scopes: their finalizers must not delay acknowledgments. */
3
+ export const makeObservability = (options) => {
4
+ const layer = makeLayer(options);
5
+ const backgroundLayer = Layer.effectContext(Effect.acquireRelease(Scope.make(), (scope, exit) => Scope.close(scope, exit).pipe(runInBackground)).pipe(Effect.flatMap((scope) => Layer.buildWithScope(layer, scope))));
6
+ return {
7
+ effect: (effect) => options === undefined ? effect : effect.pipe(Effect.provide(backgroundLayer, { local: true })),
8
+ stream: (stream) => options === undefined ? stream : stream.pipe(Stream.provide(backgroundLayer, { local: true })),
9
+ };
10
+ };
11
+ /**
12
+ * Effect RPC's envelope lives until a live subscription closes and may never be exported.
13
+ * Give finite sync work its own exported boundary, attached to a sampled caller or a new backend root.
14
+ */
15
+ export const rpcSpanOptions = Effect.currentSpan.pipe(Effect.map((span) => makeRpcSpanOptions(span.parent)), Effect.catchTag('NoSuchElementError', () => Effect.succeed({ root: true })));
16
+ export const makeRpcSpanOptions = (parent) => ({
17
+ // Client runtimes use an unsampled no-op span by default. Parenting to it would suppress backend-only telemetry.
18
+ parent: parent.pipe(Option.filter((span) => span.sampled), Option.getOrUndefined),
19
+ root: true,
20
+ });
21
+ /** Keep expected sync-recovery results out of error telemetry while preserving the typed failure for RPC callers. */
22
+ export const withRpcSpan = (effect, name, options) => effect.pipe(Effect.map(Result.succeed), Effect.catchIf(isExpectedSyncError, (error) => Effect.succeed(Result.fail(error))), Effect.withSpan(name, options), Effect.flatMap(resultToEffect));
23
+ /** Stream equivalent of `withRpcSpan`; expected failures are restored after the boundary span ends successfully. */
24
+ export const withRpcStreamSpan = (stream, name, options) => Stream.unwrap(Effect.gen(function* () {
25
+ const expectedError = yield* Ref.make(Option.none());
26
+ const instrumented = stream.pipe(Stream.catchIf(isExpectedSyncError, (error) => Stream.fromEffect(Ref.set(expectedError, Option.some(error))).pipe(Stream.drain)), Stream.withSpan(name, options));
27
+ const restoreExpectedError = Stream.fromEffect(Ref.get(expectedError)).pipe(Stream.flatMap(Option.match({
28
+ onNone: () => Stream.empty,
29
+ onSome: Stream.fail,
30
+ })));
31
+ return instrumented.pipe(Stream.concat(restoreExpectedError));
32
+ }));
33
+ const makeLayer = (options) => {
34
+ if (isTracerLayer(options) === true)
35
+ return options;
36
+ if (options?.baseUrl !== undefined) {
37
+ return Otlp.layerJson({
38
+ baseUrl: options.baseUrl,
39
+ tracerExportInterval: 50,
40
+ shutdownTimeout: 3000,
41
+ resource: { serviceName: options.serviceName ?? 'sync-cf-do' },
42
+ }).pipe(Layer.provide(FetchHttpClient.layer));
43
+ }
44
+ return Layer.empty;
45
+ };
46
+ /** DOs stay active for pending work; no shutdown hook or connection-wide timer is required. */
47
+ const runInBackground = (effect) => effect.pipe(Effect.ignoreCause, Effect.withTracerEnabled(false), Effect.forkDetach, Effect.asVoid);
48
+ /** Preserve the known Layer requirements when narrowing the configuration union. */
49
+ const isTracerLayer = (options) => Layer.isLayer(options);
50
+ const isExpectedSyncError = (error) => error._tag === 'ServerAheadError' || error._tag === 'BackendIdMismatchError';
51
+ const resultToEffect = (result) => Result.isSuccess(result) === true ? Effect.succeed(result.success) : Effect.fail(result.failure);
52
+ //# sourceMappingURL=observability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability.js","sourceRoot":"","sources":["../../../src/cf-worker/do/observability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=observability.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability.test.d.ts","sourceRoot":"","sources":["../../../src/cf-worker/do/observability.test.ts"],"names":[],"mappings":""}