@camstack/addon-cloudflare-turn 0.1.14 → 0.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,36 +1,10 @@
1
1
  "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/cloudflare-turn.addon.ts
21
- var cloudflare_turn_addon_exports = {};
22
- __export(cloudflare_turn_addon_exports, {
23
- CloudflareTurnAddon: () => CloudflareTurnAddon
24
- });
25
- module.exports = __toCommonJS(cloudflare_turn_addon_exports);
26
- var import_types = require("@camstack/types");
27
-
28
- // src/cloudflare-turn.ts
29
- var CloudflareTurnService = class {
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const types = require("@camstack/types");
4
+ class CloudflareTurnService {
30
5
  constructor(_config, logger) {
31
6
  this.logger = logger;
32
7
  }
33
- logger;
34
8
  id = "cloudflare-turn";
35
9
  name = "Cloudflare TURN";
36
10
  /**
@@ -50,10 +24,8 @@ var CloudflareTurnService = class {
50
24
  }
51
25
  ];
52
26
  }
53
- };
54
-
55
- // src/cloudflare-turn.addon.ts
56
- var CloudflareTurnAddon = class extends import_types.BaseAddon {
27
+ }
28
+ class CloudflareTurnAddon extends types.BaseAddon {
57
29
  service = null;
58
30
  constructor() {
59
31
  super({ apiToken: "", accountId: "" });
@@ -61,7 +33,7 @@ var CloudflareTurnAddon = class extends import_types.BaseAddon {
61
33
  async onInitialize() {
62
34
  this.service = new CloudflareTurnService(this.config, this.ctx.logger);
63
35
  this.ctx.logger.info("Cloudflare TURN initialized");
64
- return [{ capability: import_types.turnProviderCapability, provider: this.service }];
36
+ return [{ capability: types.turnProviderCapability, provider: this.service }];
65
37
  }
66
38
  async onShutdown() {
67
39
  this.service = null;
@@ -76,13 +48,22 @@ var CloudflareTurnAddon = class extends import_types.BaseAddon {
76
48
  {
77
49
  id: "credentials",
78
50
  title: "Cloudflare Credentials",
79
- description: "API credentials for fetching TURN relay tokens from Cloudflare.",
51
+ description: "API credentials for fetching TURN relay tokens from Cloudflare Realtime.",
52
+ immediate: true,
80
53
  fields: [
54
+ {
55
+ type: "info",
56
+ key: "turnHelp",
57
+ label: "How to get the Account ID + API Token",
58
+ format: "html",
59
+ content: '<ul><li><strong>Account ID</strong> — open <a href="https://dash.cloudflare.com/">dash.cloudflare.com</a>, pick your account; the URL shows <code>dash.cloudflare.com/&lt;accountId&gt;/...</code>. Copy that hex id.</li><li><strong>TURN Token</strong> — go to <a href="https://dash.cloudflare.com/?to=/:account/calls">Realtime → TURN</a>, click <strong>Create TURN App</strong>, copy the generated <em>Token ID</em> and <em>API Token</em>.</li><li>Paste the <em>API Token</em> below (the Token ID is the Account ID variant for TURN apps — Cloudflare uses both naming conventions across their dashboard).</li><li>Permissions auto-set when you create a Realtime app — no manual scope picker needed.</li></ul>',
60
+ variant: "info"
61
+ },
81
62
  this.field({
82
63
  type: "text",
83
64
  key: "accountId",
84
65
  label: "Account ID",
85
- description: "Your Cloudflare account ID (found in the Cloudflare dashboard URL)",
66
+ description: "Your Cloudflare account ID (the hex slug in the dashboard URL).",
86
67
  placeholder: "a1b2c3d4e5f6...",
87
68
  required: true
88
69
  }),
@@ -90,7 +71,7 @@ var CloudflareTurnAddon = class extends import_types.BaseAddon {
90
71
  type: "password",
91
72
  key: "apiToken",
92
73
  label: "API Token",
93
- description: "Cloudflare API token with Calls: Read permission",
74
+ description: "Cloudflare Realtime TURN app token (Calls: Read).",
94
75
  showToggle: true,
95
76
  required: true
96
77
  })
@@ -99,9 +80,7 @@ var CloudflareTurnAddon = class extends import_types.BaseAddon {
99
80
  ]
100
81
  });
101
82
  }
102
- };
103
- // Annotate the CommonJS export names for ESM import in node:
104
- 0 && (module.exports = {
105
- CloudflareTurnAddon
106
- });
107
- //# sourceMappingURL=cloudflare-turn.addon.js.map
83
+ }
84
+ exports.CloudflareTurnAddon = CloudflareTurnAddon;
85
+ exports.CloudflareTurnService = CloudflareTurnService;
86
+ //# sourceMappingURL=cloudflare-turn.addon.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cloudflare-turn.addon.ts","../src/cloudflare-turn.ts"],"sourcesContent":["import type { ProviderRegistration } from '@camstack/types'\nimport { BaseAddon, turnProviderCapability } from '@camstack/types'\nimport { CloudflareTurnService } from './cloudflare-turn'\nimport type { CloudflareTurnConfig } from './cloudflare-turn'\n\n/**\n * Settings redesign Phase 3: cloudflare-turn is node-level credentials\n * storage. Implements `getGlobalSettings`.\n */\nexport class CloudflareTurnAddon extends BaseAddon<CloudflareTurnConfig> {\n private service: CloudflareTurnService | null = null\n\n constructor() {\n super({ apiToken: '', accountId: '' })\n }\n\n protected async onInitialize(): Promise<ProviderRegistration[]> {\n this.service = new CloudflareTurnService(this.config, this.ctx.logger)\n this.ctx.logger.info('Cloudflare TURN initialized')\n return [{ capability: turnProviderCapability, provider: this.service }]\n }\n\n protected async onShutdown(): Promise<void> {\n this.service = null\n }\n\n getService(): CloudflareTurnService {\n if (!this.service) throw new Error('Cloudflare TURN not initialized')\n return this.service\n }\n\n protected globalSettingsSchema() {\n return this.schema({\n sections: [\n {\n id: 'credentials',\n title: 'Cloudflare Credentials',\n description: 'API credentials for fetching TURN relay tokens from Cloudflare.',\n fields: [\n this.field({\n type: 'text',\n key: 'accountId',\n label: 'Account ID',\n description: 'Your Cloudflare account ID (found in the Cloudflare dashboard URL)',\n placeholder: 'a1b2c3d4e5f6...',\n required: true,\n }),\n this.field({\n type: 'password',\n key: 'apiToken',\n label: 'API Token',\n description: 'Cloudflare API token with Calls: Read permission',\n showToggle: true,\n required: true,\n }),\n ],\n },\n ],\n })\n }\n}\n","import type { IScopedLogger } from '@camstack/types'\n\nexport interface CloudflareTurnConfig {\n readonly apiToken: string\n readonly accountId: string\n}\n\ntype TurnServer = { urls: string | string[]; username?: string; credential?: string }\n\n/**\n * Cloudflare TURN/STUN provider.\n *\n * Implements the `turn-provider` capability (system collection). Called\n * by the `webrtc` capability implementations when building ICE server\n * lists for a new peer connection. Each call SHOULD fetch fresh\n * short-lived credentials currently stubbed with static values until\n * the Cloudflare Calls API integration is wired.\n */\nexport class CloudflareTurnService {\n readonly id = 'cloudflare-turn'\n readonly name = 'Cloudflare TURN'\n\n constructor(\n _config: CloudflareTurnConfig,\n private readonly logger: IScopedLogger,\n ) {}\n\n /**\n * Return the current TURN/STUN server list with credentials.\n * Implements `turn-provider` capability.\n */\n getTurnServers(): readonly TurnServer[] {\n this.logger.debug('Fetching TURN servers from Cloudflare')\n // TODO: implement real Cloudflare TURN integration.\n // Real integration requires a Cloudflare Calls API call using this.apiToken/accountId.\n return [\n {\n urls: [\n 'turn:turn.cloudflare.com:3478?transport=udp',\n 'turn:turn.cloudflare.com:3478?transport=tcp',\n ],\n username: 'temp-user',\n credential: 'temp-credential',\n },\n ]\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAkD;;;ACiB3C,IAAM,wBAAN,MAA4B;AAAA,EAIjC,YACE,SACiB,QACjB;AADiB;AAAA,EAChB;AAAA,EADgB;AAAA,EALV,KAAK;AAAA,EACL,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAWhB,iBAAwC;AACtC,SAAK,OAAO,MAAM,uCAAuC;AAGzD,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,QACF;AAAA,QACA,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF;;;ADrCO,IAAM,sBAAN,cAAkC,uBAAgC;AAAA,EAC/D,UAAwC;AAAA,EAEhD,cAAc;AACZ,UAAM,EAAE,UAAU,IAAI,WAAW,GAAG,CAAC;AAAA,EACvC;AAAA,EAEA,MAAgB,eAAgD;AAC9D,SAAK,UAAU,IAAI,sBAAsB,KAAK,QAAQ,KAAK,IAAI,MAAM;AACrE,SAAK,IAAI,OAAO,KAAK,6BAA6B;AAClD,WAAO,CAAC,EAAE,YAAY,qCAAwB,UAAU,KAAK,QAAQ,CAAC;AAAA,EACxE;AAAA,EAEA,MAAgB,aAA4B;AAC1C,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,aAAoC;AAClC,QAAI,CAAC,KAAK,QAAS,OAAM,IAAI,MAAM,iCAAiC;AACpE,WAAO,KAAK;AAAA,EACd;AAAA,EAEU,uBAAuB;AAC/B,WAAO,KAAK,OAAO;AAAA,MACjB,UAAU;AAAA,QACR;AAAA,UACE,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,aAAa;AAAA,UACb,QAAQ;AAAA,YACN,KAAK,MAAM;AAAA,cACT,MAAM;AAAA,cACN,KAAK;AAAA,cACL,OAAO;AAAA,cACP,aAAa;AAAA,cACb,aAAa;AAAA,cACb,UAAU;AAAA,YACZ,CAAC;AAAA,YACD,KAAK,MAAM;AAAA,cACT,MAAM;AAAA,cACN,KAAK;AAAA,cACL,OAAO;AAAA,cACP,aAAa;AAAA,cACb,YAAY;AAAA,cACZ,UAAU;AAAA,YACZ,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
1
+ {"version":3,"file":"cloudflare-turn.addon.js","sources":["../src/cloudflare-turn.ts","../src/cloudflare-turn.addon.ts"],"sourcesContent":["import type { IScopedLogger } from '@camstack/types'\n\nexport interface CloudflareTurnConfig {\n readonly apiToken: string\n readonly accountId: string\n}\n\ntype TurnServer = { urls: string | string[]; username?: string; credential?: string }\n\n/**\n * Cloudflare TURN/STUN provider.\n *\n * Implements the `turn-provider` capability (system collection). Called\n * by the `webrtc` capability implementations when building ICE server\n * lists for a new peer connection. Each call SHOULD fetch fresh\n * short-lived credentials — currently stubbed with static values until\n * the Cloudflare Calls API integration is wired.\n */\nexport class CloudflareTurnService {\n readonly id = 'cloudflare-turn'\n readonly name = 'Cloudflare TURN'\n\n constructor(\n _config: CloudflareTurnConfig,\n private readonly logger: IScopedLogger,\n ) {}\n\n /**\n * Return the current TURN/STUN server list with credentials.\n * Implements `turn-provider` capability.\n */\n getTurnServers(): readonly TurnServer[] {\n this.logger.debug('Fetching TURN servers from Cloudflare')\n // TODO: implement real Cloudflare TURN integration.\n // Real integration requires a Cloudflare Calls API call using this.apiToken/accountId.\n return [\n {\n urls: [\n 'turn:turn.cloudflare.com:3478?transport=udp',\n 'turn:turn.cloudflare.com:3478?transport=tcp',\n ],\n username: 'temp-user',\n credential: 'temp-credential',\n },\n ]\n }\n}\n","import type { ProviderRegistration } from '@camstack/types'\nimport { BaseAddon, turnProviderCapability } from '@camstack/types'\nimport { CloudflareTurnService } from './cloudflare-turn'\nimport type { CloudflareTurnConfig } from './cloudflare-turn'\n\n/**\n * Settings redesign Phase 3: cloudflare-turn is node-level credentials\n * storage. Implements `getGlobalSettings`.\n */\nexport class CloudflareTurnAddon extends BaseAddon<CloudflareTurnConfig> {\n private service: CloudflareTurnService | null = null\n\n constructor() {\n super({ apiToken: '', accountId: '' })\n }\n\n protected async onInitialize(): Promise<ProviderRegistration[]> {\n this.service = new CloudflareTurnService(this.config, this.ctx.logger)\n this.ctx.logger.info('Cloudflare TURN initialized')\n return [{ capability: turnProviderCapability, provider: this.service }]\n }\n\n protected async onShutdown(): Promise<void> {\n this.service = null\n }\n\n getService(): CloudflareTurnService {\n if (!this.service) throw new Error('Cloudflare TURN not initialized')\n return this.service\n }\n\n protected globalSettingsSchema() {\n return this.schema({\n sections: [\n {\n id: 'credentials',\n title: 'Cloudflare Credentials',\n description: 'API credentials for fetching TURN relay tokens from Cloudflare Realtime.',\n immediate: true,\n fields: [\n {\n type: 'info' as const,\n key: 'turnHelp',\n label: 'How to get the Account ID + API Token',\n format: 'html' as const,\n content:\n '<ul>' +\n '<li><strong>Account ID</strong> open ' +\n '<a href=\"https://dash.cloudflare.com/\">dash.cloudflare.com</a>, ' +\n 'pick your account; the URL shows ' +\n '<code>dash.cloudflare.com/&lt;accountId&gt;/...</code>. ' +\n 'Copy that hex id.</li>' +\n '<li><strong>TURN Token</strong> go to ' +\n '<a href=\"https://dash.cloudflare.com/?to=/:account/calls\">' +\n 'Realtime TURN</a>, click <strong>Create TURN App</strong>, ' +\n 'copy the generated <em>Token ID</em> and <em>API Token</em>.</li>' +\n '<li>Paste the <em>API Token</em> below (the Token ID is the ' +\n 'Account ID variant for TURN apps Cloudflare uses both naming ' +\n 'conventions across their dashboard).</li>' +\n '<li>Permissions auto-set when you create a Realtime app ' +\n 'no manual scope picker needed.</li>' +\n '</ul>',\n variant: 'info' as const,\n },\n this.field({\n type: 'text',\n key: 'accountId',\n label: 'Account ID',\n description: 'Your Cloudflare account ID (the hex slug in the dashboard URL).',\n placeholder: 'a1b2c3d4e5f6...',\n required: true,\n }),\n this.field({\n type: 'password',\n key: 'apiToken',\n label: 'API Token',\n description: 'Cloudflare Realtime TURN app token (Calls: Read).',\n showToggle: true,\n required: true,\n }),\n ],\n },\n ],\n })\n }\n}\n"],"names":["BaseAddon","turnProviderCapability"],"mappings":";;;AAkBO,MAAM,sBAAsB;AAAA,EAIjC,YACE,SACiB,QACjB;AADiB,SAAA,SAAA;AAAA,EAChB;AAAA,EANM,KAAK;AAAA,EACL,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAWhB,iBAAwC;AACtC,SAAK,OAAO,MAAM,uCAAuC;AAGzD,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,UAAU;AAAA,QACV,YAAY;AAAA,MAAA;AAAA,IACd;AAAA,EAEJ;AACF;ACrCO,MAAM,4BAA4BA,MAAAA,UAAgC;AAAA,EAC/D,UAAwC;AAAA,EAEhD,cAAc;AACZ,UAAM,EAAE,UAAU,IAAI,WAAW,IAAI;AAAA,EACvC;AAAA,EAEA,MAAgB,eAAgD;AAC9D,SAAK,UAAU,IAAI,sBAAsB,KAAK,QAAQ,KAAK,IAAI,MAAM;AACrE,SAAK,IAAI,OAAO,KAAK,6BAA6B;AAClD,WAAO,CAAC,EAAE,YAAYC,MAAAA,wBAAwB,UAAU,KAAK,SAAS;AAAA,EACxE;AAAA,EAEA,MAAgB,aAA4B;AAC1C,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,aAAoC;AAClC,QAAI,CAAC,KAAK,QAAS,OAAM,IAAI,MAAM,iCAAiC;AACpE,WAAO,KAAK;AAAA,EACd;AAAA,EAEU,uBAAuB;AAC/B,WAAO,KAAK,OAAO;AAAA,MACjB,UAAU;AAAA,QACR;AAAA,UACE,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,aAAa;AAAA,UACb,WAAW;AAAA,UACX,QAAQ;AAAA,YACN;AAAA,cACE,MAAM;AAAA,cACN,KAAK;AAAA,cACL,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,SACE;AAAA,cAgBF,SAAS;AAAA,YAAA;AAAA,YAEX,KAAK,MAAM;AAAA,cACT,MAAM;AAAA,cACN,KAAK;AAAA,cACL,OAAO;AAAA,cACP,aAAa;AAAA,cACb,aAAa;AAAA,cACb,UAAU;AAAA,YAAA,CACX;AAAA,YACD,KAAK,MAAM;AAAA,cACT,MAAM;AAAA,cACN,KAAK;AAAA,cACL,OAAO;AAAA,cACP,aAAa;AAAA,cACb,YAAY;AAAA,cACZ,UAAU;AAAA,YAAA,CACX;AAAA,UAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF,CACD;AAAA,EACH;AACF;;;"}
@@ -1,7 +1,86 @@
1
- import {
2
- CloudflareTurnAddon
3
- } from "./chunk-RRRS5VHF.mjs";
1
+ import { BaseAddon, turnProviderCapability } from "@camstack/types";
2
+ class CloudflareTurnService {
3
+ constructor(_config, logger) {
4
+ this.logger = logger;
5
+ }
6
+ id = "cloudflare-turn";
7
+ name = "Cloudflare TURN";
8
+ /**
9
+ * Return the current TURN/STUN server list with credentials.
10
+ * Implements `turn-provider` capability.
11
+ */
12
+ getTurnServers() {
13
+ this.logger.debug("Fetching TURN servers from Cloudflare");
14
+ return [
15
+ {
16
+ urls: [
17
+ "turn:turn.cloudflare.com:3478?transport=udp",
18
+ "turn:turn.cloudflare.com:3478?transport=tcp"
19
+ ],
20
+ username: "temp-user",
21
+ credential: "temp-credential"
22
+ }
23
+ ];
24
+ }
25
+ }
26
+ class CloudflareTurnAddon extends BaseAddon {
27
+ service = null;
28
+ constructor() {
29
+ super({ apiToken: "", accountId: "" });
30
+ }
31
+ async onInitialize() {
32
+ this.service = new CloudflareTurnService(this.config, this.ctx.logger);
33
+ this.ctx.logger.info("Cloudflare TURN initialized");
34
+ return [{ capability: turnProviderCapability, provider: this.service }];
35
+ }
36
+ async onShutdown() {
37
+ this.service = null;
38
+ }
39
+ getService() {
40
+ if (!this.service) throw new Error("Cloudflare TURN not initialized");
41
+ return this.service;
42
+ }
43
+ globalSettingsSchema() {
44
+ return this.schema({
45
+ sections: [
46
+ {
47
+ id: "credentials",
48
+ title: "Cloudflare Credentials",
49
+ description: "API credentials for fetching TURN relay tokens from Cloudflare Realtime.",
50
+ immediate: true,
51
+ fields: [
52
+ {
53
+ type: "info",
54
+ key: "turnHelp",
55
+ label: "How to get the Account ID + API Token",
56
+ format: "html",
57
+ content: '<ul><li><strong>Account ID</strong> — open <a href="https://dash.cloudflare.com/">dash.cloudflare.com</a>, pick your account; the URL shows <code>dash.cloudflare.com/&lt;accountId&gt;/...</code>. Copy that hex id.</li><li><strong>TURN Token</strong> — go to <a href="https://dash.cloudflare.com/?to=/:account/calls">Realtime → TURN</a>, click <strong>Create TURN App</strong>, copy the generated <em>Token ID</em> and <em>API Token</em>.</li><li>Paste the <em>API Token</em> below (the Token ID is the Account ID variant for TURN apps — Cloudflare uses both naming conventions across their dashboard).</li><li>Permissions auto-set when you create a Realtime app — no manual scope picker needed.</li></ul>',
58
+ variant: "info"
59
+ },
60
+ this.field({
61
+ type: "text",
62
+ key: "accountId",
63
+ label: "Account ID",
64
+ description: "Your Cloudflare account ID (the hex slug in the dashboard URL).",
65
+ placeholder: "a1b2c3d4e5f6...",
66
+ required: true
67
+ }),
68
+ this.field({
69
+ type: "password",
70
+ key: "apiToken",
71
+ label: "API Token",
72
+ description: "Cloudflare Realtime TURN app token (Calls: Read).",
73
+ showToggle: true,
74
+ required: true
75
+ })
76
+ ]
77
+ }
78
+ ]
79
+ });
80
+ }
81
+ }
4
82
  export {
83
+ CloudflareTurnService as C,
5
84
  CloudflareTurnAddon
6
85
  };
7
- //# sourceMappingURL=cloudflare-turn.addon.mjs.map
86
+ //# sourceMappingURL=cloudflare-turn.addon.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"file":"cloudflare-turn.addon.mjs","sources":["../src/cloudflare-turn.ts","../src/cloudflare-turn.addon.ts"],"sourcesContent":["import type { IScopedLogger } from '@camstack/types'\n\nexport interface CloudflareTurnConfig {\n readonly apiToken: string\n readonly accountId: string\n}\n\ntype TurnServer = { urls: string | string[]; username?: string; credential?: string }\n\n/**\n * Cloudflare TURN/STUN provider.\n *\n * Implements the `turn-provider` capability (system collection). Called\n * by the `webrtc` capability implementations when building ICE server\n * lists for a new peer connection. Each call SHOULD fetch fresh\n * short-lived credentials — currently stubbed with static values until\n * the Cloudflare Calls API integration is wired.\n */\nexport class CloudflareTurnService {\n readonly id = 'cloudflare-turn'\n readonly name = 'Cloudflare TURN'\n\n constructor(\n _config: CloudflareTurnConfig,\n private readonly logger: IScopedLogger,\n ) {}\n\n /**\n * Return the current TURN/STUN server list with credentials.\n * Implements `turn-provider` capability.\n */\n getTurnServers(): readonly TurnServer[] {\n this.logger.debug('Fetching TURN servers from Cloudflare')\n // TODO: implement real Cloudflare TURN integration.\n // Real integration requires a Cloudflare Calls API call using this.apiToken/accountId.\n return [\n {\n urls: [\n 'turn:turn.cloudflare.com:3478?transport=udp',\n 'turn:turn.cloudflare.com:3478?transport=tcp',\n ],\n username: 'temp-user',\n credential: 'temp-credential',\n },\n ]\n }\n}\n","import type { ProviderRegistration } from '@camstack/types'\nimport { BaseAddon, turnProviderCapability } from '@camstack/types'\nimport { CloudflareTurnService } from './cloudflare-turn'\nimport type { CloudflareTurnConfig } from './cloudflare-turn'\n\n/**\n * Settings redesign Phase 3: cloudflare-turn is node-level credentials\n * storage. Implements `getGlobalSettings`.\n */\nexport class CloudflareTurnAddon extends BaseAddon<CloudflareTurnConfig> {\n private service: CloudflareTurnService | null = null\n\n constructor() {\n super({ apiToken: '', accountId: '' })\n }\n\n protected async onInitialize(): Promise<ProviderRegistration[]> {\n this.service = new CloudflareTurnService(this.config, this.ctx.logger)\n this.ctx.logger.info('Cloudflare TURN initialized')\n return [{ capability: turnProviderCapability, provider: this.service }]\n }\n\n protected async onShutdown(): Promise<void> {\n this.service = null\n }\n\n getService(): CloudflareTurnService {\n if (!this.service) throw new Error('Cloudflare TURN not initialized')\n return this.service\n }\n\n protected globalSettingsSchema() {\n return this.schema({\n sections: [\n {\n id: 'credentials',\n title: 'Cloudflare Credentials',\n description: 'API credentials for fetching TURN relay tokens from Cloudflare Realtime.',\n immediate: true,\n fields: [\n {\n type: 'info' as const,\n key: 'turnHelp',\n label: 'How to get the Account ID + API Token',\n format: 'html' as const,\n content:\n '<ul>' +\n '<li><strong>Account ID</strong> — open ' +\n '<a href=\"https://dash.cloudflare.com/\">dash.cloudflare.com</a>, ' +\n 'pick your account; the URL shows ' +\n '<code>dash.cloudflare.com/&lt;accountId&gt;/...</code>. ' +\n 'Copy that hex id.</li>' +\n '<li><strong>TURN Token</strong> — go to ' +\n '<a href=\"https://dash.cloudflare.com/?to=/:account/calls\">' +\n 'Realtime → TURN</a>, click <strong>Create TURN App</strong>, ' +\n 'copy the generated <em>Token ID</em> and <em>API Token</em>.</li>' +\n '<li>Paste the <em>API Token</em> below (the Token ID is the ' +\n 'Account ID variant for TURN apps — Cloudflare uses both naming ' +\n 'conventions across their dashboard).</li>' +\n '<li>Permissions auto-set when you create a Realtime app — ' +\n 'no manual scope picker needed.</li>' +\n '</ul>',\n variant: 'info' as const,\n },\n this.field({\n type: 'text',\n key: 'accountId',\n label: 'Account ID',\n description: 'Your Cloudflare account ID (the hex slug in the dashboard URL).',\n placeholder: 'a1b2c3d4e5f6...',\n required: true,\n }),\n this.field({\n type: 'password',\n key: 'apiToken',\n label: 'API Token',\n description: 'Cloudflare Realtime TURN app token (Calls: Read).',\n showToggle: true,\n required: true,\n }),\n ],\n },\n ],\n })\n }\n}\n"],"names":[],"mappings":";AAkBO,MAAM,sBAAsB;AAAA,EAIjC,YACE,SACiB,QACjB;AADiB,SAAA,SAAA;AAAA,EAChB;AAAA,EANM,KAAK;AAAA,EACL,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAWhB,iBAAwC;AACtC,SAAK,OAAO,MAAM,uCAAuC;AAGzD,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,UAAU;AAAA,QACV,YAAY;AAAA,MAAA;AAAA,IACd;AAAA,EAEJ;AACF;ACrCO,MAAM,4BAA4B,UAAgC;AAAA,EAC/D,UAAwC;AAAA,EAEhD,cAAc;AACZ,UAAM,EAAE,UAAU,IAAI,WAAW,IAAI;AAAA,EACvC;AAAA,EAEA,MAAgB,eAAgD;AAC9D,SAAK,UAAU,IAAI,sBAAsB,KAAK,QAAQ,KAAK,IAAI,MAAM;AACrE,SAAK,IAAI,OAAO,KAAK,6BAA6B;AAClD,WAAO,CAAC,EAAE,YAAY,wBAAwB,UAAU,KAAK,SAAS;AAAA,EACxE;AAAA,EAEA,MAAgB,aAA4B;AAC1C,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,aAAoC;AAClC,QAAI,CAAC,KAAK,QAAS,OAAM,IAAI,MAAM,iCAAiC;AACpE,WAAO,KAAK;AAAA,EACd;AAAA,EAEU,uBAAuB;AAC/B,WAAO,KAAK,OAAO;AAAA,MACjB,UAAU;AAAA,QACR;AAAA,UACE,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,aAAa;AAAA,UACb,WAAW;AAAA,UACX,QAAQ;AAAA,YACN;AAAA,cACE,MAAM;AAAA,cACN,KAAK;AAAA,cACL,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,SACE;AAAA,cAgBF,SAAS;AAAA,YAAA;AAAA,YAEX,KAAK,MAAM;AAAA,cACT,MAAM;AAAA,cACN,KAAK;AAAA,cACL,OAAO;AAAA,cACP,aAAa;AAAA,cACb,aAAa;AAAA,cACb,UAAU;AAAA,YAAA,CACX;AAAA,YACD,KAAK,MAAM;AAAA,cACT,MAAM;AAAA,cACN,KAAK;AAAA,cACL,OAAO;AAAA,cACP,aAAa;AAAA,cACb,YAAY;AAAA,cACZ,UAAU;AAAA,YAAA,CACX;AAAA,UAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF,CACD;AAAA,EACH;AACF;"}
package/dist/index.js CHANGED
@@ -1,109 +1,6 @@
1
1
  "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/index.ts
21
- var index_exports = {};
22
- __export(index_exports, {
23
- CloudflareTurnAddon: () => CloudflareTurnAddon,
24
- CloudflareTurnService: () => CloudflareTurnService
25
- });
26
- module.exports = __toCommonJS(index_exports);
27
-
28
- // src/cloudflare-turn.ts
29
- var CloudflareTurnService = class {
30
- constructor(_config, logger) {
31
- this.logger = logger;
32
- }
33
- logger;
34
- id = "cloudflare-turn";
35
- name = "Cloudflare TURN";
36
- /**
37
- * Return the current TURN/STUN server list with credentials.
38
- * Implements `turn-provider` capability.
39
- */
40
- getTurnServers() {
41
- this.logger.debug("Fetching TURN servers from Cloudflare");
42
- return [
43
- {
44
- urls: [
45
- "turn:turn.cloudflare.com:3478?transport=udp",
46
- "turn:turn.cloudflare.com:3478?transport=tcp"
47
- ],
48
- username: "temp-user",
49
- credential: "temp-credential"
50
- }
51
- ];
52
- }
53
- };
54
-
55
- // src/cloudflare-turn.addon.ts
56
- var import_types = require("@camstack/types");
57
- var CloudflareTurnAddon = class extends import_types.BaseAddon {
58
- service = null;
59
- constructor() {
60
- super({ apiToken: "", accountId: "" });
61
- }
62
- async onInitialize() {
63
- this.service = new CloudflareTurnService(this.config, this.ctx.logger);
64
- this.ctx.logger.info("Cloudflare TURN initialized");
65
- return [{ capability: import_types.turnProviderCapability, provider: this.service }];
66
- }
67
- async onShutdown() {
68
- this.service = null;
69
- }
70
- getService() {
71
- if (!this.service) throw new Error("Cloudflare TURN not initialized");
72
- return this.service;
73
- }
74
- globalSettingsSchema() {
75
- return this.schema({
76
- sections: [
77
- {
78
- id: "credentials",
79
- title: "Cloudflare Credentials",
80
- description: "API credentials for fetching TURN relay tokens from Cloudflare.",
81
- fields: [
82
- this.field({
83
- type: "text",
84
- key: "accountId",
85
- label: "Account ID",
86
- description: "Your Cloudflare account ID (found in the Cloudflare dashboard URL)",
87
- placeholder: "a1b2c3d4e5f6...",
88
- required: true
89
- }),
90
- this.field({
91
- type: "password",
92
- key: "apiToken",
93
- label: "API Token",
94
- description: "Cloudflare API token with Calls: Read permission",
95
- showToggle: true,
96
- required: true
97
- })
98
- ]
99
- }
100
- ]
101
- });
102
- }
103
- };
104
- // Annotate the CommonJS export names for ESM import in node:
105
- 0 && (module.exports = {
106
- CloudflareTurnAddon,
107
- CloudflareTurnService
108
- });
109
- //# sourceMappingURL=index.js.map
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const cloudflareTurn_addon = require("./cloudflare-turn.addon.js");
4
+ exports.CloudflareTurnAddon = cloudflareTurn_addon.CloudflareTurnAddon;
5
+ exports.CloudflareTurnService = cloudflareTurn_addon.CloudflareTurnService;
6
+ //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/cloudflare-turn.ts","../src/cloudflare-turn.addon.ts"],"sourcesContent":["export { CloudflareTurnService } from './cloudflare-turn'\nexport type { CloudflareTurnConfig } from './cloudflare-turn'\nexport { CloudflareTurnAddon } from './cloudflare-turn.addon'\n","import type { IScopedLogger } from '@camstack/types'\n\nexport interface CloudflareTurnConfig {\n readonly apiToken: string\n readonly accountId: string\n}\n\ntype TurnServer = { urls: string | string[]; username?: string; credential?: string }\n\n/**\n * Cloudflare TURN/STUN provider.\n *\n * Implements the `turn-provider` capability (system collection). Called\n * by the `webrtc` capability implementations when building ICE server\n * lists for a new peer connection. Each call SHOULD fetch fresh\n * short-lived credentials — currently stubbed with static values until\n * the Cloudflare Calls API integration is wired.\n */\nexport class CloudflareTurnService {\n readonly id = 'cloudflare-turn'\n readonly name = 'Cloudflare TURN'\n\n constructor(\n _config: CloudflareTurnConfig,\n private readonly logger: IScopedLogger,\n ) {}\n\n /**\n * Return the current TURN/STUN server list with credentials.\n * Implements `turn-provider` capability.\n */\n getTurnServers(): readonly TurnServer[] {\n this.logger.debug('Fetching TURN servers from Cloudflare')\n // TODO: implement real Cloudflare TURN integration.\n // Real integration requires a Cloudflare Calls API call using this.apiToken/accountId.\n return [\n {\n urls: [\n 'turn:turn.cloudflare.com:3478?transport=udp',\n 'turn:turn.cloudflare.com:3478?transport=tcp',\n ],\n username: 'temp-user',\n credential: 'temp-credential',\n },\n ]\n }\n}\n","import type { ProviderRegistration } from '@camstack/types'\nimport { BaseAddon, turnProviderCapability } from '@camstack/types'\nimport { CloudflareTurnService } from './cloudflare-turn'\nimport type { CloudflareTurnConfig } from './cloudflare-turn'\n\n/**\n * Settings redesign Phase 3: cloudflare-turn is node-level credentials\n * storage. Implements `getGlobalSettings`.\n */\nexport class CloudflareTurnAddon extends BaseAddon<CloudflareTurnConfig> {\n private service: CloudflareTurnService | null = null\n\n constructor() {\n super({ apiToken: '', accountId: '' })\n }\n\n protected async onInitialize(): Promise<ProviderRegistration[]> {\n this.service = new CloudflareTurnService(this.config, this.ctx.logger)\n this.ctx.logger.info('Cloudflare TURN initialized')\n return [{ capability: turnProviderCapability, provider: this.service }]\n }\n\n protected async onShutdown(): Promise<void> {\n this.service = null\n }\n\n getService(): CloudflareTurnService {\n if (!this.service) throw new Error('Cloudflare TURN not initialized')\n return this.service\n }\n\n protected globalSettingsSchema() {\n return this.schema({\n sections: [\n {\n id: 'credentials',\n title: 'Cloudflare Credentials',\n description: 'API credentials for fetching TURN relay tokens from Cloudflare.',\n fields: [\n this.field({\n type: 'text',\n key: 'accountId',\n label: 'Account ID',\n description: 'Your Cloudflare account ID (found in the Cloudflare dashboard URL)',\n placeholder: 'a1b2c3d4e5f6...',\n required: true,\n }),\n this.field({\n type: 'password',\n key: 'apiToken',\n label: 'API Token',\n description: 'Cloudflare API token with Calls: Read permission',\n showToggle: true,\n required: true,\n }),\n ],\n },\n ],\n })\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACkBO,IAAM,wBAAN,MAA4B;AAAA,EAIjC,YACE,SACiB,QACjB;AADiB;AAAA,EAChB;AAAA,EADgB;AAAA,EALV,KAAK;AAAA,EACL,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAWhB,iBAAwC;AACtC,SAAK,OAAO,MAAM,uCAAuC;AAGzD,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,QACF;AAAA,QACA,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF;;;AC7CA,mBAAkD;AAQ3C,IAAM,sBAAN,cAAkC,uBAAgC;AAAA,EAC/D,UAAwC;AAAA,EAEhD,cAAc;AACZ,UAAM,EAAE,UAAU,IAAI,WAAW,GAAG,CAAC;AAAA,EACvC;AAAA,EAEA,MAAgB,eAAgD;AAC9D,SAAK,UAAU,IAAI,sBAAsB,KAAK,QAAQ,KAAK,IAAI,MAAM;AACrE,SAAK,IAAI,OAAO,KAAK,6BAA6B;AAClD,WAAO,CAAC,EAAE,YAAY,qCAAwB,UAAU,KAAK,QAAQ,CAAC;AAAA,EACxE;AAAA,EAEA,MAAgB,aAA4B;AAC1C,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,aAAoC;AAClC,QAAI,CAAC,KAAK,QAAS,OAAM,IAAI,MAAM,iCAAiC;AACpE,WAAO,KAAK;AAAA,EACd;AAAA,EAEU,uBAAuB;AAC/B,WAAO,KAAK,OAAO;AAAA,MACjB,UAAU;AAAA,QACR;AAAA,UACE,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,aAAa;AAAA,UACb,QAAQ;AAAA,YACN,KAAK,MAAM;AAAA,cACT,MAAM;AAAA,cACN,KAAK;AAAA,cACL,OAAO;AAAA,cACP,aAAa;AAAA,cACb,aAAa;AAAA,cACb,UAAU;AAAA,YACZ,CAAC;AAAA,YACD,KAAK,MAAM;AAAA,cACT,MAAM;AAAA,cACN,KAAK;AAAA,cACL,OAAO;AAAA,cACP,aAAa;AAAA,cACb,YAAY;AAAA,cACZ,UAAU;AAAA,YACZ,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
package/dist/index.mjs CHANGED
@@ -1,9 +1,6 @@
1
- import {
2
- CloudflareTurnAddon,
3
- CloudflareTurnService
4
- } from "./chunk-RRRS5VHF.mjs";
1
+ import { CloudflareTurnAddon, C } from "./cloudflare-turn.addon.mjs";
5
2
  export {
6
3
  CloudflareTurnAddon,
7
- CloudflareTurnService
4
+ C as CloudflareTurnService
8
5
  };
9
- //# sourceMappingURL=index.mjs.map
6
+ //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-cloudflare-turn",
3
- "version": "0.1.14",
3
+ "version": "0.1.15",
4
4
  "description": "Cloudflare TURN relay addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",
@@ -51,7 +51,7 @@
51
51
  "dist"
52
52
  ],
53
53
  "scripts": {
54
- "build": "tsup",
54
+ "build": "vite build",
55
55
  "dev": "tsup --watch",
56
56
  "typecheck": "tsc --noEmit",
57
57
  "publish": "npm publish --access public"
@@ -1,84 +0,0 @@
1
- // src/cloudflare-turn.addon.ts
2
- import { BaseAddon, turnProviderCapability } from "@camstack/types";
3
-
4
- // src/cloudflare-turn.ts
5
- var CloudflareTurnService = class {
6
- constructor(_config, logger) {
7
- this.logger = logger;
8
- }
9
- logger;
10
- id = "cloudflare-turn";
11
- name = "Cloudflare TURN";
12
- /**
13
- * Return the current TURN/STUN server list with credentials.
14
- * Implements `turn-provider` capability.
15
- */
16
- getTurnServers() {
17
- this.logger.debug("Fetching TURN servers from Cloudflare");
18
- return [
19
- {
20
- urls: [
21
- "turn:turn.cloudflare.com:3478?transport=udp",
22
- "turn:turn.cloudflare.com:3478?transport=tcp"
23
- ],
24
- username: "temp-user",
25
- credential: "temp-credential"
26
- }
27
- ];
28
- }
29
- };
30
-
31
- // src/cloudflare-turn.addon.ts
32
- var CloudflareTurnAddon = class extends BaseAddon {
33
- service = null;
34
- constructor() {
35
- super({ apiToken: "", accountId: "" });
36
- }
37
- async onInitialize() {
38
- this.service = new CloudflareTurnService(this.config, this.ctx.logger);
39
- this.ctx.logger.info("Cloudflare TURN initialized");
40
- return [{ capability: turnProviderCapability, provider: this.service }];
41
- }
42
- async onShutdown() {
43
- this.service = null;
44
- }
45
- getService() {
46
- if (!this.service) throw new Error("Cloudflare TURN not initialized");
47
- return this.service;
48
- }
49
- globalSettingsSchema() {
50
- return this.schema({
51
- sections: [
52
- {
53
- id: "credentials",
54
- title: "Cloudflare Credentials",
55
- description: "API credentials for fetching TURN relay tokens from Cloudflare.",
56
- fields: [
57
- this.field({
58
- type: "text",
59
- key: "accountId",
60
- label: "Account ID",
61
- description: "Your Cloudflare account ID (found in the Cloudflare dashboard URL)",
62
- placeholder: "a1b2c3d4e5f6...",
63
- required: true
64
- }),
65
- this.field({
66
- type: "password",
67
- key: "apiToken",
68
- label: "API Token",
69
- description: "Cloudflare API token with Calls: Read permission",
70
- showToggle: true,
71
- required: true
72
- })
73
- ]
74
- }
75
- ]
76
- });
77
- }
78
- };
79
-
80
- export {
81
- CloudflareTurnService,
82
- CloudflareTurnAddon
83
- };
84
- //# sourceMappingURL=chunk-RRRS5VHF.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cloudflare-turn.addon.ts","../src/cloudflare-turn.ts"],"sourcesContent":["import type { ProviderRegistration } from '@camstack/types'\nimport { BaseAddon, turnProviderCapability } from '@camstack/types'\nimport { CloudflareTurnService } from './cloudflare-turn'\nimport type { CloudflareTurnConfig } from './cloudflare-turn'\n\n/**\n * Settings redesign Phase 3: cloudflare-turn is node-level credentials\n * storage. Implements `getGlobalSettings`.\n */\nexport class CloudflareTurnAddon extends BaseAddon<CloudflareTurnConfig> {\n private service: CloudflareTurnService | null = null\n\n constructor() {\n super({ apiToken: '', accountId: '' })\n }\n\n protected async onInitialize(): Promise<ProviderRegistration[]> {\n this.service = new CloudflareTurnService(this.config, this.ctx.logger)\n this.ctx.logger.info('Cloudflare TURN initialized')\n return [{ capability: turnProviderCapability, provider: this.service }]\n }\n\n protected async onShutdown(): Promise<void> {\n this.service = null\n }\n\n getService(): CloudflareTurnService {\n if (!this.service) throw new Error('Cloudflare TURN not initialized')\n return this.service\n }\n\n protected globalSettingsSchema() {\n return this.schema({\n sections: [\n {\n id: 'credentials',\n title: 'Cloudflare Credentials',\n description: 'API credentials for fetching TURN relay tokens from Cloudflare.',\n fields: [\n this.field({\n type: 'text',\n key: 'accountId',\n label: 'Account ID',\n description: 'Your Cloudflare account ID (found in the Cloudflare dashboard URL)',\n placeholder: 'a1b2c3d4e5f6...',\n required: true,\n }),\n this.field({\n type: 'password',\n key: 'apiToken',\n label: 'API Token',\n description: 'Cloudflare API token with Calls: Read permission',\n showToggle: true,\n required: true,\n }),\n ],\n },\n ],\n })\n }\n}\n","import type { IScopedLogger } from '@camstack/types'\n\nexport interface CloudflareTurnConfig {\n readonly apiToken: string\n readonly accountId: string\n}\n\ntype TurnServer = { urls: string | string[]; username?: string; credential?: string }\n\n/**\n * Cloudflare TURN/STUN provider.\n *\n * Implements the `turn-provider` capability (system collection). Called\n * by the `webrtc` capability implementations when building ICE server\n * lists for a new peer connection. Each call SHOULD fetch fresh\n * short-lived credentials — currently stubbed with static values until\n * the Cloudflare Calls API integration is wired.\n */\nexport class CloudflareTurnService {\n readonly id = 'cloudflare-turn'\n readonly name = 'Cloudflare TURN'\n\n constructor(\n _config: CloudflareTurnConfig,\n private readonly logger: IScopedLogger,\n ) {}\n\n /**\n * Return the current TURN/STUN server list with credentials.\n * Implements `turn-provider` capability.\n */\n getTurnServers(): readonly TurnServer[] {\n this.logger.debug('Fetching TURN servers from Cloudflare')\n // TODO: implement real Cloudflare TURN integration.\n // Real integration requires a Cloudflare Calls API call using this.apiToken/accountId.\n return [\n {\n urls: [\n 'turn:turn.cloudflare.com:3478?transport=udp',\n 'turn:turn.cloudflare.com:3478?transport=tcp',\n ],\n username: 'temp-user',\n credential: 'temp-credential',\n },\n ]\n }\n}\n"],"mappings":";AACA,SAAS,WAAW,8BAA8B;;;ACiB3C,IAAM,wBAAN,MAA4B;AAAA,EAIjC,YACE,SACiB,QACjB;AADiB;AAAA,EAChB;AAAA,EADgB;AAAA,EALV,KAAK;AAAA,EACL,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAWhB,iBAAwC;AACtC,SAAK,OAAO,MAAM,uCAAuC;AAGzD,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,QACF;AAAA,QACA,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF;;;ADrCO,IAAM,sBAAN,cAAkC,UAAgC;AAAA,EAC/D,UAAwC;AAAA,EAEhD,cAAc;AACZ,UAAM,EAAE,UAAU,IAAI,WAAW,GAAG,CAAC;AAAA,EACvC;AAAA,EAEA,MAAgB,eAAgD;AAC9D,SAAK,UAAU,IAAI,sBAAsB,KAAK,QAAQ,KAAK,IAAI,MAAM;AACrE,SAAK,IAAI,OAAO,KAAK,6BAA6B;AAClD,WAAO,CAAC,EAAE,YAAY,wBAAwB,UAAU,KAAK,QAAQ,CAAC;AAAA,EACxE;AAAA,EAEA,MAAgB,aAA4B;AAC1C,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,aAAoC;AAClC,QAAI,CAAC,KAAK,QAAS,OAAM,IAAI,MAAM,iCAAiC;AACpE,WAAO,KAAK;AAAA,EACd;AAAA,EAEU,uBAAuB;AAC/B,WAAO,KAAK,OAAO;AAAA,MACjB,UAAU;AAAA,QACR;AAAA,UACE,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,aAAa;AAAA,UACb,QAAQ;AAAA,YACN,KAAK,MAAM;AAAA,cACT,MAAM;AAAA,cACN,KAAK;AAAA,cACL,OAAO;AAAA,cACP,aAAa;AAAA,cACb,aAAa;AAAA,cACb,UAAU;AAAA,YACZ,CAAC;AAAA,YACD,KAAK,MAAM;AAAA,cACT,MAAM;AAAA,cACN,KAAK;AAAA,cACL,OAAO;AAAA,cACP,aAAa;AAAA,cACb,YAAY;AAAA,cACZ,UAAU;AAAA,YACZ,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -1,47 +0,0 @@
1
- import * as _camstack_types from '@camstack/types';
2
- import { IScopedLogger, BaseAddon, ProviderRegistration } from '@camstack/types';
3
-
4
- interface CloudflareTurnConfig {
5
- readonly apiToken: string;
6
- readonly accountId: string;
7
- }
8
- type TurnServer = {
9
- urls: string | string[];
10
- username?: string;
11
- credential?: string;
12
- };
13
- /**
14
- * Cloudflare TURN/STUN provider.
15
- *
16
- * Implements the `turn-provider` capability (system collection). Called
17
- * by the `webrtc` capability implementations when building ICE server
18
- * lists for a new peer connection. Each call SHOULD fetch fresh
19
- * short-lived credentials — currently stubbed with static values until
20
- * the Cloudflare Calls API integration is wired.
21
- */
22
- declare class CloudflareTurnService {
23
- private readonly logger;
24
- readonly id = "cloudflare-turn";
25
- readonly name = "Cloudflare TURN";
26
- constructor(_config: CloudflareTurnConfig, logger: IScopedLogger);
27
- /**
28
- * Return the current TURN/STUN server list with credentials.
29
- * Implements `turn-provider` capability.
30
- */
31
- getTurnServers(): readonly TurnServer[];
32
- }
33
-
34
- /**
35
- * Settings redesign Phase 3: cloudflare-turn is node-level credentials
36
- * storage. Implements `getGlobalSettings`.
37
- */
38
- declare class CloudflareTurnAddon extends BaseAddon<CloudflareTurnConfig> {
39
- private service;
40
- constructor();
41
- protected onInitialize(): Promise<ProviderRegistration[]>;
42
- protected onShutdown(): Promise<void>;
43
- getService(): CloudflareTurnService;
44
- protected globalSettingsSchema(): _camstack_types.ConfigUISchema;
45
- }
46
-
47
- export { type CloudflareTurnConfig as C, CloudflareTurnAddon, CloudflareTurnService as a };
@@ -1,47 +0,0 @@
1
- import * as _camstack_types from '@camstack/types';
2
- import { IScopedLogger, BaseAddon, ProviderRegistration } from '@camstack/types';
3
-
4
- interface CloudflareTurnConfig {
5
- readonly apiToken: string;
6
- readonly accountId: string;
7
- }
8
- type TurnServer = {
9
- urls: string | string[];
10
- username?: string;
11
- credential?: string;
12
- };
13
- /**
14
- * Cloudflare TURN/STUN provider.
15
- *
16
- * Implements the `turn-provider` capability (system collection). Called
17
- * by the `webrtc` capability implementations when building ICE server
18
- * lists for a new peer connection. Each call SHOULD fetch fresh
19
- * short-lived credentials — currently stubbed with static values until
20
- * the Cloudflare Calls API integration is wired.
21
- */
22
- declare class CloudflareTurnService {
23
- private readonly logger;
24
- readonly id = "cloudflare-turn";
25
- readonly name = "Cloudflare TURN";
26
- constructor(_config: CloudflareTurnConfig, logger: IScopedLogger);
27
- /**
28
- * Return the current TURN/STUN server list with credentials.
29
- * Implements `turn-provider` capability.
30
- */
31
- getTurnServers(): readonly TurnServer[];
32
- }
33
-
34
- /**
35
- * Settings redesign Phase 3: cloudflare-turn is node-level credentials
36
- * storage. Implements `getGlobalSettings`.
37
- */
38
- declare class CloudflareTurnAddon extends BaseAddon<CloudflareTurnConfig> {
39
- private service;
40
- constructor();
41
- protected onInitialize(): Promise<ProviderRegistration[]>;
42
- protected onShutdown(): Promise<void>;
43
- getService(): CloudflareTurnService;
44
- protected globalSettingsSchema(): _camstack_types.ConfigUISchema;
45
- }
46
-
47
- export { type CloudflareTurnConfig as C, CloudflareTurnAddon, CloudflareTurnService as a };
package/dist/index.d.mts DELETED
@@ -1,2 +0,0 @@
1
- export { CloudflareTurnAddon, C as CloudflareTurnConfig, a as CloudflareTurnService } from './cloudflare-turn.addon.mjs';
2
- import '@camstack/types';
package/dist/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export { CloudflareTurnAddon, C as CloudflareTurnConfig, a as CloudflareTurnService } from './cloudflare-turn.addon.js';
2
- import '@camstack/types';