@managespace/sdk 0.1.183 → 0.1.184-mpj.dev

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 (68) hide show
  1. package/dist/generated/apis/default-api.d.ts +11 -1
  2. package/dist/generated/apis/default-api.d.ts.map +1 -1
  3. package/dist/generated/apis/default-api.js +32 -0
  4. package/dist/generated/models/contact.d.ts +18 -0
  5. package/dist/generated/models/contact.d.ts.map +1 -1
  6. package/dist/generated/models/contact.js +12 -0
  7. package/dist/generated/models/create-payment-method.d.ts +50 -8
  8. package/dist/generated/models/create-payment-method.d.ts.map +1 -1
  9. package/dist/generated/models/create-payment-method.js +20 -12
  10. package/dist/generated/models/custom-create-contact.d.ts +18 -0
  11. package/dist/generated/models/custom-create-contact.d.ts.map +1 -1
  12. package/dist/generated/models/custom-create-contact.js +6 -0
  13. package/dist/generated/models/custom-create-customer.d.ts +0 -6
  14. package/dist/generated/models/custom-create-customer.d.ts.map +1 -1
  15. package/dist/generated/models/custom-create-customer.js +0 -2
  16. package/dist/generated/models/custom-update-contact.d.ts +18 -0
  17. package/dist/generated/models/custom-update-contact.d.ts.map +1 -1
  18. package/dist/generated/models/custom-update-contact.js +6 -0
  19. package/dist/generated/models/customer-payment-method.d.ts +1 -1
  20. package/dist/generated/models/customer-payment-method.d.ts.map +1 -1
  21. package/dist/generated/models/customer-payment-method.js +3 -3
  22. package/dist/generated/models/index.d.ts +1 -0
  23. package/dist/generated/models/index.d.ts.map +1 -1
  24. package/dist/generated/models/index.js +1 -0
  25. package/dist/generated/models/payment-method.d.ts +37 -13
  26. package/dist/generated/models/payment-method.d.ts.map +1 -1
  27. package/dist/generated/models/payment-method.js +18 -16
  28. package/dist/generated/models/reveal-ssn-response.d.ts +33 -0
  29. package/dist/generated/models/reveal-ssn-response.d.ts.map +1 -0
  30. package/dist/generated/models/reveal-ssn-response.js +51 -0
  31. package/dist/generated/models/template-field.d.ts +12 -0
  32. package/dist/generated/models/template-field.d.ts.map +1 -1
  33. package/package.deploy.json +4 -8
  34. package/package.json +2 -3
  35. package/package.original.json +23 -0
  36. package/src/generated/.openapi-generator/FILES +1 -0
  37. package/src/generated/apis/default-api.ts +54 -0
  38. package/src/generated/models/contact.ts +27 -0
  39. package/src/generated/models/create-payment-method.ts +70 -17
  40. package/src/generated/models/custom-create-contact.ts +24 -0
  41. package/src/generated/models/custom-create-customer.ts +0 -8
  42. package/src/generated/models/custom-update-contact.ts +24 -0
  43. package/src/generated/models/customer-payment-method.ts +4 -4
  44. package/src/generated/models/index.ts +1 -0
  45. package/src/generated/models/payment-method.ts +55 -26
  46. package/src/generated/models/reveal-ssn-response.ts +67 -0
  47. package/src/generated/models/template-field.ts +12 -0
  48. package/dist/extensions/host-bridge.d.ts +0 -166
  49. package/dist/extensions/host-bridge.d.ts.map +0 -1
  50. package/dist/extensions/host-bridge.js +0 -259
  51. package/dist/extensions/index.d.ts +0 -40
  52. package/dist/extensions/index.d.ts.map +0 -1
  53. package/dist/extensions/index.js +0 -55
  54. package/dist/extensions/types.d.ts +0 -111
  55. package/dist/extensions/types.d.ts.map +0 -1
  56. package/dist/extensions/types.js +0 -2
  57. package/dist/generated/apis/extensions-api.d.ts +0 -98
  58. package/dist/generated/apis/extensions-api.d.ts.map +0 -1
  59. package/dist/generated/apis/extensions-api.js +0 -295
  60. package/dist/generated/models/extension-org.d.ts +0 -64
  61. package/dist/generated/models/extension-org.d.ts.map +0 -1
  62. package/dist/generated/models/extension-org.js +0 -70
  63. package/dist/generated/models/extension.d.ts +0 -106
  64. package/dist/generated/models/extension.d.ts.map +0 -1
  65. package/dist/generated/models/extension.js +0 -98
  66. package/dist/generated/models/update-document-type.d.ts +0 -43
  67. package/dist/generated/models/update-document-type.d.ts.map +0 -1
  68. package/dist/generated/models/update-document-type.js +0 -61
