@powersync/service-module-mongodb-storage 0.19.0 → 0.21.0

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 (176) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/dist/storage/MongoBucketStorage.d.ts +31 -3
  3. package/dist/storage/MongoBucketStorage.js +365 -206
  4. package/dist/storage/MongoBucketStorage.js.map +1 -1
  5. package/dist/storage/implementation/MongoBucketBatch.d.ts +15 -4
  6. package/dist/storage/implementation/MongoBucketBatch.js +35 -9
  7. package/dist/storage/implementation/MongoBucketBatch.js.map +1 -1
  8. package/dist/storage/implementation/MongoCompactor.d.ts +19 -79
  9. package/dist/storage/implementation/MongoCompactor.js +27 -238
  10. package/dist/storage/implementation/MongoCompactor.js.map +1 -1
  11. package/dist/storage/implementation/MongoParameterCompactor.d.ts +83 -10
  12. package/dist/storage/implementation/MongoParameterCompactor.js +309 -96
  13. package/dist/storage/implementation/MongoParameterCompactor.js.map +1 -1
  14. package/dist/storage/implementation/MongoParsedSyncConfigSet.d.ts +9 -1
  15. package/dist/storage/implementation/MongoParsedSyncConfigSet.js +29 -0
  16. package/dist/storage/implementation/MongoParsedSyncConfigSet.js.map +1 -1
  17. package/dist/storage/implementation/MongoPersistedSyncConfigContent.js +4 -2
  18. package/dist/storage/implementation/MongoPersistedSyncConfigContent.js.map +1 -1
  19. package/dist/storage/implementation/MongoStorageProvider.js +3 -1
  20. package/dist/storage/implementation/MongoStorageProvider.js.map +1 -1
  21. package/dist/storage/implementation/MongoSyncBucketStorage.d.ts +27 -11
  22. package/dist/storage/implementation/MongoSyncBucketStorage.js +78 -31
  23. package/dist/storage/implementation/MongoSyncBucketStorage.js.map +1 -1
  24. package/dist/storage/implementation/MongoSyncRulesLock.js +21 -9
  25. package/dist/storage/implementation/MongoSyncRulesLock.js.map +1 -1
  26. package/dist/storage/implementation/MongoWriteCheckpointAPI.d.ts +9 -7
  27. package/dist/storage/implementation/MongoWriteCheckpointAPI.js +7 -28
  28. package/dist/storage/implementation/MongoWriteCheckpointAPI.js.map +1 -1
  29. package/dist/storage/implementation/SyncRuleStateUpdate.d.ts +11 -5
  30. package/dist/storage/implementation/SyncRuleStateUpdate.js +14 -6
  31. package/dist/storage/implementation/SyncRuleStateUpdate.js.map +1 -1
  32. package/dist/storage/implementation/common/MongoSyncBucketStorageCheckpoint.d.ts +22 -2
  33. package/dist/storage/implementation/common/PersistedBatch.d.ts +27 -0
  34. package/dist/storage/implementation/common/PersistedBatch.js +43 -2
  35. package/dist/storage/implementation/common/PersistedBatch.js.map +1 -1
  36. package/dist/storage/implementation/db.d.ts +4 -1
  37. package/dist/storage/implementation/db.js +14 -1
  38. package/dist/storage/implementation/db.js.map +1 -1
  39. package/dist/storage/implementation/models.d.ts +35 -0
  40. package/dist/storage/implementation/models.js.map +1 -1
  41. package/dist/storage/implementation/v1/MongoBucketBatchV1.d.ts +6 -0
  42. package/dist/storage/implementation/v1/MongoBucketBatchV1.js +80 -84
  43. package/dist/storage/implementation/v1/MongoBucketBatchV1.js.map +1 -1
  44. package/dist/storage/implementation/v1/MongoCompactorV1.d.ts +36 -5
  45. package/dist/storage/implementation/v1/MongoCompactorV1.js +229 -8
  46. package/dist/storage/implementation/v1/MongoCompactorV1.js.map +1 -1
  47. package/dist/storage/implementation/v1/MongoParameterCompactorV1.d.ts +16 -2
  48. package/dist/storage/implementation/v1/MongoParameterCompactorV1.js +20 -9
  49. package/dist/storage/implementation/v1/MongoParameterCompactorV1.js.map +1 -1
  50. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.d.ts +18 -11
  51. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js +65 -16
  52. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js.map +1 -1
  53. package/dist/storage/implementation/v1/models.js +1 -0
  54. package/dist/storage/implementation/v1/models.js.map +1 -1
  55. package/dist/storage/implementation/v3/CompactionLease.d.ts +50 -0
  56. package/dist/storage/implementation/v3/CompactionLease.js +131 -0
  57. package/dist/storage/implementation/v3/CompactionLease.js.map +1 -0
  58. package/dist/storage/implementation/v3/MongoBucketBatchV3.d.ts +8 -1
  59. package/dist/storage/implementation/v3/MongoBucketBatchV3.js +120 -39
  60. package/dist/storage/implementation/v3/MongoBucketBatchV3.js.map +1 -1
  61. package/dist/storage/implementation/v3/MongoCompactorV3.d.ts +77 -25
  62. package/dist/storage/implementation/v3/MongoCompactorV3.js +585 -141
  63. package/dist/storage/implementation/v3/MongoCompactorV3.js.map +1 -1
  64. package/dist/storage/implementation/v3/MongoParameterCompactorV3.d.ts +18 -0
  65. package/dist/storage/implementation/v3/MongoParameterCompactorV3.js +23 -0
  66. package/dist/storage/implementation/v3/MongoParameterCompactorV3.js.map +1 -0
  67. package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.d.ts +2 -15
  68. package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.js +60 -92
  69. package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.js.map +1 -1
  70. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.d.ts +19 -9
  71. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js +91 -31
  72. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js.map +1 -1
  73. package/dist/storage/implementation/v3/MongoWriteCheckpointAPIV3.d.ts +26 -0
  74. package/dist/storage/implementation/v3/MongoWriteCheckpointAPIV3.js +82 -0
  75. package/dist/storage/implementation/v3/MongoWriteCheckpointAPIV3.js.map +1 -0
  76. package/dist/storage/implementation/v3/PersistedBatchV3.d.ts +2 -0
  77. package/dist/storage/implementation/v3/PersistedBatchV3.js +52 -11
  78. package/dist/storage/implementation/v3/PersistedBatchV3.js.map +1 -1
  79. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.d.ts +12 -2
  80. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js +42 -3
  81. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js.map +1 -1
  82. package/dist/storage/implementation/v3/bucket-format.js +2 -0
  83. package/dist/storage/implementation/v3/bucket-format.js.map +1 -1
  84. package/dist/storage/implementation/v3/compact-utils.d.ts +107 -0
  85. package/dist/storage/implementation/v3/compact-utils.js +216 -0
  86. package/dist/storage/implementation/v3/compact-utils.js.map +1 -0
  87. package/dist/storage/implementation/v3/compaction-constants.d.ts +5 -0
  88. package/dist/storage/implementation/v3/compaction-constants.js +6 -0
  89. package/dist/storage/implementation/v3/compaction-constants.js.map +1 -0
  90. package/dist/storage/implementation/v3/models.d.ts +89 -5
  91. package/dist/storage/implementation/v3/models.js.map +1 -1
  92. package/dist/storage/implementation/v3/object-storage/BucketDataObjectStorage.d.ts +7 -8
  93. package/dist/storage/implementation/v3/object-storage/BucketDataObjectStorage.js +8 -4
  94. package/dist/storage/implementation/v3/object-storage/BucketDataObjectStorage.js.map +1 -1
  95. package/dist/storage/implementation/v3/object-storage/ObjectStorage.d.ts +14 -11
  96. package/dist/storage/implementation/v3/object-storage/ObjectStorageLifecycle.d.ts +3 -5
  97. package/dist/storage/implementation/v3/object-storage/ObjectStorageLifecycle.js +10 -2
  98. package/dist/storage/implementation/v3/object-storage/ObjectStorageLifecycle.js.map +1 -1
  99. package/dist/storage/implementation/v3/object-storage/ObjectStorageUsage.d.ts +37 -0
  100. package/dist/storage/implementation/v3/object-storage/ObjectStorageUsage.js +167 -0
  101. package/dist/storage/implementation/v3/object-storage/ObjectStorageUsage.js.map +1 -0
  102. package/dist/storage/implementation/v3/object-storage/S3ObjectStorage.d.ts +37 -12
  103. package/dist/storage/implementation/v3/object-storage/S3ObjectStorage.js +177 -23
  104. package/dist/storage/implementation/v3/object-storage/S3ObjectStorage.js.map +1 -1
  105. package/dist/storage/implementation/v3/source-table-utils.d.ts +15 -7
  106. package/dist/storage/implementation/v3/source-table-utils.js +49 -57
  107. package/dist/storage/implementation/v3/source-table-utils.js.map +1 -1
  108. package/dist/storage/storage-index.d.ts +2 -1
  109. package/dist/storage/storage-index.js +1 -0
  110. package/dist/storage/storage-index.js.map +1 -1
  111. package/dist/types/types.d.ts +23 -1
  112. package/dist/types/types.js +16 -7
  113. package/dist/types/types.js.map +1 -1
  114. package/dist/utils/util.js +3 -1
  115. package/dist/utils/util.js.map +1 -1
  116. package/package.json +10 -9
  117. package/src/storage/MongoBucketStorage.ts +495 -268
  118. package/src/storage/implementation/MongoBucketBatch.ts +54 -14
  119. package/src/storage/implementation/MongoCompactor.ts +35 -346
  120. package/src/storage/implementation/MongoParameterCompactor.ts +388 -102
  121. package/src/storage/implementation/MongoParsedSyncConfigSet.ts +34 -0
  122. package/src/storage/implementation/MongoPersistedSyncConfigContent.ts +4 -2
  123. package/src/storage/implementation/MongoStorageProvider.ts +3 -1
  124. package/src/storage/implementation/MongoSyncBucketStorage.ts +114 -40
  125. package/src/storage/implementation/MongoSyncRulesLock.ts +22 -9
  126. package/src/storage/implementation/MongoWriteCheckpointAPI.ts +12 -44
  127. package/src/storage/implementation/SyncRuleStateUpdate.ts +13 -6
  128. package/src/storage/implementation/common/MongoSyncBucketStorageCheckpoint.ts +24 -2
  129. package/src/storage/implementation/common/PersistedBatch.ts +54 -2
  130. package/src/storage/implementation/db.ts +21 -2
  131. package/src/storage/implementation/models.ts +38 -0
  132. package/src/storage/implementation/v1/MongoBucketBatchV1.ts +107 -96
  133. package/src/storage/implementation/v1/MongoCompactorV1.ts +303 -19
  134. package/src/storage/implementation/v1/MongoParameterCompactorV1.ts +25 -9
  135. package/src/storage/implementation/v1/MongoSyncBucketStorageV1.ts +87 -27
  136. package/src/storage/implementation/v1/models.ts +1 -0
  137. package/src/storage/implementation/v3/CompactionLease.ts +152 -0
  138. package/src/storage/implementation/v3/MongoBucketBatchV3.ts +159 -42
  139. package/src/storage/implementation/v3/MongoCompactorV3.ts +744 -190
  140. package/src/storage/implementation/v3/MongoParameterCompactorV3.ts +34 -0
  141. package/src/storage/implementation/v3/MongoStoppedSyncConfigCleanup.ts +100 -109
  142. package/src/storage/implementation/v3/MongoSyncBucketStorageV3.ts +111 -41
  143. package/src/storage/implementation/v3/MongoWriteCheckpointAPIV3.ts +111 -0
  144. package/src/storage/implementation/v3/PersistedBatchV3.ts +57 -12
  145. package/src/storage/implementation/v3/VersionedPowerSyncMongoV3.ts +55 -4
  146. package/src/storage/implementation/v3/bucket-format.ts +2 -0
  147. package/src/storage/implementation/v3/compact-utils.ts +320 -0
  148. package/src/storage/implementation/v3/compaction-constants.ts +5 -0
  149. package/src/storage/implementation/v3/models.ts +96 -3
  150. package/src/storage/implementation/v3/object-storage/BucketDataObjectStorage.ts +16 -8
  151. package/src/storage/implementation/v3/object-storage/ObjectStorage.ts +20 -5
  152. package/src/storage/implementation/v3/object-storage/ObjectStorageLifecycle.ts +15 -4
  153. package/src/storage/implementation/v3/object-storage/ObjectStorageUsage.ts +230 -0
  154. package/src/storage/implementation/v3/object-storage/S3ObjectStorage.ts +257 -27
  155. package/src/storage/implementation/v3/source-table-utils.ts +82 -76
  156. package/src/storage/storage-index.ts +2 -0
  157. package/src/types/types.ts +24 -7
  158. package/src/utils/util.ts +3 -1
  159. package/test/src/__snapshots__/storage.test.ts.snap +25 -0
  160. package/test/src/__snapshots__/storage_sync.test.ts.snap +605 -16
  161. package/test/src/cleanup-stopped-sync-configs.test.ts +40 -13
  162. package/test/src/compact-utils.test.ts +226 -0
  163. package/test/src/helpers/MemoryObjectStorage.ts +14 -6
  164. package/test/src/object_storage_usage.test.ts +255 -0
  165. package/test/src/parameter_compacting_v1.test.ts +120 -0
  166. package/test/src/parameter_compacting_v3.test.ts +192 -0
  167. package/test/src/parameter_compaction_fence.test.ts +276 -0
  168. package/test/src/storage.test.ts +273 -22
  169. package/test/src/storage_compacting.test.ts +714 -244
  170. package/test/src/storage_s3_checksums.test.ts +3 -4
  171. package/test/src/storage_s3_compaction_lifecycle.test.ts +138 -12
  172. package/test/src/storage_s3_reading.test.ts +243 -1
  173. package/test/src/storage_s3_writing.test.ts +1 -0
  174. package/test/src/storage_sync.test.ts +365 -41
  175. package/test/src/util.ts +1 -1
  176. package/tsconfig.tsbuildinfo +1 -1
