diff --git a/es/aspects/token.js b/es/aspects/token.js index a6b92abd5..f7198f367 100644 --- a/es/aspects/token.js +++ b/es/aspects/token.js @@ -1383,7 +1383,7 @@ export async function refreshToken(params, context) { const newValue = await generateNewIdAsync(); console.log('####### refreshToken token update start #######\n'); console.log('刷新前tokenId:', token?.id); - console.log('刷新前tokenValue:', token?.value); + console.log('刷新前tokenValue:', tokenValue); console.log('---------------------\n'); await context.operate('token', { id: await generateNewIdAsync(), @@ -1391,6 +1391,7 @@ export async function refreshToken(params, context) { data: { value: newValue, refreshedAt: now, + oldValue: tokenValue, }, filter: { id: token.id, diff --git a/es/components/extraFile/commit/index.d.ts b/es/components/extraFile/commit/index.d.ts index c46972632..6aaf1df05 100644 --- a/es/components/extraFile/commit/index.d.ts +++ b/es/components/extraFile/commit/index.d.ts @@ -13,7 +13,7 @@ declare const _default: ) => React.ReactElement; export default _default; diff --git a/es/context/BackendRuntimeContext.js b/es/context/BackendRuntimeContext.js index 5de6eefac..f9d261739 100644 --- a/es/context/BackendRuntimeContext.js +++ b/es/context/BackendRuntimeContext.js @@ -63,7 +63,17 @@ export class BackendRuntimeContext extends BRC { }, }, filter: { - value: tokenValue, + $or: [ + { + value: tokenValue, + }, + { + oldValue: tokenValue, + refreshedAt: { + $gte: Date.now() - 60 * 1000, + }, + }, + ], }, }, { dontCollect: true, diff --git a/es/entities/Token.d.ts b/es/entities/Token.d.ts index 5fbe8b515..c68075b78 100644 --- a/es/entities/Token.d.ts +++ b/es/entities/Token.d.ts @@ -16,6 +16,7 @@ export interface Schema extends EntityShape { env: Environment; refreshedAt: Datetime; value: String<64>; + oldValue?: String<64>; } export type Action = AbleAction; export declare const AbleActionDef: ActionDef; diff --git a/es/entities/Token.js b/es/entities/Token.js index 04c458ad0..1cb836627 100644 --- a/es/entities/Token.js +++ b/es/entities/Token.js @@ -14,8 +14,9 @@ export const entityDesc = { env: '环境', ableState: '状态', disablesAt: '禁用时间', - refreshedAt: "刷新时间", - value: "令牌值" + refreshedAt: '刷新时间', + value: '令牌值', + oldValue: "老令牌", // 只保留1分钟 }, action: { enable: '激活', @@ -24,7 +25,7 @@ export const entityDesc = { v: { ableState: { enabled: '使用中', - disabled: '已禁用' + disabled: '已禁用', }, }, }, @@ -53,7 +54,7 @@ export const entityDesc = { color: { ableState: { enabled: '#008000', - disabled: '#A9A9A9' + disabled: '#A9A9A9', }, }, }, diff --git a/es/oak-app-domain/Token/Schema.d.ts b/es/oak-app-domain/Token/Schema.d.ts index 35adfb08d..87e674d65 100644 --- a/es/oak-app-domain/Token/Schema.d.ts +++ b/es/oak-app-domain/Token/Schema.d.ts @@ -22,6 +22,7 @@ export type OpSchema = EntityShape & { env: Environment; refreshedAt: Datetime; value: String<64>; + oldValue?: String<64> | null; ableState?: AbleState | null; }; export type OpAttr = keyof OpSchema; @@ -35,6 +36,7 @@ export type Schema = EntityShape & { env: Environment; refreshedAt: Datetime; value: String<64>; + oldValue?: String<64> | null; ableState?: AbleState | null; application?: Application.Schema | null; user?: User.Schema | null; @@ -63,6 +65,7 @@ type AttrFilter = { env: JsonFilter; refreshedAt: Q_DateValue; value: Q_StringValue; + oldValue: Q_StringValue; ableState: Q_EnumValue; email: Email.Filter; mobile: Mobile.Filter; @@ -89,6 +92,7 @@ export type Projection = { env?: number | JsonProjection; refreshedAt?: number; value?: number; + oldValue?: number; ableState?: number; email?: Email.Projection; mobile?: Mobile.Projection; @@ -149,6 +153,8 @@ export type SortAttr = { refreshedAt: number; } | { value: number; +} | { + oldValue: number; } | { ableState: number; } | { diff --git a/es/oak-app-domain/Token/Storage.js b/es/oak-app-domain/Token/Storage.js index 00037e5c0..bf958ad5c 100644 --- a/es/oak-app-domain/Token/Storage.js +++ b/es/oak-app-domain/Token/Storage.js @@ -46,6 +46,12 @@ export const desc = { length: 64 } }, + oldValue: { + type: "varchar", + params: { + length: 64 + } + }, ableState: { type: "enum", enumeration: ["enabled", "disabled"] diff --git a/es/oak-app-domain/Token/Style.js b/es/oak-app-domain/Token/Style.js index 9338e1887..463063ce8 100644 --- a/es/oak-app-domain/Token/Style.js +++ b/es/oak-app-domain/Token/Style.js @@ -6,7 +6,7 @@ export const style = { color: { ableState: { enabled: '#008000', - disabled: '#A9A9A9' + disabled: '#A9A9A9', }, }, }; diff --git a/es/oak-app-domain/Token/locales/zh_CN.json b/es/oak-app-domain/Token/locales/zh_CN.json index 65fca6de8..e183f233f 100644 --- a/es/oak-app-domain/Token/locales/zh_CN.json +++ b/es/oak-app-domain/Token/locales/zh_CN.json @@ -1 +1 @@ -{ "name": "令牌", "attr": { "application": "应用", "entity": "关联对象", "entityId": "关联对象id", "user": "用户", "player": "扮演者", "env": "环境", "ableState": "状态", "disablesAt": "禁用时间", "refreshedAt": "刷新时间", "value": "令牌值" }, "action": { "enable": "激活", "disable": "禁用" }, "v": { "ableState": { "enabled": "使用中", "disabled": "已禁用" } } } +{ "name": "令牌", "attr": { "application": "应用", "entity": "关联对象", "entityId": "关联对象id", "user": "用户", "player": "扮演者", "env": "环境", "ableState": "状态", "disablesAt": "禁用时间", "refreshedAt": "刷新时间", "value": "令牌值", "oldValue": "老令牌" }, "action": { "enable": "激活", "disable": "禁用" }, "v": { "ableState": { "enabled": "使用中", "disabled": "已禁用" } } } diff --git a/es/triggers/index.d.ts b/es/triggers/index.d.ts index b075906cd..1327164cc 100644 --- a/es/triggers/index.d.ts +++ b/es/triggers/index.d.ts @@ -1,2 +1,2 @@ -declare const _default: (import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger>)[]; +declare const _default: (import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger>)[]; export default _default; diff --git a/es/triggers/toDo.d.ts b/es/triggers/toDo.d.ts index 945523f77..36cbfbff9 100644 --- a/es/triggers/toDo.d.ts +++ b/es/triggers/toDo.d.ts @@ -14,7 +14,7 @@ export declare function createToDo; +}, userIds?: string[]): Promise<1 | 0>; /** * 完成todo例程,当在entity对象上进行action操作时(操作条件是filter),将对应的todo完成 * 必须在entity的action的后trigger中调用 diff --git a/lib/aspects/token.js b/lib/aspects/token.js index 32c187a33..9fdf83ffe 100644 --- a/lib/aspects/token.js +++ b/lib/aspects/token.js @@ -1398,7 +1398,7 @@ async function refreshToken(params, context) { const newValue = await (0, uuid_1.generateNewIdAsync)(); console.log('####### refreshToken token update start #######\n'); console.log('刷新前tokenId:', token?.id); - console.log('刷新前tokenValue:', token?.value); + console.log('刷新前tokenValue:', tokenValue); console.log('---------------------\n'); await context.operate('token', { id: await (0, uuid_1.generateNewIdAsync)(), @@ -1406,6 +1406,7 @@ async function refreshToken(params, context) { data: { value: newValue, refreshedAt: now, + oldValue: tokenValue, }, filter: { id: token.id, diff --git a/lib/context/BackendRuntimeContext.js b/lib/context/BackendRuntimeContext.js index 193b10a0a..27a087b1a 100644 --- a/lib/context/BackendRuntimeContext.js +++ b/lib/context/BackendRuntimeContext.js @@ -66,7 +66,17 @@ class BackendRuntimeContext extends oak_frontend_base_1.BackendRuntimeContext { }, }, filter: { - value: tokenValue, + $or: [ + { + value: tokenValue, + }, + { + oldValue: tokenValue, + refreshedAt: { + $gte: Date.now() - 60 * 1000, + }, + }, + ], }, }, { dontCollect: true, diff --git a/lib/entities/Token.d.ts b/lib/entities/Token.d.ts index 5fbe8b515..c68075b78 100644 --- a/lib/entities/Token.d.ts +++ b/lib/entities/Token.d.ts @@ -16,6 +16,7 @@ export interface Schema extends EntityShape { env: Environment; refreshedAt: Datetime; value: String<64>; + oldValue?: String<64>; } export type Action = AbleAction; export declare const AbleActionDef: ActionDef; diff --git a/lib/entities/Token.js b/lib/entities/Token.js index f9c6f94b6..b4a0c9930 100644 --- a/lib/entities/Token.js +++ b/lib/entities/Token.js @@ -17,8 +17,9 @@ exports.entityDesc = { env: '环境', ableState: '状态', disablesAt: '禁用时间', - refreshedAt: "刷新时间", - value: "令牌值" + refreshedAt: '刷新时间', + value: '令牌值', + oldValue: "老令牌", // 只保留1分钟 }, action: { enable: '激活', @@ -27,7 +28,7 @@ exports.entityDesc = { v: { ableState: { enabled: '使用中', - disabled: '已禁用' + disabled: '已禁用', }, }, }, @@ -56,7 +57,7 @@ exports.entityDesc = { color: { ableState: { enabled: '#008000', - disabled: '#A9A9A9' + disabled: '#A9A9A9', }, }, }, diff --git a/lib/oak-app-domain/Token/Schema.d.ts b/lib/oak-app-domain/Token/Schema.d.ts index 35adfb08d..87e674d65 100644 --- a/lib/oak-app-domain/Token/Schema.d.ts +++ b/lib/oak-app-domain/Token/Schema.d.ts @@ -22,6 +22,7 @@ export type OpSchema = EntityShape & { env: Environment; refreshedAt: Datetime; value: String<64>; + oldValue?: String<64> | null; ableState?: AbleState | null; }; export type OpAttr = keyof OpSchema; @@ -35,6 +36,7 @@ export type Schema = EntityShape & { env: Environment; refreshedAt: Datetime; value: String<64>; + oldValue?: String<64> | null; ableState?: AbleState | null; application?: Application.Schema | null; user?: User.Schema | null; @@ -63,6 +65,7 @@ type AttrFilter = { env: JsonFilter; refreshedAt: Q_DateValue; value: Q_StringValue; + oldValue: Q_StringValue; ableState: Q_EnumValue; email: Email.Filter; mobile: Mobile.Filter; @@ -89,6 +92,7 @@ export type Projection = { env?: number | JsonProjection; refreshedAt?: number; value?: number; + oldValue?: number; ableState?: number; email?: Email.Projection; mobile?: Mobile.Projection; @@ -149,6 +153,8 @@ export type SortAttr = { refreshedAt: number; } | { value: number; +} | { + oldValue: number; } | { ableState: number; } | { diff --git a/lib/oak-app-domain/Token/Storage.js b/lib/oak-app-domain/Token/Storage.js index 46b8676ed..5f5719d13 100644 --- a/lib/oak-app-domain/Token/Storage.js +++ b/lib/oak-app-domain/Token/Storage.js @@ -49,6 +49,12 @@ exports.desc = { length: 64 } }, + oldValue: { + type: "varchar", + params: { + length: 64 + } + }, ableState: { type: "enum", enumeration: ["enabled", "disabled"] diff --git a/lib/oak-app-domain/Token/Style.js b/lib/oak-app-domain/Token/Style.js index 44a0ab5fe..82309c43a 100644 --- a/lib/oak-app-domain/Token/Style.js +++ b/lib/oak-app-domain/Token/Style.js @@ -9,7 +9,7 @@ exports.style = { color: { ableState: { enabled: '#008000', - disabled: '#A9A9A9' + disabled: '#A9A9A9', }, }, }; diff --git a/lib/oak-app-domain/Token/locales/zh_CN.json b/lib/oak-app-domain/Token/locales/zh_CN.json index 65fca6de8..e183f233f 100644 --- a/lib/oak-app-domain/Token/locales/zh_CN.json +++ b/lib/oak-app-domain/Token/locales/zh_CN.json @@ -1 +1 @@ -{ "name": "令牌", "attr": { "application": "应用", "entity": "关联对象", "entityId": "关联对象id", "user": "用户", "player": "扮演者", "env": "环境", "ableState": "状态", "disablesAt": "禁用时间", "refreshedAt": "刷新时间", "value": "令牌值" }, "action": { "enable": "激活", "disable": "禁用" }, "v": { "ableState": { "enabled": "使用中", "disabled": "已禁用" } } } +{ "name": "令牌", "attr": { "application": "应用", "entity": "关联对象", "entityId": "关联对象id", "user": "用户", "player": "扮演者", "env": "环境", "ableState": "状态", "disablesAt": "禁用时间", "refreshedAt": "刷新时间", "value": "令牌值", "oldValue": "老令牌" }, "action": { "enable": "激活", "disable": "禁用" }, "v": { "ableState": { "enabled": "使用中", "disabled": "已禁用" } } } diff --git a/lib/triggers/index.d.ts b/lib/triggers/index.d.ts index b075906cd..1327164cc 100644 --- a/lib/triggers/index.d.ts +++ b/lib/triggers/index.d.ts @@ -1,2 +1,2 @@ -declare const _default: (import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger>)[]; +declare const _default: (import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger>)[]; export default _default; diff --git a/lib/triggers/toDo.d.ts b/lib/triggers/toDo.d.ts index 945523f77..36cbfbff9 100644 --- a/lib/triggers/toDo.d.ts +++ b/lib/triggers/toDo.d.ts @@ -14,7 +14,7 @@ export declare function createToDo; +}, userIds?: string[]): Promise<1 | 0>; /** * 完成todo例程,当在entity对象上进行action操作时(操作条件是filter),将对应的todo完成 * 必须在entity的action的后trigger中调用 diff --git a/src/aspects/token.ts b/src/aspects/token.ts index 1ee903cec..3c88fad15 100644 --- a/src/aspects/token.ts +++ b/src/aspects/token.ts @@ -1888,7 +1888,7 @@ export async function refreshToken( const newValue = await generateNewIdAsync(); console.log('####### refreshToken token update start #######\n'); console.log('刷新前tokenId:', token?.id); - console.log('刷新前tokenValue:', token?.value); + console.log('刷新前tokenValue:', tokenValue); console.log('---------------------\n'); await context.operate( 'token', @@ -1898,6 +1898,7 @@ export async function refreshToken( data: { value: newValue, refreshedAt: now, + oldValue: tokenValue, }, filter: { id: token.id, diff --git a/src/context/BackendRuntimeContext.ts b/src/context/BackendRuntimeContext.ts index a3fe2babd..ffc67e2bb 100644 --- a/src/context/BackendRuntimeContext.ts +++ b/src/context/BackendRuntimeContext.ts @@ -87,7 +87,17 @@ export abstract class BackendRuntimeContext; + oldValue?: String<64>; }; export type Action = AbleAction; export const AbleActionDef: ActionDef = makeAbleActionDef('enabled'); -export const entityDesc: EntityDesc = { +export const entityDesc: EntityDesc< + Schema, + Action, + '', + { + ableState: AbleState; + } +> = { locales: { zh_CN: { name: '令牌', @@ -38,8 +44,9 @@ export const entityDesc: EntityDesc