@ianlucas/cs2-lib-inspect 5.0.0 → 5.2.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.
@@ -0,0 +1,16 @@
1
+ import { type CS2ItemTypeValues } from "@ianlucas/cs2-lib";
2
+ export declare const CS2PreviewRarity: {
3
+ "#ded6cc": number;
4
+ "#b0c3d9": number;
5
+ "#5e98d9": number;
6
+ "#4b69ff": number;
7
+ "#8847ff": number;
8
+ "#d32ce6": number;
9
+ "#eb4b4b": number;
10
+ "#e4ae39": number;
11
+ };
12
+ export declare const CS2_PREVIEW_HAS_STICKERS: CS2ItemTypeValues[];
13
+ export declare const CS2_PREVIEW_INSPECTABLE_ITEMS: CS2ItemTypeValues[];
14
+ export declare const CS2_PREVIEW_ATTRIBUTELESS_ITEMS: CS2ItemTypeValues[];
15
+ export declare const CS2_PREVIEW_URL = "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20";
16
+ export declare const CS2_PREVIEW_COMMAND = "csgo_econ_action_preview ";
@@ -0,0 +1,42 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) candyboyz, Ian Lucas. All rights reserved.
3
+ * Licensed under the MIT License. See License.txt in the project root for license information.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { CS2ItemType, CS2RarityColor } from "@ianlucas/cs2-lib";
6
+ export const CS2PreviewRarity = {
7
+ [CS2RarityColor.Default]: 0,
8
+ [CS2RarityColor.Common]: 1,
9
+ [CS2RarityColor.Uncommon]: 2,
10
+ [CS2RarityColor.Rare]: 3,
11
+ [CS2RarityColor.Mythical]: 4,
12
+ [CS2RarityColor.Legendary]: 5,
13
+ [CS2RarityColor.Ancient]: 6,
14
+ [CS2RarityColor.Immortal]: 7
15
+ };
16
+ export const CS2_PREVIEW_HAS_STICKERS = [
17
+ CS2ItemType.Graffiti,
18
+ CS2ItemType.Patch,
19
+ CS2ItemType.Sticker
20
+ ];
21
+ export const CS2_PREVIEW_INSPECTABLE_ITEMS = [
22
+ CS2ItemType.Agent,
23
+ CS2ItemType.Collectible,
24
+ CS2ItemType.Container,
25
+ CS2ItemType.Gloves,
26
+ CS2ItemType.Graffiti,
27
+ CS2ItemType.Keychain,
28
+ CS2ItemType.Melee,
29
+ CS2ItemType.MusicKit,
30
+ CS2ItemType.Patch,
31
+ CS2ItemType.Sticker,
32
+ CS2ItemType.Weapon
33
+ ];
34
+ export const CS2_PREVIEW_ATTRIBUTELESS_ITEMS = [
35
+ ...CS2_PREVIEW_HAS_STICKERS,
36
+ CS2ItemType.Collectible,
37
+ CS2ItemType.Keychain,
38
+ CS2ItemType.MusicKit
39
+ ];
40
+ export const CS2_PREVIEW_URL = "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20";
41
+ export const CS2_PREVIEW_COMMAND = "csgo_econ_action_preview ";
42
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,WAAW,EAA0B,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3B,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1B,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC5B,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IACxB,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC5B,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;IAC7B,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3B,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAwB;IACzD,WAAW,CAAC,QAAQ;IACpB,WAAW,CAAC,KAAK;IACjB,WAAW,CAAC,OAAO;CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAwB;IAC9D,WAAW,CAAC,KAAK;IACjB,WAAW,CAAC,WAAW;IACvB,WAAW,CAAC,SAAS;IACrB,WAAW,CAAC,MAAM;IAClB,WAAW,CAAC,QAAQ;IACpB,WAAW,CAAC,QAAQ;IACpB,WAAW,CAAC,KAAK;IACjB,WAAW,CAAC,QAAQ;IACpB,WAAW,CAAC,KAAK;IACjB,WAAW,CAAC,OAAO;IACnB,WAAW,CAAC,MAAM;CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAAwB;IAChE,GAAG,wBAAwB;IAC3B,WAAW,CAAC,WAAW;IACvB,WAAW,CAAC,QAAQ;IACpB,WAAW,CAAC,QAAQ;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,oEAAoE,CAAC;AACpG,MAAM,CAAC,MAAM,mBAAmB,GAAG,2BAA2B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { CS2EconomyItem, CS2InventoryItem } from "@ianlucas/cs2-lib";
2
+ export declare function generateInspectLink(item: CS2EconomyItem | CS2InventoryItem): string;
@@ -0,0 +1,85 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) candyboyz, Ian Lucas. All rights reserved.
3
+ * Licensed under the MIT License. See License.txt in the project root for license information.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { CS2EconomyItem, CS2InventoryItem, CS2_MIN_SEED, CS2_MIN_STICKER_WEAR } from "@ianlucas/cs2-lib";
6
+ import { Buffer } from "buffer";
7
+ import CRC32 from "crc-32";
8
+ import { CS2PreviewRarity, CS2_PREVIEW_COMMAND, CS2_PREVIEW_HAS_STICKERS, CS2_PREVIEW_URL } from "./constants.js";
9
+ import { CEconItemPreviewDataBlock } from "./Protobufs/cstrike15_gcmessages.js";
10
+ import { floatToBytes } from "./utils.js";
11
+ function getEconomyItemPreviewData(item) {
12
+ const { def, index, rarity, type, tint } = item;
13
+ const hasStickers = CS2_PREVIEW_HAS_STICKERS.includes(type);
14
+ const hasPaintIndex = !hasStickers && !item.isMusicKit();
15
+ const hasKeychains = item.isKeychain();
16
+ return {
17
+ defindex: def,
18
+ keychains: hasKeychains ? [{ stickerId: index, slot: 0 }] : [],
19
+ musicindex: item.isMusicKit() ? index : undefined,
20
+ paintindex: hasPaintIndex ? index : undefined,
21
+ paintseed: item.hasSeed() ? CS2_MIN_SEED : undefined,
22
+ paintwear: item.hasWear() ? floatToBytes(item.getMinimumWear()) : undefined,
23
+ rarity: CS2PreviewRarity[rarity] ?? 0,
24
+ stickers: hasStickers ? [{ tintId: tint, stickerId: index, slot: 0 }] : []
25
+ };
26
+ }
27
+ function getInventoryItemPreviewData(item) {
28
+ const { nameTag, seed, statTrak, stickers, patches, keychains } = item;
29
+ const baseAttributes = getEconomyItemPreviewData(item);
30
+ return {
31
+ ...baseAttributes,
32
+ customname: nameTag,
33
+ killeaterscoretype: statTrak !== undefined ? 0 : undefined,
34
+ killeatervalue: statTrak,
35
+ paintseed: item.hasSeed() ? (seed ?? CS2_MIN_SEED) : undefined,
36
+ paintwear: item.hasWear() ? floatToBytes(item.getWear()) : undefined,
37
+ stickers: stickers !== undefined
38
+ ? item.someStickers().map(([slot, { id, wear, rotation, x, y, schema }]) => ({
39
+ offsetX: x,
40
+ offsetY: y,
41
+ rotation,
42
+ slot: schema ?? slot,
43
+ stickerId: item.economy.getById(id).index,
44
+ wear: wear ?? CS2_MIN_STICKER_WEAR
45
+ }))
46
+ : patches !== undefined
47
+ ? item
48
+ .somePatches()
49
+ .map(([slot, patchId]) => ({ slot, stickerId: item.economy.getById(patchId).index }))
50
+ : baseAttributes.stickers,
51
+ keychains: keychains !== undefined
52
+ ? item.someKeychains().map(([slot, { id, x, y, seed }]) => ({
53
+ offsetX: x,
54
+ offsetY: y,
55
+ pattern: seed,
56
+ slot,
57
+ stickerId: item.economy.getById(id).index
58
+ }))
59
+ : item.isKeychain()
60
+ ? baseAttributes.keychains.map((keychain) => {
61
+ keychain.pattern = seed;
62
+ return keychain;
63
+ })
64
+ : baseAttributes.keychains
65
+ };
66
+ }
67
+ function generateHex(attributes) {
68
+ const payload = Buffer.concat([Uint8Array.from([0]), CEconItemPreviewDataBlock.toBinary(attributes)]);
69
+ const crc = CRC32.buf(payload);
70
+ const xCrc = (crc & 0xffff) ^ (CEconItemPreviewDataBlock.toBinary(attributes).byteLength * crc);
71
+ const crcBuffer = Buffer.alloc(4);
72
+ crcBuffer.writeUInt32BE((xCrc & 0xffffffff) >>> 0, 0);
73
+ const buffer = Buffer.concat([payload, crcBuffer]);
74
+ return buffer.toString("hex").toUpperCase();
75
+ }
76
+ export function generateInspectLink(item) {
77
+ const attributes = item instanceof CS2InventoryItem ? getInventoryItemPreviewData(item) : getEconomyItemPreviewData(item);
78
+ const hex = generateHex(attributes);
79
+ // There's a char limit for launching the game using the steam:// protocol.
80
+ if (CS2_PREVIEW_URL.length + hex.length > 300) {
81
+ return `${CS2_PREVIEW_COMMAND}${hex}`;
82
+ }
83
+ return `${CS2_PREVIEW_URL}${hex}`;
84
+ }
85
+ //# sourceMappingURL=generate-inspect-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-inspect-link.js","sourceRoot":"","sources":["../src/generate-inspect-link.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,17 +1,5 @@
1
- import { CS2EconomyItem, CS2InventoryItem, type CS2ItemTypeValues } from "@ianlucas/cs2-lib";
2
- export declare const CS2PreviewRarity: {
3
- "#ded6cc": number;
4
- "#b0c3d9": number;
5
- "#5e98d9": number;
6
- "#4b69ff": number;
7
- "#8847ff": number;
8
- "#d32ce6": number;
9
- "#eb4b4b": number;
10
- "#e4ae39": number;
11
- };
12
- export declare const CS2_PREVIEW_HAS_STICKERS: CS2ItemTypeValues[];
13
- export declare const CS2_PREVIEW_INSPECTABLE_ITEMS: CS2ItemTypeValues[];
14
- export declare const CS2_PREVIEW_URL = "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20";
15
- export declare const CS2_PREVIEW_COMMAND = "csgo_econ_action_preview";
16
- export declare function generateInspectLink(item: CS2EconomyItem | CS2InventoryItem): string;
17
- export declare function isCommandInspect(inspectLink: string): boolean;
1
+ export { CS2_PREVIEW_ATTRIBUTELESS_ITEMS, CS2_PREVIEW_COMMAND, CS2_PREVIEW_HAS_STICKERS, CS2_PREVIEW_INSPECTABLE_ITEMS, CS2_PREVIEW_URL, CS2PreviewRarity } from "./constants.js";
2
+ export { generateInspectLink } from "./generate-inspect-link.js";
3
+ export { parseCSFloatItemInfo } from "./parse-csfloat-item-info.js";
4
+ export type { CSFloatItemInfo, CSFloatStickerInfo } from "./parse-csfloat-item-info.js";
5
+ export { isCommandInspect, isSteamInspectLink, parseInspectLink } from "./parse-inspect-link.js";
package/dist/index.js CHANGED
@@ -2,122 +2,8 @@
2
2
  * Copyright (c) candyboyz, Ian Lucas. All rights reserved.
