@effect-auth/core 0.1.0-alpha.3 → 0.1.0-alpha.4
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 +148 -13
- package/dist/ApiKey.d.ts +207 -0
- package/dist/ApiKey.d.ts.map +1 -0
- package/dist/ApiKey.js +275 -0
- package/dist/ApiKey.js.map +1 -0
- package/dist/AuditLog.d.ts +204 -1
- package/dist/AuditLog.d.ts.map +1 -1
- package/dist/AuditLog.js +170 -0
- package/dist/AuditLog.js.map +1 -1
- package/dist/AuthConfig.d.ts +0 -9
- package/dist/AuthConfig.d.ts.map +1 -1
- package/dist/AuthConfig.js +1 -14
- package/dist/AuthConfig.js.map +1 -1
- package/dist/AuthFlow.d.ts +220 -51
- package/dist/AuthFlow.d.ts.map +1 -1
- package/dist/AuthFlow.js +550 -22
- package/dist/AuthFlow.js.map +1 -1
- package/dist/AuthKernel.d.ts +1 -1
- package/dist/Challenge.d.ts +5 -1
- package/dist/Challenge.d.ts.map +1 -1
- package/dist/Challenge.js +58 -48
- package/dist/Challenge.js.map +1 -1
- package/dist/Client.d.ts +242 -1
- package/dist/Client.d.ts.map +1 -1
- package/dist/Client.js +489 -1
- package/dist/Client.js.map +1 -1
- package/dist/D1Kysely.d.ts +1 -1
- package/dist/D1Kysely.d.ts.map +1 -1
- package/dist/EffectQbSqliteStorage.d.ts +115 -3
- package/dist/EffectQbSqliteStorage.d.ts.map +1 -1
- package/dist/EffectQbSqliteStorage.js +314 -4
- package/dist/EffectQbSqliteStorage.js.map +1 -1
- package/dist/EmailOtp.d.ts +5 -2
- package/dist/EmailOtp.d.ts.map +1 -1
- package/dist/EmailOtp.js +11 -4
- package/dist/EmailOtp.js.map +1 -1
- package/dist/EmailVerification.d.ts +2 -2
- package/dist/EmailVerification.d.ts.map +1 -1
- package/dist/EmailVerification.js +2 -3
- package/dist/EmailVerification.js.map +1 -1
- package/dist/HttpApi/Api.d.ts +1161 -19
- package/dist/HttpApi/Api.d.ts.map +1 -1
- package/dist/HttpApi/Api.js +1433 -20
- package/dist/HttpApi/Api.js.map +1 -1
- package/dist/HttpApi/Endpoints.d.ts +611 -0
- package/dist/HttpApi/Endpoints.d.ts.map +1 -1
- package/dist/HttpApi/Endpoints.js +242 -1
- package/dist/HttpApi/Endpoints.js.map +1 -1
- package/dist/HttpApi/Schemas.d.ts +704 -0
- package/dist/HttpApi/Schemas.d.ts.map +1 -1
- package/dist/HttpApi/Schemas.js +435 -1
- package/dist/HttpApi/Schemas.js.map +1 -1
- package/dist/HttpApi/Security.d.ts +13 -1
- package/dist/HttpApi/Security.d.ts.map +1 -1
- package/dist/HttpApi/Security.js +107 -16
- package/dist/HttpApi/Security.js.map +1 -1
- package/dist/HttpApi/Transport.d.ts +36 -2
- package/dist/HttpApi/Transport.d.ts.map +1 -1
- package/dist/HttpApi/Transport.js +151 -9
- package/dist/HttpApi/Transport.js.map +1 -1
- package/dist/Jwt.d.ts +271 -0
- package/dist/Jwt.d.ts.map +1 -0
- package/dist/Jwt.js +512 -0
- package/dist/Jwt.js.map +1 -0
- package/dist/KyselyStorage.d.ts +134 -1
- package/dist/KyselyStorage.d.ts.map +1 -1
- package/dist/KyselyStorage.js +918 -4
- package/dist/KyselyStorage.js.map +1 -1
- package/dist/LoginApproval.d.ts +314 -0
- package/dist/LoginApproval.d.ts.map +1 -0
- package/dist/LoginApproval.js +551 -0
- package/dist/LoginApproval.js.map +1 -0
- package/dist/LoginNotification.d.ts +183 -0
- package/dist/LoginNotification.d.ts.map +1 -0
- package/dist/LoginNotification.js +329 -0
- package/dist/LoginNotification.js.map +1 -0
- package/dist/LoginRisk.d.ts +73 -0
- package/dist/LoginRisk.d.ts.map +1 -0
- package/dist/LoginRisk.js +57 -0
- package/dist/LoginRisk.js.map +1 -0
- package/dist/MagicLink.d.ts +85 -0
- package/dist/MagicLink.d.ts.map +1 -0
- package/dist/MagicLink.js +206 -0
- package/dist/MagicLink.js.map +1 -0
- package/dist/Mailer.d.ts +33 -2
- package/dist/Mailer.d.ts.map +1 -1
- package/dist/Mailer.js +107 -0
- package/dist/Mailer.js.map +1 -1
- package/dist/Passkey.d.ts +334 -0
- package/dist/Passkey.d.ts.map +1 -0
- package/dist/Passkey.js +422 -0
- package/dist/Passkey.js.map +1 -0
- package/dist/Password.d.ts +138 -8
- package/dist/Password.d.ts.map +1 -1
- package/dist/Password.js +397 -8
- package/dist/Password.js.map +1 -1
- package/dist/RecoveryCode.d.ts +169 -0
- package/dist/RecoveryCode.d.ts.map +1 -0
- package/dist/RecoveryCode.js +299 -0
- package/dist/RecoveryCode.js.map +1 -0
- package/dist/RefreshToken.d.ts +222 -0
- package/dist/RefreshToken.d.ts.map +1 -0
- package/dist/RefreshToken.js +342 -0
- package/dist/RefreshToken.js.map +1 -0
- package/dist/Sessions.d.ts +52 -2
- package/dist/Sessions.d.ts.map +1 -1
- package/dist/Sessions.js +123 -1
- package/dist/Sessions.js.map +1 -1
- package/dist/StepUp.d.ts +44 -0
- package/dist/StepUp.d.ts.map +1 -0
- package/dist/StepUp.js +82 -0
- package/dist/StepUp.js.map +1 -0
- package/dist/Storage.d.ts +14 -1
- package/dist/Storage.d.ts.map +1 -1
- package/dist/Storage.js.map +1 -1
- package/dist/StorageMigrations.d.ts +9 -1
- package/dist/StorageMigrations.d.ts.map +1 -1
- package/dist/StorageMigrations.js +159 -0
- package/dist/StorageMigrations.js.map +1 -1
- package/dist/Testing.d.ts +1 -1
- package/dist/Totp.d.ts +220 -0
- package/dist/Totp.d.ts.map +1 -0
- package/dist/Totp.js +477 -0
- package/dist/Totp.js.map +1 -0
- package/dist/TrustedDevice.d.ts +115 -0
- package/dist/TrustedDevice.d.ts.map +1 -0
- package/dist/TrustedDevice.js +222 -0
- package/dist/TrustedDevice.js.map +1 -0
- package/dist/alchemy/cloudflare/Email.d.ts +25 -0
- package/dist/alchemy/cloudflare/Email.d.ts.map +1 -0
- package/dist/alchemy/cloudflare/Email.js +117 -0
- package/dist/alchemy/cloudflare/Email.js.map +1 -0
- package/dist/cloudflare/Email.d.ts +25 -0
- package/dist/cloudflare/Email.d.ts.map +1 -0
- package/dist/cloudflare/Email.js +153 -0
- package/dist/cloudflare/Email.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/migrations/0003_auth_login_approval_review.sql +22 -0
- package/migrations/0004_auth_trusted_device.sql +12 -0
- package/migrations/0005_auth_passkey.sql +17 -0
- package/migrations/0006_auth_totp_factor.sql +17 -0
- package/migrations/0007_auth_recovery_code.sql +13 -0
- package/migrations/0008_auth_api_key.sql +17 -0
- package/migrations/0009_auth_refresh_token.sql +21 -0
- package/migrations/0010_auth_jwt_revocation.sql +8 -0
- package/package.json +57 -1
package/dist/ApiKey.js
ADDED
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import { Brand, Context, Data, Effect, Layer, Option, Redacted } from "effect";
|
|
2
|
+
import { Crypto } from "./Crypto.js";
|
|
3
|
+
import { currentUnixMillis } from "./Internal.js";
|
|
4
|
+
export const ApiKeyId = Brand.nominal();
|
|
5
|
+
export const ApiKeyPrefix = Brand.nominal();
|
|
6
|
+
export const ApiKeySecret = Brand.nominal();
|
|
7
|
+
export const ApiKeySecretHash = Brand.nominal();
|
|
8
|
+
export const defaultApiKeyPrefixBytes = 8;
|
|
9
|
+
export const defaultApiKeySecretBytes = 32;
|
|
10
|
+
export const defaultApiKeyIdBytes = 16;
|
|
11
|
+
export class ApiKeyError extends Data.TaggedError("ApiKeyError") {
|
|
12
|
+
}
|
|
13
|
+
export class ApiKeys extends Context.Service()("auth/ApiKeys") {
|
|
14
|
+
}
|
|
15
|
+
(function (ApiKeys) {
|
|
16
|
+
ApiKeys.make = (service) => ApiKeys.of(service);
|
|
17
|
+
})(ApiKeys || (ApiKeys = {}));
|
|
18
|
+
const textEncoder = new TextEncoder();
|
|
19
|
+
const apiKeyError = (operation, message, cause) => new ApiKeyError({
|
|
20
|
+
operation,
|
|
21
|
+
message,
|
|
22
|
+
...(cause === undefined ? {} : { cause }),
|
|
23
|
+
});
|
|
24
|
+
const validateByteLength = (byteLength, operation, label) => Number.isInteger(byteLength) && byteLength >= 4 && byteLength <= 128
|
|
25
|
+
? Effect.succeed(byteLength)
|
|
26
|
+
: Effect.fail(apiKeyError(operation, `${label} byte length must be an integer between 4 and 128`));
|
|
27
|
+
const parseApiKeySecretValue = (secret) => {
|
|
28
|
+
const value = secret.trim();
|
|
29
|
+
const parts = value.split(".");
|
|
30
|
+
if (parts.length !== 2 || parts[0] === "" || parts[1] === "") {
|
|
31
|
+
return Effect.fail(apiKeyError("parse", "API key secret must use '<prefix>.<secret>' format"));
|
|
32
|
+
}
|
|
33
|
+
return Effect.succeed(ApiKeyPrefix(parts[0]));
|
|
34
|
+
};
|
|
35
|
+
const hashApiKeySecretValue = (dependencies, secret, operation) => dependencies.crypto.digestSha256({ data: `api-key:${secret}` }).pipe(Effect.map((hash) => ApiKeySecretHash(`sha256:${hash}`)), Effect.mapError((cause) => apiKeyError(operation, "Failed to hash API key secret", cause)));
|
|
36
|
+
export const makeApiKeys = (dependencies) => ApiKeys.make({
|
|
37
|
+
generate: Effect.fn("auth.api_key.generate")(function* (input) {
|
|
38
|
+
const prefixBytes = yield* validateByteLength(input?.prefixBytes ?? defaultApiKeyPrefixBytes, "generate", "API key prefix");
|
|
39
|
+
const secretBytes = yield* validateByteLength(input?.secretBytes ?? defaultApiKeySecretBytes, "generate", "API key secret");
|
|
40
|
+
const prefix = yield* dependencies.crypto.randomToken(prefixBytes).pipe(Effect.map(ApiKeyPrefix), Effect.mapError((cause) => apiKeyError("generate", "Failed to generate API key prefix", cause)));
|
|
41
|
+
const secret = yield* dependencies.crypto.randomToken(secretBytes).pipe(Effect.map((value) => ApiKeySecret(`${prefix}.${value}`)), Effect.mapError((cause) => apiKeyError("generate", "Failed to generate API key secret", cause)));
|
|
42
|
+
return {
|
|
43
|
+
prefix,
|
|
44
|
+
secret: Redacted.make(secret),
|
|
45
|
+
};
|
|
46
|
+
}),
|
|
47
|
+
parse: Effect.fn("auth.api_key.parse")(function* (secret) {
|
|
48
|
+
return yield* parseApiKeySecretValue(Redacted.value(secret));
|
|
49
|
+
}),
|
|
50
|
+
hash: Effect.fn("auth.api_key.hash")(function* (input) {
|
|
51
|
+
const secret = Redacted.value(input.secret).trim();
|
|
52
|
+
yield* parseApiKeySecretValue(secret).pipe(Effect.mapError((cause) => apiKeyError("hash", "Cannot hash malformed API key secret", cause)));
|
|
53
|
+
return yield* hashApiKeySecretValue(dependencies, secret, "hash");
|
|
54
|
+
}),
|
|
55
|
+
verify: Effect.fn("auth.api_key.verify")(function* (input) {
|
|
56
|
+
const secret = Redacted.value(input.secret).trim();
|
|
57
|
+
const prefix = yield* parseApiKeySecretValue(secret).pipe(Effect.catchTag("ApiKeyError", () => Effect.succeed(undefined)));
|
|
58
|
+
if (prefix === undefined) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
const hash = yield* hashApiKeySecretValue(dependencies, secret, "verify");
|
|
62
|
+
return yield* dependencies.crypto
|
|
63
|
+
.timingSafeEqual({
|
|
64
|
+
left: textEncoder.encode(hash),
|
|
65
|
+
right: textEncoder.encode(input.hash),
|
|
66
|
+
})
|
|
67
|
+
.pipe(Effect.mapError((cause) => apiKeyError("verify", "Failed to compare API key hashes", cause)));
|
|
68
|
+
}),
|
|
69
|
+
});
|
|
70
|
+
export const ApiKeysLive = Layer.effect(ApiKeys)(Effect.gen(function* () {
|
|
71
|
+
const crypto = yield* Crypto;
|
|
72
|
+
return makeApiKeys({ crypto });
|
|
73
|
+
}));
|
|
74
|
+
export class ApiKeyStoreError extends Data.TaggedError("ApiKeyStoreError") {
|
|
75
|
+
}
|
|
76
|
+
export class ApiKeyStore extends Context.Service()("auth/ApiKeyStore") {
|
|
77
|
+
}
|
|
78
|
+
(function (ApiKeyStore) {
|
|
79
|
+
ApiKeyStore.make = (service) => ApiKeyStore.of(service);
|
|
80
|
+
})(ApiKeyStore || (ApiKeyStore = {}));
|
|
81
|
+
const cloneMetadata = (metadata) => metadata === undefined ? undefined : structuredClone(metadata);
|
|
82
|
+
const cloneApiKeyRecord = (record) => ({
|
|
83
|
+
...record,
|
|
84
|
+
scopes: [...record.scopes],
|
|
85
|
+
...(record.metadata === undefined ? {} : { metadata: cloneMetadata(record.metadata) }),
|
|
86
|
+
});
|
|
87
|
+
export const makeApiKeyStoreMemory = () => {
|
|
88
|
+
const keysById = new Map();
|
|
89
|
+
const idByPrefix = new Map();
|
|
90
|
+
return ApiKeyStore.make({
|
|
91
|
+
insert: (row) => Effect.sync(() => {
|
|
92
|
+
keysById.set(row.id, cloneApiKeyRecord(row));
|
|
93
|
+
idByPrefix.set(row.prefix, row.id);
|
|
94
|
+
}),
|
|
95
|
+
findById: (id) => Effect.sync(() => {
|
|
96
|
+
const row = keysById.get(id);
|
|
97
|
+
return row === undefined ? Option.none() : Option.some(cloneApiKeyRecord(row));
|
|
98
|
+
}),
|
|
99
|
+
findByPrefix: (prefix) => Effect.sync(() => {
|
|
100
|
+
const id = idByPrefix.get(prefix);
|
|
101
|
+
const row = id === undefined ? undefined : keysById.get(id);
|
|
102
|
+
return row === undefined ? Option.none() : Option.some(cloneApiKeyRecord(row));
|
|
103
|
+
}),
|
|
104
|
+
listByUser: (input) => Effect.sync(() => [...keysById.values()]
|
|
105
|
+
.filter((row) => row.userId === input.userId &&
|
|
106
|
+
(input.includeRevoked === true || row.revokedAt === undefined))
|
|
107
|
+
.map(cloneApiKeyRecord)),
|
|
108
|
+
markUsed: (input) => Effect.sync(() => {
|
|
109
|
+
const row = keysById.get(input.id);
|
|
110
|
+
if (row === undefined || row.revokedAt !== undefined) {
|
|
111
|
+
return Option.none();
|
|
112
|
+
}
|
|
113
|
+
const updated = {
|
|
114
|
+
...row,
|
|
115
|
+
lastUsedAt: input.lastUsedAt,
|
|
116
|
+
metadata: input.metadata ?? row.metadata,
|
|
117
|
+
};
|
|
118
|
+
keysById.set(input.id, updated);
|
|
119
|
+
return Option.some(cloneApiKeyRecord(updated));
|
|
120
|
+
}),
|
|
121
|
+
revoke: (input) => Effect.sync(() => {
|
|
122
|
+
const row = keysById.get(input.id);
|
|
123
|
+
if (row !== undefined) {
|
|
124
|
+
keysById.set(input.id, {
|
|
125
|
+
...row,
|
|
126
|
+
revokedAt: input.revokedAt,
|
|
127
|
+
metadata: input.reason === undefined
|
|
128
|
+
? row.metadata
|
|
129
|
+
: { ...row.metadata, revokeReason: input.reason },
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}),
|
|
133
|
+
});
|
|
134
|
+
};
|
|
135
|
+
export const ApiKeyStoreMemoryLive = Layer.sync(ApiKeyStore)(makeApiKeyStoreMemory);
|
|
136
|
+
export class ApiKeyManagementError extends Data.TaggedError("ApiKeyManagementError") {
|
|
137
|
+
}
|
|
138
|
+
export class ApiKeyManagement extends Context.Service()("auth/ApiKeyManagement") {
|
|
139
|
+
}
|
|
140
|
+
(function (ApiKeyManagement) {
|
|
141
|
+
ApiKeyManagement.make = (service) => ApiKeyManagement.of(service);
|
|
142
|
+
})(ApiKeyManagement || (ApiKeyManagement = {}));
|
|
143
|
+
const apiKeyInfo = (record) => ({
|
|
144
|
+
id: record.id,
|
|
145
|
+
userId: record.userId,
|
|
146
|
+
prefix: record.prefix,
|
|
147
|
+
scopes: [...record.scopes],
|
|
148
|
+
createdAt: record.createdAt,
|
|
149
|
+
...(record.expiresAt === undefined ? {} : { expiresAt: record.expiresAt }),
|
|
150
|
+
...(record.lastUsedAt === undefined ? {} : { lastUsedAt: record.lastUsedAt }),
|
|
151
|
+
...(record.revokedAt === undefined ? {} : { revokedAt: record.revokedAt }),
|
|
152
|
+
...(record.metadata === undefined ? {} : { metadata: record.metadata }),
|
|
153
|
+
});
|
|
154
|
+
const apiKeyManagementError = (operation, message, cause) => new ApiKeyManagementError({
|
|
155
|
+
operation,
|
|
156
|
+
message,
|
|
157
|
+
...(cause === undefined ? {} : { cause }),
|
|
158
|
+
});
|
|
159
|
+
const makeApiKeyId = (dependencies) => dependencies.crypto.randomToken(dependencies.keyIdBytes ?? defaultApiKeyIdBytes).pipe(Effect.map(ApiKeyId), Effect.mapError((cause) => apiKeyManagementError("create", "Failed to generate API key id", cause)));
|
|
160
|
+
const loadOwnedApiKey = (dependencies, operation, input) => Effect.gen(function* () {
|
|
161
|
+
const key = yield* dependencies.keyStore.findById(input.keyId).pipe(Effect.mapError((cause) => apiKeyManagementError(operation, "Failed to load API key", cause)));
|
|
162
|
+
if (Option.isNone(key) || key.value.userId !== input.userId) {
|
|
163
|
+
return yield* apiKeyManagementError(operation, "API key not found");
|
|
164
|
+
}
|
|
165
|
+
return key.value;
|
|
166
|
+
});
|
|
167
|
+
export const makeApiKeyManagement = (dependencies) => ApiKeyManagement.make({
|
|
168
|
+
createForUser: Effect.fn("auth.api_key.management.create")(function* (input) {
|
|
169
|
+
const now = input.now ?? (yield* currentUnixMillis);
|
|
170
|
+
const generated = yield* dependencies.apiKeys.generate().pipe(Effect.mapError((cause) => apiKeyManagementError("create", "Failed to generate API key secret", cause)));
|
|
171
|
+
const secretHash = yield* dependencies.apiKeys
|
|
172
|
+
.hash({ secret: Redacted.make(Redacted.value(generated.secret)) })
|
|
173
|
+
.pipe(Effect.mapError((cause) => apiKeyManagementError("create", "Failed to hash API key secret", cause)));
|
|
174
|
+
const row = {
|
|
175
|
+
id: input.keyId ?? (yield* makeApiKeyId(dependencies)),
|
|
176
|
+
userId: input.userId,
|
|
177
|
+
prefix: generated.prefix,
|
|
178
|
+
secretHash,
|
|
179
|
+
scopes: [...(input.scopes ?? [])],
|
|
180
|
+
createdAt: now,
|
|
181
|
+
...(input.expiresAt === undefined ? {} : { expiresAt: input.expiresAt }),
|
|
182
|
+
...(input.metadata === undefined ? {} : { metadata: input.metadata }),
|
|
183
|
+
};
|
|
184
|
+
yield* dependencies.keyStore.insert(row).pipe(Effect.mapError((cause) => apiKeyManagementError("create", "Failed to store API key", cause)));
|
|
185
|
+
return {
|
|
186
|
+
secret: generated.secret,
|
|
187
|
+
key: apiKeyInfo(row),
|
|
188
|
+
};
|
|
189
|
+
}),
|
|
190
|
+
listForUser: Effect.fn("auth.api_key.management.list")(function* (input) {
|
|
191
|
+
const keys = yield* dependencies.keyStore
|
|
192
|
+
.listByUser({
|
|
193
|
+
userId: input.userId,
|
|
194
|
+
...(input.includeRevoked === undefined
|
|
195
|
+
? {}
|
|
196
|
+
: { includeRevoked: input.includeRevoked }),
|
|
197
|
+
})
|
|
198
|
+
.pipe(Effect.mapError((cause) => apiKeyManagementError("list", "Failed to list API keys", cause)));
|
|
199
|
+
return keys.map(apiKeyInfo);
|
|
200
|
+
}),
|
|
201
|
+
revokeForUser: Effect.fn("auth.api_key.management.revoke")(function* (input) {
|
|
202
|
+
const key = yield* loadOwnedApiKey(dependencies, "revoke", input);
|
|
203
|
+
if (key.revokedAt !== undefined) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
const revokedAt = input.revokedAt ?? (yield* currentUnixMillis);
|
|
207
|
+
yield* dependencies.keyStore
|
|
208
|
+
.revoke({
|
|
209
|
+
id: input.keyId,
|
|
210
|
+
revokedAt,
|
|
211
|
+
...(input.reason === undefined ? {} : { reason: input.reason }),
|
|
212
|
+
})
|
|
213
|
+
.pipe(Effect.mapError((cause) => apiKeyManagementError("revoke", "Failed to revoke API key", cause)));
|
|
214
|
+
}),
|
|
215
|
+
});
|
|
216
|
+
export const ApiKeyManagementLive = Layer.effect(ApiKeyManagement)(Effect.gen(function* () {
|
|
217
|
+
const apiKeys = yield* ApiKeys;
|
|
218
|
+
const crypto = yield* Crypto;
|
|
219
|
+
const keyStore = yield* ApiKeyStore;
|
|
220
|
+
return makeApiKeyManagement({ apiKeys, crypto, keyStore });
|
|
221
|
+
}));
|
|
222
|
+
export class ApiKeyVerificationError extends Data.TaggedError("ApiKeyVerificationError") {
|
|
223
|
+
}
|
|
224
|
+
export class ApiKeyVerification extends Context.Service()("auth/ApiKeyVerification") {
|
|
225
|
+
}
|
|
226
|
+
(function (ApiKeyVerification) {
|
|
227
|
+
ApiKeyVerification.make = (service) => ApiKeyVerification.of(service);
|
|
228
|
+
})(ApiKeyVerification || (ApiKeyVerification = {}));
|
|
229
|
+
const apiKeyVerificationError = (message, cause) => new ApiKeyVerificationError({
|
|
230
|
+
operation: "verify",
|
|
231
|
+
message,
|
|
232
|
+
...(cause === undefined ? {} : { cause }),
|
|
233
|
+
});
|
|
234
|
+
export const makeApiKeyVerification = (dependencies) => ApiKeyVerification.make({
|
|
235
|
+
verify: Effect.fn("auth.api_key.verification.verify")(function* (input) {
|
|
236
|
+
const prefix = yield* dependencies.apiKeys.parse(input.secret).pipe(Effect.catchTag("ApiKeyError", () => Effect.succeed(undefined)));
|
|
237
|
+
if (prefix === undefined) {
|
|
238
|
+
return { valid: false };
|
|
239
|
+
}
|
|
240
|
+
const key = yield* dependencies.keyStore.findByPrefix(prefix).pipe(Effect.mapError((cause) => apiKeyVerificationError("Failed to load API key", cause)));
|
|
241
|
+
if (Option.isNone(key) || key.value.revokedAt !== undefined) {
|
|
242
|
+
return { valid: false };
|
|
243
|
+
}
|
|
244
|
+
const now = input.now ?? (yield* currentUnixMillis);
|
|
245
|
+
if (key.value.expiresAt !== undefined && Number(key.value.expiresAt) <= Number(now)) {
|
|
246
|
+
return { valid: false };
|
|
247
|
+
}
|
|
248
|
+
const valid = yield* dependencies.apiKeys
|
|
249
|
+
.verify({ secret: input.secret, hash: key.value.secretHash })
|
|
250
|
+
.pipe(Effect.mapError((cause) => apiKeyVerificationError("Failed to verify API key", cause)));
|
|
251
|
+
if (!valid) {
|
|
252
|
+
return { valid: false };
|
|
253
|
+
}
|
|
254
|
+
const updated = yield* dependencies.keyStore
|
|
255
|
+
.markUsed({
|
|
256
|
+
id: key.value.id,
|
|
257
|
+
lastUsedAt: now,
|
|
258
|
+
...(input.metadata === undefined ? {} : { metadata: input.metadata }),
|
|
259
|
+
})
|
|
260
|
+
.pipe(Effect.mapError((cause) => apiKeyVerificationError("Failed to mark API key as used", cause)));
|
|
261
|
+
if (Option.isNone(updated)) {
|
|
262
|
+
return { valid: false };
|
|
263
|
+
}
|
|
264
|
+
return {
|
|
265
|
+
valid: true,
|
|
266
|
+
key: apiKeyInfo(updated.value),
|
|
267
|
+
};
|
|
268
|
+
}),
|
|
269
|
+
});
|
|
270
|
+
export const ApiKeyVerificationLive = Layer.effect(ApiKeyVerification)(Effect.gen(function* () {
|
|
271
|
+
const apiKeys = yield* ApiKeys;
|
|
272
|
+
const keyStore = yield* ApiKeyStore;
|
|
273
|
+
return makeApiKeyVerification({ apiKeys, keyStore });
|
|
274
|
+
}));
|
|
275
|
+
//# sourceMappingURL=ApiKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiKey.js","sourceRoot":"","sources":["../src/ApiKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAG/E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGlD,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,EAAY,CAAC;AAGlD,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,EAAgB,CAAC;AAG1D,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,EAAgB,CAAC;AAG1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,EAAoB,CAAC;AAElE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAC1C,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAC3C,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAIvC,MAAM,OAAO,WAAY,SAAQ,IAAI,CAAC,WAAW,CAAC,aAAa,CAI7D;CAAG;AAmCL,MAAM,OAAO,OAAQ,SAAQ,OAAO,CAAC,OAAO,EAA2B,CACrE,cAAc,CACf;CAAG;AAEJ,WAAiB,OAAO;IACT,YAAI,GAAG,CAAC,OAAuB,EAAkB,EAAE,CAC9D,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC,EAHgB,OAAO,KAAP,OAAO,QAGvB;AAMD,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAEtC,MAAM,WAAW,GAAG,CAClB,SAA0B,EAC1B,OAAe,EACf,KAAe,EACF,EAAE,CACf,IAAI,WAAW,CAAC;IACd,SAAS;IACT,OAAO;IACP,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;CAC1C,CAAC,CAAC;AAEL,MAAM,kBAAkB,GAAG,CACzB,UAAkB,EAClB,SAA0B,EAC1B,KAAa,EACuB,EAAE,CACtC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,IAAI,GAAG;IAClE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;IAC5B,CAAC,CAAC,MAAM,CAAC,IAAI,CACT,WAAW,CACT,SAAS,EACT,GAAG,KAAK,mDAAmD,CAC5D,CACF,CAAC;AAER,MAAM,sBAAsB,GAAG,CAAC,MAAc,EAA4C,EAAE;IAC1F,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC,IAAI,CAChB,WAAW,CAAC,OAAO,EAAE,oDAAoD,CAAC,CAC3E,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC5B,YAAiC,EACjC,MAAc,EACd,SAA0B,EACoB,EAAE,CAChD,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,WAAW,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAClE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,EACxD,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,WAAW,CAAC,SAAS,EAAE,+BAA+B,EAAE,KAAK,CAAC,CAC/D,CACF,CAAC;AAEJ,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,YAAiC,EAAkB,EAAE,CAC/E,OAAO,CAAC,IAAI,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK;QAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,kBAAkB,CAC3C,KAAK,EAAE,WAAW,IAAI,wBAAwB,EAC9C,UAAU,EACV,gBAAgB,CACjB,CAAC;QACF,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,kBAAkB,CAC3C,KAAK,EAAE,WAAW,IAAI,wBAAwB,EAC9C,UAAU,EACV,gBAAgB,CACjB,CAAC;QACF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,CACrE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EACxB,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,WAAW,CAAC,UAAU,EAAE,mCAAmC,EAAE,KAAK,CAAC,CACpE,CACF,CAAC;QACF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,CACrE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,EACzD,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,WAAW,CAAC,UAAU,EAAE,mCAAmC,EAAE,KAAK,CAAC,CACpE,CACF,CAAC;QAEF,OAAO;YACL,MAAM;YACN,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;SACE,CAAC;IACpC,CAAC,CAAC;IACF,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM;QACtD,OAAO,KAAK,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC;IACF,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK;QACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAEnD,KAAK,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,IAAI,CACxC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,WAAW,CAAC,MAAM,EAAE,sCAAsC,EAAE,KAAK,CAAC,CACnE,CACF,CAAC;QAEF,OAAO,KAAK,CAAC,CAAC,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC,CAAC;IACF,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK;QACvD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,IAAI,CACvD,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAChE,CAAC;QAEF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAE1E,OAAO,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM;aAC9B,eAAe,CAAC;YACf,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;YAC9B,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;SACtC,CAAC;aACD,IAAI,CACH,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,WAAW,CAAC,QAAQ,EAAE,kCAAkC,EAAE,KAAK,CAAC,CACjE,CACF,CAAC;IACN,CAAC,CAAC;CACH,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAC9C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC;IAE7B,OAAO,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AACjC,CAAC,CAAC,CACH,CAAC;AAuCF,MAAM,OAAO,gBAAiB,SAAQ,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAIvE;CAAG;AAmBL,MAAM,OAAO,WAAY,SAAQ,OAAO,CAAC,OAAO,EAG7C,CAAC,kBAAkB,CAAC;CAAG;AAE1B,WAAiB,WAAW;IACb,gBAAI,GAAG,CAAC,OAA2B,EAAsB,EAAE,CACtE,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AAC5B,CAAC,EAHgB,WAAW,KAAX,WAAW,QAG3B;AAED,MAAM,aAAa,GAAG,CACpB,QAAuB,EACR,EAAE,CACjB,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,eAAe,CAAC,QAAQ,CAAO,CAAC;AAExE,MAAM,iBAAiB,GAAG,CAAC,MAAoB,EAAgB,EAAE,CAAC,CAAC;IACjE,GAAG,MAAM;IACT,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;CACvF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAuB,EAAE;IAC5D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,GAAG,EAA0B,CAAC;IAErD,OAAO,WAAW,CAAC,IAAI,CAAC;QACtB,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CACd,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACf,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7C,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC;QACJ,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CACf,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACf,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE7B,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;QACjF,CAAC,CAAC;QACJ,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CACvB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACf,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,GAAG,GAAG,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE5D,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;QACjF,CAAC,CAAC;QACJ,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CACpB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CACf,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;aACnB,MAAM,CACL,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;YAC3B,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CACjE;aACA,GAAG,CAAC,iBAAiB,CAAC,CAC1B;QACH,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACf,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAEnC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACrD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;YACvB,CAAC;YAED,MAAM,OAAO,GAAG;gBACd,GAAG,GAAG;gBACN,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ;aAClB,CAAC;YAEzB,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAEhC,OAAO,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC;QACJ,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAChB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACf,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAEnC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE;oBACrB,GAAG,GAAG;oBACN,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,QAAQ,EACN,KAAK,CAAC,MAAM,KAAK,SAAS;wBACxB,CAAC,CAAC,GAAG,CAAC,QAAQ;wBACd,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE;iBACtD,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;KACL,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAC1D,qBAAqB,CACtB,CAAC;AA0CF,MAAM,OAAO,qBAAsB,SAAQ,IAAI,CAAC,WAAW,CACzD,uBAAuB,CAKvB;CAAG;AAcL,MAAM,OAAO,gBAAiB,SAAQ,OAAO,CAAC,OAAO,EAGlD,CAAC,uBAAuB,CAAC;CAAG;AAE/B,WAAiB,gBAAgB;IAClB,qBAAI,GAAG,CAClB,OAAgC,EACP,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AAC7D,CAAC,EAJgB,gBAAgB,KAAhB,gBAAgB,QAIhC;AASD,MAAM,UAAU,GAAG,CAAC,MAAoB,EAAc,EAAE,CAAC,CAAC;IACxD,EAAE,EAAE,MAAM,CAAC,EAAE;IACb,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;IAC3B,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;IAC1E,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;IAC7E,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;IAC1E,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;CACxE,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,CAC5B,SAAoC,EACpC,OAAe,EACf,KAAe,EACQ,EAAE,CACzB,IAAI,qBAAqB,CAAC;IACxB,SAAS;IACT,OAAO;IACP,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;CAC1C,CAAC,CAAC;AAEL,MAAM,YAAY,GAAG,CACnB,YAA0C,EACM,EAAE,CAClD,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,IAAI,oBAAoB,CAAC,CAAC,IAAI,CACnF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EACpB,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,qBAAqB,CAAC,QAAQ,EAAE,+BAA+B,EAAE,KAAK,CAAC,CACxE,CACF,CAAC;AAEJ,MAAM,eAAe,GAAG,CACtB,YAA0C,EAC1C,SAAoC,EACpC,KAA4D,EACR,EAAE,CACtD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CACjE,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,qBAAqB,CAAC,SAAS,EAAE,wBAAwB,EAAE,KAAK,CAAC,CAClE,CACF,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC,CAAC,qBAAqB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,GAAG,CAAC,KAAK,CAAC;AACnB,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,YAA0C,EACjB,EAAE,CAC3B,gBAAgB,CAAC,IAAI,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC,gCAAgC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK;QACzE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAC3D,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,qBAAqB,CAAC,QAAQ,EAAE,mCAAmC,EAAE,KAAK,CAAC,CAC5E,CACF,CAAC;QACF,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO;aAC3C,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;aACjE,IAAI,CACH,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,qBAAqB,CAAC,QAAQ,EAAE,+BAA+B,EAAE,KAAK,CAAC,CACxE,CACF,CAAC;QACJ,MAAM,GAAG,GAAG;YACV,EAAE,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YACtD,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,UAAU;YACV,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YACjC,SAAS,EAAE,GAAG;YACd,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;YACxE,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;SAC/C,CAAC;QAEzB,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAC3C,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,qBAAqB,CAAC,QAAQ,EAAE,yBAAyB,EAAE,KAAK,CAAC,CAClE,CACF,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC;SACG,CAAC;IAC5B,CAAC,CAAC;IACF,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,8BAA8B,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK;QACrE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ;aACtC,UAAU,CAAC;YACV,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,GAAG,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS;gBACpC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;SAC9C,CAAC;aACD,IAAI,CACH,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,qBAAqB,CAAC,MAAM,EAAE,yBAAyB,EAAE,KAAK,CAAC,CAChE,CACF,CAAC;QAEJ,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC,CAAC;IACF,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC,gCAAgC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK;QACzE,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAElE,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAEhE,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ;aACzB,MAAM,CAAC;YACN,EAAE,EAAE,KAAK,CAAC,KAAK;YACf,SAAS;YACT,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;SAChE,CAAC;aACD,IAAI,CACH,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,qBAAqB,CAAC,QAAQ,EAAE,0BAA0B,EAAE,KAAK,CAAC,CACnE,CACF,CAAC;IACN,CAAC,CAAC;CACH,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAChE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC;IAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC;IAC7B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;IAEpC,OAAO,oBAAoB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC7D,CAAC,CAAC,CACH,CAAC;AAeF,MAAM,OAAO,uBAAwB,SAAQ,IAAI,CAAC,WAAW,CAC3D,yBAAyB,CAKzB;CAAG;AAQL,MAAM,OAAO,kBAAmB,SAAQ,OAAO,CAAC,OAAO,EAGpD,CAAC,yBAAyB,CAAC;CAAG;AAEjC,WAAiB,kBAAkB;IACpB,uBAAI,GAAG,CAClB,OAAkC,EACP,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AACjE,CAAC,EAJgB,kBAAkB,KAAlB,kBAAkB,QAIlC;AAOD,MAAM,uBAAuB,GAAG,CAC9B,OAAe,EACf,KAAe,EACU,EAAE,CAC3B,IAAI,uBAAuB,CAAC;IAC1B,SAAS,EAAE,QAAQ;IACnB,OAAO;IACP,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;CAC1C,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,YAA4C,EACjB,EAAE,CAC7B,kBAAkB,CAAC,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,kCAAkC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK;QACpE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CACjE,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAChE,CAAC;QAEF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAqC,CAAC;QAC7D,CAAC;QAED,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAChE,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,uBAAuB,CAAC,wBAAwB,EAAE,KAAK,CAAC,CACzD,CACF,CAAC;QAEF,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAqC,CAAC;QAC7D,CAAC;QAED,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAEpD,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACpF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAqC,CAAC;QAC7D,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO;aACtC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;aAC5D,IAAI,CACH,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,uBAAuB,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAC3D,CACF,CAAC;QAEJ,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,KAAK,EAAE,KAAK,EAAqC,CAAC;QAC7D,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ;aACzC,QAAQ,CAAC;YACR,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE;YAChB,UAAU,EAAE,GAAG;YACf,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;SACtE,CAAC;aACD,IAAI,CACH,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,uBAAuB,CAAC,gCAAgC,EAAE,KAAK,CAAC,CACjE,CACF,CAAC;QAEJ,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAqC,CAAC;QAC7D,CAAC;QAED,OAAO;YACL,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;SACI,CAAC;IACvC,CAAC,CAAC;CACH,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CACpE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC;IAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;IAEpC,OAAO,sBAAsB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;AACvD,CAAC,CAAC,CACH,CAAC"}
|
package/dist/AuditLog.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { Context, Effect, Layer } from "effect";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ApiKeyId } from "./ApiKey.js";
|
|
3
|
+
import type { AuditEventId, CredentialId, EmailHash, IpHash, PolicyId, SessionId, UnixMillis, UserAgentHash, UserId } from "./Identifiers.js";
|
|
4
|
+
import type { PasskeyCredentialId } from "./Passkey.js";
|
|
5
|
+
import type { RefreshTokenFamilyId, RefreshTokenId } from "./RefreshToken.js";
|
|
3
6
|
declare const AuditLogError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
4
7
|
readonly _tag: "AuditLogError";
|
|
5
8
|
} & Readonly<A>;
|
|
@@ -15,6 +18,13 @@ export type AuditActor = {
|
|
|
15
18
|
readonly userId: UserId;
|
|
16
19
|
readonly sessionId?: SessionId;
|
|
17
20
|
};
|
|
21
|
+
export declare const AuditActor: {
|
|
22
|
+
readonly anonymous: () => AuditActor;
|
|
23
|
+
readonly user: (input: {
|
|
24
|
+
readonly userId: UserId;
|
|
25
|
+
readonly sessionId?: SessionId;
|
|
26
|
+
}) => AuditActor;
|
|
27
|
+
};
|
|
18
28
|
export type AuditSubject = {
|
|
19
29
|
readonly type: "anonymous";
|
|
20
30
|
} | {
|
|
@@ -24,6 +34,11 @@ export type AuditSubject = {
|
|
|
24
34
|
readonly type: "user";
|
|
25
35
|
readonly userId: UserId;
|
|
26
36
|
};
|
|
37
|
+
export declare const AuditSubject: {
|
|
38
|
+
readonly anonymous: () => AuditSubject;
|
|
39
|
+
readonly email: (emailHash: EmailHash) => AuditSubject;
|
|
40
|
+
readonly user: (userId: UserId) => AuditSubject;
|
|
41
|
+
};
|
|
27
42
|
export interface AuditRequest {
|
|
28
43
|
readonly ipHash?: IpHash;
|
|
29
44
|
readonly userAgentHash?: UserAgentHash;
|
|
@@ -59,6 +74,166 @@ export type AuthAuditEvent = {
|
|
|
59
74
|
readonly reason: string;
|
|
60
75
|
readonly request?: AuditRequest;
|
|
61
76
|
readonly occurredAt: UnixMillis;
|
|
77
|
+
} | {
|
|
78
|
+
readonly type: "auth.passkey.credential.revoked";
|
|
79
|
+
readonly id?: AuditEventId;
|
|
80
|
+
readonly actor: AuditActor;
|
|
81
|
+
readonly userId: UserId;
|
|
82
|
+
readonly credentialId: PasskeyCredentialId;
|
|
83
|
+
readonly reason: string;
|
|
84
|
+
readonly request?: AuditRequest;
|
|
85
|
+
readonly occurredAt: UnixMillis;
|
|
86
|
+
} | {
|
|
87
|
+
readonly type: "auth.totp.enrollment.started";
|
|
88
|
+
readonly id?: AuditEventId;
|
|
89
|
+
readonly actor: AuditActor;
|
|
90
|
+
readonly userId: UserId;
|
|
91
|
+
readonly factorId: CredentialId;
|
|
92
|
+
readonly request?: AuditRequest;
|
|
93
|
+
readonly occurredAt: UnixMillis;
|
|
94
|
+
} | {
|
|
95
|
+
readonly type: "auth.totp.factor.confirmed";
|
|
96
|
+
readonly id?: AuditEventId;
|
|
97
|
+
readonly actor: AuditActor;
|
|
98
|
+
readonly userId: UserId;
|
|
99
|
+
readonly factorId: CredentialId;
|
|
100
|
+
readonly request?: AuditRequest;
|
|
101
|
+
readonly occurredAt: UnixMillis;
|
|
102
|
+
} | {
|
|
103
|
+
readonly type: "auth.totp.factor.verified";
|
|
104
|
+
readonly id?: AuditEventId;
|
|
105
|
+
readonly actor: AuditActor;
|
|
106
|
+
readonly userId: UserId;
|
|
107
|
+
readonly factorId: CredentialId;
|
|
108
|
+
readonly request?: AuditRequest;
|
|
109
|
+
readonly occurredAt: UnixMillis;
|
|
110
|
+
} | {
|
|
111
|
+
readonly type: "auth.totp.factor.revoked";
|
|
112
|
+
readonly id?: AuditEventId;
|
|
113
|
+
readonly actor: AuditActor;
|
|
114
|
+
readonly userId: UserId;
|
|
115
|
+
readonly factorId: CredentialId;
|
|
116
|
+
readonly reason: string;
|
|
117
|
+
readonly request?: AuditRequest;
|
|
118
|
+
readonly occurredAt: UnixMillis;
|
|
119
|
+
} | {
|
|
120
|
+
readonly type: "auth.recovery_code.generated";
|
|
121
|
+
readonly id?: AuditEventId;
|
|
122
|
+
readonly actor: AuditActor;
|
|
123
|
+
readonly userId: UserId;
|
|
124
|
+
readonly count: number;
|
|
125
|
+
readonly request?: AuditRequest;
|
|
126
|
+
readonly occurredAt: UnixMillis;
|
|
127
|
+
} | {
|
|
128
|
+
readonly type: "auth.recovery_code.verified";
|
|
129
|
+
readonly id?: AuditEventId;
|
|
130
|
+
readonly actor: AuditActor;
|
|
131
|
+
readonly userId: UserId;
|
|
132
|
+
readonly codeId: CredentialId;
|
|
133
|
+
readonly request?: AuditRequest;
|
|
134
|
+
readonly occurredAt: UnixMillis;
|
|
135
|
+
} | {
|
|
136
|
+
readonly type: "auth.recovery_code.revoked";
|
|
137
|
+
readonly id?: AuditEventId;
|
|
138
|
+
readonly actor: AuditActor;
|
|
139
|
+
readonly userId: UserId;
|
|
140
|
+
readonly codeId: CredentialId;
|
|
141
|
+
readonly reason: string;
|
|
142
|
+
readonly request?: AuditRequest;
|
|
143
|
+
readonly occurredAt: UnixMillis;
|
|
144
|
+
} | {
|
|
145
|
+
readonly type: "auth.api_key.created";
|
|
146
|
+
readonly id?: AuditEventId;
|
|
147
|
+
readonly actor: AuditActor;
|
|
148
|
+
readonly userId: UserId;
|
|
149
|
+
readonly keyId: ApiKeyId;
|
|
150
|
+
readonly scopes: readonly string[];
|
|
151
|
+
readonly request?: AuditRequest;
|
|
152
|
+
readonly occurredAt: UnixMillis;
|
|
153
|
+
} | {
|
|
154
|
+
readonly type: "auth.api_key.verified";
|
|
155
|
+
readonly id?: AuditEventId;
|
|
156
|
+
readonly actor: AuditActor;
|
|
157
|
+
readonly userId: UserId;
|
|
158
|
+
readonly keyId: ApiKeyId;
|
|
159
|
+
readonly scopes: readonly string[];
|
|
160
|
+
readonly request?: AuditRequest;
|
|
161
|
+
readonly occurredAt: UnixMillis;
|
|
162
|
+
} | {
|
|
163
|
+
readonly type: "auth.api_key.revoked";
|
|
164
|
+
readonly id?: AuditEventId;
|
|
165
|
+
readonly actor: AuditActor;
|
|
166
|
+
readonly userId: UserId;
|
|
167
|
+
readonly keyId: ApiKeyId;
|
|
168
|
+
readonly reason: string;
|
|
169
|
+
readonly request?: AuditRequest;
|
|
170
|
+
readonly occurredAt: UnixMillis;
|
|
171
|
+
} | {
|
|
172
|
+
readonly type: "auth.api_key.verification_failed";
|
|
173
|
+
readonly id?: AuditEventId;
|
|
174
|
+
readonly actor: AuditActor;
|
|
175
|
+
readonly reason: string;
|
|
176
|
+
readonly request?: AuditRequest;
|
|
177
|
+
readonly occurredAt: UnixMillis;
|
|
178
|
+
} | {
|
|
179
|
+
readonly type: "auth.refresh_token.issued";
|
|
180
|
+
readonly id?: AuditEventId;
|
|
181
|
+
readonly actor: AuditActor;
|
|
182
|
+
readonly userId: UserId;
|
|
183
|
+
readonly tokenId: RefreshTokenId;
|
|
184
|
+
readonly familyId: RefreshTokenFamilyId;
|
|
185
|
+
readonly expiresAt: UnixMillis;
|
|
186
|
+
readonly request?: AuditRequest;
|
|
187
|
+
readonly occurredAt: UnixMillis;
|
|
188
|
+
} | {
|
|
189
|
+
readonly type: "auth.refresh_token.rotated";
|
|
190
|
+
readonly id?: AuditEventId;
|
|
191
|
+
readonly actor: AuditActor;
|
|
192
|
+
readonly userId: UserId;
|
|
193
|
+
readonly previousTokenId: RefreshTokenId;
|
|
194
|
+
readonly tokenId: RefreshTokenId;
|
|
195
|
+
readonly familyId: RefreshTokenFamilyId;
|
|
196
|
+
readonly expiresAt: UnixMillis;
|
|
197
|
+
readonly request?: AuditRequest;
|
|
198
|
+
readonly occurredAt: UnixMillis;
|
|
199
|
+
} | {
|
|
200
|
+
readonly type: "auth.refresh_token.reuse_detected";
|
|
201
|
+
readonly id?: AuditEventId;
|
|
202
|
+
readonly actor: AuditActor;
|
|
203
|
+
readonly userId: UserId;
|
|
204
|
+
readonly tokenId: RefreshTokenId;
|
|
205
|
+
readonly familyId: RefreshTokenFamilyId;
|
|
206
|
+
readonly request?: AuditRequest;
|
|
207
|
+
readonly occurredAt: UnixMillis;
|
|
208
|
+
} | {
|
|
209
|
+
readonly type: "auth.refresh_token.revoked";
|
|
210
|
+
readonly id?: AuditEventId;
|
|
211
|
+
readonly actor: AuditActor;
|
|
212
|
+
readonly userId: UserId;
|
|
213
|
+
readonly familyId: RefreshTokenFamilyId;
|
|
214
|
+
readonly tokenId?: RefreshTokenId;
|
|
215
|
+
readonly reason: string;
|
|
216
|
+
readonly request?: AuditRequest;
|
|
217
|
+
readonly occurredAt: UnixMillis;
|
|
218
|
+
} | {
|
|
219
|
+
readonly type: "auth.jwt.introspected";
|
|
220
|
+
readonly id?: AuditEventId;
|
|
221
|
+
readonly actor: AuditActor;
|
|
222
|
+
readonly active: boolean;
|
|
223
|
+
readonly jwtId?: string;
|
|
224
|
+
readonly expiresAt?: UnixMillis;
|
|
225
|
+
readonly reason?: string;
|
|
226
|
+
readonly request?: AuditRequest;
|
|
227
|
+
readonly occurredAt: UnixMillis;
|
|
228
|
+
} | {
|
|
229
|
+
readonly type: "auth.jwt.revoked";
|
|
230
|
+
readonly id?: AuditEventId;
|
|
231
|
+
readonly actor: AuditActor;
|
|
232
|
+
readonly jwtId: string;
|
|
233
|
+
readonly expiresAt?: UnixMillis;
|
|
234
|
+
readonly reason: string;
|
|
235
|
+
readonly request?: AuditRequest;
|
|
236
|
+
readonly occurredAt: UnixMillis;
|
|
62
237
|
};
|
|
63
238
|
export interface AuditLogService {
|
|
64
239
|
readonly emit: (event: AuthAuditEvent) => Effect.Effect<void, AuditLogError>;
|
|
@@ -69,6 +244,34 @@ export declare class AuditLog extends AuditLog_base {
|
|
|
69
244
|
export declare namespace AuditLog {
|
|
70
245
|
const make: (service: AuditLogService) => AuditLogService;
|
|
71
246
|
}
|
|
247
|
+
export type AuditEventInput<Type extends AuthAuditEvent["type"]> = Omit<Extract<AuthAuditEvent, {
|
|
248
|
+
readonly type: Type;
|
|
249
|
+
}>, "type" | "occurredAt"> & {
|
|
250
|
+
readonly occurredAt?: UnixMillis;
|
|
251
|
+
};
|
|
252
|
+
export declare const emit: (event: AuthAuditEvent) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
253
|
+
export declare const loginSucceeded: (input: AuditEventInput<"auth.login.succeeded">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
254
|
+
export declare const loginFailed: (input: AuditEventInput<"auth.login.failed">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
255
|
+
export declare const sessionRevoked: (input: AuditEventInput<"auth.session.revoked">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
256
|
+
export declare const policyDenied: (input: AuditEventInput<"auth.policy.denied">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
257
|
+
export declare const passkeyCredentialRevoked: (input: AuditEventInput<"auth.passkey.credential.revoked">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
258
|
+
export declare const totpEnrollmentStarted: (input: AuditEventInput<"auth.totp.enrollment.started">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
259
|
+
export declare const totpFactorConfirmed: (input: AuditEventInput<"auth.totp.factor.confirmed">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
260
|
+
export declare const totpFactorVerified: (input: AuditEventInput<"auth.totp.factor.verified">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
261
|
+
export declare const totpFactorRevoked: (input: AuditEventInput<"auth.totp.factor.revoked">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
262
|
+
export declare const recoveryCodeGenerated: (input: AuditEventInput<"auth.recovery_code.generated">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
263
|
+
export declare const recoveryCodeVerified: (input: AuditEventInput<"auth.recovery_code.verified">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
264
|
+
export declare const recoveryCodeRevoked: (input: AuditEventInput<"auth.recovery_code.revoked">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
265
|
+
export declare const apiKeyCreated: (input: AuditEventInput<"auth.api_key.created">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
266
|
+
export declare const apiKeyVerified: (input: AuditEventInput<"auth.api_key.verified">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
267
|
+
export declare const apiKeyRevoked: (input: AuditEventInput<"auth.api_key.revoked">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
268
|
+
export declare const apiKeyVerificationFailed: (input: AuditEventInput<"auth.api_key.verification_failed">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
269
|
+
export declare const refreshTokenIssued: (input: AuditEventInput<"auth.refresh_token.issued">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
270
|
+
export declare const refreshTokenRotated: (input: AuditEventInput<"auth.refresh_token.rotated">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
271
|
+
export declare const refreshTokenReuseDetected: (input: AuditEventInput<"auth.refresh_token.reuse_detected">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
272
|
+
export declare const refreshTokenRevoked: (input: AuditEventInput<"auth.refresh_token.revoked">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
273
|
+
export declare const jwtIntrospected: (input: AuditEventInput<"auth.jwt.introspected">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
274
|
+
export declare const jwtRevoked: (input: AuditEventInput<"auth.jwt.revoked">) => Effect.Effect<void, AuditLogError, AuditLog>;
|
|
72
275
|
export declare const AuditLogNoopLive: Layer.Layer<AuditLog, never, never>;
|
|
73
276
|
export {};
|
|
74
277
|
//# sourceMappingURL=AuditLog.d.ts.map
|
package/dist/AuditLog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuditLog.d.ts","sourceRoot":"","sources":["../src/AuditLog.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AuditLog.d.ts","sourceRoot":"","sources":["../src/AuditLog.ts"],"names":[],"mappings":"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"}
|