opensoma 0.5.1 → 0.7.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/dist/package.json +5 -1
- package/dist/src/agent-browser-launcher.d.ts +43 -0
- package/dist/src/agent-browser-launcher.d.ts.map +1 -0
- package/dist/src/agent-browser-launcher.js +97 -0
- package/dist/src/agent-browser-launcher.js.map +1 -0
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +8 -5
- package/dist/src/cli.js.map +1 -1
- package/dist/src/client.d.ts +34 -7
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/client.js +224 -52
- package/dist/src/client.js.map +1 -1
- package/dist/src/commands/agent-browser.d.ts +3 -0
- package/dist/src/commands/agent-browser.d.ts.map +1 -0
- package/dist/src/commands/agent-browser.js +27 -0
- package/dist/src/commands/agent-browser.js.map +1 -0
- package/dist/src/commands/auth.d.ts +1 -1
- package/dist/src/commands/auth.d.ts.map +1 -1
- package/dist/src/commands/auth.js +4 -2
- package/dist/src/commands/auth.js.map +1 -1
- package/dist/src/commands/dashboard.d.ts +13 -0
- package/dist/src/commands/dashboard.d.ts.map +1 -1
- package/dist/src/commands/dashboard.js +10 -18
- package/dist/src/commands/dashboard.js.map +1 -1
- package/dist/src/commands/helpers.d.ts +1 -1
- package/dist/src/commands/helpers.d.ts.map +1 -1
- package/dist/src/commands/helpers.js +2 -2
- package/dist/src/commands/helpers.js.map +1 -1
- package/dist/src/commands/index.d.ts +3 -1
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +3 -1
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/mentoring.d.ts.map +1 -1
- package/dist/src/commands/mentoring.js +54 -29
- package/dist/src/commands/mentoring.js.map +1 -1
- package/dist/src/commands/notice.d.ts.map +1 -1
- package/dist/src/commands/notice.js +2 -1
- package/dist/src/commands/notice.js.map +1 -1
- package/dist/src/commands/report.d.ts.map +1 -1
- package/dist/src/commands/report.js +4 -2
- package/dist/src/commands/report.js.map +1 -1
- package/dist/src/commands/room.d.ts.map +1 -1
- package/dist/src/commands/room.js +125 -2
- package/dist/src/commands/room.js.map +1 -1
- package/dist/src/commands/schedule.d.ts +3 -0
- package/dist/src/commands/schedule.d.ts.map +1 -0
- package/dist/src/commands/schedule.js +27 -0
- package/dist/src/commands/schedule.js.map +1 -0
- package/dist/src/commands/team.d.ts.map +1 -1
- package/dist/src/commands/team.js +55 -4
- package/dist/src/commands/team.js.map +1 -1
- package/dist/src/commands/toz.d.ts +16 -0
- package/dist/src/commands/toz.d.ts.map +1 -0
- package/dist/src/commands/toz.js +488 -0
- package/dist/src/commands/toz.js.map +1 -0
- package/dist/src/constants.d.ts +5 -5
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +20 -8
- package/dist/src/constants.js.map +1 -1
- package/dist/src/credential-manager.d.ts +15 -0
- package/dist/src/credential-manager.d.ts.map +1 -1
- package/dist/src/credential-manager.js +46 -0
- package/dist/src/credential-manager.js.map +1 -1
- package/dist/src/formatters.d.ts +11 -3
- package/dist/src/formatters.d.ts.map +1 -1
- package/dist/src/formatters.js +281 -52
- package/dist/src/formatters.js.map +1 -1
- package/dist/src/http.d.ts +8 -0
- package/dist/src/http.d.ts.map +1 -1
- package/dist/src/http.js +29 -1
- package/dist/src/http.js.map +1 -1
- package/dist/src/index.d.ts +8 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/session-recovery.js +2 -0
- package/dist/src/session-recovery.js.map +1 -1
- package/dist/src/shared/utils/swmaestro.d.ts +34 -1
- package/dist/src/shared/utils/swmaestro.d.ts.map +1 -1
- package/dist/src/shared/utils/swmaestro.js +102 -39
- package/dist/src/shared/utils/swmaestro.js.map +1 -1
- package/dist/src/shared/utils/team-action-params.d.ts +3 -0
- package/dist/src/shared/utils/team-action-params.d.ts.map +1 -0
- package/dist/src/shared/utils/team-action-params.js +10 -0
- package/dist/src/shared/utils/team-action-params.js.map +1 -0
- package/dist/src/shared/utils/team-params.d.ts +12 -0
- package/dist/src/shared/utils/team-params.d.ts.map +1 -0
- package/dist/src/shared/utils/team-params.js +38 -0
- package/dist/src/shared/utils/team-params.js.map +1 -0
- package/dist/src/toz-client.d.ts +89 -0
- package/dist/src/toz-client.d.ts.map +1 -0
- package/dist/src/toz-client.js +204 -0
- package/dist/src/toz-client.js.map +1 -0
- package/dist/src/toz-pending-store.d.ts +30 -0
- package/dist/src/toz-pending-store.d.ts.map +1 -0
- package/dist/src/toz-pending-store.js +36 -0
- package/dist/src/toz-pending-store.js.map +1 -0
- package/dist/src/types.d.ts +147 -10
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +74 -6
- package/dist/src/types.js.map +1 -1
- package/package.json +5 -1
- package/src/agent-browser-launcher.test.ts +263 -0
- package/src/agent-browser-launcher.ts +159 -0
- package/src/cli.ts +10 -5
- package/src/client.test.ts +673 -30
- package/src/client.ts +287 -67
- package/src/commands/agent-browser.ts +33 -0
- package/src/commands/auth.test.ts +77 -26
- package/src/commands/auth.ts +5 -3
- package/src/commands/dashboard.test.ts +57 -0
- package/src/commands/dashboard.ts +22 -19
- package/src/commands/helpers.test.ts +76 -25
- package/src/commands/helpers.ts +3 -3
- package/src/commands/index.ts +3 -1
- package/src/commands/mentoring.ts +60 -29
- package/src/commands/notice.ts +2 -1
- package/src/commands/report.ts +4 -2
- package/src/commands/room.ts +160 -1
- package/src/commands/schedule.ts +32 -0
- package/src/commands/team.ts +73 -5
- package/src/commands/toz.test.ts +51 -0
- package/src/commands/toz.ts +607 -0
- package/src/constants.ts +20 -8
- package/src/credential-manager.test.ts +98 -0
- package/src/credential-manager.ts +50 -0
- package/src/formatters.test.ts +528 -33
- package/src/formatters.ts +309 -55
- package/src/http.test.ts +71 -2
- package/src/http.ts +41 -2
- package/src/index.ts +23 -1
- package/src/session-recovery.ts +2 -0
- package/src/shared/utils/swmaestro.test.ts +245 -9
- package/src/shared/utils/swmaestro.ts +150 -47
- package/src/shared/utils/team-action-params.test.ts +32 -0
- package/src/shared/utils/team-action-params.ts +10 -0
- package/src/shared/utils/team-params.test.ts +141 -0
- package/src/shared/utils/team-params.ts +53 -0
- package/src/toz-client.test.ts +243 -0
- package/src/toz-client.ts +311 -0
- package/src/toz-pending-store.test.ts +91 -0
- package/src/toz-pending-store.ts +62 -0
- package/src/types.test.ts +26 -13
- package/src/types.ts +87 -7
- package/dist/src/commands/event.d.ts +0 -3
- package/dist/src/commands/event.d.ts.map +0 -1
- package/dist/src/commands/event.js +0 -58
- package/dist/src/commands/event.js.map +0 -1
- package/src/commands/event.ts +0 -73
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
import { stdin as input, stdout as output } from 'node:process';
|
|
2
|
+
import { createInterface } from 'node:readline/promises';
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
import { TOZ_BRANCHES } from '../constants.js';
|
|
5
|
+
import { CredentialManager } from '../credential-manager.js';
|
|
6
|
+
import { handleError } from '../shared/utils/error-handler.js';
|
|
7
|
+
import { formatOutput } from '../shared/utils/output.js';
|
|
8
|
+
import * as stderr from '../shared/utils/stderr.js';
|
|
9
|
+
import { formatPhone, parsePhone } from '../shared/utils/toz.js';
|
|
10
|
+
import { TozClient } from '../toz-client.js';
|
|
11
|
+
import { TozPendingStore } from '../toz-pending-store.js';
|
|
12
|
+
function parseStrictPositiveInt(value, flag) {
|
|
13
|
+
if (!/^\d+$/.test(value))
|
|
14
|
+
throw new Error(`Invalid --${flag}: ${value} (expected positive integer)`);
|
|
15
|
+
const n = Number.parseInt(value, 10);
|
|
16
|
+
if (!Number.isSafeInteger(n) || n <= 0)
|
|
17
|
+
throw new Error(`Invalid --${flag}: ${value} (expected positive integer)`);
|
|
18
|
+
return n;
|
|
19
|
+
}
|
|
20
|
+
function parseDurationFlag(value) {
|
|
21
|
+
const match = /^(\d+)\s*([hm])?$/i.exec(value.trim());
|
|
22
|
+
if (!match)
|
|
23
|
+
throw new Error(`Invalid --duration: ${value} (use e.g. "2h", "120", "150m")`);
|
|
24
|
+
const n = Number.parseInt(match[1], 10);
|
|
25
|
+
const unit = (match[2] ?? 'm').toLowerCase();
|
|
26
|
+
return unit === 'h' ? n * 60 : n;
|
|
27
|
+
}
|
|
28
|
+
function parseUserCount(value) {
|
|
29
|
+
const n = Number.parseInt(value, 10);
|
|
30
|
+
if (!Number.isFinite(n) || n <= 0)
|
|
31
|
+
throw new Error(`Invalid --user-count: ${value}`);
|
|
32
|
+
return n;
|
|
33
|
+
}
|
|
34
|
+
function resolveBranchIds(values) {
|
|
35
|
+
if (!values || values.length === 0)
|
|
36
|
+
return TOZ_BRANCHES.map((b) => b.id);
|
|
37
|
+
const ids = [];
|
|
38
|
+
for (const value of values) {
|
|
39
|
+
const numeric = Number.parseInt(value, 10);
|
|
40
|
+
if (Number.isFinite(numeric)) {
|
|
41
|
+
ids.push(numeric);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const matched = TOZ_BRANCHES.find((b) => b.name === value || b.name.includes(value));
|
|
45
|
+
if (!matched)
|
|
46
|
+
throw new Error(`Unknown branch: ${value}`);
|
|
47
|
+
ids.push(matched.id);
|
|
48
|
+
}
|
|
49
|
+
return ids;
|
|
50
|
+
}
|
|
51
|
+
export async function resolveTozIdentity(flagName, flagPhone, options = {}) {
|
|
52
|
+
if (flagName && flagPhone)
|
|
53
|
+
return { name: flagName, phone: flagPhone };
|
|
54
|
+
const store = options.store ?? new CredentialManager();
|
|
55
|
+
const stored = await store.getTozIdentity();
|
|
56
|
+
const name = flagName ?? stored?.name;
|
|
57
|
+
let phone = flagPhone ?? stored?.phone;
|
|
58
|
+
if (!name) {
|
|
59
|
+
throw new Error('Toz identity not set. Run: opensoma toz login --name <name> --phone <phone>');
|
|
60
|
+
}
|
|
61
|
+
if (!phone) {
|
|
62
|
+
if (!options.promptPhone) {
|
|
63
|
+
throw new Error('Toz identity not set. Run: opensoma toz login --name <name> --phone <phone>');
|
|
64
|
+
}
|
|
65
|
+
phone = await options.promptPhone();
|
|
66
|
+
}
|
|
67
|
+
return { name, phone };
|
|
68
|
+
}
|
|
69
|
+
export async function resolveTozPin(pin, promptPin) {
|
|
70
|
+
return pin ?? (await promptPin());
|
|
71
|
+
}
|
|
72
|
+
async function loginAction(options) {
|
|
73
|
+
try {
|
|
74
|
+
const manager = new CredentialManager();
|
|
75
|
+
await manager.setTozIdentity(options.name, options.phone);
|
|
76
|
+
console.log(formatOutput({ ok: true, message: `Toz identity saved for ${options.name} (${maskPhone(options.phone)})` }, options.pretty));
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
handleError(error);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function logoutAction(options) {
|
|
83
|
+
try {
|
|
84
|
+
await new CredentialManager().clearTozIdentity();
|
|
85
|
+
await new TozPendingStore().clear();
|
|
86
|
+
console.log(formatOutput({ ok: true }, options.pretty));
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
handleError(error);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async function statusAction(options) {
|
|
93
|
+
try {
|
|
94
|
+
const stored = await new CredentialManager().getTozIdentity();
|
|
95
|
+
if (!stored) {
|
|
96
|
+
console.log(formatOutput({ loggedIn: false }, options.pretty));
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
console.log(formatOutput({ loggedIn: true, name: stored.name, phone: maskPhone(stored.phone) }, options.pretty));
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
handleError(error);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async function branchesAction(options) {
|
|
106
|
+
try {
|
|
107
|
+
const branches = await new TozClient().branches();
|
|
108
|
+
console.log(formatOutput(branches, options.pretty));
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
handleError(error);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
async function meetingsAction(options) {
|
|
115
|
+
try {
|
|
116
|
+
const meetings = await new TozClient().meetings();
|
|
117
|
+
console.log(formatOutput(meetings, options.pretty));
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
handleError(error);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
async function availableAction(options) {
|
|
124
|
+
try {
|
|
125
|
+
const booths = await new TozClient().available({
|
|
126
|
+
date: options.date,
|
|
127
|
+
startTime: options.start,
|
|
128
|
+
durationMinutes: parseDurationFlag(options.duration),
|
|
129
|
+
userCount: parseUserCount(options.userCount),
|
|
130
|
+
branchIds: resolveBranchIds(options.branch),
|
|
131
|
+
});
|
|
132
|
+
console.log(formatOutput(booths, options.pretty));
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
handleError(error);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async function checkAction(options) {
|
|
139
|
+
try {
|
|
140
|
+
const startedAt = Date.now();
|
|
141
|
+
const checked = await new TozClient().check({
|
|
142
|
+
date: options.date,
|
|
143
|
+
startTimes: options.time,
|
|
144
|
+
durationMinutes: parseDurationFlag(options.duration),
|
|
145
|
+
userCount: parseUserCount(options.userCount),
|
|
146
|
+
branchIds: resolveBranchIds(options.branch),
|
|
147
|
+
});
|
|
148
|
+
console.log(formatOutput({
|
|
149
|
+
date: options.date,
|
|
150
|
+
durationMinutes: parseDurationFlag(options.duration),
|
|
151
|
+
userCount: parseUserCount(options.userCount),
|
|
152
|
+
checked,
|
|
153
|
+
requestsIssued: options.time.length,
|
|
154
|
+
wallTimeMs: Date.now() - startedAt,
|
|
155
|
+
}, options.pretty));
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
handleError(error);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
async function reserveRequestAction(options) {
|
|
162
|
+
try {
|
|
163
|
+
const identity = await resolveTozIdentity(options.name, options.phone, { promptPhone });
|
|
164
|
+
const durationMinutes = parseDurationFlag(options.duration);
|
|
165
|
+
const userCount = parseUserCount(options.userCount);
|
|
166
|
+
const boothId = parseStrictPositiveInt(options.boothId, 'booth-id');
|
|
167
|
+
const meetingId = options.meetingId ? parseStrictPositiveInt(options.meetingId, 'meeting-id') : undefined;
|
|
168
|
+
if (!meetingId && !options.newMeeting)
|
|
169
|
+
throw new Error('--meeting-id or --new-meeting is required');
|
|
170
|
+
const client = new TozClient();
|
|
171
|
+
const reserved = await client.reserveBooth({
|
|
172
|
+
date: options.date,
|
|
173
|
+
startTime: options.start,
|
|
174
|
+
durationMinutes,
|
|
175
|
+
userCount,
|
|
176
|
+
boothId,
|
|
177
|
+
});
|
|
178
|
+
await client.skipEquipment({
|
|
179
|
+
reservationId: reserved.reservationId,
|
|
180
|
+
date: options.date,
|
|
181
|
+
startTime: options.start,
|
|
182
|
+
durationMinutes,
|
|
183
|
+
});
|
|
184
|
+
await client.sendOtp(identity.phone);
|
|
185
|
+
const endTime = computeEndTime(options.start, durationMinutes);
|
|
186
|
+
const now = new Date();
|
|
187
|
+
const pending = {
|
|
188
|
+
reservationId: reserved.reservationId,
|
|
189
|
+
cookies: client.http.getCookies(),
|
|
190
|
+
branchName: reserved.branchName,
|
|
191
|
+
branchTel: reserved.branchTel,
|
|
192
|
+
boothGroupName: reserved.boothGroupName,
|
|
193
|
+
isLargeBooth: reserved.isLargeBooth,
|
|
194
|
+
date: options.date,
|
|
195
|
+
startTime: options.start,
|
|
196
|
+
endTime,
|
|
197
|
+
durationMinutes,
|
|
198
|
+
userCount,
|
|
199
|
+
boothId,
|
|
200
|
+
meetingId,
|
|
201
|
+
newMeetingName: options.newMeeting,
|
|
202
|
+
email: options.email,
|
|
203
|
+
memo: options.memo,
|
|
204
|
+
name: identity.name,
|
|
205
|
+
phone: identity.phone,
|
|
206
|
+
createdAt: now.toISOString(),
|
|
207
|
+
expiresAt: new Date(now.getTime() + 5 * 60 * 1000).toISOString(),
|
|
208
|
+
};
|
|
209
|
+
await new TozPendingStore().set(pending);
|
|
210
|
+
console.log(formatOutput({
|
|
211
|
+
ok: true,
|
|
212
|
+
reservationId: reserved.reservationId,
|
|
213
|
+
branchName: reserved.branchName,
|
|
214
|
+
boothGroupName: reserved.boothGroupName,
|
|
215
|
+
date: options.date,
|
|
216
|
+
startTime: options.start,
|
|
217
|
+
endTime,
|
|
218
|
+
expiresAt: pending.expiresAt,
|
|
219
|
+
message: `SMS sent to ${maskPhone(identity.phone)}. Run: opensoma toz reserve-confirm --pin <pin>`,
|
|
220
|
+
}, options.pretty));
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
handleError(error);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
async function reserveConfirmAction(options) {
|
|
227
|
+
try {
|
|
228
|
+
const store = new TozPendingStore();
|
|
229
|
+
const pending = await store.get();
|
|
230
|
+
if (!pending) {
|
|
231
|
+
throw new Error('No pending toz reservation. Run: opensoma toz reserve-request first.');
|
|
232
|
+
}
|
|
233
|
+
if (Date.now() > new Date(pending.expiresAt).getTime()) {
|
|
234
|
+
await store.clear();
|
|
235
|
+
throw new Error('Pending toz reservation expired (5-minute hold lapsed). Run: opensoma toz reserve-request again.');
|
|
236
|
+
}
|
|
237
|
+
const pin = await resolveTozPin(options.pin, promptPin);
|
|
238
|
+
const client = new TozClient({ cookies: pending.cookies });
|
|
239
|
+
const result = await client.confirm({
|
|
240
|
+
reservationId: pending.reservationId,
|
|
241
|
+
date: pending.date,
|
|
242
|
+
startTime: pending.startTime,
|
|
243
|
+
durationMinutes: pending.durationMinutes,
|
|
244
|
+
name: pending.name,
|
|
245
|
+
phone: pending.phone,
|
|
246
|
+
email: pending.email,
|
|
247
|
+
pinNum: pin,
|
|
248
|
+
meetingId: pending.meetingId,
|
|
249
|
+
newMeetingName: pending.newMeetingName,
|
|
250
|
+
memo: pending.memo,
|
|
251
|
+
});
|
|
252
|
+
await store.clear();
|
|
253
|
+
console.log(formatOutput({
|
|
254
|
+
ok: true,
|
|
255
|
+
reservationId: pending.reservationId,
|
|
256
|
+
branchName: pending.branchName,
|
|
257
|
+
boothGroupName: pending.boothGroupName,
|
|
258
|
+
date: pending.date,
|
|
259
|
+
startTime: pending.startTime,
|
|
260
|
+
endTime: pending.endTime,
|
|
261
|
+
message: result.resultMsg,
|
|
262
|
+
}, options.pretty));
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
handleError(error);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
async function reserveAction(options) {
|
|
269
|
+
try {
|
|
270
|
+
const identity = await resolveTozIdentity(options.name, options.phone, { promptPhone });
|
|
271
|
+
const durationMinutes = parseDurationFlag(options.duration);
|
|
272
|
+
const userCount = parseUserCount(options.userCount);
|
|
273
|
+
const boothId = parseStrictPositiveInt(options.boothId, 'booth-id');
|
|
274
|
+
const meetingId = options.meetingId ? parseStrictPositiveInt(options.meetingId, 'meeting-id') : undefined;
|
|
275
|
+
if (!meetingId && !options.newMeeting)
|
|
276
|
+
throw new Error('--meeting-id or --new-meeting is required');
|
|
277
|
+
const client = new TozClient();
|
|
278
|
+
stderr.info(`[1/4] Reserving booth ${boothId}...`);
|
|
279
|
+
const reserved = await client.reserveBooth({
|
|
280
|
+
date: options.date,
|
|
281
|
+
startTime: options.start,
|
|
282
|
+
durationMinutes,
|
|
283
|
+
userCount,
|
|
284
|
+
boothId,
|
|
285
|
+
});
|
|
286
|
+
stderr.info(` ok (reservationId=${reserved.reservationId}, ${reserved.branchName} ${reserved.boothGroupName})`);
|
|
287
|
+
stderr.info('[2/4] Skipping equipment...');
|
|
288
|
+
await client.skipEquipment({
|
|
289
|
+
reservationId: reserved.reservationId,
|
|
290
|
+
date: options.date,
|
|
291
|
+
startTime: options.start,
|
|
292
|
+
durationMinutes,
|
|
293
|
+
});
|
|
294
|
+
stderr.info(' ok');
|
|
295
|
+
stderr.info(`[3/4] Sending SMS to ${maskPhone(identity.phone)}...`);
|
|
296
|
+
await client.sendOtp(identity.phone);
|
|
297
|
+
stderr.info(' ok');
|
|
298
|
+
const pin = options.pin ?? (await promptPin());
|
|
299
|
+
stderr.info('[4/4] Confirming reservation...');
|
|
300
|
+
const result = await client.confirm({
|
|
301
|
+
reservationId: reserved.reservationId,
|
|
302
|
+
date: options.date,
|
|
303
|
+
startTime: options.start,
|
|
304
|
+
durationMinutes,
|
|
305
|
+
name: identity.name,
|
|
306
|
+
phone: identity.phone,
|
|
307
|
+
email: options.email,
|
|
308
|
+
pinNum: pin,
|
|
309
|
+
meetingId,
|
|
310
|
+
newMeetingName: options.newMeeting,
|
|
311
|
+
memo: options.memo,
|
|
312
|
+
});
|
|
313
|
+
stderr.info(' ok');
|
|
314
|
+
console.log(formatOutput({
|
|
315
|
+
ok: true,
|
|
316
|
+
reservationId: reserved.reservationId,
|
|
317
|
+
branchName: reserved.branchName,
|
|
318
|
+
boothGroupName: reserved.boothGroupName,
|
|
319
|
+
date: options.date,
|
|
320
|
+
startTime: options.start,
|
|
321
|
+
endTime: computeEndTime(options.start, durationMinutes),
|
|
322
|
+
message: result.resultMsg,
|
|
323
|
+
}, options.pretty));
|
|
324
|
+
}
|
|
325
|
+
catch (error) {
|
|
326
|
+
handleError(error);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
async function listAction(options) {
|
|
330
|
+
try {
|
|
331
|
+
const identity = await resolveTozIdentity(options.name, options.phone);
|
|
332
|
+
const reservations = await new TozClient().myReservations({
|
|
333
|
+
name: identity.name,
|
|
334
|
+
phone: identity.phone,
|
|
335
|
+
startDate: options.start,
|
|
336
|
+
endDate: options.end,
|
|
337
|
+
meetingName: options.meeting,
|
|
338
|
+
});
|
|
339
|
+
console.log(formatOutput(reservations, options.pretty));
|
|
340
|
+
}
|
|
341
|
+
catch (error) {
|
|
342
|
+
handleError(error);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
async function cancelAction(reservationId, options) {
|
|
346
|
+
try {
|
|
347
|
+
const id = parseStrictPositiveInt(reservationId, 'reservationId');
|
|
348
|
+
const identity = await resolveTozIdentity(options.name, options.phone);
|
|
349
|
+
await new TozClient().cancel({ reservationId: id, name: identity.name, phone: identity.phone });
|
|
350
|
+
console.log(formatOutput({ ok: true, message: '취소되었습니다.' }, options.pretty));
|
|
351
|
+
}
|
|
352
|
+
catch (error) {
|
|
353
|
+
handleError(error);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
function maskPhone(phone) {
|
|
357
|
+
return phone.replace(/^(\d{3})-?(\d{3,4})-?(\d{4})$/, (_, a, _b, c) => `${a}-${'*'.repeat(_b.length)}-${c}`);
|
|
358
|
+
}
|
|
359
|
+
function computeEndTime(start, durationMinutes) {
|
|
360
|
+
const [h, m] = start.split(':').map((s) => Number.parseInt(s, 10));
|
|
361
|
+
const total = h * 60 + m + durationMinutes;
|
|
362
|
+
const eh = Math.floor(total / 60) % 24;
|
|
363
|
+
const em = total % 60;
|
|
364
|
+
return `${String(eh).padStart(2, '0')}:${String(em).padStart(2, '0')}`;
|
|
365
|
+
}
|
|
366
|
+
async function promptPin() {
|
|
367
|
+
const rl = createInterface({ input, output });
|
|
368
|
+
try {
|
|
369
|
+
const answer = await rl.question('Enter 6-digit PIN from SMS: ');
|
|
370
|
+
return answer.trim();
|
|
371
|
+
}
|
|
372
|
+
finally {
|
|
373
|
+
rl.close();
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
async function promptPhone() {
|
|
377
|
+
const rl = createInterface({ input, output });
|
|
378
|
+
try {
|
|
379
|
+
while (true) {
|
|
380
|
+
const answer = await rl.question('Phone number (e.g. 010-1234-5678): ');
|
|
381
|
+
const phone = answer.trim();
|
|
382
|
+
try {
|
|
383
|
+
return formatPhone(parsePhone(phone));
|
|
384
|
+
}
|
|
385
|
+
catch (error) {
|
|
386
|
+
stderr.warn(error instanceof Error ? error.message : String(error));
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
finally {
|
|
391
|
+
rl.close();
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
export const tozCommand = new Command('toz')
|
|
395
|
+
.description('Manage TOZ external meeting room reservations (SW마에스트로 partnership)')
|
|
396
|
+
.addCommand(new Command('login')
|
|
397
|
+
.description('Save TOZ identity (name + phone) to credentials')
|
|
398
|
+
.requiredOption('--name <name>', 'Reservation holder name')
|
|
399
|
+
.requiredOption('--phone <phone>', 'Phone number, e.g. 010-1234-5678')
|
|
400
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
401
|
+
.action(loginAction))
|
|
402
|
+
.addCommand(new Command('logout')
|
|
403
|
+
.description('Clear stored TOZ identity and pending reservation state')
|
|
404
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
405
|
+
.action(logoutAction))
|
|
406
|
+
.addCommand(new Command('status')
|
|
407
|
+
.description('Show stored TOZ identity')
|
|
408
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
409
|
+
.action(statusAction))
|
|
410
|
+
.addCommand(new Command('branches')
|
|
411
|
+
.description('List partner branches (live from booking.htm)')
|
|
412
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
413
|
+
.action(branchesAction))
|
|
414
|
+
.addCommand(new Command('meetings')
|
|
415
|
+
.description('List active SW마에스트로 meetings (live from booking.htm)')
|
|
416
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
417
|
+
.action(meetingsAction))
|
|
418
|
+
.addCommand(new Command('available')
|
|
419
|
+
.description('Show available booths for one date+time+duration')
|
|
420
|
+
.requiredOption('--date <date>', 'YYYY-MM-DD')
|
|
421
|
+
.requiredOption('--start <time>', 'HH:MM')
|
|
422
|
+
.requiredOption('--duration <duration>', 'e.g. 2h, 150m, 120 (default minutes)')
|
|
423
|
+
.requiredOption('--user-count <n>', 'Number of attendees')
|
|
424
|
+
.option('--branch <id-or-name...>', 'Branch IDs or names (default: all 9)')
|
|
425
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
426
|
+
.action(availableAction))
|
|
427
|
+
.addCommand(new Command('check')
|
|
428
|
+
.description('Check booth availability for multiple times (max 6, serial)')
|
|
429
|
+
.requiredOption('--date <date>', 'YYYY-MM-DD')
|
|
430
|
+
.requiredOption('--time <time...>', 'HH:MM (repeatable, max 6)')
|
|
431
|
+
.requiredOption('--duration <duration>', 'e.g. 2h')
|
|
432
|
+
.requiredOption('--user-count <n>', 'Number of attendees')
|
|
433
|
+
.option('--branch <id-or-name...>', 'Branch IDs or names')
|
|
434
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
435
|
+
.action(checkAction))
|
|
436
|
+
.addCommand(new Command('reserve-request')
|
|
437
|
+
.description('Step 1 of non-interactive reservation: hold booth + send SMS')
|
|
438
|
+
.requiredOption('--date <date>', 'YYYY-MM-DD')
|
|
439
|
+
.requiredOption('--start <time>', 'HH:MM')
|
|
440
|
+
.requiredOption('--duration <duration>', 'e.g. 2h')
|
|
441
|
+
.requiredOption('--user-count <n>', 'Number of attendees')
|
|
442
|
+
.requiredOption('--booth-id <id>', 'Booth ID from `toz available`')
|
|
443
|
+
.option('--meeting-id <id>', 'Meeting ID from `toz meetings`')
|
|
444
|
+
.option('--new-meeting <name>', 'Create a new meeting with this name')
|
|
445
|
+
.requiredOption('--email <email>', 'Contact email')
|
|
446
|
+
.option('--memo <text>', 'Reservation memo')
|
|
447
|
+
.option('--name <name>', 'Override stored name')
|
|
448
|
+
.option('--phone <phone>', 'Override stored phone')
|
|
449
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
450
|
+
.action(reserveRequestAction))
|
|
451
|
+
.addCommand(new Command('reserve-confirm')
|
|
452
|
+
.description('Step 2 of non-interactive reservation: finalize with PIN')
|
|
453
|
+
.option('--pin <pin>', '6-digit PIN from SMS (prompts if omitted)')
|
|
454
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
455
|
+
.action(reserveConfirmAction))
|
|
456
|
+
.addCommand(new Command('reserve')
|
|
457
|
+
.description('Interactive single-process reservation (prompts for PIN)')
|
|
458
|
+
.requiredOption('--date <date>', 'YYYY-MM-DD')
|
|
459
|
+
.requiredOption('--start <time>', 'HH:MM')
|
|
460
|
+
.requiredOption('--duration <duration>', 'e.g. 2h')
|
|
461
|
+
.requiredOption('--user-count <n>', 'Number of attendees')
|
|
462
|
+
.requiredOption('--booth-id <id>', 'Booth ID')
|
|
463
|
+
.option('--meeting-id <id>', 'Meeting ID')
|
|
464
|
+
.option('--new-meeting <name>', 'Create new meeting with this name')
|
|
465
|
+
.requiredOption('--email <email>', 'Contact email')
|
|
466
|
+
.option('--memo <text>', 'Reservation memo')
|
|
467
|
+
.option('--name <name>', 'Override stored name')
|
|
468
|
+
.option('--phone <phone>', 'Override stored phone')
|
|
469
|
+
.option('--pin <pin>', 'PIN if already received (skip prompt)')
|
|
470
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
471
|
+
.action(reserveAction))
|
|
472
|
+
.addCommand(new Command('list')
|
|
473
|
+
.description('List my TOZ reservations')
|
|
474
|
+
.option('--start <date>', 'YYYY-MM-DD')
|
|
475
|
+
.option('--end <date>', 'YYYY-MM-DD')
|
|
476
|
+
.option('--meeting <name>', 'Filter by meeting name')
|
|
477
|
+
.option('--name <name>', 'Override stored name')
|
|
478
|
+
.option('--phone <phone>', 'Override stored phone')
|
|
479
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
480
|
+
.action(listAction))
|
|
481
|
+
.addCommand(new Command('cancel')
|
|
482
|
+
.description('Cancel a TOZ reservation')
|
|
483
|
+
.argument('<reservationId>')
|
|
484
|
+
.option('--name <name>', 'Override stored name')
|
|
485
|
+
.option('--phone <phone>', 'Override stored phone')
|
|
486
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
487
|
+
.action(cancelAction));
|
|
488
|
+
//# sourceMappingURL=toz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toz.js","sourceRoot":"","sources":["../../../src/commands/toz.ts"],"names":[],"mappings":"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"}
|
package/dist/src/constants.d.ts
CHANGED
|
@@ -4,8 +4,8 @@ export declare const MENU_NO: {
|
|
|
4
4
|
readonly DASHBOARD: "200026";
|
|
5
5
|
readonly NOTICE: "200038";
|
|
6
6
|
readonly TEAM: "200093";
|
|
7
|
+
readonly SCHEDULE: "200043";
|
|
7
8
|
readonly MENTORING: "200046";
|
|
8
|
-
readonly EVENT: "200045";
|
|
9
9
|
readonly APPLICATION_HISTORY: "200047";
|
|
10
10
|
readonly ROOM: "200058";
|
|
11
11
|
readonly MEMBER_INFO: "200036";
|
|
@@ -17,12 +17,12 @@ export declare const VENUES: {
|
|
|
17
17
|
readonly TOZ_GWANGHWAMUN: "토즈-광화문점";
|
|
18
18
|
readonly TOZ_YANGJAE: "토즈-양재점";
|
|
19
19
|
readonly TOZ_GANGNAM_CONFERENCE_CENTER: "토즈-강남컨퍼런스센터점";
|
|
20
|
-
readonly TOZ_KONKUK: "토즈-건대점";
|
|
20
|
+
readonly TOZ_KONKUK: "토즈-건대점 ";
|
|
21
21
|
readonly TOZ_GANGNAM_TOWER: "토즈-강남역토즈타워점";
|
|
22
22
|
readonly TOZ_SEOLLEUNG: "토즈-선릉점";
|
|
23
|
-
readonly TOZ_YEOKSAM: "토즈-역삼점";
|
|
24
|
-
readonly TOZ_HONGDAE: "토즈-홍대점";
|
|
25
|
-
readonly TOZ_SINCHON_BUSINESS_CENTER: "
|
|
23
|
+
readonly TOZ_YEOKSAM: "토즈-역삼점 ";
|
|
24
|
+
readonly TOZ_HONGDAE: "토즈-홍대점 ";
|
|
25
|
+
readonly TOZ_SINCHON_BUSINESS_CENTER: "연수센터-7";
|
|
26
26
|
readonly ONLINE_WEBEX: "온라인(Webex)";
|
|
27
27
|
readonly SPACE_A1: "스페이스 A1";
|
|
28
28
|
readonly SPACE_A2: "스페이스 A2";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,gCAAgC,CAAA;AAErD,eAAO,MAAM,OAAO;;;;;;;;;;;;CAYV,CAAA;AAEV,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAS3C,CAAA;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,gCAAgC,CAAA;AAErD,eAAO,MAAM,OAAO;;;;;;;;;;;;CAYV,CAAA;AAEV,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAS3C,CAAA;AAMD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;CAwBT,CAAA;AAEV,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmBhD,CAAA;AAED,eAAO,MAAM,SAAS;;;;CAIZ,CAAA;AAEV,eAAO,MAAM,UAAU,UAAoB,CAAA;AAgB3C,eAAO,MAAM,YAAY,iEAAiE,CAAA;AAC1F,eAAO,MAAM,WAAW,UAAU,CAAA;AAClC,eAAO,MAAM,WAAW,cAAc,CAAA;AACtC,eAAO,MAAM,qBAAqB,UAAU,CAAA;AAI5C,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUf,CAAA;AAEV,eAAO,MAAM,kBAAkB,qDAAsD,CAAA;AAErF,eAAO,MAAM,iBAAiB,qOAiBpB,CAAA;AAEV,eAAO,MAAM,uBAAuB,6BAAS,CAAA;AAE7C,eAAO,MAAM,qBAAqB,uBAAQ,CAAA;AAE1C,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAC3C,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAC3C,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAE3C,eAAO,MAAM,mBAAmB,IAAI,CAAA"}
|
package/dist/src/constants.js
CHANGED
|
@@ -4,8 +4,8 @@ export const MENU_NO = {
|
|
|
4
4
|
DASHBOARD: '200026',
|
|
5
5
|
NOTICE: '200038',
|
|
6
6
|
TEAM: '200093',
|
|
7
|
+
SCHEDULE: '200043',
|
|
7
8
|
MENTORING: '200046',
|
|
8
|
-
EVENT: '200045',
|
|
9
9
|
APPLICATION_HISTORY: '200047',
|
|
10
10
|
ROOM: '200058',
|
|
11
11
|
MEMBER_INFO: '200036',
|
|
@@ -22,16 +22,20 @@ export const ROOM_IDS = {
|
|
|
22
22
|
A7: 23,
|
|
23
23
|
A8: 24,
|
|
24
24
|
};
|
|
25
|
+
// Values mirror the native <select name="place"> options verbatim, including the
|
|
26
|
+
// trailing spaces on 건대/역삼/홍대 that swmaestro.ai ships in its HTML. Per the
|
|
27
|
+
// mirror rule in AGENTS.md, we send the native bytes exactly, not a "cleaned up"
|
|
28
|
+
// variant. If a future native release drops the spaces, update these here.
|
|
25
29
|
export const VENUES = {
|
|
26
30
|
TOZ_GWANGHWAMUN: '토즈-광화문점',
|
|
27
31
|
TOZ_YANGJAE: '토즈-양재점',
|
|
28
32
|
TOZ_GANGNAM_CONFERENCE_CENTER: '토즈-강남컨퍼런스센터점',
|
|
29
|
-
TOZ_KONKUK: '토즈-건대점',
|
|
33
|
+
TOZ_KONKUK: '토즈-건대점 ',
|
|
30
34
|
TOZ_GANGNAM_TOWER: '토즈-강남역토즈타워점',
|
|
31
35
|
TOZ_SEOLLEUNG: '토즈-선릉점',
|
|
32
|
-
TOZ_YEOKSAM: '토즈-역삼점',
|
|
33
|
-
TOZ_HONGDAE: '토즈-홍대점',
|
|
34
|
-
TOZ_SINCHON_BUSINESS_CENTER: '
|
|
36
|
+
TOZ_YEOKSAM: '토즈-역삼점 ',
|
|
37
|
+
TOZ_HONGDAE: '토즈-홍대점 ',
|
|
38
|
+
TOZ_SINCHON_BUSINESS_CENTER: '연수센터-7',
|
|
35
39
|
ONLINE_WEBEX: '온라인(Webex)',
|
|
36
40
|
SPACE_A1: '스페이스 A1',
|
|
37
41
|
SPACE_A2: '스페이스 A2',
|
|
@@ -51,12 +55,20 @@ export const VENUE_ALIASES = {
|
|
|
51
55
|
광화문점: '토즈-광화문점',
|
|
52
56
|
양재점: '토즈-양재점',
|
|
53
57
|
강남컨퍼런스센터점: '토즈-강남컨퍼런스센터점',
|
|
54
|
-
건대점: '토즈-건대점',
|
|
58
|
+
건대점: '토즈-건대점 ',
|
|
55
59
|
강남역토즈타워점: '토즈-강남역토즈타워점',
|
|
56
60
|
선릉점: '토즈-선릉점',
|
|
57
|
-
역삼점: '토즈-역삼점',
|
|
58
|
-
홍대점: '토즈-홍대점',
|
|
61
|
+
역삼점: '토즈-역삼점 ',
|
|
62
|
+
홍대점: '토즈-홍대점 ',
|
|
59
63
|
신촌비즈니스센터점: '연수센터-7',
|
|
64
|
+
'토즈-광화문점': '토즈-광화문점',
|
|
65
|
+
'토즈-양재점': '토즈-양재점',
|
|
66
|
+
'토즈-강남컨퍼런스센터점': '토즈-강남컨퍼런스센터점',
|
|
67
|
+
'토즈-건대점': '토즈-건대점 ',
|
|
68
|
+
'토즈-강남역토즈타워점': '토즈-강남역토즈타워점',
|
|
69
|
+
'토즈-선릉점': '토즈-선릉점',
|
|
70
|
+
'토즈-역삼점': '토즈-역삼점 ',
|
|
71
|
+
'토즈-홍대점': '토즈-홍대점 ',
|
|
60
72
|
'토즈-신촌비즈니스센터점': '연수센터-7',
|
|
61
73
|
};
|
|
62
74
|
export const REPORT_CD = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,6BAA6B,CAAA;AAErD,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,KAAK,EAAE,QAAQ;IACf,SAAS,EAAE,QAAQ;IACnB,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,QAAQ;IACd,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,21 @@ export declare class CredentialManager {
|
|
|
12
12
|
getCredentials(): Promise<Credentials | null>;
|
|
13
13
|
setCredentials(credentials: Credentials): Promise<void>;
|
|
14
14
|
remove(): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Wipe ephemeral session fields (sessionCookie, csrfToken, loggedInAt) while
|
|
17
|
+
* preserving long-term material (username, password, TOZ identity). Used when
|
|
18
|
+
* the server-side session expired but we still want automatic recovery on the
|
|
19
|
+
* next run via `recoverSession()`.
|
|
20
|
+
*
|
|
21
|
+
* No-op when no credentials file exists or no recovery material is stored.
|
|
22
|
+
*/
|
|
23
|
+
clearSessionState(): Promise<void>;
|
|
24
|
+
setTozIdentity(name: string, phone: string): Promise<void>;
|
|
25
|
+
clearTozIdentity(): Promise<void>;
|
|
26
|
+
getTozIdentity(): Promise<{
|
|
27
|
+
name: string;
|
|
28
|
+
phone: string;
|
|
29
|
+
} | null>;
|
|
15
30
|
private hydrateCredentials;
|
|
16
31
|
private serializeCredentials;
|
|
17
32
|
private encryptSecret;
|