@@ -20,6 +20,12 @@ import { mapValues } from '../runtime';
20
20
  * @interface PaymentMethod
21
21
  */
22
22
  export interface PaymentMethod {
23
+ /**
24
+ * Customers payment gateway id
25
+ * @type {string}
26
+ * @memberof PaymentMethod
27
+ */
28
+ customerPaymentGatewayId?: string;
23
29
  /**
24
30
  * Payment type
25
31
  * @type {string}
@@ -27,41 +33,41 @@ export interface PaymentMethod {
27
33
  */
28
34
  paymentType: string;
29
35
  /**
30
- * Country of the account holder
36
+ * Type of card
31
37
  * @type {string}
32
38
  * @memberof PaymentMethod
33
39
  */
34
- country: string;
40
+ type?: string;
35
41
  /**
36
- * Enable default payment method
37
- * @type {boolean}
42
+ * Credit card or bank account number
43
+ * @type {string}
38
44
  * @memberof PaymentMethod
39
45
  */
40
- isDefault: boolean;
46
+ accountNumber: string;
41
47
  /**
42
- * Masked account number (last 4 digits)
48
+ * Routing number for bank accounts
43
49
  * @type {string}
44
50
  * @memberof PaymentMethod
45
51
  */
46
- accountNumber: string;
52
+ routingNumber?: string;
47
53
  /**
48
- * Payment gateway token (e.g. Braintree nonce)
54
+ * Name on card or account
49
55
  * @type {string}
50
56
  * @memberof PaymentMethod
51
57
  */
52
- token: string;
58
+ accountHolderName?: string;
53
59
  /**
54
- * Payment method ID
60
+ * Type of acccount owner
55
61
  * @type {string}
56
62
  * @memberof PaymentMethod
57
63
  */
58
- paymentMethodId: string;
64
+ accountHolderType?: string;
59
65
  /**
60
- * Type of card
66
+ * Country of the account holder
61
67
  * @type {string}
62
68
  * @memberof PaymentMethod
63
69
  */
64
- type?: string;
70
+ country?: string;
65
71
  /**
66
72
  * Credit card expiration date
67
73
  * @type {string}
@@ -74,6 +80,24 @@ export interface PaymentMethod {
74
80
  * @memberof PaymentMethod
75
81
  */
76
82
  status?: string;
83
+ /**
84
+ * Enable defaule payment method
85
+ * @type {boolean}
86
+ * @memberof PaymentMethod
87
+ */
88
+ _default?: boolean;
89
+ /**
90
+ * CVC, security code for payment method
91
+ * @type {string}
92
+ * @memberof PaymentMethod
93
+ */
94
+ cvc?: string;
95
+ /**
96
+ * Payment method ID
97
+ * @type {string}
98
+ * @memberof PaymentMethod
99
+ */
100
+ paymentMethodId: string;
77
101
  }
78
102
 
79
103
  /**
@@ -81,10 +105,7 @@ export interface PaymentMethod {
81
105
  */
82
106
  export function instanceOfPaymentMethod(value: object): value is PaymentMethod {
83
107
  if (!('paymentType' in value) || value['paymentType'] === undefined) return false;
84
- if (!('country' in value) || value['country'] === undefined) return false;
85
- if (!('isDefault' in value) || value['isDefault'] === undefined) return false;
86
108
  if (!('accountNumber' in value) || value['accountNumber'] === undefined) return false;
87
- if (!('token' in value) || value['token'] === undefined) return false;
88
109
  if (!('paymentMethodId' in value) || value['paymentMethodId'] === undefined) return false;
89
110
  return true;
90
111
  }
