@polymorfa/sdk 0.1.0-dev.20260922093854
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.
- package/LICENSE +21 -0
- package/README.md +1881 -0
- package/dist/bridge.d.ts +31 -0
- package/dist/bridge.d.ts.map +1 -0
- package/dist/bridge.js +39 -0
- package/dist/bridge.js.map +1 -0
- package/dist/calls/api.d.ts +109 -0
- package/dist/calls/api.d.ts.map +1 -0
- package/dist/calls/api.js +179 -0
- package/dist/calls/api.js.map +1 -0
- package/dist/calls/call.d.ts +286 -0
- package/dist/calls/call.d.ts.map +1 -0
- package/dist/calls/call.js +860 -0
- package/dist/calls/call.js.map +1 -0
- package/dist/calls/client.d.ts +124 -0
- package/dist/calls/client.d.ts.map +1 -0
- package/dist/calls/client.js +447 -0
- package/dist/calls/client.js.map +1 -0
- package/dist/calls/diagnostics.d.ts +74 -0
- package/dist/calls/diagnostics.d.ts.map +1 -0
- package/dist/calls/diagnostics.js +133 -0
- package/dist/calls/diagnostics.js.map +1 -0
- package/dist/calls/errors.d.ts +37 -0
- package/dist/calls/errors.d.ts.map +1 -0
- package/dist/calls/errors.js +52 -0
- package/dist/calls/errors.js.map +1 -0
- package/dist/calls/events.d.ts +15 -0
- package/dist/calls/events.d.ts.map +1 -0
- package/dist/calls/events.js +34 -0
- package/dist/calls/events.js.map +1 -0
- package/dist/calls/index.d.ts +6 -0
- package/dist/calls/index.d.ts.map +1 -0
- package/dist/calls/index.js +7 -0
- package/dist/calls/index.js.map +1 -0
- package/dist/calls/internal.d.ts +18 -0
- package/dist/calls/internal.d.ts.map +1 -0
- package/dist/calls/internal.js +18 -0
- package/dist/calls/internal.js.map +1 -0
- package/dist/calls/lifecycle.d.ts +111 -0
- package/dist/calls/lifecycle.d.ts.map +1 -0
- package/dist/calls/lifecycle.js +490 -0
- package/dist/calls/lifecycle.js.map +1 -0
- package/dist/calls/media.d.ts +102 -0
- package/dist/calls/media.d.ts.map +1 -0
- package/dist/calls/media.js +414 -0
- package/dist/calls/media.js.map +1 -0
- package/dist/calls/protocol.d.ts +216 -0
- package/dist/calls/protocol.d.ts.map +1 -0
- package/dist/calls/protocol.js +268 -0
- package/dist/calls/protocol.js.map +1 -0
- package/dist/calls/token.d.ts +43 -0
- package/dist/calls/token.d.ts.map +1 -0
- package/dist/calls/token.js +146 -0
- package/dist/calls/token.js.map +1 -0
- package/dist/client.d.ts +65 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +119 -0
- package/dist/client.js.map +1 -0
- package/dist/credentials.d.ts +50 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +73 -0
- package/dist/credentials.js.map +1 -0
- package/dist/errors.d.ts +71 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +129 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +70 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/media/whatsapp.d.ts +105 -0
- package/dist/media/whatsapp.d.ts.map +1 -0
- package/dist/media/whatsapp.js +624 -0
- package/dist/media/whatsapp.js.map +1 -0
- package/dist/messaging/bansafe.d.ts +30 -0
- package/dist/messaging/bansafe.d.ts.map +1 -0
- package/dist/messaging/bansafe.js +86 -0
- package/dist/messaging/bansafe.js.map +1 -0
- package/dist/messaging/business.d.ts +35 -0
- package/dist/messaging/business.d.ts.map +1 -0
- package/dist/messaging/business.js +145 -0
- package/dist/messaging/business.js.map +1 -0
- package/dist/messaging/calls.d.ts +9 -0
- package/dist/messaging/calls.d.ts.map +1 -0
- package/dist/messaging/calls.js +16 -0
- package/dist/messaging/calls.js.map +1 -0
- package/dist/messaging/campaigns.d.ts +19 -0
- package/dist/messaging/campaigns.d.ts.map +1 -0
- package/dist/messaging/campaigns.js +77 -0
- package/dist/messaging/campaigns.js.map +1 -0
- package/dist/messaging/channels.d.ts +23 -0
- package/dist/messaging/channels.d.ts.map +1 -0
- package/dist/messaging/channels.js +104 -0
- package/dist/messaging/channels.js.map +1 -0
- package/dist/messaging/chats.d.ts +14 -0
- package/dist/messaging/chats.d.ts.map +1 -0
- package/dist/messaging/chats.js +51 -0
- package/dist/messaging/chats.js.map +1 -0
- package/dist/messaging/client-tokens.d.ts +15 -0
- package/dist/messaging/client-tokens.d.ts.map +1 -0
- package/dist/messaging/client-tokens.js +64 -0
- package/dist/messaging/client-tokens.js.map +1 -0
- package/dist/messaging/client.d.ts +58 -0
- package/dist/messaging/client.d.ts.map +1 -0
- package/dist/messaging/client.js +100 -0
- package/dist/messaging/client.js.map +1 -0
- package/dist/messaging/contacts.d.ts +20 -0
- package/dist/messaging/contacts.d.ts.map +1 -0
- package/dist/messaging/contacts.js +75 -0
- package/dist/messaging/contacts.js.map +1 -0
- package/dist/messaging/groups.d.ts +34 -0
- package/dist/messaging/groups.d.ts.map +1 -0
- package/dist/messaging/groups.js +97 -0
- package/dist/messaging/groups.js.map +1 -0
- package/dist/messaging/identities.d.ts +9 -0
- package/dist/messaging/identities.d.ts.map +1 -0
- package/dist/messaging/identities.js +21 -0
- package/dist/messaging/identities.js.map +1 -0
- package/dist/messaging/labels.d.ts +16 -0
- package/dist/messaging/labels.d.ts.map +1 -0
- package/dist/messaging/labels.js +65 -0
- package/dist/messaging/labels.js.map +1 -0
- package/dist/messaging/media.d.ts +72 -0
- package/dist/messaging/media.d.ts.map +1 -0
- package/dist/messaging/media.js +142 -0
- package/dist/messaging/media.js.map +1 -0
- package/dist/messaging/messages.d.ts +18 -0
- package/dist/messaging/messages.d.ts.map +1 -0
- package/dist/messaging/messages.js +32 -0
- package/dist/messaging/messages.js.map +1 -0
- package/dist/messaging/observation-policies.d.ts +10 -0
- package/dist/messaging/observation-policies.d.ts.map +1 -0
- package/dist/messaging/observation-policies.js +28 -0
- package/dist/messaging/observation-policies.js.map +1 -0
- package/dist/messaging/onboarding.d.ts +53 -0
- package/dist/messaging/onboarding.d.ts.map +1 -0
- package/dist/messaging/onboarding.js +69 -0
- package/dist/messaging/onboarding.js.map +1 -0
- package/dist/messaging/presence.d.ts +12 -0
- package/dist/messaging/presence.d.ts.map +1 -0
- package/dist/messaging/presence.js +43 -0
- package/dist/messaging/presence.js.map +1 -0
- package/dist/messaging/privacy.d.ts +11 -0
- package/dist/messaging/privacy.d.ts.map +1 -0
- package/dist/messaging/privacy.js +34 -0
- package/dist/messaging/privacy.js.map +1 -0
- package/dist/messaging/profile.d.ts +13 -0
- package/dist/messaging/profile.d.ts.map +1 -0
- package/dist/messaging/profile.js +49 -0
- package/dist/messaging/profile.js.map +1 -0
- package/dist/messaging/quick-replies.d.ts +13 -0
- package/dist/messaging/quick-replies.d.ts.map +1 -0
- package/dist/messaging/quick-replies.js +45 -0
- package/dist/messaging/quick-replies.js.map +1 -0
- package/dist/messaging/quicklinks.d.ts +69 -0
- package/dist/messaging/quicklinks.d.ts.map +1 -0
- package/dist/messaging/quicklinks.js +45 -0
- package/dist/messaging/quicklinks.js.map +1 -0
- package/dist/messaging/session-configuration.d.ts +67 -0
- package/dist/messaging/session-configuration.d.ts.map +1 -0
- package/dist/messaging/session-configuration.js +2 -0
- package/dist/messaging/session-configuration.js.map +1 -0
- package/dist/messaging/sessions.d.ts +26 -0
- package/dist/messaging/sessions.d.ts.map +1 -0
- package/dist/messaging/sessions.js +108 -0
- package/dist/messaging/sessions.js.map +1 -0
- package/dist/messaging/templates.d.ts +15 -0
- package/dist/messaging/templates.d.ts.map +1 -0
- package/dist/messaging/templates.js +67 -0
- package/dist/messaging/templates.js.map +1 -0
- package/dist/messaging/testing-configuration.d.ts +89 -0
- package/dist/messaging/testing-configuration.d.ts.map +1 -0
- package/dist/messaging/testing-configuration.js +14 -0
- package/dist/messaging/testing-configuration.js.map +1 -0
- package/dist/messaging/types.d.ts +1793 -0
- package/dist/messaging/types.d.ts.map +1 -0
- package/dist/messaging/types.js +25 -0
- package/dist/messaging/types.js.map +1 -0
- package/dist/messaging/users.d.ts +9 -0
- package/dist/messaging/users.d.ts.map +1 -0
- package/dist/messaging/users.js +15 -0
- package/dist/messaging/users.js.map +1 -0
- package/dist/messaging/voip.d.ts +51 -0
- package/dist/messaging/voip.d.ts.map +1 -0
- package/dist/messaging/voip.js +293 -0
- package/dist/messaging/voip.js.map +1 -0
- package/dist/messaging/webhooks.d.ts +13 -0
- package/dist/messaging/webhooks.d.ts.map +1 -0
- package/dist/messaging/webhooks.js +48 -0
- package/dist/messaging/webhooks.js.map +1 -0
- package/dist/node.d.ts +55 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +237 -0
- package/dist/node.js.map +1 -0
- package/dist/pagination.d.ts +24 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +28 -0
- package/dist/pagination.js.map +1 -0
- package/dist/platform/api-keys.d.ts +10 -0
- package/dist/platform/api-keys.d.ts.map +1 -0
- package/dist/platform/api-keys.js +22 -0
- package/dist/platform/api-keys.js.map +1 -0
- package/dist/platform/audiences.d.ts +16 -0
- package/dist/platform/audiences.d.ts.map +1 -0
- package/dist/platform/audiences.js +46 -0
- package/dist/platform/audiences.js.map +1 -0
- package/dist/platform/audit-logs.d.ts +9 -0
- package/dist/platform/audit-logs.d.ts.map +1 -0
- package/dist/platform/audit-logs.js +20 -0
- package/dist/platform/audit-logs.js.map +1 -0
- package/dist/platform/bansafe.d.ts +24 -0
- package/dist/platform/bansafe.d.ts.map +1 -0
- package/dist/platform/bansafe.js +70 -0
- package/dist/platform/bansafe.js.map +1 -0
- package/dist/platform/billing.d.ts +13 -0
- package/dist/platform/billing.d.ts.map +1 -0
- package/dist/platform/billing.js +27 -0
- package/dist/platform/billing.js.map +1 -0
- package/dist/platform/campaigns.d.ts +28 -0
- package/dist/platform/campaigns.d.ts.map +1 -0
- package/dist/platform/campaigns.js +92 -0
- package/dist/platform/campaigns.js.map +1 -0
- package/dist/platform/customers.d.ts +23 -0
- package/dist/platform/customers.d.ts.map +1 -0
- package/dist/platform/customers.js +140 -0
- package/dist/platform/customers.js.map +1 -0
- package/dist/platform/developer-resources.d.ts +101 -0
- package/dist/platform/developer-resources.d.ts.map +1 -0
- package/dist/platform/developer-resources.js +250 -0
- package/dist/platform/developer-resources.js.map +1 -0
- package/dist/platform/developer-types.d.ts +378 -0
- package/dist/platform/developer-types.d.ts.map +1 -0
- package/dist/platform/developer-types.js +2 -0
- package/dist/platform/developer-types.js.map +1 -0
- package/dist/platform/event-stream.d.ts +114 -0
- package/dist/platform/event-stream.d.ts.map +1 -0
- package/dist/platform/event-stream.js +308 -0
- package/dist/platform/event-stream.js.map +1 -0
- package/dist/platform/media.d.ts +13 -0
- package/dist/platform/media.d.ts.map +1 -0
- package/dist/platform/media.js +33 -0
- package/dist/platform/media.js.map +1 -0
- package/dist/platform/members.d.ts +9 -0
- package/dist/platform/members.d.ts.map +1 -0
- package/dist/platform/members.js +15 -0
- package/dist/platform/members.js.map +1 -0
- package/dist/platform/opt-outs.d.ts +15 -0
- package/dist/platform/opt-outs.d.ts.map +1 -0
- package/dist/platform/opt-outs.js +36 -0
- package/dist/platform/opt-outs.js.map +1 -0
- package/dist/platform/organizations.d.ts +9 -0
- package/dist/platform/organizations.d.ts.map +1 -0
- package/dist/platform/organizations.js +15 -0
- package/dist/platform/organizations.js.map +1 -0
- package/dist/platform/project-tokens.d.ts +9 -0
- package/dist/platform/project-tokens.d.ts.map +1 -0
- package/dist/platform/project-tokens.js +16 -0
- package/dist/platform/project-tokens.js.map +1 -0
- package/dist/platform/projects.d.ts +24 -0
- package/dist/platform/projects.d.ts.map +1 -0
- package/dist/platform/projects.js +83 -0
- package/dist/platform/projects.js.map +1 -0
- package/dist/platform/quicklink-settings.d.ts +85 -0
- package/dist/platform/quicklink-settings.d.ts.map +1 -0
- package/dist/platform/quicklink-settings.js +35 -0
- package/dist/platform/quicklink-settings.js.map +1 -0
- package/dist/platform/response.d.ts +10 -0
- package/dist/platform/response.d.ts.map +1 -0
- package/dist/platform/response.js +41 -0
- package/dist/platform/response.js.map +1 -0
- package/dist/platform/security-incidents.d.ts +10 -0
- package/dist/platform/security-incidents.d.ts.map +1 -0
- package/dist/platform/security-incidents.js +22 -0
- package/dist/platform/security-incidents.js.map +1 -0
- package/dist/platform/session-bans.d.ts +13 -0
- package/dist/platform/session-bans.d.ts.map +1 -0
- package/dist/platform/session-bans.js +21 -0
- package/dist/platform/session-bans.js.map +1 -0
- package/dist/platform/session-configuration.d.ts +15 -0
- package/dist/platform/session-configuration.d.ts.map +1 -0
- package/dist/platform/session-configuration.js +36 -0
- package/dist/platform/session-configuration.js.map +1 -0
- package/dist/platform/sessions.d.ts +26 -0
- package/dist/platform/sessions.d.ts.map +1 -0
- package/dist/platform/sessions.js +121 -0
- package/dist/platform/sessions.js.map +1 -0
- package/dist/platform/sip-trunks.d.ts +141 -0
- package/dist/platform/sip-trunks.d.ts.map +1 -0
- package/dist/platform/sip-trunks.js +140 -0
- package/dist/platform/sip-trunks.js.map +1 -0
- package/dist/platform/types.d.ts +897 -0
- package/dist/platform/types.d.ts.map +1 -0
- package/dist/platform/types.js +2 -0
- package/dist/platform/types.js.map +1 -0
- package/dist/raw.d.ts +26 -0
- package/dist/raw.d.ts.map +1 -0
- package/dist/raw.js +79 -0
- package/dist/raw.js.map +1 -0
- package/dist/system.d.ts +37 -0
- package/dist/system.d.ts.map +1 -0
- package/dist/system.js +45 -0
- package/dist/system.js.map +1 -0
- package/dist/transport/body.d.ts +6 -0
- package/dist/transport/body.d.ts.map +1 -0
- package/dist/transport/body.js +33 -0
- package/dist/transport/body.js.map +1 -0
- package/dist/transport/content-disposition.d.ts +9 -0
- package/dist/transport/content-disposition.d.ts.map +1 -0
- package/dist/transport/content-disposition.js +107 -0
- package/dist/transport/content-disposition.js.map +1 -0
- package/dist/transport/http.d.ts +35 -0
- package/dist/transport/http.d.ts.map +1 -0
- package/dist/transport/http.js +660 -0
- package/dist/transport/http.js.map +1 -0
- package/dist/transport/idempotency.d.ts +10 -0
- package/dist/transport/idempotency.d.ts.map +1 -0
- package/dist/transport/idempotency.js +13 -0
- package/dist/transport/idempotency.js.map +1 -0
- package/dist/transport/retry.d.ts +11 -0
- package/dist/transport/retry.d.ts.map +1 -0
- package/dist/transport/retry.js +45 -0
- package/dist/transport/retry.js.map +1 -0
- package/dist/transport/types.d.ts +58 -0
- package/dist/transport/types.d.ts.map +1 -0
- package/dist/transport/types.js +2 -0
- package/dist/transport/types.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/dist/webhooks/events.d.ts +741 -0
- package/dist/webhooks/events.d.ts.map +1 -0
- package/dist/webhooks/events.js +80 -0
- package/dist/webhooks/events.js.map +1 -0
- package/dist/webhooks/index.d.ts +4 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +4 -0
- package/dist/webhooks/index.js.map +1 -0
- package/dist/webhooks/utilities.d.ts +33 -0
- package/dist/webhooks/utilities.d.ts.map +1 -0
- package/dist/webhooks/utilities.js +67 -0
- package/dist/webhooks/utilities.js.map +1 -0
- package/dist/webhooks/verify.d.ts +9 -0
- package/dist/webhooks/verify.d.ts.map +1 -0
- package/dist/webhooks/verify.js +77 -0
- package/dist/webhooks/verify.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Call diagnostics an app reports for one of its media connections through
|
|
3
|
+
* `POST /messaging/voip/calls/{id}/reports`. Only technical figures and error
|
|
4
|
+
* codes are sent: no phone numbers, names, audio, video or device labels.
|
|
5
|
+
*/
|
|
6
|
+
/** Package version sent with reports from `@polymorfa/sdk/calls`. */
|
|
7
|
+
export declare const CALLS_SDK_VERSION = "0.1.0-dev.0";
|
|
8
|
+
export type CallErrorCode = "media_permission_denied" | "device_not_found" | "device_in_use" | "ice_failed" | "negotiation_failed" | "media_timeout" | "reconnect_exhausted" | "token_refresh_failed" | "unsupported_browser" | "other";
|
|
9
|
+
/** Figures measured for one connection. Omit what was not measured. */
|
|
10
|
+
export interface CallQualityFigures {
|
|
11
|
+
readonly rttMs?: number;
|
|
12
|
+
readonly jitterMs?: number;
|
|
13
|
+
readonly packetsLost?: number;
|
|
14
|
+
readonly packetsReceived?: number;
|
|
15
|
+
readonly audioCodec?: string;
|
|
16
|
+
readonly videoCodec?: string;
|
|
17
|
+
readonly candidateType?: "host" | "srflx" | "prflx" | "relay";
|
|
18
|
+
readonly reconnects?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface CallReportClient {
|
|
21
|
+
readonly sdk: string;
|
|
22
|
+
readonly version: string;
|
|
23
|
+
readonly platform: "browser" | "node" | "other";
|
|
24
|
+
}
|
|
25
|
+
/** A report body as the platform accepts it. */
|
|
26
|
+
export type CallReport = {
|
|
27
|
+
readonly kind: "quality";
|
|
28
|
+
readonly connectionId: string;
|
|
29
|
+
readonly participant?: string;
|
|
30
|
+
readonly client?: CallReportClient;
|
|
31
|
+
readonly quality: CallQualityFigures;
|
|
32
|
+
} | {
|
|
33
|
+
readonly kind: "error";
|
|
34
|
+
readonly connectionId: string;
|
|
35
|
+
readonly participant?: string;
|
|
36
|
+
readonly client?: CallReportClient;
|
|
37
|
+
readonly error: {
|
|
38
|
+
readonly code: CallErrorCode;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
export interface CallReporterOptions {
|
|
42
|
+
readonly connectionId: string;
|
|
43
|
+
readonly client: CallReportClient;
|
|
44
|
+
/** Sends one report. Rejections are absorbed by the reporter. */
|
|
45
|
+
readonly send: (report: CallReport) => Promise<unknown>;
|
|
46
|
+
readonly now?: () => number;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Sends a connection's reports without ever affecting the call: nothing it
|
|
50
|
+
* does throws, sends are not awaited by callers, failed sends are not
|
|
51
|
+
* retried, and after a refusal other than 429 it sends nothing more (the
|
|
52
|
+
* credential, scope or call does not accept reports).
|
|
53
|
+
*/
|
|
54
|
+
export declare class CallReporter {
|
|
55
|
+
#private;
|
|
56
|
+
constructor(options: CallReporterOptions);
|
|
57
|
+
get stopped(): boolean;
|
|
58
|
+
/** Report an error as it happens. */
|
|
59
|
+
error(code: CallErrorCode): void;
|
|
60
|
+
/**
|
|
61
|
+
* Report measured figures. Invalid or absent figures are dropped; nothing is
|
|
62
|
+
* sent without at least one. `force` sends even within 5 seconds of the
|
|
63
|
+
* previous quality report (the final report when a connection closes); the
|
|
64
|
+
* platform may then refuse it with 429, which is dropped.
|
|
65
|
+
*/
|
|
66
|
+
quality(figures: CallQualityFigures, force?: boolean): void;
|
|
67
|
+
/** Stop reporting; later calls do nothing. */
|
|
68
|
+
stop(): void;
|
|
69
|
+
}
|
|
70
|
+
/** The HTTP status a transport error carries, when it carries one. */
|
|
71
|
+
export declare function statusOf(cause: unknown): number | undefined;
|
|
72
|
+
/** The runtime a report comes from, for SDKs that run in several. */
|
|
73
|
+
export declare function reportPlatform(): "node" | "other";
|
|
74
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../calls/src/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,qEAAqE;AACrE,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAE/C,MAAM,MAAM,aAAa,GACrB,yBAAyB,GACzB,kBAAkB,GAClB,eAAe,GACf,YAAY,GACZ,oBAAoB,GACpB,eAAe,GACf,qBAAqB,GACrB,sBAAsB,GACtB,qBAAqB,GACrB,OAAO,CAAC;AAEZ,uEAAuE;AACvE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAC9D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;CACjD;AAED,gDAAgD;AAChD,MAAM,MAAM,UAAU,GAClB;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;CACtC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;KAAE,CAAC;CAClD,CAAC;AAEN,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AAeD;;;;;GAKG;AACH,qBAAa,YAAY;;gBAOX,OAAO,EAAE,mBAAmB;IAKxC,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,qCAAqC;IACrC,KAAK,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAchC;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,kBAAkB,EAAE,KAAK,UAAQ,GAAG,IAAI;IAoBzD,8CAA8C;IAC9C,IAAI,IAAI,IAAI;CAuBb;AAED,sEAAsE;AACtE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAI3D;AAED,qEAAqE;AACrE,wBAAgB,cAAc,IAAI,MAAM,GAAG,OAAO,CAKjD"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Call diagnostics an app reports for one of its media connections through
|
|
3
|
+
* `POST /messaging/voip/calls/{id}/reports`. Only technical figures and error
|
|
4
|
+
* codes are sent: no phone numbers, names, audio, video or device labels.
|
|
5
|
+
*/
|
|
6
|
+
/** Package version sent with reports from `@polymorfa/sdk/calls`. */
|
|
7
|
+
export const CALLS_SDK_VERSION = "0.1.0-dev.0";
|
|
8
|
+
/** Platform limits per connection, applied locally to avoid refusals. */
|
|
9
|
+
const QUALITY_INTERVAL_MS = 5_000;
|
|
10
|
+
const ERRORS_PER_MINUTE = 20;
|
|
11
|
+
const CODEC = /^[A-Za-z0-9/.-]{1,32}$/;
|
|
12
|
+
const LIMITS = {
|
|
13
|
+
rttMs: 60_000,
|
|
14
|
+
jitterMs: 60_000,
|
|
15
|
+
packetsLost: 2_147_483_647,
|
|
16
|
+
packetsReceived: 2_147_483_647,
|
|
17
|
+
reconnects: 1_000,
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Sends a connection's reports without ever affecting the call: nothing it
|
|
21
|
+
* does throws, sends are not awaited by callers, failed sends are not
|
|
22
|
+
* retried, and after a refusal other than 429 it sends nothing more (the
|
|
23
|
+
* credential, scope or call does not accept reports).
|
|
24
|
+
*/
|
|
25
|
+
export class CallReporter {
|
|
26
|
+
#options;
|
|
27
|
+
#now;
|
|
28
|
+
#stopped = false;
|
|
29
|
+
#lastQuality;
|
|
30
|
+
#errorTimes = [];
|
|
31
|
+
constructor(options) {
|
|
32
|
+
this.#options = options;
|
|
33
|
+
this.#now = options.now ?? Date.now;
|
|
34
|
+
}
|
|
35
|
+
get stopped() {
|
|
36
|
+
return this.#stopped;
|
|
37
|
+
}
|
|
38
|
+
/** Report an error as it happens. */
|
|
39
|
+
error(code) {
|
|
40
|
+
if (this.#stopped)
|
|
41
|
+
return;
|
|
42
|
+
const now = this.#now();
|
|
43
|
+
this.#errorTimes = this.#errorTimes.filter((t) => now - t < 60_000);
|
|
44
|
+
if (this.#errorTimes.length >= ERRORS_PER_MINUTE)
|
|
45
|
+
return;
|
|
46
|
+
this.#errorTimes.push(now);
|
|
47
|
+
this.#send({
|
|
48
|
+
kind: "error",
|
|
49
|
+
connectionId: this.#options.connectionId,
|
|
50
|
+
client: this.#options.client,
|
|
51
|
+
error: { code },
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Report measured figures. Invalid or absent figures are dropped; nothing is
|
|
56
|
+
* sent without at least one. `force` sends even within 5 seconds of the
|
|
57
|
+
* previous quality report (the final report when a connection closes); the
|
|
58
|
+
* platform may then refuse it with 429, which is dropped.
|
|
59
|
+
*/
|
|
60
|
+
quality(figures, force = false) {
|
|
61
|
+
if (this.#stopped)
|
|
62
|
+
return;
|
|
63
|
+
const quality = cleanFigures(figures);
|
|
64
|
+
if (quality === undefined)
|
|
65
|
+
return;
|
|
66
|
+
const now = this.#now();
|
|
67
|
+
if (!force &&
|
|
68
|
+
this.#lastQuality !== undefined &&
|
|
69
|
+
now - this.#lastQuality < QUALITY_INTERVAL_MS)
|
|
70
|
+
return;
|
|
71
|
+
this.#lastQuality = now;
|
|
72
|
+
this.#send({
|
|
73
|
+
kind: "quality",
|
|
74
|
+
connectionId: this.#options.connectionId,
|
|
75
|
+
client: this.#options.client,
|
|
76
|
+
quality,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/** Stop reporting; later calls do nothing. */
|
|
80
|
+
stop() {
|
|
81
|
+
this.#stopped = true;
|
|
82
|
+
}
|
|
83
|
+
#send(report) {
|
|
84
|
+
let sending;
|
|
85
|
+
try {
|
|
86
|
+
sending = this.#options.send(report);
|
|
87
|
+
}
|
|
88
|
+
catch (cause) {
|
|
89
|
+
this.#refused(cause);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
void Promise.resolve(sending).catch((cause) => this.#refused(cause));
|
|
93
|
+
}
|
|
94
|
+
#refused(cause) {
|
|
95
|
+
const status = statusOf(cause);
|
|
96
|
+
// 429 and 5xx are transient: this report is dropped, later ones are sent.
|
|
97
|
+
if (status !== undefined && status >= 400 && status < 500 && status !== 429)
|
|
98
|
+
this.#stopped = true;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/** The HTTP status a transport error carries, when it carries one. */
|
|
102
|
+
export function statusOf(cause) {
|
|
103
|
+
if (cause === null || typeof cause !== "object")
|
|
104
|
+
return undefined;
|
|
105
|
+
const status = cause.status;
|
|
106
|
+
return typeof status === "number" ? status : undefined;
|
|
107
|
+
}
|
|
108
|
+
/** The runtime a report comes from, for SDKs that run in several. */
|
|
109
|
+
export function reportPlatform() {
|
|
110
|
+
const process = globalThis.process;
|
|
111
|
+
return typeof process?.versions?.node === "string" ? "node" : "other";
|
|
112
|
+
}
|
|
113
|
+
function cleanFigures(figures) {
|
|
114
|
+
const out = {};
|
|
115
|
+
for (const [key, max] of Object.entries(LIMITS)) {
|
|
116
|
+
const value = figures[key];
|
|
117
|
+
if (typeof value !== "number" || !Number.isFinite(value))
|
|
118
|
+
continue;
|
|
119
|
+
out[key] = Math.min(max, Math.max(0, Math.round(value)));
|
|
120
|
+
}
|
|
121
|
+
for (const key of ["audioCodec", "videoCodec"]) {
|
|
122
|
+
const value = figures[key];
|
|
123
|
+
if (typeof value === "string" && CODEC.test(value))
|
|
124
|
+
out[key] = value;
|
|
125
|
+
}
|
|
126
|
+
if (figures.candidateType !== undefined &&
|
|
127
|
+
["host", "srflx", "prflx", "relay"].includes(figures.candidateType))
|
|
128
|
+
out["candidateType"] = figures.candidateType;
|
|
129
|
+
return Object.keys(out).length === 0
|
|
130
|
+
? undefined
|
|
131
|
+
: out;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../calls/src/diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/** Base class for every error the Calls client raises with a stable `code`. */
|
|
2
|
+
export declare class CallsError extends Error {
|
|
3
|
+
readonly code: string;
|
|
4
|
+
constructor(code: string, message: string, options?: {
|
|
5
|
+
cause?: unknown;
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
/** A REST operation failed; `status` is the HTTP status (200 for a malformed success body). */
|
|
9
|
+
export declare class CallsApiError extends CallsError {
|
|
10
|
+
readonly status: number;
|
|
11
|
+
constructor(status: number, code: string, message: string);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Another participant answered the call with `exclusive: true`. Accepting or
|
|
15
|
+
* attaching media is refused for everyone else. Stop ringing; do not decline,
|
|
16
|
+
* which would end the call for the participant who claimed it.
|
|
17
|
+
*/
|
|
18
|
+
export declare class CallClaimedError extends CallsApiError {
|
|
19
|
+
constructor(message?: string);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Calling is turned off for the session in its call settings. Placing,
|
|
23
|
+
* answering, joining, inviting and attaching media are refused until it is
|
|
24
|
+
* turned back on; calls in progress continue.
|
|
25
|
+
*/
|
|
26
|
+
export declare class CallsDisabledError extends CallsApiError {
|
|
27
|
+
constructor(message?: string);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The credential no longer authorizes the socket: it expired, was revoked, or
|
|
31
|
+
* its client rules changed. The platform closes the socket with code 4401.
|
|
32
|
+
* The client asks the token provider for a fresh token before reconnecting.
|
|
33
|
+
*/
|
|
34
|
+
export declare class CallsAuthError extends CallsError {
|
|
35
|
+
constructor(message?: string);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../calls/src/errors.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAKzE;AAED,+FAA+F;AAC/F,qBAAa,aAAc,SAAQ,UAAU;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1D;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,aAAa;gBACrC,OAAO,SAA2C;CAI/D;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,aAAa;gBACvC,OAAO,SAA2C;CAI/D;AAED;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,UAAU;gBAChC,OAAO,SAAsD;CAI1E"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** Base class for every error the Calls client raises with a stable `code`. */
|
|
2
|
+
export class CallsError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
constructor(code, message, options) {
|
|
5
|
+
super(message, options);
|
|
6
|
+
this.name = "CallsError";
|
|
7
|
+
this.code = code;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
/** A REST operation failed; `status` is the HTTP status (200 for a malformed success body). */
|
|
11
|
+
export class CallsApiError extends CallsError {
|
|
12
|
+
status;
|
|
13
|
+
constructor(status, code, message) {
|
|
14
|
+
super(code, message);
|
|
15
|
+
this.name = "CallsApiError";
|
|
16
|
+
this.status = status;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Another participant answered the call with `exclusive: true`. Accepting or
|
|
21
|
+
* attaching media is refused for everyone else. Stop ringing; do not decline,
|
|
22
|
+
* which would end the call for the participant who claimed it.
|
|
23
|
+
*/
|
|
24
|
+
export class CallClaimedError extends CallsApiError {
|
|
25
|
+
constructor(message = "Another participant claimed this call.") {
|
|
26
|
+
super(409, "call_claimed", message);
|
|
27
|
+
this.name = "CallClaimedError";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Calling is turned off for the session in its call settings. Placing,
|
|
32
|
+
* answering, joining, inviting and attaching media are refused until it is
|
|
33
|
+
* turned back on; calls in progress continue.
|
|
34
|
+
*/
|
|
35
|
+
export class CallsDisabledError extends CallsApiError {
|
|
36
|
+
constructor(message = "Calling is turned off for this number.") {
|
|
37
|
+
super(403, "calls_disabled", message);
|
|
38
|
+
this.name = "CallsDisabledError";
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The credential no longer authorizes the socket: it expired, was revoked, or
|
|
43
|
+
* its client rules changed. The platform closes the socket with code 4401.
|
|
44
|
+
* The client asks the token provider for a fresh token before reconnecting.
|
|
45
|
+
*/
|
|
46
|
+
export class CallsAuthError extends CallsError {
|
|
47
|
+
constructor(message = "The credential no longer authorizes this session.") {
|
|
48
|
+
super("unauthorized", message);
|
|
49
|
+
this.name = "CallsAuthError";
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../calls/src/errors.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,OAAO,UAAW,SAAQ,KAAK;IAC1B,IAAI,CAAS;IACtB,YAAY,IAAY,EAAE,OAAe,EAAE,OAA6B;QACtE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,+FAA+F;AAC/F,MAAM,OAAO,aAAc,SAAQ,UAAU;IAClC,MAAM,CAAS;IACxB,YAAY,MAAc,EAAE,IAAY,EAAE,OAAe;QACvD,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,gBAAiB,SAAQ,aAAa;IACjD,YAAY,OAAO,GAAG,wCAAwC;QAC5D,KAAK,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IACnD,YAAY,OAAO,GAAG,wCAAwC;QAC5D,KAAK,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,cAAe,SAAQ,UAAU;IAC5C,YAAY,OAAO,GAAG,mDAAmD;QACvE,KAAK,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A small typed event emitter. Platform-neutral on purpose: the client model is
|
|
3
|
+
* consumed both by Node bots and by the browser kit, so nothing here may reach
|
|
4
|
+
* for `node:events`.
|
|
5
|
+
*/
|
|
6
|
+
export type Listener<T extends unknown[]> = (...args: T) => void;
|
|
7
|
+
export declare class Emitter<Events extends Record<string, unknown[]>> {
|
|
8
|
+
#private;
|
|
9
|
+
on<K extends keyof Events>(event: K, listener: Listener<Events[K]>): () => void;
|
|
10
|
+
once<K extends keyof Events>(event: K, listener: Listener<Events[K]>): () => void;
|
|
11
|
+
off<K extends keyof Events>(event: K, listener: Listener<Events[K]>): void;
|
|
12
|
+
protected emit<K extends keyof Events>(event: K, ...args: Events[K]): void;
|
|
13
|
+
protected removeAllListeners(): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../calls/src/events.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAEjE,qBAAa,OAAO,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;;IAG3D,EAAE,CAAC,CAAC,SAAS,MAAM,MAAM,EACvB,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAC5B,MAAM,IAAI;IAUb,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,EACzB,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAC5B,MAAM,IAAI;IAQb,GAAG,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAI1E,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAO1E,SAAS,CAAC,kBAAkB,IAAI,IAAI;CAGrC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export class Emitter {
|
|
2
|
+
#listeners = new Map();
|
|
3
|
+
on(event, listener) {
|
|
4
|
+
let set = this.#listeners.get(event);
|
|
5
|
+
if (set === undefined) {
|
|
6
|
+
set = new Set();
|
|
7
|
+
this.#listeners.set(event, set);
|
|
8
|
+
}
|
|
9
|
+
set.add(listener);
|
|
10
|
+
return () => this.off(event, listener);
|
|
11
|
+
}
|
|
12
|
+
once(event, listener) {
|
|
13
|
+
const off = this.on(event, ((...args) => {
|
|
14
|
+
off();
|
|
15
|
+
listener(...args);
|
|
16
|
+
}));
|
|
17
|
+
return off;
|
|
18
|
+
}
|
|
19
|
+
off(event, listener) {
|
|
20
|
+
this.#listeners.get(event)?.delete(listener);
|
|
21
|
+
}
|
|
22
|
+
emit(event, ...args) {
|
|
23
|
+
const set = this.#listeners.get(event);
|
|
24
|
+
if (set === undefined)
|
|
25
|
+
return;
|
|
26
|
+
// Copy first: a listener may unsubscribe itself or others while we iterate.
|
|
27
|
+
for (const listener of [...set])
|
|
28
|
+
listener(...args);
|
|
29
|
+
}
|
|
30
|
+
removeAllListeners() {
|
|
31
|
+
this.#listeners.clear();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../calls/src/events.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,OAAO;IACT,UAAU,GAAG,IAAI,GAAG,EAAsC,CAAC;IAEpE,EAAE,CACA,KAAQ,EACR,QAA6B;QAE7B,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,QAA2B,CAAC,CAAC;QACrC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,CACF,KAAQ,EACR,QAA6B;QAE7B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,IAAe,EAAE,EAAE;YACjD,GAAG,EAAE,CAAC;YACN,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;QACpB,CAAC,CAAwB,CAAC,CAAC;QAC3B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,GAAG,CAAyB,KAAQ,EAAE,QAA6B;QACjE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,QAA2B,CAAC,CAAC;IAClE,CAAC;IAES,IAAI,CAAyB,KAAQ,EAAE,GAAG,IAAe;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO;QAC9B,4EAA4E;QAC5E,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC;YAAG,QAAgC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9E,CAAC;IAES,kBAAkB;QAC1B,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { CallsClient, type CallsClientOptions, type PlaceOptions, } from "./client.js";
|
|
2
|
+
export { Call, AudioTrack, VideoTrack, type AnswerOptions, type CallCapabilities, type CallClaim, type CallDirection, type CallEndReason, type CallState, type CallVideoFrame, type CallVideoSource, type OutgoingVideoFrame, } from "./call.js";
|
|
3
|
+
export { CallClaimedError, CallsApiError, CallsAuthError, CallsDisabledError, CallsError, } from "./errors.js";
|
|
4
|
+
export type { CallsToken, CallsTokenProvider, CallsTokenRequest, } from "./token.js";
|
|
5
|
+
export { DEFAULT_SAMPLE_RATE, type Participant } from "./protocol.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../calls/src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EACX,KAAK,kBAAkB,EACvB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,IAAI,EACJ,UAAU,EACV,UAAU,EACV,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,GACxB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,UAAU,GACX,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Public entry point: neutral calling operations only. Transport, signaling
|
|
2
|
+
// and media framing live in internal modules (see `./internal`).
|
|
3
|
+
export { CallsClient, } from "./client.js";
|
|
4
|
+
export { Call, AudioTrack, VideoTrack, } from "./call.js";
|
|
5
|
+
export { CallClaimedError, CallsApiError, CallsAuthError, CallsDisabledError, CallsError, } from "./errors.js";
|
|
6
|
+
export { DEFAULT_SAMPLE_RATE } from "./protocol.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../calls/src/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,iEAAiE;AACjE,OAAO,EACL,WAAW,GAGZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,IAAI,EACJ,UAAU,EACV,UAAU,GAUX,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,UAAU,GACX,MAAM,aAAa,CAAC;AAMrB,OAAO,EAAE,mBAAmB,EAAoB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal building blocks shared with other Polymorfa packages. Not part of
|
|
3
|
+
* the public API: no stability guarantee, and applications must not import
|
|
4
|
+
* this entry point.
|
|
5
|
+
* @packageDocumentation
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export * from "./index.js";
|
|
9
|
+
export { HttpCallsApi, callsHttpError, parseAcceptResult, parseParticipant, type AcceptCallOptions, type AcceptCallResult, type CallsApi, type FetchLike, type HttpCallsApiOptions, type PlaceCallRequest, } from "./api.js";
|
|
10
|
+
export { capabilitiesFrom, type CallInit } from "./call.js";
|
|
11
|
+
export { createInternalCallsClient, type InternalCallsClientOptions, } from "./client.js";
|
|
12
|
+
export { CallsTokenSource, isClientToken, normalizeToken, type CallsTokenSourceOptions, } from "./token.js";
|
|
13
|
+
export { LifecycleSocket, SocketCloseCode, type LifecycleCandidate, type LifecycleEvent, type LifecycleReady, type LifecycleSocketOptions, } from "./lifecycle.js";
|
|
14
|
+
export { CALL_CLAIMED_CLOSE_CODE, MediaSocket, type MediaClose, type MediaCloseReason, type MediaReady, type MediaSocketOptions, type MediaVideoSource, } from "./media.js";
|
|
15
|
+
export { AUTH_FAILED_CLOSE_CODE, LIFECYCLE_SOCKET_PATH, MEDIA_SUBPROTOCOL, MediaFrameKind, VideoCodec, VideoFlags, VIDEO_HEADER_BYTES, createConnectionId, decodeMediaFrame, encodeAudioFrame, encodeVideoFrame, isConnectionId, isParticipant, isParticipantName, isSourceHandle, mediaSocketPath, parseLifecycleFrame, parseMediaControl, parseMediaControlValue, type DecodedMediaFrame, type LifecycleClientFrame, type LifecycleFrame, type MediaClientFrame, type MediaControlFrame, type OutboundVideoFrame, type TrickleCandidate, type VideoFrame, type VideoFrameHeader, type VideoSourceFrame, type VideoSourceOwner, } from "./protocol.js";
|
|
16
|
+
export { Emitter } from "./events.js";
|
|
17
|
+
export { CALLS_SDK_VERSION, CallReporter, reportPlatform, statusOf, type CallErrorCode, type CallQualityFigures, type CallReport, type CallReportClient, type CallReporterOptions, } from "./diagnostics.js";
|
|
18
|
+
//# sourceMappingURL=internal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../calls/src/internal.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACtB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,gBAAgB,EAAE,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EACL,yBAAyB,EACzB,KAAK,0BAA0B,GAChC,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,KAAK,uBAAuB,GAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,sBAAsB,GAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,GACzB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal building blocks shared with other Polymorfa packages. Not part of
|
|
3
|
+
* the public API: no stability guarantee, and applications must not import
|
|
4
|
+
* this entry point.
|
|
5
|
+
* @packageDocumentation
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export * from "./index.js";
|
|
9
|
+
export { HttpCallsApi, callsHttpError, parseAcceptResult, parseParticipant, } from "./api.js";
|
|
10
|
+
export { capabilitiesFrom } from "./call.js";
|
|
11
|
+
export { createInternalCallsClient, } from "./client.js";
|
|
12
|
+
export { CallsTokenSource, isClientToken, normalizeToken, } from "./token.js";
|
|
13
|
+
export { LifecycleSocket, SocketCloseCode, } from "./lifecycle.js";
|
|
14
|
+
export { CALL_CLAIMED_CLOSE_CODE, MediaSocket, } from "./media.js";
|
|
15
|
+
export { AUTH_FAILED_CLOSE_CODE, LIFECYCLE_SOCKET_PATH, MEDIA_SUBPROTOCOL, MediaFrameKind, VideoCodec, VideoFlags, VIDEO_HEADER_BYTES, createConnectionId, decodeMediaFrame, encodeAudioFrame, encodeVideoFrame, isConnectionId, isParticipant, isParticipantName, isSourceHandle, mediaSocketPath, parseLifecycleFrame, parseMediaControl, parseMediaControlValue, } from "./protocol.js";
|
|
16
|
+
export { Emitter } from "./events.js";
|
|
17
|
+
export { CALLS_SDK_VERSION, CallReporter, reportPlatform, statusOf, } from "./diagnostics.js";
|
|
18
|
+
//# sourceMappingURL=internal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../calls/src/internal.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,gBAAgB,GAOjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,gBAAgB,EAAiB,MAAM,WAAW,CAAC;AAC5D,OAAO,EACL,yBAAyB,GAE1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,cAAc,GAEf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,eAAe,GAKhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,WAAW,GAMZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,GAYvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,QAAQ,GAMT,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import type { CallsApi } from "./api.js";
|
|
2
|
+
import { CallsError } from "./errors.js";
|
|
3
|
+
import { Emitter } from "./events.js";
|
|
4
|
+
import { type TrickleCandidate } from "./protocol.js";
|
|
5
|
+
/** A `call.*` event as the platform emits it, before the client shapes it. */
|
|
6
|
+
export interface LifecycleEvent {
|
|
7
|
+
readonly event: string;
|
|
8
|
+
readonly callId: string;
|
|
9
|
+
readonly payload: Record<string, unknown>;
|
|
10
|
+
readonly timestamp: string;
|
|
11
|
+
}
|
|
12
|
+
export interface LifecycleCandidate {
|
|
13
|
+
readonly callId: string;
|
|
14
|
+
readonly connectionId?: string;
|
|
15
|
+
readonly candidate: TrickleCandidate;
|
|
16
|
+
}
|
|
17
|
+
export interface LifecycleReady {
|
|
18
|
+
readonly session?: string;
|
|
19
|
+
/** Participant reference of the authenticated credential, when the platform sends it. */
|
|
20
|
+
readonly participant?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface LifecycleSocketOptions {
|
|
23
|
+
readonly api: Pick<CallsApi, "token" | "socketUrl">;
|
|
24
|
+
/**
|
|
25
|
+
* Session to follow. Sent as `?session=` for server credentials only;
|
|
26
|
+
* client tokens are bound to one session and send no query parameters.
|
|
27
|
+
*/
|
|
28
|
+
readonly session?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Participant name for server credentials, sent as `?participant=`.
|
|
31
|
+
* Ignored for client tokens.
|
|
32
|
+
*/
|
|
33
|
+
readonly participant?: string;
|
|
34
|
+
readonly WebSocket?: typeof globalThis.WebSocket;
|
|
35
|
+
readonly setTimeout?: typeof globalThis.setTimeout;
|
|
36
|
+
readonly clearTimeout?: typeof globalThis.clearTimeout;
|
|
37
|
+
readonly setInterval?: typeof globalThis.setInterval;
|
|
38
|
+
readonly clearInterval?: typeof globalThis.clearInterval;
|
|
39
|
+
readonly random?: () => number;
|
|
40
|
+
readonly now?: () => number;
|
|
41
|
+
/** Reconnect backoff bounds; defaults 1 000 → 30 000 ms. */
|
|
42
|
+
readonly minBackoffMs?: number;
|
|
43
|
+
readonly maxBackoffMs?: number;
|
|
44
|
+
/** Heartbeat period; 0 disables. Default 15 000 ms. */
|
|
45
|
+
readonly heartbeatMs?: number;
|
|
46
|
+
/**
|
|
47
|
+
* Bound on one attempt, from construction until the platform's `ready`
|
|
48
|
+
* frame. 0 disables. Default 10 000 ms.
|
|
49
|
+
*/
|
|
50
|
+
readonly connectTimeoutMs?: number;
|
|
51
|
+
/**
|
|
52
|
+
* Send a replacement token this long before the current one expires.
|
|
53
|
+
* Default 60 000 ms. Tokens without an expiry are not replaced.
|
|
54
|
+
*/
|
|
55
|
+
readonly refreshBeforeExpiryMs?: number;
|
|
56
|
+
/**
|
|
57
|
+
* Where a listener exception raised at an asynchronous boundary (a `state`
|
|
58
|
+
* or `error` listener throwing after a token request settled) is reported.
|
|
59
|
+
* Defaults to the platform's `reportError`, else a microtask rethrow.
|
|
60
|
+
*/
|
|
61
|
+
readonly reportError?: (cause: unknown) => void;
|
|
62
|
+
}
|
|
63
|
+
type Events = {
|
|
64
|
+
event: [LifecycleEvent];
|
|
65
|
+
candidate: [LifecycleCandidate];
|
|
66
|
+
ready: [LifecycleReady];
|
|
67
|
+
/** True once authenticated (`ready`), false when that socket goes away. */
|
|
68
|
+
state: [connected: boolean];
|
|
69
|
+
error: [CallsError];
|
|
70
|
+
};
|
|
71
|
+
/** Close codes the platform uses on the lifecycle and media sockets. */
|
|
72
|
+
export declare const SocketCloseCode: {
|
|
73
|
+
/** The credential does not (or no longer) authorize the socket. */
|
|
74
|
+
readonly Unauthorized: 4401;
|
|
75
|
+
/** Call or session state refused the socket (for example a claimed call). */
|
|
76
|
+
readonly Conflict: 4409;
|
|
77
|
+
/** Too many attempts. */
|
|
78
|
+
readonly RateLimited: 4429;
|
|
79
|
+
/** The request is invalid (for example an unknown session or participant). */
|
|
80
|
+
readonly InvalidRequest: 4400;
|
|
81
|
+
/** A policy violation, including no auth frame within 5 seconds. */
|
|
82
|
+
readonly PolicyViolation: 1008;
|
|
83
|
+
/** Authorization or the call is temporarily unavailable. */
|
|
84
|
+
readonly TryAgainLater: 1013;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* The client's one lifecycle socket. Every attempt authenticates with the
|
|
88
|
+
* first frame, waits for `ready`, replaces the token before it expires,
|
|
89
|
+
* reconnects with capped backoff until {@link close}, and heartbeats so a
|
|
90
|
+
* half-open connection is dropped rather than silently swallowing events.
|
|
91
|
+
* A 4401 close emits {@link CallsAuthError} and the next attempt asks the
|
|
92
|
+
* token provider for a fresh token.
|
|
93
|
+
*/
|
|
94
|
+
export declare class LifecycleSocket extends Emitter<Events> {
|
|
95
|
+
#private;
|
|
96
|
+
constructor(options: LifecycleSocketOptions);
|
|
97
|
+
/** True while an authenticated socket is open. */
|
|
98
|
+
get connected(): boolean;
|
|
99
|
+
/** Participant reference from the last `ready` frame, when the platform sent one. */
|
|
100
|
+
get participant(): string | undefined;
|
|
101
|
+
/**
|
|
102
|
+
* Resolves once the first attempt settles: authenticated, failed (a retry
|
|
103
|
+
* is scheduled), or closed.
|
|
104
|
+
*/
|
|
105
|
+
connect(): Promise<void>;
|
|
106
|
+
/** Send a local ICE candidate; false while no authenticated socket is open. */
|
|
107
|
+
sendCandidate(callId: string, connectionId: string, candidate: TrickleCandidate): boolean;
|
|
108
|
+
close(): void;
|
|
109
|
+
}
|
|
110
|
+
export {};
|
|
111
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../calls/src/lifecycle.ts"],"names":[],"mappings":"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"}
|