@alannxd/baileys 6.1.4 → 6.1.7
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/LICENSE +4 -1
- package/README.md +205 -281
- package/lib/Defaults/index.js +1 -1
- package/lib/Socket/chats.js +5 -0
- package/lib/Socket/graphql.js +716 -0
- package/lib/Socket/index.js +9 -1
- package/lib/Socket/interop.js +463 -0
- package/lib/Socket/message-builder.js +475 -0
- package/lib/Socket/messages-recv.js +1 -1
- package/lib/Socket/messages-send.js +106 -30
- package/lib/Socket/mex.js +51 -39
- package/lib/Socket/newsletter.js +729 -242
- package/lib/Socket/privacy.js +318 -0
- package/lib/Socket/socket.js +163 -16
- package/lib/Socket/username.js +225 -136
- package/lib/Store/make-in-memory-store.js +47 -1
- package/lib/Types/Mex.js +76 -2
- package/lib/Utils/index.js +1 -0
- package/lib/Utils/messages-media.js +82 -0
- package/lib/Utils/messages.js +143 -2
- package/lib/Utils/sticker.js +133 -0
- package/lib/Utils/use-sqlite-auth-state.js +162 -0
- package/lib/WAUSync/Protocols/USyncBotProfileProtocol.js +53 -0
- package/lib/WAUSync/Protocols/USyncBusinessProtocol.js +43 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +52 -50
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +55 -52
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +28 -25
- package/lib/WAUSync/Protocols/USyncFeatureProtocol.js +58 -0
- package/lib/WAUSync/Protocols/USyncLIDProtocol.js +30 -0
- package/lib/WAUSync/Protocols/USyncPictureProtocol.js +32 -0
- package/lib/WAUSync/Protocols/USyncSidelistProtocol.js +28 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +37 -36
- package/lib/WAUSync/Protocols/USyncTextStatusProtocol.js +38 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +25 -23
- package/lib/WAUSync/Protocols/index.js +12 -6
- package/lib/WAUSync/USyncQuery.js +149 -96
- package/lib/WAUSync/USyncUser.js +54 -29
- package/lib/WAUSync/index.js +3 -4
- package/lib/index.js +2 -3
- package/package.json +20 -21
- package/WAProto/fix-import.js +0 -29
- package/lib/Defaults/baileys-version.json +0 -3
- package/lib/Defaults/phonenumber-mcc.json +0 -223
- package/lib/Signal/Group/queue-job.js +0 -57
- package/lib/Socket/Client/abstract-socket-client.js +0 -13
- package/lib/Socket/Client/mobile-socket-client.js +0 -65
- package/lib/Socket/Client/web-socket-client.js +0 -62
- package/lib/Socket/community.js +0 -392
- package/lib/Socket/dugong.js +0 -637
- package/lib/Socket/registration.js +0 -167
- package/lib/Socket/usync.js +0 -69
- package/lib/Types/Newsletter.js +0 -38
- package/lib/Utils/baileys-event-stream.js +0 -63
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +0 -51
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +0 -29
|
@@ -1,54 +1,57 @@
|
|
|
1
|
-
import { assertNodeErrorFree, getBinaryNodeChild } from '../../WABinary/index.js'
|
|
1
|
+
import { assertNodeErrorFree, getBinaryNodeChild } from '../../WABinary/index.js'
|
|
2
|
+
|
|
2
3
|
export class USyncDeviceProtocol {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
4
|
+
constructor() {
|
|
5
|
+
this.name = 'devices'
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
getQueryElement() {
|
|
9
|
+
return {
|
|
10
|
+
tag: 'devices',
|
|
11
|
+
attrs: {
|
|
12
|
+
version: '2'
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
getUserElement(/* user */) {
|
|
18
|
+
//TODO: Implement device phashing, ts and expectedTs
|
|
19
|
+
//TODO: if all are not present, return null <- current behavior
|
|
20
|
+
//TODO: otherwise return a node w tag 'devices' w those as attrs
|
|
21
|
+
return null
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
parser(node) {
|
|
25
|
+
const deviceList = []
|
|
26
|
+
let keyIndex = undefined
|
|
27
|
+
if (node.tag === 'devices') {
|
|
28
|
+
assertNodeErrorFree(node)
|
|
29
|
+
const deviceListNode = getBinaryNodeChild(node, 'device-list')
|
|
30
|
+
const keyIndexNode = getBinaryNodeChild(node, 'key-index-list')
|
|
31
|
+
if (Array.isArray(deviceListNode?.content)) {
|
|
32
|
+
for (const { tag, attrs } of deviceListNode.content) {
|
|
33
|
+
const id = +attrs.id
|
|
34
|
+
const keyIndex = +attrs['key-index']
|
|
35
|
+
if (tag === 'device') {
|
|
36
|
+
deviceList.push({
|
|
37
|
+
id,
|
|
38
|
+
keyIndex,
|
|
39
|
+
isHosted: !!(attrs['is_hosted'] && attrs['is_hosted'] === 'true')
|
|
40
|
+
})
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (keyIndexNode?.tag === 'key-index-list') {
|
|
45
|
+
keyIndex = {
|
|
46
|
+
timestamp: +keyIndexNode.attrs['ts'],
|
|
47
|
+
signedKeyIndex: keyIndexNode?.content,
|
|
48
|
+
expectedTimestamp: keyIndexNode.attrs['expected_ts'] ? +keyIndexNode.attrs['expected_ts'] : undefined
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
deviceList,
|
|
54
|
+
keyIndex
|
|
55
|
+
}
|
|
56
|
+
}
|
|
53
57
|
}
|
|
54
|
-
//# sourceMappingURL=USyncDeviceProtocol.js.map
|
|
@@ -1,27 +1,30 @@
|
|
|
1
|
-
import { assertNodeErrorFree } from '../../WABinary/index.js'
|
|
1
|
+
import { assertNodeErrorFree } from '../../WABinary/index.js'
|
|
2
|
+
|
|
2
3
|
export class USyncDisappearingModeProtocol {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
4
|
+
constructor() {
|
|
5
|
+
this.name = 'disappearing_mode'
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
getQueryElement() {
|
|
9
|
+
return {
|
|
10
|
+
tag: 'disappearing_mode',
|
|
11
|
+
attrs: {}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
getUserElement() {
|
|
16
|
+
return null
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
parser(node) {
|
|
20
|
+
if (node.tag === 'disappearing_mode') {
|
|
21
|
+
assertNodeErrorFree(node)
|
|
22
|
+
const duration = +node?.attrs.duration
|
|
23
|
+
const setAt = new Date(+(node?.attrs.t || 0) * 1000)
|
|
24
|
+
return {
|
|
25
|
+
duration,
|
|
26
|
+
setAt
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
26
30
|
}
|
|
27
|
-
//# sourceMappingURL=USyncDisappearingModeProtocol.js.map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { getBinaryNodeChild } from '../../WABinary/index.js'
|
|
2
|
+
|
|
3
|
+
// Device feature flags that can be queried, ported from WhatsApp Web's
|
|
4
|
+
// WAWebUsyncFeature module.
|
|
5
|
+
export const USYNC_FEATURES = [
|
|
6
|
+
'document',
|
|
7
|
+
'encrypt',
|
|
8
|
+
'encrypt_blist',
|
|
9
|
+
'encrypt_contact',
|
|
10
|
+
'encrypt_group_gen2',
|
|
11
|
+
'encrypt_image',
|
|
12
|
+
'encrypt_location',
|
|
13
|
+
'encrypt_url',
|
|
14
|
+
'encrypt_v2',
|
|
15
|
+
'voip',
|
|
16
|
+
'multi_agent'
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
export class USyncFeatureProtocol {
|
|
20
|
+
/**
|
|
21
|
+
* @param {string[]} [features] feature names to query (defaults to all known)
|
|
22
|
+
*/
|
|
23
|
+
constructor(features) {
|
|
24
|
+
this.name = 'feature'
|
|
25
|
+
this.features = features && features.length ? features : USYNC_FEATURES
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
getQueryElement() {
|
|
29
|
+
return {
|
|
30
|
+
tag: 'feature',
|
|
31
|
+
attrs: {},
|
|
32
|
+
content: this.features.map(feature => ({ tag: feature, attrs: {} }))
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
getUserElement() {
|
|
37
|
+
return null
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
parser(node) {
|
|
41
|
+
if (node.tag !== 'feature') return null
|
|
42
|
+
const errorNode = getBinaryNodeChild(node, 'error')
|
|
43
|
+
if (errorNode) {
|
|
44
|
+
return {
|
|
45
|
+
errorCode: errorNode.attrs?.code ? +errorNode.attrs.code : undefined,
|
|
46
|
+
errorText: errorNode.attrs?.text
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const features = {}
|
|
50
|
+
const children = Array.isArray(node.content) ? node.content : []
|
|
51
|
+
for (const child of children) {
|
|
52
|
+
if (child?.attrs && child.attrs.value !== undefined) {
|
|
53
|
+
features[child.tag] = child.attrs.value
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return features
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export class USyncLIDProtocol {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.name = 'lid'
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
getQueryElement() {
|
|
7
|
+
return {
|
|
8
|
+
tag: 'lid',
|
|
9
|
+
attrs: {}
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
getUserElement(user) {
|
|
14
|
+
if (user.lid) {
|
|
15
|
+
return {
|
|
16
|
+
tag: 'lid',
|
|
17
|
+
attrs: { jid: user.lid }
|
|
18
|
+
}
|
|
19
|
+
} else {
|
|
20
|
+
return null
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
parser(node) {
|
|
25
|
+
if (node.tag === 'lid') {
|
|
26
|
+
return node.attrs.val
|
|
27
|
+
}
|
|
28
|
+
return null
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { assertNodeErrorFree } from '../../WABinary/index.js'
|
|
2
|
+
|
|
3
|
+
export class USyncPictureProtocol {
|
|
4
|
+
constructor(type = 'image') {
|
|
5
|
+
this.name = 'picture'
|
|
6
|
+
// "image" for full resolution, "preview" for thumbnail
|
|
7
|
+
this.type = type
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
getQueryElement() {
|
|
11
|
+
return {
|
|
12
|
+
tag: 'picture',
|
|
13
|
+
attrs: { type: this.type }
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
getUserElement(user) {
|
|
18
|
+
const attrs = {}
|
|
19
|
+
if (user.pictureId != null) attrs.id = String(user.pictureId)
|
|
20
|
+
return Object.keys(attrs).length > 0 ? { tag: 'picture', attrs } : null
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
parser(node) {
|
|
24
|
+
if (node.tag !== 'picture') return null
|
|
25
|
+
assertNodeErrorFree(node)
|
|
26
|
+
const id = node.attrs?.id ?? null
|
|
27
|
+
const directPath = node.attrs?.direct_path ?? null
|
|
28
|
+
const hash = node.attrs?.hash ?? null
|
|
29
|
+
if (!id && !directPath) return null
|
|
30
|
+
return { id, directPath, hash }
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { assertNodeErrorFree } from '../../WABinary/index.js'
|
|
2
|
+
|
|
3
|
+
export class USyncSidelistProtocol {
|
|
4
|
+
constructor(useLidAddressing = true) {
|
|
5
|
+
this.name = 'sidelist'
|
|
6
|
+
// When true, sends addressing_mode="lid" — required for interop/LID-mode contacts
|
|
7
|
+
this.useLidAddressing = useLidAddressing
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
getQueryElement() {
|
|
11
|
+
const attrs = {}
|
|
12
|
+
if (this.useLidAddressing) attrs.addressing_mode = 'lid'
|
|
13
|
+
return { tag: 'sidelist', attrs }
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
getUserElement(user) {
|
|
17
|
+
if (user.sidelistDelete) {
|
|
18
|
+
return { tag: 'sidelist', attrs: { type: 'delete' } }
|
|
19
|
+
}
|
|
20
|
+
return null
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
parser(node) {
|
|
24
|
+
if (node.tag !== 'sidelist' && node.tag !== 'side_list') return null
|
|
25
|
+
assertNodeErrorFree(node)
|
|
26
|
+
return { type: node.attrs?.type ?? null }
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -1,38 +1,39 @@
|
|
|
1
|
-
import { assertNodeErrorFree } from '../../WABinary/index.js'
|
|
1
|
+
import { assertNodeErrorFree } from '../../WABinary/index.js'
|
|
2
|
+
|
|
2
3
|
export class USyncStatusProtocol {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
4
|
+
constructor() {
|
|
5
|
+
this.name = 'status'
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
getQueryElement() {
|
|
9
|
+
return {
|
|
10
|
+
tag: 'status',
|
|
11
|
+
attrs: {}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
getUserElement() {
|
|
16
|
+
return null
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
parser(node) {
|
|
20
|
+
if (node.tag === 'status') {
|
|
21
|
+
assertNodeErrorFree(node)
|
|
22
|
+
let status = node?.content?.toString() ?? null
|
|
23
|
+
const setAt = new Date(+(node?.attrs.t || 0) * 1000)
|
|
24
|
+
if (!status) {
|
|
25
|
+
if (node.attrs?.code && +node.attrs.code === 401) {
|
|
26
|
+
status = ''
|
|
27
|
+
} else {
|
|
28
|
+
status = null
|
|
29
|
+
}
|
|
30
|
+
} else if (typeof status === 'string' && status.length === 0) {
|
|
31
|
+
status = null
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
status,
|
|
35
|
+
setAt
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
37
39
|
}
|
|
38
|
-
//# sourceMappingURL=USyncStatusProtocol.js.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { assertNodeErrorFree, getBinaryNodeChild } from '../../WABinary/index.js'
|
|
2
|
+
|
|
3
|
+
export class USyncTextStatusProtocol {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.name = 'text_status'
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
getQueryElement() {
|
|
9
|
+
return {
|
|
10
|
+
tag: 'text_status',
|
|
11
|
+
attrs: {}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
getUserElement() {
|
|
16
|
+
return null
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
parser(node) {
|
|
20
|
+
if (node.tag !== 'text_status') return null
|
|
21
|
+
assertNodeErrorFree(node)
|
|
22
|
+
const lastUpdateTimeSec = node.attrs?.last_update_time ? +node.attrs.last_update_time : 0
|
|
23
|
+
const ephemeralDurationSec = node.attrs?.ephemeral_duration_sec ? +node.attrs.ephemeral_duration_sec : 0
|
|
24
|
+
const text = node.attrs?.text ?? null
|
|
25
|
+
const emojiNode = getBinaryNodeChild(node, 'emoji')
|
|
26
|
+
const emoji = emojiNode?.attrs?.content ?? null
|
|
27
|
+
// expiry is lastUpdateTime + ephemeralDuration (both in ms); 0 means no expiry
|
|
28
|
+
const expiresAt = ephemeralDurationSec > 0
|
|
29
|
+
? new Date((lastUpdateTimeSec + ephemeralDurationSec) * 1000)
|
|
30
|
+
: null
|
|
31
|
+
return {
|
|
32
|
+
text,
|
|
33
|
+
emoji,
|
|
34
|
+
setAt: new Date(lastUpdateTimeSec * 1000),
|
|
35
|
+
expiresAt
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -1,25 +1,27 @@
|
|
|
1
|
-
import { assertNodeErrorFree } from '../../WABinary/index.js'
|
|
2
|
-
|
|
1
|
+
import { assertNodeErrorFree } from '../../WABinary/index.js'
|
|
2
|
+
|
|
3
3
|
export class USyncUsernameProtocol {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
4
|
+
constructor() {
|
|
5
|
+
this.name = 'username'
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
getQueryElement() {
|
|
9
|
+
return {
|
|
10
|
+
tag: 'username',
|
|
11
|
+
attrs: {}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
getUserElement(user) {
|
|
16
|
+
void user
|
|
17
|
+
return null
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
parser(node) {
|
|
21
|
+
if (node.tag === 'username') {
|
|
22
|
+
assertNodeErrorFree(node)
|
|
23
|
+
return typeof node.content === 'string' ? node.content : null
|
|
24
|
+
}
|
|
25
|
+
return null
|
|
26
|
+
}
|
|
24
27
|
}
|
|
25
|
-
//# sourceMappingURL=USyncUsernameProtocol.js.map
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
export * from './USyncDeviceProtocol.js'
|
|
2
|
-
export * from './USyncContactProtocol.js'
|
|
3
|
-
export * from './USyncStatusProtocol.js'
|
|
4
|
-
export * from './USyncDisappearingModeProtocol.js'
|
|
5
|
-
export * from './USyncUsernameProtocol.js'
|
|
6
|
-
|
|
1
|
+
export * from './USyncDeviceProtocol.js'
|
|
2
|
+
export * from './USyncContactProtocol.js'
|
|
3
|
+
export * from './USyncStatusProtocol.js'
|
|
4
|
+
export * from './USyncDisappearingModeProtocol.js'
|
|
5
|
+
export * from './USyncUsernameProtocol.js'
|
|
6
|
+
export * from './USyncBotProfileProtocol.js'
|
|
7
|
+
export * from './USyncLIDProtocol.js'
|
|
8
|
+
export * from './USyncBusinessProtocol.js'
|
|
9
|
+
export * from './USyncPictureProtocol.js'
|
|
10
|
+
export * from './USyncTextStatusProtocol.js'
|
|
11
|
+
export * from './USyncSidelistProtocol.js'
|
|
12
|
+
export * from './USyncFeatureProtocol.js'
|