easyoref 1.0.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.
- package/LICENSE +21 -0
- package/README.md +127 -0
- package/dist/bin.d.ts +9 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +25 -0
- package/dist/bin.js.map +1 -0
- package/dist/bot.d.ts +16 -0
- package/dist/bot.d.ts.map +1 -0
- package/dist/bot.js +481 -0
- package/dist/bot.js.map +1 -0
- package/dist/config.d.ts +72 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +120 -0
- package/dist/config.js.map +1 -0
- package/dist/gif-state.d.ts +17 -0
- package/dist/gif-state.d.ts.map +1 -0
- package/dist/gif-state.js +67 -0
- package/dist/gif-state.js.map +1 -0
- package/dist/i18n.d.ts +37 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +240 -0
- package/dist/i18n.js.map +1 -0
- package/dist/init.d.ts +7 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +163 -0
- package/dist/init.js.map +1 -0
- package/dist/logger.d.ts +14 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +45 -0
- package/dist/logger.js.map +1 -0
- package/package.json +60 -0
package/dist/init.js
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `npx easyoref init` β Interactive setup wizard.
|
|
3
|
+
*
|
|
4
|
+
* Asks 4 questions, writes ~/.easyoref/config.yaml.
|
|
5
|
+
*/
|
|
6
|
+
import { confirm, input, password, select } from "@inquirer/prompts";
|
|
7
|
+
import chalk from "chalk";
|
|
8
|
+
import { Bot } from "grammy";
|
|
9
|
+
import yaml from "js-yaml";
|
|
10
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
11
|
+
import { CONFIG_DIR, HOME_CONFIG_PATH } from "./config.js";
|
|
12
|
+
export async function init() {
|
|
13
|
+
console.log(chalk.bold("\nπ¨ EasyOref Setup\n"));
|
|
14
|
+
// ββ Guard: config already exists βββββββββββββββββββββ
|
|
15
|
+
if (existsSync(HOME_CONFIG_PATH)) {
|
|
16
|
+
const overwrite = await confirm({
|
|
17
|
+
message: `${HOME_CONFIG_PATH} already exists. Overwrite?`,
|
|
18
|
+
default: false,
|
|
19
|
+
});
|
|
20
|
+
if (!overwrite) {
|
|
21
|
+
console.log(chalk.dim("Cancelled."));
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// ββ 1. Language ββββββββββββββββββββββββββββββββββββββ
|
|
26
|
+
const language = await select({
|
|
27
|
+
message: "π Language / Π―Π·ΡΠΊ / Χ©Χ€Χ:",
|
|
28
|
+
choices: [
|
|
29
|
+
{ name: "Π ΡΡΡΠΊΠΈΠΉ", value: "ru" },
|
|
30
|
+
{ name: "English", value: "en" },
|
|
31
|
+
{ name: "Χ’ΧΧ¨ΧΧͺ", value: "he" },
|
|
32
|
+
{ name: "Ψ§ΩΨΉΨ±Ψ¨ΩΨ©", value: "ar" },
|
|
33
|
+
],
|
|
34
|
+
});
|
|
35
|
+
const t = STRINGS[language] ?? STRINGS.en;
|
|
36
|
+
// ββ 2. Bot Token βββββββββββββββββββββββββββββββββββββ
|
|
37
|
+
const botToken = await password({
|
|
38
|
+
message: t.token,
|
|
39
|
+
validate: (val) => {
|
|
40
|
+
if (!val || val.length < 10)
|
|
41
|
+
return t.tokenRequired;
|
|
42
|
+
if (!val.includes(":"))
|
|
43
|
+
return t.tokenFormat;
|
|
44
|
+
return true;
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
console.log(chalk.dim(t.validating));
|
|
48
|
+
try {
|
|
49
|
+
const bot = new Bot(botToken);
|
|
50
|
+
const me = await bot.api.getMe();
|
|
51
|
+
console.log(chalk.green(` β
${t.botOk}: @${me.username}`));
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
console.log(chalk.yellow(` β οΈ ${t.botFail}`));
|
|
55
|
+
}
|
|
56
|
+
// ββ 3. Chat ID βββββββββββββββββββββββββββββββββββββββ
|
|
57
|
+
const chatId = await input({
|
|
58
|
+
message: t.chatId,
|
|
59
|
+
validate: (val) => {
|
|
60
|
+
if (!val)
|
|
61
|
+
return t.chatIdRequired;
|
|
62
|
+
if (!/^-?\d+$/.test(val))
|
|
63
|
+
return t.chatIdFormat;
|
|
64
|
+
return true;
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
// ββ 4. City ID βββββββββββββββββββββββββββββββββββββββ
|
|
68
|
+
const cityIdRaw = await input({
|
|
69
|
+
message: t.cityId,
|
|
70
|
+
validate: (val) => {
|
|
71
|
+
if (!val)
|
|
72
|
+
return t.cityIdRequired;
|
|
73
|
+
if (!/^\d+$/.test(val))
|
|
74
|
+
return t.cityIdFormat;
|
|
75
|
+
return true;
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
// ββ Write config βββββββββββββββββββββββββββββββββββββ
|
|
79
|
+
const cfg = {
|
|
80
|
+
city_ids: [Number(cityIdRaw)],
|
|
81
|
+
language,
|
|
82
|
+
telegram: {
|
|
83
|
+
bot_token: botToken,
|
|
84
|
+
chat_id: chatId,
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
88
|
+
writeFileSync(HOME_CONFIG_PATH, yaml.dump(cfg), "utf-8");
|
|
89
|
+
console.log("");
|
|
90
|
+
console.log(chalk.green(`β
${t.saved} ${HOME_CONFIG_PATH}`));
|
|
91
|
+
console.log("");
|
|
92
|
+
console.log(t.next);
|
|
93
|
+
console.log(` ${chalk.cyan("npx easyoref")}`);
|
|
94
|
+
console.log("");
|
|
95
|
+
}
|
|
96
|
+
// ββ i18n strings for the wizard ββββββββββββββββββββββββ
|
|
97
|
+
const STRINGS = {
|
|
98
|
+
ru: {
|
|
99
|
+
token: "π€ Π’ΠΎΠΊΠ΅Π½ Π±ΠΎΡΠ° (ΠΎΡ @BotFather):",
|
|
100
|
+
tokenRequired: "Π’ΠΎΠΊΠ΅Π½ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»Π΅Π½",
|
|
101
|
+
tokenFormat: "Π€ΠΎΡΠΌΠ°Ρ: 123456:ABC-DEF...",
|
|
102
|
+
validating: " ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠΎΠΊΠ΅Π½...",
|
|
103
|
+
botOk: "ΠΠΎΡ Π½Π°ΠΉΠ΄Π΅Π½",
|
|
104
|
+
botFail: "ΠΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ (ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ)",
|
|
105
|
+
chatId: "π¬ Chat ID (ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π΄Π»Ρ Π³ΡΡΠΏΠΏ):",
|
|
106
|
+
chatIdRequired: "Chat ID ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»Π΅Π½",
|
|
107
|
+
chatIdFormat: "Π§ΠΈΡΠ»ΠΎ (ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π΄Π»Ρ Π³ΡΡΠΏΠΏ)",
|
|
108
|
+
cityId: "π ID Π³ΠΎΡΠΎΠ΄Π° (Π½Π°ΠΉΠ΄ΠΈΡΠ΅ Π½Π° https://github.com/eladnava/pikud-haoref-api/blob/master/cities.json):",
|
|
109
|
+
cityIdRequired: "ID ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»Π΅Π½",
|
|
110
|
+
cityIdFormat: "Π’ΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΡΡ",
|
|
111
|
+
saved: "ΠΠΎΠ½ΡΠΈΠ³ ΡΠΎΡ
ΡΠ°Π½ΡΠ½ β",
|
|
112
|
+
next: "ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ Π±ΠΎΡΠ°:",
|
|
113
|
+
},
|
|
114
|
+
en: {
|
|
115
|
+
token: "π€ Bot token (from @BotFather):",
|
|
116
|
+
tokenRequired: "Token is required",
|
|
117
|
+
tokenFormat: "Format: 123456:ABC-DEF...",
|
|
118
|
+
validating: " Validating token...",
|
|
119
|
+
botOk: "Bot found",
|
|
120
|
+
botFail: "Could not verify (continuing anyway)",
|
|
121
|
+
chatId: "π¬ Chat ID (negative number for groups):",
|
|
122
|
+
chatIdRequired: "Chat ID is required",
|
|
123
|
+
chatIdFormat: "Must be a number (negative for groups)",
|
|
124
|
+
cityId: "π City ID (find at https://github.com/eladnava/pikud-haoref-api/blob/master/cities.json):",
|
|
125
|
+
cityIdRequired: "City ID is required",
|
|
126
|
+
cityIdFormat: "Numbers only",
|
|
127
|
+
saved: "Config saved β",
|
|
128
|
+
next: "Start the bot:",
|
|
129
|
+
},
|
|
130
|
+
he: {
|
|
131
|
+
token: "π€ ΧΧΧ§Χ ΧΧΧ (Χ-@BotFather):",
|
|
132
|
+
tokenRequired: "ΧΧΧ§Χ Χ ΧΧ¨Χ©",
|
|
133
|
+
tokenFormat: "Χ€ΧΧ¨ΧΧ: 123456:ABC-DEF...",
|
|
134
|
+
validating: " ΧΧΧΧͺ ΧΧΧ§Χ...",
|
|
135
|
+
botOk: "ΧΧΧ Χ ΧΧ¦Χ",
|
|
136
|
+
botFail: "ΧΧ Χ ΧΧͺΧ ΧΧΧΧͺ (ΧΧΧ©ΧΧΧΧ)",
|
|
137
|
+
chatId: "π¬ Chat ID (ΧΧ‘Χ€Χ¨ Χ©ΧΧΧΧ ΧΧ§ΧΧΧ¦ΧΧͺ):",
|
|
138
|
+
chatIdRequired: "Chat ID Χ ΧΧ¨Χ©",
|
|
139
|
+
chatIdFormat: "ΧΧΧΧ ΧΧΧΧΧͺ ΧΧ‘Χ€Χ¨ (Χ©ΧΧΧΧ ΧΧ§ΧΧΧ¦ΧΧͺ)",
|
|
140
|
+
cityId: "π ID Χ’ΧΧ¨ (ΧΧ¦ΧΧ Χ-https://github.com/eladnava/pikud-haoref-api/blob/master/cities.json):",
|
|
141
|
+
cityIdRequired: "ID Χ’ΧΧ¨ Χ ΧΧ¨Χ©",
|
|
142
|
+
cityIdFormat: "ΧΧ‘Χ€Χ¨ΧΧ ΧΧΧΧ",
|
|
143
|
+
saved: "ΧΧΧΧ¨ΧΧͺ Χ Χ©ΧΧ¨Χ β",
|
|
144
|
+
next: "ΧΧ€Χ’ΧΧΧ ΧΧͺ ΧΧΧΧ:",
|
|
145
|
+
},
|
|
146
|
+
ar: {
|
|
147
|
+
token: "π€ Ψ±Ω
Ψ² Ψ§ΩΨ¨ΩΨͺ (Ω
Ω @BotFather):",
|
|
148
|
+
tokenRequired: "Ψ§ΩΨ±Ω
Ψ² Ω
Ψ·ΩΩΨ¨",
|
|
149
|
+
tokenFormat: "Ψ§ΩΨ΄ΩΩ: 123456:ABC-DEF...",
|
|
150
|
+
validating: " Ψ¬Ψ§Ψ±Ω Ψ§ΩΨͺΨΩΩ...",
|
|
151
|
+
botOk: "ΨͺΩ
Ψ§ΩΨΉΨ«ΩΨ± ΨΉΩΩ Ψ§ΩΨ¨ΩΨͺ",
|
|
152
|
+
botFail: "ΨͺΨΉΨ°Ψ± Ψ§ΩΨͺΨΩΩ (Ω
ΨͺΨ§Ψ¨ΨΉΨ©)",
|
|
153
|
+
chatId: "π¬ Chat ID (Ψ±ΩΩ
Ψ³Ψ§ΩΨ¨ ΩΩΩ
Ψ¬Ω
ΩΨΉΨ§Ψͺ):",
|
|
154
|
+
chatIdRequired: "Chat ID Ω
Ψ·ΩΩΨ¨",
|
|
155
|
+
chatIdFormat: "ΩΨ¬Ψ¨ Ψ£Ω ΩΩΩΩ Ψ±ΩΩ
ΩΨ§ (Ψ³Ψ§ΩΨ¨ ΩΩΩ
Ψ¬Ω
ΩΨΉΨ§Ψͺ)",
|
|
156
|
+
cityId: "π Ψ±ΩΩ
Ψ§ΩΩ
Ψ―ΩΩΨ© (Ψ§Ψ¨ΨΨ« ΩΩ https://github.com/eladnava/pikud-haoref-api/blob/master/cities.json):",
|
|
157
|
+
cityIdRequired: "Ψ±ΩΩ
Ψ§ΩΩ
Ψ―ΩΩΨ© Ω
Ψ·ΩΩΨ¨",
|
|
158
|
+
cityIdFormat: "Ψ£Ψ±ΩΨ§Ω
ΩΩΨ·",
|
|
159
|
+
saved: "ΨͺΩ
ΨΩΨΈ Ψ§ΩΨ₯ΨΉΨ―Ψ§Ψ―Ψ§Ψͺ β",
|
|
160
|
+
next: "Ψ΄ΨΊΩΩ Ψ§ΩΨ¨ΩΨͺ:",
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
//# sourceMappingURL=init.js.map
|
package/dist/init.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EasyOref Logger
|
|
3
|
+
*
|
|
4
|
+
* Dual-output: console (always) + Better Stack Logtail (if token set).
|
|
5
|
+
* Token source: config.yaml `observability.betterstack_token` or LOGTAIL_TOKEN env.
|
|
6
|
+
* Live Tail: https://logs.betterstack.com β your source β "Live Tail"
|
|
7
|
+
*/
|
|
8
|
+
export declare function info(message: string, ctx?: Record<string, unknown>): void;
|
|
9
|
+
export declare function warn(message: string, ctx?: Record<string, unknown>): void;
|
|
10
|
+
export declare function error(message: string, ctx?: Record<string, unknown>): void;
|
|
11
|
+
export declare function debug(message: string, ctx?: Record<string, unknown>): void;
|
|
12
|
+
/** Call before process.exit() β flushes Logtail buffer */
|
|
13
|
+
export declare function flush(): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuBH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAGzE;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAGzE;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAG1E;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAK1E;AAED,0DAA0D;AAC1D,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3C"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EasyOref Logger
|
|
3
|
+
*
|
|
4
|
+
* Dual-output: console (always) + Better Stack Logtail (if token set).
|
|
5
|
+
* Token source: config.yaml `observability.betterstack_token` or LOGTAIL_TOKEN env.
|
|
6
|
+
* Live Tail: https://logs.betterstack.com β your source β "Live Tail"
|
|
7
|
+
*/
|
|
8
|
+
import { Logtail } from "@logtail/node";
|
|
9
|
+
import { config } from "./config.js";
|
|
10
|
+
const token = config.logtailToken;
|
|
11
|
+
const logtail = token ? new Logtail(token) : null;
|
|
12
|
+
const base = {
|
|
13
|
+
service: "easyoref",
|
|
14
|
+
env: process.env.NODE_ENV ?? "production",
|
|
15
|
+
};
|
|
16
|
+
if (logtail) {
|
|
17
|
+
console.log("π‘ Better Stack Logtail enabled β live tail at logs.betterstack.com");
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
console.log("π LOGTAIL_TOKEN not set β logging to console only");
|
|
21
|
+
}
|
|
22
|
+
// ββ Public API ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
23
|
+
export function info(message, ctx) {
|
|
24
|
+
console.log(message, ctx ?? "");
|
|
25
|
+
logtail?.info(message, { ...base, ...ctx });
|
|
26
|
+
}
|
|
27
|
+
export function warn(message, ctx) {
|
|
28
|
+
console.warn(message, ctx ?? "");
|
|
29
|
+
logtail?.warn(message, { ...base, ...ctx });
|
|
30
|
+
}
|
|
31
|
+
export function error(message, ctx) {
|
|
32
|
+
console.error(message, ctx ?? "");
|
|
33
|
+
logtail?.error(message, { ...base, ...ctx });
|
|
34
|
+
}
|
|
35
|
+
export function debug(message, ctx) {
|
|
36
|
+
if (process.env.LOG_LEVEL === "debug") {
|
|
37
|
+
console.debug(message, ctx ?? "");
|
|
38
|
+
}
|
|
39
|
+
logtail?.debug(message, { ...base, ...ctx });
|
|
40
|
+
}
|
|
41
|
+
/** Call before process.exit() β flushes Logtail buffer */
|
|
42
|
+
export async function flush() {
|
|
43
|
+
await logtail?.flush();
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAClC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAElD,MAAM,IAAI,GAAG;IACX,OAAO,EAAE,UAAU;IACnB,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY;CAC1C,CAAC;AAEF,IAAI,OAAO,EAAE,CAAC;IACZ,OAAO,CAAC,GAAG,CACT,qEAAqE,CACtE,CAAC;AACJ,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;AACpE,CAAC;AAED,iFAAiF;AAEjF,MAAM,UAAU,IAAI,CAAC,OAAe,EAAE,GAA6B;IACjE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IAChC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAe,EAAE,GAA6B;IACjE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACjC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,OAAe,EAAE,GAA6B;IAClE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IAClC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,OAAe,EAAE,GAA6B;IAClE,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,KAAK;IACzB,MAAM,OAAO,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "easyoref",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Real-time Israeli civil defense alerts β Telegram, filtered by your location",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"easyoref": "dist/bin.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "dist/bot.js",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"dev": "tsx watch src/bot.ts",
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"start": "node dist/bot.js",
|
|
14
|
+
"lint": "eslint src/",
|
|
15
|
+
"typecheck": "tsc --noEmit"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"telegram",
|
|
19
|
+
"oref",
|
|
20
|
+
"red-alert",
|
|
21
|
+
"israel",
|
|
22
|
+
"pikud-haoref",
|
|
23
|
+
"civil-defense",
|
|
24
|
+
"rocket-alerts"
|
|
25
|
+
],
|
|
26
|
+
"author": "Mikhail Kogan <kogan.mikhail@gmail.com>",
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "https://github.com/mikhailkogan17/easyoref.git",
|
|
31
|
+
"directory": "packages/bot"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@inquirer/prompts": "^7.0.0",
|
|
35
|
+
"@logtail/node": "^0.5.6",
|
|
36
|
+
"chalk": "^5.3.0",
|
|
37
|
+
"grammy": "^1.35.0",
|
|
38
|
+
"js-yaml": "^4.1.1"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/js-yaml": "^4.0.9",
|
|
42
|
+
"@types/node": "^22.0.0",
|
|
43
|
+
"eslint": "^9.0.0",
|
|
44
|
+
"tsx": "^4.19.0",
|
|
45
|
+
"typescript": "^5.7.0"
|
|
46
|
+
},
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=22"
|
|
49
|
+
},
|
|
50
|
+
"publishConfig": {
|
|
51
|
+
"access": "public",
|
|
52
|
+
"provenance": true
|
|
53
|
+
},
|
|
54
|
+
"files": [
|
|
55
|
+
"dist/**",
|
|
56
|
+
"!dist/__tests__/**",
|
|
57
|
+
"README.md",
|
|
58
|
+
"LICENSE"
|
|
59
|
+
]
|
|
60
|
+
}
|