@alloy-framework/core 0.4.0 β 0.14.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/package.json +3 -3
- package/src/app/AlloyApp.js +0 -610
- package/src/config/AlloyConfig.js +0 -131
- package/src/data/AlloyModel.js +0 -405
- package/src/data/AlloyMongoModel.js +0 -265
- package/src/data/AlloyRedisModel.js +0 -158
- package/src/data/GooseValidator.js +0 -168
- package/src/data/index.js +0 -6
- package/src/data/validationHelper.js +0 -79
- package/src/http/AlloyController.js +0 -322
- package/src/http/AlloyRouter.js +0 -130
- package/src/http/Validator.js +0 -52
- package/src/http/index.js +0 -6
- package/src/index.d.ts +0 -345
- package/src/index.js +0 -43
- package/src/security/AlloyCrypto.js +0 -96
- package/src/security/AlloySession.js +0 -81
- package/src/security/index.js +0 -5
- package/src/service/AlloyService.js +0 -171
- package/src/util/AlloyError.js +0 -23
- package/src/util/Pagination.js +0 -39
- package/src/util/index.js +0 -6
- package/src/ws/AlloyWebSocket.js +0 -130
- package/wasm/alloy_client_wasm.d.ts +0 -174
- package/wasm/alloy_client_wasm.js +0 -1215
- package/wasm/alloy_client_wasm_bg.wasm +0 -0
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
import native from '@alloy-framework/rust';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* ποΈ Alloy μλΉμ€ κΈ°λ° ν΄λμ€
|
|
5
|
-
* Cache, Lock, Task λ± λ€μ΄ν°λΈ μ νΈλ¦¬ν°λ₯Ό μ 곡νλ λΉμ¦λμ€ μλΉμ€ κΈ°λ° ν΄λμ€μ
λλ€.
|
|
6
|
-
* λλ©μΈ μλΉμ€λ μ΄ ν΄λμ€λ₯Ό μμνμ¬ μ¬μ©ν©λλ€.
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* class UserService extends AlloyService {
|
|
10
|
-
* async getUser(id) {
|
|
11
|
-
* return this.withCache(`user:${id}`, 300, async () => {
|
|
12
|
-
* return await UserModel.findById(id);
|
|
13
|
-
* });
|
|
14
|
-
* }
|
|
15
|
-
* }
|
|
16
|
-
*/
|
|
17
|
-
export class AlloyService {
|
|
18
|
-
constructor() {
|
|
19
|
-
/** @type {import('@alloy/rust').AlloyService} λ€μ΄ν°λΈ μλΉμ€ μΈμ€ν΄μ€ */
|
|
20
|
-
this._native = new native.AlloyService();
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// ββββββββββββββββββββββββββββββββββββββ
|
|
24
|
-
// π§ μ νΈλ¦¬ν°
|
|
25
|
-
// ββββββββββββββββββββββββββββββββββββββ
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* μμ½ ν
μ€νΈ (λ€μ΄ν°λΈ μ°κ²° νμΈμ©)
|
|
29
|
-
* @param {string} msg - μμ½ λ©μμ§
|
|
30
|
-
* @returns {string} "Native Echo: {msg}"
|
|
31
|
-
*/
|
|
32
|
-
echo(msg) {
|
|
33
|
-
return this._native.echo(msg);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* CPU μ§μ½μ μμ
μ λ€μ΄ν°λΈ μ€λ λνμμ μ€ν
|
|
38
|
-
* @param {string} name - μμ
μ΄λ¦
|
|
39
|
-
* @param {number} difficulty - λμ΄λ
|
|
40
|
-
* @returns {Promise<string>} μμ
κ²°κ³Ό
|
|
41
|
-
*/
|
|
42
|
-
runTask(name, difficulty) {
|
|
43
|
-
return this._native.runTask(name, difficulty);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* λ°°μ΄μ κ° νλͺ©μ λν΄ λΉλκΈ° ν¨μλ₯Ό λ³λ ¬ μ€ν
|
|
48
|
-
* fnμ΄ μμΌλ©΄ itemsλ₯Ό Promise λ°°μ΄λ‘ κ°μ£Όνμ¬ μ§μ ν΄μ
|
|
49
|
-
*
|
|
50
|
-
* @param {Array} items - μ²λ¦¬ν νλͺ© λ°°μ΄ λλ Promise λ°°μ΄
|
|
51
|
-
* @param {Function} [fn] - κ° νλͺ©μ μ μ©ν λΉλκΈ° ν¨μ (item, index) => Promise (μλ΅ κ°λ₯)
|
|
52
|
-
* @param {object} [options] - μ΅μ
{ settled: false }
|
|
53
|
-
* @param {boolean} [options.settled=false] - trueλ©΄ Promise.allSettled μ¬μ© (λΆλΆ μ€ν¨ νμ©)
|
|
54
|
-
* @returns {Promise<Array>} λ³λ ¬ μ€ν κ²°κ³Ό λ°°μ΄ (μ
λ ₯ μμ μ μ§)
|
|
55
|
-
*
|
|
56
|
-
* @example
|
|
57
|
-
* // ν¨ν΄ 1: λ°°μ΄ + λ§€ν ν¨μ
|
|
58
|
-
* const enriched = await this.runParallel(posts, async (post) => {
|
|
59
|
-
* const author = await UserModel.findById(post.user_id);
|
|
60
|
-
* return { ...post, author_name: author?.nickname };
|
|
61
|
-
* });
|
|
62
|
-
*
|
|
63
|
-
* // ν¨ν΄ 2: Promise λ°°μ΄ μ§μ ν΄μ
|
|
64
|
-
* const [users, count] = await this.runParallel([fetchUsers(), fetchCount()]);
|
|
65
|
-
*
|
|
66
|
-
* // ν¨ν΄ 3: λΆλΆ μ€ν¨ νμ©
|
|
67
|
-
* const results = await this.runParallel(items, fetchItem, { settled: true });
|
|
68
|
-
*/
|
|
69
|
-
async runParallel(items, fn, options = {}) {
|
|
70
|
-
const resolver = options.settled ? Promise.allSettled.bind(Promise) : Promise.all.bind(Promise);
|
|
71
|
-
// fnμ΄ μμΌλ©΄ itemsλ₯Ό Promise λ°°μ΄λ‘ κ°μ£Ό
|
|
72
|
-
if (!fn) return resolver(items);
|
|
73
|
-
return resolver(items.map((item, index) => fn(item, index)));
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// ββββββββββββββββββββββββββββββββββββββ
|
|
77
|
-
// π¦ μΊμ (Redis, λ©λͺ¨λ¦¬ ν΄λ°±)
|
|
78
|
-
// ββββββββββββββββββββββββββββββββββββββ
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* μΊμ μ μ₯
|
|
82
|
-
* @param {string} key - μΊμ ν€
|
|
83
|
-
* @param {string} value - κ° (λ¬Έμμ΄)
|
|
84
|
-
* @param {number} ttlSeconds - TTL (μ΄)
|
|
85
|
-
* @returns {Promise<void>}
|
|
86
|
-
*/
|
|
87
|
-
async setCache(key, value, ttlSeconds) {
|
|
88
|
-
return await this._native.setCache(key, String(value), ttlSeconds);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* μΊμ μ‘°ν
|
|
93
|
-
* @param {string} key - μΊμ ν€
|
|
94
|
-
* @returns {Promise<string|null>}
|
|
95
|
-
*/
|
|
96
|
-
async getCache(key) {
|
|
97
|
-
return await this._native.getCache(key);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* μΊμ λνΌ β μΊμ miss μ fetcher νΈμΆ ν μ μ₯
|
|
102
|
-
* @param {string} key - μΊμ ν€
|
|
103
|
-
* @param {number} ttlSeconds - TTL (μ΄)
|
|
104
|
-
* @param {Function} fetcher - λ°μ΄ν° μ‘°ν ν¨μ
|
|
105
|
-
* @returns {Promise<any>} μΊμλ λλ μ κ· μ‘°ν λ°μ΄ν°
|
|
106
|
-
*/
|
|
107
|
-
async withCache(key, ttlSeconds, fetcher) {
|
|
108
|
-
try {
|
|
109
|
-
const cached = await this.getCache(key);
|
|
110
|
-
if (cached) {
|
|
111
|
-
return JSON.parse(cached);
|
|
112
|
-
}
|
|
113
|
-
} catch (e) {
|
|
114
|
-
console.warn(`[AlloyService] μΊμ μ½κΈ° μ€ν¨ (${key}):`, e.message);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// μΊμ miss β fetcher μ€ν
|
|
118
|
-
const data = await fetcher();
|
|
119
|
-
|
|
120
|
-
if (data !== undefined && data !== null) {
|
|
121
|
-
try {
|
|
122
|
-
await this.setCache(key, JSON.stringify(data), ttlSeconds);
|
|
123
|
-
} catch (e) {
|
|
124
|
-
console.warn(`[AlloyService] μΊμ μ μ₯ μ€ν¨ (${key}):`, e.message);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
return data;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// ββββββββββββββββββββββββββββββββββββββ
|
|
132
|
-
// π λΆμ° λ½ (Redis)
|
|
133
|
-
// ββββββββββββββββββββββββββββββββββββββ
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* λ€νΈμν¬ λΆμ° λ½ νλ (Redis SET NX PX)
|
|
137
|
-
* @param {string} resource - 리μμ€ ν€
|
|
138
|
-
* @param {number} [ttlMs=5000] - TTL (λ°λ¦¬μ΄)
|
|
139
|
-
* @returns {Promise<boolean>} νλ μ±κ³΅ μ¬λΆ
|
|
140
|
-
*/
|
|
141
|
-
async acquireNetworkLock(resource, ttlMs = 5000) {
|
|
142
|
-
return await this._native.acquireNetworkLock(resource, ttlMs);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* λ€νΈμν¬ λΆμ° λ½ ν΄μ
|
|
147
|
-
* @param {string} resource - 리μμ€ ν€
|
|
148
|
-
* @returns {Promise<void>}
|
|
149
|
-
*/
|
|
150
|
-
async releaseNetworkLock(resource) {
|
|
151
|
-
return await this._native.releaseNetworkLock(resource);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* λ‘컬 νλ‘μΈμ€ λ½ νλ (μΈλ©λͺ¨λ¦¬)
|
|
156
|
-
* @param {string} resource - 리μμ€ ν€
|
|
157
|
-
* @param {number} [ttlMs=5000] - TTL (λ°λ¦¬μ΄)
|
|
158
|
-
* @returns {boolean} νλ μ±κ³΅ μ¬λΆ
|
|
159
|
-
*/
|
|
160
|
-
acquireLocalLock(resource, ttlMs = 5000) {
|
|
161
|
-
return this._native.acquireLocalLock(resource, ttlMs);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* λ‘컬 νλ‘μΈμ€ λ½ ν΄μ
|
|
166
|
-
* @param {string} resource - 리μμ€ ν€
|
|
167
|
-
*/
|
|
168
|
-
releaseLocalLock(resource) {
|
|
169
|
-
this._native.releaseLocalLock(resource);
|
|
170
|
-
}
|
|
171
|
-
}
|
package/src/util/AlloyError.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* π¨ Alloy νμ€ μλ¬ ν΄λμ€
|
|
3
|
-
* HTTP μν μ½λμ μλ¬ μ½λλ₯Ό ν¬ν¨νλ ꡬ쑰νλ μλ¬μ
λλ€.
|
|
4
|
-
*
|
|
5
|
-
* @example
|
|
6
|
-
* throw new AlloyError('AUTH_SESSION_EXPIRED', 'μΈμ
μ΄ λ§λ£λμμ΅λλ€', 401);
|
|
7
|
-
*/
|
|
8
|
-
export class AlloyError extends Error {
|
|
9
|
-
/**
|
|
10
|
-
* @param {string} code - μλ¬ μ½λ (μ: 'AUTH_SESSION_EXPIRED')
|
|
11
|
-
* @param {string} [message] - μ¬λμ΄ μ½μ μ μλ λ©μμ§ (κΈ°λ³Έκ°: code)
|
|
12
|
-
* @param {number} [statusCode=500] - HTTP μν μ½λ
|
|
13
|
-
*/
|
|
14
|
-
constructor(code, message, statusCode = 500) {
|
|
15
|
-
super(message || code);
|
|
16
|
-
/** @type {string} μλ¬ μ΄λ¦ */
|
|
17
|
-
this.name = 'AlloyError';
|
|
18
|
-
/** @type {string} μλ¬ μ½λ */
|
|
19
|
-
this.code = code;
|
|
20
|
-
/** @type {number} HTTP μν μ½λ */
|
|
21
|
-
this.statusCode = statusCode;
|
|
22
|
-
}
|
|
23
|
-
}
|
package/src/util/Pagination.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* π νμ΄μ§λ€μ΄μ
μ νΈλ¦¬ν°
|
|
3
|
-
* μλΉμ€ λ μ΄μ΄μμ λͺ©λ‘ μ‘°ν μ 곡ν΅μΌλ‘ μ¬μ©ν©λλ€.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* νμ΄μ§/μ¬μ΄μ¦λ₯Ό offset/limitμΌλ‘ λ³ν
|
|
8
|
-
* @param {number} [page=1] - νμ¬ νμ΄μ§ (1λΆν°)
|
|
9
|
-
* @param {number} [size=20] - νμ΄μ§λΉ νλͺ© μ
|
|
10
|
-
* @returns {{ offset: number, limit: number }}
|
|
11
|
-
*/
|
|
12
|
-
export function paginate(page = 1, size = 20) {
|
|
13
|
-
const safePage = Math.max(1, Math.floor(page)); // μ΅μ 1νμ΄μ§
|
|
14
|
-
const safeSize = Math.min(100, Math.max(1, Math.floor(size))); // 1~100 λ²μ μ ν
|
|
15
|
-
return {
|
|
16
|
-
offset: (safePage - 1) * safeSize,
|
|
17
|
-
limit: safeSize,
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* νμ΄μ§λ€μ΄μ
μλ΅ κ΅¬μ±
|
|
23
|
-
* @param {Array} items - μ‘°νλ νλͺ© λ°°μ΄
|
|
24
|
-
* @param {number} total - μ 체 νλͺ© μ
|
|
25
|
-
* @param {number} page - νμ¬ νμ΄μ§
|
|
26
|
-
* @param {number} size - νμ΄μ§λΉ νλͺ© μ
|
|
27
|
-
* @returns {{ items: Array, total: number, page: number, size: number, totalPages: number }}
|
|
28
|
-
*/
|
|
29
|
-
export function buildResponse(items, total, page, size) {
|
|
30
|
-
const safePage = Math.max(1, Math.floor(page));
|
|
31
|
-
const safeSize = Math.min(100, Math.max(1, Math.floor(size)));
|
|
32
|
-
return {
|
|
33
|
-
items,
|
|
34
|
-
total,
|
|
35
|
-
page: safePage,
|
|
36
|
-
size: safeSize,
|
|
37
|
-
totalPages: Math.ceil(total / safeSize), // μ 체 νμ΄μ§ μ
|
|
38
|
-
};
|
|
39
|
-
}
|
package/src/util/index.js
DELETED
package/src/ws/AlloyWebSocket.js
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
// native λͺ¨λμ AlloyAppμμ constructor νλΌλ―Έν°λ‘ μ£Όμ
λ°μ (λͺ¨λ λ 벨 import λΆνμ)
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* π Alloy WebSocket λνΌ
|
|
5
|
-
* Rust λ€μ΄ν°λΈ WebSocket μΈμ
μ JSμμ λ€λ£¨κΈ° μ½κ² λνν©λλ€.
|
|
6
|
-
* AlloyAppμ ws.onConnect μ½λ°±μμ μλ μμ±λ©λλ€.
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* app.ws({
|
|
10
|
-
* onConnect(socket) {
|
|
11
|
-
* socket.send({ type: 'welcome', data: 'Hello!' });
|
|
12
|
-
* },
|
|
13
|
-
* onMessage(socket, message) {
|
|
14
|
-
* socket.broadcast({ type: 'chat', data: message });
|
|
15
|
-
* },
|
|
16
|
-
* });
|
|
17
|
-
*/
|
|
18
|
-
export class AlloyWebSocket {
|
|
19
|
-
/**
|
|
20
|
-
* @param {string} id - μΈμ
ID (Rustμμ UUID μλ μμ±)
|
|
21
|
-
* @param {object} native - λ€μ΄ν°λΈ λͺ¨λ μ°Έμ‘°
|
|
22
|
-
* @param {object} [connectionData] - μ°κ²° λ©νλ°μ΄ν°
|
|
23
|
-
*/
|
|
24
|
-
constructor(id, native, connectionData = {}) {
|
|
25
|
-
/** @type {string} μΈμ
ID */
|
|
26
|
-
this.id = id;
|
|
27
|
-
/** @type {object} λ€μ΄ν°λΈ λͺ¨λ μ°Έμ‘° */
|
|
28
|
-
this.native = native;
|
|
29
|
-
/** @type {string} μ°κ²° μ ν ('local' | 'remote') */
|
|
30
|
-
this.connectionType = connectionData.type || connectionData.connectionType || 'local';
|
|
31
|
-
/** @type {string} ν΄λΌμ΄μΈνΈ IP */
|
|
32
|
-
this.clientIp = connectionData.ip || connectionData.clientIp || 'unknown';
|
|
33
|
-
/** @type {string} μ°κ²° μκ° */
|
|
34
|
-
this.connectedAt = connectionData.connected_at || connectionData.connectedAt || new Date().toISOString();
|
|
35
|
-
/** @type {string} μλ² ID */
|
|
36
|
-
this.server = connectionData.server || null;
|
|
37
|
-
/** @type {object} HTTP μΏ ν€ (μΈμ
ID μΆμΆμ©) */
|
|
38
|
-
this.cookies = connectionData.cookies || {};
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// ββββββββββββββββββββββββββββββββββββββ
|
|
42
|
-
// π¨ λ©μμ§ μ μ‘
|
|
43
|
-
// ββββββββββββββββββββββββββββββββββββββ
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* μ΄ μμΌμκ² λ©μμ§ μ μ‘
|
|
47
|
-
* @param {string|object} msg - μ μ‘ν λ©μμ§ (κ°μ²΄λ JSON λ³ν)
|
|
48
|
-
*/
|
|
49
|
-
send(msg) {
|
|
50
|
-
const payload = (typeof msg === 'object') ? JSON.stringify(msg) : String(msg);
|
|
51
|
-
if (this.native.sendTo) {
|
|
52
|
-
this.native.sendTo(this.id, payload);
|
|
53
|
-
} else {
|
|
54
|
-
console.warn('β οΈ native.sendTo not available');
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* μ 체 ν΄λΌμ΄μΈνΈμκ² λΈλ‘λμΊμ€νΈ (NATS κ²½μ ν¬λ‘μ€μλ²)
|
|
60
|
-
* @param {string|object} msg - μ μ‘ν λ©μμ§
|
|
61
|
-
*/
|
|
62
|
-
broadcast(msg) {
|
|
63
|
-
const payload = (typeof msg === 'object') ? JSON.stringify(msg) : String(msg);
|
|
64
|
-
this.native.broadcast(payload);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* νΉμ λμμκ² λ€μ΄λ νΈ λ©μμ§ μ μ‘ (NATS κ²½μ ν¬λ‘μ€μλ²)
|
|
69
|
-
* @param {string} targetId - λμ μΈμ
ID
|
|
70
|
-
* @param {string|object} msg - μ μ‘ν λ©μμ§
|
|
71
|
-
*/
|
|
72
|
-
sendTo(targetId, msg) {
|
|
73
|
-
const payload = (typeof msg === 'object') ? JSON.stringify(msg) : String(msg);
|
|
74
|
-
this.native.sendTo(targetId, payload);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* λ€μ€ μμ μμκ² λ©μμ§ μ μ‘ (λ©ν°μΊμ€νΈ)
|
|
79
|
-
* @param {string[]} ids - μμ μ μΈμ
ID λ°°μ΄
|
|
80
|
-
* @param {string|object} msg - μ μ‘ν λ©μμ§
|
|
81
|
-
*/
|
|
82
|
-
sendToMany(ids, msg) {
|
|
83
|
-
const payload = (typeof msg === 'object') ? JSON.stringify(msg) : String(msg);
|
|
84
|
-
if (this.native.sendToMany) {
|
|
85
|
-
this.native.sendToMany(ids, payload);
|
|
86
|
-
} else {
|
|
87
|
-
// ν΄λ°±: κ°λ³ μ μ‘
|
|
88
|
-
for (const id of ids) {
|
|
89
|
-
this.native.sendTo(id, payload);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// ββββββββββββββββββββββββββββββββββββββ
|
|
95
|
-
// π μ°κ²° κ΄λ¦¬
|
|
96
|
-
// ββββββββββββββββββββββββββββββββββββββ
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* μ μ μ€μΈ μ 체 ν΄λΌμ΄μΈνΈ ID λͺ©λ‘ (λ‘컬 + 리λͺ¨νΈ)
|
|
100
|
-
* @returns {string[]} μΈμ
ID λ°°μ΄
|
|
101
|
-
*/
|
|
102
|
-
getOnlineClients() {
|
|
103
|
-
return this.native.getOnlineClients?.() || [];
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* μ μ μ€μΈ μ 체 ν΄λΌμ΄μΈνΈ μμΈ λͺ©λ‘ (id + μ°κ²° νμ)
|
|
108
|
-
* @returns {{ id: string, connectionType: string }[]} ν΄λΌμ΄μΈνΈ μμΈ λ°°μ΄
|
|
109
|
-
*/
|
|
110
|
-
getOnlineClientsDetail() {
|
|
111
|
-
return this.native.getOnlineClientsDetail?.() || [];
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* μ μ μ€μΈ ν΄λΌμ΄μΈνΈ μ (λ‘컬 + 리λͺ¨νΈ)
|
|
116
|
-
* @returns {number}
|
|
117
|
-
*/
|
|
118
|
-
getOnlineCount() {
|
|
119
|
-
return this.native.getOnlineCount?.() || 0;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* νΉμ ν΄λΌμ΄μΈνΈ κ°μ μ’
λ£ (Close Code 4001)
|
|
124
|
-
* @param {string} targetId - λμ μΈμ
ID
|
|
125
|
-
* @returns {boolean} μ±κ³΅ μ¬λΆ
|
|
126
|
-
*/
|
|
127
|
-
disconnectClient(targetId) {
|
|
128
|
-
return this.native.disconnectClient?.(targetId) || false;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
/* tslint:disable */
|
|
2
|
-
/* eslint-disable */
|
|
3
|
-
|
|
4
|
-
export class AlloyClient {
|
|
5
|
-
free(): void;
|
|
6
|
-
[Symbol.dispose](): void;
|
|
7
|
-
decrypt_custom(key: string, data: string): string;
|
|
8
|
-
/**
|
|
9
|
-
* Smart DELETE Request
|
|
10
|
-
*/
|
|
11
|
-
delete(path: string, encrypt_enabled?: boolean | null): Promise<any>;
|
|
12
|
-
encrypt_custom(key: string, data: string): string;
|
|
13
|
-
/**
|
|
14
|
-
* Smart GET Request (encrypt_query: defaults to true)
|
|
15
|
-
*/
|
|
16
|
-
get(path: string, encrypt_enabled?: boolean | null): Promise<any>;
|
|
17
|
-
constructor(master_secret: string);
|
|
18
|
-
/**
|
|
19
|
-
* Smart PATCH Request
|
|
20
|
-
*/
|
|
21
|
-
patch(path: string, json_body: any, encrypt_enabled?: boolean | null): Promise<any>;
|
|
22
|
-
/**
|
|
23
|
-
* Smart POST Request
|
|
24
|
-
*/
|
|
25
|
-
post(path: string, json_body: any, encrypt_enabled?: boolean | null): Promise<any>;
|
|
26
|
-
/**
|
|
27
|
-
* Smart PUT Request
|
|
28
|
-
*/
|
|
29
|
-
put(path: string, json_body: any, encrypt_enabled?: boolean | null): Promise<any>;
|
|
30
|
-
uuid(): string;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* π‘ AlloySocket β WASM κΈ°λ° WebSocket ν΄λΌμ΄μΈνΈ
|
|
35
|
-
*
|
|
36
|
-
* μ΄λ²€νΈ κΈ°λ° λ©μμ§ ({ type, data }) ꡬ쑰λ₯Ό μ¬μ©νλ©°,
|
|
37
|
-
* λ©μμ§ μνΈν, μλ Ping, μ€λ§νΈ μ¬μ°κ²°μ μ§μν©λλ€.
|
|
38
|
-
*/
|
|
39
|
-
export class AlloySocket {
|
|
40
|
-
free(): void;
|
|
41
|
-
[Symbol.dispose](): void;
|
|
42
|
-
/**
|
|
43
|
-
* π μλ² μ°κ²°
|
|
44
|
-
*/
|
|
45
|
-
connect(): void;
|
|
46
|
-
/**
|
|
47
|
-
* π λͺ
μμ μ°κ²° μ’
λ£
|
|
48
|
-
*/
|
|
49
|
-
disconnect(): void;
|
|
50
|
-
/**
|
|
51
|
-
* π μ°κ²° μν νμΈ
|
|
52
|
-
*/
|
|
53
|
-
is_connected(): boolean;
|
|
54
|
-
/**
|
|
55
|
-
* π‘ AlloySocket μμ±μ
|
|
56
|
-
*
|
|
57
|
-
* @param url - WebSocket μλ² μ£Όμ (μ: "ws://localhost:3000/ws")
|
|
58
|
-
* @param master_secret - λ©μμ§ μνΈν ν€
|
|
59
|
-
* @param encrypt_enabled - μνΈν νμ±ν μ¬λΆ (κΈ°λ³Έ: false)
|
|
60
|
-
*/
|
|
61
|
-
constructor(url: string, master_secret: string, encrypt_enabled?: boolean | null);
|
|
62
|
-
/**
|
|
63
|
-
* π© μ΄λ²€νΈ νΈλ€λ¬ λ±λ‘
|
|
64
|
-
*
|
|
65
|
-
* @param event_type - μ΄λ²€νΈ νμ
(μ: "connect", "message", "disconnect", "chat")
|
|
66
|
-
* @param callback - JS μ½λ°± ν¨μ
|
|
67
|
-
*/
|
|
68
|
-
on(event_type: string, callback: Function): void;
|
|
69
|
-
/**
|
|
70
|
-
* π¨ μ΄λ²€νΈ κΈ°λ° λ©μμ§ μ μ‘
|
|
71
|
-
*
|
|
72
|
-
* @param event_type - μ΄λ²€νΈ νμ
(μ: "chat", "sync")
|
|
73
|
-
* @param data - μ μ‘ν λ°μ΄ν° (JS κ°μ²΄)
|
|
74
|
-
*/
|
|
75
|
-
send(event_type: string, data: any): void;
|
|
76
|
-
/**
|
|
77
|
-
* βοΈ μλ μ¬μ°κ²° νμ±ν/λΉνμ±ν
|
|
78
|
-
*/
|
|
79
|
-
set_auto_reconnect(enabled: boolean): void;
|
|
80
|
-
/**
|
|
81
|
-
* βοΈ μ΅λ μ¬μ°κ²° μλ νμ μ€μ
|
|
82
|
-
*/
|
|
83
|
-
set_max_reconnect_attempts(count: number): void;
|
|
84
|
-
/**
|
|
85
|
-
* βοΈ Ping μ£ΌκΈ° μ€μ (λ°λ¦¬μ΄)
|
|
86
|
-
*/
|
|
87
|
-
set_ping_interval(ms: number): void;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export class AlloyUtil {
|
|
91
|
-
private constructor();
|
|
92
|
-
free(): void;
|
|
93
|
-
[Symbol.dispose](): void;
|
|
94
|
-
/**
|
|
95
|
-
* Find items > threshold (Example of complex filter)
|
|
96
|
-
*/
|
|
97
|
-
static filter_gt(list: Int32Array, threshold: number): Int32Array;
|
|
98
|
-
static md5(input: string): string;
|
|
99
|
-
static sha256(input: string): string;
|
|
100
|
-
/**
|
|
101
|
-
* Shuffle a large array of integers (Fisher-Yates)
|
|
102
|
-
* Much faster than JS sort(() => 0.5 - Math.random())
|
|
103
|
-
*/
|
|
104
|
-
static shuffle_i32(list: Int32Array): Int32Array;
|
|
105
|
-
/**
|
|
106
|
-
* High performance sort
|
|
107
|
-
*/
|
|
108
|
-
static sort_i32(list: Int32Array): Int32Array;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
|
|
112
|
-
|
|
113
|
-
export interface InitOutput {
|
|
114
|
-
readonly memory: WebAssembly.Memory;
|
|
115
|
-
readonly __wbg_alloyclient_free: (a: number, b: number) => void;
|
|
116
|
-
readonly __wbg_alloysocket_free: (a: number, b: number) => void;
|
|
117
|
-
readonly __wbg_alloyutil_free: (a: number, b: number) => void;
|
|
118
|
-
readonly alloyclient_decrypt_custom: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
|
|
119
|
-
readonly alloyclient_delete: (a: number, b: number, c: number, d: number) => number;
|
|
120
|
-
readonly alloyclient_encrypt_custom: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
|
|
121
|
-
readonly alloyclient_get: (a: number, b: number, c: number, d: number) => number;
|
|
122
|
-
readonly alloyclient_new: (a: number, b: number, c: number) => void;
|
|
123
|
-
readonly alloyclient_patch: (a: number, b: number, c: number, d: number, e: number) => number;
|
|
124
|
-
readonly alloyclient_post: (a: number, b: number, c: number, d: number, e: number) => number;
|
|
125
|
-
readonly alloyclient_put: (a: number, b: number, c: number, d: number, e: number) => number;
|
|
126
|
-
readonly alloyclient_uuid: (a: number, b: number) => void;
|
|
127
|
-
readonly alloysocket_connect: (a: number, b: number) => void;
|
|
128
|
-
readonly alloysocket_disconnect: (a: number) => void;
|
|
129
|
-
readonly alloysocket_is_connected: (a: number) => number;
|
|
130
|
-
readonly alloysocket_new: (a: number, b: number, c: number, d: number, e: number) => number;
|
|
131
|
-
readonly alloysocket_on: (a: number, b: number, c: number, d: number) => void;
|
|
132
|
-
readonly alloysocket_send: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
133
|
-
readonly alloysocket_set_auto_reconnect: (a: number, b: number) => void;
|
|
134
|
-
readonly alloysocket_set_max_reconnect_attempts: (a: number, b: number) => void;
|
|
135
|
-
readonly alloysocket_set_ping_interval: (a: number, b: number) => void;
|
|
136
|
-
readonly alloyutil_filter_gt: (a: number, b: number, c: number, d: number) => void;
|
|
137
|
-
readonly alloyutil_md5: (a: number, b: number, c: number) => void;
|
|
138
|
-
readonly alloyutil_sha256: (a: number, b: number, c: number) => void;
|
|
139
|
-
readonly alloyutil_shuffle_i32: (a: number, b: number, c: number) => void;
|
|
140
|
-
readonly alloyutil_sort_i32: (a: number, b: number, c: number) => void;
|
|
141
|
-
readonly __wasm_bindgen_func_elem_87: (a: number, b: number) => void;
|
|
142
|
-
readonly __wasm_bindgen_func_elem_665: (a: number, b: number) => void;
|
|
143
|
-
readonly __wasm_bindgen_func_elem_713: (a: number, b: number, c: number, d: number) => void;
|
|
144
|
-
readonly __wasm_bindgen_func_elem_88: (a: number, b: number, c: number) => void;
|
|
145
|
-
readonly __wasm_bindgen_func_elem_666: (a: number, b: number, c: number) => void;
|
|
146
|
-
readonly __wasm_bindgen_func_elem_92: (a: number, b: number) => void;
|
|
147
|
-
readonly __wbindgen_export: (a: number, b: number) => number;
|
|
148
|
-
readonly __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
|
|
149
|
-
readonly __wbindgen_export3: (a: number) => void;
|
|
150
|
-
readonly __wbindgen_add_to_stack_pointer: (a: number) => number;
|
|
151
|
-
readonly __wbindgen_export4: (a: number, b: number, c: number) => void;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
export type SyncInitInput = BufferSource | WebAssembly.Module;
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Instantiates the given `module`, which can either be bytes or
|
|
158
|
-
* a precompiled `WebAssembly.Module`.
|
|
159
|
-
*
|
|
160
|
-
* @param {{ module: SyncInitInput }} module - Passing `SyncInitInput` directly is deprecated.
|
|
161
|
-
*
|
|
162
|
-
* @returns {InitOutput}
|
|
163
|
-
*/
|
|
164
|
-
export function initSync(module: { module: SyncInitInput } | SyncInitInput): InitOutput;
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* If `module_or_path` is {RequestInfo} or {URL}, makes a request and
|
|
168
|
-
* for everything else, calls `WebAssembly.instantiate` directly.
|
|
169
|
-
*
|
|
170
|
-
* @param {{ module_or_path: InitInput | Promise<InitInput> }} module_or_path - Passing `InitInput` directly is deprecated.
|
|
171
|
-
*
|
|
172
|
-
* @returns {Promise<InitOutput>}
|
|
173
|
-
*/
|
|
174
|
-
export default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise<InitInput> } | InitInput | Promise<InitInput>): Promise<InitOutput>;
|