@tappify/extension-sdk 2.0.0 → 2.1.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +208 -0
  2. package/dist/chunk-2CY5HVY7.mjs +59 -0
  3. package/dist/chunk-2CY5HVY7.mjs.map +1 -0
  4. package/dist/{chunk-2DBSVKAU.cjs → chunk-6HETNZJY.cjs} +1 -1
  5. package/dist/chunk-6HETNZJY.cjs.map +1 -0
  6. package/dist/{chunk-PYJMJF44.cjs → chunk-7YKH4LZN.cjs} +9 -2
  7. package/dist/chunk-7YKH4LZN.cjs.map +1 -0
  8. package/dist/{chunk-RMUWRESK.cjs → chunk-A74HCO6T.cjs} +31 -18
  9. package/dist/chunk-A74HCO6T.cjs.map +1 -0
  10. package/dist/chunk-BPCGXXMD.cjs +781 -0
  11. package/dist/chunk-BPCGXXMD.cjs.map +1 -0
  12. package/dist/chunk-EB5XWQAU.cjs +132 -0
  13. package/dist/chunk-EB5XWQAU.cjs.map +1 -0
  14. package/dist/{chunk-5AAPD5WV.cjs → chunk-GAUZYBXE.cjs} +11 -11
  15. package/dist/chunk-GAUZYBXE.cjs.map +1 -0
  16. package/dist/chunk-J5LGTIGS.mjs +10 -0
  17. package/dist/chunk-J5LGTIGS.mjs.map +1 -0
  18. package/dist/{chunk-ZT35X7KL.mjs → chunk-KZ5NGFUP.mjs} +22 -9
  19. package/dist/chunk-KZ5NGFUP.mjs.map +1 -0
  20. package/dist/chunk-NN263PGQ.cjs +70 -0
  21. package/dist/chunk-NN263PGQ.cjs.map +1 -0
  22. package/dist/{chunk-3YWVYA42.cjs → chunk-O357OJXL.cjs} +14 -18
  23. package/dist/chunk-O357OJXL.cjs.map +1 -0
  24. package/dist/chunk-ONJMPO3P.cjs +59 -0
  25. package/dist/chunk-ONJMPO3P.cjs.map +1 -0
  26. package/dist/{chunk-OPPYEA7F.cjs → chunk-PRCZMOLD.cjs} +3 -3
  27. package/dist/chunk-PRCZMOLD.cjs.map +1 -0
  28. package/dist/chunk-Q7SFCCGT.cjs +10 -0
  29. package/dist/chunk-Q7SFCCGT.cjs.map +1 -0
  30. package/dist/{chunk-QHM7XNRK.mjs → chunk-QA5AL3VZ.mjs} +2 -2
  31. package/dist/{chunk-QHM7XNRK.mjs.map → chunk-QA5AL3VZ.mjs.map} +1 -1
  32. package/dist/chunk-QJMZRV7A.mjs +132 -0
  33. package/dist/chunk-QJMZRV7A.mjs.map +1 -0
  34. package/dist/{chunk-CSTYBKZC.mjs → chunk-QXD7WVKK.mjs} +1 -1
  35. package/dist/chunk-QXD7WVKK.mjs.map +1 -0
  36. package/dist/{chunk-4C5Z3CIK.mjs → chunk-RBIQT75L.mjs} +2 -2
  37. package/dist/chunk-RBIQT75L.mjs.map +1 -0
  38. package/dist/{chunk-MNDVYPEP.mjs → chunk-SGCYEEXD.mjs} +9 -2
  39. package/dist/chunk-SGCYEEXD.mjs.map +1 -0
  40. package/dist/{chunk-BDCX6LRQ.mjs → chunk-SGEYDV3K.mjs} +3 -3
  41. package/dist/chunk-SGEYDV3K.mjs.map +1 -0
  42. package/dist/{chunk-IGK2AP6J.mjs → chunk-SLGOHIBL.mjs} +13 -17
  43. package/dist/chunk-SLGOHIBL.mjs.map +1 -0
  44. package/dist/chunk-SWG7CNTZ.mjs +781 -0
  45. package/dist/chunk-SWG7CNTZ.mjs.map +1 -0
  46. package/dist/{chunk-7KIKOH5H.cjs → chunk-VV7ELNRW.cjs} +3 -3
  47. package/dist/chunk-VV7ELNRW.cjs.map +1 -0
  48. package/dist/chunk-Z43DPNZ6.mjs +70 -0
  49. package/dist/chunk-Z43DPNZ6.mjs.map +1 -0
  50. package/dist/client-BO3kavn0.d.ts +25 -0
  51. package/dist/client-DE-vMgdO.d.cts +25 -0
  52. package/dist/codegen.cjs.map +1 -1
  53. package/dist/codegen.d.cts +43 -7
  54. package/dist/codegen.d.ts +43 -7
  55. package/dist/codegen.mjs.map +1 -1
  56. package/dist/{constants-DJ_KgZpN.d.cts → constants-Bh759FUI.d.cts} +44 -8
  57. package/dist/{constants-DJ_KgZpN.d.ts → constants-Bh759FUI.d.ts} +44 -8
  58. package/dist/{context-Dt6xh_5t.d.cts → context-DI0EJCRD.d.cts} +5 -4
  59. package/dist/{context-Ml7k_V14.d.ts → context-mr8R5CNt.d.ts} +5 -4
  60. package/dist/{errors-COsBh7kd.d.cts → errors-Cqh0wrqt.d.cts} +3 -2
  61. package/dist/{errors-COsBh7kd.d.ts → errors-Cqh0wrqt.d.ts} +3 -2
  62. package/dist/host.cjs +5 -4
  63. package/dist/host.cjs.map +1 -1
  64. package/dist/host.d.cts +5 -5
  65. package/dist/host.d.ts +5 -5
  66. package/dist/host.mjs +4 -3
  67. package/dist/host.mjs.map +1 -1
  68. package/dist/index.cjs +9 -656
  69. package/dist/index.cjs.map +1 -1
  70. package/dist/index.d.cts +69 -627
  71. package/dist/index.d.ts +69 -627
  72. package/dist/index.mjs +5 -652
  73. package/dist/index.mjs.map +1 -1
  74. package/dist/manifest.cjs +142 -86
  75. package/dist/manifest.cjs.map +1 -1
  76. package/dist/manifest.d.cts +97 -12
  77. package/dist/manifest.d.ts +97 -12
  78. package/dist/manifest.mjs +129 -73
  79. package/dist/manifest.mjs.map +1 -1
  80. package/dist/server.cjs +15 -66
  81. package/dist/server.cjs.map +1 -1
  82. package/dist/server.d.cts +6 -6
  83. package/dist/server.d.ts +6 -6
  84. package/dist/server.mjs +10 -61
  85. package/dist/server.mjs.map +1 -1
  86. package/dist/testing/index.cjs +73 -750
  87. package/dist/testing/index.cjs.map +1 -1
  88. package/dist/testing/index.d.cts +30 -11
  89. package/dist/testing/index.d.ts +30 -11
  90. package/dist/testing/index.mjs +89 -766
  91. package/dist/testing/index.mjs.map +1 -1
  92. package/dist/testing/jest.cjs +6 -5
  93. package/dist/testing/jest.cjs.map +1 -1
  94. package/dist/testing/jest.mjs +3 -2
  95. package/dist/testing/jest.mjs.map +1 -1
  96. package/dist/testing/vitest.cjs +6 -5
  97. package/dist/testing/vitest.cjs.map +1 -1
  98. package/dist/testing/vitest.d.cts +10 -0
  99. package/dist/testing/vitest.d.ts +10 -0
  100. package/dist/testing/vitest.mjs +3 -2
  101. package/dist/testing/vitest.mjs.map +1 -1
  102. package/dist/{types-DDAGLpov.d.ts → types-BdDaLnqs.d.cts} +4 -3
  103. package/dist/{types-DrpQSv_2.d.cts → types-uGHrRaOj.d.ts} +4 -3
  104. package/dist/ui/styles.css +740 -0
  105. package/dist/ui.cjs +1018 -0
  106. package/dist/ui.cjs.map +1 -0
  107. package/dist/ui.d.cts +231 -0
  108. package/dist/ui.d.ts +231 -0
  109. package/dist/ui.mjs +1018 -0
  110. package/dist/ui.mjs.map +1 -0
  111. package/dist/vite-preview-bootstrap.cjs +66 -0
  112. package/dist/vite-preview-bootstrap.cjs.map +1 -0
  113. package/dist/vite-preview-bootstrap.d.cts +15 -0
  114. package/dist/vite-preview-bootstrap.d.ts +15 -0
  115. package/dist/vite-preview-bootstrap.mjs +66 -0
  116. package/dist/vite-preview-bootstrap.mjs.map +1 -0
  117. package/dist/vite-preview.cjs +876 -0
  118. package/dist/vite-preview.cjs.map +1 -0
  119. package/dist/vite-preview.d.cts +9 -0
  120. package/dist/vite-preview.d.ts +9 -0
  121. package/dist/vite-preview.mjs +876 -0
  122. package/dist/vite-preview.mjs.map +1 -0
  123. package/dist/vite.cjs +320 -60
  124. package/dist/vite.cjs.map +1 -1
  125. package/dist/vite.d.cts +54 -8
  126. package/dist/vite.d.ts +54 -8
  127. package/dist/vite.mjs +312 -54
  128. package/dist/vite.mjs.map +1 -1
  129. package/dist/work-events-BlOVpK0k.d.ts +547 -0
  130. package/dist/work-events-D97EoqvS.d.cts +547 -0
  131. package/package.json +19 -2
  132. package/schema/extension-v2.json +440 -121
  133. package/dist/chunk-2DBSVKAU.cjs.map +0 -1
  134. package/dist/chunk-3YWVYA42.cjs.map +0 -1
  135. package/dist/chunk-4C5Z3CIK.mjs.map +0 -1
  136. package/dist/chunk-5AAPD5WV.cjs.map +0 -1
  137. package/dist/chunk-7KIKOH5H.cjs.map +0 -1
  138. package/dist/chunk-BDCX6LRQ.mjs.map +0 -1
  139. package/dist/chunk-CSTYBKZC.mjs.map +0 -1
  140. package/dist/chunk-IGK2AP6J.mjs.map +0 -1
  141. package/dist/chunk-MNDVYPEP.mjs.map +0 -1
  142. package/dist/chunk-OPPYEA7F.cjs.map +0 -1
  143. package/dist/chunk-PYJMJF44.cjs.map +0 -1
  144. package/dist/chunk-RMUWRESK.cjs.map +0 -1
  145. package/dist/chunk-ZT35X7KL.mjs.map +0 -1
  146. package/dist/handler-CZIlZ5vu.d.ts +0 -227
  147. package/dist/handler-kU9Jf36K.d.cts +0 -227
  148. package/dist/styles.css +0 -367
