@spinajs/authn-orm 3.0.3 → 3.0.5

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 (116) hide show
  1. package/README.md +2 -2
  2. package/lib/cjs/audit/db-audit-sink.d.ts +3 -0
  3. package/lib/cjs/audit/db-audit-sink.d.ts.map +1 -1
  4. package/lib/cjs/audit/db-audit-sink.js +7 -1
  5. package/lib/cjs/audit/db-audit-sink.js.map +1 -1
  6. package/lib/cjs/audit/index.d.ts +1 -0
  7. package/lib/cjs/audit/index.d.ts.map +1 -1
  8. package/lib/cjs/audit/index.js +3 -1
  9. package/lib/cjs/audit/index.js.map +1 -1
  10. package/lib/cjs/audit/retention.d.ts +24 -0
  11. package/lib/cjs/audit/retention.d.ts.map +1 -0
  12. package/lib/cjs/audit/retention.js +108 -0
  13. package/lib/cjs/audit/retention.js.map +1 -0
  14. package/lib/cjs/cli/PurgeAudit.d.ts +13 -0
  15. package/lib/cjs/cli/PurgeAudit.d.ts.map +1 -0
  16. package/lib/cjs/cli/PurgeAudit.js +51 -0
  17. package/lib/cjs/cli/PurgeAudit.js.map +1 -0
  18. package/lib/cjs/config/authn-orm.d.ts +9 -0
  19. package/lib/cjs/config/authn-orm.d.ts.map +1 -0
  20. package/lib/cjs/config/authn-orm.js +21 -0
  21. package/lib/cjs/config/authn-orm.js.map +1 -0
  22. package/lib/cjs/index.d.ts +1 -0
  23. package/lib/cjs/index.d.ts.map +1 -1
  24. package/lib/cjs/index.js +1 -0
  25. package/lib/cjs/index.js.map +1 -1
  26. package/lib/cjs/links/db-link-store.d.ts +3 -0
  27. package/lib/cjs/links/db-link-store.d.ts.map +1 -1
  28. package/lib/cjs/links/db-link-store.js +7 -5
  29. package/lib/cjs/links/db-link-store.js.map +1 -1
  30. package/lib/cjs/mfa/db-mfa-enrolment-marks.d.ts +16 -0
  31. package/lib/cjs/mfa/db-mfa-enrolment-marks.d.ts.map +1 -0
  32. package/lib/cjs/mfa/db-mfa-enrolment-marks.js +54 -0
  33. package/lib/cjs/mfa/db-mfa-enrolment-marks.js.map +1 -0
  34. package/lib/cjs/mfa/db-mfa-store.d.ts +3 -0
  35. package/lib/cjs/mfa/db-mfa-store.d.ts.map +1 -1
  36. package/lib/cjs/mfa/db-mfa-store.js +7 -11
  37. package/lib/cjs/mfa/db-mfa-store.js.map +1 -1
  38. package/lib/cjs/mfa/index.d.ts +1 -0
  39. package/lib/cjs/mfa/index.d.ts.map +1 -1
  40. package/lib/cjs/mfa/index.js +1 -0
  41. package/lib/cjs/mfa/index.js.map +1 -1
  42. package/lib/cjs/nonces/nonce-store.d.ts +3 -0
  43. package/lib/cjs/nonces/nonce-store.d.ts.map +1 -1
  44. package/lib/cjs/nonces/nonce-store.js +7 -2
  45. package/lib/cjs/nonces/nonce-store.js.map +1 -1
  46. package/lib/cjs/secrets/db-secret-store.d.ts +5 -2
  47. package/lib/cjs/secrets/db-secret-store.d.ts.map +1 -1
  48. package/lib/cjs/secrets/db-secret-store.js +12 -6
  49. package/lib/cjs/secrets/db-secret-store.js.map +1 -1
  50. package/lib/cjs/throttle/db-throttle-store.d.ts +10 -1
  51. package/lib/cjs/throttle/db-throttle-store.d.ts.map +1 -1
  52. package/lib/cjs/throttle/db-throttle-store.js +22 -14
  53. package/lib/cjs/throttle/db-throttle-store.js.map +1 -1
  54. package/lib/cjs/throttle/db-throttle.d.ts +3 -0
  55. package/lib/cjs/throttle/db-throttle.d.ts.map +1 -1
  56. package/lib/cjs/throttle/db-throttle.js +6 -1
  57. package/lib/cjs/throttle/db-throttle.js.map +1 -1
  58. package/lib/mjs/audit/db-audit-sink.d.ts +3 -0
  59. package/lib/mjs/audit/db-audit-sink.d.ts.map +1 -1
  60. package/lib/mjs/audit/db-audit-sink.js +9 -3
  61. package/lib/mjs/audit/db-audit-sink.js.map +1 -1
  62. package/lib/mjs/audit/index.d.ts +1 -0
  63. package/lib/mjs/audit/index.d.ts.map +1 -1
  64. package/lib/mjs/audit/index.js +1 -0
  65. package/lib/mjs/audit/index.js.map +1 -1
  66. package/lib/mjs/audit/retention.d.ts +24 -0
  67. package/lib/mjs/audit/retention.d.ts.map +1 -0
  68. package/lib/mjs/audit/retention.js +105 -0
  69. package/lib/mjs/audit/retention.js.map +1 -0
  70. package/lib/mjs/cli/PurgeAudit.d.ts +13 -0
  71. package/lib/mjs/cli/PurgeAudit.d.ts.map +1 -0
  72. package/lib/mjs/cli/PurgeAudit.js +48 -0
  73. package/lib/mjs/cli/PurgeAudit.js.map +1 -0
  74. package/lib/mjs/config/authn-orm.d.ts +9 -0
  75. package/lib/mjs/config/authn-orm.d.ts.map +1 -0
  76. package/lib/mjs/config/authn-orm.js +19 -0
  77. package/lib/mjs/config/authn-orm.js.map +1 -0
  78. package/lib/mjs/index.d.ts +1 -0
  79. package/lib/mjs/index.d.ts.map +1 -1
  80. package/lib/mjs/index.js +1 -0
  81. package/lib/mjs/index.js.map +1 -1
  82. package/lib/mjs/links/db-link-store.d.ts +3 -0
  83. package/lib/mjs/links/db-link-store.d.ts.map +1 -1
  84. package/lib/mjs/links/db-link-store.js +9 -7
  85. package/lib/mjs/links/db-link-store.js.map +1 -1
  86. package/lib/mjs/mfa/db-mfa-enrolment-marks.d.ts +16 -0
  87. package/lib/mjs/mfa/db-mfa-enrolment-marks.d.ts.map +1 -0
  88. package/lib/mjs/mfa/db-mfa-enrolment-marks.js +51 -0
  89. package/lib/mjs/mfa/db-mfa-enrolment-marks.js.map +1 -0
  90. package/lib/mjs/mfa/db-mfa-store.d.ts +3 -0
  91. package/lib/mjs/mfa/db-mfa-store.d.ts.map +1 -1
  92. package/lib/mjs/mfa/db-mfa-store.js +9 -13
  93. package/lib/mjs/mfa/db-mfa-store.js.map +1 -1
  94. package/lib/mjs/mfa/index.d.ts +1 -0
  95. package/lib/mjs/mfa/index.d.ts.map +1 -1
  96. package/lib/mjs/mfa/index.js +1 -0
  97. package/lib/mjs/mfa/index.js.map +1 -1
  98. package/lib/mjs/nonces/nonce-store.d.ts +3 -0
  99. package/lib/mjs/nonces/nonce-store.d.ts.map +1 -1
  100. package/lib/mjs/nonces/nonce-store.js +9 -4
  101. package/lib/mjs/nonces/nonce-store.js.map +1 -1
  102. package/lib/mjs/secrets/db-secret-store.d.ts +5 -2
  103. package/lib/mjs/secrets/db-secret-store.d.ts.map +1 -1
  104. package/lib/mjs/secrets/db-secret-store.js +14 -8
  105. package/lib/mjs/secrets/db-secret-store.js.map +1 -1
  106. package/lib/mjs/throttle/db-throttle-store.d.ts +10 -1
  107. package/lib/mjs/throttle/db-throttle-store.d.ts.map +1 -1
  108. package/lib/mjs/throttle/db-throttle-store.js +23 -15
  109. package/lib/mjs/throttle/db-throttle-store.js.map +1 -1
  110. package/lib/mjs/throttle/db-throttle.d.ts +3 -0
  111. package/lib/mjs/throttle/db-throttle.d.ts.map +1 -1
  112. package/lib/mjs/throttle/db-throttle.js +6 -1
  113. package/lib/mjs/throttle/db-throttle.js.map +1 -1
  114. package/lib/tsconfig.cjs.tsbuildinfo +1 -1
  115. package/lib/tsconfig.mjs.tsbuildinfo +1 -1
  116. package/package.json +14 -13
