hazo_notes 1.1.6 → 1.2.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 +54 -11
- package/SETUP_CHECKLIST.md +28 -12
- package/dist/api/create_notes_handler.d.ts.map +1 -1
- package/dist/api/create_notes_handler.js +39 -16
- package/dist/api/create_notes_handler.js.map +1 -1
- package/dist/types/index.d.ts +31 -1
- package/dist/types/index.d.ts.map +1 -1
- package/migrations/002_grant_api_user_hazo_notes.sql +24 -0
- package/package.json +12 -12
package/README.md
CHANGED
|
@@ -70,21 +70,24 @@ Create `app/api/hazo_notes/[ref_id]/route.ts`:
|
|
|
70
70
|
```typescript
|
|
71
71
|
import { createNotesHandler } from 'hazo_notes/api';
|
|
72
72
|
import { getHazoConnectSingleton } from 'hazo_connect/nextjs/setup';
|
|
73
|
-
|
|
74
|
-
import { getSession } from '@/lib/auth'; // Replace with your auth
|
|
73
|
+
import { hazo_get_tenant_auth } from 'hazo_auth/server-lib';
|
|
75
74
|
import { getUserById } from '@/lib/users'; // Replace with your user lookup
|
|
75
|
+
import type { NextRequest } from 'next/server';
|
|
76
76
|
|
|
77
77
|
export const dynamic = 'force-dynamic';
|
|
78
78
|
|
|
79
79
|
const { GET, POST } = createNotesHandler({
|
|
80
80
|
getHazoConnect: () => getHazoConnectSingleton(),
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const
|
|
84
|
-
|
|
81
|
+
// Preferred: hazo_auth@6.x tenant auth. Used by both GET and POST.
|
|
82
|
+
getAuth: async (req) => {
|
|
83
|
+
const auth = await hazo_get_tenant_auth(req as NextRequest);
|
|
84
|
+
if (!auth.authenticated || !auth.user?.id) return null;
|
|
85
|
+
return {
|
|
86
|
+
user_id: auth.user.id,
|
|
87
|
+
scope_id: auth.selected_scope_id ?? null,
|
|
88
|
+
};
|
|
85
89
|
},
|
|
86
90
|
getUserProfile: async (userId) => {
|
|
87
|
-
// IMPORTANT: Replace with your user profile lookup
|
|
88
91
|
const user = await getUserById(userId);
|
|
89
92
|
return {
|
|
90
93
|
id: userId,
|
|
@@ -98,6 +101,15 @@ const { GET, POST } = createNotesHandler({
|
|
|
98
101
|
export { GET, POST };
|
|
99
102
|
```
|
|
100
103
|
|
|
104
|
+
> **GET requires auth.** Starting in `1.2.0`, GET responds `401` when the auth
|
|
105
|
+
> resolver returns `null`, matching POST. Older releases left GET anonymous.
|
|
106
|
+
> If you're still on `hazo_auth@5.x`, use `getUserIdFromRequest` instead of
|
|
107
|
+
> `getAuth` — the package falls back to it for backward compatibility.
|
|
108
|
+
|
|
109
|
+
> **Error detail.** On `500` responses the underlying error message is
|
|
110
|
+
> included as `cause` in dev (when `NODE_ENV !== 'production'`). Set
|
|
111
|
+
> `expose_error_cause: false` to suppress, or `true` to force it on in prod.
|
|
112
|
+
|
|
101
113
|
### 3. Set Up Database
|
|
102
114
|
|
|
103
115
|
Run the migration:
|
|
@@ -114,6 +126,11 @@ CREATE TABLE hazo_notes (
|
|
|
114
126
|
);
|
|
115
127
|
|
|
116
128
|
CREATE INDEX idx_hazo_notes_ref_id ON hazo_notes(ref_id);
|
|
129
|
+
|
|
130
|
+
-- REQUIRED for PostgREST consumers — without this, GET/POST return 500 with
|
|
131
|
+
-- cause "permission denied for table hazo_notes" (PostgREST error 42501).
|
|
132
|
+
-- Shipped as migrations/002_grant_api_user_hazo_notes.sql.
|
|
133
|
+
GRANT SELECT, INSERT, UPDATE, DELETE ON hazo_notes TO api_user;
|
|
117
134
|
```
|
|
118
135
|
|
|
119
136
|
**SQLite:**
|
|
@@ -672,17 +689,43 @@ getUserProfile: async (userId) => {
|
|
|
672
689
|
|
|
673
690
|
### Authentication errors
|
|
674
691
|
|
|
675
|
-
**Problem**:
|
|
692
|
+
**Problem**: `401 Unauthorized` on GET or POST.
|
|
693
|
+
|
|
694
|
+
**Solution**: Wire `getAuth` (preferred, hazo_auth@6.x) or `getUserIdFromRequest`
|
|
695
|
+
(hazo_auth@5.x). GET and POST both require a non-null user; both return `401`
|
|
696
|
+
if the resolver returns `null`.
|
|
676
697
|
|
|
677
|
-
**Solution**: Implement `getUserIdFromRequest` to return authenticated user ID:
|
|
678
698
|
```typescript
|
|
699
|
+
// hazo_auth@6.x — preferred
|
|
700
|
+
getAuth: async (req) => {
|
|
701
|
+
const auth = await hazo_get_tenant_auth(req as NextRequest);
|
|
702
|
+
if (!auth.authenticated || !auth.user?.id) return null;
|
|
703
|
+
return { user_id: auth.user.id, scope_id: auth.selected_scope_id ?? null };
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
// hazo_auth@5.x — backward-compatible fallback
|
|
679
707
|
getUserIdFromRequest: async (req) => {
|
|
680
708
|
const session = await getSession(req);
|
|
681
|
-
|
|
682
|
-
return session.user.id;
|
|
709
|
+
return session?.user?.id ?? null;
|
|
683
710
|
}
|
|
684
711
|
```
|
|
685
712
|
|
|
713
|
+
### PostgREST `permission denied for table hazo_notes` (500 with cause 42501)
|
|
714
|
+
|
|
715
|
+
**Problem**: GET/POST return 500. Response includes
|
|
716
|
+
`"cause": "permission denied for table hazo_notes"` (when `expose_error_cause`
|
|
717
|
+
is enabled).
|
|
718
|
+
|
|
719
|
+
**Solution**: Apply `migrations/002_grant_api_user_hazo_notes.sql`. It grants
|
|
720
|
+
`SELECT, INSERT, UPDATE, DELETE` on `hazo_notes` to the `api_user` role used
|
|
721
|
+
by PostgREST. Reproducing the underlying error directly:
|
|
722
|
+
|
|
723
|
+
```bash
|
|
724
|
+
curl "$POSTGREST_URL/hazo_notes?limit=1"
|
|
725
|
+
# Before grant: 401 / "permission denied for table hazo_notes"
|
|
726
|
+
# After grant: [] or rows
|
|
727
|
+
```
|
|
728
|
+
|
|
686
729
|
## Examples
|
|
687
730
|
|
|
688
731
|
See the `test-app/` directory for complete working examples:
|
package/SETUP_CHECKLIST.md
CHANGED
|
@@ -66,15 +66,25 @@ CREATE TABLE IF NOT EXISTS hazo_notes (
|
|
|
66
66
|
CREATE INDEX IF NOT EXISTS idx_hazo_notes_ref_id ON hazo_notes(ref_id);
|
|
67
67
|
```
|
|
68
68
|
|
|
69
|
-
**Alternative**: Use the provided migration
|
|
69
|
+
**Alternative**: Use the provided migration files:
|
|
70
70
|
```bash
|
|
71
|
-
# PostgreSQL
|
|
71
|
+
# PostgreSQL — apply both files in order
|
|
72
72
|
psql -d your_database -f node_modules/hazo_notes/migrations/001_create_hazo_notes_table.sql
|
|
73
|
+
psql -d your_database -f node_modules/hazo_notes/migrations/002_grant_api_user_hazo_notes.sql
|
|
73
74
|
|
|
74
|
-
# SQLite
|
|
75
|
+
# SQLite — only 001 (SQLite has no role system, skip 002)
|
|
75
76
|
sqlite3 your_database.db < node_modules/hazo_notes/migrations/001_create_hazo_notes_table.sql
|
|
76
77
|
```
|
|
77
78
|
|
|
79
|
+
> **PostgREST consumers MUST apply migration 002.** Without it, PostgREST
|
|
80
|
+
> returns `42501 / permission denied for table hazo_notes` and the API
|
|
81
|
+
> surfaces a generic 500. Migration 002 grants
|
|
82
|
+
> `SELECT, INSERT, UPDATE, DELETE` on `hazo_notes` to `api_user`. Verify with:
|
|
83
|
+
>
|
|
84
|
+
> ```bash
|
|
85
|
+
> curl "$POSTGREST_URL/hazo_notes?limit=1" # should return [] not 401
|
|
86
|
+
> ```
|
|
87
|
+
|
|
78
88
|
## API Routes
|
|
79
89
|
|
|
80
90
|
### 4. Create the notes API route
|
|
@@ -84,25 +94,27 @@ Create `app/api/hazo_notes/[ref_id]/route.ts`:
|
|
|
84
94
|
```typescript
|
|
85
95
|
import { createNotesHandler } from 'hazo_notes/api';
|
|
86
96
|
import { getHazoConnectSingleton } from 'hazo_connect/nextjs/setup';
|
|
87
|
-
|
|
88
|
-
import { getSession } from '@/lib/auth';
|
|
97
|
+
import { hazo_get_tenant_auth } from 'hazo_auth/server-lib';
|
|
89
98
|
import { getUserById } from '@/lib/users';
|
|
99
|
+
import type { NextRequest } from 'next/server';
|
|
90
100
|
|
|
91
101
|
export const dynamic = 'force-dynamic';
|
|
92
102
|
|
|
93
103
|
const { GET, POST } = createNotesHandler({
|
|
94
104
|
getHazoConnect: () => getHazoConnectSingleton(),
|
|
95
105
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
return
|
|
106
|
+
// Preferred (hazo_auth@6.x). Used by BOTH GET and POST — both require auth.
|
|
107
|
+
getAuth: async (req) => {
|
|
108
|
+
const auth = await hazo_get_tenant_auth(req as NextRequest);
|
|
109
|
+
if (!auth.authenticated || !auth.user?.id) return null;
|
|
110
|
+
return {
|
|
111
|
+
user_id: auth.user.id,
|
|
112
|
+
scope_id: auth.selected_scope_id ?? null,
|
|
113
|
+
};
|
|
101
114
|
},
|
|
102
115
|
|
|
103
116
|
getUserProfile: async (userId) => {
|
|
104
117
|
// IMPORTANT: Replace this with your actual user profile lookup
|
|
105
|
-
// This function fetches user details for attribution
|
|
106
118
|
const user = await getUserById(userId);
|
|
107
119
|
return {
|
|
108
120
|
id: userId,
|
|
@@ -117,9 +129,13 @@ export { GET, POST };
|
|
|
117
129
|
```
|
|
118
130
|
|
|
119
131
|
**Important Notes**:
|
|
120
|
-
-
|
|
132
|
+
- Either `getAuth` (hazo_auth@6.x) or `getUserIdFromRequest` (hazo_auth@5.x)
|
|
133
|
+
MUST be provided. GET and POST both return `401` if the resolver returns
|
|
134
|
+
`null`. GET-anonymous behavior from `1.1.x` is gone in `1.2.0`.
|
|
121
135
|
- The `getUserProfile` function enriches notes with user information
|
|
122
136
|
- If you don't have user profiles, you can omit `getUserProfile`
|
|
137
|
+
- On a 500 response, the underlying error message is included as `cause`
|
|
138
|
+
in non-production. Set `expose_error_cause: false` to suppress.
|
|
123
139
|
|
|
124
140
|
### 5. (Optional) Create the files API route for file attachments
|
|
125
141
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create_notes_handler.d.ts","sourceRoot":"","sources":["../../src/api/create_notes_handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EACV,yBAAyB,
|
|
1
|
+
{"version":3,"file":"create_notes_handler.d.ts","sourceRoot":"","sources":["../../src/api/create_notes_handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EACV,yBAAyB,EAKzB,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,mBAAmB,CAAC;AAiD3B;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB;mBAmCxD,OAAO,WACP;QAAE,MAAM,EAAE,OAAO,CAAC;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,KAC/C,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;oBA4E/B,OAAO,WACP;QAAE,MAAM,EAAE,OAAO,CAAC;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,KAC/C,OAAO,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;EAkJ7C"}
|
|
@@ -43,10 +43,11 @@ function generateUUID() {
|
|
|
43
43
|
return crypto.randomUUID();
|
|
44
44
|
}
|
|
45
45
|
/** Create a standardized error response */
|
|
46
|
-
function createErrorResponse(error, status) {
|
|
46
|
+
function createErrorResponse(error, status, cause) {
|
|
47
47
|
return NextResponse.json({
|
|
48
48
|
success: false,
|
|
49
49
|
error,
|
|
50
|
+
...(cause ? { cause } : {}),
|
|
50
51
|
}, { status });
|
|
51
52
|
}
|
|
52
53
|
/** No-op logger */
|
|
@@ -56,6 +57,8 @@ const noopLogger = {
|
|
|
56
57
|
info: () => { },
|
|
57
58
|
debug: () => { },
|
|
58
59
|
};
|
|
60
|
+
/** True when running outside production. Used as the default for exposing error causes. */
|
|
61
|
+
const isNonProduction = typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production';
|
|
59
62
|
/**
|
|
60
63
|
* Creates GET and POST handlers for notes
|
|
61
64
|
*
|
|
@@ -63,8 +66,24 @@ const noopLogger = {
|
|
|
63
66
|
* @returns Object with GET and POST handlers
|
|
64
67
|
*/
|
|
65
68
|
export function createNotesHandler(options) {
|
|
66
|
-
const { getHazoConnect, getLogger, getUserIdFromRequest, getUserProfile } = options;
|
|
69
|
+
const { getHazoConnect, getLogger, getAuth, getUserIdFromRequest, getUserProfile, expose_error_cause, } = options;
|
|
67
70
|
const logger = getLogger?.() || noopLogger;
|
|
71
|
+
const exposeCause = expose_error_cause ?? isNonProduction;
|
|
72
|
+
/**
|
|
73
|
+
* Resolve auth context for a request. Prefers `getAuth`, falls back to
|
|
74
|
+
* `getUserIdFromRequest` for backward compatibility. Returns `null` when
|
|
75
|
+
* the request is unauthenticated or no resolver is wired.
|
|
76
|
+
*/
|
|
77
|
+
async function resolveAuth(req) {
|
|
78
|
+
if (getAuth) {
|
|
79
|
+
return (await getAuth(req)) ?? null;
|
|
80
|
+
}
|
|
81
|
+
if (getUserIdFromRequest) {
|
|
82
|
+
const user_id = await getUserIdFromRequest(req);
|
|
83
|
+
return user_id ? { user_id, scope_id: null } : null;
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
68
87
|
/**
|
|
69
88
|
* GET handler - Fetch notes for a ref_id
|
|
70
89
|
*
|
|
@@ -77,7 +96,11 @@ export function createNotesHandler(options) {
|
|
|
77
96
|
if (!ref_id) {
|
|
78
97
|
return createErrorResponse('ref_id is required', 400);
|
|
79
98
|
}
|
|
80
|
-
|
|
99
|
+
const auth = await resolveAuth(request);
|
|
100
|
+
if (!auth) {
|
|
101
|
+
return createErrorResponse('Unauthorized - user not authenticated', 401);
|
|
102
|
+
}
|
|
103
|
+
logger.debug('[hazo_notes] GET request', { ref_id, user_id: auth.user_id });
|
|
81
104
|
const hazoConnect = await getHazoConnect();
|
|
82
105
|
// Query the hazo_notes table using PostgREST-style query
|
|
83
106
|
const result = await hazoConnect.rawQuery(`/hazo_notes?ref_id=eq.${ref_id}`);
|
|
@@ -117,10 +140,9 @@ export function createNotesHandler(options) {
|
|
|
117
140
|
});
|
|
118
141
|
}
|
|
119
142
|
catch (error) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
return createErrorResponse('Failed to fetch notes', 500);
|
|
143
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
144
|
+
logger.error('[hazo_notes] GET error', { error: message });
|
|
145
|
+
return createErrorResponse('Failed to fetch notes', 500, exposeCause ? message : undefined);
|
|
124
146
|
}
|
|
125
147
|
}
|
|
126
148
|
/**
|
|
@@ -135,13 +157,11 @@ export function createNotesHandler(options) {
|
|
|
135
157
|
if (!ref_id) {
|
|
136
158
|
return NextResponse.json({ success: false, error: 'ref_id is required' }, { status: 400 });
|
|
137
159
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
? await getUserIdFromRequest(request)
|
|
141
|
-
: null;
|
|
142
|
-
if (!userId) {
|
|
160
|
+
const auth = await resolveAuth(request);
|
|
161
|
+
if (!auth) {
|
|
143
162
|
return NextResponse.json({ success: false, error: 'Unauthorized - user not authenticated' }, { status: 401 });
|
|
144
163
|
}
|
|
164
|
+
const userId = auth.user_id;
|
|
145
165
|
// Parse request body
|
|
146
166
|
const body = await request.json();
|
|
147
167
|
const { note_text, note_files } = body;
|
|
@@ -227,10 +247,13 @@ export function createNotesHandler(options) {
|
|
|
227
247
|
});
|
|
228
248
|
}
|
|
229
249
|
catch (error) {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
250
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
251
|
+
logger.error('[hazo_notes] POST error', { error: message });
|
|
252
|
+
return NextResponse.json({
|
|
253
|
+
success: false,
|
|
254
|
+
error: 'Failed to add note',
|
|
255
|
+
...(exposeCause ? { cause: message } : {}),
|
|
256
|
+
}, { status: 500 });
|
|
234
257
|
}
|
|
235
258
|
}
|
|
236
259
|
return { GET, POST };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create_notes_handler.js","sourceRoot":"","sources":["../../src/api/create_notes_handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"create_notes_handler.js","sourceRoot":"","sources":["../../src/api/create_notes_handler.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -220,6 +220,16 @@ export interface HazoNotesFilePreviewProps {
|
|
|
220
220
|
/** Background color theme (Tailwind class, e.g., "bg-yellow-100") */
|
|
221
221
|
background_color?: string;
|
|
222
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* Resolved auth context for a request. Returned by `getAuth`.
|
|
225
|
+
*
|
|
226
|
+
* `scope_id` is accepted for forward compatibility with multi-tenant row
|
|
227
|
+
* filtering, but is not yet enforced at the database layer.
|
|
228
|
+
*/
|
|
229
|
+
export interface NotesAuthContext {
|
|
230
|
+
user_id: string;
|
|
231
|
+
scope_id?: string | null;
|
|
232
|
+
}
|
|
223
233
|
/**
|
|
224
234
|
* API handler factory options
|
|
225
235
|
*/
|
|
@@ -228,10 +238,26 @@ export interface CreateNotesHandlerOptions {
|
|
|
228
238
|
getHazoConnect: () => Promise<any> | any;
|
|
229
239
|
/** Function to get logger instance */
|
|
230
240
|
getLogger?: () => any;
|
|
231
|
-
/**
|
|
241
|
+
/**
|
|
242
|
+
* Preferred auth resolver. Returns `{ user_id, scope_id }` or `null` for
|
|
243
|
+
* unauthenticated requests. Used by both GET and POST. If provided,
|
|
244
|
+
* takes precedence over `getUserIdFromRequest`.
|
|
245
|
+
*
|
|
246
|
+
* Pairs with `hazo_auth@6.x`'s `hazo_get_tenant_auth` — see README example.
|
|
247
|
+
*/
|
|
248
|
+
getAuth?: (req: Request) => Promise<NotesAuthContext | null>;
|
|
249
|
+
/**
|
|
250
|
+
* Legacy auth resolver. Use `getAuth` for new wiring; this is kept for
|
|
251
|
+
* backward compatibility with `hazo_auth@5.x` consumers.
|
|
252
|
+
*/
|
|
232
253
|
getUserIdFromRequest?: (req: Request) => Promise<string | null>;
|
|
233
254
|
/** Function to get user profile by ID */
|
|
234
255
|
getUserProfile?: (userId: string) => Promise<NoteUserInfo | null>;
|
|
256
|
+
/**
|
|
257
|
+
* When true, includes the underlying error message in the `cause` field of
|
|
258
|
+
* 500 responses. Defaults to true in development, false in production.
|
|
259
|
+
*/
|
|
260
|
+
expose_error_cause?: boolean;
|
|
235
261
|
}
|
|
236
262
|
/**
|
|
237
263
|
* API handler factory options for file operations
|
|
@@ -260,6 +286,8 @@ export interface NotesApiResponse {
|
|
|
260
286
|
notes?: NoteEntry[];
|
|
261
287
|
note_count?: number;
|
|
262
288
|
error?: string;
|
|
289
|
+
/** Underlying error detail (only present when `expose_error_cause` is true). */
|
|
290
|
+
cause?: string;
|
|
263
291
|
}
|
|
264
292
|
/**
|
|
265
293
|
* API response for adding a note
|
|
@@ -269,6 +297,8 @@ export interface AddNoteApiResponse {
|
|
|
269
297
|
note?: NoteEntry;
|
|
270
298
|
note_count?: number;
|
|
271
299
|
error?: string;
|
|
300
|
+
/** Underlying error detail (only present when `expose_error_cause` is true). */
|
|
301
|
+
cause?: string;
|
|
272
302
|
}
|
|
273
303
|
/**
|
|
274
304
|
* API response for file upload
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
-- Migration: Grant api_user privileges on hazo_notes
|
|
2
|
+
-- Version: 002
|
|
3
|
+
-- Description: Allow the PostgREST role (api_user) to read/write hazo_notes.
|
|
4
|
+
-- Without this grant, PostgREST returns 42501 / "permission denied
|
|
5
|
+
-- for table hazo_notes" and the API surfaces a generic 500.
|
|
6
|
+
-- Compatible with: PostgreSQL only. SQLite has no role system, skip there.
|
|
7
|
+
|
|
8
|
+
-- ============================================================================
|
|
9
|
+
-- PostgreSQL Version
|
|
10
|
+
-- ============================================================================
|
|
11
|
+
|
|
12
|
+
GRANT SELECT, INSERT, UPDATE, DELETE ON hazo_notes TO api_user;
|
|
13
|
+
|
|
14
|
+
-- Idempotent re-runs are safe: GRANT on an already-granted privilege is a no-op.
|
|
15
|
+
|
|
16
|
+
-- ============================================================================
|
|
17
|
+
-- Verification
|
|
18
|
+
-- ============================================================================
|
|
19
|
+
--
|
|
20
|
+
-- After applying, this should return [] (not 401 / permission denied):
|
|
21
|
+
--
|
|
22
|
+
-- curl -H "Authorization: Bearer <api_user JWT>" \
|
|
23
|
+
-- "$POSTGREST_URL/hazo_notes?limit=1"
|
|
24
|
+
--
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hazo_notes",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Database-backed notes system with file attachment support for the hazo ecosystem",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.client.js",
|
|
@@ -71,27 +71,27 @@
|
|
|
71
71
|
"@radix-ui/react-dialog": "^1.0.5",
|
|
72
72
|
"@radix-ui/react-popover": "^1.0.7",
|
|
73
73
|
"clsx": "^2.1.1",
|
|
74
|
-
"hazo_config": "^1.0
|
|
74
|
+
"hazo_config": "^2.1.0",
|
|
75
75
|
"server-only": "^0.0.1",
|
|
76
|
-
"tailwind-merge": "^
|
|
76
|
+
"tailwind-merge": "^3.5.0"
|
|
77
77
|
},
|
|
78
78
|
"devDependencies": {
|
|
79
|
-
"@types/node": "^20.10
|
|
80
|
-
"@types/react": "^18.
|
|
81
|
-
"@types/react-dom": "^18.
|
|
82
|
-
"hazo_logs": "^1.0.
|
|
79
|
+
"@types/node": "^20.14.10",
|
|
80
|
+
"@types/react": "^18.3.3",
|
|
81
|
+
"@types/react-dom": "^18.3.0",
|
|
82
|
+
"hazo_logs": "^1.0.13",
|
|
83
83
|
"next": "^14.2.33",
|
|
84
|
-
"typescript": "^5.
|
|
84
|
+
"typescript": "^5.7.2"
|
|
85
85
|
},
|
|
86
86
|
"peerDependencies": {
|
|
87
|
-
"hazo_auth": "^
|
|
88
|
-
"hazo_connect": "^2.
|
|
89
|
-
"hazo_logs": "^1.0.
|
|
87
|
+
"hazo_auth": "^6.0.0",
|
|
88
|
+
"hazo_connect": "^2.6.0",
|
|
89
|
+
"hazo_logs": "^1.0.13",
|
|
90
90
|
"next": ">=14.0.0",
|
|
91
91
|
"react": "^18.0.0 || ^19.0.0",
|
|
92
92
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
93
93
|
"react-icons": "^5.0.0",
|
|
94
|
-
"tailwindcss": "
|
|
94
|
+
"tailwindcss": "^3.0.0 || ^4.0.0"
|
|
95
95
|
},
|
|
96
96
|
"peerDependenciesMeta": {
|
|
97
97
|
"hazo_auth": {
|