@nocobase/app-server 3.0.0-beta.4 → 4.0.0-beta.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/README.md +1 -1
- package/dist/logging/middleware.d.ts.map +1 -1
- package/dist/logging/middleware.js +88 -7
- package/dist/logging/middleware.js.map +1 -1
- package/dist/mailer/index.d.ts +7 -1
- package/dist/mailer/index.d.ts.map +1 -1
- package/dist/mailer/index.js +5 -1
- package/dist/mailer/index.js.map +1 -1
- package/dist/realtime/broker-registry.d.ts +16 -0
- package/dist/realtime/broker-registry.d.ts.map +1 -0
- package/dist/realtime/broker-registry.js +37 -0
- package/dist/realtime/broker-registry.js.map +1 -0
- package/dist/realtime/config.d.ts +6 -4
- package/dist/realtime/config.d.ts.map +1 -1
- package/dist/realtime/config.js +12 -9
- package/dist/realtime/config.js.map +1 -1
- package/dist/realtime/index.d.ts +1 -0
- package/dist/realtime/index.d.ts.map +1 -1
- package/dist/realtime/index.js +1 -0
- package/dist/realtime/index.js.map +1 -1
- package/dist/realtime/provider.d.ts.map +1 -1
- package/dist/realtime/provider.js +11 -6
- package/dist/realtime/provider.js.map +1 -1
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ Ordinary task identity is connection or storage path, namespace and scope, like
|
|
|
14
14
|
|
|
15
15
|
Background work goes to the jobs service above by default; queues are for what it does not have — delays, priorities, deduplicating job IDs, batches, rate limits and several handlers per message. `QueueServiceProvider` and `queueServiceToken` from `@nocobase/app-server/queue` compose the application's `QueueService` from `@nocobase/queue`. Add the provider before plugin providers with `app.addServiceProvider(QueueServiceProvider, { nodeEnv })`. It creates the service lazily from the `queue` configuration section, with `app.appName` as the default namespace, `app.paths.storage('queue')` for memory state files, and the `queue` logger. `start()` calls `setup()` after every provider has booted, and `shutdown()` releases the service. `AppQueueConfig` types `server/config/queue.ts`.
|
|
16
16
|
|
|
17
|
-
Plugins resolve `queueServiceToken`, register backend
|
|
17
|
+
Plugins resolve `queueServiceToken`, register backend implementations in `register()`, register handlers with `consumer(queue).consume()` in `boot()`, publish after setup, and await their unregister functions in `shutdown()` before releasing what the handlers use. Without `queue.default`, queues run on the built-in memory configuration, which warns outside `develop` and `development`. A `queue` section in the former `connections`/`worker`/`jobs` format is ignored with one warning. See the [queue package guide](../../libs/queue/README.md) for configuration keys, delivery, retries, cancellation and shutdown.
|
|
18
18
|
|
|
19
19
|
## Realtime topics
|
|
20
20
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/logging/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAQ,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAE7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/logging/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAQ,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAE7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAC;AA0F5B,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IACrC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,oBAAoB,GAC5B,iBAAiB,CAuEnB;AAED,eAAO,MAAM,wBAAwB,EAAE,iBAAiB,CAAC,oBAAoB,CAmBzE,CAAC"}
|
|
@@ -12,6 +12,74 @@ const defaultRequestHeaders = [
|
|
|
12
12
|
'referer',
|
|
13
13
|
'user-agent',
|
|
14
14
|
];
|
|
15
|
+
const integer = (minimum, maximum) => (value) => /^(?:0|[1-9]\d*)$/u.test(value) &&
|
|
16
|
+
Number(value) >= minimum &&
|
|
17
|
+
Number(value) <= maximum;
|
|
18
|
+
const paginationParameters = {
|
|
19
|
+
limit: integer(1, 1000),
|
|
20
|
+
offset: integer(0, 1_000_000_000),
|
|
21
|
+
page: integer(1, 1_000_000_000),
|
|
22
|
+
pageSize: integer(1, 1000),
|
|
23
|
+
};
|
|
24
|
+
const shortValue = (value) => /^-?(?:0|[1-9]\d{0,2})$/u.test(value) ||
|
|
25
|
+
/^[a-z][a-zA-Z_-]{0,15}$/u.test(value);
|
|
26
|
+
const identifierValue = (value) => /^(?:0|[1-9]\d{0,19})$/u.test(value) ||
|
|
27
|
+
/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(value);
|
|
28
|
+
const sensitiveParameterName = /password|passwd|token|secret|authorization|cookie|api[-_]?key|credential|signature|code|state|session|ticket|otp|nonce|^key$/iu;
|
|
29
|
+
function acceptsParameter(key, value) {
|
|
30
|
+
// Reject length before validating; never make a rejected value acceptable by
|
|
31
|
+
// truncating it. Pagination is bounded independently of identifier shapes.
|
|
32
|
+
if (value.length > 100 || sensitiveParameterName.test(key))
|
|
33
|
+
return false;
|
|
34
|
+
if (Object.hasOwn(paginationParameters, key))
|
|
35
|
+
return paginationParameters[key](value);
|
|
36
|
+
return (shortValue(value) ||
|
|
37
|
+
((key === 'id' || key.endsWith('Id')) && identifierValue(value)));
|
|
38
|
+
}
|
|
39
|
+
function safeParameters(values, redact) {
|
|
40
|
+
const safe = Object.create(null);
|
|
41
|
+
for (const [key, value] of Object.entries(values)) {
|
|
42
|
+
if (Object.keys(safe).length >= 20)
|
|
43
|
+
break;
|
|
44
|
+
if (key.length > 64)
|
|
45
|
+
continue;
|
|
46
|
+
if (acceptsParameter(key, value))
|
|
47
|
+
safe[key] = value;
|
|
48
|
+
else if (redact)
|
|
49
|
+
safe[key] = '[REDACTED]';
|
|
50
|
+
}
|
|
51
|
+
return safe;
|
|
52
|
+
}
|
|
53
|
+
function safeQuery(context) {
|
|
54
|
+
return safeParameters(context.req.query(), false);
|
|
55
|
+
}
|
|
56
|
+
function safePath(context) {
|
|
57
|
+
// Hono has already matched routes before middleware runs. Templates also
|
|
58
|
+
// protect wildcard mounts whose nested router owns the token parameter.
|
|
59
|
+
let concrete;
|
|
60
|
+
let wildcard = '*';
|
|
61
|
+
for (const { path } of context.req.matchedRoutes) {
|
|
62
|
+
if (!path.endsWith('*'))
|
|
63
|
+
concrete = path;
|
|
64
|
+
else if (path.length > wildcard.length)
|
|
65
|
+
wildcard = path;
|
|
66
|
+
}
|
|
67
|
+
return concrete ?? wildcard;
|
|
68
|
+
}
|
|
69
|
+
/** A transport hint for traffic analysis, never an authentication decision. */
|
|
70
|
+
function callerOf(context) {
|
|
71
|
+
if (context.req.header('x-nocobase-runner-key'))
|
|
72
|
+
return 'runner';
|
|
73
|
+
if (context.req.header('x-nocobase-run-token'))
|
|
74
|
+
return 'agentRun';
|
|
75
|
+
if (context.req.header('x-nocobase-client') === 'cli')
|
|
76
|
+
return 'cli';
|
|
77
|
+
if (context.req.header('x-api-key'))
|
|
78
|
+
return 'apiKey';
|
|
79
|
+
if (context.req.header('cookie'))
|
|
80
|
+
return 'browser';
|
|
81
|
+
return 'anonymous';
|
|
82
|
+
}
|
|
15
83
|
export function requestLogger(options) {
|
|
16
84
|
return createMiddleware(async (context, next) => {
|
|
17
85
|
if (options.skip?.(context)) {
|
|
@@ -22,13 +90,14 @@ export function requestLogger(options) {
|
|
|
22
90
|
const startedAt = Date.now();
|
|
23
91
|
const app = options.app;
|
|
24
92
|
const method = context.req.method;
|
|
25
|
-
const path = context
|
|
93
|
+
const path = safePath(context);
|
|
26
94
|
logger.debug({
|
|
27
95
|
...(app ? { app } : {}),
|
|
28
96
|
req: {
|
|
29
97
|
method,
|
|
30
98
|
path,
|
|
31
|
-
query: context
|
|
99
|
+
query: safeQuery(context),
|
|
100
|
+
caller: callerOf(context),
|
|
32
101
|
headers: selectHeaders(context, options.requestHeaders ?? defaultRequestHeaders),
|
|
33
102
|
},
|
|
34
103
|
}, `${method} ${path} started`);
|
|
@@ -72,11 +141,11 @@ function completionBindings(context, app, method, path, startedAt, status, error
|
|
|
72
141
|
req: {
|
|
73
142
|
method,
|
|
74
143
|
path,
|
|
75
|
-
|
|
76
|
-
|
|
144
|
+
params: safeParameters(context.req.param(), true),
|
|
145
|
+
query: safeQuery(context),
|
|
146
|
+
caller: callerOf(context),
|
|
77
147
|
...(status >= 400
|
|
78
148
|
? {
|
|
79
|
-
query: context.req.query(),
|
|
80
149
|
headers: selectHeaders(context, requestHeaders),
|
|
81
150
|
}
|
|
82
151
|
: {}),
|
|
@@ -113,8 +182,20 @@ function selectHeaders(context, names) {
|
|
|
113
182
|
const headers = {};
|
|
114
183
|
for (const name of names) {
|
|
115
184
|
const value = context.req.header(name);
|
|
116
|
-
if (value
|
|
117
|
-
|
|
185
|
+
if (value === undefined)
|
|
186
|
+
continue;
|
|
187
|
+
const key = name.toLowerCase();
|
|
188
|
+
if (key === 'referer') {
|
|
189
|
+
// Referrers can repeat the same private path or query as the request.
|
|
190
|
+
try {
|
|
191
|
+
headers[key] = new URL(value).origin;
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
// An invalid referrer is not useful diagnostic context.
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else
|
|
198
|
+
headers[key] = value;
|
|
118
199
|
}
|
|
119
200
|
return headers;
|
|
120
201
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/logging/middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAIhD,OAAO,EACL,oBAAoB,EACpB,YAAY,GAEb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,qBAAqB,GAAG;IAC5B,QAAQ;IACR,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,iBAAiB;IACjB,eAAe;IACf,kBAAkB;IAClB,SAAS;IACT,YAAY;CACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/logging/middleware.ts"],"names":[],"mappings":"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"}
|
package/dist/mailer/index.d.ts
CHANGED
|
@@ -2,19 +2,25 @@ import { type EmailMessage, type MailResult, type MailSendOptions } from '@nocob
|
|
|
2
2
|
import { ServiceProvider, type ServiceToken } from '@nocobase/service-provider';
|
|
3
3
|
import { type AppConfigDefinition, type AppConfigFactory, type ConfigValidator } from '../config/index.js';
|
|
4
4
|
import type { AppPluginApplication } from '../plugins/index.js';
|
|
5
|
+
/** @deprecated Import MailChannelsConfig from @nocobase/app-plugin-notification-providers/config. */
|
|
5
6
|
export interface MailChannelsConfig {
|
|
6
7
|
readonly channels: Readonly<Record<string, unknown>>;
|
|
7
8
|
}
|
|
9
|
+
/** @deprecated Own a transport from @nocobase/mailer in the sending service. */
|
|
8
10
|
export interface Mailer {
|
|
9
11
|
available(channel: string): boolean;
|
|
10
12
|
send(channel: string, message: EmailMessage, options?: MailSendOptions): Promise<MailResult>;
|
|
11
13
|
close(): Promise<void>;
|
|
12
14
|
}
|
|
15
|
+
/** @deprecated Own a transport from @nocobase/mailer in the sending service. */
|
|
13
16
|
export declare const mailerToken: ServiceToken<Mailer>;
|
|
17
|
+
/** @deprecated Import validateMailChannels from @nocobase/app-plugin-notification-providers/config. */
|
|
14
18
|
export declare const validateMailChannels: ConfigValidator<MailChannelsConfig>;
|
|
15
|
-
/**
|
|
19
|
+
/** @deprecated Import defineMailChannelsConfig from @nocobase/app-plugin-notification-providers/config. */
|
|
16
20
|
export declare function defineMailChannelsConfig<T extends MailChannelsConfig>(definition: AppConfigDefinition<T>): AppConfigFactory<T>;
|
|
21
|
+
/** @deprecated Own a transport from @nocobase/mailer in the sending service. */
|
|
17
22
|
export declare function createMailer(config: MailChannelsConfig): Mailer;
|
|
23
|
+
/** @deprecated Own a transport and its lifecycle in the sending service. */
|
|
18
24
|
export declare class MailerProvider extends ServiceProvider<AppPluginApplication> {
|
|
19
25
|
readonly name: string;
|
|
20
26
|
register(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mailer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,eAAe,EAGrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,eAAe,EACf,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,MAAM;IACrB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC,IAAI,CACF,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,UAAU,CAAC,CAAC;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,eAAO,MAAM,WAAW,EAAE,YAAY,CAAC,MAAM,CAE5C,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,eAAe,CAAC,kBAAkB,CA+BpE,CAAC;AAkBF,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mailer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,eAAe,EAGrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,eAAe,EACf,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,qGAAqG;AACrG,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED,gFAAgF;AAChF,MAAM,WAAW,MAAM;IACrB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC,IAAI,CACF,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,UAAU,CAAC,CAAC;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,gFAAgF;AAChF,eAAO,MAAM,WAAW,EAAE,YAAY,CAAC,MAAM,CAE5C,CAAC;AAEF,uGAAuG;AACvG,eAAO,MAAM,oBAAoB,EAAE,eAAe,CAAC,kBAAkB,CA+BpE,CAAC;AAkBF,2GAA2G;AAC3G,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,kBAAkB,EACnE,UAAU,EAAE,mBAAmB,CAAC,CAAC,CAAC,GACjC,gBAAgB,CAAC,CAAC,CAAC,CAqBrB;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAmC/D;AAED,4EAA4E;AAC5E,qBAAa,cAAe,SAAQ,eAAe,CAAC,oBAAoB,CAAC;IACvE,SAAgB,IAAI,EAAE,MAAM,CAAiC;IAC7C,QAAQ,IAAI,IAAI;IASV,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGhD"}
|
package/dist/mailer/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { createMailTransport, isMailChannelConfig, } from '@nocobase/mailer';
|
|
2
2
|
import { createServiceToken, ServiceProvider, } from '@nocobase/service-provider';
|
|
3
3
|
import { defineAppConfig, resolveChannelType, envString, } from '../config/index.js';
|
|
4
|
+
/** @deprecated Own a transport from @nocobase/mailer in the sending service. */
|
|
4
5
|
export const mailerToken = createServiceToken('@nocobase/app-server/mailer');
|
|
6
|
+
/** @deprecated Import validateMailChannels from @nocobase/app-plugin-notification-providers/config. */
|
|
5
7
|
export const validateMailChannels = (config, context) => {
|
|
6
8
|
for (const [name, channel] of Object.entries(config.channels ?? {})) {
|
|
7
9
|
if (!channel || typeof channel !== 'object')
|
|
@@ -40,7 +42,7 @@ function mailChannel(channel) {
|
|
|
40
42
|
return undefined;
|
|
41
43
|
}
|
|
42
44
|
}
|
|
43
|
-
/**
|
|
45
|
+
/** @deprecated Import defineMailChannelsConfig from @nocobase/app-plugin-notification-providers/config. */
|
|
44
46
|
export function defineMailChannelsConfig(definition) {
|
|
45
47
|
const extra = definition.validate
|
|
46
48
|
? Array.isArray(definition.validate)
|
|
@@ -63,6 +65,7 @@ export function defineMailChannelsConfig(definition) {
|
|
|
63
65
|
},
|
|
64
66
|
});
|
|
65
67
|
}
|
|
68
|
+
/** @deprecated Own a transport from @nocobase/mailer in the sending service. */
|
|
66
69
|
export function createMailer(config) {
|
|
67
70
|
const transports = new Map();
|
|
68
71
|
let closed = false;
|
|
@@ -98,6 +101,7 @@ export function createMailer(config) {
|
|
|
98
101
|
},
|
|
99
102
|
};
|
|
100
103
|
}
|
|
104
|
+
/** @deprecated Own a transport and its lifecycle in the sending service. */
|
|
101
105
|
export class MailerProvider extends ServiceProvider {
|
|
102
106
|
name = '@nocobase/app-server/mailer';
|
|
103
107
|
register() {
|
package/dist/mailer/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mailer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GAMpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,eAAe,GAEhB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,SAAS,GAIV,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mailer/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type RealtimeBroker, type RealtimeServiceOptions } from '@nocobase/realtime/server';
|
|
2
|
+
import { type ServiceToken } from '@nocobase/service-provider';
|
|
3
|
+
export interface RealtimeBrokerFactoryContext {
|
|
4
|
+
readonly namespace: string;
|
|
5
|
+
readonly config: Readonly<Record<string, unknown>>;
|
|
6
|
+
readonly logger?: RealtimeServiceOptions['logger'];
|
|
7
|
+
}
|
|
8
|
+
export type RealtimeBrokerFactory = (context: RealtimeBrokerFactoryContext) => RealtimeBroker;
|
|
9
|
+
export interface RealtimeBrokerRegistry {
|
|
10
|
+
register(adapter: string, factory: RealtimeBrokerFactory): void;
|
|
11
|
+
create(adapter: string, context: RealtimeBrokerFactoryContext): RealtimeBroker;
|
|
12
|
+
}
|
|
13
|
+
/** One application, one selection. Resource ownership stays with RealtimeService. */
|
|
14
|
+
export declare function createRealtimeBrokerRegistry(): RealtimeBrokerRegistry;
|
|
15
|
+
export declare const realtimeBrokerRegistryToken: ServiceToken<RealtimeBrokerRegistry>;
|
|
16
|
+
//# sourceMappingURL=broker-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broker-registry.d.ts","sourceRoot":"","sources":["../../src/realtime/broker-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC;CACpD;AAED,MAAM,MAAM,qBAAqB,GAAG,CAClC,OAAO,EAAE,4BAA4B,KAClC,cAAc,CAAC;AAEpB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAChE,MAAM,CACJ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,4BAA4B,GACpC,cAAc,CAAC;CACnB;AAED,qFAAqF;AACrF,wBAAgB,4BAA4B,IAAI,sBAAsB,CAmCrE;AAED,eAAO,MAAM,2BAA2B,EAAE,YAAY,CAAC,sBAAsB,CAG1E,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createInMemoryBroker, } from '@nocobase/realtime/server';
|
|
2
|
+
import { createServiceToken, } from '@nocobase/service-provider';
|
|
3
|
+
/** One application, one selection. Resource ownership stays with RealtimeService. */
|
|
4
|
+
export function createRealtimeBrokerRegistry() {
|
|
5
|
+
const factories = new Map([
|
|
6
|
+
['inMemory', () => createInMemoryBroker()],
|
|
7
|
+
]);
|
|
8
|
+
let selected = false;
|
|
9
|
+
function validate(adapter) {
|
|
10
|
+
if (typeof adapter !== 'string' || !adapter.trim())
|
|
11
|
+
throw new TypeError('Realtime adapter must be a non-empty string.');
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
register(adapter, factory) {
|
|
15
|
+
validate(adapter);
|
|
16
|
+
if (selected)
|
|
17
|
+
throw new Error(`Realtime broker registration is too late for "${adapter}"; register factories before resolving realtimeServiceToken.`);
|
|
18
|
+
if (factories.has(adapter))
|
|
19
|
+
throw new Error(`Realtime broker "${adapter}" is already registered.`);
|
|
20
|
+
if (typeof factory !== 'function')
|
|
21
|
+
throw new TypeError('Realtime broker factory must be a function.');
|
|
22
|
+
factories.set(adapter, factory);
|
|
23
|
+
},
|
|
24
|
+
create(adapter, context) {
|
|
25
|
+
validate(adapter);
|
|
26
|
+
if (selected)
|
|
27
|
+
throw new Error('Realtime broker has already been selected.');
|
|
28
|
+
selected = true;
|
|
29
|
+
const factory = factories.get(adapter);
|
|
30
|
+
if (!factory)
|
|
31
|
+
throw new Error(`Realtime broker "${adapter}" is not registered. Install its implementation and register its Server plugin before resolving realtimeServiceToken.`);
|
|
32
|
+
return factory(context);
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export const realtimeBrokerRegistryToken = createServiceToken('@nocobase/app-server/realtime/broker-registry');
|
|
37
|
+
//# sourceMappingURL=broker-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broker-registry.js","sourceRoot":"","sources":["../../src/realtime/broker-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,GAGrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,kBAAkB,GAEnB,MAAM,4BAA4B,CAAC;AAoBpC,qFAAqF;AACrF,MAAM,UAAU,4BAA4B;IAC1C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAgC;QACvD,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,oBAAoB,EAAE,CAAC;KAC3C,CAAC,CAAC;IACH,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,SAAS,QAAQ,CAAC,OAAe;QAC/B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAChD,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;IACxE,CAAC;IACD,OAAO;QACL,QAAQ,CAAC,OAAO,EAAE,OAAO;YACvB,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClB,IAAI,QAAQ;gBACV,MAAM,IAAI,KAAK,CACb,iDAAiD,OAAO,8DAA8D,CACvH,CAAC;YACJ,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,0BAA0B,CAAC,CAAC;YACzE,IAAI,OAAO,OAAO,KAAK,UAAU;gBAC/B,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;YACrE,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,CAAC,OAAO,EAAE,OAAO;YACrB,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClB,IAAI,QAAQ;gBACV,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAChE,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,CAAC,OAAO;gBACV,MAAM,IAAI,KAAK,CACb,oBAAoB,OAAO,uHAAuH,CACnJ,CAAC;YACJ,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,2BAA2B,GACtC,kBAAkB,CAChB,+CAA+C,CAChD,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type { RealtimeServiceOptions } from '@nocobase/realtime/server';
|
|
2
|
+
import { type RealtimeBrokerRegistry } from './broker-registry.js';
|
|
2
3
|
export interface AppRealtimeConfig {
|
|
3
|
-
readonly
|
|
4
|
-
readonly
|
|
4
|
+
readonly [key: string]: unknown;
|
|
5
|
+
readonly adapter?: string;
|
|
5
6
|
readonly namespace?: string;
|
|
6
7
|
readonly authorizationTimeoutMs?: number;
|
|
7
8
|
readonly sessionCheckIntervalMs?: number;
|
|
@@ -16,5 +17,6 @@ export interface AppRealtimeConfig {
|
|
|
16
17
|
readonly maxPendingMessagesPerConnection?: number;
|
|
17
18
|
};
|
|
18
19
|
}
|
|
19
|
-
|
|
20
|
+
/** Extension-specific values are validated only by the selected factory. */
|
|
21
|
+
export declare function realtimeServiceOptions(config?: AppRealtimeConfig, appName?: string, registry?: RealtimeBrokerRegistry, logger?: RealtimeServiceOptions['logger']): RealtimeServiceOptions;
|
|
20
22
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/realtime/config.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/realtime/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,2BAA2B,CAAC,EAAE,MAAM,CAAC;QAC9C,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAC3C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QACpC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAClC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,MAAM,CAAC;QAChD,QAAQ,CAAC,6BAA6B,CAAC,EAAE,MAAM,CAAC;QAChD,QAAQ,CAAC,+BAA+B,CAAC,EAAE,MAAM,CAAC;KACnD,CAAC;CACH;AAED,4EAA4E;AAC5E,wBAAgB,sBAAsB,CACpC,MAAM,GAAE,iBAAsB,EAC9B,OAAO,GAAE,MAAkB,EAC3B,QAAQ,GAAE,sBAAuD,EACjE,MAAM,CAAC,EAAE,sBAAsB,CAAC,QAAQ,CAAC,GACxC,sBAAsB,CAqBxB"}
|
package/dist/realtime/config.js
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
throw new TypeError('Unsupported realtime adapter.');
|
|
1
|
+
import { createRealtimeBrokerRegistry, } from './broker-registry.js';
|
|
2
|
+
/** Extension-specific values are validated only by the selected factory. */
|
|
3
|
+
export function realtimeServiceOptions(config = {}, appName = 'default', registry = createRealtimeBrokerRegistry(), logger) {
|
|
4
|
+
if (typeof config !== 'object' || config === null || Array.isArray(config))
|
|
5
|
+
throw new TypeError('Realtime configuration must be an object.');
|
|
7
6
|
const namespace = config.namespace ?? appName;
|
|
8
7
|
if (typeof namespace !== 'string' || !namespace.trim())
|
|
9
8
|
throw new TypeError('Realtime namespace must be a non-empty string.');
|
|
9
|
+
const adapter = config.adapter === undefined ? 'inMemory' : config.adapter;
|
|
10
|
+
if (config.limits !== undefined &&
|
|
11
|
+
(typeof config.limits !== 'object' ||
|
|
12
|
+
config.limits === null ||
|
|
13
|
+
Array.isArray(config.limits)))
|
|
14
|
+
throw new TypeError('Realtime limits must be an object.');
|
|
10
15
|
return {
|
|
11
16
|
...config.limits,
|
|
12
|
-
broker:
|
|
13
|
-
? createRedisRealtimeBroker({ ...config.redis, namespace })
|
|
14
|
-
: undefined,
|
|
17
|
+
broker: registry.create(adapter, { namespace, config, logger }),
|
|
15
18
|
namespace,
|
|
16
19
|
authorizationTimeoutMs: config.authorizationTimeoutMs,
|
|
17
20
|
sessionCheckIntervalMs: config.sessionCheckIntervalMs,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/realtime/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/realtime/config.ts"],"names":[],"mappings":"AACA,OAAO,EACL,4BAA4B,GAE7B,MAAM,sBAAsB,CAAC;AAoB9B,4EAA4E;AAC5E,MAAM,UAAU,sBAAsB,CACpC,SAA4B,EAAE,EAC9B,UAAkB,SAAS,EAC3B,WAAmC,4BAA4B,EAAE,EACjE,MAAyC;IAEzC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACxE,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC;IAC9C,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACpD,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IAC3E,IACE,MAAM,CAAC,MAAM,KAAK,SAAS;QAC3B,CAAC,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;YAChC,MAAM,CAAC,MAAM,KAAK,IAAI;YACtB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE/B,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC5D,OAAO;QACL,GAAG,MAAM,CAAC,MAAM;QAChB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC/D,SAAS;QACT,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;QACrD,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;KACtD,CAAC;AACJ,CAAC"}
|
package/dist/realtime/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC"}
|
package/dist/realtime/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/realtime/provider.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,KAAK,gBAAgB,EACtB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/realtime/provider.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,KAAK,gBAAgB,EACtB,MAAM,4BAA4B,CAAC;AASpC,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAA;KAAE,CAAC;CAC1D;AAED,qBAAa,gBAAgB,CAC3B,YAAY,SAAS,2BAA2B,GAC9C,2BAA2B,CAC7B,SAAQ,eAAe,CAAC,YAAY,CAAC;IACrC,SAAgB,IAAI,EAAE,MAAM,CAAc;IAE1B,QAAQ,IAAI,IAAI;IAqBV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGhD"}
|
|
@@ -3,15 +3,20 @@ import { ServiceProvider, } from '@nocobase/service-provider';
|
|
|
3
3
|
import { createRealtimeService } from './service.js';
|
|
4
4
|
import { realtimeServiceToken } from './types.js';
|
|
5
5
|
import { realtimeServiceOptions } from './config.js';
|
|
6
|
+
import { createRealtimeBrokerRegistry, realtimeBrokerRegistryToken, } from './broker-registry.js';
|
|
6
7
|
export class RealtimeProvider extends ServiceProvider {
|
|
7
8
|
name = 'realtime';
|
|
8
9
|
register() {
|
|
9
|
-
this.app.container.
|
|
10
|
-
|
|
11
|
-
logger
|
|
12
|
-
?
|
|
13
|
-
: undefined
|
|
14
|
-
|
|
10
|
+
this.app.container.instance(realtimeBrokerRegistryToken, createRealtimeBrokerRegistry());
|
|
11
|
+
this.app.container.singleton(realtimeServiceToken, (container) => {
|
|
12
|
+
const logger = container.has(loggingToken)
|
|
13
|
+
? container.resolve(loggingToken).getLogger('realtime')
|
|
14
|
+
: undefined;
|
|
15
|
+
return createRealtimeService({
|
|
16
|
+
...realtimeServiceOptions(this.app.config?.get('realtime'), this.app.config?.get('app')?.name, container.resolve(realtimeBrokerRegistryToken), logger),
|
|
17
|
+
logger,
|
|
18
|
+
});
|
|
19
|
+
});
|
|
15
20
|
}
|
|
16
21
|
async start() {
|
|
17
22
|
await this.app.container.resolve(realtimeServiceToken).setup();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/realtime/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACL,eAAe,GAEhB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAA0B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/realtime/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACL,eAAe,GAEhB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAA0B,MAAM,aAAa,CAAC;AAC7E,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAQ9B,MAAM,OAAO,gBAGX,SAAQ,eAA6B;IACrB,IAAI,GAAW,UAAU,CAAC;IAE1B,QAAQ;QACtB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CACzB,2BAA2B,EAC3B,4BAA4B,EAAE,CAC/B,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,EAAE,CAAC,SAAS,EAAE,EAAE;YAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;gBACxC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC;gBACvD,CAAC,CAAC,SAAS,CAAC;YACd,OAAO,qBAAqB,CAAC;gBAC3B,GAAG,sBAAsB,CACvB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAoB,UAAU,CAAC,EACnD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAoB,KAAK,CAAC,EAAE,IAAI,EACpD,SAAS,CAAC,OAAO,CAAC,2BAA2B,CAAC,EAC9C,MAAM,CACP;gBACD,MAAM;aACP,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEe,KAAK,CAAC,KAAK;QACzB,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;IACjE,CAAC;IAEe,KAAK,CAAC,QAAQ;QAC5B,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,CAAC;IAC3E,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nocobase/app-server",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0-beta.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"prettier": "@nocobase/dev-config/prettier",
|
|
6
6
|
"engines": {
|
|
@@ -121,11 +121,11 @@
|
|
|
121
121
|
"@nocobase/config": "^0.1.0-beta.3",
|
|
122
122
|
"@nocobase/drive": "^0.1.0-beta.7",
|
|
123
123
|
"@nocobase/logging": "^0.1.0-beta.7",
|
|
124
|
-
"@nocobase/realtime": "^
|
|
124
|
+
"@nocobase/realtime": "^1.0.0-beta.0",
|
|
125
125
|
"@nocobase/secrets": "^0.1.0-beta.1",
|
|
126
|
-
"@nocobase/session": "^0.1.0-beta.3",
|
|
127
126
|
"@nocobase/snowflake": "^1.0.0-beta.4",
|
|
128
|
-
"@nocobase/
|
|
127
|
+
"@nocobase/session": "^0.1.0-beta.3",
|
|
128
|
+
"@nocobase/mailer": "^0.1.0-beta.1"
|
|
129
129
|
},
|
|
130
130
|
"devDependencies": {
|
|
131
131
|
"@types/node": "^24.0.0",
|
|
@@ -149,10 +149,10 @@
|
|
|
149
149
|
"@nocobase/db-oceanbase": "^0.1.0-beta.4",
|
|
150
150
|
"@nocobase/i18n": "^2.0.0-beta.1",
|
|
151
151
|
"@nocobase/caching": "^0.1.0-beta.3",
|
|
152
|
-
"@nocobase/db": "^1.0.0-beta.
|
|
152
|
+
"@nocobase/db": "^1.0.0-beta.24",
|
|
153
153
|
"@nocobase/service-provider": "^0.0.2-beta.2",
|
|
154
|
-
"@nocobase/queue": "^
|
|
155
|
-
"@nocobase/jobs": "^
|
|
154
|
+
"@nocobase/queue": "^1.0.0-beta.10",
|
|
155
|
+
"@nocobase/jobs": "^1.0.0-beta.5",
|
|
156
156
|
"@nocobase/db-sqlite": "^0.1.0-beta.6",
|
|
157
157
|
"@nocobase/db-mysql": "^0.1.0-beta.5",
|
|
158
158
|
"@nocobase/db-postgres": "^0.1.0-beta.5",
|