@tidblink/server 0.0.0-stage → 0.4.0-rc.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 (116) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1182 -2
  3. package/dist/audio.d.ts +72 -0
  4. package/dist/audio.d.ts.map +1 -0
  5. package/dist/audio.js +168 -0
  6. package/dist/audio.js.map +1 -0
  7. package/dist/backend-connection.d.ts +89 -0
  8. package/dist/backend-connection.d.ts.map +1 -0
  9. package/dist/backend-connection.js +300 -0
  10. package/dist/backend-connection.js.map +1 -0
  11. package/dist/backend-pool.d.ts +93 -0
  12. package/dist/backend-pool.d.ts.map +1 -0
  13. package/dist/backend-pool.js +419 -0
  14. package/dist/backend-pool.js.map +1 -0
  15. package/dist/client-tool-executor.d.ts +31 -0
  16. package/dist/client-tool-executor.d.ts.map +1 -0
  17. package/dist/client-tool-executor.js +190 -0
  18. package/dist/client-tool-executor.js.map +1 -0
  19. package/dist/client-tools.d.ts +21 -0
  20. package/dist/client-tools.d.ts.map +1 -0
  21. package/dist/client-tools.js +48 -0
  22. package/dist/client-tools.js.map +1 -0
  23. package/dist/connector-callback.d.ts +92 -0
  24. package/dist/connector-callback.d.ts.map +1 -0
  25. package/dist/connector-callback.js +155 -0
  26. package/dist/connector-callback.js.map +1 -0
  27. package/dist/connectors.d.ts +66 -0
  28. package/dist/connectors.d.ts.map +1 -0
  29. package/dist/connectors.js +71 -0
  30. package/dist/connectors.js.map +1 -0
  31. package/dist/control.d.ts +17 -0
  32. package/dist/control.d.ts.map +1 -0
  33. package/dist/control.js +52 -0
  34. package/dist/control.js.map +1 -0
  35. package/dist/errors.d.ts +103 -0
  36. package/dist/errors.d.ts.map +1 -0
  37. package/dist/errors.js +115 -0
  38. package/dist/errors.js.map +1 -0
  39. package/dist/events.d.ts +158 -0
  40. package/dist/events.d.ts.map +1 -0
  41. package/dist/events.js +110 -0
  42. package/dist/events.js.map +1 -0
  43. package/dist/files.d.ts +129 -0
  44. package/dist/files.d.ts.map +1 -0
  45. package/dist/files.js +388 -0
  46. package/dist/files.js.map +1 -0
  47. package/dist/history.d.ts +279 -0
  48. package/dist/history.d.ts.map +1 -0
  49. package/dist/history.js +91 -0
  50. package/dist/history.js.map +1 -0
  51. package/dist/http.d.ts +88 -0
  52. package/dist/http.d.ts.map +1 -0
  53. package/dist/http.js +302 -0
  54. package/dist/http.js.map +1 -0
  55. package/dist/index.d.ts +39 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +18 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/organization.d.ts +87 -0
  60. package/dist/organization.d.ts.map +1 -0
  61. package/dist/organization.js +112 -0
  62. package/dist/organization.js.map +1 -0
  63. package/dist/realtime.d.ts +90 -0
  64. package/dist/realtime.d.ts.map +1 -0
  65. package/dist/realtime.js +111 -0
  66. package/dist/realtime.js.map +1 -0
  67. package/dist/session-connection.d.ts +144 -0
  68. package/dist/session-connection.d.ts.map +1 -0
  69. package/dist/session-connection.js +334 -0
  70. package/dist/session-connection.js.map +1 -0
  71. package/dist/session-send.d.ts +49 -0
  72. package/dist/session-send.d.ts.map +1 -0
  73. package/dist/session-send.js +179 -0
  74. package/dist/session-send.js.map +1 -0
  75. package/dist/session.d.ts +165 -0
  76. package/dist/session.d.ts.map +1 -0
  77. package/dist/session.js +253 -0
  78. package/dist/session.js.map +1 -0
  79. package/dist/skills.d.ts +103 -0
  80. package/dist/skills.d.ts.map +1 -0
  81. package/dist/skills.js +98 -0
  82. package/dist/skills.js.map +1 -0
  83. package/dist/sse.d.ts +10 -0
  84. package/dist/sse.d.ts.map +1 -0
  85. package/dist/sse.js +50 -0
  86. package/dist/sse.js.map +1 -0
  87. package/dist/template-switch.d.ts +51 -0
  88. package/dist/template-switch.d.ts.map +1 -0
  89. package/dist/template-switch.js +81 -0
  90. package/dist/template-switch.js.map +1 -0
  91. package/dist/templates.d.ts +129 -0
  92. package/dist/templates.d.ts.map +1 -0
  93. package/dist/templates.js +92 -0
  94. package/dist/templates.js.map +1 -0
  95. package/dist/turn.d.ts +47 -0
  96. package/dist/turn.d.ts.map +1 -0
  97. package/dist/turn.js +210 -0
  98. package/dist/turn.js.map +1 -0
  99. package/dist/usage.d.ts +278 -0
  100. package/dist/usage.d.ts.map +1 -0
  101. package/dist/usage.js +22 -0
  102. package/dist/usage.js.map +1 -0
  103. package/dist/user.d.ts +55 -0
  104. package/dist/user.d.ts.map +1 -0
  105. package/dist/user.js +52 -0
  106. package/dist/user.js.map +1 -0
  107. package/examples/control-turn.mjs +53 -0
  108. package/examples/create-session.mjs +82 -0
  109. package/examples/http-connector.mjs +127 -0
  110. package/examples/lamp-backend.mjs +175 -0
  111. package/examples/prepare-realtime-connection.mjs +72 -0
  112. package/examples/read-usage.mjs +44 -0
  113. package/examples/send-message.mjs +48 -0
  114. package/examples/submit-audio.mjs +57 -0
  115. package/examples/upload-file.mjs +58 -0
  116. package/package.json +59 -4
