@beignet/core 0.0.13 → 0.0.15

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 (70) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +198 -2
  3. package/dist/entitlements/index.d.ts +234 -0
  4. package/dist/entitlements/index.d.ts.map +1 -0
  5. package/dist/entitlements/index.js +172 -0
  6. package/dist/entitlements/index.js.map +1 -0
  7. package/dist/error-reporting/index.d.ts +131 -0
  8. package/dist/error-reporting/index.d.ts.map +1 -0
  9. package/dist/error-reporting/index.js +112 -0
  10. package/dist/error-reporting/index.js.map +1 -0
  11. package/dist/flags/index.d.ts +293 -0
  12. package/dist/flags/index.d.ts.map +1 -0
  13. package/dist/flags/index.js +204 -0
  14. package/dist/flags/index.js.map +1 -0
  15. package/dist/locks/index.d.ts +155 -0
  16. package/dist/locks/index.d.ts.map +1 -0
  17. package/dist/locks/index.js +248 -0
  18. package/dist/locks/index.js.map +1 -0
  19. package/dist/payments/index.d.ts +430 -0
  20. package/dist/payments/index.d.ts.map +1 -0
  21. package/dist/payments/index.js +230 -0
  22. package/dist/payments/index.js.map +1 -0
  23. package/dist/ports/index.d.ts +74 -1
  24. package/dist/ports/index.d.ts.map +1 -1
  25. package/dist/ports/index.js +38 -0
  26. package/dist/ports/index.js.map +1 -1
  27. package/dist/ports/policy.d.ts +104 -0
  28. package/dist/ports/policy.d.ts.map +1 -1
  29. package/dist/ports/policy.js +102 -7
  30. package/dist/ports/policy.js.map +1 -1
  31. package/dist/search/index.d.ts +175 -0
  32. package/dist/search/index.d.ts.map +1 -0
  33. package/dist/search/index.js +344 -0
  34. package/dist/search/index.js.map +1 -0
  35. package/dist/server/hooks/error-reporting.d.ts +79 -0
  36. package/dist/server/hooks/error-reporting.d.ts.map +1 -0
  37. package/dist/server/hooks/error-reporting.js +147 -0
  38. package/dist/server/hooks/error-reporting.js.map +1 -0
  39. package/dist/server/hooks/index.d.ts +1 -0
  40. package/dist/server/hooks/index.d.ts.map +1 -1
  41. package/dist/server/hooks/index.js +1 -0
  42. package/dist/server/hooks/index.js.map +1 -1
  43. package/dist/server/server.d.ts +5 -0
  44. package/dist/server/server.d.ts.map +1 -1
  45. package/dist/server/server.js +9 -1
  46. package/dist/server/server.js.map +1 -1
  47. package/dist/server/use-case-route.d.ts +2 -2
  48. package/dist/testing/index.d.ts +46 -1
  49. package/dist/testing/index.d.ts.map +1 -1
  50. package/dist/testing/index.js +33 -1
  51. package/dist/testing/index.js.map +1 -1
  52. package/dist/webhooks/index.d.ts +195 -0
  53. package/dist/webhooks/index.d.ts.map +1 -0
  54. package/dist/webhooks/index.js +313 -0
  55. package/dist/webhooks/index.js.map +1 -0
  56. package/package.json +29 -1
  57. package/src/entitlements/index.ts +479 -0
  58. package/src/error-reporting/index.ts +273 -0
  59. package/src/flags/index.ts +608 -0
  60. package/src/locks/index.ts +440 -0
  61. package/src/payments/index.ts +699 -0
  62. package/src/ports/index.ts +231 -0
  63. package/src/ports/policy.ts +272 -7
  64. package/src/search/index.ts +632 -0
  65. package/src/server/hooks/error-reporting.ts +249 -0
  66. package/src/server/hooks/index.ts +8 -0
  67. package/src/server/server.ts +20 -0
  68. package/src/server/use-case-route.ts +2 -2
  69. package/src/testing/index.ts +83 -1
  70. package/src/webhooks/index.ts +555 -0
@@ -15,19 +15,29 @@
15
15
  * - `AuthPort` – interface for request authentication implementations
16
16
  * - `AuditLogPort` – interface for audit/activity log implementations
