opensoma 0.1.3 → 0.2.1

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.
Files changed (108) hide show
  1. package/dist/package.json +18 -2
  2. package/dist/src/client.d.ts +10 -0
  3. package/dist/src/client.d.ts.map +1 -1
  4. package/dist/src/client.js +139 -22
  5. package/dist/src/client.js.map +1 -1
  6. package/dist/src/commands/auth.d.ts +16 -0
  7. package/dist/src/commands/auth.d.ts.map +1 -1
  8. package/dist/src/commands/auth.js +105 -44
  9. package/dist/src/commands/auth.js.map +1 -1
  10. package/dist/src/commands/dashboard.d.ts.map +1 -1
  11. package/dist/src/commands/dashboard.js +1 -1
  12. package/dist/src/commands/dashboard.js.map +1 -1
  13. package/dist/src/commands/event.d.ts.map +1 -1
  14. package/dist/src/commands/event.js.map +1 -1
  15. package/dist/src/commands/helpers.d.ts +8 -0
  16. package/dist/src/commands/helpers.d.ts.map +1 -1
  17. package/dist/src/commands/helpers.js +35 -4
  18. package/dist/src/commands/helpers.js.map +1 -1
  19. package/dist/src/commands/member.d.ts.map +1 -1
  20. package/dist/src/commands/member.js.map +1 -1
  21. package/dist/src/commands/mentoring.d.ts.map +1 -1
  22. package/dist/src/commands/mentoring.js +14 -5
  23. package/dist/src/commands/mentoring.js.map +1 -1
  24. package/dist/src/commands/notice.d.ts.map +1 -1
  25. package/dist/src/commands/notice.js.map +1 -1
  26. package/dist/src/commands/room.d.ts.map +1 -1
  27. package/dist/src/commands/room.js.map +1 -1
  28. package/dist/src/commands/team.d.ts.map +1 -1
  29. package/dist/src/commands/team.js.map +1 -1
  30. package/dist/src/credential-manager.d.ts +7 -0
  31. package/dist/src/credential-manager.d.ts.map +1 -1
  32. package/dist/src/credential-manager.js +76 -2
  33. package/dist/src/credential-manager.js.map +1 -1
  34. package/dist/src/errors.d.ts +8 -0
  35. package/dist/src/errors.d.ts.map +1 -0
  36. package/dist/src/errors.js +11 -0
  37. package/dist/src/errors.js.map +1 -0
  38. package/dist/src/formatters.d.ts.map +1 -1
  39. package/dist/src/formatters.js +54 -7
  40. package/dist/src/formatters.js.map +1 -1
  41. package/dist/src/http.d.ts +6 -0
  42. package/dist/src/http.d.ts.map +1 -1
  43. package/dist/src/http.js +183 -8
  44. package/dist/src/http.js.map +1 -1
  45. package/dist/src/index.d.ts +1 -0
  46. package/dist/src/index.d.ts.map +1 -1
  47. package/dist/src/index.js +1 -0
  48. package/dist/src/index.js.map +1 -1
  49. package/dist/src/session-recovery.d.ts +12 -0
  50. package/dist/src/session-recovery.d.ts.map +1 -0
  51. package/dist/src/session-recovery.js +34 -0
  52. package/dist/src/session-recovery.js.map +1 -0
  53. package/dist/src/shared/utils/mentoring-params.d.ts.map +1 -1
  54. package/dist/src/shared/utils/mentoring-params.js +4 -1
  55. package/dist/src/shared/utils/mentoring-params.js.map +1 -1
  56. package/dist/src/shared/utils/swmaestro.d.ts.map +1 -1
  57. package/dist/src/shared/utils/swmaestro.js.map +1 -1
  58. package/dist/src/token-extractor.d.ts +12 -0
  59. package/dist/src/token-extractor.d.ts.map +1 -1
  60. package/dist/src/token-extractor.js +81 -18
  61. package/dist/src/token-extractor.js.map +1 -1
  62. package/dist/src/types.d.ts +18 -0
  63. package/dist/src/types.d.ts.map +1 -1
  64. package/dist/src/types.js +7 -0
  65. package/dist/src/types.js.map +1 -1
  66. package/package.json +17 -1
  67. package/src/client.test.ts +176 -12
  68. package/src/client.ts +154 -37
  69. package/src/commands/auth.test.ts +167 -0
  70. package/src/commands/auth.ts +140 -58
  71. package/src/commands/dashboard.ts +5 -6
  72. package/src/commands/event.ts +5 -6
  73. package/src/commands/helpers.test.ts +112 -0
  74. package/src/commands/helpers.ts +61 -6
  75. package/src/commands/member.ts +4 -5
  76. package/src/commands/mentoring.ts +36 -19
  77. package/src/commands/notice.ts +4 -5
  78. package/src/commands/room.ts +4 -5
  79. package/src/commands/team.ts +4 -5
  80. package/src/credential-manager.test.ts +42 -2
  81. package/src/credential-manager.ts +104 -3
  82. package/src/errors.ts +10 -0
  83. package/src/formatters.test.ts +1 -1
  84. package/src/formatters.ts +91 -18
  85. package/src/http.test.ts +75 -10
  86. package/src/http.ts +228 -10
  87. package/src/index.ts +1 -0
  88. package/src/session-recovery.ts +56 -0
  89. package/src/shared/utils/mentoring-params.test.ts +9 -4
  90. package/src/shared/utils/mentoring-params.ts +6 -3
  91. package/src/shared/utils/swmaestro.ts +2 -2
  92. package/src/token-extractor.test.ts +46 -8
  93. package/src/token-extractor.ts +115 -22
  94. package/src/types.test.ts +4 -2
  95. package/src/types.ts +7 -0
  96. package/.claude-plugin/README.md +0 -145
  97. package/.claude-plugin/plugin.json +0 -23
  98. package/.github/workflows/release.yml +0 -86
  99. package/.oxfmtrc.json +0 -9
  100. package/.oxlintrc.json +0 -4
  101. package/AGENTS.md +0 -78
  102. package/README.md +0 -252
  103. package/bun.lock +0 -297
  104. package/bunfig.toml +0 -2
  105. package/e2e/.gitkeep +0 -0
  106. package/skills/opensoma/SKILL.md +0 -345
  107. package/skills/opensoma/references/common-patterns.md +0 -182
  108. package/skills/opensoma/references/output-format.md +0 -130
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opensoma",
3
- "version": "0.1.3",
3
+ "version": "0.2.1",
4
4
  "description": "SWMaestro MyPage CLI & SDK for AI agents",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -8,7 +8,7 @@
