add amusement ic access code encode/decode

This commit is contained in:
ppc
2025-01-14 23:29:52 +00:00
parent 9324b30e7b
commit e83287c7b7
12 changed files with 387 additions and 158 deletions
+9 -1
View File
@@ -50,6 +50,7 @@ declare function performCardIn(server: AMServerConnectionInfo, request: AMCardIn
declare function fetchServerInfo(serverAddress: string, abort: AbortSignal): Promise<AMServerInfo | null>;
declare const CARD_ID_REGEX: RegExp;
declare const AMNET_COMPANY_ID = 597;
declare function generateCardNumber(): string;
/**
* Validates the provided card id by known parameters
@@ -63,4 +64,11 @@ declare function validateCardId(id: string): boolean;
*/
declare function getGameName(id: string): string | null;
export { type AMCardInRequest, AMNET_API_VERSION, type AMServerConnectionInfo, type AMServerInfo, type AMServerInstanceMetrics, type AMServerMetadata, CARD_ID_REGEX, MIN_AMNET_API_VERSION, fetchServerInfo, generateCardNumber, getGameName, performCardIn, validateCardId };
type DecodedAccessCode = {
revision: number;
serial: number;
};
declare function decodeAccessCode(code: string): DecodedAccessCode | null;
declare function encodeAccessCode(company: number, serial: number, rev?: number): string;
export { type AMCardInRequest, AMNET_API_VERSION, AMNET_COMPANY_ID, type AMServerConnectionInfo, type AMServerInfo, type AMServerInstanceMetrics, type AMServerMetadata, CARD_ID_REGEX, decodeAccessCode as DecodeAMAccessCode, encodeAccessCode as EncodeAMAccessCode, MIN_AMNET_API_VERSION, fetchServerInfo, generateCardNumber, getGameName, performCardIn, validateCardId };
+9 -1
View File
@@ -50,6 +50,7 @@ declare function performCardIn(server: AMServerConnectionInfo, request: AMCardIn
declare function fetchServerInfo(serverAddress: string, abort: AbortSignal): Promise<AMServerInfo | null>;
declare const CARD_ID_REGEX: RegExp;
declare const AMNET_COMPANY_ID = 597;
declare function generateCardNumber(): string;
/**
* Validates the provided card id by known parameters
@@ -63,4 +64,11 @@ declare function validateCardId(id: string): boolean;
*/
declare function getGameName(id: string): string | null;
export { type AMCardInRequest, AMNET_API_VERSION, type AMServerConnectionInfo, type AMServerInfo, type AMServerInstanceMetrics, type AMServerMetadata, CARD_ID_REGEX, MIN_AMNET_API_VERSION, fetchServerInfo, generateCardNumber, getGameName, performCardIn, validateCardId };
type DecodedAccessCode = {
revision: number;
serial: number;
};
declare function decodeAccessCode(code: string): DecodedAccessCode | null;
declare function encodeAccessCode(company: number, serial: number, rev?: number): string;
export { type AMCardInRequest, AMNET_API_VERSION, AMNET_COMPANY_ID, type AMServerConnectionInfo, type AMServerInfo, type AMServerInstanceMetrics, type AMServerMetadata, CARD_ID_REGEX, decodeAccessCode as DecodeAMAccessCode, encodeAccessCode as EncodeAMAccessCode, MIN_AMNET_API_VERSION, fetchServerInfo, generateCardNumber, getGameName, performCardIn, validateCardId };
+119 -65
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+106 -65
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+27
View File
@@ -7,7 +7,12 @@
"": {
"name": "amnet-shared",
"version": "1.0.0",
"dependencies": {
"big-integer": "^1.6.52",
"lodash": "^4.17.21"
},
"devDependencies": {
"@types/lodash": "^4.17.14",
"tsup": "^8.2.4",
"typescript": "^5.5.4"
}
@@ -771,6 +776,13 @@
"dev": true,
"license": "MIT"
},
"node_modules/@types/lodash": {
"version": "4.17.14",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.14.tgz",
"integrity": "sha512-jsxagdikDiDBeIRaPYtArcT8my4tN1og7MtMRquFT3XNA6axxyHDRUemqDz/taRDdOUn0GnGHRCuff4q48sW9A==",
"dev": true,
"license": "MIT"
},
"node_modules/ansi-regex": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
@@ -835,6 +847,15 @@
"dev": true,
"license": "MIT"
},
"node_modules/big-integer": {
"version": "1.6.52",
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
"integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
"license": "Unlicense",
"engines": {
"node": ">=0.6"
}
},
"node_modules/binary-extensions": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
@@ -1391,6 +1412,12 @@
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"license": "MIT"
},
"node_modules/lodash.sortby": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+5
View File
@@ -16,7 +16,12 @@
".": "./dist/index.mjs"
},
"devDependencies": {
"@types/lodash": "^4.17.14",
"tsup": "^8.2.4",
"typescript": "^5.5.4"
},
"dependencies": {
"big-integer": "^1.6.52",
"lodash": "^4.17.21"
}
}
File diff suppressed because one or more lines are too long
+6 -17
View File
@@ -1,23 +1,12 @@
import {encodeAccessCode} from "./card-encoding";
export const CARD_ID_REGEX = /^(?:[0-9]{4} ?){5}$/i;
export const AMNET_COMPANY_ID = 597;
export function generateCardNumber(): string {
let cardId = '';
while (true) {
// don't start with a 3
const firstDigit = Math.floor(Math.random() * 10);
if (firstDigit !== 3) {
cardId = firstDigit.toString();
break;
}
}
for (let i = 0; i < 19; i++) {
cardId += Math.floor(Math.random() * 10).toString();
}
return cardId;
// serial between 5000 and 99999999999
const serial = Math.floor(Math.random() * 99999994999) + 5000;
return encodeAccessCode(AMNET_COMPANY_ID, serial, 0);
}
/**
+3 -1
View File
@@ -1,3 +1,5 @@
export * from './api';
export * from './card';
export * from './gameIds';
export * from './gameIds';
export {decodeAccessCode as DecodeAMAccessCode, encodeAccessCode as EncodeAMAccessCode} from './card-encoding';
+7 -6
View File
@@ -1,14 +1,15 @@
{
"compilerOptions": {
"target": "ES2016",
"baseUrl": ".",
"target": "ES2017",
"module": "CommonJS",
"noEmit": true,
"strict": true,
"skipLibCheck": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"noUncheckedIndexedAccess": true,
"skipLibCheck": true,
"baseUrl": "."
},
"include": ["src/**/*.ts"]
"include": [
"src/**/*.ts"
]
}