@opentag/dispatcher 0.2.0 → 0.3.1

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,18 +1,55 @@
1
- import type { OpenTagRunResult } from "@opentag/core";
1
+ import { type ActionReceiptContext, type OpenTagFinalSummaryPresentation, type OpenTagPresentation, type OpenTagRunResult, type OpenTagRunStatusPresentation } from "@opentag/core";
2
2
  import { type SlackBlock } from "@opentag/slack";
3
3
  import type { CallbackMessage } from "./server.js";
4
4
  export type CallbackProvider = CallbackMessage["provider"];
5
5
  export type PresentedCallbackBody = {
6
6
  body: string;
7
7
  blocks?: SlackBlock[];
8
+ rich?: CallbackMessage["rich"];
8
9
  };
9
10
  export type CallbackPresentation = {
10
11
  shouldDeliverAcknowledgement(provider: CallbackProvider): boolean;
12
+ shouldDeliverStatusUpdate(provider: CallbackProvider): boolean;
13
+ shouldDeliverRunStatusUpdate?(input: {
14
+ provider: CallbackProvider;
15
+ state: OpenTagRunStatusPresentation["state"];
16
+ }): boolean;
11
17
  shouldDeliverProgress(provider: CallbackProvider): boolean;
18
+ runStatusPresentation(input: {
19
+ runId: string;
20
+ state: OpenTagRunStatusPresentation["state"];
21
+ message?: string;
22
+ nextAction?: string;
23
+ detailVisibility?: OpenTagRunStatusPresentation["detailVisibility"];
24
+ }): OpenTagRunStatusPresentation;
25
+ acknowledgementPresentation(input: {
26
+ runId: string;
27
+ }): OpenTagRunStatusPresentation;
28
+ progressPresentation(input: {
29
+ runId: string;
30
+ message: string;
31
+ }): OpenTagRunStatusPresentation;
32
+ finalPresentation(input: {
33
+ result: OpenTagRunResult;
34
+ runId?: string;
35
+ receiptContext?: ActionReceiptContext;
36
+ }): OpenTagFinalSummaryPresentation;
37
+ render(input: {
38
+ provider: CallbackProvider;
39
+ presentation: OpenTagPresentation;
40
+ }): PresentedCallbackBody;
12
41
  acknowledgement(input: {
13
42
  provider: CallbackProvider;
14
43
  runId: string;
15
44
  }): string;
45
+ runStatus(input: {
46
+ provider: CallbackProvider;
47
+ runId: string;
48
+ state: OpenTagRunStatusPresentation["state"];
49
+ message?: string;
50
+ nextAction?: string;
51
+ detailVisibility?: OpenTagRunStatusPresentation["detailVisibility"];
52
+ }): PresentedCallbackBody;
16
53
  progress(input: {
17
54
  provider: CallbackProvider;
18
55
  runId: string;
@@ -21,6 +58,8 @@ export type CallbackPresentation = {
21
58
  final(input: {
22
59
  provider: CallbackProvider;
23
60
  result: OpenTagRunResult;
61
+ runId?: string;
62
+ receiptContext?: ActionReceiptContext;
24
63
  }): PresentedCallbackBody;
25
64
  };
26
65
  export declare function createDefaultCallbackPresentation(): CallbackPresentation;
@@ -1 +1 @@
1
- {"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../src/presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EAAoF,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEnI,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,MAAM,gBAAgB,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;AAE3D,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,4BAA4B,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAClE,qBAAqB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAC3D,eAAe,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IAC9E,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IACxF,KAAK,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,MAAM,EAAE,gBAAgB,CAAA;KAAE,GAAG,qBAAqB,CAAC;CAC/F,CAAC;AAEF,wBAAgB,iCAAiC,IAAI,oBAAoB,CA8CxE"}
1
+ {"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../src/presentation.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,7 +1,21 @@
1
+ import { type OpenTagEvent } from "@opentag/core";
1
2
  import { type FetchLike as GitHubFetchLike } from "@opentag/github";
2
3
  import type { SlackBlock } from "@opentag/slack";
3
4
  import { createOpenTagRepository } from "@opentag/store";
4
5
  import { Hono } from "hono";
6
+ /**
7
+ * Parse and validate a request body, mapping ONLY request-body parse failures to
8
+ * HTTP client errors. Oversized bodies return 413, malformed JSON returns 400,
9
+ * and request-schema validation failures return 400 so the global onError
10
+ * handler can return them to the client without masking unrelated internal
11
+ * ZodError/SyntaxError as 400s. Any other error is rethrown unchanged and falls
12
+ * through to a 500.
13
+ */
14
+ export type DispatcherRateLimitOptions = {
15
+ windowMs: number;
16
+ maxRequests: number;
17
+ now?(): number;
18
+ };
5
19
  import { type AgentAccessProfileCheck } from "./admission.js";
6
20
  import { type CallbackPresentation } from "./presentation.js";
7
21
  export type CallbackMessage = {
@@ -13,10 +27,32 @@ export type CallbackMessage = {
13
27
  agentId?: string;
14
28
  threadKey?: string;
15
29
  statusMessageKey?: string;
30
+ externalMessageId?: string;
16
31
  blocks?: SlackBlock[];
32
+ rich?: {
33
+ provider: string;
34
+ payload: unknown;
35
+ };
36
+ };
37
+ export type CallbackDeliveryResult = {
38
+ externalMessageId?: string;
17
39
  };
18
40
  export type CallbackSink = {
19
- deliver(message: CallbackMessage): Promise<void>;
41
+ deliver(message: CallbackMessage): Promise<void | CallbackDeliveryResult>;
42
+ };
43
+ export type SourceReceiptState = "received" | "running";
44
+ export type SourceReceiptDelivery = {
45
+ delivered: boolean;
46
+ };
47
+ export type SourceReceipt = {
48
+ runId: string;
49
+ provider: string;
50
+ state: SourceReceiptState;
51
+ event: OpenTagEvent;
52
+ agentId?: string;
53
+ };
54
+ export type SourceReceiptSink = {
55
+ deliver(receipt: SourceReceipt): Promise<SourceReceiptDelivery>;
20
56
  };
21
57
  export type CallbackRetryOptions = {
22
58
  maxAttempts?: number;
@@ -41,10 +77,16 @@ export declare function processPendingCallbacks(input: {
41
77
  export declare function createDispatcherApp(input: {
42
78
  databasePath: string;
43
79
  callbackSink?: CallbackSink;
80
+ sourceReceiptSink?: SourceReceiptSink;
44
81
  pairingToken?: string;
82
+ runnerToken?: string;
83
+ runnerTokens?: string[];
84
+ revokedRunnerTokenFingerprints?: string[];
45
85
  presentation?: CallbackPresentation;
46
86
  githubApply?: GitHubApplyOptions;
47
87
  callbackRetry?: CallbackRetryOptions;
48
88
  agentAccessProfileCheck?: AgentAccessProfileCheck;
89
+ maxRequestBodyBytes?: number;
90
+ rateLimit?: DispatcherRateLimitOptions | false;
49
91
  }): Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
50
92
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAyBA,OAAO,EAGL,KAAK,SAAS,IAAI,eAAe,EAClC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAiB,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAA0B,KAAK,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAAqC,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAqpBjG,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,iBAAiB,GAAG,UAAU,GAAG,OAAO,CAAC;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B,CAAC;AA2HF,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,IAAI,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;IACjD,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,oBAAoB,CAAC;CAC9B,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBpE;AAgCD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;CACnD,8EA+3BA"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opentag/dispatcher",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "description": "Embeddable OpenTag dispatcher Hono app and callback sinks.",
5
5
  "type": "module",
6
6
  "engines": {
@@ -35,12 +35,12 @@
35
35
  "drizzle-orm": "^0.45.2",
36
36
  "hono": "^4.6.15",
37
37
  "zod": "^3.24.1",
38
- "@opentag/core": "0.2.0",
39
- "@opentag/slack": "0.2.0",
40
- "@opentag/github": "0.2.0",
41
- "@opentag/lark": "0.2.0",
42
- "@opentag/store": "0.2.0",
43
- "@opentag/telegram": "0.2.0"
38
+ "@opentag/github": "0.3.1",
39
+ "@opentag/core": "0.3.1",
40
+ "@opentag/lark": "0.3.1",
41
+ "@opentag/slack": "0.3.1",
42
+ "@opentag/telegram": "0.3.1",
43
+ "@opentag/store": "0.3.1"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@types/better-sqlite3": "^7.6.12",