@nxgt/janus 0.1.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 (112) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +554 -0
  3. package/dist/auth/config.d.ts +201 -0
  4. package/dist/auth/config.d.ts.map +1 -0
  5. package/dist/auth/context.d.ts +87 -0
  6. package/dist/auth/context.d.ts.map +1 -0
  7. package/dist/auth/hashers.d.ts +35 -0
  8. package/dist/auth/hashers.d.ts.map +1 -0
  9. package/dist/auth/index.d.ts +9 -0
  10. package/dist/auth/index.d.ts.map +1 -0
  11. package/dist/auth/janus.d.ts +38 -0
  12. package/dist/auth/janus.d.ts.map +1 -0
  13. package/dist/auth/outage.d.ts +61 -0
  14. package/dist/auth/outage.d.ts.map +1 -0
  15. package/dist/auth/port/assert-stores.d.ts +16 -0
  16. package/dist/auth/port/assert-stores.d.ts.map +1 -0
  17. package/dist/auth/port/memory.d.ts +25 -0
  18. package/dist/auth/port/memory.d.ts.map +1 -0
  19. package/dist/auth/port/types.d.ts +393 -0
  20. package/dist/auth/port/types.d.ts.map +1 -0
  21. package/dist/auth/secrets.d.ts +17 -0
  22. package/dist/auth/secrets.d.ts.map +1 -0
  23. package/dist/auth/sessions.d.ts +31 -0
  24. package/dist/auth/sessions.d.ts.map +1 -0
  25. package/dist/auth/standard-schema.d.ts +41 -0
  26. package/dist/auth/standard-schema.d.ts.map +1 -0
  27. package/dist/auth/types.d.ts +353 -0
  28. package/dist/auth/types.d.ts.map +1 -0
  29. package/dist/auth/users.d.ts +9 -0
  30. package/dist/auth/users.d.ts.map +1 -0
  31. package/dist/chunks/index-658b6mr2.js +269 -0
  32. package/dist/chunks/index-658b6mr2.js.map +11 -0
  33. package/dist/chunks/index-6dytvy3h.js +93 -0
  34. package/dist/chunks/index-6dytvy3h.js.map +11 -0
  35. package/dist/chunks/index-6p56fpbe.js +147 -0
  36. package/dist/chunks/index-6p56fpbe.js.map +12 -0
  37. package/dist/chunks/index-fgb3t64y.js +77 -0
  38. package/dist/chunks/index-fgb3t64y.js.map +10 -0
  39. package/dist/conformance/assert.d.ts +36 -0
  40. package/dist/conformance/assert.d.ts.map +1 -0
  41. package/dist/conformance/cases/outage.d.ts +3 -0
  42. package/dist/conformance/cases/outage.d.ts.map +1 -0
  43. package/dist/conformance/cases/sessions.d.ts +3 -0
  44. package/dist/conformance/cases/sessions.d.ts.map +1 -0
  45. package/dist/conformance/cases/tokens.d.ts +3 -0
  46. package/dist/conformance/cases/tokens.d.ts.map +1 -0
  47. package/dist/conformance/cases/users.d.ts +3 -0
  48. package/dist/conformance/cases/users.d.ts.map +1 -0
  49. package/dist/conformance/describe.d.ts +74 -0
  50. package/dist/conformance/describe.d.ts.map +1 -0
  51. package/dist/conformance/fixtures.d.ts +11 -0
  52. package/dist/conformance/fixtures.d.ts.map +1 -0
  53. package/dist/conformance/index.d.ts +33 -0
  54. package/dist/conformance/index.d.ts.map +1 -0
  55. package/dist/conformance/index.js +1113 -0
  56. package/dist/conformance/index.js.map +18 -0
  57. package/dist/conformance/reference.d.ts +13 -0
  58. package/dist/conformance/reference.d.ts.map +1 -0
  59. package/dist/conformance/relations.d.ts +67 -0
  60. package/dist/conformance/relations.d.ts.map +1 -0
  61. package/dist/conformance/types.d.ts +71 -0
  62. package/dist/conformance/types.d.ts.map +1 -0
  63. package/dist/errors/janus-error.d.ts +259 -0
  64. package/dist/errors/janus-error.d.ts.map +1 -0
  65. package/dist/ids/id.d.ts +55 -0
  66. package/dist/ids/id.d.ts.map +1 -0
  67. package/dist/index.d.ts +30 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +962 -0
  70. package/dist/index.js.map +19 -0
  71. package/dist/pagination/cursor-page.d.ts +53 -0
  72. package/dist/pagination/cursor-page.d.ts.map +1 -0
  73. package/dist/permissions/engine.d.ts +46 -0
  74. package/dist/permissions/engine.d.ts.map +1 -0
  75. package/dist/permissions/index.d.ts +24 -0
  76. package/dist/permissions/index.d.ts.map +1 -0
  77. package/dist/permissions/index.js +685 -0
  78. package/dist/permissions/index.js.map +15 -0
  79. package/dist/permissions/input.d.ts +29 -0
  80. package/dist/permissions/input.d.ts.map +1 -0
  81. package/dist/permissions/model.d.ts +368 -0
  82. package/dist/permissions/model.d.ts.map +1 -0
  83. package/dist/permissions/port/memory.d.ts +17 -0
  84. package/dist/permissions/port/memory.d.ts.map +1 -0
  85. package/dist/permissions/port/types.d.ts +84 -0
  86. package/dist/permissions/port/types.d.ts.map +1 -0
  87. package/dist/permissions/resolve.d.ts +59 -0
  88. package/dist/permissions/resolve.d.ts.map +1 -0
  89. package/dist/permissions/reverse.d.ts +53 -0
  90. package/dist/permissions/reverse.d.ts.map +1 -0
  91. package/dist/permissions/walk.d.ts +29 -0
  92. package/dist/permissions/walk.d.ts.map +1 -0
  93. package/dist/subjects/notation.d.ts +35 -0
  94. package/dist/subjects/notation.d.ts.map +1 -0
  95. package/dist/subjects/subject.d.ts +75 -0
  96. package/dist/subjects/subject.d.ts.map +1 -0
  97. package/dist/time/clock.d.ts +31 -0
  98. package/dist/time/clock.d.ts.map +1 -0
  99. package/dist/time/duration.d.ts +23 -0
  100. package/dist/time/duration.d.ts.map +1 -0
  101. package/docs/README.md +17 -0
  102. package/docs/guide/adapters.md +296 -0
  103. package/docs/guide/email-flows.md +146 -0
  104. package/docs/guide/errors.md +146 -0
  105. package/docs/guide/passwords.md +136 -0
  106. package/docs/guide/permissions.md +347 -0
  107. package/docs/guide/sessions.md +211 -0
  108. package/docs/guide/users.md +277 -0
  109. package/docs/guide/vocabulary.md +163 -0
  110. package/docs/roadmap.md +93 -0
  111. package/docs/troubleshooting.md +648 -0
  112. package/package.json +70 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/permissions/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,WAAW,CAAC;AAI7D;;;;GAIG;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;AAEvE;;;;;;;;GAQG;AACH,MAAM,WAAW,SAAS,CACzB,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,MAAM;IAE/B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,0CAA0C;AAC1C,MAAM,WAAW,mBAAmB,CACnC,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,MAAM,CAC9B,SAAQ,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,SAAS,CACxB,KAAK,CAAC,KAAK,SAAS,MAAM,EAC1B,KAAK,CAAC,OAAO,SAAS,MAAM,EAC3B,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC7D,wBAAgB,SAAS,CACxB,KAAK,CAAC,KAAK,SAAS,MAAM,EAC1B,KAAK,CAAC,OAAO,SAAS,MAAM,EAE5B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAavC;;;;;;;GAOG;AACH,MAAM,WAAW,IAAI,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,EAAE,GAAG,GAAG,KAAK;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrC;AAED,wBAAgB,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,EAAE,GAAG,EAClD,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,GACzB,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAEjB;AAID;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;AAExD;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE,CAAC;IAC9D,iDAAiD;IACjD,QAAQ,CAAC,WAAW,CAAC,EAAE;QAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,OAAO,EAAE,CAAA;KAAE,CAAC;CACvE;AAED,MAAM,WAAW,WAAW;IAC3B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAA;KAAE,CAAC;CAC3D;AAID,KAAK,OAAO,CAAC,CAAC,SAAS,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;AAEjD,yCAAyC;AACzC,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,WAAW,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAE5E,kDAAkD;AAClD,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,WAAW,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,KAAK,WAAW,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,MAAM,EAAE,GACzC,EAAE,CAAC,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;CAAE,GAC5C,MAAM,CAAC,GAAG,MAAM,GAChB,KAAK,GACN,KAAK,CAAC;AAET,KAAK,aAAa,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,MAAM,EAAE,GAC3C,EAAE,CAAC,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;CAAE,GAC9C,MAAM,CAAC,GAAG,MAAM,GAChB,KAAK,GACN,KAAK,CAAC;AAET,KAAK,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAEhE,KAAK,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,MAAM,EAAE,GAC9C,EAAE,CAAC,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,GAC7C,CAAC,SAAS,MAAM,EAAE,GACjB,EAAE,CAAC,CAAC,CAAC,GACL,KAAK,GACN,KAAK,GACN,KAAK,CAAC;AAET,sFAAsF;AACtF,KAAK,iBAAiB,CAAC,EAAE,EAAE,CAAC,IAAI;KAC9B,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,SAAS,GACjE,KAAK,GACL,CAAC;CACJ,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAEtB;;;;GAIG;AACH,KAAK,YAAY,CAAC,EAAE,IAAI;KACtB,CAAC,IAAI,MAAM,EAAE,GAAG,MAAM,GAAG,GAAG,CAAC,IAAI,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;CAC5D,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;AAErB,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,IACnC,CAAC,GACD,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,GACnB,YAAY,CAAC,EAAE,CAAC,CAAC;AAEpB,+EAA+E;AAC/E,KAAK,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IACzB,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,GACzD,GAAG,GACH,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACnD,CAAC,SAAS,GAAG,MAAM,IAAI,MAAM,EAAE,GAC9B,KAAK,GACL,CAAC,GACF,KAAK,CAAC;AAEX,iDAAiD;AACjD,KAAK,WAAW,CAAC,EAAE,EAAE,OAAO,IAC3B,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,SAAS,MAAM,CAAC,GACjC,CAAC,SAAS,MAAM,GACf,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GACrC,CAAC,GACD,KAAK,GACN,KAAK,GACN,KAAK,CAAC;AAEV,KAAK,WAAW,CAAC,EAAE,EAAE,CAAC,IAAI;KACxB,CAAC,IAAI,MAAM,EAAE,GAAG,CAAC,SAAS,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CACrD,CAAC,MAAM,EAAE,CAAC,CAAC;AAEZ,4EAA4E;AAC5E,KAAK,QAAQ,CAAC,EAAE,EAAE,CAAC,IAAI;KACrB,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAChE,KAAK,GACL,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,GAC1C,GAAG,CAAC,KAAK,WAAW,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAClD,KAAK;CACT,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAEtB,yCAAyC;AACzC,KAAK,SAAS,CAAC,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAEzD,kFAAkF;AAClF,MAAM,MAAM,WAAW,CACtB,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,IACtB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE3B,gFAAgF;AAChF,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,IAAI;KACvE,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAC/C,OAAO,CAAC,CAAC,CAAC,EACV,CAAC,EACD,CAAC,CACD,SAAS,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GACjC,CAAC,GACD,KAAK;CACR,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAE9B;;;;;GAKG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,IAAI;IACzE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACpB,GAAG;IAAE,QAAQ,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI;CAAE,CAAC;AAEtD,+DAA+D;AAC/D,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,WAAW;IAChD,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAC/C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACpB;AAID,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAC7B,CAAC,SAAS,OAAO,GACd,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAClB,KAAK,CACR,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,IAAI,GACtC,CAAC,GACD,KAAK,CAAC;AAET,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEhE,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAClC,CAAC,GACD,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,GAC7B,CAAC,GACD,KAAK,CAAC;AAEV,KAAK,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,MAAM,CAAC,EAAE,GAChE,eAAe,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GACpD,eAAe,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAEnC;;;;GAIG;AACH,KAAK,eAAe,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,MAAM,EAAE,GAAG,MAAM,GAC/D,CAAC,SAAS,MAAM,GACf,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,IAAI,GACvB,KAAK,GACL,EAAE,CAAC,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GAC/C,CAAC,SAAS,MAAM,EAAE,GACjB,EAAE,CAAC,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACjC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAClE,KAAK,GACN,KAAK,GACN,KAAK,GACP,KAAK,GACN,KAAK,CAAC;AAET;;;;GAIG;AACH,MAAM,MAAM,KAAK,CAChB,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,MAAM,IACb,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAC3D,KAAK,GACL,mBAAmB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAEjE;;;;;;;;;GASG;AACH,MAAM,MAAM,SAAS,CACpB,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,MAAM,IACb,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAC9B,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAChC,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GACtC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GAEtC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GACtB,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GACxC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE3B,mFAAmF;AACnF,KAAK,cAAc,CAClB,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,MAAM,IACb,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAChC,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,GACvC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GACf,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GACvC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEnB,KAAK,MAAM,CACV,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,MAAM,IACb,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GACjC,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,GACpC,CAAC,OAAO,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;CAAE,CAAC,CAAC;AAE/C,8DAA8D;AAC9D,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,WAAW,IAAI,CACxC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAE3B,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,EAC7B,UAAU,EAAE,CAAC,EACb,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EACvB,GAAG,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC1B,OAAO,CAAC,OAAO,CAAC,CAAC;AAItB,oFAAoF;AACpF,KAAK,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAC1B,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxD,KAAK,GACL,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,SAAS,GACxC,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,MAAM,EAAE,GAC7B,KAAK,CAAC;AAEX,KAAK,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,MAAM,CAAC,EAAE,GAE9D,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GACvB,eAAe,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GACtD,eAAe,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAEnC;;;;GAIG;AACH,KAAK,eAAe,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,MAAM,EAAE,GAAG,MAAM,GAC/D,CAAC,SAAS,MAAM,GACf,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,IAAI,GACvB,KAAK,GACL,CAAC,SAAS,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,GAC3B,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GACvB,EAAE,CAAC,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GAC/C,CAAC,SAAS,MAAM,EAAE,GACjB,EAAE,CAAC,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACjC,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GACnD,KAAK,GACN,KAAK,GACN,KAAK,GACR,KAAK,GACN,KAAK,CAAC;AAET,gGAAgG;AAChG,MAAM,MAAM,SAAS,CACpB,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,MAAM,IACb,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAE7C,+DAA+D;AAC/D,KAAK,SAAS,CACb,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,MAAM,IACb,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GACrC,OAAO,GACP,OAAO,CACP,uBAAuB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,gCAAgC,EACzE,KAAK,CACL,CAAC;AAEJ,8DAA8D;AAC9D,MAAM,WAAW,QAAQ;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,yCAAyC;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,gCAAgC;AAChC,KAAK,QAAQ,CACZ,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,MAAM,IAEhB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GACjC,CAAC,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,GACvB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,GAC7C,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,GACxB,KAAK,CAAC;AAEX;;;;;GAKG;AACH,MAAM,MAAM,IAAI,CAAC,CAAC,SAAS,WAAW,IAAI,CACzC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAE3B,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,EAC7B,UAAU,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClC,IAAI,EAAE,CAAC,EACP,GAAG,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KACzB,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AAEjC,oFAAoF;AACpF,MAAM,MAAM,WAAW,CACtB,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,IACtB,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAErC;;;GAGG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,IACvE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACzD,CAAC,SAAS,GAAG,MAAM,OAAO,IAAI,MAAM,WAAW,EAAE,GAChD;IACA,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;CAC/B,GACA;IAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC1C,KAAK,CAAC;AAEV,2DAA2D;AAC3D,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,WAAW,IAAI,CAC1C,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAE3B,MAAM,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EACjD,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KACtB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,oCAAoC;AACpC,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,WAAW;IACjD,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,yEAAyE;IACzE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;CAC1B;AAED,kDAAkD;AAClD,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAIzE,KAAK,OAAO,CAAC,IAAI,SAAS,MAAM,EAAE,QAAQ,IAAI;IAC7C,QAAQ,EAAE,CAAC,IAAI,IAAI,GAAG,QAAQ;CAC9B,CAAC;AAEF,KAAK,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,IAC5C,GAAG,SAAS,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,GACrC,GAAG,SAAS,UAAU,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAC1C,OAAO,GACP;IACA,QAAQ,CAAC,OAAO,EAAE,OAAO,CACxB,IAAI,GAAG,sCAAsC,EAC7C,UAAU,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAC/B,CAAC;CACF,GACD;IACA,QAAQ,EAAE,CAAC,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,YAAY,CACrD,UAAU,CAAC,CAAC,CAAC,EACb,OAAO,CAAC,CAAC,CAAC,CACV,GACE,OAAO,GACP,OAAO,CACP,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,uDAAuD,EAC1E,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CACvC;CACH,CAAC;AAEL,KAAK,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,IAAI;IAC/B,QAAQ,EAAE,CAAC,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,MAAM,GACjD,KAAK,CAAC,CAAC,CAAC,SAAS,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,GAChC,OAAO,GACP,OAAO,CACP,IAAI,KAAK,CAAC,CAAC,CAAC,oDAAoD,CAAC,GAAG,MAAM,eAAe,EACzF,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAChB,GACD,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,GACpC,CAAC,SAAS,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,GACzB,OAAO,GACP;QACA,QAAQ,CAAC,IAAI,EAAE,OAAO,CACrB,IAAI,CAAC,oDAAoD,CAAC,GAAG,MAAM,eAAe,EAClF,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAChB,CAAC;KACF,GACD,OAAO;CACX,CAAC;AAEF,KAAK,eAAe,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAC7D,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,GACxD;IACA,QAAQ,CAAC,SAAS,EAAE;QACnB,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;KACjD,CAAC;CACF,GACA,OAAO,CAAC,GACV,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GACzE;IACA,QAAQ,CAAC,WAAW,EAAE;QACrB,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,GAAG,CAAC,SAAS,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAC3D,OAAO,CACP,IAAI,CAAC,GAAG,MAAM,0CAA0C,CAAC,GAAG,MAAM,cAAc,EAChF,KAAK,CACL,GACA,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;KACnC,CAAC;CACF,GACA,OAAO,CAAC,CAAC;AAEb;;;;GAIG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,WAAW,IAAI;IACjD,QAAQ,CAAC,KAAK,EAAE;QACf,QAAQ,EAAE,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;KACvD,CAAC;CACF,CAAC;AAIF,qEAAqE;AACrE,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IACnE,6CAA6C;IAC7C,QAAQ,CAAC,QAAQ,EAAE,SAAS,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3C,0CAA0C;IAC1C,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;CACvB;AAKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,WAAW,CAAC,KAAK,CAAC,CAAC,SAAS,WAAW,EACtD,MAAM,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GACzB,eAAe,CAAC,CAAC,CAAC,CASpB;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAQvD"}
