@tearleads/client-sdk 0.1.114 → 0.1.116
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/client/containerContents/documentDiscovery.js +5 -3
- package/client/containerContents/documentDiscovery.js.map +1 -1
- package/data/persistence/container-contents/containerRecoveryPersistence.js +152 -38
- package/data/persistence/container-contents/containerRecoveryPersistence.js.map +1 -1
- package/data/persistence/container-contents/documentContainerProjectionPersistence.js +47 -18
- package/data/persistence/container-contents/documentContainerProjectionPersistence.js.map +1 -1
- package/data/persistence/container-contents/documentPlacement.js +24 -5
- package/data/persistence/container-contents/documentPlacement.js.map +1 -1
- package/data/persistence/documents/containerDocumentTombstoneHoldsPersistence.js +1 -1
- package/data/persistence/documents/containerDocumentTombstoneHoldsPersistence.js.map +1 -1
- package/data/persistence/documents/documentDiscoveryEvidencePersistence.js +43 -35
- package/data/persistence/documents/documentDiscoveryEvidencePersistence.js.map +1 -1
- package/data/persistence/documents/documentsPersistence.js +4 -58
- package/data/persistence/documents/documentsPersistence.js.map +1 -1
- package/data/persistence/documents/internal/containerDocumentTombstoneHolds.js +15 -11
- package/data/persistence/documents/internal/containerDocumentTombstoneHolds.js.map +1 -1
- package/data/persistence/documents/internal/containerDocumentTombstones.js +87 -35
- package/data/persistence/documents/internal/containerDocumentTombstones.js.map +1 -1
- package/data/persistence/documents/internal/discoveredDocumentPlacement.js +5 -2
- package/data/persistence/documents/internal/discoveredDocumentPlacement.js.map +1 -1
- package/data/persistence/documents/internal/discoveredDocumentUpsert.js +174 -0
- package/data/persistence/documents/internal/discoveredDocumentUpsert.js.map +1 -0
- package/data/persistence/documents/internal/documentRows.js +96 -1
- package/data/persistence/documents/internal/documentRows.js.map +1 -1
- package/data/persistence/documents/internal/rowQueryPersistence.js +38 -20
- package/data/persistence/documents/internal/rowQueryPersistence.js.map +1 -1
- package/data/persistence/documents/records/documentRecordPersistence.d.ts +5 -0
- package/data/persistence/documents/records/documentRecordPersistence.js +41 -6
- package/data/persistence/documents/records/documentRecordPersistence.js.map +1 -1
- package/data/persistence/documents/records/index.d.ts +1 -1
- package/data/persistence/documents/records/index.js +1 -1
- package/data/persistence/documents/records/index.js.map +1 -1
- package/data/persistence/keyingCheckpoints/documentPurgeCheckpointPersistence.d.ts +2 -0
- package/data/persistence/keyingCheckpoints/documentPurgeCheckpointPersistence.js +17 -1
- package/data/persistence/keyingCheckpoints/documentPurgeCheckpointPersistence.js.map +1 -1
- package/internal/api-client/ApiClient.d.ts +118 -0
- package/internal/api-client/ApiClient.js +4 -0
- package/internal/api-client/ApiClient.js.map +1 -1
- package/internal/api-client/index.d.ts +1 -1
- package/internal/api-client/index.js.map +1 -1
- package/internal/api-client/principalPolicyPages.d.ts +15 -1
- package/internal/api-client/principalPolicyPages.js +48 -2
- package/internal/api-client/principalPolicyPages.js.map +1 -1
- package/internal/api-client/principalPolicyRequests.d.ts +118 -1
- package/internal/api-client/principalPolicyRequests.js +4 -1
- package/internal/api-client/principalPolicyRequests.js.map +1 -1
- package/internal/validators/operation/principalPolicyPageQuery.d.ts +9 -0
- package/internal/validators/operation/principalPolicyPageQuery.js +10 -0
- package/internal/validators/operation/principalPolicyPageQuery.js.map +1 -1
- package/internal/validators/operation/principals.d.ts +37 -4
- package/internal/validators/operation/principals.js +5 -3
- package/internal/validators/operation/principals.js.map +1 -1
- package/internal/validators/response/index.d.ts +1 -1
- package/internal/validators/response/index.js +1 -1
- package/internal/validators/response/index.js.map +1 -1
- package/internal/validators/response/principalPolicyPage.d.ts +497 -1
- package/internal/validators/response/principalPolicyPage.js +18 -0
- package/internal/validators/response/principalPolicyPage.js.map +1 -1
- package/package.json +1 -1
- package/workflows/container-contents/documentLinks/index.d.ts +4 -0
- package/workflows/container-contents/documentLinks/index.js +10 -3
- package/workflows/container-contents/documentLinks/index.js.map +1 -1
- package/workflows/container-contents/remoteHydration/remoteContainers/remoteContainerPageHydration.js +7 -2
- package/workflows/container-contents/remoteHydration/remoteContainers/remoteContainerPageHydration.js.map +1 -1
- package/workflows/container-contents/remoteReset/containerRemoteReset.js +12 -7
- package/workflows/container-contents/remoteReset/containerRemoteReset.js.map +1 -1
- package/workflows/container-contents/tombstones/documentTombstoneEvidence.js +6 -5
- package/workflows/container-contents/tombstones/documentTombstoneEvidence.js.map +1 -1
- package/workflows/documents/remoteReset/documentRemoteReset.js +31 -18
- package/workflows/documents/remoteReset/documentRemoteReset.js.map +1 -1
- package/workflows/principals/principalPolicyHistoryReader.d.ts +6 -1
- package/workflows/principals/principalPolicyHistoryReader.js +4 -1
- package/workflows/principals/principalPolicyHistoryReader.js.map +1 -1
- package/workflows/principals/recoveryOperation/principalRecoveryDirectory.js +108 -59
- package/workflows/principals/recoveryOperation/principalRecoveryDirectory.js.map +1 -1
- package/workflows/principals/runtimePolicyRecovery.js +26 -14
- package/workflows/principals/runtimePolicyRecovery.js.map +1 -1
- package/workflows/principals/runtimePolicyWarmer.d.ts +26 -0
- package/workflows/principals/runtimePolicyWarmer.js +8 -5
- package/workflows/principals/runtimePolicyWarmer.js.map +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { KeyingVerificationError } from "../../../internal/crypto/index.js";
|
|
2
|
-
import { eq } from "drizzle-orm";
|
|
2
|
+
import { eq, inArray } from "drizzle-orm";
|
|
3
3
|
import { documentPurgeCheckpoints, keyingCheckpointTables, } from "../../sqlite/schema/index.js";
|
|
4
|
+
import { sqliteRowsPerStatement } from "../../sqlite/sqliteBindBudget.js";
|
|
4
5
|
import { getClientSQLitePersistenceRuntime } from "../../sqlite/sqlitePersistenceRuntime.js";
|
|
5
6
|
import { ensureSqlTables } from "../../sqlite/sqlSchema.js";
|
|
6
7
|
export async function loadDocumentPurgeCheckpoint(execSql, documentId) {
|
|
@@ -26,6 +27,21 @@ export async function hasDocumentPurgeCheckpointInTransaction(tx, documentId) {
|
|
|
26
27
|
.limit(1);
|
|
27
28
|
return row !== undefined;
|
|
28
29
|
}
|
|
30
|
+
/** The document ids among `documentIds` that carry a purge checkpoint. */
|
|
31
|
+
export async function listPurgedDocumentIdsInTransaction(tx, documentIds) {
|
|
32
|
+
const purged = new Set();
|
|
33
|
+
const unique = Array.from(new Set(documentIds));
|
|
34
|
+
const chunkSize = sqliteRowsPerStatement(1);
|
|
35
|
+
for (let offset = 0; offset < unique.length; offset += chunkSize) {
|
|
36
|
+
const rows = await tx
|
|
37
|
+
.select({ documentId: documentPurgeCheckpoints.documentId })
|
|
38
|
+
.from(documentPurgeCheckpoints)
|
|
39
|
+
.where(inArray(documentPurgeCheckpoints.documentId, unique.slice(offset, offset + chunkSize)));
|
|
40
|
+
for (const row of rows)
|
|
41
|
+
purged.add(row.documentId);
|
|
42
|
+
}
|
|
43
|
+
return purged;
|
|
44
|
+
}
|
|
29
45
|
export async function storeDocumentPurgeCheckpointInTransaction(tx, checkpoint, updatedAt) {
|
|
30
46
|
const [stored] = await tx
|
|
31
47
|
.select({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"documentPurgeCheckpointPersistence.js","sourceRoot":"","sources":["documentPurgeCheckpointPersistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"documentPurgeCheckpointPersistence.js","sourceRoot":"","sources":["documentPurgeCheckpointPersistence.ts"],"names":[],"mappings":"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","sourcesContent":["import { KeyingVerificationError } from \"@tearleads/crypto\";\nimport { eq, inArray } from \"drizzle-orm\";\nimport {\n documentPurgeCheckpoints,\n keyingCheckpointTables,\n} from \"../../sqlite/schema\";\nimport { sqliteRowsPerStatement } from \"../../sqlite/sqliteBindBudget\";\nimport type { ClientSQLiteTransactionScope } from \"../../sqlite/sqlitePersistenceRuntime\";\nimport { getClientSQLitePersistenceRuntime } from \"../../sqlite/sqlitePersistenceRuntime\";\nimport { type ExecSql, ensureSqlTables } from \"../../sqlite/sqlSchema\";\n\nexport interface DocumentPurgeCheckpoint {\n readonly documentId: string;\n readonly documentManifestHash: string;\n readonly organizationId: string;\n readonly purgeEventHash: string;\n}\n\nexport async function loadDocumentPurgeCheckpoint(\n execSql: ExecSql,\n documentId: string,\n): Promise<DocumentPurgeCheckpoint | null> {\n await ensureSqlTables(execSql, keyingCheckpointTables);\n const [row] = await getClientSQLitePersistenceRuntime(execSql)\n .db.select({\n documentId: documentPurgeCheckpoints.documentId,\n documentManifestHash: documentPurgeCheckpoints.documentManifestHash,\n organizationId: documentPurgeCheckpoints.organizationId,\n purgeEventHash: documentPurgeCheckpoints.purgeEventHash,\n })\n .from(documentPurgeCheckpoints)\n .where(eq(documentPurgeCheckpoints.documentId, documentId))\n .limit(1);\n return row ?? null;\n}\n\n/** Whether the document was permanently purged, read in the caller's transaction. */\nexport async function hasDocumentPurgeCheckpointInTransaction(\n tx: ClientSQLiteTransactionScope,\n documentId: string,\n): Promise<boolean> {\n const [row] = await tx\n .select({ documentId: documentPurgeCheckpoints.documentId })\n .from(documentPurgeCheckpoints)\n .where(eq(documentPurgeCheckpoints.documentId, documentId))\n .limit(1);\n return row !== undefined;\n}\n\n/** The document ids among `documentIds` that carry a purge checkpoint. */\nexport async function listPurgedDocumentIdsInTransaction(\n tx: ClientSQLiteTransactionScope,\n documentIds: ReadonlyArray<string>,\n): Promise<Set<string>> {\n const purged = new Set<string>();\n const unique = Array.from(new Set(documentIds));\n const chunkSize = sqliteRowsPerStatement(1);\n for (let offset = 0; offset < unique.length; offset += chunkSize) {\n const rows = await tx\n .select({ documentId: documentPurgeCheckpoints.documentId })\n .from(documentPurgeCheckpoints)\n .where(\n inArray(\n documentPurgeCheckpoints.documentId,\n unique.slice(offset, offset + chunkSize),\n ),\n );\n for (const row of rows) purged.add(row.documentId);\n }\n return purged;\n}\n\nexport async function storeDocumentPurgeCheckpointInTransaction(\n tx: ClientSQLiteTransactionScope,\n checkpoint: DocumentPurgeCheckpoint,\n updatedAt: string,\n): Promise<void> {\n const [stored] = await tx\n .select({\n documentManifestHash: documentPurgeCheckpoints.documentManifestHash,\n organizationId: documentPurgeCheckpoints.organizationId,\n purgeEventHash: documentPurgeCheckpoints.purgeEventHash,\n })\n .from(documentPurgeCheckpoints)\n .where(eq(documentPurgeCheckpoints.documentId, checkpoint.documentId))\n .limit(1);\n if (stored) {\n if (\n stored.documentManifestHash !== checkpoint.documentManifestHash ||\n stored.organizationId !== checkpoint.organizationId ||\n stored.purgeEventHash !== checkpoint.purgeEventHash\n ) {\n throw new KeyingVerificationError(\n \"equivocation\",\n \"Document purge checkpoint conflicts with the verified terminal event\",\n );\n }\n return;\n }\n await tx\n .insert(documentPurgeCheckpoints)\n .values({ ...checkpoint, updatedAt })\n .run();\n}\n"]}
|
|
@@ -1134,6 +1134,124 @@ export declare class ApiClient {
|
|
|
1134
1134
|
version: number;
|
|
1135
1135
|
};
|
|
1136
1136
|
}>, void, any>;
|
|
1137
|
+
/** Unpinned discovery; `ifHead` asks for a bare head when it is still live. */
|
|
1138
|
+
getPrincipalPolicyDiscovery(...args: Parameters<PrincipalPolicyRequests["discover"]>): Promise<RequestResult<{
|
|
1139
|
+
previousStates: {
|
|
1140
|
+
grants: {
|
|
1141
|
+
accessLevel: "admin" | "read" | "write";
|
|
1142
|
+
containerId: string;
|
|
1143
|
+
}[];
|
|
1144
|
+
projection: {
|
|
1145
|
+
role: "member" | "admin";
|
|
1146
|
+
userId: string;
|
|
1147
|
+
}[];
|
|
1148
|
+
state: {
|
|
1149
|
+
createdAt: string;
|
|
1150
|
+
encapsulationPublicKey: string;
|
|
1151
|
+
externalAuthority: {
|
|
1152
|
+
keyEpoch: number;
|
|
1153
|
+
keyFingerprint: string;
|
|
1154
|
+
principalId: string;
|
|
1155
|
+
principalType: "group";
|
|
1156
|
+
stateHash: string;
|
|
1157
|
+
version: number;
|
|
1158
|
+
} | null;
|
|
1159
|
+
grantCount: number;
|
|
1160
|
+
grantRoot: string;
|
|
1161
|
+
keyEpoch: number;
|
|
1162
|
+
keyFingerprint: string;
|
|
1163
|
+
memberCount: number;
|
|
1164
|
+
memberEnvelopesRoot: string;
|
|
1165
|
+
membershipMode: "projection";
|
|
1166
|
+
membershipRoot: string;
|
|
1167
|
+
payloadCiphertextHash: string;
|
|
1168
|
+
prevStateHash: string | null;
|
|
1169
|
+
principalId: string;
|
|
1170
|
+
principalType: "group" | "organization";
|
|
1171
|
+
projectionRoot: string;
|
|
1172
|
+
signature: string;
|
|
1173
|
+
signedAt: string;
|
|
1174
|
+
signerUserId: string;
|
|
1175
|
+
signerUserKeyFingerprint: string;
|
|
1176
|
+
stateHash: string;
|
|
1177
|
+
version: number;
|
|
1178
|
+
};
|
|
1179
|
+
}[];
|
|
1180
|
+
historyPage: {
|
|
1181
|
+
afterVersion: number;
|
|
1182
|
+
nextAfterVersion: number | null;
|
|
1183
|
+
};
|
|
1184
|
+
currentGrants: {
|
|
1185
|
+
accessLevel: "admin" | "read" | "write";
|
|
1186
|
+
containerId: string;
|
|
1187
|
+
}[];
|
|
1188
|
+
currentMemberEnvelopes: {
|
|
1189
|
+
envelopes: {
|
|
1190
|
+
kemCipherText: string;
|
|
1191
|
+
memberKeyFingerprint: string;
|
|
1192
|
+
userId: string;
|
|
1193
|
+
wrappedKey: string;
|
|
1194
|
+
}[];
|
|
1195
|
+
epoch: number;
|
|
1196
|
+
principalId: string;
|
|
1197
|
+
principalType: "group" | "organization";
|
|
1198
|
+
stateHash: string;
|
|
1199
|
+
};
|
|
1200
|
+
currentPayload: {
|
|
1201
|
+
cipherSuite: "aes-256-gcm";
|
|
1202
|
+
ciphertext: string;
|
|
1203
|
+
ciphertextHash: string;
|
|
1204
|
+
createdAt: string;
|
|
1205
|
+
principalId: string;
|
|
1206
|
+
principalType: "group" | "organization";
|
|
1207
|
+
stateHash: string;
|
|
1208
|
+
};
|
|
1209
|
+
currentProjection: {
|
|
1210
|
+
role: "member" | "admin";
|
|
1211
|
+
userId: string;
|
|
1212
|
+
}[];
|
|
1213
|
+
currentState: {
|
|
1214
|
+
createdAt: string;
|
|
1215
|
+
encapsulationPublicKey: string;
|
|
1216
|
+
externalAuthority: {
|
|
1217
|
+
keyEpoch: number;
|
|
1218
|
+
keyFingerprint: string;
|
|
1219
|
+
principalId: string;
|
|
1220
|
+
principalType: "group";
|
|
1221
|
+
stateHash: string;
|
|
1222
|
+
version: number;
|
|
1223
|
+
} | null;
|
|
1224
|
+
grantCount: number;
|
|
1225
|
+
grantRoot: string;
|
|
1226
|
+
keyEpoch: number;
|
|
1227
|
+
keyFingerprint: string;
|
|
1228
|
+
memberCount: number;
|
|
1229
|
+
memberEnvelopesRoot: string;
|
|
1230
|
+
membershipMode: "projection";
|
|
1231
|
+
membershipRoot: string;
|
|
1232
|
+
payloadCiphertextHash: string;
|
|
1233
|
+
prevStateHash: string | null;
|
|
1234
|
+
principalId: string;
|
|
1235
|
+
principalType: "group" | "organization";
|
|
1236
|
+
projectionRoot: string;
|
|
1237
|
+
signature: string;
|
|
1238
|
+
signedAt: string;
|
|
1239
|
+
signerUserId: string;
|
|
1240
|
+
signerUserKeyFingerprint: string;
|
|
1241
|
+
stateHash: string;
|
|
1242
|
+
version: number;
|
|
1243
|
+
};
|
|
1244
|
+
} | {
|
|
1245
|
+
unchanged: true;
|
|
1246
|
+
head: {
|
|
1247
|
+
keyEpoch: number;
|
|
1248
|
+
keyFingerprint: string;
|
|
1249
|
+
principalId: string;
|
|
1250
|
+
principalType: "group" | "organization";
|
|
1251
|
+
stateHash: string;
|
|
1252
|
+
version: number;
|
|
1253
|
+
};
|
|
1254
|
+
}>>;
|
|
1137
1255
|
getProjectionPolicyHistoryPages(...args: Parameters<PrincipalPolicyRequests["publicPages"]>): AsyncGenerator<RequestResult<{
|
|
1138
1256
|
currentGrants: {
|
|
1139
1257
|
accessLevel: "admin" | "read" | "write";
|
|
@@ -271,6 +271,10 @@ export class ApiClient {
|
|
|
271
271
|
getPrincipalPolicyPages(principalType, principalId, options = {}) {
|
|
272
272
|
return this.principalPolicyRequests.pages(principalType, principalId, options);
|
|
273
273
|
}
|
|
274
|
+
/** Unpinned discovery; `ifHead` asks for a bare head when it is still live. */
|
|
275
|
+
getPrincipalPolicyDiscovery(...args) {
|
|
276
|
+
return this.principalPolicyRequests.discover(...args);
|
|
277
|
+
}
|
|
274
278
|
getProjectionPolicyHistoryPages(...args) {
|
|
275
279
|
return this.principalPolicyRequests.publicPages(...args);
|
|
276
280
|
}
|