@proveanything/smartlinks 1.3.12 → 1.3.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,6 +1,6 @@
1
1
  # Smartlinks API Summary
2
2
 
3
- Version: 1.3.12 | Generated: 2026-02-06T10:04:42.892Z
3
+ Version: 1.3.15 | Generated: 2026-02-06T12:03:50.981Z
4
4
 
5
5
  This is a concise summary of all available API functions and types.
6
6
 
@@ -63,15 +63,15 @@ Core HTTP functions for API configuration and communication:
63
63
  **isProxyEnabled**() → `boolean`
64
64
  Return whether proxy mode is currently enabled.
65
65
 
66
- **initializeApi**(options: {
67
- baseURL: string
68
- apiKey?: string
69
- bearerToken?: string
70
- proxyMode?: boolean
71
- ngrokSkipBrowserWarning?: boolean
72
- extraHeaders?: Record<string, string>
73
- iframeAutoResize?: boolean // default true when in iframe
74
- logger?: Logger // optional console-like or function to enable verbose logging
66
+ **initializeApi**(options: {
67
+ baseURL: string
68
+ apiKey?: string
69
+ bearerToken?: string
70
+ proxyMode?: boolean
71
+ ngrokSkipBrowserWarning?: boolean
72
+ extraHeaders?: Record<string, string>
73
+ iframeAutoResize?: boolean // default true when in iframe
74
+ logger?: Logger // optional console-like or function to enable verbose logging
75
75
  }) → `void`
76
76
  Call this once (e.g. at app startup) to configure baseURL/auth.
77
77
 
@@ -84,34 +84,37 @@ Replace or augment globally applied custom headers.
84
84
  **setBearerToken**(token: string | undefined) → `void`
85
85
  Allows setting the bearerToken at runtime (e.g. after login/logout).
86
86
 
87
- **proxyUploadFormData**(path: string,
88
- formData: FormData,
87
+ **getBaseURL**() → `string | null`
88
+ Get the currently configured API base URL. Returns null if initializeApi() has not been called yet.
89
+
90
+ **proxyUploadFormData**(path: string,
91
+ formData: FormData,
89
92
  onProgress?: (percent: number) → `void`
90
93
  Upload a FormData payload via proxy with progress events using chunked postMessage. Parent is expected to implement the counterpart protocol.
91
94
 
92
95
  **request**(path: string) → `Promise<T>`
93
96
  Internal helper that performs a GET request to \`\${baseURL}\${path}\`, injecting headers for apiKey or bearerToken if present. Returns the parsed JSON as T, or throws an Error.
94
97
 
95
- **post**(path: string,
96
- body: any,
98
+ **post**(path: string,
99
+ body: any,
97
100
  extraHeaders?: Record<string, string>) → `Promise<T>`
98
101
  Internal helper that performs a POST request to `${baseURL}${path}`, injecting headers for apiKey or bearerToken if present. If body is FormData, Content-Type is not set. Returns the parsed JSON as T, or throws an Error.
99
102
 
100
- **put**(path: string,
101
- body: any,
103
+ **put**(path: string,
104
+ body: any,
102
105
  extraHeaders?: Record<string, string>) → `Promise<T>`
103
106
  Internal helper that performs a PUT request to `${baseURL}${path}`, injecting headers for apiKey or bearerToken if present. If body is FormData, Content-Type is not set. Returns the parsed JSON as T, or throws an Error.
104
107
 
105
- **patch**(path: string,
106
- body: any,
108
+ **patch**(path: string,
109
+ body: any,
107
110
  extraHeaders?: Record<string, string>) → `Promise<T>`
108
111
  Internal helper that performs a PATCH request to `${baseURL}${path}`, injecting headers for apiKey or bearerToken if present. If body is FormData, Content-Type is not set. Returns the parsed JSON as T, or throws an Error.
109
112
 
110
- **requestWithOptions**(path: string,
113
+ **requestWithOptions**(path: string,
111
114
  options: RequestInit) → `Promise<T>`
112
115
  Internal helper that performs a request to `${baseURL}${path}` with custom options, injecting headers for apiKey or bearerToken if present. Returns the parsed JSON as T, or throws an Error.
113
116
 
114
- **del**(path: string,
117
+ **del**(path: string,
115
118
  extraHeaders?: Record<string, string>) → `Promise<T>`
116
119
  Internal helper that performs a DELETE request to `${baseURL}${path}`, injecting headers for apiKey or bearerToken if present. Returns the parsed JSON as T, or throws an Error.
117
120
 
package/dist/http.d.ts CHANGED
@@ -25,6 +25,11 @@ export declare function setExtraHeaders(headers: Record<string, string>): void;
25
25
  * Allows setting the bearerToken at runtime (e.g. after login/logout).
26
26
  */
27
27
  export declare function setBearerToken(token: string | undefined): void;
28
+ /**
29
+ * Get the currently configured API base URL.
30
+ * Returns null if initializeApi() has not been called yet.
31
+ */
32
+ export declare function getBaseURL(): string | null;
28
33
  /**
29
34
  * Upload a FormData payload via proxy with progress events using chunked postMessage.
30
35
  * Parent is expected to implement the counterpart protocol.
package/dist/http.js CHANGED
@@ -208,6 +208,13 @@ export function setExtraHeaders(headers) {
208
208
  export function setBearerToken(token) {
209
209
  bearerToken = token;
210
210
  }
211
+ /**
212
+ * Get the currently configured API base URL.
213
+ * Returns null if initializeApi() has not been called yet.
214
+ */
215
+ export function getBaseURL() {
216
+ return baseURL;
217
+ }
211
218
  // Map of pending proxy requests: id -> {resolve, reject}
212
219
  const proxyPending = {};
213
220
  function generateProxyId() {
@@ -3,6 +3,7 @@
3
3
  // =============================================================================
4
4
  import * as cache from './cache';
5
5
  import { collection } from './api/collection';
6
+ import { getBaseURL } from './http';
6
7
  /**
7
8
  * Parent-side iframe responder for SmartLinks microapp embedding.
8
9
  *
@@ -217,36 +218,38 @@ export class IframeResponder {
217
218
  }
218
219
  }
219
220
  // Build URL - respect the URL format from server (hash routing or not)
220
- const url = new URL(this.appUrl);
221
- // If there's an initialPath, append it appropriately
222
- if (this.options.initialPath) {
223
- const path = this.options.initialPath;
224
- // If URL has hash, append to hash (for hash-routed apps)
225
- if (url.hash) {
226
- // Remove trailing slash from hash, add path
227
- const cleanHash = url.hash.replace(/\/$/, '');
228
- const cleanPath = path.startsWith('/') ? path : '/' + path;
229
- url.hash = cleanHash + cleanPath;
221
+ let finalUrl = this.appUrl;
222
+ // Check if this URL uses hash routing (has a # in it)
223
+ const hasHash = finalUrl.includes('#');
224
+ console.log('[IframeResponder] URL has hash routing:', hasHash);
225
+ if (hasHash) {
226
+ // Hash-routed app - build params into the hash portion
227
+ const [baseWithHash, existingQuery = ''] = finalUrl.split('?');
228
+ const existingParams = new URLSearchParams(existingQuery);
229
+ params.forEach((value, key) => existingParams.set(key, value));
230
+ // Add initialPath if provided
231
+ if (this.options.initialPath) {
232
+ const path = this.options.initialPath.startsWith('/') ? this.options.initialPath : '/' + this.options.initialPath;
233
+ // Insert path before the ?
234
+ const [beforeHash, afterHash] = baseWithHash.split('#');
235
+ finalUrl = `${beforeHash}#${afterHash || ''}${path}?${existingParams.toString()}`;
230
236
  }
231
237
  else {
232
- // No hash, append to pathname (for path-routed apps)
233
- const cleanPath = path.startsWith('/') ? path : '/' + path;
234
- url.pathname = url.pathname.replace(/\/$/, '') + cleanPath;
238
+ finalUrl = `${baseWithHash}?${existingParams.toString()}`;
235
239
  }
236
240
  }
237
- // Add query params (to hash if present, otherwise to search)
238
- if (url.hash && url.hash.includes('#')) {
239
- // Hash routing - add params after hash
240
- const hashParts = url.hash.split('?');
241
- const existingParams = hashParts[1] ? new URLSearchParams(hashParts[1]) : new URLSearchParams();
242
- params.forEach((value, key) => existingParams.set(key, value));
243
- url.hash = hashParts[0] + '?' + existingParams.toString();
244
- }
245
241
  else {
246
- // Regular routing - add params to search
242
+ // Path-routed app - use URL API to add params normally
243
+ const url = new URL(finalUrl);
244
+ // Add initialPath if provided
245
+ if (this.options.initialPath) {
246
+ const path = this.options.initialPath.startsWith('/') ? this.options.initialPath : '/' + this.options.initialPath;
247
+ url.pathname = url.pathname.replace(/\/$/, '') + path;
248
+ }
249
+ // Add query params
247
250
  params.forEach((value, key) => url.searchParams.set(key, value));
251
+ finalUrl = url.toString();
248
252
  }
249
- const finalUrl = url.toString();
250
253
  console.log('[IframeResponder] Final iframe URL:', finalUrl);
251
254
  return finalUrl;
252
255
  }
@@ -429,9 +432,11 @@ export class IframeResponder {
429
432
  return;
430
433
  }
431
434
  }
