@purveyors/cli 0.5.0 → 0.6.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.
Files changed (43) hide show
  1. package/README.md +292 -32
  2. package/dist/commands/auth.d.ts.map +1 -1
  3. package/dist/commands/auth.js +35 -4
  4. package/dist/commands/auth.js.map +1 -1
  5. package/dist/commands/catalog.d.ts +1 -1
  6. package/dist/commands/catalog.d.ts.map +1 -1
  7. package/dist/commands/catalog.js +41 -5
  8. package/dist/commands/catalog.js.map +1 -1
  9. package/dist/commands/config.d.ts.map +1 -1
  10. package/dist/commands/config.js +26 -0
  11. package/dist/commands/config.js.map +1 -1
  12. package/dist/commands/context.d.ts +8 -0
  13. package/dist/commands/context.d.ts.map +1 -0
  14. package/dist/commands/context.js +282 -0
  15. package/dist/commands/context.js.map +1 -0
  16. package/dist/commands/inventory.d.ts +1 -1
  17. package/dist/commands/inventory.d.ts.map +1 -1
  18. package/dist/commands/inventory.js +78 -41
  19. package/dist/commands/inventory.js.map +1 -1
  20. package/dist/commands/roast.d.ts +1 -1
  21. package/dist/commands/roast.d.ts.map +1 -1
  22. package/dist/commands/roast.js +112 -63
  23. package/dist/commands/roast.js.map +1 -1
  24. package/dist/commands/sales.d.ts +1 -1
  25. package/dist/commands/sales.d.ts.map +1 -1
  26. package/dist/commands/sales.js +59 -34
  27. package/dist/commands/sales.js.map +1 -1
  28. package/dist/commands/tasting.d.ts +1 -1
  29. package/dist/commands/tasting.d.ts.map +1 -1
  30. package/dist/commands/tasting.js +46 -25
  31. package/dist/commands/tasting.js.map +1 -1
  32. package/dist/index.js +57 -28
  33. package/dist/index.js.map +1 -1
  34. package/dist/lib/ai.js +1 -1
  35. package/dist/lib/ai.js.map +1 -1
  36. package/dist/lib/auth-guard.d.ts +14 -0
  37. package/dist/lib/auth-guard.d.ts.map +1 -0
  38. package/dist/lib/auth-guard.js +44 -0
  39. package/dist/lib/auth-guard.js.map +1 -0
  40. package/dist/lib/supabase.d.ts.map +1 -1
  41. package/dist/lib/supabase.js +9 -8
  42. package/dist/lib/supabase.js.map +1 -1
  43. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sales.js","sourceRoot":"","sources":["../../src/commands/sales.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sales.js","sourceRoot":"","sources":["../../src/commands/sales.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ export { isValidCuppingScore, parseCuppingScore };
6
6
  /**
7
7
  * `purvey tasting` — View and record tasting notes for a bean.
8
8
  * Combines supplier notes from coffee_catalog with user notes from green_coffee_inv.
9
- * Requires authentication.
9
+ * Requires member+ authentication.
10
10
  */
11
11
  export declare function buildTastingCommand(): Command;
12
12
  //# sourceMappingURL=tasting.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tasting.d.ts","sourceRoot":"","sources":["../../src/commands/tasting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,EAGL,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMlF,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;AAsBlD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAqL7C"}
