@tappify/extension-sdk 2.0.0 → 2.1.0-beta.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.
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-CV1qzQgx.d.cts +25 -0
  51. package/dist/client-CnlSHDWE.d.ts +25 -0
  52. package/dist/codegen.cjs.map +1 -1
  53. package/dist/codegen.d.cts +40 -7
  54. package/dist/codegen.d.ts +40 -7
  55. package/dist/codegen.mjs.map +1 -1
  56. package/dist/{constants-DJ_KgZpN.d.cts → constants-BAimnqOK.d.cts} +41 -8
  57. package/dist/{constants-DJ_KgZpN.d.ts → constants-BAimnqOK.d.ts} +41 -8
  58. package/dist/{context-Ml7k_V14.d.ts → context-Cr93B05o.d.ts} +5 -4
  59. package/dist/{context-Dt6xh_5t.d.cts → context-DJ3REtdT.d.cts} +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 +138 -85
  75. package/dist/manifest.cjs.map +1 -1
  76. package/dist/manifest.d.cts +93 -12
  77. package/dist/manifest.d.ts +93 -12
  78. package/dist/manifest.mjs +125 -72
  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-DrpQSv_2.d.cts → types-BYGcp5pZ.d.ts} +4 -3
  103. package/dist/{types-DDAGLpov.d.ts → types-I1JOZyI_.d.cts} +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 +316 -59
  124. package/dist/vite.cjs.map +1 -1
  125. package/dist/vite.d.cts +51 -8
  126. package/dist/vite.d.ts +51 -8
  127. package/dist/vite.mjs +308 -53
  128. package/dist/vite.mjs.map +1 -1
  129. package/dist/work-events-DB3WR468.d.ts +547 -0
  130. package/dist/work-events-Dxe7Djdy.d.cts +547 -0
  131. package/package.json +19 -2
  132. package/schema/extension-v2.json +432 -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",
@@ -915,6 +916,7 @@
915
916
  "analytics:read",
916
917
  "store.metadata:read",
917
918
  "reviews:read",
919
+ "review.threads:read",
918
920
  "crashes:read",
919
921
  "revenue:read",
920
922
  "metrics:write",
@@ -1150,172 +1152,481 @@
1150
1152
  "description": "What this extension offers the assistant: tools, mentions, actions, knowledge, skills, prompts and context providers."
1151
1153
  },