@@ -81,7 +81,7 @@
81
81
  },
82
82
  "scopes": {
83
83
  "minItems": 1,
84
- "maxItems": 19,
84
+ "maxItems": 20,
85
85
  "type": "array",
86
86
  "items": {
87
87
  "type": "object",
@@ -94,6 +94,7 @@
94
94
  "analytics:read",
95
95
  "store.metadata:read",
96
96
  "reviews:read",
97
+ "review.threads:read",
97
98
  "crashes:read",
98
99
  "revenue:read",
99
100
  "metrics:write",
@@ -622,6 +623,14 @@
622
623
  "type": "string"
623
624
  },
624
625
  "description": "The scopes asked of the outside service. These are that service's scopes, not Tappify's."
626
+ },
627
+ "tokenRequestEncoding": {
628
+ "type": "string",
629
+ "enum": [
630
+ "form",
631
+ "json"
632
+ ],
633
+ "description": "The request body encoding for authorization-code and refresh token exchanges. When omitted, uses form encoding (application/x-www-form-urlencoded); json uses application/json."
625
634
  }
626
635
  },
627
636
  "required": [
@@ -915,6 +924,7 @@
915
924
  "analytics:read",
916
925
  "store.metadata:read",
917
926
  "reviews:read",
927
+ "review.threads:read",
918
928
  "crashes:read",
919
929
  "revenue:read",
920
930
  "metrics:write",
@@ -1150,172 +1160,481 @@
1150
1160
  "description": "What this extension offers the assistant: tools, mentions, actions, knowledge, skills, prompts and context providers."
1151
1161
  },