@@ -1 +1 @@
1
- {"version":3,"file":"db-throttle.js","sourceRoot":"","sources":["../../../src/throttle/db-throttle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db-throttle.js","sourceRoot":"","sources":["../../../src/throttle/db-throttle.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,14 @@
1
1
  import { AuthnEventSink } from '@spinajs/authn/contracts';
2
2
  import type { AuthnEvent } from '@spinajs/authn/contracts';
3
+ import { Orm } from '@spinajs/orm';
3
4
  /**
4
5
  * One `authn_audit` row per event (SR-11). Nothing in an event makes the write fail, so a sink never fails a call
5
6
  * whose work is already done (D4 over D1): free text longer than its column is cut, and an identity or actor that
6
7
  * does not fit its column leaves the column null and goes whole into `data` (`identityRef`, `actorRef`).
7
8
  */
8
9
  export declare class DbAuthnAuditSink extends AuthnEventSink {
10
+ /** Never read: injecting it resolves the Orm, which binds the models, before the first query. */
11
+ protected Orm: Orm;
9
12
  publish(e: AuthnEvent): Promise<void>;
10
13
  }
11
14
  //# sourceMappingURL=db-audit-sink.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"db-audit-sink.d.ts","sourceRoot":"","sources":["../../../src/audit/db-audit-sink.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAA6B,MAAM,0BAA0B,CAAC;AA0BtF;;;;GAIG;AACH,qBAEa,gBAAiB,SAAQ,cAAc;IACrC,OAAO,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BjD;CACF"}
1
+ {"version":3,"file":"db-audit-sink.d.ts","sourceRoot":"","sources":["../../../src/audit/db-audit-sink.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAA6B,MAAM,0BAA0B,CAAC;AAEtF,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAwBnC;;;;GAIG;AACH,qBAEa,gBAAiB,SAAQ,cAAc;IAClD,iGAAiG;IAEjG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IAEN,OAAO,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBjD;CACF"}
@@ -4,10 +4,13 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
7
10
  import { randomUUID } from 'node:crypto';
8
11
  import { AuthnEventSink } from '@spinajs/authn/contracts';
9
- import { Injectable, PerChildInstance } from '@spinajs/di';
10
- import { ormReady } from '@spinajs/orm';
12
+ import { Autoinject, Injectable, PerChildInstance } from '@spinajs/di';
13
+ import { Orm } from '@spinajs/orm';
11
14
  import { identityKey } from '../identity.js';
12
15
  import { AuthnAudit } from '../models/AuthnAudit.js';
13
16
  import { checkedMs, cutText, instant } from '../support/sql.js';
@@ -45,7 +48,6 @@ let DbAuthnAuditSink = class DbAuthnAuditSink extends AuthnEventSink {
45
48
  };
46
49
  const data = e.data === undefined && Object.keys(extra).length === 0 ? undefined : { ...(e.data ?? {}), ...extra };
47
50
  const at = instant(checkedMs(e.at, 'DbAuthnAuditSink.publish: e.at'));
48
- await ormReady();
49
51
  await AuthnAudit.insert(columnValues({
50
52
  id: randomUUID(),
51
53
  at,
@@ -62,6 +64,10 @@ let DbAuthnAuditSink = class DbAuthnAuditSink extends AuthnEventSink {
62
64
  }));
63
65
  }
64
66
  };
67
+ __decorate([
68
+ Autoinject(Orm),
69
+ __metadata("design:type", Orm)
70
+ ], DbAuthnAuditSink.prototype, "Orm", void 0);
65
71
  DbAuthnAuditSink = __decorate([
66
72
  PerChildInstance(),
67
73
  Injectable(AuthnEventSink)
@@ -1 +1 @@
1
- {"version":3,"file":"db-audit-sink.js","sourceRoot":"","sources":["../../../src/audit/db-audit-sink.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db-audit-sink.js","sourceRoot":"","sources":["../../../src/audit/db-audit-sink.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  export { DbAuthnAuditSink } from './db-audit-sink.js';
2
+ export { AuthnAuditRetention } from './retention.js';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/audit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/audit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export { DbAuthnAuditSink } from './db-audit-sink.js';
2
+ export { AuthnAuditRetention } from './retention.js';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/audit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/audit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import '@spinajs/authn/register-schema';
2
+ import { AsyncService } from '@spinajs/di';
3
+ import { Log } from '@spinajs/log';
4
+ import { Orm } from '@spinajs/orm';
5
+ /**
6
+ * Deletes `authn_audit` rows older than `authn.audit.retentionDays`, in batches, on `purge` and, when
7
+ * `authn.audit.purgeInterval` (ms) is set, on a timer. Both keys are unset by default: audit rows are kept forever.
8
+ */
9
+ export declare class AuthnAuditRetention extends AsyncService {
10
+ /** Never read: injecting it resolves the Orm, which binds `AuthnAudit`, before the first purge. */
11
+ protected Orm: Orm;
12
+ protected RetentionDays: number | null | undefined;
13
+ protected PurgeInterval: number | null | undefined;
14
+ protected Log: Log;
15
+ private timer;
16
+ private running;
17
+ get Enabled(): boolean;
18
+ resolve(): Promise<void>;
19
+ dispose(): Promise<void>;
20
+ /** Deletes the rows older than the retention; returns how many went. 0 while `retentionDays` is unset. */
21
+ purge(now?: Date): Promise<number>;
22
+ private tick;
23
+ }
24
+ //# sourceMappingURL=retention.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retention.d.ts","sourceRoot":"","sources":["../../../src/audit/retention.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAAE,YAAY,EAA4C,MAAM,aAAa,CAAC;AAErF,OAAO,EAAE,GAAG,EAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAQnC;;;GAGG;AACH,qBAEa,mBAAoB,SAAQ,YAAY;IACnD,mGAAmG;IAEnG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IAGnB,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAGnD,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAGnD,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IAEnB,OAAO,CAAC,KAAK,CAA6C;IAC1D,OAAO,CAAC,OAAO,CAAS;IAExB,IAAW,OAAO,IAAI,OAAO,CAE5B;IAEY,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAOpC;IAEY,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAGpC;IAED,0GAA0G;IAC7F,KAAK,CAAC,GAAG,GAAE,IAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB1D;YAEa,IAAI;CAkBnB"}
@@ -0,0 +1,105 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import '@spinajs/authn/register-schema';
11
+ import { AsyncService, Autoinject, Injectable, PerChildInstance } from '@spinajs/di';
12
+ import { Config } from '@spinajs/configuration';
13
+ import { Log, Logger } from '@spinajs/log';
14
+ import { Orm } from '@spinajs/orm';
15
+ import { AuthnAudit } from '../models/AuthnAudit.js';
16
+ import { checkedMs, instant } from '../support/sql.js';
17
+ const DAY_MS = 86_400_000;
18
+ const PURGE_BATCH = 500;
19
+ /**
20
+ * Deletes `authn_audit` rows older than `authn.audit.retentionDays`, in batches, on `purge` and, when
21
+ * `authn.audit.purgeInterval` (ms) is set, on a timer. Both keys are unset by default: audit rows are kept forever.
22
+ */
23
+ let AuthnAuditRetention = class AuthnAuditRetention extends AsyncService {
24
+ constructor() {
25
+ super(...arguments);
26
+ this.running = false;
27
+ }
28
+ get Enabled() {
29
+ return typeof this.RetentionDays === 'number' && this.RetentionDays > 0;
30
+ }
31
+ async resolve() {
32
+ if (!this.Enabled || !this.PurgeInterval || this.PurgeInterval < 1) {
33
+ return;
34
+ }
35
+ this.timer = setInterval(() => void this.tick(), this.PurgeInterval);
36
+ this.timer.unref?.();
37
+ }
38
+ async dispose() {
39
+ clearInterval(this.timer);
40
+ this.timer = undefined;
41
+ }
42
+ /** Deletes the rows older than the retention; returns how many went. 0 while `retentionDays` is unset. */
43
+ async purge(now = new Date()) {
44
+ const days = this.RetentionDays;
45
+ if (typeof days !== 'number' || !(days > 0)) {
46
+ return 0;
47
+ }
48
+ const cutoff = instant(checkedMs(now, 'AuthnAuditRetention.purge: now') - days * DAY_MS);
49
+ let removed = 0;
50
+ for (;;) {
51
+ // MSSQL pages with OFFSET ... FETCH, which needs an ORDER BY.
52
+ const ids = (await AuthnAudit.query().columns(['id']).where('at', '<', cutoff).orderBy('at').take(PURGE_BATCH)).map((r) => r.id);
53
+ if (ids.length === 0) {
54
+ break;
55
+ }
56
+ const deleted = (await AuthnAudit.destroy().whereIn('id', ids).where('at', '<', cutoff)).RowsAffected;
57
+ removed += deleted;
58
+ if (ids.length < PURGE_BATCH || deleted === 0) {
59
+ break;
60
+ }
61
+ }
62
+ return removed;
63
+ }
64
+ async tick() {
65
+ if (this.running) {
66
+ return;
67
+ }
68
+ this.running = true;
69
+ try {
70
+ const count = await this.purge();
71
+ if (count > 0) {
72
+ this.Log.info({ count }, 'Purged audit rows past retention, count: ${count}');
73
+ }
74
+ }
75
+ catch (err) {
76
+ // An unhandled rejection here would end the process; the next tick retries.
77
+ this.Log.error(err, 'Audit retention purge failed');
78
+ }
79
+ finally {
80
+ this.running = false;
81
+ }
82
+ }
83
+ };
84
+ __decorate([
85
+ Autoinject(Orm),
86
+ __metadata("design:type", Orm)
87
+ ], AuthnAuditRetention.prototype, "Orm", void 0);
88
+ __decorate([
89
+ Config('authn.audit.retentionDays'),
90
+ __metadata("design:type", Object)
91
+ ], AuthnAuditRetention.prototype, "RetentionDays", void 0);
92
+ __decorate([
93
+ Config('authn.audit.purgeInterval'),
94
+ __metadata("design:type", Object)
95
+ ], AuthnAuditRetention.prototype, "PurgeInterval", void 0);
96
+ __decorate([
97
+ Logger('authn-orm'),
98
+ __metadata("design:type", Log)
99
+ ], AuthnAuditRetention.prototype, "Log", void 0);
100
+ AuthnAuditRetention = __decorate([
101
+ PerChildInstance(),
102
+ Injectable()
103
+ ], AuthnAuditRetention);
104
+ export { AuthnAuditRetention };
105
+ //# sourceMappingURL=retention.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retention.js","sourceRoot":"","sources":["../../../src/audit/retention.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { CliCommand } from '@spinajs/cli';
2
+ import { Log } from '@spinajs/log';
3
+ import { OrmMigrator } from '@spinajs/orm';
4
+ import { AuthnAuditRetention } from '../audit/retention.js';
5
+ /** Housekeeping for a scheduler (cron, worker); a no-op while `authn.audit.retentionDays` is unset. */
6
+ export declare class PurgeAudit extends CliCommand {
7
+ protected Log: Log;
8
+ /** The cli resolves only the command, so the command runs the `Migration.OnStartup` pass an app process runs before serving. */
9
+ protected Migrator: OrmMigrator;
10
+ protected Retention: AuthnAuditRetention;
11
+ execute(): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=PurgeAudit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PurgeAudit.d.ts","sourceRoot":"","sources":["../../../src/cli/PurgeAudit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAW,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,GAAG,EAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,uGAAuG;AACvG,qBACa,UAAW,SAAQ,UAAU;IAExC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IAEnB,gIAAgI;IAEhI,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC;IAGhC,SAAS,CAAC,SAAS,EAAE,mBAAmB,CAAC;IAE5B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAapC;CACF"}
@@ -0,0 +1,48 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Autoinject } from '@spinajs/di';
11
+ import { CliCommand, Command } from '@spinajs/cli';
12
+ import { Log, Logger } from '@spinajs/log';
13
+ import { OrmMigrator } from '@spinajs/orm';
14
+ import { AuthnAuditRetention } from '../audit/retention.js';
15
+ /** Housekeeping for a scheduler (cron, worker); a no-op while `authn.audit.retentionDays` is unset. */
16
+ let PurgeAudit = class PurgeAudit extends CliCommand {
17
+ async execute() {
18
+ try {
19
+ if (!this.Retention.Enabled) {
20
+ this.Log.warn('authn.audit.retentionDays is not set, no audit rows were purged');
21
+ return;
22
+ }
23
+ const count = await this.Retention.purge();
24
+ this.Log.success({ count }, 'Deleted ${count} audit row(s) past retention');
25
+ }
26
+ catch (e) {
27
+ this.Log.error({ error: e }, 'Error while purging audit rows');
28
+ process.exitCode = 1;
29
+ }
30
+ }
31
+ };
32
+ __decorate([
33
+ Logger('authn-orm'),
34
+ __metadata("design:type", Log)
35
+ ], PurgeAudit.prototype, "Log", void 0);
36
+ __decorate([
37
+ Autoinject(OrmMigrator),
38
+ __metadata("design:type", OrmMigrator)
39
+ ], PurgeAudit.prototype, "Migrator", void 0);
40
+ __decorate([
41
+ Autoinject(AuthnAuditRetention),
42
+ __metadata("design:type", AuthnAuditRetention)
43
+ ], PurgeAudit.prototype, "Retention", void 0);
44
+ PurgeAudit = __decorate([
45
+ Command('authn:audit-purge', 'Deletes audit rows older than authn.audit.retentionDays')
46
+ ], PurgeAudit);
47
+ export { PurgeAudit };
48
+ //# sourceMappingURL=PurgeAudit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PurgeAudit.js","sourceRoot":"","sources":["../../../src/cli/PurgeAudit.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,uGAAuG;AAEhG,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,UAAU;IAWjC,KAAK,CAAC,OAAO;QAClB,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;gBACjF,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAC3C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,8CAA8C,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,gCAAgC,CAAC,CAAC;YAC/D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;CACF,CAAA;AAvBW;IADT,MAAM,CAAC,WAAW,CAAC;8BACL,GAAG;uCAAC;AAIT;IADT,UAAU,CAAC,WAAW,CAAC;8BACJ,WAAW;4CAAC;AAGtB;IADT,UAAU,CAAC,mBAAmB,CAAC;8BACX,mBAAmB;6CAAC;AAT9B,UAAU;IADtB,OAAO,CAAC,mBAAmB,EAAE,yDAAyD,CAAC;GAC3E,UAAU,CAyBtB"}
@@ -0,0 +1,9 @@
1
+ declare const authnOrm: {
2
+ system: {
3
+ dirs: {
4
+ cli: string[];
5
+ };
6
+ };
7
+ };
8
+ export default authnOrm;
9
+ //# sourceMappingURL=authn-orm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authn-orm.d.ts","sourceRoot":"","sources":["../../../src/config/authn-orm.ts"],"names":[],"mappings":"AAYA,QAAA,MAAM,QAAQ;IACZ,MAAM;QACJ,IAAI;YAEF,GAAG;;;CAGR,CAAC;eAEa,QAAQ"}
@@ -0,0 +1,19 @@
1
+ import { join, normalize, resolve } from 'path';
2
+ function dir(path) {
3
+ const inCommonJs = typeof module !== 'undefined';
4
+ return [
5
+ resolve(normalize(join(process.env.WORKSPACE_ROOT_PATH ?? process.cwd(), 'node_modules', '@spinajs', 'authn-orm', 'lib', inCommonJs ? 'cjs' : 'mjs', path))),
6
+ // one up if we run from app or build folder
7
+ resolve(normalize(join(process.env.WORKSPACE_ROOT_PATH ?? process.cwd(), '../', 'node_modules', '@spinajs', 'authn-orm', 'lib', inCommonJs ? 'cjs' : 'mjs', path))),
8
+ ];
9
+ }
10
+ const authnOrm = {
11
+ system: {
12
+ dirs: {
13
+ // CLI commands are found by a filesystem scan, so without this entry `authn:audit-purge` is unreachable in a consuming app.
14
+ cli: [...dir('cli')],
15
+ },
16
+ },
17
+ };
18
+ export default authnOrm;
19
+ //# sourceMappingURL=authn-orm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authn-orm.js","sourceRoot":"","sources":["../../../src/config/authn-orm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEhD,SAAS,GAAG,CAAC,IAAY;IACvB,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IACjD,OAAO;QACL,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QAE5J,4CAA4C;QAC5C,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;KACpK,CAAC;AACJ,CAAC;AAED,MAAM,QAAQ,GAAG;IACf,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,4HAA4H;YAC5H,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;SACrB;KACF;CACF,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -7,4 +7,5 @@ export * from './links/index.js';
7
7
  export * from './nonces/index.js';
8
8
  export * from './mfa/index.js';
9
9
  export * from './audit/index.js';
10
+ export * from './cli/PurgeAudit.js';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
package/lib/mjs/index.js CHANGED
@@ -7,4 +7,5 @@ export * from './links/index.js';
7
7
  export * from './nonces/index.js';
8
8
  export * from './mfa/index.js';
9
9
  export * from './audit/index.js';
10
+ export * from './cli/PurgeAudit.js';
10
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
@@ -1,7 +1,10 @@
1
1
  import { IdentityLinkStore } from '@spinajs/authn/contracts';
2
2
  import type { ExternalSubject, IdentityLink, IdentityRef } from '@spinajs/authn/contracts';
3
+ import { Orm } from '@spinajs/orm';
3
4
  /** `authn_identity`: external subjects linked to identities (A19). Values longer than their columns throw (D1). */
4
5
  export declare class DbIdentityLinkStore extends IdentityLinkStore {
6
+ /** Never read: injecting it resolves the Orm, which binds the models, before the first query. */
7
+ protected Orm: Orm;
5
8
  find(provider: string, subject: string): Promise<IdentityLink | null>;
6
9
  list(identity: IdentityRef): Promise<readonly IdentityLink[]>;
7
10
  /** A duplicate (provider, subject) rejects with `ResourceDuplicated` (the unique index decides). */
@@ -1 +1 @@
1
- {"version":3,"file":"db-link-store.d.ts","sourceRoot":"","sources":["../../../src/links/db-link-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAiB3F,mHAAmH;AACnH,qBAEa,mBAAoB,SAAQ,iBAAiB;IAC3C,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAOjF;IAEY,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAKzE;IAED,oGAAoG;IACvF,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAgBzF;IAEY,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7C;IAED,oEAAoE;IACvD,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,GAAE,IAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAKtE;CACF"}
1
+ {"version":3,"file":"db-link-store.d.ts","sourceRoot":"","sources":["../../../src/links/db-link-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG3F,OAAO,EAAE,GAAG,EAAmB,MAAM,cAAc,CAAC;AAcpD,mHAAmH;AACnH,qBAEa,mBAAoB,SAAQ,iBAAiB;IACxD,iGAAiG;IAEjG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IAEN,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAMjF;IAEY,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAIzE;IAED,oGAAoG;IACvF,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAezF;IAEY,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7C;IAED,oEAAoE;IACvD,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,GAAE,IAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAItE;CACF"}
@@ -4,11 +4,14 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
7
10
  import { randomUUID } from 'node:crypto';
8
11
  import { IdentityLinkStore } from '@spinajs/authn/contracts';
9
- import { Injectable, PerChildInstance } from '@spinajs/di';
12
+ import { Autoinject, Injectable, PerChildInstance } from '@spinajs/di';
10
13
  import { InvalidArgument, ResourceDuplicated } from '@spinajs/exceptions';
11
- import { UniqueViolation, ormReady } from '@spinajs/orm';
14
+ import { Orm, UniqueViolation } from '@spinajs/orm';
12
15
  import { AuthnIdentity } from '../models/AuthnIdentity.js';
13
16
  import { checkedMs, checkedText, dateOf, instant } from '../support/sql.js';
14
17
  import { columnValues } from '../support/values.js';
@@ -22,7 +25,6 @@ function identityParts(ref) {
22
25
  /** `authn_identity`: external subjects linked to identities (A19). Values longer than their columns throw (D1). */
23
26
  let DbIdentityLinkStore = class DbIdentityLinkStore extends IdentityLinkStore {
24
27
  async find(provider, subject) {
25
- await ormReady();
26
28
  const rows = await AuthnIdentity.query().columns(LINK_COLUMNS).where('provider', provider).where('subject', subject);
27
29
  // MySQL and MSSQL default collations ignore case (and accents or trailing spaces): a subject differing only that
28
30
  // way must not sign in as another account.
@@ -31,7 +33,6 @@ let DbIdentityLinkStore = class DbIdentityLinkStore extends IdentityLinkStore {
31
33
  }
32
34
  async list(identity) {
33
35
  const { type, id } = identityParts(identity);
34
- await ormReady();
35
36
  const rows = await AuthnIdentity.query().columns(LINK_COLUMNS).where('identity_type', type).where('identity_id', id).orderBy('linked_at');
36
37
  return rows.filter((r) => r.identity_type === type && r.identity_id === id).map(toLink);
37
38
  }
@@ -42,7 +43,6 @@ let DbIdentityLinkStore = class DbIdentityLinkStore extends IdentityLinkStore {
42
43
  const subject = checkedText(external.subject, 255, 'DbIdentityLinkStore: subject');
43
44
  const email = external.email === undefined || external.email === null ? undefined : checkedText(external.email, 255, 'DbIdentityLinkStore: email', true);
44
45
  const nowMs = checkedMs(new Date(), 'DbIdentityLinkStore.link: the clock');
45
- await ormReady();
46
46
  const linkId = randomUUID();
47
47
  try {
48
48
  await AuthnIdentity.insert(columnValues({ id: linkId, identity_type: type, identity_id: id, provider, subject, email: email ?? null, email_verified: external.emailVerified === true, attributes: null, linked_at: instant(nowMs), last_used_at: null }));
@@ -55,17 +55,19 @@ let DbIdentityLinkStore = class DbIdentityLinkStore extends IdentityLinkStore {
55
55
  return { id: linkId, identity: { type, id }, provider, subject, ...(email !== undefined ? { email } : {}), linkedAt: new Date(nowMs) };
56
56
  }
57
57
  async unlink(id) {
58
- await ormReady();
59
58
  await AuthnIdentity.destroy().where('id', id);
60
59
  }
61
60
  /** Sets `last_used_at` (default now); true when the link exists. */
62
61
  async touch(id, at = new Date()) {
63
62
  const ms = checkedMs(at, 'DbIdentityLinkStore.touch: at');
64
- await ormReady();
65
63
  const { RowsAffected } = await AuthnIdentity.update({ last_used_at: instant(ms) }).where('id', id);
66
64
  return RowsAffected === 1;
67
65
  }
68
66
  };
67
+ __decorate([
68
+ Autoinject(Orm),
69
+ __metadata("design:type", Orm)
70
+ ], DbIdentityLinkStore.prototype, "Orm", void 0);
69
71
  DbIdentityLinkStore = __decorate([
70
72
  PerChildInstance(),
71
73
  Injectable(IdentityLinkStore)
@@ -1 +1 @@
1
- {"version":3,"file":"db-link-store.js","sourceRoot":"","sources":["../../../src/links/db-link-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db-link-store.js","sourceRoot":"","sources":["../../../src/links/db-link-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { IdentityRef } from '@spinajs/authn/contracts';
2
+ import { MfaEnrolmentMarks } from '@spinajs/authn/contracts';
3
+ import { DbMfaStore } from './db-mfa-store.js';
4
+ /** Enrolment marks of steps without a secret of their own, as confirmed `authn_mfa` rows. */
5
+ export declare class DbMfaEnrolmentMarks extends MfaEnrolmentMarks {
6
+ protected readonly db?: DbMfaStore | undefined;
7
+ protected DbMfaStore: DbMfaStore;
8
+ /** DI passes nothing and injects `DbMfaStore`. */
9
+ constructor(db?: DbMfaStore | undefined);
10
+ has(id: IdentityRef, step: string): Promise<boolean>;
11
+ /** True for exactly the call that confirmed the row; false when the identity is marked already. */
12
+ mark(id: IdentityRef, step: string): Promise<boolean>;
13
+ unmark(id: IdentityRef, step: string): Promise<void>;
14
+ private store;
15
+ }
16
+ //# sourceMappingURL=db-mfa-enrolment-marks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-mfa-enrolment-marks.d.ts","sourceRoot":"","sources":["../../../src/mfa/db-mfa-enrolment-marks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAM/C,6FAA6F;AAC7F,qBAEa,mBAAoB,SAAQ,iBAAiB;IAK5C,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,UAAU;IAH9C,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC;IAEjC,kDAAkD;IAClD,YAA+B,EAAE,CAAC,EAAE,UAAU,YAAA,EAE7C;IAEY,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGhE;IAED,mGAAmG;IACtF,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAIjE;IAEY,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhE;IAED,OAAO,CAAC,KAAK;CAGd"}
@@ -0,0 +1,51 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { MfaEnrolmentMarks } from '@spinajs/authn/contracts';
11
+ import { Autoinject, Injectable, PerChildInstance } from '@spinajs/di';
12
+ import { DbMfaStore } from './db-mfa-store.js';
13
+ /** What the row holds in place of a secret: the store keeps cipher text, and a mark has nothing to hide. */
14
+ const MARK_SECRET = 'mark';
15
+ const MARK_KEY = 'none';
16
+ /** Enrolment marks of steps without a secret of their own, as confirmed `authn_mfa` rows. */
17
+ let DbMfaEnrolmentMarks = class DbMfaEnrolmentMarks extends MfaEnrolmentMarks {
18
+ /** DI passes nothing and injects `DbMfaStore`. */
19
+ constructor(db) {
20
+ super();
21
+ this.db = db;
22
+ }
23
+ async has(id, step) {
24
+ const row = await this.store().get(id, step);
25
+ return row !== null && row.confirmedAt !== null;
26
+ }
27
+ /** True for exactly the call that confirmed the row; false when the identity is marked already. */
28
+ async mark(id, step) {
29
+ const store = this.store();
30
+ if (!(await store.putPending(id, step, MARK_SECRET, MARK_KEY)))
31
+ return false;
32
+ return store.confirm(id, step, new Date(), MARK_SECRET);
33
+ }
34
+ async unmark(id, step) {
35
+ await this.store().remove(id, step);
36
+ }
37
+ store() {
38
+ return this.db ?? this.DbMfaStore;
39
+ }
40
+ };
41
+ __decorate([
42
+ Autoinject(DbMfaStore),
43
+ __metadata("design:type", DbMfaStore)
44
+ ], DbMfaEnrolmentMarks.prototype, "DbMfaStore", void 0);
45
+ DbMfaEnrolmentMarks = __decorate([
46
+ PerChildInstance(),
47
+ Injectable(MfaEnrolmentMarks),
48
+ __metadata("design:paramtypes", [DbMfaStore])
49
+ ], DbMfaEnrolmentMarks);
50
+ export { DbMfaEnrolmentMarks };
51
+ //# sourceMappingURL=db-mfa-enrolment-marks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-mfa-enrolment-marks.js","sourceRoot":"","sources":["../../../src/mfa/db-mfa-enrolment-marks.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,4GAA4G;AAC5G,MAAM,WAAW,GAAG,MAAM,CAAC;AAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC;AAExB,6FAA6F;AAGtF,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,iBAAiB;IAIxD,kDAAkD;IAClD,YAA+B,EAAe;QAC5C,KAAK,EAAE,CAAC;kBADqB,EAAE;IAEjC,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,EAAe,EAAE,IAAY;QAC5C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC7C,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC;IAClD,CAAC;IAED,mGAAmG;IAC5F,KAAK,CAAC,IAAI,CAAC,EAAe,EAAE,IAAY;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7E,OAAO,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;IAC1D,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,EAAe,EAAE,IAAY;QAC/C,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAEO,KAAK;QACX,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC;IACpC,CAAC;CACF,CAAA;AA1BW;IADT,UAAU,CAAC,UAAU,CAAC;8BACD,UAAU;uDAAC;AAFtB,mBAAmB;IAF/B,gBAAgB,EAAE;IAClB,UAAU,CAAC,iBAAiB,CAAC;qCAMQ,UAAU;GALnC,mBAAmB,CA4B/B"}
@@ -1,4 +1,5 @@
1
1
  import type { IdentityRef } from '@spinajs/authn/contracts';
2
+ import { Orm } from '@spinajs/orm';
2
3
  /** One MFA step of an identity as stored. */
3
4
  export interface MfaRecord {
4
5
  /** Cipher text exactly as `putPending` was given it; this store never encrypts or decrypts. */
@@ -18,6 +19,8 @@ export interface MfaRecord {
18
19
  * parallel calls for one identity may leave both sets.
19
20
  */
20
21
  export declare class DbMfaStore {
22
+ /** Never read: injecting it resolves the Orm, which binds the models, before the first query. */
23
+ protected Orm: Orm;
21
24
  get(id: IdentityRef, step: string): Promise<MfaRecord | null>;
22
25
  /**
23
26
  * Stores the step unconfirmed, with no accepted time step and created now, replacing a pending one. A confirmed
@@ -1 +1 @@
1
- {"version":3,"file":"db-mfa-store.d.ts","sourceRoot":"","sources":["../../../src/mfa/db-mfa-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAmB5D,6CAA6C;AAC7C,MAAM,WAAW,SAAS;IACxB,+FAA+F;IAC/F,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IAClC,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAkBD;;;;;;;GAOG;AACH,qBAEa,UAAU;IACR,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAczE;IAED;;;;OAIG;IACU,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBzG;IAED;;;OAGG;IACU,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,IAAiB,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAavH;IAED,mIAAmI;IACtH,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUzF;IAEY,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhE;IAED,mDAAmD;IACtC,cAAc,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAK9D;IAED;;;OAGG;IACU,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAInD;IAED,4GAA4G;IAC/F,oBAAoB,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAU7F;IAED,8EAA8E;IACjE,kBAAkB,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU9E;IAED,oBAAoB;IACP,kBAAkB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAKhE;IAEY,mBAAmB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/D;CACF"}
1
+ {"version":3,"file":"db-mfa-store.d.ts","sourceRoot":"","sources":["../../../src/mfa/db-mfa-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,EAAE,GAAG,EAAmB,MAAM,cAAc,CAAC;AAgBpD,6CAA6C;AAC7C,MAAM,WAAW,SAAS;IACxB,+FAA+F;IAC/F,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IAClC,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAkBD;;;;;;;GAOG;AACH,qBAEa,UAAU;IACrB,iGAAiG;IAEjG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IAEN,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAazE;IAED;;;;OAIG;IACU,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBzG;IAED;;;OAGG;IACU,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,IAAiB,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAYvH;IAED,mIAAmI;IACtH,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASzF;IAEY,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhE;IAED,mDAAmD;IACtC,cAAc,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAI9D;IAED;;;OAGG;IACU,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGnD;IAED,4GAA4G;IAC/F,oBAAoB,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAS7F;IAED,8EAA8E;IACjE,kBAAkB,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAS9E;IAED,oBAAoB;IACP,kBAAkB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAIhE;IAEY,mBAAmB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/D;CACF"}