rocketmq-client-nodejs
Version:
RocketMQ Node.js Client
107 lines • 7.74 kB
JavaScript
;
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MASTER_BROKER_ID = void 0;
exports.getTimestamp = getTimestamp;
exports.getRequestDateTime = getRequestDateTime;
exports.sign = sign;
exports.createDuration = createDuration;
exports.createResource = createResource;
exports.crc32CheckSum = crc32CheckSum;
exports.md5CheckSum = md5CheckSum;
exports.sha1CheckSum = sha1CheckSum;
exports.calculateStringSipHash24 = calculateStringSipHash24;
exports.hashCodeOfString = hashCodeOfString;
const node_perf_hooks_1 = require("node:perf_hooks");
const node_crypto_1 = require("node:crypto");
const duration_pb_1 = require("google-protobuf/google/protobuf/duration_pb");
const crc32_1 = require("@node-rs/crc32");
const siphash24_1 = __importDefault(require("siphash24"));
const definition_pb_1 = require("../../proto/apache/rocketmq/v2/definition_pb");
exports.MASTER_BROKER_ID = 0;
function getTimestamp() {
const timestamp = node_perf_hooks_1.performance.timeOrigin + node_perf_hooks_1.performance.now();
const seconds = Math.floor(timestamp / 1000);
const nanos = Math.floor((timestamp % 1000) * 1e6);
return { seconds, nanos, timestamp };
}
// DATE_TIME_FORMAT = "yyyyMMdd'T'HHmmss'Z'"
function getRequestDateTime() {
// 2023-09-13T06:30:59.399Z => 20230913T063059Z
const now = new Date().toISOString().split('.')[0].replace(/[\-\:]/g, '');
return `${now}Z`;
}
function sign(accessSecret, dateTime) {
const hmacSha1 = (0, node_crypto_1.createHmac)('sha1', accessSecret);
hmacSha1.update(dateTime);
return hmacSha1.digest('hex').toUpperCase();
}
function createDuration(ms) {
const nanos = ms % 1000 * 1000000;
return new duration_pb_1.Duration()
.setSeconds(ms / 1000)
.setNanos(nanos);
}
function createResource(name) {
return new definition_pb_1.Resource().setName(name);
}
function crc32CheckSum(bytes) {
return `${(0, crc32_1.crc32)(bytes)}`;
}
function md5CheckSum(bytes) {
return (0, node_crypto_1.createHash)('md5').update(bytes).digest('hex')
.toUpperCase();
}
function sha1CheckSum(bytes) {
return (0, node_crypto_1.createHash)('sha1').update(bytes).digest('hex')
.toUpperCase();
}
// k0: 0x0706050403020100L, k1: 0x0f0e0d0c0b0a0908L
const SIP_HASH_24_KEY = Buffer.from([
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
]);
/**
* Java: Hashing.sipHash24().hashBytes(messageGroup.getBytes(StandardCharsets.UTF_8)).asLong()
*/
function calculateStringSipHash24(value) {
const hash = (0, siphash24_1.default)(Buffer.from(value), SIP_HASH_24_KEY);
return Buffer.from(hash).readBigUInt64BE();
}
/**
* Calculate hash code for a string (Java String.hashCode() compatible).
* This is used for implementing equals/hashCode contract in TypeScript classes.
*
* @param str - The string to calculate hash code for
* @return Hash code as a 32-bit integer
*/
function hashCodeOfString(str) {
let hash = 0;
for (let i = 0; i < str.length; i++) {
const char = str.charCodeAt(i);
// eslint-disable-next-line no-bitwise
hash = ((hash << 5) - hash) + char;
// eslint-disable-next-line no-bitwise
hash = hash & hash; // Convert to 32bit integer
}
return hash;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHOzs7Ozs7QUFXSCxvQ0FLQztBQUdELGdEQUlDO0FBRUQsb0JBSUM7QUFFRCx3Q0FLQztBQUVELHdDQUVDO0FBRUQsc0NBRUM7QUFFRCxrQ0FHQztBQUVELG9DQUdDO0FBVUQsNERBR0M7QUFTRCw0Q0FVQztBQXBGRCxxREFBOEM7QUFDOUMsNkNBQXFEO0FBQ3JELDZFQUF1RTtBQUN2RSwwQ0FBdUM7QUFDdkMsMERBQWtDO0FBQ2xDLGdGQUF3RTtBQUUzRCxRQUFBLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQUVsQyxTQUFnQixZQUFZO0lBQzFCLE1BQU0sU0FBUyxHQUFHLDZCQUFXLENBQUMsVUFBVSxHQUFHLDZCQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDN0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUN2QyxDQUFDO0FBRUQsNENBQTRDO0FBQzVDLFNBQWdCLGtCQUFrQjtJQUNoQywrQ0FBK0M7SUFDL0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxRSxPQUFPLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbkIsQ0FBQztBQUVELFNBQWdCLElBQUksQ0FBQyxZQUFv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