8
8
  "url": "git+https://github.com/devxoul/opensoma.git"
9
9
  },
10
10
  "bin": {
11
- "opensoma": "./src/cli.ts"
11
+ "opensoma": "dist/src/cli.js"
12
12
  },
13
13
  "type": "module",
14
14
  "main": "dist/src/index.js",
@@ -25,6 +25,22 @@
25
25
  ".": {
26
26
  "types": "./src/index.ts",
27
27
  "default": "./src/index.ts"
28
+ },
29
+ "./client": {
30
+ "types": "./src/client.ts",
31
+ "default": "./src/client.ts"
32
+ },
33
+ "./types": {
34
+ "types": "./src/types.ts",
35
+ "default": "./src/types.ts"
36
+ },
37
+ "./constants": {
38
+ "types": "./src/constants.ts",
39
+ "default": "./src/constants.ts"
40
+ },
41
+ "./shared/utils/mentoring-params": {
42
+ "types": "./src/shared/utils/mentoring-params.ts",
43
+ "default": "./src/shared/utils/mentoring-params.ts"
28
44
  }
29
45
  },
30
46
  "scripts": {
@@ -6,10 +6,12 @@ export interface SomaClientOptions {
6
6
  csrfToken?: string;
7
7
  username?: string;
8
8
  password?: string;
9
+ verbose?: boolean;
9
10
  }
10
11
  export declare class SomaClient {
11
12
  private readonly http;
12
13
  private readonly options;
14
+ private loginCredentials;
13
15
  readonly mentoring: {
14
16
  list(options?: {
15
17
  status?: string;
@@ -90,9 +92,17 @@ export declare class SomaClient {
90
92
  apply(id: number): Promise<void>;
91
93
  };
92
94
  constructor(options?: SomaClientOptions);
95
+ getSessionData(): {
96
+ sessionCookie: string | undefined;
97
+ csrfToken: string | null;
98
+ };
99
+ private requireAuth;
93
100
  private resolveUser;
94
101
  login(username?: string, password?: string): Promise<void>;
95
102
  isLoggedIn(): Promise<boolean>;
103
+ logout(): Promise<void>;
96
104
  saveCredentials(manager?: CredentialManager): Promise<void>;
105
+ private containsErrorIndicator;
106
+ private extractErrorMessage;
97
107
  }
98
108
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { MENU_NO } from './constants.js';
2
2
  import { CredentialManager } from './credential-manager.js';
3
+ import { AuthenticationError } from './errors.js';
3
4
  import * as formatters from './formatters.js';
4
5
  import { SomaHttp } from './http.js';
5
6
  import { buildMentoringListParams } from './shared/utils/mentoring-params.js';
@@ -7,6 +8,7 @@ import { buildApplicationPayload, buildCancelApplicationPayload, buildDeleteMent
7
8
  export class SomaClient {
8
9
  http;
9
10
  options;
11
+ loginCredentials;
10
12
  mentoring;
11
13
  room;
12
14
  dashboard;
@@ -16,9 +18,16 @@ export class SomaClient {
16
18
  event;
17
19
  constructor(options = {}) {
18
20
  this.options = options;
19
- this.http = new SomaHttp({ sessionCookie: options.sessionCookie, csrfToken: options.csrfToken });
21
+ this.loginCredentials =
22
+ options.username && options.password ? { username: options.username, password: options.password } : null;
23
+ this.http = new SomaHttp({
24
+ sessionCookie: options.sessionCookie,
25
+ csrfToken: options.csrfToken,
26
+ verbose: options.verbose,
27
+ });
20
28
  this.mentoring = {
21
29
  list: async (options) => {
30
+ await this.requireAuth();
22
31
  const user = options?.search?.me ? await this.resolveUser() : undefined;
23
32
  const html = await this.http.get('/mypage/mentoLec/list.do', buildMentoringListParams({
24
33
  status: options?.status,
@@ -27,46 +36,74 @@ export class SomaClient {
27
36
  search: options?.search,
28
37
  user,
29
38
  }));
30
- return { items: formatters.parseMentoringList(html), pagination: formatters.parsePagination(html) };
39
+ return {
40
+ items: formatters.parseMentoringList(html),
41
+ pagination: formatters.parsePagination(html),
42
+ };
43
+ },
44
+ get: async (id) => {
45
+ await this.requireAuth();
46
+ return formatters.parseMentoringDetail(await this.http.get('/mypage/mentoLec/view.do', {
47
+ menuNo: MENU_NO.MENTORING,
48
+ qustnrSn: String(id),
49
+ }), id);
31
50
  },
32
- get: async (id) => formatters.parseMentoringDetail(await this.http.get('/mypage/mentoLec/view.do', { menuNo: MENU_NO.MENTORING, qustnrSn: String(id) }), id),
33
51
  create: async (params) => {
34
- await this.http.post('/mypage/mentoLec/insert.do', buildMentoringPayload(params));
52
+ await this.requireAuth();
53
+ const html = await this.http.post('/mypage/mentoLec/insert.do', buildMentoringPayload(params));
54
+ if (this.containsErrorIndicator(html)) {
55
+ throw new Error(this.extractErrorMessage(html) || '멘토링 등록에 실패했습니다.');
56
+ }
35
57
  },
36
58
  delete: async (id) => {
59
+ await this.requireAuth();
37
60
  await this.http.post('/mypage/mentoLec/delete.do', buildDeleteMentoringPayload(id));
38
61
  },
39
62
  apply: async (id) => {
63
+ await this.requireAuth();
40
64
  await this.http.post('/application/application/application.do', buildApplicationPayload(id));
41
65
  },
42
66
  cancel: async (params) => {
67
+ await this.requireAuth();
43
68
  await this.http.post('/mypage/userAnswer/cancel.do', buildCancelApplicationPayload(params));
44
69
  },
45
70
  history: async (options) => {
71
+ await this.requireAuth();
46
72
  const html = await this.http.get('/mypage/userAnswer/history.do', {
47
73
  menuNo: MENU_NO.APPLICATION_HISTORY,
48
74
  ...(options?.page ? { pageIndex: String(options.page) } : {}),
49
75
  });
50
- return { items: formatters.parseApplicationHistory(html), pagination: formatters.parsePagination(html) };
76
+ return {
77
+ items: formatters.parseApplicationHistory(html),
78
+ pagination: formatters.parsePagination(html),
79
+ };
51
80
  },
52
81
  };
53
82
  this.room = {
54
- list: async (options) => formatters.parseRoomList(await this.http.post('/mypage/officeMng/list.do', {
55
- menuNo: MENU_NO.ROOM,
56
- sdate: options?.date ?? new Date().toISOString().slice(0, 10),
57
- searchItemId: options?.room ? String(resolveRoomId(options.room)) : '',
58
- })),
59
- available: async (roomId, date) => formatters.parseRoomSlots(await this.http.post('/mypage/officeMng/rentTime.do', {
60
- viewType: 'CONTBODY',
61
- itemId: String(roomId),
62
- rentDt: date,
63
- })),
83
+ list: async (options) => {
84
+ await this.requireAuth();
85
+ return formatters.parseRoomList(await this.http.post('/mypage/officeMng/list.do', {
86
+ menuNo: MENU_NO.ROOM,
87
+ sdate: options?.date ?? new Date().toISOString().slice(0, 10),
88
+ searchItemId: options?.room ? String(resolveRoomId(options.room)) : '',
89
+ }));
90
+ },
91
+ available: async (roomId, date) => {
92
+ await this.requireAuth();
93
+ return formatters.parseRoomSlots(await this.http.post('/mypage/officeMng/rentTime.do', {
94
+ viewType: 'CONTBODY',
95
+ itemId: String(roomId),
96
+ rentDt: date,
97
+ }));
98
+ },
64
99
  reserve: async (params) => {
100
+ await this.requireAuth();
65
101
  await this.http.post('/mypage/itemRent/insert.do', buildRoomReservationPayload(params));
66
102
  },
67
103
  };
68
104
  this.dashboard = {
69
105
  get: async () => {
106
+ await this.requireAuth();
70
107
  const [dashboard, { items: myMentoring }] = await Promise.all([
71
108
  formatters.parseDashboard(await this.http.get('/mypage/myMain/dashboard.do', { menuNo: MENU_NO.DASHBOARD })),
72
109
  this.mentoring.list({ search: { field: 'author', value: '@me', me: true } }),
@@ -75,40 +112,87 @@ export class SomaClient {
75
112
  title: item.title,
76
113
  url: `/mypage/mentoLec/view.do?qustnrSn=${item.id}`,
77
114
  status: item.status,
115
+ date: item.sessionDate,
116
+ time: item.sessionTime.start,
117
+ timeEnd: item.sessionTime.end,
118
+ type: item.type,
78
119
  }));
79
120
  return dashboard;
80
121
  },
81
122
  };
82
123
  this.notice = {
83
124
  list: async (options) => {
125
+ await this.requireAuth();
84
126
  const html = await this.http.get('/mypage/myNotice/list.do', {
85
127
  menuNo: MENU_NO.NOTICE,
86
128
  ...(options?.page ? { pageIndex: String(options.page) } : {}),
87
129
  });
88
- return { items: formatters.parseNoticeList(html), pagination: formatters.parsePagination(html) };
130
+ return {
131
+ items: formatters.parseNoticeList(html),
132
+ pagination: formatters.parsePagination(html),
133
+ };
134
+ },
135
+ get: async (id) => {
136
+ await this.requireAuth();
137
+ return formatters.parseNoticeDetail(await this.http.get('/mypage/myNotice/view.do', {
138
+ menuNo: MENU_NO.NOTICE,
139
+ nttId: String(id),
140
+ }), id);
89
141
  },
90
- get: async (id) => formatters.parseNoticeDetail(await this.http.get('/mypage/myNotice/view.do', { menuNo: MENU_NO.NOTICE, nttId: String(id) }), id),
91
142
  };
92
143
  this.team = {
93
- show: async () => formatters.parseTeamInfo(await this.http.get('/mypage/myTeam/team.do', { menuNo: MENU_NO.TEAM })),
144
+ show: async () => {
145
+ await this.requireAuth();
146
+ return formatters.parseTeamInfo(await this.http.get('/mypage/myTeam/team.do', { menuNo: MENU_NO.TEAM }));
147
+ },
94
148
  };
95
149
  this.member = {
96
- show: async () => formatters.parseMemberInfo(await this.http.get('/mypage/myInfo/forUpdateMy.do', { menuNo: MENU_NO.MEMBER_INFO })),
150
+ show: async () => {
151
+ await this.requireAuth();
152
+ return formatters.parseMemberInfo(await this.http.get('/mypage/myInfo/forUpdateMy.do', { menuNo: MENU_NO.MEMBER_INFO }));
153
+ },
97
154
  };
98
155
  this.event = {
99
156
  list: async (options) => {
157
+ await this.requireAuth();
100
158
  const html = await this.http.get('/mypage/applicants/list.do', {
101
159
  menuNo: MENU_NO.EVENT,
102
160
  ...(options?.page ? { pageIndex: String(options.page) } : {}),
103
161
  });
104
- return { items: formatters.parseEventList(html), pagination: formatters.parsePagination(html) };
162
+ return {
163
+ items: formatters.parseEventList(html),
164
+ pagination: formatters.parsePagination(html),
165
+ };
166
+ },
167
+ get: async (id) => {
168
+ await this.requireAuth();
169
+ return parseEventDetail(await this.http.get('/mypage/applicants/view.do', {
170
+ menuNo: MENU_NO.EVENT,
171
+ bbsId: String(id),
172
+ }));
105
173
  },
106
- get: async (id) => parseEventDetail(await this.http.get('/mypage/applicants/view.do', { menuNo: MENU_NO.EVENT, bbsId: String(id) })),
107
174
  apply: async (id) => {
175
+ await this.requireAuth();
108
176
  await this.http.post('/application/application/application.do', buildApplicationPayload(id));
109
177
  },
110
178
  };
111
179
  }
180
+ getSessionData() {
181
+ return {
182
+ sessionCookie: this.http.getSessionCookie(),
183
+ csrfToken: this.http.getCsrfToken(),
184
+ };
185
+ }
186
+ async requireAuth() {
187
+ let identity = await this.http.checkLogin();
188
+ if (!identity && this.loginCredentials) {
189
+ await this.http.login(this.loginCredentials.username, this.loginCredentials.password);
190
+ identity = await this.http.checkLogin();
191
+ }
192
+ if (!identity) {
193
+ throw new AuthenticationError();
194
+ }
195
+ }
112
196
  async resolveUser() {
113
197
  const identity = await this.http.checkLogin();
114
198
  return identity ?? undefined;
@@ -120,10 +204,17 @@ export class SomaClient {
120
204
  throw new Error('Username and password are required');
121
205
  }
122
206
  await this.http.login(resolvedUsername, resolvedPassword);
207
+ this.loginCredentials = {
208
+ username: resolvedUsername,
209
+ password: resolvedPassword,
210
+ };
123
211
  }
124
212
  async isLoggedIn() {
125
213
  return Boolean(await this.http.checkLogin());
126
214
  }
215
+ async logout() {
216
+ await this.http.logout();
217
+ }
127
218
  async saveCredentials(manager = new CredentialManager()) {
128
219
  const sessionCookie = this.http.getSessionCookie();
129
220
  const csrfToken = this.http.getCsrfToken();
@@ -133,9 +224,35 @@ export class SomaClient {
133
224
  await manager.setCredentials({
134
225
  sessionCookie,
135
226
  csrfToken,
136
- username: this.options.username,
227
+ username: this.loginCredentials?.username,
228
+ password: this.loginCredentials?.password,
137
229
  loggedInAt: new Date().toISOString(),
138
230
  });
139
231
  }
232
+ containsErrorIndicator(html) {
233
+ const errorPatterns = [
234
+ 'class="error"',
235
+ 'class="alert-danger"',
236
+ 'alert-error',
237
+ '오류가 발생했습니다',
238
+ '등록에 실패했습니다',
239
+ '실패하였습니다',
240
+ '잘못된 접근',
241
+ '권한이 없습니다',
242
+ '<script>alert(',
243
+ ];
244
+ return errorPatterns.some((pattern) => html.includes(pattern));
245
+ }
246
+ extractErrorMessage(html) {
247
+ const alertMatch = html.match(/<script>alert\(['"](.+?)['"]\)/);
248
+ if (alertMatch) {
249
+ return alertMatch[1];
250
+ }
251
+ const errorDivMatch = html.match(/class="error[^"]*"[^>]*>\s*([^<]+)/);
252
+ if (errorDivMatch) {
253
+ return errorDivMatch[1].trim();
254
+ }
255
+ return null;
256
+ }
140
257
  }
141
258
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,UAAU,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAqB,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACpD,OAAO,EAA6B,wBAAwB,EAAE,MAAM,iCAAiC,CAAA;AACrG,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,2BAA2B,EAC3B,qBAAqB,EACrB,2BAA2B,EAC3B,gBAAgB,EAChB,aAAa,GACd,MAAM,0BAA0B,CAAA;AAsBjC,MAAM,OAAO,UAAU;IACJ,IAAI,CAAU;IACd,OAAO,CAAmB;IAElC,SAAS,CAwBjB;IAEQ,IAAI,CAWZ;IAEQ,SAAS,CAEjB;IAEQ,MAAM,CAGd;IAEQ,IAAI,CAEZ;IAEQ,MAAM,CAEd;IAEQ,KAAK,CAIb;IAED,YAAY,UAA6B,EAAE;QACzC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;QAEhG,IAAI,CAAC,SAAS,GAAG;YACf,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBACtB,MAAM,IAAI,GAAG,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;gBACvE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAC9B,0BAA0B,EAC1B,wBAAwB,CAAC;oBACvB,MAAM,EAAE,OAAO,EAAE,MAAM;oBACvB,IAAI,EAAE,OAAO,EAAE,IAAI;oBACnB,IAAI,EAAE,OAAO,EAAE,IAAI;oBACnB,MAAM,EAAE,OAAO,EAAE,MAAM;oBACvB,IAAI;iBACL,CAAC,CACH,CAAA;gBACD,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAA;YACrG,CAAC;YACD,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChB,UAAU,CAAC,oBAAoB,CAC7B,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EACpG,EAAE,CACH;YACH,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBACvB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAA;YACnF,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;gBACnB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAA;YACrF,CAAC;YACD,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;gBAClB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,yCAAyC,EAAE,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAA;YAC9F,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBACvB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,8BAA8B,EAAE,6BAA6B,CAAC,MAAM,CAAC,CAAC,CAAA;YAC7F,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBACzB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,+BAA+B,EAAE;oBAChE,MAAM,EAAE,OAAO,CAAC,mBAAmB;oBACnC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9D,CAAC,CAAA;gBACF,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAA;YAC1G,CAAC;SACF,CAAA;QAED,IAAI,CAAC,IAAI,GAAG;YACV,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CACtB,UAAU,CAAC,aAAa,CACtB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE;gBAChD,MAAM,EAAE,OAAO,CAAC,IAAI;gBACpB,KAAK,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC7D,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;aACvE,CAAC,CACH;YACH,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAChC,UAAU,CAAC,cAAc,CACvB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,+BAA+B,EAAE;gBACpD,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;gBACtB,MAAM,EAAE,IAAI;aACb,CAAC,CACH;YACH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBACxB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAA;YACzF,CAAC;SACF,CAAA;QAED,IAAI,CAAC,SAAS,GAAG;YACf,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAC5D,UAAU,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,6BAA6B,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;oBAC5G,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;iBAC7E,CAAC,CAAA;gBACF,SAAS,CAAC,iBAAiB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACvD,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,GAAG,EAAE,qCAAqC,IAAI,CAAC,EAAE,EAAE;oBACnD,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC,CAAC,CAAA;gBACH,OAAO,SAAS,CAAA;YAClB,CAAC;SACF,CAAA;QAED,IAAI,CAAC,MAAM,GAAG;YACZ,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE;oBAC3D,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9D,CAAC,CAAA;gBACF,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAA;YAClG,CAAC;YACD,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChB,UAAU,CAAC,iBAAiB,CAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9F,EAAE,CACH;SACJ,CAAA;QAED,IAAI,CAAC,IAAI,GAAG;YACV,IAAI,EAAE,KAAK,IAAI,EAAE,CACf,UAAU,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;SACpG,CAAA;QAED,IAAI,CAAC,MAAM,GAAG;YACZ,IAAI,EAAE,KAAK,IAAI,EAAE,CACf,UAAU,CAAC,eAAe,CACxB,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,+BAA+B,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CACtF;SACJ,CAAA;QAED,IAAI,CAAC,KAAK,GAAG;YACX,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE;oBAC7D,MAAM,EAAE,OAAO,CAAC,KAAK;oBACrB,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9D,CAAC,CAAA;gBACF,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAA;YACjG,CAAC;YACD,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChB,gBAAgB,CACd,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAChG;YACH,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;gBAClB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,yCAAyC,EAAE,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAA;YAC9F,CAAC;SACF,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAA;QAC7C,OAAO,QAAQ,IAAI,SAAS,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,QAAiB,EAAE,QAAiB;QAC9C,MAAM,gBAAgB,GAAG,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;QAC1D,MAAM,gBAAgB,GAAG,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;QAE1D,IAAI,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QACvD,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAA;IAC3D,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAO,GAAG,IAAI,iBAAiB,EAAE;QACrD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAA;QAE1C,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACzD,CAAC;QAED,MAAM,OAAO,CAAC,cAAc,CAAC;YAC3B,aAAa;YACb,SAAS;YACT,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC/B,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,CAAC,CAAA;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,19 @@
1
1
  import { Command } from 'commander';
2
+ import { CredentialManager } from '../credential-manager.js';
3
+ import { SomaHttp } from '../http.js';
4
+ import type { ExtractedSessionCandidate } from '../token-extractor.js';
5
+ type ExtractedSessionValidator = Pick<SomaHttp, 'checkLogin' | 'extractCsrfToken'>;
6
+ type CredentialStore = Pick<CredentialManager, 'getCredentials' | 'remove' | 'setCredentials'>;
7
+ type StatusValidator = Pick<SomaHttp, 'checkLogin'>;
8
+ type ReloginHttp = Pick<SomaHttp, 'checkLogin' | 'getCsrfToken' | 'getSessionCookie' | 'login'>;
9
+ export declare function resolveExtractedCredentials(candidates: ExtractedSessionCandidate[], createValidator?: (sessionCookie: string) => ExtractedSessionValidator): Promise<{
10
+ csrfToken: string;
11
+ sessionCookie: string;
12
+ } | null>;
13
+ export declare function inspectStoredAuthStatus(manager?: CredentialStore, createValidator?: (credentials: {
14
+ sessionCookie: string;
15
+ csrfToken: string;
16
+ }) => StatusValidator, createReloginHttp?: () => ReloginHttp): Promise<Record<string, boolean | null | string>>;
2
17
  export declare const authCommand: Command;
18
+ export {};
3
19
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA8HnC,eAAO,MAAM,WAAW,SA2BrB,CAAA"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAIlC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAKnE,KAAK,yBAAyB,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,GAAG,kBAAkB,CAAC,CAAA;AAClF,KAAK,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,GAAG,QAAQ,GAAG,gBAAgB,CAAC,CAAA;AAC9F,KAAK,eAAe,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;AACnD,KAAK,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,GAAG,cAAc,GAAG,kBAAkB,GAAG,OAAO,CAAC,CAAA;AAM/F,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,yBAAyB,EAAE,EACvC,eAAe,GAAE,CAAC,aAAa,EAAE,MAAM,KAAK,yBACX,GAChC,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAkB9D;AAgED,wBAAsB,uBAAuB,CAC3C,OAAO,GAAE,eAAyC,EAClD,eAAe,GAAE,CAAC,WAAW,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,KAAK,eACc,EAC9F,iBAAiB,GAAE,MAAM,WAAkC,GAC1D,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,CAuDlD;AAyCD,eAAO,MAAM,WAAW,SA2BrB,CAAA"}
@@ -1,9 +1,28 @@
1
1
  import { Command } from 'commander';
2
2
  import { CredentialManager } from '../credential-manager.js';
3
3
  import { SomaHttp } from '../http.js';
4
+ import { recoverSession } from '../session-recovery.js';
4
5
  import { handleError } from '../shared/utils/error-handler.js';
5
6
  import { formatOutput } from '../shared/utils/output.js';
6
- import { warn } from '../shared/utils/stderr.js';
7
+ const EXPIRED_SESSION_HINT = 'Session expired. Run: opensoma auth login or opensoma auth extract';
8
+ const UNVERIFIED_SESSION_HINT = 'Could not verify session. Try again or run: opensoma auth login or opensoma auth extract';
9
+ export async function resolveExtractedCredentials(candidates, createValidator = (sessionCookie) => new SomaHttp({ sessionCookie })) {
10
+ for (const candidate of candidates) {
11
+ const http = createValidator(candidate.sessionCookie);
12
+ try {
13
+ const valid = Boolean(await http.checkLogin());
14
+ if (!valid) {
15
+ continue;
16
+ }
17
+ return {
18
+ sessionCookie: candidate.sessionCookie,
19
+ csrfToken: await http.extractCsrfToken(),
20
+ };
21
+ }
22
+ catch { }
23
+ }
24
+ return null;
25
+ }
7
26
  async function loginAction(options) {
8
27
  try {
9
28
  const username = options.username ?? process.env.OPENSOMA_USERNAME;
@@ -13,15 +32,23 @@ async function loginAction(options) {
13
32
  }
14
33
  const http = new SomaHttp();
15
34
  await http.login(username, password);
16
- const sessionCookie = http.getSessionCookie();
17
35
  const csrfToken = http.getCsrfToken();
18
- if (!sessionCookie || !csrfToken) {
19
- throw new Error('Login succeeded but session information is missing');
36
+ if (!csrfToken) {
37
+ throw new Error('Login succeeded but CSRF token is missing');
38
+ }
39
+ const valid = Boolean(await http.checkLogin());
40
+ if (!valid) {
41
+ throw new Error('Login succeeded but session is not valid');
42
+ }
43
+ const sessionCookie = http.getSessionCookie();
44
+ if (!sessionCookie) {
45
+ throw new Error('Login succeeded but session cookie is missing');
20
46
  }
21
47
  await new CredentialManager().setCredentials({
22
48
  sessionCookie,
23
49
  csrfToken,
24
50
  username,
51
+ password,
25
52
  loggedInAt: new Date().toISOString(),
26
53
  });
27
54
  console.log(formatOutput({ ok: true, username, loggedIn: true }, options.pretty));
@@ -32,36 +59,81 @@ async function loginAction(options) {
32
59
  }
33
60
  async function logoutAction(options) {
34
61
  try {
35
- await new CredentialManager().remove();
36
- console.log(formatOutput({ ok: true, loggedIn: false }, options.pretty));
62
+ const manager = new CredentialManager();
63
+ const credentials = await manager.getCredentials();
64
+ let upstreamLoggedOut = false;
65
+ if (credentials) {
66
+ const http = new SomaHttp({ sessionCookie: credentials.sessionCookie, csrfToken: credentials.csrfToken });
67
+ try {
68
+ await http.logout();
69
+ upstreamLoggedOut = true;
70
+ }
71
+ catch { }
72
+ }
73
+ await manager.remove();
74
+ console.log(formatOutput({ ok: true, loggedIn: false, upstreamLoggedOut }, options.pretty));
37
75
  }
38
76
  catch (error) {
39
77
  handleError(error);
40
78
  }
41
79
  }
42
- async function statusAction(options) {
80
+ export async function inspectStoredAuthStatus(manager = new CredentialManager(), createValidator = (credentials) => new SomaHttp({ sessionCookie: credentials.sessionCookie, csrfToken: credentials.csrfToken }), createReloginHttp = () => new SomaHttp()) {
81
+ const creds = await manager.getCredentials();
82
+ if (!creds) {
83
+ return { authenticated: false, credentials: null };
84
+ }
85
+ let identity = null;
43
86
  try {
44
- const manager = new CredentialManager();
45
- const creds = await manager.getCredentials();
46
- if (!creds) {
47
- console.log(formatOutput({ authenticated: false, credentials: null }, options.pretty));
48
- return;
49
- }
50
- let valid = false;
87
+ identity = await createValidator(creds).checkLogin();
88
+ }
89
+ catch {
90
+ return {
91
+ authenticated: true,
92
+ valid: false,
93
+ username: creds.username ?? null,
94
+ loggedInAt: creds.loggedInAt ?? null,
95
+ hint: UNVERIFIED_SESSION_HINT,
96
+ };
97
+ }
98
+ if (!identity) {
51
99
  try {
52
- const http = new SomaHttp({ sessionCookie: creds.sessionCookie, csrfToken: creds.csrfToken });
53
- valid = Boolean(await http.checkLogin());
100
+ const refreshedCredentials = await recoverSession(creds, manager, createReloginHttp);
101
+ if (refreshedCredentials) {
102
+ return {
103
+ authenticated: true,
104
+ valid: true,
105
+ username: refreshedCredentials.username ?? null,
106
+ loggedInAt: refreshedCredentials.loggedInAt ?? null,
107
+ };
108
+ }
54
109
  }
55
110
  catch {
56
- valid = false;
111
+ return {
112
+ authenticated: true,
113
+ valid: false,
114
+ username: creds.username ?? null,
115
+ loggedInAt: creds.loggedInAt ?? null,
116
+ hint: UNVERIFIED_SESSION_HINT,
117
+ };
57
118
  }
58
- console.log(formatOutput({
59
- authenticated: true,
60
- valid,
61
- username: creds.username ?? null,
62
- loggedInAt: creds.loggedInAt ?? null,
63
- ...(valid ? {} : { hint: 'Session expired. Run: opensoma auth login or opensoma auth extract' }),
64
- }, options.pretty));
119
+ await manager.remove();
120
+ return {
121
+ authenticated: false,
122
+ credentials: null,
123
+ clearedStaleCredentials: true,
124
+ hint: EXPIRED_SESSION_HINT,
125
+ };
126
+ }
127
+ return {
128
+ authenticated: true,
129
+ valid: true,
130
+ username: creds.username ?? null,
131
+ loggedInAt: creds.loggedInAt ?? null,
132
+ };
133
+ }
134
+ async function statusAction(options) {
135
+ try {
136
+ console.log(formatOutput(await inspectStoredAuthStatus(), options.pretty));
65
137
  }
66
138
  catch (error) {
67
139
  handleError(error);
@@ -71,31 +143,20 @@ async function extractAction(options) {
71
143
  try {
72
144
  const { TokenExtractor } = (await import('../token-extractor.js'));
73
145
  const extractor = new TokenExtractor();
74
- const result = await extractor.extract();
75
- if (!result) {
146
+ const candidates = await extractor.extractCandidates();
147
+ if (candidates.length === 0) {
76
148
  throw new Error('No SWMaestro session found in any browser. Login to swmaestro.ai in a supported Chromium browser (Chrome, Edge, Brave, Arc, Vivaldi) first.');
77
149
  }
78
- const http = new SomaHttp({ sessionCookie: result.sessionCookie });
79
- let valid = false;
80
- let csrfToken;
81
- try {
82
- valid = Boolean(await http.checkLogin());
83
- if (valid) {
84
- csrfToken = await http.extractCsrfToken();
85
- }
86
- }
87
- catch {
88
- valid = false;
89
- }
90
- if (!valid) {
91
- warn('Warning: Could not validate session. Cookies may be expired.');
150
+ const credentials = await resolveExtractedCredentials(candidates);
151
+ if (!credentials) {
152
+ throw new Error('Found SWMaestro session cookies in supported browsers, but none are valid. Refresh your swmaestro.ai login in a supported Chromium browser and try again.');
92
153
  }
93
154
  await new CredentialManager().setCredentials({
94
- sessionCookie: result.sessionCookie,
95
- csrfToken: csrfToken ?? '',
155
+ sessionCookie: credentials.sessionCookie,
156
+ csrfToken: credentials.csrfToken,
96
157
  loggedInAt: new Date().toISOString(),
97
158
  });
98
- console.log(formatOutput({ ok: true, extracted: true, valid }, options.pretty));
159
+ console.log(formatOutput({ ok: true, extracted: true, valid: true }, options.pretty));
99
160
  }
100
161
  catch (error) {
101
162
  handleError(error);
@@ -110,7 +171,7 @@ export const authCommand = new Command('auth')
110
171
  .option('--pretty', 'Pretty print JSON output')
111
172
  .action(loginAction))
112
173
  .addCommand(new Command('logout')
113
- .description('Remove saved credentials')
174
+ .description('Log out upstream session and remove saved credentials')
114
175
  .option('--pretty', 'Pretty print JSON output')
115
176
  .action(logoutAction))
116
177
  .addCommand(new Command('status')