@rei-standard/amsg-server 2.6.0-next.12 → 2.6.0-next.13
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.
|
@@ -3115,7 +3115,7 @@ function createClientStateHandler(ctx) {
|
|
|
3115
3115
|
}
|
|
3116
3116
|
|
|
3117
3117
|
// src/server/lib/version.js
|
|
3118
|
-
var SERVER_VERSION = true ? "2.6.0-next.
|
|
3118
|
+
var SERVER_VERSION = true ? "2.6.0-next.13" : "0.0.0-dev";
|
|
3119
3119
|
|
|
3120
3120
|
// src/server/handlers/capabilities.js
|
|
3121
3121
|
var SERVER_FEATURES = Object.freeze([
|
|
@@ -3309,6 +3309,12 @@ function corsHeadersFor(cors, requestOrigin) {
|
|
|
3309
3309
|
if (allowOrigin !== "*") headers["Vary"] = "Origin";
|
|
3310
3310
|
return headers;
|
|
3311
3311
|
}
|
|
3312
|
+
function degradedCorsHeaders(requestOrigin) {
|
|
3313
|
+
return corsHeadersFor({ origin: requestOrigin, maxAge: 0 }, requestOrigin);
|
|
3314
|
+
}
|
|
3315
|
+
function internalErrorResponse(cors) {
|
|
3316
|
+
return jsonResponse(500, { success: false, error: { code: "INTERNAL_ERROR", message: "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF" } }, cors);
|
|
3317
|
+
}
|
|
3312
3318
|
function createSingleUserCloudflareWorker(buildConfig) {
|
|
3313
3319
|
async function resolveConfig(env) {
|
|
3314
3320
|
const cfg = await buildConfig(env);
|
|
@@ -3316,10 +3322,19 @@ function createSingleUserCloudflareWorker(buildConfig) {
|
|
|
3316
3322
|
return cfg;
|
|
3317
3323
|
}
|
|
3318
3324
|
async function fetch(request, env) {
|
|
3325
|
+
const requestOrigin = request.headers.get("origin") || "";
|
|
3326
|
+
const method = request.method.toUpperCase();
|
|
3327
|
+
let cfg;
|
|
3328
|
+
try {
|
|
3329
|
+
cfg = await resolveConfig(env);
|
|
3330
|
+
} catch (error) {
|
|
3331
|
+
console.error("[amsg single-user] fetch() config build failed:", error && error.message);
|
|
3332
|
+
const degraded = degradedCorsHeaders(requestOrigin);
|
|
3333
|
+
if (method === "OPTIONS" && degraded) return new Response(null, { status: 204, headers: degraded });
|
|
3334
|
+
return internalErrorResponse(degraded);
|
|
3335
|
+
}
|
|
3336
|
+
const cors = corsHeadersFor(cfg.cors, requestOrigin);
|
|
3319
3337
|
try {
|
|
3320
|
-
const cfg = await resolveConfig(env);
|
|
3321
|
-
const cors = corsHeadersFor(cfg.cors, request.headers.get("origin") || "");
|
|
3322
|
-
const method = request.method.toUpperCase();
|
|
3323
3338
|
if (method === "OPTIONS") {
|
|
3324
3339
|
return cors ? new Response(null, { status: 204, headers: cors }) : jsonResponse(404, { success: false, error: { code: "NOT_FOUND", message: "Unknown route" } });
|
|
3325
3340
|
}
|
|
@@ -3364,7 +3379,7 @@ function createSingleUserCloudflareWorker(buildConfig) {
|
|
|
3364
3379
|
return jsonResponse(result.status, result.body, cors);
|
|
3365
3380
|
} catch (error) {
|
|
3366
3381
|
console.error("[amsg single-user] fetch() unhandled error:", error && error.message);
|
|
3367
|
-
return
|
|
3382
|
+
return internalErrorResponse(cors);
|
|
3368
3383
|
}
|
|
3369
3384
|
}
|
|
3370
3385
|
async function scheduled(event, env) {
|
|
@@ -3115,7 +3115,7 @@ function createClientStateHandler(ctx) {
|
|
|
3115
3115
|
}
|
|
3116
3116
|
|
|
3117
3117
|
// src/server/lib/version.js
|
|
3118
|
-
var SERVER_VERSION = true ? "2.6.0-next.
|
|
3118
|
+
var SERVER_VERSION = true ? "2.6.0-next.13" : "0.0.0-dev";
|
|
3119
3119
|
|
|
3120
3120
|
// src/server/handlers/capabilities.js
|
|
3121
3121
|
var SERVER_FEATURES = Object.freeze([
|
|
@@ -3309,6 +3309,12 @@ function corsHeadersFor(cors, requestOrigin) {
|
|
|
3309
3309
|
if (allowOrigin !== "*") headers["Vary"] = "Origin";
|
|
3310
3310
|
return headers;
|
|
3311
3311
|
}
|
|
3312
|
+
function degradedCorsHeaders(requestOrigin) {
|
|
3313
|
+
return corsHeadersFor({ origin: requestOrigin, maxAge: 0 }, requestOrigin);
|
|
3314
|
+
}
|
|
3315
|
+
function internalErrorResponse(cors) {
|
|
3316
|
+
return jsonResponse(500, { success: false, error: { code: "INTERNAL_ERROR", message: "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF" } }, cors);
|
|
3317
|
+
}
|
|
3312
3318
|
function createSingleUserCloudflareWorker(buildConfig) {
|
|
3313
3319
|
async function resolveConfig(env) {
|
|
3314
3320
|
const cfg = await buildConfig(env);
|
|
@@ -3316,10 +3322,19 @@ function createSingleUserCloudflareWorker(buildConfig) {
|
|
|
3316
3322
|
return cfg;
|
|
3317
3323
|
}
|
|
3318
3324
|
async function fetch(request, env) {
|
|
3325
|
+
const requestOrigin = request.headers.get("origin") || "";
|
|
3326
|
+
const method = request.method.toUpperCase();
|
|
3327
|
+
let cfg;
|
|
3328
|
+
try {
|
|
3329
|
+
cfg = await resolveConfig(env);
|
|
3330
|
+
} catch (error) {
|
|
3331
|
+
console.error("[amsg single-user] fetch() config build failed:", error && error.message);
|
|
3332
|
+
const degraded = degradedCorsHeaders(requestOrigin);
|
|
3333
|
+
if (method === "OPTIONS" && degraded) return new Response(null, { status: 204, headers: degraded });
|
|
3334
|
+
return internalErrorResponse(degraded);
|
|
3335
|
+
}
|
|
3336
|
+
const cors = corsHeadersFor(cfg.cors, requestOrigin);
|
|
3319
3337
|
try {
|
|
3320
|
-
const cfg = await resolveConfig(env);
|
|
3321
|
-
const cors = corsHeadersFor(cfg.cors, request.headers.get("origin") || "");
|
|
3322
|
-
const method = request.method.toUpperCase();
|
|
3323
3338
|
if (method === "OPTIONS") {
|
|
3324
3339
|
return cors ? new Response(null, { status: 204, headers: cors }) : jsonResponse(404, { success: false, error: { code: "NOT_FOUND", message: "Unknown route" } });
|
|
3325
3340
|
}
|
|
@@ -3364,7 +3379,7 @@ function createSingleUserCloudflareWorker(buildConfig) {
|
|
|
3364
3379
|
return jsonResponse(result.status, result.body, cors);
|
|
3365
3380
|
} catch (error) {
|
|
3366
3381
|
console.error("[amsg single-user] fetch() unhandled error:", error && error.message);
|
|
3367
|
-
return
|
|
3382
|
+
return internalErrorResponse(cors);
|
|
3368
3383
|
}
|
|
3369
3384
|
}
|
|
3370
3385
|
async function scheduled(event, env) {
|
package/dist/cloudflare.cjs
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _chunk5IOYCCFDcjs = require('./chunk-5IOYCCFD.cjs');
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
|
|
@@ -37,4 +37,4 @@ var _chunkUWAVFCGGcjs = require('./chunk-UWAVFCGG.cjs');
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
|
|
40
|
-
exports.MAX_PUSH_PAYLOAD_BYTES =
|
|
40
|
+
exports.MAX_PUSH_PAYLOAD_BYTES = _chunk5IOYCCFDcjs.MAX_PUSH_PAYLOAD_BYTES; exports.PUSH_ENVELOPE_RESERVED_BYTES = _chunk5IOYCCFDcjs.PUSH_ENVELOPE_RESERVED_BYTES; exports.WEB_PUSH_ENCRYPTION_OVERHEAD_BYTES = _chunk5IOYCCFDcjs.WEB_PUSH_ENCRYPTION_OVERHEAD_BYTES; exports.WEB_PUSH_MAX_BODY_BYTES = _chunk5IOYCCFDcjs.WEB_PUSH_MAX_BODY_BYTES; exports.advanceOccurrence = _chunk5IOYCCFDcjs.advanceOccurrence; exports.createD1Adapter = _chunk5IOYCCFDcjs.createD1Adapter; exports.createSingleUserCloudflareWorker = _chunk5IOYCCFDcjs.createSingleUserCloudflareWorker; exports.createSingleUserServer = _chunk5IOYCCFDcjs.createSingleUserServer; exports.createWebCryptoWebPush = _chunk5IOYCCFDcjs.createWebCryptoWebPush; exports.decryptFromStorage = _chunk5IOYCCFDcjs.decryptFromStorage; exports.decryptPayload = _chunk5IOYCCFDcjs.decryptPayload; exports.deriveUserEncryptionKey = _chunk5IOYCCFDcjs.deriveUserEncryptionKey; exports.encryptForStorage = _chunk5IOYCCFDcjs.encryptForStorage; exports.isValidTimeZoneId = _chunk5IOYCCFDcjs.isValidTimeZoneId; exports.measurePushPayload = _chunk5IOYCCFDcjs.measurePushPayload; exports.nextFutureOccurrence = _chunk5IOYCCFDcjs.nextFutureOccurrence; exports.planNextOccurrence = _chunk5IOYCCFDcjs.planNextOccurrence; exports.runScheduledTick = _chunk5IOYCCFDcjs.runScheduledTick;
|
package/dist/cloudflare.mjs
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
|
|
42
|
-
var
|
|
42
|
+
var _chunk5IOYCCFDcjs = require('./chunk-5IOYCCFD.cjs');
|
|
43
43
|
|
|
44
44
|
// src/server/adapters/factory.js
|
|
45
45
|
async function createAdapter(config) {
|
|
@@ -72,7 +72,7 @@ async function createAdapter(config) {
|
|
|
72
72
|
// src/server/handlers/init-tenant.js
|
|
73
73
|
function createInitTenantHandler(ctx) {
|
|
74
74
|
async function POST(headers, body) {
|
|
75
|
-
const initSecret =
|
|
75
|
+
const initSecret = _chunk5IOYCCFDcjs.getHeader.call(void 0, headers, "x-init-secret");
|
|
76
76
|
if (ctx.tenant.initSecret && initSecret !== ctx.tenant.initSecret) {
|
|
77
77
|
return {
|
|
78
78
|
status: 401,
|
|
@@ -85,7 +85,7 @@ function createInitTenantHandler(ctx) {
|
|
|
85
85
|
}
|
|
86
86
|
};
|
|
87
87
|
}
|
|
88
|
-
const parsed =
|
|
88
|
+
const parsed = _chunk5IOYCCFDcjs.parseJsonBody.call(void 0, body);
|
|
89
89
|
if (!parsed.ok) {
|
|
90
90
|
return {
|
|
91
91
|
status: 400,
|
|
@@ -99,7 +99,7 @@ function createInitTenantHandler(ctx) {
|
|
|
99
99
|
const tenantId = payload.tenantId || void 0;
|
|
100
100
|
const driver = payload.driver;
|
|
101
101
|
const databaseUrl = payload.databaseUrl || payload.connectionString;
|
|
102
|
-
if (tenantId && !
|
|
102
|
+
if (tenantId && !_chunk5IOYCCFDcjs.isValidUUIDv4.call(void 0, tenantId)) {
|
|
103
103
|
return {
|
|
104
104
|
status: 400,
|
|
105
105
|
body: {
|
|
@@ -219,7 +219,7 @@ function createSendNotificationsHandler(ctx) {
|
|
|
219
219
|
}
|
|
220
220
|
};
|
|
221
221
|
}
|
|
222
|
-
const data = await
|
|
222
|
+
const data = await _chunk5IOYCCFDcjs.runScheduledTick.call(void 0, { ...ctx, db, masterKey });
|
|
223
223
|
return { status: 200, body: { success: true, data } };
|
|
224
224
|
}
|
|
225
225
|
return { POST };
|
|
@@ -326,7 +326,7 @@ function createTenantBlobStore(options) {
|
|
|
326
326
|
// src/server/tenant/token.js
|
|
327
327
|
|
|
328
328
|
function sign(input, secret) {
|
|
329
|
-
return
|
|
329
|
+
return _chunk5IOYCCFDcjs.bytesToBase64Url.call(void 0, _crypto.createHmac.call(void 0, "sha256", secret).update(input).digest());
|
|
330
330
|
}
|
|
331
331
|
function nowEpochSeconds() {
|
|
332
332
|
return Math.floor(Date.now() / 1e3);
|
|
@@ -342,8 +342,8 @@ function createTenantToken(params, secret) {
|
|
|
342
342
|
v: 1
|
|
343
343
|
};
|
|
344
344
|
const header = { alg: "HS256", typ: "JWT" };
|
|
345
|
-
const encodedHeader =
|
|
346
|
-
const encodedPayload =
|
|
345
|
+
const encodedHeader = _chunk5IOYCCFDcjs.bytesToBase64Url.call(void 0, _chunk5IOYCCFDcjs.utf8.call(void 0, JSON.stringify(header)));
|
|
346
|
+
const encodedPayload = _chunk5IOYCCFDcjs.bytesToBase64Url.call(void 0, _chunk5IOYCCFDcjs.utf8.call(void 0, JSON.stringify(payload)));
|
|
347
347
|
const signingInput = `${encodedHeader}.${encodedPayload}`;
|
|
348
348
|
const signature = sign(signingInput, secret);
|
|
349
349
|
return `${signingInput}.${signature}`;
|
|
@@ -362,17 +362,17 @@ function verifyTenantToken(token, secret, options = {}) {
|
|
|
362
362
|
let receivedBytes;
|
|
363
363
|
let expectedBytes;
|
|
364
364
|
try {
|
|
365
|
-
receivedBytes =
|
|
366
|
-
expectedBytes =
|
|
365
|
+
receivedBytes = _chunk5IOYCCFDcjs.base64UrlToBytes.call(void 0, receivedSignature);
|
|
366
|
+
expectedBytes = _chunk5IOYCCFDcjs.base64UrlToBytes.call(void 0, expectedSignature);
|
|
367
367
|
} catch (e) {
|
|
368
368
|
throw new Error("INVALID_TENANT_AUTH");
|
|
369
369
|
}
|
|
370
|
-
if (!
|
|
370
|
+
if (!_chunk5IOYCCFDcjs.timingSafeEqualBytes.call(void 0, receivedBytes, expectedBytes)) {
|
|
371
371
|
throw new Error("INVALID_TENANT_AUTH");
|
|
372
372
|
}
|
|
373
373
|
let payload;
|
|
374
374
|
try {
|
|
375
|
-
payload = JSON.parse(
|
|
375
|
+
payload = JSON.parse(_chunk5IOYCCFDcjs.utf8Decode.call(void 0, _chunk5IOYCCFDcjs.base64UrlToBytes.call(void 0, encodedPayload)));
|
|
376
376
|
} catch (e2) {
|
|
377
377
|
throw new Error("INVALID_TENANT_AUTH");
|
|
378
378
|
}
|
|
@@ -583,14 +583,14 @@ async function createReiServer(config) {
|
|
|
583
583
|
return {
|
|
584
584
|
handlers: {
|
|
585
585
|
initTenant: createInitTenantHandler(ctx),
|
|
586
|
-
getUserKey:
|
|
587
|
-
scheduleMessage:
|
|
586
|
+
getUserKey: _chunk5IOYCCFDcjs.createGetUserKeyHandler.call(void 0, ctx),
|
|
587
|
+
scheduleMessage: _chunk5IOYCCFDcjs.createScheduleMessageHandler.call(void 0, ctx),
|
|
588
588
|
sendNotifications: createSendNotificationsHandler(ctx),
|
|
589
|
-
updateMessage:
|
|
590
|
-
cancelMessage:
|
|
591
|
-
messages:
|
|
592
|
-
getMessage:
|
|
593
|
-
pushSubscription:
|
|
589
|
+
updateMessage: _chunk5IOYCCFDcjs.createUpdateMessageHandler.call(void 0, ctx),
|
|
590
|
+
cancelMessage: _chunk5IOYCCFDcjs.createCancelMessageHandler.call(void 0, ctx),
|
|
591
|
+
messages: _chunk5IOYCCFDcjs.createMessagesHandler.call(void 0, ctx),
|
|
592
|
+
getMessage: _chunk5IOYCCFDcjs.createGetMessageHandler.call(void 0, ctx),
|
|
593
|
+
pushSubscription: _chunk5IOYCCFDcjs.createPushSubscriptionHandler.call(void 0, ctx)
|
|
594
594
|
}
|
|
595
595
|
};
|
|
596
596
|
}
|
|
@@ -625,4 +625,4 @@ async function createReiServer(config) {
|
|
|
625
625
|
|
|
626
626
|
|
|
627
627
|
|
|
628
|
-
exports.MAX_PUSH_PAYLOAD_BYTES =
|
|
628
|
+
exports.MAX_PUSH_PAYLOAD_BYTES = _chunk5IOYCCFDcjs.MAX_PUSH_PAYLOAD_BYTES; exports.PUSH_ENVELOPE_RESERVED_BYTES = _chunk5IOYCCFDcjs.PUSH_ENVELOPE_RESERVED_BYTES; exports.WEB_PUSH_ENCRYPTION_OVERHEAD_BYTES = _chunk5IOYCCFDcjs.WEB_PUSH_ENCRYPTION_OVERHEAD_BYTES; exports.WEB_PUSH_MAX_BODY_BYTES = _chunk5IOYCCFDcjs.WEB_PUSH_MAX_BODY_BYTES; exports.advanceOccurrence = _chunk5IOYCCFDcjs.advanceOccurrence; exports.createAdapter = createAdapter; exports.createD1Adapter = _chunk5IOYCCFDcjs.createD1Adapter; exports.createReiServer = createReiServer; exports.createSingleUserCloudflareWorker = _chunk5IOYCCFDcjs.createSingleUserCloudflareWorker; exports.createSingleUserServer = _chunk5IOYCCFDcjs.createSingleUserServer; exports.createTenantToken = createTenantToken; exports.createWebCryptoWebPush = _chunk5IOYCCFDcjs.createWebCryptoWebPush; exports.decryptFromStorage = _chunk5IOYCCFDcjs.decryptFromStorage; exports.decryptPayload = _chunk5IOYCCFDcjs.decryptPayload; exports.deriveUserEncryptionKey = _chunk5IOYCCFDcjs.deriveUserEncryptionKey; exports.encryptForStorage = _chunk5IOYCCFDcjs.encryptForStorage; exports.isValidISO8601 = _chunk5IOYCCFDcjs.isValidISO8601; exports.isValidTimeZoneId = _chunk5IOYCCFDcjs.isValidTimeZoneId; exports.isValidUUID = _chunk5IOYCCFDcjs.isValidUUID; exports.isValidUUIDv4 = _chunk5IOYCCFDcjs.isValidUUIDv4; exports.isValidUrl = _chunk5IOYCCFDcjs.isValidUrl; exports.measurePushPayload = _chunk5IOYCCFDcjs.measurePushPayload; exports.nextFutureOccurrence = _chunk5IOYCCFDcjs.nextFutureOccurrence; exports.planNextOccurrence = _chunk5IOYCCFDcjs.planNextOccurrence; exports.runScheduledTick = _chunk5IOYCCFDcjs.runScheduledTick; exports.validateAvatarUrl = _chunk5IOYCCFDcjs.validateAvatarUrl; exports.validateLlmMessagesArray = _chunk5IOYCCFDcjs.validateLlmMessagesArray; exports.validateScheduleMessagePayload = _chunk5IOYCCFDcjs.validateScheduleMessagePayload; exports.validateSplitPattern = _chunk5IOYCCFDcjs.validateSplitPattern; exports.verifyTenantToken = verifyTenantToken;
|
package/dist/index.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rei-standard/amsg-server",
|
|
3
|
-
"version": "2.6.0-next.
|
|
3
|
+
"version": "2.6.0-next.13",
|
|
4
4
|
"description": "ReiStandard Active Messaging server SDK with pluggable database adapters. Three-axis push schema (messageKind / messageType / messageSubtype) from @rei-standard/amsg-shared. Auto-emits ReasoningPush when the LLM response carries reasoning_content.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|