@rpcbase/server 0.476.0 → 0.477.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/dist/{handler-DEEir2xV.js → handler-BOTZftAB.js} +29 -29
- package/dist/{handler-BITFtEr_.js → handler-B_mMDLBO.js} +80 -39
- package/dist/{handler-BYVnU9H-.js → handler-Cl-0-832.js} +1 -1
- package/dist/{handler-CHuOXAtH.js → handler-Dd20DHyz.js} +15 -11
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +102 -87
- package/dist/notifications/api/notifications/handler.d.ts.map +1 -1
- package/dist/notifications.js +1 -1
- package/dist/rts/api/changes/handler.d.ts.map +1 -1
- package/dist/rts/index.d.ts +3 -1
- package/dist/rts/index.d.ts.map +1 -1
- package/dist/{index-Ckx0UHs6.js → rts/index.js} +99 -32
- package/dist/{schemas-DI7ewltq.js → schemas-D5T9tDtI.js} +609 -12
- package/dist/{shared-Chfrv8o6.js → shared-UGuDRAKK.js} +16 -30
- package/dist/uploads/api/file-uploads/handlers/completeUpload.d.ts.map +1 -1
- package/dist/uploads/api/file-uploads/handlers/getStatus.d.ts.map +1 -1
- package/dist/uploads/api/file-uploads/handlers/uploadChunk.d.ts.map +1 -1
- package/dist/uploads/api/file-uploads/shared.d.ts +3 -0
- package/dist/uploads/api/file-uploads/shared.d.ts.map +1 -1
- package/dist/uploads.js +1 -1
- package/package.json +4 -4
- package/dist/passwordHashStorage.test.d.ts +0 -2
- package/dist/passwordHashStorage.test.d.ts.map +0 -1
- package/dist/rts/api/changes/handler.test.d.ts +0 -2
- package/dist/rts/api/changes/handler.test.d.ts.map +0 -1
- package/dist/rts/index.ws.test.d.ts +0 -2
- package/dist/rts/index.ws.test.d.ts.map +0 -1
- package/dist/rts.d.ts +0 -3
- package/dist/rts.d.ts.map +0 -1
- package/dist/rts.js +0 -13
- package/dist/uploads/api/files/handlers/getFile.test.d.ts +0 -2
- package/dist/uploads/api/files/handlers/getFile.test.d.ts.map +0 -1
package/dist/index.js
CHANGED
|
@@ -19,7 +19,6 @@ import { renderToPipeableStream, renderToStaticMarkup } from "react-dom/server";
|
|
|
19
19
|
import { jsx } from "react/jsx-runtime";
|
|
20
20
|
import { createPath, matchRoutes, parsePath, createStaticRouter, StaticRouterProvider } from "@rpcbase/router";
|
|
21
21
|
import { s } from "./email-DEw8keax.js";
|
|
22
|
-
import { i, n, r } from "./index-Ckx0UHs6.js";
|
|
23
22
|
function getDefaultExportFromCjs(x) {
|
|
24
23
|
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
|
|
25
24
|
}
|
|
@@ -95,9 +94,9 @@ function requireLib() {
|
|
|
95
94
|
}
|
|
96
95
|
return ip;
|
|
97
96
|
});
|
|
98
|
-
for (var
|
|
99
|
-
if (is.ip(forwardedIps[
|
|
100
|
-
return forwardedIps[
|
|
97
|
+
for (var i = 0; i < forwardedIps.length; i++) {
|
|
98
|
+
if (is.ip(forwardedIps[i])) {
|
|
99
|
+
return forwardedIps[i];
|
|
101
100
|
}
|
|
102
101
|
}
|
|
103
102
|
return null;
|
|
@@ -208,8 +207,8 @@ function createGetModuleFromFilename(basePath = process.argv[1] ? dirname(proces
|
|
|
208
207
|
if (".js" === ext || ".mjs" === ext || ".cjs" === ext) file = file.slice(0, -1 * ext.length);
|
|
209
208
|
const decodedFile = decodeURIComponent(file);
|
|
210
209
|
if (!dir) dir = ".";
|
|
211
|
-
const
|
|
212
|
-
if (
|
|
210
|
+
const n = dir.lastIndexOf("/node_modules");
|
|
211
|
+
if (n > -1) return `${dir.slice(n + 14).replace(/\//g, ".")}:${decodedFile}`;
|
|
213
212
|
if (dir.startsWith(normalizedBase)) {
|
|
214
213
|
const moduleName = dir.slice(normalizedBase.length + 1).replace(/\//g, ".");
|
|
215
214
|
return moduleName ? `${moduleName}:${decodedFile}` : decodedFile;
|
|
@@ -336,12 +335,12 @@ class UUID {
|
|
|
336
335
|
}
|
|
337
336
|
if (hex) {
|
|
338
337
|
const inner = new Uint8Array(16);
|
|
339
|
-
for (let
|
|
340
|
-
const
|
|
341
|
-
inner[
|
|
342
|
-
inner[
|
|
343
|
-
inner[
|
|
344
|
-
inner[
|
|
338
|
+
for (let i = 0; i < 16; i += 4) {
|
|
339
|
+
const n = parseInt(hex.substring(2 * i, 2 * i + 8), 16);
|
|
340
|
+
inner[i + 0] = n >>> 24;
|
|
341
|
+
inner[i + 1] = n >>> 16;
|
|
342
|
+
inner[i + 2] = n >>> 8;
|
|
343
|
+
inner[i + 3] = n;
|
|
345
344
|
}
|
|
346
345
|
return new UUID(inner);
|
|
347
346
|
}
|
|
@@ -349,18 +348,18 @@ class UUID {
|
|
|
349
348
|
}
|
|
350
349
|
toString() {
|
|
351
350
|
let text = "";
|
|
352
|
-
for (let
|
|
353
|
-
text += DIGITS.charAt(this.bytes[
|
|
354
|
-
text += DIGITS.charAt(15 & this.bytes[
|
|
355
|
-
if (3 ===
|
|
351
|
+
for (let i = 0; i < this.bytes.length; i++) {
|
|
352
|
+
text += DIGITS.charAt(this.bytes[i] >>> 4);
|
|
353
|
+
text += DIGITS.charAt(15 & this.bytes[i]);
|
|
354
|
+
if (3 === i || 5 === i || 7 === i || 9 === i) text += "-";
|
|
356
355
|
}
|
|
357
356
|
return text;
|
|
358
357
|
}
|
|
359
358
|
toHex() {
|
|
360
359
|
let text = "";
|
|
361
|
-
for (let
|
|
362
|
-
text += DIGITS.charAt(this.bytes[
|
|
363
|
-
text += DIGITS.charAt(15 & this.bytes[
|
|
360
|
+
for (let i = 0; i < this.bytes.length; i++) {
|
|
361
|
+
text += DIGITS.charAt(this.bytes[i] >>> 4);
|
|
362
|
+
text += DIGITS.charAt(15 & this.bytes[i]);
|
|
364
363
|
}
|
|
365
364
|
return text;
|
|
366
365
|
}
|
|
@@ -368,12 +367,12 @@ class UUID {
|
|
|
368
367
|
return this.toString();
|
|
369
368
|
}
|
|
370
369
|
getVariant() {
|
|
371
|
-
const
|
|
372
|
-
if (
|
|
373
|
-
if (
|
|
374
|
-
if (
|
|
375
|
-
if (
|
|
376
|
-
if (
|
|
370
|
+
const n = this.bytes[8] >>> 4;
|
|
371
|
+
if (n < 0) throw new Error("unreachable");
|
|
372
|
+
if (n <= 7) return this.bytes.every((e) => 0 === e) ? "NIL" : "VAR_0";
|
|
373
|
+
if (n <= 11) return "VAR_10";
|
|
374
|
+
if (n <= 13) return "VAR_110";
|
|
375
|
+
if (n <= 15) return this.bytes.every((e) => 255 === e) ? "MAX" : "VAR_RESERVED";
|
|
377
376
|
else throw new Error("unreachable");
|
|
378
377
|
}
|
|
379
378
|
getVersion() {
|
|
@@ -386,8 +385,8 @@ class UUID {
|
|
|
386
385
|
return 0 === this.compareTo(other);
|
|
387
386
|
}
|
|
388
387
|
compareTo(other) {
|
|
389
|
-
for (let
|
|
390
|
-
const diff = this.bytes[
|
|
388
|
+
for (let i = 0; i < 16; i++) {
|
|
389
|
+
const diff = this.bytes[i] - other.bytes[i];
|
|
391
390
|
if (0 !== diff) return Math.sign(diff);
|
|
392
391
|
}
|
|
393
392
|
return 0;
|
|
@@ -722,8 +721,8 @@ function removeTrailingSlash(url) {
|
|
|
722
721
|
}
|
|
723
722
|
async function retriable(fn, props) {
|
|
724
723
|
let lastError = null;
|
|
725
|
-
for (let
|
|
726
|
-
if (
|
|
724
|
+
for (let i = 0; i < props.retryCount + 1; i++) {
|
|
725
|
+
if (i > 0) await new Promise((r) => setTimeout(r, props.retryDelay));
|
|
727
726
|
try {
|
|
728
727
|
const res = await fn();
|
|
729
728
|
return res;
|
|
@@ -1121,7 +1120,8 @@ class PostHogCoreStateless {
|
|
|
1121
1120
|
flags: {},
|
|
1122
1121
|
featureFlags: {},
|
|
1123
1122
|
featureFlagPayloads: {},
|
|
1124
|
-
requestId: flagsResponse?.requestId
|
|
1123
|
+
requestId: flagsResponse?.requestId,
|
|
1124
|
+
quotaLimited: flagsResponse.quotaLimited
|
|
1125
1125
|
};
|
|
1126
1126
|
}
|
|
1127
1127
|
return flagsResponse;
|
|
@@ -1425,8 +1425,8 @@ function getFilenameToChunkIdMap(stackParser) {
|
|
|
1425
1425
|
if (result) acc[result[0]] = result[1];
|
|
1426
1426
|
else {
|
|
1427
1427
|
const parsedStack = stackParser(stackKey);
|
|
1428
|
-
for (let
|
|
1429
|
-
const stackFrame = parsedStack[
|
|
1428
|
+
for (let i = parsedStack.length - 1; i >= 0; i--) {
|
|
1429
|
+
const stackFrame = parsedStack[i];
|
|
1430
1430
|
const filename = stackFrame?.filename;
|
|
1431
1431
|
const chunkId = chunkIdMap[stackKey];
|
|
1432
1432
|
if (filename && chunkId) {
|
|
@@ -1634,8 +1634,8 @@ function createStackParser(platform, ...parsers) {
|
|
|
1634
1634
|
return (stack, skipFirstLines = 0) => {
|
|
1635
1635
|
const frames = [];
|
|
1636
1636
|
const lines = stack.split("\n");
|
|
1637
|
-
for (let
|
|
1638
|
-
const line = lines[
|
|
1637
|
+
for (let i = skipFirstLines; i < lines.length; i++) {
|
|
1638
|
+
const line = lines[i];
|
|
1639
1639
|
if (line.length > 1024) continue;
|
|
1640
1640
|
const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, "$1") : line;
|
|
1641
1641
|
if (!cleanedLine.match(/\S*Error: /)) {
|
|
@@ -1717,10 +1717,10 @@ function extractExceptionKeysForMessage(err, maxLength = 40) {
|
|
|
1717
1717
|
const keys = Object.keys(err);
|
|
1718
1718
|
keys.sort();
|
|
1719
1719
|
if (!keys.length) return "[object has no keys]";
|
|
1720
|
-
for (let
|
|
1721
|
-
const serialized = keys.slice(0,
|
|
1720
|
+
for (let i = keys.length; i > 0; i--) {
|
|
1721
|
+
const serialized = keys.slice(0, i).join(", ");
|
|
1722
1722
|
if (!(serialized.length > maxLength)) {
|
|
1723
|
-
if (
|
|
1723
|
+
if (i === keys.length) return serialized;
|
|
1724
1724
|
return serialized.length <= maxLength ? serialized : `${serialized.slice(0, maxLength)}...`;
|
|
1725
1725
|
}
|
|
1726
1726
|
}
|
|
@@ -1829,8 +1829,8 @@ const MAX_CONTEXTLINES_COLNO = 1e3;
|
|
|
1829
1829
|
const MAX_CONTEXTLINES_LINENO = 1e4;
|
|
1830
1830
|
async function addSourceContext(frames) {
|
|
1831
1831
|
const filesToLines = {};
|
|
1832
|
-
for (let
|
|
1833
|
-
const frame = frames[
|
|
1832
|
+
for (let i = frames.length - 1; i >= 0; i--) {
|
|
1833
|
+
const frame = frames[i];
|
|
1834
1834
|
const filename = frame?.filename;
|
|
1835
1835
|
if (!frame || "string" != typeof filename || "number" != typeof frame.lineno || shouldSkipContextLinesForFile(filename) || shouldSkipContextLinesForFrame(frame)) continue;
|
|
1836
1836
|
const filesToLinesOutput = filesToLines[filename];
|
|
@@ -1846,7 +1846,7 @@ async function addSourceContext(frames) {
|
|
|
1846
1846
|
if (!filesToLineRanges) continue;
|
|
1847
1847
|
filesToLineRanges.sort((a, b) => a - b);
|
|
1848
1848
|
const ranges = makeLineReaderRanges(filesToLineRanges);
|
|
1849
|
-
if (ranges.every((
|
|
1849
|
+
if (ranges.every((r) => rangeExistsInContentCache(file, r))) continue;
|
|
1850
1850
|
const cache = emplace(LRU_FILE_CONTENTS_CACHE, file, {});
|
|
1851
1851
|
readlinePromises.push(getContextLinesFromFile(file, ranges, cache));
|
|
1852
1852
|
}
|
|
@@ -1914,8 +1914,8 @@ function addSourceContextToFrames(frames, cache) {
|
|
|
1914
1914
|
function addContextToFrame(lineno, frame, contents) {
|
|
1915
1915
|
if (void 0 === frame.lineno || void 0 === contents) return;
|
|
1916
1916
|
frame.pre_context = [];
|
|
1917
|
-
for (let
|
|
1918
|
-
const line = contents[
|
|
1917
|
+
for (let i = makeRangeStart(lineno); i < lineno; i++) {
|
|
1918
|
+
const line = contents[i];
|
|
1919
1919
|
if (void 0 === line) return void clearLineContext(frame);
|
|
1920
1920
|
frame.pre_context.push(line);
|
|
1921
1921
|
}
|
|
@@ -1923,8 +1923,8 @@ function addContextToFrame(lineno, frame, contents) {
|
|
|
1923
1923
|
frame.context_line = contents[lineno];
|
|
1924
1924
|
const end = makeRangeEnd(lineno);
|
|
1925
1925
|
frame.post_context = [];
|
|
1926
|
-
for (let
|
|
1927
|
-
const line = contents[
|
|
1926
|
+
for (let i = lineno + 1; i <= end; i++) {
|
|
1927
|
+
const line = contents[i];
|
|
1928
1928
|
if (void 0 === line) break;
|
|
1929
1929
|
frame.post_context.push(line);
|
|
1930
1930
|
}
|
|
@@ -1945,29 +1945,29 @@ function shouldSkipContextLinesForFrame(frame) {
|
|
|
1945
1945
|
function rangeExistsInContentCache(file, range) {
|
|
1946
1946
|
const contents = LRU_FILE_CONTENTS_CACHE.get(file);
|
|
1947
1947
|
if (void 0 === contents) return false;
|
|
1948
|
-
for (let
|
|
1948
|
+
for (let i = range[0]; i <= range[1]; i++) if (void 0 === contents[i]) return false;
|
|
1949
1949
|
return true;
|
|
1950
1950
|
}
|
|
1951
1951
|
function makeLineReaderRanges(lines) {
|
|
1952
1952
|
if (!lines.length) return [];
|
|
1953
|
-
let
|
|
1953
|
+
let i = 0;
|
|
1954
1954
|
const line = lines[0];
|
|
1955
1955
|
if ("number" != typeof line) return [];
|
|
1956
1956
|
let current = makeContextRange(line);
|
|
1957
1957
|
const out = [];
|
|
1958
1958
|
while (true) {
|
|
1959
|
-
if (
|
|
1959
|
+
if (i === lines.length - 1) {
|
|
1960
1960
|
out.push(current);
|
|
1961
1961
|
break;
|
|
1962
1962
|
}
|
|
1963
|
-
const next = lines[
|
|
1963
|
+
const next = lines[i + 1];
|
|
1964
1964
|
if ("number" != typeof next) break;
|
|
1965
1965
|
if (next <= current[1]) current[1] = next + DEFAULT_LINES_OF_CONTEXT;
|
|
1966
1966
|
else {
|
|
1967
1967
|
out.push(current);
|
|
1968
1968
|
current = makeContextRange(next);
|
|
1969
1969
|
}
|
|
1970
|
-
|
|
1970
|
+
i++;
|
|
1971
1971
|
}
|
|
1972
1972
|
return out;
|
|
1973
1973
|
}
|
|
@@ -2096,7 +2096,13 @@ class ErrorTracking {
|
|
|
2096
2096
|
this._rateLimiter.stop();
|
|
2097
2097
|
}
|
|
2098
2098
|
}
|
|
2099
|
-
const version = "5.
|
|
2099
|
+
const version = "5.18.0";
|
|
2100
|
+
const FeatureFlagError = {
|
|
2101
|
+
ERRORS_WHILE_COMPUTING: "errors_while_computing_flags",
|
|
2102
|
+
FLAG_MISSING: "flag_missing",
|
|
2103
|
+
QUOTA_LIMITED: "quota_limited",
|
|
2104
|
+
UNKNOWN_ERROR: "unknown_error"
|
|
2105
|
+
};
|
|
2100
2106
|
async function hashSHA1(text) {
|
|
2101
2107
|
const subtle = globalThis.crypto?.subtle;
|
|
2102
2108
|
if (!subtle) throw new Error("SubtleCrypto API not available");
|
|
@@ -2818,13 +2824,23 @@ class PostHogBackendClient extends PostHogCoreStateless {
|
|
|
2818
2824
|
let requestId;
|
|
2819
2825
|
let evaluatedAt;
|
|
2820
2826
|
let flagDetail;
|
|
2827
|
+
let featureFlagError;
|
|
2821
2828
|
if (!flagWasLocallyEvaluated && !onlyEvaluateLocally) {
|
|
2822
|
-
const
|
|
2823
|
-
|
|
2824
|
-
|
|
2825
|
-
|
|
2826
|
-
|
|
2827
|
-
|
|
2829
|
+
const flagsResponse = await super.getFeatureFlagDetailsStateless(distinctId, groups, personProperties, groupProperties, disableGeoip, [
|
|
2830
|
+
key
|
|
2831
|
+
]);
|
|
2832
|
+
if (void 0 === flagsResponse) featureFlagError = FeatureFlagError.UNKNOWN_ERROR;
|
|
2833
|
+
else {
|
|
2834
|
+
requestId = flagsResponse.requestId;
|
|
2835
|
+
evaluatedAt = flagsResponse.evaluatedAt;
|
|
2836
|
+
const errors = [];
|
|
2837
|
+
if (flagsResponse.errorsWhileComputingFlags) errors.push(FeatureFlagError.ERRORS_WHILE_COMPUTING);
|
|
2838
|
+
if (flagsResponse.quotaLimited?.includes("feature_flags")) errors.push(FeatureFlagError.QUOTA_LIMITED);
|
|
2839
|
+
flagDetail = flagsResponse.flags[key];
|
|
2840
|
+
if (void 0 === flagDetail) errors.push(FeatureFlagError.FLAG_MISSING);
|
|
2841
|
+
if (errors.length > 0) featureFlagError = errors.join(",");
|
|
2842
|
+
response = getFeatureFlagValue(flagDetail);
|
|
2843
|
+
}
|
|
2828
2844
|
}
|
|
2829
2845
|
const featureFlagReportedKey = `${key}_${response}`;
|
|
2830
2846
|
if (sendFeatureFlagEvents && (!(distinctId in this.distinctIdHasSentFlagCalls) || !this.distinctIdHasSentFlagCalls[distinctId].includes(featureFlagReportedKey))) {
|
|
@@ -2833,20 +2849,22 @@ class PostHogBackendClient extends PostHogCoreStateless {
|
|
|
2833
2849
|
else this.distinctIdHasSentFlagCalls[distinctId] = [
|
|
2834
2850
|
featureFlagReportedKey
|
|
2835
2851
|
];
|
|
2852
|
+
const properties = {
|
|
2853
|
+
$feature_flag: key,
|
|
2854
|
+
$feature_flag_response: response,
|
|
2855
|
+
$feature_flag_id: flagDetail?.metadata?.id,
|
|
2856
|
+
$feature_flag_version: flagDetail?.metadata?.version,
|
|
2857
|
+
$feature_flag_reason: flagDetail?.reason?.description ?? flagDetail?.reason?.code,
|
|
2858
|
+
locally_evaluated: flagWasLocallyEvaluated,
|
|
2859
|
+
[`$feature/${key}`]: response,
|
|
2860
|
+
$feature_flag_request_id: requestId,
|
|
2861
|
+
$feature_flag_evaluated_at: evaluatedAt
|
|
2862
|
+
};
|
|
2863
|
+
if (featureFlagError) properties.$feature_flag_error = featureFlagError;
|
|
2836
2864
|
this.capture({
|
|
2837
2865
|
distinctId,
|
|
2838
2866
|
event: "$feature_flag_called",
|
|
2839
|
-
properties
|
|
2840
|
-
$feature_flag: key,
|
|
2841
|
-
$feature_flag_response: response,
|
|
2842
|
-
$feature_flag_id: flagDetail?.metadata?.id,
|
|
2843
|
-
$feature_flag_version: flagDetail?.metadata?.version,
|
|
2844
|
-
$feature_flag_reason: flagDetail?.reason?.description ?? flagDetail?.reason?.code,
|
|
2845
|
-
locally_evaluated: flagWasLocallyEvaluated,
|
|
2846
|
-
[`$feature/${key}`]: response,
|
|
2847
|
-
$feature_flag_request_id: requestId,
|
|
2848
|
-
$feature_flag_evaluated_at: evaluatedAt
|
|
2849
|
-
},
|
|
2867
|
+
properties,
|
|
2850
2868
|
groups,
|
|
2851
2869
|
disableGeoip
|
|
2852
2870
|
});
|
|
@@ -3561,15 +3579,15 @@ const parseEnvInt = (value) => {
|
|
|
3561
3579
|
return parsed;
|
|
3562
3580
|
};
|
|
3563
3581
|
const isPowerOfTwo = (value) => (value & value - 1) === 0;
|
|
3564
|
-
const estimateScryptMemoryBytes = ({ N, r
|
|
3565
|
-
return 128 *
|
|
3582
|
+
const estimateScryptMemoryBytes = ({ N, r, p }) => {
|
|
3583
|
+
return 128 * r * (N + p);
|
|
3566
3584
|
};
|
|
3567
3585
|
const validateScryptParams = (params) => {
|
|
3568
|
-
const { N, r
|
|
3586
|
+
const { N, r, p, keylen, saltBytes, maxmemBytes } = params;
|
|
3569
3587
|
if (!Number.isSafeInteger(N) || N < 2 || N > MAX_SCRYPT_N || !isPowerOfTwo(N)) {
|
|
3570
3588
|
return { ok: false, error: "invalid_scrypt_N" };
|
|
3571
3589
|
}
|
|
3572
|
-
if (!Number.isSafeInteger(
|
|
3590
|
+
if (!Number.isSafeInteger(r) || r < 1 || r > MAX_SCRYPT_R) {
|
|
3573
3591
|
return { ok: false, error: "invalid_scrypt_r" };
|
|
3574
3592
|
}
|
|
3575
3593
|
if (!Number.isSafeInteger(p) || p < 1 || p > MAX_SCRYPT_P) {
|
|
@@ -3584,7 +3602,7 @@ const validateScryptParams = (params) => {
|
|
|
3584
3602
|
if (!Number.isSafeInteger(maxmemBytes) || maxmemBytes < 16 * 1024 * 1024 || maxmemBytes > MAX_SCRYPT_MAXMEM_BYTES) {
|
|
3585
3603
|
return { ok: false, error: "invalid_scrypt_maxmem" };
|
|
3586
3604
|
}
|
|
3587
|
-
const estimatedMem = estimateScryptMemoryBytes({ N, r
|
|
3605
|
+
const estimatedMem = estimateScryptMemoryBytes({ N, r, p });
|
|
3588
3606
|
if (estimatedMem > maxmemBytes) {
|
|
3589
3607
|
return { ok: false, error: "scrypt_params_exceed_maxmem" };
|
|
3590
3608
|
}
|
|
@@ -3619,9 +3637,9 @@ const getCurrentScryptParams = (opts) => {
|
|
|
3619
3637
|
return params;
|
|
3620
3638
|
};
|
|
3621
3639
|
const scryptAsync = async (password, salt, params) => {
|
|
3622
|
-
const { N, r
|
|
3640
|
+
const { N, r, p, keylen, maxmemBytes } = params;
|
|
3623
3641
|
return await new Promise((resolve, reject) => {
|
|
3624
|
-
crypto.scrypt(password, salt, keylen, { N, r
|
|
3642
|
+
crypto.scrypt(password, salt, keylen, { N, r, p, maxmem: maxmemBytes }, (err, derivedKey) => {
|
|
3625
3643
|
if (err) {
|
|
3626
3644
|
reject(err);
|
|
3627
3645
|
return;
|
|
@@ -3668,10 +3686,10 @@ const parseStoredScryptHash = (stored) => {
|
|
|
3668
3686
|
params.set(key, value);
|
|
3669
3687
|
}
|
|
3670
3688
|
const N = params.get("N");
|
|
3671
|
-
const
|
|
3689
|
+
const r = params.get("r");
|
|
3672
3690
|
const p = params.get("p");
|
|
3673
3691
|
const keylen = params.get("keylen");
|
|
3674
|
-
if (N === void 0 ||
|
|
3692
|
+
if (N === void 0 || r === void 0 || p === void 0 || keylen === void 0) return null;
|
|
3675
3693
|
if (params.size !== 4) return null;
|
|
3676
3694
|
const salt = parseB64(saltB64);
|
|
3677
3695
|
const dk = parseB64(dkB64);
|
|
@@ -3682,31 +3700,31 @@ const parseStoredScryptHash = (stored) => {
|
|
|
3682
3700
|
const currentMaxmemBytes = getCurrentMaxmemBytes();
|
|
3683
3701
|
const validated = validateScryptParams({
|
|
3684
3702
|
N,
|
|
3685
|
-
r
|
|
3703
|
+
r,
|
|
3686
3704
|
p,
|
|
3687
3705
|
keylen,
|
|
3688
3706
|
saltBytes: salt.length,
|
|
3689
3707
|
maxmemBytes: currentMaxmemBytes
|
|
3690
3708
|
});
|
|
3691
3709
|
if (!validated.ok) return null;
|
|
3692
|
-
return { N, r
|
|
3710
|
+
return { N, r, p, keylen, salt, dk };
|
|
3693
3711
|
};
|
|
3694
3712
|
async function hashPasswordForStorage(password, opts) {
|
|
3695
|
-
const { N, r
|
|
3713
|
+
const { N, r, p, keylen, saltBytes, maxmemBytes } = getCurrentScryptParams(opts);
|
|
3696
3714
|
const salt = crypto.randomBytes(saltBytes);
|
|
3697
|
-
const dk = await scryptAsync(password, salt, { N, r
|
|
3715
|
+
const dk = await scryptAsync(password, salt, { N, r, p, keylen, maxmemBytes });
|
|
3698
3716
|
const saltB64 = salt.toString("base64");
|
|
3699
3717
|
const dkB64 = dk.toString("base64");
|
|
3700
|
-
return `$scrypt$N=${N},r=${
|
|
3718
|
+
return `$scrypt$N=${N},r=${r},p=${p},keylen=${keylen}$${saltB64}$${dkB64}`;
|
|
3701
3719
|
}
|
|
3702
3720
|
async function verifyPasswordFromStorage(password, stored) {
|
|
3703
3721
|
const parsed = parseStoredScryptHash(stored);
|
|
3704
3722
|
if (!parsed) return false;
|
|
3705
|
-
const { N, r
|
|
3723
|
+
const { N, r, p, keylen, salt, dk } = parsed;
|
|
3706
3724
|
const maxmemBytes = getCurrentMaxmemBytes();
|
|
3707
3725
|
let derivedKey;
|
|
3708
3726
|
try {
|
|
3709
|
-
derivedKey = await scryptAsync(password, salt, { N, r
|
|
3727
|
+
derivedKey = await scryptAsync(password, salt, { N, r, p, keylen, maxmemBytes });
|
|
3710
3728
|
} catch {
|
|
3711
3729
|
return false;
|
|
3712
3730
|
}
|
|
@@ -3729,7 +3747,7 @@ function createLocation(current, to, state = null, key) {
|
|
|
3729
3747
|
return location;
|
|
3730
3748
|
}
|
|
3731
3749
|
function getShortCircuitMatches(routes) {
|
|
3732
|
-
const route = routes.length === 1 ? routes[0] : routes.find((
|
|
3750
|
+
const route = routes.length === 1 ? routes[0] : routes.find((r) => r.index || !r.path || r.path === "/") || {
|
|
3733
3751
|
id: "__shim-error-route__"
|
|
3734
3752
|
};
|
|
3735
3753
|
return {
|
|
@@ -4212,10 +4230,7 @@ export {
|
|
|
4212
4230
|
getDerivedKey,
|
|
4213
4231
|
hashPassword,
|
|
4214
4232
|
hashPasswordForStorage,
|
|
4215
|
-
i as initRts,
|
|
4216
4233
|
initServer,
|
|
4217
|
-
n as notifyRtsModelChanged,
|
|
4218
|
-
r as registerRtsHandler,
|
|
4219
4234
|
s as sendEmail,
|
|
4220
4235
|
ssrMiddleware,
|
|
4221
4236
|
verifyPasswordFromStorage
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/notifications/api/notifications/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAmB,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/notifications/api/notifications/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAmB,MAAM,cAAc,CAAA;yBAubnC,KAAK,GAAG;AAAxB,wBASC"}
|
package/dist/notifications.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { loadModel, loadRbModel } from "@rpcbase/db";
|
|
2
2
|
import { s as sendEmail } from "./email-DEw8keax.js";
|
|
3
3
|
const routes = Object.entries({
|
|
4
|
-
.../* @__PURE__ */ Object.assign({ "./api/notifications/handler.ts": () => import("./handler-
|
|
4
|
+
.../* @__PURE__ */ Object.assign({ "./api/notifications/handler.ts": () => import("./handler-B_mMDLBO.js") })
|
|
5
5
|
}).reduce((acc, [path, mod]) => {
|
|
6
6
|
acc[path.replace("./api/", "@rpcbase/server/notifications/api/")] = mod;
|
|
7
7
|
return acc;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/rts/api/changes/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAmB,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/rts/api/changes/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAmB,MAAM,cAAc,CAAA;AAQnD,KAAK,WAAW,GAAG;IACjB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC3B,CAAA;yBAuIe,KAAK,GAAG,CAAC,WAAW,CAAC;AAArC,wBAEC"}
|
package/dist/rts/index.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { Server as HttpServer } from 'node:http';
|
|
2
2
|
import { RequestHandler } from 'express';
|
|
3
|
+
import { AppAbility } from '../../../db/acl/src';
|
|
3
4
|
import { WebSocket } from 'ws';
|
|
4
5
|
type SocketMeta = {
|
|
5
6
|
tenantId: string;
|
|
6
7
|
userId: string;
|
|
8
|
+
ability: AppAbility;
|
|
7
9
|
};
|
|
8
10
|
type HandlerFn = (socket: RtsSocket) => void | (() => void);
|
|
9
11
|
declare class RtsSocket {
|
|
@@ -34,5 +36,5 @@ export declare const initRts: ({ server, path, sessionMiddleware, maxPayloadByte
|
|
|
34
36
|
}) => void;
|
|
35
37
|
export declare const registerRtsHandler: (handler: HandlerFn) => void;
|
|
36
38
|
export declare const notifyRtsModelChanged: (tenantId: string, modelName: string) => void;
|
|
37
|
-
export
|
|
39
|
+
export * from './routes';
|
|
38
40
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/rts/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rts/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAA;AAGtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rts/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAA;AAGtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,OAAO,EAAmH,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAGlK,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,IAAI,CAAA;AAqBlE,KAAK,UAAU,GAAG;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,UAAU,CAAA;CACpB,CAAA;AAoBD,KAAK,SAAS,GAAG,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAA;AAiC3D,cAAM,SAAS;IACb,SAAgB,EAAE,EAAE,MAAM,CAAA;IAC1B,SAAgB,QAAQ,EAAE,MAAM,CAAA;IAChC,SAAgB,MAAM,EAAE,MAAM,CAAA;IAE9B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqD;gBAE3D,EACjB,EAAE,EACF,EAAE,EACF,IAAI,GACL,EAAE;QACD,EAAE,EAAE,MAAM,CAAA;QACV,EAAE,EAAE,SAAS,CAAA;QACb,IAAI,EAAE,UAAU,CAAA;KACjB;IAOM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAOlE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAO7D,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IAI5C,KAAK,IAAI,IAAI;IAQb,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;CAOvD;AA+iBD,eAAO,MAAM,OAAO,GAAI,4NAQrB;IACD,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iBAAiB,CAAC,EAAE,cAAc,CAAA;IAClC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,KAAG,IA8GH,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,SAAS,SAAS,KAAG,IAEvD,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,KAAG,IAE3E,CAAA;AAED,cAAc,UAAU,CAAA"}
|