3
3
  * Licensed under the MIT License. See License.txt in the project root for license information.
4
4
  *--------------------------------------------------------------------------------------------*/
5
- import { CS2EconomyItem, CS2InventoryItem, CS2ItemType, CS2RarityColor, CS2_MIN_SEED, CS2_MIN_STICKER_WEAR } from "@ianlucas/cs2-lib";
6
- import { Buffer } from "buffer";
7
- import CRC32 from "crc-32";
8
- import { CEconItemPreviewDataBlock } from "./Protobufs/cstrike15_gcmessages.js";
9
- export const CS2PreviewRarity = {
10
- [CS2RarityColor.Default]: 0,
11
- [CS2RarityColor.Common]: 1,
12
- [CS2RarityColor.Uncommon]: 2,
13
- [CS2RarityColor.Rare]: 3,
14
- [CS2RarityColor.Mythical]: 4,
15
- [CS2RarityColor.Legendary]: 5,
16
- [CS2RarityColor.Ancient]: 6,
17
- [CS2RarityColor.Immortal]: 7
18
- };
19
- export const CS2_PREVIEW_HAS_STICKERS = [
20
- CS2ItemType.Graffiti,
21
- CS2ItemType.MusicKit,
22
- CS2ItemType.Patch,
23
- CS2ItemType.Sticker
24
- ];
25
- export const CS2_PREVIEW_INSPECTABLE_ITEMS = [
26
- CS2ItemType.Agent,
27
- CS2ItemType.Collectible,
28
- CS2ItemType.Container,
29
- CS2ItemType.Gloves,
30
- CS2ItemType.Graffiti,
31
- CS2ItemType.Keychain,
32
- CS2ItemType.Melee,
33
- CS2ItemType.MusicKit,
34
- CS2ItemType.Patch,
35
- CS2ItemType.Sticker,
36
- CS2ItemType.Weapon
37
- ];
38
- export const CS2_PREVIEW_URL = "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20";
39
- export const CS2_PREVIEW_COMMAND = "csgo_econ_action_preview";
40
- function floatToBytes(floatValue) {
41
- const floatArray = new Float32Array(1);
42
- floatArray[0] = floatValue;
43
- const byteArray = new Uint32Array(floatArray.buffer);
44
- return byteArray[0];
45
- }
46
- function getEconomyItemPreviewData(item) {
47
- const { def, index, rarity, type, tint } = item;
48
- const hasStickers = CS2_PREVIEW_HAS_STICKERS.includes(type);
49
- const hasPaintIndex = !hasStickers && !item.isMusicKit();
50
- const hasKeychains = item.isKeychain();
51
- return {
52
- defindex: def,
53
- keychains: hasKeychains ? [{ stickerId: index, slot: 0 }] : [],
54
- musicindex: item.isMusicKit() ? index : undefined,
55
- paintindex: hasPaintIndex ? index : undefined,
56
- paintseed: item.hasSeed() ? CS2_MIN_SEED : undefined,
57
- paintwear: item.hasWear() ? floatToBytes(item.getMinimumWear()) : undefined,
58
- rarity: CS2PreviewRarity[rarity] ?? 0,
59
- stickers: hasStickers ? [{ tintId: tint, stickerId: index, slot: 0 }] : []
60
- };
61
- }
62
- function getInventoryItemPreviewData(item) {
63
- const { nameTag, seed, statTrak, stickers, patches, keychains } = item;
64
- const baseAttributes = getEconomyItemPreviewData(item);
65
- return {
66
- ...baseAttributes,
67
- customname: nameTag,
68
- killeaterscoretype: statTrak !== undefined ? 0 : undefined,
69
- killeatervalue: statTrak,
70
- paintseed: item.hasSeed() ? (seed ?? CS2_MIN_SEED) : undefined,
71
- paintwear: item.hasWear() ? floatToBytes(item.getWear()) : undefined,
72
- stickers: stickers !== undefined
73
- ? item.someStickers().map(([slot, { id, wear, rotation, x, y }]) => ({
74
- offsetX: x,
75
- offsetY: y,
76
- rotation,
77
- slot,
78
- stickerId: item.economy.getById(id).index,
79
- wear: wear ?? CS2_MIN_STICKER_WEAR
80
- }))
81
- : patches !== undefined
82
- ? item
83
- .somePatches()
84
- .map(([slot, patchId]) => ({ slot, stickerId: item.economy.getById(patchId).index }))
85
- : baseAttributes.stickers,
86
- keychains: keychains !== undefined
87
- ? item.someKeychains().map(([slot, { id, x, y, seed }]) => ({
88
- offsetX: x,
89
- offsetY: y,
90
- pattern: seed,
91
- slot,
92
- stickerId: item.economy.getById(id).index
93
- }))
94
- : item.isKeychain()
95
- ? baseAttributes.keychains.map((keychain) => {
96
- keychain.pattern = seed;
97
- return keychain;
98
- })
99
- : baseAttributes.keychains
100
- };
101
- }
102
- function generateHex(attributes) {
103
- const payload = Buffer.concat([Uint8Array.from([0]), CEconItemPreviewDataBlock.toBinary(attributes)]);
104
- const crc = CRC32.buf(payload);
105
- const xCrc = (crc & 0xffff) ^ (CEconItemPreviewDataBlock.toBinary(attributes).byteLength * crc);
106
- const crcBuffer = Buffer.alloc(4);
107
- crcBuffer.writeUInt32BE((xCrc & 0xffffffff) >>> 0, 0);
108
- const buffer = Buffer.concat([payload, crcBuffer]);
109
- return buffer.toString("hex").toUpperCase();
110
- }
111
- export function generateInspectLink(item) {
112
- const attributes = item instanceof CS2InventoryItem ? getInventoryItemPreviewData(item) : getEconomyItemPreviewData(item);
113
- const hex = generateHex(attributes);
114
- // There's a char limit for launching the game using the steam:// protocol.
115
- if (CS2_PREVIEW_URL.length + hex.length > 300) {
116
- return `${CS2_PREVIEW_COMMAND} ${hex}`;
117
- }
118
- return `${CS2_PREVIEW_URL}${hex}`;
119
- }
120
- export function isCommandInspect(inspectLink) {
121
- return inspectLink.startsWith(CS2_PREVIEW_COMMAND);
122
- }
5
+ export { CS2_PREVIEW_ATTRIBUTELESS_ITEMS, CS2_PREVIEW_COMMAND, CS2_PREVIEW_HAS_STICKERS, CS2_PREVIEW_INSPECTABLE_ITEMS, CS2_PREVIEW_URL, CS2PreviewRarity } from "./constants.js";
6
+ export { generateInspectLink } from "./generate-inspect-link.js";
7
+ export { parseCSFloatItemInfo } from "./parse-csfloat-item-info.js";
8
+ export { isCommandInspect, isSteamInspectLink, parseInspectLink } from "./parse-inspect-link.js";
123
9
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EACH,+BAA+B,EAC/B,mBAAmB,EACnB,wBAAwB,EACxB,6BAA6B,EAC7B,eAAe,EACf,gBAAgB,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { type CS2BaseInventoryItem, CS2EconomyInstance } from "@ianlucas/cs2-lib";
2
+ export interface CSFloatStickerInfo {
3
+ slot: number;
4
+ stickerId: number;
5
+ wear?: number;
6
+ rotation?: number;
7
+ offsetX?: number;
8
+ offsetY?: number;
9
+ tintId?: number;
10
+ pattern?: number;
11
+ }
12
+ export interface CSFloatItemInfo {
13
+ defindex: number;
14
+ paintindex?: number;
15
+ paintseed?: number;
16
+ floatvalue?: number;
17
+ killeatervalue?: number;
18
+ customname?: string;
19
+ musicindex?: number;
20
+ stickers?: CSFloatStickerInfo[];
21
+ keychains?: CSFloatStickerInfo[];
22
+ origin?: number;
23
+ quality?: number;
24
+ rarity?: number;
25
+ floatid?: number;
26
+ imageurl?: string;
27
+ min?: number;
28
+ max?: number;
29
+ weapon_type?: string;
30
+ item_name?: string;
31
+ rarity_name?: string;
32
+ quality_name?: string;
33
+ wear_name?: string;
34
+ full_item_name?: string;
35
+ s?: string;
36
+ a?: string;
37
+ d?: string;
38
+ m?: string;
39
+ }
40
+ export declare function parseCSFloatItemInfo(economy: CS2EconomyInstance, itemInfo: CSFloatItemInfo): CS2BaseInventoryItem;
@@ -0,0 +1,20 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) candyboyz, Ian Lucas. All rights reserved.
3
+ * Licensed under the MIT License. See License.txt in the project root for license information.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { CS2EconomyInstance } from "@ianlucas/cs2-lib";
6
+ import { parseGCInventoryItem } from "./parse-gc-inventory-item.js";
7
+ export function parseCSFloatItemInfo(economy, itemInfo) {
8
+ return parseGCInventoryItem(economy, {
9
+ defindex: itemInfo.defindex,
10
+ paintindex: itemInfo.paintindex,
11
+ paintseed: itemInfo.paintseed,
12
+ floatvalue: itemInfo.floatvalue,
13
+ killeatervalue: itemInfo.killeatervalue,
14
+ customname: itemInfo.customname,
15
+ musicindex: itemInfo.musicindex,
16
+ stickers: itemInfo.stickers ?? [],
17
+ keychains: itemInfo.keychains ?? []
18
+ });
19
+ }
20
+ //# sourceMappingURL=parse-csfloat-item-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-csfloat-item-info.js","sourceRoot":"","sources":["../src/parse-csfloat-item-info.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAA6B,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AA0CpE,MAAM,UAAU,oBAAoB,CAAC,OAA2B,EAAE,QAAyB;IACvF,OAAO,oBAAoB,CAAC,OAAO,EAAE;QACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE;QACjC,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,EAAE;KACtC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type CS2BaseInventoryItem, CS2EconomyInstance } from "@ianlucas/cs2-lib";
2
+ export interface CS2GCInventoryItemSticker {
3
+ slot?: number;
4
+ stickerId?: number;
5
+ wear?: number;
6
+ rotation?: number;
7
+ offsetX?: number;
8
+ offsetY?: number;
9
+ tintId?: number;
10
+ pattern?: number;
11
+ }
12
+ export interface CS2GCInventoryItem {
13
+ defindex: number;
14
+ paintindex?: number;
15
+ paintseed?: number;
16
+ floatvalue?: number;
17
+ killeatervalue?: number;
18
+ customname?: string;
19
+ musicindex?: number;
20
+ stickers: CS2GCInventoryItemSticker[];
21
+ keychains: CS2GCInventoryItemSticker[];
22
+ }
23
+ export declare function parseGCInventoryItem(economy: CS2EconomyInstance, data: CS2GCInventoryItem): CS2BaseInventoryItem;
@@ -0,0 +1,91 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) candyboyz, Ian Lucas. All rights reserved.
3
+ * Licensed under the MIT License. See License.txt in the project root for license information.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { CS2EconomyInstance, CS2_MIN_SEED, CS2_MIN_STICKER_WEAR, CS2_MIN_WEAR, CS2_STICKER_WEAR_FACTOR, CS2_WEAR_FACTOR, assert, ensure } from "@ianlucas/cs2-lib";
6
+ import { CS2_PREVIEW_HAS_STICKERS } from "./constants.js";
7
+ import { truncate } from "./utils.js";
8
+ export function parseGCInventoryItem(economy, data) {
9
+ const { defindex, paintindex, paintseed, floatvalue, killeatervalue, customname, musicindex, stickers, keychains } = data;
10
+ let economyItem = economy.itemsAsArray.find((item) => item.def === defindex);
11
+ if (economyItem !== undefined && CS2_PREVIEW_HAS_STICKERS.includes(economyItem.type)) {
12
+ if (stickers.length === 1) {
13
+ // Patch, Sticker, and Graffiti
14
+ economyItem = economy.itemsAsArray.find((item) => item.def === defindex && item.index === stickers[0].stickerId && item.tint === stickers[0].tintId);
15
+ }
16
+ return ensure(economyItem !== undefined ? { id: economyItem.id } : undefined);
17
+ }
18
+ else if (musicindex !== undefined) {
19
+ // Music Kit
20
+ economyItem = economy.itemsAsArray.find((item) => item.isMusicKit() && item.index === musicindex);
21
+ return ensure(economyItem !== undefined ? stripMinValues({ id: economyItem.id, statTrak: killeatervalue }) : undefined);
22
+ }
23
+ else {
24
+ if (paintindex !== undefined) {
25
+ economyItem = economy.itemsAsArray.find((item) => item.def === defindex && item.index === paintindex);
26
+ }
27
+ assert(economyItem !== undefined);
28
+ if (economyItem.isKeychain()) {
29
+ return stripMinValues({
30
+ id: economyItem.id,
31
+ seed: keychains[0]?.pattern ?? paintseed
32
+ });
33
+ }
34
+ return stripMinValues({
35
+ id: economyItem.id,
36
+ seed: paintseed,
37
+ wear: floatvalue !== undefined ? truncate(floatvalue, CS2_WEAR_FACTOR) : undefined,
38
+ statTrak: killeatervalue,
39
+ nameTag: customname,
40
+ keychains: keychains.length > 0
41
+ ? Object.fromEntries(keychains.map(({ offsetX, offsetY, pattern, slot, stickerId }) => [
42
+ slot,
43
+ {
44
+ id: ensure(economy.itemsAsArray.find((item) => item.isKeychain() && item.index === stickerId)
45
+ ?.id),
46
+ seed: pattern,
47
+ x: offsetX,
48
+ y: offsetY
49
+ }
50
+ ]))
51
+ : undefined,
52
+ stickers: !economyItem.isAgent() && stickers.length > 0
53
+ ? Object.fromEntries(stickers.map(({ slot, stickerId, offsetX, offsetY, wear, rotation }, index) => [
54
+ index,
55
+ {
56
+ id: ensure(economy.itemsAsArray.find((item) => item.isSticker() && item.index === stickerId)
57
+ ?.id),
58
+ rotation: rotation !== undefined ? Math.trunc(rotation) : undefined,
59
+ schema: slot,
60
+ wear: wear !== undefined ? truncate(wear, CS2_STICKER_WEAR_FACTOR) : undefined,
61
+ x: offsetX,
62
+ y: offsetY
63
+ }
64
+ ]))
65
+ : undefined,
66
+ patches: economyItem.isAgent() && stickers.length > 0
67
+ ? Object.fromEntries(stickers.map(({ slot, stickerId }) => [
68
+ slot,
69
+ ensure(economy.itemsAsArray.find((item) => item.isPatch() && item.index === stickerId)?.id)
70
+ ]))
71
+ : undefined
72
+ });
73
+ }
74
+ }
75
+ function stripMinValues(item) {
76
+ if (item.seed === CS2_MIN_SEED) {
77
+ item.seed = undefined;
78
+ }
79
+ if (item.wear === CS2_MIN_WEAR) {
80
+ item.wear = undefined;
81
+ }
82
+ if (item.stickers !== undefined) {
83
+ for (const sticker of Object.values(item.stickers)) {
84
+ if (sticker.wear === CS2_MIN_STICKER_WEAR) {
85
+ sticker.wear = undefined;
86
+ }
87
+ }
88
+ }
89
+ return item;
90
+ }
91
+ //# sourceMappingURL=parse-gc-inventory-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-gc-inventory-item.js","sourceRoot":"","sources":["../src/parse-gc-inventory-item.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type CS2BaseInventoryItem, CS2EconomyInstance } from "@ianlucas/cs2-lib";
2
+ export declare function isCommandInspect(inspectLink: string): boolean;
3
+ export declare function isSteamInspectLink(inspectLink: string): boolean;
4
+ export declare function parseInspectLink(economy: CS2EconomyInstance, inspectLink: string): CS2BaseInventoryItem;
@@ -0,0 +1,64 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) candyboyz, Ian Lucas. All rights reserved.
3
+ * Licensed under the MIT License. See License.txt in the project root for license information.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { CS2EconomyInstance } from "@ianlucas/cs2-lib";
6
+ import { Buffer } from "buffer";
7
+ import CRC32 from "crc-32";
8
+ import { CS2_PREVIEW_COMMAND, CS2_PREVIEW_URL } from "./constants.js";
9
+ import { parseGCInventoryItem } from "./parse-gc-inventory-item.js";
10
+ import { CEconItemPreviewDataBlock } from "./Protobufs/cstrike15_gcmessages.js";
11
+ import { bytesToFloat } from "./utils.js";
12
+ export function isCommandInspect(inspectLink) {
13
+ return inspectLink.startsWith(CS2_PREVIEW_COMMAND);
14
+ }
15
+ export function isSteamInspectLink(inspectLink) {
16
+ try {
17
+ const decoded = decodeURI(inspectLink);
18
+ return /^steam:\/\/rungame\/730\/\d+\/[+ ]csgo_econ_action_preview [SM]\d+A\d+D\d+$/.test(decoded);
19
+ }
20
+ catch {
21
+ return false;
22
+ }
23
+ }
24
+ function parseHex(hexString) {
25
+ // Convert hex string to buffer
26
+ const buffer = Buffer.from(hexString.toLowerCase(), "hex");
27
+ // First byte should be 0
28
+ if (buffer[0] !== 0) {
29
+ throw new Error("Invalid format: First byte should be 0");
30
+ }
31
+ // Extract the data and CRC portions
32
+ const payload = buffer.slice(0, -4); // Everything except last 4 bytes
33
+ const providedCrcBuffer = buffer.slice(-4); // Last 4 bytes
34
+ const providedCrc = providedCrcBuffer.readUInt32BE(0);
35
+ // Extract just the attributes data (removing the first byte)
36
+ const attributesData = payload.slice(1);
37
+ // Verify CRC
38
+ const calculatedCrc = CRC32.buf(payload);
39
+ const calculatedXCrc = (calculatedCrc & 0xffff) ^ (attributesData.byteLength * calculatedCrc);
40
+ const finalCalculatedCrc = (calculatedXCrc & 0xffffffff) >>> 0;
41
+ if (finalCalculatedCrc !== providedCrc) {
42
+ throw new Error("CRC verification failed");
43
+ }
44
+ // Convert the binary data back to CEconItemPreviewDataBlock
45
+ return CEconItemPreviewDataBlock.fromBinary(attributesData);
46
+ }
47
+ export function parseInspectLink(economy, inspectLink) {
48
+ const hex = isCommandInspect(inspectLink)
49
+ ? inspectLink.replace(CS2_PREVIEW_COMMAND, "")
50
+ : inspectLink.replace(CS2_PREVIEW_URL, "");
51
+ const attributes = parseHex(hex);
52
+ return parseGCInventoryItem(economy, {
53
+ defindex: attributes.defindex ?? 0,
54
+ paintindex: attributes.paintindex,
55
+ paintseed: attributes.paintseed,
56
+ floatvalue: attributes.paintwear !== undefined ? bytesToFloat(attributes.paintwear) : undefined,
57
+ killeatervalue: attributes.killeatervalue,
58
+ customname: attributes.customname,
59
+ musicindex: attributes.musicindex,
60
+ stickers: attributes.stickers,
61
+ keychains: attributes.keychains
62
+ });
63
+ }
64
+ //# sourceMappingURL=parse-inspect-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-inspect-link.js","sourceRoot":"","sources":["../src/parse-inspect-link.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function floatToBytes(floatValue: number): number;
2
+ export declare function bytesToFloat(byteValue: number): number;
3
+ export declare function truncate(value: number, factor: number): number;
package/dist/utils.js ADDED
@@ -0,0 +1,20 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) candyboyz, Ian Lucas. All rights reserved.
3
+ * Licensed under the MIT License. See License.txt in the project root for license information.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ export function floatToBytes(floatValue) {
6
+ const floatArray = new Float32Array(1);
7
+ floatArray[0] = floatValue;
8
+ const byteArray = new Uint32Array(floatArray.buffer);
9
+ return byteArray[0];
10
+ }
11
+ export function bytesToFloat(byteValue) {
12
+ const byteArray = new Uint32Array(1);
13
+ byteArray[0] = byteValue;
14
+ const floatArray = new Float32Array(byteArray.buffer);
15
+ return floatArray[0];
16
+ }
17
+ export function truncate(value, factor) {
18
+ return parseFloat(String(value).substring(0, String(factor).length));
19
+ }
20
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC3C,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IACvC,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;IAC3B,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACrD,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC1C,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IACrC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACzB,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,MAAc;IAClD,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACzE,CAAC"}
package/package.json CHANGED
@@ -2,31 +2,46 @@
2
2
  "name": "@ianlucas/cs2-lib-inspect",
