@t4h.framework/webhook 0.0.0-experimental-20260908180423 → 0.0.0-experimental-20260911032832

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 (34) hide show
  1. package/.ai/skills/framework-webhook/SKILL.md +16 -7
  2. package/CHANGELOG.md +83 -6
  3. package/README.md +6 -3
  4. package/dist/activities/WebhookActivity.d.ts.map +1 -1
  5. package/dist/activities/WebhookActivity.js +3 -5
  6. package/dist/activities/WebhookActivity.js.map +1 -1
  7. package/dist/models/WebhookRequest.d.ts +2 -3
  8. package/dist/models/WebhookRequest.d.ts.map +1 -1
  9. package/dist/models/WebhookRequest.js.map +1 -1
  10. package/dist/webhook.d.ts +0 -4
  11. package/dist/webhook.d.ts.map +1 -1
  12. package/dist/webhook.js +0 -4
  13. package/dist/webhook.js.map +1 -1
  14. package/package.json +5 -7
  15. package/dist/tools/callback-token.d.ts +0 -3
  16. package/dist/tools/callback-token.d.ts.map +0 -1
  17. package/dist/tools/callback-token.js +0 -14
  18. package/dist/tools/callback-token.js.map +0 -1
  19. package/dist/tools/get-header.d.ts +0 -4
  20. package/dist/tools/get-header.d.ts.map +0 -1
  21. package/dist/tools/get-header.js +0 -21
  22. package/dist/tools/get-header.js.map +0 -1
  23. package/dist/tools/parse-callback-body.d.ts +0 -3
  24. package/dist/tools/parse-callback-body.d.ts.map +0 -1
  25. package/dist/tools/parse-callback-body.js +0 -25
  26. package/dist/tools/parse-callback-body.js.map +0 -1
  27. package/dist/tools/timing-safe-equal-string.d.ts +0 -2
  28. package/dist/tools/timing-safe-equal-string.d.ts.map +0 -1
  29. package/dist/tools/timing-safe-equal-string.js +0 -9
  30. package/dist/tools/timing-safe-equal-string.js.map +0 -1
  31. package/dist/tools/verify-callback-auth.d.ts +0 -9
  32. package/dist/tools/verify-callback-auth.d.ts.map +0 -1
  33. package/dist/tools/verify-callback-auth.js +0 -89
  34. package/dist/tools/verify-callback-auth.js.map +0 -1
@@ -76,20 +76,29 @@ and returns `pending({ payload: dispatch, schema, auth, timeoutAt })`.
76
76
 
77
77
  ## Host contract
78
78
 
79
+ The callbacks route belongs to the core and serves every async activity; the
80
+ helpers below live in the `AsyncActivityCallback` namespace of `@t4h.framework/core`, not
81
+ in this package.
82
+
79
83
  1. `GetActivityCallbackUrlClaim.getActivityCallbackUrl()`: absolute `http(s)`
80
84
  URL of the current activity's callbacks route with