1
+ {"version":3,"file":"tasting.d.ts","sourceRoot":"","sources":["../../src/commands/tasting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,EAGL,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMlF,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;AAsBlD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAwM7C"}
@@ -1,8 +1,8 @@
1
1
  import { Command } from 'commander';
2
2
  import * as p from '@clack/prompts';
3
- import { createAuthenticatedClient } from '../lib/supabase.js';
4
3
  import { outputData, info, success } from '../lib/output.js';
5
- import { withErrorHandling, AuthError, PrvrsError } from '../lib/errors.js';
4
+ import { withErrorHandling, PrvrsError } from '../lib/errors.js';
5
+ import { requireAuth } from '../lib/auth-guard.js';
6
6
  import { getTastingNotes, rateCoffee, isValidCuppingScore, parseCuppingScore, } from '../lib/tasting.js';
7
7
  import { pickBean, guardCancel } from '../lib/interactive/forms.js';
8
8
  import { getConfigValue } from '../lib/config.js';
@@ -27,7 +27,7 @@ async function promptCuppingScore(dimension) {
27
27
  /**
28
28
  * `purvey tasting` — View and record tasting notes for a bean.
29
29
  * Combines supplier notes from coffee_catalog with user notes from green_coffee_inv.
30
- * Requires authentication.
30
+ * Requires member+ authentication.
31
31
  */
32
32
  export function buildTastingCommand() {
33
33
  const tasting = new Command('tasting').description('View and record tasting notes for a coffee bean');
@@ -36,6 +36,21 @@ export function buildTastingCommand() {
36
36
  .command('get <bean-id>')
37
37
  .description('Retrieve tasting notes for a bean (by coffee_catalog ID). Combines supplier and user notes.')
38
38
  .option('--filter <type>', 'Which notes to show: user, supplier, or both (default: both)', 'both')
39
+ .addHelpText('after', `
40
+ Examples:
41
+ purvey tasting get 128 --pretty
42
+ purvey tasting get 128 --filter supplier --pretty
43
+ purvey tasting get 128 --filter user --pretty
44
+ purvey tasting get 42 | jq '.user.aroma'
45
+
46
+ Notes:
47
+ <bean-id> is coffee_catalog.catalog_id (NOT inventory id).
48
+ --filter both returns: {supplier: {flavor_notes, ...}, user: {aroma, body, ...}}
49
+ --filter supplier: only the supplier's flavor notes from the catalog.
50
+ --filter user: only your cupping scores from green_coffee_inv.
51
+ Returns null fields if no notes exist for that filter.
52
+ Requires authentication (member role).
53
+ `)
39
54
  .action(withErrorHandling(async (beanId, opts, cmd) => {
40
55
  const globalOpts = cmd.optsWithGlobals();
41
56
  const filter = opts.filter;
@@ -46,12 +61,8 @@ export function buildTastingCommand() {
46
61
  if (isNaN(catalogId)) {
47
62
  throw new PrvrsError('INVALID_ARGUMENT', `Invalid bean ID: "${beanId}".`);
48
63
  }
49
- const supabase = await createAuthenticatedClient();
50
- const { data: { user }, } = await supabase.auth.getUser();
51
- if (!user) {
52
- throw new AuthError('Not logged in. Run `purvey auth login` first.');
53
- }
54
- const result = await getTastingNotes(supabase, user.id, catalogId, filter);
64
+ const { supabase, userId } = await requireAuth('member');
65
+ const result = await getTastingNotes(supabase, userId, catalogId, filter);
55
66
  if (result.supplier === null && result.user === null) {
56
67
  info(`No tasting notes found for bean ID ${catalogId} (filter: ${filter}).`);
57
68
  return;
@@ -62,28 +73,38 @@ export function buildTastingCommand() {
62
73
  tasting
63
74
  .command('rate')
64
75
  .description('Rate a bean from your inventory using cupping scores (updates green_coffee_inv)')
65
- .argument('[bean-id]', 'Inventory item ID (green_coffee_inv), or use --form')
66
- .option('--aroma <1-5>', 'Aroma score (1-5)')
67
- .option('--body <1-5>', 'Body score (1-5)')
68
- .option('--acidity <1-5>', 'Acidity score (1-5)')
69
- .option('--sweetness <1-5>', 'Sweetness score (1-5)')
70
- .option('--aftertaste <1-5>', 'Aftertaste score (1-5)')
71
- .option('--brew-method <method>', 'Brew method (e.g. pour_over, french_press, espresso)')
76
+ .argument('[bean-id]', 'Inventory item ID (green_coffee_inv.id), or use --form')
77
+ .option('--aroma <1-5>', '[REQUIRED in flag mode] Aroma score, integer 1-5')
78
+ .option('--body <1-5>', '[REQUIRED in flag mode] Body score, integer 1-5')
79
+ .option('--acidity <1-5>', '[REQUIRED in flag mode] Acidity score, integer 1-5')
80
+ .option('--sweetness <1-5>', '[REQUIRED in flag mode] Sweetness score, integer 1-5')
81
+ .option('--aftertaste <1-5>', '[REQUIRED in flag mode] Aftertaste score, integer 1-5')
82
+ .option('--brew-method <method>', 'Brew method used (e.g. pour_over, french_press, espresso)')
72
83
  .option('--notes <text>', 'Additional tasting notes')
73
- .option('--form', 'Interactive form mode')
84
+ .option('--form', 'Interactive form mode (browse inventory + guided scoring)')
85
+ .addHelpText('after', `
86
+ Examples:
87
+ purvey tasting rate 7 --aroma 4 --body 3 --acidity 5 --sweetness 4 --aftertaste 4
88
+ purvey tasting rate 7 --aroma 5 --body 4 --acidity 4 --sweetness 5 --aftertaste 4 --brew-method pour_over
89
+ purvey tasting rate 42 --aroma 3 --body 3 --acidity 3 --sweetness 3 --aftertaste 3 --notes "Underextracted, try finer grind"
90
+ purvey tasting rate --form # interactive wizard
91
+
92
+ Required (flag mode): <bean-id> + all five score flags (--aroma, --body, --acidity, --sweetness, --aftertaste)
93
+ <bean-id> is green_coffee_inv.id (your inventory ID, NOT catalog_id).
94
+ Use 'purvey inventory list' to find your bean IDs.
95
+ Scores: integer 1 (low) to 5 (excellent).
96
+ Scores are stored on your green_coffee_inv row (overwrite on re-rate).
97
+ Requires authentication (member role).
98
+ `)
74
99
  .action(withErrorHandling(async (beanId, opts, cmd) => {
75
100
  const globalOpts = cmd.optsWithGlobals();
76
- const supabase = await createAuthenticatedClient();
77
- const { data: { user }, } = await supabase.auth.getUser();
78
- if (!user) {
79
- throw new AuthError('Not logged in. Run `purvey auth login` first.');
80
- }
101
+ const { supabase, userId } = await requireAuth('member');
81
102
  // ── Interactive form mode ────────────────────────────────────────
82
103
  // Auto-enter form mode if config form-mode is true and required args are missing
83
104
  const formMode = opts.form || (!opts.id && (await getConfigValue('form-mode')) === 'true');
84
105
  if (formMode) {
85
106
  p.intro('Rate Coffee');
86
- const bean = await pickBean(supabase, user.id);
107
+ const bean = await pickBean(supabase, userId);
87
108
  const aroma = await promptCuppingScore('Aroma');
88
109
  const body = await promptCuppingScore('Body');
89
110
  const acidity = await promptCuppingScore('Acidity');
@@ -103,7 +124,7 @@ export function buildTastingCommand() {
103
124
  const notesStr = String(notesRaw).trim();
104
125
  const spin = p.spinner();
105
126
  spin.start('Saving rating...');
106
- const data = await rateCoffee(supabase, user.id, bean.id, {
127
+ const data = await rateCoffee(supabase, userId, bean.id, {
107
128
  aroma,
108
129
  body,
109
130
  acidity,
@@ -137,7 +158,7 @@ export function buildTastingCommand() {
137
158
  const acidity = parseCuppingScore(opts.acidity, 'acidity');
138
159
  const sweetness = parseCuppingScore(opts.sweetness, 'sweetness');
139
160
  const aftertaste = parseCuppingScore(opts.aftertaste, 'aftertaste');
140
- const data = await rateCoffee(supabase, user.id, inventoryId, {
161
+ const data = await rateCoffee(supabase, userId, inventoryId, {
141
162
  aroma,
142
163
  body,
143
164
  acidity,
@@ -1 +1 @@
1
- {"version":3,"file":"tasting.js","sourceRoot":"","sources":["../../src/commands/tasting.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tasting.js","sourceRoot":"","sources":["../../src/commands/tasting.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3,6 +3,7 @@ import { Command } from 'commander';
3
3
  import { buildAuthCommand } from './commands/auth.js';
4
4
  import { buildCatalogCommand } from './commands/catalog.js';
5
5
  import { buildConfigCommand } from './commands/config.js';
6
+ import { buildContextCommand } from './commands/context.js';
6
7
  import { buildInventoryCommand } from './commands/inventory.js';
7
8
  import { buildRoastCommand } from './commands/roast.js';
8
9
  import { buildSalesCommand } from './commands/sales.js';
@@ -29,41 +30,69 @@ program
29
30
  .option('--pretty', 'Pretty-print JSON output with colors')
30
31
  .option('--csv', 'Output results as CSV (useful for piping to spreadsheets)')
31
32
  .addHelpText('after', `
33
+ Authentication:
34
+ auth login Log in to purveyors.io (--headless for agents)
35
+ auth status Show current login status and role
36
+ auth logout Clear stored credentials
37
+
38
+ Coffee Data (viewer+, no login needed):
39
+ catalog search Search the coffee catalog with filters
40
+ catalog get Get details for a specific coffee by ID
41
+ catalog stats Aggregate statistics for the catalog
42
+
43
+ Personal Data (member role required):
44
+ inventory list List your green coffee inventory
45
+ inventory get Get a single inventory item
46
+ inventory add Add a bean to your inventory
47
+ inventory update Update an inventory item
48
+ inventory delete Delete an inventory item
49
+ roast list List your roast profiles
50
+ roast get Get a single roast profile
51
+ roast create Create a new roast profile
52
+ roast delete Delete a roast profile
53
+ roast import Import an Artisan .alog roast file
54
+ roast watch Watch a directory for new .alog files
55
+ sales list List your sales records
56
+ sales record Record a new sale
57
+ sales update Update a sale record
58
+ sales delete Delete a sale record
59
+ tasting get Get tasting notes for a coffee
60
+ tasting rate Rate a coffee bean (cupping scores)
61
+
62
+ Configuration:
63
+ config list Show all config values
64
+ config get Get a config value
65
+ config set Set a config value
66
+ config reset Reset config to defaults
67
+
68
+ Agent Tools:
69
+ context Output full CLI reference for AI agent onboarding
70
+
71
+ Global Options:
72
+ --json Output as JSON (default for most commands)
73
+ --pretty Pretty-print JSON output
74
+ --csv Output as CSV
75
+ --help Show help for any command
76
+ --version Show version number
77
+
32
78
  Examples:
33
- $ purvey auth login # Authenticate via Google
34
- $ purvey auth status # Check login state
35
- $ purvey catalog search --origin Ethiopia --stocked
36
- $ purvey catalog get 42
37
- $ purvey catalog stats
38
- $ purvey inventory list --stocked
39
- $ purvey inventory get 7
40
- $ purvey inventory add --catalog-id 42 --qty 5 --cost 28.50
41
- $ purvey inventory update 7 --stocked true
42
- $ purvey inventory delete 7
43
- $ purvey roast list --limit 5
44
- $ purvey roast get 123 --include-temps
45
- $ purvey roast create --coffee-id 7 --batch-name "Ethiopia Guji" --oz-in 16
46
- $ purvey roast delete 123
47
- $ purvey sales list
48
- $ purvey sales record --roast-id 123 --oz 12 --price 22.00
49
- $ purvey sales update 5 --price 24.00
50
- $ purvey sales delete 5
51
- $ purvey tasting get 42 --filter both
52
- $ purvey tasting rate 7 --aroma 4 --body 3 --acidity 5 --sweetness 4 --aftertaste 4
53
- $ purvey tasting rate --form # Interactive rating wizard
54
- $ purvey inventory add --form # Interactive inventory wizard
55
- $ purvey roast create --form # Interactive roast wizard
56
- $ purvey sales record --form # Interactive sales wizard
57
- $ purvey config set form-mode true # Auto-enter form mode when args missing
58
- $ purvey config list # Show all config
59
- $ purvey --help # Show this help
79
+ $ purvey auth login --headless
80
+ $ purvey catalog search --origin "Ethiopia" --process "natural" --pretty
81
+ $ purvey catalog search --stocked --flavor "blueberry,citrus" --csv
82
+ $ purvey inventory list --stocked --pretty
83
+ $ purvey roast import my-roast.alog --coffee-id 128
84
+ $ purvey roast watch ~/artisan/ --auto-match
85
+ $ purvey tasting rate 42 --aroma 4 --body 3 --acidity 5 --sweetness 4 --aftertaste 4
86
+ $ purvey context # AI agent onboarding reference
60
87
 
61
- Docs: https://github.com/reedwhetstone/purveyors-cli
88
+ Documentation: https://github.com/reedwhetstone/purveyors-cli
89
+ Agent reference: purvey context
62
90
  `);
63
91
  // Register subcommands
64
92
  program.addCommand(buildAuthCommand());
65
93
  program.addCommand(buildCatalogCommand());
66
94
  program.addCommand(buildConfigCommand());
95
+ program.addCommand(buildContextCommand());
67
96
  program.addCommand(buildInventoryCommand());
68
97
  program.addCommand(buildRoastCommand());
69
98
  program.addCommand(buildSalesCommand());
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,4CAA4C;AAC5C,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,IAAI,CAAC;IACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACrF,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;AACnC,CAAC;AAAC,MAAM,CAAC;IACP,gCAAgC;AAClC,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,4EAA4E,CAAC;KACzF,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,eAAe,CAAC;KAClD,MAAM,CAAC,UAAU,EAAE,sCAAsC,CAAC;KAC1D,MAAM,CAAC,OAAO,EAAE,2DAA2D,CAAC;KAC5E,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BH,CACE,CAAC;AAEJ,uBAAuB;AACvB,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAC5C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAE1C,qBAAqB;AACrB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACtD,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,4CAA4C;AAC5C,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,IAAI,CAAC;IACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACrF,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;AACnC,CAAC;AAAC,MAAM,CAAC;IACP,gCAAgC;AAClC,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,4EAA4E,CAAC;KACzF,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,eAAe,CAAC;KAClD,MAAM,CAAC,UAAU,EAAE,sCAAsC,CAAC;KAC1D,MAAM,CAAC,OAAO,EAAE,2DAA2D,CAAC;KAC5E,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0DH,CACE,CAAC;AAEJ,uBAAuB;AACvB,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAC5C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAE1C,qBAAqB;AACrB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACtD,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/dist/lib/ai.js CHANGED
@@ -15,7 +15,7 @@ export async function classifyRoast(supabase, input) {
15
15
  if (!session) {
16
16
  throw new Error('Not authenticated. Run `purvey auth login` first.');
17
17
  }
18
- const baseUrl = process.env.PURVEYORS_BASE_URL ?? 'https://purveyors.io';
18
+ const baseUrl = process.env.PURVEYORS_BASE_URL ?? 'https://www.purveyors.io';
19
19
  const response = await fetch(`${baseUrl}/api/ai/classify-roast`, {
20
20
  method: 'POST',
21
21
  headers: {
@@ -1 +1 @@
1
- {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/lib/ai.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA+BH,iFAAiF;AAEjF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAwB,EACxB,KAAyB;IAEzB,yCAAyC;IACzC,MAAM,EACJ,IAAI,EAAE,EAAE,OAAO,EAAE,GAClB,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;IACrC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,sBAAsB,CAAC;IAEzE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,wBAAwB,EAAE;QAC/D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,OAAO,CAAC,YAAY,EAAE;SAChD;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;KAC5B,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;IAEhE,2EAA2E;IAC3E,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;KACH,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/lib/ai.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA+BH,iFAAiF;AAEjF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAwB,EACxB,KAAyB;IAEzB,yCAAyC;IACzC,MAAM,EACJ,IAAI,EAAE,EAAE,OAAO,EAAE,GAClB,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;IACrC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,0BAA0B,CAAC;IAE7E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,wBAAwB,EAAE;QAC/D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,OAAO,CAAC,YAAY,EAAE;SAChD;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;KAC5B,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;IAEhE,2EAA2E;IAC3E,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;KACH,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { SupabaseClient } from '@supabase/supabase-js';
2
+ export type RequiredRole = 'viewer' | 'member';
3
+ /**
4
+ * Ensure the user is authenticated and has the required role.
5
+ * Returns the authenticated Supabase client and userId.
6
+ *
7
+ * - 'viewer' = any logged-in user (catalog read commands)
8
+ * - 'member' = member role or higher (all write/personal-data commands)
9
+ */
10
+ export declare function requireAuth(role?: RequiredRole): Promise<{
11
+ supabase: SupabaseClient;
12
+ userId: string;
13
+ }>;
14
+ //# sourceMappingURL=auth-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-guard.d.ts","sourceRoot":"","sources":["../../src/lib/auth-guard.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAU/C;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,IAAI,GAAE,YAAuB,GAC5B,OAAO,CAAC;IAAE,QAAQ,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAqCvD"}
@@ -0,0 +1,44 @@
1
+ import { createAuthenticatedClient } from './supabase.js';
2
+ import { AuthError } from './errors.js';
3
+ const ROLE_HIERARCHY = {
4
+ viewer: 0,
5
+ member: 1,
6
+ 'api-member': 1,
7
+ admin: 2,
8
+ 'api-enterprise': 2,
9
+ };
10
+ /**
11
+ * Ensure the user is authenticated and has the required role.
12
+ * Returns the authenticated Supabase client and userId.
13
+ *
14
+ * - 'viewer' = any logged-in user (catalog read commands)
15
+ * - 'member' = member role or higher (all write/personal-data commands)
16
+ */
17
+ export async function requireAuth(role = 'viewer') {
18
+ // createAuthenticatedClient already throws AuthError when:
19
+ // - no credentials on disk
20
+ // - session is expired/revoked (with appropriate message)
21
+ const supabase = await createAuthenticatedClient();
22
+ const { data: { user }, error, } = await supabase.auth.getUser();
23
+ if (error || !user) {
24
+ throw new AuthError('Authentication failed. Run `purvey auth login` first.');
25
+ }
26
+ // For viewer-level access we only need a valid session — no role check required.
27
+ if (role !== 'viewer') {
28
+ const { data: roleData } = await supabase
29
+ .from('user_roles')
30
+ .select('user_role')
31
+ .eq('id', user.id)
32
+ .single();
33
+ const userRoles = roleData?.user_role ?? [];
34
+ const requiredLevel = ROLE_HIERARCHY[role] ?? 0;
35
+ const hasRole = userRoles.some((r) => (ROLE_HIERARCHY[r] ?? -1) >= requiredLevel);
36
+ if (!hasRole) {
37
+ throw new AuthError(`This command requires "${role}" role or higher.\n` +
38
+ ` Your roles: ${userRoles.length > 0 ? userRoles.join(', ') : 'none'}\n` +
39
+ ` Upgrade at https://purveyors.io/account`);
40
+ }
41
+ }
42
+ return { supabase, userId: user.id };
43
+ }
44
+ //# sourceMappingURL=auth-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-guard.js","sourceRoot":"","sources":["../../src/lib/auth-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKxC,MAAM,cAAc,GAA2B;IAC7C,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,YAAY,EAAE,CAAC;IACf,KAAK,EAAE,CAAC;IACR,gBAAgB,EAAE,CAAC;CACpB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAqB,QAAQ;IAE7B,2DAA2D;IAC3D,6BAA6B;IAC7B,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,MAAM,yBAAyB,EAAE,CAAC;IAEnD,MAAM,EACJ,IAAI,EAAE,EAAE,IAAI,EAAE,EACd,KAAK,GACN,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAElC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,SAAS,CAAC,uDAAuD,CAAC,CAAC;IAC/E,CAAC;IAED,iFAAiF;IACjF,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ;aACtC,IAAI,CAAC,YAAY,CAAC;aAClB,MAAM,CAAC,WAAW,CAAC;aACnB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;aACjB,MAAM,EAAE,CAAC;QAEZ,MAAM,SAAS,GAAc,QAAQ,EAAE,SAAsB,IAAI,EAAE,CAAC;QACpE,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;QAElF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,SAAS,CACjB,0BAA0B,IAAI,qBAAqB;gBACjD,iBAAiB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI;gBACzE,2CAA2C,CAC9C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;AACvC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../src/lib/supabase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAe1E;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,CAOjD;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,cAAc,CAAC,CAoCzE;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAAC,CA0CR"}
1
+ {"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../src/lib/supabase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAe1E;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,CAOjD;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,cAAc,CAAC,CAuCzE;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAAC,CA0CR"}
@@ -49,10 +49,11 @@ export async function createAuthenticatedClient() {
49
49
  expiresAt: (data.session.expires_at ?? 0) * 1000,
50
50
  });
51
51
  }
52
- if (error) {
53
- // Refresh failed — credentials are expired
52
+ if (error || !data.session) {
53
+ // Refresh failed — both access and refresh tokens are expired/revoked
54
54
  await deleteCredentials();
55
- throw new AuthError('Session expired. Run `purvey auth login` to re-authenticate.');
55
+ throw new AuthError('Session expired. Run `purvey auth login` to re-authenticate.\n' +
56
+ (error ? ` Reason: ${error.message}` : ''));
56
57
  }
57
58
  return client;
58
59
  }
@@ -64,10 +65,8 @@ export async function validateSession() {
64
65
  const creds = await readCredentials();
65
66
  if (!creds)
66
67
  return null;
67
- // Check expiry before hitting the network
68
- if (Date.now() > creds.expiresAt) {
69
- return null;
70
- }
68
+ // Even if access token is expired, try refreshing via createAuthenticatedClient
69
+ // (it uses setSession which handles refresh automatically)
71
70
  try {
72
71
  const client = await createAuthenticatedClient();
73
72
  const { data: { user }, error, } = await client.auth.getUser();
@@ -88,11 +87,13 @@ export async function validateSession() {
88
87
  catch {
89
88
  // user_roles query failed — fall back to auth role
90
89
  }
90
+ // Re-read credentials (may have been refreshed by createAuthenticatedClient)
91
+ const freshCreds = await readCredentials();
91
92
  return {
92
93
  id: user.id,
93
94
  email: user.email,
94
95
  role: appRoles.length > 0 ? appRoles.join(', ') : (user.role ?? 'authenticated'),
95
- expiresAt: creds.expiresAt,
96
+ expiresAt: freshCreds?.expiresAt ?? creds.expiresAt,
96
97
  };
97
98
  }
98
99
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"supabase.js","sourceRoot":"","sources":["../../src/lib/supabase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"supabase.js","sourceRoot":"","sources":["../../src/lib/supabase.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purveyors/cli",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "The official CLI for purveyors.io — coffee intelligence from your terminal",
5
5
  "type": "module",
6
6
  "bin": {