@proveanything/smartlinks 1.14.17 → 1.15.1

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.
package/README.md CHANGED
@@ -123,7 +123,8 @@ import { products } from '@proveanything/smartlinks'
123
123
 
124
124
  await products.get(collectionId, productId, false)
125
125
  await products.list(collectionId, false)
126
- await products.query(collectionId, { query: { search: 'cabernet' } })
126
+ await products.query(collectionId, { query: { search: 'cabernet' } }) // public
127
+ await products.query(collectionId, { query: { search: 'cabernet' } }, true) // admin
127
128
  ```
128
129
 
129
130
  Quick mapping:
@@ -1,4 +1,4 @@
1
- import { CollectionResponse, CollectionCreateRequest, CollectionUpdateRequest, AppsConfigResponse } from "../types/collection";
1
+ import { CollectionResponse, CollectionCreateRequest, CollectionUpdateRequest, AppsConfigResponse, DomainTarget, HubAvailabilityResponse } from "../types/collection";
2
2
  export declare namespace collection {
3
3
  /**
4
4
  * Retrieves a single Collection by its ID.
@@ -21,6 +21,62 @@ export declare namespace collection {
21
21
  * @returns Promise resolving to a CollectionResponse object
22
22
  */
23
23
  function getShortId(shortId: string): Promise<CollectionResponse>;
24
+ /**
25
+ * Resolve the collection for the current Hub domain (public endpoint).
26
+ *
27
+ * The server derives the requesting domain from the request headers
28
+ * (`X-Source-Domain` / `X-Forwarded-Host` / `Host`), so no identifier is
29
+ * passed — this is the call a Hub frontend makes on load to find out which
30
+ * collection it is serving, whether it's reached via `{brand}.mysmartlinks.app`
31
+ * or a bring-your-own custom domain (e.g. `hub.acme.com`).
32
+ *
33
+ * @returns Promise resolving to the CollectionResponse mapped to the domain
34
+ * @throws ErrorResponse (404) if no collection is mapped to the domain
35
+ */
36
+ function getByHub(): Promise<CollectionResponse>;
37
+ /**
38
+ * Check whether a Hub subdomain name is available to claim (admin only).
39
+ * @param collectionId – Identifier of the collection making the request
40
+ * @param name – Proposed subdomain prefix (lowercase letters, numbers, hyphens; max 63 chars)
41
+ * @returns Promise resolving to { available, domain }
42
+ * @throws ErrorResponse (400) if the name fails validation or is reserved
43
+ */
44
+ function checkHubAvailability(collectionId: string, name: string): Promise<HubAvailabilityResponse>;
45
+ /**
46
+ * Claim or rename the Hub subdomain for a collection (admin only).
47
+ *
48
+ * Maps `{hubName}.mysmartlinks.app` to the collection. If the collection
49
+ * already had a different hub name, the previous subdomain is released
50
+ * automatically.
51
+ *
52
+ * @param collectionId – Identifier of the collection
53
+ * @param hubName – The subdomain prefix to claim (e.g. "acme")
54
+ * @returns Promise resolving to the updated CollectionResponse (with hubName set)
55
+ * @throws ErrorResponse (400) on invalid/reserved name, (409) if already taken by another collection
56
+ */
57
+ function claimHub(collectionId: string, hubName: string): Promise<CollectionResponse>;
58
+ /**
59
+ * Register a custom domain for a collection and provision its managed
60
+ * certificate (admin only).
61
+ *
62
+ * @param collectionId – Identifier of the collection
63
+ * @param domain – The fully-qualified domain to register (e.g. "hub.acme.com")
64
+ * @param target – Which load balancer / certificate map to use. Defaults to
65
+ * `"smartlinks"` (the id.smartlinks.app load balancer). Pass `"hub"` to
66
+ * register a bring-your-own Hub domain.
67
+ * @returns Promise resolving when registration has been initiated
68
+ * @throws ErrorResponse if the request fails
69
+ */
70
+ function registerDomain(collectionId: string, domain: string, target?: DomainTarget): Promise<any>;
71
+ /**
72
+ * Get the managed-certificate status for a collection's custom domain (admin only).
73
+ * @param collectionId – Identifier of the collection
74
+ * @param target – Which domain to check: `"smartlinks"` (default, uses `redirectUrl`)
75
+ * or `"hub"` (uses `hubCustomDomain`)
76
+ * @returns Promise resolving to the certificate details
77
+ * @throws ErrorResponse (404) if the relevant domain is not set
78
+ */
79
+ function getDomainStatus(collectionId: string, target?: DomainTarget): Promise<any>;
24
80
  /**
25
81
  * Retrieve a specific settings group for a collection.
26
82
  * Public reads return the public view of the settings group. If the stored payload contains
@@ -37,6 +37,84 @@ export var collection;
37
37
  return request(path);
38
38
  }
39
39
  collection.getShortId = getShortId;
40
+ /**
41
+ * Resolve the collection for the current Hub domain (public endpoint).
42
+ *
43
+ * The server derives the requesting domain from the request headers
44
+ * (`X-Source-Domain` / `X-Forwarded-Host` / `Host`), so no identifier is
45
+ * passed — this is the call a Hub frontend makes on load to find out which
46
+ * collection it is serving, whether it's reached via `{brand}.mysmartlinks.app`
47
+ * or a bring-your-own custom domain (e.g. `hub.acme.com`).
48
+ *
49
+ * @returns Promise resolving to the CollectionResponse mapped to the domain
50
+ * @throws ErrorResponse (404) if no collection is mapped to the domain
51
+ */
52
+ async function getByHub() {
53
+ const path = `/public/collection/getByHub`;
54
+ return request(path);
55
+ }
56
+ collection.getByHub = getByHub;
57
+ /**
58
+ * Check whether a Hub subdomain name is available to claim (admin only).
59
+ * @param collectionId – Identifier of the collection making the request
60
+ * @param name – Proposed subdomain prefix (lowercase letters, numbers, hyphens; max 63 chars)
61
+ * @returns Promise resolving to { available, domain }
62
+ * @throws ErrorResponse (400) if the name fails validation or is reserved
63
+ */
64
+ async function checkHubAvailability(collectionId, name) {
65
+ const queryParams = new URLSearchParams({ name });
66
+ const path = `/admin/collection/${encodeURIComponent(collectionId)}/hub/available?${queryParams}`;
67
+ return request(path);
68
+ }
69
+ collection.checkHubAvailability = checkHubAvailability;
70
+ /**
71
+ * Claim or rename the Hub subdomain for a collection (admin only).
72
+ *
73
+ * Maps `{hubName}.mysmartlinks.app` to the collection. If the collection
74
+ * already had a different hub name, the previous subdomain is released
75
+ * automatically.
76
+ *
77
+ * @param collectionId – Identifier of the collection
78
+ * @param hubName – The subdomain prefix to claim (e.g. "acme")
79
+ * @returns Promise resolving to the updated CollectionResponse (with hubName set)
80
+ * @throws ErrorResponse (400) on invalid/reserved name, (409) if already taken by another collection
81
+ */
82
+ async function claimHub(collectionId, hubName) {
83
+ const path = `/admin/collection/${encodeURIComponent(collectionId)}/hub`;
84
+ return post(path, { hubName });
85
+ }
86
+ collection.claimHub = claimHub;
87
+ /**
88
+ * Register a custom domain for a collection and provision its managed
89
+ * certificate (admin only).
90
+ *
91
+ * @param collectionId – Identifier of the collection
92
+ * @param domain – The fully-qualified domain to register (e.g. "hub.acme.com")
93
+ * @param target – Which load balancer / certificate map to use. Defaults to
94
+ * `"smartlinks"` (the id.smartlinks.app load balancer). Pass `"hub"` to
95
+ * register a bring-your-own Hub domain.
96
+ * @returns Promise resolving when registration has been initiated
97
+ * @throws ErrorResponse if the request fails
98
+ */
99
+ async function registerDomain(collectionId, domain, target = "smartlinks") {
100
+ const path = `/admin/collection/${encodeURIComponent(collectionId)}/domain`;
101
+ return post(path, { domain, target });
102
+ }
103
+ collection.registerDomain = registerDomain;
104
+ /**
105
+ * Get the managed-certificate status for a collection's custom domain (admin only).
106
+ * @param collectionId – Identifier of the collection
107
+ * @param target – Which domain to check: `"smartlinks"` (default, uses `redirectUrl`)
108
+ * or `"hub"` (uses `hubCustomDomain`)
109
+ * @returns Promise resolving to the certificate details
110
+ * @throws ErrorResponse (404) if the relevant domain is not set
111
+ */
112
+ async function getDomainStatus(collectionId, target = "smartlinks") {
113
+ const queryParams = new URLSearchParams({ target });
114
+ const path = `/admin/collection/${encodeURIComponent(collectionId)}/domain?${queryParams}`;
115
+ return request(path);
116
+ }
117
+ collection.getDomainStatus = getDomainStatus;
40
118
  /**
41
119
  * Retrieve a specific settings group for a collection.
42
120
  * Public reads return the public view of the settings group. If the stored payload contains
@@ -5,7 +5,26 @@ export declare namespace products {
5
5
  function create(collectionId: string, data: ProductCreateRequest): Promise<ProductResponse>;
6
6
  function update(collectionId: string, productId: string, data: ProductUpdateRequest): Promise<ProductResponse>;
7
7
  function remove(collectionId: string, productId: string): Promise<void>;
8
- function query(collectionId: string, body: ProductQueryRequest): Promise<ProductQueryResponse>;
8
+ /**
9
+ * Query products in a collection with filtering, sorting, and pagination.
10
+ *
11
+ * @param collectionId - Identifier of the parent collection
12
+ * @param body - Query parameters with filters, sorting, and pagination
13
+ * @param admin - When `true`, targets the `/admin` endpoint (requires an
14
+ * authenticated admin context). Defaults to `false`, which targets the
15
+ * `/public` endpoint — consistent with `get`, `list`, and `listAssets`.
16
+ * @returns Promise resolving to a ProductQueryResponse
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * // Public query (default)
21
+ * await products.query(collectionId, { query: { search: 'cabernet' } })
22
+ *
23
+ * // Admin query (authenticated)
24
+ * await products.query(collectionId, { query: { search: 'cabernet' } }, true)
25
+ * ```
26
+ */
27
+ function query(collectionId: string, body: ProductQueryRequest, admin?: boolean): Promise<ProductQueryResponse>;
9
28
  function clone(collectionId: string, productId: string, body?: Record<string, JsonValue>): Promise<ProductResponse>;
