@haverstack/core 0.8.0 → 0.9.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 (65) hide show
  1. package/README.md +30 -14
  2. package/dist/access.d.ts +20 -7
  3. package/dist/access.d.ts.map +1 -1
  4. package/dist/access.js +37 -16
  5. package/dist/access.js.map +1 -1
  6. package/dist/adapter-entry.d.ts +12 -0
  7. package/dist/adapter-entry.d.ts.map +1 -0
  8. package/dist/adapter-entry.js +11 -0
  9. package/dist/adapter-entry.js.map +1 -0
  10. package/dist/attachment-download.d.ts +75 -0
  11. package/dist/attachment-download.d.ts.map +1 -0
  12. package/dist/attachment-download.js +128 -0
  13. package/dist/attachment-download.js.map +1 -0
  14. package/dist/auth.d.ts +88 -0
  15. package/dist/auth.d.ts.map +1 -0
  16. package/dist/auth.js +145 -0
  17. package/dist/auth.js.map +1 -0
  18. package/dist/combine.d.ts.map +1 -1
  19. package/dist/combine.js +20 -3
  20. package/dist/combine.js.map +1 -1
  21. package/dist/did-entry.d.ts +12 -0
  22. package/dist/did-entry.d.ts.map +1 -0
  23. package/dist/did-entry.js +16 -0
  24. package/dist/did-entry.js.map +1 -0
  25. package/dist/did.d.ts +51 -0
  26. package/dist/did.d.ts.map +1 -0
  27. package/dist/did.js +153 -0
  28. package/dist/did.js.map +1 -0
  29. package/dist/id.d.ts +18 -6
  30. package/dist/id.d.ts.map +1 -1
  31. package/dist/id.js +39 -10
  32. package/dist/id.js.map +1 -1
  33. package/dist/index.d.ts +15 -10
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +14 -9
  36. package/dist/index.js.map +1 -1
  37. package/dist/merge.d.ts +11 -0
  38. package/dist/merge.d.ts.map +1 -0
  39. package/dist/merge.js +38 -0
  40. package/dist/merge.js.map +1 -0
  41. package/dist/schema.d.ts +31 -9
  42. package/dist/schema.d.ts.map +1 -1
  43. package/dist/schema.js +134 -11
  44. package/dist/schema.js.map +1 -1
  45. package/dist/stack.d.ts +748 -152
  46. package/dist/stack.d.ts.map +1 -1
  47. package/dist/stack.js +1805 -328
  48. package/dist/stack.js.map +1 -1
  49. package/dist/testing.d.ts +84 -23
  50. package/dist/testing.d.ts.map +1 -1
  51. package/dist/testing.js +260 -19
  52. package/dist/testing.js.map +1 -1
  53. package/dist/types.d.ts +281 -31
  54. package/dist/types.d.ts.map +1 -1
  55. package/dist/types.js +14 -0
  56. package/dist/types.js.map +1 -1
  57. package/dist/validate.d.ts +26 -0
  58. package/dist/validate.d.ts.map +1 -1
  59. package/dist/validate.js +51 -1
  60. package/dist/validate.js.map +1 -1
  61. package/dist/wire-entry.d.ts +17 -0
  62. package/dist/wire-entry.d.ts.map +1 -0
  63. package/dist/wire-entry.js +24 -0
  64. package/dist/wire-entry.js.map +1 -0
  65. package/package.json +13 -1
package/dist/testing.js CHANGED
@@ -1,12 +1,20 @@
1
+ import { SYSTEM_TYPES } from './types.js';
2
+ import { applyMergePatch } from './merge.js';
3
+ import { StackVersionConflictError, StackConflictError, StackNotFoundError } from './stack.js';
1
4
  /**
2
- * Fully functional in-memory StackAdapter with offset-based cursor pagination.
3
- * Intended for use in tests — import from `@haverstack/core/testing`.
5
+ * In-memory StackAdapter with offset-based cursor pagination. Implements
6
+ * the full RecordFilter shape (mirroring sqlite-shared's buildWhereClause)
7
+ * so permission logic under test exercises real predicates. Declares
8
+ * `contentFieldQuery: true`, as every local adapter must; tests needing
9
+ * the capability-gated paths use IncapableMemoryAdapter below.
4
10
  */
