@maaxyz/maa-node 0.0.1-alpha.1
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/agent/maatouch/universal/maatouch +0 -0
- package/agent/minicap/arm64-v8a/bin/minicap +0 -0
- package/agent/minicap/arm64-v8a/bin/minicap-nopie +0 -0
- package/agent/minicap/arm64-v8a/lib/android-21/minicap.so +0 -0
- package/agent/minicap/arm64-v8a/lib/android-22/minicap.so +0 -0
- package/agent/minicap/arm64-v8a/lib/android-23/minicap.so +0 -0
- package/agent/minicap/arm64-v8a/lib/android-24/minicap.so +0 -0
- package/agent/minicap/arm64-v8a/lib/android-25/minicap.so +0 -0
- package/agent/minicap/arm64-v8a/lib/android-26/minicap.so +0 -0
- package/agent/minicap/arm64-v8a/lib/android-27/minicap.so +0 -0
- package/agent/minicap/arm64-v8a/lib/android-28/minicap.so +0 -0
- package/agent/minicap/arm64-v8a/lib/android-29/minicap +0 -0
- package/agent/minicap/arm64-v8a/lib/android-29/minicap-nopie +0 -0
- package/agent/minicap/arm64-v8a/lib/android-29/minicap.so +0 -0
- package/agent/minicap/arm64-v8a/lib/android-30/minicap.so +0 -0
- package/agent/minicap/arm64-v8a/lib/android-31/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/bin/minicap +0 -0
- package/agent/minicap/armeabi-v7a/bin/minicap-nopie +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-10/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-14/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-15/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-16/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-17/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-18/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-19/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-21/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-22/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-23/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-24/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-25/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-26/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-27/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-28/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-29/minicap +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-29/minicap-nopie +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-29/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-30/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-31/minicap.so +0 -0
- package/agent/minicap/armeabi-v7a/lib/android-9/minicap.so +0 -0
- package/agent/minicap/x86/bin/minicap +0 -0
- package/agent/minicap/x86/bin/minicap-nopie +0 -0
- package/agent/minicap/x86/lib/android-14/minicap.so +0 -0
- package/agent/minicap/x86/lib/android-15/minicap.so +0 -0
- package/agent/minicap/x86/lib/android-16/minicap.so +0 -0
- package/agent/minicap/x86/lib/android-17/minicap.so +0 -0
- package/agent/minicap/x86/lib/android-18/minicap.so +0 -0
- package/agent/minicap/x86/lib/android-19/minicap.so +0 -0
- package/agent/minicap/x86/lib/android-21/minicap.so +0 -0
- package/agent/minicap/x86/lib/android-22/minicap.so +0 -0
- package/agent/minicap/x86/lib/android-23/minicap.so +0 -0
- package/agent/minicap/x86/lib/android-24/minicap.so +0 -0
- package/agent/minicap/x86/lib/android-25/minicap.so +0 -0
- package/agent/minicap/x86/lib/android-26/minicap.so +0 -0
- package/agent/minicap/x86/lib/android-27/minicap.so +0 -0
- package/agent/minicap/x86/lib/android-28/minicap.so +0 -0
- package/agent/minicap/x86/lib/android-29/minicap +0 -0
- package/agent/minicap/x86/lib/android-29/minicap-nopie +0 -0
- package/agent/minicap/x86/lib/android-29/minicap.so +0 -0
- package/agent/minicap/x86/lib/android-31/minicap.so +0 -0
- package/agent/minicap/x86_64/bin/minicap +0 -0
- package/agent/minicap/x86_64/bin/minicap-nopie +0 -0
- package/agent/minicap/x86_64/lib/android-21/minicap.so +0 -0
- package/agent/minicap/x86_64/lib/android-22/minicap.so +0 -0
- package/agent/minicap/x86_64/lib/android-23/minicap.so +0 -0
- package/agent/minicap/x86_64/lib/android-24/minicap.so +0 -0
- package/agent/minicap/x86_64/lib/android-25/minicap.so +0 -0
- package/agent/minicap/x86_64/lib/android-26/minicap.so +0 -0
- package/agent/minicap/x86_64/lib/android-27/minicap.so +0 -0
- package/agent/minicap/x86_64/lib/android-28/minicap.so +0 -0
- package/agent/minicap/x86_64/lib/android-29/minicap +0 -0
- package/agent/minicap/x86_64/lib/android-29/minicap-nopie +0 -0
- package/agent/minicap/x86_64/lib/android-29/minicap.so +0 -0
- package/agent/minicap/x86_64/lib/android-31/minicap.so +0 -0
- package/agent/minitouch/arm64-v8a/minitouch +0 -0
- package/agent/minitouch/armeabi/minitouch +0 -0
- package/agent/minitouch/armeabi-v7a/minitouch +0 -0
- package/agent/minitouch/x86/minitouch +0 -0
- package/agent/minitouch/x86_64/minitouch +0 -0
- package/dist/context.d.ts +52 -0
- package/dist/controller.d.ts +105 -0
- package/dist/global.d.ts +10 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +1028 -0
- package/dist/job.d.ts +23 -0
- package/dist/maa.d.ts +376 -0
- package/dist/pi.d.ts +9 -0
- package/dist/pipeline.d.ts +249 -0
- package/dist/resource.d.ts +36 -0
- package/dist/tasker.d.ts +128 -0
- package/dist/types.d.ts +27 -0
- package/package.json +33 -0
- package/scripts/build.mjs +20 -0
- package/src/context.ts +78 -0
- package/src/controller.ts +366 -0
- package/src/global.ts +49 -0
- package/src/index.ts +9 -0
- package/src/job.ts +68 -0
- package/src/maa.d.ts +376 -0
- package/src/maa.js +27 -0
- package/src/pi.ts +62 -0
- package/src/pipeline.ts +694 -0
- package/src/resource.ts +173 -0
- package/src/tasker.ts +231 -0
- package/src/types.ts +31 -0
- package/tsconfig.json +9 -0
package/src/resource.ts
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { Context } from './context'
|
|
2
|
+
import { Job, JobSource } from './job'
|
|
3
|
+
import maa from './maa'
|
|
4
|
+
import {
|
|
5
|
+
CustomActionCallback,
|
|
6
|
+
CustomActionSelf,
|
|
7
|
+
CustomRecognizerCallback,
|
|
8
|
+
CustomRecognizerSelf
|
|
9
|
+
} from './types'
|
|
10
|
+
|
|
11
|
+
export type ResourceNotify = { res_id: maa.ResId; path: string } & (
|
|
12
|
+
| {
|
|
13
|
+
msg: 'StartLoading'
|
|
14
|
+
}
|
|
15
|
+
| {
|
|
16
|
+
msg: 'LoadingCompleted' | 'LoadingFailed'
|
|
17
|
+
hash: string
|
|
18
|
+
}
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
export class ResourceBase {
|
|
22
|
+
handle: maa.ResourceHandle
|
|
23
|
+
#source: JobSource<maa.ResId>
|
|
24
|
+
|
|
25
|
+
notify(message: string, details_json: string): maa.MaybePromise<void> {}
|
|
26
|
+
|
|
27
|
+
set parsed_notify(cb: (msg: ResourceNotify) => maa.MaybePromise<void>) {
|
|
28
|
+
this.notify = (msg, details) => {
|
|
29
|
+
return cb({
|
|
30
|
+
msg: msg.replace(/^Resource\./, '') as any,
|
|
31
|
+
...JSON.parse(details)
|
|
32
|
+
})
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
constructor(handle: maa.ResourceHandle) {
|
|
37
|
+
this.handle = handle
|
|
38
|
+
this.#source = {
|
|
39
|
+
status: id => maa.resource_status(this.handle, id),
|
|
40
|
+
wait: id => maa.resource_wait(this.handle, id)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
destroy() {
|
|
45
|
+
maa.resource_destroy(this.handle)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
set inference_device(id: keyof typeof maa.InferenceDevice | number) {
|
|
49
|
+
if (typeof id === 'string') {
|
|
50
|
+
id = maa.InferenceDevice[id]
|
|
51
|
+
}
|
|
52
|
+
if (!maa.resource_set_option_inference_device(this.handle, id)) {
|
|
53
|
+
throw 'Resource set inference_device failed'
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
set inference_execution_provider(provider: keyof typeof maa.InferenceExecutionProvider) {
|
|
58
|
+
if (
|
|
59
|
+
!maa.resource_set_option_inference_execution_provider(
|
|
60
|
+
this.handle,
|
|
61
|
+
maa.InferenceExecutionProvider[provider]
|
|
62
|
+
)
|
|
63
|
+
) {
|
|
64
|
+
throw 'Resource set inference_execution_provider failed'
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
register_custom_recognizer(name: string, func: CustomRecognizerCallback) {
|
|
69
|
+
if (
|
|
70
|
+
!maa.resource_register_custom_recognition(
|
|
71
|
+
this.handle,
|
|
72
|
+
name,
|
|
73
|
+
(context, id, task, name, param, image, roi) => {
|
|
74
|
+
const self: CustomRecognizerSelf = {
|
|
75
|
+
context: new Context(context),
|
|
76
|
+
id,
|
|
77
|
+
task,
|
|
78
|
+
name,
|
|
79
|
+
param: JSON.parse(param),
|
|
80
|
+
image,
|
|
81
|
+
roi
|
|
82
|
+
}
|
|
83
|
+
return func.apply(self, [self])
|
|
84
|
+
}
|
|
85
|
+
)
|
|
86
|
+
) {
|
|
87
|
+
throw 'Resource register_custom_recognition failed'
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
unregister_custom_recognizer(name: string) {
|
|
92
|
+
if (!maa.resource_unregister_custom_recognition(this.handle, name)) {
|
|
93
|
+
throw 'Resource unregister_custom_recognition failed'
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
clear_custom_recognizer() {
|
|
98
|
+
if (!maa.resource_clear_custom_recognition(this.handle)) {
|
|
99
|
+
throw 'Resource clear_custom_recognition failed'
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
register_custom_action(name: string, func: CustomActionCallback) {
|
|
104
|
+
if (
|
|
105
|
+
!maa.resource_register_custom_action(
|
|
106
|
+
this.handle,
|
|
107
|
+
name,
|
|
108
|
+
(context, id, task, name, param, recoId, box) => {
|
|
109
|
+
const self: CustomActionSelf = {
|
|
110
|
+
context: new Context(context),
|
|
111
|
+
id,
|
|
112
|
+
task,
|
|
113
|
+
name,
|
|
114
|
+
param: JSON.parse(param),
|
|
115
|
+
recoId,
|
|
116
|
+
box
|
|
117
|
+
}
|
|
118
|
+
return func.apply(self, [self])
|
|
119
|
+
}
|
|
120
|
+
)
|
|
121
|
+
) {
|
|
122
|
+
throw 'Resource register_custom_action failed'
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
unregister_custom_action(name: string) {
|
|
127
|
+
if (!maa.resource_unregister_custom_action(this.handle, name)) {
|
|
128
|
+
throw 'Resource unregister_custom_action failed'
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
clear_custom_action() {
|
|
133
|
+
if (!maa.resource_clear_custom_action(this.handle)) {
|
|
134
|
+
throw 'Resource clear_custom_action failed'
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
post_path(path: string) {
|
|
139
|
+
return new Job(this.#source, maa.resource_post_path(this.handle, path))
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
clear() {
|
|
143
|
+
if (!maa.resource_clear(this.handle)) {
|
|
144
|
+
throw 'Resource clear failed'
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
get loaded() {
|
|
149
|
+
return maa.resource_loaded(this.handle)
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
get hash() {
|
|
153
|
+
return maa.resource_get_hash(this.handle)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
get task_list() {
|
|
157
|
+
return maa.resource_get_task_list(this.handle)
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export class Resource extends ResourceBase {
|
|
162
|
+
constructor() {
|
|
163
|
+
let ws: WeakRef<this>
|
|
164
|
+
const h = maa.resource_create((message, details_json) => {
|
|
165
|
+
ws.deref()?.notify(message, details_json)
|
|
166
|
+
})
|
|
167
|
+
if (!h) {
|
|
168
|
+
throw 'Resource create failed'
|
|
169
|
+
}
|
|
170
|
+
super(h)
|
|
171
|
+
ws = new WeakRef(this)
|
|
172
|
+
}
|
|
173
|
+
}
|
package/src/tasker.ts
ADDED
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { ControllerBase } from './controller'
|
|
2
|
+
import { Job, JobSource } from './job'
|
|
3
|
+
import maa from './maa'
|
|
4
|
+
import { ResourceBase } from './resource'
|
|
5
|
+
|
|
6
|
+
type TaskDetail = ReturnType<TaskerBase['task_detail']>
|
|
7
|
+
|
|
8
|
+
class TaskJob extends Job<maa.TaskId, JobSource<maa.TaskId>> {
|
|
9
|
+
#tasker: TaskerBase
|
|
10
|
+
|
|
11
|
+
constructor(tasker: TaskerBase, source: JobSource<maa.TaskId>, id: maa.TaskId) {
|
|
12
|
+
super(source, id)
|
|
13
|
+
|
|
14
|
+
this.#tasker = tasker
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
get() {
|
|
18
|
+
if (this.done) {
|
|
19
|
+
return this.#tasker.task_detail(this.id)
|
|
20
|
+
} else {
|
|
21
|
+
return null
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
wait() {
|
|
26
|
+
const superPro = super.wait()
|
|
27
|
+
const pro = superPro as typeof superPro & {
|
|
28
|
+
get: () => Promise<TaskDetail>
|
|
29
|
+
}
|
|
30
|
+
pro.get = () => {
|
|
31
|
+
return new Promise(resolve => {
|
|
32
|
+
pro.then(self => {
|
|
33
|
+
resolve(self.get())
|
|
34
|
+
})
|
|
35
|
+
})
|
|
36
|
+
}
|
|
37
|
+
return pro
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export type TaskerNotify = {
|
|
42
|
+
task_id: maa.TaskId
|
|
43
|
+
entry: string
|
|
44
|
+
hash: string
|
|
45
|
+
uuid: string
|
|
46
|
+
} & (
|
|
47
|
+
| {
|
|
48
|
+
msg: 'Task.Started' | 'Task.Completed' | 'Task.Failed'
|
|
49
|
+
}
|
|
50
|
+
| {
|
|
51
|
+
msg: 'Debug.RecognitionResult' | 'Debug.Hit'
|
|
52
|
+
current: string
|
|
53
|
+
recognition: {
|
|
54
|
+
reco_id: maa.RecoId
|
|
55
|
+
name: string
|
|
56
|
+
/**
|
|
57
|
+
* Won't be `null` for msg `Debug.Hit`
|
|
58
|
+
*/
|
|
59
|
+
box: maa.FlatRect | null
|
|
60
|
+
detail: string
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
| {
|
|
64
|
+
msg: 'Focus.ReadyToRun' | 'Focus.Completed' | 'Debug.ReadyToRun' | 'Debug.Completed'
|
|
65
|
+
current: string
|
|
66
|
+
node: {
|
|
67
|
+
node_id: maa.NodeId
|
|
68
|
+
name: string
|
|
69
|
+
reco_id: maa.RecoId
|
|
70
|
+
times: number
|
|
71
|
+
completed: boolean
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
| {
|
|
75
|
+
msg: 'Debug.ListToRecognize' | 'Debug.MissAll'
|
|
76
|
+
current: string
|
|
77
|
+
list: string[]
|
|
78
|
+
}
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
export class TaskerBase {
|
|
82
|
+
handle: maa.TaskerHandle
|
|
83
|
+
#source: JobSource<maa.TaskId>
|
|
84
|
+
|
|
85
|
+
notify(message: string, details_json: string): maa.MaybePromise<void> {}
|
|
86
|
+
|
|
87
|
+
set parsed_notify(cb: (msg: TaskerNotify) => maa.MaybePromise<void>) {
|
|
88
|
+
this.notify = (msg, details) => {
|
|
89
|
+
return cb({
|
|
90
|
+
msg: msg.replace(/^Task(?:er)?\./, '') as any,
|
|
91
|
+
...JSON.parse(details)
|
|
92
|
+
})
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
constructor(handle: maa.TaskerHandle) {
|
|
97
|
+
this.handle = handle
|
|
98
|
+
this.#source = {
|
|
99
|
+
status: id => maa.tasker_status(this.handle, id),
|
|
100
|
+
wait: id => maa.tasker_wait(this.handle, id)
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
destroy() {
|
|
105
|
+
maa.tasker_destroy(this.handle)
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
bind(slave: ControllerBase | ResourceBase) {
|
|
109
|
+
let ret: boolean
|
|
110
|
+
if (slave instanceof ControllerBase) {
|
|
111
|
+
ret = maa.tasker_bind_controller(this.handle, slave.handle)
|
|
112
|
+
} else {
|
|
113
|
+
ret = maa.tasker_bind_resource(this.handle, slave.handle)
|
|
114
|
+
}
|
|
115
|
+
if (!ret) {
|
|
116
|
+
throw 'Tasker bind failed'
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
post_pipeline(entry: string, param: Record<string, unknown> = {}) {
|
|
121
|
+
return new TaskJob(
|
|
122
|
+
this,
|
|
123
|
+
this.#source,
|
|
124
|
+
maa.tasker_post_pipeline(this.handle, entry, JSON.stringify(param))
|
|
125
|
+
)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
get inited() {
|
|
129
|
+
return maa.tasker_inited(this.handle)
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
get running() {
|
|
133
|
+
return maa.tasker_running(this.handle)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
post_stop() {
|
|
137
|
+
return new TaskJob(
|
|
138
|
+
this,
|
|
139
|
+
this.#source,
|
|
140
|
+
maa.tasker_post_stop(this.handle)
|
|
141
|
+
)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
get resource() {
|
|
145
|
+
const res = maa.tasker_get_resource(this.handle)
|
|
146
|
+
if (res) {
|
|
147
|
+
return new ResourceBase(res)
|
|
148
|
+
} else {
|
|
149
|
+
return null
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
get controller() {
|
|
154
|
+
const ctrl = maa.tasker_get_controller(this.handle)
|
|
155
|
+
if (ctrl) {
|
|
156
|
+
return new ControllerBase(ctrl)
|
|
157
|
+
} else {
|
|
158
|
+
return null
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
clear_cache() {
|
|
163
|
+
if (!maa.tasker_clear_cache(this.handle)) {
|
|
164
|
+
throw 'Tasker clear_cache failed'
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
recognition_detail(id: maa.RecoId) {
|
|
169
|
+
const dt = maa.tasker_get_recognition_detail(this.handle, id)
|
|
170
|
+
if (dt) {
|
|
171
|
+
const [name, algorithm, hit, box, detail, raw, draws] = dt
|
|
172
|
+
return {
|
|
173
|
+
name,
|
|
174
|
+
algorithm,
|
|
175
|
+
hit,
|
|
176
|
+
box,
|
|
177
|
+
detail,
|
|
178
|
+
raw,
|
|
179
|
+
draws
|
|
180
|
+
}
|
|
181
|
+
} else {
|
|
182
|
+
return null
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
node_detail(id: maa.NodeId) {
|
|
187
|
+
const dt = maa.tasker_get_node_detail(this.handle, id)
|
|
188
|
+
if (dt) {
|
|
189
|
+
const [name, reco_id, completed] = dt
|
|
190
|
+
return {
|
|
191
|
+
name,
|
|
192
|
+
reco: this.recognition_detail(reco_id),
|
|
193
|
+
completed
|
|
194
|
+
}
|
|
195
|
+
} else {
|
|
196
|
+
return null
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
task_detail(id: maa.TaskId) {
|
|
201
|
+
const dt = maa.tasker_get_task_detail(this.handle, id)
|
|
202
|
+
if (dt) {
|
|
203
|
+
const [entry, node_ids, status] = dt
|
|
204
|
+
return {
|
|
205
|
+
entry,
|
|
206
|
+
nodes: node_ids.map(i => this.node_detail(i)),
|
|
207
|
+
status
|
|
208
|
+
}
|
|
209
|
+
} else {
|
|
210
|
+
return null
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
latest_node(task: string) {
|
|
215
|
+
return maa.tasker_get_latest_node(this.handle, task)
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
export class Tasker extends TaskerBase {
|
|
220
|
+
constructor() {
|
|
221
|
+
let ws: WeakRef<this>
|
|
222
|
+
const h = maa.tasker_create((message, details_json) => {
|
|
223
|
+
ws.deref()?.notify(message, details_json)
|
|
224
|
+
})
|
|
225
|
+
if (!h) {
|
|
226
|
+
throw 'Tasker create failed'
|
|
227
|
+
}
|
|
228
|
+
super(h)
|
|
229
|
+
ws = new WeakRef(this)
|
|
230
|
+
}
|
|
231
|
+
}
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Context } from './context'
|
|
2
|
+
import maa from './maa'
|
|
3
|
+
|
|
4
|
+
export interface CustomRecognizerSelf {
|
|
5
|
+
context: Context
|
|
6
|
+
id: maa.TaskId
|
|
7
|
+
task: string
|
|
8
|
+
name: string
|
|
9
|
+
param: unknown
|
|
10
|
+
image: maa.ImageData
|
|
11
|
+
roi: maa.Rect
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface CustomActionSelf {
|
|
15
|
+
context: Context
|
|
16
|
+
id: maa.TaskId
|
|
17
|
+
task: string
|
|
18
|
+
name: string
|
|
19
|
+
param: unknown
|
|
20
|
+
recoId: maa.RecoId
|
|
21
|
+
box: maa.Rect
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
type CustomCallback<Self, Ret> = (this: Self, self: Self) => maa.MaybePromise<Ret>
|
|
25
|
+
|
|
26
|
+
export type CustomRecognizerCallback = CustomCallback<
|
|
27
|
+
CustomRecognizerSelf,
|
|
28
|
+
[out_box: maa.Rect, out_detail: string] | null
|
|
29
|
+
>
|
|
30
|
+
|
|
31
|
+
export type CustomActionCallback = CustomCallback<CustomActionSelf, boolean>
|