ugly-app 0.1.619 → 0.1.621

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/cli/version.d.ts +1 -1
  2. package/dist/cli/version.js +1 -1
  3. package/dist/native/contract-meta.d.ts +7 -0
  4. package/dist/native/contract-meta.d.ts.map +1 -0
  5. package/dist/native/contract-meta.js +105 -0
  6. package/dist/native/contract-meta.js.map +1 -0
  7. package/dist/native/contract.d.ts +254 -24
  8. package/dist/native/contract.d.ts.map +1 -1
  9. package/dist/native/contract.js +4 -15
  10. package/dist/native/contract.js.map +1 -1
  11. package/dist/native/facades/net.d.ts +26 -0
  12. package/dist/native/facades/net.d.ts.map +1 -0
  13. package/dist/native/facades/net.js +22 -0
  14. package/dist/native/facades/net.js.map +1 -0
  15. package/dist/native/facades/process.d.ts +20 -0
  16. package/dist/native/facades/process.d.ts.map +1 -0
  17. package/dist/native/facades/process.js +15 -0
  18. package/dist/native/facades/process.js.map +1 -0
  19. package/dist/native/facades/studio.d.ts +47 -0
  20. package/dist/native/facades/studio.d.ts.map +1 -0
  21. package/dist/native/facades/studio.js +38 -0
  22. package/dist/native/facades/studio.js.map +1 -0
  23. package/dist/native/index.d.ts +10 -3
  24. package/dist/native/index.d.ts.map +1 -1
  25. package/dist/native/index.js +4 -2
  26. package/dist/native/index.js.map +1 -1
  27. package/dist/native/install.d.ts.map +1 -1
  28. package/dist/native/install.js +10 -8
  29. package/dist/native/install.js.map +1 -1
  30. package/dist/native/permissions.d.ts +12 -0
  31. package/dist/native/permissions.d.ts.map +1 -0
  32. package/dist/native/permissions.js +47 -0
  33. package/dist/native/permissions.js.map +1 -0
  34. package/dist/native/protocol.d.ts +5 -1
  35. package/dist/native/protocol.d.ts.map +1 -1
  36. package/dist/native/protocol.js +8 -0
  37. package/dist/native/protocol.js.map +1 -1
  38. package/dist/native/web-adapter.d.ts +5 -0
  39. package/dist/native/web-adapter.d.ts.map +1 -0
  40. package/dist/native/web-adapter.js +111 -0
  41. package/dist/native/web-adapter.js.map +1 -0
  42. package/dist/native/wrapper.d.ts +80 -6
  43. package/dist/native/wrapper.d.ts.map +1 -1
  44. package/dist/native/wrapper.js +149 -12
  45. package/dist/native/wrapper.js.map +1 -1
  46. package/dist/search/server/WebRetriever.d.ts +7 -0
  47. package/dist/search/server/WebRetriever.d.ts.map +1 -1
  48. package/dist/search/server/WebRetriever.js +2 -2
  49. package/dist/search/server/WebRetriever.js.map +1 -1
  50. package/dist/server/ai/providers/UglyBotWebSearchProvider.d.ts.map +1 -1
  51. package/dist/server/ai/providers/UglyBotWebSearchProvider.js +11 -8
  52. package/dist/server/ai/providers/UglyBotWebSearchProvider.js.map +1 -1
  53. package/dist/server/ai/types.d.ts +7 -0
  54. package/dist/server/ai/types.d.ts.map +1 -1
  55. package/dist/server/ai/types.js.map +1 -1
  56. package/package.json +1 -1
  57. package/src/cli/version.ts +1 -1
  58. package/src/native/contract-meta.test.ts +23 -0
  59. package/src/native/contract-meta.ts +114 -0
  60. package/src/native/contract.test.ts +13 -7
  61. package/src/native/contract.ts +130 -32
  62. package/src/native/facades/facades.test.ts +35 -0
  63. package/src/native/facades/net.ts +50 -0
  64. package/src/native/facades/process.ts +37 -0
  65. package/src/native/facades/studio.ts +73 -0
  66. package/src/native/index.ts +24 -3
  67. package/src/native/install.test.ts +8 -0
  68. package/src/native/install.ts +12 -8
  69. package/src/native/permissions.test.ts +42 -0
  70. package/src/native/permissions.ts +53 -0
  71. package/src/native/protocol.test.ts +15 -0
  72. package/src/native/protocol.ts +10 -1
  73. package/src/native/web-adapter.test.ts +27 -0
  74. package/src/native/web-adapter.ts +118 -0
  75. package/src/native/wrapper.test.ts +22 -0
  76. package/src/native/wrapper.ts +163 -13
  77. package/src/search/server/WebRetriever.ts +9 -4
  78. package/src/server/ai/providers/UglyBotWebSearchProvider.ts +13 -2
  79. package/src/server/ai/types.ts +7 -0
