commandbar 1.10.2 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/build/commandbar/src/shared/services/analytics/EventHandler.d.ts +9 -4
  2. package/build/commandbar/src/shared/services/analytics/event-queue.d.ts +13 -0
  3. package/build/commandbar/src/shared/services/analytics/types.d.ts +3 -3
  4. package/build/commandbar/src/shared/services/analytics/v2/client.d.ts +54 -0
  5. package/build/commandbar/src/shared/services/analytics/v2/helpers.d.ts +6 -0
  6. package/build/commandbar/src/shared/services/analytics/v2/schema.d.ts +152 -0
  7. package/build/commandbar/src/shared/services/analytics/v2/types.d.ts +4 -0
  8. package/build/commandbar-js/src/index.d.ts +2 -3
  9. package/build/commandbar-js/src/index.js +1 -1
  10. package/build/commandbar-js/src/snippet.d.ts +7 -1
  11. package/build/internal/src/client/CommandBarClientSDK.d.ts +13 -1
  12. package/build/internal/src/client/CommandBarProxySDK.d.ts +1 -4
  13. package/build/internal/src/client/CommandBarSDK.d.ts +7 -5
  14. package/build/internal/src/client/SDKConfig.d.ts +3 -1
  15. package/build/internal/src/client/globals.d.ts +1 -0
  16. package/build/internal/src/client/symbols.d.ts +3 -1
  17. package/build/internal/src/middleware/CommandFromClientV.d.ts +16 -2
  18. package/build/internal/src/middleware/OrganizationV.d.ts +44 -8
  19. package/build/internal/src/middleware/additionalResource.d.ts +9 -9
  20. package/build/internal/src/middleware/api.d.ts +181 -0
  21. package/build/internal/src/middleware/billing.d.ts +10 -0
  22. package/build/internal/src/middleware/chat.d.ts +3662 -172
  23. package/build/internal/src/middleware/checklist.d.ts +26 -10
  24. package/build/internal/src/middleware/command.d.ts +540 -140
  25. package/build/internal/src/middleware/endUser.d.ts +2 -0
  26. package/build/internal/src/middleware/experienceTemplate.d.ts +2882 -8
  27. package/build/internal/src/middleware/experiencesSearch.d.ts +233 -28
  28. package/build/internal/src/middleware/flags.d.ts +15 -1
  29. package/build/internal/src/middleware/generics.d.ts +1 -0
  30. package/build/internal/src/middleware/helpDocsIntegration.d.ts +98 -0
  31. package/build/internal/src/middleware/helpDocsSearch.d.ts +165 -20
  32. package/build/internal/src/middleware/helpDocsSync.d.ts +4 -0
  33. package/build/internal/src/middleware/helpHub.d.ts +1 -0
  34. package/build/internal/src/middleware/helpers/actions.d.ts +6 -6
  35. package/build/internal/src/middleware/helpers/commandTemplate.d.ts +2 -2
  36. package/build/internal/src/middleware/helpers/rules.d.ts +9 -7
  37. package/build/internal/src/middleware/localizedMessage.d.ts +50 -0
  38. package/build/internal/src/middleware/network.d.ts +1 -0
  39. package/build/internal/src/middleware/nudge.d.ts +104 -24
  40. package/build/internal/src/middleware/organization.d.ts +201 -62
  41. package/build/internal/src/middleware/organizationSettings.d.ts +12 -8
  42. package/build/internal/src/middleware/profile.d.ts +8 -0
  43. package/build/internal/src/middleware/recommendationSet.d.ts +18 -9
  44. package/build/internal/src/middleware/theme.d.ts +81 -0
  45. package/build/internal/src/middleware/types.d.ts +27 -6
  46. package/build/internal/src/middleware/user.d.ts +9 -1
  47. package/build/internal/src/middleware/workflow.d.ts +85 -0
  48. package/build/internal/src/util/sentry.d.ts +2 -2
  49. package/package.json +8 -3
  50. package/src/index.ts +2 -3
  51. package/src/init.ts +32 -14
  52. package/src/snippet.ts +84 -74
  53. package/build/internal/src/client/OrgConfig.d.ts +0 -5
  54. package/build/internal/src/middleware/guide.d.ts +0 -37
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "commandbar",
3
- "version": "1.10.2",
3
+ "version": "1.12.0",
4
4
  "description": "Javascript Utility for CommandBar",
