@absolutejs/auth 0.28.0 → 0.29.0-beta.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.
@@ -1,5 +1,15 @@
1
- import type { WebhookEndpoint, WebhookEvent } from './types';
1
+ import type { WebhookDeliveryStore, WebhookEndpoint, WebhookEvent } from './types';
2
+ export declare const DEFAULT_WEBHOOK_RETRY: {
3
+ readonly attempts: 3;
4
+ readonly backoffMultiplier: 2;
5
+ readonly initialDelayMs: 1000;
6
+ };
2
7
  export declare const DEFAULT_WEBHOOK_TIMEOUT_MS: number;
8
+ export type WebhookRetryConfig = {
9
+ attempts?: number;
10
+ backoffMultiplier?: number;
11
+ initialDelayMs?: number;
12
+ };
3
13
  export type WebhookFetch = (url: string, init: {
4
14
  body: string;
5
15
  headers: Record<string, string>;
@@ -10,6 +20,7 @@ export type WebhookFetch = (url: string, init: {
10
20
  status: number;
11
21
  }>;
12
22
  export type WebhooksConfig = {
23
+ deliveryStore?: WebhookDeliveryStore;
13
24
  endpoints: WebhookEndpoint[];
14
25
  fetch?: WebhookFetch;
15
26
  onDeliveryError?: (context: {
@@ -17,5 +28,7 @@ export type WebhooksConfig = {
17
28
  error: unknown;
18
29
  event: WebhookEvent;
19
30
  }) => void | Promise<void>;
31
+ retry?: WebhookRetryConfig;
32
+ sleep?: (ms: number) => Promise<void>;
20
33
  timeoutMs?: number;
21
34
  };
@@ -1,3 +1,3 @@
1
1
  import type { AuditEvent } from '../audit/types';
2
2
  import { type WebhooksConfig } from './config';
3
- export declare const createWebhookDispatcher: ({ endpoints, fetch: fetchImpl, onDeliveryError, timeoutMs }: WebhooksConfig) => (event: AuditEvent) => Promise<void>;
3
+ export declare const createWebhookDispatcher: ({ deliveryStore, endpoints, fetch: fetchImpl, onDeliveryError, retry, sleep, timeoutMs }: WebhooksConfig) => (event: AuditEvent) => Promise<void>;
@@ -0,0 +1,2 @@
1
+ import type { WebhookDeliveryStore } from './types';
2
+ export declare const createInMemoryWebhookDeliveryStore: () => WebhookDeliveryStore;
@@ -0,0 +1,136 @@
1
+ import { type AnyPgDatabase } from '../stores/postgres';
2
+ import type { WebhookDeliveryStore, WebhookEvent } from './types';
3
+ export declare const webhookDeliveriesTable: import("drizzle-orm/pg-core").PgTableWithColumns<{
4
+ name: "auth_webhook_deliveries";
5
+ schema: undefined;
6
+ columns: {
7
+ attempts: import("drizzle-orm/pg-core").PgColumn<{
8
+ name: "attempts";
9
+ tableName: "auth_webhook_deliveries";
10
+ dataType: "number";
11
+ columnType: "PgBigInt53";
12
+ data: number;
13
+ driverParam: string | number;
14
+ notNull: true;
15
+ hasDefault: false;
16
+ isPrimaryKey: false;
17
+ isAutoincrement: false;
18
+ hasRuntimeDefault: false;
19
+ enumValues: undefined;
20
+ baseColumn: never;
21
+ identity: undefined;
22
+ generated: undefined;
23
+ }, {}, {}>;
24
+ created_at_ms: import("drizzle-orm/pg-core").PgColumn<{
25
+ name: "created_at_ms";
26
+ tableName: "auth_webhook_deliveries";
27
+ dataType: "number";
28
+ columnType: "PgBigInt53";
29
+ data: number;
30
+ driverParam: string | number;
31
+ notNull: true;
32
+ hasDefault: false;
33
+ isPrimaryKey: false;
34
+ isAutoincrement: false;
35
+ hasRuntimeDefault: false;
36
+ enumValues: undefined;
37
+ baseColumn: never;
38
+ identity: undefined;
39
+ generated: undefined;
40
+ }, {}, {}>;
41
+ endpoint_url: import("drizzle-orm/pg-core").PgColumn<{
42
+ name: "endpoint_url";
43
+ tableName: "auth_webhook_deliveries";
44
+ dataType: "string";
45
+ columnType: "PgVarchar";
46
+ data: string;
47
+ driverParam: string;
48
+ notNull: true;
49
+ hasDefault: false;
50
+ isPrimaryKey: false;
51
+ isAutoincrement: false;
52
+ hasRuntimeDefault: false;
53
+ enumValues: [string, ...string[]];
54
+ baseColumn: never;
55
+ identity: undefined;
56
+ generated: undefined;
57
+ }, {}, {
58
+ length: 2048;
59
+ }>;
60
+ envelope_id: import("drizzle-orm/pg-core").PgColumn<{
61
+ name: "envelope_id";
62
+ tableName: "auth_webhook_deliveries";
63
+ dataType: "string";
64
+ columnType: "PgVarchar";
65
+ data: string;
66
+ driverParam: string;
67
+ notNull: true;
68
+ hasDefault: false;
69
+ isPrimaryKey: true;
70
+ isAutoincrement: false;
71
+ hasRuntimeDefault: false;
72
+ enumValues: [string, ...string[]];
73
+ baseColumn: never;
74
+ identity: undefined;
75
+ generated: undefined;
76
+ }, {}, {
77
+ length: 255;
78
+ }>;
79
+ envelope_json: import("drizzle-orm/pg-core").PgColumn<{
80
+ name: "envelope_json";
81
+ tableName: "auth_webhook_deliveries";
82
+ dataType: "json";
83
+ columnType: "PgJsonb";
84
+ data: WebhookEvent;
85
+ driverParam: unknown;
86
+ notNull: true;
87
+ hasDefault: false;
88
+ isPrimaryKey: false;
89
+ isAutoincrement: false;
90
+ hasRuntimeDefault: false;
91
+ enumValues: undefined;
92
+ baseColumn: never;
93
+ identity: undefined;
94
+ generated: undefined;
95
+ }, {}, {
96
+ $type: WebhookEvent;
97
+ }>;
98
+ last_error: import("drizzle-orm/pg-core").PgColumn<{
99
+ name: "last_error";
100
+ tableName: "auth_webhook_deliveries";
101
+ dataType: "string";
102
+ columnType: "PgText";
103
+ data: string;
104
+ driverParam: string;
105
+ notNull: false;
106
+ hasDefault: false;
107
+ isPrimaryKey: false;
108
+ isAutoincrement: false;
109
+ hasRuntimeDefault: false;
110
+ enumValues: [string, ...string[]];
111
+ baseColumn: never;
112
+ identity: undefined;
113
+ generated: undefined;
114
+ }, {}, {}>;
115
+ last_status: import("drizzle-orm/pg-core").PgColumn<{
116
+ name: "last_status";
117
+ tableName: "auth_webhook_deliveries";
118
+ dataType: "number";
119
+ columnType: "PgBigInt53";
120
+ data: number;
121
+ driverParam: string | number;
122
+ notNull: false;
123
+ hasDefault: false;
124
+ isPrimaryKey: false;
125
+ isAutoincrement: false;
126
+ hasRuntimeDefault: false;
127
+ enumValues: undefined;
128
+ baseColumn: never;
129
+ identity: undefined;
130
+ generated: undefined;
131
+ }, {}, {}>;
132
+ };
133
+ dialect: "pg";
134
+ }>;
135
+ export declare const createNeonWebhookDeliveryStore: (databaseUrl: string) => WebhookDeliveryStore;
136
+ export declare const createPostgresWebhookDeliveryStore: (db: AnyPgDatabase) => WebhookDeliveryStore;
@@ -1,5 +1,6 @@
1
1
  import type { AuditEvent, AuditEventType } from '../audit/types';
2
2
  export type WebhookEndpoint = {
3
+ events?: readonly AuditEventType[];
3
4
  secret: string;
4
5
  url: string;
5
6
  };
@@ -9,3 +10,16 @@ export type WebhookEvent = {
9
10
  id: string;
10
11
  type: AuditEventType;
11
12
  };
13
+ export type WebhookDelivery = {
14
+ attempts: number;
15
+ createdAt: number;
16
+ endpointUrl: string;
17
+ envelope: WebhookEvent;
18
+ lastError?: string;
19
+ lastStatus?: number;
20
+ };
21
+ export type WebhookDeliveryStore = {
22
+ listFailed: (limit?: number) => Promise<WebhookDelivery[]>;
23
+ recordFailure: (delivery: WebhookDelivery) => Promise<void>;
24
+ removeFailure: (envelopeId: string) => Promise<void>;
25
+ };
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.28.0",
2
+ "version": "0.29.0-beta.0",
3
3
  "name": "@absolutejs/auth",
4
4
  "description": "An authorization library for absolutejs",
5
5
  "repository": {