diff --git a/README.md b/README.md
deleted file mode 100644
index e394177..0000000
--- a/README.md
+++ /dev/null
@@ -1,21 +0,0 @@
-## Библиотека для ширования подписи на WASM
-
-Готовый шаблон тестов есть в example.html
-
-Ваша задача фундаментально такая:
-1) сгенерировать подпись
-2) отправить подпись на эндпоинт нужным образом
-
-
-Как сгенерировать подпись?
-1) в метод get_secret_value сунуть:
-- user_agent (че угодно)
-- cur_time (время из эндпоинта https://api.id.hublab.ru/api/v1/server-timestamp )
-- url (на самом деле это path)
-
-Формат подписи: набор букв и чисел. Если в результате будет что-то типа "Ошибка 95d19684-e70e-47f5-9341-94f5fd575d08", то значит
-что-то пошло не так. Отправить такую подпись вы можете, но бэк её не свалидирует и вернёт 401))
-
-
-
-
diff --git a/example.html b/example.html
deleted file mode 100644
index c3e5670..0000000
--- a/example.html
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
-
-
- WASM Example
-
-
- WASM Example
-
- User Agent:
-
-
-
- URL:
-
-
- Получить секретное значение
-
-
-
-
-
\ No newline at end of file
diff --git a/nodejs/hublib.d.ts b/nodejs/hublib.d.ts
new file mode 100644
index 0000000..4ef2959
--- /dev/null
+++ b/nodejs/hublib.d.ts
@@ -0,0 +1,3 @@
+/* tslint:disable */
+/* eslint-disable */
+export function get_secret_value(given_time: bigint, user_agent: string, url: string): string;
diff --git a/nodejs/hublib.js b/nodejs/hublib.js
new file mode 100644
index 0000000..0b5e8b8
--- /dev/null
+++ b/nodejs/hublib.js
@@ -0,0 +1,137 @@
+
+let imports = {};
+imports['__wbindgen_placeholder__'] = module.exports;
+let wasm;
+const { TextDecoder, TextEncoder } = require(`util`);
+
+let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
+
+cachedTextDecoder.decode();
+
+let cachedUint8ArrayMemory0 = null;
+
+function getUint8ArrayMemory0() {
+ if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
+ cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
+ }
+ return cachedUint8ArrayMemory0;
+}
+
+function getStringFromWasm0(ptr, len) {
+ ptr = ptr >>> 0;
+ return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
+}
+
+let WASM_VECTOR_LEN = 0;
+
+let cachedTextEncoder = new TextEncoder('utf-8');
+
+const encodeString = (typeof cachedTextEncoder.encodeInto === 'function'
+ ? function (arg, view) {
+ return cachedTextEncoder.encodeInto(arg, view);
+}
+ : function (arg, view) {
+ const buf = cachedTextEncoder.encode(arg);
+ view.set(buf);
+ return {
+ read: arg.length,
+ written: buf.length
+ };
+});
+
+function passStringToWasm0(arg, malloc, realloc) {
+
+ if (realloc === undefined) {
+ const buf = cachedTextEncoder.encode(arg);
+ const ptr = malloc(buf.length, 1) >>> 0;
+ getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);
+ WASM_VECTOR_LEN = buf.length;
+ return ptr;
+ }
+
+ let len = arg.length;
+ let ptr = malloc(len, 1) >>> 0;
+
+ const mem = getUint8ArrayMemory0();
+
+ let offset = 0;
+
+ for (; offset < len; offset++) {
+ const code = arg.charCodeAt(offset);
+ if (code > 0x7F) break;
+ mem[ptr + offset] = code;
+ }
+
+ if (offset !== len) {
+ if (offset !== 0) {
+ arg = arg.slice(offset);
+ }
+ ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
+ const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
+ const ret = encodeString(arg, view);
+
+ offset += ret.written;
+ ptr = realloc(ptr, len, offset, 1) >>> 0;
+ }
+
+ WASM_VECTOR_LEN = offset;
+ return ptr;
+}
+/**
+ * @param {bigint} given_time
+ * @param {string} user_agent
+ * @param {string} url
+ * @returns {string}
+ */
+module.exports.get_secret_value = function(given_time, user_agent, url) {
+ let deferred3_0;
+ let deferred3_1;
+ try {
+ const ptr0 = passStringToWasm0(user_agent, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ const ptr1 = passStringToWasm0(url, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len1 = WASM_VECTOR_LEN;
+ const ret = wasm.get_secret_value(given_time, ptr0, len0, ptr1, len1);
+ deferred3_0 = ret[0];
+ deferred3_1 = ret[1];
+ return getStringFromWasm0(ret[0], ret[1]);
+ } finally {
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
+ }
+};
+
+module.exports.__wbg_getTime_46267b1c24877e30 = function(arg0) {
+ const ret = arg0.getTime();
+ return ret;
+};
+
+module.exports.__wbg_new0_f788a2397c7ca929 = function() {
+ const ret = new Date();
+ return ret;
+};
+
+module.exports.__wbindgen_init_externref_table = function() {
+ const table = wasm.__wbindgen_export_0;
+ const offset = table.grow(4);
+ table.set(0, undefined);
+ table.set(offset + 0, undefined);
+ table.set(offset + 1, null);
+ table.set(offset + 2, true);
+ table.set(offset + 3, false);
+ ;
+};
+
+module.exports.__wbindgen_throw = function(arg0, arg1) {
+ throw new Error(getStringFromWasm0(arg0, arg1));
+};
+
+const path = require('path').join(__dirname, 'hublib_bg.wasm');
+const bytes = require('fs').readFileSync(path);
+
+const wasmModule = new WebAssembly.Module(bytes);
+const wasmInstance = new WebAssembly.Instance(wasmModule, imports);
+wasm = wasmInstance.exports;
+module.exports.__wasm = wasm;
+
+wasm.__wbindgen_start();
+
diff --git a/nodejs/hublib_bg.wasm b/nodejs/hublib_bg.wasm
new file mode 100644
index 0000000..516deb9
Binary files /dev/null and b/nodejs/hublib_bg.wasm differ
diff --git a/hublib_bg.wasm.d.ts b/nodejs/hublib_bg.wasm.d.ts
similarity index 100%
rename from hublib_bg.wasm.d.ts
rename to nodejs/hublib_bg.wasm.d.ts
diff --git a/nodejs/package.json b/nodejs/package.json
new file mode 100644
index 0000000..1af2b37
--- /dev/null
+++ b/nodejs/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "hublib",
+ "version": "0.1.0",
+ "files": [
+ "hublib_bg.wasm",
+ "hublib.js",
+ "hublib.d.ts"
+ ],
+ "main": "hublib.js",
+ "types": "hublib.d.ts"
+}
\ No newline at end of file
diff --git a/web/example.html b/web/example.html
new file mode 100644
index 0000000..bc84bdf
--- /dev/null
+++ b/web/example.html
@@ -0,0 +1,70 @@
+
+
+
+
+
+ WASM Example
+
+
+ WASM Example
+
+ User Agent:
+
+
+
+ URL:
+
+
+ Получить секретное значение
+
+
+
+
+
\ No newline at end of file
diff --git a/hublib.d.ts b/web/hublib.d.ts
similarity index 100%
rename from hublib.d.ts
rename to web/hublib.d.ts
diff --git a/hublib.js b/web/hublib.js
similarity index 100%
rename from hublib.js
rename to web/hublib.js
diff --git a/hublib_bg.wasm b/web/hublib_bg.wasm
similarity index 100%
rename from hublib_bg.wasm
rename to web/hublib_bg.wasm
diff --git a/web/hublib_bg.wasm.d.ts b/web/hublib_bg.wasm.d.ts
new file mode 100644
index 0000000..c8b7836
--- /dev/null
+++ b/web/hublib_bg.wasm.d.ts
@@ -0,0 +1,70 @@
+/* tslint:disable */
+/* eslint-disable */
+export const memory: WebAssembly.Memory;
+export const ffi_hublib_uniffi_contract_version: () => number;
+export const ffi_hublib_rustbuffer_alloc: (a: number, b: bigint, c: number) => void;
+export const ffi_hublib_rustbuffer_from_bytes: (a: number, b: number, c: number, d: number) => void;
+export const ffi_hublib_rustbuffer_free: (a: bigint, b: bigint, c: number, d: number, e: number) => void;
+export const ffi_hublib_rustbuffer_reserve: (a: number, b: bigint, c: bigint, d: number, e: number, f: bigint, g: number) => void;
+export const ffi_hublib_rust_future_poll_u8: (a: bigint, b: number, c: bigint) => void;
+export const ffi_hublib_rust_future_cancel_u8: (a: bigint) => void;
+export const ffi_hublib_rust_future_complete_u8: (a: bigint, b: number) => number;
+export const ffi_hublib_rust_future_free_u8: (a: bigint) => void;
+export const ffi_hublib_rust_future_poll_i8: (a: bigint, b: number, c: bigint) => void;
+export const ffi_hublib_rust_future_cancel_i8: (a: bigint) => void;
+export const ffi_hublib_rust_future_complete_i8: (a: bigint, b: number) => number;
+export const ffi_hublib_rust_future_free_i8: (a: bigint) => void;
+export const ffi_hublib_rust_future_poll_u16: (a: bigint, b: number, c: bigint) => void;
+export const ffi_hublib_rust_future_cancel_u16: (a: bigint) => void;
+export const ffi_hublib_rust_future_complete_u16: (a: bigint, b: number) => number;
+export const ffi_hublib_rust_future_free_u16: (a: bigint) => void;
+export const ffi_hublib_rust_future_poll_i16: (a: bigint, b: number, c: bigint) => void;
+export const ffi_hublib_rust_future_cancel_i16: (a: bigint) => void;
+export const ffi_hublib_rust_future_complete_i16: (a: bigint, b: number) => number;
+export const ffi_hublib_rust_future_free_i16: (a: bigint) => void;
+export const ffi_hublib_rust_future_poll_u32: (a: bigint, b: number, c: bigint) => void;
+export const ffi_hublib_rust_future_cancel_u32: (a: bigint) => void;
+export const ffi_hublib_rust_future_complete_u32: (a: bigint, b: number) => number;
+export const ffi_hublib_rust_future_free_u32: (a: bigint) => void;
+export const ffi_hublib_rust_future_poll_i32: (a: bigint, b: number, c: bigint) => void;
+export const ffi_hublib_rust_future_cancel_i32: (a: bigint) => void;
+export const ffi_hublib_rust_future_complete_i32: (a: bigint, b: number) => number;
+export const ffi_hublib_rust_future_free_i32: (a: bigint) => void;
+export const ffi_hublib_rust_future_poll_u64: (a: bigint, b: number, c: bigint) => void;
+export const ffi_hublib_rust_future_cancel_u64: (a: bigint) => void;
+export const ffi_hublib_rust_future_complete_u64: (a: bigint, b: number) => bigint;
+export const ffi_hublib_rust_future_free_u64: (a: bigint) => void;
+export const ffi_hublib_rust_future_poll_i64: (a: bigint, b: number, c: bigint) => void;
+export const ffi_hublib_rust_future_cancel_i64: (a: bigint) => void;
+export const ffi_hublib_rust_future_complete_i64: (a: bigint, b: number) => bigint;
+export const ffi_hublib_rust_future_free_i64: (a: bigint) => void;
+export const ffi_hublib_rust_future_poll_f32: (a: bigint, b: number, c: bigint) => void;
+export const ffi_hublib_rust_future_cancel_f32: (a: bigint) => void;
+export const ffi_hublib_rust_future_complete_f32: (a: bigint, b: number) => number;
+export const ffi_hublib_rust_future_free_f32: (a: bigint) => void;
+export const ffi_hublib_rust_future_poll_f64: (a: bigint, b: number, c: bigint) => void;
+export const ffi_hublib_rust_future_cancel_f64: (a: bigint) => void;
+export const ffi_hublib_rust_future_complete_f64: (a: bigint, b: number) => number;
+export const ffi_hublib_rust_future_free_f64: (a: bigint) => void;
+export const ffi_hublib_rust_future_poll_pointer: (a: bigint, b: number, c: bigint) => void;
+export const ffi_hublib_rust_future_cancel_pointer: (a: bigint) => void;
+export const ffi_hublib_rust_future_complete_pointer: (a: bigint, b: number) => number;
+export const ffi_hublib_rust_future_free_pointer: (a: bigint) => void;
+export const ffi_hublib_rust_future_poll_rust_buffer: (a: bigint, b: number, c: bigint) => void;
+export const ffi_hublib_rust_future_cancel_rust_buffer: (a: bigint) => void;
+export const ffi_hublib_rust_future_complete_rust_buffer: (a: number, b: bigint, c: number) => void;
+export const ffi_hublib_rust_future_free_rust_buffer: (a: bigint) => void;
+export const ffi_hublib_rust_future_poll_void: (a: bigint, b: number, c: bigint) => void;
+export const ffi_hublib_rust_future_cancel_void: (a: bigint) => void;
+export const ffi_hublib_rust_future_complete_void: (a: bigint, b: number) => void;
+export const ffi_hublib_rust_future_free_void: (a: bigint) => void;
+export const uniffi_hublib_fn_func_get_secret_value: (a: number, b: bigint, c: bigint, d: bigint, e: number, f: number, g: bigint, h: bigint, i: number, j: number, k: number) => void;
+export const uniffi_hublib_checksum_func_get_secret_value: () => number;
+export const get_secret_value: (a: bigint, b: number, c: number, d: number, e: number) => [number, number];
+export const uniffi_hublib_fn_func_recreate_secret_value: (a: number, b: bigint, c: bigint, d: bigint, e: number, f: number, g: bigint, h: bigint, i: number, j: number, k: bigint, l: bigint, m: number, n: number, o: number) => void;
+export const uniffi_hublib_checksum_func_recreate_secret_value: () => number;
+export const __wbindgen_export_0: WebAssembly.Table;
+export const __wbindgen_malloc: (a: number, b: number) => number;
+export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
+export const __wbindgen_free: (a: number, b: number, c: number) => void;
+export const __wbindgen_start: () => void;
diff --git a/package.json b/web/package.json
similarity index 100%
rename from package.json
rename to web/package.json