3
3
  "description": "An extension for cs2-lib to create Counter-Strike 2 inspect links",
4
4
  "license": "MIT",
5
- "repository": "ianlucas/cs2-lib-inspect",
5
+ "author": "Ian Lucas",
6
+ "homepage": "https://github.com/ianlucas/cs2-lib-inspect#readme",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/ianlucas/cs2-lib-inspect.git"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/ianlucas/cs2-lib-inspect/issues"
13
+ },
6
14
  "type": "module",
7
- "main": "dist/index.js",
15
+ "main": "./dist/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "sideEffects": false,
8
18
  "scripts": {
9
19
  "docs": "typedoc --out docs src/index.ts",
10
20
  "format": "prettier . --write",
11
21
  "generate:protobufs": "npx protoc --ts_out ./src/Protobufs --proto_path src/Protobufs src/Protobufs/cstrike15_gcmessages.proto",
12
22
  "prepack": "([ -d dist ] && rm -rf dist); tsc",
23
+ "test": "vitest --run --testTimeout 120000",
13
24
  "typecheck": "tsc --noEmit",
14
25
  "upgrade": "npx npm-check-updates@latest --target minor -u"
15
26
  },
16
27
  "dependencies": {
17
- "@protobuf-ts/runtime": "^2.9.4",
28
+ "@protobuf-ts/runtime": "^2.11.1",
18
29
  "buffer": "^6.0.3",
19
- "crc-32": "^1.2.2"
30
+ "crc-32": "^1.2.2",
31
+ "vitest": "^4.1.0"
20
32
  },
21
33
  "peerDependencies": {
22
34
  "@ianlucas/cs2-lib": "^7.0.0"
23
35
  },
24
36
  "devDependencies": {
25
- "@protobuf-ts/plugin": "^2.9.4",
37
+ "@protobuf-ts/plugin": "^2.11.1",
26
38
  "@total-typescript/tsconfig": "^1.0.4",
27
- "prettier": "^3.5.2",
28
- "typedoc": "^0.27.9",
29
- "typescript": "^5.8.2"
39
+ "prettier": "^3.8.1",
40
+ "typedoc": "^0.28.17",
41
+ "typescript": "^5.9.3"
42
+ },
43
+ "engines": {
44
+ "node": ">=20"
30
45
  },
31
- "version": "5.0.0"
46
+ "version": "5.2.0"
32
47
  }