mindoodb 0.0.50 → 0.0.53
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-server.md +11 -2
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts +13 -1
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts.map +1 -1
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js +45 -20
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js.map +1 -1
- package/dist/appendonlystores/network/HttpTransport.d.ts +2 -0
- package/dist/appendonlystores/network/HttpTransport.d.ts.map +1 -1
- package/dist/appendonlystores/network/HttpTransport.js +6 -62
- package/dist/appendonlystores/network/HttpTransport.js.map +1 -1
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts +24 -0
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts.map +1 -1
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js +75 -24
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js.map +1 -1
- package/dist/browser/index.mjs +72 -0
- package/dist/core/BaseMindooDB.d.ts +89 -14
- package/dist/core/BaseMindooDB.d.ts.map +1 -1
- package/dist/core/BaseMindooDB.js +692 -201
- package/dist/core/BaseMindooDB.js.map +1 -1
- package/dist/core/BaseMindooTenant.d.ts +59 -7
- package/dist/core/BaseMindooTenant.d.ts.map +1 -1
- package/dist/core/BaseMindooTenant.js +427 -90
- package/dist/core/BaseMindooTenant.js.map +1 -1
- package/dist/core/BaseMindooTenantDirectory.d.ts +61 -9
- package/dist/core/BaseMindooTenantDirectory.d.ts.map +1 -1
- package/dist/core/BaseMindooTenantDirectory.js +363 -35
- package/dist/core/BaseMindooTenantDirectory.js.map +1 -1
- package/dist/core/BaseMindooTenantFactory.d.ts +17 -1
- package/dist/core/BaseMindooTenantFactory.d.ts.map +1 -1
- package/dist/core/BaseMindooTenantFactory.js +292 -16
- package/dist/core/BaseMindooTenantFactory.js.map +1 -1
- package/dist/core/accesscontrol/DirectoryStateNode.d.ts +68 -1
- package/dist/core/accesscontrol/DirectoryStateNode.d.ts.map +1 -1
- package/dist/core/accesscontrol/DirectoryStateNode.js +157 -4
- package/dist/core/accesscontrol/DirectoryStateNode.js.map +1 -1
- package/dist/core/accesscontrol/directoryProjection.d.ts.map +1 -1
- package/dist/core/accesscontrol/directoryProjection.js +14 -5
- package/dist/core/accesscontrol/directoryProjection.js.map +1 -1
- package/dist/core/accesscontrol/grantKeys.d.ts +17 -14
- package/dist/core/accesscontrol/grantKeys.d.ts.map +1 -1
- package/dist/core/accesscontrol/grantKeys.js +51 -21
- package/dist/core/accesscontrol/grantKeys.js.map +1 -1
- package/dist/core/accesscontrol/types.d.ts +13 -7
- package/dist/core/accesscontrol/types.d.ts.map +1 -1
- package/dist/core/accesscontrol/types.js +16 -10
- package/dist/core/accesscontrol/types.js.map +1 -1
- package/dist/core/appendonlystores/network/AuthenticationService.d.ts +7 -0
- package/dist/core/appendonlystores/network/AuthenticationService.d.ts.map +1 -1
- package/dist/core/appendonlystores/network/AuthenticationService.js +70 -14
- package/dist/core/appendonlystores/network/AuthenticationService.js.map +1 -1
- package/dist/core/appendonlystores/network/entryWireCodec.d.ts +51 -0
- package/dist/core/appendonlystores/network/entryWireCodec.d.ts.map +1 -0
- package/dist/core/appendonlystores/network/entryWireCodec.js +93 -0
- package/dist/core/appendonlystores/network/entryWireCodec.js.map +1 -0
- package/dist/core/builtinDbInvariants.d.ts +53 -0
- package/dist/core/builtinDbInvariants.d.ts.map +1 -0
- package/dist/core/builtinDbInvariants.js +147 -0
- package/dist/core/builtinDbInvariants.js.map +1 -0
- package/dist/core/copy/feasibility.d.ts.map +1 -1
- package/dist/core/copy/feasibility.js +3 -0
- package/dist/core/copy/feasibility.js.map +1 -1
- package/dist/core/copy/flatten.d.ts.map +1 -1
- package/dist/core/copy/flatten.js +7 -2
- package/dist/core/copy/flatten.js.map +1 -1
- package/dist/core/copy/host.d.ts +5 -0
- package/dist/core/copy/host.d.ts.map +1 -1
- package/dist/core/copy/preflight.d.ts.map +1 -1
- package/dist/core/copy/preflight.js +7 -1
- package/dist/core/copy/preflight.js.map +1 -1
- package/dist/core/copy/types.d.ts +8 -1
- package/dist/core/copy/types.d.ts.map +1 -1
- package/dist/core/crypto/EntrySignature.d.ts +8 -2
- package/dist/core/crypto/EntrySignature.d.ts.map +1 -1
- package/dist/core/crypto/EntrySignature.js +14 -5
- package/dist/core/crypto/EntrySignature.js.map +1 -1
- package/dist/core/crypto/MindooDocSigner.d.ts.map +1 -1
- package/dist/core/crypto/MindooDocSigner.js +11 -2
- package/dist/core/crypto/MindooDocSigner.js.map +1 -1
- package/dist/core/crypto/RSAEncryption.d.ts +19 -0
- package/dist/core/crypto/RSAEncryption.d.ts.map +1 -1
- package/dist/core/crypto/RSAEncryption.js +36 -3
- package/dist/core/crypto/RSAEncryption.js.map +1 -1
- package/dist/core/crypto/privateKeyEncryption.js +1 -1
- package/dist/core/crypto/privateKeyEncryption.js.map +1 -1
- package/dist/core/crypto/rsaOaep3072.d.ts +12 -0
- package/dist/core/crypto/rsaOaep3072.d.ts.map +1 -0
- package/dist/core/crypto/rsaOaep3072.js +30 -0
- package/dist/core/crypto/rsaOaep3072.js.map +1 -0
- package/dist/core/databaseIdValidation.d.ts +23 -0
- package/dist/core/databaseIdValidation.d.ts.map +1 -1
- package/dist/core/databaseIdValidation.js +59 -1
- package/dist/core/databaseIdValidation.js.map +1 -1
- package/dist/core/index.d.ts +9 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +40 -4
- package/dist/core/index.js.map +1 -1
- package/dist/core/join/deviceJoinBootstrap.d.ts +23 -0
- package/dist/core/join/deviceJoinBootstrap.d.ts.map +1 -0
- package/dist/core/join/deviceJoinBootstrap.js +37 -0
- package/dist/core/join/deviceJoinBootstrap.js.map +1 -0
- package/dist/core/keys/KeyBag.d.ts +20 -2
- package/dist/core/keys/KeyBag.d.ts.map +1 -1
- package/dist/core/keys/KeyBag.js +22 -10
- package/dist/core/keys/KeyBag.js.map +1 -1
- package/dist/core/logging/MindooLogger.d.ts.map +1 -1
- package/dist/core/logging/MindooLogger.js +65 -40
- package/dist/core/logging/MindooLogger.js.map +1 -1
- package/dist/core/tenantIdValidation.d.ts.map +1 -1
- package/dist/core/tenantIdValidation.js +1 -1
- package/dist/core/tenantIdValidation.js.map +1 -1
- package/dist/core/tenantSetup.d.ts +109 -0
- package/dist/core/tenantSetup.d.ts.map +1 -0
- package/dist/core/tenantSetup.js +250 -0
- package/dist/core/tenantSetup.js.map +1 -0
- package/dist/core/types.d.ts +333 -43
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +27 -9
- package/dist/core/types.js.map +1 -1
- package/dist/core/uri/joinRequestUri.d.ts +37 -0
- package/dist/core/uri/joinRequestUri.d.ts.map +1 -0
- package/dist/core/uri/joinRequestUri.js +168 -0
- package/dist/core/uri/joinRequestUri.js.map +1 -0
- package/dist/core/userid/canonicalUsername.d.ts +66 -0
- package/dist/core/userid/canonicalUsername.d.ts.map +1 -0
- package/dist/core/userid/canonicalUsername.js +235 -0
- package/dist/core/userid/canonicalUsername.js.map +1 -0
- package/dist/core/userid/index.d.ts +9 -0
- package/dist/core/userid/index.d.ts.map +1 -1
- package/dist/core/userid/index.js +14 -0
- package/dist/core/userid/index.js.map +1 -1
- package/dist/core/userkeys/UserKeyDocument.d.ts +50 -0
- package/dist/core/userkeys/UserKeyDocument.d.ts.map +1 -0
- package/dist/core/userkeys/UserKeyDocument.js +145 -0
- package/dist/core/userkeys/UserKeyDocument.js.map +1 -0
- package/dist/core/userkeys/UserKeyManager.d.ts +170 -0
- package/dist/core/userkeys/UserKeyManager.d.ts.map +1 -0
- package/dist/core/userkeys/UserKeyManager.js +1277 -0
- package/dist/core/userkeys/UserKeyManager.js.map +1 -0
- package/dist/core/userkeys/fingerprint.d.ts +17 -0
- package/dist/core/userkeys/fingerprint.d.ts.map +1 -0
- package/dist/core/userkeys/fingerprint.js +59 -0
- package/dist/core/userkeys/fingerprint.js.map +1 -0
- package/dist/core/userkeys/index.d.ts +11 -0
- package/dist/core/userkeys/index.d.ts.map +1 -0
- package/dist/core/userkeys/index.js +49 -0
- package/dist/core/userkeys/index.js.map +1 -0
- package/dist/core/userkeys/recipients.d.ts +51 -0
- package/dist/core/userkeys/recipients.d.ts.map +1 -0
- package/dist/core/userkeys/recipients.js +292 -0
- package/dist/core/userkeys/recipients.js.map +1 -0
- package/dist/core/userkeys/resolveUserKeyDocument.d.ts +21 -0
- package/dist/core/userkeys/resolveUserKeyDocument.d.ts.map +1 -0
- package/dist/core/userkeys/resolveUserKeyDocument.js +98 -0
- package/dist/core/userkeys/resolveUserKeyDocument.js.map +1 -0
- package/dist/core/userkeys/sealedCrypto.d.ts +21 -0
- package/dist/core/userkeys/sealedCrypto.d.ts.map +1 -0
- package/dist/core/userkeys/sealedCrypto.js +79 -0
- package/dist/core/userkeys/sealedCrypto.js.map +1 -0
- package/dist/core/userkeys/sealedTypes.d.ts +72 -0
- package/dist/core/userkeys/sealedTypes.d.ts.map +1 -0
- package/dist/core/userkeys/sealedTypes.js +14 -0
- package/dist/core/userkeys/sealedTypes.js.map +1 -0
- package/dist/core/userkeys/types.d.ts +70 -0
- package/dist/core/userkeys/types.d.ts.map +1 -0
- package/dist/core/userkeys/types.js +48 -0
- package/dist/core/userkeys/types.js.map +1 -0
- package/dist/core/userkeys/validateUserKeyDocument.d.ts +19 -0
- package/dist/core/userkeys/validateUserKeyDocument.d.ts.map +1 -0
- package/dist/core/userkeys/validateUserKeyDocument.js +42 -0
- package/dist/core/userkeys/validateUserKeyDocument.js.map +1 -0
- package/dist/core/utils/idGeneration.d.ts +39 -20
- package/dist/core/utils/idGeneration.d.ts.map +1 -1
- package/dist/core/utils/idGeneration.js +82 -62
- package/dist/core/utils/idGeneration.js.map +1 -1
- package/dist/core/utils/index.d.ts +1 -1
- package/dist/core/utils/index.d.ts.map +1 -1
- package/dist/core/utils/index.js +4 -1
- package/dist/core/utils/index.js.map +1 -1
- package/dist/node/server/CapabilityMatcher.d.ts +5 -0
- package/dist/node/server/CapabilityMatcher.d.ts.map +1 -1
- package/dist/node/server/CapabilityMatcher.js +10 -1
- package/dist/node/server/CapabilityMatcher.js.map +1 -1
- package/dist/node/server/DeviceDiscoveryService.d.ts +36 -0
- package/dist/node/server/DeviceDiscoveryService.d.ts.map +1 -0
- package/dist/node/server/DeviceDiscoveryService.js +165 -0
- package/dist/node/server/DeviceDiscoveryService.js.map +1 -0
- package/dist/node/server/MindooDBServer.d.ts +13 -0
- package/dist/node/server/MindooDBServer.d.ts.map +1 -1
- package/dist/node/server/MindooDBServer.js +99 -61
- package/dist/node/server/MindooDBServer.js.map +1 -1
- package/dist/node/server/SystemAdminAuth.d.ts +7 -0
- package/dist/node/server/SystemAdminAuth.d.ts.map +1 -1
- package/dist/node/server/SystemAdminAuth.js +4 -1
- package/dist/node/server/SystemAdminAuth.js.map +1 -1
- package/dist/node/server/TenantManager.d.ts +29 -0
- package/dist/node/server/TenantManager.d.ts.map +1 -1
- package/dist/node/server/TenantManager.js +146 -7
- package/dist/node/server/TenantManager.js.map +1 -1
- package/package.json +5 -5
|
@@ -7,30 +7,50 @@
|
|
|
7
7
|
* - Debugging visibility into entry relationships
|
|
8
8
|
* - Blockchain-like integrity for document entries
|
|
9
9
|
*/
|
|
10
|
+
/** MongoDB-style ObjectId length: 12 bytes → 24 lowercase hex chars. */
|
|
11
|
+
export declare const OBJECT_ID_LENGTH = 24;
|
|
10
12
|
/**
|
|
11
|
-
* Generate a
|
|
12
|
-
* fixed-length (22 char), left-zero-padded base62 string, optionally prefixed
|
|
13
|
-
* with `<prefix>_`.
|
|
13
|
+
* Generate a MongoDB-style ObjectId: 24 lowercase hex characters.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
15
|
+
* Layout (12 bytes):
|
|
16
|
+
* - 4-byte big-endian Unix timestamp (seconds)
|
|
17
|
+
* - 5-byte process-unique random value
|
|
18
|
+
* - 3-byte big-endian incrementing counter
|
|
19
|
+
*
|
|
20
|
+
* Leading timestamp bytes make ids lexicographically sortable by creation
|
|
21
|
+
* time. The alphabet is `0-9a-f` only — safe on case-insensitive filesystems.
|
|
22
|
+
*
|
|
23
|
+
* @param timeSeconds Optional Unix timestamp in seconds (for tests). Defaults
|
|
24
|
+
* to `Math.floor(Date.now() / 1000)`.
|
|
25
|
+
*/
|
|
26
|
+
export declare function generateObjectId(timeSeconds?: number): string;
|
|
27
|
+
/**
|
|
28
|
+
* Generate a fresh, globally unique document id: a MongoDB-style ObjectId
|
|
29
|
+
* (24-char lowercase hex), optionally prefixed with `<prefix>_`.
|
|
30
|
+
*
|
|
31
|
+
* Because the ObjectId timestamp occupies the leading bytes, ids generated
|
|
32
|
+
* later sort lexicographically after earlier ones (within the same prefix).
|
|
19
33
|
*
|
|
20
34
|
* The prefix (if any) is NOT validated here; callers validate it against
|
|
21
35
|
* `DOC_ID_PREFIX_REGEX` before invoking this.
|
|
22
36
|
*
|
|
23
37
|
* @param prefix Optional short application prefix (e.g. "cls"); joined with "_".
|
|
24
|
-
* @returns e.g. "
|
|
38
|
+
* @returns e.g. "507f1f77bcf86cd799439011" or "cls_507f1f77bcf86cd799439011"
|
|
25
39
|
*/
|
|
26
40
|
export declare function generateDocId(prefix?: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* Generate a fresh tenant id: MongoDB-style ObjectId (24-char lowercase hex).
|
|
43
|
+
* Same format as {@link generateDocId} without a prefix — unique, time-sortable,
|
|
44
|
+
* and case-insensitive-filesystem safe.
|
|
45
|
+
*/
|
|
46
|
+
export declare function generateTenantId(): string;
|
|
27
47
|
/**
|
|
28
48
|
* Boundary-aware document-id prefix match used by prefix-filtered listing and
|
|
29
49
|
* changefeed iteration.
|
|
30
50
|
*
|
|
31
51
|
* A `docId` matches `idPrefix` when it either equals the prefix exactly or
|
|
32
52
|
* begins with `<idPrefix>_`. Matching on the `_` boundary (rather than a raw
|
|
33
|
-
* `startsWith`) mirrors the `<prefix>_<
|
|
53
|
+
* `startsWith`) mirrors the `<prefix>_<objectId>` id scheme, so filtering by
|
|
34
54
|
* `"cls"` returns `cls_…` documents without also catching an unrelated prefix
|
|
35
55
|
* like `classroom_…`.
|
|
36
56
|
*
|
|
@@ -65,25 +85,24 @@ export declare function generateDocEntryId(docId: string, automergeHash: string,
|
|
|
65
85
|
export declare function generateDepsFingerprint(dependencyAutomergeHashes: string[], subtle: SubtleCrypto): Promise<string>;
|
|
66
86
|
/**
|
|
67
87
|
* Generate an attachment chunk ID.
|
|
68
|
-
* Format: <docId>_a_<fileUuid7>_<
|
|
88
|
+
* Format: <docId>_a_<fileUuid7>_<objectId>
|
|
69
89
|
*
|
|
70
90
|
* @param docId The document ID this attachment belongs to
|
|
71
91
|
* @param fileUuid7 The UUID7 for the whole file (same for all chunks)
|
|
72
|
-
* @param
|
|
92
|
+
* @param chunkObjectId Optional 24-char ObjectId for this chunk. If omitted, a
|
|
93
|
+
* fresh ObjectId is generated.
|
|
73
94
|
* @returns The generated chunk ID
|
|
74
95
|
*/
|
|
75
|
-
export declare function generateAttachmentChunkId(docId: string, fileUuid7: string,
|
|
96
|
+
export declare function generateAttachmentChunkId(docId: string, fileUuid7: string, chunkObjectId?: string): string;
|
|
76
97
|
/**
|
|
77
98
|
* Generate an attachment chunk id that is unique within one write operation
|
|
78
99
|
* even under case-insensitive comparison.
|
|
79
100
|
*
|
|
80
|
-
* Chunk entry ids become on-disk filenames (`entries/<id>.json`)
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
* unlikely) fold-collision the id is simply regenerated. The set is expected
|
|
86
|
-
* to be scoped to a single attachment write, so there is no persistent cost.
|
|
101
|
+
* Chunk entry ids become on-disk filenames (`entries/<id>.json`). New chunk
|
|
102
|
+
* suffixes are lowercase ObjectIds, but legacy mixed-case suffixes may still
|
|
103
|
+
* appear; the caller passes a set of case-folded ids already used in the
|
|
104
|
+
* current write and on a fold-collision the id is regenerated. The set is
|
|
105
|
+
* expected to be scoped to a single attachment write.
|
|
87
106
|
*
|
|
88
107
|
* @param docId The document ID this attachment belongs to
|
|
89
108
|
* @param fileUuid7 The UUID7 for the whole file (same for all chunks)
|
|
@@ -126,7 +145,7 @@ export declare function parseDocEntryId(id: string): {
|
|
|
126
145
|
export declare function parseAttachmentChunkId(id: string): {
|
|
127
146
|
docId: string;
|
|
128
147
|
fileUuid7: string;
|
|
129
|
-
|
|
148
|
+
chunkObjectId: string;
|
|
130
149
|
} | null;
|
|
131
150
|
/**
|
|
132
151
|
* Check if an ID is a document entry ID (contains "_d_").
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idGeneration.d.ts","sourceRoot":"","sources":["../../../src/core/utils/idGeneration.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"idGeneration.d.ts","sourceRoot":"","sources":["../../../src/core/utils/idGeneration.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAgCnC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAa7D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG3E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,yBAAyB,EAAE,MAAM,EAAE,EACnC,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,yBAAyB,EAAE,MAAM,EAAE,EACnC,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,CAAC,CAajB;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CAGR;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC7B,MAAM,CASR;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,IAAI,CAUP;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,IAAI,CASP;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASjE;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,CAAC,CAOjB"}
|
|
@@ -9,7 +9,10 @@
|
|
|
9
9
|
* - Blockchain-like integrity for document entries
|
|
10
10
|
*/
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.OBJECT_ID_LENGTH = void 0;
|
|
13
|
+
exports.generateObjectId = generateObjectId;
|
|
12
14
|
exports.generateDocId = generateDocId;
|
|
15
|
+
exports.generateTenantId = generateTenantId;
|
|
13
16
|
exports.matchesDocIdPrefix = matchesDocIdPrefix;
|
|
14
17
|
exports.generateDocEntryId = generateDocEntryId;
|
|
15
18
|
exports.generateDepsFingerprint = generateDepsFingerprint;
|
|
@@ -24,75 +27,94 @@ exports.isAttachmentChunkId = isAttachmentChunkId;
|
|
|
24
27
|
exports.extractDocIdFromEntryId = extractDocIdFromEntryId;
|
|
25
28
|
exports.computeContentHash = computeContentHash;
|
|
26
29
|
const uuid_1 = require("uuid");
|
|
27
|
-
/**
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const UUID_NO_DASH_LENGTH = 32;
|
|
35
|
-
const BASE62_UUID_LENGTH = 22;
|
|
36
|
-
function trimLeft(target, length) {
|
|
37
|
-
let trim = 0;
|
|
38
|
-
while (target[trim] === "0" && target.length - trim > length) {
|
|
39
|
-
trim++;
|
|
30
|
+
/** MongoDB-style ObjectId length: 12 bytes → 24 lowercase hex chars. */
|
|
31
|
+
exports.OBJECT_ID_LENGTH = 24;
|
|
32
|
+
function randomBytes(length) {
|
|
33
|
+
const bytes = new Uint8Array(length);
|
|
34
|
+
if (typeof crypto !== "undefined" && typeof crypto.getRandomValues === "function") {
|
|
35
|
+
crypto.getRandomValues(bytes);
|
|
36
|
+
return bytes;
|
|
40
37
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
function ensureLength(target, length) {
|
|
44
|
-
if (target.length < length) {
|
|
45
|
-
return target.padStart(length, "0");
|
|
38
|
+
for (let i = 0; i < length; i++) {
|
|
39
|
+
bytes[i] = Math.floor(Math.random() * 256);
|
|
46
40
|
}
|
|
47
|
-
|
|
48
|
-
return trimLeft(target, length);
|
|
49
|
-
}
|
|
50
|
-
return target;
|
|
41
|
+
return bytes;
|
|
51
42
|
}
|
|
52
|
-
function
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
let value = BigInt(`0x${normalized}`);
|
|
58
|
-
if (value === 0n) {
|
|
59
|
-
return "0".repeat(BASE62_UUID_LENGTH);
|
|
43
|
+
function bytesToHex(bytes) {
|
|
44
|
+
let out = "";
|
|
45
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
46
|
+
out += bytes[i].toString(16).padStart(2, "0");
|
|
60
47
|
}
|
|
61
|
-
|
|
62
|
-
while (value > 0n) {
|
|
63
|
-
const digit = Number(value % 62n);
|
|
64
|
-
encoded = BASE62_ALPHABET[digit] + encoded;
|
|
65
|
-
value /= 62n;
|
|
66
|
-
}
|
|
67
|
-
return ensureLength(encoded, BASE62_UUID_LENGTH);
|
|
48
|
+
return out;
|
|
68
49
|
}
|
|
69
50
|
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
51
|
+
* Process-unique 5-byte machine/process id (MongoDB ObjectId layout).
|
|
52
|
+
* Regenerated once per JS realm so concurrent realms don't share the same
|
|
53
|
+
* random prefix.
|
|
54
|
+
*/
|
|
55
|
+
const OBJECT_ID_PROCESS_UNIQUE = randomBytes(5);
|
|
56
|
+
/** 3-byte counter; seeded randomly then incremented per id (wraps at 2^24). */
|
|
57
|
+
let objectIdCounter = Math.floor(Math.random() * 0xffffff);
|
|
58
|
+
/**
|
|
59
|
+
* Generate a MongoDB-style ObjectId: 24 lowercase hex characters.
|
|
60
|
+
*
|
|
61
|
+
* Layout (12 bytes):
|
|
62
|
+
* - 4-byte big-endian Unix timestamp (seconds)
|
|
63
|
+
* - 5-byte process-unique random value
|
|
64
|
+
* - 3-byte big-endian incrementing counter
|
|
73
65
|
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
66
|
+
* Leading timestamp bytes make ids lexicographically sortable by creation
|
|
67
|
+
* time. The alphabet is `0-9a-f` only — safe on case-insensitive filesystems.
|
|
68
|
+
*
|
|
69
|
+
* @param timeSeconds Optional Unix timestamp in seconds (for tests). Defaults
|
|
70
|
+
* to `Math.floor(Date.now() / 1000)`.
|
|
71
|
+
*/
|
|
72
|
+
function generateObjectId(timeSeconds) {
|
|
73
|
+
const seconds = timeSeconds ?? Math.floor(Date.now() / 1000);
|
|
74
|
+
const bytes = new Uint8Array(12);
|
|
75
|
+
bytes[0] = (seconds >>> 24) & 0xff;
|
|
76
|
+
bytes[1] = (seconds >>> 16) & 0xff;
|
|
77
|
+
bytes[2] = (seconds >>> 8) & 0xff;
|
|
78
|
+
bytes[3] = seconds & 0xff;
|
|
79
|
+
bytes.set(OBJECT_ID_PROCESS_UNIQUE, 4);
|
|
80
|
+
objectIdCounter = (objectIdCounter + 1) & 0xffffff;
|
|
81
|
+
bytes[9] = (objectIdCounter >>> 16) & 0xff;
|
|
82
|
+
bytes[10] = (objectIdCounter >>> 8) & 0xff;
|
|
83
|
+
bytes[11] = objectIdCounter & 0xff;
|
|
84
|
+
return bytesToHex(bytes);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Generate a fresh, globally unique document id: a MongoDB-style ObjectId
|
|
88
|
+
* (24-char lowercase hex), optionally prefixed with `<prefix>_`.
|
|
89
|
+
*
|
|
90
|
+
* Because the ObjectId timestamp occupies the leading bytes, ids generated
|
|
91
|
+
* later sort lexicographically after earlier ones (within the same prefix).
|
|
78
92
|
*
|
|
79
93
|
* The prefix (if any) is NOT validated here; callers validate it against
|
|
80
94
|
* `DOC_ID_PREFIX_REGEX` before invoking this.
|
|
81
95
|
*
|
|
82
96
|
* @param prefix Optional short application prefix (e.g. "cls"); joined with "_".
|
|
83
|
-
* @returns e.g. "
|
|
97
|
+
* @returns e.g. "507f1f77bcf86cd799439011" or "cls_507f1f77bcf86cd799439011"
|
|
84
98
|
*/
|
|
85
99
|
function generateDocId(prefix) {
|
|
86
|
-
const encoded =
|
|
100
|
+
const encoded = generateObjectId();
|
|
87
101
|
return prefix ? `${prefix}_${encoded}` : encoded;
|
|
88
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* Generate a fresh tenant id: MongoDB-style ObjectId (24-char lowercase hex).
|
|
105
|
+
* Same format as {@link generateDocId} without a prefix — unique, time-sortable,
|
|
106
|
+
* and case-insensitive-filesystem safe.
|
|
107
|
+
*/
|
|
108
|
+
function generateTenantId() {
|
|
109
|
+
return generateObjectId();
|
|
110
|
+
}
|
|
89
111
|
/**
|
|
90
112
|
* Boundary-aware document-id prefix match used by prefix-filtered listing and
|
|
91
113
|
* changefeed iteration.
|
|
92
114
|
*
|
|
93
115
|
* A `docId` matches `idPrefix` when it either equals the prefix exactly or
|
|
94
116
|
* begins with `<idPrefix>_`. Matching on the `_` boundary (rather than a raw
|
|
95
|
-
* `startsWith`) mirrors the `<prefix>_<
|
|
117
|
+
* `startsWith`) mirrors the `<prefix>_<objectId>` id scheme, so filtering by
|
|
96
118
|
* `"cls"` returns `cls_…` documents without also catching an unrelated prefix
|
|
97
119
|
* like `classroom_…`.
|
|
98
120
|
*
|
|
@@ -146,29 +168,27 @@ async function generateDepsFingerprint(dependencyAutomergeHashes, subtle) {
|
|
|
146
168
|
}
|
|
147
169
|
/**
|
|
148
170
|
* Generate an attachment chunk ID.
|
|
149
|
-
* Format: <docId>_a_<fileUuid7>_<
|
|
171
|
+
* Format: <docId>_a_<fileUuid7>_<objectId>
|
|
150
172
|
*
|
|
151
173
|
* @param docId The document ID this attachment belongs to
|
|
152
174
|
* @param fileUuid7 The UUID7 for the whole file (same for all chunks)
|
|
153
|
-
* @param
|
|
175
|
+
* @param chunkObjectId Optional 24-char ObjectId for this chunk. If omitted, a
|
|
176
|
+
* fresh ObjectId is generated.
|
|
154
177
|
* @returns The generated chunk ID
|
|
155
178
|
*/
|
|
156
|
-
function generateAttachmentChunkId(docId, fileUuid7,
|
|
157
|
-
const chunkId =
|
|
158
|
-
|
|
159
|
-
return `${docId}_a_${fileUuid7}_${base62Chunk}`;
|
|
179
|
+
function generateAttachmentChunkId(docId, fileUuid7, chunkObjectId) {
|
|
180
|
+
const chunkId = chunkObjectId ?? generateObjectId();
|
|
181
|
+
return `${docId}_a_${fileUuid7}_${chunkId}`;
|
|
160
182
|
}
|
|
161
183
|
/**
|
|
162
184
|
* Generate an attachment chunk id that is unique within one write operation
|
|
163
185
|
* even under case-insensitive comparison.
|
|
164
186
|
*
|
|
165
|
-
* Chunk entry ids become on-disk filenames (`entries/<id>.json`)
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
* unlikely) fold-collision the id is simply regenerated. The set is expected
|
|
171
|
-
* to be scoped to a single attachment write, so there is no persistent cost.
|
|
187
|
+
* Chunk entry ids become on-disk filenames (`entries/<id>.json`). New chunk
|
|
188
|
+
* suffixes are lowercase ObjectIds, but legacy mixed-case suffixes may still
|
|
189
|
+
* appear; the caller passes a set of case-folded ids already used in the
|
|
190
|
+
* current write and on a fold-collision the id is regenerated. The set is
|
|
191
|
+
* expected to be scoped to a single attachment write.
|
|
172
192
|
*
|
|
173
193
|
* @param docId The document ID this attachment belongs to
|
|
174
194
|
* @param fileUuid7 The UUID7 for the whole file (same for all chunks)
|
|
@@ -229,14 +249,14 @@ function parseDocEntryId(id) {
|
|
|
229
249
|
* @returns The parsed components, or null if the ID doesn't match the expected format
|
|
230
250
|
*/
|
|
231
251
|
function parseAttachmentChunkId(id) {
|
|
232
|
-
// Match: <docId>_a_<fileUuid7>_<
|
|
252
|
+
// Match: <docId>_a_<fileUuid7>_<chunkObjectId> (legacy suffixes also parse)
|
|
233
253
|
const match = id.match(/^(.+)_a_([^_]+)_(.+)$/);
|
|
234
254
|
if (!match)
|
|
235
255
|
return null;
|
|
236
256
|
return {
|
|
237
257
|
docId: match[1],
|
|
238
258
|
fileUuid7: match[2],
|
|
239
|
-
|
|
259
|
+
chunkObjectId: match[3],
|
|
240
260
|
};
|
|
241
261
|
}
|
|
242
262
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idGeneration.js","sourceRoot":"","sources":["../../../src/core/utils/idGeneration.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG
|
|
1
|
+
{"version":3,"file":"idGeneration.js","sourceRoot":"","sources":["../../../src/core/utils/idGeneration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Core utility functions for MindooDB.
|
|
3
3
|
*/
|
|
4
|
-
export { generateDocId, matchesDocIdPrefix, generateDocEntryId, generateDepsFingerprint, generateAttachmentChunkId, generateUniqueAttachmentChunkId, generateFileUuid7, generateChunkUuid7, parseDocEntryId, parseAttachmentChunkId, isDocEntryId, isAttachmentChunkId, extractDocIdFromEntryId, computeContentHash, } from './idGeneration';
|
|
4
|
+
export { generateObjectId, OBJECT_ID_LENGTH, generateDocId, generateTenantId, matchesDocIdPrefix, generateDocEntryId, generateDepsFingerprint, generateAttachmentChunkId, generateUniqueAttachmentChunkId, generateFileUuid7, generateChunkUuid7, parseDocEntryId, parseAttachmentChunkId, isDocEntryId, isAttachmentChunkId, extractDocIdFromEntryId, computeContentHash, } from './idGeneration';
|
|
5
5
|
export { semanticNow, setSemanticTimeSourceForTesting, createQuantizedTimeSource, } from './timeSource';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,+BAA+B,EAC/B,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,YAAY,EACZ,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,WAAW,EACX,+BAA+B,EAC/B,yBAAyB,GAC1B,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,+BAA+B,EAC/B,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,YAAY,EACZ,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,WAAW,EACX,+BAA+B,EAC/B,yBAAyB,GAC1B,MAAM,cAAc,CAAC"}
|
package/dist/core/utils/index.js
CHANGED
|
@@ -3,9 +3,12 @@
|
|
|
3
3
|
* Core utility functions for MindooDB.
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.createQuantizedTimeSource = exports.setSemanticTimeSourceForTesting = exports.semanticNow = exports.computeContentHash = exports.extractDocIdFromEntryId = exports.isAttachmentChunkId = exports.isDocEntryId = exports.parseAttachmentChunkId = exports.parseDocEntryId = exports.generateChunkUuid7 = exports.generateFileUuid7 = exports.generateUniqueAttachmentChunkId = exports.generateAttachmentChunkId = exports.generateDepsFingerprint = exports.generateDocEntryId = exports.matchesDocIdPrefix = exports.generateDocId = void 0;
|
|
6
|
+
exports.createQuantizedTimeSource = exports.setSemanticTimeSourceForTesting = exports.semanticNow = exports.computeContentHash = exports.extractDocIdFromEntryId = exports.isAttachmentChunkId = exports.isDocEntryId = exports.parseAttachmentChunkId = exports.parseDocEntryId = exports.generateChunkUuid7 = exports.generateFileUuid7 = exports.generateUniqueAttachmentChunkId = exports.generateAttachmentChunkId = exports.generateDepsFingerprint = exports.generateDocEntryId = exports.matchesDocIdPrefix = exports.generateTenantId = exports.generateDocId = exports.OBJECT_ID_LENGTH = exports.generateObjectId = void 0;
|
|
7
7
|
var idGeneration_1 = require("./idGeneration");
|
|
8
|
+
Object.defineProperty(exports, "generateObjectId", { enumerable: true, get: function () { return idGeneration_1.generateObjectId; } });
|
|
9
|
+
Object.defineProperty(exports, "OBJECT_ID_LENGTH", { enumerable: true, get: function () { return idGeneration_1.OBJECT_ID_LENGTH; } });
|
|
8
10
|
Object.defineProperty(exports, "generateDocId", { enumerable: true, get: function () { return idGeneration_1.generateDocId; } });
|
|
11
|
+
Object.defineProperty(exports, "generateTenantId", { enumerable: true, get: function () { return idGeneration_1.generateTenantId; } });
|
|
9
12
|
Object.defineProperty(exports, "matchesDocIdPrefix", { enumerable: true, get: function () { return idGeneration_1.matchesDocIdPrefix; } });
|
|
10
13
|
Object.defineProperty(exports, "generateDocEntryId", { enumerable: true, get: function () { return idGeneration_1.generateDocEntryId; } });
|
|
11
14
|
Object.defineProperty(exports, "generateDepsFingerprint", { enumerable: true, get: function () { return idGeneration_1.generateDepsFingerprint; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/utils/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/utils/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+CAkBwB;AAjBtB,gHAAA,gBAAgB,OAAA;AAChB,gHAAA,gBAAgB,OAAA;AAChB,6GAAA,aAAa,OAAA;AACb,gHAAA,gBAAgB,OAAA;AAChB,kHAAA,kBAAkB,OAAA;AAClB,kHAAA,kBAAkB,OAAA;AAClB,uHAAA,uBAAuB,OAAA;AACvB,yHAAA,yBAAyB,OAAA;AACzB,+HAAA,+BAA+B,OAAA;AAC/B,iHAAA,iBAAiB,OAAA;AACjB,kHAAA,kBAAkB,OAAA;AAClB,+GAAA,eAAe,OAAA;AACf,sHAAA,sBAAsB,OAAA;AACtB,4GAAA,YAAY,OAAA;AACZ,mHAAA,mBAAmB,OAAA;AACnB,uHAAA,uBAAuB,OAAA;AACvB,kHAAA,kBAAkB,OAAA;AAGpB,2CAIsB;AAHpB,yGAAA,WAAW,OAAA;AACX,6HAAA,+BAA+B,OAAA;AAC/B,uHAAA,yBAAyB,OAAA"}
|
|
@@ -52,4 +52,9 @@ export declare class CapabilityMatcher {
|
|
|
52
52
|
*/
|
|
53
53
|
private pathMatches;
|
|
54
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Parse `/system/tenants/:tenantId` (optional trailing slash, no sub-resource).
|
|
57
|
+
* Returns the tenant id segment or `null`.
|
|
58
|
+
*/
|
|
59
|
+
export declare function parseSystemTenantItemPath(path: string): string | null;
|
|
55
60
|
//# sourceMappingURL=CapabilityMatcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CapabilityMatcher.d.ts","sourceRoot":"","sources":["../../../src/node/server/CapabilityMatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAwB,MAAM,SAAS,CAAC;AASlE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAAe;gBAEhB,MAAM,EAAE,YAAY;IAKhC;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAKlC,OAAO,CAAC,WAAW;IAUnB;;;;OAIG;IACH,YAAY,CACV,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GACpB,OAAO;IA2BV;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO;IAuBjE,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,uBAAuB;IAI/B;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAInC;;;OAGG;IACH,OAAO,CAAC,WAAW;CAoBpB"}
|
|
1
|
+
{"version":3,"file":"CapabilityMatcher.d.ts","sourceRoot":"","sources":["../../../src/node/server/CapabilityMatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAwB,MAAM,SAAS,CAAC;AASlE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAAe;gBAEhB,MAAM,EAAE,YAAY;IAKhC;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAKlC,OAAO,CAAC,WAAW;IAUnB;;;;OAIG;IACH,YAAY,CACV,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GACpB,OAAO;IA2BV;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO;IAuBjE,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,uBAAuB;IAI/B;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAInC;;;OAGG;IACH,OAAO,CAAC,WAAW;CAoBpB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGrE"}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.CapabilityMatcher = void 0;
|
|
16
|
+
exports.parseSystemTenantItemPath = parseSystemTenantItemPath;
|
|
16
17
|
const config_1 = require("./config");
|
|
17
18
|
class CapabilityMatcher {
|
|
18
19
|
constructor(config) {
|
|
@@ -103,7 +104,7 @@ class CapabilityMatcher {
|
|
|
103
104
|
* but no further path segment.
|
|
104
105
|
*/
|
|
105
106
|
static isTenantCreationPath(path) {
|
|
106
|
-
return
|
|
107
|
+
return parseSystemTenantItemPath(path) !== null;
|
|
107
108
|
}
|
|
108
109
|
/**
|
|
109
110
|
* Match a path pattern against a request path.
|
|
@@ -126,4 +127,12 @@ class CapabilityMatcher {
|
|
|
126
127
|
}
|
|
127
128
|
}
|
|
128
129
|
exports.CapabilityMatcher = CapabilityMatcher;
|
|
130
|
+
/**
|
|
131
|
+
* Parse `/system/tenants/:tenantId` (optional trailing slash, no sub-resource).
|
|
132
|
+
* Returns the tenant id segment or `null`.
|
|
133
|
+
*/
|
|
134
|
+
function parseSystemTenantItemPath(path) {
|
|
135
|
+
const match = /^\/system\/tenants\/([^/]+)\/?$/.exec(path);
|
|
136
|
+
return match ? match[1] : null;
|
|
137
|
+
}
|
|
129
138
|
//# sourceMappingURL=CapabilityMatcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CapabilityMatcher.js","sourceRoot":"","sources":["../../../src/node/server/CapabilityMatcher.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;
|
|
1
|
+
{"version":3,"file":"CapabilityMatcher.js","sourceRoot":"","sources":["../../../src/node/server/CapabilityMatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-wide device discovery: prove possession of a device signing key,
|
|
3
|
+
* then scan all tenants for an active grant and deliver RSA-wrapped
|
|
4
|
+
* `$publicinfos` plus admin public keys and the per-device join bootstrap —
|
|
5
|
+
* no join-response URI required.
|
|
6
|
+
*/
|
|
7
|
+
import type { CryptoAdapter } from "../../core/crypto/CryptoAdapter";
|
|
8
|
+
import type { DeviceTenantDelivery } from "../../core/types";
|
|
9
|
+
import type { TenantManager } from "./TenantManager";
|
|
10
|
+
export type { DeviceTenantDelivery };
|
|
11
|
+
export interface DeviceDiscoverResult {
|
|
12
|
+
tenants: DeviceTenantDelivery[];
|
|
13
|
+
}
|
|
14
|
+
export declare class DeviceDiscoveryAuthError extends Error {
|
|
15
|
+
constructor(message: string);
|
|
16
|
+
}
|
|
17
|
+
export declare class DeviceDiscoveryService {
|
|
18
|
+
private readonly tenantManager;
|
|
19
|
+
private readonly cryptoAdapter;
|
|
20
|
+
private challenges;
|
|
21
|
+
constructor(tenantManager: TenantManager, cryptoAdapter: CryptoAdapter);
|
|
22
|
+
/**
|
|
23
|
+
* Issue a short-lived, single-use challenge bound to `signingPublicKey`.
|
|
24
|
+
* Does not require the key to be on any tenant yet (discovery finds that).
|
|
25
|
+
*/
|
|
26
|
+
createChallenge(signingPublicKey: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Verify the Ed25519 signature over the challenge, then scan every local
|
|
29
|
+
* tenant for an active grant containing this signing key. Matching tenants
|
|
30
|
+
* receive a delivery with RSA-wrapped `$publicinfos` (parallelized).
|
|
31
|
+
*/
|
|
32
|
+
discover(challenge: string, signature: Uint8Array): Promise<DeviceDiscoverResult>;
|
|
33
|
+
private verifySignature;
|
|
34
|
+
private cleanup;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=DeviceDiscoveryService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeviceDiscoveryService.d.ts","sourceRoot":"","sources":["../../../src/node/server/DeviceDiscoveryService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAarD,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAErC,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,sBAAsB;IAI/B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAJhC,OAAO,CAAC,UAAU,CAAsC;gBAGrC,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa;IAG/C;;;OAGG;IACH,eAAe,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM;IAkBjD;;;;OAIG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,oBAAoB,CAAC;YA0GzE,eAAe;IAkC7B,OAAO,CAAC,OAAO;CAahB"}
|