@@ -0,0 +1,90 @@
1
+ export type RealtimeLanguage = "zh-CN" | "en-US";
2
+ export type RealtimeEndpointingMode = "client" | "server";
3
+ export interface RealtimePcm16AudioFormat {
4
+ encoding: "pcm16";
5
+ sampleRate: number;
6
+ channels: 1;
7
+ }
8
+ export interface RealtimeOpusAudioFormat {
9
+ encoding: "opus";
10
+ sampleRate: number;
11
+ channels: 1;
12
+ packetDurationMs: number;
13
+ bitrate?: 16000 | 24000 | 32000;
14
+ }
15
+ export type RealtimeAudioFormat = RealtimePcm16AudioFormat | RealtimeOpusAudioFormat;
16
+ export interface RealtimeModel {
17
+ id: string;
18
+ label: string;
19
+ available: boolean;
20
+ isDefault: boolean;
21
+ languages: RealtimeLanguage[];
22
+ endpointingModes: RealtimeEndpointingMode[];
23
+ audio: {
24
+ input: RealtimeAudioFormat[];
25
+ output: RealtimeAudioFormat[];
26
+ };
27
+ }
28
+ export interface RealtimeModelCatalog {
29
+ defaultModel: string | null;
30
+ models: RealtimeModel[];
31
+ }
32
+ export interface RealtimeVoiceSetting {
33
+ language: RealtimeLanguage;
34
+ }
35
+ export interface RealtimeModelSelection {
36
+ model: string | null;
37
+ revision: number;
38
+ etag: string;
39
+ voice: RealtimeVoiceSetting | null;
40
+ }
41
+ export interface RealtimeSessionSelectionFields {
42
+ realtimeModel: string | null;
43
+ realtimeModelRevision: number;
44
+ realtimeModelEtag: string;
45
+ realtimeVoice: RealtimeVoiceSetting | null;
46
+ }
47
+ export declare const realtimeModelSelectionFrom: (session: RealtimeSessionSelectionFields) => RealtimeModelSelection;
48
+ export interface RealtimeAudioFormats {
49
+ input: RealtimeAudioFormat;
50
+ output: RealtimeAudioFormat;
51
+ }
52
+ export interface OpenRealtimeConnectionInput {
53
+ audio?: Partial<RealtimeAudioFormats>;
54
+ metadata?: Record<string, string>;
55
+ }
56
+ export interface RealtimeConnection {
57
+ object: "realtime_connection";
58
+ id: string;
59
+ sessionId: string;
60
+ provider: {
61
+ name: string;
62
+ region: string | null;
63
+ model: string | null;
64
+ };
65
+ status: "connecting" | "active" | "paused" | "ended";
66
+ audio: RealtimeAudioFormats;
67
+ activeTaskTurnId: string | null;
68
+ usage: {
69
+ inputAudioSec: number;
70
+ outputAudioSec: number;
71
+ thoughtTokens: number;
72
+ textTokens: number;
73
+ };
74
+ metadata: Record<string, string>;
75
+ createdAt: string;
76
+ endedAt: string | null;
77
+ }
78
+ export interface RealtimeConnectGrant {
79
+ websocketUrl: string;
80
+ connectToken: string;
81
+ connectTokenExpiresAt: string;
82
+ }
83
+ export interface OpenRealtimeConnectionResult extends RealtimeConnectGrant {
84
+ realtimeConnection: RealtimeConnection;
85
+ }
86
+ export declare const requireRealtimeModelSelectionReceipt: (value: unknown, requestId: string) => RealtimeModelSelection;
87
+ export declare const requireOpenRealtimeConnectionReceipt: (value: unknown, requestId: string) => OpenRealtimeConnectionResult;
88
+ export declare const requireRealtimeConnectGrantReceipt: (value: unknown, requestId: string) => RealtimeConnectGrant;
89
+ export declare const requireRealtimeConnectionReceipt: (value: unknown, requestId: string) => RealtimeConnection;
90
+ //# sourceMappingURL=realtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ import { OutcomeUnknownError } from "./errors.js";
2
+ export const realtimeModelSelectionFrom = (session) => ({
3
+ model: session.realtimeModel,
4
+ revision: session.realtimeModelRevision,
5
+ etag: session.realtimeModelEtag,
6
+ voice: session.realtimeVoice,
7
+ });
8
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
9
+ const isString = (value) => typeof value === "string" && value.length > 0;
10
+ const isNullableString = (value) => value === null || typeof value === "string";
11
+ const isNumber = (value) => typeof value === "number" && Number.isFinite(value) && value >= 0;
12
+ const isDateTime = (value) => typeof value === "string" && Number.isFinite(Date.parse(value));
13
+ const isAudioFormat = (value) => {
14
+ if (!isRecord(value) ||
15
+ !isNumber(value.sampleRate) ||
16
+ value.sampleRate <= 0 ||
17
+ value.channels !== 1)
18
+ return false;
19
+ if (value.encoding === "pcm16")
20
+ return true;
21
+ return (value.encoding === "opus" &&
22
+ Number.isInteger(value.packetDurationMs) &&
23
+ isNumber(value.packetDurationMs) &&
24
+ value.packetDurationMs > 0 &&
25
+ (value.bitrate === undefined ||
26
+ value.bitrate === 16000 ||
27
+ value.bitrate === 24000 ||
28
+ value.bitrate === 32000));
29
+ };
30
+ const isRealtimeConnection = (value) => {
31
+ if (!isRecord(value))
32
+ return false;
33
+ const provider = value.provider;
34
+ const audio = value.audio;
35
+ const usage = value.usage;
36
+ const metadata = value.metadata;
37
+ return (value.object === "realtime_connection" &&
38
+ isString(value.id) &&
39
+ isString(value.sessionId) &&
40
+ isRecord(provider) &&
41
+ isString(provider.name) &&
42
+ isNullableString(provider.region) &&
43
+ isNullableString(provider.model) &&
44
+ ["connecting", "active", "paused", "ended"].includes(String(value.status)) &&
45
+ isRecord(audio) &&
46
+ isAudioFormat(audio.input) &&
47
+ isAudioFormat(audio.output) &&
48
+ isNullableString(value.activeTaskTurnId) &&
49
+ isRecord(usage) &&
50
+ isNumber(usage.inputAudioSec) &&
51
+ isNumber(usage.outputAudioSec) &&
52
+ Number.isInteger(usage.thoughtTokens) &&
53
+ isNumber(usage.thoughtTokens) &&
54
+ Number.isInteger(usage.textTokens) &&
55
+ isNumber(usage.textTokens) &&
56
+ isRecord(metadata) &&
57
+ Object.values(metadata).every((entry) => typeof entry === "string") &&
58
+ isDateTime(value.createdAt) &&
59
+ (value.endedAt === null || isDateTime(value.endedAt)));
60
+ };
61
+ const isConnectGrant = (value) => {
62
+ if (!isRecord(value) || !isString(value.websocketUrl))
63
+ return false;
64
+ let protocol;
65
+ try {
66
+ protocol = new URL(value.websocketUrl).protocol;
67
+ }
68
+ catch {
69
+ return false;
70
+ }
71
+ return ((protocol === "ws:" || protocol === "wss:") &&
72
+ typeof value.connectToken === "string" &&
73
+ /^rct_[A-Za-z0-9_-]{43}$/u.test(value.connectToken) &&
74
+ isDateTime(value.connectTokenExpiresAt));
75
+ };
76
+ const unusableReceipt = (operation, requestId) => {
77
+ throw new OutcomeUnknownError(`TiDB Link accepted ${operation} but returned an unusable receipt`, { requestId });
78
+ };
79
+ export const requireRealtimeModelSelectionReceipt = (value, requestId) => {
80
+ if (!isRecord(value))
81
+ return unusableReceipt("the Realtime Model selection", requestId);
82
+ const voice = value.realtimeVoice;
83
+ if (!isNullableString(value.realtimeModel) ||
84
+ !Number.isInteger(value.realtimeModelRevision) ||
85
+ !isNumber(value.realtimeModelRevision) ||
86
+ value.realtimeModelRevision <= 0 ||
87
+ !isString(value.realtimeModelEtag) ||
88
+ (voice !== null &&
89
+ (!isRecord(voice) ||
90
+ (voice.language !== "zh-CN" && voice.language !== "en-US"))))
91
+ return unusableReceipt("the Realtime Model selection", requestId);
92
+ return realtimeModelSelectionFrom(value);
93
+ };
94
+ export const requireOpenRealtimeConnectionReceipt = (value, requestId) => {
95
+ if (!isRecord(value) ||
96
+ !isRealtimeConnection(value.realtimeConnection) ||
97
+ !isConnectGrant(value))
98
+ return unusableReceipt("the Realtime Connection request", requestId);
99
+ return value;
100
+ };
101
+ export const requireRealtimeConnectGrantReceipt = (value, requestId) => {
102
+ if (!isConnectGrant(value))
103
+ return unusableReceipt("the Realtime connect-token request", requestId);
104
+ return value;
105
+ };
106
+ export const requireRealtimeConnectionReceipt = (value, requestId) => {
107
+ if (!isRecord(value) || !isRealtimeConnection(value.realtimeConnection))
108
+ return unusableReceipt("the Realtime Connection mutation", requestId);
109
+ return value.realtimeConnection;
110
+ };
111
+ //# sourceMappingURL=realtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime.js","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AA2DlD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,OAAuC,EACf,EAAE,CAAC,CAAC;IAC5B,KAAK,EAAE,OAAO,CAAC,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAC,qBAAqB;IACvC,IAAI,EAAE,OAAO,CAAC,iBAAiB;IAC/B,KAAK,EAAE,OAAO,CAAC,aAAa;CAC7B,CAAC,CAAC;AA8CH,MAAM,QAAQ,GAAG,CAAC,KAAc,EAA0B,EAAE,CAC1D,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvE,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAmB,EAAE,CACnD,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAChD,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAA0B,EAAE,CAClE,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;AAC9C,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAmB,EAAE,CACnD,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACpE,MAAM,UAAU,GAAG,CAAC,KAAc,EAAmB,EAAE,CACrD,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAElE,MAAM,aAAa,GAAG,CAAC,KAAc,EAAgC,EAAE;IACrE,IACE,CAAC,QAAQ,CAAC,KAAK,CAAC;QAChB,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;QAC3B,KAAK,CAAC,UAAU,IAAI,CAAC;QACrB,KAAK,CAAC,QAAQ,KAAK,CAAC;QAEpB,OAAO,KAAK,CAAC;IACf,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,CACL,KAAK,CAAC,QAAQ,KAAK,MAAM;QACzB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC;QACxC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAChC,KAAK,CAAC,gBAAgB,GAAG,CAAC;QAC1B,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS;YAC1B,KAAK,CAAC,OAAO,KAAK,KAAK;YACvB,KAAK,CAAC,OAAO,KAAK,KAAK;YACvB,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,CAC3B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAA+B,EAAE;IAC3E,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAChC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAChC,OAAO,CACL,KAAK,CAAC,MAAM,KAAK,qBAAqB;QACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClB,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;QACzB,QAAQ,CAAC,QAAQ,CAAC;QAClB,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QACvB,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC;QACjC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC;QAChC,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAClD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CACrB;QACD,QAAQ,CAAC,KAAK,CAAC;QACf,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;QAC1B,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3B,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC;QACxC,QAAQ,CAAC,KAAK,CAAC;QACf,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC;QAC7B,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC;QAC9B,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;QACrC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC;QAC7B,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC;QAClC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;QAC1B,QAAQ,CAAC,QAAQ,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;QACnE,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;QAC3B,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CACtD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAc,EAAiC,EAAE;IACvE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IACpE,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CACL,CAAC,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,MAAM,CAAC;QAC3C,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ;QACtC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QACnD,UAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,CACxC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,SAAiB,EAAE,SAAiB,EAAS,EAAE;IACtE,MAAM,IAAI,mBAAmB,CAC3B,sBAAsB,SAAS,mCAAmC,EAClE,EAAE,SAAS,EAAE,CACd,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAClD,KAAc,EACd,SAAiB,EACO,EAAE;IAC1B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,eAAe,CAAC,8BAA8B,EAAE,SAAS,CAAC,CAAC;IACxF,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;IAClC,IACE,CAAC,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC;QACtC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC;QAC9C,CAAC,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC;QACtC,KAAK,CAAC,qBAAqB,IAAI,CAAC;QAChC,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAClC,CAAC,KAAK,KAAK,IAAI;YACb,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACf,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC;QAEhE,OAAO,eAAe,CAAC,8BAA8B,EAAE,SAAS,CAAC,CAAC;IACpE,OAAO,0BAA0B,CAAC,KAAkD,CAAC,CAAC;AACxF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAClD,KAAc,EACd,SAAiB,EACa,EAAE;IAChC,IACE,CAAC,QAAQ,CAAC,KAAK,CAAC;QAChB,CAAC,oBAAoB,CAAC,KAAK,CAAC,kBAAkB,CAAC;QAC/C,CAAC,cAAc,CAAC,KAAK,CAAC;QAEtB,OAAO,eAAe,CAAC,iCAAiC,EAAE,SAAS,CAAC,CAAC;IACvE,OAAO,KAAgD,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAChD,KAAc,EACd,SAAiB,EACK,EAAE;IACxB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QACxB,OAAO,eAAe,CAAC,oCAAoC,EAAE,SAAS,CAAC,CAAC;IAC1E,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC9C,KAAc,EACd,SAAiB,EACG,EAAE;IACtB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,kBAAkB,CAAC;QACrE,OAAO,eAAe,CAAC,kCAAkC,EAAE,SAAS,CAAC,CAAC;IACxE,OAAO,KAAK,CAAC,kBAAkB,CAAC;AAClC,CAAC,CAAC"}
@@ -0,0 +1,144 @@
1
+ import type { BackendConnectionPool } from "./backend-pool.js";
2
+ import { type ClientToolDeclaration } from "./client-tools.js";
3
+ import { type RealtimeResponseEvent, type RealtimeTranscriptEvent, type SessionEvent } from "./events.js";
4
+ import { HttpClient } from "./http.js";
5
+ import { type OpenRealtimeConnectionInput, type RealtimeConnectGrant } from "./realtime.js";
6
+ import { type SendOptions } from "./session-send.js";
7
+ import type { TurnResult } from "./turn.js";
8
+ /** What a Client Tool handler learns about the call it runs. */
9
+ export interface ClientToolCallContext {
10
+ callId: string;
11
+ sessionId: string;
12
+ userId: string;
13
+ turnId: string;
14
+ /** The tool's name. */
15
+ name: string;
16
+ /** Submit the result before this time; the core then reports the effect as unknown. */
17
+ deadlineAt: Date;
18
+ /** Aborts when the deadline passes. */
19
+ signal: AbortSignal;
20
+ }
21
+ /**
22
+ * One Client Tool: its declaration, which the model sees, and the function
23
+ * that executes it, usually by forwarding the call to a device.
24
+ */
25
+ export interface ClientToolHandler {
26
+ description: string;
27
+ /** JSON Schema of the arguments. */
28
+ parameters: Record<string, unknown>;
29
+ /**
30
+ * Execute one call. Return the text the model receives; other values are
31
+ * sent as JSON. Throw to report a failure, whose message the model sees.
32
+ */
33
+ run(args: Record<string, unknown>, context: ClientToolCallContext): unknown;
34
+ }
35
+ export type ClientToolHandlers = Record<string, ClientToolHandler>;
36
+ /** A completed Realtime user transcript. */
37
+ export type RealtimeTranscript = RealtimeTranscriptEvent["data"];
38
+ /** A completed Realtime model response. */
39
+ export type RealtimeResponse = RealtimeResponseEvent["data"];
40
+ export interface ConnectOptions {
41
+ /**
42
+ * The Session's Client Tools by name. Each attach replaces the Session's
43
+ * whole Client Tool set with these declarations, and this connection
44
+ * executes their calls. Omit to keep the stored set unchanged.
45
+ */
46
+ tools?: ClientToolHandlers;
47
+ /**
48
+ * Receive events only, while another connection executes the Session's
49
+ * Client Tools. An observing connection never takes the Session from an
50
+ * executing one and cannot declare tools.
51
+ */
52
+ observe?: boolean;
53
+ /**
54
+ * Resume after this event: the cursor of the last event you processed,
55
+ * saved through `onCursor`. Without it, delivery starts after the
56
+ * Session's latest event and history is not replayed.
57
+ */
58
+ cursor?: string;
59
+ /** Called after each event's callbacks complete, with its cursor. Persist it to resume. */
60
+ onCursor?: (cursor: string) => void | Promise<void>;
61
+ /** Every event of the Session, in order, including types the SDK does not know. */
62
+ onEvent?: (event: SessionEvent) => void | Promise<void>;
63
+ /** Each completed Realtime user transcript. */
64
+ onTranscript?: (transcript: RealtimeTranscript) => void | Promise<void>;
65
+ /** Each completed Realtime model response. */
66
+ onResponse?: (response: RealtimeResponse) => void | Promise<void>;
67
+ /**
68
+ * Errors that do not end the connection: a callback that threw, an
69
+ * invalid event, a tool result the core did not accept. Without it they
70
+ * are rethrown asynchronously, which by default ends a Node.js process.
71
+ */
72
+ onError?: (error: unknown) => void;
73
+ }
74
+ /** Why a Session connection ended. */
75
+ export type SessionConnectionEnd =
76
+ /** `close()` or `OrganizationClient.close()`. */
77
+ {
78
+ reason: "closed";
79
+ }
80
+ /** Another connection attached the Session for execution. */
81
+ | {
82
+ reason: "superseded";
83
+ }
84
+ /** The Session was deleted. */
85
+ | {
86
+ reason: "session_deleted";
87
+ }
88
+ /** The connection could not be restored, for example after the Organization API Key was revoked. */
89
+ | {
90
+ reason: "error";
91
+ error: unknown;
92
+ };
93
+ /**
94
+ * A Session attached over this process's Backend Connections. It receives
95
+ * the Session's events, in order and without gaps, across reconnects and
96
+ * replica moves, until `close()` or until `closed` reports why it ended.
97
+ */
98
+ export declare class SessionConnection {
99
+ #private;
100
+ readonly sessionId: string;
101
+ readonly userId: string;
102
+ /** Resolves once, with why the connection ended. */
103
+ readonly closed: Promise<SessionConnectionEnd>;
104
+ /** @internal Use `session.connect()`. */
105
+ constructor(pool: BackendConnectionPool, http: HttpClient, userId: string, sessionId: string, options: ConnectOptions, declarations: ClientToolDeclaration[] | undefined);
106
+ /**
107
+ * Cursor of the last event whose callbacks completed, or the Session's
108
+ * position when the connection attached if none has arrived since.
109
+ */
110
+ get cursor(): string | undefined;
111
+ /** The Session's attachment generation from the latest attach. */
112
+ get generation(): number | undefined;
113
+ /**
114
+ * Release the Session. Events stop, and calls published later go to no one
115
+ * until another connection attaches. Calls already running finish and
116
+ * their results are still submitted.
117
+ */
118
+ close(): Promise<void>;
119
+ /**
120
+ * Send a user message over the connection and wait for the Turn it starts,
121
+ * or the active Turn it steers. `onProgress` receives the assistant's draft
122
+ * from the pushed events; the result is read once the Turn finished, with
123
+ * the same shape and errors as `session.turn()`. A message whose answer was
124
+ * lost to a reconnect is sent again with the same `clientEventId`, which
125
+ * the core deduplicates.
126
+ */
127
+ send(text: string | [string, ...string[]], options?: SendOptions): Promise<TurnResult>;
128
+ /**
129
+ * Prepare the Session's Realtime connection and return what a device needs
130
+ * to join it directly: the WebSocket URL and a short-lived connect token.
131
+ * When a Realtime connection is already live, a new token for it is
132
+ * returned instead and `audio` is not applied.
133
+ */
134
+ realtimeGrant(input?: OpenRealtimeConnectionInput, options?: {
135
+ signal?: AbortSignal;
136
+ }): Promise<RealtimeConnectGrant>;
137
+ /** @internal */
138
+ attach(): Promise<void>;
139
+ }
140
+ /** Check `connect()` options and turn tool handlers into declarations. */
141
+ export declare function connectDeclarations(options: ConnectOptions): ClientToolDeclaration[] | undefined;
142
+ /** Open a Session connection; resolves once the first attach took effect. */
143
+ export declare function connectSession(http: HttpClient, pool: BackendConnectionPool | undefined, userId: string | undefined, sessionId: string, options?: ConnectOptions): Promise<SessionConnection>;
144
+ //# sourceMappingURL=session-connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-connection.d.ts","sourceRoot":"","sources":["../src/session-connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,qBAAqB,EAGtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAoC,MAAM,WAAW,CAAC;AACzE,OAAO,EAGL,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,gEAAgE;AAChE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,uFAAuF;IACvF,UAAU,EAAE,IAAI,CAAC;IACjB,uCAAuC;IACvC,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC;;;OAGG;IACH,GAAG,CACD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC;CACZ;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAEnE,4CAA4C;AAC5C,MAAM,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;AACjE,2CAA2C;AAC3C,MAAM,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,mFAAmF;IACnF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,+CAA+C;IAC/C,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,8CAA8C;IAC9C,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC;AAED,sCAAsC;AACtC,MAAM,MAAM,oBAAoB;AAC9B,iDAAiD;AAC/C;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE;AACtB,6DAA6D;GAC3D;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE;AAC1B,+BAA+B;GAC7B;IAAE,MAAM,EAAE,iBAAiB,CAAA;CAAE;AAC/B,oGAAoG;GAClG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAUxC;;;;GAIG;AACH,qBAAa,iBAAiB;;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAmB/C,yCAAyC;gBAEvC,IAAI,EAAE,qBAAqB,EAC3B,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,qBAAqB,EAAE,GAAG,SAAS;IA8BnD;;;OAGG;IACH,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAED,kEAAkE;IAClE,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAEnC;IAED;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;;;;;;OAOG;IACH,IAAI,CACF,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EACpC,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,UAAU,CAAC;IAetB;;;;;OAKG;IACG,aAAa,CACjB,KAAK,GAAE,2BAAgC,EACvC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACjC,OAAO,CAAC,oBAAoB,CAAC;IA0BhC,gBAAgB;IACV,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAoJ9B;AAED,0EAA0E;AAC1E,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,cAAc,GACtB,qBAAqB,EAAE,GAAG,SAAS,CAsCrC;AAED,6EAA6E;AAC7E,wBAAsB,cAAc,CAClC,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,qBAAqB,GAAG,SAAS,EACvC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CAS5B"}