@doist/twist-cli 2.39.0 → 2.40.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/CHANGELOG.md +6 -0
- package/dist/commands/auth/helpers.d.ts +1 -1
- package/dist/commands/auth/helpers.d.ts.map +1 -1
- package/dist/commands/auth/helpers.js.map +1 -1
- package/dist/commands/auth/store-wrap.d.ts +1 -1
- package/dist/commands/auth/store-wrap.d.ts.map +1 -1
- package/dist/commands/auth/store-wrap.js +18 -1
- package/dist/commands/auth/store-wrap.js.map +1 -1
- package/dist/commands/auth/token.d.ts.map +1 -1
- package/dist/commands/auth/token.js +19 -10
- package/dist/commands/auth/token.js.map +1 -1
- package/dist/lib/auth-constants.d.ts +9 -0
- package/dist/lib/auth-constants.d.ts.map +1 -0
- package/dist/lib/auth-constants.js +9 -0
- package/dist/lib/auth-constants.js.map +1 -0
- package/dist/lib/auth-provider.d.ts +26 -7
- package/dist/lib/auth-provider.d.ts.map +1 -1
- package/dist/lib/auth-provider.js +151 -108
- package/dist/lib/auth-provider.js.map +1 -1
- package/dist/lib/auth.d.ts +13 -12
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +46 -238
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/config.d.ts +21 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +62 -3
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/migrate-auth.d.ts +14 -0
- package/dist/lib/migrate-auth.d.ts.map +1 -0
- package/dist/lib/migrate-auth.js +61 -0
- package/dist/lib/migrate-auth.js.map +1 -0
- package/dist/lib/twist-account.d.ts +22 -0
- package/dist/lib/twist-account.d.ts.map +1 -0
- package/dist/lib/twist-account.js +23 -0
- package/dist/lib/twist-account.js.map +1 -0
- package/dist/lib/user-records.d.ts +15 -0
- package/dist/lib/user-records.d.ts.map +1 -0
- package/dist/lib/user-records.js +84 -0
- package/dist/lib/user-records.js.map +1 -0
- package/dist/postinstall.js +4 -0
- package/dist/postinstall.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Canonical `TwistAccount` factory. Applies the `'unknown'` / `''` defaults. */
|
|
2
|
+
export function makeTwistAccount(input) {
|
|
3
|
+
return {
|
|
4
|
+
id: input.id,
|
|
5
|
+
label: input.label,
|
|
6
|
+
authMode: input.authMode ?? 'unknown',
|
|
7
|
+
authScope: input.authScope ?? '',
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Adapt a Twist `getSessionUser` payload to a `TwistAccount`. Lives in its
|
|
12
|
+
* own module so `migrate-auth.ts` can import it without pulling in
|
|
13
|
+
* `auth-provider.ts`'s runtime graph.
|
|
14
|
+
*/
|
|
15
|
+
export function toTwistAccount(sessionUser, metadata = {}) {
|
|
16
|
+
return makeTwistAccount({
|
|
17
|
+
id: String(sessionUser.id),
|
|
18
|
+
label: sessionUser.name,
|
|
19
|
+
authMode: metadata.authMode,
|
|
20
|
+
authScope: metadata.authScope,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=twist-account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"twist-account.js","sourceRoot":"","sources":["../../src/lib/twist-account.ts"],"names":[],"mappings":"AAGA,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAAC,KAKhC;IACG,OAAO;QACH,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS;QACrC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;KACnC,CAAA;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC1B,WAAyC,EACzC,WAAwD,EAAE;IAE1D,OAAO,gBAAgB,CAAC;QACpB,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1B,KAAK,EAAE,WAAW,CAAC,IAAI;QACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,SAAS,EAAE,QAAQ,CAAC,SAAS;KAChC,CAAC,CAAA;AACN,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { UserRecord, UserRecordStore } from '@doist/cli-core/auth';
|
|
2
|
+
import type { TwistAccount } from './auth-provider.js';
|
|
3
|
+
import { type Config } from './config.js';
|
|
4
|
+
/**
|
|
5
|
+
* `UserRecordStore` adapter over `config.users[]`. `StoredUser.token` is
|
|
6
|
+
* surfaced as `fallbackToken` — cli-core's name for the plaintext copy
|
|
7
|
+
* persisted only when the keyring is unreachable.
|
|
8
|
+
*/
|
|
9
|
+
export declare function createTwistUserRecordStore(): UserRecordStore<TwistAccount>;
|
|
10
|
+
/**
|
|
11
|
+
* Resolve the default-or-first `UserRecord` from an already-loaded config.
|
|
12
|
+
* Returns `null` when no users are stored.
|
|
13
|
+
*/
|
|
14
|
+
export declare function getDefaultUserRecord(config: Config): UserRecord<TwistAccount> | null;
|
|
15
|
+
//# sourceMappingURL=user-records.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-records.d.ts","sourceRoot":"","sources":["../../src/lib/user-records.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,KAAK,MAAM,EAA4C,MAAM,aAAa,CAAA;AAGnF;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,eAAe,CAAC,YAAY,CAAC,CAmC1E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,IAAI,CAMpF"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { getConfig, updateConfig } from './config.js';
|
|
2
|
+
import { makeTwistAccount } from './twist-account.js';
|
|
3
|
+
/**
|
|
4
|
+
* `UserRecordStore` adapter over `config.users[]`. `StoredUser.token` is
|
|
5
|
+
* surfaced as `fallbackToken` — cli-core's name for the plaintext copy
|
|
6
|
+
* persisted only when the keyring is unreachable.
|
|
7
|
+
*/
|
|
8
|
+
export function createTwistUserRecordStore() {
|
|
9
|
+
return {
|
|
10
|
+
async list() {
|
|
11
|
+
const config = await getConfig();
|
|
12
|
+
return (config.users ?? []).map(toRecord);
|
|
13
|
+
},
|
|
14
|
+
async upsert(record) {
|
|
15
|
+
const config = await getConfig();
|
|
16
|
+
const existing = config.users ?? [];
|
|
17
|
+
const next = fromRecord(record);
|
|
18
|
+
const index = existing.findIndex((u) => u.id === record.account.id);
|
|
19
|
+
const users = index >= 0
|
|
20
|
+
? [...existing.slice(0, index), next, ...existing.slice(index + 1)]
|
|
21
|
+
: [...existing, next];
|
|
22
|
+
await updateConfig({ users });
|
|
23
|
+
},
|
|
24
|
+
async remove(id) {
|
|
25
|
+
const config = await getConfig();
|
|
26
|
+
const existing = config.users ?? [];
|
|
27
|
+
const index = existing.findIndex((u) => u.id === id);
|
|
28
|
+
if (index < 0)
|
|
29
|
+
return;
|
|
30
|
+
const users = [...existing.slice(0, index), ...existing.slice(index + 1)];
|
|
31
|
+
const updates = { users };
|
|
32
|
+
if (config.defaultUserId === id)
|
|
33
|
+
updates.defaultUserId = undefined;
|
|
34
|
+
await updateConfig(updates);
|
|
35
|
+
},
|
|
36
|
+
async getDefaultId() {
|
|
37
|
+
const config = await getConfig();
|
|
38
|
+
return config.defaultUserId ?? null;
|
|
39
|
+
},
|
|
40
|
+
async setDefaultId(id) {
|
|
41
|
+
await updateConfig({ defaultUserId: id ?? undefined });
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Resolve the default-or-first `UserRecord` from an already-loaded config.
|
|
47
|
+
* Returns `null` when no users are stored.
|
|
48
|
+
*/
|
|
49
|
+
export function getDefaultUserRecord(config) {
|
|
50
|
+
const users = config.users ?? [];
|
|
51
|
+
if (users.length === 0)
|
|
52
|
+
return null;
|
|
53
|
+
const defaultId = config.defaultUserId;
|
|
54
|
+
const user = (defaultId && users.find((u) => u.id === defaultId)) || users[0];
|
|
55
|
+
return toRecord(user);
|
|
56
|
+
}
|
|
57
|
+
function toRecord(user) {
|
|
58
|
+
const account = makeTwistAccount({
|
|
59
|
+
id: user.id,
|
|
60
|
+
label: user.name,
|
|
61
|
+
authMode: user.authMode,
|
|
62
|
+
authScope: user.authScope,
|
|
63
|
+
});
|
|
64
|
+
const trimmed = user.token?.trim();
|
|
65
|
+
const record = { account };
|
|
66
|
+
if (trimmed)
|
|
67
|
+
record.fallbackToken = trimmed;
|
|
68
|
+
return record;
|
|
69
|
+
}
|
|
70
|
+
function fromRecord(record) {
|
|
71
|
+
// Replace, don't merge: an absent `fallbackToken` strips the plaintext
|
|
72
|
+
// slot so it can't shadow a fresh keyring-backed write. cli-core contract.
|
|
73
|
+
const trimmed = record.fallbackToken?.trim();
|
|
74
|
+
const next = {
|
|
75
|
+
id: record.account.id,
|
|
76
|
+
name: record.account.label,
|
|
77
|
+
authMode: record.account.authMode,
|
|
78
|
+
authScope: record.account.authScope,
|
|
79
|
+
};
|
|
80
|
+
if (trimmed && trimmed.length > 0)
|
|
81
|
+
next.token = trimmed;
|
|
82
|
+
return next;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=user-records.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-records.js","sourceRoot":"","sources":["../../src/lib/user-records.ts"],"names":[],"mappings":"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"}
|
package/dist/postinstall.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { runMigrateLegacyAuth } from './lib/migrate-auth.js';
|
|
1
2
|
import { updateAllInstalledSkills } from './lib/skills/update-installed.js';
|
|
3
|
+
// Failures must not break `npm install`. `createTwistTokenStore` re-runs the
|
|
4
|
+
// migration lazily for users who installed with `--ignore-scripts`.
|
|
2
5
|
updateAllInstalledSkills({ local: false }).catch(() => { });
|
|
6
|
+
runMigrateLegacyAuth({ silent: true }).catch(() => { });
|
|
3
7
|
//# sourceMappingURL=postinstall.js.map
|
package/dist/postinstall.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAE3E,wBAAwB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAE3E,6EAA6E;AAC7E,oEAAoE;AACpE,wBAAwB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;AAC1D,oBAAoB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA"}
|