@syncular/client-plugin-offline-auth 0.0.0 → 0.0.6-171

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.
@@ -0,0 +1,195 @@
1
+ import type { SyncAuthErrorContext, SyncAuthLifecycle, SyncAuthRetryContext, SyncIdentityBase } from '@syncular/core';
2
+ export type MaybePromise<T> = T | Promise<T>;
3
+ export interface OfflineAuthStorage {
4
+ getItem(key: string): MaybePromise<string | null>;
5
+ setItem(key: string, value: string): MaybePromise<void>;
6
+ removeItem(key: string): MaybePromise<void>;
7
+ }
8
+ export interface OfflineSubjectIdentity extends SyncIdentityBase {
9
+ teamId?: string | null;
10
+ }
11
+ export interface OfflineAuthCachedValue<TValue> {
12
+ value: TValue;
13
+ savedAtMs: number;
14
+ expiresAtMs: number | null;
15
+ }
16
+ export interface OfflineAuthState<TSession, TIdentity extends OfflineSubjectIdentity> {
17
+ version: typeof OFFLINE_AUTH_STATE_VERSION;
18
+ session: OfflineAuthCachedValue<TSession> | null;
19
+ identity: OfflineAuthCachedValue<TIdentity> | null;
20
+ lastActorId: string | null;
21
+ }
22
+ export interface OfflineAuthStateCodec<TSession, TIdentity extends OfflineSubjectIdentity> {
23
+ parseSession(value: unknown): TSession | null;
24
+ parseIdentity(value: unknown): TIdentity | null;
25
+ }
26
+ export interface LoadOfflineAuthStateOptions<TSession, TIdentity extends OfflineSubjectIdentity> {
27
+ storage: OfflineAuthStorage;
28
+ codec: OfflineAuthStateCodec<TSession, TIdentity>;
29
+ storageKey?: string;
30
+ }
31
+ export interface SaveOfflineAuthStateOptions {
32
+ storage: OfflineAuthStorage;
33
+ storageKey?: string;
34
+ }
35
+ export interface CreateSessionCacheEntryOptions<TSession> {
36
+ nowMs?: number;
37
+ skewMs?: number;
38
+ allowMissingExpiry?: boolean;
39
+ getExpiresAtMs?: (session: TSession) => number | null | undefined;
40
+ getJwt?: (session: TSession) => string | null | undefined;
41
+ }
42
+ export interface CreateIdentityCacheEntryOptions<TIdentity> {
43
+ nowMs?: number;
44
+ getExpiresAtMs?: (identity: TIdentity) => number | null | undefined;
45
+ }
46
+ export interface PersistOnlineSessionOptions<TSession, TIdentity extends OfflineSubjectIdentity> extends CreateSessionCacheEntryOptions<TSession> {
47
+ state: OfflineAuthState<TSession, TIdentity>;
48
+ session: TSession | null;
49
+ getSessionActorId: (session: TSession) => string | null | undefined;
50
+ deriveIdentity?: (session: TSession) => TIdentity | null | undefined;
51
+ getIdentityExpiresAtMs?: (identity: TIdentity) => number | null | undefined;
52
+ }
53
+ export interface PersistOfflineIdentityOptions<TSession, TIdentity extends OfflineSubjectIdentity> extends CreateIdentityCacheEntryOptions<TIdentity> {
54
+ state: OfflineAuthState<TSession, TIdentity>;
55
+ identity: TIdentity | null;
56
+ }
57
+ export interface ResolveOfflineAuthSubjectOptions<TSession, TIdentity extends OfflineSubjectIdentity> {
58
+ state: OfflineAuthState<TSession, TIdentity>;
59
+ nowMs?: number;
60
+ skewMs?: number;
61
+ getSessionActorId: (session: TSession) => string | null | undefined;
62
+ getSessionTeamId?: (session: TSession) => string | null | undefined;
63
+ getIdentityActorId?: (identity: TIdentity) => string | null | undefined;
64
+ getIdentityTeamId?: (identity: TIdentity) => string | null | undefined;
65
+ }
66
+ export type OfflineAuthSubjectSource = 'online-session' | 'offline-identity' | 'last-actor' | 'none';
67
+ export interface OfflineResolvedSubject<TSession, TIdentity extends OfflineSubjectIdentity> {
68
+ source: OfflineAuthSubjectSource;
69
+ actorId: string | null;
70
+ teamId: string | null;
71
+ isOffline: boolean;
72
+ session: OfflineAuthCachedValue<TSession> | null;
73
+ identity: OfflineAuthCachedValue<TIdentity> | null;
74
+ }
75
+ export interface TokenRetryContext extends SyncAuthRetryContext {
76
+ previousToken: string | null;
77
+ nextToken: string | null;
78
+ }
79
+ export interface CreateTokenLifecycleBridgeOptions {
80
+ resolveToken: () => MaybePromise<string | null | undefined>;
81
+ refreshToken?: (context: SyncAuthErrorContext) => MaybePromise<string | null | undefined>;
82
+ onAuthExpired?: (context: SyncAuthErrorContext) => MaybePromise<void>;
83
+ retryWithFreshToken?: (context: TokenRetryContext) => MaybePromise<boolean>;
84
+ }
85
+ export interface TokenLifecycleBridge {
86
+ resolveToken: () => Promise<string | null>;
87
+ getAuthorizationHeaders: () => Promise<Record<string, string>>;
88
+ getRealtimeParams: (paramName?: string) => Promise<Record<string, string>>;
89
+ authLifecycle: SyncAuthLifecycle;
90
+ }
91
+ export interface OfflineLockPolicyOptions {
92
+ now?: () => number;
93
+ initiallyLocked?: boolean;
94
+ maxFailedAttempts?: number;
95
+ cooldownMs?: number;
96
+ idleTimeoutMs?: number;
97
+ }
98
+ export interface OfflineLockState {
99
+ isLocked: boolean;
100
+ failedAttempts: number;
101
+ blockedUntilMs: number | null;
102
+ lastActivityAtMs: number;
103
+ }
104
+ type OfflineLockEventBase = {
105
+ nowMs?: number;
106
+ };
107
+ export type OfflineLockEvent = ({
108
+ type: 'lock';
109
+ } & OfflineLockEventBase) | ({
110
+ type: 'unlock';
111
+ } & OfflineLockEventBase) | ({
112
+ type: 'activity';
113
+ } & OfflineLockEventBase) | ({
114
+ type: 'failed-unlock';
115
+ } & OfflineLockEventBase) | ({
116
+ type: 'reset-failures';
117
+ } & OfflineLockEventBase) | ({
118
+ type: 'tick';
119
+ } & OfflineLockEventBase);
120
+ export type OfflineUnlockFailureReason = 'blocked' | 'rejected';
121
+ export interface OfflineUnlockResult {
122
+ ok: boolean;
123
+ reason: OfflineUnlockFailureReason | null;
124
+ state: OfflineLockState;
125
+ }
126
+ export interface AttemptOfflineUnlockArgs {
127
+ state: OfflineLockState;
128
+ verify: () => boolean;
129
+ options?: OfflineLockPolicyOptions;
130
+ nowMs?: number;
131
+ }
132
+ export interface AttemptOfflineUnlockAsyncArgs {
133
+ state: OfflineLockState;
134
+ verify: () => MaybePromise<boolean>;
135
+ options?: OfflineLockPolicyOptions;
136
+ nowMs?: number;
137
+ }
138
+ export interface OfflineLockController {
139
+ getState(): OfflineLockState;
140
+ replaceState(nextState: OfflineLockState): OfflineLockState;
141
+ dispatch(event: OfflineLockEvent): OfflineLockState;
142
+ lock(): OfflineLockState;
143
+ forceUnlock(): OfflineUnlockResult;
144
+ recordActivity(): OfflineLockState;
145
+ recordFailedUnlock(): OfflineLockState;
146
+ resetFailures(): OfflineLockState;
147
+ evaluateIdleTimeout(): OfflineLockState;
148
+ attemptUnlock(verify: () => boolean): OfflineUnlockResult;
149
+ attemptUnlockAsync(verify: () => MaybePromise<boolean>): Promise<OfflineUnlockResult>;
150
+ }
151
+ export declare const OFFLINE_AUTH_STATE_VERSION = 1;
152
+ export declare const DEFAULT_OFFLINE_AUTH_STORAGE_KEY = "syncular-offline-auth-v1";
153
+ export declare const DEFAULT_EXPIRY_SKEW_MS = 30000;
154
+ export declare const DEFAULT_MAX_FAILED_ATTEMPTS = 5;
155
+ export declare const DEFAULT_LOCK_COOLDOWN_MS = 30000;
156
+ export declare function createWebStorageAdapter(storage: {
157
+ getItem(key: string): string | null;
158
+ setItem(key: string, value: string): void;
159
+ removeItem(key: string): void;
160
+ }): OfflineAuthStorage;
161
+ export declare function createMemoryStorageAdapter(initialEntries?: Record<string, string>): OfflineAuthStorage;
162
+ export declare function isOfflineSubjectIdentity(value: unknown): value is OfflineSubjectIdentity;
163
+ export declare function createEmptyOfflineAuthState<TSession, TIdentity extends OfflineSubjectIdentity>(): OfflineAuthState<TSession, TIdentity>;
164
+ export declare function loadOfflineAuthState<TSession, TIdentity extends OfflineSubjectIdentity>(options: LoadOfflineAuthStateOptions<TSession, TIdentity>): Promise<OfflineAuthState<TSession, TIdentity>>;
165
+ export declare function saveOfflineAuthState<TSession, TIdentity extends OfflineSubjectIdentity>(state: OfflineAuthState<TSession, TIdentity>, options: SaveOfflineAuthStateOptions): Promise<void>;
166
+ export declare function removeOfflineAuthState(options: SaveOfflineAuthStateOptions): Promise<void>;
167
+ export declare function getJwtExpiryMs(token: string): number | null;
168
+ export declare function isExpiryElapsed(args: {
169
+ expiresAtMs: number | null | undefined;
170
+ nowMs?: number;
171
+ skewMs?: number;
172
+ }): boolean;
173
+ export declare function isCachedValueExpired<TValue>(cachedValue: OfflineAuthCachedValue<TValue>, options?: {
174
+ nowMs?: number;
175
+ skewMs?: number;
176
+ }): boolean;
177
+ export declare function createSessionCacheEntry<TSession>(session: TSession, options?: CreateSessionCacheEntryOptions<TSession>): OfflineAuthCachedValue<TSession> | null;
178
+ export declare function createIdentityCacheEntry<TIdentity>(identity: TIdentity, options?: CreateIdentityCacheEntryOptions<TIdentity>): OfflineAuthCachedValue<TIdentity>;
179
+ export declare function persistOnlineSession<TSession, TIdentity extends OfflineSubjectIdentity>(options: PersistOnlineSessionOptions<TSession, TIdentity>): OfflineAuthState<TSession, TIdentity>;
180
+ export declare function persistOfflineIdentity<TSession, TIdentity extends OfflineSubjectIdentity>(options: PersistOfflineIdentityOptions<TSession, TIdentity>): OfflineAuthState<TSession, TIdentity>;
181
+ export declare function setOfflineAuthLastActorId<TSession, TIdentity extends OfflineSubjectIdentity>(state: OfflineAuthState<TSession, TIdentity>, actorId: string | null): OfflineAuthState<TSession, TIdentity>;
182
+ export declare function clearOfflineAuthState<TSession, TIdentity extends OfflineSubjectIdentity>(state: OfflineAuthState<TSession, TIdentity>, options?: {
183
+ preserveLastActorId?: boolean;
184
+ }): OfflineAuthState<TSession, TIdentity>;
185
+ export declare function resolveOfflineAuthSubject<TSession, TIdentity extends OfflineSubjectIdentity>(options: ResolveOfflineAuthSubjectOptions<TSession, TIdentity>): OfflineResolvedSubject<TSession, TIdentity>;
186
+ export declare function createBearerAuthHeaders(token: string | null | undefined): Record<string, string>;
187
+ export declare function createTokenLifecycleBridge(options: CreateTokenLifecycleBridgeOptions): TokenLifecycleBridge;
188
+ export declare function createOfflineLockState(options?: OfflineLockPolicyOptions): OfflineLockState;
189
+ export declare function isOfflineLockBlocked(state: OfflineLockState, nowMs?: number): boolean;
190
+ export declare function applyOfflineLockEvent(state: OfflineLockState, event: OfflineLockEvent, options?: OfflineLockPolicyOptions): OfflineLockState;
191
+ export declare function attemptOfflineUnlock(args: AttemptOfflineUnlockArgs): OfflineUnlockResult;
192
+ export declare function attemptOfflineUnlockAsync(args: AttemptOfflineUnlockAsyncArgs): Promise<OfflineUnlockResult>;
193
+ export declare function createOfflineLockController(options?: OfflineLockPolicyOptions): OfflineLockController;
194
+ export {};
195
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,697 @@
1
+ export const OFFLINE_AUTH_STATE_VERSION = 1;
2
+ export const DEFAULT_OFFLINE_AUTH_STORAGE_KEY = 'syncular-offline-auth-v1';
3
+ export const DEFAULT_EXPIRY_SKEW_MS = 30_000;
4
+ export const DEFAULT_MAX_FAILED_ATTEMPTS = 5;
5
+ export const DEFAULT_LOCK_COOLDOWN_MS = 30_000;
6
+ function isRecord(value) {
7
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
8
+ }
9
+ function readFiniteNumber(value) {
10
+ if (typeof value !== 'number')
11
+ return null;
12
+ if (!Number.isFinite(value))
13
+ return null;
14
+ return value;
15
+ }
16
+ function readNullableFiniteNumber(value) {
17
+ if (value === null)
18
+ return null;
19
+ const parsed = readFiniteNumber(value);
20
+ if (parsed === null)
21
+ return undefined;
22
+ return parsed;
23
+ }
24
+ function readTrimmedString(value) {
25
+ if (typeof value !== 'string')
26
+ return null;
27
+ const trimmed = value.trim();
28
+ return trimmed.length > 0 ? trimmed : null;
29
+ }
30
+ function readNullableTrimmedString(value) {
31
+ if (value === null)
32
+ return null;
33
+ const parsed = readTrimmedString(value);
34
+ if (parsed === null)
35
+ return undefined;
36
+ return parsed;
37
+ }
38
+ function parseCachedValue(value, parseValue) {
39
+ if (value === null || value === undefined)
40
+ return null;
41
+ if (!isRecord(value))
42
+ return null;
43
+ const parsedValue = parseValue(value.value);
44
+ if (parsedValue === null)
45
+ return null;
46
+ const savedAtMs = readFiniteNumber(value.savedAtMs);
47
+ if (savedAtMs === null)
48
+ return null;
49
+ const expiresAtMs = readNullableFiniteNumber(value.expiresAtMs);
50
+ if (expiresAtMs === undefined)
51
+ return null;
52
+ return {
53
+ value: parsedValue,
54
+ savedAtMs,
55
+ expiresAtMs,
56
+ };
57
+ }
58
+ function toNowMs(nowMs, now) {
59
+ if (typeof nowMs === 'number' && Number.isFinite(nowMs)) {
60
+ return nowMs;
61
+ }
62
+ if (now) {
63
+ return now();
64
+ }
65
+ return Date.now();
66
+ }
67
+ function normalizeLockPolicy(options) {
68
+ const maxFailedAttempts = Math.max(1, Math.floor(options?.maxFailedAttempts ?? DEFAULT_MAX_FAILED_ATTEMPTS));
69
+ const cooldownMs = Math.max(0, Math.floor(options?.cooldownMs ?? DEFAULT_LOCK_COOLDOWN_MS));
70
+ const idleTimeoutMs = Math.max(0, Math.floor(options?.idleTimeoutMs ?? 0));
71
+ return {
72
+ now: options?.now ?? (() => Date.now()),
73
+ maxFailedAttempts,
74
+ cooldownMs,
75
+ idleTimeoutMs,
76
+ };
77
+ }
78
+ function normalizeLockStateForTime(state, nowMs) {
79
+ if (state.blockedUntilMs === null)
80
+ return state;
81
+ if (state.blockedUntilMs > nowMs)
82
+ return state;
83
+ return {
84
+ ...state,
85
+ blockedUntilMs: null,
86
+ failedAttempts: 0,
87
+ };
88
+ }
89
+ function decodeBase64UrlSegment(segment) {
90
+ const normalized = segment.replace(/-/g, '+').replace(/_/g, '/');
91
+ const padding = '='.repeat((4 - (normalized.length % 4)) % 4);
92
+ const base64 = `${normalized}${padding}`;
93
+ try {
94
+ if (typeof Buffer !== 'undefined') {
95
+ return Buffer.from(base64, 'base64').toString('utf8');
96
+ }
97
+ if (typeof atob === 'function') {
98
+ return atob(base64);
99
+ }
100
+ }
101
+ catch {
102
+ return null;
103
+ }
104
+ return null;
105
+ }
106
+ function parseJwtPayload(token) {
107
+ const segments = token.split('.');
108
+ if (segments.length < 2)
109
+ return null;
110
+ const payloadSegment = segments[1];
111
+ if (!payloadSegment)
112
+ return null;
113
+ const decoded = decodeBase64UrlSegment(payloadSegment);
114
+ if (!decoded)
115
+ return null;
116
+ try {
117
+ const parsed = JSON.parse(decoded);
118
+ if (!isRecord(parsed))
119
+ return null;
120
+ return parsed;
121
+ }
122
+ catch {
123
+ return null;
124
+ }
125
+ }
126
+ export function createWebStorageAdapter(storage) {
127
+ return {
128
+ getItem(key) {
129
+ return storage.getItem(key);
130
+ },
131
+ setItem(key, value) {
132
+ storage.setItem(key, value);
133
+ },
134
+ removeItem(key) {
135
+ storage.removeItem(key);
136
+ },
137
+ };
138
+ }
139
+ export function createMemoryStorageAdapter(initialEntries) {
140
+ const state = new Map(Object.entries(initialEntries ?? {}));
141
+ return {
142
+ getItem(key) {
143
+ return state.get(key) ?? null;
144
+ },
145
+ setItem(key, value) {
146
+ state.set(key, value);
147
+ },
148
+ removeItem(key) {
149
+ state.delete(key);
150
+ },
151
+ };
152
+ }
153
+ export function isOfflineSubjectIdentity(value) {
154
+ if (!isRecord(value))
155
+ return false;
156
+ const actorId = readTrimmedString(value.actorId);
157
+ if (!actorId)
158
+ return false;
159
+ const teamId = value.teamId;
160
+ if (teamId === undefined || teamId === null)
161
+ return true;
162
+ return readTrimmedString(teamId) !== null;
163
+ }
164
+ export function createEmptyOfflineAuthState() {
165
+ return {
166
+ version: OFFLINE_AUTH_STATE_VERSION,
167
+ session: null,
168
+ identity: null,
169
+ lastActorId: null,
170
+ };
171
+ }
172
+ export async function loadOfflineAuthState(options) {
173
+ const storageKey = options.storageKey ?? DEFAULT_OFFLINE_AUTH_STORAGE_KEY;
174
+ const fallback = createEmptyOfflineAuthState();
175
+ let rawValue = null;
176
+ try {
177
+ rawValue = await options.storage.getItem(storageKey);
178
+ }
179
+ catch {
180
+ return fallback;
181
+ }
182
+ if (!rawValue) {
183
+ return fallback;
184
+ }
185
+ let parsed;
186
+ try {
187
+ parsed = JSON.parse(rawValue);
188
+ }
189
+ catch {
190
+ return fallback;
191
+ }
192
+ if (!isRecord(parsed)) {
193
+ return fallback;
194
+ }
195
+ const version = readFiniteNumber(parsed.version);
196
+ if (version !== OFFLINE_AUTH_STATE_VERSION) {
197
+ return fallback;
198
+ }
199
+ const session = parseCachedValue(parsed.session, options.codec.parseSession);
200
+ const identity = parseCachedValue(parsed.identity, options.codec.parseIdentity);
201
+ const lastActorId = readNullableTrimmedString(parsed.lastActorId);
202
+ return {
203
+ version: OFFLINE_AUTH_STATE_VERSION,
204
+ session,
205
+ identity,
206
+ lastActorId: lastActorId ?? null,
207
+ };
208
+ }
209
+ export async function saveOfflineAuthState(state, options) {
210
+ const storageKey = options.storageKey ?? DEFAULT_OFFLINE_AUTH_STORAGE_KEY;
211
+ const payload = JSON.stringify(state);
212
+ await options.storage.setItem(storageKey, payload);
213
+ }
214
+ export async function removeOfflineAuthState(options) {
215
+ const storageKey = options.storageKey ?? DEFAULT_OFFLINE_AUTH_STORAGE_KEY;
216
+ await options.storage.removeItem(storageKey);
217
+ }
218
+ export function getJwtExpiryMs(token) {
219
+ const payload = parseJwtPayload(token);
220
+ if (!payload)
221
+ return null;
222
+ const exp = readFiniteNumber(payload.exp);
223
+ if (exp === null)
224
+ return null;
225
+ return exp * 1000;
226
+ }
227
+ export function isExpiryElapsed(args) {
228
+ if (args.expiresAtMs === null)
229
+ return false;
230
+ if (args.expiresAtMs === undefined)
231
+ return true;
232
+ if (!Number.isFinite(args.expiresAtMs))
233
+ return true;
234
+ const nowMs = toNowMs(args.nowMs, undefined);
235
+ const skewMs = Math.max(0, args.skewMs ?? DEFAULT_EXPIRY_SKEW_MS);
236
+ return args.expiresAtMs <= nowMs + skewMs;
237
+ }
238
+ export function isCachedValueExpired(cachedValue, options) {
239
+ return isExpiryElapsed({
240
+ expiresAtMs: cachedValue.expiresAtMs,
241
+ nowMs: options?.nowMs,
242
+ skewMs: options?.skewMs,
243
+ });
244
+ }
245
+ export function createSessionCacheEntry(session, options) {
246
+ const nowMs = toNowMs(options?.nowMs, undefined);
247
+ const explicitExpiry = options?.getExpiresAtMs?.(session);
248
+ const jwtExpiry = options?.getJwt
249
+ ? getJwtExpiryMs(options.getJwt(session) ?? '')
250
+ : null;
251
+ const expiresAtMs = explicitExpiry ?? jwtExpiry;
252
+ if (expiresAtMs === null || expiresAtMs === undefined) {
253
+ if (!options?.allowMissingExpiry) {
254
+ return null;
255
+ }
256
+ return {
257
+ value: session,
258
+ savedAtMs: nowMs,
259
+ expiresAtMs: null,
260
+ };
261
+ }
262
+ const skewMs = Math.max(0, options?.skewMs ?? DEFAULT_EXPIRY_SKEW_MS);
263
+ if (expiresAtMs <= nowMs + skewMs) {
264
+ return null;
265
+ }
266
+ return {
267
+ value: session,
268
+ savedAtMs: nowMs,
269
+ expiresAtMs,
270
+ };
271
+ }
272
+ export function createIdentityCacheEntry(identity, options) {
273
+ const nowMs = toNowMs(options?.nowMs, undefined);
274
+ const expiresAtMs = options?.getExpiresAtMs?.(identity) ?? null;
275
+ return {
276
+ value: identity,
277
+ savedAtMs: nowMs,
278
+ expiresAtMs,
279
+ };
280
+ }
281
+ export function persistOnlineSession(options) {
282
+ if (!options.session) {
283
+ return clearOfflineAuthState(options.state);
284
+ }
285
+ const sessionEntry = createSessionCacheEntry(options.session, {
286
+ nowMs: options.nowMs,
287
+ skewMs: options.skewMs,
288
+ allowMissingExpiry: options.allowMissingExpiry,
289
+ getExpiresAtMs: options.getExpiresAtMs,
290
+ getJwt: options.getJwt,
291
+ });
292
+ const actorId = readTrimmedString(options.getSessionActorId(options.session));
293
+ let nextIdentity = options.state.identity;
294
+ if (options.deriveIdentity) {
295
+ const derivedIdentity = options.deriveIdentity(options.session);
296
+ if (derivedIdentity) {
297
+ nextIdentity = createIdentityCacheEntry(derivedIdentity, {
298
+ nowMs: options.nowMs,
299
+ getExpiresAtMs: options.getIdentityExpiresAtMs,
300
+ });
301
+ }
302
+ else {
303
+ nextIdentity = null;
304
+ }
305
+ }
306
+ return {
307
+ ...options.state,
308
+ session: sessionEntry,
309
+ identity: nextIdentity,
310
+ lastActorId: actorId ?? options.state.lastActorId,
311
+ };
312
+ }
313
+ export function persistOfflineIdentity(options) {
314
+ if (!options.identity) {
315
+ return {
316
+ ...options.state,
317
+ identity: null,
318
+ };
319
+ }
320
+ const identityEntry = createIdentityCacheEntry(options.identity, {
321
+ nowMs: options.nowMs,
322
+ getExpiresAtMs: options.getExpiresAtMs,
323
+ });
324
+ const actorId = readTrimmedString(options.identity.actorId);
325
+ return {
326
+ ...options.state,
327
+ identity: identityEntry,
328
+ lastActorId: actorId ?? options.state.lastActorId,
329
+ };
330
+ }
331
+ export function setOfflineAuthLastActorId(state, actorId) {
332
+ return {
333
+ ...state,
334
+ lastActorId: readTrimmedString(actorId) ?? null,
335
+ };
336
+ }
337
+ export function clearOfflineAuthState(state, options) {
338
+ return {
339
+ version: OFFLINE_AUTH_STATE_VERSION,
340
+ session: null,
341
+ identity: null,
342
+ lastActorId: options?.preserveLastActorId ? state.lastActorId : null,
343
+ };
344
+ }
345
+ export function resolveOfflineAuthSubject(options) {
346
+ const nowMs = toNowMs(options.nowMs, undefined);
347
+ const skewMs = Math.max(0, options.skewMs ?? DEFAULT_EXPIRY_SKEW_MS);
348
+ const session = options.state.session &&
349
+ !isCachedValueExpired(options.state.session, { nowMs, skewMs })
350
+ ? options.state.session
351
+ : null;
352
+ if (session) {
353
+ const actorId = readTrimmedString(options.getSessionActorId(session.value));
354
+ if (actorId) {
355
+ const teamId = options.getSessionTeamId
356
+ ? readTrimmedString(options.getSessionTeamId(session.value))
357
+ : null;
358
+ return {
359
+ source: 'online-session',
360
+ actorId,
361
+ teamId,
362
+ isOffline: false,
363
+ session,
364
+ identity: null,
365
+ };
366
+ }
367
+ }
368
+ const identity = options.state.identity &&
369
+ !isCachedValueExpired(options.state.identity, { nowMs, skewMs })
370
+ ? options.state.identity
371
+ : null;
372
+ if (identity) {
373
+ const actorId = options.getIdentityActorId
374
+ ? readTrimmedString(options.getIdentityActorId(identity.value))
375
+ : readTrimmedString(identity.value.actorId);
376
+ if (actorId) {
377
+ const rawTeamId = options.getIdentityTeamId
378
+ ? options.getIdentityTeamId(identity.value)
379
+ : identity.value.teamId;
380
+ const teamId = rawTeamId === null || rawTeamId === undefined
381
+ ? null
382
+ : readTrimmedString(rawTeamId);
383
+ return {
384
+ source: 'offline-identity',
385
+ actorId,
386
+ teamId,
387
+ isOffline: true,
388
+ session: null,
389
+ identity,
390
+ };
391
+ }
392
+ }
393
+ const lastActorId = readTrimmedString(options.state.lastActorId);
394
+ if (lastActorId) {
395
+ return {
396
+ source: 'last-actor',
397
+ actorId: lastActorId,
398
+ teamId: null,
399
+ isOffline: true,
400
+ session: null,
401
+ identity: null,
402
+ };
403
+ }
404
+ return {
405
+ source: 'none',
406
+ actorId: null,
407
+ teamId: null,
408
+ isOffline: true,
409
+ session: null,
410
+ identity: null,
411
+ };
412
+ }
413
+ export function createBearerAuthHeaders(token) {
414
+ const resolved = readTrimmedString(token);
415
+ if (!resolved)
416
+ return {};
417
+ return {
418
+ Authorization: `Bearer ${resolved}`,
419
+ };
420
+ }
421
+ export function createTokenLifecycleBridge(options) {
422
+ let latestToken = null;
423
+ let latestRefreshTokens = null;
424
+ let refreshInFlight = null;
425
+ const resolveToken = async () => {
426
+ const token = readTrimmedString(await options.resolveToken());
427
+ latestToken = token;
428
+ return token;
429
+ };
430
+ const runRefresh = async (context) => {
431
+ const previousToken = latestToken;
432
+ const refreshTokenResolver = options.refreshToken ?? options.resolveToken;
433
+ const nextToken = readTrimmedString(await refreshTokenResolver(context));
434
+ latestToken = nextToken;
435
+ latestRefreshTokens = {
436
+ previousToken,
437
+ nextToken,
438
+ };
439
+ return Boolean(nextToken) && nextToken !== previousToken;
440
+ };
441
+ const authLifecycle = {
442
+ onAuthExpired: options.onAuthExpired,
443
+ refreshToken: async (context) => {
444
+ if (!refreshInFlight) {
445
+ refreshInFlight = runRefresh(context).finally(() => {
446
+ refreshInFlight = null;
447
+ });
448
+ }
449
+ return refreshInFlight;
450
+ },
451
+ retryWithFreshToken: async (context) => {
452
+ const previousToken = latestRefreshTokens?.previousToken ?? latestToken;
453
+ const nextToken = latestRefreshTokens?.nextToken ?? latestToken;
454
+ if (options.retryWithFreshToken) {
455
+ return options.retryWithFreshToken({
456
+ ...context,
457
+ previousToken,
458
+ nextToken,
459
+ });
460
+ }
461
+ return context.refreshResult;
462
+ },
463
+ };
464
+ return {
465
+ resolveToken,
466
+ getAuthorizationHeaders: async () => {
467
+ const token = await resolveToken();
468
+ return createBearerAuthHeaders(token);
469
+ },
470
+ getRealtimeParams: async (paramName = 'token') => {
471
+ const token = await resolveToken();
472
+ if (!token)
473
+ return {};
474
+ return {
475
+ [paramName]: token,
476
+ };
477
+ },
478
+ authLifecycle,
479
+ };
480
+ }
481
+ export function createOfflineLockState(options) {
482
+ const policy = normalizeLockPolicy(options);
483
+ const nowMs = policy.now();
484
+ return {
485
+ isLocked: options?.initiallyLocked ?? false,
486
+ failedAttempts: 0,
487
+ blockedUntilMs: null,
488
+ lastActivityAtMs: nowMs,
489
+ };
490
+ }
491
+ export function isOfflineLockBlocked(state, nowMs = Date.now()) {
492
+ return state.blockedUntilMs !== null && state.blockedUntilMs > nowMs;
493
+ }
494
+ export function applyOfflineLockEvent(state, event, options) {
495
+ const policy = normalizeLockPolicy(options);
496
+ const nowMs = toNowMs(event.nowMs, policy.now);
497
+ const normalized = normalizeLockStateForTime(state, nowMs);
498
+ if (event.type === 'lock') {
499
+ return {
500
+ ...normalized,
501
+ isLocked: true,
502
+ lastActivityAtMs: nowMs,
503
+ };
504
+ }
505
+ if (event.type === 'unlock') {
506
+ if (isOfflineLockBlocked(normalized, nowMs)) {
507
+ return {
508
+ ...normalized,
509
+ isLocked: true,
510
+ lastActivityAtMs: nowMs,
511
+ };
512
+ }
513
+ return {
514
+ ...normalized,
515
+ isLocked: false,
516
+ failedAttempts: 0,
517
+ blockedUntilMs: null,
518
+ lastActivityAtMs: nowMs,
519
+ };
520
+ }
521
+ if (event.type === 'activity') {
522
+ return {
523
+ ...normalized,
524
+ lastActivityAtMs: nowMs,
525
+ };
526
+ }
527
+ if (event.type === 'reset-failures') {
528
+ return {
529
+ ...normalized,
530
+ failedAttempts: 0,
531
+ blockedUntilMs: null,
532
+ lastActivityAtMs: nowMs,
533
+ };
534
+ }
535
+ if (event.type === 'failed-unlock') {
536
+ if (isOfflineLockBlocked(normalized, nowMs)) {
537
+ return {
538
+ ...normalized,
539
+ isLocked: true,
540
+ lastActivityAtMs: nowMs,
541
+ };
542
+ }
543
+ const failedAttempts = normalized.failedAttempts + 1;
544
+ if (failedAttempts >= policy.maxFailedAttempts) {
545
+ const blockedUntilMs = nowMs + policy.cooldownMs;
546
+ return {
547
+ ...normalized,
548
+ isLocked: true,
549
+ failedAttempts,
550
+ blockedUntilMs,
551
+ lastActivityAtMs: nowMs,
552
+ };
553
+ }
554
+ return {
555
+ ...normalized,
556
+ isLocked: true,
557
+ failedAttempts,
558
+ blockedUntilMs: null,
559
+ lastActivityAtMs: nowMs,
560
+ };
561
+ }
562
+ if (policy.idleTimeoutMs > 0 &&
563
+ !normalized.isLocked &&
564
+ nowMs - normalized.lastActivityAtMs >= policy.idleTimeoutMs) {
565
+ return {
566
+ ...normalized,
567
+ isLocked: true,
568
+ lastActivityAtMs: nowMs,
569
+ };
570
+ }
571
+ return normalized;
572
+ }
573
+ export function attemptOfflineUnlock(args) {
574
+ const policy = normalizeLockPolicy(args.options);
575
+ const nowMs = toNowMs(args.nowMs, policy.now);
576
+ const normalized = normalizeLockStateForTime(args.state, nowMs);
577
+ if (isOfflineLockBlocked(normalized, nowMs)) {
578
+ return {
579
+ ok: false,
580
+ reason: 'blocked',
581
+ state: {
582
+ ...normalized,
583
+ isLocked: true,
584
+ },
585
+ };
586
+ }
587
+ if (args.verify()) {
588
+ const state = applyOfflineLockEvent(normalized, { type: 'unlock', nowMs }, policy);
589
+ return {
590
+ ok: true,
591
+ reason: null,
592
+ state,
593
+ };
594
+ }
595
+ const state = applyOfflineLockEvent(normalized, { type: 'failed-unlock', nowMs }, policy);
596
+ return {
597
+ ok: false,
598
+ reason: isOfflineLockBlocked(state, nowMs) ? 'blocked' : 'rejected',
599
+ state,
600
+ };
601
+ }
602
+ export async function attemptOfflineUnlockAsync(args) {
603
+ const policy = normalizeLockPolicy(args.options);
604
+ const nowMs = toNowMs(args.nowMs, policy.now);
605
+ const normalized = normalizeLockStateForTime(args.state, nowMs);
606
+ if (isOfflineLockBlocked(normalized, nowMs)) {
607
+ return {
608
+ ok: false,
609
+ reason: 'blocked',
610
+ state: {
611
+ ...normalized,
612
+ isLocked: true,
613
+ },
614
+ };
615
+ }
616
+ if (await args.verify()) {
617
+ const state = applyOfflineLockEvent(normalized, { type: 'unlock', nowMs }, policy);
618
+ return {
619
+ ok: true,
620
+ reason: null,
621
+ state,
622
+ };
623
+ }
624
+ const state = applyOfflineLockEvent(normalized, { type: 'failed-unlock', nowMs }, policy);
625
+ return {
626
+ ok: false,
627
+ reason: isOfflineLockBlocked(state, nowMs) ? 'blocked' : 'rejected',
628
+ state,
629
+ };
630
+ }
631
+ export function createOfflineLockController(options) {
632
+ const policy = normalizeLockPolicy(options);
633
+ let state = createOfflineLockState(policy);
634
+ const dispatch = (event) => {
635
+ state = applyOfflineLockEvent(state, event, policy);
636
+ return state;
637
+ };
638
+ return {
639
+ getState() {
640
+ return state;
641
+ },
642
+ replaceState(nextState) {
643
+ state = nextState;
644
+ return state;
645
+ },
646
+ dispatch,
647
+ lock() {
648
+ return dispatch({ type: 'lock' });
649
+ },
650
+ forceUnlock() {
651
+ const nextState = dispatch({ type: 'unlock' });
652
+ if (nextState.isLocked) {
653
+ return {
654
+ ok: false,
655
+ reason: 'blocked',
656
+ state: nextState,
657
+ };
658
+ }
659
+ return {
660
+ ok: true,
661
+ reason: null,
662
+ state: nextState,
663
+ };
664
+ },
665
+ recordActivity() {
666
+ return dispatch({ type: 'activity' });
667
+ },
668
+ recordFailedUnlock() {
669
+ return dispatch({ type: 'failed-unlock' });
670
+ },
671
+ resetFailures() {
672
+ return dispatch({ type: 'reset-failures' });
673
+ },
674
+ evaluateIdleTimeout() {
675
+ return dispatch({ type: 'tick' });
676
+ },
677
+ attemptUnlock(verify) {
678
+ const result = attemptOfflineUnlock({
679
+ state,
680
+ verify,
681
+ options: policy,
682
+ });
683
+ state = result.state;
684
+ return result;
685
+ },
686
+ async attemptUnlockAsync(verify) {
687
+ const result = await attemptOfflineUnlockAsync({
688
+ state,
689
+ verify,
690
+ options: policy,
691
+ });
692
+ state = result.state;
693
+ return result;
694
+ },
695
+ };
696
+ }
697
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syncular/client-plugin-offline-auth",
3
- "version": "0.0.0",
3
+ "version": "0.0.6-171",
4
4
  "description": "Provider-agnostic offline auth primitives for Syncular clients (JS runtimes)",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Benjamin Kniffler",
@@ -45,7 +45,7 @@
45
45
  "release": "bunx syncular-publish"
46
46
  },
47
47
  "dependencies": {
48
- "@syncular/core": "0.0.0"
48
+ "@syncular/core": "0.0.6-171"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@syncular/config": "0.0.0"