@proletariat/cli 0.3.87 → 0.3.88
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/commands/init.d.ts +6 -1
- package/dist/commands/init.js +44 -89
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/new.d.ts +30 -2
- package/dist/commands/new.js +141 -9
- package/dist/commands/new.js.map +1 -1
- package/dist/hooks/init.js +3 -6
- package/dist/hooks/init.js.map +1 -1
- package/dist/lib/asana/config.d.ts +1 -1
- package/dist/lib/asana/config.js +18 -30
- package/dist/lib/asana/config.js.map +1 -1
- package/dist/lib/asana/mapper.d.ts +4 -3
- package/dist/lib/asana/mapper.js +17 -10
- package/dist/lib/asana/mapper.js.map +1 -1
- package/dist/lib/database/agents.d.ts +73 -0
- package/dist/lib/database/agents.js +341 -0
- package/dist/lib/database/agents.js.map +1 -0
- package/dist/lib/database/driver.d.ts +115 -0
- package/dist/lib/database/driver.js +109 -0
- package/dist/lib/database/driver.js.map +1 -0
- package/dist/lib/database/index.d.ts +25 -287
- package/dist/lib/database/index.js +35 -1067
- package/dist/lib/database/index.js.map +1 -1
- package/dist/lib/database/media.d.ts +53 -0
- package/dist/lib/database/media.js +118 -0
- package/dist/lib/database/media.js.map +1 -0
- package/dist/lib/database/pmo-bootstrap.d.ts +30 -0
- package/dist/lib/database/pmo-bootstrap.js +105 -0
- package/dist/lib/database/pmo-bootstrap.js.map +1 -0
- package/dist/lib/database/repositories.d.ts +26 -0
- package/dist/lib/database/repositories.js +56 -0
- package/dist/lib/database/repositories.js.map +1 -0
- package/dist/lib/database/settings-store.d.ts +60 -0
- package/dist/lib/database/settings-store.js +87 -0
- package/dist/lib/database/settings-store.js.map +1 -0
- package/dist/lib/database/themes.d.ts +59 -0
- package/dist/lib/database/themes.js +212 -0
- package/dist/lib/database/themes.js.map +1 -0
- package/dist/lib/database/workspace.d.ts +46 -0
- package/dist/lib/database/workspace.js +158 -0
- package/dist/lib/database/workspace.js.map +1 -0
- package/dist/lib/database/worktrees.d.ts +33 -0
- package/dist/lib/database/worktrees.js +60 -0
- package/dist/lib/database/worktrees.js.map +1 -0
- package/dist/lib/execution/config.d.ts +1 -1
- package/dist/lib/execution/config.js +7 -17
- package/dist/lib/execution/config.js.map +1 -1
- package/dist/lib/execution/spawner.d.ts +1 -1
- package/dist/lib/execution/storage.d.ts +4 -3
- package/dist/lib/execution/storage.js +11 -4
- package/dist/lib/execution/storage.js.map +1 -1
- package/dist/lib/external-issues/mapping-store.d.ts +4 -3
- package/dist/lib/external-issues/mapping-store.js +21 -13
- package/dist/lib/external-issues/mapping-store.js.map +1 -1
- package/dist/lib/external-issues/outbound-sync.d.ts +1 -1
- package/dist/lib/jira/config.d.ts +1 -6
- package/dist/lib/jira/config.js +16 -33
- package/dist/lib/jira/config.js.map +1 -1
- package/dist/lib/linear/config.d.ts +1 -1
- package/dist/lib/linear/config.js +16 -38
- package/dist/lib/linear/config.js.map +1 -1
- package/dist/lib/linear/mapper.d.ts +4 -3
- package/dist/lib/linear/mapper.js +20 -13
- package/dist/lib/linear/mapper.js.map +1 -1
- package/dist/lib/monday/config.d.ts +1 -1
- package/dist/lib/monday/config.js +16 -32
- package/dist/lib/monday/config.js.map +1 -1
- package/dist/lib/monday/mapper.d.ts +4 -3
- package/dist/lib/monday/mapper.js +19 -12
- package/dist/lib/monday/mapper.js.map +1 -1
- package/dist/lib/onboarding/wizard.d.ts +2 -2
- package/dist/lib/onboarding/wizard.js +32 -24
- package/dist/lib/onboarding/wizard.js.map +1 -1
- package/dist/lib/pmo/diet.d.ts +1 -1
- package/dist/lib/pmo/storage/index.d.ts +8 -0
- package/dist/lib/pmo/storage/index.js +13 -1
- package/dist/lib/pmo/storage/index.js.map +1 -1
- package/dist/lib/pmo/storage/types.d.ts +4 -1
- package/dist/lib/shortcut/config.d.ts +1 -7
- package/dist/lib/shortcut/config.js +13 -32
- package/dist/lib/shortcut/config.js.map +1 -1
- package/dist/lib/trello/config.d.ts +1 -26
- package/dist/lib/trello/config.js +23 -64
- package/dist/lib/trello/config.js.map +1 -1
- package/dist/lib/trello/mapper.d.ts +4 -3
- package/dist/lib/trello/mapper.js +17 -10
- package/dist/lib/trello/mapper.js.map +1 -1
- package/dist/lib/work-lifecycle/post-execution.d.ts +1 -1
- package/dist/lib/work-source/config.d.ts +1 -1
- package/dist/lib/work-source/config.js +14 -24
- package/dist/lib/work-source/config.js.map +1 -1
- package/dist/lib/work-source/provider-sources.d.ts +1 -1
- package/dist/lib/work-source/provider-sources.js +8 -20
- package/dist/lib/work-source/provider-sources.js.map +1 -1
- package/oclif.manifest.json +1461 -1412
- package/package.json +1 -1
|
@@ -4,39 +4,13 @@
|
|
|
4
4
|
* Stores Linear credentials and preferences in the workspace_settings table.
|
|
5
5
|
*/
|
|
6
6
|
import { loadProviderSources, resolveApiKey } from '../work-source/provider-sources.js';
|
|
7
|
-
|
|
8
|
-
// Config keys stored in workspace_settings table
|
|
7
|
+
import { SettingsStore } from '../database/settings-store.js';
|
|
9
8
|
const LINEAR_CONFIG_KEYS = {
|
|
10
9
|
apiKey: 'linear.api_key',
|
|
11
10
|
defaultTeamId: 'linear.default_team_id',
|
|
12
11
|
defaultTeamKey: 'linear.default_team_key',
|
|
13
12
|
organizationName: 'linear.organization_name',
|
|
14
13
|
};
|
|
15
|
-
/**
|
|
16
|
-
* Get a setting value from the database.
|
|
17
|
-
*/
|
|
18
|
-
function getSetting(db, key) {
|
|
19
|
-
const row = db
|
|
20
|
-
.prepare(`SELECT value FROM ${SETTINGS_TABLE} WHERE key = ?`)
|
|
21
|
-
.get(key);
|
|
22
|
-
return row?.value ?? null;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Set a setting value in the database.
|
|
26
|
-
*/
|
|
27
|
-
function setSetting(db, key, value) {
|
|
28
|
-
db.prepare(`
|
|
29
|
-
INSERT INTO ${SETTINGS_TABLE} (key, value)
|
|
30
|
-
VALUES (?, ?)
|
|
31
|
-
ON CONFLICT(key) DO UPDATE SET value = excluded.value
|
|
32
|
-
`).run(key, value);
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Delete a setting from the database.
|
|
36
|
-
*/
|
|
37
|
-
function deleteSetting(db, key) {
|
|
38
|
-
db.prepare(`DELETE FROM ${SETTINGS_TABLE} WHERE key = ?`).run(key);
|
|
39
|
-
}
|
|
40
14
|
// =============================================================================
|
|
41
15
|
// Public API
|
|
42
16
|
// =============================================================================
|
|
@@ -44,48 +18,52 @@ function deleteSetting(db, key) {
|
|
|
44
18
|
* Check if Linear is configured (API key is stored).
|
|
45
19
|
*/
|
|
46
20
|
export function isLinearConfigured(db) {
|
|
47
|
-
|
|
21
|
+
const settings = new SettingsStore(db);
|
|
22
|
+
return settings.has(LINEAR_CONFIG_KEYS.apiKey);
|
|
48
23
|
}
|
|
49
24
|
/**
|
|
50
25
|
* Load Linear configuration from the database.
|
|
51
26
|
* Returns null if not configured.
|
|
52
27
|
*/
|
|
53
28
|
export function loadLinearConfig(db) {
|
|
54
|
-
const
|
|
29
|
+
const settings = new SettingsStore(db);
|
|
30
|
+
const apiKey = settings.get(LINEAR_CONFIG_KEYS.apiKey);
|
|
55
31
|
if (!apiKey)
|
|
56
32
|
return null;
|
|
57
33
|
return {
|
|
58
34
|
apiKey,
|
|
59
|
-
defaultTeamId:
|
|
60
|
-
defaultTeamKey:
|
|
61
|
-
organizationName:
|
|
35
|
+
defaultTeamId: settings.get(LINEAR_CONFIG_KEYS.defaultTeamId) ?? undefined,
|
|
36
|
+
defaultTeamKey: settings.get(LINEAR_CONFIG_KEYS.defaultTeamKey) ?? undefined,
|
|
37
|
+
organizationName: settings.get(LINEAR_CONFIG_KEYS.organizationName) ?? undefined,
|
|
62
38
|
};
|
|
63
39
|
}
|
|
64
40
|
/**
|
|
65
41
|
* Save Linear API key to the database.
|
|
66
42
|
*/
|
|
67
43
|
export function saveLinearApiKey(db, apiKey) {
|
|
68
|
-
|
|
44
|
+
new SettingsStore(db).set(LINEAR_CONFIG_KEYS.apiKey, apiKey);
|
|
69
45
|
}
|
|
70
46
|
/**
|
|
71
47
|
* Save the default team for Linear operations.
|
|
72
48
|
*/
|
|
73
49
|
export function saveLinearDefaultTeam(db, teamId, teamKey) {
|
|
74
|
-
|
|
75
|
-
|
|
50
|
+
const settings = new SettingsStore(db);
|
|
51
|
+
settings.set(LINEAR_CONFIG_KEYS.defaultTeamId, teamId);
|
|
52
|
+
settings.set(LINEAR_CONFIG_KEYS.defaultTeamKey, teamKey);
|
|
76
53
|
}
|
|
77
54
|
/**
|
|
78
55
|
* Save the organization name.
|
|
79
56
|
*/
|
|
80
57
|
export function saveLinearOrganization(db, name) {
|
|
81
|
-
|
|
58
|
+
new SettingsStore(db).set(LINEAR_CONFIG_KEYS.organizationName, name);
|
|
82
59
|
}
|
|
83
60
|
/**
|
|
84
61
|
* Clear all Linear configuration from the database.
|
|
85
62
|
*/
|
|
86
63
|
export function clearLinearConfig(db) {
|
|
64
|
+
const settings = new SettingsStore(db);
|
|
87
65
|
for (const key of Object.values(LINEAR_CONFIG_KEYS)) {
|
|
88
|
-
|
|
66
|
+
settings.delete(key);
|
|
89
67
|
}
|
|
90
68
|
}
|
|
91
69
|
/**
|
|
@@ -117,6 +95,6 @@ export function getLinearApiKey(db) {
|
|
|
117
95
|
if (envKey)
|
|
118
96
|
return envKey;
|
|
119
97
|
// 3. Legacy: stored workspace setting
|
|
120
|
-
return
|
|
98
|
+
return new SettingsStore(db).get(LINEAR_CONFIG_KEYS.apiKey);
|
|
121
99
|
}
|
|
122
100
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/linear/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/linear/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
* Converts Linear issues to PMO tickets and manages the mapping table.
|
|
5
5
|
* Handles import (Linear → PMO) and reverse lookup for sync operations.
|
|
6
6
|
*/
|
|
7
|
-
import Database from 'better-sqlite3';
|
|
7
|
+
import type Database from 'better-sqlite3';
|
|
8
8
|
import type { CreateTicketInput, PMOStorage, WorkflowStatus } from '../pmo/types.js';
|
|
9
9
|
import type { LinearIssue, LinearIssueMap, LinearSyncResult } from './types.js';
|
|
10
|
+
import { type DatabaseDriver } from '../database/driver.js';
|
|
10
11
|
export declare class LinearMapper {
|
|
11
|
-
private
|
|
12
|
+
private driver;
|
|
12
13
|
private externalMappingStore;
|
|
13
|
-
constructor(
|
|
14
|
+
constructor(dbOrDriver: DatabaseDriver | Database.Database);
|
|
14
15
|
/**
|
|
15
16
|
* Ensure the external_issue_map table exists.
|
|
16
17
|
* Uses CREATE TABLE IF NOT EXISTS to match the schema defined in schema.ts.
|
|
@@ -7,12 +7,19 @@
|
|
|
7
7
|
import { PMO_TABLES } from '../pmo/schema.js';
|
|
8
8
|
import { ExternalExecutionMappingStore } from '../external-issues/mapping-store.js';
|
|
9
9
|
import { LINEAR_STATE_TO_PMO_CATEGORY, LINEAR_PRIORITY_TO_PMO, } from './types.js';
|
|
10
|
+
import { wrapDatabase } from '../database/driver.js';
|
|
11
|
+
function toDriver(dbOrDriver) {
|
|
12
|
+
if ('prepare' in dbOrDriver && 'pragma' in dbOrDriver && !('raw' in dbOrDriver)) {
|
|
13
|
+
return wrapDatabase(dbOrDriver);
|
|
14
|
+
}
|
|
15
|
+
return dbOrDriver;
|
|
16
|
+
}
|
|
10
17
|
export class LinearMapper {
|
|
11
|
-
|
|
18
|
+
driver;
|
|
12
19
|
externalMappingStore;
|
|
13
|
-
constructor(
|
|
14
|
-
this.
|
|
15
|
-
this.externalMappingStore = new ExternalExecutionMappingStore(
|
|
20
|
+
constructor(dbOrDriver) {
|
|
21
|
+
this.driver = toDriver(dbOrDriver);
|
|
22
|
+
this.externalMappingStore = new ExternalExecutionMappingStore(this.driver);
|
|
16
23
|
this.ensureTable();
|
|
17
24
|
}
|
|
18
25
|
/**
|
|
@@ -20,7 +27,7 @@ export class LinearMapper {
|
|
|
20
27
|
* Uses CREATE TABLE IF NOT EXISTS to match the schema defined in schema.ts.
|
|
21
28
|
*/
|
|
22
29
|
ensureTable() {
|
|
23
|
-
this.
|
|
30
|
+
this.driver.exec(`
|
|
24
31
|
CREATE TABLE IF NOT EXISTS ${PMO_TABLES.external_issue_map} (
|
|
25
32
|
pmo_ticket_id TEXT NOT NULL REFERENCES ${PMO_TABLES.tickets}(id) ON DELETE CASCADE,
|
|
26
33
|
provider TEXT NOT NULL CHECK (provider IN ('linear', 'jira', 'shortcut', 'trello', 'github')),
|
|
@@ -34,11 +41,11 @@ export class LinearMapper {
|
|
|
34
41
|
UNIQUE (provider, external_id)
|
|
35
42
|
)
|
|
36
43
|
`);
|
|
37
|
-
this.
|
|
44
|
+
this.driver.exec(`
|
|
38
45
|
CREATE INDEX IF NOT EXISTS idx_pmo_external_issue_map_external_id
|
|
39
46
|
ON ${PMO_TABLES.external_issue_map}(provider, external_id)
|
|
40
47
|
`);
|
|
41
|
-
this.
|
|
48
|
+
this.driver.exec(`
|
|
42
49
|
CREATE INDEX IF NOT EXISTS idx_pmo_external_issue_map_external_key_eim
|
|
43
50
|
ON ${PMO_TABLES.external_issue_map}(provider, external_key)
|
|
44
51
|
`);
|
|
@@ -174,7 +181,7 @@ export class LinearMapper {
|
|
|
174
181
|
* Create a mapping record.
|
|
175
182
|
*/
|
|
176
183
|
createMapping(map) {
|
|
177
|
-
this.
|
|
184
|
+
this.driver.prepare(`
|
|
178
185
|
INSERT INTO ${PMO_TABLES.external_issue_map}
|
|
179
186
|
(pmo_ticket_id, provider, external_id, external_key, external_url, team_key, sync_direction, created_at)
|
|
180
187
|
VALUES (?, 'linear', ?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
|
|
@@ -196,7 +203,7 @@ export class LinearMapper {
|
|
|
196
203
|
* Get a mapping by PMO ticket ID.
|
|
197
204
|
*/
|
|
198
205
|
getByTicketId(ticketId) {
|
|
199
|
-
const row = this.
|
|
206
|
+
const row = this.driver.prepare(`
|
|
200
207
|
SELECT * FROM ${PMO_TABLES.external_issue_map} WHERE pmo_ticket_id = ? AND provider = 'linear'
|
|
201
208
|
`).get(ticketId);
|
|
202
209
|
return row ? this.rowToMap(row) : null;
|
|
@@ -205,7 +212,7 @@ export class LinearMapper {
|
|
|
205
212
|
* Get a mapping by Linear issue ID.
|
|
206
213
|
*/
|
|
207
214
|
getByLinearId(linearIssueId) {
|
|
208
|
-
const row = this.
|
|
215
|
+
const row = this.driver.prepare(`
|
|
209
216
|
SELECT * FROM ${PMO_TABLES.external_issue_map} WHERE provider = 'linear' AND external_id = ?
|
|
210
217
|
`).get(linearIssueId);
|
|
211
218
|
if (row) {
|
|
@@ -218,7 +225,7 @@ export class LinearMapper {
|
|
|
218
225
|
* Get a mapping by Linear identifier (e.g., "ENG-123").
|
|
219
226
|
*/
|
|
220
227
|
getByIdentifier(identifier) {
|
|
221
|
-
const row = this.
|
|
228
|
+
const row = this.driver.prepare(`
|
|
222
229
|
SELECT * FROM ${PMO_TABLES.external_issue_map} WHERE provider = 'linear' AND external_key = ?
|
|
223
230
|
`).get(identifier);
|
|
224
231
|
if (row) {
|
|
@@ -231,7 +238,7 @@ export class LinearMapper {
|
|
|
231
238
|
* List all mappings.
|
|
232
239
|
*/
|
|
233
240
|
listMappings() {
|
|
234
|
-
const rows = this.
|
|
241
|
+
const rows = this.driver.prepare(`
|
|
235
242
|
SELECT * FROM ${PMO_TABLES.external_issue_map} WHERE provider = 'linear' ORDER BY created_at DESC
|
|
236
243
|
`).all();
|
|
237
244
|
return rows.map((row) => this.rowToMap(row));
|
|
@@ -260,7 +267,7 @@ export class LinearMapper {
|
|
|
260
267
|
* Delete a mapping by PMO ticket ID.
|
|
261
268
|
*/
|
|
262
269
|
deleteMapping(pmoTicketId) {
|
|
263
|
-
this.
|
|
270
|
+
this.driver.prepare(`
|
|
264
271
|
DELETE FROM ${PMO_TABLES.external_issue_map} WHERE pmo_ticket_id = ? AND provider = 'linear'
|
|
265
272
|
`).run(pmoTicketId);
|
|
266
273
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../../src/lib/linear/mapper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAA;AAQnF,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../../src/lib/linear/mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import Database from 'better-sqlite3';
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
2
|
import type { MondayConfig } from './types.js';
|
|
3
3
|
export declare function isMondayConfigured(db: Database.Database): boolean;
|
|
4
4
|
export declare function loadMondayConfig(db: Database.Database): MondayConfig | null;
|
|
@@ -1,58 +1,44 @@
|
|
|
1
1
|
import { loadProviderSources, resolveApiKey } from '../work-source/provider-sources.js';
|
|
2
|
-
|
|
2
|
+
import { SettingsStore } from '../database/settings-store.js';
|
|
3
3
|
const MONDAY_CONFIG_KEYS = {
|
|
4
4
|
apiToken: 'monday.api_token',
|
|
5
5
|
boardId: 'monday.board_id',
|
|
6
6
|
boardName: 'monday.board_name',
|
|
7
7
|
accountName: 'monday.account_name',
|
|
8
8
|
};
|
|
9
|
-
function getSetting(db, key) {
|
|
10
|
-
const row = db
|
|
11
|
-
.prepare(`SELECT value FROM ${SETTINGS_TABLE} WHERE key = ?`)
|
|
12
|
-
.get(key);
|
|
13
|
-
return row?.value ?? null;
|
|
14
|
-
}
|
|
15
|
-
function setSetting(db, key, value) {
|
|
16
|
-
db.prepare(`
|
|
17
|
-
INSERT INTO ${SETTINGS_TABLE} (key, value)
|
|
18
|
-
VALUES (?, ?)
|
|
19
|
-
ON CONFLICT(key) DO UPDATE SET value = excluded.value
|
|
20
|
-
`).run(key, value);
|
|
21
|
-
}
|
|
22
|
-
function deleteSetting(db, key) {
|
|
23
|
-
db.prepare(`DELETE FROM ${SETTINGS_TABLE} WHERE key = ?`).run(key);
|
|
24
|
-
}
|
|
25
9
|
export function isMondayConfigured(db) {
|
|
26
|
-
return
|
|
10
|
+
return new SettingsStore(db).has(MONDAY_CONFIG_KEYS.apiToken);
|
|
27
11
|
}
|
|
28
12
|
export function loadMondayConfig(db) {
|
|
29
|
-
const
|
|
13
|
+
const settings = new SettingsStore(db);
|
|
14
|
+
const apiToken = settings.get(MONDAY_CONFIG_KEYS.apiToken);
|
|
30
15
|
if (!apiToken)
|
|
31
16
|
return null;
|
|
32
17
|
return {
|
|
33
18
|
apiToken,
|
|
34
|
-
boardId:
|
|
35
|
-
boardName:
|
|
36
|
-
accountName:
|
|
19
|
+
boardId: settings.get(MONDAY_CONFIG_KEYS.boardId) ?? undefined,
|
|
20
|
+
boardName: settings.get(MONDAY_CONFIG_KEYS.boardName) ?? undefined,
|
|
21
|
+
accountName: settings.get(MONDAY_CONFIG_KEYS.accountName) ?? undefined,
|
|
37
22
|
};
|
|
38
23
|
}
|
|
39
24
|
export function saveMondayApiToken(db, apiToken) {
|
|
40
|
-
|
|
25
|
+
new SettingsStore(db).set(MONDAY_CONFIG_KEYS.apiToken, apiToken);
|
|
41
26
|
}
|
|
42
27
|
export function saveMondayBoard(db, boardId, boardName) {
|
|
43
|
-
|
|
44
|
-
|
|
28
|
+
const settings = new SettingsStore(db);
|
|
29
|
+
settings.set(MONDAY_CONFIG_KEYS.boardId, boardId);
|
|
30
|
+
settings.set(MONDAY_CONFIG_KEYS.boardName, boardName);
|
|
45
31
|
}
|
|
46
32
|
export function saveMondayAccountName(db, accountName) {
|
|
47
|
-
|
|
33
|
+
new SettingsStore(db).set(MONDAY_CONFIG_KEYS.accountName, accountName);
|
|
48
34
|
}
|
|
49
35
|
export function clearMondayConfig(db) {
|
|
36
|
+
const settings = new SettingsStore(db);
|
|
50
37
|
for (const key of Object.values(MONDAY_CONFIG_KEYS)) {
|
|
51
|
-
|
|
38
|
+
settings.delete(key);
|
|
52
39
|
}
|
|
53
40
|
}
|
|
54
41
|
export function getMondayApiToken(db) {
|
|
55
|
-
// 1. Try provider sources (supports custom apiKeyRef per source)
|
|
56
42
|
try {
|
|
57
43
|
const sources = loadProviderSources(db);
|
|
58
44
|
for (const source of sources) {
|
|
@@ -66,17 +52,15 @@ export function getMondayApiToken(db) {
|
|
|
66
52
|
catch {
|
|
67
53
|
// Provider sources may not exist in older databases
|
|
68
54
|
}
|
|
69
|
-
// 2. Legacy: environment variables
|
|
70
55
|
const envToken = process.env.PRLT_MONDAY_API_TOKEN || process.env.MONDAY_API_TOKEN;
|
|
71
56
|
if (envToken)
|
|
72
57
|
return envToken;
|
|
73
|
-
|
|
74
|
-
return getSetting(db, MONDAY_CONFIG_KEYS.apiToken);
|
|
58
|
+
return new SettingsStore(db).get(MONDAY_CONFIG_KEYS.apiToken);
|
|
75
59
|
}
|
|
76
60
|
export function getMondayBoardId(db) {
|
|
77
61
|
const envBoardId = process.env.PRLT_MONDAY_BOARD_ID || process.env.MONDAY_BOARD_ID;
|
|
78
62
|
if (envBoardId)
|
|
79
63
|
return envBoardId;
|
|
80
|
-
return
|
|
64
|
+
return new SettingsStore(db).get(MONDAY_CONFIG_KEYS.boardId);
|
|
81
65
|
}
|
|
82
66
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/monday/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/monday/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import Database from 'better-sqlite3';
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
2
|
import type { MondayItemMap } from './types.js';
|
|
3
|
+
import { type DatabaseDriver } from '../database/driver.js';
|
|
3
4
|
export declare class MondayMapper {
|
|
4
|
-
private
|
|
5
|
-
constructor(
|
|
5
|
+
private driver;
|
|
6
|
+
constructor(dbOrDriver: DatabaseDriver | Database.Database);
|
|
6
7
|
private ensureTable;
|
|
7
8
|
createOrUpdateMapping(map: Omit<MondayItemMap, 'lastSyncedAt' | 'createdAt'>): void;
|
|
8
9
|
getByTicketId(ticketId: string): MondayItemMap | null;
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import { PMO_TABLES } from '../pmo/schema.js';
|
|
2
|
+
import { wrapDatabase } from '../database/driver.js';
|
|
3
|
+
function toDriver(dbOrDriver) {
|
|
4
|
+
if ('prepare' in dbOrDriver && 'pragma' in dbOrDriver && !('raw' in dbOrDriver)) {
|
|
5
|
+
return wrapDatabase(dbOrDriver);
|
|
6
|
+
}
|
|
7
|
+
return dbOrDriver;
|
|
8
|
+
}
|
|
2
9
|
export class MondayMapper {
|
|
3
|
-
|
|
4
|
-
constructor(
|
|
5
|
-
this.
|
|
10
|
+
driver;
|
|
11
|
+
constructor(dbOrDriver) {
|
|
12
|
+
this.driver = toDriver(dbOrDriver);
|
|
6
13
|
this.ensureTable();
|
|
7
14
|
}
|
|
8
15
|
ensureTable() {
|
|
9
|
-
this.
|
|
16
|
+
this.driver.exec(`
|
|
10
17
|
CREATE TABLE IF NOT EXISTS ${PMO_TABLES.monday_item_map} (
|
|
11
18
|
pmo_ticket_id TEXT NOT NULL REFERENCES ${PMO_TABLES.tickets}(id) ON DELETE CASCADE,
|
|
12
19
|
monday_board_id TEXT NOT NULL,
|
|
@@ -20,17 +27,17 @@ export class MondayMapper {
|
|
|
20
27
|
UNIQUE (monday_item_id)
|
|
21
28
|
)
|
|
22
29
|
`);
|
|
23
|
-
this.
|
|
30
|
+
this.driver.exec(`
|
|
24
31
|
CREATE INDEX IF NOT EXISTS idx_pmo_monday_item_map_item_id
|
|
25
32
|
ON ${PMO_TABLES.monday_item_map}(monday_item_id)
|
|
26
33
|
`);
|
|
27
|
-
this.
|
|
34
|
+
this.driver.exec(`
|
|
28
35
|
CREATE INDEX IF NOT EXISTS idx_pmo_monday_item_map_board_id
|
|
29
36
|
ON ${PMO_TABLES.monday_item_map}(monday_board_id)
|
|
30
37
|
`);
|
|
31
38
|
}
|
|
32
39
|
createOrUpdateMapping(map) {
|
|
33
|
-
this.
|
|
40
|
+
this.driver.prepare(`
|
|
34
41
|
INSERT INTO ${PMO_TABLES.monday_item_map}
|
|
35
42
|
(pmo_ticket_id, monday_board_id, monday_item_id, monday_item_name, monday_item_url, sync_direction, last_synced_at, created_at)
|
|
36
43
|
VALUES (?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
|
|
@@ -44,32 +51,32 @@ export class MondayMapper {
|
|
|
44
51
|
`).run(map.pmoTicketId, map.mondayBoardId, map.mondayItemId, map.mondayItemName, map.mondayItemUrl ?? null, map.syncDirection);
|
|
45
52
|
}
|
|
46
53
|
getByTicketId(ticketId) {
|
|
47
|
-
const row = this.
|
|
54
|
+
const row = this.driver.prepare(`
|
|
48
55
|
SELECT * FROM ${PMO_TABLES.monday_item_map} WHERE pmo_ticket_id = ?
|
|
49
56
|
`).get(ticketId);
|
|
50
57
|
return row ? this.rowToMap(row) : null;
|
|
51
58
|
}
|
|
52
59
|
getByMondayItemId(itemId) {
|
|
53
|
-
const row = this.
|
|
60
|
+
const row = this.driver.prepare(`
|
|
54
61
|
SELECT * FROM ${PMO_TABLES.monday_item_map} WHERE monday_item_id = ?
|
|
55
62
|
`).get(itemId);
|
|
56
63
|
return row ? this.rowToMap(row) : null;
|
|
57
64
|
}
|
|
58
65
|
listMappings() {
|
|
59
|
-
const rows = this.
|
|
66
|
+
const rows = this.driver.prepare(`
|
|
60
67
|
SELECT * FROM ${PMO_TABLES.monday_item_map} ORDER BY created_at DESC
|
|
61
68
|
`).all();
|
|
62
69
|
return rows.map((row) => this.rowToMap(row));
|
|
63
70
|
}
|
|
64
71
|
updateSyncTimestamp(ticketId) {
|
|
65
|
-
this.
|
|
72
|
+
this.driver.prepare(`
|
|
66
73
|
UPDATE ${PMO_TABLES.monday_item_map}
|
|
67
74
|
SET last_synced_at = CURRENT_TIMESTAMP
|
|
68
75
|
WHERE pmo_ticket_id = ?
|
|
69
76
|
`).run(ticketId);
|
|
70
77
|
}
|
|
71
78
|
deleteMapping(ticketId) {
|
|
72
|
-
this.
|
|
79
|
+
this.driver.prepare(`
|
|
73
80
|
DELETE FROM ${PMO_TABLES.monday_item_map}
|
|
74
81
|
WHERE pmo_ticket_id = ?
|
|
75
82
|
`).run(ticketId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../../src/lib/monday/mapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../../src/lib/monday/mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,9 +9,9 @@ export interface OnboardingResult {
|
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
11
|
* Run the onboarding wizard in interactive (human) mode.
|
|
12
|
-
*
|
|
12
|
+
* Shows welcome, explainer, and lets user choose setup method.
|
|
13
13
|
*
|
|
14
|
-
* @returns The onboarding result
|
|
14
|
+
* @returns The onboarding result indicating how the user chose to proceed
|
|
15
15
|
*/
|
|
16
16
|
export declare function runOnboardingWizard(): Promise<OnboardingResult>;
|
|
17
17
|
/**
|