@bazariodev/docket 0.0.0-stage → 0.0.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.
Files changed (88) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/LICENSE +21 -0
  3. package/README.md +443 -2
  4. package/dist/browser/constants.d.cts +14 -0
  5. package/dist/browser/constants.d.ts +14 -0
  6. package/dist/browser/index.cjs +192 -0
  7. package/dist/browser/index.cjs.map +1 -0
  8. package/dist/browser/index.d.cts +29 -0
  9. package/dist/browser/index.d.ts +29 -0
  10. package/dist/browser/index.js +187 -0
  11. package/dist/browser/index.js.map +1 -0
  12. package/dist/chunk-7ld72rnl.js +376 -0
  13. package/dist/chunk-7ld72rnl.js.map +1 -0
  14. package/dist/chunk-B-SP8Od_.js +437 -0
  15. package/dist/chunk-B-SP8Od_.js.map +1 -0
  16. package/dist/chunk-BLf-eCDO.cjs +53 -0
  17. package/dist/chunk-BLf-eCDO.cjs.map +1 -0
  18. package/dist/chunk-Bvq4tF_F.cjs +440 -0
  19. package/dist/chunk-Bvq4tF_F.cjs.map +1 -0
  20. package/dist/chunk-CEhpwtwJ.cjs +379 -0
  21. package/dist/chunk-CEhpwtwJ.cjs.map +1 -0
  22. package/dist/chunk-CSS3f4_M.js +46 -0
  23. package/dist/chunk-CSS3f4_M.js.map +1 -0
  24. package/dist/chunk-CXZYNALm.cjs +124 -0
  25. package/dist/chunk-CXZYNALm.cjs.map +1 -0
  26. package/dist/chunk-DYcNnkOV.js +50 -0
  27. package/dist/chunk-DYcNnkOV.js.map +1 -0
  28. package/dist/chunk-DqK_3eFr.cjs +53 -0
  29. package/dist/chunk-DqK_3eFr.cjs.map +1 -0
  30. package/dist/chunk-LRCHwVuE.js +110 -0
  31. package/dist/chunk-LRCHwVuE.js.map +1 -0
  32. package/dist/constants.d.cts +6 -0
  33. package/dist/constants.d.ts +6 -0
  34. package/dist/core/constants.d.cts +43 -0
  35. package/dist/core/constants.d.ts +43 -0
  36. package/dist/core/errors.d.cts +8 -0
  37. package/dist/core/errors.d.ts +8 -0
  38. package/dist/devtools/index.cjs +37 -0
  39. package/dist/devtools/index.cjs.map +1 -0
  40. package/dist/devtools/index.d.cts +11 -0
  41. package/dist/devtools/index.d.ts +11 -0
  42. package/dist/devtools/index.js +35 -0
  43. package/dist/devtools/index.js.map +1 -0
  44. package/dist/export/index.cjs +111 -0
  45. package/dist/export/index.cjs.map +1 -0
  46. package/dist/export/index.d.cts +49 -0
  47. package/dist/export/index.d.ts +49 -0
  48. package/dist/export/index.js +109 -0
  49. package/dist/export/index.js.map +1 -0
  50. package/dist/history/constants.d.cts +35 -0
  51. package/dist/history/constants.d.ts +35 -0
  52. package/dist/history/index.cjs +1196 -0
  53. package/dist/history/index.cjs.map +1 -0
  54. package/dist/history/index.d.cts +113 -0
  55. package/dist/history/index.d.ts +113 -0
  56. package/dist/history/index.js +1194 -0
  57. package/dist/history/index.js.map +1 -0
  58. package/dist/index.cjs +14 -0
  59. package/dist/index.cjs.map +1 -0
  60. package/dist/index.d.cts +158 -0
  61. package/dist/index.d.ts +158 -0
  62. package/dist/index.js +6 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/indexeddb/index.cjs +15 -0
  65. package/dist/indexeddb/index.cjs.map +1 -0
  66. package/dist/indexeddb/index.d.cts +46 -0
  67. package/dist/indexeddb/index.d.ts +46 -0
  68. package/dist/indexeddb/index.js +13 -0
  69. package/dist/indexeddb/index.js.map +1 -0
  70. package/dist/redaction/index.cjs +154 -0
  71. package/dist/redaction/index.cjs.map +1 -0
  72. package/dist/redaction/index.d.cts +70 -0
  73. package/dist/redaction/index.d.ts +70 -0
  74. package/dist/redaction/index.js +152 -0
  75. package/dist/redaction/index.js.map +1 -0
  76. package/dist/sip/constants.d.cts +5 -0
  77. package/dist/sip/constants.d.ts +5 -0
  78. package/dist/sip/index.cjs +336 -0
  79. package/dist/sip/index.cjs.map +1 -0
  80. package/dist/sip/index.d.cts +34 -0
  81. package/dist/sip/index.d.ts +34 -0
  82. package/dist/sip/index.js +333 -0
  83. package/dist/sip/index.js.map +1 -0
  84. package/dist/storage/constants.d.cts +11 -0
  85. package/dist/storage/constants.d.ts +11 -0
  86. package/dist/storage/contracts.d.cts +35 -0
  87. package/dist/storage/contracts.d.ts +35 -0
  88. package/package.json +127 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/storage/constants.js","../../src/history/constants.js","../../src/history/metadata.js","../../src/history/options.js","../../src/history/session.js","../../src/history/index.js"],"sourcesContent":["export const STORE_MODES = Object.freeze({\n OPENING: 'opening',\n MEMORY: 'memory',\n PERSISTENT: 'persistent',\n FALLBACK: 'fallback',\n STOPPED: 'stopped',\n});\n\nexport const OVERFLOW_STRATEGIES = Object.freeze({\n CYCLE: 'cycle',\n ROTATE: 'rotate',\n});\n","export const HISTORY_MODES = /* @__PURE__ */ Object.freeze({\n OFF: 'off',\n MEMORY: 'memory',\n PERSISTENT: 'persistent',\n});\nexport const HISTORY_STATES = /* @__PURE__ */ Object.freeze({\n IDLE: 'idle',\n ACTIVE: 'active',\n TRANSITIONING: 'transitioning',\n BLOCKED: 'blocked',\n STALE: 'stale',\n STOPPED: 'stopped',\n});\nexport const HISTORY_ERROR_CODES = /* @__PURE__ */ Object.freeze({\n METADATA: 'metadata',\n CLEANUP: 'cleanup',\n STALE: 'stale',\n SETUP: 'setup',\n MIGRATION: 'migration',\n STOPPED: 'stopped',\n ROTATION: 'rotation',\n});\nexport const HISTORY_ERRORS = /* @__PURE__ */ Object.freeze({\n [HISTORY_ERROR_CODES.METADATA]: 'Log history metadata failed',\n [HISTORY_ERROR_CODES.CLEANUP]: 'Log history cleanup failed',\n [HISTORY_ERROR_CODES.STALE]: 'Log history stale failed',\n [HISTORY_ERROR_CODES.SETUP]: 'Log history setup failed',\n [HISTORY_ERROR_CODES.MIGRATION]: 'Log history migration failed',\n [HISTORY_ERROR_CODES.STOPPED]: 'Log history stopped failed',\n [HISTORY_ERROR_CODES.ROTATION]: 'Log history rotation failed',\n});\nexport const HISTORY_LIMITS = /* @__PURE__ */ Object.freeze({\n STARTUP_DEFAULT_MAX_SIZE_PER_AREA: 250_000,\n STARTUP_MAX_TOTAL_SIZE: 1_000_000,\n});\n","import { randomHex } from '../core/common.js';\nimport {\n HISTORY_ERROR_CODES,\n HISTORY_ERRORS,\n HISTORY_MODES,\n} from './constants.js';\n\nexport function historyError(code, cause) {\n return Object.assign(\n new Error(\n HISTORY_ERRORS[code] ?? `Log history ${code} failed`,\n cause === undefined ? undefined : { cause },\n ),\n { code },\n );\n}\n\nexport function readMetadata(storage, key, leaseKey) {\n const text = storage.getItem(key);\n if (!text) return null;\n let value;\n try {\n value = JSON.parse(text);\n } catch {\n return null;\n }\n if (\n !value ||\n value.version !== 1 ||\n !Number.isSafeInteger(value.revision) ||\n value.revision < 1 ||\n !Object.values(HISTORY_MODES).includes(value.mode) ||\n typeof value.cleanupPending !== 'boolean'\n )\n return null;\n if (value.leaseKey !== leaseKey)\n throw historyError(HISTORY_ERROR_CODES.METADATA);\n if (\n !value.loggedOut &&\n !value.ownerless &&\n (!/^[a-f0-9]{32}$/.test(value.salt) ||\n !/^[a-f0-9]{64}$/.test(value.ownerDigest))\n )\n return null;\n if (\n (value.mode !== HISTORY_MODES.PERSISTENT || value.cleanupPending) &&\n Object.hasOwn(value, 'key')\n ) {\n delete value.key;\n storage.setItem(key, JSON.stringify(value));\n }\n if (value.key && !/^[a-f0-9]{64}$/.test(value.key)) return null;\n return value;\n}\n\nexport async function digestOwner(ownerId, salt = randomHex(16)) {\n if (!globalThis.crypto?.subtle) throw historyError(HISTORY_ERROR_CODES.SETUP);\n const input = new TextEncoder().encode(\n JSON.stringify(['bazario-log-owner-v1', salt, ownerId]),\n );\n const digest = await crypto.subtle.digest('SHA-256', input);\n return {\n salt,\n ownerDigest: Array.from(new Uint8Array(digest), (byte) =>\n byte.toString(16).padStart(2, '0'),\n ).join(''),\n };\n}\n","import { assertLevel, assertStormLimit, positive } from '../core/common.js';\nimport { HISTORY_ERROR_CODES, HISTORY_MODES } from './constants.js';\nimport { historyError } from './metadata.js';\n\nconst STORE_OPTION_NAMES = Object.freeze([\n 'flushIntervalMs',\n 'maxBatchSize',\n 'maxQueuedRecords',\n 'maxQueuedSize',\n]);\n\nfunction validateStoreOptions(options, stores, lease) {\n stores.validateStoreOptions(options);\n if (lease.signal.aborted) throw historyError(HISTORY_ERROR_CODES.STOPPED);\n}\n\nexport function validateHistoryOptions(options) {\n const { lease } = options ?? {};\n if (\n !lease?.key ||\n !lease.signal ||\n lease.signal.aborted ||\n typeof lease.signal.addEventListener !== 'function'\n )\n throw new TypeError('An active application lease is required');\n if (\n !Array.isArray(options.logging?.areas) ||\n typeof options.createRedactor !== 'function'\n )\n throw new TypeError('Logging areas and createRedactor are required');\n if (Object.hasOwn(options.logging, 'createRunId'))\n throw new TypeError('Managed history controls its run IDs');\n if (Object.hasOwn(options.logging, 'isActive'))\n throw new TypeError('Managed history controls admission');\n assertStormLimit(options.logging.stormLimit);\n if (Object.hasOwn(options.persistent ?? {}, 'allowUnprotected'))\n throw new TypeError('Managed history requires protected database access');\n const areas = new Set();\n for (const area of options.logging.areas) {\n if (typeof area.id !== 'string' || !area.id || areas.has(area.id))\n throw new TypeError('Invalid history area');\n assertLevel(area.level ?? 'info');\n areas.add(area.id);\n }\n for (const nested of [options.memory, options.startup, options.persistent])\n if (\n nested &&\n (Object.hasOwn(nested, 'overflowStrategy') ||\n Object.hasOwn(nested, 'onRotate'))\n )\n throw new TypeError('Rotation options belong to history');\n validateStoreOptions(options, options.stores, lease);\n for (const nested of [\n options.memory,\n options.startup || {},\n options.persistent,\n options.persistent?.fallback,\n ])\n validateStoreOptions(nested, options.stores, lease);\n for (const name of STORE_OPTION_NAMES)\n if (options.persistent?.[name] !== undefined)\n positive(options.persistent[name], name);\n if (options.logging.maxOverrideMs !== undefined)\n positive(options.logging.maxOverrideMs, 'maxOverrideMs');\n if (\n options.databaseName !== undefined &&\n (typeof options.databaseName !== 'string' || !options.databaseName)\n )\n throw new TypeError('Invalid history database name');\n const databaseName =\n options.databaseName ?? `bazario-logging:history:${lease.key}`;\n const metadataKey = `bazario-logging:metadata:${databaseName}`;\n const requestedMode = options.initialMode ?? HISTORY_MODES.MEMORY;\n if (!Object.values(HISTORY_MODES).includes(requestedMode))\n throw new TypeError('Invalid history mode');\n return { lease, areas, databaseName, metadataKey, requestedMode };\n}\n","import { LEVELS, LOGGING_LIMITS } from '../core/constants.js';\nimport { createLogging } from '../core/hub.js';\nimport { HISTORY_ERROR_CODES } from './constants.js';\nimport { historyError } from './metadata.js';\n\nexport function createHistorySession({\n options,\n store,\n key,\n isLive,\n canControl,\n levelStorage,\n startup,\n trackCleanup,\n}) {\n const state = {\n valid: true,\n paused: false,\n store,\n key,\n startup,\n hub: null,\n session: null,\n queries: new Set(),\n };\n const live = () => state.valid && !state.paused && isLive();\n const check = () => {\n if (!live()) throw historyError(HISTORY_ERROR_CODES.STALE);\n };\n const redactor = options.createRedactor(key);\n check();\n const guardedRedactor = {\n version: redactor.version,\n limits: redactor.limits,\n };\n for (const method of [\n 'redact',\n 'redactValue',\n 'redactText',\n 'mask',\n ...(redactor.hash ? ['hash'] : []),\n ])\n guardedRedactor[method] = (...args) => {\n check();\n const result = redactor[method](...args);\n check();\n return result;\n };\n const sinks = [];\n let hub;\n try {\n if (!startup)\n sinks.push(\n ...(options.createSinks?.(Object.freeze(guardedRedactor)) ?? []),\n );\n check();\n hub = createLogging({\n ...options.logging,\n redactor: guardedRedactor,\n sinks: [store, ...sinks],\n ...(levelStorage ? { levelStorage } : {}),\n isActive: live,\n });\n } catch (failure) {\n const cleanup = Promise.allSettled(\n sinks.map(async (sink) => sink.stop?.()),\n );\n trackCleanup(cleanup);\n throw failure;\n }\n state.hub = hub;\n const logging = {};\n for (const method of ['setLevel', 'resetLevel', 'getLevels', 'setContext'])\n logging[method] = (...args) => {\n check();\n if (['setLevel', 'resetLevel'].includes(method) && !canControl())\n throw historyError(HISTORY_ERROR_CODES.STALE);\n const result = hub[method](...args);\n check();\n return result;\n };\n const guardLogger = (logger) => {\n const result = {};\n for (const level of Object.values(LEVELS))\n result[level] = (message, data) => {\n if (live()) logger[level](message, data);\n };\n result.child = (binding) => guardLogger(logger.child(binding));\n return Object.freeze(result);\n };\n const roots = new Map();\n logging.runId = hub.runId;\n logging.getLogger = (area, scope) => {\n check();\n const key = JSON.stringify([area, scope]);\n const cached = roots.get(key);\n if (cached) return cached;\n const logger = guardLogger(hub.getLogger(area, scope));\n if (roots.size < LOGGING_LIMITS.ROOT_LOGGER_CACHE_PAIRS)\n roots.set(key, logger);\n return logger;\n };\n logging.flush = async () => {\n check();\n await hub.flush();\n check();\n };\n const source = Object.freeze({\n async query(query) {\n check();\n const pending = Promise.resolve().then(() => store.query(query));\n state.queries.add(pending);\n try {\n const records = await pending;\n check();\n return records;\n } finally {\n state.queries.delete(pending);\n }\n },\n\n getStatus() {\n check();\n return store.getStatus();\n },\n });\n state.session = Object.freeze({\n logging: Object.freeze(logging),\n source,\n redactor: Object.freeze(guardedRedactor),\n });\n return state;\n}\n","import { copyBindings, randomHex, report } from '../core/common.js';\nimport {\n LEVELS,\n LOGGING_ERROR_CODES,\n LOGGING_ERROR_SOURCES,\n LOGGING_LIMITS,\n} from '../core/constants.js';\nimport { loggingError } from '../core/errors.js';\nimport { OVERFLOW_STRATEGIES, STORE_MODES } from '../storage/constants.js';\nimport {\n HISTORY_ERROR_CODES,\n HISTORY_LIMITS,\n HISTORY_MODES,\n HISTORY_STATES,\n} from './constants.js';\nimport { digestOwner, historyError, readMetadata } from './metadata.js';\nimport { validateHistoryOptions } from './options.js';\nimport { createHistorySession } from './session.js';\n\nexport function createLogHistory(options) {\n if (\n !options?.stores ||\n typeof options.stores.createMemoryStore !== 'function' ||\n typeof options.stores.createIndexedDbStore !== 'function' ||\n typeof options.stores.validateStoreOptions !== 'function' ||\n typeof options.stores.copyRecords !== 'function'\n )\n throw new TypeError('History store providers are required');\n const {\n lease,\n areas,\n databaseName,\n metadataKey,\n requestedMode: initialMode,\n } = validateHistoryOptions(options);\n if (lease.signal.aborted) throw historyError(HISTORY_ERROR_CODES.STOPPED);\n const roots = new Map();\n const retired = new Set();\n const sessions = new Set();\n let storage;\n let metadata = null;\n let requestedMode = initialMode;\n let state = HISTORY_STATES.IDLE;\n let current = null;\n let startup = null;\n let ownerId;\n let stopped = false;\n let startupEpoch = 0;\n let controlQueue = Promise.resolve();\n let stopPromise;\n let rotationBusy = false;\n let setupFailure;\n let forwarding = false;\n let rootLoggerLimitReported = false;\n const status = () =>\n Object.freeze({\n state,\n requestedMode,\n activeMode: current\n ? current.store.getStatus().mode === STORE_MODES.PERSISTENT\n ? HISTORY_MODES.PERSISTENT\n : HISTORY_MODES.MEMORY\n : HISTORY_MODES.OFF,\n cleanupPending: metadata?.cleanupPending ?? false,\n });\n\n function notify() {\n report(options.onChange, current?.session ?? null, status());\n }\n\n function error(code, cause) {\n const failure = historyError(code, cause);\n report(options.onError, failure);\n return failure;\n }\n\n function check() {\n if (stopped || lease.signal.aborted)\n throw historyError(HISTORY_ERROR_CODES.STOPPED);\n }\n\n function retire(session, discard = false) {\n if (!session) return Promise.resolve();\n session.valid = false;\n if (current === session) current = null;\n if (startup === session) startup = null;\n if (session.cleanupPromise) return session.cleanupPromise;\n const cleanup = Promise.resolve().then(async () => {\n try {\n if (!discard)\n try {\n await session.store.flush();\n } catch (failure) {\n report(\n options.onError,\n historyError(HISTORY_ERROR_CODES.SETUP, failure),\n );\n }\n try {\n await session.store.stop({ discard });\n } catch (failure) {\n if (session.store.getStatus?.()?.mode !== STORE_MODES.STOPPED)\n throw failure;\n report(\n options.onError,\n historyError(HISTORY_ERROR_CODES.SETUP, failure),\n );\n }\n try {\n await session.hub?.stop();\n } catch (failure) {\n if (session.store.getStatus?.()?.mode !== STORE_MODES.STOPPED)\n throw failure;\n report(\n options.onError,\n historyError(HISTORY_ERROR_CODES.SETUP, failure),\n );\n }\n } finally {\n await Promise.allSettled(session.queries ?? []);\n }\n });\n retired.add(cleanup);\n session.cleanupPromise = cleanup;\n cleanup.then(\n () => {\n retired.delete(cleanup);\n sessions.delete(session);\n },\n () => {\n retired.delete(cleanup);\n session.cleanupPromise = null;\n },\n );\n return cleanup;\n }\n\n function ownStore(store) {\n const session = {\n valid: false,\n discardOnStop: true,\n store,\n hub: null,\n cleanupPromise: null,\n };\n sessions.add(session);\n return session;\n }\n\n async function drainInvalidSessions() {\n await Promise.all(\n Array.from(sessions)\n .filter((session) => !session.valid)\n .map((session) => retire(session, true)),\n );\n check();\n }\n\n function discardStartup() {\n startupEpoch++;\n if (startup) void retire(startup, true);\n }\n\n function block(code, cause) {\n if (stopped) return historyError(HISTORY_ERROR_CODES.STOPPED);\n setupFailure = code;\n state = HISTORY_STATES.BLOCKED;\n discardStartup();\n for (const session of sessions) void retire(session, true);\n notify();\n return error(code, cause);\n }\n\n function read() {\n try {\n storage ??= options.storage ?? globalThis.localStorage;\n if (!storage) throw historyError(HISTORY_ERROR_CODES.METADATA);\n metadata = readMetadata(storage, metadataKey, lease.key);\n requestedMode = metadata?.mode ?? requestedMode;\n return metadata;\n } catch {\n throw block(HISTORY_ERROR_CODES.METADATA);\n }\n }\n\n function save(value) {\n check();\n const next = { ...value };\n if (\n next.mode !== HISTORY_MODES.PERSISTENT ||\n next.cleanupPending ||\n next.loggedOut\n )\n delete next.key;\n try {\n storage.setItem(metadataKey, JSON.stringify(next));\n metadata = next;\n } catch {\n throw block(HISTORY_ERROR_CODES.METADATA);\n }\n }\n\n function privateLevels(owningSession) {\n return {\n key: 'levels',\n storage: {\n getItem: () => JSON.stringify(metadata?.levels ?? {}),\n setItem(_key, text) {\n if (\n stopped ||\n lease.signal.aborted ||\n state !== HISTORY_STATES.ACTIVE ||\n current !== owningSession() ||\n !owningSession()?.valid\n )\n return;\n save({ ...metadata, levels: JSON.parse(text) });\n },\n },\n };\n }\n\n function trackCleanup(cleanup) {\n retired.add(cleanup);\n cleanup.then(() => retired.delete(cleanup));\n }\n\n function makeSession(mode, key = randomHex(32), isStartup = false) {\n let session;\n const rotationOptions = {\n overflowStrategy: isStartup\n ? OVERFLOW_STRATEGIES.CYCLE\n : options.overflowStrategy,\n isRotationEnabled: () =>\n Boolean(\n session?.valid &&\n !session.paused &&\n current === session &&\n !rotationBusy &&\n state === HISTORY_STATES.ACTIVE,\n ),\n onRotate: options.onRotate\n ? async (source) => {\n if (\n !session?.valid ||\n stopped ||\n lease.signal.aborted ||\n rotationBusy\n )\n return;\n rotationBusy = true;\n const guardedSource = {\n async query(query) {\n if (!session.valid || stopped || lease.signal.aborted)\n throw historyError(HISTORY_ERROR_CODES.STALE);\n const result = await source.query(query);\n if (!session.valid || stopped || lease.signal.aborted)\n throw historyError(HISTORY_ERROR_CODES.STALE);\n return result;\n },\n\n getStatus() {\n if (!session.valid)\n throw historyError(HISTORY_ERROR_CODES.STALE);\n return source.getStatus();\n },\n };\n try {\n await options.onRotate(\n Object.freeze({\n source: Object.freeze(guardedSource),\n redactor: session.session.redactor,\n }),\n );\n } catch {\n report(\n options.onError,\n historyError(HISTORY_ERROR_CODES.ROTATION),\n );\n } finally {\n rotationBusy = false;\n }\n }\n : undefined,\n };\n let store;\n if (mode === HISTORY_MODES.PERSISTENT) {\n store = options.stores.createIndexedDbStore({\n ...options.persistent,\n ...rotationOptions,\n databaseName,\n indexedDB: options.indexedDB,\n allowUnprotected: false,\n onStatusChange: () => {\n if (session?.valid && current === session) notify();\n },\n });\n } else {\n store = options.stores.createMemoryStore({\n ...(isStartup\n ? {\n defaultMaxSizePerArea:\n HISTORY_LIMITS.STARTUP_DEFAULT_MAX_SIZE_PER_AREA,\n maxTotalSize: HISTORY_LIMITS.STARTUP_MAX_TOTAL_SIZE,\n ...options.startup,\n }\n : options.memory),\n ...rotationOptions,\n });\n }\n if (stopped || lease.signal.aborted) {\n void retire(ownStore(store), true).catch((failure) => {\n report(\n options.onError,\n historyError(HISTORY_ERROR_CODES.CLEANUP, failure),\n );\n });\n throw historyError(HISTORY_ERROR_CODES.STOPPED);\n }\n try {\n session = createHistorySession({\n options,\n store,\n key,\n startup: isStartup,\n isLive: () => !stopped && !lease.signal.aborted,\n canControl: () => isStartup || state === HISTORY_STATES.ACTIVE,\n levelStorage: isStartup ? undefined : privateLevels(() => session),\n trackCleanup,\n });\n sessions.add(session);\n return session;\n } catch (failure) {\n void retire(ownStore(store), true);\n throw block(HISTORY_ERROR_CODES.SETUP, failure);\n }\n }\n\n async function clearDisk() {\n await drainInvalidSessions();\n let cleanup;\n try {\n cleanup = ownStore(\n options.stores.createIndexedDbStore({\n ...options.persistent,\n databaseName,\n indexedDB: options.indexedDB,\n allowUnprotected: false,\n overflowStrategy: OVERFLOW_STRATEGIES.CYCLE,\n }),\n );\n check();\n await cleanup.store.clear();\n check();\n } finally {\n await retire(cleanup, true);\n }\n }\n\n async function copySession(source, destination) {\n await options.stores.copyRecords(source, {\n write(record) {\n check();\n destination.write(record);\n },\n async flush() {\n try {\n await destination.flush();\n } catch (failure) {\n if (destination.getStatus().mode !== STORE_MODES.FALLBACK)\n throw failure;\n }\n },\n });\n }\n\n async function clearAndSave(selectedOwner, mode) {\n await clearDisk();\n check();\n let key;\n try {\n if (selectedOwner && mode !== HISTORY_MODES.OFF) key = randomHex(32);\n } catch {\n throw block(HISTORY_ERROR_CODES.SETUP);\n }\n save({\n ...metadata,\n cleanupPending: false,\n ...(mode === HISTORY_MODES.PERSISTENT && key ? { key } : {}),\n });\n return key;\n }\n\n async function publish(mode, key, bufferToken, selectedOwner = ownerId) {\n check();\n if (mode === HISTORY_MODES.OFF) {\n ownerId = selectedOwner;\n state = selectedOwner ? HISTORY_STATES.ACTIVE : HISTORY_STATES.IDLE;\n notify();\n return status();\n }\n if (mode === HISTORY_MODES.PERSISTENT) await drainInvalidSessions();\n const candidate = makeSession(mode, key);\n try {\n if (startup) {\n const source = startup;\n source.paused = true;\n current = null;\n notify();\n try {\n await copySession(source.store, candidate.store);\n check();\n if (bufferToken !== startupEpoch || startup !== source)\n throw historyError(HISTORY_ERROR_CODES.STALE);\n } catch {\n await retire(candidate, true);\n if (!stopped && source.valid && bufferToken === startupEpoch) {\n source.paused = false;\n current = source;\n state = HISTORY_STATES.IDLE;\n notify();\n }\n throw error(HISTORY_ERROR_CODES.MIGRATION);\n }\n await retire(source, true);\n }\n check();\n if (bufferToken !== startupEpoch) {\n await retire(candidate, true);\n throw historyError(HISTORY_ERROR_CODES.STALE);\n }\n current = candidate;\n ownerId = selectedOwner;\n state = HISTORY_STATES.ACTIVE;\n setupFailure = undefined;\n notify();\n return status();\n } catch (failure) {\n if (candidate !== current) await retire(candidate, true);\n throw failure;\n }\n }\n\n async function destructive(\n selectedOwner,\n ownerFields,\n mode,\n {\n reset = true,\n keepStartup = false,\n logout = false,\n remainBlocked = false,\n } = {},\n ) {\n const previous = current;\n const savedLevels = reset ? {} : (metadata?.levels ?? {});\n state = HISTORY_STATES.TRANSITIONING;\n if (previous && previous !== startup) {\n previous.valid = false;\n current = null;\n }\n if (!keepStartup) discardStartup();\n const bufferToken = startupEpoch;\n notify();\n const pending = {\n version: 1,\n leaseKey: lease.key,\n revision: (metadata?.revision ?? 0) + 1,\n mode,\n cleanupPending: true,\n loggedOut: logout || (!selectedOwner && Boolean(metadata?.loggedOut)),\n ...(selectedOwner || (!logout && ownerFields?.salt) ? ownerFields : {}),\n ...(!selectedOwner && !logout && !ownerFields?.salt\n ? { ownerless: true }\n : {}),\n levels: savedLevels,\n };\n save(pending);\n requestedMode = mode;\n if (previous && previous !== startup)\n await retire(previous, true).catch((failure) => {\n throw block(HISTORY_ERROR_CODES.CLEANUP, failure);\n });\n check();\n let clean = false;\n let key;\n try {\n key = await clearAndSave(selectedOwner, mode);\n clean = true;\n } catch (failure) {\n check();\n if (\n failure.code === HISTORY_ERROR_CODES.METADATA ||\n failure.code === HISTORY_ERROR_CODES.SETUP\n )\n throw failure;\n error(HISTORY_ERROR_CODES.CLEANUP, failure);\n }\n check();\n if (remainBlocked) {\n ownerId = selectedOwner;\n state = HISTORY_STATES.BLOCKED;\n notify();\n return status();\n }\n if (!selectedOwner || mode === HISTORY_MODES.OFF) {\n ownerId = selectedOwner;\n state = selectedOwner ? HISTORY_STATES.ACTIVE : HISTORY_STATES.IDLE;\n notify();\n return status();\n }\n return publish(\n clean ? mode : HISTORY_MODES.MEMORY,\n key,\n bufferToken,\n selectedOwner,\n );\n }\n\n async function resume(id) {\n const bufferToken = startupEpoch;\n if (state === HISTORY_STATES.ACTIVE && ownerId && ownerId !== id)\n throw error(HISTORY_ERROR_CODES.STALE);\n if (ownerId === id && state === HISTORY_STATES.ACTIVE) {\n if (metadata.cleanupPending) return retryCleanup();\n return status();\n }\n const saved = read();\n let fields;\n try {\n fields = await digestOwner(id, saved?.salt);\n } catch {\n throw block(HISTORY_ERROR_CODES.SETUP);\n }\n check();\n if (bufferToken !== startupEpoch)\n throw historyError(HISTORY_ERROR_CODES.STALE);\n if (\n saved &&\n (saved.loggedOut ||\n (!saved.ownerless && saved.ownerDigest !== fields.ownerDigest))\n ) {\n if (!ownerId) state = HISTORY_STATES.STALE;\n notify();\n throw error(HISTORY_ERROR_CODES.STALE);\n }\n if (\n !saved ||\n saved.ownerless ||\n saved.cleanupPending ||\n saved.mode !== HISTORY_MODES.PERSISTENT ||\n !saved.key\n )\n return destructive(id, fields, requestedMode, {\n reset: false,\n keepStartup: true,\n });\n return publish(requestedMode, saved.key, startupEpoch, id);\n }\n\n async function setOwner(id) {\n if (ownerId === id && state === HISTORY_STATES.ACTIVE) return status();\n if (state === HISTORY_STATES.BLOCKED) read();\n const bufferToken = startupEpoch;\n let fields;\n try {\n fields = await digestOwner(id);\n } catch {\n throw block(HISTORY_ERROR_CODES.SETUP);\n }\n check();\n if (bufferToken !== startupEpoch)\n throw historyError(HISTORY_ERROR_CODES.STALE);\n return destructive(id, fields, requestedMode, {\n keepStartup: Boolean(startup) && (!ownerId || ownerId === id),\n });\n }\n\n async function retryCleanup() {\n if (!metadata?.cleanupPending) return status();\n const previousState = state;\n state = HISTORY_STATES.TRANSITIONING;\n notify();\n let key;\n try {\n key = await clearAndSave(ownerId, requestedMode);\n } catch (failure) {\n check();\n if (\n failure.code === HISTORY_ERROR_CODES.METADATA ||\n failure.code === HISTORY_ERROR_CODES.SETUP\n )\n throw failure;\n state = previousState;\n notify();\n error(HISTORY_ERROR_CODES.CLEANUP, failure);\n return status();\n }\n check();\n const previous = current;\n if (previous && previous !== startup) await retire(previous, true);\n check();\n if (!ownerId || previousState === HISTORY_STATES.BLOCKED) {\n state =\n previousState === HISTORY_STATES.BLOCKED\n ? HISTORY_STATES.BLOCKED\n : HISTORY_STATES.IDLE;\n notify();\n return status();\n }\n return publish(requestedMode, key, startupEpoch, ownerId);\n }\n\n async function setMode(mode) {\n if (state === HISTORY_STATES.BLOCKED)\n throw historyError(setupFailure ?? HISTORY_ERROR_CODES.METADATA);\n if (state === HISTORY_STATES.STALE)\n throw historyError(HISTORY_ERROR_CODES.STALE);\n if (mode === requestedMode) return status();\n if (!ownerId) {\n if (mode === HISTORY_MODES.OFF)\n return destructive(\n undefined,\n { salt: metadata?.salt, ownerDigest: metadata?.ownerDigest },\n mode,\n );\n requestedMode = mode;\n save({\n ...(metadata ?? {\n version: 1,\n leaseKey: lease.key,\n revision: 1,\n ownerless: true,\n loggedOut: false,\n cleanupPending: false,\n levels: {},\n }),\n mode,\n });\n notify();\n return status();\n }\n if (\n requestedMode === HISTORY_MODES.MEMORY &&\n mode === HISTORY_MODES.PERSISTENT &&\n !metadata.cleanupPending &&\n current\n ) {\n const previous = current;\n state = HISTORY_STATES.TRANSITIONING;\n notify();\n let candidate;\n let detach;\n try {\n await clearDisk();\n check();\n candidate = makeSession(mode, previous.key);\n detach = previous.hub.addSink(candidate.store);\n await copySession(previous.store, candidate.store);\n check();\n save({ ...metadata, mode, key: previous.key });\n requestedMode = mode;\n detach();\n previous.valid = false;\n current = candidate;\n } catch (failure) {\n detach?.();\n if (candidate)\n await retire(candidate, true).catch(() =>\n error(HISTORY_ERROR_CODES.SETUP),\n );\n if (!stopped && state !== HISTORY_STATES.BLOCKED) {\n current = previous;\n state = HISTORY_STATES.ACTIVE;\n notify();\n }\n throw failure.code === 'metadata' ||\n failure.code === HISTORY_ERROR_CODES.SETUP ||\n stopped ||\n state === HISTORY_STATES.BLOCKED\n ? failure\n : error(HISTORY_ERROR_CODES.MIGRATION);\n }\n await retire(previous, true).catch(() =>\n error(HISTORY_ERROR_CODES.CLEANUP),\n );\n check();\n state = HISTORY_STATES.ACTIVE;\n notify();\n return status();\n }\n return destructive(\n ownerId,\n { salt: metadata.salt, ownerDigest: metadata.ownerDigest },\n mode,\n { reset: mode === HISTORY_MODES.OFF },\n );\n }\n const enqueue = (action, argument, validate) => {\n if (validate && !validate(argument))\n return Promise.reject(new TypeError('Invalid history control argument'));\n if (stopped)\n return Promise.reject(historyError(HISTORY_ERROR_CODES.STOPPED));\n const operation = controlQueue.then(async () => {\n check();\n if (state === HISTORY_STATES.BLOCKED && action !== setMode)\n try {\n await drainInvalidSessions();\n } catch (failure) {\n check();\n throw error(HISTORY_ERROR_CODES.CLEANUP, failure);\n }\n return action(argument);\n });\n controlQueue = operation.catch(() => {});\n return operation;\n };\n\n function forward(area, scope, binding, invalid) {\n const logger = {};\n for (const level of Object.values(LEVELS))\n logger[level] = (message, data) => {\n const selected = current;\n if (\n forwarding ||\n !selected?.valid ||\n selected.paused ||\n stopped ||\n lease.signal.aborted\n )\n return;\n forwarding = true;\n try {\n if (invalid) throw invalid.error;\n let target = selected.session.logging.getLogger(area, scope);\n if (binding) target = target.child(binding);\n target[level](message, data);\n } catch (failure) {\n report(options.logging.onError, failure, LOGGING_ERROR_SOURCES.DATA);\n } finally {\n forwarding = false;\n }\n };\n logger.child = (child = {}) => {\n if (invalid) return forward(area, scope, binding, invalid);\n try {\n const {\n scope: childScope = binding ? binding.scope : scope,\n context = {},\n } = child;\n return forward(area, scope, {\n scope: childScope,\n context: { ...binding?.context, ...copyBindings(context) },\n });\n } catch (failure) {\n return forward(area, scope, binding, { error: failure });\n }\n };\n return Object.freeze(logger);\n }\n\n function stop() {\n if (stopPromise) return stopPromise;\n stopped = true;\n state = HISTORY_STATES.STOPPED;\n lease.signal.removeEventListener('abort', abort);\n current = null;\n const unexpected =\n lease.signal.aborted &&\n !['release', 'pagehide', 'stop'].includes(lease.signal.reason);\n discardStartup();\n for (const session of sessions)\n void retire(\n session,\n unexpected || session.startup || session.discardOnStop,\n );\n stopPromise = Promise.resolve()\n .then(async () => {\n await controlQueue;\n const cleanups = Array.from(sessions, (session) =>\n retire(\n session,\n unexpected || session.startup || session.discardOnStop,\n ),\n );\n await Promise.all([...retired, ...cleanups]);\n })\n .catch((failure) => {\n stopPromise = undefined;\n throw failure;\n });\n notify();\n return stopPromise;\n }\n\n function abort() {\n void stop().catch((failure) => error(HISTORY_ERROR_CODES.SETUP, failure));\n }\n lease.signal.addEventListener('abort', abort, { once: true });\n try {\n read();\n if (requestedMode !== HISTORY_MODES.OFF && options.startup !== false) {\n startup = makeSession(HISTORY_MODES.MEMORY, randomHex(32), true);\n current = startup;\n }\n } catch {\n if (state !== HISTORY_STATES.BLOCKED) block(HISTORY_ERROR_CODES.SETUP);\n }\n const api = Object.freeze({\n getLogger(area, scope) {\n if (!areas.has(area) || typeof scope !== 'string')\n throw new TypeError('Invalid logger area or scope');\n const key = JSON.stringify([area, scope]);\n const cached = roots.get(key);\n if (cached) return cached;\n const logger = forward(area, scope);\n if (roots.size < LOGGING_LIMITS.ROOT_LOGGER_CACHE_PAIRS) {\n roots.set(key, logger);\n return logger;\n }\n if (!rootLoggerLimitReported) {\n rootLoggerLimitReported = true;\n report(\n options.logging.onError,\n loggingError(LOGGING_ERROR_CODES.ROOT_LOGGER_CACHE_LIMIT),\n LOGGING_ERROR_SOURCES.SCOPE,\n );\n }\n return logger;\n },\n resume: (id) =>\n enqueue(\n resume,\n id,\n (value) => typeof value === 'string' && value.length > 0,\n ),\n setOwner: (id) =>\n enqueue(\n setOwner,\n id,\n (value) => typeof value === 'string' && value.length > 0,\n ),\n logout() {\n discardStartup();\n return enqueue(async () => {\n if (state === HISTORY_STATES.BLOCKED) read();\n return destructive(undefined, {}, requestedMode, { logout: true });\n });\n },\n\n setMode(mode) {\n if (mode === HISTORY_MODES.OFF) discardStartup();\n return enqueue(setMode, mode, (value) =>\n [\n HISTORY_MODES.OFF,\n HISTORY_MODES.MEMORY,\n HISTORY_MODES.PERSISTENT,\n ].includes(value),\n );\n },\n\n clear() {\n discardStartup();\n return enqueue(async () => {\n if (state === HISTORY_STATES.STALE)\n throw historyError(HISTORY_ERROR_CODES.STALE);\n const remainBlocked = state === HISTORY_STATES.BLOCKED;\n if (remainBlocked) read();\n return destructive(\n ownerId,\n { salt: metadata?.salt, ownerDigest: metadata?.ownerDigest },\n requestedMode,\n { remainBlocked },\n );\n });\n },\n retryCleanup: () =>\n enqueue(async () => {\n if (state === HISTORY_STATES.STALE)\n throw historyError(HISTORY_ERROR_CODES.STALE);\n if (state === HISTORY_STATES.BLOCKED) read();\n return retryCleanup();\n }),\n getSession: () =>\n current?.valid && !current.paused ? current.session : null,\n getStatus: status,\n stop,\n });\n notify();\n return api;\n}\n"],"names":[],"mappings":"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"}