@@ -99,15 +120,19 @@ export function PaymentMethodFromJSONTyped(json: any, ignoreDiscriminator: boole
99
120
  }
100
121
  return {
101
122
 
123
+ 'customerPaymentGatewayId': json['customerPaymentGatewayId'] == null ? undefined : json['customerPaymentGatewayId'],
102
124
  'paymentType': json['paymentType'],
103
- 'country': json['country'],
104
- 'isDefault': json['isDefault'],
105
- 'accountNumber': json['accountNumber'],
106
- 'token': json['token'],
107
- 'paymentMethodId': json['paymentMethodId'],
108
125
  'type': json['type'] == null ? undefined : json['type'],
126
+ 'accountNumber': json['accountNumber'],
127
+ 'routingNumber': json['routingNumber'] == null ? undefined : json['routingNumber'],
128
+ 'accountHolderName': json['accountHolderName'] == null ? undefined : json['accountHolderName'],
129
+ 'accountHolderType': json['accountHolderType'] == null ? undefined : json['accountHolderType'],
130
+ 'country': json['country'] == null ? undefined : json['country'],
109
131
  'expiry': json['expiry'] == null ? undefined : json['expiry'],
110
132
  'status': json['status'] == null ? undefined : json['status'],
133
+ '_default': json['default'] == null ? undefined : json['default'],
134
+ 'cvc': json['cvc'] == null ? undefined : json['cvc'],
135
+ 'paymentMethodId': json['paymentMethodId'],
111
136
  };
112
137
  }
113
138
 
@@ -122,15 +147,19 @@ export function PaymentMethodToJSONTyped(value?: PaymentMethod | null, ignoreDis
122
147
 
123
148
  return {
124
149
 
150
+ 'customerPaymentGatewayId': value['customerPaymentGatewayId'],
125
151
  'paymentType': value['paymentType'],
126
- 'country': value['country'],
127
- 'isDefault': value['isDefault'],
128
- 'accountNumber': value['accountNumber'],
129
- 'token': value['token'],
130
- 'paymentMethodId': value['paymentMethodId'],
131
152
  'type': value['type'],
153
+ 'accountNumber': value['accountNumber'],
154
+ 'routingNumber': value['routingNumber'],
155
+ 'accountHolderName': value['accountHolderName'],
156
+ 'accountHolderType': value['accountHolderType'],
157
+ 'country': value['country'],
132
158
  'expiry': value['expiry'],
133
159
  'status': value['status'],
160
+ 'default': value['_default'],
161
+ 'cvc': value['cvc'],
162
+ 'paymentMethodId': value['paymentMethodId'],
134
163
  };
135
164
  }
136
165
 