@@ -1,24 +1,161 @@
1
+ import { NativeUnavailableError } from './protocol.js';
1
2
  import { installUglyNative } from './install.js';
3
+ import { createPermissions } from './permissions.js';
4
+ import { createProcessFacade } from './facades/process.js';
5
+ import { createNetFacade } from './facades/net.js';
6
+ import { createStudioFacade } from './facades/studio.js';
2
7
  const n = () => installUglyNative();
8
+ const inv = (c, p) => n().invoke(c, p);
9
+ export const permissions = createPermissions((c, p) => n().invoke(c, p), n().platform);
10
+ const desktopBridge = () => globalThis.UglyDesktop;
3
11
  export const native = {
12
+ permissions,
13
+ capture: {
14
+ screenshot: () => inv('capture.screenshot', undefined),
15
+ },
4
16
  gps: {
5
- start: (p) => n().invoke('gps.start', p),
6
- stop: () => n().invoke('gps.stop', undefined),
17
+ start: (p) => inv('gps.start', p),
18
+ stop: () => inv('gps.stop', undefined),
7
19
  onPosition: (cb) => n().subscribe('gps.position', cb),
8
20
  },
21
+ liveActivity: {
22
+ startWorkout: (p) => inv('liveActivity.startWorkout', p),
23
+ updateWorkout: (p) => inv('liveActivity.updateWorkout', p),
24
+ endWorkout: () => inv('liveActivity.endWorkout', undefined),
25
+ startCardio: (p) => inv('liveActivity.startCardio', p),
26
+ updateCardio: (p) => inv('liveActivity.updateCardio', p),
27
+ endCardio: () => inv('liveActivity.endCardio', undefined),
28
+ },
9
29
  alarm: {
10
- schedule: (p) => n().invoke('alarm.schedule', p),
11
- cancel: (p) => n().invoke('alarm.cancel', p),
12
- playAudio: (p) => n().invoke('alarm.playAudio', p),
30
+ schedule: (p) => inv('alarm.schedule', p),
31
+ cancel: (p) => inv('alarm.cancel', p),
32
+ playAudio: (p) => inv('alarm.playAudio', p),
13
33
  onFired: (cb) => n().subscribe('alarm.fired', cb),
14
34
  },
15
- liveActivity: {
16
- startWorkout: (p) => n().invoke('liveActivity.startWorkout', p),
17
- updateWorkout: (p) => n().invoke('liveActivity.updateWorkout', p),
18
- endWorkout: () => n().invoke('liveActivity.endWorkout', undefined),
19
- startCardio: (p) => n().invoke('liveActivity.startCardio', p),
20
- updateCardio: (p) => n().invoke('liveActivity.updateCardio', p),
21
- endCardio: () => n().invoke('liveActivity.endCardio', undefined),
35
+ tts: {
36
+ start: (p) => inv('tts.start', p),
37
+ pause: () => inv('tts.pause', undefined),
38
+ resume: () => inv('tts.resume', undefined),
39
+ stop: () => inv('tts.stop', undefined),
40
+ onState: (cb) => n().subscribe('tts.state', cb),
41
+ },
42
+ push: {
43
+ register: () => inv('push.register', undefined),
44
+ onToken: (cb) => n().subscribe('push.token', cb),
45
+ onNotificationClick: (cb) => n().subscribe('push.notificationClick', cb),
46
+ },
47
+ clipboard: {
48
+ write: (p) => inv('clipboard.write', p),
49
+ read: () => inv('clipboard.read', undefined),
50
+ },
51
+ system: {
52
+ openExternal: (p) => inv('system.openExternal', p),
53
+ share: (p) => inv('system.share', p),
54
+ },
55
+ badge: {
56
+ set: (p) => inv('badge.set', p),
57
+ },
58
+ ui: {
59
+ getSafeArea: () => inv('ui.getSafeArea', undefined),
60
+ onKeyboardHeight: (cb) => n().subscribe('keyboard.height', cb),
61
+ onSafeAreaInsets: (cb) => n().subscribe('safeArea.insets', cb),
62
+ },
63
+ fs: {
64
+ readFile: async (path) => {
65
+ await permissions.ensure('fs');
66
+ return (await inv('fs.readFile', { path })).content;
67
+ },
68
+ writeFile: async (path, content) => {
69
+ await permissions.ensure('fs');
70
+ return inv('fs.writeFile', { path, content });
71
+ },
72
+ mkdir: async (path, recursive = false) => {
73
+ await permissions.ensure('fs');
74
+ return inv('fs.mkdir', { path, recursive });
75
+ },
76
+ rm: async (path, opts = {}) => {
77
+ await permissions.ensure('fs');
78
+ return inv('fs.rm', { path, ...opts });
79
+ },
80
+ rename: async (from, to) => {
81
+ await permissions.ensure('fs');
82
+ return inv('fs.rename', { from, to });
83
+ },
84
+ readdir: async (path) => {
85
+ await permissions.ensure('fs');
86
+ return (await inv('fs.readdir', { path })).entries;
87
+ },
88
+ stat: async (path) => {
89
+ await permissions.ensure('fs');
90
+ return inv('fs.stat', { path });
91
+ },
92
+ exists: async (path) => {
93
+ await permissions.ensure('fs');
94
+ return (await inv('fs.exists', { path })).exists;
95
+ },
96
+ realpath: async (path) => {
97
+ await permissions.ensure('fs');
98
+ return (await inv('fs.realpath', { path })).path;
99
+ },
100
+ readFileBytes: async (path) => {
101
+ await permissions.ensure('fs');
102
+ const fb = desktopBridge()?.fsBytes;
103
+ if (!fb)
104
+ throw new NativeUnavailableError('fs.readFileBytes');
105
+ return fb.readFileBytes(path);
106
+ },
107
+ writeFileBytes: async (path, bytes) => {
108
+ await permissions.ensure('fs');
109
+ const fb = desktopBridge()?.fsBytes;
110
+ if (!fb)
111
+ throw new NativeUnavailableError('fs.writeFileBytes');
112
+ return fb.writeFileBytes(path, bytes);
113
+ },
114
+ },
115
+ process: createProcessFacade(() => desktopBridge()?.process, n().platform, () => permissions.ensure('process')),
116
+ net: createNetFacade(() => desktopBridge()?.net, n().platform, () => permissions.ensure('net')),
117
+ studio: createStudioFacade(() => desktopBridge()?.studio, n().platform),
118
+ secrets: {
119
+ get: async (key) => {
120
+ await permissions.ensure('secrets');
121
+ return (await inv('secrets.get', { key })).value;
122
+ },
123
+ set: async (key, value) => {
124
+ await permissions.ensure('secrets');
125
+ return inv('secrets.set', { key, value });
126
+ },
127
+ delete: async (key) => {
128
+ await permissions.ensure('secrets');
129
+ return inv('secrets.delete', { key });
130
+ },
131
+ list: async () => {
132
+ await permissions.ensure('secrets');
133
+ return (await inv('secrets.list', undefined)).keys;
134
+ },
135
+ },
136
+ serve: {
137
+ start: async (dir) => {
138
+ await permissions.ensure('serve');
139
+ return inv('serve.start', { dir });
140
+ },
141
+ stop: async (port) => {
142
+ await permissions.ensure('serve');
143
+ return inv('serve.stop', { port });
144
+ },
145
+ },
146
+ workers: {
147
+ register: async (path, boot = false) => {
148
+ await permissions.ensure('workers');
149
+ return (await inv('workers.register', { path, boot })).id;
150
+ },
151
+ unregister: async (id) => {
152
+ await permissions.ensure('workers');
153
+ return inv('workers.unregister', { id });
154
+ },
155
+ list: async () => {
156
+ await permissions.ensure('workers');
157
+ return (await inv('workers.list', undefined)).ids;
158
+ },
22
159
  },
23
160
  };
24
161
  export function nativePlatform() {
@@ -1 +1 @@
1
- {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../src/native/wrapper.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC;AAEpC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,GAAG,EAAE;QACH,KAAK,EAAE,CAAC,CAAyB,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAChE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC;QAC7C,UAAU,EAAE,CAAC,EAAuC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC;KAC3F;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,CAAC,CAA8B,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC7E,MAAM,EAAE,CAAC,CAA4B,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QACvE,SAAS,EAAE,CAAC,CAA+B,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAChF,OAAO,EAAE,CAAC,EAAsC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,CAAC;KACtF;IACD,YAAY,EAAE;QACZ,YAAY,EAAE,CAAC,CAAyC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,2BAA2B,EAAE,CAAC,CAAC;QACvG,aAAa,EAAE,CAAC,CAA0C,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,4BAA4B,EAAE,CAAC,CAAC;QAC1G,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,yBAAyB,EAAE,SAAS,CAAC;QAClE,WAAW,EAAE,CAAC,CAAwC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC,CAAC;QACpG,YAAY,EAAE,CAAC,CAAyC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,2BAA2B,EAAE,CAAC,CAAC;QACvG,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,wBAAwB,EAAE,SAAS,CAAC;KACjE;CACF,CAAC;AAEF,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC;AACtB,CAAC;AACD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,EAAE,CAAC,QAAQ,KAAK,KAAK,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../src/native/wrapper.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export interface WebSearchLike {
6
6
  limit?: number;
7
7
  }, options?: {
8
8
  userId?: string;
9
+ token?: string;
9
10
  }): Promise<{
10
11
  items: {
11
12
  url: string;
@@ -18,6 +19,7 @@ export interface WebSearchLike {
18
19
  text?: string;
19
20
  }, options?: {
20
21
  userId?: string;
22
+ token?: string;
21
23
  }): Promise<{
22
24
  output: string;
23
25
  }>;
@@ -25,6 +27,11 @@ export interface WebSearchLike {
25
27
  export interface WebRetrieverOptions {
26
28
  /** Bill the search proxy to this user (charge context). */
27
29
  userId?: string;
30
+ /**
31
+ * The end user's ugly.bot session JWT. When set, the search proxy bills the
32
+ * USER (not the app owner). Omit for the default owner-billed behavior.
33
+ */
34
+ userToken?: string;
28
35
  /** Default result count. */
29
36
  limit?: number;
30
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"WebRetriever.d.ts","sourceRoot":"","sources":["../../../src/search/server/WebRetriever.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE1F,oEAAoE;AACpE,MAAM,WAAW,aAAa;IAC5B,MAAM,CACJ,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EACzC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5B,OAAO,CAAC;QAAE,KAAK,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC,CAAC;IACzE,SAAS,CAAC,CACR,MAAM,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EACvC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5B,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAUD,qBAAa,YAAa,YAAW,SAAS;IAI1C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJvB,QAAQ,CAAC,IAAI,SAAS;gBAGH,QAAQ,GAAE,aAAwC,EAClD,IAAI,GAAE,mBAAwB;IAG3C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAsBxE,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;CAcrD"}
1
+ {"version":3,"file":"WebRetriever.d.ts","sourceRoot":"","sources":["../../../src/search/server/WebRetriever.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE1F,oEAAoE;AACpE,MAAM,WAAW,aAAa;IAC5B,MAAM,CACJ,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EACzC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC;QAAE,KAAK,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC,CAAC;IACzE,SAAS,CAAC,CACR,MAAM,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EACvC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAUD,qBAAa,YAAa,YAAW,SAAS;IAI1C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJvB,QAAQ,CAAC,IAAI,SAAS;gBAGH,QAAQ,GAAE,aAAwC,EAClD,IAAI,GAAE,mBAAwB;IAG3C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAsBxE,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;CAcrD"}
@@ -22,7 +22,7 @@ export class WebRetriever {
22
22
  }
23
23
  async retrieve(query, o) {
24
24
  const limit = o?.limit ?? this.opts.limit ?? 8;
25
- const { items } = await this.provider.search({ query, limit }, { userId: this.opts.userId });
25
+ const { items } = await this.provider.search({ query, limit }, { userId: this.opts.userId, token: this.opts.userToken });
26
26
  const n = Math.max(items.length, 1);
27
27
  return items.map((it, i) => ({
28
28
  id: it.url,
@@ -41,7 +41,7 @@ export class WebRetriever {
41
41
  async read(result) {
42
42
  if (this.provider.summarize && result.source.url) {
43
43
  try {
44
- const { output } = await this.provider.summarize({ url: result.source.url }, { userId: this.opts.userId });
44
+ const { output } = await this.provider.summarize({ url: result.source.url }, { userId: this.opts.userId, token: this.opts.userToken });
45
45
  if (output)
46
46
  return output;
47
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"WebRetriever.js","sourceRoot":"","sources":["../../../src/search/server/WebRetriever.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,EAAE;AACF,8EAA8E;AAC9E,iFAAiF;AACjF,yDAAyD;AAEzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uDAAuD,CAAC;AAsBjG,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,OAAO,YAAY;IAIJ;IACA;IAJV,IAAI,GAAG,KAAK,CAAC;IAEtB,YACmB,WAA0B,wBAAwB,EAClD,OAA4B,EAAE;QAD9B,aAAQ,GAAR,QAAQ,CAA0C;QAClD,SAAI,GAAJ,IAAI,CAA0B;IAC9C,CAAC;IAEJ,KAAK,CAAC,QAAQ,CAAC,KAAa,EAAE,CAAmB;QAC/C,MAAM,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QAC/C,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAC1C,EAAE,KAAK,EAAE,KAAK,EAAE,EAChB,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAC7B,CAAC;QACF,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3B,EAAE,EAAE,EAAE,CAAC,GAAG;YACV,IAAI,EAAE,EAAE,CAAC,OAAO;YAChB,yEAAyE;YACzE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;YAChB,MAAM,EAAE;gBACN,IAAI,EAAE,KAAK;gBACX,GAAG,EAAE,EAAE,CAAC,GAAG;gBACX,KAAK,EAAE,EAAE,CAAC,KAAK;gBACf,OAAO,EAAE,EAAE,CAAC,OAAO;gBACnB,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC;aAC3B;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAuB;QAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACjD,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAC9C,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAC1B,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAC7B,CAAC;gBACF,IAAI,MAAM;oBAAE,OAAO,MAAM,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,0BAA0B;YAC5B,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;CACF"}
1
+ {"version":3,"file":"WebRetriever.js","sourceRoot":"","sources":["../../../src/search/server/WebRetriever.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,EAAE;AACF,8EAA8E;AAC9E,iFAAiF;AACjF,yDAAyD;AAEzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uDAAuD,CAAC;AA2BjG,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,OAAO,YAAY;IAIJ;IACA;IAJV,IAAI,GAAG,KAAK,CAAC;IAEtB,YACmB,WAA0B,wBAAwB,EAClD,OAA4B,EAAE;QAD9B,aAAQ,GAAR,QAAQ,CAA0C;QAClD,SAAI,GAAJ,IAAI,CAA0B;IAC9C,CAAC;IAEJ,KAAK,CAAC,QAAQ,CAAC,KAAa,EAAE,CAAmB;QAC/C,MAAM,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QAC/C,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAC1C,EAAE,KAAK,EAAE,KAAK,EAAE,EAChB,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CACzD,CAAC;QACF,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3B,EAAE,EAAE,EAAE,CAAC,GAAG;YACV,IAAI,EAAE,EAAE,CAAC,OAAO;YAChB,yEAAyE;YACzE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;YAChB,MAAM,EAAE;gBACN,IAAI,EAAE,KAAK;gBACX,GAAG,EAAE,EAAE,CAAC,GAAG;gBACX,KAAK,EAAE,EAAE,CAAC,KAAK;gBACf,OAAO,EAAE,EAAE,CAAC,OAAO;gBACnB,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC;aAC3B;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAuB;QAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACjD,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAC9C,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAC1B,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CACzD,CAAC;gBACF,IAAI,MAAM;oBAAE,OAAO,MAAM,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,0BAA0B;YAC5B,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"UglyBotWebSearchProvider.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotWebSearchProvider.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAoB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAyDvE,eAAO,MAAM,wBAAwB,EAAE,iBAqDtC,CAAC"}
1
+ {"version":3,"file":"UglyBotWebSearchProvider.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotWebSearchProvider.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAoB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAgEvE,eAAO,MAAM,wBAAwB,EAAE,iBAyDtC,CAAC"}
@@ -1,7 +1,10 @@
1
1
  const DEFAULT_SEARCH_PROXY_URL = 'https://api.ugly.bot/v1/search';
2
- function resolveSearchEndpoint(op) {
2
+ function resolveSearchEndpoint(op, userToken) {
3
3
  const base = process.env['SEARCH_PROXY_URL'] ?? DEFAULT_SEARCH_PROXY_URL;
4
- const token = process.env['SEARCH_PROXY_TOKEN'] ??
4
+ // A user session JWT (when supplied) bills the user via resolveChargePayer;
5
+ // otherwise fall back to the app's owner-billed proxy token.
6
+ const token = userToken ??
7
+ process.env['SEARCH_PROXY_TOKEN'] ??
5
8
  process.env['UGLY_BOT_TOKEN'] ??
6
9
  '';
7
10
  if (!token) {
@@ -11,8 +14,8 @@ function resolveSearchEndpoint(op) {
11
14
  }
12
15
  return { url: `${base}/${op}`, token };
13
16
  }
14
- async function searchProxyRequest(op, body) {
15
- const { url, token } = resolveSearchEndpoint(op);
17
+ async function searchProxyRequest(op, body, userToken) {
18
+ const { url, token } = resolveSearchEndpoint(op, userToken);
16
19
  const controller = new AbortController();
17
20
  const timer = setTimeout(() => controller.abort(), 30_000);
18
21
  try {
@@ -44,20 +47,20 @@ export const uglyBotWebSearchProvider = {
44
47
  name: 'uglybot',
45
48
  apiKeyEnv: 'SEARCH_PROXY_TOKEN',
46
49
  async search(params, options) {
47
- return searchProxyRequest('kagi', withChargeContext({ query: params.query, limit: params.limit }, options?.userId));
50
+ return searchProxyRequest('kagi', withChargeContext({ query: params.query, limit: params.limit }, options?.userId), options?.token);
48
51
  },
49
52
  async summarize(params, options) {
50
- const result = await searchProxyRequest('summarize', withChargeContext({ url: params.url, text: params.text }, options?.userId));
53
+ const result = await searchProxyRequest('summarize', withChargeContext({ url: params.url, text: params.text }, options?.userId), options?.token);
51
54
  return {
52
55
  output: result.summary,
53
56
  tokens: Math.ceil(result.summary.length / 4),
54
57
  };
55
58
  },
56
59
  async enrichWeb(params, options) {
57
- return searchProxyRequest('enrich-web', withChargeContext({ query: params.query }, options?.userId));
60
+ return searchProxyRequest('enrich-web', withChargeContext({ query: params.query }, options?.userId), options?.token);
58
61
  },
59
62
  async enrichNews(params, options) {
60
- return searchProxyRequest('enrich-news', withChargeContext({ query: params.query }, options?.userId));
63
+ return searchProxyRequest('enrich-news', withChargeContext({ query: params.query }, options?.userId), options?.token);
61
64
  },
62
65
  };
63
66
  //# sourceMappingURL=UglyBotWebSearchProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UglyBotWebSearchProvider.js","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotWebSearchProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UglyBotWebSearchProvider.js","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotWebSearchProvider.ts"],"names":[],"mappings":"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"}
@@ -179,6 +179,13 @@ export interface ImageGenProvider {
179
179
  }
180
180
  export interface WebSearchOptions {
181
181
  userId?: string;
182
+ /**
183
+ * The end user's ugly.bot session JWT. When set, the search proxy is called
184
+ * with THIS token instead of the app's `SEARCH_PROXY_TOKEN`, so ugly.bot bills
185
+ * the user (via `resolveChargePayer`) instead of the app owner. Omit to keep
186
+ * the default owner-billed behavior.
187
+ */
188
+ token?: string;
182
189
  }
183
190
  export interface WebSearchProvider {
184
191
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server/ai/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server/ai/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/server/ai/types.ts"],"names":[],"mappings":"AA2OA,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAEzB;IACA;IAFlB,YACkB,SAAkB,EAClB,WAAmB;QAEnC,KAAK,CAAC,wDAAwD,SAAS,EAAE,CAAC,CAAC;QAH3D,cAAS,GAAT,SAAS,CAAS;QAClB,gBAAW,GAAX,WAAW,CAAQ;QAGnC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/server/ai/types.ts"],"names":[],"mappings":"AAkPA,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAEzB;IACA;IAFlB,YACkB,SAAkB,EAClB,WAAmB;QAEnC,KAAK,CAAC,wDAAwD,SAAS,EAAE,CAAC,CAAC;QAH3D,cAAS,GAAT,SAAS,CAAS;QAClB,gBAAW,GAAX,WAAW,CAAQ;QAGnC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ugly-app",
3
- "version": "0.1.619",
3
+ "version": "0.1.621",
4
4
  "type": "module",
5
5
  "comment:files": "Allowlist what ships to npm. dist = runtime; src = sourcemap targets (dist/*.js.map reference ../../src/); templates = CLI scaffold. Everything else at repo root (.pgdata local Postgres, coverage, assets/icons sources, test/, test-results/) is excluded by omission. The !negations strip the scaffold's installed deps + cruft (templates/node_modules is 200MB+ and must never ship). package.json/README/LICENSE ship automatically.",
6
6
  "files": [
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.619";
2
+ export const CLI_VERSION = "0.1.621";
@@ -0,0 +1,23 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { CHANNEL_FALLBACK, NAMESPACES, fallbackFor } from './contract-meta';
3
+
4
+ describe('contract-meta', () => {
5
+ it('has a fallback entry for every channel and platform', () => {
6
+ const channels = Object.keys(CHANNEL_FALLBACK) as (keyof typeof CHANNEL_FALLBACK)[];
7
+ expect(channels.length).toBeGreaterThan(30);
8
+ for (const ch of channels) {
9
+ for (const p of ['ios', 'android', 'desktop', 'web'] as const) {
10
+ expect(['native', 'web', 'noop', 'throw']).toContain(CHANNEL_FALLBACK[ch][p]);
11
+ }
12
+ }
13
+ });
14
+ it('fs is throw on web, native on desktop; gps is web on web', () => {
15
+ expect(fallbackFor('fs.readFile', 'web')).toBe('throw');
16
+ expect(fallbackFor('fs.readFile', 'desktop')).toBe('native');
17
+ expect(fallbackFor('gps.start', 'web')).toBe('web');
18
+ });
19
+ it('NAMESPACES includes facade namespaces', () => {
20
+ expect(NAMESPACES).toContain('process');
21
+ expect(NAMESPACES).toContain('studio');
22
+ });
23
+ });
@@ -0,0 +1,114 @@
1
+ import type { Channel, Namespace } from './contract.js';
2
+ import { namespaceOf } from './contract.js';
3
+
4
+ export type Platform = 'ios' | 'android' | 'desktop' | 'web';
5
+ export type Fallback = 'native' | 'web' | 'noop' | 'throw';
6
+
7
+ export const NAMESPACES: Namespace[] = [
8
+ 'capture',
9
+ 'gps',
10
+ 'liveActivity',
11
+ 'alarm',
12
+ 'tts',
13
+ 'push',
14
+ 'clipboard',
15
+ 'system',
16
+ 'badge',
17
+ 'ui',
18
+ 'fs',
19
+ 'secrets',
20
+ 'serve',
21
+ 'workers',
22
+ 'net',
23
+ 'process',
24
+ 'permissions',
25
+ 'studio',
26
+ ];
27
+
28
+ // Per-namespace fallback profile when no explicit channel override applies.
29
+ // Tuple order: [ios, android, desktop, web].
30
+ const NS_DEFAULT: Record<Namespace, [Fallback, Fallback, Fallback, Fallback]> = {
31
+ capture: ['native', 'native', 'native', 'web'],
32
+ gps: ['native', 'native', 'native', 'web'],
33
+ liveActivity: ['native', 'native', 'native', 'web'],
34
+ alarm: ['native', 'native', 'native', 'web'],
35
+ tts: ['native', 'native', 'native', 'web'],
36
+ push: ['native', 'native', 'native', 'web'],
37
+ clipboard: ['native', 'native', 'native', 'web'],
38
+ system: ['native', 'native', 'native', 'web'],
39
+ badge: ['native', 'native', 'native', 'web'],
40
+ ui: ['native', 'native', 'noop', 'web'],
41
+ fs: ['native', 'native', 'native', 'throw'],
42
+ secrets: ['native', 'native', 'native', 'throw'],
43
+ serve: ['native', 'native', 'native', 'throw'],
44
+ workers: ['native', 'native', 'native', 'throw'],
45
+ net: ['native', 'native', 'native', 'throw'],
46
+ process: ['throw', 'throw', 'native', 'throw'],
47
+ permissions: ['native', 'native', 'native', 'native'],
48
+ studio: ['native', 'native', 'native', 'throw'],
49
+ };
50
+
51
+ const PLATFORM_INDEX: Record<Platform, 0 | 1 | 2 | 3> = { ios: 0, android: 1, desktop: 2, web: 3 };
52
+
53
+ // All request/response channels (mirrors contract.ts channels; the test guards count).
54
+ const CHANNELS: Channel[] = [
55
+ 'capture.screenshot',
56
+ 'gps.start',
57
+ 'gps.stop',
58
+ 'liveActivity.startWorkout',
59
+ 'liveActivity.updateWorkout',
60
+ 'liveActivity.endWorkout',
61
+ 'liveActivity.startCardio',
62
+ 'liveActivity.updateCardio',
63
+ 'liveActivity.endCardio',
64
+ 'alarm.schedule',
65
+ 'alarm.cancel',
66
+ 'alarm.playAudio',
67
+ 'tts.start',
68
+ 'tts.pause',
69
+ 'tts.resume',
70
+ 'tts.stop',
71
+ 'push.register',
72
+ 'clipboard.write',
73
+ 'clipboard.read',
74
+ 'system.openExternal',
75
+ 'system.share',
76
+ 'badge.set',
77
+ 'ui.getSafeArea',
78
+ 'fs.readFile',
79
+ 'fs.writeFile',
80
+ 'fs.mkdir',
81
+ 'fs.rm',
82
+ 'fs.rename',
83
+ 'fs.readdir',
84
+ 'fs.stat',
85
+ 'fs.exists',
86
+ 'fs.realpath',
87
+ 'secrets.get',
88
+ 'secrets.set',
89
+ 'secrets.delete',
90
+ 'secrets.list',
91
+ 'serve.start',
92
+ 'serve.stop',
93
+ 'workers.register',
94
+ 'workers.unregister',
95
+ 'workers.list',
96
+ ];
97
+
98
+ function buildChannelFallback(): Record<Channel, Record<Platform, Fallback>> {
99
+ const out = {} as Record<Channel, Record<Platform, Fallback>>;
100
+ for (const ch of CHANNELS) {
101
+ const prof = NS_DEFAULT[namespaceOf(ch)];
102
+ out[ch] = { ios: prof[0], android: prof[1], desktop: prof[2], web: prof[3] };
103
+ }
104
+ return out;
105
+ }
106
+
107
+ export const CHANNEL_FALLBACK: Record<Channel, Record<Platform, Fallback>> = buildChannelFallback();
108
+
109
+ export function fallbackFor(channel: Channel, platform: Platform): Fallback {
110
+ const row = CHANNEL_FALLBACK[channel];
111
+ if (row) return row[platform];
112
+ // Facade-namespace channel (e.g. studio.*, process.*, net.*) not in the table:
113
+ return NS_DEFAULT[namespaceOf(channel)][PLATFORM_INDEX[platform]];
114
+ }
@@ -1,6 +1,6 @@
1
1
  import { describe, it, expect, expectTypeOf } from 'vitest';
2
- import type { PayloadOf, DataOf, Channel } from './contract';
3
- import { CHANNEL_WEB_FALLBACK } from './contract';
2
+ import type { PayloadOf, ResultOf, DataOf, Channel, Namespace } from './contract';
3
+ import { namespaceOf } from './contract';
4
4
 
5
5
  describe('native contract types', () => {
6
6
  it('types the alarm.schedule payload', () => {
@@ -9,12 +9,18 @@ describe('native contract types', () => {
9
9
  it('types the gps.position event data', () => {
10
10
  expectTypeOf<DataOf<'gps.position'>>().toMatchTypeOf<{ lat: number; lng: number }>();
11
11
  });
12
- it('includes liveActivity channels', () => {
12
+ it('contract types span all namespaces', () => {
13
+ expectTypeOf<PayloadOf<'fs.readFile'>>().toEqualTypeOf<{ path: string }>();
14
+ expectTypeOf<ResultOf<'fs.readFile'>>().toEqualTypeOf<{ content: string }>();
15
+ expectTypeOf<ResultOf<'capture.screenshot'>>().toEqualTypeOf<string>();
16
+ expectTypeOf<DataOf<'push.notificationClick'>>().toEqualTypeOf<{ action: string; data: Record<string, string> }>();
17
+ expectTypeOf<'fs'>().toMatchTypeOf<Namespace>();
18
+ expectTypeOf<'liveActivity'>().toMatchTypeOf<Namespace>();
13
19
  expectTypeOf<'liveActivity.startWorkout'>().toMatchTypeOf<Channel>();
14
20
  });
15
- it('runtime fallback table covers the fit channels', () => {
16
- expect(CHANNEL_WEB_FALLBACK['alarm.schedule']).toBe('noop');
17
- expect(CHANNEL_WEB_FALLBACK['liveActivity.startWorkout']).toBe('noop');
18
- expect(Object.keys(CHANNEL_WEB_FALLBACK).length).toBe(11);
21
+ it('namespaceOf extracts the top-level namespace', () => {
22
+ expect(namespaceOf('fs.readFile')).toBe('fs');
23
+ expect(namespaceOf('liveActivity.startWorkout')).toBe('liveActivity');
24
+ expect(namespaceOf('gps.start')).toBe('gps');
19
25
  });
20
26
  });