5
5
  "main": "build/commandbar-js/src/index.js",
6
6
  "types": "build/commandbar-js/src/index.d.ts",
7
7
  "sideEffects": false,
8
8
  "scripts": {
9
9
  "clean": "rimraf build",
10
- "build": "NODE_ENV=production webpack build && tsc",
11
- "minify-snippet": "ts-node scripts/minify-snippet.ts",
10
+ "build": "NODE_ENV=production webpack build && tsc && tsc-alias",
11
+ "minify-snippet": "tsx scripts/minify-snippet.ts",
12
12
  "prepublishOnly": "yarn run clean && yarn run build",
13
13
  "test": "jest --runInBand",
14
14
  "test:watch": "jest --watch --verbose false --silent false",
@@ -23,7 +23,12 @@
23
23
  "io-ts": "^2.2.14"
24
24
  },
25
25
  "devDependencies": {
26
+ "@types/jest": "^29.5.3",
27
+ "jest": "^29.7.0",
26
28
  "rimraf": "3.0.2",
29
+ "tsc-alias": "^1.8.8",
30
+ "tsconfig-paths-webpack-plugin": "^4.1.0",
31
+ "tsx": "^4.9.3",
27
32
  "typescript": "5.1.5",
28
33
  "webpack": "^5.74.0"
29
34
  }
package/src/index.ts CHANGED
@@ -1,9 +1,8 @@
1
1
  import Launcher, { getControlKey } from 'commandbar-launcher';
2
- import type { CommandBarClientSDK } from '@commandbar/internal/src/client/CommandBarClientSDK';
2
+ import type { CommandBarClientSDK } from '@commandbar/internal/client/CommandBarClientSDK';
3
3
 
4
4
  export { default as init } from './init';
5
- export { initProxySDK as initProxy } from '@commandbar/internal/src/client/proxy';
6
- export { snippet } from './snippet';
5
+ export { initProxySDK as initProxy } from '@commandbar/internal/client/proxy';
7
6
  export { CommandBarClientSDK };
8
7
  export { Launcher, getControlKey };
9
8
 
package/src/init.ts CHANGED
@@ -5,15 +5,19 @@ import { getProxySDK } from '../../internal/src/client/proxy';
5
5
  import { _configuration } from '../../internal/src/client/symbols';
6
6
  import { IInitOptions } from '../../internal/src/middleware/types';
7
7
 
