@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
package/README.md CHANGED
@@ -39,8 +39,8 @@ The cipher and `identityKey` are also exported from the side-effect-free subpath
39
39
 
40
40
  Every store reads and writes through the package's models (`AuthnIdentity`, `AuthnSecret`,
41
41
  `AuthnNonce`, `AuthnMfa`, `AuthnRecoveryCode`, `AuthnThrottle`, `AuthnAudit`), which name the
42
- table and the `default` connection. The stores take no driver: a store awaits `ormReady()` before
43
- its first statement, and a test boots an Orm whose `default` connection is the database under test.
42
+ table and the `default` connection. The stores take no driver: each injects the Orm, so resolving a store
43
+ resolves the Orm and binds the models, and a test boots an Orm whose `default` connection is the database under test.
44
44
  The stores, `DbAuthnThrottle` and `DbMfaEnrolments` are `@PerChildInstance`: each container that
45
45
  resolves one gets its own instance, and the throttle reads that container's configuration.
46
46
 
@@ -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"}
@@ -5,6 +5,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  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;
6
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
8
11
  Object.defineProperty(exports, "__esModule", { value: true });
9
12
  exports.DbAuthnAuditSink = void 0;
10
13
  const node_crypto_1 = require("node:crypto");
@@ -48,7 +51,6 @@ let DbAuthnAuditSink = class DbAuthnAuditSink extends contracts_1.AuthnEventSink
48
51
  };
49
52
  const data = e.data === undefined && Object.keys(extra).length === 0 ? undefined : { ...(e.data ?? {}), ...extra };
50
53
  const at = (0, sql_js_1.instant)((0, sql_js_1.checkedMs)(e.at, 'DbAuthnAuditSink.publish: e.at'));