17
17
  * - `ClockPort` – interface for deterministic time
18
+ * - `EntitlementsPort` – interface for product access checks
18
19
  * - `IdGeneratorPort` – interface for deterministic id generation
19
20
  * - `LoggerPort` – interface for structured application logging
20
21
  * - `GatePort` – interface for application authorization policies
21
22
  * - `RateLimitPort` – interface for rate limiting implementations
22
23
  * - `CachePort` – interface for cache implementations
23
24
  * - `StoragePort` – interface for object/file storage implementations
25
+ * - `FlagsPort` – interface for feature flag evaluation implementations
26
+ * - `ErrorReporterPort` – interface for production error reporting
27
+ * - `LocksPort` – interface for lease-backed distributed locks
24
28
  *
25
29
  * Dedicated framework areas own their capability-specific APIs:
30
+ * - `@beignet/core/entitlements` owns product access helpers and test adapters
31
+ * - `@beignet/core/error-reporting` owns error reporting helpers and test adapters
32
+ * - `@beignet/core/flags` owns feature flag helpers and test adapters
26
33
  * - `@beignet/core/idempotency` owns idempotency helpers and test adapters
34
+ * - `@beignet/core/locks` owns lease-backed lock helpers and test adapters
27
35
  * - `@beignet/core/mail` owns `MailerPort` and mail test adapters
28
36
  * - `@beignet/core/notifications` owns notification helpers and test adapters
29
37
  * - `@beignet/core/outbox` owns durable outbox helpers and test adapters
38
+ * - `@beignet/core/payments` owns `PaymentsPort` and payment test adapters
30
39
  * - `@beignet/core/schedules` owns schedule definitions and runners
40
+ * - `@beignet/core/webhooks` owns inbound webhook definitions and verifiers
31
41
  */
32
42
  /**
33
43
  * A generic map of named "ports" (outbound dependencies) that your
@@ -103,10 +113,42 @@ export declare function definePorts<P extends AnyPorts>(): <const Deferred exten
103
113
  export interface PortsContext<P extends AnyPorts = AnyPorts> {
104
114
  ports: P;
105
115
  }
116
+ /**
117
+ * Entitlement port exports.
118
+ */
119
+ export type { CreateEntitlementsOptions, CreateStaticEntitlementsOptions, EntitlementAllowedDecision, EntitlementCheckInput, EntitlementDecision, EntitlementDeniedDecision, EntitlementKey, EntitlementResolver, EntitlementResolverResult, EntitlementSubject, EntitlementsContext, EntitlementsPort, RequireEntitlementOptions, StaticEntitlementGrantMap, } from "../entitlements/index.js";
120
+ /**
121
+ * Entitlement helper exports.
122
+ */
123
+ export { allowEntitlement, createEntitlements, createStaticEntitlements, denyEntitlement, EntitlementRequiredError, requireEntitlement, } from "../entitlements/index.js";
124
+ /**
125
+ * Error reporting port exports.
126
+ */
127
+ export type { ErrorReportContext, ErrorReporterFlushOptions, ErrorReporterPort, ErrorReportJsonValue, ErrorReportLevel, ErrorReportOptions, ErrorReportResult, ErrorReportTags, ErrorReportUser, MemoryErrorReport, MemoryErrorReporterPort, MemoryReportedException, MemoryReportedMessage, } from "../error-reporting/index.js";
128
+ /**
129
+ * Error reporting helper exports.
130
+ */
131
+ export { createMemoryErrorReporter, createNoopErrorReporter, reportException, reportMessage, } from "../error-reporting/index.js";
132
+ /**
133
+ * Feature flag port exports.
134
+ */
135
+ export type { FlagDef, FlagEvaluationContext, FlagEvaluationDetails, FlagEvaluationOptions, FlagExposureOptions, FlagsPort, FlagTrackOptions, FlagValue, MemoryFlagsPort, } from "../flags/index.js";
136
+ /**
137
+ * Feature flag helper exports.
138
+ */
139
+ export { createMemoryFlags, createStaticFlags, defineFlag, defineFlagRegistry, defineFlags, evaluateFlag, getFlagDetails, } from "../flags/index.js";
106
140
  /**
107
141
  * Idempotency port exports.
108
142
  */