5
11
  export class MemoryAdapter {
6
12
  capabilities = {
7
13
  fullTextSearch: false,
8
- contentFieldQuery: false,
14
+ contentFieldQuery: true,
9
15
  sortableFields: ['createdAt', 'updatedAt', 'version'],
16
+ maxAttachmentBytes: null,
17
+ maxContentBytes: null,
10
18
  };
11
19
  ownerEntityId;
12
20
  timezone;
@@ -14,11 +22,15 @@ export class MemoryAdapter {
14
22
  order = [];
15
23
  versions = new Map();
16
24
  types = new Map();
17
- constructor({ ownerEntityId = '', timezone = 'UTC', } = {}) {
25
+ blobs = new Map();
26
+ constructor({ ownerEntityId = '', timezone, } = {}) {
18
27
  this.ownerEntityId = ownerEntityId;
19
28
  this.timezone = timezone;
20
29
  }
21
30
  async createRecord(record) {
31
+ if (this.records.has(record.id)) {
32
+ throw new StackConflictError(`Record already exists: "${record.id}"`);
33
+ }
22
34
  this.records.set(record.id, { ...record });
23
35
  this.order.push(record.id);
24
36
  return record;
@@ -26,29 +38,76 @@ export class MemoryAdapter {
26
38
  async getRecord(id) {
27
39
  return this.records.get(id) ?? null;
28
40
  }
29
- async updateRecord(id, changes) {
41
+ bump(record) {
42
+ return { ...record, version: record.version + 1, updatedAt: new Date() };
43
+ }
44
+ /** Opt-in CAS check mirroring the real adapters' expectedVersion contract. */
45
+ checkExpectedVersion(record, expectedVersion) {
46
+ if (expectedVersion === undefined || record.version === expectedVersion)
47
+ return;
48
+ throw new StackVersionConflictError(`Record "${record.id}" is at version ${record.version}, expected ${expectedVersion}`, record.id, expectedVersion, record.version);
49
+ }
50
+ /**
51
+ * True if any top-level file-ref field in the record's registered type
52
+ * schema currently holds this fileId — the content-reference half of
53
+ * attachmentFileId matching. Mirrors sqlite-shared's file_refs index,
54
+ * computed on the fly since MemoryAdapter has no persisted index.
55
+ */
56
+ hasFileRefTo(record, fileId) {
57
+ const schema = this.types.get(record.typeId)?.schema;
58
+ if (!schema)
59
+ return false;
60
+ const content = record.content;
61
+ return Object.entries(schema).some(([field, def]) => def.kind === 'file-ref' && content[field] === fileId);
62
+ }
63
+ async patchContent(id, patch, opts = {}) {
30
64
  const existing = this.records.get(id);
31
65
  if (!existing)
32
66
  throw new Error(`Not found: ${id}`);
33
- const updated = { ...existing, ...changes };
67
+ this.checkExpectedVersion(existing, opts.expectedVersion);
68
+ if (opts.snapshot)
69
+ this.snapshotBeforeMutation(id, opts.snapshot);
70
+ const updated = this.bump({ ...existing, content: applyMergePatch(existing.content, patch) });
34
71
  this.records.set(id, updated);
35
72
  return updated;
36
73
  }
37
74
  async deleteRecord(id, opts = {}) {
38
75
  if (opts.hard) {
76
+ const record = this.records.get(id);
77
+ if (record)
78
+ this.checkExpectedVersion(record, opts.expectedVersion);
39
79
  this.records.delete(id);
40
80
  this.order.splice(this.order.indexOf(id), 1);
41
81
  }
42
82
  else {
43
83
  const record = this.records.get(id);
44
- if (record)
45
- this.records.set(id, { ...record, deletedAt: new Date() });
84
+ if (record) {
85
+ this.checkExpectedVersion(record, opts.expectedVersion);
86
+ if (opts.snapshot)
87
+ this.snapshotBeforeMutation(id, opts.snapshot);
88
+ this.records.set(id, this.bump({ ...record, deletedAt: new Date() }));
89
+ }
46
90
  }
47
91
  }
92
+ async undeleteRecord(id, opts = {}) {
93
+ const record = this.records.get(id);
94
+ if (!record)
95
+ throw new Error(`Not found: ${id}`);
96
+ this.checkExpectedVersion(record, opts.expectedVersion);
97
+ if (opts.snapshot)
98
+ this.snapshotBeforeMutation(id, opts.snapshot);
99
+ const { deletedAt: _deletedAt, ...rest } = record;
100
+ const updated = this.bump(rest);
101
+ this.records.set(id, updated);
102
+ return updated;
103
+ }
48
104
  /** Cursor is a stringified offset into insertion order. */
49
105
  async queryRecords(query) {
50
106
  const f = query.filter ?? {};
51
107
  let results = this.order.map((id) => this.records.get(id));
108
+ // _config is addressable only by ID (getRecord), never returned by a
109
+ // generic query — mirroring the real SQL adapters' WHERE exclusion.
110
+ results = results.filter((r) => r.id !== SYSTEM_TYPES.CONFIG);
52
111
  if (!f.includeDeleted)
53
112
  results = results.filter((r) => !r.deletedAt);
54
113
  if (f.typeId) {
@@ -61,10 +120,52 @@ export class MemoryAdapter {
61
120
  ? results.filter((r) => !r.parentId)
62
121
  : results.filter((r) => r.parentId === f.parentId);
63
122
  }
123
+ if (f.appId !== undefined) {
124
+ const ids = Array.isArray(f.appId) ? f.appId : [f.appId];
125
+ results = results.filter((r) => r.appId !== undefined && ids.includes(r.appId));
126
+ }
64
127
  if (f.entityId !== undefined) {
65
128
  const ids = Array.isArray(f.entityId) ? f.entityId : [f.entityId];
66
129
  results = results.filter((r) => r.entityId !== undefined && ids.includes(r.entityId));
67
130
  }
131
+ if (f.principalId !== undefined) {
132
+ const ids = Array.isArray(f.principalId) ? f.principalId : [f.principalId];
133
+ results = results.filter((r) => r.principalId !== undefined && ids.includes(r.principalId));
134
+ }
135
+ if (f.createdAt?.after)
136
+ results = results.filter((r) => r.createdAt > f.createdAt.after);
137
+ if (f.createdAt?.before)
138
+ results = results.filter((r) => r.createdAt < f.createdAt.before);
139
+ if (f.updatedAt?.after)
140
+ results = results.filter((r) => r.updatedAt > f.updatedAt.after);
141
+ if (f.updatedAt?.before)
142
+ results = results.filter((r) => r.updatedAt < f.updatedAt.before);
143
+ if (f.tags?.length) {
144
+ const tags = f.tags;
145
+ results = results.filter((r) => tags.every((tag) => (r.associations ?? []).some((a) => a.kind === 'tag' && a.label === tag)));
146
+ }
147
+ if (f.hasAttachment) {
148
+ results = results.filter((r) => (r.associations ?? []).some((a) => a.kind === 'attachment' && a.label === f.hasAttachment));
149
+ }
150
+ if (f.attachmentFileId) {
151
+ const fileId = f.attachmentFileId;
152
+ results = results.filter((r) => (r.associations ?? []).some((a) => a.kind === 'attachment' && a.fileId === fileId) ||
153
+ this.hasFileRefTo(r, fileId));
154
+ }
155
+ if (f.relatedTo) {
156
+ const { recordId, label } = f.relatedTo;
157
+ results = results.filter((r) => (r.associations ?? []).some((a) => a.kind === 'relationship' && a.recordId === recordId && (!label || a.label === label)));
158
+ }
159
+ // A `null` filter value means "field absent or null" — not "match
160
+ // nothing". Plain `===` would miss an absent field; treat both as
161
+ // satisfying a null filter (docs/spec/data-model.md § Filter).
162
+ if (f.content) {
163
+ const entries = Object.entries(f.content);
164
+ results = results.filter((r) => entries.every(([key, value]) => {
165
+ const actual = r.content[key];
166
+ return value === null ? actual === null || actual === undefined : actual === value;
167
+ }));
168
+ }
68
169
  const limit = query.limit ?? 50;
69
170
  const start = query.cursor ? Number(query.cursor) : 0;
70
171
  const page = results.slice(start, start + limit);
@@ -72,19 +173,34 @@ export class MemoryAdapter {
72
173
  const cursor = nextStart < results.length ? String(nextStart) : null;
73
174
  return { records: page, cursor, total: results.length };
74
175
  }
75
- async associate(id, association) {
176
+ async associate(id, association, opts = {}) {
76
177
  const record = this.records.get(id);
77
178
  if (!record)
78
179
  throw new Error(`Not found: ${id}`);
180
+ this.checkExpectedVersion(record, opts.expectedVersion);
181
+ if (opts.snapshot)
182
+ this.snapshotBeforeMutation(id, opts.snapshot);
79
183
  const assocs = record.associations ?? [];
80
- this.records.set(id, { ...record, associations: [...assocs, association] });
184
+ this.records.set(id, this.bump(withAssociations(record, [...assocs, association])));
185
+ }
186
+ async dissociate(id, association, opts = {}) {
187
+ const record = this.records.get(id);
188
+ if (!record)
189
+ throw new Error(`Not found: ${id}`);
190
+ this.checkExpectedVersion(record, opts.expectedVersion);
191
+ if (opts.snapshot)
192
+ this.snapshotBeforeMutation(id, opts.snapshot);
193
+ const assocs = (record.associations ?? []).filter((a) => !associationEqual(a, association));
194
+ this.records.set(id, this.bump(withAssociations(record, assocs)));
81
195
  }
82
- async dissociate(id, association) {
196
+ async setPermissions(id, permissions, opts = {}) {
83
197
  const record = this.records.get(id);
84
198
  if (!record)
85
199
  throw new Error(`Not found: ${id}`);
86
- const assocs = (record.associations ?? []).filter((a) => !(a.kind === association.kind && a.label === association.label));
87
- this.records.set(id, { ...record, associations: assocs });
200
+ this.checkExpectedVersion(record, opts.expectedVersion);
201
+ if (opts.snapshot)
202
+ this.snapshotBeforeMutation(id, opts.snapshot);
203
+ this.records.set(id, this.bump({ ...record, permissions }));
88
204
  }
89
205
  async getVersions(id) {
90
206
  return this.versions.get(id) ?? [];
@@ -92,10 +208,74 @@ export class MemoryAdapter {
92
208
  async getVersion(id, version) {
93
209
  return (this.versions.get(id) ?? []).find((v) => v.version === version) ?? null;
94
210
  }
95
- async saveVersion(id, version) {
211
+ /**
212
+ * Loud on a (record, version) collision, mirroring the real adapters'
213
+ * UNIQUE constraint.
214
+ */
215
+ insertVersionRow(id, version) {
96
216
  const existing = this.versions.get(id) ?? [];
217
+ if (existing.some((v) => v.version === version.version)) {
218
+ throw new StackConflictError(`Version ${version.version} already exists for record "${id}" — a concurrent ` +
219
+ `writer raced past this version. Use ifVersion to detect this before it happens.`);
220
+ }
97
221
  this.versions.set(id, [...existing, version]);
98
222
  }
223
+ /**
224
+ * Standalone snapshot write for tooling and tests — loud on any
225
+ * collision, since nothing here is about to bump the record's version.
226
+ * Mutating methods take a `snapshot` option instead; see
227
+ * snapshotBeforeMutation.
228
+ */
229
+ async saveVersion(id, version) {
230
+ this.insertVersionRow(id, version);
231
+ }
232
+ /**
233
+ * The snapshot half of a mutating method's atomic snapshot-then-mutate
234
+ * step. Mirrors the real adapters' snapshotBeforeMutation (see
235
+ * sqlite-shared/record-logic.ts for the full rationale): a collision is
236
+ * rejected loudly, except an orphan row at the record's current version,
237
+ * which is overwritten so the interrupted write can finally complete.
238
+ */
239
+ snapshotBeforeMutation(id, version) {
240
+ const existing = this.versions.get(id) ?? [];
241
+ const collision = existing.some((v) => v.version === version.version);
242
+ if (!collision) {
243
+ this.versions.set(id, [...existing, version]);
244
+ return;
245
+ }
246
+ const record = this.records.get(id);
247
+ if (!record || record.version !== version.version) {
248
+ throw new StackConflictError(`Version ${version.version} already exists for record "${id}" — a concurrent ` +
249
+ `writer raced past this version. Use ifVersion to detect this before it happens.`);
250
+ }
251
+ this.versions.set(id, existing.map((v) => (v.version === version.version ? version : v)));
252
+ }
253
+ async restoreVersion(id, version, opts = {}) {
254
+ const record = this.records.get(id);
255
+ if (!record)
256
+ throw new Error(`Not found: ${id}`);
257
+ this.checkExpectedVersion(record, opts.expectedVersion);
258
+ const target = (this.versions.get(id) ?? []).find((v) => v.version === version);
259
+ if (!target)
260
+ throw new Error(`Version not found: ${id}@${version}`);
261
+ if (opts.snapshot)
262
+ this.snapshotBeforeMutation(id, opts.snapshot);
263
+ const merged = { ...record, typeId: target.typeId, content: target.content };
264
+ const withAssoc = target.associations !== undefined ? withAssociations(merged, target.associations) : merged;
265
+ const updated = this.bump(withAssoc);
266
+ this.records.set(id, updated);
267
+ return updated;
268
+ }
269
+ async commitMigration(id, toTypeId, content, opts = {}) {
270
+ const record = this.records.get(id);
271
+ if (!record)
272
+ throw new Error(`Not found: ${id}`);
273
+ if (opts.snapshot)
274
+ this.snapshotBeforeMutation(id, opts.snapshot);
275
+ const updated = this.bump({ ...record, typeId: toTypeId, content });
276
+ this.records.set(id, updated);
277
+ return updated;
278
+ }
99
279
  async saveType(type) {
100
280
  this.types.set(type.id, type);
101
281
  }
@@ -105,14 +285,75 @@ export class MemoryAdapter {
105
285
  async listTypes() {
106
286
  return [...this.types.values()];
107
287
  }
108
- async putAttachment(_data) {
109
- return 'file-123';
288
+ /** Content-addressed, like the real adapters — needed so file-ref values (SHA-256 hex) validate. */
289
+ async putAttachment(data) {
290
+ const hashBuffer = await crypto.subtle.digest('SHA-256', data);
291
+ const fileId = Array.from(new Uint8Array(hashBuffer))
292
+ .map((b) => b.toString(16).padStart(2, '0'))
293
+ .join('');
294
+ if (!this.blobs.has(fileId)) {
295
+ this.blobs.set(fileId, { data, modifiedAt: new Date() });
296
+ }
297
+ return fileId;
298
+ }
299
+ async getAttachment(fileId) {
300
+ const blob = this.blobs.get(fileId);
301
+ if (!blob)
302
+ throw new StackNotFoundError(`Attachment not found: "${fileId}"`);
303
+ return blob.data;
110
304
  }
111
- async getAttachment(_fileId) {
112
- return new Uint8Array();
305
+ async deleteAttachment(fileId) {
306
+ this.blobs.delete(fileId);
113
307
  }
114
- async deleteAttachment(_fileId) { }
308
+ // Declared as an optional field (not a fixed method) so a test subclass
309
+ // can override it to `undefined`, simulating an adapter that doesn't
310
+ // implement this capability (see stack.test.ts's NoListFilesAdapter).
311
+ listFiles = async () => {
312
+ return [...this.blobs.entries()].map(([fileId, blob]) => ({
313
+ fileId,
314
+ size: blob.data.byteLength,
315
+ modifiedAt: blob.modifiedAt,
316
+ }));
317
+ };
115
318
  flush;
116
319
  close;
117
320
  }
321
+ /**
322
+ * A MemoryAdapter that declares `contentFieldQuery: false`, simulating the
323
+ * one legitimate case: a wire adapter whose server declined the capability
324
+ * (docs/spec/adapters.md § Adapter capabilities). For exercising Stack's
325
+ * capability-gated fallbacks and the fail-loud assertQueryCapabilities
326
+ * check in tests; not a stand-in for a real local adapter.
327
+ */
328
+ export class IncapableMemoryAdapter extends MemoryAdapter {
329
+ capabilities = {
330
+ fullTextSearch: false,
331
+ contentFieldQuery: false,
332
+ sortableFields: ['createdAt', 'updatedAt', 'version'],
333
+ maxAttachmentBytes: null,
334
+ maxContentBytes: null,
335
+ };
336
+ }
337
+ /**
338
+ * Sets a record's associations, omitting the key entirely when empty —
339
+ * mirroring the SQL adapters' rowToRecord, so the same mutation sequence
340
+ * produces identically-shaped records on the test double and real storage.
341
+ */
342
+ function withAssociations(record, associations) {
343
+ const { associations: _drop, ...rest } = record;
344
+ return associations.length ? { ...rest, associations } : rest;
345
+ }
346
+ /**
347
+ * Mirrors Stack's private associationEqual(): identity is (kind, label) plus
348
+ * fileId for attachments / recordId for relationships.
349
+ */
350
+ function associationEqual(a, b) {
351
+ if (a.kind !== b.kind || a.label !== b.label)
352
+ return false;
353
+ if (a.kind === 'attachment' && b.kind === 'attachment')
354
+ return a.fileId === b.fileId;
355
+ if (a.kind === 'relationship' && b.kind === 'relationship')
356
+ return a.recordId === b.recordId;
357
+ return true;
358
+ }
118
359
  //# sourceMappingURL=testing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}