51
- await (0, orm_1.ormReady)();
52
54
  await AuthnAudit_js_1.AuthnAudit.insert((0, values_js_1.columnValues)({
53
55
  id: (0, node_crypto_1.randomUUID)(),
54
56
  at,
@@ -66,6 +68,10 @@ let DbAuthnAuditSink = class DbAuthnAuditSink extends contracts_1.AuthnEventSink
66
68
  }
67
69
  };
68
70
  exports.DbAuthnAuditSink = DbAuthnAuditSink;
71
+ __decorate([
72
+ (0, di_1.Autoinject)(orm_1.Orm),
73
+ __metadata("design:type", orm_1.Orm)
74
+ ], DbAuthnAuditSink.prototype, "Orm", void 0);
69
75
  exports.DbAuthnAuditSink = DbAuthnAuditSink = __decorate([
70
76
  (0, di_1.PerChildInstance)(),
71
77
  (0, di_1.Injectable)(contracts_1.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,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DbAuthnAuditSink = void 0;
3
+ exports.AuthnAuditRetention = exports.DbAuthnAuditSink = void 0;
4
4
  var db_audit_sink_js_1 = require("./db-audit-sink.js");
5
5
  Object.defineProperty(exports, "DbAuthnAuditSink", { enumerable: true, get: function () { return db_audit_sink_js_1.DbAuthnAuditSink; } });
6
+ var retention_js_1 = require("./retention.js");
7
+ Object.defineProperty(exports, "AuthnAuditRetention", { enumerable: true, get: function () { return retention_js_1.AuthnAuditRetention; } });
6
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/audit/index.ts"],"names":[],"mappings":";;;AAAA,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/audit/index.ts"],"names":[],"mappings":";;;AAAA,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,+CAAqD;AAA5C,mHAAA,mBAAmB,OAAA"}
@@ -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,108 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AuthnAuditRetention = void 0;
13
+ require("@spinajs/authn/register-schema");
14
+ const di_1 = require("@spinajs/di");
15
+ const configuration_1 = require("@spinajs/configuration");
16
+ const log_1 = require("@spinajs/log");
17
+ const orm_1 = require("@spinajs/orm");
18
+ const AuthnAudit_js_1 = require("../models/AuthnAudit.js");
19
+ const sql_js_1 = require("../support/sql.js");
20
+ const DAY_MS = 86_400_000;
21
+ const PURGE_BATCH = 500;
22
+ /**
23
+ * Deletes `authn_audit` rows older than `authn.audit.retentionDays`, in batches, on `purge` and, when
24
+ * `authn.audit.purgeInterval` (ms) is set, on a timer. Both keys are unset by default: audit rows are kept forever.
25
+ */
26
+ let AuthnAuditRetention = class AuthnAuditRetention extends di_1.AsyncService {
27
+ constructor() {
28
+ super(...arguments);
29
+ this.running = false;
30
+ }
31
+ get Enabled() {
32
+ return typeof this.RetentionDays === 'number' && this.RetentionDays > 0;
33
+ }
34
+ async resolve() {
35
+ if (!this.Enabled || !this.PurgeInterval || this.PurgeInterval < 1) {
36
+ return;
37
+ }
38
+ this.timer = setInterval(() => void this.tick(), this.PurgeInterval);
39
+ this.timer.unref?.();
40
+ }
41
+ async dispose() {
42
+ clearInterval(this.timer);
43
+ this.timer = undefined;
44
+ }
45
+ /** Deletes the rows older than the retention; returns how many went. 0 while `retentionDays` is unset. */
46
+ async purge(now = new Date()) {
47
+ const days = this.RetentionDays;
48
+ if (typeof days !== 'number' || !(days > 0)) {
49
+ return 0;
50
+ }
51
+ const cutoff = (0, sql_js_1.instant)((0, sql_js_1.checkedMs)(now, 'AuthnAuditRetention.purge: now') - days * DAY_MS);
52
+ let removed = 0;
53
+ for (;;) {
54
+ // MSSQL pages with OFFSET ... FETCH, which needs an ORDER BY.
55
+ const ids = (await AuthnAudit_js_1.AuthnAudit.query().columns(['id']).where('at', '<', cutoff).orderBy('at').take(PURGE_BATCH)).map((r) => r.id);
56
+ if (ids.length === 0) {
57
+ break;
58
+ }
59
+ const deleted = (await AuthnAudit_js_1.AuthnAudit.destroy().whereIn('id', ids).where('at', '<', cutoff)).RowsAffected;
60
+ removed += deleted;
61
+ if (ids.length < PURGE_BATCH || deleted === 0) {
62
+ break;
63
+ }
64
+ }
65
+ return removed;
66
+ }
67
+ async tick() {
68
+ if (this.running) {
69
+ return;
70
+ }
71
+ this.running = true;
72
+ try {
73
+ const count = await this.purge();
74
+ if (count > 0) {
75
+ this.Log.info({ count }, 'Purged audit rows past retention, count: ${count}');
76
+ }
77
+ }
78
+ catch (err) {
79
+ // An unhandled rejection here would end the process; the next tick retries.
80
+ this.Log.error(err, 'Audit retention purge failed');
81
+ }
82
+ finally {
83
+ this.running = false;
84
+ }
85
+ }
86
+ };
87
+ exports.AuthnAuditRetention = AuthnAuditRetention;
88
+ __decorate([
89
+ (0, di_1.Autoinject)(orm_1.Orm),
90
+ __metadata("design:type", orm_1.Orm)
91
+ ], AuthnAuditRetention.prototype, "Orm", void 0);
92
+ __decorate([
93
+ (0, configuration_1.Config)('authn.audit.retentionDays'),
94
+ __metadata("design:type", Object)
95
+ ], AuthnAuditRetention.prototype, "RetentionDays", void 0);
96
+ __decorate([
97
+ (0, configuration_1.Config)('authn.audit.purgeInterval'),
98
+ __metadata("design:type", Object)
99
+ ], AuthnAuditRetention.prototype, "PurgeInterval", void 0);
100
+ __decorate([
101
+ (0, log_1.Logger)('authn-orm'),
102
+ __metadata("design:type", log_1.Log)
103
+ ], AuthnAuditRetention.prototype, "Log", void 0);
104
+ exports.AuthnAuditRetention = AuthnAuditRetention = __decorate([
105
+ (0, di_1.PerChildInstance)(),
106
+ (0, di_1.Injectable)()
107
+ ], AuthnAuditRetention);
108
+ //# 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,51 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PurgeAudit = void 0;
13
+ const di_1 = require("@spinajs/di");
14
+ const cli_1 = require("@spinajs/cli");
15
+ const log_1 = require("@spinajs/log");
16
+ const orm_1 = require("@spinajs/orm");
17
+ const retention_js_1 = require("../audit/retention.js");
18
+ /** Housekeeping for a scheduler (cron, worker); a no-op while `authn.audit.retentionDays` is unset. */
19
+ let PurgeAudit = class PurgeAudit extends cli_1.CliCommand {
20
+ async execute() {
21
+ try {
22
+ if (!this.Retention.Enabled) {
23
+ this.Log.warn('authn.audit.retentionDays is not set, no audit rows were purged');
24
+ return;
25
+ }
26
+ const count = await this.Retention.purge();
27
+ this.Log.success({ count }, 'Deleted ${count} audit row(s) past retention');
28
+ }
29
+ catch (e) {
30
+ this.Log.error({ error: e }, 'Error while purging audit rows');
31
+ process.exitCode = 1;
32
+ }
33
+ }
34
+ };
35
+ exports.PurgeAudit = PurgeAudit;
36
+ __decorate([
37
+ (0, log_1.Logger)('authn-orm'),
38
+ __metadata("design:type", log_1.Log)
39
+ ], PurgeAudit.prototype, "Log", void 0);
40
+ __decorate([
41
+ (0, di_1.Autoinject)(orm_1.OrmMigrator),
42
+ __metadata("design:type", orm_1.OrmMigrator)
43
+ ], PurgeAudit.prototype, "Migrator", void 0);
44
+ __decorate([
45
+ (0, di_1.Autoinject)(retention_js_1.AuthnAuditRetention),
46
+ __metadata("design:type", retention_js_1.AuthnAuditRetention)
47
+ ], PurgeAudit.prototype, "Retention", void 0);
48
+ exports.PurgeAudit = PurgeAudit = __decorate([
49
+ (0, cli_1.Command)('authn:audit-purge', 'Deletes audit rows older than authn.audit.retentionDays')
50
+ ], PurgeAudit);
51
+ //# sourceMappingURL=PurgeAudit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PurgeAudit.js","sourceRoot":"","sources":["../../../src/cli/PurgeAudit.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oCAAyC;AACzC,sCAAmD;AACnD,sCAA2C;AAC3C,sCAA2C;AAE3C,wDAA4D;AAE5D,uGAAuG;AAEhG,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,gBAAU;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,IAAA,YAAM,EAAC,WAAW,CAAC;8BACL,SAAG;uCAAC;AAIT;IADT,IAAA,eAAU,EAAC,iBAAW,CAAC;8BACJ,iBAAW;4CAAC;AAGtB;IADT,IAAA,eAAU,EAAC,kCAAmB,CAAC;8BACX,kCAAmB;6CAAC;qBAT9B,UAAU;IADtB,IAAA,aAAO,EAAC,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,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const path_1 = require("path");
4
+ function dir(path) {
5
+ const inCommonJs = typeof module !== 'undefined';
6
+ return [
7
+ (0, path_1.resolve)((0, path_1.normalize)((0, path_1.join)(process.env.WORKSPACE_ROOT_PATH ?? process.cwd(), 'node_modules', '@spinajs', 'authn-orm', 'lib', inCommonJs ? 'cjs' : 'mjs', path))),
8
+ // one up if we run from app or build folder
9
+ (0, path_1.resolve)((0, path_1.normalize)((0, path_1.join)(process.env.WORKSPACE_ROOT_PATH ?? process.cwd(), '../', 'node_modules', '@spinajs', 'authn-orm', 'lib', inCommonJs ? 'cjs' : 'mjs', path))),
10
+ ];
11
+ }
12
+ const authnOrm = {
13
+ system: {
14
+ dirs: {
15
+ // CLI commands are found by a filesystem scan, so without this entry `authn:audit-purge` is unreachable in a consuming app.
16
+ cli: [...dir('cli')],
17
+ },
18
+ },
19
+ };
20
+ exports.default = authnOrm;
21
+ //# 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,+BAAgD;AAEhD,SAAS,GAAG,CAAC,IAAY;IACvB,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IACjD,OAAO;QACL,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAA,WAAI,EAAC,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,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAA,WAAI,EAAC,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;kBAEa,QAAQ"}
@@ -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/cjs/index.js CHANGED
@@ -23,4 +23,5 @@ __exportStar(require("./links/index.js"), exports);
23
23
  __exportStar(require("./nonces/index.js"), exports);
24
24
  __exportStar(require("./mfa/index.js"), exports);
25
25
  __exportStar(require("./audit/index.js"), exports);
26
+ __exportStar(require("./cli/PurgeAudit.js"), exports);
26
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,oDAAkC;AAClC,gDAA8B;AAC9B,sDAAoC;AACpC,qDAAmC;AACnC,mDAAiC;AACjC,oDAAkC;AAClC,iDAA+B;AAC/B,mDAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,oDAAkC;AAClC,gDAA8B;AAC9B,sDAAoC;AACpC,qDAAmC;AACnC,mDAAiC;AACjC,oDAAkC;AAClC,iDAA+B;AAC/B,mDAAiC;AACjC,sDAAoC"}
@@ -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"}
@@ -5,6 +5,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  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;
6
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
8
11
  Object.defineProperty(exports, "__esModule", { value: true });
9
12
  exports.DbIdentityLinkStore = void 0;
10
13
  const node_crypto_1 = require("node:crypto");
@@ -25,7 +28,6 @@ function identityParts(ref) {
25
28
  /** `authn_identity`: external subjects linked to identities (A19). Values longer than their columns throw (D1). */
26
29
  let DbIdentityLinkStore = class DbIdentityLinkStore extends contracts_1.IdentityLinkStore {
27
30
  async find(provider, subject) {
28
- await (0, orm_1.ormReady)();
29
31
  const rows = await AuthnIdentity_js_1.AuthnIdentity.query().columns(LINK_COLUMNS).where('provider', provider).where('subject', subject);
30
32
  // MySQL and MSSQL default collations ignore case (and accents or trailing spaces): a subject differing only that
31
33
  // way must not sign in as another account.
@@ -34,7 +36,6 @@ let DbIdentityLinkStore = class DbIdentityLinkStore extends contracts_1.Identity
34
36
  }
35
37
  async list(identity) {
36
38
  const { type, id } = identityParts(identity);
37
- await (0, orm_1.ormReady)();
38
39
  const rows = await AuthnIdentity_js_1.AuthnIdentity.query().columns(LINK_COLUMNS).where('identity_type', type).where('identity_id', id).orderBy('linked_at');
39
40
  return rows.filter((r) => r.identity_type === type && r.identity_id === id).map(toLink);
40
41
  }
@@ -45,7 +46,6 @@ let DbIdentityLinkStore = class DbIdentityLinkStore extends contracts_1.Identity
45
46
  const subject = (0, sql_js_1.checkedText)(external.subject, 255, 'DbIdentityLinkStore: subject');
46
47
  const email = external.email === undefined || external.email === null ? undefined : (0, sql_js_1.checkedText)(external.email, 255, 'DbIdentityLinkStore: email', true);
47
48
  const nowMs = (0, sql_js_1.checkedMs)(new Date(), 'DbIdentityLinkStore.link: the clock');
48
- await (0, orm_1.ormReady)();
49
49
  const linkId = (0, node_crypto_1.randomUUID)();
50
50
  try {
51
51
  await AuthnIdentity_js_1.AuthnIdentity.insert((0, values_js_1.columnValues)({ id: linkId, identity_type: type, identity_id: id, provider, subject, email: email ?? null, email_verified: external.emailVerified === true, attributes: null, linked_at: (0, sql_js_1.instant)(nowMs), last_used_at: null }));
@@ -58,18 +58,20 @@ let DbIdentityLinkStore = class DbIdentityLinkStore extends contracts_1.Identity
58
58
  return { id: linkId, identity: { type, id }, provider, subject, ...(email !== undefined ? { email } : {}), linkedAt: new Date(nowMs) };
59
59
  }
60
60
  async unlink(id) {
61
- await (0, orm_1.ormReady)();
62
61
  await AuthnIdentity_js_1.AuthnIdentity.destroy().where('id', id);
63
62
  }
64
63
  /** Sets `last_used_at` (default now); true when the link exists. */
65
64
  async touch(id, at = new Date()) {
66
65
  const ms = (0, sql_js_1.checkedMs)(at, 'DbIdentityLinkStore.touch: at');
67
- await (0, orm_1.ormReady)();
68
66
  const { RowsAffected } = await AuthnIdentity_js_1.AuthnIdentity.update({ last_used_at: (0, sql_js_1.instant)(ms) }).where('id', id);
69
67
  return RowsAffected === 1;
70
68
  }
71
69
  };
72
70
  exports.DbIdentityLinkStore = DbIdentityLinkStore;
71
+ __decorate([
72
+ (0, di_1.Autoinject)(orm_1.Orm),
73
+ __metadata("design:type", orm_1.Orm)
74
+ ], DbIdentityLinkStore.prototype, "Orm", void 0);
73
75
  exports.DbIdentityLinkStore = DbIdentityLinkStore = __decorate([
74
76
  (0, di_1.PerChildInstance)(),
75
77
  (0, di_1.Injectable)(contracts_1.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,54 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.DbMfaEnrolmentMarks = void 0;
13
+ const contracts_1 = require("@spinajs/authn/contracts");
14
+ const di_1 = require("@spinajs/di");
15
+ const db_mfa_store_js_1 = require("./db-mfa-store.js");
16
+ /** What the row holds in place of a secret: the store keeps cipher text, and a mark has nothing to hide. */
17
+ const MARK_SECRET = 'mark';
18
+ const MARK_KEY = 'none';
19
+ /** Enrolment marks of steps without a secret of their own, as confirmed `authn_mfa` rows. */
20
+ let DbMfaEnrolmentMarks = class DbMfaEnrolmentMarks extends contracts_1.MfaEnrolmentMarks {
21
+ /** DI passes nothing and injects `DbMfaStore`. */
22
+ constructor(db) {
23
+ super();
24
+ this.db = db;
25
+ }
26
+ async has(id, step) {
27
+ const row = await this.store().get(id, step);
28
+ return row !== null && row.confirmedAt !== null;
29
+ }
30
+ /** True for exactly the call that confirmed the row; false when the identity is marked already. */
31
+ async mark(id, step) {
32
+ const store = this.store();
33
+ if (!(await store.putPending(id, step, MARK_SECRET, MARK_KEY)))
34
+ return false;
35
+ return store.confirm(id, step, new Date(), MARK_SECRET);
36
+ }
37
+ async unmark(id, step) {
38
+ await this.store().remove(id, step);
39
+ }
40
+ store() {
41
+ return this.db ?? this.DbMfaStore;
42
+ }
43
+ };
44
+ exports.DbMfaEnrolmentMarks = DbMfaEnrolmentMarks;
45
+ __decorate([
46
+ (0, di_1.Autoinject)(db_mfa_store_js_1.DbMfaStore),
47
+ __metadata("design:type", db_mfa_store_js_1.DbMfaStore)
48
+ ], DbMfaEnrolmentMarks.prototype, "DbMfaStore", void 0);
49
+ exports.DbMfaEnrolmentMarks = DbMfaEnrolmentMarks = __decorate([
50
+ (0, di_1.PerChildInstance)(),
51
+ (0, di_1.Injectable)(contracts_1.MfaEnrolmentMarks),
52
+ __metadata("design:paramtypes", [db_mfa_store_js_1.DbMfaStore])
53
+ ], DbMfaEnrolmentMarks);
54
+ //# 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,wDAA6D;AAC7D,oCAAuE;AAEvE,uDAA+C;AAE/C,4GAA4G;AAC5G,MAAM,WAAW,GAAG,MAAM,CAAC;AAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC;AAExB,6FAA6F;AAGtF,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,6BAAiB;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,IAAA,eAAU,EAAC,4BAAU,CAAC;8BACD,4BAAU;uDAAC;8BAFtB,mBAAmB;IAF/B,IAAA,qBAAgB,GAAE;IAClB,IAAA,eAAU,EAAC,6BAAiB,CAAC;qCAMQ,4BAAU;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"}