@bazariodev/docket 0.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +61 -0
- package/README.md +742 -169
- package/dist/browser/index.cjs +2 -2
- package/dist/browser/index.js +2 -2
- package/dist/{chunk-LRCHwVuE.js → chunk---OIebMz.js} +31 -3
- package/dist/chunk---OIebMz.js.map +1 -0
- package/dist/{chunk-CEhpwtwJ.cjs → chunk-BMmKUicm.cjs} +9 -3
- package/dist/chunk-BMmKUicm.cjs.map +1 -0
- package/dist/{chunk-B-SP8Od_.js → chunk-CJmlBW-M.js} +69 -26
- package/dist/chunk-CJmlBW-M.js.map +1 -0
- package/dist/{chunk-DYcNnkOV.js → chunk-D1NggH6k.js} +2 -2
- package/dist/{chunk-DYcNnkOV.js.map → chunk-D1NggH6k.js.map} +1 -1
- package/dist/{chunk-Bvq4tF_F.cjs → chunk-DEyTe0f4.cjs} +68 -26
- package/dist/chunk-DEyTe0f4.cjs.map +1 -0
- package/dist/{chunk-BLf-eCDO.cjs → chunk-DLnBMRjo.cjs} +3 -1
- package/dist/chunk-DLnBMRjo.cjs.map +1 -0
- package/dist/{chunk-CSS3f4_M.js → chunk-Da877R_E.js} +4 -2
- package/dist/chunk-Da877R_E.js.map +1 -0
- package/dist/{chunk-7ld72rnl.js → chunk-De6BoS1P.js} +9 -3
- package/dist/chunk-De6BoS1P.js.map +1 -0
- package/dist/{chunk-CXZYNALm.cjs → chunk-Dl2KJDqt.cjs} +31 -2
- package/dist/chunk-Dl2KJDqt.cjs.map +1 -0
- package/dist/{chunk-DqK_3eFr.cjs → chunk-DlZYLPaU.cjs} +2 -2
- package/dist/{chunk-DqK_3eFr.cjs.map → chunk-DlZYLPaU.cjs.map} +1 -1
- package/dist/client/index.cjs +167 -0
- package/dist/client/index.cjs.map +1 -0
- package/dist/client/index.d.cts +40 -0
- package/dist/client/index.d.ts +40 -0
- package/dist/client/index.js +165 -0
- package/dist/client/index.js.map +1 -0
- package/dist/constants.d.cts +2 -4
- package/dist/constants.d.ts +2 -4
- package/dist/core/constants.d.cts +2 -0
- package/dist/core/constants.d.ts +2 -0
- package/dist/export/index.cjs +43 -15
- package/dist/export/index.cjs.map +1 -1
- package/dist/export/index.js +43 -15
- package/dist/export/index.js.map +1 -1
- package/dist/history/index.cjs +22 -1188
- package/dist/history/index.cjs.map +1 -1
- package/dist/history/index.d.cts +10 -112
- package/dist/history/index.d.ts +10 -112
- package/dist/history/index.js +22 -1188
- package/dist/history/index.js.map +1 -1
- package/dist/index.cjs +5 -5
- package/dist/index.d.cts +8 -4
- package/dist/index.d.ts +8 -4
- package/dist/index.js +5 -5
- package/dist/indexeddb/index.cjs +18 -7
- package/dist/indexeddb/index.cjs.map +1 -1
- package/dist/indexeddb/index.d.cts +19 -4
- package/dist/indexeddb/index.d.ts +19 -4
- package/dist/indexeddb/index.js +18 -8
- package/dist/indexeddb/index.js.map +1 -1
- package/dist/redaction/index.cjs +4 -2
- package/dist/redaction/index.cjs.map +1 -1
- package/dist/redaction/index.js +4 -2
- package/dist/redaction/index.js.map +1 -1
- package/dist/sip/index.cjs +1 -1
- package/dist/sip/index.js +1 -1
- package/dist/storage/contracts.d.cts +0 -4
- package/dist/storage/contracts.d.ts +0 -4
- package/dist/upload/constants.d.cts +17 -0
- package/dist/upload/constants.d.ts +17 -0
- package/dist/upload/index.cjs +246 -0
- package/dist/upload/index.cjs.map +1 -0
- package/dist/upload/index.d.cts +51 -0
- package/dist/upload/index.d.ts +51 -0
- package/dist/upload/index.js +244 -0
- package/dist/upload/index.js.map +1 -0
- package/package.json +25 -2
- package/dist/chunk-7ld72rnl.js.map +0 -1
- package/dist/chunk-B-SP8Od_.js.map +0 -1
- package/dist/chunk-BLf-eCDO.cjs.map +0 -1
- package/dist/chunk-Bvq4tF_F.cjs.map +0 -1
- package/dist/chunk-CEhpwtwJ.cjs.map +0 -1
- package/dist/chunk-CSS3f4_M.js.map +0 -1
- package/dist/chunk-CXZYNALm.cjs.map +0 -1
- package/dist/chunk-LRCHwVuE.js.map +0 -1
- package/dist/core/errors.d.cts +0 -8
- package/dist/core/errors.d.ts +0 -8
- package/dist/history/constants.d.cts +0 -35
- package/dist/history/constants.d.ts +0 -35
- package/dist/sip/constants.d.cts +0 -5
- package/dist/sip/constants.d.ts +0 -5
|
@@ -1 +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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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/history/index.js"],"sourcesContent":["import { Queue } from '@bazariodev/coordination';\nimport { positive, validateQuery } from '../core/common.js';\n\nexport function createMemoryHistory(options) {\n if (!options || typeof options !== 'object' || Array.isArray(options))\n throw new TypeError('Memory history options are required');\n const { maxRecords } = options;\n if (maxRecords === undefined) throw new TypeError('maxRecords is required');\n if (Reflect.ownKeys(options).some((key) => key !== 'maxRecords'))\n throw new TypeError('Only maxRecords is supported for memory history');\n positive(maxRecords, 'maxRecords');\n const queue = new Queue();\n return Object.freeze({\n write(record) {\n if (queue.size === maxRecords) queue.dequeue();\n queue.enqueue(record);\n },\n async query(query) {\n const matches = validateQuery(query);\n return queue.toArray().filter(matches);\n },\n clear: () => queue.clear(),\n });\n}\n"],"names":[],"mappings":";;;;AAGO,SAAS,mBAAmB,CAAC,OAAO,EAAE;AAC7C,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;AACvE,IAAI,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC;AAC9D,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO;AAChC,EAAE,IAAI,UAAU,KAAK,SAAS,EAAE,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC;AAC7E,EAAE,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,YAAY,CAAC;AAClE,IAAI,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC;AAC1E,EAAE,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;AACpC,EAAE,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;AAC3B,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,IAAI,KAAK,CAAC,MAAM,EAAE;AAClB,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE;AACpD,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;AAC3B,IAAI,CAAC;AACL,IAAI,MAAM,KAAK,CAAC,KAAK,EAAE;AACvB,MAAM,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC;AAC1C,MAAM,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;AAC5C,IAAI,CAAC;AACL,IAAI,KAAK,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE;AAC9B,GAAG,CAAC;AACJ;;"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var format = require('./chunk-
|
|
4
|
-
var hub = require('./chunk-
|
|
5
|
-
require('./chunk-
|
|
6
|
-
require('./chunk-
|
|
7
|
-
require('./chunk-
|
|
3
|
+
var format = require('./chunk-DlZYLPaU.cjs');
|
|
4
|
+
var hub = require('./chunk-DEyTe0f4.cjs');
|
|
5
|
+
require('./chunk-Dl2KJDqt.cjs');
|
|
6
|
+
require('./chunk-DLnBMRjo.cjs');
|
|
7
|
+
require('./chunk-BMmKUicm.cjs');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
package/dist/index.d.cts
CHANGED
|
@@ -17,6 +17,8 @@ export type LogValue =
|
|
|
17
17
|
| { readonly [key: string]: LogValue };
|
|
18
18
|
export type LogFields = Readonly<Record<string, LogValue>>;
|
|
19
19
|
export type LogContext = Readonly<Record<string, string | number>>;
|
|
20
|
+
export type LogMetadata = Readonly<Record<string, boolean>>;
|
|
21
|
+
export type LogOptions = Readonly<{ metadata?: LogMetadata | undefined }>;
|
|
20
22
|
export type SerializedError = Readonly<{
|
|
21
23
|
name: string;
|
|
22
24
|
message: string;
|
|
@@ -38,6 +40,7 @@ export type LogRecord = Readonly<{
|
|
|
38
40
|
context?: LogContext;
|
|
39
41
|
error?: SerializedError;
|
|
40
42
|
truncated?: true;
|
|
43
|
+
metadata?: LogMetadata;
|
|
41
44
|
}>;
|
|
42
45
|
export type LogDraft = Readonly<
|
|
43
46
|
Omit<LogRecord, 'fields' | 'error' | 'redactionVersion' | 'truncated'> & {
|
|
@@ -45,10 +48,10 @@ export type LogDraft = Readonly<
|
|
|
45
48
|
}
|
|
46
49
|
>;
|
|
47
50
|
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;
|
|
51
|
+
debug: (message: string, data?: unknown, options?: LogOptions) => void;
|
|
52
|
+
info: (message: string, data?: unknown, options?: LogOptions) => void;
|
|
53
|
+
warn: (message: string, data?: unknown, options?: LogOptions) => void;
|
|
54
|
+
error: (message: string, data?: unknown, options?: LogOptions) => void;
|
|
52
55
|
child: (
|
|
53
56
|
binding: Readonly<{ scope?: string; context?: LogContext }>,
|
|
54
57
|
) => Logger;
|
|
@@ -121,6 +124,7 @@ export type Redactor = Readonly<{
|
|
|
121
124
|
}>;
|
|
122
125
|
|
|
123
126
|
export type LogSink = Readonly<{
|
|
127
|
+
// Finish admission synchronously. The hub ignores the return value.
|
|
124
128
|
write: (record: LogRecord) => void;
|
|
125
129
|
flush?: () => Promise<void>;
|
|
126
130
|
stop?: () => Promise<void>;
|
package/dist/index.d.ts
CHANGED
|
@@ -17,6 +17,8 @@ export type LogValue =
|
|
|
17
17
|
| { readonly [key: string]: LogValue };
|
|
18
18
|
export type LogFields = Readonly<Record<string, LogValue>>;
|
|
19
19
|
export type LogContext = Readonly<Record<string, string | number>>;
|
|
20
|
+
export type LogMetadata = Readonly<Record<string, boolean>>;
|
|
21
|
+
export type LogOptions = Readonly<{ metadata?: LogMetadata | undefined }>;
|
|
20
22
|
export type SerializedError = Readonly<{
|
|
21
23
|
name: string;
|
|
22
24
|
message: string;
|
|
@@ -38,6 +40,7 @@ export type LogRecord = Readonly<{
|
|
|
38
40
|
context?: LogContext;
|
|
39
41
|
error?: SerializedError;
|
|
40
42
|
truncated?: true;
|
|
43
|
+
metadata?: LogMetadata;
|
|
41
44
|
}>;
|
|
42
45
|
export type LogDraft = Readonly<
|
|
43
46
|
Omit<LogRecord, 'fields' | 'error' | 'redactionVersion' | 'truncated'> & {
|
|
@@ -45,10 +48,10 @@ export type LogDraft = Readonly<
|
|
|
45
48
|
}
|
|
46
49
|
>;
|
|
47
50
|
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;
|
|
51
|
+
debug: (message: string, data?: unknown, options?: LogOptions) => void;
|
|
52
|
+
info: (message: string, data?: unknown, options?: LogOptions) => void;
|
|
53
|
+
warn: (message: string, data?: unknown, options?: LogOptions) => void;
|
|
54
|
+
error: (message: string, data?: unknown, options?: LogOptions) => void;
|
|
52
55
|
child: (
|
|
53
56
|
binding: Readonly<{ scope?: string; context?: LogContext }>,
|
|
54
57
|
) => Logger;
|
|
@@ -121,6 +124,7 @@ export type Redactor = Readonly<{
|
|
|
121
124
|
}>;
|
|
122
125
|
|
|
123
126
|
export type LogSink = Readonly<{
|
|
127
|
+
// Finish admission synchronously. The hub ignores the return value.
|
|
124
128
|
write: (record: LogRecord) => void;
|
|
125
129
|
flush?: () => Promise<void>;
|
|
126
130
|
stop?: () => Promise<void>;
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { c as createConsoleSink, f as formatRecord } from './chunk-
|
|
2
|
-
export { c as createLogging } from './chunk-
|
|
3
|
-
import './chunk
|
|
4
|
-
import './chunk-
|
|
5
|
-
import './chunk-
|
|
1
|
+
export { c as createConsoleSink, f as formatRecord } from './chunk-D1NggH6k.js';
|
|
2
|
+
export { c as createLogging } from './chunk-CJmlBW-M.js';
|
|
3
|
+
import './chunk---OIebMz.js';
|
|
4
|
+
import './chunk-Da877R_E.js';
|
|
5
|
+
import './chunk-De6BoS1P.js';
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
package/dist/indexeddb/index.cjs
CHANGED
|
@@ -1,15 +1,26 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
function createIndexedDbLogStore(options
|
|
3
|
+
function createIndexedDbLogStore(options, createStore) {
|
|
4
4
|
if (typeof createStore !== 'function')
|
|
5
5
|
throw new TypeError('An IndexedDB store factory is required');
|
|
6
|
-
|
|
7
|
-
return createStore({
|
|
8
|
-
...options,
|
|
9
|
-
databaseName,
|
|
10
|
-
lockName: JSON.stringify(['bazario:logging:indexeddb', databaseName]),
|
|
11
|
-
});
|
|
6
|
+
return createStore(databaseOptions(options));
|
|
12
7
|
}
|
|
13
8
|
|
|
9
|
+
async function clearIndexedDbLogStore(options, clearStore) {
|
|
10
|
+
if (typeof clearStore !== 'function')
|
|
11
|
+
throw new TypeError('An IndexedDB cleanup function is required');
|
|
12
|
+
return clearStore(databaseOptions(options));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function databaseOptions(options) {
|
|
16
|
+
const { databaseName, lockName } = options ?? {};
|
|
17
|
+
if (typeof databaseName !== 'string' || !databaseName)
|
|
18
|
+
throw new TypeError('An IndexedDB database name is required');
|
|
19
|
+
if (typeof lockName !== 'string' || !lockName)
|
|
20
|
+
throw new TypeError('An IndexedDB lock name is required');
|
|
21
|
+
return options;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
exports.clearIndexedDbLogStore = clearIndexedDbLogStore;
|
|
14
25
|
exports.createIndexedDbLogStore = createIndexedDbLogStore;
|
|
15
26
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/indexeddb/index.js"],"sourcesContent":["export function createIndexedDbLogStore(options
|
|
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 return createStore(databaseOptions(options));\n}\n\nexport async function clearIndexedDbLogStore(options, clearStore) {\n if (typeof clearStore !== 'function')\n throw new TypeError('An IndexedDB cleanup function is required');\n return clearStore(databaseOptions(options));\n}\n\nfunction databaseOptions(options) {\n const { databaseName, lockName } = options ?? {};\n if (typeof databaseName !== 'string' || !databaseName)\n throw new TypeError('An IndexedDB database name is required');\n if (typeof lockName !== 'string' || !lockName)\n throw new TypeError('An IndexedDB lock name is required');\n return options;\n}\n"],"names":[],"mappings":";;AAAO,SAAS,uBAAuB,CAAC,OAAO,EAAE,WAAW,EAAE;AAC9D,EAAE,IAAI,OAAO,WAAW,KAAK,UAAU;AACvC,IAAI,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC;AACjE,EAAE,OAAO,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AAC9C;;AAEO,eAAe,sBAAsB,CAAC,OAAO,EAAE,UAAU,EAAE;AAClE,EAAE,IAAI,OAAO,UAAU,KAAK,UAAU;AACtC,IAAI,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC;AACpE,EAAE,OAAO,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AAC7C;;AAEA,SAAS,eAAe,CAAC,OAAO,EAAE;AAClC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,OAAO,IAAI,EAAE;AAClD,EAAE,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,CAAC,YAAY;AACvD,IAAI,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC;AACjE,EAAE,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ;AAC/C,IAAI,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC;AAC7D,EAAE,OAAO,OAAO;AAChB;;;"}
|
|
@@ -12,7 +12,8 @@ export type IndexedDbLogStoreOptions = Omit<
|
|
|
12
12
|
'isRotationEnabled'
|
|
13
13
|
> &
|
|
14
14
|
Readonly<{
|
|
15
|
-
databaseName
|
|
15
|
+
databaseName: string;
|
|
16
|
+
lockName: string;
|
|
16
17
|
indexedDB?: IDBFactory;
|
|
17
18
|
keyRange?: Pick<typeof IDBKeyRange, 'bound' | 'lowerBound'> | null;
|
|
18
19
|
locks?: Pick<LockManager, 'request'>;
|
|
@@ -34,13 +35,27 @@ export type IndexedDbLogStoreOptions = Omit<
|
|
|
34
35
|
export type IndexedDbStoreFactory = (
|
|
35
36
|
options: IndexedDbLogStoreOptions &
|
|
36
37
|
Readonly<{
|
|
37
|
-
databaseName: string;
|
|
38
|
-
lockName: string;
|
|
39
38
|
isRotationEnabled?: () => boolean;
|
|
40
39
|
}>,
|
|
41
40
|
) => LogStore;
|
|
42
41
|
export declare function createIndexedDbLogStore(
|
|
43
|
-
options: IndexedDbLogStoreOptions
|
|
42
|
+
options: IndexedDbLogStoreOptions,
|
|
44
43
|
createStore: IndexedDbStoreFactory,
|
|
45
44
|
): LogStore;
|
|
45
|
+
export type IndexedDbLogCleanupOptions = Pick<
|
|
46
|
+
IndexedDbLogStoreOptions,
|
|
47
|
+
| 'databaseName'
|
|
48
|
+
| 'lockName'
|
|
49
|
+
| 'indexedDB'
|
|
50
|
+
| 'locks'
|
|
51
|
+
| 'allowUnprotected'
|
|
52
|
+
| 'scheduler'
|
|
53
|
+
>;
|
|
54
|
+
export type IndexedDbCleanup = (
|
|
55
|
+
options: IndexedDbLogCleanupOptions,
|
|
56
|
+
) => Promise<void>;
|
|
57
|
+
export declare function clearIndexedDbLogStore(
|
|
58
|
+
options: IndexedDbLogCleanupOptions,
|
|
59
|
+
clearStore: IndexedDbCleanup,
|
|
60
|
+
): Promise<void>;
|
|
46
61
|
export type { LogRecord };
|
|
@@ -12,7 +12,8 @@ export type IndexedDbLogStoreOptions = Omit<
|
|
|
12
12
|
'isRotationEnabled'
|
|
13
13
|
> &
|
|
14
14
|
Readonly<{
|
|
15
|
-
databaseName
|
|
15
|
+
databaseName: string;
|
|
16
|
+
lockName: string;
|
|
16
17
|
indexedDB?: IDBFactory;
|
|
17
18
|
keyRange?: Pick<typeof IDBKeyRange, 'bound' | 'lowerBound'> | null;
|
|
18
19
|
locks?: Pick<LockManager, 'request'>;
|
|
@@ -34,13 +35,27 @@ export type IndexedDbLogStoreOptions = Omit<
|
|
|
34
35
|
export type IndexedDbStoreFactory = (
|
|
35
36
|
options: IndexedDbLogStoreOptions &
|
|
36
37
|
Readonly<{
|
|
37
|
-
databaseName: string;
|
|
38
|
-
lockName: string;
|
|
39
38
|
isRotationEnabled?: () => boolean;
|
|
40
39
|
}>,
|
|
41
40
|
) => LogStore;
|
|
42
41
|
export declare function createIndexedDbLogStore(
|
|
43
|
-
options: IndexedDbLogStoreOptions
|
|
42
|
+
options: IndexedDbLogStoreOptions,
|
|
44
43
|
createStore: IndexedDbStoreFactory,
|
|
45
44
|
): LogStore;
|
|
45
|
+
export type IndexedDbLogCleanupOptions = Pick<
|
|
46
|
+
IndexedDbLogStoreOptions,
|
|
47
|
+
| 'databaseName'
|
|
48
|
+
| 'lockName'
|
|
49
|
+
| 'indexedDB'
|
|
50
|
+
| 'locks'
|
|
51
|
+
| 'allowUnprotected'
|
|
52
|
+
| 'scheduler'
|
|
53
|
+
>;
|
|
54
|
+
export type IndexedDbCleanup = (
|
|
55
|
+
options: IndexedDbLogCleanupOptions,
|
|
56
|
+
) => Promise<void>;
|
|
57
|
+
export declare function clearIndexedDbLogStore(
|
|
58
|
+
options: IndexedDbLogCleanupOptions,
|
|
59
|
+
clearStore: IndexedDbCleanup,
|
|
60
|
+
): Promise<void>;
|
|
46
61
|
export type { LogRecord };
|
package/dist/indexeddb/index.js
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
function createIndexedDbLogStore(options
|
|
1
|
+
function createIndexedDbLogStore(options, createStore) {
|
|
2
2
|
if (typeof createStore !== 'function')
|
|
3
3
|
throw new TypeError('An IndexedDB store factory is required');
|
|
4
|
-
|
|
5
|
-
return createStore({
|
|
6
|
-
...options,
|
|
7
|
-
databaseName,
|
|
8
|
-
lockName: JSON.stringify(['bazario:logging:indexeddb', databaseName]),
|
|
9
|
-
});
|
|
4
|
+
return createStore(databaseOptions(options));
|
|
10
5
|
}
|
|
11
6
|
|
|
12
|
-
|
|
7
|
+
async function clearIndexedDbLogStore(options, clearStore) {
|
|
8
|
+
if (typeof clearStore !== 'function')
|
|
9
|
+
throw new TypeError('An IndexedDB cleanup function is required');
|
|
10
|
+
return clearStore(databaseOptions(options));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function databaseOptions(options) {
|
|
14
|
+
const { databaseName, lockName } = options ?? {};
|
|
15
|
+
if (typeof databaseName !== 'string' || !databaseName)
|
|
16
|
+
throw new TypeError('An IndexedDB database name is required');
|
|
17
|
+
if (typeof lockName !== 'string' || !lockName)
|
|
18
|
+
throw new TypeError('An IndexedDB lock name is required');
|
|
19
|
+
return options;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export { clearIndexedDbLogStore, createIndexedDbLogStore };
|
|
13
23
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/indexeddb/index.js"],"sourcesContent":["export function createIndexedDbLogStore(options
|
|
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 return createStore(databaseOptions(options));\n}\n\nexport async function clearIndexedDbLogStore(options, clearStore) {\n if (typeof clearStore !== 'function')\n throw new TypeError('An IndexedDB cleanup function is required');\n return clearStore(databaseOptions(options));\n}\n\nfunction databaseOptions(options) {\n const { databaseName, lockName } = options ?? {};\n if (typeof databaseName !== 'string' || !databaseName)\n throw new TypeError('An IndexedDB database name is required');\n if (typeof lockName !== 'string' || !lockName)\n throw new TypeError('An IndexedDB lock name is required');\n return options;\n}\n"],"names":[],"mappings":"AAAO,SAAS,uBAAuB,CAAC,OAAO,EAAE,WAAW,EAAE;AAC9D,EAAE,IAAI,OAAO,WAAW,KAAK,UAAU;AACvC,IAAI,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC;AACjE,EAAE,OAAO,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AAC9C;;AAEO,eAAe,sBAAsB,CAAC,OAAO,EAAE,UAAU,EAAE;AAClE,EAAE,IAAI,OAAO,UAAU,KAAK,UAAU;AACtC,IAAI,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC;AACpE,EAAE,OAAO,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AAC7C;;AAEA,SAAS,eAAe,CAAC,OAAO,EAAE;AAClC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,OAAO,IAAI,EAAE;AAClD,EAAE,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,CAAC,YAAY;AACvD,IAAI,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC;AACjE,EAAE,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ;AAC/C,IAAI,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC;AAC7D,EAAE,OAAO,OAAO;AAChB;;"}
|
package/dist/redaction/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var common = require('../chunk-
|
|
4
|
-
var constants = require('../chunk-
|
|
3
|
+
var common = require('../chunk-Dl2KJDqt.cjs');
|
|
4
|
+
var constants = require('../chunk-DLnBMRjo.cjs');
|
|
5
5
|
|
|
6
6
|
function createRedactor(
|
|
7
7
|
policy = {},
|
|
@@ -83,6 +83,8 @@ function createRedactor(
|
|
|
83
83
|
: draft[key],
|
|
84
84
|
);
|
|
85
85
|
record.redactionVersion = version;
|
|
86
|
+
const metadata = common.copyMetadata(draft.metadata);
|
|
87
|
+
if (metadata) record.metadata = metadata;
|
|
86
88
|
if (draft.context) record.context = walk.redactValue(draft.context);
|
|
87
89
|
const data = draft.data;
|
|
88
90
|
if (common.isError(data)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/redaction/index.js"],"sourcesContent":["import { define, isError, own, resolveLimits } from '../core/common.js';\nimport { MARKERS } from '../core/constants.js';\n\nexport function createRedactor(\n policy = {},\n { createRedactor: createValueRedactor, TEXT_RULES: providerTextRules } = {},\n) {\n if (typeof createValueRedactor !== 'function')\n throw new TypeError('A value redactor factory is required');\n if (!Array.isArray(policy.text) && !providerTextRules)\n throw new TypeError('Default text rules are required');\n const limits = resolveLimits(policy.limits);\n const version = policy.version ?? '1';\n if (\n typeof version !== 'string' ||\n !version ||\n version.length > limits.maxStringLength\n )\n throw new TypeError('Invalid redaction version');\n const { fields, unknownFields, hash, text } = policy;\n const textRules = text ?? Object.values(providerTextRules);\n const engine = createValueRedactor({\n fields,\n unknownFields,\n hash:\n typeof hash === 'function' ? (value) => hash.call(policy, value) : hash,\n limits: { ...limits, maxOutputSize: limits.maxRecordSize },\n text: text\n ? textRules.map(({ name, pattern, requiresHash, replace }) => ({\n name,\n pattern,\n requiresHash,\n replace:\n typeof replace === 'function'\n ? function (match) {\n return replace.call(this, match, api);\n }\n : replace,\n }))\n : textRules,\n });\n let active;\n const api = {\n version,\n limits,\n mask: engine.mask,\n redactText(value) {\n return (active?.walk ?? engine.createSession()).redactText(value);\n },\n\n redactValue(value) {\n const walk = engine.createSession();\n const result = walk.redactValue(value);\n if (active && walk.truncated) active.truncated = true;\n return JSON.stringify(result).length <= limits.maxRecordSize\n ? result\n : MARKERS.LIMIT;\n },\n\n redact(draft) {\n const previous = active;\n const walk = engine.createSession();\n active = { walk, truncated: false };\n try {\n let didTruncate = false;\n const record = {};\n for (const key of [\n 'runId',\n 'seq',\n 'at',\n 'level',\n 'area',\n 'scope',\n 'message',\n ])\n define(\n record,\n key,\n typeof draft[key] === 'string' && !['runId', 'level'].includes(key)\n ? walk.redactText(draft[key])\n : draft[key],\n );\n record.redactionVersion = version;\n if (draft.context) record.context = walk.redactValue(draft.context);\n const data = draft.data;\n if (isError(data)) {\n const converted = walk.redactValue(data);\n record.error =\n typeof converted === 'string'\n ? { name: 'Error', message: converted }\n : converted;\n } else if (data !== undefined) {\n if (\n data &&\n typeof data === 'object' &&\n !Array.isArray(data) &&\n [Object.prototype, null].includes(Object.getPrototypeOf(data))\n ) {\n const error =\n walk.fieldRule('error') === 'drop'\n ? undefined\n : own(data, 'error');\n const promoted = isError(error);\n if (promoted) {\n const converted = walk.redactError(error, 'error');\n if (converted !== undefined) record.error = converted;\n }\n const values = {};\n let count = 0;\n for (const key of Reflect.ownKeys(data)) {\n if (++count > limits.maxKeys) {\n define(values, '[truncated]', MARKERS.LIMIT);\n didTruncate = true;\n break;\n }\n if (key === 'error' && promoted) continue;\n const descriptor = Object.getOwnPropertyDescriptor(data, key);\n if (typeof key === 'string' && descriptor?.enumerable)\n Object.defineProperty(values, key, descriptor);\n }\n const converted = walk.redactValue(values);\n record.fields =\n converted &&\n typeof converted === 'object' &&\n !Array.isArray(converted)\n ? converted\n : { value: converted };\n } else record.fields = { value: walk.redactValue(data) };\n }\n if (walk.truncated || active.truncated || didTruncate)\n record.truncated = true;\n if (JSON.stringify(record).length > limits.maxRecordSize) {\n delete record.fields;\n delete record.context;\n delete record.error;\n record.fields = { value: MARKERS.LIMIT };\n record.truncated = true;\n if (JSON.stringify(record).length > limits.maxRecordSize)\n throw new TypeError('Record headers exceed size limit');\n }\n return record;\n } finally {\n active = previous;\n }\n },\n };\n if (engine.hash) api.hash = engine.hash;\n return Object.freeze(api);\n}\n"],"names":["resolveLimits","MARKERS","define","isError","own"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/redaction/index.js"],"sourcesContent":["import {\n copyMetadata,\n define,\n isError,\n own,\n resolveLimits,\n} from '../core/common.js';\nimport { MARKERS } from '../core/constants.js';\n\nexport function createRedactor(\n policy = {},\n { createRedactor: createValueRedactor, TEXT_RULES: providerTextRules } = {},\n) {\n if (typeof createValueRedactor !== 'function')\n throw new TypeError('A value redactor factory is required');\n if (!Array.isArray(policy.text) && !providerTextRules)\n throw new TypeError('Default text rules are required');\n const limits = resolveLimits(policy.limits);\n const version = policy.version ?? '1';\n if (\n typeof version !== 'string' ||\n !version ||\n version.length > limits.maxStringLength\n )\n throw new TypeError('Invalid redaction version');\n const { fields, unknownFields, hash, text } = policy;\n const textRules = text ?? Object.values(providerTextRules);\n const engine = createValueRedactor({\n fields,\n unknownFields,\n hash:\n typeof hash === 'function' ? (value) => hash.call(policy, value) : hash,\n limits: { ...limits, maxOutputSize: limits.maxRecordSize },\n text: text\n ? textRules.map(({ name, pattern, requiresHash, replace }) => ({\n name,\n pattern,\n requiresHash,\n replace:\n typeof replace === 'function'\n ? function (match) {\n return replace.call(this, match, api);\n }\n : replace,\n }))\n : textRules,\n });\n let active;\n const api = {\n version,\n limits,\n mask: engine.mask,\n redactText(value) {\n return (active?.walk ?? engine.createSession()).redactText(value);\n },\n\n redactValue(value) {\n const walk = engine.createSession();\n const result = walk.redactValue(value);\n if (active && walk.truncated) active.truncated = true;\n return JSON.stringify(result).length <= limits.maxRecordSize\n ? result\n : MARKERS.LIMIT;\n },\n\n redact(draft) {\n const previous = active;\n const walk = engine.createSession();\n active = { walk, truncated: false };\n try {\n let didTruncate = false;\n const record = {};\n for (const key of [\n 'runId',\n 'seq',\n 'at',\n 'level',\n 'area',\n 'scope',\n 'message',\n ])\n define(\n record,\n key,\n typeof draft[key] === 'string' && !['runId', 'level'].includes(key)\n ? walk.redactText(draft[key])\n : draft[key],\n );\n record.redactionVersion = version;\n const metadata = copyMetadata(draft.metadata);\n if (metadata) record.metadata = metadata;\n if (draft.context) record.context = walk.redactValue(draft.context);\n const data = draft.data;\n if (isError(data)) {\n const converted = walk.redactValue(data);\n record.error =\n typeof converted === 'string'\n ? { name: 'Error', message: converted }\n : converted;\n } else if (data !== undefined) {\n if (\n data &&\n typeof data === 'object' &&\n !Array.isArray(data) &&\n [Object.prototype, null].includes(Object.getPrototypeOf(data))\n ) {\n const error =\n walk.fieldRule('error') === 'drop'\n ? undefined\n : own(data, 'error');\n const promoted = isError(error);\n if (promoted) {\n const converted = walk.redactError(error, 'error');\n if (converted !== undefined) record.error = converted;\n }\n const values = {};\n let count = 0;\n for (const key of Reflect.ownKeys(data)) {\n if (++count > limits.maxKeys) {\n define(values, '[truncated]', MARKERS.LIMIT);\n didTruncate = true;\n break;\n }\n if (key === 'error' && promoted) continue;\n const descriptor = Object.getOwnPropertyDescriptor(data, key);\n if (typeof key === 'string' && descriptor?.enumerable)\n Object.defineProperty(values, key, descriptor);\n }\n const converted = walk.redactValue(values);\n record.fields =\n converted &&\n typeof converted === 'object' &&\n !Array.isArray(converted)\n ? converted\n : { value: converted };\n } else record.fields = { value: walk.redactValue(data) };\n }\n if (walk.truncated || active.truncated || didTruncate)\n record.truncated = true;\n if (JSON.stringify(record).length > limits.maxRecordSize) {\n delete record.fields;\n delete record.context;\n delete record.error;\n record.fields = { value: MARKERS.LIMIT };\n record.truncated = true;\n if (JSON.stringify(record).length > limits.maxRecordSize)\n throw new TypeError('Record headers exceed size limit');\n }\n return record;\n } finally {\n active = previous;\n }\n },\n };\n if (engine.hash) api.hash = engine.hash;\n return Object.freeze(api);\n}\n"],"names":["resolveLimits","MARKERS","define","copyMetadata","isError","own"],"mappings":"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"}
|
package/dist/redaction/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as resolveLimits, d as define, i as isError, o as own } from '../chunk
|
|
2
|
-
import { M as MARKERS } from '../chunk-
|
|
1
|
+
import { r as resolveLimits, d as define, c as copyMetadata, i as isError, o as own } from '../chunk---OIebMz.js';
|
|
2
|
+
import { M as MARKERS } from '../chunk-Da877R_E.js';
|
|
3
3
|
|
|
4
4
|
function createRedactor(
|
|
5
5
|
policy = {},
|
|
@@ -81,6 +81,8 @@ function createRedactor(
|
|
|
81
81
|
: draft[key],
|
|
82
82
|
);
|
|
83
83
|
record.redactionVersion = version;
|
|
84
|
+
const metadata = copyMetadata(draft.metadata);
|
|
85
|
+
if (metadata) record.metadata = metadata;
|
|
84
86
|
if (draft.context) record.context = walk.redactValue(draft.context);
|
|
85
87
|
const data = draft.data;
|
|
86
88
|
if (isError(data)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/redaction/index.js"],"sourcesContent":["import { define, isError, own, resolveLimits } from '../core/common.js';\nimport { MARKERS } from '../core/constants.js';\n\nexport function createRedactor(\n policy = {},\n { createRedactor: createValueRedactor, TEXT_RULES: providerTextRules } = {},\n) {\n if (typeof createValueRedactor !== 'function')\n throw new TypeError('A value redactor factory is required');\n if (!Array.isArray(policy.text) && !providerTextRules)\n throw new TypeError('Default text rules are required');\n const limits = resolveLimits(policy.limits);\n const version = policy.version ?? '1';\n if (\n typeof version !== 'string' ||\n !version ||\n version.length > limits.maxStringLength\n )\n throw new TypeError('Invalid redaction version');\n const { fields, unknownFields, hash, text } = policy;\n const textRules = text ?? Object.values(providerTextRules);\n const engine = createValueRedactor({\n fields,\n unknownFields,\n hash:\n typeof hash === 'function' ? (value) => hash.call(policy, value) : hash,\n limits: { ...limits, maxOutputSize: limits.maxRecordSize },\n text: text\n ? textRules.map(({ name, pattern, requiresHash, replace }) => ({\n name,\n pattern,\n requiresHash,\n replace:\n typeof replace === 'function'\n ? function (match) {\n return replace.call(this, match, api);\n }\n : replace,\n }))\n : textRules,\n });\n let active;\n const api = {\n version,\n limits,\n mask: engine.mask,\n redactText(value) {\n return (active?.walk ?? engine.createSession()).redactText(value);\n },\n\n redactValue(value) {\n const walk = engine.createSession();\n const result = walk.redactValue(value);\n if (active && walk.truncated) active.truncated = true;\n return JSON.stringify(result).length <= limits.maxRecordSize\n ? result\n : MARKERS.LIMIT;\n },\n\n redact(draft) {\n const previous = active;\n const walk = engine.createSession();\n active = { walk, truncated: false };\n try {\n let didTruncate = false;\n const record = {};\n for (const key of [\n 'runId',\n 'seq',\n 'at',\n 'level',\n 'area',\n 'scope',\n 'message',\n ])\n define(\n record,\n key,\n typeof draft[key] === 'string' && !['runId', 'level'].includes(key)\n ? walk.redactText(draft[key])\n : draft[key],\n );\n record.redactionVersion = version;\n if (draft.context) record.context = walk.redactValue(draft.context);\n const data = draft.data;\n if (isError(data)) {\n const converted = walk.redactValue(data);\n record.error =\n typeof converted === 'string'\n ? { name: 'Error', message: converted }\n : converted;\n } else if (data !== undefined) {\n if (\n data &&\n typeof data === 'object' &&\n !Array.isArray(data) &&\n [Object.prototype, null].includes(Object.getPrototypeOf(data))\n ) {\n const error =\n walk.fieldRule('error') === 'drop'\n ? undefined\n : own(data, 'error');\n const promoted = isError(error);\n if (promoted) {\n const converted = walk.redactError(error, 'error');\n if (converted !== undefined) record.error = converted;\n }\n const values = {};\n let count = 0;\n for (const key of Reflect.ownKeys(data)) {\n if (++count > limits.maxKeys) {\n define(values, '[truncated]', MARKERS.LIMIT);\n didTruncate = true;\n break;\n }\n if (key === 'error' && promoted) continue;\n const descriptor = Object.getOwnPropertyDescriptor(data, key);\n if (typeof key === 'string' && descriptor?.enumerable)\n Object.defineProperty(values, key, descriptor);\n }\n const converted = walk.redactValue(values);\n record.fields =\n converted &&\n typeof converted === 'object' &&\n !Array.isArray(converted)\n ? converted\n : { value: converted };\n } else record.fields = { value: walk.redactValue(data) };\n }\n if (walk.truncated || active.truncated || didTruncate)\n record.truncated = true;\n if (JSON.stringify(record).length > limits.maxRecordSize) {\n delete record.fields;\n delete record.context;\n delete record.error;\n record.fields = { value: MARKERS.LIMIT };\n record.truncated = true;\n if (JSON.stringify(record).length > limits.maxRecordSize)\n throw new TypeError('Record headers exceed size limit');\n }\n return record;\n } finally {\n active = previous;\n }\n },\n };\n if (engine.hash) api.hash = engine.hash;\n return Object.freeze(api);\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/redaction/index.js"],"sourcesContent":["import {\n copyMetadata,\n define,\n isError,\n own,\n resolveLimits,\n} from '../core/common.js';\nimport { MARKERS } from '../core/constants.js';\n\nexport function createRedactor(\n policy = {},\n { createRedactor: createValueRedactor, TEXT_RULES: providerTextRules } = {},\n) {\n if (typeof createValueRedactor !== 'function')\n throw new TypeError('A value redactor factory is required');\n if (!Array.isArray(policy.text) && !providerTextRules)\n throw new TypeError('Default text rules are required');\n const limits = resolveLimits(policy.limits);\n const version = policy.version ?? '1';\n if (\n typeof version !== 'string' ||\n !version ||\n version.length > limits.maxStringLength\n )\n throw new TypeError('Invalid redaction version');\n const { fields, unknownFields, hash, text } = policy;\n const textRules = text ?? Object.values(providerTextRules);\n const engine = createValueRedactor({\n fields,\n unknownFields,\n hash:\n typeof hash === 'function' ? (value) => hash.call(policy, value) : hash,\n limits: { ...limits, maxOutputSize: limits.maxRecordSize },\n text: text\n ? textRules.map(({ name, pattern, requiresHash, replace }) => ({\n name,\n pattern,\n requiresHash,\n replace:\n typeof replace === 'function'\n ? function (match) {\n return replace.call(this, match, api);\n }\n : replace,\n }))\n : textRules,\n });\n let active;\n const api = {\n version,\n limits,\n mask: engine.mask,\n redactText(value) {\n return (active?.walk ?? engine.createSession()).redactText(value);\n },\n\n redactValue(value) {\n const walk = engine.createSession();\n const result = walk.redactValue(value);\n if (active && walk.truncated) active.truncated = true;\n return JSON.stringify(result).length <= limits.maxRecordSize\n ? result\n : MARKERS.LIMIT;\n },\n\n redact(draft) {\n const previous = active;\n const walk = engine.createSession();\n active = { walk, truncated: false };\n try {\n let didTruncate = false;\n const record = {};\n for (const key of [\n 'runId',\n 'seq',\n 'at',\n 'level',\n 'area',\n 'scope',\n 'message',\n ])\n define(\n record,\n key,\n typeof draft[key] === 'string' && !['runId', 'level'].includes(key)\n ? walk.redactText(draft[key])\n : draft[key],\n );\n record.redactionVersion = version;\n const metadata = copyMetadata(draft.metadata);\n if (metadata) record.metadata = metadata;\n if (draft.context) record.context = walk.redactValue(draft.context);\n const data = draft.data;\n if (isError(data)) {\n const converted = walk.redactValue(data);\n record.error =\n typeof converted === 'string'\n ? { name: 'Error', message: converted }\n : converted;\n } else if (data !== undefined) {\n if (\n data &&\n typeof data === 'object' &&\n !Array.isArray(data) &&\n [Object.prototype, null].includes(Object.getPrototypeOf(data))\n ) {\n const error =\n walk.fieldRule('error') === 'drop'\n ? undefined\n : own(data, 'error');\n const promoted = isError(error);\n if (promoted) {\n const converted = walk.redactError(error, 'error');\n if (converted !== undefined) record.error = converted;\n }\n const values = {};\n let count = 0;\n for (const key of Reflect.ownKeys(data)) {\n if (++count > limits.maxKeys) {\n define(values, '[truncated]', MARKERS.LIMIT);\n didTruncate = true;\n break;\n }\n if (key === 'error' && promoted) continue;\n const descriptor = Object.getOwnPropertyDescriptor(data, key);\n if (typeof key === 'string' && descriptor?.enumerable)\n Object.defineProperty(values, key, descriptor);\n }\n const converted = walk.redactValue(values);\n record.fields =\n converted &&\n typeof converted === 'object' &&\n !Array.isArray(converted)\n ? converted\n : { value: converted };\n } else record.fields = { value: walk.redactValue(data) };\n }\n if (walk.truncated || active.truncated || didTruncate)\n record.truncated = true;\n if (JSON.stringify(record).length > limits.maxRecordSize) {\n delete record.fields;\n delete record.context;\n delete record.error;\n record.fields = { value: MARKERS.LIMIT };\n record.truncated = true;\n if (JSON.stringify(record).length > limits.maxRecordSize)\n throw new TypeError('Record headers exceed size limit');\n }\n return record;\n } finally {\n active = previous;\n }\n },\n };\n if (engine.hash) api.hash = engine.hash;\n return Object.freeze(api);\n}\n"],"names":[],"mappings":"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"}
|
package/dist/sip/index.cjs
CHANGED