@heavybit/shared-lib 1.3.2 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +261 -0
- package/dist/cjs/access/index.js +9 -1
- package/dist/cjs/access/index.js.map +1 -1
- package/dist/cjs/approvals/index.js +137 -0
- package/dist/cjs/approvals/index.js.map +1 -0
- package/dist/cjs/audit/index.js +74 -0
- package/dist/cjs/audit/index.js.map +1 -0
- package/dist/cjs/cache/index.js +90 -16
- package/dist/cjs/cache/index.js.map +1 -1
- package/dist/cjs/cache/keyspace.js +101 -0
- package/dist/cjs/cache/keyspace.js.map +1 -0
- package/dist/cjs/common/circuit-breaker.js +74 -0
- package/dist/cjs/common/circuit-breaker.js.map +1 -0
- package/dist/cjs/common/errors.js +44 -5
- package/dist/cjs/common/errors.js.map +1 -1
- package/dist/cjs/common/index.js +4 -0
- package/dist/cjs/common/index.js.map +1 -1
- package/dist/cjs/common/internal-client.js +177 -0
- package/dist/cjs/common/internal-client.js.map +1 -0
- package/dist/cjs/common/internal-constants.js +12 -0
- package/dist/cjs/common/internal-constants.js.map +1 -0
- package/dist/cjs/common/internal-service-auth.js +160 -0
- package/dist/cjs/common/internal-service-auth.js.map +1 -0
- package/dist/cjs/common/money.js +215 -0
- package/dist/cjs/common/money.js.map +1 -0
- package/dist/cjs/common/phone.js +63 -11
- package/dist/cjs/common/phone.js.map +1 -1
- package/dist/cjs/common/response.js +78 -5
- package/dist/cjs/common/response.js.map +1 -1
- package/dist/cjs/common/time.js +28 -2
- package/dist/cjs/common/time.js.map +1 -1
- package/dist/cjs/config/index.js +140 -20
- package/dist/cjs/config/index.js.map +1 -1
- package/dist/cjs/context/index.js +49 -0
- package/dist/cjs/context/index.js.map +1 -0
- package/dist/cjs/contracts/index.js +0 -2
- package/dist/cjs/contracts/index.js.map +1 -1
- package/dist/cjs/contracts/notification-dispatch.js +87 -63
- package/dist/cjs/contracts/notification-dispatch.js.map +1 -1
- package/dist/cjs/database/db.js +37 -0
- package/dist/cjs/database/db.js.map +1 -0
- package/dist/cjs/database/index.js +22 -51
- package/dist/cjs/database/index.js.map +1 -1
- package/dist/cjs/database/pagination.js +88 -0
- package/dist/cjs/database/pagination.js.map +1 -0
- package/dist/cjs/database/pool.js +60 -0
- package/dist/cjs/database/pool.js.map +1 -0
- package/dist/cjs/database/scoped-repository.js +132 -0
- package/dist/cjs/database/scoped-repository.js.map +1 -0
- package/dist/cjs/database/scopes.js +166 -0
- package/dist/cjs/database/scopes.js.map +1 -0
- package/dist/cjs/database/table-names.js +14 -0
- package/dist/cjs/database/table-names.js.map +1 -0
- package/dist/cjs/database/tables.js +71 -0
- package/dist/cjs/database/tables.js.map +1 -0
- package/dist/cjs/express/auth.js +88 -41
- package/dist/cjs/express/auth.js.map +1 -1
- package/dist/cjs/express/index.js +3 -0
- package/dist/cjs/express/index.js.map +1 -1
- package/dist/cjs/express/internal-caller.js +52 -0
- package/dist/cjs/express/internal-caller.js.map +1 -0
- package/dist/cjs/express/middleware.js +154 -34
- package/dist/cjs/express/middleware.js.map +1 -1
- package/dist/cjs/express/respond.js +47 -0
- package/dist/cjs/express/respond.js.map +1 -0
- package/dist/cjs/express/step-up.js +41 -0
- package/dist/cjs/express/step-up.js.map +1 -0
- package/dist/cjs/http/index.js +3 -71
- package/dist/cjs/http/index.js.map +1 -1
- package/dist/cjs/identity/index.js +269 -67
- package/dist/cjs/identity/index.js.map +1 -1
- package/dist/cjs/identity/step-up.js +52 -0
- package/dist/cjs/identity/step-up.js.map +1 -0
- package/dist/cjs/index.js +7 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/knex/columns.js +36 -0
- package/dist/cjs/knex/columns.js.map +1 -0
- package/dist/cjs/knex/index.js +26 -43
- package/dist/cjs/knex/index.js.map +1 -1
- package/dist/cjs/knex/migration-helpers.js +57 -0
- package/dist/cjs/knex/migration-helpers.js.map +1 -0
- package/dist/cjs/logging/index.js +76 -40
- package/dist/cjs/logging/index.js.map +1 -1
- package/dist/cjs/logging/redact.js +112 -0
- package/dist/cjs/logging/redact.js.map +1 -0
- package/dist/cjs/messaging/base-consumer.js +36 -0
- package/dist/cjs/messaging/base-consumer.js.map +1 -0
- package/dist/cjs/messaging/consumer.js +142 -73
- package/dist/cjs/messaging/consumer.js.map +1 -1
- package/dist/cjs/messaging/envelope.js +53 -10
- package/dist/cjs/messaging/envelope.js.map +1 -1
- package/dist/cjs/messaging/idempotency.js +95 -8
- package/dist/cjs/messaging/idempotency.js.map +1 -1
- package/dist/cjs/messaging/index.js +3 -1
- package/dist/cjs/messaging/index.js.map +1 -1
- package/dist/cjs/messaging/outbox.js +97 -55
- package/dist/cjs/messaging/outbox.js.map +1 -1
- package/dist/cjs/messaging/publisher.js +86 -38
- package/dist/cjs/messaging/publisher.js.map +1 -1
- package/dist/cjs/messaging/staff-notifier.js +36 -44
- package/dist/cjs/messaging/staff-notifier.js.map +1 -1
- package/dist/cjs/messaging/staff-recipients.js +57 -0
- package/dist/cjs/messaging/staff-recipients.js.map +1 -0
- package/dist/cjs/messaging/topology.js +41 -5
- package/dist/cjs/messaging/topology.js.map +1 -1
- package/dist/cjs/rate-limit/index.js +57 -6
- package/dist/cjs/rate-limit/index.js.map +1 -1
- package/dist/cjs/rate-limit/keys.js +47 -0
- package/dist/cjs/rate-limit/keys.js.map +1 -0
- package/dist/cjs/socket/index.js +127 -16
- package/dist/cjs/socket/index.js.map +1 -1
- package/dist/cjs/socket/ticket.js +124 -0
- package/dist/cjs/socket/ticket.js.map +1 -0
- package/dist/cjs/testing/index.js +23 -14
- package/dist/cjs/testing/index.js.map +1 -1
- package/dist/cjs/validation/index.js +27 -3
- package/dist/cjs/validation/index.js.map +1 -1
- package/dist/esm/access/index.js +9 -1
- package/dist/esm/access/index.js.map +1 -1
- package/dist/esm/approvals/index.js +127 -0
- package/dist/esm/approvals/index.js.map +1 -0
- package/dist/esm/audit/index.js +70 -0
- package/dist/esm/audit/index.js.map +1 -0
- package/dist/esm/cache/index.js +70 -13
- package/dist/esm/cache/index.js.map +1 -1
- package/dist/esm/cache/keyspace.js +95 -0
- package/dist/esm/cache/keyspace.js.map +1 -0
- package/dist/esm/common/circuit-breaker.js +70 -0
- package/dist/esm/common/circuit-breaker.js.map +1 -0
- package/dist/esm/common/errors.js +42 -4
- package/dist/esm/common/errors.js.map +1 -1
- package/dist/esm/common/index.js +4 -0
- package/dist/esm/common/index.js.map +1 -1
- package/dist/esm/common/internal-client.js +173 -0
- package/dist/esm/common/internal-client.js.map +1 -0
- package/dist/esm/common/internal-constants.js +9 -0
- package/dist/esm/common/internal-constants.js.map +1 -0
- package/dist/esm/common/internal-service-auth.js +150 -0
- package/dist/esm/common/internal-service-auth.js.map +1 -0
- package/dist/esm/common/money.js +207 -0
- package/dist/esm/common/money.js.map +1 -0
- package/dist/esm/common/phone.js +63 -11
- package/dist/esm/common/phone.js.map +1 -1
- package/dist/esm/common/response.js +75 -5
- package/dist/esm/common/response.js.map +1 -1
- package/dist/esm/common/time.js +27 -2
- package/dist/esm/common/time.js.map +1 -1
- package/dist/esm/config/index.js +136 -19
- package/dist/esm/config/index.js.map +1 -1
- package/dist/esm/context/index.js +44 -0
- package/dist/esm/context/index.js.map +1 -0
- package/dist/esm/contracts/index.js +0 -2
- package/dist/esm/contracts/index.js.map +1 -1
- package/dist/esm/contracts/notification-dispatch.js +85 -62
- package/dist/esm/contracts/notification-dispatch.js.map +1 -1
- package/dist/esm/database/db.js +32 -0
- package/dist/esm/database/db.js.map +1 -0
- package/dist/esm/database/index.js +9 -45
- package/dist/esm/database/index.js.map +1 -1
- package/dist/esm/database/pagination.js +81 -0
- package/dist/esm/database/pagination.js.map +1 -0
- package/dist/esm/database/pool.js +51 -0
- package/dist/esm/database/pool.js.map +1 -0
- package/dist/esm/database/scoped-repository.js +128 -0
- package/dist/esm/database/scoped-repository.js.map +1 -0
- package/dist/esm/database/scopes.js +157 -0
- package/dist/esm/database/scopes.js.map +1 -0
- package/dist/esm/database/table-names.js +11 -0
- package/dist/esm/database/table-names.js.map +1 -0
- package/dist/esm/database/tables.js +61 -0
- package/dist/esm/database/tables.js.map +1 -0
- package/dist/esm/express/auth.js +87 -40
- package/dist/esm/express/auth.js.map +1 -1
- package/dist/esm/express/index.js +3 -0
- package/dist/esm/express/index.js.map +1 -1
- package/dist/esm/express/internal-caller.js +49 -0
- package/dist/esm/express/internal-caller.js.map +1 -0
- package/dist/esm/express/middleware.js +146 -27
- package/dist/esm/express/middleware.js.map +1 -1
- package/dist/esm/express/respond.js +42 -0
- package/dist/esm/express/respond.js.map +1 -0
- package/dist/esm/express/step-up.js +38 -0
- package/dist/esm/express/step-up.js.map +1 -0
- package/dist/esm/http/index.js +3 -70
- package/dist/esm/http/index.js.map +1 -1
- package/dist/esm/identity/index.js +246 -64
- package/dist/esm/identity/index.js.map +1 -1
- package/dist/esm/identity/step-up.js +47 -0
- package/dist/esm/identity/step-up.js.map +1 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/knex/columns.js +28 -0
- package/dist/esm/knex/columns.js.map +1 -0
- package/dist/esm/knex/index.js +8 -34
- package/dist/esm/knex/index.js.map +1 -1
- package/dist/esm/knex/migration-helpers.js +51 -0
- package/dist/esm/knex/migration-helpers.js.map +1 -0
- package/dist/esm/logging/index.js +68 -39
- package/dist/esm/logging/index.js.map +1 -1
- package/dist/esm/logging/redact.js +106 -0
- package/dist/esm/logging/redact.js.map +1 -0
- package/dist/esm/messaging/base-consumer.js +32 -0
- package/dist/esm/messaging/base-consumer.js.map +1 -0
- package/dist/esm/messaging/consumer.js +139 -71
- package/dist/esm/messaging/consumer.js.map +1 -1
- package/dist/esm/messaging/envelope.js +50 -10
- package/dist/esm/messaging/envelope.js.map +1 -1
- package/dist/esm/messaging/idempotency.js +91 -7
- package/dist/esm/messaging/idempotency.js.map +1 -1
- package/dist/esm/messaging/index.js +3 -1
- package/dist/esm/messaging/index.js.map +1 -1
- package/dist/esm/messaging/outbox.js +97 -54
- package/dist/esm/messaging/outbox.js.map +1 -1
- package/dist/esm/messaging/publisher.js +86 -38
- package/dist/esm/messaging/publisher.js.map +1 -1
- package/dist/esm/messaging/staff-notifier.js +36 -43
- package/dist/esm/messaging/staff-notifier.js.map +1 -1
- package/dist/esm/messaging/staff-recipients.js +53 -0
- package/dist/esm/messaging/staff-recipients.js.map +1 -0
- package/dist/esm/messaging/topology.js +39 -4
- package/dist/esm/messaging/topology.js.map +1 -1
- package/dist/esm/rate-limit/index.js +41 -6
- package/dist/esm/rate-limit/index.js.map +1 -1
- package/dist/esm/rate-limit/keys.js +43 -0
- package/dist/esm/rate-limit/keys.js.map +1 -0
- package/dist/esm/socket/index.js +112 -17
- package/dist/esm/socket/index.js.map +1 -1
- package/dist/esm/socket/ticket.js +117 -0
- package/dist/esm/socket/ticket.js.map +1 -0
- package/dist/esm/testing/index.js +24 -15
- package/dist/esm/testing/index.js.map +1 -1
- package/dist/esm/validation/index.js +27 -2
- package/dist/esm/validation/index.js.map +1 -1
- package/dist/types/access/index.d.ts +9 -3
- package/dist/types/access/index.d.ts.map +1 -1
- package/dist/types/alerting/index.d.ts +1 -1
- package/dist/types/alerting/index.d.ts.map +1 -1
- package/dist/types/approvals/index.d.ts +99 -0
- package/dist/types/approvals/index.d.ts.map +1 -0
- package/dist/types/audit/index.d.ts +82 -0
- package/dist/types/audit/index.d.ts.map +1 -0
- package/dist/types/cache/index.d.ts +64 -14
- package/dist/types/cache/index.d.ts.map +1 -1
- package/dist/types/cache/keyspace.d.ts +84 -0
- package/dist/types/cache/keyspace.d.ts.map +1 -0
- package/dist/types/common/circuit-breaker.d.ts +51 -0
- package/dist/types/common/circuit-breaker.d.ts.map +1 -0
- package/dist/types/common/errors.d.ts +48 -7
- package/dist/types/common/errors.d.ts.map +1 -1
- package/dist/types/common/index.d.ts +4 -0
- package/dist/types/common/index.d.ts.map +1 -1
- package/dist/types/common/internal-client.d.ts +116 -0
- package/dist/types/common/internal-client.d.ts.map +1 -0
- package/dist/types/common/internal-constants.d.ts +9 -0
- package/dist/types/common/internal-constants.d.ts.map +1 -0
- package/dist/types/common/internal-service-auth.d.ts +102 -0
- package/dist/types/common/internal-service-auth.d.ts.map +1 -0
- package/dist/types/common/money.d.ts +104 -0
- package/dist/types/common/money.d.ts.map +1 -0
- package/dist/types/common/phone.d.ts +45 -6
- package/dist/types/common/phone.d.ts.map +1 -1
- package/dist/types/common/response.d.ts +66 -5
- package/dist/types/common/response.d.ts.map +1 -1
- package/dist/types/common/time.d.ts +20 -2
- package/dist/types/common/time.d.ts.map +1 -1
- package/dist/types/config/index.d.ts +252 -28
- package/dist/types/config/index.d.ts.map +1 -1
- package/dist/types/context/index.d.ts +39 -0
- package/dist/types/context/index.d.ts.map +1 -0
- package/dist/types/contracts/index.d.ts +0 -2
- package/dist/types/contracts/index.d.ts.map +1 -1
- package/dist/types/contracts/notification-dispatch.d.ts +204 -86
- package/dist/types/contracts/notification-dispatch.d.ts.map +1 -1
- package/dist/types/database/db.d.ts +46 -0
- package/dist/types/database/db.d.ts.map +1 -0
- package/dist/types/database/index.d.ts +9 -22
- package/dist/types/database/index.d.ts.map +1 -1
- package/dist/types/database/pagination.d.ts +68 -0
- package/dist/types/database/pagination.d.ts.map +1 -0
- package/dist/types/database/pool.d.ts +39 -0
- package/dist/types/database/pool.d.ts.map +1 -0
- package/dist/types/database/scoped-repository.d.ts +92 -0
- package/dist/types/database/scoped-repository.d.ts.map +1 -0
- package/dist/types/database/scopes.d.ts +159 -0
- package/dist/types/database/scopes.d.ts.map +1 -0
- package/dist/types/database/table-names.d.ts +13 -0
- package/dist/types/database/table-names.d.ts.map +1 -0
- package/dist/types/database/tables.d.ts +748 -0
- package/dist/types/database/tables.d.ts.map +1 -0
- package/dist/types/express/auth.d.ts +63 -11
- package/dist/types/express/auth.d.ts.map +1 -1
- package/dist/types/express/index.d.ts +3 -0
- package/dist/types/express/index.d.ts.map +1 -1
- package/dist/types/express/internal-caller.d.ts +53 -0
- package/dist/types/express/internal-caller.d.ts.map +1 -0
- package/dist/types/express/middleware.d.ts +86 -7
- package/dist/types/express/middleware.d.ts.map +1 -1
- package/dist/types/express/respond.d.ts +41 -0
- package/dist/types/express/respond.d.ts.map +1 -0
- package/dist/types/express/step-up.d.ts +38 -0
- package/dist/types/express/step-up.d.ts.map +1 -0
- package/dist/types/http/index.d.ts +3 -31
- package/dist/types/http/index.d.ts.map +1 -1
- package/dist/types/identity/index.d.ts +159 -21
- package/dist/types/identity/index.d.ts.map +1 -1
- package/dist/types/identity/step-up.d.ts +41 -0
- package/dist/types/identity/step-up.d.ts.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/knex/columns.d.ts +15 -0
- package/dist/types/knex/columns.d.ts.map +1 -0
- package/dist/types/knex/index.d.ts +3 -11
- package/dist/types/knex/index.d.ts.map +1 -1
- package/dist/types/knex/migration-helpers.d.ts +28 -0
- package/dist/types/knex/migration-helpers.d.ts.map +1 -0
- package/dist/types/logging/index.d.ts +30 -4
- package/dist/types/logging/index.d.ts.map +1 -1
- package/dist/types/logging/redact.d.ts +54 -0
- package/dist/types/logging/redact.d.ts.map +1 -0
- package/dist/types/messaging/base-consumer.d.ts +33 -0
- package/dist/types/messaging/base-consumer.d.ts.map +1 -0
- package/dist/types/messaging/consumer.d.ts +59 -21
- package/dist/types/messaging/consumer.d.ts.map +1 -1
- package/dist/types/messaging/envelope.d.ts +50 -11
- package/dist/types/messaging/envelope.d.ts.map +1 -1
- package/dist/types/messaging/idempotency.d.ts +60 -3
- package/dist/types/messaging/idempotency.d.ts.map +1 -1
- package/dist/types/messaging/index.d.ts +8 -0
- package/dist/types/messaging/index.d.ts.map +1 -1
- package/dist/types/messaging/outbox.d.ts +62 -22
- package/dist/types/messaging/outbox.d.ts.map +1 -1
- package/dist/types/messaging/publisher.d.ts +54 -21
- package/dist/types/messaging/publisher.d.ts.map +1 -1
- package/dist/types/messaging/staff-notifier.d.ts +69 -38
- package/dist/types/messaging/staff-notifier.d.ts.map +1 -1
- package/dist/types/messaging/staff-recipients.d.ts +50 -0
- package/dist/types/messaging/staff-recipients.d.ts.map +1 -0
- package/dist/types/messaging/topology.d.ts +40 -8
- package/dist/types/messaging/topology.d.ts.map +1 -1
- package/dist/types/rate-limit/index.d.ts +40 -4
- package/dist/types/rate-limit/index.d.ts.map +1 -1
- package/dist/types/rate-limit/keys.d.ts +52 -0
- package/dist/types/rate-limit/keys.d.ts.map +1 -0
- package/dist/types/socket/index.d.ts +86 -2
- package/dist/types/socket/index.d.ts.map +1 -1
- package/dist/types/socket/ticket.d.ts +90 -0
- package/dist/types/socket/ticket.d.ts.map +1 -0
- package/dist/types/testing/index.d.ts +31 -10
- package/dist/types/testing/index.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +62 -15
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/validation/index.d.ts +33 -2
- package/dist/types/validation/index.d.ts.map +1 -1
- package/package.json +3 -1
- package/dist/cjs/contracts/editorial-draft.js +0 -120
- package/dist/cjs/contracts/editorial-draft.js.map +0 -1
- package/dist/cjs/contracts/upload-import.js +0 -54
- package/dist/cjs/contracts/upload-import.js.map +0 -1
- package/dist/esm/contracts/editorial-draft.js +0 -117
- package/dist/esm/contracts/editorial-draft.js.map +0 -1
- package/dist/esm/contracts/upload-import.js +0 -51
- package/dist/esm/contracts/upload-import.js.map +0 -1
- package/dist/types/contracts/editorial-draft.d.ts +0 -610
- package/dist/types/contracts/editorial-draft.d.ts.map +0 -1
- package/dist/types/contracts/upload-import.d.ts +0 -96
- package/dist/types/contracts/upload-import.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../../src/database/tables.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAYhK,OAAO,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,CAAC;AAExI,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,qCAAqC;AACrC,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AACzD,+CAA+C;AAC/C,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE3E,sGAAsG;AACtG,wBAAgB,WAAW,CAAC,IAAI,SAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GActD;AAED,qEAAqE;AACrE,wBAAgB,oBAAoB,CAAC,IAAI,SAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAUzE;AAED,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,IAAI,SAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAarE;AAED,4CAA4C;AAC5C,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAgB,CAAC;AACpC,gDAAgD;AAChD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAyB,CAAC;AACtD,8CAA8C;AAC9C,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAuB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { RequestHandler } from 'express';
|
|
1
|
+
import type { Request, RequestHandler } from 'express';
|
|
2
|
+
import { type IdentityProtocol, type IdentityRejection } from '../identity/index.js';
|
|
2
3
|
import type { AuthUser, Logger } from '../types/index.js';
|
|
3
4
|
declare global {
|
|
4
5
|
namespace Express {
|
|
@@ -7,21 +8,72 @@ declare global {
|
|
|
7
8
|
}
|
|
8
9
|
}
|
|
9
10
|
}
|
|
11
|
+
/** Why a gateway identity was rejected, for the `onRejected` hook. */
|
|
12
|
+
export interface IdentityRejectedEvent {
|
|
13
|
+
reason: IdentityRejection;
|
|
14
|
+
method: string;
|
|
15
|
+
/** Request path without the query string. Never includes header values. */
|
|
16
|
+
path: string;
|
|
17
|
+
requestId?: string;
|
|
18
|
+
}
|
|
19
|
+
/** Options for the gateway identity middleware. */
|
|
10
20
|
export interface GatewayAuthOptions {
|
|
11
|
-
|
|
12
|
-
|
|
21
|
+
/** The app's identity protocol (domain separator + header mapping). */
|
|
22
|
+
protocol: IdentityProtocol;
|
|
23
|
+
/** Shared HMAC secret; defaults to env `GATEWAY_SIGNING_SECRET`. Must be at least 32 characters (checked at startup). */
|
|
24
|
+
secret?: string;
|
|
25
|
+
/** Replay window for `x-gateway-ts` (default 30 s). */
|
|
26
|
+
maxAgeMs?: number;
|
|
27
|
+
/** Allowed gateway clock lead (default 5 s). */
|
|
28
|
+
maxFutureMs?: number;
|
|
29
|
+
/** Receives a warning (reason + path, no header values) when an identity is rejected. */
|
|
13
30
|
logger?: Logger;
|
|
31
|
+
/** Called on every rejected identity, e.g. to publish a security event. Errors it throws are logged and ignored. */
|
|
32
|
+
onRejected?: (event: IdentityRejectedEvent, req: Request) => void | Promise<void>;
|
|
14
33
|
}
|
|
15
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Requires a valid gateway-signed (v2) identity and sets `req.user`; 401 UNAUTHENTICATED (with `requestId`)
|
|
36
|
+
* otherwise. Also fills the request context's `userId` and `scopes` so log lines carry them.
|
|
37
|
+
* Throws at startup when the secret is missing or shorter than 32 characters.
|
|
38
|
+
*
|
|
39
|
+
* @param options Protocol, secret, replay window, logger and rejection hook.
|
|
40
|
+
* @returns Express middleware.
|
|
41
|
+
* @example router.use(authenticateFromGateway({ protocol, logger, onRejected: publishSecurityEvent }));
|
|
42
|
+
*/
|
|
16
43
|
export declare function authenticateFromGateway(options: GatewayAuthOptions): RequestHandler;
|
|
17
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Attaches `req.user` when a valid identity is present and continues anonymously when none is sent,
|
|
46
|
+
* for public routes that personalise. A forged or stale identity is still rejected with 401, never
|
|
47
|
+
* downgraded to anonymous.
|
|
48
|
+
*
|
|
49
|
+
* @param options Same as {@link authenticateFromGateway}.
|
|
50
|
+
* @returns Express middleware.
|
|
51
|
+
* @example router.get('/items', optionalAuthFromGateway({ protocol }), controller.list);
|
|
52
|
+
*/
|
|
18
53
|
export declare function optionalAuthFromGateway(options: GatewayAuthOptions): RequestHandler;
|
|
19
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* Allows callers holding any of `permissions` (401 without identity, 403 FORBIDDEN otherwise).
|
|
56
|
+
* A super admin passes every permission guard.
|
|
57
|
+
*
|
|
58
|
+
* @example router.post('/refunds', requirePermission('refunds.create'), controller.create);
|
|
59
|
+
*/
|
|
20
60
|
export declare const requirePermission: (...permissions: string[]) => RequestHandler;
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
|
|
61
|
+
/**
|
|
62
|
+
* Allows callers holding every one of `permissions`. Accepts a list or rest arguments.
|
|
63
|
+
*
|
|
64
|
+
* @example router.delete('/x/:id', requireAllPermissions('x.read', 'x.delete'), controller.remove);
|
|
65
|
+
*/
|
|
66
|
+
export declare const requireAllPermissions: (...permissions: Array<string | string[]>) => RequestHandler;
|
|
67
|
+
/**
|
|
68
|
+
* Allows callers whose session passed the one-time-code (second factor) check; 403 FORBIDDEN otherwise.
|
|
69
|
+
*
|
|
70
|
+
* @example router.post('/security/settings', requireOtpVerified(), controller.update);
|
|
71
|
+
*/
|
|
72
|
+
export declare const requireOtpVerified: () => RequestHandler;
|
|
73
|
+
/**
|
|
74
|
+
* Allows callers with any of `roles`. Prefer permissions; roles are for coarse gates only.
|
|
75
|
+
*
|
|
76
|
+
* @example router.use('/ops', requireRole('platform_admin'));
|
|
77
|
+
*/
|
|
24
78
|
export declare const requireRole: (...roles: string[]) => RequestHandler;
|
|
25
|
-
/** Guards `/internal/*` routes: requires the shared service secret header. */
|
|
26
|
-
export declare function requireInternalServiceSecret(secret: string): RequestHandler;
|
|
27
79
|
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/express/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/express/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,OAAO,EAAE,cAAc,EAAY,MAAM,SAAS,CAAC;AAK/E,OAAO,EACsD,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EACzG,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,OAAO,CAAC;QAChB,UAAU,OAAO;YACf,IAAI,CAAC,EAAE,QAAQ,CAAC;SACjB;KACF;CACF;AAED,sEAAsE;AACtE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,mDAAmD;AACnD,MAAM,WAAW,kBAAkB;IACjC,uEAAuE;IACvE,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,yHAAyH;IACzH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yFAAyF;IACzF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oHAAoH;IACpH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnF;AAqCD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,kBAAkB,GAAG,cAAc,CAMnF;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,kBAAkB,GAAG,cAAc,CAMnF;AAaD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,GAAG,aAAa,MAAM,EAAE,KAAG,cAAgE,CAAC;AAE9H;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAAI,GAAG,aAAa,KAAK,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,KAAG,cAGhF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,QAAO,cAAgG,CAAC;AAEvI;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,GAAG,OAAO,MAAM,EAAE,KAAG,cAAyE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/express/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/express/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Express guard for service-to-service routes.
|
|
3
|
+
*
|
|
4
|
+
* Layer: middleware. Key rules:
|
|
5
|
+
* - Every internal route names the exact callers it accepts: `requireInternalCaller(['alpha-service'])`.
|
|
6
|
+
* - 401 UNAUTHENTICATED when the caller name or secret is missing, unknown or wrong (constant-time compare);
|
|
7
|
+
* 403 FORBIDDEN when a correctly authenticated caller is not in the route's list.
|
|
8
|
+
* - 403 FORBIDDEN for any request outside the app's internal path prefix, so a guard mounted on a public
|
|
9
|
+
* router by mistake fails closed instead of exposing a credential-only route.
|
|
10
|
+
* - Rejections log the reason, caller name and path; never a secret or header value.
|
|
11
|
+
*/
|
|
12
|
+
import type { RequestHandler } from 'express';
|
|
13
|
+
import type { Logger } from '../types/index.js';
|
|
14
|
+
declare global {
|
|
15
|
+
namespace Express {
|
|
16
|
+
interface Request {
|
|
17
|
+
/** The authenticated calling service, set by `requireInternalCaller`. */
|
|
18
|
+
internalCaller?: string;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/** Settings for {@link createInternalCallerGuards}. */
|
|
23
|
+
export interface InternalCallerGuardOptions {
|
|
24
|
+
/** The app's internal route prefix, e.g. `/internal`; requests outside it are refused. */
|
|
25
|
+
pathPrefix: string;
|
|
26
|
+
/** Caller name → accepted secret; defaults to env `INTERNAL_SERVICE_CREDENTIALS`. */
|
|
27
|
+
credentials?: Readonly<Record<string, string>>;
|
|
28
|
+
/** Receives a warning per rejected call. */
|
|
29
|
+
logger?: Logger;
|
|
30
|
+
}
|
|
31
|
+
/** Guards built by {@link createInternalCallerGuards}. */
|
|
32
|
+
export interface InternalCallerGuards {
|
|
33
|
+
/**
|
|
34
|
+
* Allows only the listed callers.
|
|
35
|
+
*
|
|
36
|
+
* @param allowed Exact caller service names; must not be empty.
|
|
37
|
+
* @returns Express middleware that sets `req.internalCaller`.
|
|
38
|
+
* @throws Error at startup when `allowed` is empty.
|
|
39
|
+
*/
|
|
40
|
+
requireInternalCaller(allowed: readonly string[]): RequestHandler;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Builds the internal-caller guard for a service, bound to its internal path prefix and accepted credentials.
|
|
44
|
+
*
|
|
45
|
+
* @param options Path prefix, credentials and logger.
|
|
46
|
+
* @returns `{ requireInternalCaller }`.
|
|
47
|
+
* @throws Error when the prefix is not an absolute path; ConfigError when env credentials are malformed.
|
|
48
|
+
* @example
|
|
49
|
+
* const { requireInternalCaller } = createInternalCallerGuards({ pathPrefix: '/internal', logger });
|
|
50
|
+
* router.get('/internal/records/:id', requireInternalCaller(['alpha-service']), controller.get);
|
|
51
|
+
*/
|
|
52
|
+
export declare function createInternalCallerGuards(options: InternalCallerGuardOptions): InternalCallerGuards;
|
|
53
|
+
//# sourceMappingURL=internal-caller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-caller.d.ts","sourceRoot":"","sources":["../../../src/express/internal-caller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAyB,cAAc,EAAY,MAAM,SAAS,CAAC;AAI/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,OAAO,CAAC;QAChB,UAAU,OAAO;YACf,yEAAyE;YACzE,cAAc,CAAC,EAAE,MAAM,CAAC;SACzB;KACF;CACF;AAED,uDAAuD;AACvD,MAAM,WAAW,0BAA0B;IACzC,0FAA0F;IAC1F,UAAU,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,0DAA0D;AAC1D,MAAM,WAAW,oBAAoB;IACnC;;;;;;OAMG;IACH,qBAAqB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,CAAC;CACnE;AAID;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,0BAA0B,GAAG,oBAAoB,CA+BpG"}
|
|
@@ -1,20 +1,99 @@
|
|
|
1
1
|
import type { ErrorRequestHandler, NextFunction, Request, RequestHandler, Response } from 'express';
|
|
2
2
|
import type { ZodTypeAny } from 'zod';
|
|
3
3
|
import type { Logger } from '../types/index.js';
|
|
4
|
-
/**
|
|
5
|
-
export declare
|
|
4
|
+
/** An incoming correlation id is trusted only if it is 8–64 chars of `[A-Za-z0-9-]` (no log injection). */
|
|
5
|
+
export declare const CORRELATION_ID_PATTERN: RegExp;
|
|
6
|
+
/**
|
|
7
|
+
* Gives every request one correlation id and runs the rest of the request inside a
|
|
8
|
+
* {@link RequestContext}. A valid incoming `x-correlation-id` (see {@link CORRELATION_ID_PATTERN}) is
|
|
9
|
+
* kept; anything else is replaced with a new ULID. The id is echoed on the response, written back to
|
|
10
|
+
* the request header (so outbound calls forward it) and becomes every error body's `requestId`.
|
|
11
|
+
* Mount it first: correlation → json → routes → notFoundHandler → errorHandler.
|
|
12
|
+
*
|
|
13
|
+
* @param serviceName Recorded in the context (and so in log lines written without a service).
|
|
14
|
+
* @returns Express middleware.
|
|
15
|
+
* @example app.use(correlationMiddleware('orders'));
|
|
16
|
+
*/
|
|
17
|
+
export declare function correlationMiddleware(serviceName?: string): RequestHandler;
|
|
18
|
+
/**
|
|
19
|
+
* The request's correlation id (the source of every error body's `requestId`): the active request
|
|
20
|
+
* context's id, else the `x-correlation-id` header.
|
|
21
|
+
*
|
|
22
|
+
* @param req Express request.
|
|
23
|
+
* @returns The id, or undefined when neither is present.
|
|
24
|
+
* @example logger.info('Order placed', { correlationId: correlationId(req) });
|
|
25
|
+
*/
|
|
6
26
|
export declare function correlationId(req: Request): string | undefined;
|
|
7
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Real client IP: gateway-forwarded header first, then Express's `req.ip`.
|
|
29
|
+
*
|
|
30
|
+
* @param req Express request.
|
|
31
|
+
* @returns The IP, or null when unknown.
|
|
32
|
+
* @example const ip = clientIp(req);
|
|
33
|
+
*/
|
|
8
34
|
export declare function clientIp(req: Request): string | null;
|
|
35
|
+
/**
|
|
36
|
+
* The caller's IANA time zone as forwarded by the gateway.
|
|
37
|
+
*
|
|
38
|
+
* @param req Express request.
|
|
39
|
+
* @returns e.g. `Europe/Paris`, or null when not sent.
|
|
40
|
+
* @example formatInTimeZone(date, clientTimezone(req) ?? 'UTC');
|
|
41
|
+
*/
|
|
9
42
|
export declare function clientTimezone(req: Request): string | null;
|
|
43
|
+
/**
|
|
44
|
+
* The anonymous visitor id forwarded by the gateway (for anonymous visitor state, rate limits and analytics).
|
|
45
|
+
*
|
|
46
|
+
* @param req Express request.
|
|
47
|
+
* @returns The id, or null when not sent.
|
|
48
|
+
* @example const visitor = req.user?.id ?? anonId(req);
|
|
49
|
+
*/
|
|
10
50
|
export declare function anonId(req: Request): string | null;
|
|
11
51
|
type RequestPart = 'body' | 'query' | 'params';
|
|
12
|
-
/**
|
|
13
|
-
export
|
|
14
|
-
/**
|
|
52
|
+
/** Zod schemas for the parts of a request that {@link validate} checks. */
|
|
53
|
+
export type RequestSchemas = Partial<Record<RequestPart, ZodTypeAny>>;
|
|
54
|
+
/**
|
|
55
|
+
* Validates the request with Zod at the controller boundary. Each given part is parsed and
|
|
56
|
+
* `req[part]` is replaced with the parsed value, so unknown keys are stripped (or rejected with
|
|
57
|
+
* `.strict()`) and coercions/defaults apply. Every part is checked before failing, and the combined
|
|
58
|
+
* field errors are thrown as a 422 {@link ValidationError} for the error handler (body fields keep
|
|
59
|
+
* their path; params and query fields are prefixed, e.g. `params.id`).
|
|
60
|
+
*
|
|
61
|
+
* The older single-schema form `validate(schema, part = 'body')` still works.
|
|
62
|
+
*
|
|
63
|
+
* @param schemas `{ params?, query?, body? }`, or one schema.
|
|
64
|
+
* @param part With a single schema: the part it checks (default `body`).
|
|
65
|
+
* @returns Express middleware.
|
|
66
|
+
* @example router.patch('/:id', validate({ params: idParam, body: updateSchema }), controller.update);
|
|
67
|
+
*/
|
|
68
|
+
export declare function validate(schemas: RequestSchemas | ZodTypeAny, part?: RequestPart): RequestHandler;
|
|
69
|
+
/**
|
|
70
|
+
* Wraps an async handler so rejections reach the error middleware (needed on Express 4; harmless on 5).
|
|
71
|
+
*
|
|
72
|
+
* @param fn Async route handler.
|
|
73
|
+
* @returns A handler that forwards rejections to `next(err)`.
|
|
74
|
+
* @example router.get('/:id', asyncHandler(controller.get));
|
|
75
|
+
*/
|
|
15
76
|
export declare function asyncHandler<Req extends Request = Request>(fn: (req: Req, res: Response, next: NextFunction) => Promise<unknown>): RequestHandler;
|
|
16
|
-
/**
|
|
77
|
+
/**
|
|
78
|
+
* Last error middleware. Every body is `{ success: false, code, message, errors?, requestId }`:
|
|
79
|
+
* - body-parser failures → 400 BAD_REQUEST / 413 PAYLOAD_TOO_LARGE;
|
|
80
|
+
* - a thrown ZodError (e.g. from `schema.parse`) → 422 VALIDATION_FAILED with field errors;
|
|
81
|
+
* - AppError → its status, code and errors; 4xx keep their message, 5xx get a generic one; a
|
|
82
|
+
* `retryAfterSeconds` becomes the `Retry-After` header;
|
|
83
|
+
* - anything else → logged in full, answered 500 INTERNAL_ERROR with a generic message.
|
|
84
|
+
* `requestId` is the request context's correlation id (set by {@link correlationMiddleware}).
|
|
85
|
+
*
|
|
86
|
+
* @param logger Receives 5xx details (message, stack, path, correlation id); never sent to the client.
|
|
87
|
+
* @returns Express error middleware.
|
|
88
|
+
* @example app.use(notFoundHandler()); app.use(errorHandler(logger));
|
|
89
|
+
*/
|
|
17
90
|
export declare function errorHandler(logger?: Logger): ErrorRequestHandler;
|
|
91
|
+
/**
|
|
92
|
+
* Catch-all for unmatched routes: 404 NOT_FOUND with the request id. Mount after every router.
|
|
93
|
+
*
|
|
94
|
+
* @returns Express middleware.
|
|
95
|
+
* @example app.use(notFoundHandler()); app.use(errorHandler(logger));
|
|
96
|
+
*/
|
|
18
97
|
export declare function notFoundHandler(): RequestHandler;
|
|
19
98
|
export {};
|
|
20
99
|
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/express/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACpG,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/express/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACpG,OAAO,KAAK,EAAY,UAAU,EAAE,MAAM,KAAK,CAAC;AAMhD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,2GAA2G;AAC3G,eAAO,MAAM,sBAAsB,QAAyB,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,cAAc,CAQ1E;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAK9D;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAIpD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAG1D;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAGlD;AAED,KAAK,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE/C,2EAA2E;AAC3E,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;AActE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,EAAE,IAAI,GAAE,WAAoB,GAAG,cAAc,CAsBzG;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,SAAS,OAAO,GAAG,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,cAAc,CAIjJ;AAOD;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,mBAAmB,CA+BjE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,cAAc,CAIhD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Success-response helpers for Express controllers (HTTP layer only).
|
|
3
|
+
* They write the standard envelope `{ success: true, message, data, meta? }`, so controllers never
|
|
4
|
+
* hand-build bodies. Errors are not sent here: throw an AppError and let `errorHandler` answer.
|
|
5
|
+
*/
|
|
6
|
+
import type { Response } from 'express';
|
|
7
|
+
import type { CursorPage, CursorPageMeta, PaginationMeta } from '../types/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* 200 with the success envelope.
|
|
10
|
+
*
|
|
11
|
+
* @param res Express response.
|
|
12
|
+
* @param data The payload placed under `data`.
|
|
13
|
+
* @param message Optional human-readable message (default `Success`).
|
|
14
|
+
* @param meta Optional list metadata.
|
|
15
|
+
* @returns The Express response.
|
|
16
|
+
* @example ok(res, product, 'Product updated');
|
|
17
|
+
*/
|
|
18
|
+
export declare function ok<T>(res: Response, data: T, message?: string, meta?: PaginationMeta | CursorPageMeta): Response;
|
|
19
|
+
/**
|
|
20
|
+
* 201 with the success envelope, for a newly created resource.
|
|
21
|
+
*
|
|
22
|
+
* @param res Express response.
|
|
23
|
+
* @param data The created resource (or its id).
|
|
24
|
+
* @param message Optional message (default `Created`).
|
|
25
|
+
* @returns The Express response.
|
|
26
|
+
*
|
|
27
|
+
* @example created(res, { id }, 'Shop created');
|
|
28
|
+
*/
|
|
29
|
+
export declare function created<T>(res: Response, data: T, message?: string): Response;
|
|
30
|
+
/**
|
|
31
|
+
* 200 with a cursor-paginated list: `data` is the items, `meta` is `{ limit, nextCursor, hasMore }`.
|
|
32
|
+
*
|
|
33
|
+
* @param res Express response.
|
|
34
|
+
* @param page The page from the service (see `buildCursorPageMeta`).
|
|
35
|
+
* @param message Optional message.
|
|
36
|
+
* @returns The Express response.
|
|
37
|
+
*
|
|
38
|
+
* @example okPage(res, await service.list(scope, { cursor, limit }));
|
|
39
|
+
*/
|
|
40
|
+
export declare function okPage<T>(res: Response, page: CursorPage<T>, message?: string): Response;
|
|
41
|
+
//# sourceMappingURL=respond.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"respond.d.ts","sourceRoot":"","sources":["../../../src/express/respond.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEpF;;;;;;;;;GASG;AACH,wBAAgB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,cAAc,GAAG,QAAQ,CAGhH;AAED;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,SAAY,GAAG,QAAQ,CAEhF;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAExF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { RequestHandler } from 'express';
|
|
2
|
+
import { type StepUpCatalogue } from '../identity/step-up.js';
|
|
3
|
+
/** One step-up guard a service mounted, as listed by `declaredStepUpRoutes()`. */
|
|
4
|
+
export interface DeclaredStepUpRoute<S extends string = string> {
|
|
5
|
+
scope: S;
|
|
6
|
+
singleUse: boolean;
|
|
7
|
+
/** Route label such as `POST /v1/refunds/:id`, when the caller gave one. */
|
|
8
|
+
route?: string;
|
|
9
|
+
}
|
|
10
|
+
/** Options for {@link createStepUpGuards}. */
|
|
11
|
+
export interface StepUpGuardOptions<S extends string> {
|
|
12
|
+
/** The app's scope catalogue from `defineStepUpScopes`. */
|
|
13
|
+
catalogue: StepUpCatalogue<S>;
|
|
14
|
+
/** How old a step-up may be (default 5 minutes). */
|
|
15
|
+
windowMs?: number;
|
|
16
|
+
/** Clock for tests. */
|
|
17
|
+
now?: () => number;
|
|
18
|
+
}
|
|
19
|
+
/** The guard factory and its registry, from {@link createStepUpGuards}. */
|
|
20
|
+
export interface StepUpGuards<S extends string> {
|
|
21
|
+
/** Middleware: 403 STEP_UP_REQUIRED `{ scope }` unless the gateway-verified step-up time is fresh. */
|
|
22
|
+
requireStepUp(scope: S, route?: string): RequestHandler;
|
|
23
|
+
/** Every guard created so far, so the service can compare its scopes with the gateway route map. */
|
|
24
|
+
declaredStepUpRoutes(): ReadonlyArray<DeclaredStepUpRoute<S>>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Builds the step-up guard for an app's catalogue. Must run after `authenticateFromGateway`, which sets
|
|
28
|
+
* `req.user.stepUpAt` only from the signed `x-step-up-at` header. Single-use proofs are consumed by the
|
|
29
|
+
* gateway; the service sees only the verified time. Throws at startup for an unknown scope or a bad window.
|
|
30
|
+
*
|
|
31
|
+
* @param options Catalogue, freshness window and clock.
|
|
32
|
+
* @returns `requireStepUp(scope, route?)` and `declaredStepUpRoutes()`.
|
|
33
|
+
* @example
|
|
34
|
+
* const { requireStepUp } = createStepUpGuards({ catalogue: stepUpScopes });
|
|
35
|
+
* router.post('/refunds/:id', requirePermission('refunds.create'), requireStepUp('refund-large', 'POST /refunds/:id'), controller.refund);
|
|
36
|
+
*/
|
|
37
|
+
export declare function createStepUpGuards<S extends string>(options: StepUpGuardOptions<S>): StepUpGuards<S>;
|
|
38
|
+
//# sourceMappingURL=step-up.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-up.d.ts","sourceRoot":"","sources":["../../../src/express/step-up.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,cAAc,EAAY,MAAM,SAAS,CAAC;AAE/E,OAAO,EAC2D,KAAK,eAAe,EACrF,MAAM,wBAAwB,CAAC;AAGhC,kFAAkF;AAClF,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC5D,KAAK,EAAE,CAAC,CAAC;IACT,SAAS,EAAE,OAAO,CAAC;IACnB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,8CAA8C;AAC9C,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,MAAM;IAClD,2DAA2D;IAC3D,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAC9B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,2EAA2E;AAC3E,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM;IAC5C,sGAAsG;IACtG,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;IACxD,oGAAoG;IACpG,oBAAoB,IAAI,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAqBpG"}
|
|
@@ -1,34 +1,6 @@
|
|
|
1
|
-
import type { Logger } from '../types/index.js';
|
|
2
|
-
export * from './safe-fetch.js';
|
|
3
|
-
export interface ServiceClientOptions {
|
|
4
|
-
/** e.g. `http://auth-admin-service:4001` */
|
|
5
|
-
baseUrl: string;
|
|
6
|
-
/** Sent as `x-internal-service-secret`. */
|
|
7
|
-
internalSecret: string;
|
|
8
|
-
callerService: string;
|
|
9
|
-
timeoutMs?: number;
|
|
10
|
-
/** Retries for network errors and 502/503/504 on idempotent methods. */
|
|
11
|
-
retries?: number;
|
|
12
|
-
logger?: Logger;
|
|
13
|
-
}
|
|
14
|
-
export interface RequestOptions {
|
|
15
|
-
query?: Record<string, string | number | boolean | undefined>;
|
|
16
|
-
body?: unknown;
|
|
17
|
-
headers?: Record<string, string>;
|
|
18
|
-
correlationId?: string;
|
|
19
|
-
timeoutMs?: number;
|
|
20
|
-
}
|
|
21
|
-
export interface ServiceClient {
|
|
22
|
-
get<T>(path: string, options?: RequestOptions): Promise<T>;
|
|
23
|
-
post<T>(path: string, options?: RequestOptions): Promise<T>;
|
|
24
|
-
put<T>(path: string, options?: RequestOptions): Promise<T>;
|
|
25
|
-
patch<T>(path: string, options?: RequestOptions): Promise<T>;
|
|
26
|
-
delete<T>(path: string, options?: RequestOptions): Promise<T>;
|
|
27
|
-
}
|
|
28
1
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* and timeouts into 503s.
|
|
2
|
+
* Outbound HTTP helpers. Service-to-service calls use `createInternalClient` (root export); calls to
|
|
3
|
+
* tenant-supplied URLs go through the SSRF-guarded {@link createSafeFetcher}.
|
|
32
4
|
*/
|
|
33
|
-
export
|
|
5
|
+
export * from './safe-fetch.js';
|
|
34
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/http/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/http/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,iBAAiB,CAAC"}
|