@@ -1,5 +1,29 @@
1
1
  import { S3Client } from '@aws-sdk/client-s3';
2
- import { type ObjectStorage, type ObjectStoragePutMetadata } from './ObjectStorage.js';
2
+ import { type DefaultsMode, type ResolvedDefaultsMode } from '@smithy/core/client';
3
+ import { type ObjectStorage, type ObjectStorageOperationOptions, type ObjectStoragePutMetadata } from './ObjectStorage.js';
4
+ export interface S3TimeoutProfile {
5
+ /**
6
+ * Per attempt: establishing the connection, including waiting for a socket from the pool.
7
+ */
8
+ connectionTimeoutMs: number;
9
+ /**
10
+ * Per attempt: from starting the request until the response headers are received. For uploads
11
+ * this includes sending the body.
12
+ */
13
+ requestTimeoutMs: number;
14
+ /**
15
+ * The complete operation, including SDK retries and streaming the response body.
16
+ *
17
+ * The SDK timeouts above stop applying once the response headers are received, so this is what
18
+ * bounds how long a single operation can occupy a concurrency slot.
19
+ */
20
+ operationTimeoutMs: number;
21
+ /**
22
+ * Waiting for a concurrency slot, before the operation itself starts.
23
+ */
24
+ queueTimeoutMs: number;
25
+ }
26
+ export declare function resolveTimeoutProfile(mode: ResolvedDefaultsMode): S3TimeoutProfile;
3
27
  export interface S3ObjectStorageOptions {
4
28
  bucket: string;
5
29
  region?: string;
@@ -9,6 +33,12 @@ export interface S3ObjectStorageOptions {
9
33
  accessKeyId?: string;
10
34
  secretAccessKey?: string;
11
35
  concurrencyLimit?: number;
36
+ /**
37
+ * AWS defaults mode, used as the baseline for the request timeouts.
38
+ *
39
+ * Defaults to the AWS_DEFAULTS_MODE environment variable. `auto` is treated as `standard`.
40
+ */
41
+ defaultsMode?: DefaultsMode;
12
42
  }
13
43
  export declare class S3ObjectStorage implements ObjectStorage {
14
44
  /**
@@ -18,21 +48,16 @@ export declare class S3ObjectStorage implements ObjectStorage {
18
48
  private bucket;
19
49
  private prefix;
20
50
  private readonly operationSemaphore;
51
+ private readonly timeouts;
21
52
  constructor(options: S3ObjectStorageOptions);
22
- put(path: string, data: Uint8Array, metadata: ObjectStoragePutMetadata): Promise<void>;
23
- get(path: string, options?: {
24
- signal?: AbortSignal;
25
- }): Promise<{
53
+ put(path: string, data: Uint8Array, metadata: ObjectStoragePutMetadata, options?: ObjectStorageOperationOptions): Promise<void>;
54
+ get(path: string, options?: ObjectStorageOperationOptions): Promise<{
26
55
  data: Uint8Array;
27
56
  metadata: ObjectStoragePutMetadata;
28
57
  }>;
29
- list(prefix: string, options?: {
30
- signal?: AbortSignal;
31
- }): AsyncIterable<string>;
32
- delete(paths: string[]): Promise<void>;
33
- deletePrefix(prefix: string, options?: {
34
- signal?: AbortSignal;
35
- }): Promise<{
58
+ list(prefix: string, options?: ObjectStorageOperationOptions): AsyncIterable<string>;
59
+ delete(paths: string[], options?: ObjectStorageOperationOptions): Promise<void>;
60
+ deletePrefix(prefix: string, options?: ObjectStorageOperationOptions): Promise<{
36
61
  objectCount: number;
37
62
  }>;
38
63
  private listPage;
@@ -1,6 +1,9 @@
1
1
  import { DeleteObjectsCommand, GetObjectCommand, ListObjectsV2Command, PutObjectCommand, S3Client } from '@aws-sdk/client-s3';
2
+ import { logger } from '@powersync/lib-services-framework';
2
3
  import { acquireSemaphoreAbortable, isAbortError } from '@powersync/service-core';
4
+ import { loadConfigsForDefaultMode } from '@smithy/core/client';
3
5
  import { isThrottlingError, isTransientError } from '@smithy/core/retry';
6
+ import { NodeHttpHandler } from '@smithy/node-http-handler';
4
7
  import { Semaphore } from 'async-mutex';
5
8
  import { ObjectStorageError } from './ObjectStorage.js';
6
9
  const DEFAULT_S3_OPERATION_CONCURRENCY = 16;
@@ -11,6 +14,93 @@ const S3_DELETE_PREFIX_BATCH_SIZE = 1000;
11
14
  const S3_DELETE_PREFIX_CONCURRENCY = 12;
12
15
  const MAX_S3_PREFIX_BYTES = 256;
13
16
  const SAFE_S3_KEY_BYTES = 896;
17
+ /**
18
+ * Timeouts are derived from the AWS defaults mode, rather than being individually configurable.
19
+ *
20
+ * The mode - AWS_DEFAULTS_MODE or the defaults_mode storage option - describes the expected latency
21
+ * between this service and the object storage endpoint. We use the connection timeout it defines
22
+ * as the baseline for the other timeouts:
23
+ *
24
+ * | mode | connection | request | operation | queue |
25
+ * | ---------------------- | ---------- | ------- | --------- | ----- |
26
+ * | in-region | 1.1s | 5.5s | 11s | 44s |
27
+ * | standard, cross-region | 3.1s | 15.5s | 31s | 124s |
28
+ * | mobile | 30s | 150s | 300s | 1200s |
29
+ *
30
+ * The multipliers are sized for the objects we store: bucket data chunks target 1MB, and are
31
+ * bounded by the 16MB BSON document limit. Even at the upper bound, the request timeout only has to
32
+ * cover a transfer of a few MB/s, and the operation timeout leaves room for a second attempt.
33
+ *
34
+ * `legacy`, the mode used when nothing is configured, does not define any timeouts, and is treated
35
+ * as `standard` here. Running without timeouts is not an option: a stalled request holds one of the
36
+ * limited operation slots until the process restarts, and enough of those block all reads.
37
+ *
38
+ * `auto` is also treated as `standard` - see resolveConfiguredDefaultsMode() below.
39
+ */
40
+ const BASELINE_CONNECTION_TIMEOUT_MS = 3_100;
41
+ const REQUEST_TIMEOUT_FACTOR = 5;
42
+ const OPERATION_TIMEOUT_FACTOR = 2;
43
+ /**
44
+ * How long an operation may wait for a concurrency slot, as a multiple of the operation timeout.
45
+ *
46
+ * Every slot holder now releases within the operation timeout, so the queue always drains: this is
47
+ * a backpressure limit rather than a deadlock guard. Waiting this long means at least
48
+ * `factor * concurrencyLimit` operations ahead of us each took their full deadline - 64 at the
49
+ * default concurrency. Real operations complete in a fraction of the deadline, so the number of
50
+ * queued operations this actually tolerates is far higher, well above the ~2000 uploads that the
51
+ * largest possible replication flush (MAX_TRANSACTION_DOC_COUNT) can enqueue at once.
52
+ */
53
+ const QUEUE_TIMEOUT_FACTOR = 4;
54
+ export function resolveTimeoutProfile(mode) {
55
+ // Only connectionTimeout is currently vended by the SDK, but requestTimeout is part of the same
56
+ // contract - use it as the hint if a future version starts defining it.
57
+ const { connectionTimeout, requestTimeout } = loadConfigsForDefaultMode(mode);
58
+ const connectionTimeoutMs = connectionTimeout ?? BASELINE_CONNECTION_TIMEOUT_MS;
59
+ const requestTimeoutMs = requestTimeout ?? connectionTimeoutMs * REQUEST_TIMEOUT_FACTOR;
60
+ const operationTimeoutMs = requestTimeoutMs * OPERATION_TIMEOUT_FACTOR;
61
+ return {
62
+ connectionTimeoutMs,
63
+ requestTimeoutMs,
64
+ operationTimeoutMs,
65
+ queueTimeoutMs: operationTimeoutMs * QUEUE_TIMEOUT_FACTOR
66
+ };
67
+ }
68
+ const AWS_DEFAULTS_MODE_ENV = 'AWS_DEFAULTS_MODE';
69
+ const RESOLVED_DEFAULTS_MODES = ['standard', 'in-region', 'cross-region', 'mobile', 'legacy'];
70
+ /**
71
+ * Resolve the configured AWS defaults mode: the explicit option, then the AWS_DEFAULTS_MODE
72
+ * environment variable, then `legacy`, which is also the AWS default.
73
+ *
74
+ * Unlike the SDK's own lookup, this does not read defaults_mode from the AWS shared config file.
75
+ * That lookup is asynchronous, and the mode is only used to pick timeouts, which we want available
76
+ * synchronously so that operations never have to wait on configuration.
77
+ *
78
+ * `auto` is substituted with `standard`. It asks the SDK to detect whether it is running in the
79
+ * same region as the endpoint, which means querying the EC2 instance metadata service on startup:
80
+ *
81
+ * - The detection only succeeds on EC2-family compute with instance metadata reachable. Anywhere
82
+ * else - including EC2 with IMDS disabled or behind a low hop limit - it silently falls back to
83
+ * `standard`, so the timeouts differ by deployment with no indication of why.
84
+ * - It requires a resolvable region, and fails the client outright when there is none.
85
+ * - Timeouts that depend on where the process happens to run are hard to reason about when
86
+ * diagnosing a stall.
87
+ *
88
+ * Deployments that want the tighter in-region timeouts should ask for them explicitly.
89
+ */
90
+ function resolveConfiguredDefaultsMode(configured) {
91
+ // An empty environment variable is treated as unset, matching the SDK.
92
+ const mode = (configured || process.env[AWS_DEFAULTS_MODE_ENV] || 'legacy').toLowerCase();
93
+ if (mode === 'auto') {
94
+ logger.warn(`Ignoring AWS defaults mode "auto" for object storage, using "standard" instead. ` +
95
+ `Configure storage.object_storage.defaults_mode to select a mode explicitly.`);
96
+ return 'standard';
97
+ }
98
+ const resolved = RESOLVED_DEFAULTS_MODES.find((candidate) => candidate === mode);
99
+ if (resolved == null) {
100
+ throw new Error(`Invalid AWS defaults mode ${JSON.stringify(mode)}, expected one of ${RESOLVED_DEFAULTS_MODES.join(', ')}, auto`);
101
+ }
102
+ return resolved;
103
+ }
14
104
  export class S3ObjectStorage {
15
105
  /**
16
106
  * Public for tests only.
@@ -19,6 +109,7 @@ export class S3ObjectStorage {
19
109
  bucket;
20
110
  prefix;
21
111
  operationSemaphore;
112
+ timeouts;
22
113
  constructor(options) {
23
114
  const concurrencyLimit = options.concurrencyLimit ?? DEFAULT_S3_OPERATION_CONCURRENCY;
24
115
  if (!Number.isInteger(concurrencyLimit) || concurrencyLimit <= 0) {
@@ -37,18 +128,28 @@ export class S3ObjectStorage {
37
128
  this.bucket = options.bucket;
38
129
  this.prefix = prefix;
39
130
  this.operationSemaphore = new Semaphore(concurrencyLimit);
131
+ // Resolve the mode once, and share it with the client so that its own defaults agree with ours.
132
+ const defaultsMode = resolveConfiguredDefaultsMode(options.defaultsMode);
133
+ this.timeouts = resolveTimeoutProfile(defaultsMode);
40
134
  this.client = new S3Client({
41
135
  region: options.region,
42
136
  endpoint: options.endpoint,
43
137
  forcePathStyle: options.forcePathStyle,
138
+ defaultsMode,
139
+ requestHandler: new NodeHttpHandler({
140
+ connectionTimeout: this.timeouts.connectionTimeoutMs,
141
+ requestTimeout: this.timeouts.requestTimeoutMs,
142
+ // Without this, exceeding requestTimeout only logs a warning.
143
+ throwOnRequestTimeout: true
144
+ }),
44
145
  credentials: options.accessKeyId && options.secretAccessKey
45
146
  ? { accessKeyId: options.accessKeyId, secretAccessKey: options.secretAccessKey }
46
147
  : undefined
47
148
  });
48
149
  }
49
- async put(path, data, metadata) {
150
+ async put(path, data, metadata, options) {
50
151
  const fullPath = this.fullPath(path);
51
- await using _ = await this.withOperation();
152
+ await using operation = await this.withOperation('upload', fullPath, options?.signal);
52
153
  try {
53
154
  await this.client.send(new PutObjectCommand({
54
155
  Bucket: this.bucket,
@@ -56,16 +157,17 @@ export class S3ObjectStorage {
56
157
  Body: data,
57
158
  ContentType: metadata.contentType,
58
159
  ContentEncoding: metadata.contentEncoding ?? undefined
59
- }));
160
+ }), { abortSignal: operation.signal });
60
161
  }
61
162
  catch (error) {
62
- throw s3OperationError('upload', fullPath, error);
163
+ throw operation.error(error);
63
164
  }
64
165
  }
65
166
  async get(path, options) {
66
167
  const fullPath = this.fullPath(path);
67
- const signal = options?.signal;
68
- await using _ = await this.withOperation(signal);
168
+ await using operation = await this.withOperation('download', fullPath, options?.signal);
169
+ // Includes the operation deadline, which also covers streaming the response body below.
170
+ const signal = operation.signal;
69
171
  try {
70
172
  const response = await this.client.send(new GetObjectCommand({
71
173
  Bucket: this.bucket,
@@ -82,7 +184,7 @@ export class S3ObjectStorage {
82
184
  let offset = 0;
83
185
  const stream = response.Body;
84
186
  for await (const chunk of stream) {
85
- signal?.throwIfAborted();
187
+ signal.throwIfAborted();
86
188
  const nextOffset = offset + chunk.byteLength;
87
189
  if (nextOffset > contentLength) {
88
190
  throw new Error(`S3 download ContentLength mismatch for ${fullPath}: expected ${contentLength} bytes, received at least ${nextOffset}`);
@@ -105,7 +207,7 @@ export class S3ObjectStorage {
105
207
  if (err.name === 'NoSuchKey' || err.Code === 'NoSuchKey') {
106
208
  throw new ObjectStorageError(`S3 object not found: ${fullPath}`, { cause: err, retryable: false });
107
209
  }
108
- throw s3OperationError('download', fullPath, err);
210
+ throw operation.error(err);
109
211
  }
110
212
  }
111
213
  async *list(prefix, options) {
@@ -127,9 +229,9 @@ export class S3ObjectStorage {
127
229
  }
128
230
  } while (continuationToken != null);
129
231
  }
130
- async delete(paths) {
232
+ async delete(paths, options) {
131
233
  const fullPaths = paths.map((path) => ({ Key: this.fullPath(path) }));
132
- await this.deleteFullPaths(fullPaths);
234
+ await this.deleteFullPaths(fullPaths, options?.signal);
133
235
  }
134
236
  async deletePrefix(prefix, options) {
135
237
  const fullPrefix = this.fullPath(prefix);
@@ -189,32 +291,34 @@ export class S3ObjectStorage {
189
291
  return { objectCount };
190
292
  }
191
293
  async listPage(fullPrefix, continuationToken, signal) {
294
+ // Acquired outside the try, matching the other operations: withOperation() already reports its
295
+ // own failures as ObjectStorageError.
296
+ await using operation = await this.withOperation('list', fullPrefix, signal);
192
297
  try {
193
- await using _ = await this.withOperation(signal);
194
298
  return await this.client.send(new ListObjectsV2Command({
195
299
  Bucket: this.bucket,
196
300
  Prefix: fullPrefix,
197
301
  ContinuationToken: continuationToken,
198
302
  MaxKeys: S3_DELETE_PREFIX_BATCH_SIZE
199
- }), { abortSignal: signal });
303
+ }), { abortSignal: operation.signal });
200
304
  }
201
305
  catch (error) {
202
- throw s3OperationError('list', fullPrefix, error);
306
+ throw operation.error(error);
203
307
  }
204
308
  }
205
309
  async deleteFullPaths(fullPaths, signal) {
206
310
  if (fullPaths.length === 0)
207
311
  return;
208
- await using _ = await this.withOperation(signal);
312
+ await using operation = await this.withOperation('delete', `${fullPaths.length} objects`, signal);
209
313
  let response;
210
314
  try {
211
315
  response = await this.client.send(new DeleteObjectsCommand({
212
316
  Bucket: this.bucket,
213
317
  Delete: { Objects: fullPaths, Quiet: true }
214
- }), { abortSignal: signal });
318
+ }), { abortSignal: operation.signal });
215
319
  }
216
320
  catch (error) {
217
- throw s3OperationError('delete', `${fullPaths.length} objects`, error);
321
+ throw operation.error(error);
218
322
  }
219
323
  if (response.Errors?.length) {
220
324
  const errors = response.Errors.map((error) => `${error.Key}: ${error.Code}`).join(', ');
@@ -232,25 +336,75 @@ export class S3ObjectStorage {
232
336
  }
233
337
  return fullPath;
234
338
  }
235
- async withOperation(signal) {
339
+ async withOperation(operation, target, signal) {
236
340
  signal?.throwIfAborted();
237
- const acquired = signal
238
- ? await acquireSemaphoreAbortable(this.operationSemaphore, signal)
239
- : await this.operationSemaphore.acquire();
341
+ const { operationTimeoutMs, queueTimeoutMs } = this.timeouts;
342
+ // Waiting for a slot is bounded even when the caller has no signal of its own, which is the
343
+ // case for uploads and deletes.
344
+ const queueDeadline = timeoutSignal(queueTimeoutMs, () => s3TimeoutError(operation, target, `timed out after ${queueTimeoutMs} ms waiting for a concurrency slot`));
345
+ let acquired;
346
+ try {
347
+ acquired = await acquireSemaphoreAbortable(this.operationSemaphore, signal ? AbortSignal.any([signal, queueDeadline.signal]) : queueDeadline.signal);
348
+ }
349
+ finally {
350
+ queueDeadline.cancel();
351
+ }
240
352
  if (acquired === 'aborted') {
241
- signal.throwIfAborted();
242
- throw new Error('S3 operation aborted while waiting for a concurrency slot');
353
+ // A caller abort takes precedence: it is a cancellation, not an S3 failure.
354
+ signal?.throwIfAborted();
355
+ throw queueDeadline.signal.reason;
243
356
  }
244
357
  const [, release] = acquired;
245
358
  if (signal?.aborted) {
246
359
  release();
247
360
  signal.throwIfAborted();
248
361
  }
362
+ // This deadline only starts once the operation holds a slot - queueing is covered above.
363
+ const deadline = timeoutSignal(operationTimeoutMs, () => s3TimeoutError(operation, target, `did not complete within ${operationTimeoutMs} ms`));
364
+ const operationSignal = signal ? AbortSignal.any([signal, deadline.signal]) : deadline.signal;
249
365
  return {
250
- [Symbol.asyncDispose]: async () => release()
366
+ signal: operationSignal,
367
+ error: (cause) => {
368
+ // Aborting a request that is already streaming destroys the socket, and the failure
369
+ // surfaces as a generic "aborted" error that says nothing about the cause. The abort
370
+ // reason is always the better answer: the caller's reason when the caller stopped us -
371
+ // callers abort with the error that stopped them, and upstream handling matches on that
372
+ // type - and an already-classified timeout when the deadline did.
373
+ if (operationSignal.aborted) {
374
+ return operationSignal.reason;
375
+ }
376
+ return s3OperationError(operation, target, cause);
377
+ },
378
+ [Symbol.asyncDispose]: async () => {
379
+ deadline.cancel();
380
+ release();
381
+ }
251
382
  };
252
383
  }
253
384
  }
385
+ /**
386
+ * An abort signal that fires after the given timeout, using a timer that does not hold the process
387
+ * open.
388
+ *
389
+ * The reason is what callers see when the timeout fires, so it is the error to report - not a
390
+ * marker to translate later.
391
+ */
392
+ function timeoutSignal(timeoutMs, createReason) {
393
+ const controller = new AbortController();
394
+ const timer = setTimeout(() => controller.abort(createReason()), timeoutMs);
395
+ timer.unref();
396
+ return { signal: controller.signal, cancel: () => clearTimeout(timer) };
397
+ }
398
+ /**
399
+ * A timeout that the compactor may retry, matching how the AWS SDK classifies its own request
400
+ * timeouts.
401
+ */
402
+ function s3TimeoutError(operation, target, message) {
403
+ return new ObjectStorageError(`S3 ${operation} for ${target} ${message}`, {
404
+ cause: new DOMException(message, 'TimeoutError'),
405
+ retryable: true
406
+ });
407
+ }
254
408
  function s3OperationError(operation, target, error) {
255
409
  if (error instanceof ObjectStorageError) {
256
410
  return error;
@@ -1 +1 @@
1
- {"version":3,"file":"S3ObjectStorage.js","sourceRoot":"","sources":["../../../../../src/storage/implementation/v3/object-storage/S3ObjectStorage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"S3ObjectStorage.js","sourceRoot":"","sources":["../../../../../src/storage/implementation/v3/object-storage/S3ObjectStorage.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { BucketDefinitionMapping, storage } from '@powersync/service-core';
2
- import { BucketDataSource, BucketDefinitionId, HydratedSyncConfig, MatchingSources, ParameterIndexId, ParameterIndexLookupCreator, SourceTableRef } from '@powersync/service-sync-rules';
1
+ import { BucketDefinitionMapping, JsonValue, storage } from '@powersync/service-core';
2
+ import { BucketDataSource, BucketDefinitionId, EventDefinitionId, HydratedEventDescriptor, HydratedSyncConfig, MatchingSources, ParameterIndexId, ParameterIndexLookupCreator, SourceTableRef } from '@powersync/service-sync-rules';
3
3
  import * as bson from 'bson';
4
4
  import { ReplicaIdColumn, SourceTableDocumentV3 } from './models.js';
5
5
  export interface SourceTableIdentity {
@@ -11,11 +11,12 @@ export interface SourceTableIdentity {
11
11
  export interface SourceTableMembershipIds {
12
12
  bucketDataSourceIds: BucketDefinitionId[];
13
13
  parameterLookupSourceIds: ParameterIndexId[];
14
+ eventDefinitionIds: EventDefinitionId[];
14
15
  }
15
16
  export interface SourceTableDesiredResolution {
16
17
  bucketSourceById: Map<BucketDefinitionId, BucketDataSource>;
17
18
  parameterLookupSourceById: Map<ParameterIndexId, ParameterIndexLookupCreator>;
18
- triggersEvent: boolean;
19
+ eventDefinitionById: Map<EventDefinitionId, HydratedEventDescriptor>;
19
20
  }
20
21
  export interface SourceTableReconciliationContext {
21
22
  connectionId: number;
@@ -25,6 +26,14 @@ export interface SourceTableReconciliationContext {
25
26
  syncConfig: HydratedSyncConfig;
26
27
  mapping: BucketDefinitionMapping;
27
28
  desired: SourceTableDesiredResolution;
29
+ /**
30
+ * Candidates the source connector considers safe to reuse.
31
+ */
32
+ sourceCompatibleTables: readonly storage.SourceTableCandidate[];
33
+ /**
34
+ * Source metadata for records created by this resolution.
35
+ */
36
+ newTableSourceMetadata: JsonValue;
28
37
  }
29
38
  export interface SourceTableReconciliationPlan {
30
39
  /** Retained source tables, with memberships narrowed to the desired set. */
@@ -33,7 +42,7 @@ export interface SourceTableReconciliationPlan {
33
42
  narrowingUpdates: SourceTableMembershipUpdate[];
34
43
  /**
35
44
  * Memberships for a new source-table doc covering desired ids no existing doc covers,
36
- * or null if no new doc is needed. Empty memberships indicate an event-only table.
45
+ * or null if no new doc is needed.
37
46
  */
38
47
  newTableMemberships: SourceTableMembershipIds | null;
39
48
  /** Identity-overlapping docs that conflict with the current identity and must be dropped. */
@@ -47,9 +56,8 @@ export interface NewSourceTable {
47
56
  doc: SourceTableDocumentV3;
48
57
  table: storage.SourceTable;
49
58
  }
50
- export declare function sourceTableDesiredResolution(syncConfig: HydratedSyncConfig, ref: SourceTableRef, mapping: BucketDefinitionMapping): SourceTableDesiredResolution;
59
+ export declare function sourceTableDesiredResolution(syncConfig: HydratedSyncConfig, ref: SourceTableRef, mapping: BucketDefinitionMapping, eventById: ReadonlyMap<EventDefinitionId, HydratedEventDescriptor>): SourceTableDesiredResolution;
51
60
  export declare function planSourceTableReconciliation(candidateDocs: SourceTableDocumentV3[], context: SourceTableReconciliationContext): SourceTableReconciliationPlan;
52
61
  export declare function overlappingSourceTableFilter(connectionId: number, identity: Pick<SourceTableIdentity, 'schema' | 'name' | 'objectId'>): Record<string, unknown>;
53
62
  export declare function createNewSourceTable(id: bson.ObjectId, memberships: SourceTableMembershipIds, context: SourceTableReconciliationContext): NewSourceTable;
54
- export declare function designateEventCarrier(tables: storage.SourceTable[], triggersEvent: boolean): void;
55
- export declare function sourceTableFromDocument(doc: SourceTableDocumentV3, connectionTag: string, syncConfig: HydratedSyncConfig, mapping: BucketDefinitionMapping, memberships?: MatchingSources, membershipIds?: SourceTableMembershipIds): storage.SourceTable;
63
+ export declare function sourceTableFromDocument(doc: SourceTableDocumentV3, connectionTag: string, syncConfig: HydratedSyncConfig, mapping: BucketDefinitionMapping, eventById: ReadonlyMap<EventDefinitionId, HydratedEventDescriptor>, memberships?: MatchingSources, membershipIds?: SourceTableMembershipIds): storage.SourceTable;