@degenerate/sharedata 0.7.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.
package/README.md CHANGED
@@ -44,7 +44,10 @@ ship here:
44
44
  | `FirestoreShareDataRepository` | one Firestore document per block | hosted/multi-node deployments |
45
45
  | `InMemoryShareDataRepository` | an in-process `Map` | tests and parity (still round-trips the trust gate) |
46
46
 
47
- `firebase-admin` is an **optional peer dependency** — only install it if you
48
- use `FirestoreShareDataRepository`. The repository takes an injected
49
- `firestore.Firestore` instance (the host initializes its own app); the package
50
- never references `firebase-admin` at runtime.
47
+ `firebase-admin` (13.9+ or 14) is an optional peer dependency, here and in `@degenerate/generic`.
48
+ This package's own code only uses its types: `FirestoreShareDataRepository` takes an injected
49
+ `Firestore` instance (from `firebase-admin/firestore`; the host initializes its own app), so install
50
+ firebase-admin yourself when you use it. Nothing else needs it at runtime. The type declarations
51
+ of this package and `@degenerate/generic` do import its types, so a TypeScript project needs it
52
+ installed (a dev dependency is enough) to typecheck against them; see the `@degenerate/generic`
53
+ README.
@@ -1,4 +1,4 @@
1
- import type { firestore } from 'firebase-admin';
1
+ import type { Firestore } from 'firebase-admin/firestore';
2
2
  import { LibraryStore, PersistedShareData } from '@degenerate/generic';
3
3
  import { ShareData } from '../share-data/share-data';
4
4
  import { ShareDataRepository } from './share-data-repository';
@@ -14,7 +14,7 @@ export declare class FirestoreShareDataRepository implements ShareDataRepository
14
14
  private readonly firestore;
15
15
  private readonly collectionName;
16
16
  private readonly libraryStore?;
17
- constructor(firestore: firestore.Firestore, collectionName?: string, libraryStore?: LibraryStore | undefined);
17
+ constructor(firestore: Firestore, collectionName?: string, libraryStore?: LibraryStore | undefined);
18
18
  save(snapshot: PersistedShareData): Promise<void>;
19
19
  load(id: string): Promise<ShareData | undefined>;
20
20
  loadAll(): Promise<ShareData[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"firestore-share-data-repository.d.ts","sourceRoot":"","sources":["../../src/persistence/firestore-share-data-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EAEH,YAAY,EACZ,kBAAkB,EAGrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAU9D;;;;;;;GAOG;AACH,qBAAa,4BAA6B,YAAW,mBAAmB;IAEhE,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAFb,SAAS,EAAE,SAAS,CAAC,SAAS,EAC9B,cAAc,GAAE,MAAuD,EACvE,YAAY,CAAC,EAAE,YAAY,YAAA;IAG1C,IAAI,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAQhD,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAK/B,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAOjD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,OAAO,CAAC,MAAM;IAId;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAIvB;;;;;;OAMG;IACH,OAAO,CAAC,KAAK;CAYhB"}
1
+ {"version":3,"file":"firestore-share-data-repository.d.ts","sourceRoot":"","sources":["../../src/persistence/firestore-share-data-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmC,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE3F,OAAO,EAEH,YAAY,EACZ,kBAAkB,EAIrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAU9D;;;;;;;GAOG;AACH,qBAAa,4BAA6B,YAAW,mBAAmB;IAEhE,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAFb,SAAS,EAAE,SAAS,EACpB,cAAc,GAAE,MAAuD,EACvE,YAAY,CAAC,EAAE,YAAY,YAAA;IAG1C,IAAI,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAQhD,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAK/B,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAOjD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,OAAO,CAAC,MAAM;IAId;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAIvB;;;;;;OAMG;IACH,OAAO,CAAC,KAAK;CAShB"}
@@ -66,11 +66,10 @@ class FirestoreShareDataRepository {
66
66
  * rejected rather than silently writing to an unexpected document or path.
67
67
  */
68
68
  docId(id) {
69
- if (id.length === 0 ||
70
- id.includes('/') ||
71
- id === '.' ||
72
- id === '..' ||
73
- /^__.*__$/.test(id)) {
69
+ // The shared Firestore id rule: refuses empty, '/', '.', '..', reserved (`__x__`, including
70
+ // with a line terminator inside), over 1,500 bytes, and a lone UTF-16 surrogate, which
71
+ // Firestore would turn into U+FFFD and so read, write or delete a different document.
72
+ if (!(0, generic_1.isFirestoreDocumentId)(id)) {
74
73
  throw new generic_1.ShareDataPersistenceError(id, 'invalid Firestore document id');
75
74
  }
76
75
  return id;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@degenerate/sharedata",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "This contains the ShareData Adaptive Framework Ecosystem (SAFE) network core code",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -16,6 +16,7 @@
16
16
  "scripts": {
17
17
  "build": "rm -rf dist/* && tsc -p tsconfig.pkg.json",
18
18
  "compile": "rm -rf dist/* && tsc -p tsconfig.pkg.json",
19
+ "typecheck": "tsc -p tsconfig.test.json --noEmit",
19
20
  "test": "jest --forceExit --detectOpenHandles --verbose --silent=false --env node",
20
21
  "test:coverage": "jest --forceExit --coverage --detectOpenHandles --verbose --silent=false --env node ",
21
22
  "test:clearCache": "jest --clearCache"
@@ -23,13 +24,13 @@
23
24
  "devDependencies": {
24
25
  "@types/jest": "^30.0.0",
25
26
  "@types/node": "^22.19.18",
26
- "firebase-admin": "^13.10.0",
27
+ "firebase-admin": "^14.5.0",
27
28
  "jest": "^30.4.2",
28
29
  "ts-jest": "^29.4.9",
29
30
  "typescript": "^6.0.3"
30
31
  },
31
32
  "peerDependencies": {
32
- "firebase-admin": "^13.10.0"
33
+ "firebase-admin": "^13.9.0 || ^14.0.0"
33
34
  },
34
35
  "peerDependenciesMeta": {
35
36
  "firebase-admin": {
@@ -49,11 +50,11 @@
49
50
  "url": "https://github.com/syncrude/safe/issues"
50
51
  },
51
52
  "homepage": "https://github.com/syncrude/safe#readme",
52
- "gitHead": "1f747e160c9022863c7b2d7b8a6a157f204be95b",
53
+ "gitHead": "ba6cf5462c9912afb489984812703c0ce889472c",
53
54
  "dependencies": {
54
- "@degenerate/generic": "^0.7.0",
55
- "@degenerate/rules": "^0.7.0",
56
- "zod": "^4.4.3"
55
+ "@degenerate/generic": "^0.9.0",
56
+ "@degenerate/rules": "^0.9.0",
57
+ "zod": "^4.6.6"
57
58
  },
58
59
  "engines": {
59
60
  "node": ">=22"