@learncard/lca-api-service 1.3.2 → 1.5.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/.env.example +99 -2
- package/AGENTS.md +155 -44
- package/CHANGELOG.md +84 -0
- package/bootstrapLambda.test.ts +76 -0
- package/compose.env +5 -0
- package/config/config.dev.json +23 -0
- package/config/config.example.json +22 -0
- package/config/config.json +1 -0
- package/config/config.production.json +12 -0
- package/config/config.scouts.dev.json +11 -0
- package/config/config.scouts.production.json +11 -0
- package/dist/accesslayer/signing-authority/index.d.ts +8 -2
- package/dist/app.d.ts +361 -8
- package/dist/cache/challenges.d.ts +2 -0
- package/dist/cache/getDel.d.ts +2 -0
- package/dist/cache/getDel.test.d.ts +1 -0
- package/dist/cache/login-tickets.d.ts +12 -0
- package/dist/cache/recoverySessions.d.ts +42 -0
- package/dist/config/applyDockerStageConfig.d.ts +1 -0
- package/dist/config/cacheEnvironment.d.ts +16 -0
- package/dist/config/environment.d.ts +253 -2
- package/dist/config/environment.test.d.ts +1 -0
- package/dist/config/escrowBundleMode.test.d.ts +1 -0
- package/dist/config/escrowDeployment.test.d.ts +1 -0
- package/dist/config/oidcEnvironment.d.ts +74 -0
- package/dist/config/serverlessFunctionEnv.test.d.ts +1 -0
- package/dist/config/stageConfig.d.ts +62 -0
- package/dist/config/stageConfig.test.d.ts +1 -0
- package/dist/didkit_wasm_bg.wasm +0 -0
- package/dist/docker-entry.d.ts +1 -1
- package/dist/helpers/auth.helpers.d.ts +1 -1
- package/dist/helpers/escrowCancelLink.d.ts +7 -0
- package/dist/helpers/escrowCancelLink.test.d.ts +1 -0
- package/dist/helpers/escrowCancelToken.d.ts +4 -0
- package/dist/helpers/escrowCancelToken.test.d.ts +1 -0
- package/dist/helpers/keycloak.helpers.d.ts +23 -0
- package/dist/helpers/learnCard.signingAuthority.test.d.ts +1 -0
- package/dist/helpers/login-ticket.helpers.d.ts +31 -0
- package/dist/helpers/login-ticket.helpers.test.d.ts +1 -0
- package/dist/helpers/oidc.helpers.d.ts +47 -0
- package/dist/helpers/rate-limit.helpers.d.ts +6 -0
- package/dist/helpers/rate-limit.helpers.test.d.ts +1 -0
- package/dist/helpers/rateLimit.helpers.d.ts +4 -0
- package/dist/helpers/seedEncryption.helpers.d.ts +23 -0
- package/dist/helpers/seedEncryption.helpers.test.d.ts +1 -0
- package/dist/helpers/social-token.helpers.d.ts +19 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -2
- package/dist/jobs/escrowBlobRewrap.d.ts +9 -0
- package/dist/jobs/escrowHoldReminders.d.ts +12 -0
- package/dist/migrations/signingAuthoritySeeds.d.ts +13 -0
- package/dist/migrations/signingAuthoritySeedsCli.test.d.ts +1 -0
- package/dist/models/AuthSubject.d.ts +20 -0
- package/dist/models/EscrowHold.d.ts +153 -0
- package/dist/models/Notification.d.ts +5 -0
- package/dist/models/SigningAuthority.d.ts +7 -1
- package/dist/models/UserKey.d.ts +326 -3
- package/dist/models/UserKey.escrowPin.test.d.ts +1 -0
- package/dist/models/index.d.ts +2 -0
- package/dist/oidc.d.ts +5 -0
- package/dist/routes/auth.d.ts +31 -0
- package/dist/routes/escrow.d.ts +164 -0
- package/dist/routes/index.d.ts +6 -0
- package/dist/routes/keys.d.ts +182 -7
- package/dist/routes/notifications.d.ts +5 -0
- package/dist/routes/qr-login.d.ts +1 -1
- package/dist/routes/signing-authority.d.ts +14 -0
- package/dist/services/escrow-enclave/blobIdentity.d.ts +10 -0
- package/dist/services/escrow-enclave/blobIdentity.test.d.ts +1 -0
- package/dist/services/escrow-enclave/cancellation.d.ts +3 -0
- package/dist/services/escrow-enclave/enclaveTrustAnchors.d.ts +1 -0
- package/dist/services/escrow-enclave/index.d.ts +25 -0
- package/dist/services/escrow-enclave/notifications.d.ts +24 -0
- package/dist/services/escrow-enclave/notifications.test.d.ts +1 -0
- package/dist/services/escrow-enclave/production.test.d.ts +1 -0
- package/dist/services/escrow-enclave/remoteEnclave.contract.test.d.ts +1 -0
- package/dist/services/escrow-enclave/remoteEnclave.d.ts +20 -0
- package/dist/services/escrow-enclave/remoteEnclave.test.d.ts +1 -0
- package/dist/services/escrow-enclave/remoteEnclave.tls.test.d.ts +1 -0
- package/dist/services/escrow-enclave/softwareEnclave.d.ts +27 -0
- package/dist/services/escrow-enclave/softwareEnclave.test.d.ts +1 -0
- package/dist/services/escrow-enclave/types.d.ts +111 -0
- package/dist/types/notifications.d.ts +5 -0
- package/dist/types/seed-encryption.d.ts +31 -0
- package/dist/types/seed-migration.d.ts +49 -0
- package/esbuildPlugins.cjs +1 -0
- package/lambda.ts +27 -112
- package/lambdaApp.ts +146 -0
- package/oidcLambda.test.ts +38 -0
- package/oidcLambda.ts +18 -0
- package/oidcLambdaApp.ts +11 -0
- package/package.json +30 -14
- package/scripts/README.md +88 -0
- package/scripts/check-seed-encryption-infrastructure.mjs +139 -0
- package/scripts/check-signing-authority-redis.mjs +93 -0
- package/scripts/escrow-blob-mode-report.test.ts +227 -0
- package/scripts/escrow-blob-mode-report.ts +465 -0
- package/scripts/keycloak-admin.ts +108 -0
- package/scripts/keycloak-provider-links.ts +147 -0
- package/scripts/migrate-signing-authority-seeds-local.sh +51 -0
- package/scripts/migrate-signing-authority-seeds.mjs +105 -0
- package/scripts/print-seed-rollout-flags.ts +21 -0
- package/scripts/provision-keycloak-users.ts +419 -0
- package/seedMigrationApp.test.ts +145 -0
- package/seedMigrationApp.ts +50 -0
- package/seedMigrationLambda.test.ts +40 -0
- package/seedMigrationLambda.ts +19 -0
- package/serverless-local.yml +28 -1
- package/serverless.function-env.cjs +58 -0
- package/serverless.yml +294 -26
- package/src/accesslayer/notifications/index.ts +9 -2
- package/src/accesslayer/signing-authority/create.ts +11 -7
- package/src/accesslayer/signing-authority/index.ts +4 -1
- package/src/app.ts +4 -0
- package/src/cache/challenges.ts +12 -2
- package/src/cache/getDel.test.ts +34 -0
- package/src/cache/getDel.ts +32 -0
- package/src/cache/in-memory-lru.ts +1 -0
- package/src/cache/index.ts +1 -1
- package/src/cache/login-tickets.ts +26 -0
- package/src/cache/recoverySessions.ts +252 -0
- package/src/config/applyDockerStageConfig.ts +6 -0
- package/src/config/cacheEnvironment.ts +34 -0
- package/src/config/environment.test.ts +159 -0
- package/src/config/environment.ts +164 -0
- package/src/config/escrowBundleMode.test.ts +52 -0
- package/src/config/escrowDeployment.test.ts +114 -0
- package/src/config/oidcEnvironment.ts +59 -0
- package/src/config/serverlessFunctionEnv.test.ts +98 -0
- package/src/config/stageConfig.test.ts +26 -0
- package/src/config/stageConfig.ts +24 -0
- package/src/docker-entry.ts +13 -0
- package/src/helpers/auth.helpers.ts +68 -30
- package/src/helpers/escrowCancelLink.test.ts +60 -0
- package/src/helpers/escrowCancelLink.ts +38 -0
- package/src/helpers/escrowCancelToken.test.ts +105 -0
- package/src/helpers/escrowCancelToken.ts +47 -0
- package/src/helpers/keycloak.helpers.ts +120 -0
- package/src/helpers/learnCard.helpers.test.ts +11 -1
- package/src/helpers/learnCard.helpers.ts +57 -45
- package/src/helpers/learnCard.signingAuthority.test.ts +194 -0
- package/src/helpers/login-ticket.helpers.test.ts +45 -0
- package/src/helpers/login-ticket.helpers.ts +91 -0
- package/src/helpers/oidc.helpers.ts +354 -0
- package/src/helpers/rate-limit.helpers.test.ts +61 -0
- package/src/helpers/rate-limit.helpers.ts +73 -0
- package/src/helpers/rateLimit.helpers.ts +112 -0
- package/src/helpers/seedEncryption.helpers.test.ts +427 -0
- package/src/helpers/seedEncryption.helpers.ts +372 -0
- package/src/helpers/signingAuthority.helpers.ts +4 -1
- package/src/helpers/social-token.helpers.ts +144 -0
- package/src/index.ts +1 -0
- package/src/jobs/escrowBlobRewrap.ts +121 -0
- package/src/jobs/escrowHoldReminders.ts +177 -0
- package/src/migrations/signingAuthoritySeeds.ts +430 -0
- package/src/migrations/signingAuthoritySeedsCli.test.ts +70 -0
- package/src/models/AuthSubject.ts +147 -0
- package/src/models/EscrowHold.ts +541 -0
- package/src/models/SigningAuthority.ts +14 -3
- package/src/models/UserKey.escrowPin.test.ts +49 -0
- package/src/models/UserKey.ts +1109 -40
- package/src/models/index.ts +2 -0
- package/src/models/pruneOrphanedRecoveryMethods.ts +3 -1
- package/src/oidc.ts +371 -0
- package/src/routes/auth.ts +173 -0
- package/src/routes/credentials.ts +8 -0
- package/src/routes/escrow.ts +1073 -0
- package/src/routes/firebase.ts +90 -48
- package/src/routes/index.ts +98 -5
- package/src/routes/keys.ts +1022 -174
- package/src/routes/qr-login.ts +51 -53
- package/src/routes/signing-authority.ts +39 -1
- package/src/services/delivery/adapters/postmark.adapter.ts +48 -1
- package/src/services/escrow-enclave/README.md +122 -0
- package/src/services/escrow-enclave/__fixtures__/tls/pinned-ca.pem +11 -0
- package/src/services/escrow-enclave/__fixtures__/tls/pinned-leaf.key +5 -0
- package/src/services/escrow-enclave/__fixtures__/tls/pinned-leaf.pem +12 -0
- package/src/services/escrow-enclave/__fixtures__/tls/rogue-ca.pem +11 -0
- package/src/services/escrow-enclave/__fixtures__/tls/rogue-leaf.key +5 -0
- package/src/services/escrow-enclave/__fixtures__/tls/rogue-leaf.pem +12 -0
- package/src/services/escrow-enclave/blobIdentity.test.ts +42 -0
- package/src/services/escrow-enclave/blobIdentity.ts +55 -0
- package/src/services/escrow-enclave/cancellation.ts +59 -0
- package/src/services/escrow-enclave/enclaveTrustAnchors.ts +34 -0
- package/src/services/escrow-enclave/index.ts +174 -0
- package/src/services/escrow-enclave/notifications.test.ts +377 -0
- package/src/services/escrow-enclave/notifications.ts +348 -0
- package/src/services/escrow-enclave/production.test.ts +34 -0
- package/src/services/escrow-enclave/remoteEnclave.contract.test.ts +344 -0
- package/src/services/escrow-enclave/remoteEnclave.test.ts +490 -0
- package/src/services/escrow-enclave/remoteEnclave.tls.test.ts +62 -0
- package/src/services/escrow-enclave/remoteEnclave.ts +263 -0
- package/src/services/escrow-enclave/softwareEnclave.test.ts +450 -0
- package/src/services/escrow-enclave/softwareEnclave.ts +254 -0
- package/src/services/escrow-enclave/types.ts +122 -0
- package/src/types/seed-encryption.ts +51 -0
- package/src/types/seed-migration.ts +61 -0
- package/test/auth-tickets.spec.ts +480 -0
- package/test/credentials.spec.ts +2 -0
- package/test/helpers/keycloak-broker.ts +181 -0
- package/test/helpers/live-mongo.ts +9 -0
- package/test/jobs/escrowBlobRewrap.spec.ts +262 -0
- package/test/jobs/escrowHoldReminders.spec.ts +319 -0
- package/test/keycloak-admin.spec.ts +58 -0
- package/test/keycloak-broker-roundtrip.integration.spec.ts +40 -0
- package/test/keycloak-migration.integration.spec.ts +266 -0
- package/test/keycloak-provider-links.spec.ts +201 -0
- package/test/keycloak-social-broker.integration.spec.ts +228 -0
- package/test/keycloak-verify.integration.spec.ts +100 -0
- package/test/keycloak-verify.spec.ts +307 -0
- package/test/keys-escrow.spec.ts +2328 -0
- package/test/keys-identity-rebind.spec.ts +456 -0
- package/test/keys-lifecycle-invariants.spec.ts +785 -0
- package/test/keys-recovery-confirmation.spec.ts +586 -0
- package/test/keys-recovery-rate-limit.spec.ts +123 -0
- package/test/keys-secret-leakage.spec.ts +265 -0
- package/test/models/authSubjectIndexes.spec.ts +132 -0
- package/test/models/escrow.spec.ts +572 -0
- package/test/notifications.spec.ts +4 -0
- package/test/oidc-e2e/broker.spec.ts +116 -0
- package/test/oidc-e2e/compose.yaml +33 -0
- package/test/oidc-e2e/fixtures.ts +245 -0
- package/test/oidc-e2e/lock.test.mjs +73 -0
- package/test/oidc-e2e/playwright.config.ts +21 -0
- package/test/oidc-e2e/run.mjs +312 -0
- package/test/oidc-e2e/tsconfig.json +10 -0
- package/test/oidc-e2e/types.ts +21 -0
- package/test/oidc.integration.spec.ts +54 -0
- package/test/oidc.spec.ts +697 -0
- package/test/oidcLambdaApp.boot.spec.ts +105 -0
- package/test/provision-keycloak-users.spec.ts +299 -0
- package/test/signing-authority-http.spec.ts +161 -0
- package/test/signing-authority-seed-migration.spec.ts +414 -0
- package/test/signing-authority.spec.ts +90 -0
- package/tsconfig.build.json +1 -1
- package/tsconfig.json +1 -0
- package/vitest.config.ts +24 -1
- package/vitest.integration.config.ts +25 -3
- package/dist/cache/signing-authority.d.ts +0 -6
- package/src/cache/signing-authority.ts +0 -37
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { KMSClient } from '@aws-sdk/client-kms';
|
|
2
|
+
import type { EncryptedSigningAuthoritySeed, SeedEncryptionConfig, SeedEncryption, SeedEncryptionFailure, SigningAuthoritySeedIdentity, SigningAuthoritySeedRecord } from 'types/seed-encryption';
|
|
3
|
+
export declare const SA_SEED_ENCRYPTION_PURPOSE = "lca-signing-authority-seed";
|
|
4
|
+
export declare class SeedEncryptionError extends Error {
|
|
5
|
+
readonly category: SeedEncryptionFailure;
|
|
6
|
+
readonly awsRequestId?: string | undefined;
|
|
7
|
+
constructor(category: SeedEncryptionFailure, awsRequestId?: string | undefined);
|
|
8
|
+
}
|
|
9
|
+
export declare const logSeedEncryptionFailure: (error: unknown, operation: string, record?: {
|
|
10
|
+
_id?: unknown;
|
|
11
|
+
keyVersion?: unknown;
|
|
12
|
+
}) => void;
|
|
13
|
+
export declare const getSeedIdentity: (record: {
|
|
14
|
+
_id?: unknown;
|
|
15
|
+
ownerDid: string;
|
|
16
|
+
name: string;
|
|
17
|
+
did?: string;
|
|
18
|
+
}) => SigningAuthoritySeedIdentity;
|
|
19
|
+
export declare const parseSeedEnvelope: (record: object) => EncryptedSigningAuthoritySeed | undefined;
|
|
20
|
+
export declare const createSeedEncryption: (config: SeedEncryptionConfig, kms?: KMSClient) => SeedEncryption;
|
|
21
|
+
export declare const seedEncryption: SeedEncryption;
|
|
22
|
+
export declare const decryptSigningAuthoritySeed: (record: SigningAuthoritySeedRecord) => Promise<string>;
|
|
23
|
+
export declare const getSeedCacheFingerprint: (record: SigningAuthoritySeedRecord) => string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { JWTVerifyGetKey } from 'jose';
|
|
2
|
+
export type SocialProviderId = 'google' | 'apple';
|
|
3
|
+
export interface SocialProviderConfig {
|
|
4
|
+
issuers: string[];
|
|
5
|
+
audiences: string[];
|
|
6
|
+
jwksUri: string;
|
|
7
|
+
}
|
|
8
|
+
export interface SocialClaims {
|
|
9
|
+
sub: string;
|
|
10
|
+
iss: string;
|
|
11
|
+
email?: string;
|
|
12
|
+
email_verified?: boolean;
|
|
13
|
+
name?: string;
|
|
14
|
+
picture?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare const getSocialProviderConfig: (provider: SocialProviderId) => SocialProviderConfig | null;
|
|
17
|
+
export declare const setSocialJwksResolverForTests: (resolver: ((jwksUri: string) => JWTVerifyGetKey) | undefined) => void;
|
|
18
|
+
export declare const getSocialJwks: (jwksUri: string) => JWTVerifyGetKey;
|
|
19
|
+
export declare const verifySocialIdToken: (provider: SocialProviderId, token: string) => Promise<SocialClaims>;
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
[diffend] Oversized file quarantined before diffing.
|
|
2
2
|
name: package/dist/index.js
|
|
3
|
-
size:
|
|
4
|
-
sha256:
|
|
3
|
+
size: 137933050 bytes
|
|
4
|
+
sha256: 5d64b82c788a32e703cbe115ccb7dead043201ff159475b76d09fab29fade6ac
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface EscrowBlobRewrapResult {
|
|
2
|
+
rewrapped: number;
|
|
3
|
+
skippedPendingHold: number;
|
|
4
|
+
failed: number;
|
|
5
|
+
}
|
|
6
|
+
export interface RunEscrowBlobRewrapOptions {
|
|
7
|
+
limit?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare const runEscrowBlobRewrap: (options?: RunEscrowBlobRewrapOptions) => Promise<EscrowBlobRewrapResult>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { notifyEscrowHoldEvent } from '../services/escrow-enclave';
|
|
2
|
+
export interface EscrowHoldReminderResult {
|
|
3
|
+
reminded: number;
|
|
4
|
+
expired: number;
|
|
5
|
+
failed: number;
|
|
6
|
+
}
|
|
7
|
+
export interface RunEscrowHoldRemindersOptions {
|
|
8
|
+
now?: Date;
|
|
9
|
+
limit?: number;
|
|
10
|
+
notify?: typeof notifyEscrowHoldEvent;
|
|
11
|
+
}
|
|
12
|
+
export declare const runEscrowHoldReminders: (options?: RunEscrowHoldRemindersOptions) => Promise<EscrowHoldReminderResult>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Db } from 'mongodb';
|
|
2
|
+
import type { SeedMigrationCounts, SeedMigrationRequest, SeedMigrationResult } from 'types/seed-migration';
|
|
3
|
+
export declare const SEED_MIGRATION_STATE_COLLECTION = "signingauthorityseedmigration";
|
|
4
|
+
export declare const SEED_MIGRATION_RECEIPTS_COLLECTION = "signingauthorityseedverification";
|
|
5
|
+
export declare class SeedMigrationError extends Error {
|
|
6
|
+
readonly category: string;
|
|
7
|
+
constructor(category: string);
|
|
8
|
+
}
|
|
9
|
+
export declare const countSeedMigrationDocuments: (db: Db) => Promise<SeedMigrationCounts>;
|
|
10
|
+
export declare const runSeedMigrationBatch: (db: Db, request: SeedMigrationRequest, options: {
|
|
11
|
+
encryptedWritesEnabled: boolean;
|
|
12
|
+
remainingTime?: () => number;
|
|
13
|
+
}) => Promise<SeedMigrationResult>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Collection } from 'mongodb';
|
|
2
|
+
export declare const AUTH_SUBJECTS_COLLECTION = "authsubjects";
|
|
3
|
+
export interface AuthSubjectAttributes {
|
|
4
|
+
email?: string;
|
|
5
|
+
emailVerified: boolean;
|
|
6
|
+
displayName?: string;
|
|
7
|
+
pictureUrl?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface MongoAuthSubjectType extends AuthSubjectAttributes {
|
|
10
|
+
subject: string;
|
|
11
|
+
identityKey: string;
|
|
12
|
+
createdAt: Date;
|
|
13
|
+
lastLoginAt: Date;
|
|
14
|
+
}
|
|
15
|
+
export declare const getAuthSubjectsCollection: () => Collection<MongoAuthSubjectType>;
|
|
16
|
+
export declare const createAuthSubjectIndexes: () => Promise<void>;
|
|
17
|
+
export declare const ensureAuthSubjectIndexes: () => Promise<void>;
|
|
18
|
+
export declare const getOrCreateAuthSubject: (identityKey: string, attrs: AuthSubjectAttributes) => Promise<MongoAuthSubjectType>;
|
|
19
|
+
export declare const getOrCreateAuthSubjectLinkedTo: (identityKey: string, subject: string, attrs: AuthSubjectAttributes) => Promise<MongoAuthSubjectType>;
|
|
20
|
+
export declare const findAuthSubjectByIdentityKey: (identityKey: string) => Promise<MongoAuthSubjectType | null>;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { Collection } from 'mongodb';
|
|
3
|
+
import { type AuthProviderMapping } from './UserKey';
|
|
4
|
+
export declare const ESCROW_HOLDS_COLLECTION = "escrowholds";
|
|
5
|
+
export declare const ESCROW_HOLD_STALE_WINDOW_MS: number;
|
|
6
|
+
export declare const ESCROW_HOLD_RESTART_MIN_AGE_MS: number;
|
|
7
|
+
export declare const ESCROW_HOLD_REMINDER_WINDOW_MS: number;
|
|
8
|
+
export declare const EscrowHoldRecordValidator: z.ZodObject<{
|
|
9
|
+
hold: z.ZodObject<{
|
|
10
|
+
holdId: z.ZodString;
|
|
11
|
+
did: z.ZodString;
|
|
12
|
+
shareVersion: z.ZodNumber;
|
|
13
|
+
blobHash: z.ZodString;
|
|
14
|
+
enrollmentEpoch: z.ZodNumber;
|
|
15
|
+
releasePolicy: z.ZodEnum<{
|
|
16
|
+
pin: "pin";
|
|
17
|
+
hold: "hold";
|
|
18
|
+
}>;
|
|
19
|
+
clientEphemeralPublicKey: z.ZodString;
|
|
20
|
+
createdLo: z.ZodNumber;
|
|
21
|
+
createdHi: z.ZodNumber;
|
|
22
|
+
policyVersion: z.ZodNumber;
|
|
23
|
+
signature: z.ZodString;
|
|
24
|
+
}, z.core.$loose>;
|
|
25
|
+
holdDurationMs: z.ZodNumber;
|
|
26
|
+
ledgerSeq: z.ZodNumber;
|
|
27
|
+
}, z.core.$loose>;
|
|
28
|
+
export declare const EscrowHoldValidator: z.ZodObject<{
|
|
29
|
+
holdRecord: z.ZodObject<{
|
|
30
|
+
hold: z.ZodObject<{
|
|
31
|
+
holdId: z.ZodString;
|
|
32
|
+
did: z.ZodString;
|
|
33
|
+
shareVersion: z.ZodNumber;
|
|
34
|
+
blobHash: z.ZodString;
|
|
35
|
+
enrollmentEpoch: z.ZodNumber;
|
|
36
|
+
releasePolicy: z.ZodEnum<{
|
|
37
|
+
pin: "pin";
|
|
38
|
+
hold: "hold";
|
|
39
|
+
}>;
|
|
40
|
+
clientEphemeralPublicKey: z.ZodString;
|
|
41
|
+
createdLo: z.ZodNumber;
|
|
42
|
+
createdHi: z.ZodNumber;
|
|
43
|
+
policyVersion: z.ZodNumber;
|
|
44
|
+
signature: z.ZodString;
|
|
45
|
+
}, z.core.$loose>;
|
|
46
|
+
holdDurationMs: z.ZodNumber;
|
|
47
|
+
ledgerSeq: z.ZodNumber;
|
|
48
|
+
}, z.core.$loose>;
|
|
49
|
+
_id: z.ZodString;
|
|
50
|
+
authProvider: z.ZodObject<{
|
|
51
|
+
type: z.ZodEnum<{
|
|
52
|
+
firebase: "firebase";
|
|
53
|
+
supertokens: "supertokens";
|
|
54
|
+
keycloak: "keycloak";
|
|
55
|
+
oidc: "oidc";
|
|
56
|
+
}>;
|
|
57
|
+
id: z.ZodString;
|
|
58
|
+
}, z.core.$strip>;
|
|
59
|
+
primaryDid: z.ZodString;
|
|
60
|
+
shareVersion: z.ZodNumber;
|
|
61
|
+
status: z.ZodEnum<{
|
|
62
|
+
pending: "pending";
|
|
63
|
+
cancelled: "cancelled";
|
|
64
|
+
completed: "completed";
|
|
65
|
+
expired: "expired";
|
|
66
|
+
}>;
|
|
67
|
+
identityProofType: z.ZodEnum<{
|
|
68
|
+
"auth-token": "auth-token";
|
|
69
|
+
"recovery-session": "recovery-session";
|
|
70
|
+
}>;
|
|
71
|
+
requestedAt: z.ZodDate;
|
|
72
|
+
releaseAfter: z.ZodDate;
|
|
73
|
+
releasePolicy: z.ZodDefault<z.ZodEnum<{
|
|
74
|
+
pin: "pin";
|
|
75
|
+
hold: "hold";
|
|
76
|
+
}>>;
|
|
77
|
+
cancelReason: z.ZodOptional<z.ZodEnum<{
|
|
78
|
+
"pin-mismatch": "pin-mismatch";
|
|
79
|
+
"pin-locked": "pin-locked";
|
|
80
|
+
superseded: "superseded";
|
|
81
|
+
"release-failed": "release-failed";
|
|
82
|
+
}>>;
|
|
83
|
+
cancelledAt: z.ZodOptional<z.ZodDate>;
|
|
84
|
+
enclaveCancelPendingAt: z.ZodOptional<z.ZodDate>;
|
|
85
|
+
enclaveCancelConfirmedAt: z.ZodOptional<z.ZodDate>;
|
|
86
|
+
enclaveCancelAttempts: z.ZodOptional<z.ZodNumber>;
|
|
87
|
+
enclaveEnvelope: z.ZodOptional<z.ZodObject<{
|
|
88
|
+
version: z.ZodLiteral<1>;
|
|
89
|
+
algorithm: z.ZodLiteral<"P-256-HKDF-SHA256-AES-256-GCM">;
|
|
90
|
+
keyId: z.ZodString;
|
|
91
|
+
ephemeralPublicKey: z.ZodString;
|
|
92
|
+
salt: z.ZodString;
|
|
93
|
+
iv: z.ZodString;
|
|
94
|
+
ciphertext: z.ZodString;
|
|
95
|
+
}, z.core.$strict>>;
|
|
96
|
+
cancelledBy: z.ZodOptional<z.ZodEnum<{
|
|
97
|
+
did: "did";
|
|
98
|
+
link: "link";
|
|
99
|
+
system: "system";
|
|
100
|
+
}>>;
|
|
101
|
+
completedAt: z.ZodOptional<z.ZodDate>;
|
|
102
|
+
clientEphemeralPublicKey: z.ZodString;
|
|
103
|
+
resumeTokenHash: z.ZodString;
|
|
104
|
+
cancelTokenHash: z.ZodOptional<z.ZodString>;
|
|
105
|
+
cancelTokenUsedAt: z.ZodOptional<z.ZodDate>;
|
|
106
|
+
cancelTokenHashes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
107
|
+
startedNotificationPending: z.ZodOptional<z.ZodBoolean>;
|
|
108
|
+
reminderClaimedUntil: z.ZodOptional<z.ZodDate>;
|
|
109
|
+
startedNotificationAttemptedAt: z.ZodOptional<z.ZodDate>;
|
|
110
|
+
reminderAttemptedAt: z.ZodOptional<z.ZodDate>;
|
|
111
|
+
notifications: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
112
|
+
kind: z.ZodEnum<{
|
|
113
|
+
cancelled: "cancelled";
|
|
114
|
+
completed: "completed";
|
|
115
|
+
"pin-locked": "pin-locked";
|
|
116
|
+
started: "started";
|
|
117
|
+
reminder: "reminder";
|
|
118
|
+
}>;
|
|
119
|
+
sentAt: z.ZodDate;
|
|
120
|
+
}, z.core.$strip>>>;
|
|
121
|
+
requestIp: z.ZodOptional<z.ZodString>;
|
|
122
|
+
tenantId: z.ZodOptional<z.ZodString>;
|
|
123
|
+
createdAt: z.ZodDate;
|
|
124
|
+
updatedAt: z.ZodDate;
|
|
125
|
+
}, z.core.$strip>;
|
|
126
|
+
export type EscrowHold = z.infer<typeof EscrowHoldValidator>;
|
|
127
|
+
export type CreateEscrowHoldInput = Omit<z.input<typeof EscrowHoldValidator>, '_id' | 'status' | 'createdAt' | 'updatedAt' | 'notifications' | 'cancelledAt' | 'cancelledBy' | 'completedAt' | 'cancelReason' | 'cancelTokenUsedAt' | 'enclaveCancelPendingAt' | 'enclaveCancelConfirmedAt' | 'enclaveCancelAttempts'>;
|
|
128
|
+
export declare const getEscrowHoldsCollection: () => Collection<EscrowHold>;
|
|
129
|
+
export declare const createEscrowHoldsIndexes: () => Promise<void>;
|
|
130
|
+
export declare const createEscrowHold: (input: CreateEscrowHoldInput) => Promise<EscrowHold>;
|
|
131
|
+
export declare const findPendingEscrowHoldByAuthProvider: (authProvider: AuthProviderMapping, releasePolicy?: EscrowHold["releasePolicy"]) => Promise<EscrowHold | null>;
|
|
132
|
+
export declare const findEscrowHoldById: (id: string) => Promise<EscrowHold | null>;
|
|
133
|
+
export declare const hasUnconfirmedEscrowCancellation: (primaryDid: string) => Promise<boolean>;
|
|
134
|
+
export declare const findEscrowHoldsPendingEnclaveCancellation: (limit: number) => Promise<EscrowHold[]>;
|
|
135
|
+
export declare const countEscrowCancellationsNearRelease: (now: Date) => Promise<number>;
|
|
136
|
+
export declare const recordEscrowEnclaveCancelAttempt: (id: string) => Promise<boolean>;
|
|
137
|
+
export declare const confirmEscrowEnclaveCancellation: (id: string) => Promise<void>;
|
|
138
|
+
export declare const cancelEscrowHold: (id: string, cancelledBy: "did" | "system", cancelReason?: EscrowHold["cancelReason"]) => Promise<EscrowHold | null>;
|
|
139
|
+
export declare const cancelEscrowHoldByCancelToken: (id: string, cancelTokenHash: string) => Promise<EscrowHold | null>;
|
|
140
|
+
export declare const completeEscrowHold: (id: string) => Promise<EscrowHold | null>;
|
|
141
|
+
export declare const hasCompletedEscrowHoldForVersion: (authProvider: AuthProviderMapping, shareVersion: number) => Promise<boolean>;
|
|
142
|
+
export declare const expireStaleEscrowHolds: (now: Date) => Promise<number>;
|
|
143
|
+
export declare const markClaimedEscrowHoldFailed: (id: string, reason: "pin-mismatch" | "pin-locked" | "release-failed", completedAt: Date) => Promise<void>;
|
|
144
|
+
export declare const retryClaimedEscrowHold: (id: string, completedAt: Date) => Promise<void>;
|
|
145
|
+
export declare const findEscrowHoldsPendingStartNotification: (limit: number) => Promise<EscrowHold[]>;
|
|
146
|
+
export declare const recordEscrowStartNotificationAttempt: (id: string, now: Date) => Promise<void>;
|
|
147
|
+
export declare const findEscrowHoldsDueForReminder: (now: Date, limit: number) => Promise<EscrowHold[]>;
|
|
148
|
+
export declare const claimEscrowHoldForReminder: (id: string, now: Date) => Promise<EscrowHold | null>;
|
|
149
|
+
export declare const releaseEscrowReminderClaim: (hold: EscrowHold) => Promise<void>;
|
|
150
|
+
export declare const hashEscrowResumeToken: (token: string) => string;
|
|
151
|
+
export declare const generateEscrowResumeToken: () => string;
|
|
152
|
+
export declare const recordEscrowHoldNotification: (holdId: string, kind: EscrowHold["notifications"][number]["kind"]) => Promise<void>;
|
|
153
|
+
export declare const rotateEscrowCancelToken: (holdId: string) => Promise<string | null>;
|
|
@@ -167,6 +167,11 @@ export declare const MongoNotificationValidator: z.ZodObject<{
|
|
|
167
167
|
approvedAt: z.ZodString;
|
|
168
168
|
contractUpdatedAt: z.ZodString;
|
|
169
169
|
}, z.core.$strip>>;
|
|
170
|
+
referral: z.ZodOptional<z.ZodObject<{
|
|
171
|
+
requestId: z.ZodString;
|
|
172
|
+
requestedBy: z.ZodString;
|
|
173
|
+
externalReferenceId: z.ZodOptional<z.ZodString>;
|
|
174
|
+
}, z.core.$strip>>;
|
|
170
175
|
id: z.ZodString;
|
|
171
176
|
action: z.ZodEnum<{
|
|
172
177
|
write: "write";
|
|
@@ -4,7 +4,13 @@ export declare const MongoSigningAuthorityValidator: z.ZodObject<{
|
|
|
4
4
|
_id: z.ZodOptional<z.ZodString>;
|
|
5
5
|
ownerDid: z.ZodString;
|
|
6
6
|
name: z.ZodString;
|
|
7
|
-
seed: z.ZodString
|
|
7
|
+
seed: z.ZodOptional<z.ZodString>;
|
|
8
|
+
encryptedSeed: z.ZodOptional<z.ZodString>;
|
|
9
|
+
encryptedDek: z.ZodOptional<z.ZodString>;
|
|
10
|
+
keyVersion: z.ZodOptional<z.ZodEnum<{
|
|
11
|
+
"kms-v1": "kms-v1";
|
|
12
|
+
"local-v1": "local-v1";
|
|
13
|
+
}>>;
|
|
8
14
|
did: z.ZodOptional<z.ZodString>;
|
|
9
15
|
endpoint: z.ZodOptional<z.ZodString>;
|
|
10
16
|
}, z.core.$strip>;
|