@eightyfourthousand/data-access 2026.4.0 → 2026.4.2

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 (345) hide show
  1. package/index.js +18 -0
  2. package/index.js.map +1 -0
  3. package/lib/auth.d.ts +59 -0
  4. package/lib/auth.js +134 -0
  5. package/lib/auth.js.map +1 -0
  6. package/lib/bibliography.d.ts +9 -0
  7. package/lib/bibliography.js +30 -0
  8. package/lib/bibliography.js.map +1 -0
  9. package/lib/client-browser.d.ts +1 -0
  10. package/lib/client-browser.js +10 -0
  11. package/lib/client-browser.js.map +1 -0
  12. package/lib/client-server.d.ts +4 -0
  13. package/lib/client-server.js +19 -0
  14. package/lib/client-server.js.map +1 -0
  15. package/lib/client-ssr.d.ts +1 -0
  16. package/lib/client-ssr.js +23 -0
  17. package/lib/client-ssr.js.map +1 -0
  18. package/lib/client-token.d.ts +7 -0
  19. package/lib/client-token.js +21 -0
  20. package/lib/client-token.js.map +1 -0
  21. package/lib/feedback.d.ts +6 -0
  22. package/lib/feedback.js +45 -0
  23. package/lib/feedback.js.map +1 -0
  24. package/lib/folio.d.ts +11 -0
  25. package/lib/folio.js +31 -0
  26. package/lib/folio.js.map +1 -0
  27. package/lib/glossary/batch.d.ts +5 -0
  28. package/lib/glossary/batch.js +22 -0
  29. package/lib/glossary/batch.js.map +1 -0
  30. package/lib/glossary/index.js +5 -0
  31. package/lib/glossary/index.js.map +1 -0
  32. package/lib/glossary/instance.d.ts +10 -0
  33. package/lib/glossary/instance.js +28 -0
  34. package/lib/glossary/instance.js.map +1 -0
  35. package/lib/glossary/landing.d.ts +5 -0
  36. package/lib/glossary/landing.js +32 -0
  37. package/lib/glossary/landing.js.map +1 -0
  38. package/lib/glossary/pagination.d.ts +55 -0
  39. package/lib/glossary/pagination.js +254 -0
  40. package/lib/glossary/pagination.js.map +1 -0
  41. package/lib/imprint.d.ts +10 -0
  42. package/lib/imprint.js +23 -0
  43. package/lib/imprint.js.map +1 -0
  44. package/lib/library.d.ts +58 -0
  45. package/lib/library.js +118 -0
  46. package/lib/library.js.map +1 -0
  47. package/lib/local-storage.d.ts +10 -0
  48. package/lib/local-storage.js +25 -0
  49. package/lib/local-storage.js.map +1 -0
  50. package/lib/lookup-entity.d.ts +7 -0
  51. package/lib/lookup-entity.js +93 -0
  52. package/lib/lookup-entity.js.map +1 -0
  53. package/lib/panel-url.d.ts +10 -0
  54. package/lib/panel-url.js +23 -0
  55. package/lib/panel-url.js.map +1 -0
  56. package/lib/passage/batch.d.ts +17 -0
  57. package/lib/passage/batch.js +155 -0
  58. package/lib/passage/batch.js.map +1 -0
  59. package/lib/passage/index.js +6 -0
  60. package/lib/passage/index.js.map +1 -0
  61. package/lib/passage/pagination.d.ts +43 -0
  62. package/lib/passage/pagination.js +167 -0
  63. package/lib/passage/pagination.js.map +1 -0
  64. package/lib/passage/read.d.ts +15 -0
  65. package/lib/passage/read.js +59 -0
  66. package/lib/passage/read.js.map +1 -0
  67. package/lib/passage/replace-persistence.d.ts +46 -0
  68. package/lib/passage/replace-persistence.js +93 -0
  69. package/lib/passage/replace-persistence.js.map +1 -0
  70. package/lib/passage/save.d.ts +16 -0
  71. package/lib/passage/save.js +227 -0
  72. package/lib/passage/save.js.map +1 -0
  73. package/lib/proxy.d.ts +7 -0
  74. package/lib/proxy.js +45 -0
  75. package/lib/proxy.js.map +1 -0
  76. package/lib/publications.d.ts +86 -0
  77. package/lib/publications.js +223 -0
  78. package/lib/publications.js.map +1 -0
  79. package/lib/replace.d.ts +31 -0
  80. package/lib/replace.js +151 -0
  81. package/lib/replace.js.map +1 -0
  82. package/lib/storage.d.ts +7 -0
  83. package/lib/storage.js +10 -0
  84. package/lib/storage.js.map +1 -0
  85. package/lib/types/alignment.d.ts +18 -0
  86. package/lib/types/alignment.js +13 -0
  87. package/lib/types/alignment.js.map +1 -0
  88. package/lib/types/annotation/abbreviation.d.ts +3 -0
  89. package/lib/types/annotation/abbreviation.js +20 -0
  90. package/lib/types/annotation/abbreviation.js.map +1 -0
  91. package/lib/types/annotation/annotation-type.d.ts +31 -0
  92. package/lib/types/annotation/annotation-type.js +81 -0
  93. package/lib/types/annotation/annotation-type.js.map +1 -0
  94. package/lib/types/annotation/annotation.d.ts +142 -0
  95. package/lib/types/annotation/annotation.js +23 -0
  96. package/lib/types/annotation/annotation.js.map +1 -0
  97. package/lib/types/annotation/audio.d.ts +3 -0
  98. package/lib/types/annotation/audio.js +24 -0
  99. package/lib/types/annotation/audio.js.map +1 -0
  100. package/lib/types/annotation/blockquote.d.ts +3 -0
  101. package/lib/types/annotation/blockquote.js +8 -0
  102. package/lib/types/annotation/blockquote.js.map +1 -0
  103. package/lib/types/annotation/code.d.ts +3 -0
  104. package/lib/types/annotation/code.js +8 -0
  105. package/lib/types/annotation/code.js.map +1 -0
  106. package/lib/types/annotation/deprecated.d.ts +3 -0
  107. package/lib/types/annotation/deprecated.js +8 -0
  108. package/lib/types/annotation/deprecated.js.map +1 -0
  109. package/lib/types/annotation/end-note-link.d.ts +3 -0
  110. package/lib/types/annotation/end-note-link.js +23 -0
  111. package/lib/types/annotation/end-note-link.js.map +1 -0
  112. package/lib/types/annotation/export.d.ts +3 -0
  113. package/{src/lib/types/annotation/export.ts → lib/types/annotation/export.js} +34 -36
  114. package/lib/types/annotation/export.js.map +1 -0
  115. package/lib/types/annotation/glossary-instance.d.ts +3 -0
  116. package/lib/types/annotation/glossary-instance.js +23 -0
  117. package/lib/types/annotation/glossary-instance.js.map +1 -0
  118. package/lib/types/annotation/has-abbreviation.d.ts +3 -0
  119. package/lib/types/annotation/has-abbreviation.js +20 -0
  120. package/lib/types/annotation/has-abbreviation.js.map +1 -0
  121. package/lib/types/annotation/heading.d.ts +3 -0
  122. package/lib/types/annotation/heading.js +26 -0
  123. package/lib/types/annotation/heading.js.map +1 -0
  124. package/lib/types/annotation/image.d.ts +3 -0
  125. package/lib/types/annotation/image.js +20 -0
  126. package/lib/types/annotation/image.js.map +1 -0
  127. package/lib/types/annotation/indent.d.ts +3 -0
  128. package/lib/types/annotation/indent.js +8 -0
  129. package/lib/types/annotation/indent.js.map +1 -0
  130. package/lib/types/annotation/index.js +5 -0
  131. package/lib/types/annotation/index.js.map +1 -0
  132. package/lib/types/annotation/inline-title.d.ts +3 -0
  133. package/lib/types/annotation/inline-title.js +21 -0
  134. package/lib/types/annotation/inline-title.js.map +1 -0
  135. package/lib/types/annotation/internal-link.d.ts +3 -0
  136. package/lib/types/annotation/internal-link.js +62 -0
  137. package/lib/types/annotation/internal-link.js.map +1 -0
  138. package/lib/types/annotation/leading-space.d.ts +3 -0
  139. package/lib/types/annotation/leading-space.js +8 -0
  140. package/lib/types/annotation/leading-space.js.map +1 -0
  141. package/lib/types/annotation/line-group.d.ts +3 -0
  142. package/lib/types/annotation/line-group.js +8 -0
  143. package/lib/types/annotation/line-group.js.map +1 -0
  144. package/lib/types/annotation/line.d.ts +3 -0
  145. package/lib/types/annotation/line.js +8 -0
  146. package/lib/types/annotation/line.js.map +1 -0
  147. package/lib/types/annotation/link.d.ts +3 -0
  148. package/lib/types/annotation/link.js +27 -0
  149. package/lib/types/annotation/link.js.map +1 -0
  150. package/lib/types/annotation/list-item.d.ts +3 -0
  151. package/lib/types/annotation/list-item.js +8 -0
  152. package/lib/types/annotation/list-item.js.map +1 -0
  153. package/lib/types/annotation/list.d.ts +3 -0
  154. package/lib/types/annotation/list.js +31 -0
  155. package/lib/types/annotation/list.js.map +1 -0
  156. package/lib/types/annotation/mantra.d.ts +3 -0
  157. package/lib/types/annotation/mantra.js +21 -0
  158. package/lib/types/annotation/mantra.js.map +1 -0
  159. package/lib/types/annotation/mention.d.ts +3 -0
  160. package/lib/types/annotation/mention.js +50 -0
  161. package/lib/types/annotation/mention.js.map +1 -0
  162. package/lib/types/annotation/paragraph.d.ts +3 -0
  163. package/lib/types/annotation/paragraph.js +8 -0
  164. package/lib/types/annotation/paragraph.js.map +1 -0
  165. package/lib/types/annotation/quote.d.ts +3 -0
  166. package/lib/types/annotation/quote.js +21 -0
  167. package/lib/types/annotation/quote.js.map +1 -0
  168. package/lib/types/annotation/quoted.d.ts +3 -0
  169. package/lib/types/annotation/quoted.js +21 -0
  170. package/lib/types/annotation/quoted.js.map +1 -0
  171. package/lib/types/annotation/reference.d.ts +3 -0
  172. package/lib/types/annotation/reference.js +8 -0
  173. package/lib/types/annotation/reference.js.map +1 -0
  174. package/lib/types/annotation/span.d.ts +3 -0
  175. package/lib/types/annotation/span.js +29 -0
  176. package/lib/types/annotation/span.js.map +1 -0
  177. package/lib/types/annotation/table-body-data.d.ts +3 -0
  178. package/lib/types/annotation/table-body-data.js +8 -0
  179. package/lib/types/annotation/table-body-data.js.map +1 -0
  180. package/lib/types/annotation/table-body-header.d.ts +3 -0
  181. package/lib/types/annotation/table-body-header.js +8 -0
  182. package/lib/types/annotation/table-body-header.js.map +1 -0
  183. package/lib/types/annotation/table-body-row.d.ts +3 -0
  184. package/lib/types/annotation/table-body-row.js +8 -0
  185. package/lib/types/annotation/table-body-row.js.map +1 -0
  186. package/lib/types/annotation/table.d.ts +3 -0
  187. package/lib/types/annotation/table.js +8 -0
  188. package/lib/types/annotation/table.js.map +1 -0
  189. package/lib/types/annotation/trailer.d.ts +3 -0
  190. package/lib/types/annotation/trailer.js +8 -0
  191. package/lib/types/annotation/trailer.js.map +1 -0
  192. package/lib/types/annotation/transform.d.ts +6 -0
  193. package/lib/types/annotation/transform.js +109 -0
  194. package/lib/types/annotation/transform.js.map +1 -0
  195. package/lib/types/annotation/unknown.d.ts +3 -0
  196. package/lib/types/annotation/unknown.js +8 -0
  197. package/lib/types/annotation/unknown.js.map +1 -0
  198. package/lib/types/bibliography.d.ts +41 -0
  199. package/lib/types/bibliography.js +29 -0
  200. package/lib/types/bibliography.js.map +1 -0
  201. package/{src/lib/types/client.ts → lib/types/client.d.ts} +0 -1
  202. package/lib/types/client.js +2 -0
  203. package/lib/types/client.js.map +1 -0
  204. package/{src/lib/types/editor-content.ts → lib/types/editor-content.d.ts} +7 -11
  205. package/lib/types/editor-content.js +2 -0
  206. package/lib/types/editor-content.js.map +1 -0
  207. package/lib/types/folio.d.ts +17 -0
  208. package/lib/types/folio.js +11 -0
  209. package/lib/types/folio.js.map +1 -0
  210. package/lib/types/glossary-page.d.ts +48 -0
  211. package/lib/types/glossary-page.js +21 -0
  212. package/lib/types/glossary-page.js.map +1 -0
  213. package/lib/types/glossary.d.ts +76 -0
  214. package/lib/types/glossary.js +32 -0
  215. package/lib/types/glossary.js.map +1 -0
  216. package/lib/types/imprint.d.ts +78 -0
  217. package/lib/types/imprint.js +78 -0
  218. package/lib/types/imprint.js.map +1 -0
  219. package/lib/types/index.js +20 -0
  220. package/lib/types/index.js.map +1 -0
  221. package/lib/types/language.d.ts +9 -0
  222. package/lib/types/language.js +41 -0
  223. package/lib/types/language.js.map +1 -0
  224. package/lib/types/layout.d.ts +5 -0
  225. package/lib/types/layout.js +23 -0
  226. package/lib/types/layout.js.map +1 -0
  227. package/lib/types/library.d.ts +19 -0
  228. package/lib/types/library.js +8 -0
  229. package/lib/types/library.js.map +1 -0
  230. package/lib/types/passage.d.ts +73 -0
  231. package/lib/types/passage.js +123 -0
  232. package/lib/types/passage.js.map +1 -0
  233. package/lib/types/semver.js +2 -0
  234. package/lib/types/semver.js.map +1 -0
  235. package/lib/types/title.d.ts +21 -0
  236. package/lib/types/title.js +21 -0
  237. package/lib/types/title.js.map +1 -0
  238. package/lib/types/toh.js +2 -0
  239. package/lib/types/toh.js.map +1 -0
  240. package/{src/lib/types/translation.ts → lib/types/translation.d.ts} +5 -7
  241. package/lib/types/translation.js +2 -0
  242. package/lib/types/translation.js.map +1 -0
  243. package/{src/lib/types/user.ts → lib/types/user.d.ts} +2 -11
  244. package/lib/types/user.js +9 -0
  245. package/lib/types/user.js.map +1 -0
  246. package/lib/types/work.d.ts +37 -0
  247. package/lib/types/work.js +12 -0
  248. package/lib/types/work.js.map +1 -0
  249. package/lib/use-bookmark.d.ts +10 -0
  250. package/lib/use-bookmark.js +30 -0
  251. package/lib/use-bookmark.js.map +1 -0
  252. package/package.json +25 -3
  253. package/ssr.js +6 -0
  254. package/ssr.js.map +1 -0
  255. package/.babelrc +0 -12
  256. package/.eslintrc.json +0 -18
  257. package/README.md +0 -9
  258. package/jest.config.ts +0 -10
  259. package/project.json +0 -21
  260. package/src/lib/auth.ts +0 -203
  261. package/src/lib/bibliography.ts +0 -57
  262. package/src/lib/client-browser.ts +0 -12
  263. package/src/lib/client-server.ts +0 -30
  264. package/src/lib/client-ssr.ts +0 -24
  265. package/src/lib/client-token.ts +0 -24
  266. package/src/lib/feedback.ts +0 -71
  267. package/src/lib/folio.ts +0 -57
  268. package/src/lib/glossary/batch.ts +0 -35
  269. package/src/lib/glossary/instance.ts +0 -54
  270. package/src/lib/glossary/landing.ts +0 -50
  271. package/src/lib/glossary/pagination.ts +0 -471
  272. package/src/lib/imprint.ts +0 -42
  273. package/src/lib/library.ts +0 -209
  274. package/src/lib/local-storage.ts +0 -33
  275. package/src/lib/lookup-entity.ts +0 -122
  276. package/src/lib/panel-url.ts +0 -43
  277. package/src/lib/passage/batch.ts +0 -229
  278. package/src/lib/passage/pagination.ts +0 -277
  279. package/src/lib/passage/read.ts +0 -100
  280. package/src/lib/passage/replace-persistence.ts +0 -153
  281. package/src/lib/passage/save.ts +0 -324
  282. package/src/lib/proxy.ts +0 -68
  283. package/src/lib/publications.ts +0 -381
  284. package/src/lib/replace.spec.ts +0 -154
  285. package/src/lib/replace.ts +0 -244
  286. package/src/lib/storage.ts +0 -23
  287. package/src/lib/types/alignment.ts +0 -32
  288. package/src/lib/types/annotation/abbreviation.ts +0 -30
  289. package/src/lib/types/annotation/annotation-type.ts +0 -219
  290. package/src/lib/types/annotation/annotation.ts +0 -244
  291. package/src/lib/types/annotation/audio.ts +0 -33
  292. package/src/lib/types/annotation/blockquote.ts +0 -18
  293. package/src/lib/types/annotation/code.ts +0 -16
  294. package/src/lib/types/annotation/deprecated.ts +0 -18
  295. package/src/lib/types/annotation/end-note-link.ts +0 -35
  296. package/src/lib/types/annotation/glossary-instance.ts +0 -34
  297. package/src/lib/types/annotation/has-abbreviation.ts +0 -30
  298. package/src/lib/types/annotation/heading.ts +0 -37
  299. package/src/lib/types/annotation/image.ts +0 -29
  300. package/src/lib/types/annotation/indent.ts +0 -16
  301. package/src/lib/types/annotation/inline-title.ts +0 -34
  302. package/src/lib/types/annotation/internal-link.ts +0 -86
  303. package/src/lib/types/annotation/leading-space.ts +0 -18
  304. package/src/lib/types/annotation/line-group.ts +0 -18
  305. package/src/lib/types/annotation/line.ts +0 -16
  306. package/src/lib/types/annotation/link.ts +0 -38
  307. package/src/lib/types/annotation/list-item.ts +0 -16
  308. package/src/lib/types/annotation/list.ts +0 -43
  309. package/src/lib/types/annotation/mantra.ts +0 -31
  310. package/src/lib/types/annotation/mention.ts +0 -64
  311. package/src/lib/types/annotation/paragraph.ts +0 -18
  312. package/src/lib/types/annotation/quote.ts +0 -30
  313. package/src/lib/types/annotation/quoted.ts +0 -30
  314. package/src/lib/types/annotation/reference.ts +0 -18
  315. package/src/lib/types/annotation/span.ts +0 -39
  316. package/src/lib/types/annotation/table-body-data.ts +0 -18
  317. package/src/lib/types/annotation/table-body-header.ts +0 -18
  318. package/src/lib/types/annotation/table-body-row.ts +0 -18
  319. package/src/lib/types/annotation/table.ts +0 -16
  320. package/src/lib/types/annotation/trailer.ts +0 -16
  321. package/src/lib/types/annotation/transform.ts +0 -140
  322. package/src/lib/types/annotation/unknown.ts +0 -16
  323. package/src/lib/types/bibliography.ts +0 -86
  324. package/src/lib/types/folio.ts +0 -28
  325. package/src/lib/types/glossary-page.ts +0 -86
  326. package/src/lib/types/glossary.ts +0 -115
  327. package/src/lib/types/imprint.ts +0 -159
  328. package/src/lib/types/language.ts +0 -64
  329. package/src/lib/types/layout.ts +0 -37
  330. package/src/lib/types/library.ts +0 -29
  331. package/src/lib/types/passage.ts +0 -220
  332. package/src/lib/types/title.ts +0 -47
  333. package/src/lib/types/work.ts +0 -38
  334. package/src/lib/use-bookmark.ts +0 -45
  335. package/tsconfig.json +0 -20
  336. package/tsconfig.lib.json +0 -26
  337. package/tsconfig.spec.json +0 -22
  338. /package/{src/index.ts → index.d.ts} +0 -0
  339. /package/{src/lib/glossary/index.ts → lib/glossary/index.d.ts} +0 -0
  340. /package/{src/lib/passage/index.ts → lib/passage/index.d.ts} +0 -0
  341. /package/{src/lib/types/annotation/index.ts → lib/types/annotation/index.d.ts} +0 -0
  342. /package/{src/lib/types/index.ts → lib/types/index.d.ts} +0 -0
  343. /package/{src/lib/types/semver.ts → lib/types/semver.d.ts} +0 -0
  344. /package/{src/lib/types/toh.ts → lib/types/toh.d.ts} +0 -0
  345. /package/{src/ssr.ts → ssr.d.ts} +0 -0