package/dist/index.cjs ADDED
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ var format = require('./chunk-DqK_3eFr.cjs');
4
+ var hub = require('./chunk-Bvq4tF_F.cjs');
5
+ require('./chunk-CXZYNALm.cjs');
6
+ require('./chunk-BLf-eCDO.cjs');
7
+ require('./chunk-CEhpwtwJ.cjs');
8
+
9
+
10
+
11
+ exports.createConsoleSink = format.createConsoleSink;
12
+ exports.formatRecord = format.formatRecord;
13
+ exports.createLogging = hub.createLogging;
14
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
@@ -0,0 +1,158 @@
1
+ import type {
2
+ LEVELS,
3
+ LIMITS,
4
+ LOGGING_ERROR_CODES,
5
+ LOGGING_ERROR_SOURCES,
6
+ STORE_MODES,
7
+ } from "./constants.cjs";
8
+
9
+ type ValueOf<Values> = Values[keyof Values];
10
+ export type LogLevel = ValueOf<typeof LEVELS>;
11
+ export type LogValue =
12
+ | null
13
+ | boolean
14
+ | number
15
+ | string
16
+ | readonly LogValue[]
17
+ | { readonly [key: string]: LogValue };
18
+ export type LogFields = Readonly<Record<string, LogValue>>;
19
+ export type LogContext = Readonly<Record<string, string | number>>;
20
+ export type SerializedError = Readonly<{
21
+ name: string;
22
+ message: string;
23
+ stack?: string;
24
+ fields?: Readonly<Record<string, LogValue>>;
25
+ cause?: SerializedError;
26
+ errors?: readonly SerializedError[];
27
+ }>;
28
+ export type LogRecord = Readonly<{
29
+ runId: string;
30
+ seq: number;
31
+ at: number;
32
+ level: LogLevel;
33
+ area: string;
34
+ scope: string;
35
+ message: string;
36
+ redactionVersion: string;
37
+ fields?: LogFields;
38
+ context?: LogContext;
39
+ error?: SerializedError;
40
+ truncated?: true;
41
+ }>;
42
+ export type LogDraft = Readonly<
43
+ Omit<LogRecord, 'fields' | 'error' | 'redactionVersion' | 'truncated'> & {
44
+ data?: unknown;
45
+ }
46
+ >;
47
+ export type Logger = Readonly<{
48
+ debug: (message: string, data?: unknown) => void;
49
+ info: (message: string, data?: unknown) => void;
50
+ warn: (message: string, data?: unknown) => void;
51
+ error: (message: string, data?: unknown) => void;
52
+ child: (
53
+ binding: Readonly<{ scope?: string; context?: LogContext }>,
54
+ ) => Logger;
55
+ }>;
56
+ export type AreaDefinition<TArea extends string = string> = Readonly<{
57
+ id: TArea;
58
+ level?: LogLevel;
59
+ }>;
60
+ export type LevelState = Readonly<{
61
+ level: LogLevel;
62
+ defaultLevel: LogLevel;
63
+ until?: number;
64
+ }>;
65
+ export type LoggingScheduler = Readonly<{
66
+ setTimeout: (callback: () => void, delayMs: number) => unknown;
67
+ clearTimeout: (handle: unknown) => void;
68
+ }>;
69
+ export type KeyValueStorage = Readonly<{
70
+ getItem: (key: string) => string | null;
71
+ setItem: (key: string, value: string) => void;
72
+ }>;
73
+ export type LoggingErrorSource = ValueOf<typeof LOGGING_ERROR_SOURCES>;
74
+ export type LoggingError = Error &
75
+ Readonly<{ code: ValueOf<typeof LOGGING_ERROR_CODES> }>;
76
+ export type LoggingOptions<TArea extends string> = Readonly<{
77
+ areas: readonly AreaDefinition<TArea>[];
78
+ redactor: Redactor;
79
+ sinks?: readonly LogSink[];
80
+ context?: LogContext;
81
+ levelStorage?: Readonly<{ storage: KeyValueStorage; key: string }>;
82
+ maxOverrideMs?: number;
83
+ stormLimit?: number | false;
84
+ scheduler?: LoggingScheduler;
85
+ now?: () => number;
86
+ monotonicNow?: () => number;
87
+ createRunId?: () => string;
88
+ onError?: (error: unknown, source: LoggingErrorSource) => void;
89
+ isActive?: () => boolean;
90
+ }>;
91
+ export type Logging<TArea extends string> = Readonly<{
92
+ runId: string;
93
+ getLogger: (area: TArea, scope: string) => Logger;
94
+ setLevel: (
95
+ area: TArea,
96
+ level: LogLevel,
97
+ options?: Readonly<{ durationMs?: number }>,
98
+ ) => void;
99
+ resetLevel: (area?: TArea) => void;
100
+ reloadLevels: () => void;
101
+ getLevels: () => Readonly<Record<TArea, LevelState>>;
102
+ setContext: (
103
+ context: Readonly<Record<string, string | number | undefined>>,
104
+ ) => void;
105
+ addSink: (sink: LogSink) => () => void;
106
+ flush: () => Promise<void>;
107
+ stop: () => Promise<void>;
108
+ }>;
109
+ export declare function createLogging<TArea extends string>(
110
+ options: LoggingOptions<TArea>,
111
+ ): Logging<TArea>;
112
+
113
+ export type Redactor = Readonly<{
114
+ version: string;
115
+ limits: Readonly<{ [Key in keyof typeof LIMITS]: number }>;
116
+ redact: (draft: LogDraft) => LogRecord;
117
+ redactValue: (value: unknown) => LogValue;
118
+ redactText: (text: string) => string;
119
+ mask: (value: string) => string;
120
+ hash?: (value: string) => string;
121
+ }>;
122
+
123
+ export type LogSink = Readonly<{
124
+ write: (record: LogRecord) => void;
125
+ flush?: () => Promise<void>;
126
+ stop?: () => Promise<void>;
127
+ }>;
128
+ export type LogQuery<TArea extends string = string> = Readonly<{
129
+ areas?: readonly TArea[];
130
+ from?: number;
131
+ to?: number;
132
+ }>;
133
+ export type LogStoreStatus = Readonly<{
134
+ mode: ValueOf<typeof STORE_MODES>;
135
+ droppedRecords: number;
136
+ unavailableHistory: boolean;
137
+ unprotected: boolean;
138
+ canRecover: boolean;
139
+ }>;
140
+ export type LogSource = Readonly<{
141
+ query: (query?: LogQuery) => Promise<readonly LogRecord[]>;
142
+ getStatus?: () => LogStoreStatus;
143
+ }>;
144
+ export type LogStore = LogSink &
145
+ LogSource &
146
+ Readonly<{
147
+ flush: () => Promise<void>;
148
+ stop: (options?: Readonly<{ discard?: boolean }>) => Promise<void>;
149
+ clear: () => Promise<void>;
150
+ getStatus: () => LogStoreStatus;
151
+ }>;
152
+ export type ConsoleLike = Readonly<
153
+ Record<LogLevel, (...values: unknown[]) => void>
154
+ >;
155
+ export declare function createConsoleSink(
156
+ options?: Readonly<{ level?: LogLevel; console?: ConsoleLike }>,
157
+ ): LogSink;
158
+ export declare function formatRecord(record: LogRecord): string;
@@ -0,0 +1,158 @@
1
+ import type {
2
+ LEVELS,
3
+ LIMITS,
4
+ LOGGING_ERROR_CODES,
5
+ LOGGING_ERROR_SOURCES,
6
+ STORE_MODES,
7
+ } from './constants.js';
8
+
9
+ type ValueOf<Values> = Values[keyof Values];
10
+ export type LogLevel = ValueOf<typeof LEVELS>;
11
+ export type LogValue =
12
+ | null
13
+ | boolean
14
+ | number
15
+ | string
16
+ | readonly LogValue[]
17
+ | { readonly [key: string]: LogValue };
18
+ export type LogFields = Readonly<Record<string, LogValue>>;
19
+ export type LogContext = Readonly<Record<string, string | number>>;
20
+ export type SerializedError = Readonly<{
21
+ name: string;
22
+ message: string;
23
+ stack?: string;
24
+ fields?: Readonly<Record<string, LogValue>>;
25
+ cause?: SerializedError;
26
+ errors?: readonly SerializedError[];
27
+ }>;
28
+ export type LogRecord = Readonly<{
29
+ runId: string;
30
+ seq: number;
31
+ at: number;
32
+ level: LogLevel;
33
+ area: string;
34
+ scope: string;
35
+ message: string;
36
+ redactionVersion: string;
37
+ fields?: LogFields;
38
+ context?: LogContext;
39
+ error?: SerializedError;
40
+ truncated?: true;
41
+ }>;
42
+ export type LogDraft = Readonly<
43
+ Omit<LogRecord, 'fields' | 'error' | 'redactionVersion' | 'truncated'> & {
44
+ data?: unknown;
45
+ }
46
+ >;
47
+ export type Logger = Readonly<{
48
+ debug: (message: string, data?: unknown) => void;
49
+ info: (message: string, data?: unknown) => void;
50
+ warn: (message: string, data?: unknown) => void;
51
+ error: (message: string, data?: unknown) => void;
52
+ child: (
53
+ binding: Readonly<{ scope?: string; context?: LogContext }>,
54
+ ) => Logger;
55
+ }>;
56
+ export type AreaDefinition<TArea extends string = string> = Readonly<{
57
+ id: TArea;
58
+ level?: LogLevel;
59
+ }>;
60
+ export type LevelState = Readonly<{
61
+ level: LogLevel;
62
+ defaultLevel: LogLevel;
63
+ until?: number;
64
+ }>;
65
+ export type LoggingScheduler = Readonly<{
66
+ setTimeout: (callback: () => void, delayMs: number) => unknown;
67
+ clearTimeout: (handle: unknown) => void;
68
+ }>;
69
+ export type KeyValueStorage = Readonly<{
70
+ getItem: (key: string) => string | null;
71
+ setItem: (key: string, value: string) => void;
72
+ }>;
73
+ export type LoggingErrorSource = ValueOf<typeof LOGGING_ERROR_SOURCES>;
74
+ export type LoggingError = Error &
75
+ Readonly<{ code: ValueOf<typeof LOGGING_ERROR_CODES> }>;
76
+ export type LoggingOptions<TArea extends string> = Readonly<{
77
+ areas: readonly AreaDefinition<TArea>[];
78
+ redactor: Redactor;
79
+ sinks?: readonly LogSink[];
80
+ context?: LogContext;
81
+ levelStorage?: Readonly<{ storage: KeyValueStorage; key: string }>;
82
+ maxOverrideMs?: number;
83
+ stormLimit?: number | false;
84
+ scheduler?: LoggingScheduler;
85
+ now?: () => number;
86
+ monotonicNow?: () => number;
87
+ createRunId?: () => string;
88
+ onError?: (error: unknown, source: LoggingErrorSource) => void;
89
+ isActive?: () => boolean;
90
+ }>;
91
+ export type Logging<TArea extends string> = Readonly<{
92
+ runId: string;
93
+ getLogger: (area: TArea, scope: string) => Logger;
94
+ setLevel: (
95
+ area: TArea,
96
+ level: LogLevel,
97
+ options?: Readonly<{ durationMs?: number }>,
98
+ ) => void;
99
+ resetLevel: (area?: TArea) => void;
100
+ reloadLevels: () => void;
101
+ getLevels: () => Readonly<Record<TArea, LevelState>>;
102
+ setContext: (
103
+ context: Readonly<Record<string, string | number | undefined>>,
104
+ ) => void;
105
+ addSink: (sink: LogSink) => () => void;
106
+ flush: () => Promise<void>;
107
+ stop: () => Promise<void>;
108
+ }>;
109
+ export declare function createLogging<TArea extends string>(
110
+ options: LoggingOptions<TArea>,
111
+ ): Logging<TArea>;
112
+
113
+ export type Redactor = Readonly<{
114
+ version: string;
115
+ limits: Readonly<{ [Key in keyof typeof LIMITS]: number }>;
116
+ redact: (draft: LogDraft) => LogRecord;
117
+ redactValue: (value: unknown) => LogValue;
118
+ redactText: (text: string) => string;
119
+ mask: (value: string) => string;
120
+ hash?: (value: string) => string;
121
+ }>;
122
+
123
+ export type LogSink = Readonly<{
124
+ write: (record: LogRecord) => void;
125
+ flush?: () => Promise<void>;
126
+ stop?: () => Promise<void>;
127
+ }>;
128
+ export type LogQuery<TArea extends string = string> = Readonly<{
129
+ areas?: readonly TArea[];
130
+ from?: number;
131
+ to?: number;
132
+ }>;
133
+ export type LogStoreStatus = Readonly<{
134
+ mode: ValueOf<typeof STORE_MODES>;
135
+ droppedRecords: number;
136
+ unavailableHistory: boolean;
137
+ unprotected: boolean;
138
+ canRecover: boolean;
139
+ }>;
140
+ export type LogSource = Readonly<{
141
+ query: (query?: LogQuery) => Promise<readonly LogRecord[]>;
142
+ getStatus?: () => LogStoreStatus;
143
+ }>;
144
+ export type LogStore = LogSink &
145
+ LogSource &
146
+ Readonly<{
147
+ flush: () => Promise<void>;
148
+ stop: (options?: Readonly<{ discard?: boolean }>) => Promise<void>;
149
+ clear: () => Promise<void>;
150
+ getStatus: () => LogStoreStatus;
151
+ }>;
152
+ export type ConsoleLike = Readonly<
153
+ Record<LogLevel, (...values: unknown[]) => void>
154
+ >;
155
+ export declare function createConsoleSink(
156
+ options?: Readonly<{ level?: LogLevel; console?: ConsoleLike }>,
157
+ ): LogSink;
158
+ export declare function formatRecord(record: LogRecord): string;
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { c as createConsoleSink, f as formatRecord } from './chunk-DYcNnkOV.js';
2
+ export { c as createLogging } from './chunk-B-SP8Od_.js';
3
+ import './chunk-LRCHwVuE.js';
4
+ import './chunk-CSS3f4_M.js';
5
+ import './chunk-7ld72rnl.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ function createIndexedDbLogStore(options = {}, createStore) {
4
+ if (typeof createStore !== 'function')
5
+ throw new TypeError('An IndexedDB store factory is required');
6
+ const { databaseName = 'bazario-logging' } = options;
7
+ return createStore({
8
+ ...options,
9
+ databaseName,
10
+ lockName: JSON.stringify(['bazario:logging:indexeddb', databaseName]),
11
+ });
12
+ }
13
+
14
+ exports.createIndexedDbLogStore = createIndexedDbLogStore;
15
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../src/indexeddb/index.js"],"sourcesContent":["export function createIndexedDbLogStore(options = {}, createStore) {\n if (typeof createStore !== 'function')\n throw new TypeError('An IndexedDB store factory is required');\n const { databaseName = 'bazario-logging' } = options;\n return createStore({\n ...options,\n databaseName,\n lockName: JSON.stringify(['bazario:logging:indexeddb', databaseName]),\n });\n}\n"],"names":[],"mappings":";;AAAO,SAAS,uBAAuB,CAAC,OAAO,GAAG,EAAE,EAAE,WAAW,EAAE;AACnE,EAAE,IAAI,OAAO,WAAW,KAAK,UAAU;AACvC,IAAI,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC;AACjE,EAAE,MAAM,EAAE,YAAY,GAAG,iBAAiB,EAAE,GAAG,OAAO;AACtD,EAAE,OAAO,WAAW,CAAC;AACrB,IAAI,GAAG,OAAO;AACd,IAAI,YAAY;AAChB,IAAI,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,2BAA2B,EAAE,YAAY,CAAC,CAAC;AACzE,GAAG,CAAC;AACJ;;"}
@@ -0,0 +1,46 @@
1
+ import type { LogRecord, LogStore } from "../index.cjs";
2
+ import type { MemoryLogStoreOptions } from "../storage/contracts.cjs";
3
+
4
+ export type {
5
+ LogOverflowStrategy,
6
+ LogStoreError,
7
+ MemoryLogStoreOptions,
8
+ } from "../storage/contracts.cjs";
9
+
10
+ export type IndexedDbLogStoreOptions = Omit<
11
+ MemoryLogStoreOptions,
12
+ 'isRotationEnabled'
13
+ > &
14
+ Readonly<{
15
+ databaseName?: string;
16
+ indexedDB?: IDBFactory;
17
+ keyRange?: Pick<typeof IDBKeyRange, 'bound' | 'lowerBound'> | null;
18
+ locks?: Pick<LockManager, 'request'>;
19
+ allowUnprotected?: boolean;
20
+ flushIntervalMs?: number;
21
+ maxBatchSize?: number;
22
+ maxQueuedRecords?: number;
23
+ maxQueuedSize?: number;
24
+ onStatusChange?: () => void;
25
+ fallback?: Omit<
26
+ MemoryLogStoreOptions,
27
+ | 'overflowStrategy'
28
+ | 'onRotate'
29
+ | 'onError'
30
+ | 'scheduler'
31
+ | 'isRotationEnabled'
32
+ >;
33
+ }>;
34
+ export type IndexedDbStoreFactory = (
35
+ options: IndexedDbLogStoreOptions &
36
+ Readonly<{
37
+ databaseName: string;
38
+ lockName: string;
39
+ isRotationEnabled?: () => boolean;
40
+ }>,
41
+ ) => LogStore;
42
+ export declare function createIndexedDbLogStore(
43
+ options: IndexedDbLogStoreOptions | undefined,
44
+ createStore: IndexedDbStoreFactory,
45
+ ): LogStore;
46
+ export type { LogRecord };
@@ -0,0 +1,46 @@
1
+ import type { LogRecord, LogStore } from '../index.js';
2
+ import type { MemoryLogStoreOptions } from '../storage/contracts.js';
3
+
4
+ export type {
5
+ LogOverflowStrategy,
6
+ LogStoreError,
7
+ MemoryLogStoreOptions,
8
+ } from '../storage/contracts.js';
9
+
10
+ export type IndexedDbLogStoreOptions = Omit<
11
+ MemoryLogStoreOptions,
12
+ 'isRotationEnabled'
13
+ > &
14
+ Readonly<{
15
+ databaseName?: string;
16
+ indexedDB?: IDBFactory;
17
+ keyRange?: Pick<typeof IDBKeyRange, 'bound' | 'lowerBound'> | null;
18
+ locks?: Pick<LockManager, 'request'>;
19
+ allowUnprotected?: boolean;
20
+ flushIntervalMs?: number;
21
+ maxBatchSize?: number;
22
+ maxQueuedRecords?: number;
23
+ maxQueuedSize?: number;
24
+ onStatusChange?: () => void;
25
+ fallback?: Omit<
26
+ MemoryLogStoreOptions,
27
+ | 'overflowStrategy'
28
+ | 'onRotate'
29
+ | 'onError'
30
+ | 'scheduler'
31
+ | 'isRotationEnabled'
32
+ >;
33
+ }>;
34
+ export type IndexedDbStoreFactory = (
35
+ options: IndexedDbLogStoreOptions &
36
+ Readonly<{
37
+ databaseName: string;
38
+ lockName: string;
39
+ isRotationEnabled?: () => boolean;
40
+ }>,
41
+ ) => LogStore;
42
+ export declare function createIndexedDbLogStore(
43
+ options: IndexedDbLogStoreOptions | undefined,
44
+ createStore: IndexedDbStoreFactory,
45
+ ): LogStore;
46
+ export type { LogRecord };
@@ -0,0 +1,13 @@
1
+ function createIndexedDbLogStore(options = {}, createStore) {
2
+ if (typeof createStore !== 'function')
3
+ throw new TypeError('An IndexedDB store factory is required');
4
+ const { databaseName = 'bazario-logging' } = options;
5
+ return createStore({
6
+ ...options,
7
+ databaseName,
8
+ lockName: JSON.stringify(['bazario:logging:indexeddb', databaseName]),
9
+ });
10
+ }
11
+
12
+ export { createIndexedDbLogStore };
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/indexeddb/index.js"],"sourcesContent":["export function createIndexedDbLogStore(options = {}, createStore) {\n if (typeof createStore !== 'function')\n throw new TypeError('An IndexedDB store factory is required');\n const { databaseName = 'bazario-logging' } = options;\n return createStore({\n ...options,\n databaseName,\n lockName: JSON.stringify(['bazario:logging:indexeddb', databaseName]),\n });\n}\n"],"names":[],"mappings":"AAAO,SAAS,uBAAuB,CAAC,OAAO,GAAG,EAAE,EAAE,WAAW,EAAE;AACnE,EAAE,IAAI,OAAO,WAAW,KAAK,UAAU;AACvC,IAAI,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC;AACjE,EAAE,MAAM,EAAE,YAAY,GAAG,iBAAiB,EAAE,GAAG,OAAO;AACtD,EAAE,OAAO,WAAW,CAAC;AACrB,IAAI,GAAG,OAAO;AACd,IAAI,YAAY;AAChB,IAAI,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,2BAA2B,EAAE,YAAY,CAAC,CAAC;AACzE,GAAG,CAAC;AACJ;;"}