10
29
  function listAssets(collectionId: string, productId: string, admin?: boolean): Promise<unknown>;
11
30
  function createClaimWindow(collectionId: string, productId: string, body: Record<string, JsonValue>): Promise<unknown>;
@@ -28,8 +28,28 @@ export var products;
28
28
  return del(path);
29
29
  }
30
30
  products.remove = remove;
31
- async function query(collectionId, body) {
32
- const path = `/admin/collection/${encodeURIComponent(collectionId)}/products/query`;
31
+ /**
32
+ * Query products in a collection with filtering, sorting, and pagination.
33
+ *
34
+ * @param collectionId - Identifier of the parent collection
35
+ * @param body - Query parameters with filters, sorting, and pagination
36
+ * @param admin - When `true`, targets the `/admin` endpoint (requires an
37
+ * authenticated admin context). Defaults to `false`, which targets the
38
+ * `/public` endpoint — consistent with `get`, `list`, and `listAssets`.
39
+ * @returns Promise resolving to a ProductQueryResponse
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * // Public query (default)
44
+ * await products.query(collectionId, { query: { search: 'cabernet' } })
45
+ *
46
+ * // Admin query (authenticated)
47
+ * await products.query(collectionId, { query: { search: 'cabernet' } }, true)
48
+ * ```
49
+ */
50
+ async function query(collectionId, body, admin) {
51
+ const base = admin ? '/admin' : '/public';
52
+ const path = `${base}/collection/${encodeURIComponent(collectionId)}/products/query`;
33
53
  return post(path, body);
34
54
  }
35
55
  products.query = query;
@@ -1,6 +1,6 @@
1
1
  # Smartlinks API Summary
2
2
 
3
- Version: 1.14.17 | Generated: 2026-06-02T16:17:46.100Z
3
+ Version: 1.15.1 | Generated: 2026-06-13T08:46:42.914Z
4
4
 
5
5
  This is a concise summary of all available API functions and types.
6
6
 
@@ -3606,6 +3606,8 @@ interface Collection {
3606
3606
  } // User roles mapping with user IDs as keys and role names as values
3607
3607
  groupTags?: string[] // Array of group tag names
3608
3608
  redirectUrl?: string // Whether the collection has a custom domain
3609
+ hubName?: string
3610
+ hubCustomDomain?: string
3609
3611
  shortId: string, // The shortId of this collection
3610
3612
  dark?: boolean // if dark mode is enabled for this collection
3611
3613
  primaryColor?: string
@@ -3618,6 +3620,14 @@ interface Collection {
3618
3620
  }
3619
3621
  ```
3620
3622
 
3623
+ **HubAvailabilityResponse** (interface)
3624
+ ```typescript
3625
+ interface HubAvailabilityResponse {
3626
+ available: boolean
3627
+ domain: string
3628
+ }
3629
+ ```
3630
+
3621
3631
  **AppConfig** (interface)
3622
3632
  ```typescript
3623
3633
  interface AppConfig {
@@ -3657,6 +3667,8 @@ interface AppsConfigResponse {
3657
3667
 
3658
3668
  **CollectionUpdateRequest** = `Partial<Omit<Collection, 'id' | 'shortId'>>`
3659
3669
 
3670
+ **DomainTarget** = `"smartlinks" | "hub"`
3671
+
3660
3672
  ### common
3661
3673
 
3662
3674
  **IdField** = `'userId' | 'contactId'`
@@ -8604,6 +8616,21 @@ Retrieves all Collections.
8604
8616
  **getShortId**(shortId: string) → `Promise<CollectionResponse>`
8605
8617
  Retrieve a collection by its shortId (public endpoint).
8606
8618
 
8619
+ **getByHub**() → `Promise<CollectionResponse>`
8620
+ Resolve the collection for the current Hub domain (public endpoint). The server derives the requesting domain from the request headers (`X-Source-Domain` / `X-Forwarded-Host` / `Host`), so no identifier is passed — this is the call a Hub frontend makes on load to find out which collection it is serving, whether it's reached via `{brand}.mysmartlinks.app` or a bring-your-own custom domain (e.g. `hub.acme.com`).
8621
+
8622
+ **checkHubAvailability**(collectionId: string, name: string) → `Promise<HubAvailabilityResponse>`
8623
+ Check whether a Hub subdomain name is available to claim (admin only).
8624
+
8625
+ **claimHub**(collectionId: string, hubName: string) → `Promise<CollectionResponse>`
8626
+ Claim or rename the Hub subdomain for a collection (admin only). Maps `{hubName}.mysmartlinks.app` to the collection. If the collection already had a different hub name, the previous subdomain is released automatically.
8627
+
8628
+ **registerDomain**(collectionId: string, domain: string, target: DomainTarget = "smartlinks") → `Promise<any>`
8629
+ Register a custom domain for a collection and provision its managed certificate (admin only). `"smartlinks"` (the id.smartlinks.app load balancer). Pass `"hub"` to register a bring-your-own Hub domain.
8630
+
8631
+ **getDomainStatus**(collectionId: string, target: DomainTarget = "smartlinks") → `Promise<any>`
8632
+ Get the managed-certificate status for a collection's custom domain (admin only). or `"hub"` (uses `hubCustomDomain`)
8633
+
8607
8634
  **getSettings**(collectionId: string, settingGroup: string, admin?: boolean) → `Promise<any>`
8608
8635
  Retrieve a specific settings group for a collection. Public reads return the public view of the settings group. If the stored payload contains a top-level `admin` object, that block is omitted from public responses and included when `admin === true`.
8609
8636
 
@@ -9399,44 +9426,55 @@ Look up a serial number by code for a product (admin only).
9399
9426
  productId: string) → `Promise<void>`
9400
9427
 
9401
9428
  **query**(collectionId: string,
9402
- body: ProductQueryRequest) → `Promise<ProductQueryResponse>`
9429
+ body: ProductQueryRequest,
9430
+ admin?: boolean) → `Promise<ProductQueryResponse>`
9431
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9403
9432
 
9404
9433
  **clone**(collectionId: string,
9405
9434
  productId: string,
9406
9435
  body: Record<string, JsonValue> = {}) → `Promise<ProductResponse>`
9436
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9407
9437
 
9408
9438
  **listAssets**(collectionId: string,
9409
9439
  productId: string,
9410
9440
  admin?: boolean) → `Promise<unknown>`
9441
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9411
9442
 
9412
9443
  **createClaimWindow**(collectionId: string,
9413
9444
  productId: string,
9414
9445
  body: Record<string, JsonValue>) → `Promise<unknown>`
9446
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9415
9447
 
9416
9448
  **updateClaimWindow**(collectionId: string,
9417
9449
  productId: string,
9418
9450
  claimId: string,
9419
9451
  body: Record<string, JsonValue>) → `Promise<unknown>`
9452
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9420
9453
 
9421
9454
  **refresh**(collectionId: string,
9422
9455
  productId: string) → `Promise<ProductResponse>`
9456
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9423
9457
 
9424
9458
  **getSN**(collectionId: string,
9425
9459
  productId: string,
9426
9460
  startIndex: number = 0,
9427
9461
  count: number = 10) → `Promise<unknown>`
9462
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9428
9463
 
9429
9464
  **lookupSN**(collectionId: string,
9430
9465
  productId: string,
9431
9466
  codeId: string) → `Promise<unknown>`
9467
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9432
9468
 
9433
9469
  **publicLookupClaim**(collectionId: string,
9434
9470
  productId: string,
9435
9471
  claimId: string) → `Promise<unknown>`
9472
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9436
9473
 
9437
9474
  **publicCreateClaim**(collectionId: string,
9438
9475
  productId: string,
9439
9476
  body: ProductClaimCreateRequestBody) → `Promise<unknown>`
9477
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9440
9478
 
9441
9479
  ### proof
9442
9480
 
package/dist/http.js CHANGED
@@ -91,7 +91,9 @@ const CACHE_TTL_RULES = [
91
91
  // Sub-resources that change frequently — short TTLs, listed first
92
92
  { pattern: /\/proof\/[^/]*(\?.*)?$/i, ttlMs: 30000 },
93
93
  { pattern: /\/attestation\/[^/]*(\?.*)?$/i, ttlMs: 2 * 60000 },
94
- // Slow-changing top-level resources — long TTLs, matched only when path ends at the ID
94
+ // Slow-changing top-level resources — long TTLs, matched only when path ends at the ID.
95
+ // getByHub maps a stable Hub domain → collection and matches the /collection rule below,
96
+ // so it inherits the same 1h caching as a collection detail.
95
97
  { pattern: /\/products?\/[^/]*(\?.*)?$/i, ttlMs: 60 * 60000 },
96
98
  { pattern: /\/variant\/[^/]*(\?.*)?$/i, ttlMs: 60 * 60000 },
97
99
  { pattern: /\/collection\/[^/]*(\?.*)?$/i, ttlMs: 60 * 60000 }, // 1 hour
package/dist/index.d.ts CHANGED
@@ -16,7 +16,7 @@ export type { AppConfigOptions } from "./api/appConfiguration";
16
16
  export type { AdditionalGtin, ISODateString, JsonPrimitive, JsonValue, ProductCreateRequest, ProductClaimCreateInput, ProductClaimCreateRequestBody, ProductClaimLookupInput, ProductFacetMap, ProductFacetValue, ProductImageUrlInput, ProductKey, ProductQueryRequest, ProductQueryResponse, ProductUpdateRequest, Product, ProductWriteInput, PublicProduct, } from "./types/product";
17
17
  export type { TranslationLookupMode, TranslationContentType, TranslationQuality, TranslationItemStatus, TranslationContextValue, TranslationContext, TranslationLookupRequestBase, TranslationLookupSingleRequest, TranslationLookupBatchRequest, TranslationLookupRequest, TranslationLookupItem, TranslationLookupResponse, ResolvedTranslationItem, ResolvedTranslationResponse, TranslationHashOptions, TranslationResolveOptions, TranslationRecord, TranslationListParams, TranslationListResponse, TranslationUpdateRequest, } from "./types/translations";
18
18
  export type { FacetBucket, FacetDefinition, FacetDefinitionWriteInput, FacetGetParams, FacetListParams, FacetListResponse, FacetQueryRequest, FacetQueryResponse, FacetValue, FacetValueDefinition, FacetValueGetParams, FacetValueListParams, FacetValueListResponse, FacetValueResponse, FacetValueWriteInput, PublicFacetListParams, } from "./types/facets";
19
- export type { Collection, CollectionResponse, CollectionCreateRequest, CollectionUpdateRequest, } from "./types/collection";
19
+ export type { Collection, CollectionResponse, CollectionCreateRequest, CollectionUpdateRequest, DomainTarget, HubAvailabilityResponse, } from "./types/collection";
20
20
  export type { Proof, ProofResponse, ProofCreateRequest, ProofUpdateRequest, ProofClaimRequest, } from "./types/proof";
21
21
  export type { QrShortCodeLookupResponse, } from "./types/qr";
22
22
  export type { ReverseTagLookupParams, ReverseTagLookupResponse, } from "./types/tags";
package/dist/openapi.yaml CHANGED
@@ -3337,6 +3337,63 @@ paths:
3337
3337
  description: Unauthorized
3338
3338
  404:
3339
3339
  description: Not found
3340
+ /admin/collection/{collectionId}/domain:
3341
+ get:
3342
+ tags:
3343
+ - collection
3344
+ summary: "Get the managed-certificate status for a collection's custom domain (admin only)."
3345
+ operationId: collection_getDomainStatus
3346
+ security:
3347
+ - bearerAuth: []
3348
+ parameters:
3349
+ - name: collectionId
3350
+ in: path
3351
+ required: true
3352
+ schema:
3353
+ type: string
3354
+ responses:
3355
+ 200:
3356
+ description: Success
3357
+ content:
3358
+ application/json:
3359
+ schema: {}
3360
+ 400:
3361
+ description: Bad request
3362
+ 401:
3363
+ description: Unauthorized
3364
+ 404:
3365
+ description: Not found
3366
+ post:
3367
+ tags:
3368
+ - collection
3369
+ summary: Register a custom domain for a collection and provision its managed certificate (admin only).
3370
+ operationId: collection_registerDomain
3371
+ security:
3372
+ - bearerAuth: []
3373
+ parameters:
3374
+ - name: collectionId
3375
+ in: path
3376
+ required: true
3377
+ schema:
3378
+ type: string
3379
+ responses:
3380
+ 200:
3381
+ description: Success
3382
+ content:
3383
+ application/json:
3384
+ schema: {}
3385
+ 400:
3386
+ description: Bad request
3387
+ 401:
3388
+ description: Unauthorized
3389
+ 404:
3390
+ description: Not found
3391
+ requestBody:
3392
+ required: true
3393
+ content:
3394
+ application/json:
3395
+ schema:
3396
+ $ref: "#/components/schemas/DomainTarget"
3340
3397
  /admin/collection/{collectionId}/facets:
3341
3398
  get:
3342
3399
  tags:
@@ -3871,6 +3928,60 @@ paths:
3871
3928
  description: Unauthorized
3872
3929
  404:
3873
3930
  description: Not found
3931
+ /admin/collection/{collectionId}/hub:
3932
+ post:
3933
+ tags:
3934
+ - collection
3935
+ summary: Claim or rename the Hub subdomain for a collection (admin only).
3936
+ operationId: collection_claimHub
3937
+ security:
3938
+ - bearerAuth: []
3939
+ parameters:
3940
+ - name: collectionId
3941
+ in: path
3942
+ required: true
3943
+ schema:
3944
+ type: string
3945
+ responses:
3946
+ 200:
3947
+ description: Success
3948
+ content:
3949
+ application/json:
3950
+ schema:
3951
+ $ref: "#/components/schemas/CollectionResponse"
3952
+ 400:
3953
+ description: Bad request
3954
+ 401:
3955
+ description: Unauthorized
3956
+ 404:
3957
+ description: Not found
3958
+ /admin/collection/{collectionId}/hub/available:
3959
+ get:
3960
+ tags:
3961
+ - collection
3962
+ summary: Check whether a Hub subdomain name is available to claim (admin only).
3963
+ operationId: collection_checkHubAvailability
3964
+ security:
3965
+ - bearerAuth: []
3966
+ parameters:
3967
+ - name: collectionId
3968
+ in: path
3969
+ required: true
3970
+ schema:
3971
+ type: string
3972
+ responses:
3973
+ 200:
3974
+ description: Success
3975
+ content:
3976
+ application/json:
3977
+ schema:
3978
+ $ref: "#/components/schemas/HubAvailabilityResponse"
3979
+ 400:
3980
+ description: Bad request
3981
+ 401:
3982
+ description: Unauthorized
3983
+ 404:
3984
+ description: Not found
3874
3985
  /admin/collection/{collectionId}/interactions:
3875
3986
  get:
3876
3987
  tags:
@@ -6639,39 +6750,6 @@ paths:
6639
6750
  application/json:
6640
6751
  schema:
6641
6752
  $ref: "#/components/schemas/ProductCreateRequest"
6642
- /admin/collection/{collectionId}/products/query:
6643
- post:
6644
- tags:
6645
- - products
6646
- summary: products.query
6647
- operationId: products_query
6648
- security:
6649
- - bearerAuth: []
6650
- parameters:
6651
- - name: collectionId
6652
- in: path
6653
- required: true
6654
- schema:
6655
- type: string
6656
- responses:
6657
- 200:
6658
- description: Success
6659
- content:
6660
- application/json:
6661
- schema:
6662
- $ref: "#/components/schemas/ProductQueryResponse"
6663
- 400:
6664
- description: Bad request
6665
- 401:
6666
- description: Unauthorized
6667
- 404:
6668
- description: Not found
6669
- requestBody:
6670
- required: true
6671
- content:
6672
- application/json:
6673
- schema:
6674
- $ref: "#/components/schemas/ProductQueryRequest"
6675
6753
  /admin/collection/{collectionId}/products/{productId}:
6676
6754
  put:
6677
6755
  tags:
@@ -9238,6 +9316,26 @@ paths:
9238
9316
  application/json:
9239
9317
  schema:
9240
9318
  $ref: "#/components/schemas/RequestUploadTokenOptions"
9319
+ /public/collection/getByHub:
9320
+ get:
9321
+ tags:
9322
+ - collection
9323
+ summary: Resolve the collection for the current Hub domain (public endpoint).
9324
+ operationId: collection_getByHub
9325
+ security: []
9326
+ responses:
9327
+ 200:
9328
+ description: Success
9329
+ content:
9330
+ application/json:
9331
+ schema:
9332
+ $ref: "#/components/schemas/CollectionResponse"
9333
+ 400:
9334
+ description: Bad request
9335
+ 401:
9336
+ description: Unauthorized
9337
+ 404:
9338
+ description: Not found
9241
9339
  /public/collection/getShortId/{shortId}:
9242
9340
  get:
9243
9341
  tags:
@@ -18941,6 +19039,10 @@ components:
18941
19039
  type: string
18942
19040
  redirectUrl:
18943
19041
  type: string
19042
+ hubName:
19043
+ type: string
19044
+ hubCustomDomain:
19045
+ type: string
18944
19046
  shortId:
18945
19047
  type: string
18946
19048
  dark:
@@ -18975,6 +19077,16 @@ components:
18975
19077
  - variants
18976
19078
  - batches
18977
19079
  - defaultAuthKitId
19080
+ HubAvailabilityResponse:
19081
+ type: object
19082
+ properties:
19083
+ available:
19084
+ type: boolean
19085
+ domain:
19086
+ type: string
19087
+ required:
19088
+ - available
19089
+ - domain
18978
19090
  AppConfig:
18979
19091
  type: object
18980
19092
  properties:
@@ -41,6 +41,10 @@ export interface Collection {
41
41
  groupTags?: string[];
42
42
  /** Whether the collection has a custom domain */
43
43
  redirectUrl?: string;
44
+ /** The claimed Hub subdomain prefix (e.g. "acme" → acme.mysmartlinks.app) */
45
+ hubName?: string;
46
+ /** The collection's bring-your-own custom Hub domain (e.g. "hub.acme.com") */
47
+ hubCustomDomain?: string;
44
48
  /** The shortId of this collection */
45
49
  shortId: string;
46
50
  /** if dark mode is enabled for this collection */
@@ -59,6 +63,21 @@ export interface Collection {
59
63
  export type CollectionResponse = Collection;
60
64
  export type CollectionCreateRequest = Omit<Collection, 'id' | 'shortId'>;
61
65
  export type CollectionUpdateRequest = Partial<Omit<Collection, 'id' | 'shortId'>>;
66
+ /**
67
+ * Which load balancer / certificate map a custom domain registration targets.
68
+ * - `"smartlinks"` (default): the id.smartlinks.app load balancer (legacy behaviour)
69
+ * - `"hub"`: the SmartLinks Hub load balancer
70
+ */
71
+ export type DomainTarget = "smartlinks" | "hub";
72
+ /**
73
+ * Response from checking whether a Hub subdomain name is available.
74
+ */
75
+ export interface HubAvailabilityResponse {
76
+ /** Whether the name can be claimed by this collection */
77
+ available: boolean;
78
+ /** The full domain that was checked (e.g. "acme.mysmartlinks.app") */
79
+ domain: string;
80
+ }
62
81
  /**
63
82
  * Configuration for an app module within a collection.
64
83
  */
@@ -1,6 +1,6 @@
1
1
  # Smartlinks API Summary
2
2
 
3
- Version: 1.14.17 | Generated: 2026-06-02T16:17:46.100Z
3
+ Version: 1.15.1 | Generated: 2026-06-13T08:46:42.914Z
4
4
 
5
5
  This is a concise summary of all available API functions and types.
6
6
 
@@ -3606,6 +3606,8 @@ interface Collection {
3606
3606
  } // User roles mapping with user IDs as keys and role names as values
3607
3607
  groupTags?: string[] // Array of group tag names
3608
3608
  redirectUrl?: string // Whether the collection has a custom domain
3609
+ hubName?: string
3610
+ hubCustomDomain?: string
3609
3611
  shortId: string, // The shortId of this collection
3610
3612
  dark?: boolean // if dark mode is enabled for this collection
3611
3613
  primaryColor?: string
@@ -3618,6 +3620,14 @@ interface Collection {
3618
3620
  }
3619
3621
  ```
3620
3622
 
3623
+ **HubAvailabilityResponse** (interface)
3624
+ ```typescript
3625
+ interface HubAvailabilityResponse {
3626
+ available: boolean
3627
+ domain: string
3628
+ }
3629
+ ```
3630
+
3621
3631
  **AppConfig** (interface)
3622
3632
  ```typescript
3623
3633
  interface AppConfig {
@@ -3657,6 +3667,8 @@ interface AppsConfigResponse {
3657
3667
 
3658
3668
  **CollectionUpdateRequest** = `Partial<Omit<Collection, 'id' | 'shortId'>>`
3659
3669
 
3670
+ **DomainTarget** = `"smartlinks" | "hub"`
3671
+
3660
3672
  ### common
3661
3673
 
3662
3674
  **IdField** = `'userId' | 'contactId'`
@@ -8604,6 +8616,21 @@ Retrieves all Collections.
8604
8616
  **getShortId**(shortId: string) → `Promise<CollectionResponse>`
8605
8617
  Retrieve a collection by its shortId (public endpoint).
8606
8618
 
8619
+ **getByHub**() → `Promise<CollectionResponse>`
8620
+ Resolve the collection for the current Hub domain (public endpoint). The server derives the requesting domain from the request headers (`X-Source-Domain` / `X-Forwarded-Host` / `Host`), so no identifier is passed — this is the call a Hub frontend makes on load to find out which collection it is serving, whether it's reached via `{brand}.mysmartlinks.app` or a bring-your-own custom domain (e.g. `hub.acme.com`).
8621
+
8622
+ **checkHubAvailability**(collectionId: string, name: string) → `Promise<HubAvailabilityResponse>`
8623
+ Check whether a Hub subdomain name is available to claim (admin only).
8624
+
8625
+ **claimHub**(collectionId: string, hubName: string) → `Promise<CollectionResponse>`
8626
+ Claim or rename the Hub subdomain for a collection (admin only). Maps `{hubName}.mysmartlinks.app` to the collection. If the collection already had a different hub name, the previous subdomain is released automatically.
8627
+
8628
+ **registerDomain**(collectionId: string, domain: string, target: DomainTarget = "smartlinks") → `Promise<any>`
8629
+ Register a custom domain for a collection and provision its managed certificate (admin only). `"smartlinks"` (the id.smartlinks.app load balancer). Pass `"hub"` to register a bring-your-own Hub domain.
8630
+
8631
+ **getDomainStatus**(collectionId: string, target: DomainTarget = "smartlinks") → `Promise<any>`
8632
+ Get the managed-certificate status for a collection's custom domain (admin only). or `"hub"` (uses `hubCustomDomain`)
8633
+
8607
8634
  **getSettings**(collectionId: string, settingGroup: string, admin?: boolean) → `Promise<any>`
8608
8635
  Retrieve a specific settings group for a collection. Public reads return the public view of the settings group. If the stored payload contains a top-level `admin` object, that block is omitted from public responses and included when `admin === true`.
8609
8636
 
@@ -9399,44 +9426,55 @@ Look up a serial number by code for a product (admin only).
9399
9426
  productId: string) → `Promise<void>`
9400
9427
 
9401
9428
  **query**(collectionId: string,
9402
- body: ProductQueryRequest) → `Promise<ProductQueryResponse>`
9429
+ body: ProductQueryRequest,
9430
+ admin?: boolean) → `Promise<ProductQueryResponse>`
9431
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9403
9432
 
9404
9433
  **clone**(collectionId: string,
9405
9434
  productId: string,
9406
9435
  body: Record<string, JsonValue> = {}) → `Promise<ProductResponse>`
9436
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9407
9437
 
9408
9438
  **listAssets**(collectionId: string,
9409
9439
  productId: string,
9410
9440
  admin?: boolean) → `Promise<unknown>`
9441
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9411
9442
 
9412
9443
  **createClaimWindow**(collectionId: string,
9413
9444
  productId: string,
9414
9445
  body: Record<string, JsonValue>) → `Promise<unknown>`
9446
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9415
9447
 
9416
9448
  **updateClaimWindow**(collectionId: string,
9417
9449
  productId: string,
9418
9450
  claimId: string,
9419
9451
  body: Record<string, JsonValue>) → `Promise<unknown>`
9452
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9420
9453
 
9421
9454
  **refresh**(collectionId: string,
9422
9455
  productId: string) → `Promise<ProductResponse>`
9456
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9423
9457
 
9424
9458
  **getSN**(collectionId: string,
9425
9459
  productId: string,
9426
9460
  startIndex: number = 0,
9427
9461
  count: number = 10) → `Promise<unknown>`
9462
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9428
9463
 
9429
9464
  **lookupSN**(collectionId: string,
9430
9465
  productId: string,
9431
9466
  codeId: string) → `Promise<unknown>`
9467
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9432
9468
 
9433
9469
  **publicLookupClaim**(collectionId: string,
9434
9470
  productId: string,
9435
9471
  claimId: string) → `Promise<unknown>`
9472
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9436
9473
 
9437
9474
  **publicCreateClaim**(collectionId: string,
9438
9475
  productId: string,
9439
9476
  body: ProductClaimCreateRequestBody) → `Promise<unknown>`
9477
+ Query products in a collection with filtering, sorting, and pagination. authenticated admin context). Defaults to `false`, which targets the `/public` endpoint — consistent with `get`, `list`, and `listAssets`. ```typescript // Public query (default) await products.query(collectionId, { query: { search: 'cabernet' } }) // Admin query (authenticated) await products.query(collectionId, { query: { search: 'cabernet' } }, true) ```
9440
9478
 
9441
9479
  ### proof
9442
9480
 
package/openapi.yaml CHANGED
@@ -3337,6 +3337,63 @@ paths:
3337
3337
  description: Unauthorized
3338
3338
  404:
3339
3339
  description: Not found
3340
+ /admin/collection/{collectionId}/domain:
3341
+ get:
3342
+ tags:
3343
+ - collection
3344
+ summary: "Get the managed-certificate status for a collection's custom domain (admin only)."
3345
+ operationId: collection_getDomainStatus
3346
+ security:
3347
+ - bearerAuth: []
3348
+ parameters:
3349
+ - name: collectionId
3350
+ in: path
3351
+ required: true
3352
+ schema:
3353
+ type: string
3354
+ responses:
3355
+ 200:
3356
+ description: Success
3357
+ content:
3358
+ application/json:
3359
+ schema: {}
3360
+ 400:
3361
+ description: Bad request
3362
+ 401:
3363
+ description: Unauthorized
3364
+ 404:
3365
+ description: Not found
3366
+ post:
3367
+ tags:
3368
+ - collection
3369
+ summary: Register a custom domain for a collection and provision its managed certificate (admin only).
3370
+ operationId: collection_registerDomain
3371
+ security:
3372
+ - bearerAuth: []
3373
+ parameters:
3374
+ - name: collectionId
3375
+ in: path
3376
+ required: true
3377
+ schema:
3378
+ type: string
3379
+ responses:
3380
+ 200:
3381
+ description: Success
3382
+ content:
3383
+ application/json:
3384
+ schema: {}
3385
+ 400:
3386
+ description: Bad request
3387
+ 401:
3388
+ description: Unauthorized
3389
+ 404:
3390
+ description: Not found
3391
+ requestBody:
3392
+ required: true
3393
+ content:
3394
+ application/json:
3395
+ schema:
3396
+ $ref: "#/components/schemas/DomainTarget"
3340
3397
  /admin/collection/{collectionId}/facets:
3341
3398
  get:
3342
3399
  tags:
@@ -3871,6 +3928,60 @@ paths:
3871
3928
  description: Unauthorized
3872
3929
  404:
3873
3930
  description: Not found
3931
+ /admin/collection/{collectionId}/hub:
3932
+ post:
3933
+ tags:
3934
+ - collection
3935
+ summary: Claim or rename the Hub subdomain for a collection (admin only).
3936
+ operationId: collection_claimHub
3937
+ security:
3938
+ - bearerAuth: []
3939
+ parameters:
3940
+ - name: collectionId
3941
+ in: path
3942
+ required: true
3943
+ schema:
3944
+ type: string
3945
+ responses:
3946
+ 200:
3947
+ description: Success
3948
+ content:
3949
+ application/json:
3950
+ schema:
3951
+ $ref: "#/components/schemas/CollectionResponse"
3952
+ 400:
3953
+ description: Bad request
3954
+ 401:
3955
+ description: Unauthorized
3956
+ 404:
3957
+ description: Not found
3958
+ /admin/collection/{collectionId}/hub/available:
3959
+ get:
3960
+ tags:
3961
+ - collection
3962
+ summary: Check whether a Hub subdomain name is available to claim (admin only).
3963
+ operationId: collection_checkHubAvailability
3964
+ security:
3965
+ - bearerAuth: []
3966
+ parameters:
3967
+ - name: collectionId
3968
+ in: path
3969
+ required: true
3970
+ schema:
3971
+ type: string
3972
+ responses:
3973
+ 200:
3974
+ description: Success
3975
+ content:
3976
+ application/json:
3977
+ schema:
3978
+ $ref: "#/components/schemas/HubAvailabilityResponse"
3979
+ 400:
3980
+ description: Bad request
3981
+ 401:
3982
+ description: Unauthorized
3983
+ 404:
3984
+ description: Not found
3874
3985
  /admin/collection/{collectionId}/interactions:
3875
3986
  get:
3876
3987
  tags:
@@ -6639,39 +6750,6 @@ paths:
6639
6750
  application/json:
6640
6751
  schema:
6641
6752
  $ref: "#/components/schemas/ProductCreateRequest"
6642
- /admin/collection/{collectionId}/products/query:
6643
- post:
6644
- tags:
6645
- - products
6646
- summary: products.query
6647
- operationId: products_query
6648
- security:
6649
- - bearerAuth: []
6650
- parameters:
6651
- - name: collectionId
6652
- in: path
6653
- required: true
6654
- schema:
6655
- type: string
6656
- responses:
6657
- 200:
6658
- description: Success
6659
- content:
6660
- application/json:
6661
- schema:
6662
- $ref: "#/components/schemas/ProductQueryResponse"
6663
- 400:
6664
- description: Bad request
6665
- 401:
6666
- description: Unauthorized
6667
- 404:
6668
- description: Not found
6669
- requestBody:
6670
- required: true
6671
- content:
6672
- application/json:
6673
- schema:
6674
- $ref: "#/components/schemas/ProductQueryRequest"
6675
6753
  /admin/collection/{collectionId}/products/{productId}:
6676
6754
  put:
6677
6755
  tags:
@@ -9238,6 +9316,26 @@ paths:
9238
9316
  application/json:
9239
9317
  schema:
9240
9318
  $ref: "#/components/schemas/RequestUploadTokenOptions"
9319
+ /public/collection/getByHub:
9320
+ get:
9321
+ tags:
9322
+ - collection
9323
+ summary: Resolve the collection for the current Hub domain (public endpoint).
9324
+ operationId: collection_getByHub
9325
+ security: []
9326
+ responses:
9327
+ 200:
9328
+ description: Success
9329
+ content:
9330
+ application/json:
9331
+ schema:
9332
+ $ref: "#/components/schemas/CollectionResponse"
9333
+ 400:
9334
+ description: Bad request
9335
+ 401:
9336
+ description: Unauthorized
9337
+ 404:
9338
+ description: Not found
9241
9339
  /public/collection/getShortId/{shortId}:
9242
9340
  get:
9243
9341
  tags:
@@ -18941,6 +19039,10 @@ components:
18941
19039
  type: string
18942
19040
  redirectUrl:
18943
19041
  type: string
19042
+ hubName:
19043
+ type: string
19044
+ hubCustomDomain:
19045
+ type: string
18944
19046
  shortId:
18945
19047
  type: string
18946
19048
  dark:
@@ -18975,6 +19077,16 @@ components:
18975
19077
  - variants
18976
19078
  - batches
18977
19079
  - defaultAuthKitId
19080
+ HubAvailabilityResponse:
19081
+ type: object
19082
+ properties:
19083
+ available:
19084
+ type: boolean
19085
+ domain:
19086
+ type: string
19087
+ required:
19088
+ - available
19089
+ - domain
18978
19090
  AppConfig:
18979
19091
  type: object
18980
19092
  properties:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proveanything/smartlinks",
3
- "version": "1.14.17",
3
+ "version": "1.15.1",
4
4
  "description": "Official JavaScript/TypeScript SDK for the Smartlinks API",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",