From b7d2c524d65d26c203d2e69f3b26485e1d82b86b Mon Sep 17 00:00:00 2001 From: Alexey Kudelko Date: Tue, 27 May 2025 13:17:11 +0300 Subject: [PATCH] built new web --- README.md | 21 --- example.html | 55 ------- nodejs/hublib.d.ts | 3 + nodejs/hublib.js | 137 ++++++++++++++++++ nodejs/hublib_bg.wasm | Bin 0 -> 57526 bytes .../hublib_bg.wasm.d.ts | 0 nodejs/package.json | 11 ++ web/example.html | 70 +++++++++ hublib.d.ts => web/hublib.d.ts | 0 hublib.js => web/hublib.js | 0 hublib_bg.wasm => web/hublib_bg.wasm | Bin web/hublib_bg.wasm.d.ts | 70 +++++++++ package.json => web/package.json | 0 13 files changed, 291 insertions(+), 76 deletions(-) delete mode 100644 README.md delete mode 100644 example.html create mode 100644 nodejs/hublib.d.ts create mode 100644 nodejs/hublib.js create mode 100644 nodejs/hublib_bg.wasm rename hublib_bg.wasm.d.ts => nodejs/hublib_bg.wasm.d.ts (100%) create mode 100644 nodejs/package.json create mode 100644 web/example.html rename hublib.d.ts => web/hublib.d.ts (100%) rename hublib.js => web/hublib.js (100%) rename hublib_bg.wasm => web/hublib_bg.wasm (100%) create mode 100644 web/hublib_bg.wasm.d.ts rename package.json => web/package.json (100%) 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

-
- - -
-
- - -
- -

- - - - \ 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 0000000000000000000000000000000000000000..516deb9325fbe6521c444ff7b9925a40caf889b1 GIT binary patch literal 57526 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 rT + + + + + WASM Example + + +

WASM Example

+
+ + +
+
+ + +
+ +

+ + + + \ 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