@workjournal/shared 0.12.0 → 0.27.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/README.md +1 -1
- package/dist/__tests__/credentials-migration.test.d.ts +2 -0
- package/dist/__tests__/credentials-migration.test.d.ts.map +1 -0
- package/dist/__tests__/credentials-migration.test.js +105 -0
- package/dist/__tests__/credentials-migration.test.js.map +1 -0
- package/dist/__tests__/slug.test.js +3 -0
- package/dist/__tests__/slug.test.js.map +1 -1
- package/dist/__tests__/support-labels.test.d.ts +2 -0
- package/dist/__tests__/support-labels.test.d.ts.map +1 -0
- package/dist/__tests__/support-labels.test.js +69 -0
- package/dist/__tests__/support-labels.test.js.map +1 -0
- package/dist/constants.d.ts +27 -11
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +27 -11
- package/dist/constants.js.map +1 -1
- package/dist/credentials.d.ts +45 -0
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +91 -2
- package/dist/credentials.js.map +1 -1
- package/dist/default-prompt.d.ts +10 -0
- package/dist/default-prompt.d.ts.map +1 -0
- package/dist/default-prompt.js +31 -0
- package/dist/default-prompt.js.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/slug.d.ts.map +1 -1
- package/dist/slug.js +4 -0
- package/dist/slug.js.map +1 -1
- package/dist/support-labels.d.ts +28 -0
- package/dist/support-labels.d.ts.map +1 -0
- package/dist/support-labels.js +44 -0
- package/dist/support-labels.js.map +1 -0
- package/dist/tiers.d.ts +1 -1
- package/dist/tiers.d.ts.map +1 -1
- package/dist/tiers.js.map +1 -1
- package/dist/types.d.ts +77 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ This package isn't intended for direct consumption — it's a workspace dependen
|
|
|
8
8
|
|
|
9
9
|
| Subpath | Contents |
|
|
10
10
|
|---|---|
|
|
11
|
-
| `@workjournal/shared` | Types (`Entry`, `Journal`, `
|
|
11
|
+
| `@workjournal/shared` | Types (`Entry`, `Journal`, `JournalContributor`, `Invitation`, …), API path builders, error codes, opaque-token codec |
|
|
12
12
|
| `@workjournal/shared/credentials` | Node-only credential file I/O + `/v1/auth/refresh` client (used by CLI + MCP server) |
|
|
13
13
|
|
|
14
14
|
The default entry has zero runtime dependencies and works in any JavaScript runtime (Node, Cloudflare Workers, browsers). The `credentials` subpath imports `node:fs` / `node:os` and is Node-only.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials-migration.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/credentials-migration.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, mkdtempSync, readdirSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
5
|
+
import { resolveDefaultConfigDir, tryMigrateConfigDir } from '../credentials.js';
|
|
6
|
+
describe('resolveDefaultConfigDir', () => {
|
|
7
|
+
it('returns ~/.config/workjournal on linux when XDG_CONFIG_HOME is unset', () => {
|
|
8
|
+
expect(resolveDefaultConfigDir({ platform: 'linux', env: {}, homeDir: '/home/me' })).toBe('/home/me/.config/workjournal');
|
|
9
|
+
});
|
|
10
|
+
it('honours XDG_CONFIG_HOME on linux when set', () => {
|
|
11
|
+
expect(resolveDefaultConfigDir({
|
|
12
|
+
platform: 'linux',
|
|
13
|
+
env: { XDG_CONFIG_HOME: '/custom/xdg' },
|
|
14
|
+
homeDir: '/home/me',
|
|
15
|
+
})).toBe('/custom/xdg/workjournal');
|
|
16
|
+
});
|
|
17
|
+
it('treats an empty XDG_CONFIG_HOME as unset (per spec)', () => {
|
|
18
|
+
expect(resolveDefaultConfigDir({
|
|
19
|
+
platform: 'linux',
|
|
20
|
+
env: { XDG_CONFIG_HOME: '' },
|
|
21
|
+
homeDir: '/home/me',
|
|
22
|
+
})).toBe('/home/me/.config/workjournal');
|
|
23
|
+
});
|
|
24
|
+
it('uses XDG on macOS, not ~/Library/Preferences', () => {
|
|
25
|
+
expect(resolveDefaultConfigDir({ platform: 'darwin', env: {}, homeDir: '/Users/me' })).toBe('/Users/me/.config/workjournal');
|
|
26
|
+
});
|
|
27
|
+
it('honours XDG_CONFIG_HOME on macOS too', () => {
|
|
28
|
+
expect(resolveDefaultConfigDir({
|
|
29
|
+
platform: 'darwin',
|
|
30
|
+
env: { XDG_CONFIG_HOME: '/Users/me/.config-alt' },
|
|
31
|
+
homeDir: '/Users/me',
|
|
32
|
+
})).toBe('/Users/me/.config-alt/workjournal');
|
|
33
|
+
});
|
|
34
|
+
it('uses %APPDATA% on win32 when set', () => {
|
|
35
|
+
expect(resolveDefaultConfigDir({
|
|
36
|
+
platform: 'win32',
|
|
37
|
+
env: { APPDATA: 'C:\\Users\\me\\AppData\\Roaming' },
|
|
38
|
+
homeDir: 'C:\\Users\\me',
|
|
39
|
+
})).toBe(join('C:\\Users\\me\\AppData\\Roaming', 'workjournal'));
|
|
40
|
+
});
|
|
41
|
+
it('falls back to ~/AppData/Roaming on win32 when APPDATA is unset', () => {
|
|
42
|
+
expect(resolveDefaultConfigDir({
|
|
43
|
+
platform: 'win32',
|
|
44
|
+
env: {},
|
|
45
|
+
homeDir: 'C:\\Users\\me',
|
|
46
|
+
})).toBe(join('C:\\Users\\me', 'AppData', 'Roaming', 'workjournal'));
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
describe('tryMigrateConfigDir', () => {
|
|
50
|
+
let work;
|
|
51
|
+
let legacy;
|
|
52
|
+
let target;
|
|
53
|
+
beforeEach(() => {
|
|
54
|
+
work = mkdtempSync(join(tmpdir(), 'wj-mig-'));
|
|
55
|
+
legacy = join(work, 'home', '.workjournal');
|
|
56
|
+
target = join(work, 'home', '.config', 'workjournal');
|
|
57
|
+
mkdirSync(join(work, 'home'), { recursive: true });
|
|
58
|
+
});
|
|
59
|
+
afterEach(() => {
|
|
60
|
+
rmSync(work, { recursive: true, force: true });
|
|
61
|
+
});
|
|
62
|
+
it('moves the legacy directory and all its files atomically', () => {
|
|
63
|
+
mkdirSync(legacy, { recursive: true });
|
|
64
|
+
writeFileSync(join(legacy, 'credentials.json'), '{"access_token":"a"}');
|
|
65
|
+
writeFileSync(join(legacy, 'cli-login-state.json'), '{"verifier":"v"}');
|
|
66
|
+
writeFileSync(join(legacy, 'config.json'), '{"workspaceSlug":"ws"}');
|
|
67
|
+
const moved = tryMigrateConfigDir(legacy, target);
|
|
68
|
+
expect(moved).toBe(true);
|
|
69
|
+
expect(existsSync(legacy)).toBe(false);
|
|
70
|
+
expect(existsSync(target)).toBe(true);
|
|
71
|
+
expect(readdirSync(target).sort()).toEqual([
|
|
72
|
+
'cli-login-state.json',
|
|
73
|
+
'config.json',
|
|
74
|
+
'credentials.json',
|
|
75
|
+
]);
|
|
76
|
+
});
|
|
77
|
+
it('is a no-op when the legacy directory does not exist', () => {
|
|
78
|
+
const moved = tryMigrateConfigDir(legacy, target);
|
|
79
|
+
expect(moved).toBe(false);
|
|
80
|
+
});
|
|
81
|
+
it('is a no-op when the target already exists (legacy left in place)', () => {
|
|
82
|
+
mkdirSync(legacy, { recursive: true });
|
|
83
|
+
writeFileSync(join(legacy, 'credentials.json'), '{"access_token":"old"}');
|
|
84
|
+
mkdirSync(target, { recursive: true });
|
|
85
|
+
writeFileSync(join(target, 'credentials.json'), '{"access_token":"new"}');
|
|
86
|
+
const moved = tryMigrateConfigDir(legacy, target);
|
|
87
|
+
expect(moved).toBe(false);
|
|
88
|
+
expect(readdirSync(legacy)).toContain('credentials.json');
|
|
89
|
+
expect(readdirSync(target)).toContain('credentials.json');
|
|
90
|
+
});
|
|
91
|
+
it('is a no-op when legacy === target', () => {
|
|
92
|
+
mkdirSync(legacy, { recursive: true });
|
|
93
|
+
const moved = tryMigrateConfigDir(legacy, legacy);
|
|
94
|
+
expect(moved).toBe(false);
|
|
95
|
+
});
|
|
96
|
+
it('creates the parent directory of the target if missing', () => {
|
|
97
|
+
const deepTarget = join(work, 'home', 'deeply', 'nested', 'path', 'workjournal');
|
|
98
|
+
mkdirSync(legacy, { recursive: true });
|
|
99
|
+
writeFileSync(join(legacy, 'credentials.json'), '{}');
|
|
100
|
+
const moved = tryMigrateConfigDir(legacy, deepTarget);
|
|
101
|
+
expect(moved).toBe(true);
|
|
102
|
+
expect(readdirSync(deepTarget)).toContain('credentials.json');
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=credentials-migration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials-migration.test.js","sourceRoot":"","sources":["../../src/__tests__/credentials-migration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,6 +57,9 @@ describe('isReservedSlug', () => {
|
|
|
57
57
|
expect(isReservedSlug('settings')).toBe(true);
|
|
58
58
|
expect(isReservedSlug('new')).toBe(true);
|
|
59
59
|
});
|
|
60
|
+
it('reserves the shared-with-me virtual workspace slug', () => {
|
|
61
|
+
expect(isReservedSlug('shared-with-me')).toBe(true);
|
|
62
|
+
});
|
|
60
63
|
it('returns false for normal slugs', () => {
|
|
61
64
|
expect(isReservedSlug('my-workspace')).toBe(false);
|
|
62
65
|
expect(isReservedSlug('alice')).toBe(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slug.test.js","sourceRoot":"","sources":["../../src/__tests__/slug.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slug.test.js","sourceRoot":"","sources":["../../src/__tests__/slug.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support-labels.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/support-labels.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { CLIENT_OPTIONS, INTERFACE_OPTIONS, isClientOption, isInterfaceOption, } from '../support-labels.js';
|
|
3
|
+
describe('INTERFACE_OPTIONS', () => {
|
|
4
|
+
it('starts with i-dont-know so it can be the default option in dropdowns', () => {
|
|
5
|
+
expect(INTERFACE_OPTIONS[0]).toBe('i-dont-know');
|
|
6
|
+
});
|
|
7
|
+
it('covers every Workjournal surface that can originate a support request', () => {
|
|
8
|
+
expect(INTERFACE_OPTIONS).toEqual(['i-dont-know', 'web', 'cli', 'mcp', 'skill', 'api']);
|
|
9
|
+
});
|
|
10
|
+
it('uses kebab-case so values can become GitHub labels verbatim', () => {
|
|
11
|
+
for (const value of INTERFACE_OPTIONS) {
|
|
12
|
+
expect(value).toMatch(/^[a-z][a-z0-9-]*$/);
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
describe('CLIENT_OPTIONS', () => {
|
|
17
|
+
it('starts with i-dont-know so it can be the default option in dropdowns', () => {
|
|
18
|
+
expect(CLIENT_OPTIONS[0]).toBe('i-dont-know');
|
|
19
|
+
});
|
|
20
|
+
it('uses kebab-case so values can become GitHub labels verbatim', () => {
|
|
21
|
+
for (const value of CLIENT_OPTIONS) {
|
|
22
|
+
expect(value).toMatch(/^[a-z][a-z0-9-]*$/);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
it('uses chatgpt (not chatgtp) so the labels are spelled correctly forever', () => {
|
|
26
|
+
const chatgpt = CLIENT_OPTIONS.filter((v) => v.includes('openai-chatgpt'));
|
|
27
|
+
const typo = CLIENT_OPTIONS.filter((v) => v.includes('openai-chatgtp'));
|
|
28
|
+
expect(chatgpt.length).toBeGreaterThan(0);
|
|
29
|
+
expect(typo).toEqual([]);
|
|
30
|
+
});
|
|
31
|
+
it('includes web-browser-direct for users who hit /support without an AI client', () => {
|
|
32
|
+
expect(CLIENT_OPTIONS).toContain('web-browser-direct');
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
describe('isInterfaceOption', () => {
|
|
36
|
+
it('accepts every literal value', () => {
|
|
37
|
+
for (const value of INTERFACE_OPTIONS) {
|
|
38
|
+
expect(isInterfaceOption(value)).toBe(true);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
it('rejects off-vocabulary strings', () => {
|
|
42
|
+
expect(isInterfaceOption('desktop')).toBe(false);
|
|
43
|
+
expect(isInterfaceOption('')).toBe(false);
|
|
44
|
+
expect(isInterfaceOption('Web')).toBe(false); // case-sensitive
|
|
45
|
+
});
|
|
46
|
+
it('rejects non-string inputs', () => {
|
|
47
|
+
expect(isInterfaceOption(null)).toBe(false);
|
|
48
|
+
expect(isInterfaceOption(undefined)).toBe(false);
|
|
49
|
+
expect(isInterfaceOption(42)).toBe(false);
|
|
50
|
+
expect(isInterfaceOption({})).toBe(false);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
describe('isClientOption', () => {
|
|
54
|
+
it('accepts every literal value', () => {
|
|
55
|
+
for (const value of CLIENT_OPTIONS) {
|
|
56
|
+
expect(isClientOption(value)).toBe(true);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
it('rejects off-vocabulary strings', () => {
|
|
60
|
+
expect(isClientOption('claude')).toBe(false);
|
|
61
|
+
expect(isClientOption('ai-anthropic-claude-watch')).toBe(false);
|
|
62
|
+
});
|
|
63
|
+
it('rejects non-string inputs', () => {
|
|
64
|
+
expect(isClientOption(null)).toBe(false);
|
|
65
|
+
expect(isClientOption(undefined)).toBe(false);
|
|
66
|
+
expect(isClientOption(0)).toBe(false);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=support-labels.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support-labels.test.js","sourceRoot":"","sources":["../../src/__tests__/support-labels.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACN,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,iBAAiB,GACjB,MAAM,sBAAsB,CAAC;AAE9B,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC/E,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAChF,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACtE,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC/E,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACtE,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QACjF,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACtF,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACtC,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;YACvC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACtC,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACpC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,cAAc,CAAC,2BAA2B,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export declare const API_VERSION: "v1";
|
|
2
2
|
/**
|
|
3
3
|
* @breaking-change-pending
|
|
4
|
-
* The journal/entries/
|
|
5
|
-
* UUID-shaped paths from before the slug-routes cutover (PR #185,
|
|
6
|
-
* The API now serves only `/v1/workspaces/:workspaceSlug/...` —
|
|
7
|
-
* helpers will 404 against the live API. CLI (#176) and MCP (#177)
|
|
8
|
-
* both the call sites and these helpers as part of their own breaking
|
|
4
|
+
* The journal/entries/contributors/invitations/export helpers below still
|
|
5
|
+
* produce UUID-shaped paths from before the slug-routes cutover (PR #185,
|
|
6
|
+
* issue #172). The API now serves only `/v1/workspaces/:workspaceSlug/...` —
|
|
7
|
+
* these helpers will 404 against the live API. CLI (#176) and MCP (#177)
|
|
8
|
+
* update both the call sites and these helpers as part of their own breaking
|
|
9
9
|
* releases. Web (#175) uses `WS_API_PATHS` below instead.
|
|
10
10
|
*/
|
|
11
11
|
export declare const API_PATHS: {
|
|
@@ -17,8 +17,8 @@ export declare const API_PATHS: {
|
|
|
17
17
|
readonly entries: (journalId: string) => string;
|
|
18
18
|
readonly entry: (journalId: string, index: number | string) => string;
|
|
19
19
|
readonly searchEntries: (journalId: string) => string;
|
|
20
|
-
readonly
|
|
21
|
-
readonly
|
|
20
|
+
readonly contributors: (journalId: string) => string;
|
|
21
|
+
readonly contributor: (journalId: string, userId: string) => string;
|
|
22
22
|
readonly invitations: (journalId: string) => string;
|
|
23
23
|
readonly invitation: (journalId: string, invitationId: string) => string;
|
|
24
24
|
readonly acceptInvitation: "/v1/invitations/accept";
|
|
@@ -37,15 +37,29 @@ export declare const WS_API_PATHS: {
|
|
|
37
37
|
readonly entries: (workspaceSlug: string, journalSlug: string) => string;
|
|
38
38
|
readonly entry: (workspaceSlug: string, journalSlug: string, index: number | string) => string;
|
|
39
39
|
readonly searchEntries: (workspaceSlug: string, journalSlug: string) => string;
|
|
40
|
-
readonly
|
|
41
|
-
readonly
|
|
40
|
+
readonly contributors: (workspaceSlug: string, journalSlug: string) => string;
|
|
41
|
+
readonly contributor: (workspaceSlug: string, journalSlug: string, userId: string) => string;
|
|
42
42
|
readonly invitations: (workspaceSlug: string, journalSlug: string) => string;
|
|
43
43
|
readonly invitation: (workspaceSlug: string, journalSlug: string, invitationId: string) => string;
|
|
44
|
+
readonly resendInvitation: (workspaceSlug: string, journalSlug: string, invitationId: string) => string;
|
|
44
45
|
readonly acceptInvitation: "/v1/invitations/accept";
|
|
46
|
+
readonly invitationByToken: (token: string) => string;
|
|
45
47
|
readonly exportJournal: (workspaceSlug: string, journalSlug: string) => string;
|
|
46
48
|
readonly publicJournal: (slug: string) => string;
|
|
47
49
|
readonly publicEntries: (slug: string) => string;
|
|
50
|
+
readonly sharedWithMeJournals: "/v1/shared-with-me/journals";
|
|
51
|
+
readonly prompts: (workspaceSlug: string) => string;
|
|
52
|
+
readonly prompt: (workspaceSlug: string, promptSlug: string) => string;
|
|
53
|
+
readonly journalPrompt: (workspaceSlug: string, journalSlug: string, promptSlug: string) => string;
|
|
54
|
+
readonly supportContact: (workspaceSlug: string) => string;
|
|
48
55
|
};
|
|
56
|
+
/**
|
|
57
|
+
* Reserved virtual-workspace slug exposed in user-facing surfaces (CLI, MCP,
|
|
58
|
+
* web URL). The API serves the listing at a dedicated top-level path
|
|
59
|
+
* (`WS_API_PATHS.sharedWithMeJournals`) instead of polluting the per-workspace
|
|
60
|
+
* route tree — see issue #236.
|
|
61
|
+
*/
|
|
62
|
+
export declare const SHARED_WITH_ME_SLUG: "shared-with-me";
|
|
49
63
|
export declare const ERROR_CODES: {
|
|
50
64
|
readonly BAD_REQUEST: "BAD_REQUEST";
|
|
51
65
|
readonly UNAUTHORIZED: "UNAUTHORIZED";
|
|
@@ -66,6 +80,8 @@ export declare const ERROR_CODES: {
|
|
|
66
80
|
export type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];
|
|
67
81
|
export declare const MAX_SUMMARY_LENGTH = 500;
|
|
68
82
|
export declare const MAX_TITLE_LENGTH = 80;
|
|
83
|
+
export declare const MAX_PROMPT_NAME_LENGTH = 80;
|
|
84
|
+
export declare const MAX_PROMPT_BODY_LENGTH = 10000;
|
|
69
85
|
/** @deprecated Use `MAX_NAME_LENGTH` (20) from `./slug.ts`. Kept as an alias
|
|
70
86
|
* for backward compat until the breaking CLI/MCP releases (#176, #177) drop it. */
|
|
71
87
|
export declare const MAX_JOURNAL_NAME_LENGTH = 20;
|
|
@@ -81,6 +97,6 @@ export declare const PUBLIC_SLUG_LENGTH = 12;
|
|
|
81
97
|
* stale. Keep in sync with the `version:` field in the corresponding
|
|
82
98
|
* `apps/landing/src/pages/*.md` frontmatter.
|
|
83
99
|
*/
|
|
84
|
-
export declare const CURRENT_TOS_VERSION: "0.
|
|
85
|
-
export declare const CURRENT_PRIVACY_VERSION: "0.
|
|
100
|
+
export declare const CURRENT_TOS_VERSION: "0.2";
|
|
101
|
+
export declare const CURRENT_PRIVACY_VERSION: "0.2";
|
|
86
102
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,EAAG,IAAa,CAAC;AAEzC;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS;;;6BAGL,MAAM;;2BAER,MAAM;kCACC,MAAM;gCACR,MAAM,SAAS,MAAM,GAAG,MAAM;wCAEtB,MAAM;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,EAAG,IAAa,CAAC;AAEzC;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS;;;6BAGL,MAAM;;2BAER,MAAM;kCACC,MAAM;gCACR,MAAM,SAAS,MAAM,GAAG,MAAM;wCAEtB,MAAM;uCACP,MAAM;sCACP,MAAM,UAAU,MAAM;sCAEtB,MAAM;qCACP,MAAM,gBAAgB,MAAM;;wCAGzB,MAAM;mCACX,MAAM;mCACN,MAAM;CACnB,CAAC;AAeX,eAAO,MAAM,YAAY;;;wCAGG,MAAM;;uCAEP,MAAM;sCACP,MAAM,eAAe,MAAM;+CAClB,MAAM;sCACf,MAAM,eAAe,MAAM;oCAE7B,MAAM,eAAe,MAAM,SAAS,MAAM,GAAG,MAAM;4CAE3C,MAAM,eAAe,MAAM;2CAE5B,MAAM,eAAe,MAAM;0CAE5B,MAAM,eAAe,MAAM,UAAU,MAAM;0CAE3C,MAAM,eAAe,MAAM;yCAE5B,MAAM,eAAe,MAAM,gBAAgB,MAAM;+CAE3C,MAAM,eAAe,MAAM,gBAAgB,MAAM;;wCAGxD,MAAM;4CACF,MAAM,eAAe,MAAM;mCAEpC,MAAM;mCACN,MAAM;;sCAEH,MAAM;qCACP,MAAM,cAAc,MAAM;4CAEnB,MAAM,eAAe,MAAM,cAAc,MAAM;6CAE9C,MAAM;CAC7B,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAG,gBAAyB,CAAC;AAE7D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;CAgBd,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEvE,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAC7C;mFACmF;AACnF,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAG,KAAc,CAAC;AAClD,eAAO,MAAM,uBAAuB,EAAG,KAAc,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export const API_VERSION = 'v1';
|
|
2
2
|
/**
|
|
3
3
|
* @breaking-change-pending
|
|
4
|
-
* The journal/entries/
|
|
5
|
-
* UUID-shaped paths from before the slug-routes cutover (PR #185,
|
|
6
|
-
* The API now serves only `/v1/workspaces/:workspaceSlug/...` —
|
|
7
|
-
* helpers will 404 against the live API. CLI (#176) and MCP (#177)
|
|
8
|
-
* both the call sites and these helpers as part of their own breaking
|
|
4
|
+
* The journal/entries/contributors/invitations/export helpers below still
|
|
5
|
+
* produce UUID-shaped paths from before the slug-routes cutover (PR #185,
|
|
6
|
+
* issue #172). The API now serves only `/v1/workspaces/:workspaceSlug/...` —
|
|
7
|
+
* these helpers will 404 against the live API. CLI (#176) and MCP (#177)
|
|
8
|
+
* update both the call sites and these helpers as part of their own breaking
|
|
9
9
|
* releases. Web (#175) uses `WS_API_PATHS` below instead.
|
|
10
10
|
*/
|
|
11
11
|
export const API_PATHS = {
|
|
@@ -17,8 +17,8 @@ export const API_PATHS = {
|
|
|
17
17
|
entries: (journalId) => `/${API_VERSION}/journals/${journalId}/entries`,
|
|
18
18
|
entry: (journalId, index) => `/${API_VERSION}/journals/${encodeURIComponent(journalId)}/entries/${encodeURIComponent(String(index))}`,
|
|
19
19
|
searchEntries: (journalId) => `/${API_VERSION}/journals/${journalId}/entries/search`,
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
contributors: (journalId) => `/${API_VERSION}/journals/${journalId}/contributors`,
|
|
21
|
+
contributor: (journalId, userId) => `/${API_VERSION}/journals/${journalId}/contributors/${userId}`,
|
|
22
22
|
invitations: (journalId) => `/${API_VERSION}/journals/${journalId}/invitations`,
|
|
23
23
|
invitation: (journalId, invitationId) => `/${API_VERSION}/journals/${journalId}/invitations/${invitationId}`,
|
|
24
24
|
acceptInvitation: `/${API_VERSION}/invitations/accept`,
|
|
@@ -47,15 +47,29 @@ export const WS_API_PATHS = {
|
|
|
47
47
|
entries: (workspaceSlug, journalSlug) => `${jr(workspaceSlug, journalSlug)}/entries`,
|
|
48
48
|
entry: (workspaceSlug, journalSlug, index) => `${jr(workspaceSlug, journalSlug)}/entries/${encodeURIComponent(String(index))}`,
|
|
49
49
|
searchEntries: (workspaceSlug, journalSlug) => `${jr(workspaceSlug, journalSlug)}/entries/search`,
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
contributors: (workspaceSlug, journalSlug) => `${jr(workspaceSlug, journalSlug)}/contributors`,
|
|
51
|
+
contributor: (workspaceSlug, journalSlug, userId) => `${jr(workspaceSlug, journalSlug)}/contributors/${encodeURIComponent(userId)}`,
|
|
52
52
|
invitations: (workspaceSlug, journalSlug) => `${jr(workspaceSlug, journalSlug)}/invitations`,
|
|
53
53
|
invitation: (workspaceSlug, journalSlug, invitationId) => `${jr(workspaceSlug, journalSlug)}/invitations/${encodeURIComponent(invitationId)}`,
|
|
54
|
+
resendInvitation: (workspaceSlug, journalSlug, invitationId) => `${jr(workspaceSlug, journalSlug)}/invitations/${encodeURIComponent(invitationId)}/resend`,
|
|
54
55
|
acceptInvitation: `/${API_VERSION}/invitations/accept`,
|
|
56
|
+
invitationByToken: (token) => `/${API_VERSION}/invitations/${encodeURIComponent(token)}`,
|
|
55
57
|
exportJournal: (workspaceSlug, journalSlug) => `${jr(workspaceSlug, journalSlug)}/export`,
|
|
56
58
|
publicJournal: (slug) => `/${API_VERSION}/public/${encodeURIComponent(slug)}`,
|
|
57
59
|
publicEntries: (slug) => `/${API_VERSION}/public/${encodeURIComponent(slug)}/entries`,
|
|
60
|
+
sharedWithMeJournals: `/${API_VERSION}/shared-with-me/journals`,
|
|
61
|
+
prompts: (workspaceSlug) => `${ws(workspaceSlug)}/prompts`,
|
|
62
|
+
prompt: (workspaceSlug, promptSlug) => `${ws(workspaceSlug)}/prompts/${encodeURIComponent(promptSlug)}`,
|
|
63
|
+
journalPrompt: (workspaceSlug, journalSlug, promptSlug) => `${jr(workspaceSlug, journalSlug)}/prompts/${encodeURIComponent(promptSlug)}`,
|
|
64
|
+
supportContact: (workspaceSlug) => `${ws(workspaceSlug)}/support/contact`,
|
|
58
65
|
};
|
|
66
|
+
/**
|
|
67
|
+
* Reserved virtual-workspace slug exposed in user-facing surfaces (CLI, MCP,
|
|
68
|
+
* web URL). The API serves the listing at a dedicated top-level path
|
|
69
|
+
* (`WS_API_PATHS.sharedWithMeJournals`) instead of polluting the per-workspace
|
|
70
|
+
* route tree — see issue #236.
|
|
71
|
+
*/
|
|
72
|
+
export const SHARED_WITH_ME_SLUG = 'shared-with-me';
|
|
59
73
|
export const ERROR_CODES = {
|
|
60
74
|
BAD_REQUEST: 'BAD_REQUEST',
|
|
61
75
|
UNAUTHORIZED: 'UNAUTHORIZED',
|
|
@@ -75,6 +89,8 @@ export const ERROR_CODES = {
|
|
|
75
89
|
};
|
|
76
90
|
export const MAX_SUMMARY_LENGTH = 500;
|
|
77
91
|
export const MAX_TITLE_LENGTH = 80;
|
|
92
|
+
export const MAX_PROMPT_NAME_LENGTH = 80;
|
|
93
|
+
export const MAX_PROMPT_BODY_LENGTH = 10_000;
|
|
78
94
|
/** @deprecated Use `MAX_NAME_LENGTH` (20) from `./slug.ts`. Kept as an alias
|
|
79
95
|
* for backward compat until the breaking CLI/MCP releases (#176, #177) drop it. */
|
|
80
96
|
export const MAX_JOURNAL_NAME_LENGTH = 20;
|
|
@@ -90,6 +106,6 @@ export const PUBLIC_SLUG_LENGTH = 12;
|
|
|
90
106
|
* stale. Keep in sync with the `version:` field in the corresponding
|
|
91
107
|
* `apps/landing/src/pages/*.md` frontmatter.
|
|
92
108
|
*/
|
|
93
|
-
export const CURRENT_TOS_VERSION = '0.
|
|
94
|
-
export const CURRENT_PRIVACY_VERSION = '0.
|
|
109
|
+
export const CURRENT_TOS_VERSION = '0.2';
|
|
110
|
+
export const CURRENT_PRIVACY_VERSION = '0.2';
|
|
95
111
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,IAAa,CAAC;AAEzC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACxB,MAAM,EAAE,IAAI,WAAW,SAAS;IAChC,UAAU,EAAE,IAAI,WAAW,aAAa;IACxC,SAAS,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,WAAW,eAAe,EAAE,EAAE;IAC7D,QAAQ,EAAE,IAAI,WAAW,WAAW;IACpC,OAAO,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,WAAW,aAAa,EAAE,EAAE;IACzD,OAAO,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,IAAI,WAAW,aAAa,SAAS,UAAU;IAC/E,KAAK,EAAE,CAAC,SAAiB,EAAE,KAAsB,EAAE,EAAE,CACpD,IAAI,WAAW,aAAa,kBAAkB,CAAC,SAAS,CAAC,YAAY,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;IACzG,aAAa,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,IAAI,WAAW,aAAa,SAAS,iBAAiB;IAC5F,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
|
package/dist/credentials.d.ts
CHANGED
|
@@ -3,12 +3,47 @@ export interface StoredCredentials {
|
|
|
3
3
|
refresh_token?: string;
|
|
4
4
|
expires_at: string;
|
|
5
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* Resolve the platform-default config directory.
|
|
8
|
+
*
|
|
9
|
+
* - Windows → `%APPDATA%\workjournal\` (falling back to `~/AppData/Roaming/workjournal\`).
|
|
10
|
+
* - Everywhere else (Linux, macOS, BSD, WSL2-Linux-Node) → `${XDG_CONFIG_HOME:-$HOME/.config}/workjournal/`.
|
|
11
|
+
*
|
|
12
|
+
* macOS deliberately uses XDG rather than `~/Library/Preferences/` because every
|
|
13
|
+
* modern CLI tool (`gh`, `git`, `kubectl`, `helm`) does the same — `~/Library/Preferences`
|
|
14
|
+
* is for plists managed via `NSUserDefaults`/`defaults`, not app-managed JSON.
|
|
15
|
+
*
|
|
16
|
+
* Exported for tests; production callers go through {@link CONFIG_DIR}.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveDefaultConfigDir(opts: {
|
|
19
|
+
platform: NodeJS.Platform;
|
|
20
|
+
env: NodeJS.ProcessEnv;
|
|
21
|
+
homeDir: string;
|
|
22
|
+
}): string;
|
|
6
23
|
export declare const CONFIG_DIR: string;
|
|
7
24
|
export interface LoginState {
|
|
8
25
|
verifier: string;
|
|
9
26
|
challenge: string;
|
|
10
27
|
created_at: string;
|
|
11
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Move `legacy` → `target` atomically if all of these hold:
|
|
31
|
+
* - `legacy` exists
|
|
32
|
+
* - `target` does not exist
|
|
33
|
+
* - the two paths differ
|
|
34
|
+
*
|
|
35
|
+
* Returns `true` when a rename actually happened. Pure with respect to its
|
|
36
|
+
* arguments — no env or platform checks. Exported for tests.
|
|
37
|
+
*/
|
|
38
|
+
export declare function tryMigrateConfigDir(legacy: string, target: string): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* One-shot migration of the legacy `~/.workjournal/` directory to the resolved
|
|
41
|
+
* platform-standard {@link CONFIG_DIR}. Idempotent within a process via a
|
|
42
|
+
* module-scoped flag. Skipped entirely when `WORKJOURNAL_CONFIG_DIR` is set.
|
|
43
|
+
* The atomic directory rename moves all on-disk files (`credentials.json`,
|
|
44
|
+
* `cli-login-state.json`, `config.json`) together.
|
|
45
|
+
*/
|
|
46
|
+
export declare function ensureMigrated(): void;
|
|
12
47
|
export declare function readCredentials(): StoredCredentials | null;
|
|
13
48
|
export declare function writeCredentials(creds: StoredCredentials): void;
|
|
14
49
|
export declare function clearCredentials(): void;
|
|
@@ -27,4 +62,14 @@ export declare function refreshAccessToken(refreshToken: string): Promise<Stored
|
|
|
27
62
|
* Returns null if no credentials are stored.
|
|
28
63
|
*/
|
|
29
64
|
export declare function getAccessToken(): Promise<string | null>;
|
|
65
|
+
/**
|
|
66
|
+
* Unconditional refresh — used by API clients on a 401 response when the
|
|
67
|
+
* pre-flight {@link getAccessToken} returned a token the server still
|
|
68
|
+
* rejected (clock skew, mid-flight expiry, server-side revocation).
|
|
69
|
+
*
|
|
70
|
+
* Returns null when no credentials are on disk, no refresh token is stored,
|
|
71
|
+
* or the refresh request itself fails. Callers treat null as "no recovery
|
|
72
|
+
* possible" and surface an auth-required error to the user.
|
|
73
|
+
*/
|
|
74
|
+
export declare function forceRefreshAccessToken(): Promise<string | null>;
|
|
30
75
|
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,iBAAiB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,iBAAiB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC7C,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAQT;AAED,eAAO,MAAM,UAAU,QAEuE,CAAC;AAQ/F,MAAM,WAAW,UAAU;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAO3E;AAID;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAQrC;AAQD,wBAAgB,eAAe,IAAI,iBAAiB,GAAG,IAAI,CAW1D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAK/D;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAKvC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAKvD;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,UAAU,GAAG,IAAI,CA2BlD;AAED,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAI9D;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAE3D;AAID,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA0BzF;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiB7D;AAED;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAStE"}
|
package/dist/credentials.js
CHANGED
|
@@ -1,18 +1,81 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from 'node:fs';
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
/**
|
|
5
|
+
* Resolve the platform-default config directory.
|
|
6
|
+
*
|
|
7
|
+
* - Windows → `%APPDATA%\workjournal\` (falling back to `~/AppData/Roaming/workjournal\`).
|
|
8
|
+
* - Everywhere else (Linux, macOS, BSD, WSL2-Linux-Node) → `${XDG_CONFIG_HOME:-$HOME/.config}/workjournal/`.
|
|
9
|
+
*
|
|
10
|
+
* macOS deliberately uses XDG rather than `~/Library/Preferences/` because every
|
|
11
|
+
* modern CLI tool (`gh`, `git`, `kubectl`, `helm`) does the same — `~/Library/Preferences`
|
|
12
|
+
* is for plists managed via `NSUserDefaults`/`defaults`, not app-managed JSON.
|
|
13
|
+
*
|
|
14
|
+
* Exported for tests; production callers go through {@link CONFIG_DIR}.
|
|
15
|
+
*/
|
|
16
|
+
export function resolveDefaultConfigDir(opts) {
|
|
17
|
+
if (opts.platform === 'win32') {
|
|
18
|
+
const appData = opts.env['APPDATA'] ?? join(opts.homeDir, 'AppData', 'Roaming');
|
|
19
|
+
return join(appData, 'workjournal');
|
|
20
|
+
}
|
|
21
|
+
const xdgConfig = opts.env['XDG_CONFIG_HOME'];
|
|
22
|
+
if (xdgConfig && xdgConfig.length > 0)
|
|
23
|
+
return join(xdgConfig, 'workjournal');
|
|
24
|
+
return join(opts.homeDir, '.config', 'workjournal');
|
|
25
|
+
}
|
|
26
|
+
export const CONFIG_DIR = process.env['WORKJOURNAL_CONFIG_DIR'] ??
|
|
27
|
+
resolveDefaultConfigDir({ platform: process.platform, env: process.env, homeDir: homedir() });
|
|
5
28
|
const CREDENTIALS_PATH = join(CONFIG_DIR, 'credentials.json');
|
|
6
29
|
const CREDENTIALS_TMP_PATH = `${CREDENTIALS_PATH}.tmp`;
|
|
7
30
|
const LOGIN_STATE_PATH = join(CONFIG_DIR, 'cli-login-state.json');
|
|
8
31
|
const LOGIN_STATE_TMP_PATH = `${LOGIN_STATE_PATH}.tmp`;
|
|
9
32
|
const LOGIN_STATE_TTL_MS = 10 * 60 * 1000;
|
|
33
|
+
/**
|
|
34
|
+
* Move `legacy` → `target` atomically if all of these hold:
|
|
35
|
+
* - `legacy` exists
|
|
36
|
+
* - `target` does not exist
|
|
37
|
+
* - the two paths differ
|
|
38
|
+
*
|
|
39
|
+
* Returns `true` when a rename actually happened. Pure with respect to its
|
|
40
|
+
* arguments — no env or platform checks. Exported for tests.
|
|
41
|
+
*/
|
|
42
|
+
export function tryMigrateConfigDir(legacy, target) {
|
|
43
|
+
if (legacy === target)
|
|
44
|
+
return false;
|
|
45
|
+
if (existsSync(target))
|
|
46
|
+
return false;
|
|
47
|
+
if (!existsSync(legacy))
|
|
48
|
+
return false;
|
|
49
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
50
|
+
renameSync(legacy, target);
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
let migrated = false;
|
|
54
|
+
/**
|
|
55
|
+
* One-shot migration of the legacy `~/.workjournal/` directory to the resolved
|
|
56
|
+
* platform-standard {@link CONFIG_DIR}. Idempotent within a process via a
|
|
57
|
+
* module-scoped flag. Skipped entirely when `WORKJOURNAL_CONFIG_DIR` is set.
|
|
58
|
+
* The atomic directory rename moves all on-disk files (`credentials.json`,
|
|
59
|
+
* `cli-login-state.json`, `config.json`) together.
|
|
60
|
+
*/
|
|
61
|
+
export function ensureMigrated() {
|
|
62
|
+
if (migrated)
|
|
63
|
+
return;
|
|
64
|
+
migrated = true;
|
|
65
|
+
if (process.env['WORKJOURNAL_CONFIG_DIR'])
|
|
66
|
+
return;
|
|
67
|
+
const legacy = join(homedir(), '.workjournal');
|
|
68
|
+
if (tryMigrateConfigDir(legacy, CONFIG_DIR)) {
|
|
69
|
+
process.stderr.write(`workjournal: moved config from ${legacy} to ${CONFIG_DIR}\n`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
10
72
|
function ensureConfigDir() {
|
|
11
73
|
if (!existsSync(CONFIG_DIR)) {
|
|
12
74
|
mkdirSync(CONFIG_DIR, { mode: 0o700, recursive: true });
|
|
13
75
|
}
|
|
14
76
|
}
|
|
15
77
|
export function readCredentials() {
|
|
78
|
+
ensureMigrated();
|
|
16
79
|
if (!existsSync(CREDENTIALS_PATH)) {
|
|
17
80
|
return null;
|
|
18
81
|
}
|
|
@@ -25,16 +88,19 @@ export function readCredentials() {
|
|
|
25
88
|
}
|
|
26
89
|
}
|
|
27
90
|
export function writeCredentials(creds) {
|
|
91
|
+
ensureMigrated();
|
|
28
92
|
ensureConfigDir();
|
|
29
93
|
writeFileSync(CREDENTIALS_TMP_PATH, `${JSON.stringify(creds, null, '\t')}\n`, { mode: 0o600 });
|
|
30
94
|
renameSync(CREDENTIALS_TMP_PATH, CREDENTIALS_PATH);
|
|
31
95
|
}
|
|
32
96
|
export function clearCredentials() {
|
|
97
|
+
ensureMigrated();
|
|
33
98
|
if (existsSync(CREDENTIALS_PATH)) {
|
|
34
99
|
unlinkSync(CREDENTIALS_PATH);
|
|
35
100
|
}
|
|
36
101
|
}
|
|
37
102
|
export function writeLoginState(state) {
|
|
103
|
+
ensureMigrated();
|
|
38
104
|
ensureConfigDir();
|
|
39
105
|
writeFileSync(LOGIN_STATE_TMP_PATH, `${JSON.stringify(state, null, '\t')}\n`, { mode: 0o600 });
|
|
40
106
|
renameSync(LOGIN_STATE_TMP_PATH, LOGIN_STATE_PATH);
|
|
@@ -44,6 +110,7 @@ export function writeLoginState(state) {
|
|
|
44
110
|
* Does NOT enforce TTL — callers should check `created_at` against `LOGIN_STATE_TTL_MS`.
|
|
45
111
|
*/
|
|
46
112
|
export function readLoginState() {
|
|
113
|
+
ensureMigrated();
|
|
47
114
|
if (!existsSync(LOGIN_STATE_PATH)) {
|
|
48
115
|
return null;
|
|
49
116
|
}
|
|
@@ -70,6 +137,7 @@ export function readLoginState() {
|
|
|
70
137
|
}
|
|
71
138
|
}
|
|
72
139
|
export function clearLoginState() {
|
|
140
|
+
ensureMigrated();
|
|
73
141
|
if (existsSync(LOGIN_STATE_PATH)) {
|
|
74
142
|
unlinkSync(LOGIN_STATE_PATH);
|
|
75
143
|
}
|
|
@@ -122,4 +190,25 @@ export async function getAccessToken() {
|
|
|
122
190
|
}
|
|
123
191
|
return creds.access_token;
|
|
124
192
|
}
|
|
193
|
+
/**
|
|
194
|
+
* Unconditional refresh — used by API clients on a 401 response when the
|
|
195
|
+
* pre-flight {@link getAccessToken} returned a token the server still
|
|
196
|
+
* rejected (clock skew, mid-flight expiry, server-side revocation).
|
|
197
|
+
*
|
|
198
|
+
* Returns null when no credentials are on disk, no refresh token is stored,
|
|
199
|
+
* or the refresh request itself fails. Callers treat null as "no recovery
|
|
200
|
+
* possible" and surface an auth-required error to the user.
|
|
201
|
+
*/
|
|
202
|
+
export async function forceRefreshAccessToken() {
|
|
203
|
+
const creds = readCredentials();
|
|
204
|
+
if (!creds?.refresh_token)
|
|
205
|
+
return null;
|
|
206
|
+
try {
|
|
207
|
+
const refreshed = await refreshAccessToken(creds.refresh_token);
|
|
208
|
+
return refreshed.access_token;
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
125
214
|
//# sourceMappingURL=credentials.js.map
|
package/dist/credentials.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,UAAU,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,UAAU,EACV,aAAa,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System default prompt — returned by the journal-fetch endpoint when no
|
|
3
|
+
* custom prompt is assigned to the journal. Agents read `prompt.body` from
|
|
4
|
+
* the response without knowing whether it's the default or a custom one.
|
|
5
|
+
*
|
|
6
|
+
* Edit content directly in this file. The journal-fetch surface (issue #240)
|
|
7
|
+
* relays this verbatim, so changes ship with the next API deploy.
|
|
8
|
+
*/
|
|
9
|
+
export declare const DEFAULT_JOURNAL_PROMPT = "You are writing a development journal entry capturing a session of work.\n\nGoals\n- Make the entry useful to a future engineer (often yourself) who needs to understand *why* a decision was made, not just *what* changed.\n- Capture trade-offs that were considered and rejected \u2014 these are usually more valuable than the option that was picked.\n- Link to related work: prior journal entries, GitHub issues/PRs, external docs.\n\nWhat to include\n- A concise title (3\u20138 words) that names the *outcome*, not the process.\n- A 1\u20133 sentence summary that another engineer could read in a list and decide whether to open the full entry.\n- The detailed body: file paths touched, commits/PRs, decisions and their rationale, dead ends worth recording, follow-up items left for next time.\n\nWhat to skip\n- Generic narrations of every command you ran.\n- Restating what the diff already shows; explain why, not what.\n- Speculation about future work that isn't already grounded in the session.\n\nVoice\n- Past tense, factual (\"Added X, decided Y because Z\"). No hedging fluff.\n- Tables for structured data (decision matrices, file-change summaries).\n- Short paragraphs over long ones; bullet lists for sequential findings.\n";
|
|
10
|
+
//# sourceMappingURL=default-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-prompt.d.ts","sourceRoot":"","sources":["../src/default-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,ytCAqBlC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System default prompt — returned by the journal-fetch endpoint when no
|
|
3
|
+
* custom prompt is assigned to the journal. Agents read `prompt.body` from
|
|
4
|
+
* the response without knowing whether it's the default or a custom one.
|
|
5
|
+
*
|
|
6
|
+
* Edit content directly in this file. The journal-fetch surface (issue #240)
|
|
7
|
+
* relays this verbatim, so changes ship with the next API deploy.
|
|
8
|
+
*/
|
|
9
|
+
export const DEFAULT_JOURNAL_PROMPT = `You are writing a development journal entry capturing a session of work.
|
|
10
|
+
|
|
11
|
+
Goals
|
|
12
|
+
- Make the entry useful to a future engineer (often yourself) who needs to understand *why* a decision was made, not just *what* changed.
|
|
13
|
+
- Capture trade-offs that were considered and rejected — these are usually more valuable than the option that was picked.
|
|
14
|
+
- Link to related work: prior journal entries, GitHub issues/PRs, external docs.
|
|
15
|
+
|
|
16
|
+
What to include
|
|
17
|
+
- A concise title (3–8 words) that names the *outcome*, not the process.
|
|
18
|
+
- A 1–3 sentence summary that another engineer could read in a list and decide whether to open the full entry.
|
|
19
|
+
- The detailed body: file paths touched, commits/PRs, decisions and their rationale, dead ends worth recording, follow-up items left for next time.
|
|
20
|
+
|
|
21
|
+
What to skip
|
|
22
|
+
- Generic narrations of every command you ran.
|
|
23
|
+
- Restating what the diff already shows; explain why, not what.
|
|
24
|
+
- Speculation about future work that isn't already grounded in the session.
|
|
25
|
+
|
|
26
|
+
Voice
|
|
27
|
+
- Past tense, factual ("Added X, decided Y because Z"). No hedging fluff.
|
|
28
|
+
- Tables for structured data (decision matrices, file-change summaries).
|
|
29
|
+
- Short paragraphs over long ones; bullet lists for sequential findings.
|
|
30
|
+
`;
|
|
31
|
+
//# sourceMappingURL=default-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-prompt.js","sourceRoot":"","sources":["../src/default-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBrC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
export type { ErrorCode } from './constants.js';
|
|
2
|
-
export { API_PATHS, API_VERSION, CURRENT_PRIVACY_VERSION, CURRENT_TOS_VERSION, DEFAULT_PAGE_LIMIT, ERROR_CODES, MAX_EMAIL_LENGTH, MAX_JOURNAL_NAME_LENGTH, MAX_PAGE_LIMIT, MAX_SUMMARY_LENGTH, MAX_TITLE_LENGTH, WS_API_PATHS, } from './constants.js';
|
|
2
|
+
export { API_PATHS, API_VERSION, CURRENT_PRIVACY_VERSION, CURRENT_TOS_VERSION, DEFAULT_PAGE_LIMIT, ERROR_CODES, MAX_EMAIL_LENGTH, MAX_JOURNAL_NAME_LENGTH, MAX_PAGE_LIMIT, MAX_PROMPT_BODY_LENGTH, MAX_PROMPT_NAME_LENGTH, MAX_SUMMARY_LENGTH, MAX_TITLE_LENGTH, SHARED_WITH_ME_SLUG, WS_API_PATHS, } from './constants.js';
|
|
3
|
+
export { DEFAULT_JOURNAL_PROMPT } from './default-prompt.js';
|
|
3
4
|
export type { BearerResolution, WrappedPayload } from './opaque-token.js';
|
|
4
5
|
export { AAD_STRING, isOpaqueToken, KEY_LEN, NONCE_LEN, resolveBearer, TAG_LEN, unwrapToken, WJTK_PREFIX, wrapToken, } from './opaque-token.js';
|
|
5
6
|
export { proposeWorkspaceNameFromEmail } from './propose-workspace-name.js';
|
|
6
7
|
export { isReservedSlug, MAX_NAME_LENGTH, MAX_SLUG_LENGTH, RESERVED_SLUGS, slugify, } from './slug.js';
|
|
8
|
+
export type { ClientOption, InterfaceOption } from './support-labels.js';
|
|
9
|
+
export { CLIENT_OPTIONS, INTERFACE_OPTIONS, isClientOption, isInterfaceOption, } from './support-labels.js';
|
|
7
10
|
export type { FeatureFlag } from './tiers.js';
|
|
8
11
|
export { canUseFeature, canUseFeatureForCode } from './tiers.js';
|
|
9
|
-
export type { AcceptInvitationRequest, AcceptLegalRequest, ApiError, CreateEntryRequest, CreateInvitationRequest, CreateJournalRequest, CreateWorkspaceRequest, Entry, EntrySummary, Invitation, Journal,
|
|
12
|
+
export type { AcceptInvitationRequest, AcceptLegalRequest, ApiError, CreateEntryRequest, CreateInvitationRequest, CreateJournalRequest, CreatePromptRequest, CreateWorkspaceRequest, Entry, EntrySummary, Invitation, Journal, JournalContributor, JournalContributorRow, JournalContributorWithEmail, JournalPromptInfo, PaginatedResponse, Prompt, SharedJournal, Tier, TierCode, UpdateEntryRequest, UpdateJournalRequest, UpdatePromptRequest, UserProfile, Workspace, } from './types.js';
|
|
10
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EACN,SAAS,EACT,WAAW,EACX,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,GACZ,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EACN,UAAU,EACV,aAAa,EACb,OAAO,EACP,SAAS,EACT,aAAa,EACb,OAAO,EACP,WAAW,EACX,WAAW,EACX,SAAS,GACT,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EACN,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,EACd,OAAO,GACP,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACjE,YAAY,EACX,uBAAuB,EACvB,kBAAkB,EAClB,QAAQ,EACR,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,KAAK,EACL,YAAY,EACZ,UAAU,EACV,OAAO,EACP,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EACN,SAAS,EACT,WAAW,EACX,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,GACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EACN,UAAU,EACV,aAAa,EACb,OAAO,EACP,SAAS,EACT,aAAa,EACb,OAAO,EACP,WAAW,EACX,WAAW,EACX,SAAS,GACT,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EACN,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,EACd,OAAO,GACP,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EACN,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,iBAAiB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACjE,YAAY,EACX,uBAAuB,EACvB,kBAAkB,EAClB,QAAQ,EACR,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,EACL,YAAY,EACZ,UAAU,EACV,OAAO,EACP,kBAAkB,EAClB,qBAAqB,EACrB,2BAA2B,EAC3B,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,EACN,aAAa,EACb,IAAI,EACJ,QAAQ,EACR,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,SAAS,GACT,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
export { API_PATHS, API_VERSION, CURRENT_PRIVACY_VERSION, CURRENT_TOS_VERSION, DEFAULT_PAGE_LIMIT, ERROR_CODES, MAX_EMAIL_LENGTH, MAX_JOURNAL_NAME_LENGTH, MAX_PAGE_LIMIT, MAX_SUMMARY_LENGTH, MAX_TITLE_LENGTH, WS_API_PATHS, } from './constants.js';
|
|
1
|
+
export { API_PATHS, API_VERSION, CURRENT_PRIVACY_VERSION, CURRENT_TOS_VERSION, DEFAULT_PAGE_LIMIT, ERROR_CODES, MAX_EMAIL_LENGTH, MAX_JOURNAL_NAME_LENGTH, MAX_PAGE_LIMIT, MAX_PROMPT_BODY_LENGTH, MAX_PROMPT_NAME_LENGTH, MAX_SUMMARY_LENGTH, MAX_TITLE_LENGTH, SHARED_WITH_ME_SLUG, WS_API_PATHS, } from './constants.js';
|
|
2
|
+
export { DEFAULT_JOURNAL_PROMPT } from './default-prompt.js';
|
|
2
3
|
export { AAD_STRING, isOpaqueToken, KEY_LEN, NONCE_LEN, resolveBearer, TAG_LEN, unwrapToken, WJTK_PREFIX, wrapToken, } from './opaque-token.js';
|
|
3
4
|
export { proposeWorkspaceNameFromEmail } from './propose-workspace-name.js';
|
|
4
5
|
export { isReservedSlug, MAX_NAME_LENGTH, MAX_SLUG_LENGTH, RESERVED_SLUGS, slugify, } from './slug.js';
|
|
6
|
+
export { CLIENT_OPTIONS, INTERFACE_OPTIONS, isClientOption, isInterfaceOption, } from './support-labels.js';
|
|
5
7
|
export { canUseFeature, canUseFeatureForCode } from './tiers.js';
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,SAAS,EACT,WAAW,EACX,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,GACZ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,SAAS,EACT,WAAW,EACX,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,GACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EACN,UAAU,EACV,aAAa,EACb,OAAO,EACP,SAAS,EACT,aAAa,EACb,OAAO,EACP,WAAW,EACX,WAAW,EACX,SAAS,GACT,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EACN,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,EACd,OAAO,GACP,MAAM,WAAW,CAAC;AAEnB,OAAO,EACN,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,iBAAiB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/slug.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../src/slug.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../src/slug.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAuB7C,CAAC;AAEH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgB7C"}
|
package/dist/slug.js
CHANGED
|
@@ -12,7 +12,9 @@ export const RESERVED_SLUGS = new Set([
|
|
|
12
12
|
'entries',
|
|
13
13
|
'share',
|
|
14
14
|
'shares',
|
|
15
|
+
'shared-with-me',
|
|
15
16
|
'members',
|
|
17
|
+
'contributors',
|
|
16
18
|
'invitations',
|
|
17
19
|
'invites',
|
|
18
20
|
'check-slug',
|
|
@@ -24,6 +26,8 @@ export const RESERVED_SLUGS = new Set([
|
|
|
24
26
|
'login',
|
|
25
27
|
'logout',
|
|
26
28
|
'authorize',
|
|
29
|
+
'prompt',
|
|
30
|
+
'prompts',
|
|
27
31
|
]);
|
|
28
32
|
export function isReservedSlug(slug) {
|
|
29
33
|
return RESERVED_SLUGS.has(slug);
|
package/dist/slug.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slug.js","sourceRoot":"","sources":["../src/slug.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAElC;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC;IAC1D,KAAK;IACL,UAAU;IACV,UAAU;IACV,SAAS;IACT,OAAO;IACP,QAAQ;IACR,SAAS;IACT,aAAa;IACb,SAAS;IACT,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,QAAQ;IACR,KAAK;IACL,MAAM;IACN,OAAO;IACP,QAAQ;IACR,WAAW;
|
|
1
|
+
{"version":3,"file":"slug.js","sourceRoot":"","sources":["../src/slug.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAElC;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC;IAC1D,KAAK;IACL,UAAU;IACV,UAAU;IACV,SAAS;IACT,OAAO;IACP,QAAQ;IACR,gBAAgB;IAChB,SAAS;IACT,cAAc;IACd,aAAa;IACb,SAAS;IACT,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,QAAQ;IACR,KAAK;IACL,MAAM;IACN,OAAO;IACP,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,SAAS;CACT,CAAC,CAAC;AAEH,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa;IACpC,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAEnD,IAAI,OAAO,CAAC,MAAM,IAAI,eAAe;QAAE,OAAO,OAAO,CAAC;IAEtD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3C,sEAAsE;IACtE,6EAA6E;IAC7E,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Closed enums used by the in-product support form (`/support`) and the
|
|
3
|
+
* GitHub bug-template form on `workjournal-pro/feedback`. Both surfaces
|
|
4
|
+
* present the same dropdowns so triage labels are uniform regardless of
|
|
5
|
+
* where a report originates.
|
|
6
|
+
*
|
|
7
|
+
* - `INTERFACE_OPTIONS` — which Workjournal surface the user was using
|
|
8
|
+
* when the issue arose. Always required on either form.
|
|
9
|
+
* - `CLIENT_OPTIONS` — which client (typically an AI agent) was driving
|
|
10
|
+
* the surface. Required on the web form (with `i-dont-know` as the
|
|
11
|
+
* default) so support emails carry usable triage context.
|
|
12
|
+
*
|
|
13
|
+
* Both sets include `i-dont-know` as a real value rather than free-text
|
|
14
|
+
* "Other" — explicit about user confidence and avoids unstructured
|
|
15
|
+
* drift in the triage labels.
|
|
16
|
+
*
|
|
17
|
+
* The kebab-case literal values are what end up on GitHub as label names
|
|
18
|
+
* and inside the support email body. The shared API and the web form
|
|
19
|
+
* validate inbound submissions against these whitelists so off-vocabulary
|
|
20
|
+
* values can't leak into triage.
|
|
21
|
+
*/
|
|
22
|
+
export declare const INTERFACE_OPTIONS: readonly ["i-dont-know", "web", "cli", "mcp", "skill", "api"];
|
|
23
|
+
export declare const CLIENT_OPTIONS: readonly ["i-dont-know", "ai-anthropic-claude-desktop", "ai-anthropic-claude-mobile", "ai-anthropic-claude-web", "ai-anthropic-claude-code", "ai-openai-chatgpt-web", "ai-openai-chatgpt-desktop", "ai-openai-chatgpt-mobile", "ai-openai-codex", "ai-perplexity-desktop", "ai-perplexity-mobile", "ai-perplexity-web", "web-browser-direct"];
|
|
24
|
+
export type InterfaceOption = (typeof INTERFACE_OPTIONS)[number];
|
|
25
|
+
export type ClientOption = (typeof CLIENT_OPTIONS)[number];
|
|
26
|
+
export declare function isInterfaceOption(value: unknown): value is InterfaceOption;
|
|
27
|
+
export declare function isClientOption(value: unknown): value is ClientOption;
|
|
28
|
+
//# sourceMappingURL=support-labels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support-labels.d.ts","sourceRoot":"","sources":["../src/support-labels.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,eAAO,MAAM,iBAAiB,+DAAgE,CAAC;AAE/F,eAAO,MAAM,cAAc,+UAcjB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AACjE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Closed enums used by the in-product support form (`/support`) and the
|
|
3
|
+
* GitHub bug-template form on `workjournal-pro/feedback`. Both surfaces
|
|
4
|
+
* present the same dropdowns so triage labels are uniform regardless of
|
|
5
|
+
* where a report originates.
|
|
6
|
+
*
|
|
7
|
+
* - `INTERFACE_OPTIONS` — which Workjournal surface the user was using
|
|
8
|
+
* when the issue arose. Always required on either form.
|
|
9
|
+
* - `CLIENT_OPTIONS` — which client (typically an AI agent) was driving
|
|
10
|
+
* the surface. Required on the web form (with `i-dont-know` as the
|
|
11
|
+
* default) so support emails carry usable triage context.
|
|
12
|
+
*
|
|
13
|
+
* Both sets include `i-dont-know` as a real value rather than free-text
|
|
14
|
+
* "Other" — explicit about user confidence and avoids unstructured
|
|
15
|
+
* drift in the triage labels.
|
|
16
|
+
*
|
|
17
|
+
* The kebab-case literal values are what end up on GitHub as label names
|
|
18
|
+
* and inside the support email body. The shared API and the web form
|
|
19
|
+
* validate inbound submissions against these whitelists so off-vocabulary
|
|
20
|
+
* values can't leak into triage.
|
|
21
|
+
*/
|
|
22
|
+
export const INTERFACE_OPTIONS = ['i-dont-know', 'web', 'cli', 'mcp', 'skill', 'api'];
|
|
23
|
+
export const CLIENT_OPTIONS = [
|
|
24
|
+
'i-dont-know',
|
|
25
|
+
'ai-anthropic-claude-desktop',
|
|
26
|
+
'ai-anthropic-claude-mobile',
|
|
27
|
+
'ai-anthropic-claude-web',
|
|
28
|
+
'ai-anthropic-claude-code',
|
|
29
|
+
'ai-openai-chatgpt-web',
|
|
30
|
+
'ai-openai-chatgpt-desktop',
|
|
31
|
+
'ai-openai-chatgpt-mobile',
|
|
32
|
+
'ai-openai-codex',
|
|
33
|
+
'ai-perplexity-desktop',
|
|
34
|
+
'ai-perplexity-mobile',
|
|
35
|
+
'ai-perplexity-web',
|
|
36
|
+
'web-browser-direct',
|
|
37
|
+
];
|
|
38
|
+
export function isInterfaceOption(value) {
|
|
39
|
+
return typeof value === 'string' && INTERFACE_OPTIONS.includes(value);
|
|
40
|
+
}
|
|
41
|
+
export function isClientOption(value) {
|
|
42
|
+
return typeof value === 'string' && CLIENT_OPTIONS.includes(value);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=support-labels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support-labels.js","sourceRoot":"","sources":["../src/support-labels.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAU,CAAC;AAE/F,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,aAAa;IACb,6BAA6B;IAC7B,4BAA4B;IAC5B,yBAAyB;IACzB,0BAA0B;IAC1B,uBAAuB;IACvB,2BAA2B;IAC3B,0BAA0B;IAC1B,iBAAiB;IACjB,uBAAuB;IACvB,sBAAsB;IACtB,mBAAmB;IACnB,oBAAoB;CACX,CAAC;AAKX,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,iBAAuC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,cAAoC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3F,CAAC"}
|
package/dist/tiers.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import type { Tier } from './types.js';
|
|
|
8
8
|
* Never gate by calling `workspace.tier_code === 'PRO'` — the feature matrix
|
|
9
9
|
* is the source of truth; tiers are just a bundle of features.
|
|
10
10
|
*/
|
|
11
|
-
export type FeatureFlag = 'can_export' | 'can_public_share' | 'can_private_share' | 'can_per_share_permissions' | 'can_word_search' | 'can_rag_search' | 'can_webhooks';
|
|
11
|
+
export type FeatureFlag = 'can_export' | 'can_public_share' | 'can_private_share' | 'can_per_share_permissions' | 'can_word_search' | 'can_rag_search' | 'can_api_tokens' | 'can_webhooks' | 'custom_prompt' | 'prompt_templates' | 'support_access';
|
|
12
12
|
export declare function canUseFeature(tier: Tier, feature: FeatureFlag): boolean;
|
|
13
13
|
/** Safe fallback: treat unknown tier as FREE-equivalent (no premium features). */
|
|
14
14
|
export declare function canUseFeatureForCode(tier: Tier | null | undefined, feature: FeatureFlag): boolean;
|
package/dist/tiers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiers.d.ts","sourceRoot":"","sources":["../src/tiers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GACpB,YAAY,GACZ,kBAAkB,GAClB,mBAAmB,GACnB,2BAA2B,GAC3B,iBAAiB,GACjB,gBAAgB,GAChB,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"tiers.d.ts","sourceRoot":"","sources":["../src/tiers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GACpB,YAAY,GACZ,kBAAkB,GAClB,mBAAmB,GACnB,2BAA2B,GAC3B,iBAAiB,GACjB,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,GACd,eAAe,GACf,kBAAkB,GAClB,gBAAgB,CAAC;AAEpB,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAEvE;AAED,kFAAkF;AAClF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAGjG"}
|
package/dist/tiers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiers.js","sourceRoot":"","sources":["../src/tiers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tiers.js","sourceRoot":"","sources":["../src/tiers.ts"],"names":[],"mappings":"AAwBA,MAAM,UAAU,aAAa,CAAC,IAAU,EAAE,OAAoB;IAC7D,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;AAC/B,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,oBAAoB,CAAC,IAA6B,EAAE,OAAoB;IACvF,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -34,6 +34,8 @@ export interface Workspace {
|
|
|
34
34
|
name: string;
|
|
35
35
|
slug: string;
|
|
36
36
|
tier_code: TierCode;
|
|
37
|
+
/** Joined Tier row. Populated by GET endpoints; absent on listing rows. */
|
|
38
|
+
tier?: Tier;
|
|
37
39
|
created_at: string;
|
|
38
40
|
updated_at: string;
|
|
39
41
|
}
|
|
@@ -48,13 +50,18 @@ export interface Tier {
|
|
|
48
50
|
sort_order: number;
|
|
49
51
|
max_journals: number;
|
|
50
52
|
max_entries_per_journal: number;
|
|
53
|
+
max_contributors_per_journal: number;
|
|
51
54
|
can_export: boolean;
|
|
52
55
|
can_public_share: boolean;
|
|
53
56
|
can_private_share: boolean;
|
|
54
57
|
can_per_share_permissions: boolean;
|
|
55
58
|
can_word_search: boolean;
|
|
56
59
|
can_rag_search: boolean;
|
|
60
|
+
can_api_tokens: boolean;
|
|
57
61
|
can_webhooks: boolean;
|
|
62
|
+
custom_prompt: boolean;
|
|
63
|
+
prompt_templates: boolean;
|
|
64
|
+
support_access: boolean;
|
|
58
65
|
paddle_product_id: string | null;
|
|
59
66
|
created_at: string;
|
|
60
67
|
updated_at: string;
|
|
@@ -72,13 +79,26 @@ export interface Journal {
|
|
|
72
79
|
updated_at: string;
|
|
73
80
|
}
|
|
74
81
|
/** Access control record linking a user to a journal with a role. */
|
|
75
|
-
export interface
|
|
82
|
+
export interface JournalContributor {
|
|
76
83
|
id: string;
|
|
77
84
|
journal_id: string;
|
|
78
85
|
user_id: string;
|
|
79
|
-
role: 'owner' | '
|
|
86
|
+
role: 'owner' | 'contributor';
|
|
80
87
|
created_at: string;
|
|
81
88
|
}
|
|
89
|
+
/** Contributor row enriched with the user's email — returned by GET /contributors. */
|
|
90
|
+
export interface JournalContributorWithEmail extends JournalContributor {
|
|
91
|
+
email: string | null;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Slim contributor shape that the journal-list and journal-detail endpoints
|
|
95
|
+
* inline next to a Journal — only the role and join date, not the full
|
|
96
|
+
* `JournalContributor` row. Use this when the consumer only needs to know who
|
|
97
|
+
* the caller is to a given journal (e.g. badge rendering, owner gate); use the
|
|
98
|
+
* full `JournalContributor` only for the contributor-management endpoints
|
|
99
|
+
* (`GET /contributors`, etc.) that return the entire row.
|
|
100
|
+
*/
|
|
101
|
+
export type JournalContributorRow = Pick<JournalContributor, 'role' | 'created_at'>;
|
|
82
102
|
/** Journal entry scoped to a journal. Identified user-facing by `index`. */
|
|
83
103
|
export interface Entry {
|
|
84
104
|
id: string;
|
|
@@ -101,6 +121,29 @@ export interface EntrySummary {
|
|
|
101
121
|
summary: string;
|
|
102
122
|
created_at: string;
|
|
103
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* Listing row from `GET /v1/shared-with-me/journals`. A journal is "shared
|
|
126
|
+
* with me" when the caller has a `journal_contributors` row but does not own
|
|
127
|
+
* the containing workspace. Each row carries enough context for a flat table
|
|
128
|
+
* view across workspaces (issue #236).
|
|
129
|
+
*/
|
|
130
|
+
export interface SharedJournal {
|
|
131
|
+
journal: {
|
|
132
|
+
id: string;
|
|
133
|
+
slug: string;
|
|
134
|
+
name: string;
|
|
135
|
+
};
|
|
136
|
+
workspace: {
|
|
137
|
+
id: string;
|
|
138
|
+
slug: string;
|
|
139
|
+
name: string;
|
|
140
|
+
};
|
|
141
|
+
owner: {
|
|
142
|
+
email: string | null;
|
|
143
|
+
};
|
|
144
|
+
role: 'owner' | 'contributor';
|
|
145
|
+
created_at: string;
|
|
146
|
+
}
|
|
104
147
|
/** Email-based invitation for journal sharing. */
|
|
105
148
|
export interface Invitation {
|
|
106
149
|
id: string;
|
|
@@ -142,6 +185,38 @@ export interface CreateInvitationRequest {
|
|
|
142
185
|
export interface AcceptInvitationRequest {
|
|
143
186
|
token: string;
|
|
144
187
|
}
|
|
188
|
+
/** Workspace-scoped prompt (issue #238). */
|
|
189
|
+
export interface Prompt {
|
|
190
|
+
id: string;
|
|
191
|
+
workspace_id: string;
|
|
192
|
+
slug: string;
|
|
193
|
+
name: string;
|
|
194
|
+
body: string;
|
|
195
|
+
created_at: string;
|
|
196
|
+
updated_at: string;
|
|
197
|
+
created_by: string | null;
|
|
198
|
+
}
|
|
199
|
+
export interface CreatePromptRequest {
|
|
200
|
+
name: string;
|
|
201
|
+
body: string;
|
|
202
|
+
slug?: string | undefined;
|
|
203
|
+
}
|
|
204
|
+
export interface UpdatePromptRequest {
|
|
205
|
+
name?: string | undefined;
|
|
206
|
+
body?: string | undefined;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Prompt block returned on `GET /v1/workspaces/:ws/journals/:j` (issue #240).
|
|
210
|
+
* Always populated — `source: 'default'` falls back to the constant in
|
|
211
|
+
* `packages/shared/src/default-prompt.ts`. Agents read `body` directly.
|
|
212
|
+
*/
|
|
213
|
+
export interface JournalPromptInfo {
|
|
214
|
+
source: 'custom' | 'default';
|
|
215
|
+
name: string | null;
|
|
216
|
+
slug: string | null;
|
|
217
|
+
body: string;
|
|
218
|
+
used_by_count: number | null;
|
|
219
|
+
}
|
|
145
220
|
export interface PaginatedResponse<T> {
|
|
146
221
|
data: T[];
|
|
147
222
|
total: number;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAC3B;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,MAAM,WAAW,SAAS;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,QAAQ,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,IAAI;IACpB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,yBAAyB,EAAE,OAAO,CAAC;IACnC,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,qFAAqF;AACrF,MAAM,WAAW,OAAO;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,qEAAqE;AACrE,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workjournal/shared",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
4
|
"description": "Shared types, constants, and credential helpers for the Workjournal CLI and MCP server.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"directory": "packages/shared"
|
|
32
32
|
},
|
|
33
33
|
"bugs": {
|
|
34
|
-
"url": "https://github.com/workjournal-pro/
|
|
34
|
+
"url": "https://github.com/workjournal-pro/feedback/issues"
|
|
35
35
|
},
|
|
36
36
|
"homepage": "https://workjournal.pro",
|
|
37
37
|
"keywords": [
|