qca-sdk 0.8.0 → 0.10.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.
Files changed (58) hide show
  1. package/README.md +53 -0
  2. package/dist/esm/forward/decision.d.ts +127 -0
  3. package/dist/esm/forward/decision.d.ts.map +1 -0
  4. package/dist/esm/forward/decision.js +32 -0
  5. package/dist/esm/forward/decision.js.map +1 -0
  6. package/dist/esm/forward/forwardClient.d.ts +4 -0
  7. package/dist/esm/forward/forwardClient.d.ts.map +1 -1
  8. package/dist/esm/forward/forwardClient.js +4 -0
  9. package/dist/esm/forward/forwardClient.js.map +1 -1
  10. package/dist/esm/forward/index.d.ts +3 -0
  11. package/dist/esm/forward/index.d.ts.map +1 -1
  12. package/dist/esm/forward/index.js +3 -0
  13. package/dist/esm/forward/index.js.map +1 -1
  14. package/dist/esm/forward/webhook-signature.d.ts +8 -0
  15. package/dist/esm/forward/webhook-signature.d.ts.map +1 -0
  16. package/dist/esm/forward/webhook-signature.js +52 -0
  17. package/dist/esm/forward/webhook-signature.js.map +1 -0
  18. package/dist/esm/forward/webhook.d.ts +95 -0
  19. package/dist/esm/forward/webhook.d.ts.map +1 -0
  20. package/dist/esm/forward/webhook.js +97 -0
  21. package/dist/esm/forward/webhook.js.map +1 -0
  22. package/dist/esm/index.d.ts +3 -0
  23. package/dist/esm/index.d.ts.map +1 -1
  24. package/dist/esm/index.js +3 -0
  25. package/dist/esm/index.js.map +1 -1
  26. package/dist/esm/version.d.ts +1 -1
  27. package/dist/esm/version.d.ts.map +1 -1
  28. package/dist/esm/version.js +1 -1
  29. package/dist/esm/version.js.map +1 -1
  30. package/dist/forward/decision.d.ts +127 -0
  31. package/dist/forward/decision.d.ts.map +1 -0
  32. package/dist/forward/decision.js +36 -0
  33. package/dist/forward/decision.js.map +1 -0
  34. package/dist/forward/forwardClient.d.ts +4 -0
  35. package/dist/forward/forwardClient.d.ts.map +1 -1
  36. package/dist/forward/forwardClient.js +4 -0
  37. package/dist/forward/forwardClient.js.map +1 -1
  38. package/dist/forward/index.d.ts +3 -0
  39. package/dist/forward/index.d.ts.map +1 -1
  40. package/dist/forward/index.js +3 -0
  41. package/dist/forward/index.js.map +1 -1
  42. package/dist/forward/webhook-signature.d.ts +8 -0
  43. package/dist/forward/webhook-signature.d.ts.map +1 -0
  44. package/dist/forward/webhook-signature.js +57 -0
  45. package/dist/forward/webhook-signature.js.map +1 -0
  46. package/dist/forward/webhook.d.ts +95 -0
  47. package/dist/forward/webhook.d.ts.map +1 -0
  48. package/dist/forward/webhook.js +102 -0
  49. package/dist/forward/webhook.js.map +1 -0
  50. package/dist/index.d.ts +3 -0
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +3 -0
  53. package/dist/index.js.map +1 -1
  54. package/dist/version.d.ts +1 -1
  55. package/dist/version.d.ts.map +1 -1
  56. package/dist/version.js +1 -1
  57. package/dist/version.js.map +1 -1
  58. package/package.json +1 -1