8
- const getSrc = (org: string, nonce?: string) => {
9
- let origin = 'https://api.commandbar.com';
8
+ const getSrc = (org: string, opts: IInitOptions) => {
9
+ let origin = opts.apiOrigin || 'https://api.commandbar.com';
10
10
  const params = [];
11
11
 
12
12
  const lc = localStorage.getItem('commandbar.lc');
13
- if (lc && lc.includes('local')) {
13
+ if (lc && lc.includes('api=local')) {
14
14
  // for debugging purposes
15
15
  origin = 'http://localhost:8000';
16
16
  }
17
+ if (lc && lc.includes('api=preview_')) {
18
+ const branchIdentifier = /api=preview_([^;$]+)/.exec(lc)?.[1];
19
+ origin = `https://${branchIdentifier}.commandbar.xyz:8000`;
20
+ }
17
21
 
18
22
  let src = origin + '/latest/' + org;
19
23
 
@@ -21,8 +25,16 @@ const getSrc = (org: string, nonce?: string) => {
21
25
  params.push('lc=' + lc);
22
26
  }
23
27
 
24
- if (nonce) {
25
- params.push('nonce=' + encodeURIComponent(nonce));
28
+ if (opts.nonce) {
29
+ params.push('nonce=' + encodeURIComponent(opts.nonce));
30
+ }
31
+
32
+ if (opts.silentMode) {
33
+ params.push('silent=true');
34
+ }
35
+
36
+ if (opts.cdnOrigin) {
37
+ params.push('cdn=' + encodeURIComponent(opts.cdnOrigin));
26
38
  }
27
39
 
28
40
  const version = 2;
@@ -32,14 +44,14 @@ const getSrc = (org: string, nonce?: string) => {
32
44
  return src;
33
45
  };
34
46
 
35
- const loadLatest = (org: string, nonce?: string) => {
47
+ const loadLatest = (org: string, opts: IInitOptions) => {
36
48
  if (document.readyState !== 'complete') {
37
49
  // NOTE: `once` is not supported by IE11 and this will cause a (minor!) memory leak.
38
- window.addEventListener('load', loadLatest.bind(null, org, nonce), { capture: false, once: true });
50
+ window.addEventListener('load', loadLatest.bind(null, org, opts), { capture: false, once: true });
39
51
  return;
40
52
  }
41
53
 
42
- const src = getSrc(org, nonce);
54
+ const src = getSrc(org, opts);
43
55
 
44
56
  const el = document.createElement('script');
45
57
  el.type = 'text/javascript';
@@ -48,7 +60,10 @@ const loadLatest = (org: string, nonce?: string) => {
48
60
  document.head.appendChild(el);
49
61
  };
50
62
 
51
- const DEFAULT_OPTS = { debug: false };
63
+ const DEFAULT_OPTS = {
64
+ debug: false,
65
+ silentMode: false,
66
+ } as const;
52
67
 
53
68
  /**
54
69
  * Initializes CommandBar and injects the scripts required to load it into the <head> of the document. After calling
@@ -76,14 +91,17 @@ const init = (org: string, opts: IInitOptions = DEFAULT_OPTS) => {
76
91
  config.debug && console.log('CommandBar init...', { environment: opts.environment, version: opts.version });
77
92
 
78
93
  getProxySDK()[_configuration] = {
94
+ api: config.apiOrigin,
95
+ cdn: config.cdnOrigin,
79
96
  uuid: org,
80
- environment: opts.environment,
81
- version: opts.version,
82
- config: opts.config, // TODO: We should update this type to correctly reflect the structure of the response from /config/ https://cmd-k.slack.com/archives/C0315KNU7FY/p1711558822136239?thread_ts=1711554558.063509&cid=C0315KNU7FY
83
- nonce: opts.nonce,
97
+ environment: config.environment,
98
+ version: config.version,
99
+ config: config.config, // TODO: We should update this type to correctly reflect the structure of the response from /config/ https://cmd-k.slack.com/archives/C0315KNU7FY/p1711558822136239?thread_ts=1711554558.063509&cid=C0315KNU7FY
100
+ nonce: config.nonce,
101
+ silent: config.silentMode,
84
102
  };
85
103
 
86
- loadLatest(org, opts.nonce);
104
+ loadLatest(org, config);
87
105
  };
88
106
 
89
107
  export default init;
package/src/snippet.ts CHANGED
@@ -2,94 +2,104 @@
2
2
  /* eslint-disable prefer-rest-params */
3
3
 
4
4
  /* eslint-disable @typescript-eslint/no-inferrable-types */
5
- export const snippet = (org: string) => {
6
- const polyfills = ['Object.assign', 'Symbol', 'Symbol.for'].join('%2C');
7
- const w = window as unknown as Record<string, unknown>;
5
+ const org = '<org_id>';
6
+ let api = 'https://api.commandbar.com';
7
+ let cdn: string | undefined = undefined;
8
8
 
9
- function loadScript(src: string, async = false) {
10
- if (document.readyState !== 'complete') {
11
- window.addEventListener('load', loadScript.bind(null, src, async), { capture: false, once: true });
12
- }
13
- const el = document.createElement('script');
14
- el.type = 'text/javascript';
15
- el.async = async;
16
- el.src = src;
17
- document.head.appendChild(el);
9
+ const polyfills = ['Object.assign', 'Symbol', 'Symbol.for'].join('%2C');
10
+ const w = window as unknown as Record<string, unknown>;
11
+
12
+ function loadScript(src: string, async = false) {
13
+ if (document.readyState !== 'complete') {
14
+ window.addEventListener('load', loadScript.bind(null, src, async), { capture: false, once: true });
18
15
  }
16
+ const el = document.createElement('script');
17
+ el.type = 'text/javascript';
18
+ el.async = async;
19
+ el.src = src;
20
+ document.head.appendChild(el);
21
+ }
22
+
23
+ function bootstrap() {
24
+ if (w.CommandBar !== undefined) return;
25
+ delete w.__CommandBarBootstrap__;
19
26
 
20
- function bootstrap() {
21
- if (w.CommandBar !== undefined) return;
22
- delete w.__CommandBarBootstrap__;
27
+ const _configuration = Symbol.for('CommandBar::configuration');
28
+ const _disposed = Symbol.for('CommandBar::disposed');
29
+ const _isProxy = Symbol.for('CommandBar::isProxy');
30
+ const _queue = Symbol.for('CommandBar::queue');
31
+ const _unwrap = Symbol.for('CommandBar::unwrap');
32
+ const _eventSubscriptions = Symbol.for('CommandBar::eventSubscriptions');
23
33
 
24
- const _configuration = Symbol.for('CommandBar::configuration');
25
- const _orgConfig = Symbol.for('CommandBar::orgConfig');
26
- const _disposed = Symbol.for('CommandBar::disposed');
27
- const _isProxy = Symbol.for('CommandBar::isProxy');
28
- const _queue = Symbol.for('CommandBar::queue');
29
- const _unwrap = Symbol.for('CommandBar::unwrap');
30
- const _eventSubscriptions = Symbol.for('CommandBar::eventSubscriptions');
34
+ const params = [];
35
+ const lc = localStorage.getItem('commandbar.lc');
31
36
 
32
- const params = [];
33
- const lc = localStorage.getItem('commandbar.lc');
34
- const origin = lc && lc.includes('local') ? 'http://localhost:8000' : 'https://api.commandbar.com';
37
+ if (lc && lc.includes('local')) {
38
+ api = 'http://localhost:8000';
39
+ cdn = undefined;
40
+ }
41
+ if (lc && lc.includes('api=preview_')) {
42
+ const branchIdentifier = /api=preview_([^;$]+)/.exec(lc)?.[1];
43
+ api = `https://${branchIdentifier}.commandbar.xyz:8000`;
44
+ cdn = undefined;
45
+ }
35
46
 
36
- const proxy = Object.assign(
37
- {
38
- [_configuration]: { uuid: org },
39
- [_orgConfig]: {},
40
- [_disposed]: false,
41
- [_isProxy]: true,
42
- [_queue]: new Array<unknown>(),
43
- [_unwrap]: () => proxy,
44
- [_eventSubscriptions]: undefined,
45
- },
46
- w.CommandBar,
47
- );
47
+ const proxy = Object.assign(
48
+ {
49
+ [_configuration]: { uuid: org, api, cdn },
50
+ [_disposed]: false,
51
+ [_isProxy]: true,
52
+ [_queue]: new Array<unknown>(),
53
+ [_unwrap]: () => proxy,
54
+ [_eventSubscriptions]: undefined,
55
+ },
56
+ w.CommandBar,
57
+ );
48
58
 
49
- const ASYNC_METHODS_SNIPPET = ['addCommand', 'boot', 'addEventSubscriber', 'addRecordAction', 'setFormFactor'];
59
+ const ASYNC_METHODS_SNIPPET = ['addCommand', 'boot', 'addEventSubscriber', 'addRecordAction', 'setFormFactor'];
50
60
 
51
- const sdk = proxy;
61
+ const sdk = proxy;
52
62
 
53
- Object.assign(proxy, {
54
- shareCallbacks: () => ({}),
55
- shareContext: () => ({}),
56
- });
63
+ Object.assign(proxy, {
64
+ shareCallbacks: () => ({}),
65
+ shareContext: () => ({}),
66
+ });
57
67
 
58
- w.CommandBar = new Proxy(proxy, {
59
- get: function (_, prop) {
60
- if (prop in sdk) return proxy[prop];
61
- if ((prop as any) === 'then') return undefined;
62
- if (ASYNC_METHODS_SNIPPET.includes(prop as string)) {
63
- return function () {
64
- // eslint-disable-next-line prefer-rest-params
65
- const a = Array.prototype.slice.call(arguments);
66
- return new Promise((resolve, reject) => {
67
- a.unshift(prop, resolve, reject);
68
- (proxy[_queue] as Array<unknown>).push(a);
69
- });
70
- };
71
- }
68
+ w.CommandBar = new Proxy(proxy, {
69
+ get: function (_, prop) {
70
+ if (prop in sdk) return proxy[prop];
71
+ if ((prop as any) === 'then') return undefined;
72
+ if (ASYNC_METHODS_SNIPPET.includes(prop as string)) {
72
73
  return function () {
73
74
  // eslint-disable-next-line prefer-rest-params
74
75
  const a = Array.prototype.slice.call(arguments);
75
- a.unshift(prop);
76
- (proxy[_queue] as Array<unknown>).push(a);
76
+ return new Promise((resolve, reject) => {
77
+ a.unshift(prop, resolve, reject);
78
+ (proxy[_queue] as Array<unknown>).push(a);
79
+ });
77
80
  };
78
- },
79
- });
81
+ }
82
+ return function () {
83
+ // eslint-disable-next-line prefer-rest-params
84
+ const a = Array.prototype.slice.call(arguments);
85
+ a.unshift(prop);
86
+ (proxy[_queue] as Array<unknown>).push(a);
87
+ };
88
+ },
89
+ });
80
90
 
81
- if (lc !== null) params.push(`lc=${lc}`);
82
- params.push('version=2');
91
+ if (lc !== null) params.push(`lc=${lc}`);
92
+ params.push('version=2');
93
+ if (cdn) params.push(`cdn=${encodeURIComponent(cdn)}`);
83
94
 
84
- loadScript(`${origin}/latest/${org}?${params.join('&')}`, true);
85
- }
95
+ loadScript(`${api}/latest/${org}?${params.join('&')}`, true);
96
+ }
86
97
 
87
- if (typeof Object.assign === 'undefined' || typeof Symbol === 'undefined' || typeof Symbol.for === 'undefined') {
88
- w.__CommandBarBootstrap__ = bootstrap;
89
- loadScript(
90
- 'https://polyfill.io/v3/polyfill.min.js?version=3.101.0&callback=__CommandBarBootstrap__&features=' + polyfills,
91
- );
92
- } else {
93
- bootstrap();
94
- }
95
- };
98
+ if (typeof Object.assign === 'undefined' || typeof Symbol === 'undefined' || typeof Symbol.for === 'undefined') {
99
+ w.__CommandBarBootstrap__ = bootstrap;
100
+ loadScript(
101
+ 'https://polyfill.io/v3/polyfill.min.js?version=3.101.0&callback=__CommandBarBootstrap__&features=' + polyfills,
102
+ );
103
+ } else {
104
+ bootstrap();
105
+ }
@@ -1,5 +0,0 @@
1
- export interface OrgConfig {
2
- name?: string;
3
- silent?: boolean;
4
- eventAttributeBlockList?: string[];
5
- }
@@ -1,37 +0,0 @@
1
- import * as t from 'io-ts';
2
- export declare const GuideV: t.IntersectionC<[t.TypeC<{
3
- id: t.NumberC;
4
- organization: t.StringC;
5
- event: t.StringC;
6
- nudge: t.StringC;
7
- guidance: t.StringC;
8
- }>, t.PartialC<{}>]>;
9
- export declare class Guide {
10
- static create: (object: {
11
- id: number;
12
- organization: string;
13
- event: string;
14
- nudge: string;
15
- guidance: string;
16
- } & {}, onSuccess?: (() => void) | undefined, onError?: ((err: string) => void) | undefined) => Promise<{
17
- id: number;
18
- organization: string;
19
- event: string;
20
- nudge: string;
21
- guidance: string;
22
- } & {}>;
23
- static update: (object: {
24
- id: number;
25
- organization: string;
26
- event: string;
27
- nudge: string;
28
- guidance: string;
29
- } & {}, onSuccess?: (() => void) | undefined, onError?: ((err: string) => void) | undefined) => Promise<{
30
- id: number;
31
- organization: string;
32
- event: string;
33
- nudge: string;
34
- guidance: string;
35
- } & {}>;
36
- static delete: (id: string | number, params?: Record<string, string> | undefined, onSuccess?: (() => void) | undefined, onError?: ((err: string) => void) | undefined) => Promise<void>;
37
- }