432
- // Forward to actual API using SDK's http utilities
433
- // Build full URL and use fetch for now (can be replaced with SDK request when needed)
434
- const baseUrl = '/api/v1';
435
+ // Forward to actual API using SDK's configured baseURL
436
+ const baseUrl = getBaseURL();
437
+ if (!baseUrl) {
438
+ throw new Error('SDK not initialized - call initializeApi() first');
439
+ }
435
440
  const fetchOptions = {
436
441
  method: proxyData.method,
437
442
  headers: proxyData.headers,
@@ -522,7 +527,10 @@ export class IframeResponder {
522
527
  upload.fields.forEach(([key, value]) => formData.append(key, value));
523
528
  formData.append(upload.fileInfo.key || 'file', blob, upload.fileInfo.name || 'upload.bin');
524
529
  const path = upload.path.startsWith('/') ? upload.path.slice(1) : upload.path;
525
- const baseUrl = '/api/v1';
530
+ const baseUrl = getBaseURL();
531
+ if (!baseUrl) {
532
+ throw new Error('SDK not initialized - call initializeApi() first');
533
+ }
526
534
  const response = await fetch(`${baseUrl}/${path}`, {
527
535
  method: 'POST',
528
536
  body: formData,
@@ -1,6 +1,6 @@
1
1
  # Smartlinks API Summary
2
2
 
3
- Version: 1.3.12 | Generated: 2026-02-06T10:04:42.892Z
3
+ Version: 1.3.15 | Generated: 2026-02-06T12:03:50.981Z
4
4
 
5
5
  This is a concise summary of all available API functions and types.
6
6
 
@@ -63,15 +63,15 @@ Core HTTP functions for API configuration and communication:
63
63
  **isProxyEnabled**() → `boolean`
64
64
  Return whether proxy mode is currently enabled.
65
65
 
66
- **initializeApi**(options: {
67
- baseURL: string
68
- apiKey?: string
69
- bearerToken?: string
70
- proxyMode?: boolean
71
- ngrokSkipBrowserWarning?: boolean
72
- extraHeaders?: Record<string, string>
73
- iframeAutoResize?: boolean // default true when in iframe
74
- logger?: Logger // optional console-like or function to enable verbose logging
66
+ **initializeApi**(options: {
67
+ baseURL: string
68
+ apiKey?: string
69
+ bearerToken?: string
70
+ proxyMode?: boolean
71
+ ngrokSkipBrowserWarning?: boolean
72
+ extraHeaders?: Record<string, string>
73
+ iframeAutoResize?: boolean // default true when in iframe
74
+ logger?: Logger // optional console-like or function to enable verbose logging
75
75
  }) → `void`
76
76
  Call this once (e.g. at app startup) to configure baseURL/auth.
77
77
 
@@ -84,34 +84,37 @@ Replace or augment globally applied custom headers.
84
84
  **setBearerToken**(token: string | undefined) → `void`
85
85
  Allows setting the bearerToken at runtime (e.g. after login/logout).
86
86
 
87
- **proxyUploadFormData**(path: string,
88
- formData: FormData,
87
+ **getBaseURL**() → `string | null`
88
+ Get the currently configured API base URL. Returns null if initializeApi() has not been called yet.
89
+
90
+ **proxyUploadFormData**(path: string,
91
+ formData: FormData,
89
92
  onProgress?: (percent: number) → `void`
90
93
  Upload a FormData payload via proxy with progress events using chunked postMessage. Parent is expected to implement the counterpart protocol.
91
94
 
92
95
  **request**(path: string) → `Promise<T>`
93
96
  Internal helper that performs a GET request to \`\${baseURL}\${path}\`, injecting headers for apiKey or bearerToken if present. Returns the parsed JSON as T, or throws an Error.
94
97
 
95
- **post**(path: string,
96
- body: any,
98
+ **post**(path: string,
99
+ body: any,
97
100
  extraHeaders?: Record<string, string>) → `Promise<T>`
98
101
  Internal helper that performs a POST request to `${baseURL}${path}`, injecting headers for apiKey or bearerToken if present. If body is FormData, Content-Type is not set. Returns the parsed JSON as T, or throws an Error.
99
102
 
100
- **put**(path: string,
101
- body: any,
103
+ **put**(path: string,
104
+ body: any,
102
105
  extraHeaders?: Record<string, string>) → `Promise<T>`
103
106
  Internal helper that performs a PUT request to `${baseURL}${path}`, injecting headers for apiKey or bearerToken if present. If body is FormData, Content-Type is not set. Returns the parsed JSON as T, or throws an Error.
104
107
 
105
- **patch**(path: string,
106
- body: any,
108
+ **patch**(path: string,
109
+ body: any,
107
110
  extraHeaders?: Record<string, string>) → `Promise<T>`
108
111
  Internal helper that performs a PATCH request to `${baseURL}${path}`, injecting headers for apiKey or bearerToken if present. If body is FormData, Content-Type is not set. Returns the parsed JSON as T, or throws an Error.
109
112
 
110
- **requestWithOptions**(path: string,
113
+ **requestWithOptions**(path: string,
111
114
  options: RequestInit) → `Promise<T>`
112
115
  Internal helper that performs a request to `${baseURL}${path}` with custom options, injecting headers for apiKey or bearerToken if present. Returns the parsed JSON as T, or throws an Error.
113
116
 
114
- **del**(path: string,
117
+ **del**(path: string,
115
118
  extraHeaders?: Record<string, string>) → `Promise<T>`
116
119
  Internal helper that performs a DELETE request to `${baseURL}${path}`, injecting headers for apiKey or bearerToken if present. Returns the parsed JSON as T, or throws an Error.
117
120
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proveanything/smartlinks",
3
- "version": "1.3.12",
3
+ "version": "1.3.15",
4
4
  "description": "Official JavaScript/TypeScript SDK for the Smartlinks API",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",