@proveanything/smartlinks 2.1.14 → 2.1.16
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/dist/api/claimSet.d.ts +9 -1
- package/dist/api/claimSet.js +15 -0
- package/dist/api/integrations.d.ts +28 -0
- package/dist/api/integrations.js +28 -0
- package/dist/docs/API_SUMMARY.md +81 -6
- package/dist/docs/connectors.md +56 -0
- package/dist/docs/integrations.md +8 -0
- package/dist/docs/server-functions.md +1 -0
- package/dist/docs/tag-ranges.md +21 -0
- package/dist/openapi.yaml +168 -1
- package/dist/types/appManifest.d.ts +23 -0
- package/dist/types/claimSet.d.ts +59 -8
- package/dist/types/integrations.d.ts +20 -0
- package/docs/API_SUMMARY.md +81 -6
- package/docs/connectors.md +56 -0
- package/docs/integrations.md +8 -0
- package/docs/server-functions.md +1 -0
- package/docs/tag-ranges.md +21 -0
- package/openapi.yaml +168 -1
- package/package.json +1 -1
package/dist/openapi.yaml
CHANGED
|
@@ -14952,6 +14952,38 @@ paths:
|
|
|
14952
14952
|
description: Unauthorized
|
|
14953
14953
|
404:
|
|
14954
14954
|
description: Not found
|
|
14955
|
+
/{groupId}/members:
|
|
14956
|
+
post:
|
|
14957
|
+
tags:
|
|
14958
|
+
- ranges
|
|
14959
|
+
summary: Put an existing tag of the set into a group (by code or chip UID), assigning it if a collection is given.
|
|
14960
|
+
operationId: ranges_addMember
|
|
14961
|
+
security: []
|
|
14962
|
+
parameters:
|
|
14963
|
+
- name: groupId
|
|
14964
|
+
in: path
|
|
14965
|
+
required: true
|
|
14966
|
+
schema:
|
|
14967
|
+
type: string
|
|
14968
|
+
responses:
|
|
14969
|
+
200:
|
|
14970
|
+
description: Success
|
|
14971
|
+
content:
|
|
14972
|
+
application/json:
|
|
14973
|
+
schema:
|
|
14974
|
+
$ref: "#/components/schemas/AddClaimSetRangeMemberResponse"
|
|
14975
|
+
400:
|
|
14976
|
+
description: Bad request
|
|
14977
|
+
401:
|
|
14978
|
+
description: Unauthorized
|
|
14979
|
+
404:
|
|
14980
|
+
description: Not found
|
|
14981
|
+
requestBody:
|
|
14982
|
+
required: true
|
|
14983
|
+
content:
|
|
14984
|
+
application/json:
|
|
14985
|
+
schema:
|
|
14986
|
+
$ref: "#/components/schemas/AddClaimSetRangeMemberRequest"
|
|
14955
14987
|
/{rangeId}:
|
|
14956
14988
|
get:
|
|
14957
14989
|
tags:
|
|
@@ -15041,6 +15073,38 @@ paths:
|
|
|
15041
15073
|
application/json:
|
|
15042
15074
|
schema:
|
|
15043
15075
|
$ref: "#/components/schemas/AssignClaimSetRangeRequest"
|
|
15076
|
+
/{rangeId}/close:
|
|
15077
|
+
post:
|
|
15078
|
+
tags:
|
|
15079
|
+
- ranges
|
|
15080
|
+
summary: "Close an open range: it becomes a range with the quantity it reached (removed if nothing was minted)."
|
|
15081
|
+
operationId: ranges_close
|
|
15082
|
+
security: []
|
|
15083
|
+
parameters:
|
|
15084
|
+
- name: rangeId
|
|
15085
|
+
in: path
|
|
15086
|
+
required: true
|
|
15087
|
+
schema:
|
|
15088
|
+
type: string
|
|
15089
|
+
responses:
|
|
15090
|
+
200:
|
|
15091
|
+
description: Success
|
|
15092
|
+
content:
|
|
15093
|
+
application/json:
|
|
15094
|
+
schema:
|
|
15095
|
+
$ref: "#/components/schemas/CloseClaimSetRangeResponse"
|
|
15096
|
+
400:
|
|
15097
|
+
description: Bad request
|
|
15098
|
+
401:
|
|
15099
|
+
description: Unauthorized
|
|
15100
|
+
404:
|
|
15101
|
+
description: Not found
|
|
15102
|
+
requestBody:
|
|
15103
|
+
required: true
|
|
15104
|
+
content:
|
|
15105
|
+
application/json:
|
|
15106
|
+
schema:
|
|
15107
|
+
$ref: "#/components/schemas/ClaimSetScope"
|
|
15044
15108
|
/{rangeId}/export:
|
|
15045
15109
|
get:
|
|
15046
15110
|
tags:
|
|
@@ -21235,6 +21299,32 @@ components:
|
|
|
21235
21299
|
- id
|
|
21236
21300
|
- title
|
|
21237
21301
|
- component
|
|
21302
|
+
ConnectorAction:
|
|
21303
|
+
type: object
|
|
21304
|
+
properties:
|
|
21305
|
+
name:
|
|
21306
|
+
type: string
|
|
21307
|
+
title:
|
|
21308
|
+
type: string
|
|
21309
|
+
description:
|
|
21310
|
+
type: string
|
|
21311
|
+
function:
|
|
21312
|
+
type: string
|
|
21313
|
+
visibility:
|
|
21314
|
+
type: string
|
|
21315
|
+
enum:
|
|
21316
|
+
- admin
|
|
21317
|
+
- member
|
|
21318
|
+
- public
|
|
21319
|
+
input:
|
|
21320
|
+
type: object
|
|
21321
|
+
additionalProperties: true
|
|
21322
|
+
output:
|
|
21323
|
+
type: object
|
|
21324
|
+
additionalProperties: true
|
|
21325
|
+
required:
|
|
21326
|
+
- name
|
|
21327
|
+
- function
|
|
21238
21328
|
AppConnectorDeclaration:
|
|
21239
21329
|
type: object
|
|
21240
21330
|
properties:
|
|
@@ -21288,6 +21378,10 @@ components:
|
|
|
21288
21378
|
type: array
|
|
21289
21379
|
items:
|
|
21290
21380
|
$ref: "#/components/schemas/ConnectorPanel"
|
|
21381
|
+
actions:
|
|
21382
|
+
type: array
|
|
21383
|
+
items:
|
|
21384
|
+
$ref: "#/components/schemas/ConnectorAction"
|
|
21291
21385
|
aiGuide:
|
|
21292
21386
|
type: string
|
|
21293
21387
|
recordId:
|
|
@@ -25889,6 +25983,8 @@ components:
|
|
|
25889
25983
|
type: string
|
|
25890
25984
|
namespace:
|
|
25891
25985
|
type: string
|
|
25986
|
+
kind:
|
|
25987
|
+
$ref: "#/components/schemas/ClaimSetRangeKind"
|
|
25892
25988
|
name:
|
|
25893
25989
|
type: string
|
|
25894
25990
|
notes:
|
|
@@ -25942,6 +26038,7 @@ components:
|
|
|
25942
26038
|
- id
|
|
25943
26039
|
- claimSetId
|
|
25944
26040
|
- namespace
|
|
26041
|
+
- kind
|
|
25945
26042
|
- name
|
|
25946
26043
|
- notes
|
|
25947
26044
|
- startIndex
|
|
@@ -25965,6 +26062,8 @@ components:
|
|
|
25965
26062
|
CreateClaimSetRangeRequest:
|
|
25966
26063
|
type: object
|
|
25967
26064
|
properties:
|
|
26065
|
+
kind:
|
|
26066
|
+
$ref: "#/components/schemas/ClaimSetRangeKind"
|
|
25968
26067
|
name:
|
|
25969
26068
|
type: string
|
|
25970
26069
|
quantity:
|
|
@@ -25988,7 +26087,6 @@ components:
|
|
|
25988
26087
|
type: string
|
|
25989
26088
|
required:
|
|
25990
26089
|
- name
|
|
25991
|
-
- quantity
|
|
25992
26090
|
UpdateClaimSetRangeRequest:
|
|
25993
26091
|
type: object
|
|
25994
26092
|
properties:
|
|
@@ -26032,6 +26130,10 @@ components:
|
|
|
26032
26130
|
type: string
|
|
26033
26131
|
proofId:
|
|
26034
26132
|
type: string
|
|
26133
|
+
rangeId:
|
|
26134
|
+
type: string
|
|
26135
|
+
groupId:
|
|
26136
|
+
type: string
|
|
26035
26137
|
programmedAt:
|
|
26036
26138
|
type: string
|
|
26037
26139
|
scans:
|
|
@@ -26045,6 +26147,8 @@ components:
|
|
|
26045
26147
|
- productId
|
|
26046
26148
|
- batchId
|
|
26047
26149
|
- proofId
|
|
26150
|
+
- rangeId
|
|
26151
|
+
- groupId
|
|
26048
26152
|
- programmedAt
|
|
26049
26153
|
- scans
|
|
26050
26154
|
ClaimSetRangeTagsPage:
|
|
@@ -26073,6 +26177,41 @@ components:
|
|
|
26073
26177
|
required:
|
|
26074
26178
|
- url
|
|
26075
26179
|
- remaining
|
|
26180
|
+
AddClaimSetRangeMemberRequest:
|
|
26181
|
+
type: object
|
|
26182
|
+
properties:
|
|
26183
|
+
code:
|
|
26184
|
+
type: string
|
|
26185
|
+
uid:
|
|
26186
|
+
type: string
|
|
26187
|
+
collectionId:
|
|
26188
|
+
type: string
|
|
26189
|
+
productId:
|
|
26190
|
+
type: string
|
|
26191
|
+
batchId:
|
|
26192
|
+
type: string
|
|
26193
|
+
data:
|
|
26194
|
+
type: object
|
|
26195
|
+
additionalProperties: true
|
|
26196
|
+
clear:
|
|
26197
|
+
type: boolean
|
|
26198
|
+
AddClaimSetRangeMemberResponse:
|
|
26199
|
+
type: object
|
|
26200
|
+
properties:
|
|
26201
|
+
tag:
|
|
26202
|
+
$ref: "#/components/schemas/ClaimSetRangeTag"
|
|
26203
|
+
range:
|
|
26204
|
+
$ref: "#/components/schemas/ClaimSetRange"
|
|
26205
|
+
assigned:
|
|
26206
|
+
type: object
|
|
26207
|
+
additionalProperties: true
|
|
26208
|
+
movedFrom:
|
|
26209
|
+
type: string
|
|
26210
|
+
required:
|
|
26211
|
+
- tag
|
|
26212
|
+
- range
|
|
26213
|
+
- assigned
|
|
26214
|
+
- movedFrom
|
|
26076
26215
|
ImportClaimSetRangeUidsRequest:
|
|
26077
26216
|
type: object
|
|
26078
26217
|
properties:
|
|
@@ -26273,6 +26412,12 @@ components:
|
|
|
26273
26412
|
- ntag424
|
|
26274
26413
|
- ntag21x
|
|
26275
26414
|
- qr
|
|
26415
|
+
ClaimSetRangeKind:
|
|
26416
|
+
type: string
|
|
26417
|
+
enum:
|
|
26418
|
+
- range
|
|
26419
|
+
- open
|
|
26420
|
+
- group
|
|
26276
26421
|
ClaimSetRangeStatus:
|
|
26277
26422
|
type: string
|
|
26278
26423
|
enum:
|
|
@@ -26281,6 +26426,11 @@ components:
|
|
|
26281
26426
|
- sent
|
|
26282
26427
|
- received
|
|
26283
26428
|
- assigned
|
|
26429
|
+
- open
|
|
26430
|
+
- group
|
|
26431
|
+
CloseClaimSetRangeResponse:
|
|
26432
|
+
type: object
|
|
26433
|
+
additionalProperties: true
|
|
26284
26434
|
ClaimSetImportResult:
|
|
26285
26435
|
type: string
|
|
26286
26436
|
enum:
|
|
@@ -29060,6 +29210,10 @@ components:
|
|
|
29060
29210
|
additionalProperties: true
|
|
29061
29211
|
eventMapping:
|
|
29062
29212
|
$ref: "#/components/schemas/EventMapping"
|
|
29213
|
+
envelopeFormat:
|
|
29214
|
+
type: string
|
|
29215
|
+
enum:
|
|
29216
|
+
- cloudevents
|
|
29063
29217
|
connection:
|
|
29064
29218
|
$ref: "#/components/schemas/FlowConnection"
|
|
29065
29219
|
fieldMappings:
|
|
@@ -29520,6 +29674,8 @@ components:
|
|
|
29520
29674
|
EventEnvelope:
|
|
29521
29675
|
type: object
|
|
29522
29676
|
properties:
|
|
29677
|
+
specVersion:
|
|
29678
|
+
type: number
|
|
29523
29679
|
id:
|
|
29524
29680
|
type: string
|
|
29525
29681
|
type:
|
|
@@ -29547,6 +29703,10 @@ components:
|
|
|
29547
29703
|
type: object
|
|
29548
29704
|
additionalProperties:
|
|
29549
29705
|
type: string
|
|
29706
|
+
anonymousId:
|
|
29707
|
+
type: string
|
|
29708
|
+
sessionId:
|
|
29709
|
+
type: string
|
|
29550
29710
|
emailHash:
|
|
29551
29711
|
type: string
|
|
29552
29712
|
phoneHash:
|
|
@@ -29567,6 +29727,9 @@ components:
|
|
|
29567
29727
|
proof:
|
|
29568
29728
|
type: object
|
|
29569
29729
|
additionalProperties: true
|
|
29730
|
+
consent:
|
|
29731
|
+
type: object
|
|
29732
|
+
additionalProperties: true
|
|
29570
29733
|
subject:
|
|
29571
29734
|
type: object
|
|
29572
29735
|
additionalProperties: true
|
|
@@ -29577,6 +29740,7 @@ components:
|
|
|
29577
29740
|
type: object
|
|
29578
29741
|
additionalProperties: true
|
|
29579
29742
|
required:
|
|
29743
|
+
- specVersion
|
|
29580
29744
|
- id
|
|
29581
29745
|
- type
|
|
29582
29746
|
- entityType
|
|
@@ -29589,9 +29753,12 @@ components:
|
|
|
29589
29753
|
- contactId
|
|
29590
29754
|
- userId
|
|
29591
29755
|
- externalIds
|
|
29756
|
+
- anonymousId
|
|
29757
|
+
- sessionId
|
|
29592
29758
|
- identityPolicy
|
|
29593
29759
|
- product
|
|
29594
29760
|
- proof
|
|
29761
|
+
- consent
|
|
29595
29762
|
- subject
|
|
29596
29763
|
- attributes
|
|
29597
29764
|
CapturedRequest:
|
|
@@ -1030,6 +1030,27 @@ export interface ConnectorPanel {
|
|
|
1030
1030
|
/** Exported component name in the app's widgets bundle (manifest `widgets.files`). */
|
|
1031
1031
|
component: string;
|
|
1032
1032
|
}
|
|
1033
|
+
/**
|
|
1034
|
+
* A named provider operation invoked ON DEMAND (not by the engine): redeem a reward, enrol a member,
|
|
1035
|
+
* issue a coupon, raise a ticket, send a receipt. Called by an app function (`ctx.sl.connectors.call`),
|
|
1036
|
+
* by the Hub (public route — only `public`, or `member` for a signed-in person) or by the console. The
|
|
1037
|
+
* function receives `{ input, installation, caller }` and returns JSON; it runs with the connector's
|
|
1038
|
+
* own credentials and is told who asked.
|
|
1039
|
+
*/
|
|
1040
|
+
export interface ConnectorAction {
|
|
1041
|
+
/** `^[a-zA-Z][a-zA-Z0-9_-]{0,63}$` */
|
|
1042
|
+
name: string;
|
|
1043
|
+
title?: string;
|
|
1044
|
+
description?: string;
|
|
1045
|
+
/** This app's server function implementing it. */
|
|
1046
|
+
function: string;
|
|
1047
|
+
/** Who may invoke it outside functions and the console. Default 'admin'. */
|
|
1048
|
+
visibility?: 'admin' | 'member' | 'public';
|
|
1049
|
+
/** JSON Schema for `input`; `required` fields are checked before the function runs. */
|
|
1050
|
+
input?: Record<string, unknown>;
|
|
1051
|
+
/** JSON Schema for the result (documentation; not enforced). */
|
|
1052
|
+
output?: Record<string, unknown>;
|
|
1053
|
+
}
|
|
1033
1054
|
/**
|
|
1034
1055
|
* The connector contract. Every function named here is one of this app's server functions
|
|
1035
1056
|
* (manifest `functions.definitions`); the engine calls it with collection authority, capped by the
|
|
@@ -1092,6 +1113,8 @@ export interface AppConnectorDeclaration {
|
|
|
1092
1113
|
lookup?: string;
|
|
1093
1114
|
};
|
|
1094
1115
|
panels?: ConnectorPanel[];
|
|
1116
|
+
/** On-demand operations the connector offers (see ConnectorAction). */
|
|
1117
|
+
actions?: ConnectorAction[];
|
|
1095
1118
|
/** Path (under the app's public files) of a guide the AI mapping assistant reads. */
|
|
1096
1119
|
aiGuide?: string;
|
|
1097
1120
|
/**
|
package/dist/types/claimSet.d.ts
CHANGED
|
@@ -129,21 +129,32 @@ export type ClaimSetScope = {
|
|
|
129
129
|
partnerId: string;
|
|
130
130
|
};
|
|
131
131
|
export type ClaimSetTagType = 'ntag424' | 'ntag21x' | 'qr';
|
|
132
|
-
|
|
132
|
+
/**
|
|
133
|
+
* range: a contiguous block of indexes minted up front. open: grows one index per tag programmed on a phone
|
|
134
|
+
* (count unknown in advance), closed into a range later. group: existing tags added by tapping, assigned by
|
|
135
|
+
* hand and moved together; no indexes.
|
|
136
|
+
*/
|
|
137
|
+
export type ClaimSetRangeKind = 'range' | 'open' | 'group';
|
|
138
|
+
export type ClaimSetRangeStatus = 'minting' | 'minted' | 'sent' | 'received' | 'assigned' | 'open' | 'group';
|
|
133
139
|
export interface ClaimSetRange {
|
|
134
140
|
id: string;
|
|
135
141
|
claimSetId: string;
|
|
136
142
|
namespace: string;
|
|
143
|
+
kind: ClaimSetRangeKind;
|
|
137
144
|
name: string;
|
|
138
145
|
notes: string | null;
|
|
139
|
-
|
|
140
|
-
|
|
146
|
+
/** null for a group */
|
|
147
|
+
startIndex: number | null;
|
|
148
|
+
/** open: the highest index minted so far (null until the first); group: null */
|
|
149
|
+
endIndex: number | null;
|
|
150
|
+
/** range: the block; open: minted so far; group: its members */
|
|
141
151
|
quantity: number;
|
|
142
152
|
tagType: ClaimSetTagType;
|
|
153
|
+
/** open ranges and groups are always 'sidekick' */
|
|
143
154
|
fulfilment: 'printer' | 'sidekick';
|
|
144
|
-
/** The stored step: minting | minted | sent | received */
|
|
155
|
+
/** The stored step: minting | minted | sent | received (always 'minted' for open ranges and groups) */
|
|
145
156
|
stage: 'minting' | 'minted' | 'sent' | 'received';
|
|
146
|
-
/** What to show: the stage, or 'assigned' once every tag is assigned */
|
|
157
|
+
/** What to show: the stage, 'open', 'group', or 'assigned' once every tag is assigned */
|
|
147
158
|
status: ClaimSetRangeStatus;
|
|
148
159
|
intendedCollectionId: string | null;
|
|
149
160
|
intendedProductId: string | null;
|
|
@@ -162,9 +173,11 @@ export interface ClaimSetRange {
|
|
|
162
173
|
updatedAt: string;
|
|
163
174
|
}
|
|
164
175
|
export interface CreateClaimSetRangeRequest {
|
|
176
|
+
/** Default 'range'. Owners and admins make ranges and open ranges; assigners may make groups too. */
|
|
177
|
+
kind?: ClaimSetRangeKind;
|
|
165
178
|
name: string;
|
|
166
|
-
/** 1 to 10,000 */
|
|
167
|
-
quantity
|
|
179
|
+
/** 1 to 10,000 (a range); ignored for open ranges and groups */
|
|
180
|
+
quantity?: number;
|
|
168
181
|
/** Pre-assign every tag at mint time (you must administer the collection) */
|
|
169
182
|
intendedCollectionId?: string;
|
|
170
183
|
intendedProductId?: string;
|
|
@@ -194,6 +207,10 @@ export interface ClaimSetRangeTag {
|
|
|
194
207
|
productId: string | null;
|
|
195
208
|
batchId: string | null;
|
|
196
209
|
proofId: string | null;
|
|
210
|
+
/** The range it was minted into, if any */
|
|
211
|
+
rangeId: string | null;
|
|
212
|
+
/** The group it was added to, if any */
|
|
213
|
+
groupId: string | null;
|
|
197
214
|
programmedAt: string | null;
|
|
198
215
|
scans: number;
|
|
199
216
|
}
|
|
@@ -207,8 +224,42 @@ export interface ClaimSetRangeNextTag extends ClaimSetRangeTag {
|
|
|
207
224
|
url: string;
|
|
208
225
|
piccOffset?: number;
|
|
209
226
|
mirrorOffset?: number;
|
|
210
|
-
|
|
227
|
+
/** Tags still without a chip; null for an open range (it grows as you go) */
|
|
228
|
+
remaining: number | null;
|
|
229
|
+
}
|
|
230
|
+
/** Add an existing tag of the set to a group, and (with a collection, or clear) assign it as you go. */
|
|
231
|
+
export interface AddClaimSetRangeMemberRequest {
|
|
232
|
+
/** The tag's code, printed or bare… */
|
|
233
|
+
code?: string;
|
|
234
|
+
/** …or its chip UID (14 hex) */
|
|
235
|
+
uid?: string;
|
|
236
|
+
collectionId?: string;
|
|
237
|
+
productId?: string;
|
|
238
|
+
batchId?: string;
|
|
239
|
+
data?: Record<string, unknown>;
|
|
240
|
+
clear?: boolean;
|
|
211
241
|
}
|
|
242
|
+
export interface AddClaimSetRangeMemberResponse {
|
|
243
|
+
tag: ClaimSetRangeTag;
|
|
244
|
+
range: ClaimSetRange;
|
|
245
|
+
/** The assignment, with the same skips as assign (has_proof, assigned_elsewhere) */
|
|
246
|
+
assigned: {
|
|
247
|
+
changed: number;
|
|
248
|
+
skipped: Array<{
|
|
249
|
+
code: string;
|
|
250
|
+
index: number | null;
|
|
251
|
+
reason: 'other_range' | 'has_proof' | 'assigned_elsewhere';
|
|
252
|
+
collectionId?: string;
|
|
253
|
+
}>;
|
|
254
|
+
};
|
|
255
|
+
/** The group the tag was taken from, if it was in another one */
|
|
256
|
+
movedFrom: string | null;
|
|
257
|
+
}
|
|
258
|
+
/** Closing an open range: the range it became, or that it was removed because nothing was minted. */
|
|
259
|
+
export type CloseClaimSetRangeResponse = ClaimSetRange | {
|
|
260
|
+
id: string;
|
|
261
|
+
deleted: true;
|
|
262
|
+
};
|
|
212
263
|
export type ClaimSetImportResult = 'ok' | 'unchanged' | 'unknown_code' | 'duplicate_row' | 'index_mismatch' | 'no_uid' | 'bad_uid' | 'duplicate_uid' | 'uid_in_use' | 'uid_conflict';
|
|
213
264
|
export interface ImportClaimSetRangeUidsRequest {
|
|
214
265
|
/** The manufacturer's file as CSV text (the file we sent, with UID filled in) */
|
|
@@ -92,6 +92,12 @@ export interface IntegrationFlowConfig {
|
|
|
92
92
|
};
|
|
93
93
|
/** Event-sourced flows: fold SmartLinks events into the provider's registered events. */
|
|
94
94
|
eventMapping?: EventMapping;
|
|
95
|
+
/**
|
|
96
|
+
* Wrap each delivered body as a CloudEvents 1.0 structured event
|
|
97
|
+
* ({ specversion, id, type, source, subject, time, datacontenttype, dataschema, data }) — the shape
|
|
98
|
+
* event buses, lakes and serverless tools consume without custom code.
|
|
99
|
+
*/
|
|
100
|
+
envelopeFormat?: 'cloudevents';
|
|
95
101
|
connection?: FlowConnection;
|
|
96
102
|
fieldMappings?: FieldMapping[];
|
|
97
103
|
/** Run this flow through a connector app's functions instead of the built-in mapper/transport. */
|
|
@@ -369,6 +375,8 @@ export interface ConnectorLookupResult {
|
|
|
369
375
|
* connector's `serialize` / `send`, after the flow's identity policy and event mapping.
|
|
370
376
|
*/
|
|
371
377
|
export interface EventEnvelope {
|
|
378
|
+
/** Schema version of this envelope. Bumped only when a consumer could break (a field removed or changed). */
|
|
379
|
+
specVersion: number;
|
|
372
380
|
/** The event's id: stable across retries; use it as the provider's transaction / idempotency id. */
|
|
373
381
|
id: string;
|
|
374
382
|
/** Spine event name, e.g. 'interaction.submitted:<typeId>', 'contact.updated', 'tag.scanned:scan_redirect'. */
|
|
@@ -384,6 +392,9 @@ export interface EventEnvelope {
|
|
|
384
392
|
userId: string | null;
|
|
385
393
|
/** Ids other systems know this person by, keyed by system (a connector's `provider`). */
|
|
386
394
|
externalIds: Record<string, string>;
|
|
395
|
+
/** The visitor / device id before anyone signed in (an analytics destination stitches on it later). Under every policy. */
|
|
396
|
+
anonymousId: string | null;
|
|
397
|
+
sessionId: string | null;
|
|
387
398
|
emailHash?: string | null;
|
|
388
399
|
phoneHash?: string | null;
|
|
389
400
|
hashAlgorithm?: 'hmac-sha256' | null;
|
|
@@ -403,6 +414,15 @@ export interface EventEnvelope {
|
|
|
403
414
|
proof: {
|
|
404
415
|
id: string;
|
|
405
416
|
} | null;
|
|
417
|
+
/**
|
|
418
|
+
* The person's communication consent, summarised per channel from the contact's comms state; null
|
|
419
|
+
* when the event is about nobody we hold. A CRM or CDP must not act against it.
|
|
420
|
+
*/
|
|
421
|
+
consent: {
|
|
422
|
+
channels: Record<'email' | 'sms' | 'push' | 'whatsapp', 'opted_in' | 'opted_out' | 'suppressed' | 'unknown'>;
|
|
423
|
+
topics: Record<string, boolean>;
|
|
424
|
+
updatedAt: string | null;
|
|
425
|
+
} | null;
|
|
406
426
|
/** The event's own fields: an interaction's interactionId / outcome / metadata, a scan's codeId / country, a contact's profile. */
|
|
407
427
|
subject: Record<string, unknown>;
|
|
408
428
|
/** From the flow's event mapping, when it has one. */
|
package/docs/API_SUMMARY.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Smartlinks API Summary
|
|
2
2
|
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.16 | Generated: 2026-11-10T17:19:48.505Z
|
|
4
4
|
|
|
5
5
|
This is a concise summary of all available API functions and types.
|
|
6
6
|
|
|
@@ -65,7 +65,7 @@ For detailed guides on specific features:
|
|
|
65
65
|
- **[Analytics Metadata Conventions](analytics-metadata-conventions.md)** - Standard recommended keys and conventions for analytics metadata fields
|
|
66
66
|
- **[Loyalty: Points, Members & Earning Rules](loyalty.md)** - Loyalty schemes, automatic point earning via interaction rules, member balances, transaction history, and manual adjustments
|
|
67
67
|
- **[Integrations](integrations.md)** - Inbound/outbound integration flows + the sealed-secret store; triggers (manual/event/schedule), event patterns, the event envelope (interaction/contact/event sources), identity policy, event mapping, signed deliveries, contact as a target, field mappings
|
|
68
|
-
- **[Connectors](connectors.md)** - Connector apps (adapters for one external provider): a manifest `connector` block + server functions (testConnection/describeTarget/sample/fetch/shape/serialize/send/describeEvents/lookup); loyalty and CRM connectors; core does the mapping
|
|
68
|
+
- **[Connectors](connectors.md)** - Connector apps (adapters for one external provider): a manifest `connector` block + server functions (testConnection/describeTarget/sample/fetch/shape/serialize/send/describeEvents/lookup); loyalty and CRM connectors; actions (provider operations on demand); core does the mapping
|
|
69
69
|
- **[Entitlements](entitlements.md)** - "Is this person gold or above?" answered on demand from signed claims, a connector lookup (cached), or the contact — never a mirrored member base; gates on interaction types and in server functions
|
|
70
70
|
- **[AI Tools & Skills](ai-tools-and-skills.md)** - The AI capability catalog: skills apps invoke by name (e.g. research.brand), the tools the AI reaches for (web fetch/screenshot/brand assets/image gen), the agent loop, and how apps discover them
|
|
71
71
|
- **[Deep Link Discovery](deep-link-discovery.md)** - Registering and discovering navigable app states for portal menus and AI orchestration
|
|
@@ -3112,6 +3112,19 @@ interface ConnectorPanel {
|
|
|
3112
3112
|
}
|
|
3113
3113
|
```
|
|
3114
3114
|
|
|
3115
|
+
**ConnectorAction** (interface)
|
|
3116
|
+
```typescript
|
|
3117
|
+
interface ConnectorAction {
|
|
3118
|
+
name: string
|
|
3119
|
+
title?: string
|
|
3120
|
+
description?: string
|
|
3121
|
+
function: string
|
|
3122
|
+
visibility?: 'admin' | 'member' | 'public'
|
|
3123
|
+
input?: Record<string, unknown>
|
|
3124
|
+
output?: Record<string, unknown>
|
|
3125
|
+
}
|
|
3126
|
+
```
|
|
3127
|
+
|
|
3115
3128
|
**AppConnectorDeclaration** (interface)
|
|
3116
3129
|
```typescript
|
|
3117
3130
|
interface AppConnectorDeclaration {
|
|
@@ -3134,6 +3147,7 @@ interface AppConnectorDeclaration {
|
|
|
3134
3147
|
lookup?: string
|
|
3135
3148
|
}
|
|
3136
3149
|
panels?: ConnectorPanel[]
|
|
3150
|
+
actions?: ConnectorAction[]
|
|
3137
3151
|
aiGuide?: string
|
|
3138
3152
|
recordId?: string
|
|
3139
3153
|
limits?: { requestsPerSecond?: number; maxEvents?: number; maxAttributes?: number }
|
|
@@ -5761,10 +5775,11 @@ interface ClaimSetRange {
|
|
|
5761
5775
|
id: string
|
|
5762
5776
|
claimSetId: string
|
|
5763
5777
|
namespace: string
|
|
5778
|
+
kind: ClaimSetRangeKind
|
|
5764
5779
|
name: string
|
|
5765
5780
|
notes: string | null
|
|
5766
|
-
startIndex: number
|
|
5767
|
-
endIndex: number
|
|
5781
|
+
startIndex: number | null
|
|
5782
|
+
endIndex: number | null
|
|
5768
5783
|
quantity: number
|
|
5769
5784
|
tagType: ClaimSetTagType
|
|
5770
5785
|
fulfilment: 'printer' | 'sidekick'
|
|
@@ -5787,8 +5802,9 @@ interface ClaimSetRange {
|
|
|
5787
5802
|
**CreateClaimSetRangeRequest** (interface)
|
|
5788
5803
|
```typescript
|
|
5789
5804
|
interface CreateClaimSetRangeRequest {
|
|
5805
|
+
kind?: ClaimSetRangeKind
|
|
5790
5806
|
name: string
|
|
5791
|
-
quantity
|
|
5807
|
+
quantity?: number
|
|
5792
5808
|
intendedCollectionId?: string
|
|
5793
5809
|
intendedProductId?: string
|
|
5794
5810
|
intendedBatchId?: string
|
|
@@ -5823,6 +5839,8 @@ interface ClaimSetRangeTag {
|
|
|
5823
5839
|
productId: string | null
|
|
5824
5840
|
batchId: string | null
|
|
5825
5841
|
proofId: string | null
|
|
5842
|
+
rangeId: string | null
|
|
5843
|
+
groupId: string | null
|
|
5826
5844
|
programmedAt: string | null
|
|
5827
5845
|
scans: number
|
|
5828
5846
|
}
|
|
@@ -5836,6 +5854,29 @@ interface ClaimSetRangeTagsPage {
|
|
|
5836
5854
|
}
|
|
5837
5855
|
```
|
|
5838
5856
|
|
|
5857
|
+
**AddClaimSetRangeMemberRequest** (interface)
|
|
5858
|
+
```typescript
|
|
5859
|
+
interface AddClaimSetRangeMemberRequest {
|
|
5860
|
+
code?: string
|
|
5861
|
+
uid?: string
|
|
5862
|
+
collectionId?: string
|
|
5863
|
+
productId?: string
|
|
5864
|
+
batchId?: string
|
|
5865
|
+
data?: Record<string, unknown>
|
|
5866
|
+
clear?: boolean
|
|
5867
|
+
}
|
|
5868
|
+
```
|
|
5869
|
+
|
|
5870
|
+
**AddClaimSetRangeMemberResponse** (interface)
|
|
5871
|
+
```typescript
|
|
5872
|
+
interface AddClaimSetRangeMemberResponse {
|
|
5873
|
+
tag: ClaimSetRangeTag
|
|
5874
|
+
range: ClaimSetRange
|
|
5875
|
+
assigned: { changed: number; skipped: Array<{ code: string; index: number | null; reason: 'other_range' | 'has_proof' | 'assigned_elsewhere'; collectionId?: string }> }
|
|
5876
|
+
movedFrom: string | null
|
|
5877
|
+
}
|
|
5878
|
+
```
|
|
5879
|
+
|
|
5839
5880
|
**ImportClaimSetRangeUidsRequest** (interface)
|
|
5840
5881
|
```typescript
|
|
5841
5882
|
interface ImportClaimSetRangeUidsRequest {
|
|
@@ -5944,7 +5985,11 @@ type ClaimSetScope = { collectionId: string }
|
|
|
5944
5985
|
|
|
5945
5986
|
**ClaimSetTagType** = `'ntag424' | 'ntag21x' | 'qr'`
|
|
5946
5987
|
|
|
5947
|
-
**
|
|
5988
|
+
**ClaimSetRangeKind** = `'range' | 'open' | 'group'`
|
|
5989
|
+
|
|
5990
|
+
**ClaimSetRangeStatus** = `'minting' | 'minted' | 'sent' | 'received' | 'assigned' | 'open' | 'group'`
|
|
5991
|
+
|
|
5992
|
+
**CloseClaimSetRangeResponse** = `ClaimSetRange | { id: string`
|
|
5948
5993
|
|
|
5949
5994
|
**ClaimSetImportResult** = ``
|
|
5950
5995
|
|
|
@@ -7980,6 +8025,7 @@ interface IntegrationFlowConfig {
|
|
|
7980
8025
|
signing?: { credentialRef: string; previousCredentialRef?: string }
|
|
7981
8026
|
identity?: { policy?: IdentityPolicy; hashKeyCredentialRef?: string }
|
|
7982
8027
|
eventMapping?: EventMapping
|
|
8028
|
+
envelopeFormat?: 'cloudevents'
|
|
7983
8029
|
connection?: FlowConnection
|
|
7984
8030
|
fieldMappings?: FieldMapping[]
|
|
7985
8031
|
connector?: FlowConnectorRef
|
|
@@ -8222,6 +8268,7 @@ interface ConnectorLookupResult {
|
|
|
8222
8268
|
**EventEnvelope** (interface)
|
|
8223
8269
|
```typescript
|
|
8224
8270
|
interface EventEnvelope {
|
|
8271
|
+
specVersion: number
|
|
8225
8272
|
id: string
|
|
8226
8273
|
type: string
|
|
8227
8274
|
entityType: string | null
|
|
@@ -8234,6 +8281,8 @@ interface EventEnvelope {
|
|
|
8234
8281
|
contactId: string | null
|
|
8235
8282
|
userId: string | null
|
|
8236
8283
|
externalIds: Record<string, string>
|
|
8284
|
+
anonymousId: string | null
|
|
8285
|
+
sessionId: string | null
|
|
8237
8286
|
emailHash?: string | null
|
|
8238
8287
|
phoneHash?: string | null
|
|
8239
8288
|
hashAlgorithm?: 'hmac-sha256' | null
|
|
@@ -8243,6 +8292,7 @@ interface EventEnvelope {
|
|
|
8243
8292
|
identityPolicy: IdentityPolicy
|
|
8244
8293
|
product: { id: string; name?: string | null; sku?: string | null; gtin?: string | null; variantId?: string | null; batchId?: string | null } | null
|
|
8245
8294
|
proof: { id: string } | null
|
|
8295
|
+
consent: { channels: Record<'email' | 'sms' | 'push' | 'whatsapp', 'opted_in' | 'opted_out' | 'suppressed' | 'unknown'>; topics: Record<string, boolean>; updatedAt: string | null } | null
|
|
8246
8296
|
subject: Record<string, unknown>
|
|
8247
8297
|
event?: { name: string; attributes: Record<string, unknown>; rule: string | null }
|
|
8248
8298
|
attributes: Record<string, unknown>
|
|
@@ -12445,6 +12495,15 @@ Name, notes, order details, or a stage move (sent to the printer, received).
|
|
|
12445
12495
|
**resume**(scope: ClaimSetScope, claimSetId: string, rangeId: string) → `Promise<ClaimSetRange>`
|
|
12446
12496
|
Finish minting a range that was interrupted.
|
|
12447
12497
|
|
|
12498
|
+
**close**(scope: ClaimSetScope, claimSetId: string, rangeId: string) → `Promise<CloseClaimSetRangeResponse>`
|
|
12499
|
+
Close an open range: it becomes a range with the quantity it reached (removed if nothing was minted).
|
|
12500
|
+
|
|
12501
|
+
**addMember**(scope: ClaimSetScope, claimSetId: string, groupId: string, params: AddClaimSetRangeMemberRequest) → `Promise<AddClaimSetRangeMemberResponse>`
|
|
12502
|
+
Put an existing tag of the set into a group (by code or chip UID), assigning it if a collection is given.
|
|
12503
|
+
|
|
12504
|
+
**removeMember**(scope: ClaimSetScope, claimSetId: string, groupId: string, code: string) → `Promise<`
|
|
12505
|
+
Take a tag out of a group. Its assignment is left as it is.
|
|
12506
|
+
|
|
12448
12507
|
**tags**(scope: ClaimSetScope, claimSetId: string, rangeId: string,
|
|
12449
12508
|
options: { from?: number; limit?: number; keys?: boolean } = {}) → `Promise<ClaimSetRangeTagsPage>`
|
|
12450
12509
|
The range's tags in index order, a page at a time (keys: owners/admins only).
|
|
@@ -12984,6 +13043,22 @@ Save a connector's non-secret Connect-form values and/or settings. PUT /integrat
|
|
|
12984
13043
|
input: Record<string, unknown> & { flowId?: string } = {}) → `Promise<T>`
|
|
12985
13044
|
Run a connector step from the console: `testConnection` → ConnectorTestResult, `describeTarget` → ConnectorTargetSchema, `sample` → ConnectorRecords, and dry runs of `shape` ({ records }) → ConnectorShapeResult and `serialize` ({ documents }) → ConnectorSerializeResult. The server adds the installation; pass `flowId` to layer that flow's settings. POST /integrations/connectors/:appId/steps/:step
|
|
12986
13045
|
|
|
13046
|
+
**runConnectorAction**(collectionId: string,
|
|
13047
|
+
appId: string,
|
|
13048
|
+
action: string,
|
|
13049
|
+
input: Record<string, unknown> = {}) → `Promise<T>`
|
|
13050
|
+
Invoke a connector ACTION from the console (any visibility): redeem, enrol, adjust points, issue a coupon… The connector's function runs with its own credentials and is told who asked. POST /integrations/connectors/:appId/actions/:action { input }
|
|
13051
|
+
|
|
13052
|
+
**listConnectorActions**(collectionId: string,
|
|
13053
|
+
appId: string) → `Promise<`
|
|
13054
|
+
PUBLIC (the Hub, a site): the connector actions the caller may invoke — those declared `public`, plus `member` ones when signed in. GET /public/collection/:collectionId/connectors/:appId/actions
|
|
13055
|
+
|
|
13056
|
+
**callConnectorAction**(collectionId: string,
|
|
13057
|
+
appId: string,
|
|
13058
|
+
action: string,
|
|
13059
|
+
input: Record<string, unknown> = {}) → `Promise<T>`
|
|
13060
|
+
PUBLIC (the Hub, a site): invoke a connector action — e.g. redeem a reward for the signed-in member. 401 SIGN_IN_REQUIRED for a `member` action without a session; 403 for an admin-only one; 400 with `missing[]` when a required input is absent. POST /public/collection/:collectionId/connectors/:appId/actions/:action { input }
|
|
13061
|
+
|
|
12987
13062
|
### interactions
|
|
12988
13063
|
|
|
12989
13064
|
**query**(collectionId: string,
|