wowok_agent 1.2.35 → 1.2.38
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/call/arbitration.d.ts +69 -0
- package/dist/call/arbitration.d.ts.map +1 -0
- package/dist/call/arbitration.js +186 -0
- package/dist/call/arbitration.js.map +1 -0
- package/dist/call/base.d.ts +35 -0
- package/dist/call/base.d.ts.map +1 -0
- package/dist/call/base.js +148 -0
- package/dist/call/base.js.map +1 -0
- package/dist/call/call.d.ts +84 -0
- package/dist/call/call.d.ts.map +1 -0
- package/dist/call/call.js +153 -0
- package/dist/call/call.js.map +1 -0
- package/dist/call/demand.d.ts +55 -0
- package/dist/call/demand.d.ts.map +1 -0
- package/dist/call/demand.js +135 -0
- package/dist/call/demand.js.map +1 -0
- package/dist/call/guard.d.ts +42 -0
- package/dist/call/guard.d.ts.map +1 -0
- package/dist/call/guard.js +253 -0
- package/dist/call/guard.js.map +1 -0
- package/dist/call/machine.d.ts +109 -0
- package/dist/call/machine.d.ts.map +1 -0
- package/dist/call/machine.js +213 -0
- package/dist/call/machine.js.map +1 -0
- package/dist/call/object_permission.d.ts +13 -0
- package/dist/call/object_permission.d.ts.map +1 -0
- package/dist/call/object_permission.js +49 -0
- package/dist/call/object_permission.js.map +1 -0
- package/dist/call/permission.d.ts +49 -0
- package/dist/call/permission.d.ts.map +1 -0
- package/dist/call/permission.js +98 -0
- package/dist/call/permission.js.map +1 -0
- package/dist/call/personal.d.ts +42 -0
- package/dist/call/personal.d.ts.map +1 -0
- package/dist/call/personal.js +61 -0
- package/dist/call/personal.js.map +1 -0
- package/dist/call/repository.d.ts +52 -0
- package/dist/call/repository.d.ts.map +1 -0
- package/dist/call/repository.js +125 -0
- package/dist/call/repository.js.map +1 -0
- package/dist/call/service.d.ts +134 -0
- package/dist/call/service.d.ts.map +1 -0
- package/dist/call/service.js +340 -0
- package/dist/call/service.js.map +1 -0
- package/dist/call/treasury.d.ts +53 -0
- package/dist/call/treasury.d.ts.map +1 -0
- package/dist/call/treasury.js +161 -0
- package/dist/call/treasury.js.map +1 -0
- package/dist/common.d.ts +2 -0
- package/dist/common.d.ts.map +1 -0
- package/dist/common.js +4 -0
- package/dist/common.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/local/account.d.ts +24 -0
- package/dist/local/account.d.ts.map +1 -0
- package/dist/local/account.js +188 -0
- package/dist/local/account.js.map +1 -0
- package/dist/local/cache.d.ts +32 -0
- package/dist/local/cache.d.ts.map +1 -0
- package/dist/local/cache.js +71 -0
- package/dist/local/cache.js.map +1 -0
- package/dist/local/index.d.ts +69 -0
- package/dist/local/index.d.ts.map +1 -0
- package/dist/local/index.js +94 -0
- package/dist/local/index.js.map +1 -0
- package/dist/local/local.d.ts +53 -0
- package/dist/local/local.d.ts.map +1 -0
- package/dist/local/local.js +211 -0
- package/dist/local/local.js.map +1 -0
- package/dist/query/events.d.ts +63 -0
- package/dist/query/events.d.ts.map +1 -0
- package/dist/query/events.js +78 -0
- package/dist/query/events.js.map +1 -0
- package/dist/query/objects.d.ts +323 -0
- package/dist/query/objects.d.ts.map +1 -0
- package/dist/query/objects.js +445 -0
- package/dist/query/objects.js.map +1 -0
- package/dist/query/permission.d.ts +12 -0
- package/dist/query/permission.d.ts.map +1 -0
- package/dist/query/permission.js +41 -0
- package/dist/query/permission.js.map +1 -0
- package/package.json +1 -1
- package/src/call/arbitration.ts +1 -1
- package/src/call/base.ts +1 -1
- package/src/call/call.ts +1 -2
- package/src/call/demand.ts +1 -1
- package/src/call/object_permission.ts +1 -1
- package/src/call/service.ts +1 -1
- package/src/call/treasury.ts +2 -2
- package/src/index.ts +2 -0
- package/src/local/account.ts +19 -1
- package/src/local/index.ts +140 -0
- package/src/local/local.ts +38 -9
- package/src/query/objects.ts +8 -7
- package/tsconfig.tsbuildinfo +1 -1
package/src/call/treasury.ts
CHANGED
|
@@ -64,7 +64,7 @@ export class CallTreasury extends CallBase {
|
|
|
64
64
|
}
|
|
65
65
|
} else {
|
|
66
66
|
if (!obj) {
|
|
67
|
-
const r = await query_objects({objects:[object_address]
|
|
67
|
+
const r = await query_objects({objects:[object_address]});
|
|
68
68
|
if (r?.objects && r.objects[0].type === 'Treasury') {
|
|
69
69
|
obj = r.objects[0] as ObjectTreasury;
|
|
70
70
|
}
|
|
@@ -84,7 +84,7 @@ export class CallTreasury extends CallBase {
|
|
|
84
84
|
guards.push(this.data.withdraw.withdraw_guard)
|
|
85
85
|
} else if (this.data.object) {
|
|
86
86
|
if (!obj) {
|
|
87
|
-
const r = await query_objects({objects:[object_address]
|
|
87
|
+
const r = await query_objects({objects:[object_address]});
|
|
88
88
|
if (r?.objects && r.objects[0].type === 'Treasury') {
|
|
89
89
|
obj = r.objects[0] as ObjectTreasury;
|
|
90
90
|
}
|
package/src/index.ts
CHANGED
package/src/local/account.ts
CHANGED
|
@@ -76,7 +76,7 @@ export class Account {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
async list() : Promise<string[]> {
|
|
79
|
-
return await this.storage.keys().all();
|
|
79
|
+
return (await this.storage.keys().all()).filter(v => v !== SettingDefault);
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
async faucet(address?:string) {
|
|
@@ -160,6 +160,24 @@ export class Account {
|
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
|
+
async transfer(from:string, to:string, amount:number|string, token_type?:string) : Promise<CallResponse | undefined> {
|
|
164
|
+
const secret: string | undefined = await this.storage.get(from);
|
|
165
|
+
if (!secret) return undefined;
|
|
166
|
+
const pair = Ed25519Keypair.fromSecretKey(fromHEX(secret))
|
|
167
|
+
if (!pair) return undefined;
|
|
168
|
+
|
|
169
|
+
const txb = new TransactionBlock();
|
|
170
|
+
const coin = await this.get_coin_object(txb, amount, from, token_type);
|
|
171
|
+
if (coin) {
|
|
172
|
+
txb.transferObjects([(coin as unknown) as TransactionArgument], to)
|
|
173
|
+
const r = await Protocol.Client().signAndExecuteTransaction({
|
|
174
|
+
transaction: txb,
|
|
175
|
+
signer: pair,
|
|
176
|
+
options:{showObjectChanges:true},
|
|
177
|
+
});
|
|
178
|
+
return r;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
163
181
|
|
|
164
182
|
coinObject_with_balance = async(balance_required:string | bigint | number, address?:string, token_type?:string) : Promise<string | undefined> => {
|
|
165
183
|
if (!address) {
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { CallResponse, CoinBalance, CoinStruct } from "wowok"
|
|
2
|
+
import { Account } from "./account.js"
|
|
3
|
+
import { LocalInfo, LocalInfoNameDefault, LocalMark, LocalMarkFilter, MarkData } from "./local.js"
|
|
4
|
+
|
|
5
|
+
export const query_local_mark_list = async (filter?:LocalMarkFilter) : Promise<string> => {
|
|
6
|
+
return JSON.stringify(await LocalMark.Instance().list(filter))
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const query_account_list = async () : Promise<QueryAccountsResult> => {
|
|
10
|
+
const res : QueryAccountsResult = {};
|
|
11
|
+
res.addresses = await Account.Instance().list();
|
|
12
|
+
res.default = await Account.Instance().default(false);
|
|
13
|
+
return res;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const query_local_info_list = async () : Promise<string> => {
|
|
17
|
+
return JSON.stringify(await LocalInfo.Instance().list())
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface QueryAccountsResult {
|
|
21
|
+
default?: string;
|
|
22
|
+
addresses?: string[];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const query_local_mark = async (name: string) : Promise<MarkData | undefined> => {
|
|
26
|
+
return await LocalMark.Instance().get(name)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
export enum BalanceOrCoin {
|
|
31
|
+
Balance = 'balance',
|
|
32
|
+
Coin = 'coin'
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface QueryAccount {
|
|
36
|
+
name_or_address?: string; // undifined if query the default account.
|
|
37
|
+
balance_or_coin?: BalanceOrCoin;
|
|
38
|
+
token_type?:string; // 0x2::sui::SUI, if not specified.
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface QueryAccountResult {
|
|
42
|
+
name_or_address?: string;
|
|
43
|
+
address?: string;
|
|
44
|
+
balance?: CoinBalance;
|
|
45
|
+
coin?: CoinStruct[];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export const query_account = async (query: QueryAccount) : Promise<QueryAccountResult> => {
|
|
49
|
+
const r = await LocalMark.Instance().get_account(query.name_or_address);
|
|
50
|
+
const res : QueryAccountResult = {address: r};
|
|
51
|
+
if (query.name_or_address) { res.name_or_address = query.name_or_address; }
|
|
52
|
+
|
|
53
|
+
if (r) {
|
|
54
|
+
if (query?.balance_or_coin === BalanceOrCoin.Balance) {
|
|
55
|
+
res.balance = await Account.Instance().balance(r, query.token_type);
|
|
56
|
+
} else if (query?.balance_or_coin === BalanceOrCoin.Coin) {
|
|
57
|
+
res.coin = await Account.Instance().coin(r, query.token_type);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return res;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export const query_local_info = async (name: string = LocalInfoNameDefault) : Promise<LocalInfo | undefined> => {
|
|
65
|
+
return await LocalInfo.Instance().get(name)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface AccountOperation {
|
|
69
|
+
gen?: {name?:string, default?: boolean, useAddressIfNameExist?: boolean};
|
|
70
|
+
transfer?: {name_or_address_from?: string, name_or_address_to?:string, amount:number|string, token_type?: string};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export interface AccountOperationResult {
|
|
74
|
+
gen?: {address:string};
|
|
75
|
+
transfer?: CallResponse;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export const account_operation = async(op: AccountOperation) : Promise<AccountOperationResult> => {
|
|
79
|
+
var res : AccountOperationResult = {};
|
|
80
|
+
if (op.gen) {
|
|
81
|
+
const acc = await Account.Instance().gen(op.gen.default);
|
|
82
|
+
if (await LocalMark.Instance().put(op.gen.name, {object: acc, tags: ['account']}, op.gen.useAddressIfNameExist)) {
|
|
83
|
+
res.gen = {address: acc};
|
|
84
|
+
}
|
|
85
|
+
} else if (op.transfer) {
|
|
86
|
+
const from = await LocalMark.Instance().get_account(op.transfer.name_or_address_from);
|
|
87
|
+
const to = await LocalMark.Instance().get_account(op.transfer.name_or_address_to);
|
|
88
|
+
if (from && to) {
|
|
89
|
+
res.transfer = await Account.Instance().transfer(from, to, op.transfer.amount, op.transfer.token_type);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return res;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export interface LocalMarkOperation {
|
|
96
|
+
removeall?: boolean;
|
|
97
|
+
add_or_set?: {name:string, address:string, tags?:string[], useAddressIfNameExist?:boolean}[];
|
|
98
|
+
remove?: string[];
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export const local_mark_operation = async(op: LocalMarkOperation) : Promise<void> => {
|
|
102
|
+
if (op.removeall) {
|
|
103
|
+
await LocalMark.Instance().clear();
|
|
104
|
+
} else if (op.add_or_set) {
|
|
105
|
+
for (let i = 0; i < op.add_or_set.length; ++ i) {
|
|
106
|
+
const v = op.add_or_set[i];
|
|
107
|
+
await LocalMark.Instance().put(v.name, {object: v.address, tags: v.tags}, v.useAddressIfNameExist);
|
|
108
|
+
}
|
|
109
|
+
} else if (op.remove) {
|
|
110
|
+
for (let i = 0; i < op.remove.length; ++ i) {
|
|
111
|
+
const v = op.remove[i];
|
|
112
|
+
await LocalMark.Instance().del(v);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export interface LocalInfoOperation {
|
|
119
|
+
removeall?: boolean;
|
|
120
|
+
add?: {name:string, content:string, bdefault?: boolean}[];
|
|
121
|
+
remove?: string[];
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export const local_info_operation = async(op: LocalInfoOperation) : Promise<void> => {
|
|
125
|
+
if (op.removeall) {
|
|
126
|
+
await LocalInfo.Instance().clear();
|
|
127
|
+
}
|
|
128
|
+
else if (op.add) {
|
|
129
|
+
for (let i = 0; i < op.add.length; ++ i) {
|
|
130
|
+
const v = op.add[i];
|
|
131
|
+
await LocalInfo.Instance().put(v.name, v.content, v.bdefault);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else if (op.remove) {
|
|
135
|
+
for (let i = 0; i < op.remove.length; ++ i) {
|
|
136
|
+
const v = op.remove[i];
|
|
137
|
+
await LocalInfo.Instance().del(v);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
package/src/local/local.ts
CHANGED
|
@@ -7,7 +7,7 @@ import path from "path";
|
|
|
7
7
|
import os from "os";
|
|
8
8
|
import { Level } from "level";
|
|
9
9
|
import { isBrowser } from "../common.js";
|
|
10
|
-
import { IsValidAddress } from "wowok";
|
|
10
|
+
import { IsValidAddress, TagName } from "wowok";
|
|
11
11
|
import { Account } from "./account.js";
|
|
12
12
|
|
|
13
13
|
export interface MarkData {
|
|
@@ -20,10 +20,16 @@ export interface InfoData {
|
|
|
20
20
|
others?: string[];
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
export interface LocalMarkFilter {
|
|
24
|
+
name?: string;
|
|
25
|
+
tags?: string[];
|
|
26
|
+
object?: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
23
29
|
export const LocalMarkLocation = 'wowok-mark';
|
|
24
30
|
export const LocalInfoLocation = 'wowok-info';
|
|
25
31
|
export const LocalMarkNameMaxLength = 32;
|
|
26
|
-
|
|
32
|
+
export const LocalInfoNameDefault = 'Address of delivery';
|
|
27
33
|
export class LocalMark {
|
|
28
34
|
static _instance: any;
|
|
29
35
|
private storage;
|
|
@@ -101,7 +107,7 @@ export class LocalMark {
|
|
|
101
107
|
|
|
102
108
|
if (genNewIfNotFound) {
|
|
103
109
|
const addr = await Account.Instance().gen(false);
|
|
104
|
-
await this.put(name_or_address, {object:addr});
|
|
110
|
+
await this.put(name_or_address, {object:addr, tags:[TagName.Account]});
|
|
105
111
|
}
|
|
106
112
|
}
|
|
107
113
|
}
|
|
@@ -149,8 +155,27 @@ export class LocalMark {
|
|
|
149
155
|
}
|
|
150
156
|
return false;
|
|
151
157
|
}
|
|
158
|
+
|
|
159
|
+
async list(filter?: LocalMarkFilter) : Promise<QueryNameData[]> {
|
|
160
|
+
return (await this.storage.iterator().all()).filter(v => {
|
|
161
|
+
const obj = JSON.parse(v[1]) as MarkData;
|
|
162
|
+
if (filter?.name && v[0] !== filter.name) return false;
|
|
163
|
+
if (filter?.object && obj.object !== filter.object) return false;
|
|
164
|
+
if (filter?.tags && obj.tags) {
|
|
165
|
+
for (let i = 0; i < filter.tags.length; ++ i) {
|
|
166
|
+
if (!obj.tags.includes(filter.tags[i])) return false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return true;
|
|
170
|
+
}).map(v => {return {name:v[0], data:v[1]}});
|
|
171
|
+
}
|
|
152
172
|
}
|
|
153
173
|
|
|
174
|
+
export interface QueryNameData {
|
|
175
|
+
name: string;
|
|
176
|
+
data: any;
|
|
177
|
+
};
|
|
178
|
+
|
|
154
179
|
export class LocalInfo {
|
|
155
180
|
static _instance: any;
|
|
156
181
|
private storage;
|
|
@@ -169,7 +194,7 @@ export class LocalInfo {
|
|
|
169
194
|
}; return LocalInfo._instance
|
|
170
195
|
}
|
|
171
196
|
|
|
172
|
-
async put(name:string, content:string, bDefault:boolean=true) : Promise<void> {
|
|
197
|
+
async put(name:string = LocalInfoNameDefault, content:string, bDefault:boolean=true) : Promise<void> {
|
|
173
198
|
const r = await this.storage.get(name);
|
|
174
199
|
if (r) {
|
|
175
200
|
const obj = JSON.parse(r) as InfoData;
|
|
@@ -185,25 +210,25 @@ export class LocalInfo {
|
|
|
185
210
|
}
|
|
186
211
|
}
|
|
187
212
|
|
|
188
|
-
async get(name: string) : Promise<LocalInfo | undefined> {
|
|
213
|
+
async get(name: string = LocalInfoNameDefault) : Promise<LocalInfo | undefined> {
|
|
189
214
|
const r = await this.storage.get(name);
|
|
190
215
|
if (r) {
|
|
191
216
|
return JSON.parse(r);
|
|
192
217
|
}
|
|
193
218
|
}
|
|
194
219
|
|
|
195
|
-
async get_default(name: string) : Promise<string | undefined> {
|
|
220
|
+
async get_default(name: string = LocalInfoNameDefault) : Promise<string | undefined> {
|
|
196
221
|
const r = await this.storage.get(name);
|
|
197
222
|
if (r) {
|
|
198
223
|
return (JSON.parse(r) as InfoData).default;
|
|
199
224
|
}
|
|
200
225
|
}
|
|
201
226
|
|
|
202
|
-
async del(name:string)
|
|
203
|
-
|
|
227
|
+
async del(name:string = LocalInfoNameDefault) : Promise<void> {
|
|
228
|
+
await this.storage.del(name);
|
|
204
229
|
}
|
|
205
230
|
|
|
206
|
-
async del_content(name:string, index:number) : Promise<boolean> {
|
|
231
|
+
async del_content(name:string = LocalInfoNameDefault, index:number) : Promise<boolean> {
|
|
207
232
|
const r = await this.storage.get(name);
|
|
208
233
|
if (r) {
|
|
209
234
|
const obj = JSON.parse(r) as InfoData;
|
|
@@ -219,5 +244,9 @@ export class LocalInfo {
|
|
|
219
244
|
async clear() {
|
|
220
245
|
return await this.storage.clear();
|
|
221
246
|
}
|
|
247
|
+
|
|
248
|
+
async list() : Promise<QueryNameData[]> {
|
|
249
|
+
return (await this.storage.iterator().all()).map(v => {return {name:v[0], data:v[1]}});
|
|
250
|
+
}
|
|
222
251
|
}
|
|
223
252
|
|
package/src/query/objects.ts
CHANGED
|
@@ -235,9 +235,6 @@ export interface TableItem_PersonalMark extends ObjectBase, Tags {
|
|
|
235
235
|
|
|
236
236
|
export interface ObjectsQuery {
|
|
237
237
|
objects: string[];
|
|
238
|
-
showType?: boolean;
|
|
239
|
-
showContent?: boolean;
|
|
240
|
-
showOwner?: boolean;
|
|
241
238
|
no_cache?: boolean;
|
|
242
239
|
}
|
|
243
240
|
|
|
@@ -306,12 +303,11 @@ export const query_personal_json = async (json:string) : Promise<string> => {
|
|
|
306
303
|
|
|
307
304
|
export const query_objects = async (query: ObjectsQuery) : Promise<ObjectsAnswer> => {
|
|
308
305
|
var ret:ObjectBase[] = []; var pending : string[] = [];
|
|
309
|
-
const showTypeOnly = !(query.showContent || query.showContent);
|
|
310
306
|
|
|
311
|
-
if (!query.no_cache
|
|
307
|
+
if (!query.no_cache) { // showType only, use cache
|
|
312
308
|
for (let i = 0; i < query.objects.length; ++i) {
|
|
313
309
|
try {
|
|
314
|
-
const cache = await Cache.Instance().cache_get(query.objects[i], CacheName.object
|
|
310
|
+
const cache = await Cache.Instance().cache_get(query.objects[i], CacheName.object);
|
|
315
311
|
|
|
316
312
|
if (cache) {
|
|
317
313
|
const d = data2object(JSON.parse(cache.data));
|
|
@@ -324,11 +320,13 @@ export const query_objects = async (query: ObjectsQuery) : Promise<ObjectsAnswer
|
|
|
324
320
|
} catch (e) { /*console.log(e)*/}
|
|
325
321
|
pending.push(query.objects[i]);
|
|
326
322
|
}
|
|
323
|
+
} else {
|
|
324
|
+
pending = [...query.objects];
|
|
327
325
|
}
|
|
328
326
|
|
|
329
327
|
if (pending.length > 0) {
|
|
330
328
|
const res = await Protocol.Client().multiGetObjects({ids:[...pending],
|
|
331
|
-
options:{showContent:
|
|
329
|
+
options:{showContent:true, showOwner:true}});
|
|
332
330
|
|
|
333
331
|
for (let i = 0; i < res.length; ++i) {
|
|
334
332
|
const d = res[i]?.data;
|
|
@@ -474,6 +472,9 @@ export const queryTableItem_ProgressHistory = async (query:QueryTableItem_Index)
|
|
|
474
472
|
export const queryTableItem_TreasuryHistory = async (query:QueryTableItem_Index) : Promise<ObjectBase> => {
|
|
475
473
|
return await tableItemQuery_byIndex(query)
|
|
476
474
|
}
|
|
475
|
+
export const queryTableItem_MarkTag = async (query:QueryTableItem_Address) : Promise<ObjectBase> => {
|
|
476
|
+
return await tableItemQuery_byAddress(query)
|
|
477
|
+
}
|
|
477
478
|
|
|
478
479
|
const tableItemQuery_byAddress = async (query:QueryTableItem_Address) : Promise<ObjectBase> => {
|
|
479
480
|
const parent = typeof(query.parent) === 'string' ? query.parent : query.parent.object;
|