109
143
  export type { IdempotencyCompleteInput, IdempotencyFailInput, IdempotencyPort, IdempotencyReservation, IdempotencyReserveInput, } from "../idempotency/index.js";
144
+ /**
145
+ * Lease-backed lock port exports.
146
+ */
147
+ export type { CreateMemoryLocksOptions, LeaseAcquireOptions, LeaseAcquireResult, LeaseHandle, LeaseMetadata, LeaseRenewOptions, LocksPort, MemoryLeaseRecord, MemoryLocksPort, MemoryLocksProviderOptions, MemoryLocksProviderPorts, } from "../locks/index.js";
148
+ /**
149
+ * Lease-backed lock helper exports.
150
+ */
151
+ export { acquireLease, createMemoryLocks, createMemoryLocksProvider, LeaseOptionsError, withLease, } from "../locks/index.js";
110
152
  /**
111
153
  * Notification port exports.
112
154
  */
@@ -115,6 +157,37 @@ export type { MemoryNotificationDelivery, MemoryNotificationPort, NotificationCh
115
157
  * Transactional outbox port exports.
116
158
  */
117
159
  export type { ClaimedOutboxMessage, OutboxClaimBatchOptions, OutboxEnqueueInput, OutboxMarkDeliveredInput, OutboxMarkFailedInput, OutboxMessage, OutboxMessageKind, OutboxMessageStatus, OutboxPort, } from "../outbox/index.js";
160
+ /**
161
+ * Payments port exports.
162
+ */
163
+ export type { BillingPortalSession, CheckoutSession, CreateBillingPortalSessionInput, CreateCheckoutSessionInput, CreateRefundInput, MemoryBillingPortalSession, MemoryCheckoutSession, MemoryPaymentsPort, MemoryRefund, PaymentCheckoutLineItem, PaymentCheckoutMode, PaymentMetadata, PaymentRefundReason, PaymentsPort, PaymentWebhookEvent, PaymentWebhookRawBody, Refund, VerifyPaymentWebhookInput, } from "../payments/index.js";
164
+ /**
165
+ * Payments helper exports.
166
+ */
167
+ export { createMemoryPayments, createMemoryPaymentsProvider, PaymentProviderError, } from "../payments/index.js";
168
+ /**
169
+ * Search port exports.
170
+ *
171
+ * Search has a dedicated subpath. Re-export the common app port types and
172
+ * helpers here so apps can import shared port surfaces from one place.
173
+ */
174
+ export type { DefineSearchIndexOptions, MemorySearchIndexState, MemorySearchPort, MemorySearchProviderOptions, MemorySearchProviderPorts, SearchDeleteResult, SearchDocument, SearchDocumentBase, SearchFilters, SearchFilterValue, SearchIndexDef, SearchIndexResult, SearchPort, SearchPrimitive, SearchQuery, SearchResultPage, SearchResults, SearchSort, SearchValue, } from "../search/index.js";
175
+ /**
176
+ * Search helper exports.
177
+ */
178
+ export { createMemorySearch, createMemorySearchProvider, defineSearchIndex, indexSearchDocuments, SearchOptionsError, searchDocuments, } from "../search/index.js";
179
+ /**
180
+ * Webhook exports.
181
+ *
182
+ * Webhooks have a dedicated subpath. Re-export the common app-facing
183
+ * definitions and helpers here so production concerns can be imported from one
184
+ * shared port toolbox when useful.
185
+ */
186
+ export type { CreateHmacWebhookVerifierOptions, CreateMemoryWebhookVerifierOptions, DefineWebhookOptions, InferSchemaOutput, InferWebhookEvent, MemoryWebhookVerifier, VerifyWebhookInput, VerifyWebhookOptions, WebhookDef, WebhookEvent, WebhookEventSchemas, WebhookHeaders, WebhookRawBody, WebhookVerifier, } from "../webhooks/index.js";
187
+ /**
188
+ * Webhook helper exports.
189
+ */
190
+ export { createHmacWebhookVerifier, createMemoryWebhookVerifier, defineWebhook, parseWebhookEvent, verifyWebhook, WebhookOptionsError, WebhookValidationError, WebhookVerificationError, } from "../webhooks/index.js";
118
191
  /**
119
192
  * Audit log port exports.
120
193
  */
@@ -174,7 +247,7 @@ export { createMemoryLogger, createNoopLogger } from "./logger.js";
174
247
  /**
175
248
  * Policy and authorization gate type exports.
176
249
  */
177
- export type { BoundGate, CreateGateOptions, GateAllowedDecision, GateContext, GateDecision, GateDeniedDecision, GateDenyHandler, GatePolicyResult, GatePort, PolicyContextFromDefinitions, PolicyDefinition, PolicyMapFromDefinitions, PolicyResolver, PolicySubjectArgs, } from "./policy.js";
250
+ export type { BoundGate, CreateGateOptions, GateAllowedDecision, GateContext, GateDecision, GateDecisionObservation, GateDecisionObserver, GateDecisionSource, GateDeniedDecision, GateDenyHandler, GatePolicyResult, GatePort, PolicyBatch, PolicyBatchBooleanMap, PolicyBatchCheck, PolicyBatchDecisionMap, PolicyContextFromDefinitions, PolicyDefinition, PolicyMapFromDefinitions, PolicyResolver, PolicySubjectArgs, } from "./policy.js";
178
251
  /**
179
252
  * Policy and authorization gate helper exports.
180
253
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"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"}
@@ -15,19 +15,29 @@
15
15
  * - `AuthPort` – interface for request authentication implementations
16
16
  * - `AuditLogPort` – interface for audit/activity log implementations
17
17
  * - `ClockPort` – interface for deterministic time
18
+ * - `EntitlementsPort` – interface for product access checks
18
19
  * - `IdGeneratorPort` – interface for deterministic id generation
19
20
  * - `LoggerPort` – interface for structured application logging
20
21
  * - `GatePort` – interface for application authorization policies
21
22
  * - `RateLimitPort` – interface for rate limiting implementations
22
23
  * - `CachePort` – interface for cache implementations
23
24
  * - `StoragePort` – interface for object/file storage implementations
25
+ * - `FlagsPort` – interface for feature flag evaluation implementations
26
+ * - `ErrorReporterPort` – interface for production error reporting
27
+ * - `LocksPort` – interface for lease-backed distributed locks
24
28
  *
25
29
  * Dedicated framework areas own their capability-specific APIs:
30
+ * - `@beignet/core/entitlements` owns product access helpers and test adapters
31
+ * - `@beignet/core/error-reporting` owns error reporting helpers and test adapters
32
+ * - `@beignet/core/flags` owns feature flag helpers and test adapters
26
33
  * - `@beignet/core/idempotency` owns idempotency helpers and test adapters
34
+ * - `@beignet/core/locks` owns lease-backed lock helpers and test adapters
27
35
  * - `@beignet/core/mail` owns `MailerPort` and mail test adapters
28
36
  * - `@beignet/core/notifications` owns notification helpers and test adapters
29
37
  * - `@beignet/core/outbox` owns durable outbox helpers and test adapters
38
+ * - `@beignet/core/payments` owns `PaymentsPort` and payment test adapters
30
39
  * - `@beignet/core/schedules` owns schedule definitions and runners
40
+ * - `@beignet/core/webhooks` owns inbound webhook definitions and verifiers
31
41
  */
32
42
  import { createUnboundPort } from "./unbound.js";
33
43
  export function definePorts(ports) {
@@ -42,6 +52,34 @@ export function definePorts(ports) {
42
52
  return result;
43
53
  };
44
54
  }
55
+ /**
56
+ * Entitlement helper exports.
57
+ */
58
+ export { allowEntitlement, createEntitlements, createStaticEntitlements, denyEntitlement, EntitlementRequiredError, requireEntitlement, } from "../entitlements/index.js";
59
+ /**
60
+ * Error reporting helper exports.
61
+ */
62
+ export { createMemoryErrorReporter, createNoopErrorReporter, reportException, reportMessage, } from "../error-reporting/index.js";
63
+ /**
64
+ * Feature flag helper exports.
65
+ */
66
+ export { createMemoryFlags, createStaticFlags, defineFlag, defineFlagRegistry, defineFlags, evaluateFlag, getFlagDetails, } from "../flags/index.js";
67
+ /**
68
+ * Lease-backed lock helper exports.
69
+ */
70
+ export { acquireLease, createMemoryLocks, createMemoryLocksProvider, LeaseOptionsError, withLease, } from "../locks/index.js";
71
+ /**
72
+ * Payments helper exports.
73
+ */
74
+ export { createMemoryPayments, createMemoryPaymentsProvider, PaymentProviderError, } from "../payments/index.js";
75
+ /**
76
+ * Search helper exports.
77
+ */
78
+ export { createMemorySearch, createMemorySearchProvider, defineSearchIndex, indexSearchDocuments, SearchOptionsError, searchDocuments, } from "../search/index.js";
79
+ /**
80
+ * Webhook helper exports.
81
+ */
82
+ export { createHmacWebhookVerifier, createMemoryWebhookVerifier, defineWebhook, parseWebhookEvent, verifyWebhook, WebhookOptionsError, WebhookValidationError, WebhookVerificationError, } from "../webhooks/index.js";
45
83
  /**
46
84
  * Audit log helper exports.
47
85
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAiEjD,MAAM,UAAU,WAAW,CACzB,KAAS;IAMT,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CAAC,UAAU,EAAE,EAAE;QACpB,MAAM,MAAM,GAAa,EAAE,GAAI,UAAU,CAAC,KAAkB,EAAE,CAAC;QAC/D,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,MAAW,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC;AA4ED;;GAEG;AACH,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAWpB;;GAEG;AACH,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,eAAe,EACf,WAAW,EACX,aAAa,EACb,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB;;GAEG;AACH,OAAO,EACL,kBAAkB,GAGnB,MAAM,cAAc,CAAC;AAKtB;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAK/C;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAmBlE;;GAEG;AACH,OAAO,EACL,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAU3B;;GAEG;AACH,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAoBnE;;GAEG;AACH,OAAO,EACL,KAAK,EACL,UAAU,EACV,YAAY,EACZ,IAAI,EACJ,sBAAsB,GACvB,MAAM,aAAa,CAAC;AASrB;;GAEG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D;;GAEG;AACH,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EAKd,aAAa,EACb,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAcxB;;GAEG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChE;;GAEG;AACH,OAAO,EAEL,yBAAyB,EACzB,oBAAoB,GAMrB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"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"}
@@ -50,6 +50,35 @@ export type PolicyContext<TResolver> = TResolver extends (ctx: infer Ctx, ...arg
50
50
  * Infer whether an ability needs a subject argument.
51
51
  */
52
52
  export type PolicySubjectArgs<TResolver> = TResolver extends (...args: infer TArgs) => MaybePromise<GatePolicyResult> ? TArgs extends [unknown, infer Subject] ? [subject: Subject] : [] : [];
53
+ /**
54
+ * One authorization check accepted by batch gate APIs.
55
+ */
56
+ export type PolicyBatchCheck<TPolicies extends readonly PolicyDefinition[]> = {
57
+ [TAbility in keyof PolicyMapFromDefinitions<TPolicies> & string]: readonly [
58
+ ability: TAbility,
59
+ ...subject: PolicySubjectArgs<PolicyMapFromDefinitions<TPolicies>[TAbility]>
60
+ ];
61
+ }[keyof PolicyMapFromDefinitions<TPolicies> & string];
62
+ /**
63
+ * Keyed authorization checks accepted by `inspectMany(...)` and `canMany(...)`.
64
+ */
65
+ export type PolicyBatch<TPolicies extends readonly PolicyDefinition[]> = Record<string, PolicyBatchCheck<TPolicies>>;
66
+ /**
67
+ * Full decision map returned by `inspectMany(...)`.
68
+ */
69
+ export type PolicyBatchDecisionMap<TBatch extends PolicyBatch<readonly PolicyDefinition[]>> = {
70
+ [TKey in keyof TBatch]: GateDecision;
71
+ };
72
+ /**
73
+ * Boolean decision map returned by `canMany(...)`.
74
+ */
75
+ export type PolicyBatchBooleanMap<TBatch extends PolicyBatch<readonly PolicyDefinition[]>> = {
76
+ [TKey in keyof TBatch]: boolean;
77
+ };
78
+ /**
79
+ * Gate method that produced a policy decision observation.
80
+ */
81
+ export type GateDecisionSource = "can" | "inspect" | "authorize" | "canMany" | "inspectMany";
53
82
  type UnionToIntersection<T> = (T extends unknown ? (value: T) => void : never) extends (value: infer U) => void ? U : never;
54
83
  /**
55
84
  * Merge the ability maps from multiple policy definitions.
@@ -77,10 +106,18 @@ export type BoundGate<TPolicies extends readonly PolicyDefinition[]> = {
77
106
  * Return only whether the ability is allowed.
78
107
  */
79
108
  can<TAbility extends keyof PolicyMapFromDefinitions<TPolicies> & string>(ability: TAbility, ...subject: PolicySubjectArgs<PolicyMapFromDefinitions<TPolicies>[TAbility]>): Promise<boolean>;
109
+ /**
110
+ * Return keyed boolean decisions for several abilities.
111
+ */
112
+ canMany<const TBatch extends PolicyBatch<TPolicies>>(checks: TBatch): Promise<PolicyBatchBooleanMap<TBatch>>;
80
113
  /**
81
114
  * Return the full allow/deny decision without throwing.
82
115
  */
83
116
  inspect<TAbility extends keyof PolicyMapFromDefinitions<TPolicies> & string>(ability: TAbility, ...subject: PolicySubjectArgs<PolicyMapFromDefinitions<TPolicies>[TAbility]>): Promise<GateDecision>;
117
+ /**
118
+ * Return keyed allow/deny decisions for several abilities.
119
+ */
120
+ inspectMany<const TBatch extends PolicyBatch<TPolicies>>(checks: TBatch): Promise<PolicyBatchDecisionMap<TBatch>>;
84
121
  /**
85
122
  * Return an allowed decision or throw for denied abilities.
86
123
  */
@@ -125,10 +162,18 @@ export type GatePort<TContext, TPolicies extends readonly PolicyDefinition[] = r
125
162
  * Return only whether the ability is allowed for a context.
126
163
  */
127
164
  can<TAbility extends keyof PolicyMapFromDefinitions<TPolicies> & string>(ctx: TContext, ability: TAbility, ...subject: PolicySubjectArgs<PolicyMapFromDefinitions<TPolicies>[TAbility]>): Promise<boolean>;
165
+ /**
166
+ * Return keyed boolean decisions for several abilities.
167
+ */
168
+ canMany<const TBatch extends PolicyBatch<TPolicies>>(ctx: TContext, checks: TBatch): Promise<PolicyBatchBooleanMap<TBatch>>;
128
169
  /**
129
170
  * Return the full allow/deny decision for a context without throwing.
130
171
  */
131
172
  inspect<TAbility extends keyof PolicyMapFromDefinitions<TPolicies> & string>(ctx: TContext, ability: TAbility, ...subject: PolicySubjectArgs<PolicyMapFromDefinitions<TPolicies>[TAbility]>): Promise<GateDecision>;
173
+ /**
174
+ * Return keyed allow/deny decisions for several abilities.
175
+ */
176
+ inspectMany<const TBatch extends PolicyBatch<TPolicies>>(ctx: TContext, checks: TBatch): Promise<PolicyBatchDecisionMap<TBatch>>;
132
177
  /**
133
178
  * Return an allowed decision or throw for denied abilities.
134
179
  */
@@ -142,6 +187,59 @@ export type GateDenyHandler<TContext> = (decision: GateDeniedDecision, params: {
142
187
  ability: string;
143
188
  subject?: unknown;
144
189
  }) => MaybePromise<Error | undefined>;
190
+ /**
191
+ * Best-effort policy decision observation emitted by a gate.
192
+ *
193
+ * Observers are for diagnostics and audit-style integrations only. They do not
194
+ * participate in authorization control flow and thrown/rejected observer errors
195
+ * are ignored.
196
+ */
197
+ export type GateDecisionObservation<TContext> = {
198
+ /**
199
+ * Gate method that produced the decision.
200
+ */
201
+ source: GateDecisionSource;
202
+ /**
203
+ * Key from a batch input object, when the decision came from a batch call.
204
+ */
205
+ batchKey?: string;
206
+ /**
207
+ * Application context used for policy evaluation.
208
+ */
209
+ ctx: TContext;
210
+ /**
211
+ * Ability being evaluated.
212
+ */
213
+ ability: string;
214
+ /**
215
+ * Optional subject passed to the policy.
216
+ */
217
+ subject?: unknown;
218
+ /**
219
+ * Normalized decision, when policy evaluation returned normally.
220
+ */
221
+ decision?: GateDecision;
222
+ /**
223
+ * Error thrown by the policy resolver, when evaluation failed.
224
+ */
225
+ error?: unknown;
226
+ /**
227
+ * Policy evaluation duration, excluding observer work.
228
+ */
229
+ durationMs: number;
230
+ /**
231
+ * Correlation fields copied from the context when present.
232
+ */
233
+ requestId?: string;
234
+ traceId?: string;
235
+ spanId?: string;
236
+ parentSpanId?: string;
237
+ traceparent?: string;
238
+ };
239
+ /**
240
+ * Best-effort observer called after each gate decision or resolver error.
241
+ */
242
+ export type GateDecisionObserver<TContext> = (observation: GateDecisionObservation<TContext>) => MaybePromise<void>;
145
243
  /**
146
244
  * Options for `createGate(...)`.
147
245
  */
@@ -154,6 +252,12 @@ export type CreateGateOptions<TContext, TPolicies extends readonly PolicyDefinit
154
252
  * Optional mapper for denied authorization decisions.
155
253
  */
156
254
  onDeny?: GateDenyHandler<TContext>;
255
+ /**
256
+ * Optional best-effort observer for policy decisions.
257
+ *
258
+ * This hook is diagnostic only: it cannot change decisions or thrown errors.
259
+ */
260
+ onDecision?: GateDecisionObserver<TContext>;
157
261
  };