81
- `?token=deriveCallbackToken(secret, activityId)`. Nothing stored.
82
- 2. Callback route: `isCallbackTokenValid` **first** (404 if the token was
85
+ `?token=AsyncActivityCallback.deriveToken(secret, activityId)`. Nothing stored.
86
+ 2. Callback route: `AsyncActivityCallback.isTokenValid` **first** (404 if the token was
83
87
  never minted) → activity/pending lookup (503 + `Retry-After` if the pending
84
88
  is not visible yet: the partner called back before the tick committed) →
85
- `verifyCallbackAuth(pending.auth, { method, headers, rawBody })`
86
- (401) → advance with `parseCallbackBody(contentType, rawBody)` and
87
- `{ method, headers: flattenHeaders(headers) }`. 410 when no longer pending,
89
+ `AsyncActivityCallback.authorize(pending.auth, { method, headers, rawBody }, authorizers)`
90
+ (401) → advance with `AsyncActivityCallback.parseBody(contentType, rawBody)` and
91
+ `{ method, headers: AsyncActivityCallback.flattenHeaders(headers) }`. 410 when no longer pending,
88
92
  202 otherwise (repeats included).
89
- 3. Verification needs the **raw body**; parse JSON only after it.
93
+ 3. `authorizers` is `{ hmac, jwt }` with the default exports of
94
+ `@t4h.framework/hmac/callback` and `@t4h.framework/jwks/callback`; `basic`,
95
+ `header` and `bearer` are built into the core. A declared type without a
96
+ authorizer throws `AsyncActivityCallbackAuthorizerMissingException`.
97
+ 4. Verification needs the **raw body**; parse JSON only after it.
90
98
 
91
99
  The dev server implements this in `packages/dev` (`DevGetActivityCallbackUrlClaim`,
92
- `CallbackTokenService`, `CreateWorkflowRunAsyncActivityPendingCallback`, route
100
+ `CallbackTokenService`, `CallbackAuthorizersService`,
101
+ `CreateWorkflowRunAsyncActivityPendingCallback`, route
93
102
  `POST /projects/:project/workflows/:workflow/runs/:run/activities/:activity/callbacks`).
94
103
 
95
104
  ## Testing
package/CHANGELOG.md CHANGED
@@ -1,14 +1,91 @@
1
1
  # @t4h.framework/webhook
2
2
 
3
- ## 0.0.0-experimental-20260908180423
3
+ ## 0.0.0-experimental-20260911032832
4
4
 
5
5
  ### Patch Changes
6
6
 
7
- - Updated dependencies [[`e8c5796`](https://github.com/tech4humans-brasil/framework/commit/e8c5796ed6f492d7504052f59cc38b96734d0ab2)]:
8
- - @t4h.framework/core@0.0.0-experimental-20260908180423
9
- - @t4h.framework/hmac@0.0.0-experimental-20260908180423
10
- - @t4h.framework/http@0.0.0-experimental-20260908180423
11
- - @t4h.framework/jwks@0.0.0-experimental-20260908180423
7
+ - Updated dependencies [[`2a3b9b4`](https://github.com/tech4humans-brasil/framework/commit/2a3b9b4c11639c7ef7b47d7b9e672ded81bd4297)]:
8
+ - @t4h.framework/http@0.0.0-experimental-20260911032832
9
+
10
+ ## 0.2.1
11
+
12
+ ### Patch Changes
13
+
14
+ - [#170](https://github.com/tech4humans-brasil/framework/pull/170) [`aa72268`](https://github.com/tech4humans-brasil/framework/commit/aa72268d040a743743cac31cc14e26b8620b0e3f) Thanks [@gusteycamargo](https://github.com/gusteycamargo)! - Adds the `jwks` callback auth: a detached signature over the callback body,
15
+ verified with the public key the `kid` resolves to at a JWKS URL — the way Amber
16
+ signs its webhooks.
17
+
18
+ **core**: `AsyncActivityCallbackAuthJwks` joins `AsyncActivityCallbackAuth`
19
+ (`jwksUri`, `header`, `kid`/`kidHeader`, `algorithm`/`algorithmHeader`,
20
+ `signatureFormat`/`signatureFormatHeader`, `timestampHeader`,
21
+ `toleranceInSeconds`, `signedPayload` as a template over `{timestamp}` and
22
+ `{body}`).
23
+
24
+ **jwks**: `jwksCallback` (default of `@t4h.framework/jwks/callback`) now serves
25
+ both `jwt` and `jwks`. Hosts pass it as `{ jwt: jwksCallback, jwks: jwksCallback }`.
26
+
27
+ **dev**: loads `@t4h.framework/jwks` for the `jwks` type as well.
28
+
29
+ **webhook**: documents the new type.
30
+
31
+ - Updated dependencies [[`aa72268`](https://github.com/tech4humans-brasil/framework/commit/aa72268d040a743743cac31cc14e26b8620b0e3f)]:
32
+ - @t4h.framework/core@0.14.0
33
+ - @t4h.framework/http@0.6.3
34
+
35
+ ## 0.2.0
36
+
37
+ ### Minor Changes
38
+
39
+ - [#167](https://github.com/tech4humans-brasil/framework/pull/167) [`1b1509f`](https://github.com/tech4humans-brasil/framework/commit/1b1509f9b6d2554dfab1f7633c3d022249e4fa01) Thanks [@gusteycamargo](https://github.com/gusteycamargo)! - Moves the callbacks route helpers from `@t4h.framework/webhook` to
40
+ `@t4h.framework/core`. The route advances any pending async activity, not only
41
+ `webhook()`, and the core already owned its contract (`AsyncActivityCallbackAuth`,
42
+ `GetActivityCallbackUrlClaim`, `AsyncActivityAdvanceContext`).
43
+
44
+ **core**: new `AsyncActivityCallback` namespace with `deriveToken`, `isTokenValid`,
45
+ `parseBody`, `getHeader`, `getBearerToken`, `flattenHeaders`, `authorize` and
46
+ the types `AsyncActivityCallback.Delivery`, `AsyncActivityCallback.Headers`, `AsyncActivityCallback.Json`,
47
+ `AsyncActivityCallback.AuthType`, `AsyncActivityCallback.Authorizer`, `AsyncActivityCallback.Authorizers`.
48
+ `AsyncActivityCallback.authorize(auth, request, authorizers?)` ships `basic`, `header` and
49
+ `bearer`; `hmac` and `jwt` are authorizers the host passes in, so the core does not
50
+ depend on `@t4h.framework/hmac` or `@t4h.framework/jwks`. A declared type without
51
+ a authorizer throws `AsyncActivityCallbackAuthorizerMissingException`; an unknown type throws
52
+ `AsyncActivityCallbackAuthUnsupportedException`.
53
+
54
+ **hmac**: new `@t4h.framework/hmac/callback` entry whose default export is the
55
+ `hmac` callback authorizer, `hmacCallback`.
56
+
57
+ **jwks**: new `@t4h.framework/jwks/callback` entry whose default export is the
58
+ `jwt` callback authorizer, `jwksCallback`.
59
+
60
+ **webhook**: no longer exports `deriveCallbackToken`, `isCallbackTokenValid`,
61
+ `verifyCallbackAuth`, `parseCallbackBody`, `getHeader`, `flattenHeaders` nor
62
+ `CallbackRequest`/`CallbackHeaders`, and no longer depends on `hmac` and `jwks`;
63
+ `WebhookJson` is now an alias of the core `AsyncActivityCallback.Json`. Hosts import the
64
+ helpers from the core `AsyncActivityCallback` namespace and the authorizers from the two entries.
65
+
66
+ **dev**: `@t4h.framework/webhook` becomes an optional peer like the other
67
+ integrations. Only `@t4h.framework/core` is required again, which fixes
68
+ `ERR_MODULE_NOT_FOUND: Cannot find package '@t4h.framework/webhook'` on
69
+ projects that never call `webhook()`. `hmac` and `jwt` callback authorizers are
70
+ loaded from the project when `@t4h.framework/hmac` / `@t4h.framework/jwks` are
71
+ installed; a callback whose declared `auth` needs a missing package answers 500
72
+ naming the package to install.
73
+
74
+ ### Patch Changes
75
+
76
+ - Updated dependencies [[`1b1509f`](https://github.com/tech4humans-brasil/framework/commit/1b1509f9b6d2554dfab1f7633c3d022249e4fa01), [`1b1509f`](https://github.com/tech4humans-brasil/framework/commit/1b1509f9b6d2554dfab1f7633c3d022249e4fa01)]:
77
+ - @t4h.framework/core@0.13.0
78
+ - @t4h.framework/http@0.6.2
79
+
80
+ ## 0.1.1
81
+
82
+ ### Patch Changes
83
+
84
+ - Updated dependencies [[`72e08ff`](https://github.com/tech4humans-brasil/framework/commit/72e08ff86e0ce735ef73ccdf33b0dc01cdb8b6f5)]:
85
+ - @t4h.framework/core@0.12.0
86
+ - @t4h.framework/hmac@0.2.2
87
+ - @t4h.framework/http@0.6.1
88
+ - @t4h.framework/jwks@0.5.2
12
89
 
13
90
  ## 0.1.0
14
91
 
package/README.md CHANGED
@@ -32,11 +32,14 @@ arrives before `timeoutInMs` throws `WebhookTimeoutError`, so the workflow
32
32
  never sees a callback that did not happen.
33
33
 
34
34
  Supported `auth`: `hmac` (GitHub, Shopify, Slack style), `basic`, `header`,
35
- `bearer` and `jwt` (JWKS).
35
+ `bearer`, `jwt` (bearer JWT verified with a JWKS) and `jwks` (detached
36
+ signature verified with a JWKS key).
36
37
 
37
38
  Pass `{ wait: false }` as the second argument to send the request without
38
39
  suspending; you get a handle and call `handle.wait()` later.
39
40
 
40
41
  Hosts implement the core `GetActivityCallbackUrlClaim` and the callbacks
41
- route; the outbound request goes through `HttpClientRequestClaim` from
42
- `@t4h.framework/http`. Peer dependency: `@t4h.framework/core`.
42
+ route, both defined by `@t4h.framework/core` and shared by every async
43
+ activity; the outbound request goes through `HttpClientRequestClaim` from
44
+ `@t4h.framework/http`. Peer dependencies: `@t4h.framework/core` and
45
+ `@t4h.framework/http`.
@@ -1 +1 @@
1
- {"version":3,"file":"WebhookActivity.d.ts","sourceRoot":"","sources":["../../src/activities/WebhookActivity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebhookActivity.d.ts","sourceRoot":"","sources":["../../src/activities/WebhookActivity.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,9 @@
1
1
  import { text } from 'node:stream/consumers';
2
- import { AsyncActivity, Claim, GetActivityCallbackUrlClaim, History, } from '@t4h.framework/core';
2
+ import { AsyncActivity, AsyncActivityCallback, Claim, GetActivityCallbackUrlClaim, History, } from '@t4h.framework/core';
3
3
  import { HttpClientRequestClaim } from '@t4h.framework/http';
4
4
  import { WebhookCallbackUrlError } from '../errors/WebhookCallbackUrlError.js';
5
5
  import { toWebhookRejectedError } from '../errors/WebhookRejectedError.js';
6
6
  import { buildWebhookDispatch } from '../tools/build-webhook-dispatch.js';
7
- import { flattenHeaders } from '../tools/get-header.js';
8
- import { parseCallbackBody } from '../tools/parse-callback-body.js';
9
7
  const WEBHOOK_ACTIVITY_CLAIMS = Symbol('webhook-activity-claims');
10
8
  export const WEBHOOK_DISPATCH_TIMEOUT_IN_MS = 60_000;
11
9
  function toCallbackUrl(callbackUrl) {
@@ -65,7 +63,7 @@ export class WebhookActivity extends AsyncActivity {
65
63
  retry: true,
66
64
  timeoutInMs: WEBHOOK_DISPATCH_TIMEOUT_IN_MS,
67
65
  });
68
- const headers = flattenHeaders(response.headers);
66
+ const headers = AsyncActivityCallback.flattenHeaders(response.headers);
69
67
  const rawBody = await text(response.body);
70
68
  if (response.status >= 400)
71
69
  return {
@@ -76,7 +74,7 @@ export class WebhookActivity extends AsyncActivity {
76
74
  return {
77
75
  status: response.status,
78
76
  headers,
79
- body: parseCallbackBody(headers['content-type'], rawBody),
77
+ body: AsyncActivityCallback.parseBody(headers['content-type'], rawBody),
80
78
  };
81
79
  }
82
80
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"WebhookActivity.js","sourceRoot":"","sources":["../../src/activities/WebhookActivity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebhookActivity.js","sourceRoot":"","sources":["../../src/activities/WebhookActivity.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
- export type WebhookJson = string | number | boolean | null | readonly WebhookJson[] | {
2
- readonly [key: string]: WebhookJson | undefined;
3
- };
1
+ import type { AsyncActivityCallback } from '@t4h.framework/core';
2
+ export type WebhookJson = AsyncActivityCallback.Json;
4
3
  export type WebhookRequestMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
5
4
  export type WebhookRequestBody = {
6
5
  json: WebhookJson;
@@ -1 +1 @@
1
- {"version":3,"file":"WebhookRequest.d.ts","sourceRoot":"","sources":["../../src/models/WebhookRequest.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,WAAW,EAAE,GACtB;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAA;CAAE,CAAA;AAEvD,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;AAE9E,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,GACnC;IAAE,IAAI,CAAC,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAElC;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,IAAI,CAAC,EAAE,kBAAkB,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,gCAAgC,oBAAoB,CAAA"}
1
+ {"version":3,"file":"WebhookRequest.d.ts","sourceRoot":"","sources":["../../src/models/WebhookRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAEhE,MAAM,MAAM,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAA;AAEpD,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;AAE9E,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,GACnC;IAAE,IAAI,CAAC,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAElC;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,IAAI,CAAC,EAAE,kBAAkB,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,gCAAgC,oBAAoB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"WebhookRequest.js","sourceRoot":"","sources":["../../src/models/WebhookRequest.ts"],"names":[],"mappings":"AA2BA,MAAM,CAAC,MAAM,gCAAgC,GAAG,iBAAiB,CAAA"}
1
+ {"version":3,"file":"WebhookRequest.js","sourceRoot":"","sources":["../../src/models/WebhookRequest.ts"],"names":[],"mappings":"AAuBA,MAAM,CAAC,MAAM,gCAAgC,GAAG,iBAAiB,CAAA"}
package/dist/webhook.d.ts CHANGED
@@ -4,8 +4,4 @@ export * from './errors/WebhookRejectedError.js';
4
4
  export * from './models/WebhookCallback.js';
5
5
  export * from './models/WebhookRequest.js';
6
6
  export * from './tools/build-webhook-dispatch.js';
7
- export * from './tools/callback-token.js';
8
- export * from './tools/get-header.js';
9
- export * from './tools/parse-callback-body.js';
10
- export * from './tools/verify-callback-auth.js';
11
7
  //# sourceMappingURL=webhook.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAA;AAC/C,cAAc,qCAAqC,CAAA;AACnD,cAAc,kCAAkC,CAAA;AAChD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mCAAmC,CAAA;AACjD,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,iCAAiC,CAAA"}
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAA;AAC/C,cAAc,qCAAqC,CAAA;AACnD,cAAc,kCAAkC,CAAA;AAChD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mCAAmC,CAAA"}
package/dist/webhook.js CHANGED
@@ -4,8 +4,4 @@ export * from './errors/WebhookRejectedError.js';
4
4
  export * from './models/WebhookCallback.js';
5
5
  export * from './models/WebhookRequest.js';
6
6
  export * from './tools/build-webhook-dispatch.js';
7
- export * from './tools/callback-token.js';
8
- export * from './tools/get-header.js';
9
- export * from './tools/parse-callback-body.js';
10
- export * from './tools/verify-callback-auth.js';
11
7
  //# sourceMappingURL=webhook.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAA;AAC/C,cAAc,qCAAqC,CAAA;AACnD,cAAc,kCAAkC,CAAA;AAChD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mCAAmC,CAAA;AACjD,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,iCAAiC,CAAA"}
1
+ {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAA;AAC/C,cAAc,qCAAqC,CAAA;AACnD,cAAc,kCAAkC,CAAA;AAChD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mCAAmC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@t4h.framework/webhook",
3
- "version": "0.0.0-experimental-20260908180423",
3
+ "version": "0.0.0-experimental-20260911032832",
4
4
  "description": "Webhook module for the T4H Framework",
5
5
  "homepage": "https://github.com/tech4humans-brasil/framework/tree/main/packages/webhook",
6
6
  "bugs": "https://github.com/tech4humans-brasil/framework/issues",
@@ -31,19 +31,17 @@
31
31
  "test:watch": "vitest"
32
32
  },
33
33
  "dependencies": {
34
- "@t4h.framework/hmac": "^0.0.0-experimental-20260908180423",
35
- "@t4h.framework/jwks": "^0.0.0-experimental-20260908180423",
36
34
  "typebox": "^1.1.6"
37
35
  },
38
36
  "devDependencies": {
39
- "@t4h.framework/core": "^0.0.0-experimental-20260908180423",
40
- "@t4h.framework/http": "^0.0.0-experimental-20260908180423",
37
+ "@t4h.framework/core": "^0.14.0",
38
+ "@t4h.framework/http": "^0.0.0-experimental-20260911032832",
41
39
  "typescript": "^5.9.3",
42
40
  "vitest": "^4.0.18"
43
41
  },
44
42
  "peerDependencies": {
45
- "@t4h.framework/core": "^0.0.0-experimental-20260908180423",
46
- "@t4h.framework/http": "^0.0.0-experimental-20260908180423"
43
+ "@t4h.framework/core": "^0.14.0",
44
+ "@t4h.framework/http": "^0.0.0-experimental-20260911032832"
47
45
  },
48
46
  "packageManager": "yarn@4.12.0",
49
47
  "engines": {
@@ -1,3 +0,0 @@
1
- export declare function deriveCallbackToken(secret: string, activityId: string): string;
2
- export declare function isCallbackTokenValid(secret: string, activityId: string, token: string): boolean;
3
- //# sourceMappingURL=callback-token.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"callback-token.d.ts","sourceRoot":"","sources":["../../src/tools/callback-token.ts"],"names":[],"mappings":"AAEA,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAKrE;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,WASd"}
@@ -1,14 +0,0 @@
1
- import crypto from 'node:crypto';
2
- export function deriveCallbackToken(secret, activityId) {
3
- return crypto
4
- .createHmac('sha256', secret)
5
- .update(activityId)
6
- .digest('base64url');
7
- }
8
- export function isCallbackTokenValid(secret, activityId, token) {
9
- const expected = Buffer.from(deriveCallbackToken(secret, activityId));
10
- const candidate = Buffer.from(token);
11
- return (expected.length === candidate.length &&
12
- crypto.timingSafeEqual(expected, candidate));
13
- }
14
- //# sourceMappingURL=callback-token.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"callback-token.js","sourceRoot":"","sources":["../../src/tools/callback-token.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,UAAkB;IACpE,OAAO,MAAM;SACV,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;SAC5B,MAAM,CAAC,UAAU,CAAC;SAClB,MAAM,CAAC,WAAW,CAAC,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAc,EACd,UAAkB,EAClB,KAAa;IAEb,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAA;IACrE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAEpC,OAAO,CACL,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;QACpC,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAC5C,CAAA;AACH,CAAC"}
@@ -1,4 +0,0 @@
1
- export type CallbackHeaders = Record<string, string | string[] | undefined>;
2
- export declare function getHeader(headers: CallbackHeaders, name: string): string | undefined;
3
- export declare function flattenHeaders(headers: CallbackHeaders): Record<string, string>;
4
- //# sourceMappingURL=get-header.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-header.d.ts","sourceRoot":"","sources":["../../src/tools/get-header.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAA;AAE3E,wBAAgB,SAAS,CACvB,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CAYpB;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,eAAe,GACvB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUxB"}
@@ -1,21 +0,0 @@
1
- export function getHeader(headers, name) {
2
- const wanted = name.toLowerCase();
3
- for (const [key, value] of Object.entries(headers)) {
4
- if (key.toLowerCase() !== wanted)
5
- continue;
6
- if (Array.isArray(value))
7
- return value[0];
8
- return value;
9
- }
10
- return undefined;
11
- }
12
- export function flattenHeaders(headers) {
13
- const result = {};
14
- for (const [name, value] of Object.entries(headers)) {
15
- if (value === undefined)
16
- continue;
17
- result[name.toLowerCase()] = Array.isArray(value) ? value.join(', ') : value;
18
- }
19
- return result;
20
- }
21
- //# sourceMappingURL=get-header.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-header.js","sourceRoot":"","sources":["../../src/tools/get-header.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,SAAS,CACvB,OAAwB,EACxB,IAAY;IAEZ,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IAEjC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM;YAAE,SAAQ;QAE1C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA;QAEzC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,OAAwB;IAExB,MAAM,MAAM,GAA2B,EAAE,CAAA;IAEzC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAQ;QAEjC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAC9E,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { WebhookJson } from '../models/WebhookRequest.js';
2
- export declare function parseCallbackBody(contentType: string | undefined, rawBody: string): WebhookJson | undefined;
3
- //# sourceMappingURL=parse-callback-body.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-callback-body.d.ts","sourceRoot":"","sources":["../../src/tools/parse-callback-body.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAM9D,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,EAAE,MAAM,GACd,WAAW,GAAG,SAAS,CA2BzB"}
@@ -1,25 +0,0 @@
1
- const JSON_CONTENT_TYPE = /^application\/([\w.-]+\+)?json$/i;
2
- const FORM_CONTENT_TYPE = 'application/x-www-form-urlencoded';
3
- export function parseCallbackBody(contentType, rawBody) {
4
- if (!rawBody.length)
5
- return undefined;
6
- const type = contentType?.split(';')[0]?.trim().toLowerCase() ?? '';
7
- if (JSON_CONTENT_TYPE.test(type))
8
- try {
9
- return JSON.parse(rawBody);
10
- }
11
- catch {
12
- return rawBody;
13
- }
14
- if (type === FORM_CONTENT_TYPE) {
15
- const params = new URLSearchParams(rawBody);
16
- const result = {};
17
- for (const key of new Set(params.keys())) {
18
- const values = params.getAll(key);
19
- result[key] = values.length === 1 ? values[0] : values;
20
- }
21
- return result;
22
- }
23
- return rawBody;
24
- }
25
- //# sourceMappingURL=parse-callback-body.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-callback-body.js","sourceRoot":"","sources":["../../src/tools/parse-callback-body.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG,kCAAkC,CAAA;AAE5D,MAAM,iBAAiB,GAAG,mCAAmC,CAAA;AAE7D,MAAM,UAAU,iBAAiB,CAC/B,WAA+B,EAC/B,OAAe;IAEf,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,SAAS,CAAA;IAErC,MAAM,IAAI,GAAG,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAA;IAEnE,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAgB,CAAA;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,OAAO,CAAA;QAChB,CAAC;IAEH,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,CAAA;QAE3C,MAAM,MAAM,GAAgC,EAAE,CAAA;QAE9C,KAAK,MAAM,GAAG,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAEjC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,MAAM,CAAA;QACzD,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function timingSafeEqualString(expected: string, candidate: string): boolean;
2
- //# sourceMappingURL=timing-safe-equal-string.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"timing-safe-equal-string.d.ts","sourceRoot":"","sources":["../../src/tools/timing-safe-equal-string.ts"],"names":[],"mappings":"AAEA,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,WAOxE"}
@@ -1,9 +0,0 @@
1
- import crypto from 'node:crypto';
2
- export function timingSafeEqualString(expected, candidate) {
3
- const a = Buffer.from(expected, 'utf8');
4
- const b = Buffer.from(candidate, 'utf8');
5
- if (a.length !== b.length)
6
- return false;
7
- return crypto.timingSafeEqual(a, b);
8
- }
9
- //# sourceMappingURL=timing-safe-equal-string.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"timing-safe-equal-string.js","sourceRoot":"","sources":["../../src/tools/timing-safe-equal-string.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,MAAM,UAAU,qBAAqB,CAAC,QAAgB,EAAE,SAAiB;IACvE,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACvC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IAExC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAEvC,OAAO,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACrC,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { AsyncActivityCallbackAuth } from '@t4h.framework/core';
2
- import { type CallbackHeaders } from './get-header.js';
3
- export interface CallbackRequest {
4
- method: string;
5
- headers: CallbackHeaders;
6
- rawBody: string;
7
- }
8
- export declare function verifyCallbackAuth(auth: AsyncActivityCallbackAuth | undefined, request: CallbackRequest): Promise<boolean>;
9
- //# sourceMappingURL=verify-callback-auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify-callback-auth.d.ts","sourceRoot":"","sources":["../../src/tools/verify-callback-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EAM1B,MAAM,qBAAqB,CAAA;AAI5B,OAAO,EAAa,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGjE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,eAAe,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;CAChB;AAuGD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,yBAAyB,GAAG,SAAS,EAC3C,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,OAAO,CAAC,CAmBlB"}
@@ -1,89 +0,0 @@
1
- import hmac from '@t4h.framework/hmac/authorize';
2
- import jwks from '@t4h.framework/jwks/authorize';
3
- import { getHeader } from './get-header.js';
4
- import { timingSafeEqualString } from './timing-safe-equal-string.js';
5
- const BEARER = /^Bearer\s+(.+)$/i;
6
- function getBearerToken(headers, name = 'authorization') {
7
- const value = getHeader(headers, name);
8
- if (!value)
9
- return undefined;
10
- return BEARER.exec(value)?.[1]?.trim();
11
- }
12
- function verifyHmac(auth, request) {
13
- const signature = getHeader(request.headers, auth.header);
14
- if (!signature)
15
- return false;
16
- const timestamp = auth.timestampHeader
17
- ? getHeader(request.headers, auth.timestampHeader)
18
- : undefined;
19
- if (auth.timestampHeader && !timestamp)
20
- return false;
21
- const rawPayload = (auth.signedPayload ?? '{body}')
22
- .replaceAll('{timestamp}', timestamp ?? '')
23
- .replaceAll('{body}', request.rawBody);
24
- return hmac({
25
- secret: auth.secret,
26
- signature,
27
- rawPayload,
28
- algorithm: auth.algorithm,
29
- signatureFormat: auth.signatureFormat,
30
- signaturePrefix: auth.signaturePrefix,
31
- timestamp,
32
- toleranceInSeconds: auth.toleranceInSeconds,
33
- });
34
- }
35
- function verifyBasic(auth, request) {
36
- const value = getHeader(request.headers, 'authorization');
37
- if (!value)
38
- return false;
39
- const expected = `Basic ${Buffer.from(`${auth.username}:${auth.password}`).toString('base64')}`;
40
- return timingSafeEqualString(expected, value);
41
- }
42
- function verifyHeader(auth, request) {
43
- const value = getHeader(request.headers, auth.name);
44
- if (!value)
45
- return false;
46
- return timingSafeEqualString(auth.value, value);
47
- }
48
- function verifyBearer(auth, request) {
49
- const token = getBearerToken(request.headers);
50
- if (!token)
51
- return false;
52
- return timingSafeEqualString(auth.token, token);
53
- }
54
- async function verifyJwt(auth, request) {
55
- const token = getBearerToken(request.headers, auth.header);
56
- if (!token)
57
- return false;
58
- try {
59
- return await jwks({
60
- url: auth.jwksUri,
61
- signature: token,
62
- rawPayload: '',
63
- issuer: auth.issuer,
64
- audience: auth.audience,
65
- });
66
- }
67
- catch {
68
- return false;
69
- }
70
- }
71
- export async function verifyCallbackAuth(auth, request) {
72
- if (!auth)
73
- return true;
74
- switch (auth.type) {
75
- case 'hmac':
76
- return verifyHmac(auth, request);
77
- case 'basic':
78
- return verifyBasic(auth, request);
79
- case 'header':
80
- return verifyHeader(auth, request);
81
- case 'bearer':
82
- return verifyBearer(auth, request);
83
- case 'jwt':
84
- return verifyJwt(auth, request);
85
- default:
86
- throw new TypeError(`Unsupported callback auth type: ${String(auth.type)}`);
87
- }
88
- }
89
- //# sourceMappingURL=verify-callback-auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify-callback-auth.js","sourceRoot":"","sources":["../../src/tools/verify-callback-auth.ts"],"names":[],"mappings":"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"}