@techie_doubts/tui.notes.2026 1.0.13 → 1.0.16-exp.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 +50 -0
- package/dist/assets/{arc-DnT4PtPq.js → arc-CTs8vxd2.js} +1 -1
- package/dist/assets/{architectureDiagram-VXUJARFQ-BXrpe9bX.js → architectureDiagram-VXUJARFQ-t-K3l8e1.js} +1 -1
- package/dist/assets/{blockDiagram-VD42YOAC-DP5p2MqV.js → blockDiagram-VD42YOAC-DIMIytmv.js} +1 -1
- package/dist/assets/{c4Diagram-YG6GDRKO-Ct7uTaEZ.js → c4Diagram-YG6GDRKO-CW5YAiXl.js} +1 -1
- package/dist/assets/channel-DKXa9vcG.js +1 -0
- package/dist/assets/{chunk-4BX2VUAB-C8-wPxxJ.js → chunk-4BX2VUAB-DzXtIyrg.js} +1 -1
- package/dist/assets/{chunk-55IACEB6-DGtqAQIB.js → chunk-55IACEB6-BnGPND_M.js} +1 -1
- package/dist/assets/{chunk-B4BG7PRW-5xo8czGC.js → chunk-B4BG7PRW-BklBjgAV.js} +1 -1
- package/dist/assets/{chunk-DI55MBZ5-CSzvABNB.js → chunk-DI55MBZ5-BNr8lC1p.js} +1 -1
- package/dist/assets/{chunk-FMBD7UC4-B_0cCLSi.js → chunk-FMBD7UC4-kabs-F9i.js} +1 -1
- package/dist/assets/{chunk-QN33PNHL-CrWDnSsf.js → chunk-QN33PNHL-DNaN1nja.js} +1 -1
- package/dist/assets/{chunk-QZHKN3VN-HZLnZ-EP.js → chunk-QZHKN3VN-DMNT_UpY.js} +1 -1
- package/dist/assets/{chunk-TZMSLE5B-Bz9O3K8e.js → chunk-TZMSLE5B-BJ9Zykuu.js} +1 -1
- package/dist/assets/classDiagram-2ON5EDUG-DvvXKx22.js +1 -0
- package/dist/assets/classDiagram-v2-WZHVMYZB-DvvXKx22.js +1 -0
- package/dist/assets/{clone-D0V3NIis.js → clone-DgRSp238.js} +1 -1
- package/dist/assets/{cose-bilkent-S5V4N54A-Bu2u7GxM.js → cose-bilkent-S5V4N54A-LlpiAUGJ.js} +1 -1
- package/dist/assets/{dagre-6UL2VRFP-C2f5GIN3.js → dagre-6UL2VRFP-1CY5QFbC.js} +1 -1
- package/dist/assets/{diagram-PSM6KHXK-SP2awr0w.js → diagram-PSM6KHXK-CyWB67TN.js} +1 -1
- package/dist/assets/{diagram-QEK2KX5R-Bx9gVmHS.js → diagram-QEK2KX5R-D3s5Rahm.js} +1 -1
- package/dist/assets/{diagram-S2PKOQOG-DpM42zIf.js → diagram-S2PKOQOG-afP1wbQy.js} +1 -1
- package/dist/assets/{erDiagram-Q2GNP2WA-BCafPHnd.js → erDiagram-Q2GNP2WA-Cu5MC-vn.js} +1 -1
- package/dist/assets/{flowDiagram-NV44I4VS-BzDK3rTw.js → flowDiagram-NV44I4VS-Cp52X3t3.js} +1 -1
- package/dist/assets/{ganttDiagram-JELNMOA3-CKyPyucm.js → ganttDiagram-JELNMOA3-B-FV5NtV.js} +1 -1
- package/dist/assets/{gitGraphDiagram-NY62KEGX-C9dH7T48.js → gitGraphDiagram-NY62KEGX-DXjcfXw-.js} +1 -1
- package/dist/assets/{index-BilTouDJ.js → index-DT7P8Yy_.js} +529 -460
- package/dist/assets/{index-CNp6F8X7.css → index-RZ7CoTP6.css} +1 -1
- package/dist/assets/{infoDiagram-WHAUD3N6-CH3Av-mQ.js → infoDiagram-WHAUD3N6-6gXAcBpT.js} +1 -1
- package/dist/assets/{journeyDiagram-XKPGCS4Q-DIoHgl1Z.js → journeyDiagram-XKPGCS4Q-B63GyOcC.js} +1 -1
- package/dist/assets/{kanban-definition-3W4ZIXB7-CWLQr3gj.js → kanban-definition-3W4ZIXB7-BGUIjvVd.js} +1 -1
- package/dist/assets/{linear-CBhVQMz6.js → linear-CGkv28JQ.js} +1 -1
- package/dist/assets/{mindmap-definition-VGOIOE7T-Cxs-zpuQ.js → mindmap-definition-VGOIOE7T-QTeRbvXZ.js} +1 -1
- package/dist/assets/{pieDiagram-ADFJNKIX-cwQKtTba.js → pieDiagram-ADFJNKIX-BY8oRvp_.js} +1 -1
- package/dist/assets/{quadrantDiagram-AYHSOK5B-Bkz-9rDu.js → quadrantDiagram-AYHSOK5B-BYuVMrlE.js} +1 -1
- package/dist/assets/{requirementDiagram-UZGBJVZJ-WlYK0SEk.js → requirementDiagram-UZGBJVZJ-BJGSRZd3.js} +1 -1
- package/dist/assets/{sankeyDiagram-TZEHDZUN-C7_ihe8w.js → sankeyDiagram-TZEHDZUN-D4szE45R.js} +1 -1
- package/dist/assets/{sequenceDiagram-WL72ISMW-VD7vKL9M.js → sequenceDiagram-WL72ISMW-g-LURDtG.js} +1 -1
- package/dist/assets/{stateDiagram-FKZM4ZOC-ClBZturp.js → stateDiagram-FKZM4ZOC-DlfvisVh.js} +1 -1
- package/dist/assets/stateDiagram-v2-4FDKWEC3-BjHRrc7G.js +1 -0
- package/dist/assets/{timeline-definition-IT6M3QCI-BlnB3vyh.js → timeline-definition-IT6M3QCI-V2SgS8bM.js} +1 -1
- package/dist/assets/{treemap-KMMF4GRG-2Tjc4tzM.js → treemap-KMMF4GRG-BmxpkoZ5.js} +1 -1
- package/dist/assets/{xychartDiagram-PRI3JC2R-Dna9L0wE.js → xychartDiagram-PRI3JC2R-W9kGz4s7.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +8 -3
- package/server/acl-service.js +1249 -0
- package/server/acl-service.test.js +439 -0
- package/server/acl-store.js +421 -0
- package/server/auth.js +119 -0
- package/server/index.js +719 -23
- package/server/store.js +12 -0
- package/dist/assets/channel-B-LJJVbj.js +0 -1
- package/dist/assets/classDiagram-2ON5EDUG-B8hqCKwM.js +0 -1
- package/dist/assets/classDiagram-v2-WZHVMYZB-B8hqCKwM.js +0 -1
- package/dist/assets/stateDiagram-v2-4FDKWEC3-D0C_O_lb.js +0 -1
package/README.md
CHANGED
|
@@ -49,6 +49,56 @@ tui-notes-2026 [options]
|
|
|
49
49
|
--help
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
+
## Auth and ACL
|
|
53
|
+
|
|
54
|
+
Environment flags:
|
|
55
|
+
|
|
56
|
+
- `TUI_NOTES_AUTH_MODE=off|observe|enforce` (default: `off`)
|
|
57
|
+
- `TUI_NOTES_BOOTSTRAP_OWNER_EMAIL=<email>` (optional owner bootstrap for first login)
|
|
58
|
+
- `TUI_NOTES_BOOTSTRAP_OWNER_USER=<userId>` (optional, overrides bootstrap email)
|
|
59
|
+
- `TUI_NOTES_AUTH_DB_URL=<postgres-connection-string>` (optional; if unset, ACL is stored in `${rootDir}/acl.json`)
|
|
60
|
+
|
|
61
|
+
API endpoints:
|
|
62
|
+
|
|
63
|
+
- `GET /api/me`
|
|
64
|
+
- `GET /api/me/capabilities?type=workspace|folder|note&externalId=<id>`
|
|
65
|
+
- `GET /api/acl/resource/:resourceType/:resourceExternalId`
|
|
66
|
+
- `POST /api/acl/grant`
|
|
67
|
+
- `DELETE /api/acl/grant/:bindingId`
|
|
68
|
+
|
|
69
|
+
UI support:
|
|
70
|
+
|
|
71
|
+
- In auth modes `observe`/`enforce`, right-click folder/note -> `Access...`
|
|
72
|
+
- Supports grants/removals for `user|group|public` with roles `viewer|editor|owner`
|
|
73
|
+
- Access writes are sent through ACL API and applied live through SSE
|
|
74
|
+
- Access management uses a single modal dialog (dropdown-based, no prompt loops)
|
|
75
|
+
- Note context menu includes `Copy Link` (`?note=<id>`); access is still enforced by ACL
|
|
76
|
+
|
|
77
|
+
Local ACL tests:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
npm test
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Local Keycloak test stack
|
|
84
|
+
|
|
85
|
+
Ready-to-run local auth stack (Keycloak + OAuth2 Proxy + notes) is in:
|
|
86
|
+
|
|
87
|
+
- `/Users/alexanderacosta/tui.notes.2026/dev/local-auth-stack`
|
|
88
|
+
|
|
89
|
+
Includes two precreated users:
|
|
90
|
+
|
|
91
|
+
- `alice / Alice123!` (owner bootstrap)
|
|
92
|
+
- `bob / Bob123!`
|
|
93
|
+
|
|
94
|
+
Clean reset (recommended before a fresh ACL test run):
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
cd /Users/alexanderacosta/tui.notes.2026/dev/local-auth-stack
|
|
98
|
+
docker-compose down -v
|
|
99
|
+
docker-compose up -d
|
|
100
|
+
```
|
|
101
|
+
|
|
52
102
|
## Future Work
|
|
53
103
|
|
|
54
104
|
- Delta persistence protocol: send and apply only changed entities/operations instead of full snapshots.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a0 as ln,a1 as an,a2 as y,a3 as tn,a4 as H,a5 as q,a6 as _,a7 as un,a8 as rn,a9 as L,aa as o,ab as B,ac as sn,ad as on,ae as fn}from"./index-
|
|
1
|
+
import{a0 as ln,a1 as an,a2 as y,a3 as tn,a4 as H,a5 as q,a6 as _,a7 as un,a8 as rn,a9 as L,aa as o,ab as B,ac as sn,ad as on,ae as fn}from"./index-DT7P8Yy_.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,C,a){var O=I-l,i=D-h,n=C-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function W(l,h,I,D,v,A,C){var a=l-I,O=h-D,i=(C?A:-A)/L(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,F=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*L(fn(0,T*T*R-P*P)),j=(P*g-m*S)/R,z=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=j-F,e=z-t,r=w-F,G=p-t;return x*x+e*e>r*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=yn,I=B(0),D=null,v=gn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,F=un(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(F>tn-y)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>y&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(un(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>y){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>y?(M*=t?1:-1,m+=M,g-=M):(S=0,m=g=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>y){var U=s*H(g),V=s*q(g),X=u*H(R),Y=u*q(R),E;if(F<rn)if(E=pn(J,K,X,Y,U,V,N,Q)){var Z=J-E[0],$=K-E[1],b=U-E[0],k=V-E[1],nn=1/q(on((Z*b+$*k)/(L(Z*Z+$*$)*L(b*b+k*k)))/2),en=L(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(J,K),a.arc(0,0,s,m,g,!t)):a.moveTo(J,K),!(u>y)||!(P>y)?a.lineTo(N,Q):p>y?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-rn/2;return[H(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:B(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),i):A},i.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),i):C},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
|