158
262
  /**
159
263
  * Default error thrown by `authorize(...)` when a policy denies access.
@@ -1 +1 @@
1
- {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/ports/policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/ports/policy.ts"],"names":[],"mappings":"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"}
@@ -71,6 +71,7 @@ export function definePolicy(policies) {
71
71
  */
72
72
  export function createGate(options) {
73
73
  const registry = new Map();
74
+ const observeDecision = createDecisionObserver(options.onDecision);
74
75
  for (const definition of options.policies) {
75
76
  for (const [ability, resolver] of Object.entries(definition.policies)) {
76
77
  if (registry.has(ability)) {
@@ -79,28 +80,73 @@ export function createGate(options) {
79
80
  registry.set(ability, resolver);
80
81
  }
81
82
  }
82
- async function inspect(ctx, ability, subject) {
83
+ async function evaluate(ctx, ability, subject, source = "inspect", batchKey) {
84
+ const startedAt = policyNow();
83
85
  const resolver = registry.get(ability);
84
86
  if (!resolver) {
85
- return deny({
87
+ const decision = deny({
86
88
  reason: `No policy registered for "${ability}".`,
87
89
  code: "POLICY_NOT_FOUND",
88
90
  });
91
+ observeDecision({
92
+ source,
93
+ batchKey,
94
+ ctx,
95
+ ability,
96
+ subject,
97
+ decision,
98
+ durationMs: policyNow() - startedAt,
99
+ });
100
+ return decision;
101
+ }
102
+ try {
103
+ const result = await resolver(ctx, subject);
104
+ const decision = normalizeDecision(result);
105
+ observeDecision({
106
+ source,
107
+ batchKey,
108
+ ctx,
109
+ ability,
110
+ subject,
111
+ decision,
112
+ durationMs: policyNow() - startedAt,
113
+ });
114
+ return decision;
115
+ }
116
+ catch (error) {
117
+ observeDecision({
118
+ source,
119
+ batchKey,
120
+ ctx,
121
+ ability,
122
+ subject,
123
+ error,
124
+ durationMs: policyNow() - startedAt,
125
+ });
126
+ throw error;
89
127
  }
90
- const result = await resolver(ctx, subject);
91
- return normalizeDecision(result);
92
128
  }
93
129
  async function authorize(ctx, ability, subject) {
94
- const decision = await inspect(ctx, ability, subject);
130
+ const decision = await evaluate(ctx, ability, subject, "authorize");
95
131
  if (decision.allowed)
96
132
  return decision;
97
133
  const thrown = await options.onDeny?.(decision, { ctx, ability, subject });
98
134
  throw thrown ?? new GateAuthorizationError(decision);
99
135
  }
136
+ async function inspectMany(ctx, checks, source) {
137
+ const decisions = {};
138
+ for (const [batchKey, check] of Object.entries(checks)) {
139
+ const [ability, subject] = check;
140
+ decisions[batchKey] = await evaluate(ctx, ability, subject, source, batchKey);
141
+ }
142
+ return decisions;
143
+ }
100
144
  function bind(ctx) {
101
145
  return {
102
146
  can: async (ability, ...subject) => gate.can(ctx, ability, ...subject),
147
+ canMany: async (checks) => gate.canMany(ctx, checks),
103
148
  inspect: async (ability, ...subject) => gate.inspect(ctx, ability, ...subject),
149
+ inspectMany: async (checks) => gate.inspectMany(ctx, checks),
104
150
  authorize: async (ability, ...subject) => gate.authorize(ctx, ability, ...subject),
105
151
  };
106
152
  }
@@ -118,9 +164,19 @@ export function createGate(options) {
118
164
  bind,
119
165
  attach,
120
166
  async can(ctx, ability, ...subject) {
121
- return (await inspect(ctx, ability, firstSubject(subject))).allowed;
167
+ return (await evaluate(ctx, ability, firstSubject(subject), "can"))
168
+ .allowed;
169
+ },
170
+ async canMany(ctx, checks) {
171
+ const decisions = await inspectMany(ctx, checks, "canMany");
172
+ const result = {};
173
+ for (const [key, decision] of Object.entries(decisions)) {
174
+ result[key] = decision.allowed;
175
+ }
176
+ return result;
122
177
  },
123
- inspect: async (ctx, ability, ...subject) => inspect(ctx, ability, firstSubject(subject)),
178
+ inspect: async (ctx, ability, ...subject) => evaluate(ctx, ability, firstSubject(subject), "inspect"),
179
+ inspectMany: async (ctx, checks) => inspectMany(ctx, checks, "inspectMany"),
124
180
  authorize: async (ctx, ability, ...subject) => authorize(ctx, ability, firstSubject(subject)),
125
181
  };
126
182
  return gate;
@@ -134,4 +190,43 @@ function normalizeDecision(result) {
134
190
  function firstSubject(subject) {
135
191
  return subject[0];
136
192
  }
193
+ function policyNow() {
194
+ return typeof performance !== "undefined" ? performance.now() : Date.now();
195
+ }
196
+ function contextStringField(ctx, field) {
197
+ if (!ctx || typeof ctx !== "object")
198
+ return undefined;
199
+ const value = ctx[field];
200
+ return typeof value === "string" ? value : undefined;
201
+ }
202
+ function enrichObservation(observation) {
203
+ return {
204
+ ...observation,
205
+ requestId: contextStringField(observation.ctx, "requestId"),
206
+ traceId: contextStringField(observation.ctx, "traceId"),
207
+ spanId: contextStringField(observation.ctx, "spanId"),
208
+ parentSpanId: contextStringField(observation.ctx, "parentSpanId"),
209
+ traceparent: contextStringField(observation.ctx, "traceparent"),
210
+ };
211
+ }
212
+ function isPromiseLike(value) {
213
+ return (value !== null &&
214
+ (typeof value === "object" || typeof value === "function") &&
215
+ typeof value.then === "function");
216
+ }
217
+ function createDecisionObserver(observer) {
218
+ return (observation) => {
219
+ if (!observer)
220
+ return;
221
+ try {
222
+ const result = observer(enrichObservation(observation));
223
+ if (isPromiseLike(result)) {
224
+ Promise.resolve(result).catch(() => undefined);
225
+ }
226
+ }
227
+ catch {
228
+ // Observers are diagnostic only and must not affect authorization.
229
+ }
230
+ };
231
+ }
137
232
  //# sourceMappingURL=policy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/ports/policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/ports/policy.ts"],"names":[],"mappings":"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"}