@bazariodev/docket 0.0.0-stage → 1.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 (96) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/LICENSE +21 -0
  3. package/README.md +985 -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-BLf-eCDO.cjs +53 -0
  15. package/dist/chunk-BLf-eCDO.cjs.map +1 -0
  16. package/dist/chunk-CEhpwtwJ.cjs +379 -0
  17. package/dist/chunk-CEhpwtwJ.cjs.map +1 -0
  18. package/dist/chunk-CSS3f4_M.js +46 -0
  19. package/dist/chunk-CSS3f4_M.js.map +1 -0
  20. package/dist/chunk-CXZYNALm.cjs +124 -0
  21. package/dist/chunk-CXZYNALm.cjs.map +1 -0
  22. package/dist/chunk-DYcNnkOV.js +50 -0
  23. package/dist/chunk-DYcNnkOV.js.map +1 -0
  24. package/dist/chunk-DkvWLziD.js +437 -0
  25. package/dist/chunk-DkvWLziD.js.map +1 -0
  26. package/dist/chunk-DqK_3eFr.cjs +53 -0
  27. package/dist/chunk-DqK_3eFr.cjs.map +1 -0
  28. package/dist/chunk-LRCHwVuE.js +110 -0
  29. package/dist/chunk-LRCHwVuE.js.map +1 -0
  30. package/dist/chunk-ieB8yTEn.cjs +439 -0
  31. package/dist/chunk-ieB8yTEn.cjs.map +1 -0
  32. package/dist/client/index.cjs +167 -0
  33. package/dist/client/index.cjs.map +1 -0
  34. package/dist/client/index.d.cts +40 -0
  35. package/dist/client/index.d.ts +40 -0
  36. package/dist/client/index.js +165 -0
  37. package/dist/client/index.js.map +1 -0
  38. package/dist/constants.d.cts +4 -0
  39. package/dist/constants.d.ts +4 -0
  40. package/dist/core/constants.d.cts +43 -0
  41. package/dist/core/constants.d.ts +43 -0
  42. package/dist/devtools/index.cjs +37 -0
  43. package/dist/devtools/index.cjs.map +1 -0
  44. package/dist/devtools/index.d.cts +11 -0
  45. package/dist/devtools/index.d.ts +11 -0
  46. package/dist/devtools/index.js +35 -0
  47. package/dist/devtools/index.js.map +1 -0
  48. package/dist/export/index.cjs +139 -0
  49. package/dist/export/index.cjs.map +1 -0
  50. package/dist/export/index.d.cts +49 -0
  51. package/dist/export/index.d.ts +49 -0
  52. package/dist/export/index.js +137 -0
  53. package/dist/export/index.js.map +1 -0
  54. package/dist/history/index.cjs +30 -0
  55. package/dist/history/index.cjs.map +1 -0
  56. package/dist/history/index.d.cts +11 -0
  57. package/dist/history/index.d.ts +11 -0
  58. package/dist/history/index.js +28 -0
  59. package/dist/history/index.js.map +1 -0
  60. package/dist/index.cjs +14 -0
  61. package/dist/index.cjs.map +1 -0
  62. package/dist/index.d.cts +159 -0
  63. package/dist/index.d.ts +159 -0
  64. package/dist/index.js +6 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/indexeddb/index.cjs +26 -0
  67. package/dist/indexeddb/index.cjs.map +1 -0
  68. package/dist/indexeddb/index.d.cts +61 -0
  69. package/dist/indexeddb/index.d.ts +61 -0
  70. package/dist/indexeddb/index.js +23 -0
  71. package/dist/indexeddb/index.js.map +1 -0
  72. package/dist/redaction/index.cjs +154 -0
  73. package/dist/redaction/index.cjs.map +1 -0
  74. package/dist/redaction/index.d.cts +70 -0
  75. package/dist/redaction/index.d.ts +70 -0
  76. package/dist/redaction/index.js +152 -0
  77. package/dist/redaction/index.js.map +1 -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 +31 -0
  87. package/dist/storage/contracts.d.ts +31 -0
  88. package/dist/upload/constants.d.cts +17 -0
  89. package/dist/upload/constants.d.ts +17 -0
  90. package/dist/upload/index.cjs +246 -0
  91. package/dist/upload/index.cjs.map +1 -0
  92. package/dist/upload/index.d.cts +51 -0
  93. package/dist/upload/index.d.ts +51 -0
  94. package/dist/upload/index.js +244 -0
  95. package/dist/upload/index.js.map +1 -0
  96. package/package.json +150 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../src/sip/constants.js","../../src/sip/index.js"],"sourcesContent":["export const SIP_ERRORS = /* @__PURE__ */ Object.freeze({\n CALLBACK: 'SIP display-name callback must return a string without controls',\n RESULT_LIMIT: 'SIP display name exceeds maxStringLength',\n OUTPUT_LIMIT: 'SIP output exceeds its size limit',\n});\n","import { MARKERS } from '../core/constants.js';\nimport { SIP_ERRORS } from './constants.js';\n\nconst sdpRule = (name, pattern, replace) =>\n Object.freeze({ name, pattern, replace });\n\nfunction hasUnclosedQuote(text) {\n let quoted = false;\n let escaped = false;\n for (const character of text) {\n if (escaped) {\n escaped = false;\n continue;\n }\n if (character === '\\\\') {\n escaped = true;\n continue;\n }\n if (character === '\"') quoted = !quoted;\n }\n return quoted;\n}\n\nfunction resize(budget, change) {\n budget.size += change;\n if (budget.size > budget.limit) throw new RangeError(SIP_ERRORS.OUTPUT_LIMIT);\n}\n\nfunction readDisplayName(value) {\n const name = value.trim();\n for (const character of name) {\n const code = character.charCodeAt(0);\n if ((code < 32 && code !== 9) || (code >= 127 && code <= 159)) return null;\n }\n if (name.startsWith('\"')) {\n if (!/^\"(?:\\\\[\\s\\S]|[^\"\\\\])*\"$/.test(name)) return null;\n return name.slice(1, -1).replace(/\\\\([\\s\\S])/g, '$1');\n }\n return /[\"\\\\]/.test(name) ? null : name;\n}\n\nfunction hasValidParameters(value) {\n return /^(?:[ \\t]*;[ \\t]*[\\w.!%*+`'~-]+(?:[ \\t]*=[ \\t]*(?:[\\w.!%*+`'~-]+|\\[[\\da-f:.]+\\]|\"(?:[^\"\\\\\\r\\n]|\\\\[^\\r\\n])*\"))?)*[ \\t]*$/i.test(\n value,\n );\n}\n\nfunction isBareIdentity(value) {\n if (/^\\s*(?:(?:sips?:|tel:)[^\\s<>\"\\\\]+|\\*)\\s*$/i.test(value)) return true;\n const address = /^[ \\t]*(?:sips?:|tel:)[^\\s<>;?\"\\\\]+/i.exec(value);\n return Boolean(address) && hasValidParameters(value.slice(address[0].length));\n}\n\nfunction parseIdentity(value) {\n const parts = [];\n let start = 0;\n let angle = -1;\n let close = -1;\n let inAddress = false;\n let quoted = false;\n let escaped = false;\n const append = (end) => {\n const segment = value.slice(start, end);\n let name = null;\n if (angle < 0) {\n if (!isBareIdentity(segment)) return false;\n } else {\n if (!hasValidParameters(value.slice(close + 1, end))) return false;\n name = readDisplayName(value.slice(start, angle));\n if (name === null) return false;\n }\n parts.push({ start, end, angle, name });\n return true;\n };\n for (let index = 0; index < value.length; index++) {\n const character = value[index];\n if (escaped) {\n escaped = false;\n continue;\n }\n if (quoted && character === '\\\\') {\n escaped = true;\n continue;\n }\n if (character === '\"') quoted = !quoted;\n if (quoted) continue;\n if (character === '<') {\n if (\n angle >= 0 ||\n !/^(?:sips?:|tel:)/i.test(value.slice(index + 1, index + 6))\n )\n return null;\n angle = index;\n inAddress = true;\n } else if (character === '>') {\n if (\n !inAddress ||\n !/^(?:sips?:|tel:)[^\\s<>\"\\\\]+$/i.test(value.slice(angle + 1, index))\n )\n return null;\n inAddress = false;\n close = index;\n } else if (character === ',' && !inAddress) {\n if (!append(index)) return null;\n start = index + 1;\n angle = -1;\n close = -1;\n }\n }\n return quoted || inAddress || !append(value.length) ? null : parts;\n}\n\nfunction redactIdentity(value, redactor, redactDisplayName, budget) {\n const segments = parseIdentity(value);\n if (!segments) {\n const replacement = ` ${MARKERS.MASK}`;\n resize(budget, replacement.length - value.length);\n return replacement;\n }\n const parts = [];\n for (const { start, end, angle, name } of segments) {\n if (name === null) {\n parts.push(value.slice(start, end));\n continue;\n }\n let result = '';\n if (name)\n result = redactDisplayName ? redactDisplayName(name) : MARKERS.MASK;\n if (typeof result !== 'string') throw new TypeError(SIP_ERRORS.CALLBACK);\n if (result.length > redactor.limits.maxStringLength)\n throw new RangeError(SIP_ERRORS.RESULT_LIMIT);\n let length = result ? 4 + result.length : 1;\n for (const character of result) {\n const code = character.charCodeAt(0);\n if (code < 32 || (code >= 127 && code <= 159))\n throw new TypeError(SIP_ERRORS.CALLBACK);\n if (character === '\"' || character === '\\\\') length++;\n }\n resize(budget, length - (angle - start));\n const prefix = result ? ` \"${result.replace(/[\"\\\\]/g, '\\\\$&')}\" ` : ' ';\n parts.push(`${prefix}${value.slice(angle, end)}`);\n }\n return parts.join(',');\n}\nfunction createSdpTextRules(TEXT_RULES) {\n return Object.freeze([\n sdpRule(\n 'ice',\n /a=ice-(?:pwd|ufrag):[^\\r\\n\\\\\"]*/gi,\n (match) => `${match.slice(0, match.indexOf(':') + 1)}[redacted]`,\n ),\n sdpRule('sdes', /a=crypto:[^\\r\\n\\\\\"]*/gi, () => 'a=crypto:[redacted]'),\n sdpRule(\n 'fingerprint',\n /a=fingerprint:[^\\r\\n\\\\\"]*/gi,\n () => 'a=fingerprint:[redacted]',\n ),\n sdpRule(\n 'origin',\n /(?:^|[\\r\\n]|\\\\[rn])o=[^\\s]+/g,\n (match) => `${match.slice(0, match.indexOf('o=') + 2)}[redacted]`,\n ),\n sdpRule(\n 'mediaIdentity',\n /a=(?:msid|identity):[^\\r\\n\\\\\"]*/gi,\n (match) => `${match.slice(0, match.indexOf(':') + 1)}[redacted]`,\n ),\n sdpRule(\n 'sourceIdentity',\n /(?:^|[\\r\\n])a=ssrc:\\d+[ \\t]+(?:cname|msid|mslabel|label):[^\\r\\n]*/gi,\n (match) =>\n `${match.slice(0, match.indexOf(':', match.indexOf(':') + 1) + 1)}[redacted]`,\n ),\n sdpRule(\n 'serializedSourceIdentity',\n /(?:\\\\[rn]|(?<=\"))a=ssrc:\\d+[ \\t]+(?:cname|msid|mslabel|label):(?:\\\\(?![rn])[^\\r\\n]|[^\\r\\n\\\\\"])*/gi,\n (match) =>\n `${match.slice(0, match.indexOf(':', match.indexOf(':') + 1) + 1)}[redacted]`,\n ),\n sdpRule(\n 'localAddress',\n /(?<![\\w-])[\\w-]+\\.local\\b/gi,\n () => '[local-address]',\n ),\n sdpRule(\n 'turn',\n /(?:\"(?:credential|password|username)\"\\s*:\\s*(?:\"(?:\\\\.|[^\"\\\\])*\"|[^,}\\s]+)|(?:credential|password|username)\\s*=\\s*(?:\"(?:\\\\.|[^\"\\\\])*\"|[^,}\\s]+))/gi,\n (match) => `${match.slice(0, match.search(/[:=]/) + 1)}\"[redacted]\"`,\n ),\n TEXT_RULES.ipv4,\n TEXT_RULES.ipv6,\n TEXT_RULES.urlCredentials,\n TEXT_RULES.sipUri,\n TEXT_RULES.telUri,\n sdpRule('dtmf', /Signal\\s*=\\s*[^\\r\\n]+/gi, () => 'Signal=*'),\n ]);\n}\n\nexport function describeSipMessage(text) {\n const first = text.split(/\\r?\\n/, 1)[0];\n const result = {};\n if (/^SIP\\/2\\.0\\s+\\d{3}/i.test(first))\n result.status = Number(first.split(/\\s+/)[1]);\n else {\n const match = /^([A-Z]+)\\s+\\S+\\s+SIP\\/2\\.0/i.exec(first);\n if (match) result.method = match[1];\n }\n const callId = /^(?:Call-ID|i)\\s*:\\s*([^\\r\\n]+)/im.exec(text);\n const cseq = /^CSeq\\s*:\\s*([^\\r\\n]+)/im.exec(text);\n if (callId) result.callId = callId[1].trim();\n if (cseq) result.cseq = cseq[1].trim();\n return Object.freeze(result);\n}\n\nfunction redactSipMessage(\n text,\n { redactor, redactDisplayName },\n TEXT_RULES,\n SDP_TEXT_RULES,\n) {\n if (\n redactDisplayName !== undefined &&\n typeof redactDisplayName !== 'function'\n )\n throw new TypeError(SIP_ERRORS.CALLBACK);\n const limit = redactor.limits.maxStringLength * 4;\n if (text.length > limit) return MARKERS.LIMIT;\n const unfolded = text.replace(/\\r?\\n[ \\t]+/g, ' ');\n const separator = /\\r?\\n\\r?\\n/.exec(unfolded);\n let headers = separator ? unfolded.slice(0, separator.index) : unfolded;\n let body = separator\n ? unfolded.slice(separator.index + separator[0].length)\n : '';\n headers = headers.split(/\\r?\\n/).join('\\r\\n');\n const budget = {\n size: headers.length + body.length + (separator ? 4 : 0),\n limit,\n };\n resize(budget, 0);\n const replace = (value, pattern, render) =>\n value.replace(pattern, (match) => {\n const replacement = render(match);\n resize(budget, replacement.length - match.length);\n return replacement;\n });\n const contentType =\n /^(?:Content-Type|c)\\s*:\\s*([^;\\r\\n]+)/im\n .exec(headers)?.[1]\n .trim()\n .toLowerCase() ?? 'unknown';\n headers = replace(\n headers,\n /^(?:(?:Proxy-)?Authorization|WWW-Authenticate|Proxy-Authenticate)\\s*:[^\\r\\n]*/gim,\n (header) =>\n hasUnclosedQuote(header)\n ? `${header.slice(0, header.indexOf(':'))}: [redacted]`\n : header.replace(\n /\\b(username|response|nonce|cnonce|opaque)\\s*=\\s*(?:\"(?:\\\\.|[^\"\\\\])*\"|[^,\\s]+)/gi,\n (_, key) => `${key}=\"[redacted]\"`,\n ),\n );\n headers = headers\n .split(/\\r?\\n/)\n .map((line) => {\n const header =\n /^((?:From|To|Contact|P-Asserted-Identity|P-Preferred-Identity|Refer-To|Referred-By|Diversion|History-Info|Remote-Party-ID|P-Called-Party-ID|Reply-To|f|t|m|r|b)\\s*:)(.*)$/i.exec(\n line,\n );\n if (!header) return line;\n const value = redactIdentity(\n header[2],\n redactor,\n redactDisplayName,\n budget,\n );\n return `${header[1]}${value}`;\n })\n .join('\\r\\n');\n for (const rule of [\n TEXT_RULES.urlCredentials,\n TEXT_RULES.sipUri,\n TEXT_RULES.telUri,\n ])\n headers = replace(headers, rule.pattern, (match) => rule.replace(match));\n if (body) {\n if (\n contentType === 'application/sdp' ||\n contentType === 'application/dtmf-relay'\n ) {\n for (const rule of SDP_TEXT_RULES)\n body = replace(body, rule.pattern, (match) => rule.replace(match));\n } else {\n const replacement = `[${contentType} ${new TextEncoder().encode(body).length} bytes]`;\n resize(budget, replacement.length - body.length);\n body = replacement;\n }\n }\n const addresses = (value) => {\n const ipv4 = replace(value, TEXT_RULES.ipv4.pattern, (match) =>\n TEXT_RULES.ipv4.replace(match),\n );\n return replace(ipv4, TEXT_RULES.ipv6.pattern, (match) =>\n TEXT_RULES.ipv6.replace(match),\n );\n };\n return `${addresses(headers)}${separator ? `\\r\\n\\r\\n${body}` : ''}`;\n}\n\nexport function createSipTools(textRules) {\n if (\n !textRules?.ipv4 ||\n !textRules.ipv6 ||\n !textRules.urlCredentials ||\n !textRules.sipUri ||\n !textRules.telUri\n )\n throw new TypeError('SIP text rules are required');\n const SDP_TEXT_RULES = createSdpTextRules(textRules);\n return Object.freeze({\n SDP_TEXT_RULES,\n redactSipMessage: (text, options) =>\n redactSipMessage(text, options, textRules, SDP_TEXT_RULES),\n describeSipMessage,\n });\n}\n"],"names":["MARKERS"],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { Redactor } from "../index.cjs";
2
+
3
+ export type SipTextRule = Readonly<{
4
+ name: string;
5
+ pattern: RegExp;
6
+ requiresHash?: boolean;
7
+ replace: (match: string, ...unused: never[]) => string;
8
+ }>;
9
+ export type SipTextRules = Readonly<{
10
+ ipv4: SipTextRule;
11
+ ipv6: SipTextRule;
12
+ urlCredentials: SipTextRule;
13
+ sipUri: SipTextRule;
14
+ telUri: SipTextRule;
15
+ }>;
16
+
17
+ export type SipTools = Readonly<{
18
+ SDP_TEXT_RULES: readonly SipTextRule[];
19
+ redactSipMessage: (
20
+ text: string,
21
+ options: Readonly<{
22
+ redactor: Redactor;
23
+ redactDisplayName?: (value: string) => string;
24
+ }>,
25
+ ) => string;
26
+ describeSipMessage: typeof describeSipMessage;
27
+ }>;
28
+ export declare function createSipTools(textRules: SipTextRules): SipTools;
29
+ export declare function describeSipMessage(text: string): Readonly<{
30
+ method?: string;
31
+ status?: number;
32
+ callId?: string;
33
+ cseq?: string;
34
+ }>;
@@ -0,0 +1,34 @@
1
+ import type { Redactor } from '../index.js';
2
+
3
+ export type SipTextRule = Readonly<{
4
+ name: string;
5
+ pattern: RegExp;
6
+ requiresHash?: boolean;
7
+ replace: (match: string, ...unused: never[]) => string;
8
+ }>;
9
+ export type SipTextRules = Readonly<{
10
+ ipv4: SipTextRule;
11
+ ipv6: SipTextRule;
12
+ urlCredentials: SipTextRule;
13
+ sipUri: SipTextRule;
14
+ telUri: SipTextRule;
15
+ }>;
16
+
17
+ export type SipTools = Readonly<{
18
+ SDP_TEXT_RULES: readonly SipTextRule[];
19
+ redactSipMessage: (
20
+ text: string,
21
+ options: Readonly<{
22
+ redactor: Redactor;
23
+ redactDisplayName?: (value: string) => string;
24
+ }>,
25
+ ) => string;
26
+ describeSipMessage: typeof describeSipMessage;
27
+ }>;
28
+ export declare function createSipTools(textRules: SipTextRules): SipTools;
29
+ export declare function describeSipMessage(text: string): Readonly<{
30
+ method?: string;
31
+ status?: number;
32
+ callId?: string;
33
+ cseq?: string;
34
+ }>;
@@ -0,0 +1,333 @@
1
+ import { M as MARKERS } from '../chunk-CSS3f4_M.js';
2
+
3
+ const SIP_ERRORS = /* @__PURE__ */ Object.freeze({
4
+ CALLBACK: 'SIP display-name callback must return a string without controls',
5
+ RESULT_LIMIT: 'SIP display name exceeds maxStringLength',
6
+ OUTPUT_LIMIT: 'SIP output exceeds its size limit',
7
+ });
8
+
9
+ const sdpRule = (name, pattern, replace) =>
10
+ Object.freeze({ name, pattern, replace });
11
+
12
+ function hasUnclosedQuote(text) {
13
+ let quoted = false;
14
+ let escaped = false;
15
+ for (const character of text) {
16
+ if (escaped) {
17
+ escaped = false;
18
+ continue;
19
+ }
20
+ if (character === '\\') {
21
+ escaped = true;
22
+ continue;
23
+ }
24
+ if (character === '"') quoted = !quoted;
25
+ }
26
+ return quoted;
27
+ }
28
+
29
+ function resize(budget, change) {
30
+ budget.size += change;
31
+ if (budget.size > budget.limit) throw new RangeError(SIP_ERRORS.OUTPUT_LIMIT);
32
+ }
33
+
34
+ function readDisplayName(value) {
35
+ const name = value.trim();
36
+ for (const character of name) {
37
+ const code = character.charCodeAt(0);
38
+ if ((code < 32 && code !== 9) || (code >= 127 && code <= 159)) return null;
39
+ }
40
+ if (name.startsWith('"')) {
41
+ if (!/^"(?:\\[\s\S]|[^"\\])*"$/.test(name)) return null;
42
+ return name.slice(1, -1).replace(/\\([\s\S])/g, '$1');
43
+ }
44
+ return /["\\]/.test(name) ? null : name;
45
+ }
46
+
47
+ function hasValidParameters(value) {
48
+ return /^(?:[ \t]*;[ \t]*[\w.!%*+`'~-]+(?:[ \t]*=[ \t]*(?:[\w.!%*+`'~-]+|\[[\da-f:.]+\]|"(?:[^"\\\r\n]|\\[^\r\n])*"))?)*[ \t]*$/i.test(
49
+ value,
50
+ );
51
+ }
52
+
53
+ function isBareIdentity(value) {
54
+ if (/^\s*(?:(?:sips?:|tel:)[^\s<>"\\]+|\*)\s*$/i.test(value)) return true;
55
+ const address = /^[ \t]*(?:sips?:|tel:)[^\s<>;?"\\]+/i.exec(value);
56
+ return Boolean(address) && hasValidParameters(value.slice(address[0].length));
57
+ }
58
+
59
+ function parseIdentity(value) {
60
+ const parts = [];
61
+ let start = 0;
62
+ let angle = -1;
63
+ let close = -1;
64
+ let inAddress = false;
65
+ let quoted = false;
66
+ let escaped = false;
67
+ const append = (end) => {
68
+ const segment = value.slice(start, end);
69
+ let name = null;
70
+ if (angle < 0) {
71
+ if (!isBareIdentity(segment)) return false;
72
+ } else {
73
+ if (!hasValidParameters(value.slice(close + 1, end))) return false;
74
+ name = readDisplayName(value.slice(start, angle));
75
+ if (name === null) return false;
76
+ }
77
+ parts.push({ start, end, angle, name });
78
+ return true;
79
+ };
80
+ for (let index = 0; index < value.length; index++) {
81
+ const character = value[index];
82
+ if (escaped) {
83
+ escaped = false;
84
+ continue;
85
+ }
86
+ if (quoted && character === '\\') {
87
+ escaped = true;
88
+ continue;
89
+ }
90
+ if (character === '"') quoted = !quoted;
91
+ if (quoted) continue;
92
+ if (character === '<') {
93
+ if (
94
+ angle >= 0 ||
95
+ !/^(?:sips?:|tel:)/i.test(value.slice(index + 1, index + 6))
96
+ )
97
+ return null;
98
+ angle = index;
99
+ inAddress = true;
100
+ } else if (character === '>') {
101
+ if (
102
+ !inAddress ||
103
+ !/^(?:sips?:|tel:)[^\s<>"\\]+$/i.test(value.slice(angle + 1, index))
104
+ )
105
+ return null;
106
+ inAddress = false;
107
+ close = index;
108
+ } else if (character === ',' && !inAddress) {
109
+ if (!append(index)) return null;
110
+ start = index + 1;
111
+ angle = -1;
112
+ close = -1;
113
+ }
114
+ }
115
+ return quoted || inAddress || !append(value.length) ? null : parts;
116
+ }
117
+
118
+ function redactIdentity(value, redactor, redactDisplayName, budget) {
119
+ const segments = parseIdentity(value);
120
+ if (!segments) {
121
+ const replacement = ` ${MARKERS.MASK}`;
122
+ resize(budget, replacement.length - value.length);
123
+ return replacement;
124
+ }
125
+ const parts = [];
126
+ for (const { start, end, angle, name } of segments) {
127
+ if (name === null) {
128
+ parts.push(value.slice(start, end));
129
+ continue;
130
+ }
131
+ let result = '';
132
+ if (name)
133
+ result = redactDisplayName ? redactDisplayName(name) : MARKERS.MASK;
134
+ if (typeof result !== 'string') throw new TypeError(SIP_ERRORS.CALLBACK);
135
+ if (result.length > redactor.limits.maxStringLength)
136
+ throw new RangeError(SIP_ERRORS.RESULT_LIMIT);
137
+ let length = result ? 4 + result.length : 1;
138
+ for (const character of result) {
139
+ const code = character.charCodeAt(0);
140
+ if (code < 32 || (code >= 127 && code <= 159))
141
+ throw new TypeError(SIP_ERRORS.CALLBACK);
142
+ if (character === '"' || character === '\\') length++;
143
+ }
144
+ resize(budget, length - (angle - start));
145
+ const prefix = result ? ` "${result.replace(/["\\]/g, '\\$&')}" ` : ' ';
146
+ parts.push(`${prefix}${value.slice(angle, end)}`);
147
+ }
148
+ return parts.join(',');
149
+ }
150
+ function createSdpTextRules(TEXT_RULES) {
151
+ return Object.freeze([
152
+ sdpRule(
153
+ 'ice',
154
+ /a=ice-(?:pwd|ufrag):[^\r\n\\"]*/gi,
155
+ (match) => `${match.slice(0, match.indexOf(':') + 1)}[redacted]`,
156
+ ),
157
+ sdpRule('sdes', /a=crypto:[^\r\n\\"]*/gi, () => 'a=crypto:[redacted]'),
158
+ sdpRule(
159
+ 'fingerprint',
160
+ /a=fingerprint:[^\r\n\\"]*/gi,
161
+ () => 'a=fingerprint:[redacted]',
162
+ ),
163
+ sdpRule(
164
+ 'origin',
165
+ /(?:^|[\r\n]|\\[rn])o=[^\s]+/g,
166
+ (match) => `${match.slice(0, match.indexOf('o=') + 2)}[redacted]`,
167
+ ),
168
+ sdpRule(
169
+ 'mediaIdentity',
170
+ /a=(?:msid|identity):[^\r\n\\"]*/gi,
171
+ (match) => `${match.slice(0, match.indexOf(':') + 1)}[redacted]`,
172
+ ),
173
+ sdpRule(
174
+ 'sourceIdentity',
175
+ /(?:^|[\r\n])a=ssrc:\d+[ \t]+(?:cname|msid|mslabel|label):[^\r\n]*/gi,
176
+ (match) =>
177
+ `${match.slice(0, match.indexOf(':', match.indexOf(':') + 1) + 1)}[redacted]`,
178
+ ),
179
+ sdpRule(
180
+ 'serializedSourceIdentity',
181
+ /(?:\\[rn]|(?<="))a=ssrc:\d+[ \t]+(?:cname|msid|mslabel|label):(?:\\(?![rn])[^\r\n]|[^\r\n\\"])*/gi,
182
+ (match) =>
183
+ `${match.slice(0, match.indexOf(':', match.indexOf(':') + 1) + 1)}[redacted]`,
184
+ ),
185
+ sdpRule(
186
+ 'localAddress',
187
+ /(?<![\w-])[\w-]+\.local\b/gi,
188
+ () => '[local-address]',
189
+ ),
190
+ sdpRule(
191
+ 'turn',
192
+ /(?:"(?:credential|password|username)"\s*:\s*(?:"(?:\\.|[^"\\])*"|[^,}\s]+)|(?:credential|password|username)\s*=\s*(?:"(?:\\.|[^"\\])*"|[^,}\s]+))/gi,
193
+ (match) => `${match.slice(0, match.search(/[:=]/) + 1)}"[redacted]"`,
194
+ ),
195
+ TEXT_RULES.ipv4,
196
+ TEXT_RULES.ipv6,
197
+ TEXT_RULES.urlCredentials,
198
+ TEXT_RULES.sipUri,
199
+ TEXT_RULES.telUri,
200
+ sdpRule('dtmf', /Signal\s*=\s*[^\r\n]+/gi, () => 'Signal=*'),
201
+ ]);
202
+ }
203
+
204
+ function describeSipMessage(text) {
205
+ const first = text.split(/\r?\n/, 1)[0];
206
+ const result = {};
207
+ if (/^SIP\/2\.0\s+\d{3}/i.test(first))
208
+ result.status = Number(first.split(/\s+/)[1]);
209
+ else {
210
+ const match = /^([A-Z]+)\s+\S+\s+SIP\/2\.0/i.exec(first);
211
+ if (match) result.method = match[1];
212
+ }
213
+ const callId = /^(?:Call-ID|i)\s*:\s*([^\r\n]+)/im.exec(text);
214
+ const cseq = /^CSeq\s*:\s*([^\r\n]+)/im.exec(text);
215
+ if (callId) result.callId = callId[1].trim();
216
+ if (cseq) result.cseq = cseq[1].trim();
217
+ return Object.freeze(result);
218
+ }
219
+
220
+ function redactSipMessage(
221
+ text,
222
+ { redactor, redactDisplayName },
223
+ TEXT_RULES,
224
+ SDP_TEXT_RULES,
225
+ ) {
226
+ if (
227
+ redactDisplayName !== undefined &&
228
+ typeof redactDisplayName !== 'function'
229
+ )
230
+ throw new TypeError(SIP_ERRORS.CALLBACK);
231
+ const limit = redactor.limits.maxStringLength * 4;
232
+ if (text.length > limit) return MARKERS.LIMIT;
233
+ const unfolded = text.replace(/\r?\n[ \t]+/g, ' ');
234
+ const separator = /\r?\n\r?\n/.exec(unfolded);
235
+ let headers = separator ? unfolded.slice(0, separator.index) : unfolded;
236
+ let body = separator
237
+ ? unfolded.slice(separator.index + separator[0].length)
238
+ : '';
239
+ headers = headers.split(/\r?\n/).join('\r\n');
240
+ const budget = {
241
+ size: headers.length + body.length + (separator ? 4 : 0),
242
+ limit,
243
+ };
244
+ resize(budget, 0);
245
+ const replace = (value, pattern, render) =>
246
+ value.replace(pattern, (match) => {
247
+ const replacement = render(match);
248
+ resize(budget, replacement.length - match.length);
249
+ return replacement;
250
+ });
251
+ const contentType =
252
+ /^(?:Content-Type|c)\s*:\s*([^;\r\n]+)/im
253
+ .exec(headers)?.[1]
254
+ .trim()
255
+ .toLowerCase() ?? 'unknown';
256
+ headers = replace(
257
+ headers,
258
+ /^(?:(?:Proxy-)?Authorization|WWW-Authenticate|Proxy-Authenticate)\s*:[^\r\n]*/gim,
259
+ (header) =>
260
+ hasUnclosedQuote(header)
261
+ ? `${header.slice(0, header.indexOf(':'))}: [redacted]`
262
+ : header.replace(
263
+ /\b(username|response|nonce|cnonce|opaque)\s*=\s*(?:"(?:\\.|[^"\\])*"|[^,\s]+)/gi,
264
+ (_, key) => `${key}="[redacted]"`,
265
+ ),
266
+ );
267
+ headers = headers
268
+ .split(/\r?\n/)
269
+ .map((line) => {
270
+ const header =
271
+ /^((?:From|To|Contact|P-Asserted-Identity|P-Preferred-Identity|Refer-To|Referred-By|Diversion|History-Info|Remote-Party-ID|P-Called-Party-ID|Reply-To|f|t|m|r|b)\s*:)(.*)$/i.exec(
272
+ line,
273
+ );
274
+ if (!header) return line;
275
+ const value = redactIdentity(
276
+ header[2],
277
+ redactor,
278
+ redactDisplayName,
279
+ budget,
280
+ );
281
+ return `${header[1]}${value}`;
282
+ })
283
+ .join('\r\n');
284
+ for (const rule of [
285
+ TEXT_RULES.urlCredentials,
286
+ TEXT_RULES.sipUri,
287
+ TEXT_RULES.telUri,
288
+ ])
289
+ headers = replace(headers, rule.pattern, (match) => rule.replace(match));
290
+ if (body) {
291
+ if (
292
+ contentType === 'application/sdp' ||
293
+ contentType === 'application/dtmf-relay'
294
+ ) {
295
+ for (const rule of SDP_TEXT_RULES)
296
+ body = replace(body, rule.pattern, (match) => rule.replace(match));
297
+ } else {
298
+ const replacement = `[${contentType} ${new TextEncoder().encode(body).length} bytes]`;
299
+ resize(budget, replacement.length - body.length);
300
+ body = replacement;
301
+ }
302
+ }
303
+ const addresses = (value) => {
304
+ const ipv4 = replace(value, TEXT_RULES.ipv4.pattern, (match) =>
305
+ TEXT_RULES.ipv4.replace(match),
306
+ );
307
+ return replace(ipv4, TEXT_RULES.ipv6.pattern, (match) =>
308
+ TEXT_RULES.ipv6.replace(match),
309
+ );
310
+ };
311
+ return `${addresses(headers)}${separator ? `\r\n\r\n${body}` : ''}`;
312
+ }
313
+
314
+ function createSipTools(textRules) {
315
+ if (
316
+ !textRules?.ipv4 ||
317
+ !textRules.ipv6 ||
318
+ !textRules.urlCredentials ||
319
+ !textRules.sipUri ||
320
+ !textRules.telUri
321
+ )
322
+ throw new TypeError('SIP text rules are required');
323
+ const SDP_TEXT_RULES = createSdpTextRules(textRules);
324
+ return Object.freeze({
325
+ SDP_TEXT_RULES,
326
+ redactSipMessage: (text, options) =>
327
+ redactSipMessage(text, options, textRules, SDP_TEXT_RULES),
328
+ describeSipMessage,
329
+ });
330
+ }
331
+
332
+ export { createSipTools, describeSipMessage };
333
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/sip/constants.js","../../src/sip/index.js"],"sourcesContent":["export const SIP_ERRORS = /* @__PURE__ */ Object.freeze({\n CALLBACK: 'SIP display-name callback must return a string without controls',\n RESULT_LIMIT: 'SIP display name exceeds maxStringLength',\n OUTPUT_LIMIT: 'SIP output exceeds its size limit',\n});\n","import { MARKERS } from '../core/constants.js';\nimport { SIP_ERRORS } from './constants.js';\n\nconst sdpRule = (name, pattern, replace) =>\n Object.freeze({ name, pattern, replace });\n\nfunction hasUnclosedQuote(text) {\n let quoted = false;\n let escaped = false;\n for (const character of text) {\n if (escaped) {\n escaped = false;\n continue;\n }\n if (character === '\\\\') {\n escaped = true;\n continue;\n }\n if (character === '\"') quoted = !quoted;\n }\n return quoted;\n}\n\nfunction resize(budget, change) {\n budget.size += change;\n if (budget.size > budget.limit) throw new RangeError(SIP_ERRORS.OUTPUT_LIMIT);\n}\n\nfunction readDisplayName(value) {\n const name = value.trim();\n for (const character of name) {\n const code = character.charCodeAt(0);\n if ((code < 32 && code !== 9) || (code >= 127 && code <= 159)) return null;\n }\n if (name.startsWith('\"')) {\n if (!/^\"(?:\\\\[\\s\\S]|[^\"\\\\])*\"$/.test(name)) return null;\n return name.slice(1, -1).replace(/\\\\([\\s\\S])/g, '$1');\n }\n return /[\"\\\\]/.test(name) ? null : name;\n}\n\nfunction hasValidParameters(value) {\n return /^(?:[ \\t]*;[ \\t]*[\\w.!%*+`'~-]+(?:[ \\t]*=[ \\t]*(?:[\\w.!%*+`'~-]+|\\[[\\da-f:.]+\\]|\"(?:[^\"\\\\\\r\\n]|\\\\[^\\r\\n])*\"))?)*[ \\t]*$/i.test(\n value,\n );\n}\n\nfunction isBareIdentity(value) {\n if (/^\\s*(?:(?:sips?:|tel:)[^\\s<>\"\\\\]+|\\*)\\s*$/i.test(value)) return true;\n const address = /^[ \\t]*(?:sips?:|tel:)[^\\s<>;?\"\\\\]+/i.exec(value);\n return Boolean(address) && hasValidParameters(value.slice(address[0].length));\n}\n\nfunction parseIdentity(value) {\n const parts = [];\n let start = 0;\n let angle = -1;\n let close = -1;\n let inAddress = false;\n let quoted = false;\n let escaped = false;\n const append = (end) => {\n const segment = value.slice(start, end);\n let name = null;\n if (angle < 0) {\n if (!isBareIdentity(segment)) return false;\n } else {\n if (!hasValidParameters(value.slice(close + 1, end))) return false;\n name = readDisplayName(value.slice(start, angle));\n if (name === null) return false;\n }\n parts.push({ start, end, angle, name });\n return true;\n };\n for (let index = 0; index < value.length; index++) {\n const character = value[index];\n if (escaped) {\n escaped = false;\n continue;\n }\n if (quoted && character === '\\\\') {\n escaped = true;\n continue;\n }\n if (character === '\"') quoted = !quoted;\n if (quoted) continue;\n if (character === '<') {\n if (\n angle >= 0 ||\n !/^(?:sips?:|tel:)/i.test(value.slice(index + 1, index + 6))\n )\n return null;\n angle = index;\n inAddress = true;\n } else if (character === '>') {\n if (\n !inAddress ||\n !/^(?:sips?:|tel:)[^\\s<>\"\\\\]+$/i.test(value.slice(angle + 1, index))\n )\n return null;\n inAddress = false;\n close = index;\n } else if (character === ',' && !inAddress) {\n if (!append(index)) return null;\n start = index + 1;\n angle = -1;\n close = -1;\n }\n }\n return quoted || inAddress || !append(value.length) ? null : parts;\n}\n\nfunction redactIdentity(value, redactor, redactDisplayName, budget) {\n const segments = parseIdentity(value);\n if (!segments) {\n const replacement = ` ${MARKERS.MASK}`;\n resize(budget, replacement.length - value.length);\n return replacement;\n }\n const parts = [];\n for (const { start, end, angle, name } of segments) {\n if (name === null) {\n parts.push(value.slice(start, end));\n continue;\n }\n let result = '';\n if (name)\n result = redactDisplayName ? redactDisplayName(name) : MARKERS.MASK;\n if (typeof result !== 'string') throw new TypeError(SIP_ERRORS.CALLBACK);\n if (result.length > redactor.limits.maxStringLength)\n throw new RangeError(SIP_ERRORS.RESULT_LIMIT);\n let length = result ? 4 + result.length : 1;\n for (const character of result) {\n const code = character.charCodeAt(0);\n if (code < 32 || (code >= 127 && code <= 159))\n throw new TypeError(SIP_ERRORS.CALLBACK);\n if (character === '\"' || character === '\\\\') length++;\n }\n resize(budget, length - (angle - start));\n const prefix = result ? ` \"${result.replace(/[\"\\\\]/g, '\\\\$&')}\" ` : ' ';\n parts.push(`${prefix}${value.slice(angle, end)}`);\n }\n return parts.join(',');\n}\nfunction createSdpTextRules(TEXT_RULES) {\n return Object.freeze([\n sdpRule(\n 'ice',\n /a=ice-(?:pwd|ufrag):[^\\r\\n\\\\\"]*/gi,\n (match) => `${match.slice(0, match.indexOf(':') + 1)}[redacted]`,\n ),\n sdpRule('sdes', /a=crypto:[^\\r\\n\\\\\"]*/gi, () => 'a=crypto:[redacted]'),\n sdpRule(\n 'fingerprint',\n /a=fingerprint:[^\\r\\n\\\\\"]*/gi,\n () => 'a=fingerprint:[redacted]',\n ),\n sdpRule(\n 'origin',\n /(?:^|[\\r\\n]|\\\\[rn])o=[^\\s]+/g,\n (match) => `${match.slice(0, match.indexOf('o=') + 2)}[redacted]`,\n ),\n sdpRule(\n 'mediaIdentity',\n /a=(?:msid|identity):[^\\r\\n\\\\\"]*/gi,\n (match) => `${match.slice(0, match.indexOf(':') + 1)}[redacted]`,\n ),\n sdpRule(\n 'sourceIdentity',\n /(?:^|[\\r\\n])a=ssrc:\\d+[ \\t]+(?:cname|msid|mslabel|label):[^\\r\\n]*/gi,\n (match) =>\n `${match.slice(0, match.indexOf(':', match.indexOf(':') + 1) + 1)}[redacted]`,\n ),\n sdpRule(\n 'serializedSourceIdentity',\n /(?:\\\\[rn]|(?<=\"))a=ssrc:\\d+[ \\t]+(?:cname|msid|mslabel|label):(?:\\\\(?![rn])[^\\r\\n]|[^\\r\\n\\\\\"])*/gi,\n (match) =>\n `${match.slice(0, match.indexOf(':', match.indexOf(':') + 1) + 1)}[redacted]`,\n ),\n sdpRule(\n 'localAddress',\n /(?<![\\w-])[\\w-]+\\.local\\b/gi,\n () => '[local-address]',\n ),\n sdpRule(\n 'turn',\n /(?:\"(?:credential|password|username)\"\\s*:\\s*(?:\"(?:\\\\.|[^\"\\\\])*\"|[^,}\\s]+)|(?:credential|password|username)\\s*=\\s*(?:\"(?:\\\\.|[^\"\\\\])*\"|[^,}\\s]+))/gi,\n (match) => `${match.slice(0, match.search(/[:=]/) + 1)}\"[redacted]\"`,\n ),\n TEXT_RULES.ipv4,\n TEXT_RULES.ipv6,\n TEXT_RULES.urlCredentials,\n TEXT_RULES.sipUri,\n TEXT_RULES.telUri,\n sdpRule('dtmf', /Signal\\s*=\\s*[^\\r\\n]+/gi, () => 'Signal=*'),\n ]);\n}\n\nexport function describeSipMessage(text) {\n const first = text.split(/\\r?\\n/, 1)[0];\n const result = {};\n if (/^SIP\\/2\\.0\\s+\\d{3}/i.test(first))\n result.status = Number(first.split(/\\s+/)[1]);\n else {\n const match = /^([A-Z]+)\\s+\\S+\\s+SIP\\/2\\.0/i.exec(first);\n if (match) result.method = match[1];\n }\n const callId = /^(?:Call-ID|i)\\s*:\\s*([^\\r\\n]+)/im.exec(text);\n const cseq = /^CSeq\\s*:\\s*([^\\r\\n]+)/im.exec(text);\n if (callId) result.callId = callId[1].trim();\n if (cseq) result.cseq = cseq[1].trim();\n return Object.freeze(result);\n}\n\nfunction redactSipMessage(\n text,\n { redactor, redactDisplayName },\n TEXT_RULES,\n SDP_TEXT_RULES,\n) {\n if (\n redactDisplayName !== undefined &&\n typeof redactDisplayName !== 'function'\n )\n throw new TypeError(SIP_ERRORS.CALLBACK);\n const limit = redactor.limits.maxStringLength * 4;\n if (text.length > limit) return MARKERS.LIMIT;\n const unfolded = text.replace(/\\r?\\n[ \\t]+/g, ' ');\n const separator = /\\r?\\n\\r?\\n/.exec(unfolded);\n let headers = separator ? unfolded.slice(0, separator.index) : unfolded;\n let body = separator\n ? unfolded.slice(separator.index + separator[0].length)\n : '';\n headers = headers.split(/\\r?\\n/).join('\\r\\n');\n const budget = {\n size: headers.length + body.length + (separator ? 4 : 0),\n limit,\n };\n resize(budget, 0);\n const replace = (value, pattern, render) =>\n value.replace(pattern, (match) => {\n const replacement = render(match);\n resize(budget, replacement.length - match.length);\n return replacement;\n });\n const contentType =\n /^(?:Content-Type|c)\\s*:\\s*([^;\\r\\n]+)/im\n .exec(headers)?.[1]\n .trim()\n .toLowerCase() ?? 'unknown';\n headers = replace(\n headers,\n /^(?:(?:Proxy-)?Authorization|WWW-Authenticate|Proxy-Authenticate)\\s*:[^\\r\\n]*/gim,\n (header) =>\n hasUnclosedQuote(header)\n ? `${header.slice(0, header.indexOf(':'))}: [redacted]`\n : header.replace(\n /\\b(username|response|nonce|cnonce|opaque)\\s*=\\s*(?:\"(?:\\\\.|[^\"\\\\])*\"|[^,\\s]+)/gi,\n (_, key) => `${key}=\"[redacted]\"`,\n ),\n );\n headers = headers\n .split(/\\r?\\n/)\n .map((line) => {\n const header =\n /^((?:From|To|Contact|P-Asserted-Identity|P-Preferred-Identity|Refer-To|Referred-By|Diversion|History-Info|Remote-Party-ID|P-Called-Party-ID|Reply-To|f|t|m|r|b)\\s*:)(.*)$/i.exec(\n line,\n );\n if (!header) return line;\n const value = redactIdentity(\n header[2],\n redactor,\n redactDisplayName,\n budget,\n );\n return `${header[1]}${value}`;\n })\n .join('\\r\\n');\n for (const rule of [\n TEXT_RULES.urlCredentials,\n TEXT_RULES.sipUri,\n TEXT_RULES.telUri,\n ])\n headers = replace(headers, rule.pattern, (match) => rule.replace(match));\n if (body) {\n if (\n contentType === 'application/sdp' ||\n contentType === 'application/dtmf-relay'\n ) {\n for (const rule of SDP_TEXT_RULES)\n body = replace(body, rule.pattern, (match) => rule.replace(match));\n } else {\n const replacement = `[${contentType} ${new TextEncoder().encode(body).length} bytes]`;\n resize(budget, replacement.length - body.length);\n body = replacement;\n }\n }\n const addresses = (value) => {\n const ipv4 = replace(value, TEXT_RULES.ipv4.pattern, (match) =>\n TEXT_RULES.ipv4.replace(match),\n );\n return replace(ipv4, TEXT_RULES.ipv6.pattern, (match) =>\n TEXT_RULES.ipv6.replace(match),\n );\n };\n return `${addresses(headers)}${separator ? `\\r\\n\\r\\n${body}` : ''}`;\n}\n\nexport function createSipTools(textRules) {\n if (\n !textRules?.ipv4 ||\n !textRules.ipv6 ||\n !textRules.urlCredentials ||\n !textRules.sipUri ||\n !textRules.telUri\n )\n throw new TypeError('SIP text rules are required');\n const SDP_TEXT_RULES = createSdpTextRules(textRules);\n return Object.freeze({\n SDP_TEXT_RULES,\n redactSipMessage: (text, options) =>\n redactSipMessage(text, options, textRules, SDP_TEXT_RULES),\n describeSipMessage,\n });\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export const STORE_MODES: Readonly<{
2
+ OPENING: "opening";
3
+ MEMORY: "memory";
4
+ PERSISTENT: "persistent";
5
+ FALLBACK: "fallback";
6
+ STOPPED: "stopped";
7
+ }>;
8
+ export const OVERFLOW_STRATEGIES: Readonly<{
9
+ CYCLE: "cycle";
10
+ ROTATE: "rotate";
11
+ }>;
@@ -0,0 +1,11 @@
1
+ export const STORE_MODES: Readonly<{
2
+ OPENING: "opening";
3
+ MEMORY: "memory";
4
+ PERSISTENT: "persistent";
5
+ FALLBACK: "fallback";
6
+ STOPPED: "stopped";
7
+ }>;
8
+ export const OVERFLOW_STRATEGIES: Readonly<{
9
+ CYCLE: "cycle";
10
+ ROTATE: "rotate";
11
+ }>;
@@ -0,0 +1,31 @@
1
+ import type {
2
+ LoggingScheduler,
3
+ LogQuery,
4
+ LogRecord,
5
+ LogStoreStatus,
6
+ } from "../index.cjs";
7
+ import type { OVERFLOW_STRATEGIES } from "./constants.cjs";
8
+
9
+ type ValueOf<Values> = Values[keyof Values];
10
+
11
+ export type LogStoreError = Error & Readonly<{ code: string }>;
12
+ export type LogOverflowStrategy = ValueOf<typeof OVERFLOW_STRATEGIES>;
13
+ export type MemoryLogStoreOptions = Readonly<{
14
+ maxSizePerArea?: Readonly<Record<string, number>>;
15
+ defaultMaxSizePerArea?: number;
16
+ maxTotalSize?: number;
17
+ maxAgeMs?: number;
18
+ maxRecordsPerArea?: Readonly<Record<string, number>>;
19
+ defaultMaxRecordsPerArea?: number;
20
+ now?: () => number;
21
+ overflowStrategy?: LogOverflowStrategy;
22
+ onRotate?: (
23
+ source: Readonly<{
24
+ query: (query: LogQuery) => Promise<readonly LogRecord[]>;
25
+ getStatus: () => LogStoreStatus;
26
+ }>,
27
+ ) => void | Promise<void>;
28
+ isRotationEnabled?: () => boolean;
29
+ scheduler?: LoggingScheduler;
30
+ onError?: (error: LogStoreError) => void;
31
+ }>;
@@ -0,0 +1,31 @@
1
+ import type {
2
+ LoggingScheduler,
3
+ LogQuery,
4
+ LogRecord,
5
+ LogStoreStatus,
6
+ } from '../index.js';
7
+ import type { OVERFLOW_STRATEGIES } from './constants.js';
8
+
9
+ type ValueOf<Values> = Values[keyof Values];
10
+
11
+ export type LogStoreError = Error & Readonly<{ code: string }>;
12
+ export type LogOverflowStrategy = ValueOf<typeof OVERFLOW_STRATEGIES>;
13
+ export type MemoryLogStoreOptions = Readonly<{
14
+ maxSizePerArea?: Readonly<Record<string, number>>;
15
+ defaultMaxSizePerArea?: number;
16
+ maxTotalSize?: number;
17
+ maxAgeMs?: number;
18
+ maxRecordsPerArea?: Readonly<Record<string, number>>;
19
+ defaultMaxRecordsPerArea?: number;
20
+ now?: () => number;
21
+ overflowStrategy?: LogOverflowStrategy;
22
+ onRotate?: (
23
+ source: Readonly<{
24
+ query: (query: LogQuery) => Promise<readonly LogRecord[]>;
25
+ getStatus: () => LogStoreStatus;
26
+ }>,
27
+ ) => void | Promise<void>;
28
+ isRotationEnabled?: () => boolean;
29
+ scheduler?: LoggingScheduler;
30
+ onError?: (error: LogStoreError) => void;
31
+ }>;
@@ -0,0 +1,17 @@
1
+ export const UPLOAD_LIMITS: Readonly<{
2
+ MAX_INTERVAL_MS: 2147483647;
3
+ }>;
4
+ export const UPLOAD_OUTBOX_METHODS: Readonly<{
5
+ WRITE: "write";
6
+ CAPTURE: "capture";
7
+ FLUSH: "flush";
8
+ NEXT_BATCH: "nextBatch";
9
+ ACKNOWLEDGE: "acknowledge";
10
+ GET_STATUS: "getStatus";
11
+ }>;
12
+ export const UPLOAD_STORAGE_MODES: Readonly<{
13
+ MEMORY: "memory";
14
+ PERSISTENT: "persistent";
15
+ FAILED: "failed";
16
+ STOPPED: "stopped";
17
+ }>;
@@ -0,0 +1,17 @@
1
+ export const UPLOAD_LIMITS: Readonly<{
2
+ MAX_INTERVAL_MS: 2147483647;
3
+ }>;
4
+ export const UPLOAD_OUTBOX_METHODS: Readonly<{
5
+ WRITE: "write";
6
+ CAPTURE: "capture";
7
+ FLUSH: "flush";
8
+ NEXT_BATCH: "nextBatch";
9
+ ACKNOWLEDGE: "acknowledge";
10
+ GET_STATUS: "getStatus";
11
+ }>;
12
+ export const UPLOAD_STORAGE_MODES: Readonly<{
13
+ MEMORY: "memory";
14
+ PERSISTENT: "persistent";
15
+ FAILED: "failed";
16
+ STOPPED: "stopped";
17
+ }>;