1152
1154
  "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": {
1155
+ "anyOf": [
1156
+ {
1165
1157
  "type": "object",
1166
1158
  "properties": {
1167
- "label": {
1159
+ "kind": {
1168
1160
  "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."
1161
+ "enum": [
1162
+ "tracker",
1163
+ "docs",
1164
+ "chat"
1165
+ ],
1166
+ "description": "What kind of destination this is."
1172
1167
  },
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": {
1168
+ "container": {
1169
+ "type": "object",
1170
+ "properties": {
1171
+ "label": {
1172
+ "type": "string",
1173
+ "minLength": 1,
1174
+ "maxLength": 60,
1175
+ "description": "What you call a container, such as \"Project\", \"Space\" or \"Channel\". Owners read it when they pick one."
1176
+ },
1177
+ "list": {
1178
+ "type": "string",
1179
+ "minLength": 1,
1180
+ "description": "The path under `server.baseUrl` that lists the containers an owner can choose from."
1181
+ }
1182
+ },
1183
+ "required": [
1184
+ "label",
1185
+ "list"
1186
+ ],
1187
+ "additionalProperties": false,
1188
+ "description": "Deprecated. Resolve containers dynamically with describe_container."
1189
+ },
1190
+ "creates": {
1191
+ "minItems": 1,
1203
1192
  "type": "array",
1204
1193
  "items": {
1205
- "type": "string"
1194
+ "type": "string",
1195
+ "enum": [
1196
+ "issue",
1197
+ "page",
1198
+ "message"
1199
+ ]
1206
1200
  },
1207
- "description": "Your own priority names, highest first."
1208
- },
1209
- "labels": {
1210
- "type": "boolean",
1211
- "description": "Whether items carry labels."
1201
+ "description": "What this destination can create."
1212
1202
  },
1213
- "assignee": {
1214
- "type": "boolean",
1215
- "description": "Whether items carry an assignee."
1203
+ "fields": {
1204
+ "type": "object",
1205
+ "properties": {
1206
+ "priority": {
1207
+ "type": "array",
1208
+ "items": {
1209
+ "type": "string"
1210
+ },
1211
+ "description": "Your own priority names, highest first."
1212
+ },
1213
+ "labels": {
1214
+ "type": "boolean",
1215
+ "description": "Whether items carry labels."
1216
+ },
1217
+ "assignee": {
1218
+ "type": "boolean",
1219
+ "description": "Whether items carry an assignee."
1220
+ },
1221
+ "required": {
1222
+ "type": "array",
1223
+ "items": {
1224
+ "type": "string"
1225
+ },
1226
+ "description": "The fields an owner has to fill in before you can create."
1227
+ }
1228
+ },
1229
+ "required": [
1230
+ "required"
1231
+ ],
1232
+ "additionalProperties": false,
1233
+ "description": "Deprecated. Resolve fields dynamically with describe_container."
1216
1234
  },
1217
- "required": {
1235
+ "attachments": {
1218
1236
  "type": "array",
1219
1237
  "items": {
1220
- "type": "string"
1238
+ "type": "string",
1239
+ "enum": [
1240
+ "image",
1241
+ "link"
1242
+ ]
1243
+ },
1244
+ "description": "What can be attached to a created item."
1245
+ },
1246
+ "comments": {
1247
+ "anyOf": [
1248
+ {
1249
+ "type": "string",
1250
+ "enum": [
1251
+ "two-way",
1252
+ "none"
1253
+ ],
1254
+ "description": "Deprecated. Declare a comments capability object."
1255
+ },
1256
+ {
1257
+ "type": "object",
1258
+ "properties": {
1259
+ "direction": {
1260
+ "type": "string",
1261
+ "enum": [
1262
+ "none",
1263
+ "to_provider",
1264
+ "from_provider",
1265
+ "two-way"
1266
+ ]
1267
+ },
1268
+ "supportsEdits": {
1269
+ "type": "boolean",
1270
+ "const": false
1271
+ },
1272
+ "supportsDeletes": {
1273
+ "type": "boolean",
1274
+ "const": false
1275
+ }
1276
+ },
1277
+ "required": [
1278
+ "direction",
1279
+ "supportsEdits",
1280
+ "supportsDeletes"
1281
+ ],
1282
+ "additionalProperties": false
1283
+ }
1284
+ ]
1285
+ },
1286
+ "status": {
1287
+ "type": "object",
1288
+ "properties": {
1289
+ "direction": {
1290
+ "type": "string",
1291
+ "enum": [
1292
+ "none",
1293
+ "to_provider",
1294
+ "from_provider",
1295
+ "two-way"
1296
+ ]
1297
+ },
1298
+ "webhook": {
1299
+ "type": "string",
1300
+ "pattern": "^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$"
1301
+ },
1302
+ "map": {
1303
+ "type": "object",
1304
+ "properties": {
1305
+ "open": {
1306
+ "type": "array",
1307
+ "items": {
1308
+ "type": "string"
1309
+ },
1310
+ "description": "Your own status names that mean not started."
1311
+ },
1312
+ "in_progress": {
1313
+ "type": "array",
1314
+ "items": {
1315
+ "type": "string"
1316
+ },
1317
+ "description": "Your own status names that mean under way."
1318
+ },
1319
+ "done": {
1320
+ "type": "array",
1321
+ "items": {
1322
+ "type": "string"
1323
+ },
1324
+ "description": "Your own status names that mean finished."
1325
+ }
1326
+ },
1327
+ "required": [
1328
+ "open",
1329
+ "in_progress",
1330
+ "done"
1331
+ ],
1332
+ "additionalProperties": false,
1333
+ "description": "Deprecated. Resolve statuses dynamically with describe_container."
1334
+ }
1221
1335
  },
1222
- "description": "The fields an owner has to fill in before you can create."
1336
+ "required": [
1337
+ "direction"
1338
+ ],
1339
+ "additionalProperties": false
1340
+ },
1341
+ "identity": {
1342
+ "type": "string",
1343
+ "enum": [
1344
+ "user",
1345
+ "install"
1346
+ ],
1347
+ "description": "Whether items are created as the owner who asked (`user`) or as the install itself."
1348
+ },
1349
+ "auth": {
1350
+ "oneOf": [
1351
+ {
1352
+ "type": "object",
1353
+ "properties": {
1354
+ "method": {
1355
+ "type": "string",
1356
+ "const": "oauth"
1357
+ },
1358
+ "provider": {
1359
+ "type": "string",
1360
+ "minLength": 1,
1361
+ "description": "The OAuth provider identifier."
1362
+ },
1363
+ "scopes": {
1364
+ "type": "array",
1365
+ "items": {
1366
+ "type": "string"
1367
+ },
1368
+ "description": "The scopes requested from the provider."
1369
+ }
1370
+ },
1371
+ "required": [
1372
+ "method",
1373
+ "provider",
1374
+ "scopes"
1375
+ ],
1376
+ "additionalProperties": false
1377
+ },
1378
+ {
1379
+ "type": "object",
1380
+ "properties": {
1381
+ "method": {
1382
+ "type": "string",
1383
+ "const": "api_key"
1384
+ },
1385
+ "fields": {
1386
+ "maxItems": 20,
1387
+ "type": "array",
1388
+ "items": {
1389
+ "type": "object",
1390
+ "properties": {
1391
+ "name": {
1392
+ "type": "string",
1393
+ "pattern": "^[a-z][a-z0-9_]*$",
1394
+ "description": "The key your server reads this value back as."
1395
+ },
1396
+ "label": {
1397
+ "type": "string",
1398
+ "minLength": 1,
1399
+ "maxLength": 60,
1400
+ "description": "The label owners read above the input."
1401
+ },
1402
+ "type": {
1403
+ "type": "string",
1404
+ "enum": [
1405
+ "text",
1406
+ "password",
1407
+ "textarea",
1408
+ "file",
1409
+ "select"
1410
+ ],
1411
+ "description": "How the input is drawn to the owner."
1412
+ },
1413
+ "required": {
1414
+ "type": "boolean",
1415
+ "description": "Whether owners have to fill it in before the install works."
1416
+ },
1417
+ "options": {
1418
+ "type": "array",
1419
+ "items": {
1420
+ "type": "string"
1421
+ },
1422
+ "description": "The choices offered, for a `select` field."
1423
+ },
1424
+ "help": {
1425
+ "type": "string",
1426
+ "maxLength": 200,
1427
+ "description": "The hint drawn under the input."
1428
+ }
1429
+ },
1430
+ "required": [
1431
+ "name",
1432
+ "label",
1433
+ "type",
1434
+ "required"
1435
+ ],
1436
+ "additionalProperties": false
1437
+ }
1438
+ }
1439
+ },
1440
+ "required": [
1441
+ "method",
1442
+ "fields"
1443
+ ],
1444
+ "additionalProperties": false
1445
+ }
1446
+ ],
1447
+ "description": "How owners authenticate the work destination."
1223
1448
  }
1224
1449
  },
1225
1450
  "required": [
1226
- "required"
1451
+ "kind",
1452
+ "creates",
1453
+ "attachments",
1454
+ "comments",
1455
+ "identity",
1456
+ "auth"
1227
1457
  ],
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."
1458
+ "additionalProperties": false
1241
1459
  },
1242
- "comments": {
1243
- "type": "string",
1244
- "enum": [
1245
- "two-way",
1246
- "none"
1247
- ],
1248
- "description": "Whether comments sync back and forth or not at all."
1249
- },
1250
- "status": {
1460
+ {
1251
1461
  "type": "object",
1252
1462
  "properties": {
1253
- "webhook": {
1463
+ "kind": {
1254
1464
  "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."
1465
+ "enum": [
1466
+ "tracker",
1467
+ "docs",
1468
+ "chat"
1469
+ ],
1470
+ "description": "What kind of destination this is."
1257
1471
  },
1258
- "map": {
1472
+ "container": {
1259
1473
  "type": "object",
1260
1474
  "properties": {
1261
- "open": {
1475
+ "label": {
1476
+ "type": "string",
1477
+ "minLength": 1,
1478
+ "maxLength": 60,
1479
+ "description": "What you call a container, such as \"Project\", \"Space\" or \"Channel\". Owners read it when they pick one."
1480
+ },
1481
+ "list": {
1482
+ "type": "string",
1483
+ "minLength": 1,
1484
+ "description": "The path under `server.baseUrl` that lists the containers an owner can choose from."
1485
+ }
1486
+ },
1487
+ "required": [
1488
+ "label",
1489
+ "list"
1490
+ ],
1491
+ "additionalProperties": false,
1492
+ "description": "Where items land, and how owners pick one."
1493
+ },
1494
+ "creates": {
1495
+ "minItems": 1,
1496
+ "type": "array",
1497
+ "items": {
1498
+ "type": "string",
1499
+ "enum": [
1500
+ "issue",
1501
+ "page",
1502
+ "message"
1503
+ ]
1504
+ },
1505
+ "description": "What this destination can create."
1506
+ },
1507
+ "fields": {
1508
+ "type": "object",
1509
+ "properties": {
1510
+ "priority": {
1262
1511
  "type": "array",
1263
1512
  "items": {
1264
1513
  "type": "string"
1265
1514
  },
1266
- "description": "Your own status names that mean not started."
1515
+ "description": "Your own priority names, highest first."
1267
1516
  },
1268
- "in_progress": {
1517
+ "labels": {
1518
+ "type": "boolean",
1519
+ "description": "Whether items carry labels."
1520
+ },
1521
+ "assignee": {
1522
+ "type": "boolean",
1523
+ "description": "Whether items carry an assignee."
1524
+ },
1525
+ "required": {
1269
1526
  "type": "array",
1270
1527
  "items": {
1271
1528
  "type": "string"
1272
1529
  },
1273
- "description": "Your own status names that mean under way."
1530
+ "description": "The fields an owner has to fill in before you can create."
1531
+ }
1532
+ },
1533
+ "required": [
1534
+ "required"
1535
+ ],
1536
+ "additionalProperties": false,
1537
+ "description": "What a created item carries."
1538
+ },
1539
+ "attachments": {
1540
+ "type": "array",
1541
+ "items": {
1542
+ "type": "string",
1543
+ "enum": [
1544
+ "image",
1545
+ "link"
1546
+ ]
1547
+ },
1548
+ "description": "What can be attached to a created item."
1549
+ },
1550
+ "comments": {
1551
+ "type": "string",
1552
+ "enum": [
1553
+ "two-way",
1554
+ "none"
1555
+ ],
1556
+ "description": "Whether comments sync back and forth or not at all."
1557
+ },
1558
+ "status": {
1559
+ "type": "object",
1560
+ "properties": {
1561
+ "webhook": {
1562
+ "type": "string",
1563
+ "pattern": "^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$",
1564
+ "description": "The event your server posts when an item changes status."
1274
1565
  },
1275
- "done": {
1276
- "type": "array",
1277
- "items": {
1278
- "type": "string"
1566
+ "map": {
1567
+ "type": "object",
1568
+ "properties": {
1569
+ "open": {
1570
+ "type": "array",
1571
+ "items": {
1572
+ "type": "string"
1573
+ },
1574
+ "description": "Your own status names that mean not started."
1575
+ },
1576
+ "in_progress": {
1577
+ "type": "array",
1578
+ "items": {
1579
+ "type": "string"
1580
+ },
1581
+ "description": "Your own status names that mean under way."
1582
+ },
1583
+ "done": {
1584
+ "type": "array",
1585
+ "items": {
1586
+ "type": "string"
1587
+ },
1588
+ "description": "Your own status names that mean finished."
1589
+ }
1279
1590
  },
1280
- "description": "Your own status names that mean finished."
1591
+ "required": [
1592
+ "open",
1593
+ "in_progress",
1594
+ "done"
1595
+ ],
1596
+ "additionalProperties": false,
1597
+ "description": "Your status names, grouped into the three stages Tappify draws."
1281
1598
  }
1282
1599
  },
1283
1600
  "required": [
1284
- "open",
1285
- "in_progress",
1286
- "done"
1601
+ "webhook",
1602
+ "map"
1287
1603
  ],
1288
1604
  "additionalProperties": false,
1289
- "description": "Your status names, grouped into the three stages Tappify draws."
1605
+ "description": "How status travels back from your system."
1606
+ },
1607
+ "identity": {
1608
+ "type": "string",
1609
+ "enum": [
1610
+ "user",
1611
+ "install"
1612
+ ],
1613
+ "description": "Whether items are created as the owner who asked (`user`) or as the install itself."
1290
1614
  }
1291
1615
  },
1292
1616
  "required": [
1293
- "webhook",
1294
- "map"
1617
+ "kind",
1618
+ "container",
1619
+ "creates",
1620
+ "fields",
1621
+ "attachments",
1622
+ "comments",
1623
+ "identity"
1295
1624
  ],
1296
1625
  "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."
1626
+ "description": "Deprecated SDK v2 work declaration. Migrate to work capabilities and auth."
1306
1627
  }
1307
- },
1308
- "required": [
1309
- "kind",
1310
- "container",
1311
- "creates",
1312
- "fields",
1313
- "attachments",
1314
- "comments",
1315
- "identity"
1316
1628
  ],
1317
- "additionalProperties": false,
1318
- "description": "The work destination this extension creates issues, pages or messages in. Needs the `work:create` and `work:sync` scopes."
1629
+ "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
1630
  }
1320
1631
  },
1321
1632
  "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"]}