package/README.md CHANGED
@@ -318,6 +318,55 @@ for await (const event of stream) {
318
318
 
319
319
  The resumable stream does not query event history, clear an invalid cursor, or deduplicate IDs: delta frames may legitimately share an event ID. It stops after `[DONE]`, `session.status_terminated`, or `session.deleted`. Stop it early with `stream.controller.abort()`, an `AbortSignal` in `RequestOptions`, or `await stream.close()`.
320
320
 
321
+ ## Forward Decisions
322
+
323
+ Evaluate a nonempty `state` object or an accessible `session_id` (exactly one)
324
+ with 1–32 choice or score questions. Choice values are strings or booleans;
325
+ score questions select from your numeric levels. Creation waits for the result.
326
+ The service selects the model; no `model` parameter is accepted. Normal PAT or
327
+ SAT authentication determines the caller's access.
328
+
329
+ ```ts
330
+ import { randomUUID } from 'node:crypto';
331
+ import { ForwardClient } from 'qca-sdk';
332
+
333
+ const client = new ForwardClient(); // Or use the PAT/SA configuration above.
334
+ const decision = await client.decisions.create({
335
+ state: { message: 'My issue is resolved.' },
336
+ questions: [{
337
+ type: 'choice', name: 'resolved',
338
+ instructions: 'Has the user confirmed resolution?',
339
+ choices: [{ value: true }, { value: false }],
340
+ }],
341
+ idempotency_key: randomUUID(),
342
+ });
343
+ const stored = await client.decisions.retrieve(decision.id);
344
+ console.log(stored.answers);
345
+ const page = await client.decisions.list({ limit: 20 });
346
+ console.log(page.data); // Or use for await over list(...) to follow all pages.
347
+ ```
348
+
349
+ For Session input, replace `state` with `session_id`.
350
+ For scores, use `{ type: 'score', instructions: 'Rate risk', levels:
351
+ [{ label: 'low', score: 0 }, { label: 'high', score: 10 }] }`.
352
+
353
+ Session context is selected by the server. Inspect `context.truncated`,
354
+ `context.truncation_reasons`, and the input-token estimate to understand the
355
+ selected history. Explicit state and questions are never shortened; oversized
356
+ input returns HTTP 422. Context estimates are separate from `usage`, which can
357
+ be null. Answers can also have type `refusal`.
358
+
359
+ Reuse an idempotency key only for identical request bytes. A changed request or
360
+ a still-running request with that key returns HTTP 409; the SDK does not retry
361
+ that conflict automatically. Creation errors can contain `decision_id` in the
362
+ standard API error body. Retrieve and list can return running or failed records.
363
+ Lists preserve server order and support `after_id` / `before_id` cursors (one at
364
+ a time), optional `session_id`, and a limit of 1–100. There is no delete endpoint;
365
+ Decision records expire according to server retention.
366
+
367
+ See the [runnable example](examples/forward/decisions.mjs) and the
368
+ [opt-in live test instructions](CONTRIBUTING.md#decision-live-tests).
369
+
321
370
  ## Forward Drive (Beta)
322
371
 
323
372
  Drive is a Beta API. It uses `entries` / `next_page_token`, not the ordinary
@@ -731,3 +780,7 @@ and request IDs without tokens. Tests create temporary Identities, delete them o
731
780
  original Templates and record persisted Conversations because transport close cannot delete them. These entries are not
732
781
  included in daily PAT tests until explicitly configured; offline CI validates
733
782
  protocol behavior without network or credentials.
783
+
784
+ ## Forward Webhooks
785
+
786
+ Manage webhook endpoints and verify signed event deliveries. See [Webhook usage and receiver examples](docs/webhooks.md).
@@ -0,0 +1,127 @@
1
+ import { APIResource } from '../core/resource.js';
2
+ import type { RequestOptions } from '../core/client.js';
3
+ import type { APIPromise } from '../core/api-promise.js';
4
+ import type { PagePromise } from '../core/pagination.js';
5
+ export interface DecisionChoiceParam {
6
+ /** Nonempty string or boolean, distinct within the question. */
7
+ value: string | boolean;
8
+ description?: string;
9
+ }
10
+ export interface DecisionLevelParam {
11
+ label: string;
12
+ /** A finite numeric score, including zero. */
13
+ score: number;
14
+ description?: string;
15
+ }
16
+ export type DecisionQuestionParam = {
17
+ /** Optional unique, nonempty name, up to 128 bytes. */
18
+ name?: string;
19
+ instructions: string;
20
+ } & ({
21
+ type: 'choice';
22
+ choices: DecisionChoiceParam[];
23
+ levels?: never;
24
+ } | {
25
+ type: 'score';
26
+ levels: DecisionLevelParam[];
27
+ choices?: never;
28
+ });
29
+ /** Provide exactly one input mode. No model parameter is accepted. */
30
+ export type DecisionCreateParams = {
31
+ /** One to 32 questions, each with 2-32 choices or levels. */
32
+ questions: DecisionQuestionParam[];
33
+ /** Reusing a key with identical request bytes replays the stored result. */
34
+ idempotency_key?: string;
35
+ } & ({
36
+ session_id: string;
37
+ state?: never;
38
+ } | {
39
+ session_id?: never;
40
+ state: Record<string, unknown>;
41
+ });
42
+ export interface DecisionListParams {
43
+ session_id?: string;
44
+ /** Page size from 1 to 100; defaults to 20. */
45
+ limit?: number;
46
+ /** Mutually exclusive with before_id. */
47
+ after_id?: string;
48
+ before_id?: string;
49
+ }
50
+ export interface DecisionChoice extends DecisionChoiceParam {
51
+ [key: string]: unknown;
52
+ }
53
+ export interface DecisionLevel extends DecisionLevelParam {
54
+ [key: string]: unknown;
55
+ }
56
+ export interface DecisionQuestion {
57
+ type: 'choice' | 'score';
58
+ name?: string;
59
+ instructions: string;
60
+ choices?: DecisionChoice[];
61
+ levels?: DecisionLevel[];
62
+ [key: string]: unknown;
63
+ }
64
+ export interface DecisionAnswer {
65
+ type: 'choice' | 'score' | 'refusal';
66
+ name?: string;
67
+ value?: string | boolean;
68
+ score?: number;
69
+ refusal?: string;
70
+ [key: string]: unknown;
71
+ }
72
+ /** Session fields and preparation metadata may be absent on running/failed records. */
73
+ export interface DecisionContext {
74
+ mode: 'state' | 'session';
75
+ policy_version?: string;
76
+ token_estimator?: string;
77
+ /** Estimate of the full model request, separate from billed usage. */
78
+ estimated_input_tokens?: number;
79
+ max_input_tokens?: number;
80
+ snapshot_at?: string;
81
+ anchor_event_id?: string;
82
+ first_event_id?: string;
83
+ last_event_id?: string;
84
+ included_segment_count?: number;
85
+ included_event_count?: number;
86
+ scan_limited?: boolean;
87
+ truncated?: boolean;
88
+ truncation_reasons?: string[];
89
+ [key: string]: unknown;
90
+ }
91
+ export interface DecisionError {
92
+ code: string;
93
+ message: string;
94
+ [key: string]: unknown;
95
+ }
96
+ export interface Decision {
97
+ id: string;
98
+ /** Null for explicit-state input. */
99
+ session_id: string | null;
100
+ source: string;
101
+ status: 'running' | 'completed' | 'failed';
102
+ questions: DecisionQuestion[];
103
+ answers: DecisionAnswer[];
104
+ context: DecisionContext;
105
+ usage: Record<string, unknown> | null;
106
+ error: DecisionError | null;
107
+ created_at: string;
108
+ completed_at: string | null;
109
+ [key: string]: unknown;
110
+ }
111
+ /** Evaluates explicit state or an accessible Session; uses normal PAT/SAT authentication. */
112
+ export declare class Decisions extends APIResource {
113
+ /** Synchronously evaluate and store a Decision. State must be nonempty;
114
+ * state.session_context is reserved for server-built history.
115
+ * @operation createDecision
116
+ */
117
+ create(params: DecisionCreateParams, options?: RequestOptions): APIPromise<Decision>;
118
+ /** Retrieve a Decision accessible to the current caller.
119
+ * @operation getDecision
120
+ */
121
+ retrieve(decisionID: string, options?: RequestOptions): APIPromise<Decision>;
122
+ /** List stored Decisions in server order, optionally filtered by an accessible Session.
123
+ * @operation listDecisions
124
+ */
125
+ list(params?: DecisionListParams, options?: RequestOptions): PagePromise<Decision>;
126
+ }
127
+ //# sourceMappingURL=decision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision.d.ts","sourceRoot":"","sources":["../../../src/forward/decision.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { APIResource } from '../core/resource.js';
2
+ import { pathParam, requestHeaders } from './_utils.js';
3
+ /** Evaluates explicit state or an accessible Session; uses normal PAT/SAT authentication. */
4
+ export class Decisions extends APIResource {
5
+ /** Synchronously evaluate and store a Decision. State must be nonempty;
6
+ * state.session_context is reserved for server-built history.
7
+ * @operation createDecision
8
+ */
9
+ create(params, options) {
10
+ const path = 'decisions';
11
+ const { idempotency_key, ...body } = params;
12
+ return this._client.request({
13
+ method: 'POST', path, body, ...options,
14
+ headers: requestHeaders({ 'Idempotency-Key': idempotency_key }, options?.headers),
15
+ });
16
+ }
17
+ /** Retrieve a Decision accessible to the current caller.
18
+ * @operation getDecision
19
+ */
20
+ retrieve(decisionID, options) {
21
+ const path = `decisions/${pathParam(decisionID, 'decisionID')}`;
22
+ return this._client.request({ method: 'GET', path, ...options });
23
+ }
24
+ /** List stored Decisions in server order, optionally filtered by an accessible Session.
25
+ * @operation listDecisions
26
+ */
27
+ list(params = {}, options) {
28
+ const path = 'decisions';
29
+ return this._client.getAPIList(path, params, options, 'cursor');
30
+ }
31
+ }
32
+ //# sourceMappingURL=decision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision.js","sourceRoot":"","sources":["../../../src/forward/decision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIlD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAsGxD,6FAA6F;AAC7F,MAAM,OAAO,SAAU,SAAQ,WAAW;IACxC;;;OAGG;IACH,MAAM,CAAC,MAA4B,EAAE,OAAwB;QAC3D,MAAM,IAAI,GAAG,WAAW,CAAC;QACzB,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAW;YACpC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO;YACtC,OAAO,EAAE,cAAc,CAAC,EAAE,iBAAiB,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC;SAClF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,UAAkB,EAAE,OAAwB;QACnD,MAAM,IAAI,GAAG,aAAa,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAW,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,SAA6B,EAAE,EAAE,OAAwB;QAC5D,MAAM,IAAI,GAAG,WAAW,CAAC;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAW,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5E,CAAC;CACF"}
@@ -1,3 +1,5 @@
1
+ import { Decisions } from './decision.js';
2
+ import { Webhooks } from './webhook.js';
1
3
  import { APIClient, type ClientOptions } from '../core/client.js';
2
4
  import { Templates } from './template.js';
3
5
  import { Identities } from './identity.js';
@@ -19,6 +21,8 @@ import { Realtime } from './realtime/realtime.js';
19
21
  import { ServiceAccountTokens } from './service-account-token.js';
20
22
  export type ForwardClientOptions = ClientOptions;
21
23
  export declare class ForwardClient extends APIClient {
24
+ readonly decisions: Decisions;
25
+ readonly webhooks: Webhooks;
22
26
  readonly templates: Templates;
23
27
  readonly identities: Identities;
24
28
  readonly sessions: Sessions;
@@ -1 +1 @@
1
- {"version":3,"file":"forwardClient.d.ts","sourceRoot":"","sources":["../../../src/forward/forwardClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAEjD,qBAAa,aAAc,SAAQ,SAAS;IAC1C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAuB;IACpD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAwB;IACvD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAsB;IACjD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAuB;IACpD,QAAQ,CAAC,YAAY,EAAE,YAAY,CAA0B;IAC7D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAqB;IAC9C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAsB;IACjD,QAAQ,CAAC,eAAe,EAAE,eAAe,CAA6B;IACtE,QAAQ,CAAC,YAAY,EAAE,YAAY,CAA0B;IAC7D,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAmB;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAC3C,QAAQ,CAAC,YAAY,EAAE,YAAY,CAA0B;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAC3C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAmB;IACxC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAsB;IAEjD,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,CAAkC;gBAEzE,OAAO,GAAE,oBAAyB;CAG/C;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"forwardClient.d.ts","sourceRoot":"","sources":["../../../src/forward/forwardClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAEjD,qBAAa,aAAc,SAAQ,SAAS;IAC1C,QAAQ,CAAC,SAAS,YAAuB;IACzC,QAAQ,CAAC,QAAQ,WAAsB;IACvC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAuB;IACpD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAwB;IACvD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAsB;IACjD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAuB;IACpD,QAAQ,CAAC,YAAY,EAAE,YAAY,CAA0B;IAC7D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAqB;IAC9C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAsB;IACjD,QAAQ,CAAC,eAAe,EAAE,eAAe,CAA6B;IACtE,QAAQ,CAAC,YAAY,EAAE,YAAY,CAA0B;IAC7D,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAmB;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAC3C,QAAQ,CAAC,YAAY,EAAE,YAAY,CAA0B;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAC3C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAmB;IACxC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAsB;IAEjD,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,CAAkC;gBAEzE,OAAO,GAAE,oBAAyB;CAG/C;AAED,eAAe,aAAa,CAAC"}
@@ -1,4 +1,6 @@
1
1
  // Resource hierarchy mirrors the Forward API surface.
2
+ import { Decisions } from './decision.js';
3
+ import { Webhooks } from './webhook.js';
2
4
  import { APIClient } from '../core/client.js';
3
5
  import { Templates } from './template.js';
4
6
  import { Identities } from './identity.js';
@@ -19,6 +21,8 @@ import { Usage } from './usage.js';
19
21
  import { Realtime } from './realtime/realtime.js';
20
22
  import { ServiceAccountTokens } from './service-account-token.js';
21
23
  export class ForwardClient extends APIClient {
24
+ decisions = new Decisions(this);
25
+ webhooks = new Webhooks(this);
22
26
  templates = new Templates(this);
23
27
  identities = new Identities(this);
24
28
  sessions = new Sessions(this);
@@ -1 +1 @@
1
- {"version":3,"file":"forwardClient.js","sourceRoot":"","sources":["../../../src/forward/forwardClient.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,OAAO,EAAE,SAAS,EAAsB,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAIlE,MAAM,OAAO,aAAc,SAAQ,SAAS;IACjC,SAAS,GAAc,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3C,UAAU,GAAe,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9C,QAAQ,GAAa,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,SAAS,GAAc,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3C,YAAY,GAAiB,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACpD,OAAO,GAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,QAAQ,GAAa,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,eAAe,GAAoB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IAC7D,YAAY,GAAiB,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACpD,KAAK,GAAU,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,GAAW,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,GAAW,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,GAAW,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,YAAY,GAAiB,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,GAAW,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,KAAK,GAAU,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,QAAQ,GAAa,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAExC,oBAAoB,GAAyB,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAErF,YAAY,UAAgC,EAAE;QAC5C,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC5B,CAAC;CACF;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"forwardClient.js","sourceRoot":"","sources":["../../../src/forward/forwardClient.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,SAAS,EAAsB,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAIlE,MAAM,OAAO,aAAc,SAAQ,SAAS;IACjC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,SAAS,GAAc,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3C,UAAU,GAAe,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9C,QAAQ,GAAa,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,SAAS,GAAc,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3C,YAAY,GAAiB,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACpD,OAAO,GAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,QAAQ,GAAa,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,eAAe,GAAoB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IAC7D,YAAY,GAAiB,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACpD,KAAK,GAAU,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,GAAW,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,GAAW,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,GAAW,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,YAAY,GAAiB,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,GAAW,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,KAAK,GAAU,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,QAAQ,GAAa,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAExC,oBAAoB,GAAyB,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAErF,YAAY,UAAgC,EAAE;QAC5C,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC5B,CAAC;CACF;AAED,eAAe,aAAa,CAAC"}
@@ -47,4 +47,7 @@ export * from './realtime/types.js';
47
47
  export { ServiceAccountTokens } from './service-account-token.js';
48
48
  export { IdentityServiceAccountTokens } from './identity-service-account-token.js';
49
49
  export { Drives } from './drive.js';
50
+ export * from "./webhook.js";
51
+ export * from "./webhook-signature.js";
52
+ export * from './decision.js';
50
53
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forward/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,IAAI,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7E,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACjF,YAAY,EAAE,QAAQ,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AACxF,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC9J,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAClH,cAAc,qBAAqB,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AAEnF,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forward/index.ts"],"names":[],"mappings":"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"}
@@ -41,4 +41,7 @@ export * from './realtime/types.js';
41
41
  export { ServiceAccountTokens } from './service-account-token.js';
42
42
  export { IdentityServiceAccountTokens } from './identity-service-account-token.js';
43
43
  export { Drives } from './drive.js';
44
+ export * from "./webhook.js";
45
+ export * from "./webhook-signature.js";
46
+ export * from './decision.js';
44
47
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/forward/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,IAAI,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7E,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAGjF,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE9J,cAAc,qBAAqB,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AAEnF,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/forward/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,IAAI,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7E,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAGjF,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE9J,cAAc,qBAAqB,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AAEnF,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AAEvC,cAAc,eAAe,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** Missing, invalid, expired or mismatched delivery authentication. */
2
+ export declare class WebhookVerificationError extends Error {
3
+ constructor();
4
+ }
5
+ /** Verify original body bytes before parsing JSON. Accepts any matching v1 signature
6
+ * within 300 seconds. Deduplicate accepted events using Webhook-ID. */
7
+ export declare function verifyWebhookSignature(payload: Uint8Array, headers: Headers | Record<string, string>, secret: string): Promise<void>;
8
+ //# sourceMappingURL=webhook-signature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-signature.d.ts","sourceRoot":"","sources":["../../../src/forward/webhook-signature.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,qBAAa,wBAAyB,SAAQ,KAAK;;CAElD;AAED;uEACuE;AACvE,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B1I"}
@@ -0,0 +1,52 @@
1
+ /** Missing, invalid, expired or mismatched delivery authentication. */
2
+ export class WebhookVerificationError extends Error {
3
+ constructor() { super('webhook signature verification failed'); this.name = 'WebhookVerificationError'; }
4
+ }
5
+ /** Verify original body bytes before parsing JSON. Accepts any matching v1 signature
6
+ * within 300 seconds. Deduplicate accepted events using Webhook-ID. */
7
+ export async function verifyWebhookSignature(payload, headers, secret) {
8
+ const invalid = () => new WebhookVerificationError();
9
+ const header = (name) => {
10
+ if (headers instanceof Headers)
11
+ return headers.get(name) ?? '';
12
+ const values = Object.entries(headers).filter(([k]) => k.toLowerCase() === name).map(([, v]) => v);
13
+ return values.length === 1 ? values[0] : '';
14
+ };
15
+ const id = header('webhook-id'), timestamp = header('webhook-timestamp');
16
+ if (!(payload instanceof Uint8Array) || !id || /[.\r\n]/.test(id) || !/^[0-9]{1,19}$/.test(timestamp) || !secret.startsWith('whsec_'))
17
+ throw invalid();
18
+ const ts = Number(timestamp), now = Math.floor(Date.now() / 1000);
19
+ if (!Number.isSafeInteger(ts) || ts < now - 300 || ts > now + 300)
20
+ throw invalid();
21
+ const decode = (value) => {
22
+ if (!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(value))
23
+ throw invalid();
24
+ const raw = atob(value);
25
+ if (btoa(raw) !== value)
26
+ throw invalid();
27
+ return Uint8Array.from(raw, c => c.charCodeAt(0));
28
+ };
29
+ const keyBytes = decode(secret.slice(6));
30
+ if (keyBytes.length < 24 || keyBytes.length > 64)
31
+ throw invalid();
32
+ const prefix = new TextEncoder().encode(`${id}.${timestamp}.`);
33
+ const message = new Uint8Array(prefix.length + payload.length);
34
+ message.set(prefix);
35
+ message.set(payload, prefix.length);
36
+ const key = await globalThis.crypto.subtle.importKey('raw', keyBytes, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);
37
+ for (const signature of header('webhook-signature').split(/\s+/)) {
38
+ if (!signature.startsWith('v1,'))
39
+ continue;
40
+ let candidate;
41
+ try {
42
+ candidate = decode(signature.slice(3));
43
+ }
44
+ catch {
45
+ continue;
46
+ }
47
+ if (await globalThis.crypto.subtle.verify('HMAC', key, candidate, message))
48
+ return;
49
+ }
50
+ throw invalid();
51
+ }
52
+ //# sourceMappingURL=webhook-signature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-signature.js","sourceRoot":"","sources":["../../../src/forward/webhook-signature.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ import { APIResource } from '../core/resource.js';
2
+ import type { RequestOptions } from '../core/client.js';
3
+ import type { APIPromise } from '../core/api-promise.js';
4
+ import type { PagePromise } from '../core/pagination.js';
5
+ export interface WebhookEndpoint {
6
+ id: string;
7
+ url: string;
8
+ events: string[];
9
+ description?: string;
10
+ metadata: Record<string, unknown>;
11
+ active: boolean;
12
+ created_at: string;
13
+ updated_at: string;
14
+ last_success_at?: string | null;
15
+ last_failure_at?: string | null;
16
+ disabled_reason?: string;
17
+ consecutive_fail: number;
18
+ [key: string]: unknown;
19
+ }
20
+ /** signing_secret is returned once. Store securely; do not log this response. */
21
+ export interface WebhookEndpointCreateResponse {
22
+ id: string;
23
+ url: string;
24
+ events: string[];
25
+ description?: string;
26
+ metadata: Record<string, unknown>;
27
+ active: boolean;
28
+ created_at: string;
29
+ signing_secret: string;
30
+ [key: string]: unknown;
31
+ }
32
+ export interface WebhookEndpointCreateParams {
33
+ url: string;
34
+ events: string[];
35
+ description?: string;
36
+ metadata?: Record<string, string>;
37
+ idempotency_key?: string;
38
+ }
39
+ export interface WebhookEndpointUpdateParams {
40
+ url?: string;
41
+ events?: string[];
42
+ description?: string;
43
+ active?: boolean;
44
+ /** Merge entries; a null value removes the key. */
45
+ metadata?: Record<string, string | null>;
46
+ }
47
+ export interface WebhookEndpointListParams {
48
+ limit?: number;
49
+ after_id?: string;
50
+ }
51
+ /** Accepted delivery rows; not a delivery success report. */
52
+ export interface WebhookEndpointTestResponse {
53
+ event_id: number;
54
+ delivery_rows: number;
55
+ [key: string]: unknown;
56
+ }
57
+ /** Requires a PAT or administrator SAT. */
58
+ export declare class Webhooks extends APIResource {
59
+ readonly endpoints: WebhookEndpoints;
60
+ }
61
+ export declare class WebhookEndpoints extends APIResource {
62
+ /** Create webhook endpoints.
63
+ * @operation createWebhookEndpoint
64
+ */
65
+ create(params: WebhookEndpointCreateParams, options?: RequestOptions): APIPromise<WebhookEndpointCreateResponse>;
66
+ /** List webhook endpoints.
67
+ * @operation listWebhookEndpoints
68
+ */
69
+ list(params?: WebhookEndpointListParams, options?: RequestOptions): PagePromise<WebhookEndpoint>;
70
+ /** Retrieve webhook endpoints.
71
+ * @operation getWebhookEndpoint
72
+ */
73
+ retrieve(endpointID: string, options?: RequestOptions): APIPromise<WebhookEndpoint>;
74
+ /** Update webhook endpoints.
75
+ * @operation updateWebhookEndpoint
76
+ */
77
+ update(endpointID: string, params?: WebhookEndpointUpdateParams, options?: RequestOptions): APIPromise<WebhookEndpoint>;
78
+ /** Delete webhook endpoints.
79
+ * @operation deleteWebhookEndpoint
80
+ */
81
+ delete(endpointID: string, options?: RequestOptions): APIPromise<void>;
82
+ /** Enable webhook endpoints.
83
+ * @operation enableWebhookEndpoint
84
+ */
85
+ enable(endpointID: string, options?: RequestOptions): APIPromise<WebhookEndpoint>;
86
+ /** Disable webhook endpoints.
87
+ * @operation disableWebhookEndpoint
88
+ */
89
+ disable(endpointID: string, options?: RequestOptions): APIPromise<WebhookEndpoint>;
90
+ /** Queue a synthetic event; acceptance does not confirm delivery.
91
+ * @operation testWebhookEndpoint
92
+ */
93
+ test(endpointID: string, options?: RequestOptions): APIPromise<WebhookEndpointTestResponse>;
94
+ }
95
+ //# sourceMappingURL=webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../src/forward/webhook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import { APIResource } from '../core/resource.js';
2
+ import { pathParam, requestHeaders } from './_utils.js';
3
+ /** Requires a PAT or administrator SAT. */
4
+ export class Webhooks extends APIResource {
5
+ endpoints = new WebhookEndpoints(this._client);
6
+ }
7
+ export class WebhookEndpoints extends APIResource {
8
+ /** Create webhook endpoints.
9
+ * @operation createWebhookEndpoint
10
+ */
11
+ create(params, options) {
12
+ const path = 'webhook/endpoints';
13
+ const { idempotency_key, ...body } = params;
14
+ return this._client.request({
15
+ method: "POST",
16
+ path,
17
+ body,
18
+ ...options,
19
+ headers: requestHeaders({ "Idempotency-Key": idempotency_key }, options?.headers)
20
+ });
21
+ }
22
+ /** List webhook endpoints.
23
+ * @operation listWebhookEndpoints
24
+ */
25
+ list(params = {}, options) {
26
+ const path = 'webhook/endpoints';
27
+ return this._client.getAPIList(path, params, options, 'cursor');
28
+ }
29
+ /** Retrieve webhook endpoints.
30
+ * @operation getWebhookEndpoint
31
+ */
32
+ retrieve(endpointID, options) {
33
+ const path = `webhook/endpoints/${pathParam(endpointID, "endpointID")}`;
34
+ return this._client.request({
35
+ method: "GET",
36
+ path,
37
+ ...options
38
+ });
39
+ }
40
+ /** Update webhook endpoints.
41
+ * @operation updateWebhookEndpoint
42
+ */
43
+ update(endpointID, params = {}, options) {
44
+ const path = `webhook/endpoints/${pathParam(endpointID, "endpointID")}`;
45
+ return this._client.request({
46
+ method: "PUT",
47
+ path,
48
+ body: params,
49
+ ...options
50
+ });
51
+ }
52
+ /** Delete webhook endpoints.
53
+ * @operation deleteWebhookEndpoint
54
+ */
55
+ delete(endpointID, options) {
56
+ const path = `webhook/endpoints/${pathParam(endpointID, "endpointID")}`;
57
+ return this._client.request({
58
+ method: "DELETE",
59
+ path, responseType: "void",
60
+ ...options
61
+ });
62
+ }
63
+ /** Enable webhook endpoints.
64
+ * @operation enableWebhookEndpoint
65
+ */
66
+ enable(endpointID, options) {
67
+ const path = `webhook/endpoints/${pathParam(endpointID, "endpointID")}/enable`;
68
+ return this._client.request({
69
+ method: "POST",
70
+ path,
71
+ ...options
72
+ });
73
+ }
74
+ /** Disable webhook endpoints.
75
+ * @operation disableWebhookEndpoint
76
+ */
77
+ disable(endpointID, options) {
78
+ const path = `webhook/endpoints/${pathParam(endpointID, "endpointID")}/disable`;
79
+ return this._client.request({
80
+ method: "POST",
81
+ path,
82
+ ...options
83
+ });
84
+ }
85
+ /** Queue a synthetic event; acceptance does not confirm delivery.
86
+ * @operation testWebhookEndpoint
87
+ */
88
+ test(endpointID, options) {
89
+ const path = `webhook/endpoints/${pathParam(endpointID, "endpointID")}/test`;
90
+ return this._client.request({
91
+ method: "POST",
92
+ path,
93
+ ...options
94
+ });
95
+ }
96
+ }
97
+ //# sourceMappingURL=webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../../src/forward/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIlD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAgDxD,2CAA2C;AAC3C,MAAM,OAAO,QAAS,SAAQ,WAAW;IAAY,SAAS,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;CAAE;AACtG,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IAC/C;;OAEG;IACH,MAAM,CAAC,MAAmC,EAAE,OAAwB;QAClE,MAAM,IAAI,GAAG,mBAAmB,CAAC;QACjC,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAgC;YACzD,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,IAAI;YACJ,GAAG,OAAO;YACV,OAAO,EAAE,cAAc,CAAC,EAAE,iBAAiB,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC;SAClF,CAAC,CAAC;IACL,CAAC;IACD;;OAEG;IACH,IAAI,CAAC,SAAoC,EAAE,EAAE,OAAwB;QACnE,MAAM,IAAI,GAAG,mBAAmB,CAAC;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAkB,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnF,CAAC;IACD;;OAEG;IACH,QAAQ,CAAC,UAAkB,EAAE,OAAwB;QACnD,MAAM,IAAI,GAAG,qBAAqB,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,CAAC;QACxE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAkB;YAC3C,MAAM,EAAE,KAAK;YACb,IAAI;YACJ,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IACD;;OAEG;IACH,MAAM,CAAC,UAAkB,EAAE,SAAsC,EAAE,EAAE,OAAwB;QAC3F,MAAM,IAAI,GAAG,qBAAqB,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,CAAC;QACxE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAkB;YAC3C,MAAM,EAAE,KAAK;YACb,IAAI;YACJ,IAAI,EAAE,MAAM;YACZ,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IACD;;OAEG;IACH,MAAM,CAAC,UAAkB,EAAE,OAAwB;QACjD,MAAM,IAAI,GAAG,qBAAqB,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,CAAC;QACxE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAO;YAChC,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,YAAY,EAAE,MAAM;YAC1B,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IACD;;OAEG;IACH,MAAM,CAAC,UAAkB,EAAE,OAAwB;QACjD,MAAM,IAAI,GAAG,qBAAqB,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,SAAS,CAAC;QAC/E,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAkB;YAC3C,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IACD;;OAEG;IACH,OAAO,CAAC,UAAkB,EAAE,OAAwB;QAClD,MAAM,IAAI,GAAG,qBAAqB,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,UAAU,CAAC;QAChF,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAkB;YAC3C,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IACD;;OAEG;IACH,IAAI,CAAC,UAAkB,EAAE,OAAwB;QAC/C,MAAM,IAAI,GAAG,qBAAqB,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,OAAO,CAAC;QAC7E,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAA8B;YACvD,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -14,4 +14,7 @@ export { RealtimeConversations, RealtimeHistoryPage } from './forward/realtime/c
14
14
  export { RealtimeConnection, RealtimeProtocolError, RealtimeConnectionClosedError, RealtimeServerError, decodeRealtimeAudio } from './forward/realtime/connection.js';
15
15
  export type { RealtimeConnectOptions, RealtimeWaitOptions, RealtimeCloseOptions } from './forward/realtime/connection.js';
16
16
  export * from './forward/realtime/types.js';
17
+ export * from "./forward/webhook.js";
18
+ export * from "./forward/webhook-signature.js";
19
+ export * from './forward/decision.js';
17
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACvF,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACtK,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAC1H,cAAc,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACvF,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACtK,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAC1H,cAAc,6BAA6B,CAAC;AAE5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAE/C,cAAc,uBAAuB,CAAC"}