package/index.js ADDED
@@ -0,0 +1,18 @@
1
+ export * from './lib/auth';
2
+ export * from './lib/bibliography';
3
+ export * from './lib/client-browser';
4
+ export * from './lib/client-server';
5
+ export * from './lib/client-token';
6
+ export * from './lib/folio';
7
+ export * from './lib/glossary';
8
+ export * from './lib/imprint';
9
+ export * from './lib/panel-url';
10
+ export * from './lib/library';
11
+ export * from './lib/passage';
12
+ export * from './lib/publications';
13
+ export * from './lib/replace';
14
+ export * from './lib/storage';
15
+ export * from './lib/types';
16
+ export * from './lib/local-storage';
17
+ export * from './lib/use-bookmark';
18
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/data-access/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
package/lib/auth.d.ts ADDED
@@ -0,0 +1,59 @@
1
+ import { DataClient, UserClaims, UserPermission, UserRole } from './types';
2
+ export declare const getSession: ({ client }: {
3
+ client: DataClient;
4
+ }) => Promise<{
5
+ provider_token?: string | null;
6
+ provider_refresh_token?: string | null;
7
+ access_token: string;
8
+ refresh_token: string;
9
+ expires_in: number;
10
+ expires_at?: number;
11
+ token_type: "bearer";
12
+ user: import("@supabase/auth-js").User;
13
+ claims: UserClaims;
14
+ } | null>;
15
+ export declare const getUser: ({ client }: {
16
+ client: DataClient;
17
+ }) => Promise<{
18
+ id: string;
19
+ email: string;
20
+ username: any;
21
+ name: any;
22
+ avatar: any;
23
+ role: UserRole;
24
+ subscriptions: any[];
25
+ } | null>;
26
+ export declare const hasPermission: ({ client, permission, }: {
27
+ client: DataClient;
28
+ permission: UserPermission;
29
+ }) => Promise<boolean>;
30
+ export declare const loginWithGoogle: ({ client, redirectTo, }: {
31
+ client: DataClient;
32
+ redirectTo: string | undefined;
33
+ }) => Promise<void>;
34
+ export declare const loginWithApple: ({ client, redirectTo, }: {
35
+ client: DataClient;
36
+ redirectTo: string | undefined;
37
+ }) => Promise<void>;
38
+ export declare const loginWithEmail: ({ client, email, password, }: {
39
+ client: DataClient;
40
+ email: string;
41
+ password: string;
42
+ }) => Promise<void>;
43
+ export declare const logout: ({ client }: {
44
+ client: DataClient;
45
+ }) => Promise<void>;
46
+ export declare const resetPassword: ({ client, email, redirectTo, }: {
47
+ client: DataClient;
48
+ email: string;
49
+ redirectTo?: string;
50
+ }) => Promise<void>;
51
+ export declare const signUpWithEmail: ({ client, email, password, redirectTo, }: {
52
+ client: DataClient;
53
+ email: string;
54
+ password: string;
55
+ redirectTo?: string;
56
+ }) => Promise<void>;
57
+ export declare const deleteAccount: ({ client }: {
58
+ client: DataClient;
59
+ }) => Promise<void>;
package/lib/auth.js ADDED
@@ -0,0 +1,134 @@
1
+ import { jwtDecode } from 'jwt-decode';
2
+ export const getSession = async ({ client }) => {
3
+ const { data, error } = await client.auth.getSession();
4
+ if (error || !data?.session) {
5
+ console.info(`Failed to get session data: ${error}`);
6
+ return null;
7
+ }
8
+ const { access_token } = data.session;
9
+ if (!access_token) {
10
+ return null;
11
+ }
12
+ try {
13
+ const decoded = jwtDecode(access_token);
14
+ const { user_role: role = 'reader' } = decoded;
15
+ const claims = {
16
+ role,
17
+ };
18
+ return { claims, ...data.session };
19
+ }
20
+ catch (error) {
21
+ console.error('Failed to decode JWT:', error);
22
+ return null;
23
+ }
24
+ };
25
+ export const getUser = async ({ client }) => {
26
+ const session = await getSession({ client });
27
+ if (!session) {
28
+ return null;
29
+ }
30
+ const { claims, user } = session;
31
+ const { role } = claims;
32
+ const { id, email, user_metadata: metadata } = user;
33
+ const { name, picture } = metadata;
34
+ if (!id || !email) {
35
+ return null;
36
+ }
37
+ const { error, data } = await client
38
+ .from('user_profiles')
39
+ .select('username, fullName:full_name, avatar:avatar_url, subscriptions')
40
+ .eq('id', id)
41
+ .single();
42
+ if (error) {
43
+ console.warn(`Failed to fetch user profile: ${error.message}`);
44
+ }
45
+ const { username, fullName, avatar, subscriptions } = data || {};
46
+ const subsArray = Array.isArray(subscriptions) ? subscriptions : [];
47
+ return {
48
+ id,
49
+ email,
50
+ username: username || email,
51
+ name: fullName || name,
52
+ avatar: avatar || picture,
53
+ role,
54
+ subscriptions: subsArray,
55
+ };
56
+ };
57
+ export const hasPermission = async ({ client, permission, }) => {
58
+ const { data, error } = await client.rpc('authorize', {
59
+ requested_permission: permission,
60
+ });
61
+ if (error) {
62
+ console.error(`Failed to check permission: ${error.message}`);
63
+ return false;
64
+ }
65
+ return data;
66
+ };
67
+ export const loginWithGoogle = async ({ client, redirectTo = undefined, }) => {
68
+ await client.auth.signInWithOAuth({
69
+ provider: 'google',
70
+ options: {
71
+ redirectTo,
72
+ queryParams: {
73
+ access_type: 'offline',
74
+ prompt: 'consent',
75
+ hd: '84000.co',
76
+ },
77
+ },
78
+ });
79
+ };
80
+ export const loginWithApple = async ({ client, redirectTo = undefined, }) => {
81
+ await client.auth.signInWithOAuth({
82
+ provider: 'apple',
83
+ options: {
84
+ redirectTo,
85
+ queryParams: {
86
+ scope: 'email name',
87
+ },
88
+ },
89
+ });
90
+ };
91
+ export const loginWithEmail = async ({ client, email, password, }) => {
92
+ const { error } = await client.auth.signInWithPassword({
93
+ email,
94
+ password,
95
+ });
96
+ if (error) {
97
+ console.error(`Failed to login with email: ${error.message}`);
98
+ throw error;
99
+ }
100
+ };
101
+ export const logout = async ({ client }) => {
102
+ await client.auth.signOut();
103
+ };
104
+ export const resetPassword = async ({ client, email, redirectTo = undefined, }) => {
105
+ const { error } = await client.auth.resetPasswordForEmail(email, {
106
+ redirectTo,
107
+ });
108
+ if (error) {
109
+ console.error(`Failed to reset password: ${error.message}`);
110
+ throw error;
111
+ }
112
+ };
113
+ export const signUpWithEmail = async ({ client, email, password, redirectTo = undefined, }) => {
114
+ const { error } = await client.auth.signUp({
115
+ email,
116
+ password,
117
+ options: {
118
+ emailRedirectTo: redirectTo,
119
+ },
120
+ });
121
+ if (error) {
122
+ console.error(`Failed to sign up with email: ${error.message}`);
123
+ throw error;
124
+ }
125
+ };
126
+ export const deleteAccount = async ({ client }) => {
127
+ const { error } = await client.rpc('scholar_account_delete');
128
+ if (error) {
129
+ console.error(`Failed to delete account: ${error.message}`);
130
+ throw error;
131
+ }
132
+ await logout({ client });
133
+ };
134
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../libs/data-access/src/lib/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { DataClient } from './types';
2
+ export declare const getBibliographyEntries: ({ client, uuid, }: {
3
+ client: DataClient;
4
+ uuid: string;
5
+ }) => Promise<import("./types").BibliographyEntries>;
6
+ export declare const getBibliographyEntry: ({ client, uuid, }: {
7
+ client: DataClient;
8
+ uuid: string;
9
+ }) => Promise<import("./types").BibliographyEntryItem | null>;
@@ -0,0 +1,30 @@
1
+ import { bibliographyEntriesFromDTO, bibliographyEntryItemFromDTO, } from './types';
2
+ export const getBibliographyEntries = async ({ client, uuid, }) => {
3
+ const { data, error } = await client.rpc('show_bibliographies', {
4
+ v_work_uuid: uuid,
5
+ });
6
+ if (error) {
7
+ console.error(`Error fetching glossary instances for work: ${uuid} `, error);
8
+ return [];
9
+ }
10
+ const dto = data;
11
+ return bibliographyEntriesFromDTO(dto);
12
+ };
13
+ export const getBibliographyEntry = async ({ client, uuid, }) => {
14
+ const { data, error } = await client
15
+ .from('bibliographies')
16
+ .select(`
17
+ uuid::uuid,
18
+ work_uuid::uuid,
19
+ bibl_html::text
20
+ `)
21
+ .eq('uuid', uuid)
22
+ .single();
23
+ if (error) {
24
+ console.error(`Error fetching bibliography entry: ${uuid} `, error);
25
+ return null;
26
+ }
27
+ const dto = data;
28
+ return bibliographyEntryItemFromDTO(dto);
29
+ };
30
+ //# sourceMappingURL=bibliography.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bibliography.js","sourceRoot":"","sources":["../../../../libs/data-access/src/lib/bibliography.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,0BAA0B,EAE1B,4BAA4B,GAE7B,MAAM,SAAS,CAAC;AAEjB,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,EAC3C,MAAM,EACN,IAAI,GAIL,EAAE,EAAE;IACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE;QAC9D,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IACH,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CACX,+CAA+C,IAAI,GAAG,EACtD,KAAK,CACN,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,GAAG,GAAG,IAA8B,CAAC;IAC3C,OAAO,0BAA0B,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,EACzC,MAAM,EACN,IAAI,GAIL,EAAE,EAAE;IACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM;SACjC,IAAI,CAAC,gBAAgB,CAAC;SACtB,MAAM,CACL;;;;CAIL,CACI;SACA,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;SAChB,MAAM,EAAE,CAAC;IACZ,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,sCAAsC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,IAAgC,CAAC;IAE7C,OAAO,4BAA4B,CAAC,GAAG,CAAC,CAAC;AAC3C,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const createBrowserClient: () => import("@supabase/supabase-js").SupabaseClient<any, "public", any, any, any>;
@@ -0,0 +1,10 @@
1
+ import { createBrowserClient as createSupabaseClient } from '@supabase/ssr';
2
+ export const createBrowserClient = () => {
3
+ const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL;
4
+ const supabaseAnonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY;
5
+ if (!supabaseUrl || !supabaseAnonKey) {
6
+ throw new Error('Missing Supabase credentials');
7
+ }
8
+ return createSupabaseClient(supabaseUrl, supabaseAnonKey);
9
+ };
10
+ //# sourceMappingURL=client-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-browser.js","sourceRoot":"","sources":["../../../../libs/data-access/src/lib/client-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,IAAI,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACzD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;IAElE,IAAI,CAAC,WAAW,IAAI,CAAC,eAAe,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,oBAAoB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AAC5D,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { CookieMethodsServer } from '@supabase/ssr';
2
+ export declare const createServerClient: ({ cookies, }: {
3
+ cookies: CookieMethodsServer;
4
+ }) => import("@supabase/supabase-js").SupabaseClient<any, "public", any, any, any>;
@@ -0,0 +1,19 @@
1
+ import { createServerClient as createSupabaseClient, } from '@supabase/ssr';
2
+ export const createServerClient = ({ cookies, }) => {
3
+ const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL;
4
+ const supabaseAnonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY;
5
+ if (!supabaseUrl || !supabaseAnonKey) {
6
+ throw new Error('Missing Supabase credentials');
7
+ }
8
+ const client = createSupabaseClient(supabaseUrl, supabaseAnonKey, {
9
+ cookies,
10
+ });
11
+ // NOTE: we suppress the warning about getSession being called. But is is
12
+ // import not to rely on this method for authorization. Rather, it is
13
+ // convenient for early exists in server components.
14
+ //
15
+ // @ts-expect-error - suppressGetSessionWarning is protected
16
+ client.auth.suppressGetSessionWarning = true;
17
+ return client;
18
+ };
19
+ //# sourceMappingURL=client-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-server.js","sourceRoot":"","sources":["../../../../libs/data-access/src/lib/client-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,IAAI,oBAAoB,GAC3C,MAAM,eAAe,CAAC;AAEvB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EACjC,OAAO,GAGR,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACzD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;IAElE,IAAI,CAAC,WAAW,IAAI,CAAC,eAAe,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,EAAE,eAAe,EAAE;QAChE,OAAO;KACR,CAAC,CAAC;IAEH,yEAAyE;IACzE,qEAAqE;IACrE,oDAAoD;IACpD,EAAE;IACF,4DAA4D;IAC5D,MAAM,CAAC,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;IAE7C,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const createServerClient: () => Promise<import("@supabase/supabase-js").SupabaseClient<any, "public", any, any, any>>;
@@ -0,0 +1,23 @@
1
+ import { createServerClient as createSupabaseClient } from './client-server';
2
+ import { cookies } from 'next/headers';
3
+ export const createServerClient = async () => {
4
+ const cookieStore = await cookies();
5
+ return createSupabaseClient({
6
+ cookies: {
7
+ getAll: () => {
8
+ return cookieStore.getAll();
9
+ },
10
+ setAll: (cookiesToSet) => {
11
+ try {
12
+ cookiesToSet.forEach(({ name, value, options }) => cookieStore.set(name, value, options));
13
+ }
14
+ catch {
15
+ // The `setAll` method was called from a Server Component.
16
+ // This can be ignored if you have middleware refreshing
17
+ // user sessions.
18
+ }
19
+ },
20
+ },
21
+ });
22
+ };
23
+ //# sourceMappingURL=client-ssr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-ssr.js","sourceRoot":"","sources":["../../../../libs/data-access/src/lib/client-ssr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,IAAI,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,IAAI,EAAE;IAC3C,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,CAAC;IACpC,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE;YACP,MAAM,EAAE,GAAG,EAAE;gBACX,OAAO,WAAW,CAAC,MAAM,EAAE,CAAC;YAC9B,CAAC;YACD,MAAM,EAAE,CAAC,YAAY,EAAE,EAAE;gBACvB,IAAI,CAAC;oBACH,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAChD,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CACtC,CAAC;gBACJ,CAAC;gBAAC,MAAM,CAAC;oBACP,0DAA0D;oBAC1D,wDAAwD;oBACxD,iBAAiB;gBACnB,CAAC;YACH,CAAC;SACF;KACF,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { DataClient } from './types/client';
2
+ /**
3
+ * Create a Supabase client using an access token for authentication.
4
+ * Use this for API routes that receive tokens via Authorization header
5
+ * instead of cookies (e.g., cross-domain requests).
6
+ */
7
+ export declare const createTokenClient: (accessToken: string) => DataClient;
@@ -0,0 +1,21 @@
1
+ import { createClient } from '@supabase/supabase-js';
2
+ /**
3
+ * Create a Supabase client using an access token for authentication.
4
+ * Use this for API routes that receive tokens via Authorization header
5
+ * instead of cookies (e.g., cross-domain requests).
6
+ */
7
+ export const createTokenClient = (accessToken) => {
8
+ const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL;
9
+ const supabaseAnonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY;
10
+ if (!supabaseUrl || !supabaseAnonKey) {
11
+ throw new Error('Missing Supabase credentials');
12
+ }
13
+ return createClient(supabaseUrl, supabaseAnonKey, {
14
+ global: {
15
+ headers: {
16
+ Authorization: `Bearer ${accessToken}`,
17
+ },
18
+ },
19
+ });
20
+ };
21
+ //# sourceMappingURL=client-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-token.js","sourceRoot":"","sources":["../../../../libs/data-access/src/lib/client-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,WAAmB,EAAc,EAAE;IACnE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACzD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;IAElE,IAAI,CAAC,WAAW,IAAI,CAAC,eAAe,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,YAAY,CAAC,WAAW,EAAE,eAAe,EAAE;QAChD,MAAM,EAAE;YACN,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;aACvC;SACF;KACF,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { NextRequest, NextResponse } from 'next/server';
2
+ export declare function handleFeedbackPost(request: NextRequest): Promise<NextResponse<{
3
+ error: string;
4
+ }> | NextResponse<{
5
+ success: boolean;
6
+ }>>;
@@ -0,0 +1,45 @@
1
+ import { parseToh } from '@eightyfourthousand/lib-utils';
2
+ import { NextResponse } from 'next/server';
3
+ import { Resend } from 'resend';
4
+ async function sendRevisionEmail({ toh, type, label, body, }) {
5
+ const apiKey = process.env['RESEND_API_KEY'];
6
+ const from = process.env['FEEDBACK_SENDER'];
7
+ const to = process.env['FEEDBACK_RECIPIENT'];
8
+ if (!apiKey || !from || !to) {
9
+ throw new Error('Missing email configuration environment variables');
10
+ }
11
+ const resend = new Resend(apiKey);
12
+ const trimmedLabel = label.split('\n').join(', ').trim();
13
+ const subject = `[Revision Suggestion] ${parseToh(toh)} - ${type} ${trimmedLabel}`;
14
+ const { error } = await resend.emails.send({
15
+ from,
16
+ to,
17
+ subject,
18
+ text: body,
19
+ });
20
+ if (error) {
21
+ throw new Error(error.message);
22
+ }
23
+ }
24
+ export async function handleFeedbackPost(request) {
25
+ try {
26
+ const { toh, type, label, body } = await request.json();
27
+ if (typeof toh !== 'string' ||
28
+ !toh.trim() ||
29
+ typeof type !== 'string' ||
30
+ !type.trim() ||
31
+ typeof label !== 'string' ||
32
+ !label.trim() ||
33
+ typeof body !== 'string' ||
34
+ !body.trim()) {
35
+ return NextResponse.json({ error: 'All fields (toh, type, label, body) are required.' }, { status: 400 });
36
+ }
37
+ await sendRevisionEmail({ toh, type, label, body });
38
+ return NextResponse.json({ success: true });
39
+ }
40
+ catch (error) {
41
+ console.error('Failed to send revision email:', error);
42
+ return NextResponse.json({ error: 'Failed to send feedback.' }, { status: 500 });
43
+ }
44
+ }
45
+ //# sourceMappingURL=feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../../../libs/data-access/src/lib/feedback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAe,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,KAAK,UAAU,iBAAiB,CAAC,EAC/B,GAAG,EACH,IAAI,EACJ,KAAK,EACL,IAAI,GAML;IACC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAE7C,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAEzD,MAAM,OAAO,GAAG,yBAAyB,QAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;IAEnF,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QACzC,IAAI;QACJ,EAAE;QACF,OAAO;QACP,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;IAEH,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAoB;IAC3D,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QAExD,IACE,OAAO,GAAG,KAAK,QAAQ;YACvB,CAAC,GAAG,CAAC,IAAI,EAAE;YACX,OAAO,IAAI,KAAK,QAAQ;YACxB,CAAC,IAAI,CAAC,IAAI,EAAE;YACZ,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAC,KAAK,CAAC,IAAI,EAAE;YACb,OAAO,IAAI,KAAK,QAAQ;YACxB,CAAC,IAAI,CAAC,IAAI,EAAE,EACZ,CAAC;YACD,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,KAAK,EAAE,mDAAmD,EAAE,EAC9D,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;QACJ,CAAC;QAED,MAAM,iBAAiB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAEpD,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACvD,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,KAAK,EAAE,0BAA0B,EAAE,EACrC,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;IACJ,CAAC;AACH,CAAC"}
package/lib/folio.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import { DataClient, TohokuCatalogEntry } from './types';
2
+ type GetWorkFoliosArgs = {
3
+ client: DataClient;
4
+ uuid: string;
5
+ toh: TohokuCatalogEntry;
6
+ page?: number;
7
+ size?: number;
8
+ };
9
+ export declare const getWorkFolios: ({ client, uuid, toh, page, size, }: GetWorkFoliosArgs) => Promise<import("./types").Folio[]>;
10
+ export declare const getFolios: ({ uuid, toh, page, size, }: Omit<GetWorkFoliosArgs, "client">) => Promise<import("./types").Folio[]>;
11
+ export {};
package/lib/folio.js ADDED
@@ -0,0 +1,31 @@
1
+ 'use server';
2
+ import { createServerClient } from './client-ssr';
3
+ import { folioFromDTO } from './types/folio';
4
+ export const getWorkFolios = async ({ client, uuid, toh, page = 0, size = 10, }) => {
5
+ const start = page * size;
6
+ const end = start + size - 1;
7
+ const { data, error } = await client
8
+ .from('tibetan_works_folios')
9
+ .select(`
10
+ folio_uuid,
11
+ content::text,
12
+ volume_number::int4,
13
+ folio_number::int4,
14
+ side::text`)
15
+ .eq('work_uuid', uuid)
16
+ .eq('toh', toh)
17
+ .order('volume_number', { ascending: true })
18
+ .order('folio_number', { ascending: true })
19
+ .order('side', { ascending: true })
20
+ .range(start, end);
21
+ if (error) {
22
+ console.error('Error fetching folios:', error);
23
+ return [];
24
+ }
25
+ return data.map((dto) => folioFromDTO(dto));
26
+ };
27
+ export const getFolios = async ({ uuid, toh, page = 0, size = 10, }) => {
28
+ const client = await createServerClient();
29
+ return getWorkFolios({ client, uuid, toh, page, size });
30
+ };
31
+ //# sourceMappingURL=folio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folio.js","sourceRoot":"","sources":["../../../../libs/data-access/src/lib/folio.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,EAAY,YAAY,EAAE,MAAM,eAAe,CAAC;AAUvD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,EAClC,MAAM,EACN,IAAI,EACJ,GAAG,EACH,IAAI,GAAG,CAAC,EACR,IAAI,GAAG,EAAE,GACS,EAAE,EAAE;IACtB,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,MAAM,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC;IAC7B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM;SACjC,IAAI,CAAC,sBAAsB,CAAC;SAC5B,MAAM,CACL;;;;;iBAKW,CACZ;SACA,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC;SACrB,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC;SACd,KAAK,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SAC3C,KAAK,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SAC1C,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SAClC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAErB,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAe,CAAC,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,EAC9B,IAAI,EACJ,GAAG,EACH,IAAI,GAAG,CAAC,EACR,IAAI,GAAG,EAAE,GACyB,EAAE,EAAE;IACtC,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC1C,OAAO,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1D,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { DataClient } from '../types';
2
+ export declare const getGlossaryDisplayNamesByUuids: ({ client, glossaryUuids, }: {
3
+ client: DataClient;
4
+ glossaryUuids: readonly string[];
5
+ }) => Promise<Map<string, string>>;
@@ -0,0 +1,22 @@
1
+ export const getGlossaryDisplayNamesByUuids = async ({ client, glossaryUuids, }) => {
2
+ const namesByUuid = new Map();
3
+ if (glossaryUuids.length === 0)
4
+ return namesByUuid;
5
+ const { data, error } = await client
6
+ .from('glossaries')
7
+ .select('uuid, names:names!name_uuid(content)')
8
+ .in('uuid', glossaryUuids);
9
+ if (error) {
10
+ console.error('Error batch loading glossary names:', error);
11
+ return namesByUuid;
12
+ }
13
+ for (const glossary of data ?? []) {
14
+ const names = glossary.names;
15
+ const content = Array.isArray(names) ? names[0]?.content : names?.content;
16
+ if (content) {
17
+ namesByUuid.set(glossary.uuid, content);
18
+ }
19
+ }
20
+ return namesByUuid;
21
+ };
22
+ //# sourceMappingURL=batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../../../libs/data-access/src/lib/glossary/batch.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAK,EAAE,EACnD,MAAM,EACN,aAAa,GAId,EAAgC,EAAE;IACjC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IAEnD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM;SACjC,IAAI,CAAC,YAAY,CAAC;SAClB,MAAM,CAAC,sCAAsC,CAAC;SAC9C,EAAE,CAAC,MAAM,EAAE,aAAyB,CAAC,CAAC;IAEzC,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QAC5D,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAGf,CAAC;QACT,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC;QAC1E,IAAI,OAAO,EAAE,CAAC;YACZ,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './batch';
2
+ export * from './instance';
3
+ export * from './landing';
4
+ export * from './pagination';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/data-access/src/lib/glossary/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { DataClient } from '../types';
2
+ export declare const getGlossaryInstances: ({ client, uuid, withAttestations, }: {
3
+ client: DataClient;
4
+ uuid: string;
5
+ withAttestations?: boolean;
6
+ }) => Promise<import("../types").GlossaryTermInstance[]>;
7
+ export declare const getGlossaryInstance: ({ client, uuid, }: {
8
+ client: DataClient;
9
+ uuid: string;
10
+ }) => Promise<import("../types").GlossaryTermInstance | undefined>;
@@ -0,0 +1,28 @@
1
+ import { glossaryTermInstanceFromDTO, } from '../types';
2
+ export const getGlossaryInstances = async ({ client, uuid, withAttestations = false, }) => {
3
+ const { data, error } = await client.rpc('show_glossary_entries', {
4
+ v_work_uuid: uuid,
5
+ v_with_attestation: withAttestations,
6
+ });
7
+ if (error) {
8
+ console.error(`Error fetching glossary instances for work: ${uuid} `, error);
9
+ return [];
10
+ }
11
+ const dto = data;
12
+ return dto.glossary_entries.map(glossaryTermInstanceFromDTO).sort((a, b) => {
13
+ const nameA = a.names.english || '';
14
+ const nameB = b.names.english || '';
15
+ return nameA.localeCompare(nameB);
16
+ });
17
+ };
18
+ export const getGlossaryInstance = async ({ client, uuid, }) => {
19
+ const { data, error } = await client.rpc('show_glossary_entry', {
20
+ v_glossary_uuid: uuid,
21
+ });
22
+ if (error) {
23
+ console.error(`Error fetching glossary instance: ${uuid} `, error);
24
+ return undefined;
25
+ }
26
+ return glossaryTermInstanceFromDTO(data);
27
+ };
28
+ //# sourceMappingURL=instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance.js","sourceRoot":"","sources":["../../../../../libs/data-access/src/lib/glossary/instance.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,2BAA2B,GAC5B,MAAM,UAAU,CAAC;AAElB,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,EACzC,MAAM,EACN,IAAI,EACJ,gBAAgB,GAAG,KAAK,GAKzB,EAAE,EAAE;IACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE;QAChE,WAAW,EAAE,IAAI;QACjB,kBAAkB,EAAE,gBAAgB;KACrC,CAAC,CAAC;IACH,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CACX,+CAA+C,IAAI,GAAG,EACtD,KAAK,CACN,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,GAAG,GAAG,IAAgC,CAAC;IAC7C,OAAO,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACzE,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,EACxC,MAAM,EACN,IAAI,GAIL,EAAE,EAAE;IACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE;QAC9D,eAAe,EAAE,IAAI;KACtB,CAAC,CAAC;IAEH,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,qCAAqC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;QACnE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,2BAA2B,CAAC,IAA+B,CAAC,CAAC;AACtE,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { DataClient, GlossaryLandingItem } from '../types';
2
+ export declare const getAllGlossaryTerms: ({ client, uuids, }: {
3
+ client: DataClient;
4
+ uuids?: string[];
5
+ }) => Promise<GlossaryLandingItem[]>;
@@ -0,0 +1,32 @@
1
+ import { glossaryLandingItemFromDTO, } from '../types';
2
+ export const getAllGlossaryTerms = async ({ client, uuids, }) => {
3
+ const pageSize = 1000;
4
+ let start = 0;
5
+ let end = pageSize - 1;
6
+ let count = pageSize;
7
+ const terms = [];
8
+ while (count === pageSize) {
9
+ let rpc = client.rpc('scholar_glossary_get_all');
10
+ if (uuids?.length) {
11
+ rpc = rpc.in('authority_uuid', uuids);
12
+ }
13
+ const { data, error } = await rpc.range(start, end);
14
+ if (error) {
15
+ console.error('Error fetching glossary terms:', error);
16
+ return [];
17
+ }
18
+ if (!data || !data.length) {
19
+ break;
20
+ }
21
+ const dtos = data;
22
+ const items = dtos
23
+ .map((item) => glossaryLandingItemFromDTO(item))
24
+ .flatMap((item) => (item ? [item] : []));
25
+ terms.push(...items);
26
+ start += pageSize;
27
+ end += pageSize;
28
+ count = data.length;
29
+ }
30
+ return terms;
31
+ };
32
+ //# sourceMappingURL=landing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"landing.js","sourceRoot":"","sources":["../../../../../libs/data-access/src/lib/glossary/landing.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,0BAA0B,GAC3B,MAAM,UAAU,CAAC;AAElB,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,EACxC,MAAM,EACN,KAAK,GAIN,EAAkC,EAAE;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC;IACtB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,QAAQ,GAAG,CAAC,CAAC;IACvB,IAAI,KAAK,GAAG,QAAQ,CAAC;IACrB,MAAM,KAAK,GAA0B,EAAE,CAAC;IAExC,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAEjD,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;YAClB,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEpD,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACvD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM;QACR,CAAC;QAED,MAAM,IAAI,GAAG,IAAgC,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI;aACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAA8B,CAAC,CAAC;aACzE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE3C,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACrB,KAAK,IAAI,QAAQ,CAAC;QAClB,GAAG,IAAI,QAAQ,CAAC;QAChB,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}