@@ -0,0 +1,17 @@
1
+ import type { RelationStore } from './types';
2
+ /**
3
+ * The reference implementation of the relation store, in memory.
4
+ *
5
+ * **Shipped and documented, not a test helper**, like `createMemoryStores()`:
6
+ * what a consumer uses in their own tests, and what an adapter author compares
7
+ * against. It favours being obviously right over being fast — every query
8
+ * scans — and keeps the rules for real:
9
+ *
10
+ * - a tuple is unique because its key is its notation, and one `Map` holds it;
11
+ * - `write` checks nothing it could fail on half-way, so it is all or nothing
12
+ * on one event loop;
13
+ * - every tuple is copied in and out, so a caller cannot reach the store by
14
+ * mutating what it passed or got back.
15
+ */
16
+ export declare function createMemoryRelations(): RelationStore;
17
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/permissions/port/memory.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,IAAI,aAAa,CAgFrD"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * The relation store port: where tuples live, and nothing else.
3
+ *
4
+ * **A port of its own, not a fourth slot of `JanusStores`** (decided
5
+ * 2026-09-24): an application that only authenticates implements nothing
6
+ * here, and tuples may live somewhere else than users.
7
+ *
8
+ * Small on purpose, like the user port: the traversal — subject sets, arrows,
9
+ * `fromField`, conditions, depth — is the core's, written once. A store answers
10
+ * one-hop questions about stored tuples and never evaluates a permission.
11
+ *
12
+ * ## The rules an implementation keeps
13
+ *
14
+ * The user port's six hold here unchanged, and the conformance suite checks
15
+ * them: **an absence is `false`, `[]`, an empty page or `0`, and a failure
16
+ * throws** — a store that answers `false` for an outage denies everybody
17
+ * everything, silently; `null` or `false`, never `undefined`; uniqueness of a
18
+ * tuple is a constraint, not a read; bytes round-trip — a type, an id and a
19
+ * relation come back exactly as written, and `staff:u1` is not `patient:u1`;
20
+ * every method is atomic on its own; schema management is the adapter's own.
21
+ *
22
+ * A subject is a set when its `relation` is a string — `isSubjectSet` — so
23
+ * one spread with `relation: undefined` is its entity, as the reference store
24
+ * reads it.
25
+ */
26
+ import type { CursorPage } from '../../pagination/cursor-page';
27
+ import type { Entity, RelationTuple, Subject, SubjectSet } from '../../subjects/subject';
28
+ /** What one {@link RelationStore.write} changes. */
29
+ export interface RelationChanges {
30
+ readonly add?: readonly RelationTuple[];
31
+ readonly remove?: readonly RelationTuple[];
32
+ }
33
+ /** Which objects a page lists: those of one type where a subject holds a relation. */
34
+ export interface ObjectPageRequest {
35
+ readonly type: string;
36
+ readonly relation: string;
37
+ /** Compared exactly: a subject set is not its entity, and the reverse. */
38
+ readonly subject: Subject;
39
+ /**
40
+ * The last object id of the previous page, or `null` for the first. It need
41
+ * not name a stored object: the page is every id strictly greater than it.
42
+ */
43
+ readonly after: string | null;
44
+ /** Already bounded by the core, between 1 and `MAX_PAGE_SIZE`. */
45
+ readonly limit: number;
46
+ }
47
+ export interface RelationStore {
48
+ /**
49
+ * Adds and removes tuples, **all or nothing**: removals first, then
50
+ * additions. Idempotent: adding a tuple already stored and removing one
51
+ * that is not are no-ops, so a retry after a timeout is a success.
52
+ *
53
+ * The core never sends one tuple in both lists.
54
+ */
55
+ write(changes: RelationChanges): Promise<void>;
56
+ /** Whether exactly this tuple is stored. */
57
+ has(tuple: RelationTuple): Promise<boolean>;
58
+ /**
59
+ * The subject sets holding `relation` on `object` — `team:t1#member` — and
60
+ * no single entity. What the traversal follows to reach members of a group.
61
+ * `[]` when none; unordered; unpaged, because a relation is held by few sets.
62
+ */
63
+ findSubjectSets(object: Entity, relation: string): Promise<readonly SubjectSet[]>;
64
+ /**
65
+ * The single entities holding `relation` on `object`, and no subject set.
66
+ * What an arrow follows — a record's team, a folder's parent — which is why
67
+ * it is unpaged: an arrow relation holds a handful of objects. `[]` when
68
+ * none; unordered.
69
+ */
70
+ findEntities(object: Entity, relation: string): Promise<readonly Entity[]>;
71
+ /**
72
+ * The ids of the objects of one type on which `subject` holds `relation`
73
+ * directly, in ascending id order, by pages. The reverse index `list()`
74
+ * walks. An empty store answers an empty page, never `null`.
75
+ */
76
+ findObjects(page: ObjectPageRequest): Promise<CursorPage<string>>;
77
+ /**
78
+ * Deletes every tuple naming `entity` — as the object, as the subject, and
79
+ * as the entity of a subject set — and answers how many. `0` is an answer.
80
+ * What deleting a user or an object calls.
81
+ */
82
+ deleteEntity(entity: Entity): Promise<number>;
83
+ }
84
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/permissions/port/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EACX,MAAM,EACN,aAAa,EACb,OAAO,EACP,UAAU,EACV,MAAM,wBAAwB,CAAC;AAEhC,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CAC3C;AAED,sFAAsF;AACtF,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC7B;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C,4CAA4C;IAC5C,GAAG,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE5C;;;;OAIG;IACH,eAAe,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;IAElC;;;;;OAKG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IAE3E;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAElE;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9C"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * A model, resolved: every string parsed once, every reference checked, every
3
+ * refusal a `TypeError` naming where it is.
4
+ *
5
+ * The types refuse most of these first. This is what refuses them for a model
6
+ * built at run time or written in JavaScript, and what refuses what the types
7
+ * cannot see: names, and a permission that reaches itself without crossing a
8
+ * relation.
9
+ */
10
+ import type { Subject } from '../subjects/subject';
11
+ import type { ModelConfig } from './model';
12
+ /** Who may hold a stored relation: a subject type, or a subject set. */
13
+ export type Holder = {
14
+ readonly kind: 'type';
15
+ readonly type: string;
16
+ } | {
17
+ readonly kind: 'set';
18
+ readonly type: string;
19
+ readonly relation: string;
20
+ };
21
+ /**
22
+ * Whether a stored relation admits `subject` as a holder: an entity of a
23
+ * declared type, or a set of a declared `type#relation`. One rule for what
24
+ * `grant()` writes and what `can()` and `list()` follow — a tuple the model
25
+ * does not admit grants nothing, however it was stored.
26
+ */
27
+ export declare function admits(holders: readonly Holder[], subject: Subject): boolean;
28
+ export type ResolvedRelation = {
29
+ readonly kind: 'stored';
30
+ readonly holders: readonly Holder[];
31
+ } | {
32
+ readonly kind: 'fromField';
33
+ readonly field: string;
34
+ readonly subject: string;
35
+ /** What `list()` reverses it with. Absent: `list()` cannot reach through it. */
36
+ readonly lookup?: (subjectId: string) => Promise<readonly string[]>;
37
+ };
38
+ /** One rule of a permission. `test`, when present, must pass for it to grant. */
39
+ export type ResolvedRule = ({
40
+ readonly kind: 'name';
41
+ readonly name: string;
42
+ } | {
43
+ readonly kind: 'arrow';
44
+ readonly relation: string;
45
+ readonly target: string;
46
+ }) & {
47
+ readonly test?: (ctx: never) => boolean;
48
+ };
49
+ export interface ResolvedObjectType {
50
+ readonly name: string;
51
+ readonly relations: ReadonlyMap<string, ResolvedRelation>;
52
+ readonly permissions: ReadonlyMap<string, readonly ResolvedRule[]>;
53
+ }
54
+ export interface ResolvedModel {
55
+ readonly subjects: ReadonlySet<string>;
56
+ readonly types: ReadonlyMap<string, ResolvedObjectType>;
57
+ }
58
+ export declare function resolveModel(config: ModelConfig, where: string): ResolvedModel;
59
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/permissions/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,wEAAwE;AACxE,MAAM,MAAM,MAAM,GACf;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9E;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAQ5E;AAED,MAAM,MAAM,gBAAgB,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAChE;IACA,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,gFAAgF;IAChF,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;CACnE,CAAC;AAEL,iFAAiF;AACjF,MAAM,MAAM,YAAY,GAAG,CACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IACA,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACvB,CACH,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,CAAA;CAAE,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1D,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACxD;AAUD,wBAAgB,YAAY,CAC3B,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,GACX,aAAa,CAgHf"}
@@ -0,0 +1,53 @@
1
+ import type { Subject } from '../subjects/subject';
2
+ import type { RelationStore } from './port/types';
3
+ import { type ResolvedModel } from './resolve';
4
+ /**
5
+ * One `list()`: the objects a subject holds a name on, found backwards —
6
+ * from the subject to the tuples naming it, through the sets and arrows the
7
+ * model declares, to the objects.
8
+ *
9
+ * **A least fixpoint.** `objects(type, name)` is a union of what its rules
10
+ * reach, and a rule can reach its own name again — a folder viewable through
11
+ * its parent, a team member through a team. Such a name, met again on the
12
+ * current path, answers what the previous round found; rounds repeat until
13
+ * none adds an id. That is exactly the set of objects with a derivation that
14
+ * does not loop — what `can()`'s cut finds, one object at a time. A round
15
+ * that met no loop is final.
16
+ *
17
+ * **Depth.** Each round past the first follows the loops one relation
18
+ * further; more than `maxDepth` rounds is `PERMISSION_DEPTH`, as crossing more
19
+ * than `maxDepth` relations is for `can()`.
20
+ *
21
+ * **Cost.** Every page of `findObjects` for every id each step reaches, every
22
+ * round. Linear in what the subject can reach — fine for the objects of one
23
+ * user, not for a subject set holding most of the database.
24
+ */
25
+ export declare class Reverse {
26
+ private readonly model;
27
+ private readonly store;
28
+ private readonly maxDepth;
29
+ private readonly ctx;
30
+ private readonly subject;
31
+ private readonly question;
32
+ private previous;
33
+ private current;
34
+ private readonly path;
35
+ private looped;
36
+ constructor(model: ResolvedModel, store: RelationStore, maxDepth: number, ctx: unknown, subject: Subject, question: string);
37
+ objects(type: string, name: string): Promise<ReadonlySet<string>>;
38
+ /** Whether this round found what the previous one did: nothing more to find. */
39
+ private same;
40
+ /** The ids of the objects of `typeName` on which the subject holds `name`. */
41
+ private reach;
42
+ private relation;
43
+ private permission;
44
+ /** The objects of `type` whose `relation` reaches an object on which the subject holds `target`. */
45
+ private arrow;
46
+ /** Every id of every page of `findObjects`. */
47
+ private holding;
48
+ /** The objects whose field names `id`, from the `fromField`'s lookup. */
49
+ private lookup;
50
+ /** The condition, run on the caller's `ctx`, as for `can()`. */
51
+ private passes;
52
+ }
53
+ //# sourceMappingURL=reverse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reverse.d.ts","sourceRoot":"","sources":["../../src/permissions/reverse.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAEN,KAAK,aAAa,EAGlB,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,OAAO;IAOlB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAX1B,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAC1C,OAAO,CAAC,MAAM,CAAS;gBAGL,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM;IAG5B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAcvE,gFAAgF;IAChF,OAAO,CAAC,IAAI;IAOZ,8EAA8E;YAChE,KAAK;YA2BL,QAAQ;YAgCR,UAAU;IAmBxB,oGAAoG;YACtF,KAAK;IAgCnB,+CAA+C;YACjC,OAAO;IAqBrB,yEAAyE;YAC3D,MAAM;IAoBpB,gEAAgE;IAChE,OAAO,CAAC,MAAM;CAYd"}
@@ -0,0 +1,29 @@
1
+ /** The walk behind `can()`: from an object, through its rules, to a subject. */
2
+ import type { Entity, Subject } from '../subjects/subject';
3
+ import type { RelationStore } from './port/types';
4
+ import { type ResolvedModel } from './resolve';
5
+ /** An object on the walk: its entity, and its data when the caller passed it. */
6
+ export interface Node {
7
+ readonly entity: Entity;
8
+ readonly data: Readonly<Record<string, unknown>> | null;
9
+ }
10
+ /** One check: its context, its path, and the depth it may reach. */
11
+ export declare class Walk {
12
+ private readonly model;
13
+ private readonly store;
14
+ private readonly maxDepth;
15
+ private readonly ctx;
16
+ private readonly question;
17
+ /** The nodes on the current path. The walk is sequential, so one set is the stack. */
18
+ private readonly path;
19
+ constructor(model: ResolvedModel, store: RelationStore, maxDepth: number, ctx: unknown, question: string);
20
+ /** Whether `subject` holds `name` — a relation or a permission — on `node`. */
21
+ holds(subject: Subject, node: Node, name: string, depth: number): Promise<boolean>;
22
+ private relation;
23
+ private permission;
24
+ /** The condition, run on the caller's `ctx`. Its absence is a caller's bug, not a denial. */
25
+ private passes;
26
+ /** The objects an arrow through `relation` reaches from `node`. */
27
+ private targets;
28
+ }
29
+ //# sourceMappingURL=walk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../../src/permissions/walk.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAIhF,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAEN,KAAK,aAAa,EAGlB,MAAM,WAAW,CAAC;AAEnB,iFAAiF;AACjF,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;CACxD;AAED,oEAAoE;AACpE,qBAAa,IAAI;IAKf,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAR1B,sFAAsF;IACtF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;gBAGxB,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,MAAM;IAGlC,+EAA+E;IACzE,KAAK,CACV,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC;YA0BL,QAAQ;YAqCR,UAAU;IAuBxB,6FAA6F;IAC7F,OAAO,CAAC,MAAM;IAad,mEAAmE;YACrD,OAAO;CAsBrB"}
@@ -0,0 +1,35 @@
1
+ import { type Entity, type RelationTuple, type Subject } from './subject';
2
+ /**
3
+ * Zanzibar's notation, with typed subjects:
4
+ *
5
+ * ```
6
+ * record:r1#viewer@staff:u1
7
+ * record:r1#viewer@team:t1#member
8
+ * ```
9
+ *
10
+ * It exists for **messages, logs and documentation**, not as a wire format:
11
+ * nothing in this package parses a tuple off the network, and a tuple that
12
+ * crosses a boundary crosses it as an object. Keeping the notation is worth it
13
+ * because every piece of Zanzibar writing uses it, so an error message in it is
14
+ * an error message a reader has already learned to read.
15
+ *
16
+ * A type holds no `:`, and no part holds `@`, `#` or a parenthesis, so a
17
+ * subject set needs no parentheses: after the `@`, a `#` can only begin its
18
+ * relation. {@link parseTuple} refuses a string where that would not hold,
19
+ * rather than reading it two ways.
20
+ */
21
+ export declare function formatEntity(entity: Entity): string;
22
+ /** One subject: `staff:u1`, or `team:t1#member`. */
23
+ export declare function formatSubject(subject: Subject): string;
24
+ /** One relation tuple, in the notation above. */
25
+ export declare function formatTuple(tuple: RelationTuple): string;
26
+ /**
27
+ * Reads a tuple back. Refuses, with a `TypeError`, a string that is not one —
28
+ * a permission question built from a malformed string is a question whose
29
+ * answer means nothing, and no request is behind it: the string came from a
30
+ * developer's own code.
31
+ */
32
+ export declare function parseTuple(text: string): RelationTuple;
33
+ /** Reads one subject back: `staff:u1`, or `team:t1#member`. */
34
+ export declare function parseSubject(text: string): Subject;
35
+ //# sourceMappingURL=notation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notation.d.ts","sourceRoot":"","sources":["../../src/subjects/notation.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,MAAM,EAEX,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,oDAAoD;AACpD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAItD;AAED,iDAAiD;AACjD,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAExD;AASD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAkBtD;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAiBlD"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * The id every decision in this package hangs on: a user's `id`, as `janus()`
3
+ * mints it.
4
+ *
5
+ * In Ory, the equality between a Kratos identity id and Keto's `subject_id` is
6
+ * a comment and a convention, restated in three repositories and enforced
7
+ * nowhere. Here a user **is** a subject — see {@link subjectOf} — and that
8
+ * shared vocabulary is the whole reason users and permissions are one package
9
+ * rather than two: two packages would make this contract implicit, and an
10
+ * implicit contract between independently versioned packages breaks silently.
11
+ *
12
+ * Opaque: compared with `===`, carried in a URL, logged, never parsed.
13
+ */
14
+ export type SubjectId = string;
15
+ /**
16
+ * Something a permission is about or held by — a user, a record, a team — by
17
+ * its type and its id.
18
+ *
19
+ * **Typed, unlike Keto's subjects.** One application has patients and staff,
20
+ * and an object can hold a relation too (a record's team), so an id alone does
21
+ * not say who. `type` is a user type of `janus()` or an object type of the
22
+ * permission model, and the same word as a user's own `type`.
23
+ */
24
+ export interface Entity {
25
+ readonly type: string;
26
+ readonly id: string;
27
+ }
28
+ /**
29
+ * Everyone who holds `relation` on an entity — `team:t1#member` — which is how
30
+ * a permission is inherited rather than granted.
31
+ *
32
+ * A tuple whose subject is a subject set lets a whole group be given access
33
+ * with one write: granting a record's `viewer` to `team:t1#member` means every
34
+ * member of that team can view it, and no member holds a tuple on the record.
35
+ */
36
+ export interface SubjectSet extends Entity {
37
+ readonly relation: string;
38
+ }
39
+ /**
40
+ * Who a tuple is about: one entity, or everyone who holds a relation on one.
41
+ * {@link isSubjectSet} tells them apart.
42
+ */
43
+ export type Subject = Entity | SubjectSet;
44
+ /**
45
+ * A relation tuple: `subject` holds `relation` on `object`.
46
+ *
47
+ * `relation` is Zanzibar's word, and a tuple is Zanzibar's unit. What is not
48
+ * carried over is Keto's `namespace`/`object` pair: here the object is an
49
+ * {@link Entity}, with the `type` and `id` a user already has.
50
+ */
51
+ export interface RelationTuple {
52
+ readonly object: Entity;
53
+ readonly relation: string;
54
+ readonly subject: Subject;
55
+ }
56
+ /**
57
+ * Whether this subject is a set rather than one entity. Narrows.
58
+ *
59
+ * It reads the shape, so pass a user through {@link subjectOf} first: a user
60
+ * whose fields include a string `relation` would otherwise read as a set.
61
+ */
62
+ export declare function isSubjectSet(subject: Subject): subject is SubjectSet;
63
+ /**
64
+ * The subject a user is: their `type` and `id`, and nothing else.
65
+ *
66
+ * One line, and the entire join between the two halves of the package. It
67
+ * takes the narrowest shape it reads, so the permissions half never has to
68
+ * know what a user is, and it copies those two fields so none of the user's
69
+ * own fields ever reaches a tuple.
70
+ */
71
+ export declare function subjectOf(user: {
72
+ readonly type: string;
73
+ readonly id: SubjectId;
74
+ }): Entity;
75
+ //# sourceMappingURL=subject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subject.d.ts","sourceRoot":"","sources":["../../src/subjects/subject.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B;;;;;;;;GAQG;AACH,MAAM,WAAW,MAAM;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,UAAW,SAAQ,MAAM;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,UAAU,CAEpE;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;CACvB,GAAG,MAAM,CAET"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Where `now` comes from.
3
+ *
4
+ * Injected rather than read from `Date` directly, for one practical reason:
5
+ * every expiry in this package — sessions, one-time tokens, refresh windows —
6
+ * is a comparison against the current time, and a spec that has to move the
7
+ * real clock to test one is a spec that needs fake timers, leaks them, and
8
+ * fails differently under load. A `Clock` makes those specs synchronous and
9
+ * exact.
10
+ *
11
+ * It is also the seam an application needs if it ever has to reason about a
12
+ * store's clock rather than its own: MongoDB stamps a TTL against the server's
13
+ * time, not the process's.
14
+ */
15
+ export interface Clock {
16
+ now(): Date;
17
+ }
18
+ /** The process's own clock. The default everywhere. */
19
+ export declare const systemClock: Clock;
20
+ /**
21
+ * A clock a spec drives by hand.
22
+ *
23
+ * Shipped rather than kept in `test/`: a consumer writing their own tests
24
+ * against this package needs exactly this, and writing it again is how two
25
+ * subtly different versions of "advance time" come to exist.
26
+ */
27
+ export declare function fixedClock(start?: Date | number): Clock & {
28
+ advance(ms: number): void;
29
+ set(at: Date | number): void;
30
+ };
31
+ //# sourceMappingURL=clock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../../src/time/clock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,KAAK;IACrB,GAAG,IAAI,IAAI,CAAC;CACZ;AAED,uDAAuD;AACvD,eAAO,MAAM,WAAW,EAAE,KAEzB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,GAAE,IAAI,GAAG,MAAU,GAAG,KAAK,GAAG;IAC7D,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;CAC7B,CAYA"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * A span of time, written the way a configuration file writes one: `'15m'`,
3
+ * `'720h'`, `'30d'`. A plain number is milliseconds.
4
+ *
5
+ * Strings rather than milliseconds everywhere, because `2592000000` in a config
6
+ * object is a number nobody reads back correctly, and Ory's own configuration
7
+ * uses exactly this notation — so a team moving across recognises it.
8
+ */
9
+ export type Duration = number | `${number}${'ms' | 's' | 'm' | 'h' | 'd'}`;
10
+ /**
11
+ * The duration in milliseconds.
12
+ *
13
+ * `where` names the option the consumer wrote — `session.lifespan`, not
14
+ * `parseDuration` — because this package has half a dozen durations and a
15
+ * message that does not say which one leaves the reader to guess.
16
+ *
17
+ * A bare `TypeError`: durations are written when the application is wired, so
18
+ * this cannot come from a request, and no handler should answer it. The refusal
19
+ * reports the **shape** expected and not the value's own bytes beyond echoing
20
+ * it, which is the rule this repository inherits.
21
+ */
22
+ export declare function parseDuration(value: Duration, where: string): number;
23
+ //# sourceMappingURL=duration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../../src/time/duration.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;AAY3E;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA2BpE"}
package/docs/README.md ADDED
@@ -0,0 +1,17 @@
1
+ # @nxgt/janus — documentation
2
+
3
+ The [README](../README.md) shows that it works; these pages show how, one area
4
+ at a time, with an example for every option.
5
+
6
+ | Page | Read it when |
7
+ | --- | --- |
8
+ | [Users — `janus()`](guide/users.md) | You are wiring `janus()`, declaring one or several kinds of user, or calling `create`, `update`, `list`, `delete` |
9
+ | [Sessions](guide/sessions.md) | You need to know who a request belongs to, set or clear the cookie, renew, sign out, or test expiry |
10
+ | [E-mail verification and password reset](guide/email-flows.md) | You are sending a verification or reset link, and handling what comes back |
11
+ | [Password hashing](guide/passwords.md) | You are choosing a hasher, raising its cost, moving to argon2id, or importing hashes from another system |
12
+ | [Permissions](guide/permissions.md) | You are modelling access with `defineModel`, `fromField` and `when`, and calling `can`, `list`, `grant`, `revoke` |
13
+ | [Errors](guide/errors.md) | You are turning what the package throws into a status code, and want every code and what it carries |
14
+ | [The shared vocabulary](guide/vocabulary.md) | You need subjects and the tuple notation, ids, cursors, durations or `fixedClock` |
15
+ | [Writing an adapter](guide/adapters.md) | You are implementing the store port or the relation store for your database, and running the conformance suites |
16
+ | [Troubleshooting](troubleshooting.md) | You have an error message and want its cause and its fix |
17
+ | [Roadmap](roadmap.md) | You want to know what is coming, what shipped, and what is deliberately not planned |