1152
1162
  "work": {
1153
- "type": "object",
1154
- "properties": {
1155
- "kind": {
1156
- "type": "string",
1157
- "enum": [
1158
- "tracker",
1159
- "docs",
1160
- "chat"
1161
- ],
1162
- "description": "What kind of destination this is."
1163
- },
1164
- "container": {
1163
+ "anyOf": [
1164
+ {
1165
1165
  "type": "object",
1166
1166
  "properties": {
1167
- "label": {
1167
+ "kind": {
1168
1168
  "type": "string",
1169
- "minLength": 1,
1170
- "maxLength": 60,
1171
- "description": "What you call a container, such as \"Project\", \"Space\" or \"Channel\". Owners read it when they pick one."
1169
+ "enum": [
1170
+ "tracker",
1171
+ "docs",
1172
+ "chat"
1173
+ ],
1174
+ "description": "What kind of destination this is."
1172
1175
  },
1173
- "list": {
1174
- "type": "string",
1175
- "minLength": 1,
1176
- "description": "The path under `server.baseUrl` that lists the containers an owner can choose from."
1177
- }
1178
- },
1179
- "required": [
1180
- "label",
1181
- "list"
1182
- ],
1183
- "additionalProperties": false,
1184
- "description": "Where items land, and how owners pick one."
1185
- },
1186
- "creates": {
1187
- "minItems": 1,
1188
- "type": "array",
1189
- "items": {
1190
- "type": "string",
1191
- "enum": [
1192
- "issue",
1193
- "page",
1194
- "message"
1195
- ]
1196
- },
1197
- "description": "What this destination can create."
1198
- },
1199
- "fields": {
1200
- "type": "object",
1201
- "properties": {
1202
- "priority": {
1176
+ "container": {
1177
+ "type": "object",
1178
+ "properties": {
1179
+ "label": {
1180
+ "type": "string",
1181
+ "minLength": 1,
1182
+ "maxLength": 60,
1183
+ "description": "What you call a container, such as \"Project\", \"Space\" or \"Channel\". Owners read it when they pick one."
1184
+ },
1185
+ "list": {
1186
+ "type": "string",
1187
+ "minLength": 1,
1188
+ "description": "The path under `server.baseUrl` that lists the containers an owner can choose from."
1189
+ }
1190
+ },
1191
+ "required": [
1192
+ "label",
1193
+ "list"
1194
+ ],
1195
+ "additionalProperties": false,
1196
+ "description": "Deprecated. Resolve containers dynamically with describe_container."
1197
+ },
1198
+ "creates": {
1199
+ "minItems": 1,
1203
1200
  "type": "array",
1204
1201
  "items": {
1205
- "type": "string"
1202
+ "type": "string",
1203
+ "enum": [
1204
+ "issue",
1205
+ "page",
1206
+ "message"
1207
+ ]
1206
1208
  },
1207
- "description": "Your own priority names, highest first."
1208
- },
1209
- "labels": {
1210
- "type": "boolean",
1211
- "description": "Whether items carry labels."
1209
+ "description": "What this destination can create."
1212
1210
  },
1213
- "assignee": {
1214
- "type": "boolean",
1215
- "description": "Whether items carry an assignee."
1211
+ "fields": {
1212
+ "type": "object",
1213
+ "properties": {
1214
+ "priority": {
1215
+ "type": "array",
1216
+ "items": {
1217
+ "type": "string"
1218
+ },
1219
+ "description": "Your own priority names, highest first."
1220
+ },
1221
+ "labels": {
1222
+ "type": "boolean",
1223
+ "description": "Whether items carry labels."
1224
+ },
1225
+ "assignee": {
1226
+ "type": "boolean",
1227
+ "description": "Whether items carry an assignee."
1228
+ },
1229
+ "required": {
1230
+ "type": "array",
1231
+ "items": {
1232
+ "type": "string"
1233
+ },
1234
+ "description": "The fields an owner has to fill in before you can create."
1235
+ }
1236
+ },
1237
+ "required": [
1238
+ "required"
1239
+ ],
1240
+ "additionalProperties": false,
1241
+ "description": "Deprecated. Resolve fields dynamically with describe_container."
1216
1242
  },
1217
- "required": {
1243
+ "attachments": {
1218
1244
  "type": "array",
1219
1245
  "items": {
1220
- "type": "string"
1246
+ "type": "string",
1247
+ "enum": [
1248
+ "image",
1249
+ "link"
1250
+ ]
1221
1251
  },
1222
- "description": "The fields an owner has to fill in before you can create."
1252
+ "description": "What can be attached to a created item."
1253
+ },
1254
+ "comments": {
1255
+ "anyOf": [
1256
+ {
1257
+ "type": "string",
1258
+ "enum": [
1259
+ "two-way",
1260
+ "none"
1261
+ ],
1262
+ "description": "Deprecated. Declare a comments capability object."
1263
+ },
1264
+ {
1265
+ "type": "object",
1266
+ "properties": {
1267
+ "direction": {
1268
+ "type": "string",
1269
+ "enum": [
1270
+ "none",
1271
+ "to_provider",
1272
+ "from_provider",
1273
+ "two-way"
1274
+ ]
1275
+ },
1276
+ "supportsEdits": {
1277
+ "type": "boolean",
1278
+ "const": false
1279
+ },
1280
+ "supportsDeletes": {
1281
+ "type": "boolean",
1282
+ "const": false
1283
+ }
1284
+ },
1285
+ "required": [
1286
+ "direction",
1287
+ "supportsEdits",
1288
+ "supportsDeletes"
1289
+ ],
1290
+ "additionalProperties": false
1291
+ }
1292
+ ]
1293
+ },
1294
+ "status": {
1295
+ "type": "object",
1296
+ "properties": {
1297
+ "direction": {
1298
+ "type": "string",
1299
+ "enum": [
1300
+ "none",
1301
+ "to_provider",
1302
+ "from_provider",
1303
+ "two-way"
1304
+ ]
1305
+ },
1306
+ "webhook": {
1307
+ "type": "string",
1308
+ "pattern": "^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$"
1309
+ },
1310
+ "map": {
1311
+ "type": "object",
1312
+ "properties": {
1313
+ "open": {
1314
+ "type": "array",
1315
+ "items": {
1316
+ "type": "string"
1317
+ },
1318
+ "description": "Your own status names that mean not started."
1319
+ },
1320
+ "in_progress": {
1321
+ "type": "array",
1322
+ "items": {
1323
+ "type": "string"
1324
+ },
1325
+ "description": "Your own status names that mean under way."
1326
+ },
1327
+ "done": {
1328
+ "type": "array",
1329
+ "items": {
1330
+ "type": "string"
1331
+ },
1332
+ "description": "Your own status names that mean finished."
1333
+ }
1334
+ },
1335
+ "required": [
1336
+ "open",
1337
+ "in_progress",
1338
+ "done"
1339
+ ],
1340
+ "additionalProperties": false,
1341
+ "description": "Deprecated. Resolve statuses dynamically with describe_container."
1342
+ }
1343
+ },
1344
+ "required": [
1345
+ "direction"
1346
+ ],
1347
+ "additionalProperties": false
1348
+ },
1349
+ "identity": {
1350
+ "type": "string",
1351
+ "enum": [
1352
+ "user",
1353
+ "install"
1354
+ ],
1355
+ "description": "Whether items are created as the owner who asked (`user`) or as the install itself."
1356
+ },
1357
+ "auth": {
1358
+ "oneOf": [
1359
+ {
1360
+ "type": "object",
1361
+ "properties": {
1362
+ "method": {
1363
+ "type": "string",
1364
+ "const": "oauth"
1365
+ },
1366
+ "provider": {
1367
+ "type": "string",
1368
+ "minLength": 1,
1369
+ "description": "The OAuth provider identifier."
1370
+ },
1371
+ "scopes": {
1372
+ "type": "array",
1373
+ "items": {
1374
+ "type": "string"
1375
+ },
1376
+ "description": "The scopes requested from the provider."
1377
+ }
1378
+ },
1379
+ "required": [
1380
+ "method",
1381
+ "provider",
1382
+ "scopes"
1383
+ ],
1384
+ "additionalProperties": false
1385
+ },
1386
+ {
1387
+ "type": "object",
1388
+ "properties": {
1389
+ "method": {
1390
+ "type": "string",
1391
+ "const": "api_key"
1392
+ },
1393
+ "fields": {
1394
+ "maxItems": 20,
1395
+ "type": "array",
1396
+ "items": {
1397
+ "type": "object",
1398
+ "properties": {
1399
+ "name": {
1400
+ "type": "string",
1401
+ "pattern": "^[a-z][a-z0-9_]*$",
1402
+ "description": "The key your server reads this value back as."
1403
+ },
1404
+ "label": {
1405
+ "type": "string",
1406
+ "minLength": 1,
1407
+ "maxLength": 60,
1408
+ "description": "The label owners read above the input."
1409
+ },
1410
+ "type": {
1411
+ "type": "string",
1412
+ "enum": [
1413
+ "text",
1414
+ "password",
1415
+ "textarea",
1416
+ "file",
1417
+ "select"
1418
+ ],
1419
+ "description": "How the input is drawn to the owner."
1420
+ },
1421
+ "required": {
1422
+ "type": "boolean",
1423
+ "description": "Whether owners have to fill it in before the install works."
1424
+ },
1425
+ "options": {
1426
+ "type": "array",
1427
+ "items": {
1428
+ "type": "string"
1429
+ },
1430
+ "description": "The choices offered, for a `select` field."
1431
+ },
1432
+ "help": {
1433
+ "type": "string",
1434
+ "maxLength": 200,
1435
+ "description": "The hint drawn under the input."
1436
+ }
1437
+ },
1438
+ "required": [
1439
+ "name",
1440
+ "label",
1441
+ "type",
1442
+ "required"
1443
+ ],
1444
+ "additionalProperties": false
1445
+ }
1446
+ }
1447
+ },
1448
+ "required": [
1449
+ "method",
1450
+ "fields"
1451
+ ],
1452
+ "additionalProperties": false
1453
+ }
1454
+ ],
1455
+ "description": "How owners authenticate the work destination."
1223
1456
  }
1224
1457
  },
1225
1458
  "required": [
1226
- "required"
1227
- ],
1228
- "additionalProperties": false,
1229
- "description": "What a created item carries."
1230
- },
1231
- "attachments": {
1232
- "type": "array",
1233
- "items": {
1234
- "type": "string",
1235
- "enum": [
1236
- "image",
1237
- "link"
1238
- ]
1239
- },
1240
- "description": "What can be attached to a created item."
1241
- },
1242
- "comments": {
1243
- "type": "string",
1244
- "enum": [
1245
- "two-way",
1246
- "none"
1459
+ "kind",
1460
+ "creates",
1461
+ "attachments",
1462
+ "comments",
1463
+ "identity",
1464
+ "auth"
1247
1465
  ],
1248
- "description": "Whether comments sync back and forth or not at all."
1466
+ "additionalProperties": false
1249
1467
  },
1250
- "status": {
1468
+ {
1251
1469
  "type": "object",
1252
1470
  "properties": {
1253
- "webhook": {
1471
+ "kind": {
1254
1472
  "type": "string",
1255
- "pattern": "^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$",
1256
- "description": "The event your server posts when an item changes status."
1473
+ "enum": [
1474
+ "tracker",
1475
+ "docs",
1476
+ "chat"
1477
+ ],
1478
+ "description": "What kind of destination this is."
1257
1479
  },
1258
- "map": {
1480
+ "container": {
1259
1481
  "type": "object",
1260
1482
  "properties": {
1261
- "open": {
1483
+ "label": {
1484
+ "type": "string",
1485
+ "minLength": 1,
1486
+ "maxLength": 60,
1487
+ "description": "What you call a container, such as \"Project\", \"Space\" or \"Channel\". Owners read it when they pick one."
1488
+ },
1489
+ "list": {
1490
+ "type": "string",
1491
+ "minLength": 1,
1492
+ "description": "The path under `server.baseUrl` that lists the containers an owner can choose from."
1493
+ }
1494
+ },
1495
+ "required": [
1496
+ "label",
1497
+ "list"
1498
+ ],
1499
+ "additionalProperties": false,
1500
+ "description": "Where items land, and how owners pick one."
1501
+ },
1502
+ "creates": {
1503
+ "minItems": 1,
1504
+ "type": "array",
1505
+ "items": {
1506
+ "type": "string",
1507
+ "enum": [
1508
+ "issue",
1509
+ "page",
1510
+ "message"
1511
+ ]
1512
+ },
1513
+ "description": "What this destination can create."
1514
+ },
1515
+ "fields": {
1516
+ "type": "object",
1517
+ "properties": {
1518
+ "priority": {
1262
1519
  "type": "array",
1263
1520
  "items": {
1264
1521
  "type": "string"
1265
1522
  },
1266
- "description": "Your own status names that mean not started."
1523
+ "description": "Your own priority names, highest first."
1524
+ },
1525
+ "labels": {
1526
+ "type": "boolean",
1527
+ "description": "Whether items carry labels."
1528
+ },
1529
+ "assignee": {
1530
+ "type": "boolean",
1531
+ "description": "Whether items carry an assignee."
1267
1532
  },
1268
- "in_progress": {
1533
+ "required": {
1269
1534
  "type": "array",
1270
1535
  "items": {
1271
1536
  "type": "string"
1272
1537
  },
1273
- "description": "Your own status names that mean under way."
1538
+ "description": "The fields an owner has to fill in before you can create."
1539
+ }
1540
+ },
1541
+ "required": [
1542
+ "required"
1543
+ ],
1544
+ "additionalProperties": false,
1545
+ "description": "What a created item carries."
1546
+ },
1547
+ "attachments": {
1548
+ "type": "array",
1549
+ "items": {
1550
+ "type": "string",
1551
+ "enum": [
1552
+ "image",
1553
+ "link"
1554
+ ]
1555
+ },
1556
+ "description": "What can be attached to a created item."
1557
+ },
1558
+ "comments": {
1559
+ "type": "string",
1560
+ "enum": [
1561
+ "two-way",
1562
+ "none"
1563
+ ],
1564
+ "description": "Whether comments sync back and forth or not at all."
1565
+ },
1566
+ "status": {
1567
+ "type": "object",
1568
+ "properties": {
1569
+ "webhook": {
1570
+ "type": "string",
1571
+ "pattern": "^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$",
1572
+ "description": "The event your server posts when an item changes status."
1274
1573
  },
1275
- "done": {
1276
- "type": "array",
1277
- "items": {
1278
- "type": "string"
1574
+ "map": {
1575
+ "type": "object",
1576
+ "properties": {
1577
+ "open": {
1578
+ "type": "array",
1579
+ "items": {
1580
+ "type": "string"
1581
+ },
1582
+ "description": "Your own status names that mean not started."
1583
+ },
1584
+ "in_progress": {
1585
+ "type": "array",
1586
+ "items": {
1587
+ "type": "string"
1588
+ },
1589
+ "description": "Your own status names that mean under way."
1590
+ },
1591
+ "done": {
1592
+ "type": "array",
1593
+ "items": {
1594
+ "type": "string"
1595
+ },
1596
+ "description": "Your own status names that mean finished."
1597
+ }
1279
1598
  },
1280
- "description": "Your own status names that mean finished."
1599
+ "required": [
1600
+ "open",
1601
+ "in_progress",
1602
+ "done"
1603
+ ],
1604
+ "additionalProperties": false,
1605
+ "description": "Your status names, grouped into the three stages Tappify draws."
1281
1606
  }
1282
1607
  },
1283
1608
  "required": [
1284
- "open",
1285
- "in_progress",
1286
- "done"
1609
+ "webhook",
1610
+ "map"
1287
1611
  ],
1288
1612
  "additionalProperties": false,
1289
- "description": "Your status names, grouped into the three stages Tappify draws."
1613
+ "description": "How status travels back from your system."
1614
+ },
1615
+ "identity": {
1616
+ "type": "string",
1617
+ "enum": [
1618
+ "user",
1619
+ "install"
1620
+ ],
1621
+ "description": "Whether items are created as the owner who asked (`user`) or as the install itself."
1290
1622
  }
1291
1623
  },
1292
1624
  "required": [
1293
- "webhook",
1294
- "map"
1625
+ "kind",
1626
+ "container",
1627
+ "creates",
1628
+ "fields",
1629
+ "attachments",
1630
+ "comments",
1631
+ "identity"
1295
1632
  ],
1296
1633
  "additionalProperties": false,
1297
- "description": "How status travels back from your system."
1298
- },
1299
- "identity": {
1300
- "type": "string",
1301
- "enum": [
1302
- "user",
1303
- "install"
1304
- ],
1305
- "description": "Whether items are created as the owner who asked (`user`) or as the install itself."
1634
+ "description": "Deprecated SDK v2 work declaration. Migrate to work capabilities and auth."
1306
1635
  }
1307
- },
1308
- "required": [
1309
- "kind",
1310
- "container",
1311
- "creates",
1312
- "fields",
1313
- "attachments",
1314
- "comments",
1315
- "identity"
1316
1636
  ],
1317
- "additionalProperties": false,
1318
- "description": "The work destination this extension creates issues, pages or messages in. Needs the `work:create` and `work:sync` scopes."
1637
+ "description": "The work destination this extension creates issues, pages or messages in. Needs `review.threads:read` and `work:create`; active comment or status sync also needs `work:sync`."
1319
1638
  }
1320
1639
  },
1321
1640
  "additionalProperties": false,
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/vulakh/Desktop/Work/Tappify/extension-sdk/dist/chunk-2DBSVKAU.cjs","../src/client/errors.ts"],"names":[],"mappings":"AAAA;AC4BO,IAAM,gBAAA,EAA2C;AAAA,EACtD,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,wBAAA;AAAA,EACA,uBAAA;AAAA,EACA,eAAA;AAAA,EACA,qBAAA;AAAA,EACA,sBAAA;AAAA,EACA,mBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA,sBAAA;AAAA,EACA,kBAAA;AAAA,EACA,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA,qBAAA;AAAA,EACA,oBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,SAAA,EAAW,IAAI,GAAA,CAAY,eAAe,CAAA;AA8BzC,IAAM,SAAA,EAAN,MAAA,QAAuB,MAAM;AAAA,EAGlC,WAAA,CAAY,IAAA,EAAoB,OAAA,EAAiB;AAC/C,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,KAAA,EAAO,UAAA;AACZ,IAAA,IAAA,CAAK,KAAA,EAAO,IAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,EAAA,CAAG,KAAA,EAAmC;AAC3C,IAAA,OACE,MAAA,WAAiB,MAAA,GACjB,KAAA,CAAM,KAAA,IAAS,WAAA,GACf,OAAA,GAAU,MAAA,GACV,OAAO,KAAA,CAAM,KAAA,IAAS,SAAA,GACtB,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAAA,EAE3B;AACF,CAAA;AA2BO,IAAM,eAAA,EAAN,MAAA,QAA6B,MAAM;AAAA,EAIxC,WAAA,CAAY,IAAA,EAAc,OAAA,EAAiB,MAAA,EAAiB;AAC1D,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,KAAA,EAAO,gBAAA;AACZ,IAAA,IAAA,CAAK,KAAA,EAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,EAAS,MAAA;AAAA,EAChB;AAAA;AAAA,EAGA,MAAA,CAAA,EAAuD;AACrD,IAAA,OAAO,EAAE,KAAA,EAAO,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,OAAA,EAAS,IAAA,CAAK,QAAQ,EAAE,CAAA;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,EAAA,CAAG,KAAA,EAAyC;AACjD,IAAA,OACE,MAAA,WAAiB,MAAA,GACjB,KAAA,CAAM,KAAA,IAAS,iBAAA,GACf,OAAA,GAAU,MAAA,GACV,OAAO,KAAA,CAAM,KAAA,IAAS,QAAA;AAAA,EAE1B;AACF,CAAA;ADrGA;AACA;AACE;AACA;AACA;AACF,gHAAC","file":"/Users/vulakh/Desktop/Work/Tappify/extension-sdk/dist/chunk-2DBSVKAU.cjs","sourcesContent":[null,"/** Every code a `TapError` the SDK raises carries. */\nexport type TapErrorCode =\n | 'TAP_OUTSIDE_HOST'\n | 'TAP_SCOPE_MISSING'\n | 'TAP_UNKNOWN_COLLECTION'\n | 'TAP_UNKNOWN_PROCEDURE'\n | 'TAP_NO_PORTAL'\n | 'TAP_NO_QUERY_CLIENT'\n | 'TAP_MANIFEST_INVALID'\n | 'TAP_ENTRY_MISSING'\n | 'TAP_STYLES_UNRESOLVED'\n | 'TAP_SCHEMA_UNRESOLVED'\n | 'TAP_TOKEN_MISSING'\n | 'TAP_TOKEN_INVALID'\n | 'TAP_TOKEN_AUDIENCE'\n | 'TAP_EVENT_ID_MISSING'\n | 'TAP_BODY_INVALID'\n | 'TAP_BODY_TOO_LARGE'\n | 'TAP_ROUTE_UNKNOWN'\n | 'TAP_HANDLER_MISSING'\n | 'TAP_INTERNAL_ERROR'\n | 'TAP_WEBHOOK_REJECTED'\n | 'TAP_TEST_TARGET_INVALID';\n\n/**\n * The same codes as `TapErrorCode`, as an array to iterate or check membership\n * against at runtime.\n */\nexport const TAP_ERROR_CODES: readonly TapErrorCode[] = [\n 'TAP_OUTSIDE_HOST',\n 'TAP_SCOPE_MISSING',\n 'TAP_UNKNOWN_COLLECTION',\n 'TAP_UNKNOWN_PROCEDURE',\n 'TAP_NO_PORTAL',\n 'TAP_NO_QUERY_CLIENT',\n 'TAP_MANIFEST_INVALID',\n 'TAP_ENTRY_MISSING',\n 'TAP_STYLES_UNRESOLVED',\n 'TAP_SCHEMA_UNRESOLVED',\n 'TAP_TOKEN_MISSING',\n 'TAP_TOKEN_INVALID',\n 'TAP_TOKEN_AUDIENCE',\n 'TAP_EVENT_ID_MISSING',\n 'TAP_BODY_INVALID',\n 'TAP_BODY_TOO_LARGE',\n 'TAP_ROUTE_UNKNOWN',\n 'TAP_HANDLER_MISSING',\n 'TAP_INTERNAL_ERROR',\n 'TAP_WEBHOOK_REJECTED',\n 'TAP_TEST_TARGET_INVALID',\n];\n\nconst CODE_SET = new Set<string>(TAP_ERROR_CODES);\n\n/**\n * The error the SDK and the host raise when a call cannot be served at all.\n *\n * @remarks\n * The SDK throws it for a mount outside the host (`TAP_OUTSIDE_HOST`), a\n * collection or procedure the manifest does not declare\n * (`TAP_UNKNOWN_COLLECTION`, `TAP_UNKNOWN_PROCEDURE`), a missing portal or query\n * client, a token the server rejected, and a misused testing helper. The host\n * turns a refused read or write into `TAP_SCOPE_MISSING`. Branch on `code`, which\n * is stable; the message is prose and changes. An error your own server raised is\n * a `TapServerError` instead.\n *\n * @example\n * ```tsx\n * import { TapError, TapErrorState, useTapQuery } from '@tappify/extension-sdk';\n *\n * function Revenue() {\n * const revenue = useTapQuery({\n * kind: 'revenue',\n * range: { from: '2026-09-01', to: '2026-09-08' },\n * });\n * if (TapError.is(revenue.error) && revenue.error.code === 'TAP_SCOPE_MISSING') {\n * return <TapErrorState title=\"Revenue is not shared with this extension\" />;\n * }\n * return <span>{revenue.data?.mrr ?? 0}</span>;\n * }\n * ```\n */\nexport class TapError extends Error {\n readonly code: TapErrorCode;\n\n constructor(code: TapErrorCode, message: string) {\n super(message);\n this.name = 'TapError';\n this.code = code;\n }\n\n /**\n * Narrows an unknown value to a `TapError`, by name and by a code it\n * recognises, so it holds across module instances.\n */\n static is(value: unknown): value is TapError {\n return (\n value instanceof Error &&\n value.name === 'TapError' &&\n 'code' in value &&\n typeof value.code === 'string' &&\n CODE_SET.has(value.code)\n );\n }\n}\n\n/**\n * The error a vendor server throws to answer a Tappify call with a code and a\n * message the owner sees.\n *\n * @remarks\n * `createTappifyHandler` catches it and answers `{ error: { code, message } }`\n * with `status`, or 400 when no status was given; the host relays both to the\n * calling mount, where they arrive as the `error` of `useTapServer`. Pick a code\n * of your own and keep it stable — the SDK's own codes are `SERVER_ERROR_CODES` —\n * and write the message for the owner, who reads it on screen.\n *\n * @example\n * ```ts\n * import { TapServerError } from '@tappify/extension-sdk/server';\n *\n * function assertRange(days: number) {\n * if (days > 0) return;\n * throw new TapServerError(\n * 'RANGE_TOO_SHORT',\n * 'getSummary needs a range of at least one day. Widen the date picker, then retry.',\n * 400,\n * );\n * }\n * ```\n */\nexport class TapServerError extends Error {\n readonly code: string;\n readonly status: number | undefined;\n\n constructor(code: string, message: string, status?: number) {\n super(message);\n this.name = 'TapServerError';\n this.code = code;\n this.status = status;\n }\n\n /** The wire body the handler answers with, without the status. */\n toJSON(): { error: { code: string; message: string } } {\n return { error: { code: this.code, message: this.message } };\n }\n\n /**\n * Narrows an unknown value to a `TapServerError` by name and by carrying a\n * string `code`, so it holds across module instances.\n */\n static is(value: unknown): value is TapServerError {\n return (\n value instanceof Error &&\n value.name === 'TapServerError' &&\n 'code' in value &&\n typeof value.code === 'string'\n );\n }\n}\n"]}