@@ -0,0 +1,67 @@
1
+ // @ts-nocheck
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ /**
5
+ * ManageSpace API
6
+ * ManageSpace API Documentation
7
+ *
8
+ * The version of the OpenAPI document: 1.0.0
9
+ *
10
+ *
11
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
12
+ * https://openapi-generator.tech
13
+ * Do not edit the class manually.
14
+ */
15
+
16
+ import { mapValues } from '../runtime';
17
+ /**
18
+ *
19
+ * @export
20
+ * @interface RevealSsnResponse
21
+ */
22
+ export interface RevealSsnResponse {
23
+ /**
24
+ * Full SSN (9 digits)
25
+ * @type {string}
26
+ * @memberof RevealSsnResponse
27
+ */
28
+ ssn: string;
29
+ }
30
+
31
+ /**
32
+ * Check if a given object implements the RevealSsnResponse interface.
33
+ */
34
+ export function instanceOfRevealSsnResponse(value: object): value is RevealSsnResponse {
35
+ if (!('ssn' in value) || value['ssn'] === undefined) return false;
36
+ return true;
37
+ }
38
+
39
+ export function RevealSsnResponseFromJSON(json: any): RevealSsnResponse {
40
+ return RevealSsnResponseFromJSONTyped(json, false);
41
+ }
42
+
43
+ export function RevealSsnResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): RevealSsnResponse {
44
+ if (json == null) {
45
+ return json;
46
+ }
47
+ return {
48
+
49
+ 'ssn': json['ssn'],
50
+ };
51
+ }
52
+
53
+ export function RevealSsnResponseToJSON(json: any): RevealSsnResponse {
54
+ return RevealSsnResponseToJSONTyped(json, false);
55
+ }
56
+
57
+ export function RevealSsnResponseToJSONTyped(value?: RevealSsnResponse | null, ignoreDiscriminator: boolean = false): any {
58
+ if (value == null) {
59
+ return value;
60
+ }
61
+
62
+ return {
63
+
64
+ 'ssn': value['ssn'],
65
+ };
66
+ }
67
+
@@ -66,6 +66,18 @@ export interface TemplateField {
66
66
  * @memberof TemplateField
67
67
  */
68
68
  areas: Array<FieldArea>;
69
+ wh /**
70
+ * The option value for radio or multiple select fields
71
+ * @type {string}
72
+ * @memberof TemplateField
73
+ */
74
+ option?: string;
75
+ /**
76
+ * The options for select fields
77
+ * @type {Array<string>}
78
+ * @memberof TemplateField
79
+ */
80
+ options?: Array<string>;
69
81
  /**
70
82
  * The preferences of the field
71
83
  * @type {FieldPreferences}
@@ -1,166 +0,0 @@
1
- import type { EntityEventHandler, ExtensionContext } from './types';
2
- /**
3
- * Get the extension context from the ManageSpace host.
4
- *
5
- * This returns a promise that resolves when the context is received from the host.
6
- * Call this early in your extension's lifecycle to get authentication and org context.
7
- *
8
- * @example
9
- * ```typescript
10
- * import { getContext } from '@managespace/sdk/extensions';
11
- *
12
- * const context = await getContext();
13
- * console.log('Org ID:', context.orgId);
14
- * console.log('API URL:', context.apiBaseUrl);
15
- * ```
16
- */
17
- export declare function getContext(): Promise<ExtensionContext>;
18
- /**
19
- * Get the current context synchronously.
20
- *
21
- * Returns null if the context has not yet been received from the host.
22
- * Prefer using `getContext()` which waits for the context to be available.
23
- *
24
- * @example
25
- * ```typescript
26
- * import { getCurrentContext } from '@managespace/sdk/extensions';
27
- *
28
- * const context = getCurrentContext();
29
- * if (context) {
30
- * console.log('Already have context:', context.orgId);
31
- * }
32
- * ```
33
- */
34
- export declare function getCurrentContext(): ExtensionContext | null;
35
- /**
36
- * Navigate the ManageSpace host application to a specific path.
37
- *
38
- * Use this to navigate users to pages within ManageSpace, such as
39
- * customer profiles, asset details, or other views.
40
- *
41
- * @param path - The path to navigate to (e.g., "/customer/123")
42
- *
43
- * @example
44
- * ```typescript
45
- * import { navigate } from '@managespace/sdk/extensions';
46
- *
47
- * // Navigate to a customer profile
48
- * navigate('/customer/abc-123');
49
- *
50
- * // Navigate to the assets page
51
- * navigate('/assets');
52
- * ```
53
- */
54
- export declare function navigate(path: string): void;
55
- /**
56
- * Show a toast notification in the ManageSpace host application.
57
- *
58
- * Use this for user feedback after actions complete.
59
- *
60
- * @param message - The message to display
61
- * @param variant - The toast type: 'success' or 'error' (default: 'success')
62
- *
63
- * @example
64
- * ```typescript
65
- * import { showToast } from '@managespace/sdk/extensions';
66
- *
67
- * // Success notification
68
- * showToast('Customer updated successfully');
69
- *
70
- * // Error notification
71
- * showToast('Failed to save changes', 'error');
72
- * ```
73
- */
74
- export declare function showToast(message: string, variant?: 'success' | 'error'): void;
75
- /**
76
- * Signal to the ManageSpace host that the extension is ready to receive context.
77
- *
78
- * Call this after your extension has loaded and set up its message listeners.
79
- * The host will respond with a CONTEXT_INIT message containing the ExtensionContext.
80
- *
81
- * @example
82
- * ```typescript
83
- * import { signalReady, getContext } from '@managespace/sdk/extensions';
84
- *
85
- * // Signal ready and wait for context
86
- * signalReady();
87
- * const context = await getContext();
88
- * ```
89
- */
90
- export declare function signalReady(): void;
91
- /**
92
- * Subscribe to entity events from the ManageSpace host.
93
- *
94
- * The host sends events when entities (customers, assets, etc.) are
95
- * created, updated, or deleted. Use this to keep your extension in sync.
96
- *
97
- * @param handler - Callback function to handle entity events
98
- * @returns Unsubscribe function to remove the handler
99
- *
100
- * @example
101
- * ```typescript
102
- * import { onEntityEvent } from '@managespace/sdk/extensions';
103
- *
104
- * const unsubscribe = onEntityEvent((event) => {
105
- * if (event.entityType === 'customer' && event.action === 'updated') {
106
- * console.log('Customer updated:', event.entityId);
107
- * refreshCustomerData();
108
- * }
109
- * });
110
- *
111
- * // Later, to stop listening:
112
- * unsubscribe();
113
- * ```
114
- */
115
- export declare function onEntityEvent(handler: EntityEventHandler): () => void;
116
- /**
117
- * Create a configured fetch function for calling the ManageSpace API.
118
- *
119
- * This returns a fetch wrapper that automatically includes credentials
120
- * and sets the correct headers for API calls.
121
- *
122
- * @param context - The extension context from getContext()
123
- * @returns A fetch function configured for ManageSpace API calls
124
- *
125
- * @example
126
- * ```typescript
127
- * import { getContext, createApiFetch } from '@managespace/sdk/extensions';
128
- *
129
- * const context = await getContext();
130
- * const apiFetch = createApiFetch(context);
131
- *
132
- * // Fetch customers
133
- * const response = await apiFetch('/api/crm/customers/queries', {
134
- * method: 'POST',
135
- * body: JSON.stringify({
136
- * pageOptions: { offset: 0, limit: 20 }
137
- * })
138
- * });
139
- * const data = await response.json();
140
- * ```
141
- */
142
- export declare function createApiFetch(context: ExtensionContext): (path: string, options?: RequestInit) => Promise<Response>;
143
- /**
144
- * Create a configured fetch function for calling your extension's BFF.
145
- *
146
- * This returns a fetch wrapper that forwards credentials to your BFF,
147
- * allowing it to make authenticated calls to the ManageSpace API.
148
- *
149
- * @param context - The extension context from getContext()
150
- * @returns A fetch function configured for BFF calls, or null if no BFF is configured
151
- *
152
- * @example
153
- * ```typescript
154
- * import { getContext, createBffFetch } from '@managespace/sdk/extensions';
155
- *
156
- * const context = await getContext();
157
- * const bffFetch = createBffFetch(context);
158
- *
159
- * if (bffFetch) {
160
- * const response = await bffFetch('/api/enriched-customers');
161
- * const data = await response.json();
162
- * }
163
- * ```
164
- */
165
- export declare function createBffFetch(context: ExtensionContext): ((path: string, options?: RequestInit) => Promise<Response>) | null;
166
- //# sourceMappingURL=host-bridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"host-bridge.d.ts","sourceRoot":"","sources":["../../src/extensions/host-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,kBAAkB,EAClB,gBAAgB,EAGnB,MAAM,SAAS,CAAC;AAiCjB;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAQtD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,IAAI,gBAAgB,GAAG,IAAI,CAE3D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAM3C;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS,CACrB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,SAAS,GAAG,OAAmB,GACzC,IAAI,CAMN;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAKrE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,cAAc,CAC1B,OAAO,EAAE,gBAAgB,GAC1B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAY5D;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,cAAc,CAC1B,OAAO,EAAE,gBAAgB,GAC1B,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAgBrE"}
@@ -1,259 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getContext = getContext;
4
- exports.getCurrentContext = getCurrentContext;
5
- exports.navigate = navigate;
6
- exports.showToast = showToast;
7
- exports.signalReady = signalReady;
8
- exports.onEntityEvent = onEntityEvent;
9
- exports.createApiFetch = createApiFetch;
10
- exports.createBffFetch = createBffFetch;
11
- let contextResolve = null;
12
- let currentContext = null;
13
- const entityEventHandlers = new Set();
14
- // Set up message listener when this module loads
15
- if (typeof window !== 'undefined') {
16
- window.addEventListener('message', (event) => {
17
- if (!event.data?.type)
18
- return;
19
- switch (event.data.type) {
20
- case 'CONTEXT_INIT':
21
- currentContext = event.data.payload;
22
- if (contextResolve) {
23
- contextResolve(event.data.payload);
24
- contextResolve = null;
25
- }
26
- break;
27
- case 'ENTITY_EVENT':
28
- for (const handler of entityEventHandlers) {
29
- try {
30
- handler(event.data.payload);
31
- }
32
- catch (error) {
33
- console.error('Entity event handler error:', error);
34
- }
35
- }
36
- break;
37
- }
38
- });
39
- }
40
- /**
41
- * Get the extension context from the ManageSpace host.
42
- *
43
- * This returns a promise that resolves when the context is received from the host.
44
- * Call this early in your extension's lifecycle to get authentication and org context.
45
- *
46
- * @example
47
- * ```typescript
48
- * import { getContext } from '@managespace/sdk/extensions';
49
- *
50
- * const context = await getContext();
51
- * console.log('Org ID:', context.orgId);
52
- * console.log('API URL:', context.apiBaseUrl);
53
- * ```
54
- */
55
- function getContext() {
56
- if (currentContext) {
57
- return Promise.resolve(currentContext);
58
- }
59
- return new Promise((resolve) => {
60
- contextResolve = resolve;
61
- });
62
- }
63
- /**
64
- * Get the current context synchronously.
65
- *
66
- * Returns null if the context has not yet been received from the host.
67
- * Prefer using `getContext()` which waits for the context to be available.
68
- *
69
- * @example
70
- * ```typescript
71
- * import { getCurrentContext } from '@managespace/sdk/extensions';
72
- *
73
- * const context = getCurrentContext();
74
- * if (context) {
75
- * console.log('Already have context:', context.orgId);
76
- * }
77
- * ```
78
- */
79
- function getCurrentContext() {
80
- return currentContext;
81
- }
82
- /**
83
- * Navigate the ManageSpace host application to a specific path.
84
- *
85
- * Use this to navigate users to pages within ManageSpace, such as
86
- * customer profiles, asset details, or other views.
87
- *
88
- * @param path - The path to navigate to (e.g., "/customer/123")
89
- *
90
- * @example
91
- * ```typescript
92
- * import { navigate } from '@managespace/sdk/extensions';
93
- *
94
- * // Navigate to a customer profile
95
- * navigate('/customer/abc-123');
96
- *
97
- * // Navigate to the assets page
98
- * navigate('/assets');
99
- * ```
100
- */
101
- function navigate(path) {
102
- const message = {
103
- type: 'NAVIGATE',
104
- payload: { path },
105
- };
106
- window.parent.postMessage(message, '*');
107
- }
108
- /**
109
- * Show a toast notification in the ManageSpace host application.
110
- *
111
- * Use this for user feedback after actions complete.
112
- *
113
- * @param message - The message to display
114
- * @param variant - The toast type: 'success' or 'error' (default: 'success')
115
- *
116
- * @example
117
- * ```typescript
118
- * import { showToast } from '@managespace/sdk/extensions';
119
- *
120
- * // Success notification
121
- * showToast('Customer updated successfully');
122
- *
123
- * // Error notification
124
- * showToast('Failed to save changes', 'error');
125
- * ```
126
- */
127
- function showToast(message, variant = 'success') {
128
- const msg = {
129
- type: 'SHOW_TOAST',
130
- payload: { message, variant },
131
- };
132
- window.parent.postMessage(msg, '*');
133
- }
134
- /**
135
- * Signal to the ManageSpace host that the extension is ready to receive context.
136
- *
137
- * Call this after your extension has loaded and set up its message listeners.
138
- * The host will respond with a CONTEXT_INIT message containing the ExtensionContext.
139
- *
140
- * @example
141
- * ```typescript
142
- * import { signalReady, getContext } from '@managespace/sdk/extensions';
143
- *
144
- * // Signal ready and wait for context
145
- * signalReady();
146
- * const context = await getContext();
147
- * ```
148
- */
149
- function signalReady() {
150
- const message = { type: 'READY' };
151
- window.parent.postMessage(message, '*');
152
- }
153
- /**
154
- * Subscribe to entity events from the ManageSpace host.
155
- *
156
- * The host sends events when entities (customers, assets, etc.) are
157
- * created, updated, or deleted. Use this to keep your extension in sync.
158
- *
159
- * @param handler - Callback function to handle entity events
160
- * @returns Unsubscribe function to remove the handler
161
- *
162
- * @example
163
- * ```typescript
164
- * import { onEntityEvent } from '@managespace/sdk/extensions';
165
- *
166
- * const unsubscribe = onEntityEvent((event) => {
167
- * if (event.entityType === 'customer' && event.action === 'updated') {
168
- * console.log('Customer updated:', event.entityId);
169
- * refreshCustomerData();
170
- * }
171
- * });
172
- *
173
- * // Later, to stop listening:
174
- * unsubscribe();
175
- * ```
176
- */
177
- function onEntityEvent(handler) {
178
- entityEventHandlers.add(handler);
179
- return () => {
180
- entityEventHandlers.delete(handler);
181
- };
182
- }
183
- /**
184
- * Create a configured fetch function for calling the ManageSpace API.
185
- *
186
- * This returns a fetch wrapper that automatically includes credentials
187
- * and sets the correct headers for API calls.
188
- *
189
- * @param context - The extension context from getContext()
190
- * @returns A fetch function configured for ManageSpace API calls
191
- *
192
- * @example
193
- * ```typescript
194
- * import { getContext, createApiFetch } from '@managespace/sdk/extensions';
195
- *
196
- * const context = await getContext();
197
- * const apiFetch = createApiFetch(context);
198
- *
199
- * // Fetch customers
200
- * const response = await apiFetch('/api/crm/customers/queries', {
201
- * method: 'POST',
202
- * body: JSON.stringify({
203
- * pageOptions: { offset: 0, limit: 20 }
204
- * })
205
- * });
206
- * const data = await response.json();
207
- * ```
208
- */
209
- function createApiFetch(context) {
210
- return (path, options = {}) => {
211
- const url = `${context.apiBaseUrl}${path}`;
212
- return fetch(url, {
213
- ...options,
214
- credentials: 'include',
215
- headers: {
216
- 'Content-Type': 'application/json',
217
- ...options.headers,
218
- },
219
- });
220
- };
221
- }
222
- /**
223
- * Create a configured fetch function for calling your extension's BFF.
224
- *
225
- * This returns a fetch wrapper that forwards credentials to your BFF,
226
- * allowing it to make authenticated calls to the ManageSpace API.
227
- *
228
- * @param context - The extension context from getContext()
229
- * @returns A fetch function configured for BFF calls, or null if no BFF is configured
230
- *
231
- * @example
232
- * ```typescript
233
- * import { getContext, createBffFetch } from '@managespace/sdk/extensions';
234
- *
235
- * const context = await getContext();
236
- * const bffFetch = createBffFetch(context);
237
- *
238
- * if (bffFetch) {
239
- * const response = await bffFetch('/api/enriched-customers');
240
- * const data = await response.json();
241
- * }
242
- * ```
243
- */
244
- function createBffFetch(context) {
245
- if (!context.bffUrl) {
246
- return null;
247
- }
248
- return (path, options = {}) => {
249
- const url = `${context.bffUrl}${path}`;
250
- return fetch(url, {
251
- ...options,
252
- credentials: 'include',
253
- headers: {
254
- 'Content-Type': 'application/json',
255
- ...options.headers,
256
- },
257
- });
258
- };
259
- }