diff --git a/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v1.excalidraw b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v1.excalidraw new file mode 100644 index 0000000000..12c48e9344 --- /dev/null +++ b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v1.excalidraw @@ -0,0 +1,3665 @@ +{ + "type": "excalidraw", + "version": 1, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "X82DstJUEARnSITNXvNB6", + "type": "text", + "x": 233.3046875, + "y": -169.7421875, + "width": 45, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 136086990, + "version": 231, + "versionNonce": 1135402510, + "isDeleted": false, + "text": "dApp", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "xH1RqhYL11nkjC3X_8IG6", + "type": "text", + "x": 706.36328125, + "y": -167.02734375, + "width": 24, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1617085842, + "version": 242, + "versionNonce": 1084379602, + "isDeleted": false, + "text": "fcl", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "GEnoVsC2cgiSNqlsaoL9h", + "type": "text", + "x": 1011.1484375, + "y": -169.0859375, + "width": 77, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1943500494, + "version": 489, + "versionNonce": 469664274, + "isDeleted": false, + "text": "provider", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "5BoO927donURMIR02xknP", + "type": "text", + "x": 1344.03515625, + "y": -170.87890625, + "width": 99, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 695961166, + "version": 424, + "versionNonce": 575018382, + "isDeleted": false, + "text": "handshake", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "BTAcvlT27MyZLn5RUNnfk", + "type": "line", + "x": 251.87529592803025, + "y": -138.464902935606, + "width": 0, + "height": 3537.261777935606, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 1484860622, + "version": 1714, + "versionNonce": 299491794, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 3537.261777935606 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "2CwkGH75FWSk_nFRQq78l", + "type": "line", + "x": 722.207741477273, + "y": -137.5621448863635, + "width": 0, + "height": 3503.9762073863635, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 2003048206, + "version": 1850, + "versionNonce": 1851062674, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 3503.9762073863635 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "pq9iTWIOg7ZqsjTjUyydo", + "type": "line", + "x": 1399.298295454546, + "y": -146.30208333333326, + "width": 0, + "height": 961.9505208333333, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 1504300430, + "version": 1734, + "versionNonce": 934456334, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 961.9505208333333 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "0vDqMZTf29GvLIjkcMN24", + "type": "line", + "x": 1050.840317234849, + "y": -134.86162405303025, + "width": 0, + "height": 1829.3303740530303, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 1891407570, + "version": 1872, + "versionNonce": 2032272462, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1829.3303740530303 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "9lmBPDK9w0oEEGWepDzny", + "type": "arrow", + "x": 257.1732954545463, + "y": 371.17294034090924, + "width": 453.7734375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1244921938, + "version": 750, + "versionNonce": 729298062, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 453.7734375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "-FvsrMYPf0xc-m5CxcwiW", + "type": "rectangle", + "x": 749.8466796875, + "y": 232.308504971591, + "width": 760.62890625, + "height": 653.094815340909, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1534813390, + "version": 797, + "versionNonce": 201965582, + "isDeleted": false + }, + { + "id": "hO7j8hOrCRU2U3wwsSLzj", + "type": "text", + "x": 371.7230113636364, + "y": 381.8902698863636, + "width": 169, + "height": 19, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1445008718, + "version": 406, + "versionNonce": 509369810, + "isDeleted": false, + "text": "fcl.authenticate()", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "ikPzB7NmlgsCiM7h48wzz", + "type": "text", + "x": 769.322088068182, + "y": 208.5525568181818, + "width": 48, + "height": 20, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1341841742, + "version": 151, + "versionNonce": 1793681998, + "isDeleted": false, + "text": "iframe", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 14 + }, + { + "id": "6My7tLh7S7YLT57zWx_vE", + "type": "arrow", + "x": 727.8359375000005, + "y": 390.31356534090924, + "width": 21.8359375, + "height": 0.484375, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1351137682, + "version": 1020, + "versionNonce": 1616856910, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 21.8359375, + 0.484375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "yvj6VuyeHRCPi_vyel0r5", + "type": "arrow", + "x": 777.1459517045454, + "y": 260.84588068181824, + "width": 607.16796875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1823087634, + "version": 234, + "versionNonce": 1095763346, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 607.16796875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "hR3478POWq3jwTfrLLoWQ", + "type": "text", + "x": 1061.847478693183, + "y": 265.4570312500001, + "width": 300, + "height": 76, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1005826318, + "version": 602, + "versionNonce": 960796814, + "isDeleted": false, + "text": "HTTP/GET handshake.com/authorize\n ?l6n=dapp.com\n &nonce=NONCE\n &scope=email", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 72 + }, + { + "id": "ElxdXQ7lbC9ExIaIWTu0f", + "type": "diamond", + "x": 1319, + "y": 275.99609375, + "width": 159.53125, + "height": 109.62890625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 990579794, + "version": 513, + "versionNonce": 1142089426, + "isDeleted": false + }, + { + "id": "UEi0jEievAhBXhf9fLfIU", + "type": "text", + "x": 1364.7871093749995, + "y": 297.68412642045473, + "width": 75, + "height": 57, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1747693518, + "version": 525, + "versionNonce": 1745954638, + "isDeleted": false, + "text": "user\nselects\nprovider", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 53 + }, + { + "id": "bNLRMaNe0HSIX5yffdAPN", + "type": "arrow", + "x": 1381.6100852272734, + "y": 396.83416193181824, + "width": 322.00390625, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 782498958, + "version": 354, + "versionNonce": 2079672594, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -322.00390625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "kLg5eP6E82X_bbmIMxEVT", + "type": "text", + "x": 1097.391867897728, + "y": 400.0986328125001, + "width": 356, + "height": 95, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 132491342, + "version": 1245, + "versionNonce": 210342610, + "isDeleted": false, + "text": "HTTP/GET provider.com/authorize\n ?l6n=dapp.com\n &nonce=NONCE\n &redirect=handshake.com/callback\n &scope=email", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 91 + }, + { + "id": "4e1gnzS6KGy9FpVvwsE0y", + "type": "diamond", + "x": 963.7059659090914, + "y": 402.67116477272725, + "width": 170.40625, + "height": 109.87890625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1434665934, + "version": 340, + "versionNonce": 886573586, + "isDeleted": false + }, + { + "id": "J-7KvrPQ_dcUDyCit0wrN", + "type": "text", + "x": 986.7933238636365, + "y": 431.01580255681836, + "width": 122, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 256530706, + "version": 201, + "versionNonce": 739432462, + "isDeleted": false, + "text": "user\nauthenticates", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "ubbRoyGmT5am6i2G9lG-I", + "type": "arrow", + "x": 1058.7833806818185, + "y": 514.8231534090908, + "width": 324.6328125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1694970706, + "version": 114, + "versionNonce": 1103080594, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 324.6328125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Yl6IlBQW0AQG8NJApG9yw", + "type": "text", + "x": 1063.5085227272734, + "y": 516.21875, + "width": 291, + "height": 152, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1783396114, + "version": 448, + "versionNonce": 1030590610, + "isDeleted": false, + "text": "HTTP/GET handshake.com/callback\n ?acct=FLOW_ACCT_NUMBER\n ?pacct=PROVIDER_FLOW_ACCT\n ?code=CODE\n ?exp=WHEN_CODE_EXPIRES\n ?hks=HOOKS_URL\n ?nonce=NONCE\n ?l6n=dapp.com", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 148 + }, + { + "id": "f__AKQ5JuFy95O3dHP60q", + "type": "arrow", + "x": 1386.148259943182, + "y": 675.8124112215908, + "width": 632.32421875, + "height": 0.41015625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 452536210, + "version": 197, + "versionNonce": 464160910, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -632.32421875, + -0.41015625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "z3HYPBdyJe3D9Z5YmvVa7", + "type": "text", + "x": 787.8634588068185, + "y": 677.0556640625, + "width": 253, + "height": 171, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 324942094, + "version": 1090, + "versionNonce": 498672658, + "isDeleted": false, + "text": "JS/postMessage dapp.com\n{ type: \"FLOW::AUTHN::RESP\"\n acct: FLOW_ACCT_NUMBER\n pacct: PROVIDER_FLOW_ACCT\n code: CODE\n exp: WHEN_CODE_EXPIRES\n hks: HOOKS_URL\n nonce: NONCE\n l6n: dapp.com", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 167 + }, + { + "id": "J_YK6v96uJRCM-Mfcd4fX", + "type": "arrow", + "x": 747.220525568182, + "y": 751.5370205965908, + "width": 22.13671875, + "height": 0.50390625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1175863054, + "version": 466, + "versionNonce": 341474066, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -22.13671875, + 0.50390625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "z1nKyn4-r_NwUhKly50Dn", + "type": "arrow", + "x": 257.8700284090918, + "y": -29.200639204545496, + "width": 454.40234375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 158142606, + "version": 413, + "versionNonce": 1555938254, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 454.40234375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "vbN6hJoyYF5gPVEd-8rbE", + "type": "text", + "x": 315.75958806818187, + "y": -20.711292613636346, + "width": 347, + "height": 19, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1494716046, + "version": 389, + "versionNonce": 745067346, + "isDeleted": false, + "text": "fcl.currentUser().subscribe(callback)", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "ZdYenok5PgTqBOZGqWJ9T", + "type": "arrow", + "x": 710.2102272727283, + "y": 87.11186079545473, + "width": 495.80078125, + "height": 0, + "angle": 0, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1636347534, + "version": 628, + "versionNonce": 1593011346, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -495.80078125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "uBoSR15InMuxDFczmXPNl", + "type": "text", + "x": 375.4508167613635, + "y": 92.19202769886363, + "width": 188, + "height": 171, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 599148370, + "version": 961, + "versionNonce": 1115417294, + "isDeleted": false, + "text": "CALLBACK currentUser\n{ acct: null\n verified: false\n name: null\n avatar: null\n hooks: null\n provider: null\n \n ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 167 + }, + { + "id": "kuvYgoF80yizx2t7l1_Wu", + "type": "arrow", + "x": 253.6885653409098, + "y": -108.1796875, + "width": 458.5, + "height": 0.1015625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 92803918, + "version": 196, + "versionNonce": 1433473550, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 458.5, + -0.1015625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "M05GYmSmMRsGs8ba8L4NE", + "type": "text", + "x": 295.52734375, + "y": -99.0752840909091, + "width": 375, + "height": 19, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1794015378, + "version": 360, + "versionNonce": 2127083790, + "isDeleted": false, + "text": "fcl.config().set(\"authn.scope\", \"email\")", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "H2GMhSuYq7R82OOAh6mQU", + "type": "line", + "x": 209.55959990530283, + "y": 53.17418323863649, + "width": 0, + "height": 1595.1148792613635, + "angle": 0, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 1272655506, + "version": 1102, + "versionNonce": 985401938, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1595.1148792613635 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "bl1HxYodwSGdHcwgLAmHu", + "type": "text", + "x": 100.953125, + "y": 140.890625, + "width": 188, + "height": 19, + "angle": 4.71238898038469, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 341119374, + "version": 231, + "versionNonce": 1721629646, + "isDeleted": false, + "text": "currentUser callback", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "tpx39Uabm9WmwItnYcdL5", + "type": "arrow", + "x": 728.7411221590909, + "y": 920.90625, + "width": 319.4375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 100270482, + "version": 115, + "versionNonce": 1131109842, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 319.4375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "s3ZENkjpa3X1xnEta75Vc", + "type": "text", + "x": 773.6104403409096, + "y": 922.1803977272724, + "width": 169, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1619662994, + "version": 184, + "versionNonce": 1482080334, + "isDeleted": false, + "text": "HTTP/GET HOOKS_URL\n ?code=CODE", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "GO8hfYa3F6Nt2H5xKQ2hv", + "type": "text", + "x": 1679.064453125, + "y": -178.3564453125, + "width": 38, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 2033488786, + "version": 518, + "versionNonce": 857480850, + "isDeleted": false, + "text": "flow", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "YeYjJP5A3sGBrZExuWzFZ", + "type": "line", + "x": 1700.257930871212, + "y": -155.798828125, + "width": 0, + "height": 3436.556640625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 172459026, + "version": 1738, + "versionNonce": 2133090578, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 3436.556640625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "pPk2e2mIzDd-J2s2YNg_L", + "type": "arrow", + "x": 730.3025568181819, + "y": 893.6747159090908, + "width": 958.05078125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1066210830, + "version": 146, + "versionNonce": 31432782, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 958.05078125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "lodWMrmO71NS9ONwZCs22", + "type": "text", + "x": 1291.889825994319, + "y": 897.4580078125, + "width": 291, + "height": 19, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 2114953742, + "version": 302, + "versionNonce": 953841870, + "isDeleted": false, + "text": "FLOW/SCRIPT GET_FLOW_ACCT_HOOKS", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "MrmoALjMi8PE8-Y0jNJqr", + "type": "arrow", + "x": 1044.0951704545455, + "y": 979.98046875, + "width": 310.8046875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 2128973778, + "version": 91, + "versionNonce": 1168364434, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -310.8046875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "0idZBeC9LrWuHVBCFoGkf", + "type": "text", + "x": 737.434037642046, + "y": 993.0625000000036, + "width": 441, + "height": 171, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1030981714, + "version": 1125, + "versionNonce": 1028761294, + "isDeleted": false, + "text": "HTTP/GET HOOKS_URL RESPONSE\n { identity: IDENTITY {\n email: EMAIL (because requested in scope)\n provider: {\n providerId: PROVIDER_FLOW_ACCT\n uid: UID (provider specific id for acct)\n hooks: HOOKS_URL\n hooks: { /* private hooks */ }\n ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 167 + }, + { + "id": "ASD61pbFPqloPUWkna7UU", + "type": "arrow", + "x": 1687.390625, + "y": 1198.1015625, + "width": 957.0078125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 263596690, + "version": 122, + "versionNonce": 904029838, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -957.0078125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "zSn4Y-uN2zPsPLBeaHy8z", + "type": "text", + "x": 1086.66512784091, + "y": 1216.2997159090914, + "width": 431, + "height": 304, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1025231886, + "version": 1091, + "versionNonce": 1242215246, + "isDeleted": false, + "text": "FLOW/SCRIPT GET_FLOW_ACCT_HOOKS RESPONSE\n { identity: IDENTITY {\n acct: FLOW_ACCT_NUMBER\n name: NAME\n avatar: AVATAR\n bio: BIO\n providers: [{\n providerId: PROVIDER_ID\n uid: UID (provider specific id for acct)\n hooks: HOOKS_URL\n hooks:\n authorizations: [{\n method: \"POST\"\n endpoint: \"provider.com/authorization\"\n data: {id: UID}\n ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 300 + }, + { + "id": "um7BoVKD9JypyLYQYzSFM", + "type": "line", + "x": 1193.5969460227266, + "y": 992.6349431818178, + "width": 0, + "height": 185.96875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1709236178, + "version": 162, + "versionNonce": 532411538, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 185.96875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Z8pExVkRYjlrhnS37T4QL", + "type": "line", + "x": 1202.0539772727266, + "y": 993.8781960227268, + "width": 0, + "height": 185.96875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2138879502, + "version": 199, + "versionNonce": 1100535182, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 185.96875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "0FrYhj3Gu1xlamFh5jKJz", + "type": "line", + "x": 1536.2606534090905, + "y": 1218.383522727273, + "width": 0, + "height": 262.8203125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 118646478, + "version": 431, + "versionNonce": 933720210, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 262.8203125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "iS-XZzhRH3CFhprUzLn6r", + "type": "line", + "x": 1542.2780539772725, + "y": 1218.074928977273, + "width": 0, + "height": 262.8203125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 517200722, + "version": 453, + "versionNonce": 221452686, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 262.8203125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "yqLmKs0TNdQEHDNJp__k6", + "type": "text", + "x": 1156.6491477272725, + "y": 1060.1129261363637, + "width": 130, + "height": 40, + "angle": 1.5707963267948966, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1226796622, + "version": 177, + "versionNonce": 1433499666, + "isDeleted": false, + "text": "Provider Specific\nPrivate Hooks", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "AaenfKnC9j29RCeA0EyPr", + "type": "line", + "x": 1184.1882102272725, + "y": 990.1502130681818, + "width": 19.17578125, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 950312082, + "version": 117, + "versionNonce": 244271630, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 19.17578125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "T4N-w2KkZkqd5HNSam4rF", + "type": "line", + "x": 1181.8386008522725, + "y": 1176.8110795454547, + "width": 19.17578125, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 134665298, + "version": 143, + "versionNonce": 1550624210, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 19.17578125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "lRiygRl6NILx4OZA0zSgl", + "type": "text", + "x": 1518.4811789772725, + "y": 1315.964488636364, + "width": 94, + "height": 40, + "angle": 1.5707963267948966, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1665507406, + "version": 343, + "versionNonce": 1716489810, + "isDeleted": false, + "text": "OnChain\nPublic Hooks", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "4mtya57_IVob6kqyppHqS", + "type": "line", + "x": 1521.9618252840905, + "y": 1217.309303977273, + "width": 19.17578125, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1059044562, + "version": 269, + "versionNonce": 318027726, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 19.17578125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "OZw9Wl9s0eXouUyoTFXUG", + "type": "line", + "x": 1521.577237215909, + "y": 1479.95703125, + "width": 19.17578125, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 82386062, + "version": 284, + "versionNonce": 1303245842, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 19.17578125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Hjl-IY-0lXFp7XFV0gYUs", + "type": "arrow", + "x": 713.2150213068189, + "y": 1236.5823863636356, + "width": 495.80078125, + "height": 0, + "angle": 0, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 2095221074, + "version": 694, + "versionNonce": 1556582738, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -495.80078125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "U2hEd78EtsQOXYbHgGMY4", + "type": "text", + "x": 265.84108664772725, + "y": 1242.5240589488676, + "width": 403, + "height": 418, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 526576846, + "version": 1349, + "versionNonce": 1016692494, + "isDeleted": false, + "text": "CALLBACK currentUser\n{ acct: FLOW_ACCT_NUMBER\n verified: true\n name: NAME\n avatar: AVATAR\n email: EMAIL\n hooks: {\n authorizations: [{\n method: \"POST\"\n endpoint: \"provider.com/authorization\"\n data: {id: UID}\n provider: {\n providerId: PROVIDER_ID\n uid: UID\n hooks: HOOKS_URL\n providers: [{\n providerId: PROVIDER_ID\n uid: UID\n hooks: HOOKS_URL\n ]\n \n ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 414 + }, + { + "id": "nyHbdI1Y5GBfMmi1zZxfi", + "type": "line", + "x": 704.96875, + "y": 920.3565340909091, + "width": 0.8274147727272521, + "height": 258.49431818181813, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2039216530, + "version": 396, + "versionNonce": 392936590, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -0.8274147727272521, + 258.49431818181813 + ] + ], + "lastCommittedPoint": [ + -0.8274147727272521, + 258.49431818181813 + ] + }, + { + "id": "mjT8vnwL-WYLTTVhQf_u2", + "type": "line", + "x": 701.1210937499995, + "y": 920.296164772727, + "width": 0.8274147727272521, + "height": 258.49431818181813, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1734622162, + "version": 474, + "versionNonce": 1960228878, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -0.8274147727272521, + 258.49431818181813 + ] + ], + "lastCommittedPoint": [ + -0.8274147727272521, + 258.49431818181813 + ] + }, + { + "id": "qBQNXmZYHaiAza70BKW9Z", + "type": "line", + "x": 711.6413352272727, + "y": 919.1207386363636, + "width": 11.864346590909122, + "height": 1.281960227272748, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 374289614, + "version": 79, + "versionNonce": 1181954958, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -11.864346590909122, + 1.281960227272748 + ] + ], + "lastCommittedPoint": [ + -11.864346590909122, + 1.281960227272748 + ] + }, + { + "id": "ZiyIGma4qyuADMTHFSJkG", + "type": "line", + "x": 714.4928977272727, + "y": 1174.9339488636365, + "width": 15.230823863636374, + "height": 0.7102272727270247, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1949701202, + "version": 23, + "versionNonce": 1245209550, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -15.230823863636374, + 0.7102272727270247 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Ogp527Unhhs3_237MbyvS", + "type": "text", + "x": 521.5042613636359, + "y": 1032.1960227272734, + "width": 307, + "height": 40, + "angle": 4.71238898038469, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1686109714, + "version": 322, + "versionNonce": 885254606, + "isDeleted": false, + "text": "If This Request Returns Status 200\nThe Account Is Considered Verified", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "AgLm-3O6LxnLLTdCrmZzK", + "type": "line", + "x": 174.6044034090911, + "y": 1249.8771306818192, + "width": 0.13849431818181301, + "height": 360.61789772727263, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1354660814, + "version": 701, + "versionNonce": 404755214, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -0.13849431818181301, + 360.61789772727263 + ] + ], + "lastCommittedPoint": [ + -0.8274147727272521, + 258.49431818181813 + ] + }, + { + "id": "JaCl70erlODzBwvSCq6hf", + "type": "line", + "x": 170.66086647727246, + "y": 1249.8167613636372, + "width": 0, + "height": 363.73508522727184, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2102554642, + "version": 806, + "versionNonce": 1863709394, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 363.73508522727184 + ] + ], + "lastCommittedPoint": [ + -0.8274147727272521, + 258.49431818181813 + ] + }, + { + "id": "Ap4e4vPdboFvWfekpXnP5", + "type": "line", + "x": 181.27698863636408, + "y": 1248.641335227274, + "width": 11.864346590909122, + "height": 1.281960227272748, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 190435854, + "version": 158, + "versionNonce": 1899462670, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -11.864346590909122, + 1.281960227272748 + ] + ], + "lastCommittedPoint": [ + -11.864346590909122, + 1.281960227272748 + ] + }, + { + "id": "VD0dZ49pYA5zsWglDlPVy", + "type": "line", + "x": 182.90696022727315, + "y": 1616.0703125000061, + "width": 15.230823863636374, + "height": 0.7102272727270247, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1299094994, + "version": 198, + "versionNonce": 724476558, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -15.230823863636374, + 0.7102272727270247 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "n5NmVSRkP5wnLlL6p5rYH", + "type": "text", + "x": -54.67329545454572, + "y": 1378.16548295455, + "width": 332, + "height": 100, + "angle": 4.71238898038469, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2091933774, + "version": 843, + "versionNonce": 1776913362, + "isDeleted": false, + "text": "Merges the Public (onChain)\nand Private (provider) hooks\n(deep merge last wins, public then private)\nNOTE: Data and format of what\nis exposed to the subscriber may change", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 94 + }, + { + "id": "Kk39gnjHIQOItun-PEroJ", + "type": "line", + "x": 93.5390625, + "y": 1701.2890625, + "width": 777.8203125, + "height": 0, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 30, + "seed": 1667327698, + "version": 252, + "versionNonce": 1399272338, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 777.8203125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "BVHNCKtE39YcX7rl-NYFk", + "type": "line", + "x": 893.0234375, + "y": 1676.5390625, + "width": 19.234375, + "height": 47.828125, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 30, + "seed": 473551378, + "version": 151, + "versionNonce": 1619330702, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -19.234375, + 47.828125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "44w3pOz5LP8Y2i-OOCDqv", + "type": "line", + "x": 908.25, + "y": 1671.5546875, + "width": 19.234375, + "height": 47.828125, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 30, + "seed": 547271186, + "version": 189, + "versionNonce": 455012690, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -19.234375, + 47.828125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "D8AhlJ8rs-11YCcNtGA--", + "type": "line", + "x": 917.47265625, + "y": 1703.1171875, + "width": 834.63671875, + "height": 0, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 30, + "seed": 2092212558, + "version": 334, + "versionNonce": 1602290894, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 834.63671875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Y701Cljlpxs3VNvaw_mdc", + "type": "text", + "x": 328.625, + "y": -155.5546875, + "width": 303, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1570471314, + "version": 242, + "versionNonce": 993528466, + "isDeleted": false, + "text": "Tell fcl when we authenticate we want\nthe users email if its available", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "fEsObWhcjK5P6WDvXVkGh", + "type": "text", + "x": 336.1640625, + "y": -69.6640625, + "width": 266, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 23237326, + "version": 154, + "versionNonce": 542094030, + "isDeleted": false, + "text": "call the callback with the current\nusers info anytime it changes", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "msFgx92-3AP5XrGwSDBLA", + "type": "text", + "x": 293.9609375, + "y": 46.890625, + "width": 407, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 503214286, + "version": 275, + "versionNonce": 233726930, + "isDeleted": false, + "text": "subscription callbacks are always called immediately\nwith what we currently know, in this case nothing", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "x6jn8h4W47vbsNP76m9t7", + "type": "text", + "x": 301.15625, + "y": 304.3203125, + "width": 340, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 215811470, + "version": 183, + "versionNonce": 370821518, + "isDeleted": false, + "text": "initiate the authentication sequence.\nfcl will inject an iframe into the application\nshowing the handshake interface", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "efFHHKuH6DUI6OL--FrFK", + "type": "text", + "x": 115.1328125, + "y": -216.4453125, + "width": 267, + "height": 40, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1880771794, + "version": 105, + "versionNonce": 2020042194, + "isDeleted": false, + "text": "consumer of fcl\n(the thing the user wants to use)", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "fpX9FAuT2DJsHXOS_rwYl", + "type": "text", + "x": 641.5859375, + "y": -191.8359375, + "width": 169, + "height": 20, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 925850130, + "version": 292, + "versionNonce": 792939790, + "isDeleted": false, + "text": "the flow client library", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 14 + }, + { + "id": "ahlNEXVqBb6yvOSHwMkjm", + "type": "text", + "x": 868.6171875, + "y": -208.4453125, + "width": 346, + "height": 40, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 873373778, + "version": 549, + "versionNonce": 1942254930, + "isDeleted": false, + "text": "the authn and authz provider\n(wallet - where the users private keys live)", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "10hplQ_DHSsUGighRZYHn", + "type": "text", + "x": 1255.3671875, + "y": -212.2890625, + "width": 261, + "height": 40, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1701238610, + "version": 734, + "versionNonce": 1950668050, + "isDeleted": false, + "text": "open source static service\nthat knows what providers exist", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "NyJ8HxoQf_0obIZfAzAwV", + "type": "text", + "x": 1585.7734375, + "y": -196.234375, + "width": 195, + "height": 20, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1508736146, + "version": 900, + "versionNonce": 1744863378, + "isDeleted": false, + "text": "the flow blockchain itself", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 14 + }, + { + "id": "XohdwJdJwugMecg0mWWrL", + "type": "text", + "x": 1059.5234375, + "y": 24.9375, + "width": 337, + "height": 200, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 689557134, + "version": 1533, + "versionNonce": 1314831378, + "isDeleted": false, + "text": "The user is shown the handshake service\nwhere they can pick which provider they \nwant to use. Once they select the\nprovider they are redirected to\nsaid provider where they will authenticate\nand be redirected back to the handshake \nservice. The handshake service then\ncompletes the handshake by sending an\nevent to the main frame with the details\nprovided by the provider.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 194 + }, + { + "id": "PA-OFs620jOJH6zBUwVhQ", + "type": "text", + "x": 1066.880859375, + "y": 682.69140625, + "width": 295, + "height": 200, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 300948174, + "version": 1120, + "versionNonce": 1334809230, + "isDeleted": false, + "text": "fcl might eventually need to check\na contract on the\nPROVIDER_FLOW_ACCT\nto verify things like the HOOKS_URL.\n\nl6n and nonce must match the ones\nsupplied in the challenge\n\nan exp of \"0\" will be taken as\n\"does not expire\"", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 194 + }, + { + "id": "fHu_Ej57UFKhjwQiH9caw", + "type": "text", + "x": 280.8388671875, + "y": 777.2763671875, + "width": 356, + "height": 180, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 179421582, + "version": 692, + "versionNonce": 925722962, + "isDeleted": false, + "text": "fcl will receive a code and location of where\nto find the hooks for the given provider. It\nshould also receive a flow acct number for\nthe given authenticated user if it exists.\nWith this information we can then fetch the\nprivate hooks (from the provider) and the\nthe public hooks from onChain. If there is no\nflow acct yet, the provider is responsible for\nalso providing the public hooks.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 174 + }, + { + "id": "NiVUTrKc8zG3S7jPO8z4E", + "type": "text", + "x": 1517.263671875, + "y": 246.2626953125, + "width": 178, + "height": 120, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1018060690, + "version": 533, + "versionNonce": 1764713490, + "isDeleted": false, + "text": "To start with we are \nshipping with an iframe\nflow, there are plans\nfor a more advanced\nredirection style flow\nafter v1.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 114 + }, + { + "id": "DNNIurGXx6O6fLDts2gkl", + "type": "text", + "x": -246.296875, + "y": 9.25, + "width": 353, + "height": 45, + "angle": 4.71238898038469, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 30, + "seed": 908119694, + "version": 482, + "versionNonce": 487404558, + "isDeleted": false, + "text": "AUTHENTICATION", + "font": "36px Virgil", + "textAlign": "left", + "baseline": 32 + }, + { + "id": "sVyCt94pEcj9uZhTn9vtv", + "type": "line", + "x": -68.8125, + "y": 230.703125, + "width": 0, + "height": 1421.8046875, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 30, + "seed": 674401486, + "version": 441, + "versionNonce": 1892901330, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1421.8046875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "1nyFcQsUWS7SmqC4Athy0", + "type": "text", + "x": -235.328125, + "y": 1855.15234375, + "width": 328, + "height": 45, + "angle": 4.71238898038469, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 30, + "seed": 1145858130, + "version": 799, + "versionNonce": 254090446, + "isDeleted": false, + "text": "AUTHORIZATION", + "font": "36px Virgil", + "textAlign": "left", + "baseline": 32 + }, + { + "id": "R6pgiMUijRge1kkbrguoO", + "type": "line", + "x": -72.9140625, + "y": 2050.1328125, + "width": 0, + "height": 1341.1875, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 30, + "seed": 1128955342, + "version": 969, + "versionNonce": 574271762, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1341.1875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Xn8RaTdO__vAZuYHGKL5b", + "type": "text", + "x": 261.1953125, + "y": 1913.0625, + "width": 459, + "height": 152, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 1071355726, + "version": 564, + "versionNonce": 1195845518, + "isDeleted": false, + "text": "const resp = await fcl.send([\n sdk.transaction``,\n sdk.authorizations([\n fcl.currentUser().authorization\n ]),\n sdk.proposer(fcl.currentUser().proposer),\n sdk.payer(fcl.currentUser().payerAuthorization)\n])", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 148 + }, + { + "id": "WcLAobcLfNslSdZ7OvolZ", + "type": "arrow", + "x": 263.1796875, + "y": 1912.390625, + "width": 448.84375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1960256466, + "version": 231, + "versionNonce": 122265682, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 448.84375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "DrttEMCTX96FWcYsEC-QM", + "type": "arrow", + "x": 739.0546875, + "y": 1943.5, + "width": 594.2421875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1100047438, + "version": 309, + "versionNonce": 1132748434, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 594.2421875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "qJ7Rcxap34blcAk4L1x73", + "type": "text", + "x": 269.875, + "y": 1763.5078125, + "width": 298, + "height": 140, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 541979470, + "version": 308, + "versionNonce": 1976392338, + "isDeleted": false, + "text": "user initiates a transaction\nthat transaction requires the\ncurrent users authorization.\nFCL will look at the current\nusers authorization hooks, broadcast\nto the authorization hooks the\ntransaction to authorize", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 134 + }, + { + "id": "3IpMkjUGDG9GS1LKr61cL", + "type": "text", + "x": 786.453125, + "y": 1948.5390625, + "width": 403, + "height": 133, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 201813774, + "version": 913, + "versionNonce": 2084695826, + "isDeleted": false, + "text": "HOOK authorization\n{ payload: PAYLOAD (what to actually sign)\n params: {}\n hash: HASH (checksum of payload)\nparamHash: PARAM_HASH\n ix: IX (data used to create payload)\n roles: [PAYER, PROPOSER, AUTHORIZATION]", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 129 + }, + { + "id": "eUE-R38tGtCxC9UOcIVI5", + "type": "arrow", + "x": 1324.109375, + "y": 2088.8828125, + "width": 591.359375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 153273102, + "version": 199, + "versionNonce": 1425282702, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -591.359375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "qC9J4YmM4gkX3IMeBmjov", + "type": "text", + "x": 813.640625, + "y": 2101.765625, + "width": 300, + "height": 342, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 2044839634, + "version": 1531, + "versionNonce": 1870666514, + "isDeleted": false, + "text": "HOOK authorization RESPONSE\n{ status: PENDING\n signature: null\n acct: FLOW_ACCT_NUMBER\n hooks: {\n info: {\n method: \"GET\"\n endpoint: AUTHZ_INFO_URL\n data: {authzId: AUTHZ_ID}\n local: [\n { method: \"IFRAME\"\n endpoint: FRAME_ENDPOINT\n width: WIDTH\n height: HEIGHT\n background: BG_COLOR\n \n \n ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 338 + }, + { + "id": "T4oeBL1mIwCVPHO4iKZrJ", + "type": "line", + "x": 1335.0078125, + "y": 1848.889500473485, + "width": 0, + "height": 933.149562026515, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 1533478926, + "version": 2063, + "versionNonce": 137336142, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 933.149562026515 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "3OGsOl0sZHOJXVm3y8LXY", + "type": "line", + "x": 1050.796875, + "y": 1691.8828125, + "width": 284.1953125, + "height": 158.766749526515, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 2005477390, + "version": 2654, + "versionNonce": 1385622286, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 284.1953125, + 158.766749526515 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "5LSTVyBPoxUP_HHqm1IKQ", + "type": "arrow", + "x": 738.421875, + "y": 2408.21875, + "width": 588.390625, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 472600718, + "version": 80, + "versionNonce": 1017686350, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 588.390625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Kdv8pHJpP0pY1qAPwbqbF", + "type": "text", + "x": 807.703125, + "y": 2418.9765625, + "width": 216, + "height": 114, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 1413339282, + "version": 1694, + "versionNonce": 1049352850, + "isDeleted": false, + "text": "HOOK info HTTP/GET\n ?authzId=AUTHZ_ID\n\n \n \n ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 110 + }, + { + "id": "blrFHdURkWCjSBmlPwz_C", + "type": "arrow", + "x": 1318.8515625, + "y": 2479.1640625, + "width": 591.359375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1735255054, + "version": 348, + "versionNonce": 614616974, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -591.359375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "RWAxQGxaplssv98HZXX1y", + "type": "text", + "x": 795.15625, + "y": 2484.734375, + "width": 291, + "height": 228, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 2044505042, + "version": 1672, + "versionNonce": 683366866, + "isDeleted": false, + "text": "HOOK info HTTP/GET RESPONSE\n{ status: PENDING\n signature: null\n acct: FLOW_ACCT_NUMBER\n hooks: {\n info: {\n method: \"GET\"\n endpoint: AUTHZ_INFO_URL\n data: {authzId: AUTHZ_ID}\n \n \n ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 224 + }, + { + "id": "g1yWXaOAaP33Q8RH40kkf", + "type": "arrow", + "x": 729.69921875, + "y": 2670.5, + "width": 588.390625, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 482511694, + "version": 161, + "versionNonce": 1686965838, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 588.390625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "3wEk7jBn-ZuqZMMKemuNg", + "type": "text", + "x": 798.98046875, + "y": 2681.0625, + "width": 216, + "height": 114, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 1861818514, + "version": 1774, + "versionNonce": 25492366, + "isDeleted": false, + "text": "HOOK info HTTP/GET\n ?authzId=AUTHZ_ID\n\n \n \n ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 110 + }, + { + "id": "WYl7ztgpr5dhQLjJ8B07m", + "type": "arrow", + "x": 1316.62109375, + "y": 2738.8046875, + "width": 591.359375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1798304142, + "version": 448, + "versionNonce": 761813902, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -591.359375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "DcL_FQz9lcO9xEWoXxaI4", + "type": "text", + "x": 783.23046875, + "y": 2745.7578125, + "width": 291, + "height": 228, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 355219026, + "version": 1817, + "versionNonce": 1083606354, + "isDeleted": false, + "text": "HOOK info HTTP/GET RESPONSE\n{ status: SUCCESS\n signature: SIGNATURE\n acct: FLOW_ACCT_NUMBER\n hooks: {\n info: {\n method: \"GET\"\n endpoint: AUTHZ_INFO_URL\n data: {authzId: AUTHZ_ID}\n \n \n ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 224 + }, + { + "id": "uzLMXeMktDSo2y-f2jumf", + "type": "diamond", + "x": 1248.6796875, + "y": 2507.818359375, + "width": 170.40625, + "height": 109.87890625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1772722898, + "version": 391, + "versionNonce": 292102414, + "isDeleted": false + }, + { + "id": "dVJqOzMa5HaWW6aGEfQ3P", + "type": "text", + "x": 1295.063920454545, + "y": 2536.162997159091, + "width": 75, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 326087502, + "version": 264, + "versionNonce": 1845477074, + "isDeleted": false, + "text": "user\napproved", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "9Wxw9Kdye3C4a3ybdCf2C", + "type": "diamond", + "x": 204.203125, + "y": 191.326171875, + "width": 170.40625, + "height": 109.87890625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1406251534, + "version": 525, + "versionNonce": 1701397138, + "isDeleted": false + }, + { + "id": "7Z5UyLIWE26Xn9gPVwl_5", + "type": "text", + "x": 246.08735795454504, + "y": 210.170809659091, + "width": 84, + "height": 57, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1357168082, + "version": 417, + "versionNonce": 1218082194, + "isDeleted": false, + "text": "user\nclicks\n\"sign in\"", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 53 + }, + { + "id": "SP_PXl00bg8Tw7CZJv9gx", + "type": "text", + "x": 817.171875, + "y": 1797.40625, + "width": 406, + "height": 140, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1267066382, + "version": 930, + "versionNonce": 336558994, + "isDeleted": false, + "text": "The hook needs to immediately return the\nstatus of the authorization. This response\nneeds to also include an info hook that fcl can\npoll for an updated status. Optionally it can also\ninclude a array of local hooks. These local hooks\nwill allow the current user to approve things locally\nvia things like an iframe or a browser extension.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 134 + }, + { + "id": "Ca1eNJOoLAZUjRT0efJAr", + "type": "text", + "x": 299.8671875, + "y": 2462.7265625, + "width": 337, + "height": 80, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1242259278, + "version": 522, + "versionNonce": 639887694, + "isDeleted": false, + "text": "because the \"knowing\" of the transaction\nstatus is done through a backchannel, this\nshould allow us to completely lockdown this\niframe.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 74 + }, + { + "id": "HwC_JIwnKJyv1GD_9tqP9", + "type": "arrow", + "x": 646.7265625, + "y": 2439.4609375, + "width": 190.9296875, + "height": 157.953125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1713436178, + "version": 127, + "versionNonce": 726732626, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 190.9296875, + -157.953125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "G3i7rU2mhmxBDnWjwysoE", + "type": "text", + "x": 1472.515625, + "y": 2523.546875, + "width": 218, + "height": 100, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 850350158, + "version": 188, + "versionNonce": 910315214, + "isDeleted": false, + "text": "fcl polls on a back channel\n(provided by the info hook)\nfor the current status and\nthe signature of the\nauthorization", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 94 + }, + { + "id": "v7iD8qs6xdnzO1F5-us7W", + "type": "arrow", + "x": 1461.078125, + "y": 2522.3984375, + "width": 107.765625, + "height": 85.484375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1418261010, + "version": 56, + "versionNonce": 1349303634, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -107.765625, + -85.484375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "ulTg1CxbGTU_jlq8VErm8", + "type": "arrow", + "x": 1464.7109375, + "y": 2585.453125, + "width": 117.3046875, + "height": 114.78125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1773922322, + "version": 41, + "versionNonce": 979357902, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -117.3046875, + 114.78125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "xfjvdXmyunnjfu5LPyRUA", + "type": "text", + "x": 1356.09375, + "y": 1986.4296875, + "width": 327, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 712589390, + "version": 286, + "versionNonce": 931274190, + "isDeleted": false, + "text": "fcl will include enough information\nfor the provider to recreate the payload\nand verify the hash.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "Qza6vMiZzFUQR5uaGlp1h", + "type": "arrow", + "x": 1350.2109375, + "y": 1995.9921875, + "width": 152.515625, + "height": 46.1015625, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1924713806, + "version": 151, + "versionNonce": 229830094, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -152.515625, + 46.1015625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "VmTKKaZeKqy9c4ubr2W6N", + "type": "arrow", + "x": 1504.3046875, + "y": 2497.6328125, + "width": 396.0078125, + "height": 278.5703125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 178779982, + "version": 364, + "versionNonce": 46231502, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -112.8125, + -244.8359375 + ], + [ + -396.0078125, + -278.5703125 + ] + ], + "lastCommittedPoint": [ + -396.0078125, + -278.5703125 + ] + }, + { + "id": "d_omQJFmqPDltYTA7PQy3", + "type": "text", + "x": 1400.7890625, + "y": 2342.65625, + "width": 149, + "height": 20, + "angle": 1.1645555464937702, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 405322770, + "version": 230, + "versionNonce": 1604592590, + "isDeleted": false, + "text": "backchannel to poll", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 14 + }, + { + "id": "sCx3IIu9HfbFW7qfRD3Lz", + "type": "arrow", + "x": 267.4921875, + "y": 2972.78125, + "width": 448.84375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1161635086, + "version": 516, + "versionNonce": 126493138, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 448.84375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Wc5ekixGRrqwIcLPuZ9zr", + "type": "text", + "x": 280.8359375, + "y": 2989.25, + "width": 384, + "height": 19, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 1454896210, + "version": 892, + "versionNonce": 654253134, + "isDeleted": false, + "text": "fcl.transaction(resp).subscribe(callback)", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "_sfg3w7m47XMR4_8vIpjm", + "type": "arrow", + "x": 709.7578125, + "y": 2917.2265625, + "width": 453.2109375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1289706066, + "version": 490, + "versionNonce": 260825358, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -453.2109375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "BxQM8jjluMDetjp9Jzhsr", + "type": "text", + "x": 397.0546875, + "y": 2921.0859375, + "width": 169, + "height": 19, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 527848398, + "version": 805, + "versionNonce": 1751711442, + "isDeleted": false, + "text": "fcl.send() returns", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "8GKfI1923PfEAusMB8Vyq", + "type": "arrow", + "x": 722.9332386363642, + "y": 3085.691761363636, + "width": 495.80078125, + "height": 0, + "angle": 0, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1847975250, + "version": 874, + "versionNonce": 1821005518, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -495.80078125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "yy929ezo92I2Jcv5rOjWU", + "type": "line", + "x": 612.5426136363628, + "y": 3014.998224431818, + "width": 394.5390625, + "height": 54.5, + "angle": 0, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 1437522126, + "version": 333, + "versionNonce": 28467854, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -394.5390625, + 54.5 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Qq1hIQTw4JWYoC__BTd4Y", + "type": "line", + "x": 218.2513612689387, + "y": 3069.215021306818, + "width": 0, + "height": 323.980291193182, + "angle": 0, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 1138909970, + "version": 1618, + "versionNonce": 395772306, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 323.980291193182 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "0yMRCatIazHXvCVVIaLR0", + "type": "text", + "x": 109.84019886363592, + "y": 3156.931463068182, + "width": 188, + "height": 19, + "angle": 4.71238898038469, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 741773070, + "version": 410, + "versionNonce": 715317454, + "isDeleted": false, + "text": "transaction callback", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "EI6X3C2RLjjuugjHw7Z-r", + "type": "text", + "x": 349.84375, + "y": 3089.0703125, + "width": 188, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 1813946830, + "version": 990, + "versionNonce": 956679442, + "isDeleted": false, + "text": "CALLBACK transaction\n{ status: RECEIVED", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "zhmjLXcNfFqBZfEKiQe5c", + "type": "arrow", + "x": 732.9921875, + "y": 2995.6796875, + "width": 953.9765625, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1249711698, + "version": 399, + "versionNonce": 783459406, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 953.9765625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "st15_wioCusHgJ2E5_Ue9", + "type": "text", + "x": 794.3046875, + "y": 3003.46875, + "width": 188, + "height": 19, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 883500430, + "version": 1933, + "versionNonce": 1181945746, + "isDeleted": false, + "text": "FLOW/GET_TRANSACTION", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "Gtl77oNiCZtRLb3snipe3", + "type": "arrow", + "x": 1680.2890625, + "y": 3125.0859375, + "width": 946.8203125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 757225998, + "version": 590, + "versionNonce": 1107499026, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -946.8203125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "GCImaGPjIA1d_h_meLrB5", + "type": "text", + "x": 784.2265625, + "y": 3131.9453125, + "width": 272, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 520472786, + "version": 2041, + "versionNonce": 1336009358, + "isDeleted": false, + "text": "FLOW/GET_TRANSACTION RESPONSE\n { status: RECEIVED", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "NTGXxvhF94g8lRBlFN0Gj", + "type": "arrow", + "x": 732.78515625, + "y": 3210.29296875, + "width": 953.9765625, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1569466958, + "version": 505, + "versionNonce": 1919450386, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 953.9765625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Skgv5jHJCR5ASTwarEoWl", + "type": "text", + "x": 794.09765625, + "y": 3218.08203125, + "width": 188, + "height": 19, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 811395474, + "version": 2039, + "versionNonce": 607589646, + "isDeleted": false, + "text": "FLOW/GET_TRANSACTION", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "MmPCE991HPZl8hsI24T_0", + "type": "arrow", + "x": 1679.84765625, + "y": 3254.3515625, + "width": 946.8203125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1866686418, + "version": 630, + "versionNonce": 1715528846, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -946.8203125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "vdTbySx1toyPeqIiTfJtI", + "type": "text", + "x": 783.78515625, + "y": 3260.8125, + "width": 272, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 553696846, + "version": 2109, + "versionNonce": 1510280146, + "isDeleted": false, + "text": "FLOW/GET_TRANSACTION RESPONSE\n { status: SEALED", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "eid6-y7brbopEetUriCoV", + "type": "arrow", + "x": 712.228515625, + "y": 3343.537286931818, + "width": 495.80078125, + "height": 0, + "angle": 0, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1083048270, + "version": 923, + "versionNonce": 847634898, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -495.80078125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "dEBoWk9-IXVo658JiIHfZ", + "type": "text", + "x": 339.1390269886358, + "y": 3347.111150568182, + "width": 188, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 1481114258, + "version": 1049, + "versionNonce": 1903619090, + "isDeleted": false, + "text": "CALLBACK transaction\n{ status: SEALED", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "Tl5PuHgh0Nvsdr9lPvJb2", + "type": "line", + "x": 209.498046875, + "y": 55.55078125, + "width": 397.509765625, + "height": 54.8193359375, + "angle": 0, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 1951999630, + "version": 92, + "versionNonce": 1153143506, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 397.509765625, + -54.8193359375 + ] + ], + "lastCommittedPoint": null + } + ], + "appState": { + "viewBackgroundColor": "#ffffff" + } +} \ No newline at end of file diff --git a/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v1.png b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v1.png new file mode 100644 index 0000000000..6c09faa2f4 Binary files /dev/null and b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v1.png differ diff --git a/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v2.excalidraw b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v2.excalidraw new file mode 100644 index 0000000000..f98e361f47 --- /dev/null +++ b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v2.excalidraw @@ -0,0 +1,3612 @@ +{ + "type": "excalidraw", + "version": 1, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "X82DstJUEARnSITNXvNB6", + "type": "text", + "x": 233.3046875, + "y": -169.7421875, + "width": 45, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 136086990, + "version": 231, + "versionNonce": 1135402510, + "isDeleted": false, + "text": "dApp", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "xH1RqhYL11nkjC3X_8IG6", + "type": "text", + "x": 706.36328125, + "y": -167.02734375, + "width": 24, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1617085842, + "version": 242, + "versionNonce": 1084379602, + "isDeleted": false, + "text": "fcl", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "GEnoVsC2cgiSNqlsaoL9h", + "type": "text", + "x": 1011.1484375, + "y": -169.0859375, + "width": 77, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1943500494, + "version": 489, + "versionNonce": 469664274, + "isDeleted": false, + "text": "provider", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "5BoO927donURMIR02xknP", + "type": "text", + "x": 1344.03515625, + "y": -170.87890625, + "width": 99, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 695961166, + "version": 424, + "versionNonce": 575018382, + "isDeleted": false, + "text": "handshake", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "BTAcvlT27MyZLn5RUNnfk", + "type": "line", + "x": 251.87529592803025, + "y": -138.464902935606, + "width": 0, + "height": 3537.261777935606, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 1484860622, + "version": 1714, + "versionNonce": 299491794, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 3537.261777935606 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "2CwkGH75FWSk_nFRQq78l", + "type": "line", + "x": 722.207741477273, + "y": -137.5621448863635, + "width": 0, + "height": 3503.9762073863635, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 2003048206, + "version": 1850, + "versionNonce": 1851062674, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 3503.9762073863635 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "pq9iTWIOg7ZqsjTjUyydo", + "type": "line", + "x": 1399.298295454546, + "y": -146.30208333333326, + "width": 0, + "height": 961.9505208333333, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 1504300430, + "version": 1734, + "versionNonce": 934456334, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 961.9505208333333 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "0vDqMZTf29GvLIjkcMN24", + "type": "line", + "x": 1050.840317234849, + "y": -134.86162405303025, + "width": 0, + "height": 1829.3303740530303, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 1891407570, + "version": 1872, + "versionNonce": 2032272462, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1829.3303740530303 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "9lmBPDK9w0oEEGWepDzny", + "type": "arrow", + "x": 257.1732954545463, + "y": 371.17294034090924, + "width": 453.7734375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1244921938, + "version": 750, + "versionNonce": 729298062, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 453.7734375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "-FvsrMYPf0xc-m5CxcwiW", + "type": "rectangle", + "x": 749.8466796875, + "y": 367.115234375, + "width": 760.62890625, + "height": 518.2880859375, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1534813390, + "version": 883, + "versionNonce": 589341394, + "isDeleted": false + }, + { + "id": "hO7j8hOrCRU2U3wwsSLzj", + "type": "text", + "x": 371.7230113636364, + "y": 381.8902698863636, + "width": 169, + "height": 19, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1445008718, + "version": 406, + "versionNonce": 509369810, + "isDeleted": false, + "text": "fcl.authenticate()", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "ikPzB7NmlgsCiM7h48wzz", + "type": "text", + "x": 763.755681818182, + "y": 339.43146306818176, + "width": 48, + "height": 20, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1341841742, + "version": 210, + "versionNonce": 123861010, + "isDeleted": false, + "text": "iframe", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 14 + }, + { + "id": "6My7tLh7S7YLT57zWx_vE", + "type": "arrow", + "x": 727.8359375000005, + "y": 390.31356534090924, + "width": 21.8359375, + "height": 0.484375, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1351137682, + "version": 1020, + "versionNonce": 1616856910, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 21.8359375, + 0.484375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "yvj6VuyeHRCPi_vyel0r5", + "type": "arrow", + "x": 759.4580078125, + "y": 394.65447443181824, + "width": 618.2982954545455, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1823087634, + "version": 419, + "versionNonce": 1799559378, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 618.2982954545455, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "hR3478POWq3jwTfrLLoWQ", + "type": "text", + "x": 1066.388494318183, + "y": 407.9277343750001, + "width": 300, + "height": 76, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1005826318, + "version": 709, + "versionNonce": 208691790, + "isDeleted": false, + "text": "HTTP/GET handshake.com/authorize\n ?l6n=dapp.com\n &nonce=NONCE\n &scope=email", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 72 + }, + { + "id": "ElxdXQ7lbC9ExIaIWTu0f", + "type": "diamond", + "x": 1319.576171875, + "y": 412.4609375, + "width": 159.53125, + "height": 109.62890625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 990579794, + "version": 590, + "versionNonce": 1792067150, + "isDeleted": false + }, + { + "id": "UEi0jEievAhBXhf9fLfIU", + "type": "text", + "x": 1365.3583984374995, + "y": 434.14897017045473, + "width": 75, + "height": 57, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1747693518, + "version": 604, + "versionNonce": 2084572562, + "isDeleted": false, + "text": "user\nselects\nprovider", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 53 + }, + { + "id": "bNLRMaNe0HSIX5yffdAPN", + "type": "arrow", + "x": 1383.5680930397734, + "y": 525.4327947443182, + "width": 322.00390625, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 782498958, + "version": 495, + "versionNonce": 1929257166, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -322.00390625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "kLg5eP6E82X_bbmIMxEVT", + "type": "text", + "x": 1099.349875710228, + "y": 528.697265625, + "width": 356, + "height": 95, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 132491342, + "version": 1386, + "versionNonce": 1544264466, + "isDeleted": false, + "text": "HTTP/GET provider.com/authorize\n ?l6n=dapp.com\n &nonce=NONCE\n &redirect=handshake.com/callback\n &scope=email", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 91 + }, + { + "id": "4e1gnzS6KGy9FpVvwsE0y", + "type": "diamond", + "x": 966.4159268465914, + "y": 543.5696022727273, + "width": 170.40625, + "height": 109.87890625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1434665934, + "version": 431, + "versionNonce": 459520654, + "isDeleted": false + }, + { + "id": "J-7KvrPQ_dcUDyCit0wrN", + "type": "text", + "x": 989.5032848011365, + "y": 572.0363103693185, + "width": 122, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 256530706, + "version": 293, + "versionNonce": 162889042, + "isDeleted": false, + "text": "user\nauthenticates", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "f__AKQ5JuFy95O3dHP60q", + "type": "arrow", + "x": 1053.525390625, + "y": 675.4022549715908, + "width": 299.701349431818, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 452536210, + "version": 331, + "versionNonce": 2119654418, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -299.701349431818, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "z3HYPBdyJe3D9Z5YmvVa7", + "type": "text", + "x": 790.5197088068185, + "y": 679.21875, + "width": 253, + "height": 171, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 324942094, + "version": 1118, + "versionNonce": 1074274254, + "isDeleted": false, + "text": "JS/postMessage dapp.com\n{ type: \"FLOW::AUTHN::RESP\"\n acct: FLOW_ACCT_NUMBER\n pacct: PROVIDER_FLOW_ACCT\n code: CODE\n exp: WHEN_CODE_EXPIRES\n hks: HOOKS_URL\n nonce: NONCE\n l6n: dapp.com", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 167 + }, + { + "id": "J_YK6v96uJRCM-Mfcd4fX", + "type": "arrow", + "x": 747.220525568182, + "y": 751.5370205965908, + "width": 22.13671875, + "height": 0.50390625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1175863054, + "version": 466, + "versionNonce": 341474066, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -22.13671875, + 0.50390625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "z1nKyn4-r_NwUhKly50Dn", + "type": "arrow", + "x": 257.8700284090918, + "y": -29.200639204545496, + "width": 454.40234375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 158142606, + "version": 413, + "versionNonce": 1555938254, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 454.40234375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "vbN6hJoyYF5gPVEd-8rbE", + "type": "text", + "x": 315.75958806818187, + "y": -20.711292613636346, + "width": 347, + "height": 19, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1494716046, + "version": 389, + "versionNonce": 745067346, + "isDeleted": false, + "text": "fcl.currentUser().subscribe(callback)", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "ZdYenok5PgTqBOZGqWJ9T", + "type": "arrow", + "x": 710.2102272727283, + "y": 87.11186079545473, + "width": 495.80078125, + "height": 0, + "angle": 0, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1636347534, + "version": 628, + "versionNonce": 1593011346, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -495.80078125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "uBoSR15InMuxDFczmXPNl", + "type": "text", + "x": 375.4508167613635, + "y": 92.19202769886363, + "width": 188, + "height": 171, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 599148370, + "version": 961, + "versionNonce": 1115417294, + "isDeleted": false, + "text": "CALLBACK currentUser\n{ acct: null\n verified: false\n name: null\n avatar: null\n hooks: null\n provider: null\n \n ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 167 + }, + { + "id": "kuvYgoF80yizx2t7l1_Wu", + "type": "arrow", + "x": 253.6885653409098, + "y": -108.1796875, + "width": 458.5, + "height": 0.1015625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 92803918, + "version": 196, + "versionNonce": 1433473550, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 458.5, + -0.1015625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "M05GYmSmMRsGs8ba8L4NE", + "type": "text", + "x": 295.52734375, + "y": -99.0752840909091, + "width": 375, + "height": 19, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1794015378, + "version": 360, + "versionNonce": 2127083790, + "isDeleted": false, + "text": "fcl.config().set(\"authn.scope\", \"email\")", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "H2GMhSuYq7R82OOAh6mQU", + "type": "line", + "x": 209.55959990530283, + "y": 53.17418323863649, + "width": 0, + "height": 1595.1148792613635, + "angle": 0, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 1272655506, + "version": 1102, + "versionNonce": 985401938, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1595.1148792613635 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "bl1HxYodwSGdHcwgLAmHu", + "type": "text", + "x": 100.953125, + "y": 140.890625, + "width": 188, + "height": 19, + "angle": 4.71238898038469, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 341119374, + "version": 231, + "versionNonce": 1721629646, + "isDeleted": false, + "text": "currentUser callback", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "tpx39Uabm9WmwItnYcdL5", + "type": "arrow", + "x": 728.7411221590909, + "y": 920.90625, + "width": 319.4375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 100270482, + "version": 115, + "versionNonce": 1131109842, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 319.4375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "s3ZENkjpa3X1xnEta75Vc", + "type": "text", + "x": 773.6104403409096, + "y": 922.1803977272724, + "width": 169, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1619662994, + "version": 184, + "versionNonce": 1482080334, + "isDeleted": false, + "text": "HTTP/GET HOOKS_URL\n ?code=CODE", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "GO8hfYa3F6Nt2H5xKQ2hv", + "type": "text", + "x": 1679.064453125, + "y": -178.3564453125, + "width": 38, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 2033488786, + "version": 518, + "versionNonce": 857480850, + "isDeleted": false, + "text": "flow", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "YeYjJP5A3sGBrZExuWzFZ", + "type": "line", + "x": 1700.257930871212, + "y": -155.798828125, + "width": 0, + "height": 3436.556640625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 172459026, + "version": 1738, + "versionNonce": 2133090578, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 3436.556640625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "pPk2e2mIzDd-J2s2YNg_L", + "type": "arrow", + "x": 730.3025568181819, + "y": 893.6747159090908, + "width": 958.05078125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1066210830, + "version": 146, + "versionNonce": 31432782, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 958.05078125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "lodWMrmO71NS9ONwZCs22", + "type": "text", + "x": 1291.889825994319, + "y": 897.4580078125, + "width": 291, + "height": 19, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 2114953742, + "version": 302, + "versionNonce": 953841870, + "isDeleted": false, + "text": "FLOW/SCRIPT GET_FLOW_ACCT_HOOKS", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "MrmoALjMi8PE8-Y0jNJqr", + "type": "arrow", + "x": 1044.0951704545455, + "y": 979.98046875, + "width": 310.8046875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 2128973778, + "version": 91, + "versionNonce": 1168364434, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -310.8046875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "0idZBeC9LrWuHVBCFoGkf", + "type": "text", + "x": 737.434037642046, + "y": 993.0625000000036, + "width": 441, + "height": 171, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1030981714, + "version": 1125, + "versionNonce": 1028761294, + "isDeleted": false, + "text": "HTTP/GET HOOKS_URL RESPONSE\n { identity: IDENTITY {\n email: EMAIL (because requested in scope)\n provider: {\n providerId: PROVIDER_FLOW_ACCT\n uid: UID (provider specific id for acct)\n hooks: HOOKS_URL\n hooks: { /* private hooks */ }\n ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 167 + }, + { + "id": "ASD61pbFPqloPUWkna7UU", + "type": "arrow", + "x": 1687.390625, + "y": 1198.1015625, + "width": 957.0078125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 263596690, + "version": 122, + "versionNonce": 904029838, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -957.0078125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "zSn4Y-uN2zPsPLBeaHy8z", + "type": "text", + "x": 1086.66512784091, + "y": 1216.2997159090914, + "width": 431, + "height": 304, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1025231886, + "version": 1091, + "versionNonce": 1242215246, + "isDeleted": false, + "text": "FLOW/SCRIPT GET_FLOW_ACCT_HOOKS RESPONSE\n { identity: IDENTITY {\n acct: FLOW_ACCT_NUMBER\n name: NAME\n avatar: AVATAR\n bio: BIO\n providers: [{\n providerId: PROVIDER_ID\n uid: UID (provider specific id for acct)\n hooks: HOOKS_URL\n hooks:\n authorizations: [{\n method: \"POST\"\n endpoint: \"provider.com/authorization\"\n data: {id: UID}\n ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 300 + }, + { + "id": "um7BoVKD9JypyLYQYzSFM", + "type": "line", + "x": 1193.5969460227266, + "y": 992.6349431818178, + "width": 0, + "height": 185.96875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1709236178, + "version": 162, + "versionNonce": 532411538, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 185.96875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Z8pExVkRYjlrhnS37T4QL", + "type": "line", + "x": 1202.0539772727266, + "y": 993.8781960227268, + "width": 0, + "height": 185.96875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2138879502, + "version": 199, + "versionNonce": 1100535182, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 185.96875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "0FrYhj3Gu1xlamFh5jKJz", + "type": "line", + "x": 1536.2606534090905, + "y": 1218.383522727273, + "width": 0, + "height": 262.8203125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 118646478, + "version": 431, + "versionNonce": 933720210, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 262.8203125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "iS-XZzhRH3CFhprUzLn6r", + "type": "line", + "x": 1542.2780539772725, + "y": 1218.074928977273, + "width": 0, + "height": 262.8203125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 517200722, + "version": 453, + "versionNonce": 221452686, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 262.8203125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "yqLmKs0TNdQEHDNJp__k6", + "type": "text", + "x": 1156.6491477272725, + "y": 1060.1129261363637, + "width": 130, + "height": 40, + "angle": 1.5707963267948966, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1226796622, + "version": 177, + "versionNonce": 1433499666, + "isDeleted": false, + "text": "Provider Specific\nPrivate Hooks", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "AaenfKnC9j29RCeA0EyPr", + "type": "line", + "x": 1184.1882102272725, + "y": 990.1502130681818, + "width": 19.17578125, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 950312082, + "version": 117, + "versionNonce": 244271630, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 19.17578125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "T4N-w2KkZkqd5HNSam4rF", + "type": "line", + "x": 1181.8386008522725, + "y": 1176.8110795454547, + "width": 19.17578125, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 134665298, + "version": 143, + "versionNonce": 1550624210, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 19.17578125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "lRiygRl6NILx4OZA0zSgl", + "type": "text", + "x": 1518.4811789772725, + "y": 1315.964488636364, + "width": 94, + "height": 40, + "angle": 1.5707963267948966, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1665507406, + "version": 343, + "versionNonce": 1716489810, + "isDeleted": false, + "text": "OnChain\nPublic Hooks", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "4mtya57_IVob6kqyppHqS", + "type": "line", + "x": 1521.9618252840905, + "y": 1217.309303977273, + "width": 19.17578125, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1059044562, + "version": 269, + "versionNonce": 318027726, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 19.17578125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "OZw9Wl9s0eXouUyoTFXUG", + "type": "line", + "x": 1521.577237215909, + "y": 1479.95703125, + "width": 19.17578125, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 82386062, + "version": 284, + "versionNonce": 1303245842, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 19.17578125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Hjl-IY-0lXFp7XFV0gYUs", + "type": "arrow", + "x": 713.2150213068189, + "y": 1236.5823863636356, + "width": 495.80078125, + "height": 0, + "angle": 0, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 2095221074, + "version": 694, + "versionNonce": 1556582738, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -495.80078125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "U2hEd78EtsQOXYbHgGMY4", + "type": "text", + "x": 265.84108664772725, + "y": 1242.5240589488676, + "width": 403, + "height": 418, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 526576846, + "version": 1349, + "versionNonce": 1016692494, + "isDeleted": false, + "text": "CALLBACK currentUser\n{ acct: FLOW_ACCT_NUMBER\n verified: true\n name: NAME\n avatar: AVATAR\n email: EMAIL\n hooks: {\n authorizations: [{\n method: \"POST\"\n endpoint: \"provider.com/authorization\"\n data: {id: UID}\n provider: {\n providerId: PROVIDER_ID\n uid: UID\n hooks: HOOKS_URL\n providers: [{\n providerId: PROVIDER_ID\n uid: UID\n hooks: HOOKS_URL\n ]\n \n ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 414 + }, + { + "id": "nyHbdI1Y5GBfMmi1zZxfi", + "type": "line", + "x": 704.96875, + "y": 920.3565340909091, + "width": 0.8274147727272521, + "height": 258.49431818181813, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2039216530, + "version": 396, + "versionNonce": 392936590, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -0.8274147727272521, + 258.49431818181813 + ] + ], + "lastCommittedPoint": [ + -0.8274147727272521, + 258.49431818181813 + ] + }, + { + "id": "mjT8vnwL-WYLTTVhQf_u2", + "type": "line", + "x": 701.1210937499995, + "y": 920.296164772727, + "width": 0.8274147727272521, + "height": 258.49431818181813, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1734622162, + "version": 474, + "versionNonce": 1960228878, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -0.8274147727272521, + 258.49431818181813 + ] + ], + "lastCommittedPoint": [ + -0.8274147727272521, + 258.49431818181813 + ] + }, + { + "id": "qBQNXmZYHaiAza70BKW9Z", + "type": "line", + "x": 711.6413352272727, + "y": 919.1207386363636, + "width": 11.864346590909122, + "height": 1.281960227272748, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 374289614, + "version": 79, + "versionNonce": 1181954958, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -11.864346590909122, + 1.281960227272748 + ] + ], + "lastCommittedPoint": [ + -11.864346590909122, + 1.281960227272748 + ] + }, + { + "id": "ZiyIGma4qyuADMTHFSJkG", + "type": "line", + "x": 714.4928977272727, + "y": 1174.9339488636365, + "width": 15.230823863636374, + "height": 0.7102272727270247, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1949701202, + "version": 23, + "versionNonce": 1245209550, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -15.230823863636374, + 0.7102272727270247 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Ogp527Unhhs3_237MbyvS", + "type": "text", + "x": 521.5042613636359, + "y": 1032.1960227272734, + "width": 307, + "height": 40, + "angle": 4.71238898038469, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1686109714, + "version": 322, + "versionNonce": 885254606, + "isDeleted": false, + "text": "If This Request Returns Status 200\nThe Account Is Considered Verified", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "AgLm-3O6LxnLLTdCrmZzK", + "type": "line", + "x": 174.6044034090911, + "y": 1249.8771306818192, + "width": 0.13849431818181301, + "height": 360.61789772727263, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1354660814, + "version": 701, + "versionNonce": 404755214, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -0.13849431818181301, + 360.61789772727263 + ] + ], + "lastCommittedPoint": [ + -0.8274147727272521, + 258.49431818181813 + ] + }, + { + "id": "JaCl70erlODzBwvSCq6hf", + "type": "line", + "x": 170.66086647727246, + "y": 1249.8167613636372, + "width": 0, + "height": 363.73508522727184, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2102554642, + "version": 806, + "versionNonce": 1863709394, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 363.73508522727184 + ] + ], + "lastCommittedPoint": [ + -0.8274147727272521, + 258.49431818181813 + ] + }, + { + "id": "Ap4e4vPdboFvWfekpXnP5", + "type": "line", + "x": 181.27698863636408, + "y": 1248.641335227274, + "width": 11.864346590909122, + "height": 1.281960227272748, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 190435854, + "version": 158, + "versionNonce": 1899462670, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -11.864346590909122, + 1.281960227272748 + ] + ], + "lastCommittedPoint": [ + -11.864346590909122, + 1.281960227272748 + ] + }, + { + "id": "VD0dZ49pYA5zsWglDlPVy", + "type": "line", + "x": 182.90696022727315, + "y": 1616.0703125000061, + "width": 15.230823863636374, + "height": 0.7102272727270247, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1299094994, + "version": 198, + "versionNonce": 724476558, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -15.230823863636374, + 0.7102272727270247 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "n5NmVSRkP5wnLlL6p5rYH", + "type": "text", + "x": -54.67329545454572, + "y": 1378.16548295455, + "width": 332, + "height": 100, + "angle": 4.71238898038469, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2091933774, + "version": 843, + "versionNonce": 1776913362, + "isDeleted": false, + "text": "Merges the Public (onChain)\nand Private (provider) hooks\n(deep merge last wins, public then private)\nNOTE: Data and format of what\nis exposed to the subscriber may change", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 94 + }, + { + "id": "Kk39gnjHIQOItun-PEroJ", + "type": "line", + "x": 93.5390625, + "y": 1701.2890625, + "width": 777.8203125, + "height": 0, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 30, + "seed": 1667327698, + "version": 252, + "versionNonce": 1399272338, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 777.8203125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "BVHNCKtE39YcX7rl-NYFk", + "type": "line", + "x": 893.0234375, + "y": 1676.5390625, + "width": 19.234375, + "height": 47.828125, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 30, + "seed": 473551378, + "version": 151, + "versionNonce": 1619330702, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -19.234375, + 47.828125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "44w3pOz5LP8Y2i-OOCDqv", + "type": "line", + "x": 908.25, + "y": 1671.5546875, + "width": 19.234375, + "height": 47.828125, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 30, + "seed": 547271186, + "version": 189, + "versionNonce": 455012690, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -19.234375, + 47.828125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "D8AhlJ8rs-11YCcNtGA--", + "type": "line", + "x": 917.47265625, + "y": 1703.1171875, + "width": 834.63671875, + "height": 0, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 30, + "seed": 2092212558, + "version": 334, + "versionNonce": 1602290894, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 834.63671875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Y701Cljlpxs3VNvaw_mdc", + "type": "text", + "x": 328.625, + "y": -155.5546875, + "width": 303, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1570471314, + "version": 242, + "versionNonce": 993528466, + "isDeleted": false, + "text": "Tell fcl when we authenticate we want\nthe users email if its available", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "fEsObWhcjK5P6WDvXVkGh", + "type": "text", + "x": 336.1640625, + "y": -69.6640625, + "width": 266, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 23237326, + "version": 154, + "versionNonce": 542094030, + "isDeleted": false, + "text": "call the callback with the current\nusers info anytime it changes", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "msFgx92-3AP5XrGwSDBLA", + "type": "text", + "x": 293.9609375, + "y": 46.890625, + "width": 407, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 503214286, + "version": 275, + "versionNonce": 233726930, + "isDeleted": false, + "text": "subscription callbacks are always called immediately\nwith what we currently know, in this case nothing", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "x6jn8h4W47vbsNP76m9t7", + "type": "text", + "x": 301.15625, + "y": 304.3203125, + "width": 340, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 215811470, + "version": 183, + "versionNonce": 370821518, + "isDeleted": false, + "text": "initiate the authentication sequence.\nfcl will inject an iframe into the application\nshowing the handshake interface", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "efFHHKuH6DUI6OL--FrFK", + "type": "text", + "x": 115.1328125, + "y": -216.4453125, + "width": 267, + "height": 40, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1880771794, + "version": 105, + "versionNonce": 2020042194, + "isDeleted": false, + "text": "consumer of fcl\n(the thing the user wants to use)", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "fpX9FAuT2DJsHXOS_rwYl", + "type": "text", + "x": 641.5859375, + "y": -191.8359375, + "width": 169, + "height": 20, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 925850130, + "version": 292, + "versionNonce": 792939790, + "isDeleted": false, + "text": "the flow client library", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 14 + }, + { + "id": "ahlNEXVqBb6yvOSHwMkjm", + "type": "text", + "x": 868.6171875, + "y": -208.4453125, + "width": 346, + "height": 40, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 873373778, + "version": 549, + "versionNonce": 1942254930, + "isDeleted": false, + "text": "the authn and authz provider\n(wallet - where the users private keys live)", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "10hplQ_DHSsUGighRZYHn", + "type": "text", + "x": 1255.3671875, + "y": -212.2890625, + "width": 261, + "height": 40, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1701238610, + "version": 734, + "versionNonce": 1950668050, + "isDeleted": false, + "text": "open source static service\nthat knows what providers exist", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "NyJ8HxoQf_0obIZfAzAwV", + "type": "text", + "x": 1585.7734375, + "y": -196.234375, + "width": 195, + "height": 20, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1508736146, + "version": 900, + "versionNonce": 1744863378, + "isDeleted": false, + "text": "the flow blockchain itself", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 14 + }, + { + "id": "XohdwJdJwugMecg0mWWrL", + "type": "text", + "x": 1060.3828125, + "y": 159.0048828125, + "width": 337, + "height": 200, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 689557134, + "version": 1618, + "versionNonce": 1200972814, + "isDeleted": false, + "text": "The user is shown the handshake service\nwhere they can pick which provider they \nwant to use. Once they select the\nprovider they are redirected to\nsaid provider where they will authenticate\nand be redirected back to the handshake \nservice. The handshake service then\ncompletes the handshake by sending an\nevent to the main frame with the details\nprovided by the provider.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 194 + }, + { + "id": "PA-OFs620jOJH6zBUwVhQ", + "type": "text", + "x": 1071.4267578125, + "y": 669, + "width": 295, + "height": 200, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 300948174, + "version": 1178, + "versionNonce": 1258392846, + "isDeleted": false, + "text": "fcl might eventually need to check\na contract on the\nPROVIDER_FLOW_ACCT\nto verify things like the HOOKS_URL.\n\nl6n and nonce must match the ones\nsupplied in the challenge\n\nan exp of \"0\" will be taken as\n\"does not expire\"", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 194 + }, + { + "id": "fHu_Ej57UFKhjwQiH9caw", + "type": "text", + "x": 280.8388671875, + "y": 777.2763671875, + "width": 356, + "height": 180, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 179421582, + "version": 692, + "versionNonce": 925722962, + "isDeleted": false, + "text": "fcl will receive a code and location of where\nto find the hooks for the given provider. It\nshould also receive a flow acct number for\nthe given authenticated user if it exists.\nWith this information we can then fetch the\nprivate hooks (from the provider) and the\nthe public hooks from onChain. If there is no\nflow acct yet, the provider is responsible for\nalso providing the public hooks.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 174 + }, + { + "id": "NiVUTrKc8zG3S7jPO8z4E", + "type": "text", + "x": 1519.1728515625, + "y": 373.26953125, + "width": 178, + "height": 120, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1018060690, + "version": 591, + "versionNonce": 683364114, + "isDeleted": false, + "text": "To start with we are \nshipping with an iframe\nflow, there are plans\nfor a more advanced\nredirection style flow\nafter v1.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 114 + }, + { + "id": "DNNIurGXx6O6fLDts2gkl", + "type": "text", + "x": -246.296875, + "y": 9.25, + "width": 353, + "height": 45, + "angle": 4.71238898038469, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 30, + "seed": 908119694, + "version": 482, + "versionNonce": 487404558, + "isDeleted": false, + "text": "AUTHENTICATION", + "font": "36px Virgil", + "textAlign": "left", + "baseline": 32 + }, + { + "id": "sVyCt94pEcj9uZhTn9vtv", + "type": "line", + "x": -68.8125, + "y": 230.703125, + "width": 0, + "height": 1421.8046875, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 30, + "seed": 674401486, + "version": 441, + "versionNonce": 1892901330, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1421.8046875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "1nyFcQsUWS7SmqC4Athy0", + "type": "text", + "x": -235.328125, + "y": 1855.15234375, + "width": 328, + "height": 45, + "angle": 4.71238898038469, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 30, + "seed": 1145858130, + "version": 799, + "versionNonce": 254090446, + "isDeleted": false, + "text": "AUTHORIZATION", + "font": "36px Virgil", + "textAlign": "left", + "baseline": 32 + }, + { + "id": "R6pgiMUijRge1kkbrguoO", + "type": "line", + "x": -72.9140625, + "y": 2050.1328125, + "width": 0, + "height": 1341.1875, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 30, + "seed": 1128955342, + "version": 969, + "versionNonce": 574271762, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1341.1875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Xn8RaTdO__vAZuYHGKL5b", + "type": "text", + "x": 261.1953125, + "y": 1913.0625, + "width": 459, + "height": 152, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 1071355726, + "version": 564, + "versionNonce": 1195845518, + "isDeleted": false, + "text": "const resp = await fcl.send([\n sdk.transaction``,\n sdk.authorizations([\n fcl.currentUser().authorization\n ]),\n sdk.proposer(fcl.currentUser().proposer),\n sdk.payer(fcl.currentUser().payerAuthorization)\n])", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 148 + }, + { + "id": "WcLAobcLfNslSdZ7OvolZ", + "type": "arrow", + "x": 263.1796875, + "y": 1912.390625, + "width": 448.84375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1960256466, + "version": 231, + "versionNonce": 122265682, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 448.84375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "DrttEMCTX96FWcYsEC-QM", + "type": "arrow", + "x": 739.0546875, + "y": 1943.5, + "width": 594.2421875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1100047438, + "version": 309, + "versionNonce": 1132748434, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 594.2421875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "qJ7Rcxap34blcAk4L1x73", + "type": "text", + "x": 269.875, + "y": 1763.5078125, + "width": 298, + "height": 140, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 541979470, + "version": 308, + "versionNonce": 1976392338, + "isDeleted": false, + "text": "user initiates a transaction\nthat transaction requires the\ncurrent users authorization.\nFCL will look at the current\nusers authorization hooks, broadcast\nto the authorization hooks the\ntransaction to authorize", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 134 + }, + { + "id": "3IpMkjUGDG9GS1LKr61cL", + "type": "text", + "x": 786.453125, + "y": 1948.5390625, + "width": 403, + "height": 133, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 201813774, + "version": 913, + "versionNonce": 2084695826, + "isDeleted": false, + "text": "HOOK authorization\n{ payload: PAYLOAD (what to actually sign)\n params: {}\n hash: HASH (checksum of payload)\nparamHash: PARAM_HASH\n ix: IX (data used to create payload)\n roles: [PAYER, PROPOSER, AUTHORIZATION]", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 129 + }, + { + "id": "eUE-R38tGtCxC9UOcIVI5", + "type": "arrow", + "x": 1324.109375, + "y": 2088.8828125, + "width": 591.359375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 153273102, + "version": 199, + "versionNonce": 1425282702, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -591.359375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "qC9J4YmM4gkX3IMeBmjov", + "type": "text", + "x": 813.640625, + "y": 2101.765625, + "width": 300, + "height": 342, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 2044839634, + "version": 1531, + "versionNonce": 1870666514, + "isDeleted": false, + "text": "HOOK authorization RESPONSE\n{ status: PENDING\n signature: null\n acct: FLOW_ACCT_NUMBER\n hooks: {\n info: {\n method: \"GET\"\n endpoint: AUTHZ_INFO_URL\n data: {authzId: AUTHZ_ID}\n local: [\n { method: \"IFRAME\"\n endpoint: FRAME_ENDPOINT\n width: WIDTH\n height: HEIGHT\n background: BG_COLOR\n \n \n ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 338 + }, + { + "id": "T4oeBL1mIwCVPHO4iKZrJ", + "type": "line", + "x": 1335.0078125, + "y": 1848.889500473485, + "width": 0, + "height": 933.149562026515, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 1533478926, + "version": 2063, + "versionNonce": 137336142, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 933.149562026515 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "3OGsOl0sZHOJXVm3y8LXY", + "type": "line", + "x": 1050.796875, + "y": 1691.8828125, + "width": 284.1953125, + "height": 158.766749526515, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 2005477390, + "version": 2654, + "versionNonce": 1385622286, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 284.1953125, + 158.766749526515 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "5LSTVyBPoxUP_HHqm1IKQ", + "type": "arrow", + "x": 738.421875, + "y": 2408.21875, + "width": 588.390625, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 472600718, + "version": 80, + "versionNonce": 1017686350, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 588.390625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Kdv8pHJpP0pY1qAPwbqbF", + "type": "text", + "x": 807.703125, + "y": 2418.9765625, + "width": 216, + "height": 114, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 1413339282, + "version": 1694, + "versionNonce": 1049352850, + "isDeleted": false, + "text": "HOOK info HTTP/GET\n ?authzId=AUTHZ_ID\n\n \n \n ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 110 + }, + { + "id": "blrFHdURkWCjSBmlPwz_C", + "type": "arrow", + "x": 1318.8515625, + "y": 2479.1640625, + "width": 591.359375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1735255054, + "version": 348, + "versionNonce": 614616974, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -591.359375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "RWAxQGxaplssv98HZXX1y", + "type": "text", + "x": 795.15625, + "y": 2484.734375, + "width": 291, + "height": 228, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 2044505042, + "version": 1672, + "versionNonce": 683366866, + "isDeleted": false, + "text": "HOOK info HTTP/GET RESPONSE\n{ status: PENDING\n signature: null\n acct: FLOW_ACCT_NUMBER\n hooks: {\n info: {\n method: \"GET\"\n endpoint: AUTHZ_INFO_URL\n data: {authzId: AUTHZ_ID}\n \n \n ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 224 + }, + { + "id": "g1yWXaOAaP33Q8RH40kkf", + "type": "arrow", + "x": 729.69921875, + "y": 2670.5, + "width": 588.390625, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 482511694, + "version": 161, + "versionNonce": 1686965838, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 588.390625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "3wEk7jBn-ZuqZMMKemuNg", + "type": "text", + "x": 798.98046875, + "y": 2681.0625, + "width": 216, + "height": 114, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 1861818514, + "version": 1774, + "versionNonce": 25492366, + "isDeleted": false, + "text": "HOOK info HTTP/GET\n ?authzId=AUTHZ_ID\n\n \n \n ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 110 + }, + { + "id": "WYl7ztgpr5dhQLjJ8B07m", + "type": "arrow", + "x": 1316.62109375, + "y": 2738.8046875, + "width": 591.359375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1798304142, + "version": 448, + "versionNonce": 761813902, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -591.359375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "DcL_FQz9lcO9xEWoXxaI4", + "type": "text", + "x": 783.23046875, + "y": 2745.7578125, + "width": 291, + "height": 228, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 355219026, + "version": 1817, + "versionNonce": 1083606354, + "isDeleted": false, + "text": "HOOK info HTTP/GET RESPONSE\n{ status: SUCCESS\n signature: SIGNATURE\n acct: FLOW_ACCT_NUMBER\n hooks: {\n info: {\n method: \"GET\"\n endpoint: AUTHZ_INFO_URL\n data: {authzId: AUTHZ_ID}\n \n \n ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 224 + }, + { + "id": "uzLMXeMktDSo2y-f2jumf", + "type": "diamond", + "x": 1248.6796875, + "y": 2507.818359375, + "width": 170.40625, + "height": 109.87890625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1772722898, + "version": 391, + "versionNonce": 292102414, + "isDeleted": false + }, + { + "id": "dVJqOzMa5HaWW6aGEfQ3P", + "type": "text", + "x": 1295.063920454545, + "y": 2536.162997159091, + "width": 75, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 326087502, + "version": 264, + "versionNonce": 1845477074, + "isDeleted": false, + "text": "user\napproved", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "9Wxw9Kdye3C4a3ybdCf2C", + "type": "diamond", + "x": 204.203125, + "y": 191.326171875, + "width": 170.40625, + "height": 109.87890625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1406251534, + "version": 525, + "versionNonce": 1701397138, + "isDeleted": false + }, + { + "id": "7Z5UyLIWE26Xn9gPVwl_5", + "type": "text", + "x": 246.08735795454504, + "y": 210.170809659091, + "width": 84, + "height": 57, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 1357168082, + "version": 417, + "versionNonce": 1218082194, + "isDeleted": false, + "text": "user\nclicks\n\"sign in\"", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 53 + }, + { + "id": "SP_PXl00bg8Tw7CZJv9gx", + "type": "text", + "x": 817.171875, + "y": 1797.40625, + "width": 406, + "height": 140, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1267066382, + "version": 930, + "versionNonce": 336558994, + "isDeleted": false, + "text": "The hook needs to immediately return the\nstatus of the authorization. This response\nneeds to also include an info hook that fcl can\npoll for an updated status. Optionally it can also\ninclude a array of local hooks. These local hooks\nwill allow the current user to approve things locally\nvia things like an iframe or a browser extension.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 134 + }, + { + "id": "Ca1eNJOoLAZUjRT0efJAr", + "type": "text", + "x": 299.8671875, + "y": 2462.7265625, + "width": 337, + "height": 80, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1242259278, + "version": 522, + "versionNonce": 639887694, + "isDeleted": false, + "text": "because the \"knowing\" of the transaction\nstatus is done through a backchannel, this\nshould allow us to completely lockdown this\niframe.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 74 + }, + { + "id": "HwC_JIwnKJyv1GD_9tqP9", + "type": "arrow", + "x": 646.7265625, + "y": 2439.4609375, + "width": 190.9296875, + "height": 157.953125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1713436178, + "version": 127, + "versionNonce": 726732626, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 190.9296875, + -157.953125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "G3i7rU2mhmxBDnWjwysoE", + "type": "text", + "x": 1472.515625, + "y": 2523.546875, + "width": 218, + "height": 100, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 850350158, + "version": 188, + "versionNonce": 910315214, + "isDeleted": false, + "text": "fcl polls on a back channel\n(provided by the info hook)\nfor the current status and\nthe signature of the\nauthorization", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 94 + }, + { + "id": "v7iD8qs6xdnzO1F5-us7W", + "type": "arrow", + "x": 1461.078125, + "y": 2522.3984375, + "width": 107.765625, + "height": 85.484375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1418261010, + "version": 56, + "versionNonce": 1349303634, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -107.765625, + -85.484375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "ulTg1CxbGTU_jlq8VErm8", + "type": "arrow", + "x": 1464.7109375, + "y": 2585.453125, + "width": 117.3046875, + "height": 114.78125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1773922322, + "version": 41, + "versionNonce": 979357902, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -117.3046875, + 114.78125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "xfjvdXmyunnjfu5LPyRUA", + "type": "text", + "x": 1356.09375, + "y": 1986.4296875, + "width": 327, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 712589390, + "version": 286, + "versionNonce": 931274190, + "isDeleted": false, + "text": "fcl will include enough information\nfor the provider to recreate the payload\nand verify the hash.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "Qza6vMiZzFUQR5uaGlp1h", + "type": "arrow", + "x": 1350.2109375, + "y": 1995.9921875, + "width": 152.515625, + "height": 46.1015625, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1924713806, + "version": 151, + "versionNonce": 229830094, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -152.515625, + 46.1015625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "VmTKKaZeKqy9c4ubr2W6N", + "type": "arrow", + "x": 1504.3046875, + "y": 2497.6328125, + "width": 396.0078125, + "height": 278.5703125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 178779982, + "version": 364, + "versionNonce": 46231502, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -112.8125, + -244.8359375 + ], + [ + -396.0078125, + -278.5703125 + ] + ], + "lastCommittedPoint": [ + -396.0078125, + -278.5703125 + ] + }, + { + "id": "d_omQJFmqPDltYTA7PQy3", + "type": "text", + "x": 1400.7890625, + "y": 2342.65625, + "width": 149, + "height": 20, + "angle": 1.1645555464937702, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 405322770, + "version": 230, + "versionNonce": 1604592590, + "isDeleted": false, + "text": "backchannel to poll", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 14 + }, + { + "id": "sCx3IIu9HfbFW7qfRD3Lz", + "type": "arrow", + "x": 267.4921875, + "y": 2972.78125, + "width": 448.84375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1161635086, + "version": 516, + "versionNonce": 126493138, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 448.84375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Wc5ekixGRrqwIcLPuZ9zr", + "type": "text", + "x": 280.8359375, + "y": 2989.25, + "width": 384, + "height": 19, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 1454896210, + "version": 892, + "versionNonce": 654253134, + "isDeleted": false, + "text": "fcl.transaction(resp).subscribe(callback)", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "_sfg3w7m47XMR4_8vIpjm", + "type": "arrow", + "x": 709.7578125, + "y": 2917.2265625, + "width": 453.2109375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1289706066, + "version": 490, + "versionNonce": 260825358, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -453.2109375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "BxQM8jjluMDetjp9Jzhsr", + "type": "text", + "x": 397.0546875, + "y": 2921.0859375, + "width": 169, + "height": 19, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 527848398, + "version": 805, + "versionNonce": 1751711442, + "isDeleted": false, + "text": "fcl.send() returns", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "8GKfI1923PfEAusMB8Vyq", + "type": "arrow", + "x": 722.9332386363642, + "y": 3085.691761363636, + "width": 495.80078125, + "height": 0, + "angle": 0, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1847975250, + "version": 874, + "versionNonce": 1821005518, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -495.80078125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "yy929ezo92I2Jcv5rOjWU", + "type": "line", + "x": 612.5426136363628, + "y": 3014.998224431818, + "width": 394.5390625, + "height": 54.5, + "angle": 0, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 1437522126, + "version": 333, + "versionNonce": 28467854, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -394.5390625, + 54.5 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Qq1hIQTw4JWYoC__BTd4Y", + "type": "line", + "x": 218.2513612689387, + "y": 3069.215021306818, + "width": 0, + "height": 323.980291193182, + "angle": 0, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 1138909970, + "version": 1618, + "versionNonce": 395772306, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 323.980291193182 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "0yMRCatIazHXvCVVIaLR0", + "type": "text", + "x": 109.84019886363592, + "y": 3156.931463068182, + "width": 188, + "height": 19, + "angle": 4.71238898038469, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 0, + "opacity": 100, + "seed": 741773070, + "version": 410, + "versionNonce": 715317454, + "isDeleted": false, + "text": "transaction callback", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "EI6X3C2RLjjuugjHw7Z-r", + "type": "text", + "x": 349.84375, + "y": 3089.0703125, + "width": 188, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 1813946830, + "version": 990, + "versionNonce": 956679442, + "isDeleted": false, + "text": "CALLBACK transaction\n{ status: RECEIVED", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "zhmjLXcNfFqBZfEKiQe5c", + "type": "arrow", + "x": 732.9921875, + "y": 2995.6796875, + "width": 953.9765625, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1249711698, + "version": 399, + "versionNonce": 783459406, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 953.9765625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "st15_wioCusHgJ2E5_Ue9", + "type": "text", + "x": 794.3046875, + "y": 3003.46875, + "width": 188, + "height": 19, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 883500430, + "version": 1933, + "versionNonce": 1181945746, + "isDeleted": false, + "text": "FLOW/GET_TRANSACTION", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "Gtl77oNiCZtRLb3snipe3", + "type": "arrow", + "x": 1680.2890625, + "y": 3125.0859375, + "width": 946.8203125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 757225998, + "version": 590, + "versionNonce": 1107499026, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -946.8203125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "GCImaGPjIA1d_h_meLrB5", + "type": "text", + "x": 784.2265625, + "y": 3131.9453125, + "width": 272, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 520472786, + "version": 2041, + "versionNonce": 1336009358, + "isDeleted": false, + "text": "FLOW/GET_TRANSACTION RESPONSE\n { status: RECEIVED", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "NTGXxvhF94g8lRBlFN0Gj", + "type": "arrow", + "x": 732.78515625, + "y": 3210.29296875, + "width": 953.9765625, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1569466958, + "version": 505, + "versionNonce": 1919450386, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 953.9765625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Skgv5jHJCR5ASTwarEoWl", + "type": "text", + "x": 794.09765625, + "y": 3218.08203125, + "width": 188, + "height": 19, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 811395474, + "version": 2039, + "versionNonce": 607589646, + "isDeleted": false, + "text": "FLOW/GET_TRANSACTION", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "MmPCE991HPZl8hsI24T_0", + "type": "arrow", + "x": 1679.84765625, + "y": 3254.3515625, + "width": 946.8203125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "seed": 1866686418, + "version": 630, + "versionNonce": 1715528846, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -946.8203125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "vdTbySx1toyPeqIiTfJtI", + "type": "text", + "x": 783.78515625, + "y": 3260.8125, + "width": 272, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 553696846, + "version": 2109, + "versionNonce": 1510280146, + "isDeleted": false, + "text": "FLOW/GET_TRANSACTION RESPONSE\n { status: SEALED", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "eid6-y7brbopEetUriCoV", + "type": "arrow", + "x": 712.228515625, + "y": 3343.537286931818, + "width": 495.80078125, + "height": 0, + "angle": 0, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "opacity": 100, + "seed": 1083048270, + "version": 923, + "versionNonce": 847634898, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -495.80078125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "dEBoWk9-IXVo658JiIHfZ", + "type": "text", + "x": 339.1390269886358, + "y": 3347.111150568182, + "width": 188, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 1, + "opacity": 100, + "seed": 1481114258, + "version": 1049, + "versionNonce": 1903619090, + "isDeleted": false, + "text": "CALLBACK transaction\n{ status: SEALED", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "Tl5PuHgh0Nvsdr9lPvJb2", + "type": "line", + "x": 209.498046875, + "y": 55.55078125, + "width": 397.509765625, + "height": 54.8193359375, + "angle": 0, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 4, + "roughness": 0, + "opacity": 100, + "seed": 1951999630, + "version": 92, + "versionNonce": 1153143506, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 397.509765625, + -54.8193359375 + ] + ], + "lastCommittedPoint": null + } + ], + "appState": { + "viewBackgroundColor": "#ffffff" + } +} \ No newline at end of file diff --git a/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v2.png b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v2.png new file mode 100644 index 0000000000..214b20dcbd Binary files /dev/null and b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v2.png differ diff --git a/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v3.1.excalidraw b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v3.1.excalidraw new file mode 100644 index 0000000000..99e16e47aa --- /dev/null +++ b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v3.1.excalidraw @@ -0,0 +1,4201 @@ +{ + "type": "excalidraw", + "version": 1, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "coRgXgxDx_rGztManLJNj", + "type": "line", + "x": 1826.82421875, + "y": 402.9375, + "width": 0, + "height": 630.359375, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 1312138966, + "version": 662, + "versionNonce": 1794938954, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 630.359375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "M0qjT3k6XLsaUrGM5l_Jk", + "type": "text", + "x": 1762.546875, + "y": 1093.79296875, + "width": 128, + "height": 35, + "angle": 1.5707963267948966, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 590355926, + "version": 850, + "versionNonce": 1122986326, + "isDeleted": false, + "text": "Challenge", + "font": "28px Virgil", + "textAlign": "left", + "baseline": 25 + }, + { + "id": "LLYkOAmehERqY2yfQ4-mS", + "type": "line", + "x": 1824.30078125, + "y": 1033.98828125, + "width": 1701.3046875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 1128019606, + "version": 124, + "versionNonce": 890699530, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -1701.3046875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "4jiRvxEhO_mq0VrMwSgL3", + "type": "line", + "x": 118.14453125, + "y": 2993.164306640625, + "width": 0, + "height": 300.202880859375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1278829846, + "version": 1995, + "versionNonce": 1120731158, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 300.202880859375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "BGN-MZTIw8KwbM7X_KkY2", + "type": "line", + "x": 118.302734375, + "y": 1008.3447265625, + "width": 0, + "height": 603.4599609375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 363991382, + "version": 867, + "versionNonce": 805282966, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 603.4599609375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "un0BO73k-S9mWt9N8vfWt", + "type": "text", + "x": 108.84765625, + "y": 219.35546875, + "width": 45, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1641930582, + "version": 151, + "versionNonce": 957137290, + "isDeleted": false, + "text": "dApp", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "chwyHplpBxENYV0oFYUJ5", + "type": "text", + "x": 506.296875, + "y": 218.80859375, + "width": 24, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 377033738, + "version": 190, + "versionNonce": 2062019082, + "isDeleted": false, + "text": "fcl", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "A_YGfR-4aRXOHoeUej2FH", + "type": "text", + "x": 871.4375, + "y": 219.44921875, + "width": 77, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1848970902, + "version": 158, + "versionNonce": 567364246, + "isDeleted": false, + "text": "provider", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "4cHNGYbFyLPBSmllMxnqG", + "type": "text", + "x": 1277.8984375, + "y": 218.390625, + "width": 38, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 544904458, + "version": 159, + "versionNonce": 2049224662, + "isDeleted": false, + "text": "flow", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "jacsVi7b_9LRNYvWMBgax", + "type": "text", + "x": 1635.7578125, + "y": 215.31640625, + "width": 99, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 594396554, + "version": 142, + "versionNonce": 1415635850, + "isDeleted": false, + "text": "handshake", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "ryyCHYiHt6qIijgNyuznw", + "type": "line", + "x": 1686.97265625, + "y": 242.30859375, + "width": 0, + "height": 1078.56640625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 20, + "seed": 949453258, + "version": 550, + "versionNonce": 656589526, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1078.56640625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "PdSxGy2bbk0IQ6U3sbaaO", + "type": "line", + "x": 1295.9375, + "y": 250.052734375, + "width": 0, + "height": 4522.494140625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 20, + "seed": 1141283658, + "version": 1407, + "versionNonce": 1476993046, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 4522.494140625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "q4v_gQ0kus8ABlQjh2qfU", + "type": "line", + "x": 907.69921875, + "y": 252.095703125, + "width": 0, + "height": 4519.337890625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 20, + "seed": 718607446, + "version": 1343, + "versionNonce": 561951690, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 4519.337890625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "sD6hFB9Fg_yS4wv-kXCd7", + "type": "line", + "x": 518.66015625, + "y": 250.041015625, + "width": 0, + "height": 4521.998046875, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 20, + "seed": 1951527242, + "version": 1276, + "versionNonce": 1296645718, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 4521.998046875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "qk9t0Pn0gqz1vMQ3-PPVs", + "type": "rectangle", + "x": 495.0703125, + "y": 1090.64453125, + "width": 1236.47265625, + "height": 518.51953125, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 40, + "seed": 1052625546, + "version": 134, + "versionNonce": 1816547594, + "isDeleted": false + }, + { + "id": "WAjcohb9hozxf_x_K2Q70", + "type": "line", + "x": 127.6796875, + "y": 247.509765625, + "width": 0, + "height": 4524.509765625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 20, + "seed": 451624970, + "version": 1267, + "versionNonce": 1700701898, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 4524.509765625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "1uT7ljw353mq_pBF1krUo", + "type": "arrow", + "x": 132.875, + "y": 330.609375, + "width": 379.125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 453198294, + "version": 247, + "versionNonce": 2111004886, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 379.125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "9_RwWHhR4z7t6UN2sMXZp", + "type": "text", + "x": -178.890625, + "y": 263.02734375, + "width": 268, + "height": 200, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1786272714, + "version": 1433, + "versionNonce": 1274253526, + "isDeleted": false, + "text": "Scopes allow dApps to request\nadditional (private) information\nfrom the provider. They will be\nsent along to the provider during\nthe initial challenge. If the\n user has decided to allow the\nprovider to share the information,\nsaid information will be available\nin the providers private hooks\nrequest.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 194 + }, + { + "id": "3pLEjtL6UX46WlYKdWkJD", + "type": "text", + "x": 135.88671875, + "y": 337.0390625, + "width": 422, + "height": 38, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 251468054, + "version": 520, + "versionNonce": 1557952146, + "isDeleted": false, + "text": "fcl.config()\n .put(\"challenge.scope\", \"email+publicKey\")", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "fbb9O2zUQnZNHHgxrXulZ", + "type": "arrow", + "x": 134.09765625, + "y": 401.00390625, + "width": 379.125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2097487190, + "version": 372, + "versionNonce": 526001482, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 379.125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "V2OPDQAf4l7Ba2i58gZ1n", + "type": "text", + "x": 142.6640625, + "y": 412.84765625, + "width": 431, + "height": 38, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 392596234, + "version": 771, + "versionNonce": 298348434, + "isDeleted": false, + "text": "fcl.config()\n .put(\"send.scope\", \"https://accessNodeUrl\")", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "KuTZ_hrxsU6Nuq1hi_Pi9", + "type": "line", + "x": 115.57421875, + "y": 278.06640625, + "width": 0, + "height": 186.05859375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1103091658, + "version": 80, + "versionNonce": 777121290, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 186.05859375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "XJ4RlWOEKco-1mBvuKISA", + "type": "line", + "x": 67.6875, + "y": 355.89453125, + "width": 47.6640625, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 269160854, + "version": 35, + "versionNonce": 1127334922, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 47.6640625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "BwaqTUADSaiRHoCGokXKI", + "type": "text", + "x": -178.97265625, + "y": 575.17578125, + "width": 263, + "height": 240, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1391733194, + "version": 2490, + "versionNonce": 716580118, + "isDeleted": false, + "text": "Subscribing allows the dApp to\nreactively receive updates about\na given topic. In this case we\nwill want to receive any updates\non the currentUser.\n\nSubscription callbacks are always\ncalled immediately with what we\ncurrently know.\n\nAll data should be considered\nOPTIONAL", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 234 + }, + { + "id": "gyDGsALUUdgK_TzjT78zF", + "type": "arrow", + "x": 133.03515625, + "y": 575.626953125, + "width": 379.125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 496657494, + "version": 370, + "versionNonce": 1173122634, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 379.125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "UBeyLHncVlN6Qy8Z9Yq0P", + "type": "text", + "x": 134.34765625, + "y": 579.634765625, + "width": 216, + "height": 38, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1793930250, + "version": 731, + "versionNonce": 66402390, + "isDeleted": false, + "text": "fcl.currentUser()\n .subscribe(callback)", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "BhVeXm_7Q-PW9YO_BFdjo", + "type": "arrow", + "x": 507.73828125, + "y": 653.05859375, + "width": 374.96484375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 512638486, + "version": 230, + "versionNonce": 1206320662, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -374.96484375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "BA2XTg-utF__4ANomq0DX", + "type": "text", + "x": 169.609375, + "y": 655.84765625, + "width": 225, + "height": 323, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 12563158, + "version": 1969, + "versionNonce": 1285559882, + "isDeleted": false, + "text": "SUBSCRIPTION currentUser\n---\naddr: null\ncid: null\nloggedIn: false\nverified: false\nidentity:\n name: null\n avatar: null\nscoped:\n email: null\n publicKey: null\nprovider:\n addr: null\n pid: null\n name: null\n icon: null", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 319 + }, + { + "id": "2STUByBmNYXHz9OqNHNGe", + "type": "line", + "x": 117.3984375, + "y": 559.306640625, + "width": 0, + "height": 291.021484375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 429212246, + "version": 314, + "versionNonce": 1359200598, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 291.021484375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "lOQfNEIEHhNIe2KGKuEQF", + "type": "line", + "x": 32.31640625, + "y": 679.796875, + "width": 82.9140625, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 957144778, + "version": 453, + "versionNonce": 170207498, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 82.9140625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "AmNNkLgvu36sA-XfvGzvm", + "type": "text", + "x": 323.33203125, + "y": 688.62109375, + "width": 493, + "height": 300, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 941271766, + "version": 1867, + "versionNonce": 531821962, + "isDeleted": false, + "text": "- users flow address\n- a composite id representing the users authentication method\n- has fcl received either public or private hooks?\n- could fcl successfully request private hooks?\n- users profile info\n - users name per received hooks\n - users avatar per received hooks\n- private scoped data as requested in the challenge\n - the optional email from the provider\n - the optional publicKey from the provider\n- information about the provider\n - the flow address of provider\n - the users internal id for the provider\n - the name of the provider\n - the providers icon", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 294 + }, + { + "id": "Qlrsmnvxv0Yu-6XxjPmon", + "type": "diamond", + "x": 58.4375, + "y": 1010.71875, + "width": 138.90625, + "height": 93.82421875, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 966881814, + "version": 948, + "versionNonce": 175724182, + "isDeleted": false + }, + { + "id": "2Q0NcifLTOiWHZZp7CjVT", + "type": "text", + "x": 87.32421875, + "y": 1032.84375, + "width": 84, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1980422282, + "version": 386, + "versionNonce": 1969063370, + "isDeleted": false, + "text": "CLICK\n\"sign in\"", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "KlOxVWTL9pUeM5MOu6mHQ", + "type": "arrow", + "x": 196.2734375, + "y": 1057.07421875, + "width": 315.79296875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 250703958, + "version": 517, + "versionNonce": 101467798, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 315.79296875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "jVn7DRTBVHuqU6aNGKgn1", + "type": "text", + "x": 198.6328125, + "y": 1062.94140625, + "width": 169, + "height": 19, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 660400138, + "version": 720, + "versionNonce": 1689359818, + "isDeleted": false, + "text": "fcl.authenticate()", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "tDpOm2KyUP_mfcEOtaC6g", + "type": "text", + "x": -176.26171875, + "y": 1083.24609375, + "width": 274, + "height": 260, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 408947158, + "version": 2262, + "versionNonce": 1389549462, + "isDeleted": false, + "text": "The authentication process truly\nstarts here. The user clicks some\nsort of sign in button in the dApp\nwhich triggers the challenge flow.\n\nFCL will then render an iframe\ndisplaying the handshake service.\n\nThe handshake services job is to\nenable a Bring Your Own Provider\ntype of experience, even providers\nfcl and our team have never heard\nof before.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 254 + }, + { + "id": "VANgxLAjMWIqDaOMkQGew", + "type": "arrow", + "x": 526.576171875, + "y": 1126.8046875, + "width": 1154.728515625, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1345945814, + "version": 778, + "versionNonce": 688930710, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 1154.728515625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "ZwB84bTSRuYNQBJ797UUX", + "type": "text", + "x": 528.24609375, + "y": 1069.0078125, + "width": 185, + "height": 20, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2029685718, + "version": 186, + "versionNonce": 1899835222, + "isDeleted": false, + "text": "iframe rendered in dApp", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 14 + }, + { + "id": "3kh7r3_OMznv14O4Q7lds", + "type": "text", + "x": 528.65625, + "y": 1128.5390625, + "width": 272, + "height": 95, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1752712214, + "version": 2306, + "versionNonce": 161396042, + "isDeleted": false, + "text": "HTTP/GET handshake.onflow.org\n---\nl6n: dapp.com\nnonce: NONCE\nscope: email+publicKey", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 91 + }, + { + "id": "I-bSnIv7qk4N11TBrWUvp", + "type": "text", + "x": 749.22265625, + "y": 1167.3671875, + "width": 297, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1473737942, + "version": 2315, + "versionNonce": 140039818, + "isDeleted": false, + "text": "- the location.origin of the dApp\n- a random value supplied by fcl\n- the special scopes the dApp wants ", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "xsaHRUOAlZ8ZI4kGqybV5", + "type": "diamond", + "x": 1616.3515625, + "y": 1133.822265625, + "width": 138.90625, + "height": 93.82421875, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 783279446, + "version": 1251, + "versionNonce": 525459274, + "isDeleted": false + }, + { + "id": "F-S5Qg94dsbKj8AmYRYUm", + "type": "text", + "x": 1647.96875, + "y": 1155.748046875, + "width": 75, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1085031178, + "version": 702, + "versionNonce": 147359114, + "isDeleted": false, + "text": "select\nprovider", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "B2msJeeJj2r7pmQ9572Tt", + "type": "arrow", + "x": 1684.63671875, + "y": 1248.70703125, + "width": 774.36328125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 135045386, + "version": 92, + "versionNonce": 128871894, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -774.36328125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "QDa016qky6i2rbpghQINV", + "type": "text", + "x": 944.94140625, + "y": 1251.53515625, + "width": 206, + "height": 95, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 151321174, + "version": 2478, + "versionNonce": 1662550666, + "isDeleted": false, + "text": "HTTP/GET provider.com\n---\nl6n: L6N\nnonce: NONCE\nscope: email+publicKey", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 91 + }, + { + "id": "6VaavfynVHFqaOHcJm68y", + "type": "text", + "x": 1155.625, + "y": 1290.04296875, + "width": 297, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1531656010, + "version": 2395, + "versionNonce": 1533528662, + "isDeleted": false, + "text": "- the location.origin of the dApp\n- a random value supplied by fcl\n- the special scopes the dApp wants ", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "NoiopQQrQ6gA3gBnK8QEO", + "type": "diamond", + "x": 826.49609375, + "y": 1331.916015625, + "width": 158.109375, + "height": 93.82421875, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 212982614, + "version": 1492, + "versionNonce": 605161866, + "isDeleted": false + }, + { + "id": "VSakes544b46aPuOgA12w", + "type": "text", + "x": 845.65234375, + "y": 1350.134765625, + "width": 122, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 879537418, + "version": 813, + "versionNonce": 761283466, + "isDeleted": false, + "text": "user\nauthenticates", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "TQB93-jsxoUcL9GwaBlZ1", + "type": "arrow", + "x": 825.63671875, + "y": 1377.748046875, + "width": 302.73828125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 92871114, + "version": 442, + "versionNonce": 629633162, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -302.73828125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "SkzWVjyWaeBHWW38XqLMT", + "type": "text", + "x": 558.888671875, + "y": 1392.056640625, + "width": 300, + "height": 190, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1183170518, + "version": 3074, + "versionNonce": 1994755286, + "isDeleted": false, + "text": "JS/postMessage l6N\n---\ntype: \"FCL::CHALLENGE::RESPONSE\"\naddr: FLOW_ADDRESS\npaddr: PROVIDER_FLOW_ADDRESS\ncode: CODE\nexp: CODE_EXPIRES_AT\nhks: HOOKS_URL\nnonce: NONCE\nl6n: L6N", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 186 + }, + { + "id": "25wzZQ-dBZxMxT8MW1Z-d", + "type": "text", + "x": 868.22265625, + "y": 1427.90234375, + "width": 672, + "height": 160, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1366848586, + "version": 3377, + "versionNonce": 2108085130, + "isDeleted": false, + "text": "- fcl listens for this event type\n- flow address of the user (used to fetch public hooks)\n- flow address of the provider (used to fetch providers info)\n- a token supplied when requesting the provider for private hooks\n- when the code expires (epoch timestamp in the future)\n- where to request the providers private hooks for the user\n- the nonce provided by fcl at the start of the challenge\n- the location.origin of the dApp (also provided by fcl at the start of the challenge)", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 154 + }, + { + "id": "NXxTdsH-rCQCSFd5SbNvX", + "type": "arrow", + "x": 1616.328125, + "y": 1159.81640625, + "width": 308.453125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 40, + "seed": 1011362634, + "version": 98, + "versionNonce": 62543126, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -308.453125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "lnEjAi8iE7V1aahOopRXY", + "type": "arrow", + "x": 1307.71484375, + "y": 1202.07421875, + "width": 316.8359375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 40, + "seed": 954039370, + "version": 50, + "versionNonce": 144070166, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 316.8359375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "1ZVyii2hq0Wpqq8542uW9", + "type": "text", + "x": 1318.5078125, + "y": 1172.37109375, + "width": 284, + "height": 20, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 40, + "seed": 1705453142, + "version": 174, + "versionNonce": 1058064970, + "isDeleted": false, + "text": "fetch available providers from chain", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 14 + }, + { + "id": "X6HUR1_MrW9gTRgJGheAA", + "type": "arrow", + "x": 523.095703125, + "y": 2420.91796875, + "width": 379.943359375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1506760842, + "version": 1136, + "versionNonce": 94275030, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 379.943359375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "7PcbZK4cQREATn7XIHt_A", + "type": "text", + "x": 525.306640625, + "y": 2425.44140625, + "width": 169, + "height": 57, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1876413718, + "version": 1321, + "versionNonce": 232123018, + "isDeleted": false, + "text": "HTTP/GET HOOKS_URL\n---\ncode: CODE", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 53 + }, + { + "id": "42lCsAd4TL61C2ZBEbmuC", + "type": "line", + "x": 33.736328125, + "y": 1173.4833984375, + "width": 82.9140625, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1664276234, + "version": 754, + "versionNonce": 934966614, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 82.9140625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "3WLQiIIioSPeHv0xMKLko", + "type": "text", + "x": -173.546875, + "y": 1886.24609375, + "width": 280, + "height": 560, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 964205782, + "version": 4104, + "versionNonce": 1022153674, + "isDeleted": false, + "text": "FCL should now have the pieces\nit needs to fetch both the public\nand private hooks.\n\nPublic hooks are stored on chain\nin a resource owned by the flow\naddress. They can also point out\nto resources owned by the provider\nallowing the provider to change\nprovider specific detail as needed\nand example of that is moving the\nauthorization endpoint. SENSITIVE\nDATA SHOULD NEVER BE PUT IN\nA PUBLIC HOOK.\n\nPrivate hooks are provided by\nthe provider. They include provider\nspecific overrides to the public\nhooks as well as the additional\nscopes that were requested in\nthe challenge.\n\nFCL will attempt to fetch both\nprivate and public hooks, deep\nmerge the private into the public\nand then let any currentUser\nsubscribers know there is some\nnew data for them.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 554 + }, + { + "id": "oByTwhCzigB059e9baKhZ", + "type": "arrow", + "x": 524.0869140625, + "y": 1639.83203125, + "width": 767.9365234375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1399244246, + "version": 1012, + "versionNonce": 894784022, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 767.9365234375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "bQl2f4HdK2Ezo1MVmCQs-", + "type": "text", + "x": 525.6220703125, + "y": 1640.6640625, + "width": 216, + "height": 57, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 263301770, + "version": 1277, + "versionNonce": 1310257610, + "isDeleted": false, + "text": "FLOW/SCRIPT FETCH_HOOKS\n---\naddress: FLOW_ADDRESS", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 53 + }, + { + "id": "OfQGmyTtgjme0SWUklR_a", + "type": "arrow", + "x": 1293.146484375, + "y": 1722.36328125, + "width": 774.36328125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1210260886, + "version": 263, + "versionNonce": 210434070, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -774.36328125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "zlS_RGPXHJyxMTeGPbPaA", + "type": "text", + "x": 556.822265625, + "y": 1727.609375, + "width": 338, + "height": 361, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 358067914, + "version": 4272, + "versionNonce": 895971274, + "isDeleted": false, + "text": "FLOW/RESPONSE FETCH_HOOKS\n---\naddr: FLOW_ADDRESS\nkeyId: KEY_ID\nidentity:\n name: NAME\n avatar: AVATAR\nauthorizations:\n - id: PROVIDER_AUTHORIZATION_ID\n addr: PROVIDER_FLOW_ADDRESS\n method: \"HTTP/POST\"\n endpoint: AUTHORIZATION_ENDPOINT\n data:\n id: PID\n - id: PROVIDER_AUTHORIZATION_ID_2\n addr: PROVIDER_FLOW_ADDRESS\n method: \"REMOTE\"\n data:\n id: PID", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 357 + }, + { + "id": "RpkmMqz9tdMWF-3_bw77s", + "type": "text", + "x": 731.95703125, + "y": 1765.109375, + "width": 226, + "height": 100, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 253356234, + "version": 5160, + "versionNonce": 1711938006, + "isDeleted": false, + "text": "- flow address for user\n- preferred signing key\n- public identity info\n - an optional name value\n - an optional avatar value", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 94 + }, + { + "id": "2z30__NPjKNxvuE9Pyxmf", + "type": "text", + "x": 916.23046875, + "y": 2017.57421875, + "width": 629, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1231760906, + "version": 5822, + "versionNonce": 1146700234, + "isDeleted": false, + "text": "an public authorization hook that points to a remote authorization\nit will use the providers flow address and id that is supplied to do the look up", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "wwWWue6mYk9yxli73gPmW", + "type": "line", + "x": 901.21875, + "y": 1991.62890625, + "width": 0, + "height": 98.58984375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 94038550, + "version": 363, + "versionNonce": 1292446730, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 98.58984375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "egK8LT0KvLONRfcsgWWyx", + "type": "arrow", + "x": 525.68017578125, + "y": 2181.4375, + "width": 767.9365234375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1321042966, + "version": 1094, + "versionNonce": 152448970, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 767.9365234375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "oi3nAccLri9ZoY-toeQbo", + "type": "text", + "x": 529.15673828125, + "y": 2186.72265625, + "width": 281, + "height": 57, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 685568074, + "version": 1382, + "versionNonce": 86931402, + "isDeleted": false, + "text": "FLOW/SCRIPT FETCH_PROVIDER\n---\naddress: PROVIDER_FLOW_ADDRESS", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 53 + }, + { + "id": "HM8bKmZ_6p8oTn3sLt9NW", + "type": "text", + "x": 916.25, + "y": 1893.673828125, + "width": 547, + "height": 80, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1139490582, + "version": 6267, + "versionNonce": 692740886, + "isDeleted": false, + "text": "an public authorization hook that is controlled by users flow account\nit can be overloaded by private hooks if the addr and id match.\nOverloading should be avoided where possible as this authorization\nstrategy could still be used by non-currentUser situations", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 74 + }, + { + "id": "HPG9r6GWIVU-MLDXRhR0c", + "type": "line", + "x": 901.12109375, + "y": 1880.525390625, + "width": 0, + "height": 105.830078125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 851207498, + "version": 554, + "versionNonce": 1201238218, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 105.830078125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "s6PIfFtwf-7CX3o-PHI9l", + "type": "arrow", + "x": 1291.263671875, + "y": 2257.9453125, + "width": 774.36328125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 631656074, + "version": 367, + "versionNonce": 17668362, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -774.36328125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "d-aTpJ55bJetrQsYzT-8o", + "type": "text", + "x": 554.728515625, + "y": 2260.98828125, + "width": 253, + "height": 114, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 697513750, + "version": 4543, + "versionNonce": 1310176022, + "isDeleted": false, + "text": "FLOW/RESPONSE FETCH_HOOKS\n---\naddr: PROVIDER_FLOW_ADDRESS\nname: PROVIDER_NAME\nicon: PROVIDER_ICON\nauthn: AUTHENTICATION_URL", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 110 + }, + { + "id": "2_VuSBa3bFRM7KYWRfqpK", + "type": "line", + "x": 508.91796875, + "y": 1644.27734375, + "width": 154.62109375, + "height": 311.0625, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 441658570, + "version": 350, + "versionNonce": 389400074, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -154.62109375, + 311.0625 + ] + ], + "lastCommittedPoint": [ + -157.6171875, + 295.58984375 + ] + }, + { + "id": "5ME55bvkr9r1r5Zqo7QMP", + "type": "line", + "x": 350.4609375, + "y": 2023.38671875, + "width": 162.4765625, + "height": 160.96875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 442543050, + "version": 54, + "versionNonce": 1075938122, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 162.4765625, + 160.96875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "jT1SAtxFHgoSlX-HSjGb3", + "type": "line", + "x": 349.04296875, + "y": 2091.76953125, + "width": 165.9921875, + "height": 330.19921875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 677853206, + "version": 165, + "versionNonce": 1014681046, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 165.9921875, + 330.19921875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "lnpb7wSSUK_sV4qXlPQVt", + "type": "text", + "x": 270.62109375, + "y": 2018.0078125, + "width": 126, + "height": 20, + "angle": 4.71238898038469, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 843163990, + "version": 190, + "versionNonce": 599478794, + "isDeleted": false, + "text": "Done in parallel", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 14 + }, + { + "id": "msGB2E2TZJGP7TkawkmAf", + "type": "arrow", + "x": 900.84765625, + "y": 2509.64453125, + "width": 379.458984375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1210719318, + "version": 490, + "versionNonce": 16187478, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -379.458984375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "-VVQYfd22ZmqYqXRLxXEm", + "type": "text", + "x": 554.970703125, + "y": 2514.1875, + "width": 272, + "height": 304, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1012202506, + "version": 5187, + "versionNonce": 1530171926, + "isDeleted": false, + "text": "HTTP/GET HOOKS_URL RESPONSE\n---\naddr: FLOW_ADDRESS\nkeyId: KEY_ID_2\nidentity:\n name: NAME\n avatar: AVATAR\nscoped:\n email: EMAIL\n publicKey: null\nprovider:\n addr: PROVIDER_FLOW_ADDRESS\n pid: PID\n name: PROVIDER_NAME\n icon: PROVIDER_ICON\n authn: AUTHENTICATION_URL", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 300 + }, + { + "id": "OnbDFeHN4fQhUjlz_WLfY", + "type": "text", + "x": 731.4140625, + "y": 2549.73046875, + "width": 680, + "height": 160, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2121614090, + "version": 7076, + "versionNonce": 292326282, + "isDeleted": false, + "text": "- Users Flow Address\n- overloading the preferred signing key\n- private identity info (will overload public info)\n in this case the data is the same\n if it was omitted fcl will use the public info if its there\n- the requested scoped data\n - user decided to send the email\n - but also decided to NOT send the publicKey (reminder that everything is optional)", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 154 + }, + { + "id": "2N9s2KDB46jGhu9W9zxZ5", + "type": "text", + "x": 835.90234375, + "y": 2722.09375, + "width": 414, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1232014154, + "version": 7368, + "versionNonce": 1966205206, + "isDeleted": false, + "text": "- flow address of provider (used in composite id)\n- id controlled by the provider (used in composite id)", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "SUbm9_A_s1r_jH2PsAK_i", + "type": "line", + "x": 120.42578125, + "y": 1632.94189453125, + "width": 0, + "height": 1330.13232421875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1251139734, + "version": 1260, + "versionNonce": 719119498, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1330.13232421875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "zts7CpbK3b8hN6Lf_L4NX", + "type": "line", + "x": 33.37109375, + "y": 2168.4453125, + "width": 82.9140625, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1021861962, + "version": 883, + "versionNonce": 504499158, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 82.9140625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "6-8TIlr57ixKs6Sj3Voqe", + "type": "text", + "x": 110.08984375, + "y": 92.10546875, + "width": 1183, + "height": 45, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1019216458, + "version": 772, + "versionNonce": 2018618070, + "isDeleted": false, + "text": "Flow Client Library - Remote Async Authentication & Authorization", + "font": "36px Virgil", + "textAlign": "left", + "baseline": 32 + }, + { + "id": "p424mWR_hsD0j4YBnrCVw", + "type": "text", + "x": 110.375, + "y": 137.62109375, + "width": 303, + "height": 50, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1331610518, + "version": 433, + "versionNonce": 2029861522, + "isDeleted": false, + "text": "Last Updated: April 17th 2020\nVersion: 3.1", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 43 + }, + { + "id": "qF5Aeoa9iYz0RqCATeZEH", + "type": "text", + "x": 1738.421875, + "y": 288.890625, + "width": 176, + "height": 35, + "angle": 1.5707963267948966, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 2000233674, + "version": 424, + "versionNonce": 186896022, + "isDeleted": false, + "text": "Setup/Config", + "font": "28px Virgil", + "textAlign": "left", + "baseline": 25 + }, + { + "id": "SwAuz72dvcZhh4zIV1V_W", + "type": "line", + "x": 1826.83984375, + "y": 1178.0390625, + "width": 0, + "height": 436.82421875, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 2110378634, + "version": 1335, + "versionNonce": 289846422, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 436.82421875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Pr75G8We8YRy0Yi_gYH0l", + "type": "text", + "x": 1759.25, + "y": 1681.26171875, + "width": 132, + "height": 35, + "angle": 1.5707963267948966, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 1327777994, + "version": 1007, + "versionNonce": 320669642, + "isDeleted": false, + "text": "Collection", + "font": "28px Virgil", + "textAlign": "left", + "baseline": 25 + }, + { + "id": "PVT9D64GjjaP2ucRTUfLs", + "type": "line", + "x": 1826.046875, + "y": 1770.51171875, + "width": 0, + "height": 1215.11328125, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 1522073814, + "version": 2352, + "versionNonce": 2129637846, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1215.11328125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "jvYGx-4d-NipQ0Bpnu05q", + "type": "arrow", + "x": 508.783203125, + "y": 2558.3984375, + "width": 374.96484375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 616907798, + "version": 440, + "versionNonce": 88690262, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -374.96484375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "IZXf_z8RKv6FuMhkvkXNf", + "type": "text", + "x": 170.095703125, + "y": 2563.9375, + "width": 272, + "height": 323, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1748054090, + "version": 2404, + "versionNonce": 1955554902, + "isDeleted": false, + "text": "SUBSCRIPTION currentUser\n---\naddr: FLOW_ADDRESS\ncid: COMPOSITE_ID\nloggedIn: true\nverified: true\nidentity:\n name: NAME\n avatar: AVATAR\nscoped:\n email: EMAIL\n publicKey: null\nprovider:\n addr: PROVIDER_FLOW_ADDRESS\n pid: PID\n name: PROVIDER_NAME\n icon: PROVIDER_ICON", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 319 + }, + { + "id": "waRSRXDeKvd5f6JPg0G6E", + "type": "diamond", + "x": 56.0546875, + "y": 3013.853515625, + "width": 138.90625, + "height": 93.82421875, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1556613014, + "version": 1054, + "versionNonce": 1451302358, + "isDeleted": false + }, + { + "id": "paxn_sWovWBSehdKXh9Yq", + "type": "text", + "x": 75.44140625, + "y": 3035.978515625, + "width": 103, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 961438922, + "version": 526, + "versionNonce": 604557962, + "isDeleted": false, + "text": "TRIGGER\nTRANSACTION", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "hrSSY4HIR0R4f4pjnZxdq", + "type": "arrow", + "x": 195.189453125, + "y": 3058.953125, + "width": 315.79296875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 94461718, + "version": 622, + "versionNonce": 1200903050, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 315.79296875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "6_zL8bXZ7lEK83iY4swSO", + "type": "text", + "x": 188.287109375, + "y": 3066.16796875, + "width": 525, + "height": 228, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 653804874, + "version": 1965, + "versionNonce": 1765016086, + "isDeleted": false, + "text": "const response = await fcl.send([\n vtx.TRANSFER_FLOW_TOKENS,\n sdk.params([\n sdk.param(AMOUNT, t.UFix64),\n sdk.param(TO_ADDRESS, t.Address)\n ]),\n sdk.proposer(fcl.currentUser().proposerAuthorization),\n sdk.payer(fcl.currentUser().payerAuthorization),\n sdk.authorizations([\n fcl.currentUser().authorization\n ])\n])", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 224 + }, + { + "id": "huhsom-5KjKGKdIYDMOqy", + "type": "text", + "x": 718.8828125, + "y": 3180.875, + "width": 300, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 868467722, + "version": 7984, + "versionNonce": 141727690, + "isDeleted": false, + "text": "- who is proposing the transaction\n- who is paying for the transaction\n- who are authorizing the transaction", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "EZpsNzOMm6AF6ard6rzL9", + "type": "text", + "x": 455.97265625, + "y": 3083.23828125, + "width": 297, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 771410058, + "version": 8237, + "versionNonce": 1499597386, + "isDeleted": false, + "text": "- a verified/provable transaction\n- params to pass to the transaction", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "zIfBGvs5LZkn3wLsdHnBD", + "type": "arrow", + "x": 518.708984375, + "y": 3285.18359375, + "width": 382.380859375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1573066122, + "version": 784, + "versionNonce": 1662081558, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 382.380859375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "QeOvoAeQuTwqV9BaVr0RY", + "type": "text", + "x": 523.40625, + "y": 3287.86328125, + "width": 272, + "height": 190, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1929637910, + "version": 2844, + "versionNonce": 469574922, + "isDeleted": false, + "text": "HOOK authorization\n---\npayload: PAYLOAD\naddr: FLOW_ADDRESS\nkeyId: KEY_ID_2\nrole:\n - proposer\n - payer\n - authorizer\ninteraction: INTERACTION_DATA", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 186 + }, + { + "id": "m-dBP7WUdYjECj9H_N-Lw", + "type": "text", + "x": 702.2421875, + "y": 3323.265625, + "width": 215, + "height": 80, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 566844874, + "version": 8350, + "versionNonce": 2015418326, + "isDeleted": false, + "text": "- what needs to be signed\n- flow address to sign with\n- preferred signing key\n- roles to be signing as", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 74 + }, + { + "id": "uFmYk6gAWEzV926It2dyS", + "type": "text", + "x": 803.859375, + "y": 3457.97265625, + "width": 406, + "height": 120, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 963183382, + "version": 9206, + "versionNonce": 2061418122, + "isDeleted": false, + "text": "- data that can be used to recreate the payload\n so it can be verified. It should have everything\n about the transaction so the provider could also\n use that data in here to give the user a better\n experience when they go to approve/decline the\n transaction", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 114 + }, + { + "id": "VkMECX5n8ypX3ZzyzSoiY", + "type": "arrow", + "x": 902.3193359375, + "y": 3588.53515625, + "width": 379.458984375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1725344714, + "version": 556, + "versionNonce": 1331222230, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -379.458984375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "fTfdefywWKAJLExOheTvm", + "type": "text", + "x": 554.4619140625, + "y": 3591.27734375, + "width": 413, + "height": 380, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 403852758, + "version": 6211, + "versionNonce": 1875251478, + "isDeleted": false, + "text": "HOOK authorization RESPONSE\n---\nstatus: PENDING\ncompositeSignature:\n addr: null\n keyId: null\n signature: null\nauthorizationUpdates:\n method: \"HTTP/GET\"\n endpoint: AUTHZ_INFO_URL\n data: { aid: AUTHORIZATION_ID }\nlocal:\n - method: \"BROWSER/IFRAME\"\n endpoint: LOCAL_IFRAME_ENDPOINT\n width: WIDTH\n height: HEIGHT\n background: BG_COLOR\n - method: \"BROWSER/EXTENSION\"\n eventType: PROVIDER_EXTENSION_EVENT_TYPE\n data: DATA_TO_SEND_EXTENSION", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 376 + }, + { + "id": "dnULn5eXCu25FbJ5ADvgb", + "type": "arrow", + "x": 520.8291015625, + "y": 3998.94921875, + "width": 382.380859375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 782169098, + "version": 936, + "versionNonce": 318209162, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 382.380859375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "aXHKmUTpcXq-KXd22YVHZ", + "type": "text", + "x": 523.3154296875, + "y": 4006.41015625, + "width": 234, + "height": 57, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1174514070, + "version": 3106, + "versionNonce": 796185162, + "isDeleted": false, + "text": "HOOK authorizationUpdates\n---\naid: AUTHORIZATION_ID", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 53 + }, + { + "id": "Qt5oM_exd-ilHtenCfsx1", + "type": "arrow", + "x": 899.611328125, + "y": 4085.2265625, + "width": 379.458984375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1781753622, + "version": 639, + "versionNonce": 1286590294, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -379.458984375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "HkOFxXHDQ51b1hvi6qcyX", + "type": "text", + "x": 555.01171875, + "y": 4090.125, + "width": 319, + "height": 209, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 308985162, + "version": 6371, + "versionNonce": 1920465162, + "isDeleted": false, + "text": "HOOK authorizationUpdates RESPONSE\n---\nstatus: PENDING\ncompositeSignature:\n addr: null\n keyId: null\n signature: null\nauthorizationUpdates:\n method: \"HTTP/GET\"\n endpoint: AUTHZ_INFO_URL\n data: { aid: AUTHORIZATION_ID }", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 205 + }, + { + "id": "3INOWYSzlw6A2i5ZFLpWE", + "type": "arrow", + "x": 523.39208984375, + "y": 4318.509765625, + "width": 382.380859375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1575886678, + "version": 1069, + "versionNonce": 892796950, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 382.380859375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "1GaZCC06LIykjWF8msHrO", + "type": "text", + "x": 526.07763671875, + "y": 4325.970703125, + "width": 234, + "height": 57, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1460054282, + "version": 3239, + "versionNonce": 499725386, + "isDeleted": false, + "text": "HOOK authorizationUpdates\n---\naid: AUTHORIZATION_ID", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 53 + }, + { + "id": "rJdS3rSR6xZz3q3K8_obb", + "type": "arrow", + "x": 902.37353515625, + "y": 4404.787109375, + "width": 379.458984375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 14402710, + "version": 772, + "versionNonce": 1707773270, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -379.458984375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "VeXvW_CPgoYJy_zq6RVC6", + "type": "text", + "x": 557.45361328125, + "y": 4407.943359375, + "width": 319, + "height": 133, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1595996106, + "version": 6605, + "versionNonce": 1537513802, + "isDeleted": false, + "text": "HOOK authorizationUpdates RESPONSE\n---\nstatus: APPROVED\ncompositeSignature:\n addr: FLOW_ADDRESS\n keyId: KEY_ID_2\n signature: SIGNATURE", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 129 + }, + { + "id": "Sd2FuAqCDzEl9_UVKxCdu", + "type": "text", + "x": 741.82421875, + "y": 3627.671875, + "width": 256, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 664875030, + "version": 8575, + "versionNonce": 1250821334, + "isDeleted": false, + "text": "- the status of the transaction\n- an empty composite signature ", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "hM2bEW5KNVxetY6j53I3-", + "type": "text", + "x": 763.0625, + "y": 3723.57421875, + "width": 421, + "height": 20, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1231038090, + "version": 8746, + "versionNonce": 244451670, + "isDeleted": false, + "text": "- where and how to get updates for the transaction", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 14 + }, + { + "id": "fNHFI8o8oO5yAGFPaxe5s", + "type": "text", + "x": 860, + "y": 3798.71484375, + "width": 760, + "height": 20, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 610817162, + "version": 9131, + "versionNonce": 414310218, + "isDeleted": false, + "text": "- lets FCL know if there are local ways of letting the user authorize from their current device", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 14 + }, + { + "id": "tfACerMEHudHalqtkDVxw", + "type": "text", + "x": 916.138671875, + "y": 3836.7060546875, + "width": 366, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1720766870, + "version": 6618, + "versionNonce": 596298954, + "isDeleted": false, + "text": "FCL will render an iframe showing the endpoint\nthe iframe will be rendered with the supplied\nwidth, height and background color", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "lEAUSNRbeExIAbUFoi457", + "type": "line", + "x": 898.724609375, + "y": 3819.2880859375, + "width": 0, + "height": 92.2431640625, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 617560778, + "version": 810, + "versionNonce": 687063446, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 92.2431640625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "VMWNVeWbavakv7ZbvBDZ4", + "type": "text", + "x": 986.568359375, + "y": 3938.26123046875, + "width": 373, + "height": 20, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1532948950, + "version": 6925, + "versionNonce": 1496202634, + "isDeleted": false, + "text": "FCL will send an event to a browser extension", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 14 + }, + { + "id": "SNdO8VWRuFZGJFHu1jM1s", + "type": "line", + "x": 975.658203125, + "y": 3912.92529296875, + "width": 0, + "height": 70.04736328125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1134706314, + "version": 1016, + "versionNonce": 1539103638, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 70.04736328125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "U-EEL_3O6Lsxb7mROH8Pr", + "type": "line", + "x": 548.703125, + "y": 3801.44091796875, + "width": 0, + "height": 168.72705078125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 237420362, + "version": 1079, + "versionNonce": 1922915862, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 168.72705078125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "VRe96xT0_1RxtHTMIyi62", + "type": "text", + "x": 346.95703125, + "y": 3819.34375, + "width": 195, + "height": 140, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1235761750, + "version": 7272, + "versionNonce": 1943726230, + "isDeleted": false, + "text": "These will only happen\nfor the currentUser, but\nthe provider should still\nmake sure that the user\nis authenticated before\nshowing any possibly\nsensitive information", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 134 + }, + { + "id": "58mykrKHV9EaCFvmLqX9I", + "type": "text", + "x": 913.681640625, + "y": 4180.76904296875, + "width": 302, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 291843082, + "version": 7021, + "versionNonce": 506427606, + "isDeleted": false, + "text": "The same as the above authorization\nresponse but sans the local info", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "wJIW4AG-R71Cq1nvCREvC", + "type": "line", + "x": 901.482421875, + "y": 4120.62060546875, + "width": 0, + "height": 184.09423828125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 64680342, + "version": 1105, + "versionNonce": 1179937866, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 184.09423828125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "1_bAu7XiS5YNkJzGVFz-P", + "type": "text", + "x": 213, + "y": 4136.0703125, + "width": 249, + "height": 120, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 530454218, + "version": 7482, + "versionNonce": 1808024342, + "isDeleted": false, + "text": "FCL will continue to request\nauthorizationUpdates until\nthe response no longer returns\nan authorizationUpdates hook\nor the status is APPROVED or\nREFUSED", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 114 + }, + { + "id": "19wWD272ASOGmsbjs-59d", + "type": "line", + "x": 443.7265625, + "y": 4170.546875, + "width": 65.46484375, + "height": 129.7421875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1153278166, + "version": 109, + "versionNonce": 2074859210, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 65.46484375, + -129.7421875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "FP82AskFm3Lh1tPvv1lq9", + "type": "line", + "x": 450.05859375, + "y": 4240.8671875, + "width": 61.82421875, + "height": 113.42578125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 199143626, + "version": 255, + "versionNonce": 292145110, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 61.82421875, + 113.42578125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "t_6ydp1uC_v23r855FNXE", + "type": "arrow", + "x": 525.6611328125, + "y": 4585, + "width": 761.1201171875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 179347786, + "version": 1329, + "versionNonce": 526737418, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 761.1201171875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "us3PQTgK_fN8w5Nk4IhG_", + "type": "text", + "x": 565.6875, + "y": 4590.29296875, + "width": 319, + "height": 19, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2127509142, + "version": 1722, + "versionNonce": 2040934282, + "isDeleted": false, + "text": "FLOW/TRANSACTION submitTransaction", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "GfjjxVGNRF0p99UbfDZjq", + "type": "arrow", + "x": 1286.1953125, + "y": 4646.7734375, + "width": 760.6982421875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1092171862, + "version": 975, + "versionNonce": 53636950, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -760.6982421875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "pW8AlxjpdNg5jWX_4n0dM", + "type": "text", + "x": 567.89453125, + "y": 4653.734375, + "width": 300, + "height": 19, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 432772490, + "version": 1993, + "versionNonce": 933974614, + "isDeleted": false, + "text": "FLOW/RESPONSE submitTransaction ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "pKKtykoGvufR7ERvt-eTi", + "type": "arrow", + "x": 512.6123046875, + "y": 4647.16796875, + "width": 379.458984375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1779519574, + "version": 863, + "versionNonce": 964619158, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -379.458984375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Ap9Cyn92PMXlJBo3aPhoP", + "type": "text", + "x": 160.5078125, + "y": 4652.4609375, + "width": 356, + "height": 19, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1261986506, + "version": 2126, + "versionNonce": 2067928278, + "isDeleted": false, + "text": "const response = await fcl.send([...])", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "u-UfsHkkQadRF6SCVyVx1", + "type": "arrow", + "x": 136.68359375, + "y": 4710.556640625, + "width": 377.4296875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1607577482, + "version": 823, + "versionNonce": 836980298, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 377.4296875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "3F1bHxsqx2nTNCPGB-6NI", + "type": "text", + "x": 140.59375, + "y": 4715.869140625, + "width": 234, + "height": 38, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 51013142, + "version": 2270, + "versionNonce": 451491158, + "isDeleted": false, + "text": "fcl.transaction(response)\n .subscribe(callback)", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "-UaYdX-OEaS5wVMrwN5xR", + "type": "text", + "x": 1744.84375, + "y": 3064.501953125, + "width": 162, + "height": 35, + "angle": 1.5707963267948966, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 338788298, + "version": 1205, + "versionNonce": 1853718154, + "isDeleted": false, + "text": "Transaction", + "font": "28px Virgil", + "textAlign": "left", + "baseline": 25 + }, + { + "id": "LuFDPJCxj7GY2koIvvpQY", + "type": "line", + "x": 1827.22265625, + "y": 3166.751953125, + "width": 0, + "height": 1603.451171875, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 561953238, + "version": 2787, + "versionNonce": 1627850518, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1603.451171875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "0qPJx0BzT51VBvJZZbAtb", + "type": "line", + "x": 1828.48046875, + "y": 1618.515625, + "width": 1701.3046875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 1012736982, + "version": 218, + "versionNonce": 1545674058, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -1701.3046875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "pb8U1YVZRiNyhtgwvxJoO", + "type": "line", + "x": 1823.1328125, + "y": 2984.24609375, + "width": 1695.5, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 1893180118, + "version": 393, + "versionNonce": 1208071254, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -1695.5, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "9mq_YXv-6dfI7LCcLOoZk", + "type": "line", + "x": 1825.71875, + "y": 4770.21484375, + "width": 1695.5, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 303631562, + "version": 488, + "versionNonce": 2036524042, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -1695.5, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "vKI1TN3W9zEYCqXspw6cd", + "type": "line", + "x": 116.59765625, + "y": 3556.2403564453125, + "width": 0, + "height": 987.7479248046875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 561630986, + "version": 2591, + "versionNonce": 1883029270, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 987.7479248046875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "x_rOBERCd6TqS6QnIH9qV", + "type": "line", + "x": 116.16015625, + "y": 4690.296875, + "width": 0, + "height": 76.2421875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 406239574, + "version": 2817, + "versionNonce": 691342730, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 76.2421875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "zOwAE2N733ejewShvmEsl", + "type": "line", + "x": 115.9921875, + "y": 4556.8359375, + "width": 0, + "height": 119.27734375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 315952906, + "version": 3005, + "versionNonce": 1280138506, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 119.27734375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "aDpvsyDq7LP1_OC4cpBxX", + "type": "text", + "x": 458.748046875, + "y": 2862.462890625, + "width": 372, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 385734090, + "version": 6220, + "versionNonce": 1866634186, + "isDeleted": false, + "text": "A deep merge of the private currentUser data\ninto the public currentUser data", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "h7Bs0gToLSbntCq0_kmTk", + "type": "line", + "x": 452.544921875, + "y": 2604.6953125, + "width": 0, + "height": 292.771484375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1087030230, + "version": 626, + "versionNonce": 48037846, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 292.771484375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "toQyT3WzIMdRQiPm4x9M2", + "type": "text", + "x": -219.69921875, + "y": 2983.08203125, + "width": 292, + "height": 240, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 331266710, + "version": 5459, + "versionNonce": 1436890454, + "isDeleted": false, + "text": "When a transaction is initiated fcl\nwill go through a process called\nasynchronous decomposition. In short\nit will try to make sure it has all\nthe things it needs to have a high\nprobability of submitting a successful\ntransaction. As an example if there\nisn't a currentUser but the\ntransaction needs a currentUser, fcl\nwill attempt to authenticate the\nuser before the transaction needs\nany of the currentUsers information.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 234 + }, + { + "id": "x_lnq9l_uj6CvcgnVJgeJ", + "type": "line", + "x": 18.23828125, + "y": 3134.0078125, + "width": 98.14453125, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 142857302, + "version": 1239, + "versionNonce": 821686986, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 98.14453125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "b_B9QDbiNzXEojm8Ot3A6", + "type": "line", + "x": 118.421875, + "y": 3302.0743408203125, + "width": 0, + "height": 241.8240966796875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1749654346, + "version": 2215, + "versionNonce": 568597834, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 241.8240966796875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Co3Eq_HoZ3jX0sykDN2jl", + "type": "text", + "x": -160.5390625, + "y": 3359.703125, + "width": 257, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 832108426, + "version": 5797, + "versionNonce": 1452595658, + "isDeleted": false, + "text": "FCL will attempt to authorize\nthe transaction with the various\nauthorization hooks.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "3tVP74pUyHOCD2o9JmG9o", + "type": "line", + "x": 18.845703125, + "y": 3408.4453125, + "width": 98.14453125, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 272878102, + "version": 1318, + "versionNonce": 1339264278, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 98.14453125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "xlOhPrPEy7PRuivNrLRnv", + "type": "text", + "x": -177.6328125, + "y": 3559.34375, + "width": 287, + "height": 520, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 190797386, + "version": 7155, + "versionNonce": 1392608586, + "isDeleted": false, + "text": "FCL will timeout authorizations\nfairly quickly if they don't respond\nright away. This is because the\nauthorization doesn't actually need\nto happen with this request.\nInstead what this request is doing\nis supplying the provider with what\nto sign, and then the provider sends\nback the information required to\ncreate a backchannel in which FCL\ncan then request the results.\n\nThe provider can also supply some\nlocal strategies that can give the\nuser an in dApp authorization flow.\nThese strategies can be things like\nrendering an iframe or sending an\nevent to a browser extension.\n\nBecause the actual response that\nmatters for the authorization\nhappens in a back channel we can\nlock these local strategies down\nas they really only act as a window\ninto the providers authorization\nuser experience.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 514 + }, + { + "id": "NEX_J-rQLNq2wm5mbCd7c", + "type": "line", + "x": 68.46875, + "y": 3788.57421875, + "width": 47.951171875, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 317150154, + "version": 1438, + "versionNonce": 987723158, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 47.951171875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "JVb2QMCeDhYIHIb3lBAJ8", + "type": "line", + "x": 1700.62890625, + "y": 3370.12890625, + "width": 0, + "height": 758.33203125, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 20, + "seed": 287421898, + "version": 3322, + "versionNonce": 1327943754, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 758.33203125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "T0FONKIugMmjyhBNPa1b2", + "type": "arrow", + "x": 908.5869140625, + "y": 3392.4375, + "width": 783.2568359375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 62204694, + "version": 1042, + "versionNonce": 1425626198, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 783.2568359375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "RzUmFjJWM7eyvTR6uIWjl", + "type": "arrow", + "x": 1694.3984375, + "y": 4106, + "width": 782.88671875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 302396822, + "version": 1558, + "versionNonce": 568895754, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -782.88671875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "IvLj82FximT02G1AK9jZ_", + "type": "diamond", + "x": 1622.4375, + "y": 3971.888671875, + "width": 150.1953125, + "height": 93.82421875, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1415433814, + "version": 1295, + "versionNonce": 1640663126, + "isDeleted": false + }, + { + "id": "oXRPPSMK37VNWnLwkYuZP", + "type": "text", + "x": 1647.4921875, + "y": 3995.099609375, + "width": 103, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 65890826, + "version": 735, + "versionNonce": 2008735114, + "isDeleted": false, + "text": "APPROVED\nTRANSACTION", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "pmu2RB5R3JQnXZ20pKfb6", + "type": "text", + "x": 1657.11328125, + "y": 3281.0546875, + "width": 83, + "height": 75, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1528973770, + "version": 654, + "versionNonce": 399838934, + "isDeleted": false, + "text": "provider\napproval\nprocess", + "font": "20px Virgil", + "textAlign": "center", + "baseline": 68 + }, + { + "id": "jNThL9TEd_WZFS1q9bspt", + "type": "text", + "x": 1474.6015625, + "y": 3224.20703125, + "width": 206, + "height": 160, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1793138506, + "version": 8513, + "versionNonce": 1450144202, + "isDeleted": false, + "text": "These could be things like\n- the providers mobile app\n- a hardware device\n- browser extension\n- iframe\n- text message\n- providers website\n- desktop application", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 154 + }, + { + "id": "IF08tbolyi3Jhmflhqsew", + "type": "line", + "x": 1645.6796875, + "y": 3292.703125, + "width": 0, + "height": 63.39501953125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1043337802, + "version": 1030, + "versionNonce": 891123786, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 63.39501953125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "ljhLjuHekKgxFYwog8Fwn", + "type": "line", + "x": 1645.95703125, + "y": 3325.228759765625, + "width": 29.6171875, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 138692298, + "version": 1258, + "versionNonce": 1338804566, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -29.6171875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "7wScteC3L1Oah6wsNyl8R", + "type": "text", + "x": -179.7890625, + "y": 4584.96875, + "width": 285, + "height": 80, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1886238922, + "version": 7618, + "versionNonce": 286539338, + "isDeleted": false, + "text": "Once FCL thinks it has everything\nit needs, it will attempt to submit\nthe transaction to the access node\nreturning a Response", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 74 + }, + { + "id": "Lt5zP-8-JtS3R8KXjCn_y", + "type": "line", + "x": 97.60546875, + "y": 4618.953125, + "width": 17.7060546875, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1566435478, + "version": 1705, + "versionNonce": 30330582, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 17.7060546875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "_hXtzS2Onepme0YJyWzLw", + "type": "text", + "x": -149.98828125, + "y": 4704.33984375, + "width": 248, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 451638870, + "version": 7890, + "versionNonce": 1114224214, + "isDeleted": false, + "text": "The response can be used to\nsubscribe to the status of the\ntransaction.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "XaIR2rfIdf4M2OpALv-I2", + "type": "line", + "x": 28.1796875, + "y": 4755.40234375, + "width": 85.70849609375, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 491140886, + "version": 1932, + "versionNonce": 1203742282, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 85.70849609375, + 0 + ] + ], + "lastCommittedPoint": null + } + ], + "appState": { + "viewBackgroundColor": "#ffffff" + } +} \ No newline at end of file diff --git a/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v3.1.png b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v3.1.png new file mode 100644 index 0000000000..30c4d96a71 Binary files /dev/null and b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v3.1.png differ diff --git a/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v3.2.excalidraw b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v3.2.excalidraw new file mode 100644 index 0000000000..e3bf165926 --- /dev/null +++ b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v3.2.excalidraw @@ -0,0 +1,4201 @@ +{ + "type": "excalidraw", + "version": 1, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "coRgXgxDx_rGztManLJNj", + "type": "line", + "x": 1826.82421875, + "y": 402.9375, + "width": 0, + "height": 630.359375, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 1312138966, + "version": 662, + "versionNonce": 1794938954, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 630.359375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "M0qjT3k6XLsaUrGM5l_Jk", + "type": "text", + "x": 1762.546875, + "y": 1093.79296875, + "width": 128, + "height": 35, + "angle": 1.5707963267948966, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 590355926, + "version": 850, + "versionNonce": 1122986326, + "isDeleted": false, + "text": "Challenge", + "font": "28px Virgil", + "textAlign": "left", + "baseline": 25 + }, + { + "id": "LLYkOAmehERqY2yfQ4-mS", + "type": "line", + "x": 1824.30078125, + "y": 1033.98828125, + "width": 1701.3046875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 1128019606, + "version": 124, + "versionNonce": 890699530, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -1701.3046875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "4jiRvxEhO_mq0VrMwSgL3", + "type": "line", + "x": 118.14453125, + "y": 2993.164306640625, + "width": 0, + "height": 300.202880859375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1278829846, + "version": 1995, + "versionNonce": 1120731158, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 300.202880859375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "BGN-MZTIw8KwbM7X_KkY2", + "type": "line", + "x": 118.302734375, + "y": 1008.3447265625, + "width": 0, + "height": 603.4599609375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 363991382, + "version": 867, + "versionNonce": 805282966, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 603.4599609375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "un0BO73k-S9mWt9N8vfWt", + "type": "text", + "x": 108.84765625, + "y": 219.35546875, + "width": 45, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1641930582, + "version": 151, + "versionNonce": 957137290, + "isDeleted": false, + "text": "dApp", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "chwyHplpBxENYV0oFYUJ5", + "type": "text", + "x": 506.296875, + "y": 218.80859375, + "width": 24, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 377033738, + "version": 190, + "versionNonce": 2062019082, + "isDeleted": false, + "text": "fcl", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "A_YGfR-4aRXOHoeUej2FH", + "type": "text", + "x": 871.4375, + "y": 219.44921875, + "width": 77, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1848970902, + "version": 158, + "versionNonce": 567364246, + "isDeleted": false, + "text": "provider", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "4cHNGYbFyLPBSmllMxnqG", + "type": "text", + "x": 1277.8984375, + "y": 218.390625, + "width": 38, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 544904458, + "version": 159, + "versionNonce": 2049224662, + "isDeleted": false, + "text": "flow", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "jacsVi7b_9LRNYvWMBgax", + "type": "text", + "x": 1635.7578125, + "y": 215.31640625, + "width": 99, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 594396554, + "version": 142, + "versionNonce": 1415635850, + "isDeleted": false, + "text": "handshake", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "ryyCHYiHt6qIijgNyuznw", + "type": "line", + "x": 1686.97265625, + "y": 242.30859375, + "width": 0, + "height": 1078.56640625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 20, + "seed": 949453258, + "version": 550, + "versionNonce": 656589526, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1078.56640625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "PdSxGy2bbk0IQ6U3sbaaO", + "type": "line", + "x": 1295.9375, + "y": 250.052734375, + "width": 0, + "height": 4522.494140625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 20, + "seed": 1141283658, + "version": 1407, + "versionNonce": 1476993046, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 4522.494140625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "q4v_gQ0kus8ABlQjh2qfU", + "type": "line", + "x": 907.69921875, + "y": 252.095703125, + "width": 0, + "height": 4519.337890625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 20, + "seed": 718607446, + "version": 1343, + "versionNonce": 561951690, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 4519.337890625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "sD6hFB9Fg_yS4wv-kXCd7", + "type": "line", + "x": 518.66015625, + "y": 250.041015625, + "width": 0, + "height": 4521.998046875, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 20, + "seed": 1951527242, + "version": 1276, + "versionNonce": 1296645718, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 4521.998046875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "qk9t0Pn0gqz1vMQ3-PPVs", + "type": "rectangle", + "x": 495.0703125, + "y": 1090.64453125, + "width": 1236.47265625, + "height": 518.51953125, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 40, + "seed": 1052625546, + "version": 134, + "versionNonce": 1816547594, + "isDeleted": false + }, + { + "id": "WAjcohb9hozxf_x_K2Q70", + "type": "line", + "x": 127.6796875, + "y": 247.509765625, + "width": 0, + "height": 4524.509765625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 20, + "seed": 451624970, + "version": 1267, + "versionNonce": 1700701898, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 4524.509765625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "1uT7ljw353mq_pBF1krUo", + "type": "arrow", + "x": 132.875, + "y": 330.609375, + "width": 379.125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 453198294, + "version": 247, + "versionNonce": 2111004886, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 379.125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "9_RwWHhR4z7t6UN2sMXZp", + "type": "text", + "x": -178.890625, + "y": 263.02734375, + "width": 268, + "height": 200, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1786272714, + "version": 1433, + "versionNonce": 1274253526, + "isDeleted": false, + "text": "Scopes allow dApps to request\nadditional (private) information\nfrom the provider. They will be\nsent along to the provider during\nthe initial challenge. If the\n user has decided to allow the\nprovider to share the information,\nsaid information will be available\nin the providers private hooks\nrequest.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 194 + }, + { + "id": "3pLEjtL6UX46WlYKdWkJD", + "type": "text", + "x": 135.88671875, + "y": 337.0390625, + "width": 422, + "height": 38, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 251468054, + "version": 520, + "versionNonce": 1557952146, + "isDeleted": false, + "text": "fcl.config()\n .put(\"challenge.scope\", \"email+publicKey\")", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "fbb9O2zUQnZNHHgxrXulZ", + "type": "arrow", + "x": 134.09765625, + "y": 401.00390625, + "width": 379.125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2097487190, + "version": 372, + "versionNonce": 526001482, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 379.125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "V2OPDQAf4l7Ba2i58gZ1n", + "type": "text", + "x": 142.6640625, + "y": 412.84765625, + "width": 431, + "height": 38, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 392596234, + "version": 771, + "versionNonce": 298348434, + "isDeleted": false, + "text": "fcl.config()\n .put(\"send.scope\", \"https://accessNodeUrl\")", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "KuTZ_hrxsU6Nuq1hi_Pi9", + "type": "line", + "x": 115.57421875, + "y": 278.06640625, + "width": 0, + "height": 186.05859375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1103091658, + "version": 80, + "versionNonce": 777121290, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 186.05859375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "XJ4RlWOEKco-1mBvuKISA", + "type": "line", + "x": 67.6875, + "y": 355.89453125, + "width": 47.6640625, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 269160854, + "version": 35, + "versionNonce": 1127334922, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 47.6640625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "BwaqTUADSaiRHoCGokXKI", + "type": "text", + "x": -178.97265625, + "y": 575.17578125, + "width": 263, + "height": 240, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1391733194, + "version": 2490, + "versionNonce": 716580118, + "isDeleted": false, + "text": "Subscribing allows the dApp to\nreactively receive updates about\na given topic. In this case we\nwill want to receive any updates\non the currentUser.\n\nSubscription callbacks are always\ncalled immediately with what we\ncurrently know.\n\nAll data should be considered\nOPTIONAL", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 234 + }, + { + "id": "gyDGsALUUdgK_TzjT78zF", + "type": "arrow", + "x": 133.03515625, + "y": 575.626953125, + "width": 379.125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 496657494, + "version": 370, + "versionNonce": 1173122634, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 379.125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "UBeyLHncVlN6Qy8Z9Yq0P", + "type": "text", + "x": 134.34765625, + "y": 579.634765625, + "width": 216, + "height": 38, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1793930250, + "version": 731, + "versionNonce": 66402390, + "isDeleted": false, + "text": "fcl.currentUser()\n .subscribe(callback)", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "BhVeXm_7Q-PW9YO_BFdjo", + "type": "arrow", + "x": 507.73828125, + "y": 653.05859375, + "width": 374.96484375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 512638486, + "version": 230, + "versionNonce": 1206320662, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -374.96484375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "BA2XTg-utF__4ANomq0DX", + "type": "text", + "x": 169.609375, + "y": 655.84765625, + "width": 225, + "height": 323, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 12563158, + "version": 1969, + "versionNonce": 1285559882, + "isDeleted": false, + "text": "SUBSCRIPTION currentUser\n---\naddr: null\ncid: null\nloggedIn: false\nverified: false\nidentity:\n name: null\n avatar: null\nscoped:\n email: null\n publicKey: null\nprovider:\n addr: null\n pid: null\n name: null\n icon: null", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 319 + }, + { + "id": "2STUByBmNYXHz9OqNHNGe", + "type": "line", + "x": 117.3984375, + "y": 559.306640625, + "width": 0, + "height": 291.021484375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 429212246, + "version": 314, + "versionNonce": 1359200598, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 291.021484375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "lOQfNEIEHhNIe2KGKuEQF", + "type": "line", + "x": 32.31640625, + "y": 679.796875, + "width": 82.9140625, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 957144778, + "version": 453, + "versionNonce": 170207498, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 82.9140625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "AmNNkLgvu36sA-XfvGzvm", + "type": "text", + "x": 323.33203125, + "y": 688.62109375, + "width": 493, + "height": 300, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 941271766, + "version": 1867, + "versionNonce": 531821962, + "isDeleted": false, + "text": "- users flow address\n- a composite id representing the users authentication method\n- has fcl received either public or private hooks?\n- could fcl successfully request private hooks?\n- users profile info\n - users name per received hooks\n - users avatar per received hooks\n- private scoped data as requested in the challenge\n - the optional email from the provider\n - the optional publicKey from the provider\n- information about the provider\n - the flow address of provider\n - the users internal id for the provider\n - the name of the provider\n - the providers icon", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 294 + }, + { + "id": "Qlrsmnvxv0Yu-6XxjPmon", + "type": "diamond", + "x": 58.4375, + "y": 1010.71875, + "width": 138.90625, + "height": 93.82421875, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 966881814, + "version": 948, + "versionNonce": 175724182, + "isDeleted": false + }, + { + "id": "2Q0NcifLTOiWHZZp7CjVT", + "type": "text", + "x": 87.32421875, + "y": 1032.84375, + "width": 84, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1980422282, + "version": 386, + "versionNonce": 1969063370, + "isDeleted": false, + "text": "CLICK\n\"sign in\"", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "KlOxVWTL9pUeM5MOu6mHQ", + "type": "arrow", + "x": 196.2734375, + "y": 1057.07421875, + "width": 315.79296875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 250703958, + "version": 517, + "versionNonce": 101467798, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 315.79296875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "jVn7DRTBVHuqU6aNGKgn1", + "type": "text", + "x": 198.6328125, + "y": 1062.94140625, + "width": 169, + "height": 19, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 660400138, + "version": 720, + "versionNonce": 1689359818, + "isDeleted": false, + "text": "fcl.authenticate()", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "tDpOm2KyUP_mfcEOtaC6g", + "type": "text", + "x": -176.26171875, + "y": 1083.24609375, + "width": 274, + "height": 260, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 408947158, + "version": 2262, + "versionNonce": 1389549462, + "isDeleted": false, + "text": "The authentication process truly\nstarts here. The user clicks some\nsort of sign in button in the dApp\nwhich triggers the challenge flow.\n\nFCL will then render an iframe\ndisplaying the handshake service.\n\nThe handshake services job is to\nenable a Bring Your Own Provider\ntype of experience, even providers\nfcl and our team have never heard\nof before.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 254 + }, + { + "id": "VANgxLAjMWIqDaOMkQGew", + "type": "arrow", + "x": 526.576171875, + "y": 1126.8046875, + "width": 1154.728515625, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1345945814, + "version": 778, + "versionNonce": 688930710, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 1154.728515625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "ZwB84bTSRuYNQBJ797UUX", + "type": "text", + "x": 528.24609375, + "y": 1069.0078125, + "width": 185, + "height": 20, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2029685718, + "version": 186, + "versionNonce": 1899835222, + "isDeleted": false, + "text": "iframe rendered in dApp", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 14 + }, + { + "id": "3kh7r3_OMznv14O4Q7lds", + "type": "text", + "x": 528.65625, + "y": 1128.5390625, + "width": 272, + "height": 95, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1752712214, + "version": 2306, + "versionNonce": 161396042, + "isDeleted": false, + "text": "HTTP/GET handshake.onflow.org\n---\nl6n: dapp.com\nnonce: NONCE\nscope: email+publicKey", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 91 + }, + { + "id": "I-bSnIv7qk4N11TBrWUvp", + "type": "text", + "x": 749.22265625, + "y": 1167.3671875, + "width": 297, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1473737942, + "version": 2315, + "versionNonce": 140039818, + "isDeleted": false, + "text": "- the location.origin of the dApp\n- a random value supplied by fcl\n- the special scopes the dApp wants ", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "xsaHRUOAlZ8ZI4kGqybV5", + "type": "diamond", + "x": 1616.3515625, + "y": 1133.822265625, + "width": 138.90625, + "height": 93.82421875, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 783279446, + "version": 1251, + "versionNonce": 525459274, + "isDeleted": false + }, + { + "id": "F-S5Qg94dsbKj8AmYRYUm", + "type": "text", + "x": 1647.96875, + "y": 1155.748046875, + "width": 75, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1085031178, + "version": 702, + "versionNonce": 147359114, + "isDeleted": false, + "text": "select\nprovider", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "B2msJeeJj2r7pmQ9572Tt", + "type": "arrow", + "x": 1684.63671875, + "y": 1248.70703125, + "width": 774.36328125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 135045386, + "version": 92, + "versionNonce": 128871894, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -774.36328125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "QDa016qky6i2rbpghQINV", + "type": "text", + "x": 944.94140625, + "y": 1251.53515625, + "width": 206, + "height": 95, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 151321174, + "version": 2478, + "versionNonce": 1662550666, + "isDeleted": false, + "text": "HTTP/GET provider.com\n---\nl6n: L6N\nnonce: NONCE\nscope: email+publicKey", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 91 + }, + { + "id": "6VaavfynVHFqaOHcJm68y", + "type": "text", + "x": 1155.625, + "y": 1290.04296875, + "width": 297, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1531656010, + "version": 2395, + "versionNonce": 1533528662, + "isDeleted": false, + "text": "- the location.origin of the dApp\n- a random value supplied by fcl\n- the special scopes the dApp wants ", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "NoiopQQrQ6gA3gBnK8QEO", + "type": "diamond", + "x": 826.49609375, + "y": 1331.916015625, + "width": 158.109375, + "height": 93.82421875, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 212982614, + "version": 1492, + "versionNonce": 605161866, + "isDeleted": false + }, + { + "id": "VSakes544b46aPuOgA12w", + "type": "text", + "x": 845.65234375, + "y": 1350.134765625, + "width": 122, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 879537418, + "version": 813, + "versionNonce": 761283466, + "isDeleted": false, + "text": "user\nauthenticates", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "TQB93-jsxoUcL9GwaBlZ1", + "type": "arrow", + "x": 825.63671875, + "y": 1377.748046875, + "width": 302.73828125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 92871114, + "version": 442, + "versionNonce": 629633162, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -302.73828125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "SkzWVjyWaeBHWW38XqLMT", + "type": "text", + "x": 558.888671875, + "y": 1392.056640625, + "width": 300, + "height": 190, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1183170518, + "version": 3074, + "versionNonce": 1994755286, + "isDeleted": false, + "text": "JS/postMessage l6N\n---\ntype: \"FCL::CHALLENGE::RESPONSE\"\naddr: FLOW_ADDRESS\npaddr: PROVIDER_FLOW_ADDRESS\ncode: CODE\nexp: CODE_EXPIRES_AT\nhks: HOOKS_URL\nnonce: NONCE\nl6n: L6N", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 186 + }, + { + "id": "25wzZQ-dBZxMxT8MW1Z-d", + "type": "text", + "x": 868.22265625, + "y": 1427.90234375, + "width": 672, + "height": 160, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1366848586, + "version": 3377, + "versionNonce": 2108085130, + "isDeleted": false, + "text": "- fcl listens for this event type\n- flow address of the user (used to fetch public hooks)\n- flow address of the provider (used to fetch providers info)\n- a token supplied when requesting the provider for private hooks\n- when the code expires (epoch timestamp in the future)\n- where to request the providers private hooks for the user\n- the nonce provided by fcl at the start of the challenge\n- the location.origin of the dApp (also provided by fcl at the start of the challenge)", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 154 + }, + { + "id": "NXxTdsH-rCQCSFd5SbNvX", + "type": "arrow", + "x": 1616.328125, + "y": 1159.81640625, + "width": 308.453125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 40, + "seed": 1011362634, + "version": 98, + "versionNonce": 62543126, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -308.453125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "lnEjAi8iE7V1aahOopRXY", + "type": "arrow", + "x": 1307.71484375, + "y": 1202.07421875, + "width": 316.8359375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 40, + "seed": 954039370, + "version": 50, + "versionNonce": 144070166, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 316.8359375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "1ZVyii2hq0Wpqq8542uW9", + "type": "text", + "x": 1318.5078125, + "y": 1172.37109375, + "width": 284, + "height": 20, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 40, + "seed": 1705453142, + "version": 174, + "versionNonce": 1058064970, + "isDeleted": false, + "text": "fetch available providers from chain", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 14 + }, + { + "id": "X6HUR1_MrW9gTRgJGheAA", + "type": "arrow", + "x": 523.095703125, + "y": 2420.91796875, + "width": 379.943359375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1506760842, + "version": 1136, + "versionNonce": 94275030, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 379.943359375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "7PcbZK4cQREATn7XIHt_A", + "type": "text", + "x": 525.306640625, + "y": 2425.44140625, + "width": 169, + "height": 57, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1876413718, + "version": 1321, + "versionNonce": 232123018, + "isDeleted": false, + "text": "HTTP/GET HOOKS_URL\n---\ncode: CODE", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 53 + }, + { + "id": "42lCsAd4TL61C2ZBEbmuC", + "type": "line", + "x": 33.736328125, + "y": 1173.4833984375, + "width": 82.9140625, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1664276234, + "version": 754, + "versionNonce": 934966614, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 82.9140625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "3WLQiIIioSPeHv0xMKLko", + "type": "text", + "x": -173.546875, + "y": 1886.24609375, + "width": 280, + "height": 560, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 964205782, + "version": 4104, + "versionNonce": 1022153674, + "isDeleted": false, + "text": "FCL should now have the pieces\nit needs to fetch both the public\nand private hooks.\n\nPublic hooks are stored on chain\nin a resource owned by the flow\naddress. They can also point out\nto resources owned by the provider\nallowing the provider to change\nprovider specific detail as needed\nand example of that is moving the\nauthorization endpoint. SENSITIVE\nDATA SHOULD NEVER BE PUT IN\nA PUBLIC HOOK.\n\nPrivate hooks are provided by\nthe provider. They include provider\nspecific overrides to the public\nhooks as well as the additional\nscopes that were requested in\nthe challenge.\n\nFCL will attempt to fetch both\nprivate and public hooks, deep\nmerge the private into the public\nand then let any currentUser\nsubscribers know there is some\nnew data for them.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 554 + }, + { + "id": "oByTwhCzigB059e9baKhZ", + "type": "arrow", + "x": 524.0869140625, + "y": 1639.83203125, + "width": 767.9365234375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1399244246, + "version": 1012, + "versionNonce": 894784022, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 767.9365234375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "bQl2f4HdK2Ezo1MVmCQs-", + "type": "text", + "x": 525.6220703125, + "y": 1640.6640625, + "width": 216, + "height": 57, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 263301770, + "version": 1277, + "versionNonce": 1310257610, + "isDeleted": false, + "text": "FLOW/SCRIPT FETCH_HOOKS\n---\naddress: FLOW_ADDRESS", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 53 + }, + { + "id": "OfQGmyTtgjme0SWUklR_a", + "type": "arrow", + "x": 1293.146484375, + "y": 1722.36328125, + "width": 774.36328125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1210260886, + "version": 263, + "versionNonce": 210434070, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -774.36328125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "zlS_RGPXHJyxMTeGPbPaA", + "type": "text", + "x": 556.822265625, + "y": 1727.609375, + "width": 338, + "height": 361, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 358067914, + "version": 4272, + "versionNonce": 895971274, + "isDeleted": false, + "text": "FLOW/RESPONSE FETCH_HOOKS\n---\naddr: FLOW_ADDRESS\nkeyId: KEY_ID\nidentity:\n name: NAME\n avatar: AVATAR\nauthorizations:\n - id: PROVIDER_AUTHORIZATION_ID\n addr: PROVIDER_FLOW_ADDRESS\n method: \"HTTP/POST\"\n endpoint: AUTHORIZATION_ENDPOINT\n data:\n id: PID\n - id: PROVIDER_AUTHORIZATION_ID_2\n addr: PROVIDER_FLOW_ADDRESS\n method: \"REMOTE\"\n data:\n id: PID", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 357 + }, + { + "id": "RpkmMqz9tdMWF-3_bw77s", + "type": "text", + "x": 731.95703125, + "y": 1765.109375, + "width": 226, + "height": 100, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 253356234, + "version": 5160, + "versionNonce": 1711938006, + "isDeleted": false, + "text": "- flow address for user\n- preferred signing key\n- public identity info\n - an optional name value\n - an optional avatar value", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 94 + }, + { + "id": "2z30__NPjKNxvuE9Pyxmf", + "type": "text", + "x": 916.23046875, + "y": 2017.57421875, + "width": 629, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1231760906, + "version": 5822, + "versionNonce": 1146700234, + "isDeleted": false, + "text": "an public authorization hook that points to a remote authorization\nit will use the providers flow address and id that is supplied to do the look up", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "wwWWue6mYk9yxli73gPmW", + "type": "line", + "x": 901.21875, + "y": 1991.62890625, + "width": 0, + "height": 98.58984375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 94038550, + "version": 363, + "versionNonce": 1292446730, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 98.58984375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "egK8LT0KvLONRfcsgWWyx", + "type": "arrow", + "x": 525.68017578125, + "y": 2181.4375, + "width": 767.9365234375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1321042966, + "version": 1094, + "versionNonce": 152448970, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 767.9365234375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "oi3nAccLri9ZoY-toeQbo", + "type": "text", + "x": 529.15673828125, + "y": 2186.72265625, + "width": 281, + "height": 57, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 685568074, + "version": 1382, + "versionNonce": 86931402, + "isDeleted": false, + "text": "FLOW/SCRIPT FETCH_PROVIDER\n---\naddress: PROVIDER_FLOW_ADDRESS", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 53 + }, + { + "id": "HM8bKmZ_6p8oTn3sLt9NW", + "type": "text", + "x": 916.25, + "y": 1893.673828125, + "width": 547, + "height": 80, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1139490582, + "version": 6267, + "versionNonce": 692740886, + "isDeleted": false, + "text": "an public authorization hook that is controlled by users flow account\nit can be overloaded by private hooks if the addr and id match.\nOverloading should be avoided where possible as this authorization\nstrategy could still be used by non-currentUser situations", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 74 + }, + { + "id": "HPG9r6GWIVU-MLDXRhR0c", + "type": "line", + "x": 901.12109375, + "y": 1880.525390625, + "width": 0, + "height": 105.830078125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 851207498, + "version": 554, + "versionNonce": 1201238218, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 105.830078125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "s6PIfFtwf-7CX3o-PHI9l", + "type": "arrow", + "x": 1291.263671875, + "y": 2257.9453125, + "width": 774.36328125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 631656074, + "version": 367, + "versionNonce": 17668362, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -774.36328125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "d-aTpJ55bJetrQsYzT-8o", + "type": "text", + "x": 554.728515625, + "y": 2260.98828125, + "width": 253, + "height": 114, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 697513750, + "version": 4543, + "versionNonce": 1310176022, + "isDeleted": false, + "text": "FLOW/RESPONSE FETCH_HOOKS\n---\naddr: PROVIDER_FLOW_ADDRESS\nname: PROVIDER_NAME\nicon: PROVIDER_ICON\nauthn: AUTHENTICATION_URL", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 110 + }, + { + "id": "2_VuSBa3bFRM7KYWRfqpK", + "type": "line", + "x": 508.91796875, + "y": 1644.27734375, + "width": 154.62109375, + "height": 311.0625, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 441658570, + "version": 350, + "versionNonce": 389400074, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -154.62109375, + 311.0625 + ] + ], + "lastCommittedPoint": [ + -157.6171875, + 295.58984375 + ] + }, + { + "id": "5ME55bvkr9r1r5Zqo7QMP", + "type": "line", + "x": 350.4609375, + "y": 2023.38671875, + "width": 162.4765625, + "height": 160.96875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 442543050, + "version": 54, + "versionNonce": 1075938122, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 162.4765625, + 160.96875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "jT1SAtxFHgoSlX-HSjGb3", + "type": "line", + "x": 349.04296875, + "y": 2091.76953125, + "width": 165.9921875, + "height": 330.19921875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 677853206, + "version": 165, + "versionNonce": 1014681046, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 165.9921875, + 330.19921875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "lnpb7wSSUK_sV4qXlPQVt", + "type": "text", + "x": 270.62109375, + "y": 2018.0078125, + "width": 126, + "height": 20, + "angle": 4.71238898038469, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 843163990, + "version": 190, + "versionNonce": 599478794, + "isDeleted": false, + "text": "Done in parallel", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 14 + }, + { + "id": "msGB2E2TZJGP7TkawkmAf", + "type": "arrow", + "x": 900.84765625, + "y": 2509.64453125, + "width": 379.458984375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1210719318, + "version": 490, + "versionNonce": 16187478, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -379.458984375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "-VVQYfd22ZmqYqXRLxXEm", + "type": "text", + "x": 554.970703125, + "y": 2514.1875, + "width": 272, + "height": 304, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1012202506, + "version": 5187, + "versionNonce": 1530171926, + "isDeleted": false, + "text": "HTTP/GET HOOKS_URL RESPONSE\n---\naddr: FLOW_ADDRESS\nkeyId: KEY_ID_2\nidentity:\n name: NAME\n avatar: AVATAR\nscoped:\n email: EMAIL\n publicKey: null\nprovider:\n addr: PROVIDER_FLOW_ADDRESS\n pid: PID\n name: PROVIDER_NAME\n icon: PROVIDER_ICON\n authn: AUTHENTICATION_URL", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 300 + }, + { + "id": "OnbDFeHN4fQhUjlz_WLfY", + "type": "text", + "x": 731.4140625, + "y": 2549.73046875, + "width": 680, + "height": 160, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2121614090, + "version": 7076, + "versionNonce": 292326282, + "isDeleted": false, + "text": "- Users Flow Address\n- overloading the preferred signing key\n- private identity info (will overload public info)\n in this case the data is the same\n if it was omitted fcl will use the public info if its there\n- the requested scoped data\n - user decided to send the email\n - but also decided to NOT send the publicKey (reminder that everything is optional)", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 154 + }, + { + "id": "2N9s2KDB46jGhu9W9zxZ5", + "type": "text", + "x": 835.90234375, + "y": 2722.09375, + "width": 414, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1232014154, + "version": 7368, + "versionNonce": 1966205206, + "isDeleted": false, + "text": "- flow address of provider (used in composite id)\n- id controlled by the provider (used in composite id)", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "SUbm9_A_s1r_jH2PsAK_i", + "type": "line", + "x": 120.42578125, + "y": 1632.94189453125, + "width": 0, + "height": 1330.13232421875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1251139734, + "version": 1260, + "versionNonce": 719119498, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1330.13232421875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "zts7CpbK3b8hN6Lf_L4NX", + "type": "line", + "x": 33.37109375, + "y": 2168.4453125, + "width": 82.9140625, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1021861962, + "version": 883, + "versionNonce": 504499158, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 82.9140625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "6-8TIlr57ixKs6Sj3Voqe", + "type": "text", + "x": 110.08984375, + "y": 92.10546875, + "width": 1183, + "height": 45, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1019216458, + "version": 772, + "versionNonce": 2018618070, + "isDeleted": false, + "text": "Flow Client Library - Remote Async Authentication & Authorization", + "font": "36px Virgil", + "textAlign": "left", + "baseline": 32 + }, + { + "id": "p424mWR_hsD0j4YBnrCVw", + "type": "text", + "x": 108.97265625, + "y": 137.62109375, + "width": 306, + "height": 50, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1331610518, + "version": 444, + "versionNonce": 1716453646, + "isDeleted": false, + "text": "Last Updated: April 19th 2020\nVersion: 3.2", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 43 + }, + { + "id": "qF5Aeoa9iYz0RqCATeZEH", + "type": "text", + "x": 1738.421875, + "y": 288.890625, + "width": 176, + "height": 35, + "angle": 1.5707963267948966, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 2000233674, + "version": 424, + "versionNonce": 186896022, + "isDeleted": false, + "text": "Setup/Config", + "font": "28px Virgil", + "textAlign": "left", + "baseline": 25 + }, + { + "id": "SwAuz72dvcZhh4zIV1V_W", + "type": "line", + "x": 1826.83984375, + "y": 1178.0390625, + "width": 0, + "height": 436.82421875, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 2110378634, + "version": 1335, + "versionNonce": 289846422, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 436.82421875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Pr75G8We8YRy0Yi_gYH0l", + "type": "text", + "x": 1759.25, + "y": 1681.26171875, + "width": 132, + "height": 35, + "angle": 1.5707963267948966, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 1327777994, + "version": 1007, + "versionNonce": 320669642, + "isDeleted": false, + "text": "Collection", + "font": "28px Virgil", + "textAlign": "left", + "baseline": 25 + }, + { + "id": "PVT9D64GjjaP2ucRTUfLs", + "type": "line", + "x": 1826.046875, + "y": 1770.51171875, + "width": 0, + "height": 1215.11328125, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 1522073814, + "version": 2352, + "versionNonce": 2129637846, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1215.11328125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "jvYGx-4d-NipQ0Bpnu05q", + "type": "arrow", + "x": 508.783203125, + "y": 2558.3984375, + "width": 374.96484375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 616907798, + "version": 440, + "versionNonce": 88690262, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -374.96484375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "IZXf_z8RKv6FuMhkvkXNf", + "type": "text", + "x": 170.095703125, + "y": 2563.9375, + "width": 272, + "height": 323, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1748054090, + "version": 2404, + "versionNonce": 1955554902, + "isDeleted": false, + "text": "SUBSCRIPTION currentUser\n---\naddr: FLOW_ADDRESS\ncid: COMPOSITE_ID\nloggedIn: true\nverified: true\nidentity:\n name: NAME\n avatar: AVATAR\nscoped:\n email: EMAIL\n publicKey: null\nprovider:\n addr: PROVIDER_FLOW_ADDRESS\n pid: PID\n name: PROVIDER_NAME\n icon: PROVIDER_ICON", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 319 + }, + { + "id": "waRSRXDeKvd5f6JPg0G6E", + "type": "diamond", + "x": 56.0546875, + "y": 3013.853515625, + "width": 138.90625, + "height": 93.82421875, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1556613014, + "version": 1054, + "versionNonce": 1451302358, + "isDeleted": false + }, + { + "id": "paxn_sWovWBSehdKXh9Yq", + "type": "text", + "x": 75.44140625, + "y": 3035.978515625, + "width": 103, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 961438922, + "version": 526, + "versionNonce": 604557962, + "isDeleted": false, + "text": "TRIGGER\nTRANSACTION", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "hrSSY4HIR0R4f4pjnZxdq", + "type": "arrow", + "x": 195.189453125, + "y": 3058.953125, + "width": 315.79296875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 94461718, + "version": 622, + "versionNonce": 1200903050, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 315.79296875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "6_zL8bXZ7lEK83iY4swSO", + "type": "text", + "x": 188.287109375, + "y": 3066.16796875, + "width": 525, + "height": 228, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 653804874, + "version": 1965, + "versionNonce": 1765016086, + "isDeleted": false, + "text": "const response = await fcl.send([\n vtx.TRANSFER_FLOW_TOKENS,\n sdk.params([\n sdk.param(AMOUNT, t.UFix64),\n sdk.param(TO_ADDRESS, t.Address)\n ]),\n sdk.proposer(fcl.currentUser().proposerAuthorization),\n sdk.payer(fcl.currentUser().payerAuthorization),\n sdk.authorizations([\n fcl.currentUser().authorization\n ])\n])", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 224 + }, + { + "id": "huhsom-5KjKGKdIYDMOqy", + "type": "text", + "x": 718.8828125, + "y": 3180.875, + "width": 300, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 868467722, + "version": 7984, + "versionNonce": 141727690, + "isDeleted": false, + "text": "- who is proposing the transaction\n- who is paying for the transaction\n- who are authorizing the transaction", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "EZpsNzOMm6AF6ard6rzL9", + "type": "text", + "x": 455.97265625, + "y": 3083.23828125, + "width": 297, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 771410058, + "version": 8237, + "versionNonce": 1499597386, + "isDeleted": false, + "text": "- a verified/provable transaction\n- params to pass to the transaction", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "zIfBGvs5LZkn3wLsdHnBD", + "type": "arrow", + "x": 518.708984375, + "y": 3285.18359375, + "width": 382.380859375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1573066122, + "version": 784, + "versionNonce": 1662081558, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 382.380859375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "QeOvoAeQuTwqV9BaVr0RY", + "type": "text", + "x": 523.296875, + "y": 3287.96875, + "width": 272, + "height": 190, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1929637910, + "version": 2943, + "versionNonce": 547750290, + "isDeleted": false, + "text": "HOOK authorization\n---\nmessage: MESSAGE\naddr: FLOW_ADDRESS\nkeyId: KEY_ID_2\nrole:\n proposer: true\n authorizer: true\n payer: true\ninteraction: INTERACTION_DATA", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 186 + }, + { + "id": "m-dBP7WUdYjECj9H_N-Lw", + "type": "text", + "x": 698.4765625, + "y": 3324.60546875, + "width": 613, + "height": 80, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 566844874, + "version": 8754, + "versionNonce": 1647442638, + "isDeleted": false, + "text": "- what needs to be signed (will be in hex, need to cast to binary for signing)\n- flow address to sign with\n- preferred signing key\n- what roles this signature plays", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 74 + }, + { + "id": "uFmYk6gAWEzV926It2dyS", + "type": "text", + "x": 803.859375, + "y": 3457.97265625, + "width": 406, + "height": 120, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 963183382, + "version": 9206, + "versionNonce": 2061418122, + "isDeleted": false, + "text": "- data that can be used to recreate the payload\n so it can be verified. It should have everything\n about the transaction so the provider could also\n use that data in here to give the user a better\n experience when they go to approve/decline the\n transaction", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 114 + }, + { + "id": "VkMECX5n8ypX3ZzyzSoiY", + "type": "arrow", + "x": 902.3193359375, + "y": 3588.53515625, + "width": 379.458984375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1725344714, + "version": 556, + "versionNonce": 1331222230, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -379.458984375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "fTfdefywWKAJLExOheTvm", + "type": "text", + "x": 554.4619140625, + "y": 3591.27734375, + "width": 413, + "height": 380, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 403852758, + "version": 6211, + "versionNonce": 1875251478, + "isDeleted": false, + "text": "HOOK authorization RESPONSE\n---\nstatus: PENDING\ncompositeSignature:\n addr: null\n keyId: null\n signature: null\nauthorizationUpdates:\n method: \"HTTP/GET\"\n endpoint: AUTHZ_INFO_URL\n data: { aid: AUTHORIZATION_ID }\nlocal:\n - method: \"BROWSER/IFRAME\"\n endpoint: LOCAL_IFRAME_ENDPOINT\n width: WIDTH\n height: HEIGHT\n background: BG_COLOR\n - method: \"BROWSER/EXTENSION\"\n eventType: PROVIDER_EXTENSION_EVENT_TYPE\n data: DATA_TO_SEND_EXTENSION", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 376 + }, + { + "id": "dnULn5eXCu25FbJ5ADvgb", + "type": "arrow", + "x": 520.8291015625, + "y": 3998.94921875, + "width": 382.380859375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 782169098, + "version": 936, + "versionNonce": 318209162, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 382.380859375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "aXHKmUTpcXq-KXd22YVHZ", + "type": "text", + "x": 523.3154296875, + "y": 4006.41015625, + "width": 234, + "height": 57, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1174514070, + "version": 3106, + "versionNonce": 796185162, + "isDeleted": false, + "text": "HOOK authorizationUpdates\n---\naid: AUTHORIZATION_ID", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 53 + }, + { + "id": "Qt5oM_exd-ilHtenCfsx1", + "type": "arrow", + "x": 899.611328125, + "y": 4085.2265625, + "width": 379.458984375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1781753622, + "version": 639, + "versionNonce": 1286590294, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -379.458984375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "HkOFxXHDQ51b1hvi6qcyX", + "type": "text", + "x": 555.01171875, + "y": 4090.125, + "width": 319, + "height": 209, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 308985162, + "version": 6371, + "versionNonce": 1920465162, + "isDeleted": false, + "text": "HOOK authorizationUpdates RESPONSE\n---\nstatus: PENDING\ncompositeSignature:\n addr: null\n keyId: null\n signature: null\nauthorizationUpdates:\n method: \"HTTP/GET\"\n endpoint: AUTHZ_INFO_URL\n data: { aid: AUTHORIZATION_ID }", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 205 + }, + { + "id": "3INOWYSzlw6A2i5ZFLpWE", + "type": "arrow", + "x": 523.39208984375, + "y": 4318.509765625, + "width": 382.380859375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1575886678, + "version": 1069, + "versionNonce": 892796950, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 382.380859375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "1GaZCC06LIykjWF8msHrO", + "type": "text", + "x": 526.07763671875, + "y": 4325.970703125, + "width": 234, + "height": 57, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1460054282, + "version": 3239, + "versionNonce": 499725386, + "isDeleted": false, + "text": "HOOK authorizationUpdates\n---\naid: AUTHORIZATION_ID", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 53 + }, + { + "id": "rJdS3rSR6xZz3q3K8_obb", + "type": "arrow", + "x": 902.37353515625, + "y": 4404.787109375, + "width": 379.458984375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 14402710, + "version": 772, + "versionNonce": 1707773270, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -379.458984375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "VeXvW_CPgoYJy_zq6RVC6", + "type": "text", + "x": 557.45361328125, + "y": 4407.943359375, + "width": 319, + "height": 133, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1595996106, + "version": 6605, + "versionNonce": 1537513802, + "isDeleted": false, + "text": "HOOK authorizationUpdates RESPONSE\n---\nstatus: APPROVED\ncompositeSignature:\n addr: FLOW_ADDRESS\n keyId: KEY_ID_2\n signature: SIGNATURE", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 129 + }, + { + "id": "Sd2FuAqCDzEl9_UVKxCdu", + "type": "text", + "x": 741.82421875, + "y": 3627.671875, + "width": 256, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 664875030, + "version": 8575, + "versionNonce": 1250821334, + "isDeleted": false, + "text": "- the status of the transaction\n- an empty composite signature ", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "hM2bEW5KNVxetY6j53I3-", + "type": "text", + "x": 763.0625, + "y": 3723.57421875, + "width": 421, + "height": 20, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1231038090, + "version": 8746, + "versionNonce": 244451670, + "isDeleted": false, + "text": "- where and how to get updates for the transaction", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 14 + }, + { + "id": "fNHFI8o8oO5yAGFPaxe5s", + "type": "text", + "x": 860, + "y": 3798.71484375, + "width": 760, + "height": 20, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 610817162, + "version": 9131, + "versionNonce": 414310218, + "isDeleted": false, + "text": "- lets FCL know if there are local ways of letting the user authorize from their current device", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 14 + }, + { + "id": "tfACerMEHudHalqtkDVxw", + "type": "text", + "x": 916.138671875, + "y": 3836.7060546875, + "width": 366, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1720766870, + "version": 6618, + "versionNonce": 596298954, + "isDeleted": false, + "text": "FCL will render an iframe showing the endpoint\nthe iframe will be rendered with the supplied\nwidth, height and background color", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "lEAUSNRbeExIAbUFoi457", + "type": "line", + "x": 898.724609375, + "y": 3819.2880859375, + "width": 0, + "height": 92.2431640625, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 617560778, + "version": 810, + "versionNonce": 687063446, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 92.2431640625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "VMWNVeWbavakv7ZbvBDZ4", + "type": "text", + "x": 986.568359375, + "y": 3938.26123046875, + "width": 373, + "height": 20, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1532948950, + "version": 6925, + "versionNonce": 1496202634, + "isDeleted": false, + "text": "FCL will send an event to a browser extension", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 14 + }, + { + "id": "SNdO8VWRuFZGJFHu1jM1s", + "type": "line", + "x": 975.658203125, + "y": 3912.92529296875, + "width": 0, + "height": 70.04736328125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1134706314, + "version": 1016, + "versionNonce": 1539103638, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 70.04736328125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "U-EEL_3O6Lsxb7mROH8Pr", + "type": "line", + "x": 548.703125, + "y": 3801.44091796875, + "width": 0, + "height": 168.72705078125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 237420362, + "version": 1079, + "versionNonce": 1922915862, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 168.72705078125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "VRe96xT0_1RxtHTMIyi62", + "type": "text", + "x": 346.95703125, + "y": 3819.34375, + "width": 195, + "height": 140, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1235761750, + "version": 7272, + "versionNonce": 1943726230, + "isDeleted": false, + "text": "These will only happen\nfor the currentUser, but\nthe provider should still\nmake sure that the user\nis authenticated before\nshowing any possibly\nsensitive information", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 134 + }, + { + "id": "58mykrKHV9EaCFvmLqX9I", + "type": "text", + "x": 913.681640625, + "y": 4180.76904296875, + "width": 302, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 291843082, + "version": 7021, + "versionNonce": 506427606, + "isDeleted": false, + "text": "The same as the above authorization\nresponse but sans the local info", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "wJIW4AG-R71Cq1nvCREvC", + "type": "line", + "x": 901.482421875, + "y": 4120.62060546875, + "width": 0, + "height": 184.09423828125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 64680342, + "version": 1105, + "versionNonce": 1179937866, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 184.09423828125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "1_bAu7XiS5YNkJzGVFz-P", + "type": "text", + "x": 213, + "y": 4136.0703125, + "width": 249, + "height": 120, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 530454218, + "version": 7482, + "versionNonce": 1808024342, + "isDeleted": false, + "text": "FCL will continue to request\nauthorizationUpdates until\nthe response no longer returns\nan authorizationUpdates hook\nor the status is APPROVED or\nREFUSED", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 114 + }, + { + "id": "19wWD272ASOGmsbjs-59d", + "type": "line", + "x": 443.7265625, + "y": 4170.546875, + "width": 65.46484375, + "height": 129.7421875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1153278166, + "version": 109, + "versionNonce": 2074859210, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 65.46484375, + -129.7421875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "FP82AskFm3Lh1tPvv1lq9", + "type": "line", + "x": 450.05859375, + "y": 4240.8671875, + "width": 61.82421875, + "height": 113.42578125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 199143626, + "version": 255, + "versionNonce": 292145110, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 61.82421875, + 113.42578125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "t_6ydp1uC_v23r855FNXE", + "type": "arrow", + "x": 525.6611328125, + "y": 4585, + "width": 761.1201171875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 179347786, + "version": 1329, + "versionNonce": 526737418, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 761.1201171875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "us3PQTgK_fN8w5Nk4IhG_", + "type": "text", + "x": 565.6875, + "y": 4590.29296875, + "width": 319, + "height": 19, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2127509142, + "version": 1722, + "versionNonce": 2040934282, + "isDeleted": false, + "text": "FLOW/TRANSACTION submitTransaction", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "GfjjxVGNRF0p99UbfDZjq", + "type": "arrow", + "x": 1286.1953125, + "y": 4646.7734375, + "width": 760.6982421875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1092171862, + "version": 975, + "versionNonce": 53636950, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -760.6982421875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "pW8AlxjpdNg5jWX_4n0dM", + "type": "text", + "x": 567.89453125, + "y": 4653.734375, + "width": 300, + "height": 19, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 432772490, + "version": 1993, + "versionNonce": 933974614, + "isDeleted": false, + "text": "FLOW/RESPONSE submitTransaction ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "pKKtykoGvufR7ERvt-eTi", + "type": "arrow", + "x": 512.6123046875, + "y": 4647.16796875, + "width": 379.458984375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1779519574, + "version": 863, + "versionNonce": 964619158, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -379.458984375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Ap9Cyn92PMXlJBo3aPhoP", + "type": "text", + "x": 160.5078125, + "y": 4652.4609375, + "width": 356, + "height": 19, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1261986506, + "version": 2126, + "versionNonce": 2067928278, + "isDeleted": false, + "text": "const response = await fcl.send([...])", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "u-UfsHkkQadRF6SCVyVx1", + "type": "arrow", + "x": 136.68359375, + "y": 4710.556640625, + "width": 377.4296875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1607577482, + "version": 823, + "versionNonce": 836980298, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 377.4296875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "3F1bHxsqx2nTNCPGB-6NI", + "type": "text", + "x": 140.59375, + "y": 4715.869140625, + "width": 234, + "height": 38, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 51013142, + "version": 2270, + "versionNonce": 451491158, + "isDeleted": false, + "text": "fcl.transaction(response)\n .subscribe(callback)", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "-UaYdX-OEaS5wVMrwN5xR", + "type": "text", + "x": 1744.84375, + "y": 3064.501953125, + "width": 162, + "height": 35, + "angle": 1.5707963267948966, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 338788298, + "version": 1205, + "versionNonce": 1853718154, + "isDeleted": false, + "text": "Transaction", + "font": "28px Virgil", + "textAlign": "left", + "baseline": 25 + }, + { + "id": "LuFDPJCxj7GY2koIvvpQY", + "type": "line", + "x": 1827.22265625, + "y": 3166.751953125, + "width": 0, + "height": 1603.451171875, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 561953238, + "version": 2787, + "versionNonce": 1627850518, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1603.451171875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "0qPJx0BzT51VBvJZZbAtb", + "type": "line", + "x": 1828.48046875, + "y": 1618.515625, + "width": 1701.3046875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 1012736982, + "version": 218, + "versionNonce": 1545674058, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -1701.3046875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "pb8U1YVZRiNyhtgwvxJoO", + "type": "line", + "x": 1823.1328125, + "y": 2984.24609375, + "width": 1695.5, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 1893180118, + "version": 393, + "versionNonce": 1208071254, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -1695.5, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "9mq_YXv-6dfI7LCcLOoZk", + "type": "line", + "x": 1825.71875, + "y": 4770.21484375, + "width": 1695.5, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 303631562, + "version": 488, + "versionNonce": 2036524042, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -1695.5, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "vKI1TN3W9zEYCqXspw6cd", + "type": "line", + "x": 116.59765625, + "y": 3556.2403564453125, + "width": 0, + "height": 987.7479248046875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 561630986, + "version": 2591, + "versionNonce": 1883029270, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 987.7479248046875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "x_rOBERCd6TqS6QnIH9qV", + "type": "line", + "x": 116.16015625, + "y": 4690.296875, + "width": 0, + "height": 76.2421875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 406239574, + "version": 2817, + "versionNonce": 691342730, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 76.2421875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "zOwAE2N733ejewShvmEsl", + "type": "line", + "x": 115.9921875, + "y": 4556.8359375, + "width": 0, + "height": 119.27734375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 315952906, + "version": 3005, + "versionNonce": 1280138506, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 119.27734375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "aDpvsyDq7LP1_OC4cpBxX", + "type": "text", + "x": 458.748046875, + "y": 2862.462890625, + "width": 372, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 385734090, + "version": 6220, + "versionNonce": 1866634186, + "isDeleted": false, + "text": "A deep merge of the private currentUser data\ninto the public currentUser data", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "h7Bs0gToLSbntCq0_kmTk", + "type": "line", + "x": 452.544921875, + "y": 2604.6953125, + "width": 0, + "height": 292.771484375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1087030230, + "version": 626, + "versionNonce": 48037846, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 292.771484375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "toQyT3WzIMdRQiPm4x9M2", + "type": "text", + "x": -219.69921875, + "y": 2983.08203125, + "width": 292, + "height": 240, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 331266710, + "version": 5459, + "versionNonce": 1436890454, + "isDeleted": false, + "text": "When a transaction is initiated fcl\nwill go through a process called\nasynchronous decomposition. In short\nit will try to make sure it has all\nthe things it needs to have a high\nprobability of submitting a successful\ntransaction. As an example if there\nisn't a currentUser but the\ntransaction needs a currentUser, fcl\nwill attempt to authenticate the\nuser before the transaction needs\nany of the currentUsers information.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 234 + }, + { + "id": "x_lnq9l_uj6CvcgnVJgeJ", + "type": "line", + "x": 18.23828125, + "y": 3134.0078125, + "width": 98.14453125, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 142857302, + "version": 1239, + "versionNonce": 821686986, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 98.14453125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "b_B9QDbiNzXEojm8Ot3A6", + "type": "line", + "x": 118.421875, + "y": 3302.0743408203125, + "width": 0, + "height": 241.8240966796875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1749654346, + "version": 2215, + "versionNonce": 568597834, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 241.8240966796875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Co3Eq_HoZ3jX0sykDN2jl", + "type": "text", + "x": -160.5390625, + "y": 3359.703125, + "width": 257, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 832108426, + "version": 5797, + "versionNonce": 1452595658, + "isDeleted": false, + "text": "FCL will attempt to authorize\nthe transaction with the various\nauthorization hooks.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "3tVP74pUyHOCD2o9JmG9o", + "type": "line", + "x": 18.845703125, + "y": 3408.4453125, + "width": 98.14453125, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 272878102, + "version": 1318, + "versionNonce": 1339264278, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 98.14453125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "xlOhPrPEy7PRuivNrLRnv", + "type": "text", + "x": -177.6328125, + "y": 3559.34375, + "width": 287, + "height": 520, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 190797386, + "version": 7155, + "versionNonce": 1392608586, + "isDeleted": false, + "text": "FCL will timeout authorizations\nfairly quickly if they don't respond\nright away. This is because the\nauthorization doesn't actually need\nto happen with this request.\nInstead what this request is doing\nis supplying the provider with what\nto sign, and then the provider sends\nback the information required to\ncreate a backchannel in which FCL\ncan then request the results.\n\nThe provider can also supply some\nlocal strategies that can give the\nuser an in dApp authorization flow.\nThese strategies can be things like\nrendering an iframe or sending an\nevent to a browser extension.\n\nBecause the actual response that\nmatters for the authorization\nhappens in a back channel we can\nlock these local strategies down\nas they really only act as a window\ninto the providers authorization\nuser experience.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 514 + }, + { + "id": "NEX_J-rQLNq2wm5mbCd7c", + "type": "line", + "x": 68.46875, + "y": 3788.57421875, + "width": 47.951171875, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 317150154, + "version": 1438, + "versionNonce": 987723158, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 47.951171875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "JVb2QMCeDhYIHIb3lBAJ8", + "type": "line", + "x": 1700.52734375, + "y": 3341.05859375, + "width": 0, + "height": 787.40234375, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 20, + "seed": 287421898, + "version": 3387, + "versionNonce": 363875278, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 787.40234375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "T0FONKIugMmjyhBNPa1b2", + "type": "arrow", + "x": 908.6572265625, + "y": 3375.17578125, + "width": 783.2568359375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 62204694, + "version": 1087, + "versionNonce": 533242706, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 783.2568359375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "RzUmFjJWM7eyvTR6uIWjl", + "type": "arrow", + "x": 1694.3984375, + "y": 4106, + "width": 782.88671875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 302396822, + "version": 1558, + "versionNonce": 568895754, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -782.88671875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "IvLj82FximT02G1AK9jZ_", + "type": "diamond", + "x": 1622.4375, + "y": 3971.888671875, + "width": 150.1953125, + "height": 93.82421875, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1415433814, + "version": 1295, + "versionNonce": 1640663126, + "isDeleted": false + }, + { + "id": "oXRPPSMK37VNWnLwkYuZP", + "type": "text", + "x": 1647.4921875, + "y": 3995.099609375, + "width": 103, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 65890826, + "version": 735, + "versionNonce": 2008735114, + "isDeleted": false, + "text": "APPROVED\nTRANSACTION", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "pmu2RB5R3JQnXZ20pKfb6", + "type": "text", + "x": 1660.42578125, + "y": 3264.2890625, + "width": 83, + "height": 75, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1528973770, + "version": 840, + "versionNonce": 419656398, + "isDeleted": false, + "text": "provider\napproval\nprocess", + "font": "20px Virgil", + "textAlign": "center", + "baseline": 68 + }, + { + "id": "jNThL9TEd_WZFS1q9bspt", + "type": "text", + "x": 1478.015625, + "y": 3207.4375, + "width": 206, + "height": 160, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1793138506, + "version": 8696, + "versionNonce": 20736274, + "isDeleted": false, + "text": "These could be things like\n- the providers mobile app\n- a hardware device\n- browser extension\n- iframe\n- text message\n- providers website\n- desktop application", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 154 + }, + { + "id": "IF08tbolyi3Jhmflhqsew", + "type": "line", + "x": 1648.9921875, + "y": 3276.03515625, + "width": 0, + "height": 63.39501953125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1043337802, + "version": 1215, + "versionNonce": 233302286, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 63.39501953125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "ljhLjuHekKgxFYwog8Fwn", + "type": "line", + "x": 1649.37109375, + "y": 3308.560791015625, + "width": 29.6171875, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 138692298, + "version": 1442, + "versionNonce": 330397394, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -29.6171875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "7wScteC3L1Oah6wsNyl8R", + "type": "text", + "x": -179.7890625, + "y": 4584.96875, + "width": 285, + "height": 80, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1886238922, + "version": 7618, + "versionNonce": 286539338, + "isDeleted": false, + "text": "Once FCL thinks it has everything\nit needs, it will attempt to submit\nthe transaction to the access node\nreturning a Response", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 74 + }, + { + "id": "Lt5zP-8-JtS3R8KXjCn_y", + "type": "line", + "x": 97.60546875, + "y": 4618.953125, + "width": 17.7060546875, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1566435478, + "version": 1705, + "versionNonce": 30330582, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 17.7060546875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "_hXtzS2Onepme0YJyWzLw", + "type": "text", + "x": -149.98828125, + "y": 4704.33984375, + "width": 248, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 451638870, + "version": 7890, + "versionNonce": 1114224214, + "isDeleted": false, + "text": "The response can be used to\nsubscribe to the status of the\ntransaction.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "XaIR2rfIdf4M2OpALv-I2", + "type": "line", + "x": 28.1796875, + "y": 4755.40234375, + "width": 85.70849609375, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 491140886, + "version": 1932, + "versionNonce": 1203742282, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 85.70849609375, + 0 + ] + ], + "lastCommittedPoint": null + } + ], + "appState": { + "viewBackgroundColor": "#ffffff" + } +} \ No newline at end of file diff --git a/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v3.2.png b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v3.2.png new file mode 100644 index 0000000000..f6815c18d2 Binary files /dev/null and b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v3.2.png differ diff --git a/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v3.excalidraw b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v3.excalidraw new file mode 100644 index 0000000000..68ccf2b448 --- /dev/null +++ b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v3.excalidraw @@ -0,0 +1,4201 @@ +{ + "type": "excalidraw", + "version": 1, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "coRgXgxDx_rGztManLJNj", + "type": "line", + "x": 1826.82421875, + "y": 402.9375, + "width": 0, + "height": 630.359375, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 1312138966, + "version": 662, + "versionNonce": 1794938954, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 630.359375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "M0qjT3k6XLsaUrGM5l_Jk", + "type": "text", + "x": 1762.546875, + "y": 1093.79296875, + "width": 128, + "height": 35, + "angle": 1.5707963267948966, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 590355926, + "version": 850, + "versionNonce": 1122986326, + "isDeleted": false, + "text": "Challenge", + "font": "28px Virgil", + "textAlign": "left", + "baseline": 25 + }, + { + "id": "LLYkOAmehERqY2yfQ4-mS", + "type": "line", + "x": 1824.30078125, + "y": 1033.98828125, + "width": 1701.3046875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 1128019606, + "version": 124, + "versionNonce": 890699530, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -1701.3046875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "4jiRvxEhO_mq0VrMwSgL3", + "type": "line", + "x": 118.14453125, + "y": 2993.164306640625, + "width": 0, + "height": 300.202880859375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1278829846, + "version": 1995, + "versionNonce": 1120731158, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 300.202880859375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "BGN-MZTIw8KwbM7X_KkY2", + "type": "line", + "x": 118.302734375, + "y": 1008.3447265625, + "width": 0, + "height": 603.4599609375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 363991382, + "version": 867, + "versionNonce": 805282966, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 603.4599609375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "un0BO73k-S9mWt9N8vfWt", + "type": "text", + "x": 108.84765625, + "y": 219.35546875, + "width": 45, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1641930582, + "version": 151, + "versionNonce": 957137290, + "isDeleted": false, + "text": "dApp", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "chwyHplpBxENYV0oFYUJ5", + "type": "text", + "x": 506.296875, + "y": 218.80859375, + "width": 24, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 377033738, + "version": 190, + "versionNonce": 2062019082, + "isDeleted": false, + "text": "fcl", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "A_YGfR-4aRXOHoeUej2FH", + "type": "text", + "x": 871.4375, + "y": 219.44921875, + "width": 77, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1848970902, + "version": 158, + "versionNonce": 567364246, + "isDeleted": false, + "text": "provider", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "4cHNGYbFyLPBSmllMxnqG", + "type": "text", + "x": 1277.8984375, + "y": 218.390625, + "width": 38, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 544904458, + "version": 159, + "versionNonce": 2049224662, + "isDeleted": false, + "text": "flow", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "jacsVi7b_9LRNYvWMBgax", + "type": "text", + "x": 1635.7578125, + "y": 215.31640625, + "width": 99, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 594396554, + "version": 142, + "versionNonce": 1415635850, + "isDeleted": false, + "text": "handshake", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 18 + }, + { + "id": "ryyCHYiHt6qIijgNyuznw", + "type": "line", + "x": 1686.97265625, + "y": 242.30859375, + "width": 0, + "height": 1078.56640625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 20, + "seed": 949453258, + "version": 550, + "versionNonce": 656589526, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1078.56640625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "PdSxGy2bbk0IQ6U3sbaaO", + "type": "line", + "x": 1295.9375, + "y": 250.052734375, + "width": 0, + "height": 4522.494140625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 20, + "seed": 1141283658, + "version": 1407, + "versionNonce": 1476993046, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 4522.494140625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "q4v_gQ0kus8ABlQjh2qfU", + "type": "line", + "x": 907.69921875, + "y": 252.095703125, + "width": 0, + "height": 4519.337890625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 20, + "seed": 718607446, + "version": 1343, + "versionNonce": 561951690, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 4519.337890625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "sD6hFB9Fg_yS4wv-kXCd7", + "type": "line", + "x": 518.66015625, + "y": 250.041015625, + "width": 0, + "height": 4521.998046875, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 20, + "seed": 1951527242, + "version": 1276, + "versionNonce": 1296645718, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 4521.998046875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "qk9t0Pn0gqz1vMQ3-PPVs", + "type": "rectangle", + "x": 495.0703125, + "y": 1090.64453125, + "width": 1236.47265625, + "height": 518.51953125, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 40, + "seed": 1052625546, + "version": 134, + "versionNonce": 1816547594, + "isDeleted": false + }, + { + "id": "WAjcohb9hozxf_x_K2Q70", + "type": "line", + "x": 127.6796875, + "y": 247.509765625, + "width": 0, + "height": 4524.509765625, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 20, + "seed": 451624970, + "version": 1267, + "versionNonce": 1700701898, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 4524.509765625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "1uT7ljw353mq_pBF1krUo", + "type": "arrow", + "x": 132.875, + "y": 330.609375, + "width": 379.125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 453198294, + "version": 247, + "versionNonce": 2111004886, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 379.125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "9_RwWHhR4z7t6UN2sMXZp", + "type": "text", + "x": -178.890625, + "y": 263.02734375, + "width": 268, + "height": 200, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1786272714, + "version": 1433, + "versionNonce": 1274253526, + "isDeleted": false, + "text": "Scopes allow dApps to request\nadditional (private) information\nfrom the provider. They will be\nsent along to the provider during\nthe initial challenge. If the\n user has decided to allow the\nprovider to share the information,\nsaid information will be available\nin the providers private hooks\nrequest.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 194 + }, + { + "id": "3pLEjtL6UX46WlYKdWkJD", + "type": "text", + "x": 133.08984375, + "y": 333.21875, + "width": 328, + "height": 38, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 251468054, + "version": 469, + "versionNonce": 592087114, + "isDeleted": false, + "text": "fcl.config()\n .put(\"challenge.scope\", \"email\")", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "fbb9O2zUQnZNHHgxrXulZ", + "type": "arrow", + "x": 134.09765625, + "y": 401.00390625, + "width": 379.125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2097487190, + "version": 372, + "versionNonce": 526001482, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 379.125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "V2OPDQAf4l7Ba2i58gZ1n", + "type": "text", + "x": 131.5078125, + "y": 404.61328125, + "width": 366, + "height": 38, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 392596234, + "version": 670, + "versionNonce": 1678919446, + "isDeleted": false, + "text": "fcl.config()\n .put(\"challenge.scope\", \"publicKey\")", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "KuTZ_hrxsU6Nuq1hi_Pi9", + "type": "line", + "x": 115.57421875, + "y": 278.06640625, + "width": 0, + "height": 186.05859375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1103091658, + "version": 80, + "versionNonce": 777121290, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 186.05859375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "XJ4RlWOEKco-1mBvuKISA", + "type": "line", + "x": 67.6875, + "y": 355.89453125, + "width": 47.6640625, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 269160854, + "version": 35, + "versionNonce": 1127334922, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 47.6640625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "BwaqTUADSaiRHoCGokXKI", + "type": "text", + "x": -178.97265625, + "y": 575.17578125, + "width": 263, + "height": 240, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1391733194, + "version": 2490, + "versionNonce": 716580118, + "isDeleted": false, + "text": "Subscribing allows the dApp to\nreactively receive updates about\na given topic. In this case we\nwill want to receive any updates\non the currentUser.\n\nSubscription callbacks are always\ncalled immediately with what we\ncurrently know.\n\nAll data should be considered\nOPTIONAL", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 234 + }, + { + "id": "gyDGsALUUdgK_TzjT78zF", + "type": "arrow", + "x": 133.03515625, + "y": 575.626953125, + "width": 379.125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 496657494, + "version": 370, + "versionNonce": 1173122634, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 379.125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "UBeyLHncVlN6Qy8Z9Yq0P", + "type": "text", + "x": 134.34765625, + "y": 579.634765625, + "width": 216, + "height": 38, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1793930250, + "version": 731, + "versionNonce": 66402390, + "isDeleted": false, + "text": "fcl.currentUser()\n .subscribe(callback)", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "BhVeXm_7Q-PW9YO_BFdjo", + "type": "arrow", + "x": 507.73828125, + "y": 653.05859375, + "width": 374.96484375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 512638486, + "version": 230, + "versionNonce": 1206320662, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -374.96484375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "BA2XTg-utF__4ANomq0DX", + "type": "text", + "x": 169.609375, + "y": 655.84765625, + "width": 225, + "height": 323, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 12563158, + "version": 1969, + "versionNonce": 1285559882, + "isDeleted": false, + "text": "SUBSCRIPTION currentUser\n---\naddr: null\ncid: null\nloggedIn: false\nverified: false\nidentity:\n name: null\n avatar: null\nscoped:\n email: null\n publicKey: null\nprovider:\n addr: null\n pid: null\n name: null\n icon: null", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 319 + }, + { + "id": "2STUByBmNYXHz9OqNHNGe", + "type": "line", + "x": 117.3984375, + "y": 559.306640625, + "width": 0, + "height": 291.021484375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 429212246, + "version": 314, + "versionNonce": 1359200598, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 291.021484375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "lOQfNEIEHhNIe2KGKuEQF", + "type": "line", + "x": 32.31640625, + "y": 679.796875, + "width": 82.9140625, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 957144778, + "version": 453, + "versionNonce": 170207498, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 82.9140625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "AmNNkLgvu36sA-XfvGzvm", + "type": "text", + "x": 323.33203125, + "y": 688.62109375, + "width": 493, + "height": 300, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 941271766, + "version": 1867, + "versionNonce": 531821962, + "isDeleted": false, + "text": "- users flow address\n- a composite id representing the users authentication method\n- has fcl received either public or private hooks?\n- could fcl successfully request private hooks?\n- users profile info\n - users name per received hooks\n - users avatar per received hooks\n- private scoped data as requested in the challenge\n - the optional email from the provider\n - the optional publicKey from the provider\n- information about the provider\n - the flow address of provider\n - the users internal id for the provider\n - the name of the provider\n - the providers icon", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 294 + }, + { + "id": "Qlrsmnvxv0Yu-6XxjPmon", + "type": "diamond", + "x": 58.4375, + "y": 1010.71875, + "width": 138.90625, + "height": 93.82421875, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 966881814, + "version": 948, + "versionNonce": 175724182, + "isDeleted": false + }, + { + "id": "2Q0NcifLTOiWHZZp7CjVT", + "type": "text", + "x": 87.32421875, + "y": 1032.84375, + "width": 84, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1980422282, + "version": 386, + "versionNonce": 1969063370, + "isDeleted": false, + "text": "CLICK\n\"sign in\"", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "KlOxVWTL9pUeM5MOu6mHQ", + "type": "arrow", + "x": 196.2734375, + "y": 1057.07421875, + "width": 315.79296875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 250703958, + "version": 517, + "versionNonce": 101467798, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 315.79296875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "jVn7DRTBVHuqU6aNGKgn1", + "type": "text", + "x": 198.6328125, + "y": 1062.94140625, + "width": 169, + "height": 19, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 660400138, + "version": 720, + "versionNonce": 1689359818, + "isDeleted": false, + "text": "fcl.authenticate()", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "tDpOm2KyUP_mfcEOtaC6g", + "type": "text", + "x": -176.26171875, + "y": 1083.24609375, + "width": 274, + "height": 260, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 408947158, + "version": 2262, + "versionNonce": 1389549462, + "isDeleted": false, + "text": "The authentication process truly\nstarts here. The user clicks some\nsort of sign in button in the dApp\nwhich triggers the challenge flow.\n\nFCL will then render an iframe\ndisplaying the handshake service.\n\nThe handshake services job is to\nenable a Bring Your Own Provider\ntype of experience, even providers\nfcl and our team have never heard\nof before.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 254 + }, + { + "id": "VANgxLAjMWIqDaOMkQGew", + "type": "arrow", + "x": 526.576171875, + "y": 1126.8046875, + "width": 1154.728515625, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1345945814, + "version": 778, + "versionNonce": 688930710, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 1154.728515625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "ZwB84bTSRuYNQBJ797UUX", + "type": "text", + "x": 528.24609375, + "y": 1069.0078125, + "width": 185, + "height": 20, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2029685718, + "version": 186, + "versionNonce": 1899835222, + "isDeleted": false, + "text": "iframe rendered in dApp", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 14 + }, + { + "id": "3kh7r3_OMznv14O4Q7lds", + "type": "text", + "x": 528.65625, + "y": 1128.5390625, + "width": 272, + "height": 95, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1752712214, + "version": 2306, + "versionNonce": 161396042, + "isDeleted": false, + "text": "HTTP/GET handshake.onflow.org\n---\nl6n: dapp.com\nnonce: NONCE\nscope: email+publicKey", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 91 + }, + { + "id": "I-bSnIv7qk4N11TBrWUvp", + "type": "text", + "x": 749.22265625, + "y": 1167.3671875, + "width": 297, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1473737942, + "version": 2315, + "versionNonce": 140039818, + "isDeleted": false, + "text": "- the location.origin of the dApp\n- a random value supplied by fcl\n- the special scopes the dApp wants ", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "xsaHRUOAlZ8ZI4kGqybV5", + "type": "diamond", + "x": 1616.3515625, + "y": 1133.822265625, + "width": 138.90625, + "height": 93.82421875, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 783279446, + "version": 1251, + "versionNonce": 525459274, + "isDeleted": false + }, + { + "id": "F-S5Qg94dsbKj8AmYRYUm", + "type": "text", + "x": 1647.96875, + "y": 1155.748046875, + "width": 75, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1085031178, + "version": 702, + "versionNonce": 147359114, + "isDeleted": false, + "text": "select\nprovider", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "B2msJeeJj2r7pmQ9572Tt", + "type": "arrow", + "x": 1684.63671875, + "y": 1248.70703125, + "width": 774.36328125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 135045386, + "version": 92, + "versionNonce": 128871894, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -774.36328125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "QDa016qky6i2rbpghQINV", + "type": "text", + "x": 944.94140625, + "y": 1251.53515625, + "width": 206, + "height": 95, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 151321174, + "version": 2478, + "versionNonce": 1662550666, + "isDeleted": false, + "text": "HTTP/GET provider.com\n---\nl6n: L6N\nnonce: NONCE\nscope: email+publicKey", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 91 + }, + { + "id": "6VaavfynVHFqaOHcJm68y", + "type": "text", + "x": 1155.625, + "y": 1290.04296875, + "width": 297, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1531656010, + "version": 2395, + "versionNonce": 1533528662, + "isDeleted": false, + "text": "- the location.origin of the dApp\n- a random value supplied by fcl\n- the special scopes the dApp wants ", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "NoiopQQrQ6gA3gBnK8QEO", + "type": "diamond", + "x": 826.49609375, + "y": 1331.916015625, + "width": 158.109375, + "height": 93.82421875, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 212982614, + "version": 1492, + "versionNonce": 605161866, + "isDeleted": false + }, + { + "id": "VSakes544b46aPuOgA12w", + "type": "text", + "x": 845.65234375, + "y": 1350.134765625, + "width": 122, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 879537418, + "version": 813, + "versionNonce": 761283466, + "isDeleted": false, + "text": "user\nauthenticates", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "TQB93-jsxoUcL9GwaBlZ1", + "type": "arrow", + "x": 825.63671875, + "y": 1377.748046875, + "width": 302.73828125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 92871114, + "version": 442, + "versionNonce": 629633162, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -302.73828125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "SkzWVjyWaeBHWW38XqLMT", + "type": "text", + "x": 558.888671875, + "y": 1392.056640625, + "width": 300, + "height": 190, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1183170518, + "version": 3074, + "versionNonce": 1994755286, + "isDeleted": false, + "text": "JS/postMessage l6N\n---\ntype: \"FCL::CHALLENGE::RESPONSE\"\naddr: FLOW_ADDRESS\npaddr: PROVIDER_FLOW_ADDRESS\ncode: CODE\nexp: CODE_EXPIRES_AT\nhks: HOOKS_URL\nnonce: NONCE\nl6n: L6N", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 186 + }, + { + "id": "25wzZQ-dBZxMxT8MW1Z-d", + "type": "text", + "x": 868.22265625, + "y": 1427.90234375, + "width": 672, + "height": 160, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1366848586, + "version": 3377, + "versionNonce": 2108085130, + "isDeleted": false, + "text": "- fcl listens for this event type\n- flow address of the user (used to fetch public hooks)\n- flow address of the provider (used to fetch providers info)\n- a token supplied when requesting the provider for private hooks\n- when the code expires (epoch timestamp in the future)\n- where to request the providers private hooks for the user\n- the nonce provided by fcl at the start of the challenge\n- the location.origin of the dApp (also provided by fcl at the start of the challenge)", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 154 + }, + { + "id": "NXxTdsH-rCQCSFd5SbNvX", + "type": "arrow", + "x": 1616.328125, + "y": 1159.81640625, + "width": 308.453125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 40, + "seed": 1011362634, + "version": 98, + "versionNonce": 62543126, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -308.453125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "lnEjAi8iE7V1aahOopRXY", + "type": "arrow", + "x": 1307.71484375, + "y": 1202.07421875, + "width": 316.8359375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 40, + "seed": 954039370, + "version": 50, + "versionNonce": 144070166, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 316.8359375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "1ZVyii2hq0Wpqq8542uW9", + "type": "text", + "x": 1318.5078125, + "y": 1172.37109375, + "width": 284, + "height": 20, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 40, + "seed": 1705453142, + "version": 174, + "versionNonce": 1058064970, + "isDeleted": false, + "text": "fetch available providers from chain", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 14 + }, + { + "id": "X6HUR1_MrW9gTRgJGheAA", + "type": "arrow", + "x": 523.095703125, + "y": 2420.91796875, + "width": 379.943359375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1506760842, + "version": 1136, + "versionNonce": 94275030, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 379.943359375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "7PcbZK4cQREATn7XIHt_A", + "type": "text", + "x": 525.306640625, + "y": 2425.44140625, + "width": 169, + "height": 57, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1876413718, + "version": 1321, + "versionNonce": 232123018, + "isDeleted": false, + "text": "HTTP/GET HOOKS_URL\n---\ncode: CODE", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 53 + }, + { + "id": "42lCsAd4TL61C2ZBEbmuC", + "type": "line", + "x": 33.736328125, + "y": 1173.4833984375, + "width": 82.9140625, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1664276234, + "version": 754, + "versionNonce": 934966614, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 82.9140625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "3WLQiIIioSPeHv0xMKLko", + "type": "text", + "x": -173.546875, + "y": 1886.24609375, + "width": 280, + "height": 560, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 964205782, + "version": 4104, + "versionNonce": 1022153674, + "isDeleted": false, + "text": "FCL should now have the pieces\nit needs to fetch both the public\nand private hooks.\n\nPublic hooks are stored on chain\nin a resource owned by the flow\naddress. They can also point out\nto resources owned by the provider\nallowing the provider to change\nprovider specific detail as needed\nand example of that is moving the\nauthorization endpoint. SENSITIVE\nDATA SHOULD NEVER BE PUT IN\nA PUBLIC HOOK.\n\nPrivate hooks are provided by\nthe provider. They include provider\nspecific overrides to the public\nhooks as well as the additional\nscopes that were requested in\nthe challenge.\n\nFCL will attempt to fetch both\nprivate and public hooks, deep\nmerge the private into the public\nand then let any currentUser\nsubscribers know there is some\nnew data for them.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 554 + }, + { + "id": "oByTwhCzigB059e9baKhZ", + "type": "arrow", + "x": 524.0869140625, + "y": 1639.83203125, + "width": 767.9365234375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1399244246, + "version": 1012, + "versionNonce": 894784022, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 767.9365234375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "bQl2f4HdK2Ezo1MVmCQs-", + "type": "text", + "x": 525.6220703125, + "y": 1640.6640625, + "width": 216, + "height": 57, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 263301770, + "version": 1277, + "versionNonce": 1310257610, + "isDeleted": false, + "text": "FLOW/SCRIPT FETCH_HOOKS\n---\naddress: FLOW_ADDRESS", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 53 + }, + { + "id": "OfQGmyTtgjme0SWUklR_a", + "type": "arrow", + "x": 1293.146484375, + "y": 1722.36328125, + "width": 774.36328125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1210260886, + "version": 263, + "versionNonce": 210434070, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -774.36328125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "zlS_RGPXHJyxMTeGPbPaA", + "type": "text", + "x": 556.822265625, + "y": 1727.609375, + "width": 338, + "height": 361, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 358067914, + "version": 4272, + "versionNonce": 895971274, + "isDeleted": false, + "text": "FLOW/RESPONSE FETCH_HOOKS\n---\naddr: FLOW_ADDRESS\nkeyId: KEY_ID\nidentity:\n name: NAME\n avatar: AVATAR\nauthorizations:\n - id: PROVIDER_AUTHORIZATION_ID\n addr: PROVIDER_FLOW_ADDRESS\n method: \"HTTP/POST\"\n endpoint: AUTHORIZATION_ENDPOINT\n data:\n id: PID\n - id: PROVIDER_AUTHORIZATION_ID_2\n addr: PROVIDER_FLOW_ADDRESS\n method: \"REMOTE\"\n data:\n id: PID", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 357 + }, + { + "id": "RpkmMqz9tdMWF-3_bw77s", + "type": "text", + "x": 731.95703125, + "y": 1765.109375, + "width": 226, + "height": 100, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 253356234, + "version": 5160, + "versionNonce": 1711938006, + "isDeleted": false, + "text": "- flow address for user\n- preferred signing key\n- public identity info\n - an optional name value\n - an optional avatar value", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 94 + }, + { + "id": "2z30__NPjKNxvuE9Pyxmf", + "type": "text", + "x": 916.23046875, + "y": 2017.57421875, + "width": 629, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1231760906, + "version": 5822, + "versionNonce": 1146700234, + "isDeleted": false, + "text": "an public authorization hook that points to a remote authorization\nit will use the providers flow address and id that is supplied to do the look up", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "wwWWue6mYk9yxli73gPmW", + "type": "line", + "x": 901.21875, + "y": 1991.62890625, + "width": 0, + "height": 98.58984375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 94038550, + "version": 363, + "versionNonce": 1292446730, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 98.58984375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "egK8LT0KvLONRfcsgWWyx", + "type": "arrow", + "x": 525.68017578125, + "y": 2181.4375, + "width": 767.9365234375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1321042966, + "version": 1094, + "versionNonce": 152448970, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 767.9365234375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "oi3nAccLri9ZoY-toeQbo", + "type": "text", + "x": 529.15673828125, + "y": 2186.72265625, + "width": 281, + "height": 57, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 685568074, + "version": 1382, + "versionNonce": 86931402, + "isDeleted": false, + "text": "FLOW/SCRIPT FETCH_PROVIDER\n---\naddress: PROVIDER_FLOW_ADDRESS", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 53 + }, + { + "id": "HM8bKmZ_6p8oTn3sLt9NW", + "type": "text", + "x": 916.25, + "y": 1893.673828125, + "width": 547, + "height": 80, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1139490582, + "version": 6267, + "versionNonce": 692740886, + "isDeleted": false, + "text": "an public authorization hook that is controlled by users flow account\nit can be overloaded by private hooks if the addr and id match.\nOverloading should be avoided where possible as this authorization\nstrategy could still be used by non-currentUser situations", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 74 + }, + { + "id": "HPG9r6GWIVU-MLDXRhR0c", + "type": "line", + "x": 901.12109375, + "y": 1880.525390625, + "width": 0, + "height": 105.830078125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 851207498, + "version": 554, + "versionNonce": 1201238218, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 105.830078125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "s6PIfFtwf-7CX3o-PHI9l", + "type": "arrow", + "x": 1291.263671875, + "y": 2257.9453125, + "width": 774.36328125, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 631656074, + "version": 367, + "versionNonce": 17668362, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -774.36328125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "d-aTpJ55bJetrQsYzT-8o", + "type": "text", + "x": 554.728515625, + "y": 2260.98828125, + "width": 253, + "height": 114, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 697513750, + "version": 4543, + "versionNonce": 1310176022, + "isDeleted": false, + "text": "FLOW/RESPONSE FETCH_HOOKS\n---\naddr: PROVIDER_FLOW_ADDRESS\nname: PROVIDER_NAME\nicon: PROVIDER_ICON\nauthn: AUTHENTICATION_URL", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 110 + }, + { + "id": "2_VuSBa3bFRM7KYWRfqpK", + "type": "line", + "x": 508.91796875, + "y": 1644.27734375, + "width": 154.62109375, + "height": 311.0625, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 441658570, + "version": 350, + "versionNonce": 389400074, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -154.62109375, + 311.0625 + ] + ], + "lastCommittedPoint": [ + -157.6171875, + 295.58984375 + ] + }, + { + "id": "5ME55bvkr9r1r5Zqo7QMP", + "type": "line", + "x": 350.4609375, + "y": 2023.38671875, + "width": 162.4765625, + "height": 160.96875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 442543050, + "version": 54, + "versionNonce": 1075938122, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 162.4765625, + 160.96875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "jT1SAtxFHgoSlX-HSjGb3", + "type": "line", + "x": 349.04296875, + "y": 2091.76953125, + "width": 165.9921875, + "height": 330.19921875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 677853206, + "version": 165, + "versionNonce": 1014681046, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 165.9921875, + 330.19921875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "lnpb7wSSUK_sV4qXlPQVt", + "type": "text", + "x": 270.62109375, + "y": 2018.0078125, + "width": 126, + "height": 20, + "angle": 4.71238898038469, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 843163990, + "version": 190, + "versionNonce": 599478794, + "isDeleted": false, + "text": "Done in parallel", + "font": "16px Virgil", + "textAlign": "center", + "baseline": 14 + }, + { + "id": "msGB2E2TZJGP7TkawkmAf", + "type": "arrow", + "x": 900.84765625, + "y": 2509.64453125, + "width": 379.458984375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1210719318, + "version": 490, + "versionNonce": 16187478, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -379.458984375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "-VVQYfd22ZmqYqXRLxXEm", + "type": "text", + "x": 554.970703125, + "y": 2514.1875, + "width": 272, + "height": 304, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1012202506, + "version": 5187, + "versionNonce": 1530171926, + "isDeleted": false, + "text": "HTTP/GET HOOKS_URL RESPONSE\n---\naddr: FLOW_ADDRESS\nkeyId: KEY_ID_2\nidentity:\n name: NAME\n avatar: AVATAR\nscoped:\n email: EMAIL\n publicKey: null\nprovider:\n addr: PROVIDER_FLOW_ADDRESS\n pid: PID\n name: PROVIDER_NAME\n icon: PROVIDER_ICON\n authn: AUTHENTICATION_URL", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 300 + }, + { + "id": "OnbDFeHN4fQhUjlz_WLfY", + "type": "text", + "x": 731.4140625, + "y": 2549.73046875, + "width": 680, + "height": 160, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2121614090, + "version": 7076, + "versionNonce": 292326282, + "isDeleted": false, + "text": "- Users Flow Address\n- overloading the preferred signing key\n- private identity info (will overload public info)\n in this case the data is the same\n if it was omitted fcl will use the public info if its there\n- the requested scoped data\n - user decided to send the email\n - but also decided to NOT send the publicKey (reminder that everything is optional)", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 154 + }, + { + "id": "2N9s2KDB46jGhu9W9zxZ5", + "type": "text", + "x": 835.90234375, + "y": 2722.09375, + "width": 414, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1232014154, + "version": 7368, + "versionNonce": 1966205206, + "isDeleted": false, + "text": "- flow address of provider (used in composite id)\n- id controlled by the provider (used in composite id)", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "SUbm9_A_s1r_jH2PsAK_i", + "type": "line", + "x": 120.42578125, + "y": 1632.94189453125, + "width": 0, + "height": 1330.13232421875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1251139734, + "version": 1260, + "versionNonce": 719119498, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1330.13232421875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "zts7CpbK3b8hN6Lf_L4NX", + "type": "line", + "x": 33.37109375, + "y": 2168.4453125, + "width": 82.9140625, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1021861962, + "version": 883, + "versionNonce": 504499158, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 82.9140625, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "6-8TIlr57ixKs6Sj3Voqe", + "type": "text", + "x": 110.08984375, + "y": 92.10546875, + "width": 1183, + "height": 45, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1019216458, + "version": 772, + "versionNonce": 2018618070, + "isDeleted": false, + "text": "Flow Client Library - Remote Async Authentication & Authorization", + "font": "36px Virgil", + "textAlign": "left", + "baseline": 32 + }, + { + "id": "p424mWR_hsD0j4YBnrCVw", + "type": "text", + "x": 110.375, + "y": 137.62109375, + "width": 303, + "height": 50, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1331610518, + "version": 428, + "versionNonce": 789812618, + "isDeleted": false, + "text": "Last Updated: April 17th 2020\nVersion: 3", + "font": "20px Virgil", + "textAlign": "left", + "baseline": 43 + }, + { + "id": "qF5Aeoa9iYz0RqCATeZEH", + "type": "text", + "x": 1738.421875, + "y": 288.890625, + "width": 176, + "height": 35, + "angle": 1.5707963267948966, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 2000233674, + "version": 424, + "versionNonce": 186896022, + "isDeleted": false, + "text": "Setup/Config", + "font": "28px Virgil", + "textAlign": "left", + "baseline": 25 + }, + { + "id": "SwAuz72dvcZhh4zIV1V_W", + "type": "line", + "x": 1826.83984375, + "y": 1178.0390625, + "width": 0, + "height": 436.82421875, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 2110378634, + "version": 1335, + "versionNonce": 289846422, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 436.82421875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Pr75G8We8YRy0Yi_gYH0l", + "type": "text", + "x": 1759.25, + "y": 1681.26171875, + "width": 132, + "height": 35, + "angle": 1.5707963267948966, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 1327777994, + "version": 1007, + "versionNonce": 320669642, + "isDeleted": false, + "text": "Collection", + "font": "28px Virgil", + "textAlign": "left", + "baseline": 25 + }, + { + "id": "PVT9D64GjjaP2ucRTUfLs", + "type": "line", + "x": 1826.046875, + "y": 1770.51171875, + "width": 0, + "height": 1215.11328125, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 1522073814, + "version": 2352, + "versionNonce": 2129637846, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1215.11328125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "jvYGx-4d-NipQ0Bpnu05q", + "type": "arrow", + "x": 508.783203125, + "y": 2558.3984375, + "width": 374.96484375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 616907798, + "version": 440, + "versionNonce": 88690262, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -374.96484375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "IZXf_z8RKv6FuMhkvkXNf", + "type": "text", + "x": 170.095703125, + "y": 2563.9375, + "width": 272, + "height": 323, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1748054090, + "version": 2404, + "versionNonce": 1955554902, + "isDeleted": false, + "text": "SUBSCRIPTION currentUser\n---\naddr: FLOW_ADDRESS\ncid: COMPOSITE_ID\nloggedIn: true\nverified: true\nidentity:\n name: NAME\n avatar: AVATAR\nscoped:\n email: EMAIL\n publicKey: null\nprovider:\n addr: PROVIDER_FLOW_ADDRESS\n pid: PID\n name: PROVIDER_NAME\n icon: PROVIDER_ICON", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 319 + }, + { + "id": "waRSRXDeKvd5f6JPg0G6E", + "type": "diamond", + "x": 56.0546875, + "y": 3013.853515625, + "width": 138.90625, + "height": 93.82421875, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1556613014, + "version": 1054, + "versionNonce": 1451302358, + "isDeleted": false + }, + { + "id": "paxn_sWovWBSehdKXh9Yq", + "type": "text", + "x": 75.44140625, + "y": 3035.978515625, + "width": 103, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 961438922, + "version": 526, + "versionNonce": 604557962, + "isDeleted": false, + "text": "TRIGGER\nTRANSACTION", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "hrSSY4HIR0R4f4pjnZxdq", + "type": "arrow", + "x": 195.189453125, + "y": 3058.953125, + "width": 315.79296875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 94461718, + "version": 622, + "versionNonce": 1200903050, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 315.79296875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "6_zL8bXZ7lEK83iY4swSO", + "type": "text", + "x": 188.287109375, + "y": 3066.16796875, + "width": 525, + "height": 228, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 653804874, + "version": 1965, + "versionNonce": 1765016086, + "isDeleted": false, + "text": "const response = await fcl.send([\n vtx.TRANSFER_FLOW_TOKENS,\n sdk.params([\n sdk.param(AMOUNT, t.UFix64),\n sdk.param(TO_ADDRESS, t.Address)\n ]),\n sdk.proposer(fcl.currentUser().proposerAuthorization),\n sdk.payer(fcl.currentUser().payerAuthorization),\n sdk.authorizations([\n fcl.currentUser().authorization\n ])\n])", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 224 + }, + { + "id": "huhsom-5KjKGKdIYDMOqy", + "type": "text", + "x": 718.8828125, + "y": 3180.875, + "width": 300, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 868467722, + "version": 7984, + "versionNonce": 141727690, + "isDeleted": false, + "text": "- who is proposing the transaction\n- who is paying for the transaction\n- who are authorizing the transaction", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "EZpsNzOMm6AF6ard6rzL9", + "type": "text", + "x": 455.97265625, + "y": 3083.23828125, + "width": 297, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 771410058, + "version": 8237, + "versionNonce": 1499597386, + "isDeleted": false, + "text": "- a verified/provable transaction\n- params to pass to the transaction", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "zIfBGvs5LZkn3wLsdHnBD", + "type": "arrow", + "x": 518.708984375, + "y": 3285.18359375, + "width": 382.380859375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1573066122, + "version": 784, + "versionNonce": 1662081558, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 382.380859375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "QeOvoAeQuTwqV9BaVr0RY", + "type": "text", + "x": 523.40625, + "y": 3287.86328125, + "width": 272, + "height": 190, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1929637910, + "version": 2844, + "versionNonce": 469574922, + "isDeleted": false, + "text": "HOOK authorization\n---\npayload: PAYLOAD\naddr: FLOW_ADDRESS\nkeyId: KEY_ID_2\nrole:\n - proposer\n - payer\n - authorizer\ninteraction: INTERACTION_DATA", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 186 + }, + { + "id": "m-dBP7WUdYjECj9H_N-Lw", + "type": "text", + "x": 702.2421875, + "y": 3323.265625, + "width": 215, + "height": 80, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 566844874, + "version": 8350, + "versionNonce": 2015418326, + "isDeleted": false, + "text": "- what needs to be signed\n- flow address to sign with\n- preferred signing key\n- roles to be signing as", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 74 + }, + { + "id": "uFmYk6gAWEzV926It2dyS", + "type": "text", + "x": 803.859375, + "y": 3457.97265625, + "width": 406, + "height": 120, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 963183382, + "version": 9206, + "versionNonce": 2061418122, + "isDeleted": false, + "text": "- data that can be used to recreate the payload\n so it can be verified. It should have everything\n about the transaction so the provider could also\n use that data in here to give the user a better\n experience when they go to approve/decline the\n transaction", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 114 + }, + { + "id": "VkMECX5n8ypX3ZzyzSoiY", + "type": "arrow", + "x": 902.3193359375, + "y": 3588.53515625, + "width": 379.458984375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1725344714, + "version": 556, + "versionNonce": 1331222230, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -379.458984375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "fTfdefywWKAJLExOheTvm", + "type": "text", + "x": 554.4619140625, + "y": 3591.27734375, + "width": 413, + "height": 380, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 403852758, + "version": 6211, + "versionNonce": 1875251478, + "isDeleted": false, + "text": "HOOK authorization RESPONSE\n---\nstatus: PENDING\ncompositeSignature:\n addr: null\n keyId: null\n signature: null\nauthorizationUpdates:\n method: \"HTTP/GET\"\n endpoint: AUTHZ_INFO_URL\n data: { aid: AUTHORIZATION_ID }\nlocal:\n - method: \"BROWSER/IFRAME\"\n endpoint: LOCAL_IFRAME_ENDPOINT\n width: WIDTH\n height: HEIGHT\n background: BG_COLOR\n - method: \"BROWSER/EXTENSION\"\n eventType: PROVIDER_EXTENSION_EVENT_TYPE\n data: DATA_TO_SEND_EXTENSION", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 376 + }, + { + "id": "dnULn5eXCu25FbJ5ADvgb", + "type": "arrow", + "x": 520.8291015625, + "y": 3998.94921875, + "width": 382.380859375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 782169098, + "version": 936, + "versionNonce": 318209162, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 382.380859375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "aXHKmUTpcXq-KXd22YVHZ", + "type": "text", + "x": 523.3154296875, + "y": 4006.41015625, + "width": 234, + "height": 57, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1174514070, + "version": 3106, + "versionNonce": 796185162, + "isDeleted": false, + "text": "HOOK authorizationUpdates\n---\naid: AUTHORIZATION_ID", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 53 + }, + { + "id": "Qt5oM_exd-ilHtenCfsx1", + "type": "arrow", + "x": 899.611328125, + "y": 4085.2265625, + "width": 379.458984375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1781753622, + "version": 639, + "versionNonce": 1286590294, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -379.458984375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "HkOFxXHDQ51b1hvi6qcyX", + "type": "text", + "x": 555.01171875, + "y": 4090.125, + "width": 319, + "height": 209, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 308985162, + "version": 6371, + "versionNonce": 1920465162, + "isDeleted": false, + "text": "HOOK authorizationUpdates RESPONSE\n---\nstatus: PENDING\ncompositeSignature:\n addr: null\n keyId: null\n signature: null\nauthorizationUpdates:\n method: \"HTTP/GET\"\n endpoint: AUTHZ_INFO_URL\n data: { aid: AUTHORIZATION_ID }", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 205 + }, + { + "id": "3INOWYSzlw6A2i5ZFLpWE", + "type": "arrow", + "x": 523.39208984375, + "y": 4318.509765625, + "width": 382.380859375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1575886678, + "version": 1069, + "versionNonce": 892796950, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 382.380859375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "1GaZCC06LIykjWF8msHrO", + "type": "text", + "x": 526.07763671875, + "y": 4325.970703125, + "width": 234, + "height": 57, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1460054282, + "version": 3239, + "versionNonce": 499725386, + "isDeleted": false, + "text": "HOOK authorizationUpdates\n---\naid: AUTHORIZATION_ID", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 53 + }, + { + "id": "rJdS3rSR6xZz3q3K8_obb", + "type": "arrow", + "x": 902.37353515625, + "y": 4404.787109375, + "width": 379.458984375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 14402710, + "version": 772, + "versionNonce": 1707773270, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -379.458984375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "VeXvW_CPgoYJy_zq6RVC6", + "type": "text", + "x": 557.45361328125, + "y": 4407.943359375, + "width": 319, + "height": 133, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1595996106, + "version": 6605, + "versionNonce": 1537513802, + "isDeleted": false, + "text": "HOOK authorizationUpdates RESPONSE\n---\nstatus: APPROVED\ncompositeSignature:\n addr: FLOW_ADDRESS\n keyId: KEY_ID_2\n signature: SIGNATURE", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 129 + }, + { + "id": "Sd2FuAqCDzEl9_UVKxCdu", + "type": "text", + "x": 741.82421875, + "y": 3627.671875, + "width": 256, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 664875030, + "version": 8575, + "versionNonce": 1250821334, + "isDeleted": false, + "text": "- the status of the transaction\n- an empty composite signature ", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "hM2bEW5KNVxetY6j53I3-", + "type": "text", + "x": 763.0625, + "y": 3723.57421875, + "width": 421, + "height": 20, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1231038090, + "version": 8746, + "versionNonce": 244451670, + "isDeleted": false, + "text": "- where and how to get updates for the transaction", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 14 + }, + { + "id": "fNHFI8o8oO5yAGFPaxe5s", + "type": "text", + "x": 860, + "y": 3798.71484375, + "width": 760, + "height": 20, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 610817162, + "version": 9131, + "versionNonce": 414310218, + "isDeleted": false, + "text": "- lets FCL know if there are local ways of letting the user authorize from their current device", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 14 + }, + { + "id": "tfACerMEHudHalqtkDVxw", + "type": "text", + "x": 916.138671875, + "y": 3836.7060546875, + "width": 366, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1720766870, + "version": 6618, + "versionNonce": 596298954, + "isDeleted": false, + "text": "FCL will render an iframe showing the endpoint\nthe iframe will be rendered with the supplied\nwidth, height and background color", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "lEAUSNRbeExIAbUFoi457", + "type": "line", + "x": 898.724609375, + "y": 3819.2880859375, + "width": 0, + "height": 92.2431640625, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 617560778, + "version": 810, + "versionNonce": 687063446, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 92.2431640625 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "VMWNVeWbavakv7ZbvBDZ4", + "type": "text", + "x": 986.568359375, + "y": 3938.26123046875, + "width": 373, + "height": 20, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1532948950, + "version": 6925, + "versionNonce": 1496202634, + "isDeleted": false, + "text": "FCL will send an event to a browser extension", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 14 + }, + { + "id": "SNdO8VWRuFZGJFHu1jM1s", + "type": "line", + "x": 975.658203125, + "y": 3912.92529296875, + "width": 0, + "height": 70.04736328125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1134706314, + "version": 1016, + "versionNonce": 1539103638, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 70.04736328125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "U-EEL_3O6Lsxb7mROH8Pr", + "type": "line", + "x": 548.703125, + "y": 3801.44091796875, + "width": 0, + "height": 168.72705078125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 237420362, + "version": 1079, + "versionNonce": 1922915862, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 168.72705078125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "VRe96xT0_1RxtHTMIyi62", + "type": "text", + "x": 346.95703125, + "y": 3819.34375, + "width": 195, + "height": 140, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1235761750, + "version": 7272, + "versionNonce": 1943726230, + "isDeleted": false, + "text": "These will only happen\nfor the currentUser, but\nthe provider should still\nmake sure that the user\nis authenticated before\nshowing any possibly\nsensitive information", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 134 + }, + { + "id": "58mykrKHV9EaCFvmLqX9I", + "type": "text", + "x": 913.681640625, + "y": 4180.76904296875, + "width": 302, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 291843082, + "version": 7021, + "versionNonce": 506427606, + "isDeleted": false, + "text": "The same as the above authorization\nresponse but sans the local info", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "wJIW4AG-R71Cq1nvCREvC", + "type": "line", + "x": 901.482421875, + "y": 4120.62060546875, + "width": 0, + "height": 184.09423828125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 64680342, + "version": 1105, + "versionNonce": 1179937866, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 184.09423828125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "1_bAu7XiS5YNkJzGVFz-P", + "type": "text", + "x": 213, + "y": 4136.0703125, + "width": 249, + "height": 120, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 530454218, + "version": 7482, + "versionNonce": 1808024342, + "isDeleted": false, + "text": "FCL will continue to request\nauthorizationUpdates until\nthe response no longer returns\nan authorizationUpdates hook\nor the status is APPROVED or\nREFUSED", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 114 + }, + { + "id": "19wWD272ASOGmsbjs-59d", + "type": "line", + "x": 443.7265625, + "y": 4170.546875, + "width": 65.46484375, + "height": 129.7421875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1153278166, + "version": 109, + "versionNonce": 2074859210, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 65.46484375, + -129.7421875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "FP82AskFm3Lh1tPvv1lq9", + "type": "line", + "x": 450.05859375, + "y": 4240.8671875, + "width": 61.82421875, + "height": 113.42578125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 199143626, + "version": 255, + "versionNonce": 292145110, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 61.82421875, + 113.42578125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "t_6ydp1uC_v23r855FNXE", + "type": "arrow", + "x": 525.6611328125, + "y": 4585, + "width": 761.1201171875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 179347786, + "version": 1329, + "versionNonce": 526737418, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 761.1201171875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "us3PQTgK_fN8w5Nk4IhG_", + "type": "text", + "x": 565.6875, + "y": 4590.29296875, + "width": 319, + "height": 19, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 2127509142, + "version": 1722, + "versionNonce": 2040934282, + "isDeleted": false, + "text": "FLOW/TRANSACTION submitTransaction", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "GfjjxVGNRF0p99UbfDZjq", + "type": "arrow", + "x": 1286.1953125, + "y": 4646.7734375, + "width": 760.6982421875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1092171862, + "version": 975, + "versionNonce": 53636950, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -760.6982421875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "pW8AlxjpdNg5jWX_4n0dM", + "type": "text", + "x": 567.89453125, + "y": 4653.734375, + "width": 300, + "height": 19, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 432772490, + "version": 1993, + "versionNonce": 933974614, + "isDeleted": false, + "text": "FLOW/RESPONSE submitTransaction ", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "pKKtykoGvufR7ERvt-eTi", + "type": "arrow", + "x": 512.6123046875, + "y": 4647.16796875, + "width": 379.458984375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1779519574, + "version": 863, + "versionNonce": 964619158, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -379.458984375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Ap9Cyn92PMXlJBo3aPhoP", + "type": "text", + "x": 160.5078125, + "y": 4652.4609375, + "width": 356, + "height": 19, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1261986506, + "version": 2126, + "versionNonce": 2067928278, + "isDeleted": false, + "text": "const response = await fcl.send([...])", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 15 + }, + { + "id": "u-UfsHkkQadRF6SCVyVx1", + "type": "arrow", + "x": 136.68359375, + "y": 4710.556640625, + "width": 377.4296875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1607577482, + "version": 823, + "versionNonce": 836980298, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 377.4296875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "3F1bHxsqx2nTNCPGB-6NI", + "type": "text", + "x": 140.59375, + "y": 4715.869140625, + "width": 234, + "height": 38, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 51013142, + "version": 2270, + "versionNonce": 451491158, + "isDeleted": false, + "text": "fcl.transaction(response)\n .subscribe(callback)", + "font": "16px Cascadia", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "-UaYdX-OEaS5wVMrwN5xR", + "type": "text", + "x": 1744.84375, + "y": 3064.501953125, + "width": 162, + "height": 35, + "angle": 1.5707963267948966, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 338788298, + "version": 1205, + "versionNonce": 1853718154, + "isDeleted": false, + "text": "Transaction", + "font": "28px Virgil", + "textAlign": "left", + "baseline": 25 + }, + { + "id": "LuFDPJCxj7GY2koIvvpQY", + "type": "line", + "x": 1827.22265625, + "y": 3166.751953125, + "width": 0, + "height": 1603.451171875, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 561953238, + "version": 2787, + "versionNonce": 1627850518, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1603.451171875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "0qPJx0BzT51VBvJZZbAtb", + "type": "line", + "x": 1828.48046875, + "y": 1618.515625, + "width": 1701.3046875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 1012736982, + "version": 218, + "versionNonce": 1545674058, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -1701.3046875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "pb8U1YVZRiNyhtgwvxJoO", + "type": "line", + "x": 1823.1328125, + "y": 2984.24609375, + "width": 1695.5, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 1893180118, + "version": 393, + "versionNonce": 1208071254, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -1695.5, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "9mq_YXv-6dfI7LCcLOoZk", + "type": "line", + "x": 1825.71875, + "y": 4770.21484375, + "width": 1695.5, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "roughness": 1, + "opacity": 40, + "seed": 303631562, + "version": 488, + "versionNonce": 2036524042, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -1695.5, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "vKI1TN3W9zEYCqXspw6cd", + "type": "line", + "x": 116.59765625, + "y": 3556.2403564453125, + "width": 0, + "height": 987.7479248046875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 561630986, + "version": 2591, + "versionNonce": 1883029270, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 987.7479248046875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "x_rOBERCd6TqS6QnIH9qV", + "type": "line", + "x": 116.16015625, + "y": 4690.296875, + "width": 0, + "height": 76.2421875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 406239574, + "version": 2817, + "versionNonce": 691342730, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 76.2421875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "zOwAE2N733ejewShvmEsl", + "type": "line", + "x": 115.9921875, + "y": 4556.8359375, + "width": 0, + "height": 119.27734375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 315952906, + "version": 3005, + "versionNonce": 1280138506, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 119.27734375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "aDpvsyDq7LP1_OC4cpBxX", + "type": "text", + "x": 458.748046875, + "y": 2862.462890625, + "width": 372, + "height": 40, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 385734090, + "version": 6220, + "versionNonce": 1866634186, + "isDeleted": false, + "text": "A deep merge of the private currentUser data\ninto the public currentUser data", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 34 + }, + { + "id": "h7Bs0gToLSbntCq0_kmTk", + "type": "line", + "x": 452.544921875, + "y": 2604.6953125, + "width": 0, + "height": 292.771484375, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1087030230, + "version": 626, + "versionNonce": 48037846, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 292.771484375 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "toQyT3WzIMdRQiPm4x9M2", + "type": "text", + "x": -219.69921875, + "y": 2983.08203125, + "width": 292, + "height": 240, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 331266710, + "version": 5459, + "versionNonce": 1436890454, + "isDeleted": false, + "text": "When a transaction is initiated fcl\nwill go through a process called\nasynchronous decomposition. In short\nit will try to make sure it has all\nthe things it needs to have a high\nprobability of submitting a successful\ntransaction. As an example if there\nisn't a currentUser but the\ntransaction needs a currentUser, fcl\nwill attempt to authenticate the\nuser before the transaction needs\nany of the currentUsers information.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 234 + }, + { + "id": "x_lnq9l_uj6CvcgnVJgeJ", + "type": "line", + "x": 18.23828125, + "y": 3134.0078125, + "width": 98.14453125, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 142857302, + "version": 1239, + "versionNonce": 821686986, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 98.14453125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "b_B9QDbiNzXEojm8Ot3A6", + "type": "line", + "x": 118.421875, + "y": 3302.0743408203125, + "width": 0, + "height": 241.8240966796875, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1749654346, + "version": 2215, + "versionNonce": 568597834, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 241.8240966796875 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "Co3Eq_HoZ3jX0sykDN2jl", + "type": "text", + "x": -160.5390625, + "y": 3359.703125, + "width": 257, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 832108426, + "version": 5797, + "versionNonce": 1452595658, + "isDeleted": false, + "text": "FCL will attempt to authorize\nthe transaction with the various\nauthorization hooks.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "3tVP74pUyHOCD2o9JmG9o", + "type": "line", + "x": 18.845703125, + "y": 3408.4453125, + "width": 98.14453125, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 272878102, + "version": 1318, + "versionNonce": 1339264278, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 98.14453125, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "xlOhPrPEy7PRuivNrLRnv", + "type": "text", + "x": -177.6328125, + "y": 3559.34375, + "width": 287, + "height": 520, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 190797386, + "version": 7155, + "versionNonce": 1392608586, + "isDeleted": false, + "text": "FCL will timeout authorizations\nfairly quickly if they don't respond\nright away. This is because the\nauthorization doesn't actually need\nto happen with this request.\nInstead what this request is doing\nis supplying the provider with what\nto sign, and then the provider sends\nback the information required to\ncreate a backchannel in which FCL\ncan then request the results.\n\nThe provider can also supply some\nlocal strategies that can give the\nuser an in dApp authorization flow.\nThese strategies can be things like\nrendering an iframe or sending an\nevent to a browser extension.\n\nBecause the actual response that\nmatters for the authorization\nhappens in a back channel we can\nlock these local strategies down\nas they really only act as a window\ninto the providers authorization\nuser experience.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 514 + }, + { + "id": "NEX_J-rQLNq2wm5mbCd7c", + "type": "line", + "x": 68.46875, + "y": 3788.57421875, + "width": 47.951171875, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 317150154, + "version": 1438, + "versionNonce": 987723158, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 47.951171875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "JVb2QMCeDhYIHIb3lBAJ8", + "type": "line", + "x": 1700.62890625, + "y": 3370.12890625, + "width": 0, + "height": 758.33203125, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 20, + "seed": 287421898, + "version": 3322, + "versionNonce": 1327943754, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 758.33203125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "T0FONKIugMmjyhBNPa1b2", + "type": "arrow", + "x": 908.5869140625, + "y": 3392.4375, + "width": 783.2568359375, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 62204694, + "version": 1042, + "versionNonce": 1425626198, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 783.2568359375, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "RzUmFjJWM7eyvTR6uIWjl", + "type": "arrow", + "x": 1694.3984375, + "y": 4106, + "width": 782.88671875, + "height": 0, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 302396822, + "version": 1558, + "versionNonce": 568895754, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -782.88671875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "IvLj82FximT02G1AK9jZ_", + "type": "diamond", + "x": 1622.4375, + "y": 3971.888671875, + "width": 150.1953125, + "height": 93.82421875, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1415433814, + "version": 1295, + "versionNonce": 1640663126, + "isDeleted": false + }, + { + "id": "oXRPPSMK37VNWnLwkYuZP", + "type": "text", + "x": 1647.4921875, + "y": 3995.099609375, + "width": 103, + "height": 38, + "angle": 0, + "strokeColor": "#5f3dc4", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 65890826, + "version": 735, + "versionNonce": 2008735114, + "isDeleted": false, + "text": "APPROVED\nTRANSACTION", + "font": "16px Cascadia", + "textAlign": "center", + "baseline": 34 + }, + { + "id": "pmu2RB5R3JQnXZ20pKfb6", + "type": "text", + "x": 1657.11328125, + "y": 3281.0546875, + "width": 83, + "height": 75, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1528973770, + "version": 654, + "versionNonce": 399838934, + "isDeleted": false, + "text": "provider\napproval\nprocess", + "font": "20px Virgil", + "textAlign": "center", + "baseline": 68 + }, + { + "id": "jNThL9TEd_WZFS1q9bspt", + "type": "text", + "x": 1474.6015625, + "y": 3224.20703125, + "width": 206, + "height": 160, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1793138506, + "version": 8513, + "versionNonce": 1450144202, + "isDeleted": false, + "text": "These could be things like\n- the providers mobile app\n- a hardware device\n- browser extension\n- iframe\n- text message\n- providers website\n- desktop application", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 154 + }, + { + "id": "IF08tbolyi3Jhmflhqsew", + "type": "line", + "x": 1645.6796875, + "y": 3292.703125, + "width": 0, + "height": 63.39501953125, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1043337802, + "version": 1030, + "versionNonce": 891123786, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 63.39501953125 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "ljhLjuHekKgxFYwog8Fwn", + "type": "line", + "x": 1645.95703125, + "y": 3325.228759765625, + "width": 29.6171875, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ced4da", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 138692298, + "version": 1258, + "versionNonce": 1338804566, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + -29.6171875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "7wScteC3L1Oah6wsNyl8R", + "type": "text", + "x": -179.7890625, + "y": 4584.96875, + "width": 285, + "height": 80, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1886238922, + "version": 7618, + "versionNonce": 286539338, + "isDeleted": false, + "text": "Once FCL thinks it has everything\nit needs, it will attempt to submit\nthe transaction to the access node\nreturning a Response", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 74 + }, + { + "id": "Lt5zP-8-JtS3R8KXjCn_y", + "type": "line", + "x": 97.60546875, + "y": 4618.953125, + "width": 17.7060546875, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 1566435478, + "version": 1705, + "versionNonce": 30330582, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 17.7060546875, + 0 + ] + ], + "lastCommittedPoint": null + }, + { + "id": "_hXtzS2Onepme0YJyWzLw", + "type": "text", + "x": -149.98828125, + "y": 4704.33984375, + "width": 248, + "height": 60, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 451638870, + "version": 7890, + "versionNonce": 1114224214, + "isDeleted": false, + "text": "The response can be used to\nsubscribe to the status of the\ntransaction.", + "font": "16px Virgil", + "textAlign": "left", + "baseline": 54 + }, + { + "id": "XaIR2rfIdf4M2OpALv-I2", + "type": "line", + "x": 28.1796875, + "y": 4755.40234375, + "width": 85.70849609375, + "height": 0, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "roughness": 1, + "opacity": 100, + "seed": 491140886, + "version": 1932, + "versionNonce": 1203742282, + "isDeleted": false, + "points": [ + [ + 0, + 0 + ], + [ + 85.70849609375, + 0 + ] + ], + "lastCommittedPoint": null + } + ], + "appState": { + "viewBackgroundColor": "#ffffff" + } +} \ No newline at end of file diff --git a/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v3.png b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v3.png new file mode 100644 index 0000000000..9acc0026b6 Binary files /dev/null and b/docs/tooling/wallet-provider-spec/assets/fcl-ars-auth-v3.png differ diff --git a/docs/tooling/wallet-provider-spec/authorization-function.md b/docs/tooling/wallet-provider-spec/authorization-function.md new file mode 100644 index 0000000000..4d4a87a4f2 --- /dev/null +++ b/docs/tooling/wallet-provider-spec/authorization-function.md @@ -0,0 +1,131 @@ +# Authorization Function + +## Overview + +An Authorization Function is a function which enables the JS-SDK and FCL to know which Flow account fulfills which signatory role in a transaction and how to recieve a signature on behalf of the supplied account. + +## How to Use an Authorization Function + +An authorization function is a function that you may use in place of an authorization in the Flow JS-SDK and FCL. An authorization is a concept that is used when denoting a proposer, payer or authorizer for a transaction. An authorization can either be a data structure represenating an authorization, or a function which when called returns an authorization called an Authorization Function. In this document we discuss the latter. + +To use an Authorization Function, you specify that Authorization Function as the authorization for a proposer, payer or authorizer for a transaction. + +> `fcl.currentUser().authorization` which is aliased to `fcl.authz` is itself an authorization function. It tells the underlying js-sdk the current users flow account will be used for the signatory role and supplies a signing function that enables the application to request a signature from the users wallet. + +Example 1: +```javascript +import * as fcl from "@onflow/fcl" + +const myAuthorizationFunction = ... // An Authorization Function + +const response = fcl.send([ + fcl.transaction`transaction() { prepare(acct: AuthAccount) {} execute { log("Hello, Flow!") } }`, + fcl.proposer(myAuthorizationFunction), + fcl.payer(myAuthorizationFunction), + fcl.authorizers([ myAuthorizationFunction ]) +]) +``` + +The builder functions, `fcl.proposer`, `fcl.payer` and `fcl.authorizations` each consume the Authorization Function and set it as the resolve field on the internal Account object it creates. + +During the resolve phase of the Flow JS-SDK and FCL, when [`resolveAccounts`](https://github.com/onflow/flow-js-sdk/blob/master/packages/sdk/src/resolve/resolve.js#L22) is called, the resolve field on each internal Account object is called, which means each Authorization Function is called appropriately and the account is _resolved_ into the data structure the authorizationFunction returns. These accounts are then deduped based on the a mix of the `addr`, `keyId` and `tempId` so that only a single signature request happens per `address` `keyId` pair. When [`resolveSignatures`](https://github.com/onflow/flow-js-sdk/blob/master/packages/sdk/src/resolve/resolve.js#L25) is called the signing function for each `address` `keyId` pair is called returning a composite signature for each signatory role. + +## How to Create An Authorization Function + +Fortunately, creating an Authorization Function is relatively straight forward. + +An Authorization Function needs to be able to do at minimum two things. +- Who will sign -- Know which account is going to sign and the keyId of the key it will use to sign +- How they sign -- Know how to get a signature for the supplied account and key from the first piece. + +The Authorization Function has a concept of an account. An account represent a possible signatory for the transaction, it includes the who is signing as well as the how it will be signed. The Authorization Function is passed an empty Account and needs to return an Account, your job when making an Authorization Function is mostly to fill in this Account with the information so that the account you want to sign things can. + +Lets say we knew up front the account, keyId and had a function that could sign things. + +```javascript +const ADDRESS = "0xba1132bc08f82fe2" +const KEY_ID = 1 // this account on testnet has three keys, we want the one with an index of 1 (has a weight of 1000) +const sign = msg => { /* ... returns signature (for the key above) for supplied message ... */ } +``` + +Our Authorization Function becomes about filling things in: + +Example 2: +```javascript +const authorizationFunction = async (account) => { + // authorization function need to return an account + return { + ...account, // bunch of defaults in here, we want to overload some of them though + tempId: `${ADDRESS}-${KEY_ID}`, // tempIds are more of an advanced topic, for 99% of the times where you know the address and keyId you will want it to be a unique string per that address and keyId + addr: ADDRESS, // the address of the signatory + keyId: Number(KEY_ID), // this is the keyId for the accounts registered key that will be used to sign, make extra sure this is a number and not a string + signingFunction: async signable => { + // Singing functions are passed a signable and need to return a composite signature + // signable.message is a hex string of what needs to be signed. + return { + addr: ADDRESS, // needs to be the same as the account.addr + keyId: Number(KEY_ID), // needs to be the same as account.keyId, once again make sure its a number and not a string + signature: sign(signable.message), // this needs to be a hex string of the signature, where signable.message is the hex value that needs to be signed + } + } + } +} +``` + +## Async stuff + +Both the Authorization Function, and the accounts Signing Function can be asynchronous. This means both of these functions can go and get the information needed elsewhere. Say each of your users had a `userId`. From this `userId` say you had an api call that could return the corresponding address and key that is needed for the Authorization Functions account. You could also have another endpoint that when posted the signable (includes what needs to be signed) and the `userId` it can return with the composite signature if your api decides its okay to sign (the signable has all sorts of info to help you decide). An authorization function that can do that could look something like this. + +Example 3: +```javascript +const getAccount = (userId) => fetch(`/api/user/${userId}/account`).then(d => d.json()) +const getSignature = (userId, signable) = fetch(`/api/user/${userId}/sign`, { + method: "POST", + headers: { "Content-Type": "application/json"}, + body: JSON.stringify(signable), +}) + +function authz (userId) { + return async function authorizationFunction (account) { + const {addr, keyId} = await getAccount(userId) + + return { + ...account, + tempId: `${addr}-${keyId}`, + addr: addr, + keyId: Number(keyId), + signingFunction: signable => { + return getSignature(userId, signable) + } + } + } +} +``` +The above **Example 3** is the same as **Example 2**, but the information is gathered during the execution of the authorization function based on the supplied user id. + +## How to create a Signing Function + +Creating a signing function is also relatively simple! + +To create a signing function you specify a function which consumes a payload and returns a signature data structure. + +Example 3: +```javascript +const signingFunction = ({ + message, // The encoded string which needs to be used to produce the signature. + addr, // The address of the Flow Account this signature is to be produced for. + keyId, // The keyId of the key which is to be used to produce the signature. + roles: { + proposer, // A Boolean representing if this signature to be produced for a proposer. + authorizer, // A Boolean representing if this signature to be produced for a authorizer. + payer, // A Boolean representing if this signature to be produced for a payer. + }, + voucher, // The raw transactions information, can be used to create the message for additional safety and lack of trust in the supplied message. +}) => { + return { + addr, // The address of the Flow Account this signature was produced for. + keyId, // The keyId for which key was used to produce the signature. + signature: produceSignature(message) // The hex encoded string representing the signature of the message. + } +} +``` diff --git a/docs/tooling/wallet-provider-spec/custodial.md b/docs/tooling/wallet-provider-spec/custodial.md new file mode 100644 index 0000000000..9b3b544211 --- /dev/null +++ b/docs/tooling/wallet-provider-spec/custodial.md @@ -0,0 +1,361 @@ +# Introduction + +A Wallet Provider handles Authentications and Authorizations. They play a very important role of being the place the users control their information and approve transactions. + +One of FCLs core ideals is for the user to be in control of their data, a wallet provider is where many users will do just that. + +FCL has been built in a way that it doesn't need to know any intimate details about a wallet provider up front, they can be discovered when the users wishes to let the dapp know about them. This gives us a concept we have been calling Bring Your Own Identity. + +# Identity + +Conceptually, FCL thinks of identity in two ways: Public and Private. + +Public identity will be stored on chain as a resource, it will be publicly available to anyone that knows the Flow Address for the account. + +In FCL getting a users public identity will be as easy as: + +```javascript +import {user} from "@onflow/fcl" + +const identity = await user(flowAddress).snapshot() +// ^ +// `------ The public identity for `flowAddress` + +const unsub = user(flowAddress).subscribe(identity => console.log(identity)) +// ^ +// `------- The public identity for `flowAddress` +``` + +Private identity will be stored by the Wallet Provider, it will only be available to the currentUser. + +In FCL getting the currentUsers identity will fetch both the public and the private identities, merging the private into the public. + +Private info needs to be requested via scopes before the challenge step, more on that later. +We highly recommend Wallet Providers let the user see what scopes are being requested, and decide what scopes to share with the dapp. + +Consumers of identities in FCL should always assume all data is optional, and should store as little as possible, FCL will make sure the users always see the latest. + +```javascript +import {config, currentUser, authenticate} from "@onflow/fcl" + +config.put("challenge.scope", "email") // request the email scope + +const unsub = currentUser().subscribe(identity => console.log(identity)) +// ^ +// `------- The private identity for the currentUser + +authenticate() // trigger the challenge step (authenticate the user via a wallet provider) +``` + +# Identity Data + +- All information in Identities are optional and may not be there. +- All values can be stored on chain, but most probably shouldn't be. + +We would love to see Wallet Providers enable the user to control the following info publicly, sort of a public profile starter kit if you will. + +FCL will always publicly try to fetch these fields when asked for a users information and it will be up to the Wallet provider to make sure they are there and keep them up to date if the user wants to change them. + +- **`name`** -- A human readable name/alias/nym for a dapp users display name +- **`avatar`** -- A fully qualified url to a smaller image used to visually represent the dapp user +- **`cover`** -- A fully qualified url to a bigger image, could be used by the dapp for personalization +- **`color`** -- A 6 character hex color, could be used by the dapp for personalization +- **`bio`** -- A small amount of text that a user can use to express themselves + +If we can give dapp developers a solid foundation of usable information that is in the direct control of the users from the very start, which we belive the above fields would do, our hopes are they can rely more on the chain and will need to store less in their own database. + +Private data on the other hand has more use cases than general data. It is pretty easy to imagine ordering something and needing information like contact details and where to ship something. + +Eventually we would love to see that sort of thing handled completely on-chain, securely, privately and safely, but in the interm it probably means storing a copy of data in a database when its needed, and allowed by a user. + +The process of a dapp receiving private data is as follows: + +1. The dapp requests the scopes they want up front `fcl.config().put("challenge.scope", "email+shippingAddress")`. +2. The User authenticates `fcl.authenticate()` and inside the Wallet Providers authentication process decides its okay for the dapp to know both the `email` and the `shippingAddress`. The User should be able to decide which information to share, if any at all. +3. When the dapp needs the information they can request it from FCLs current cache of data, if it isnt there the dapp needs to be okay with that and adjust accodingly. + +Below are the scopes we are thinking of supporting privately: +FCL will only publicly and privately try to fetch these when specified up front by a dapp. + +- **`email`** +- **`fullName`** +- **`phone`** +- **`textMessage`** +- **`address`** +- **`shippingAddress`** +- **`location`** +- **`publicKey`** + +All of the above are still subject to change as it is still early days, we would like to work closely with Wallet Providers to produce a robust, detailed and consitent spec regarding scopes. Feedback and thoughts are always welcome. + +# Authentication Challenge + +Authentication can happen one of two ways: + +- Iframe Flow +- Redirection Flow + +As a Wallet Provider you will be expected to register a URL endpoint (and some other information) with a handshake service (FCL will be launching with one in which registration happens on chain and is completely open source (Apache-2.0 lincense)). +This registered URL will be what is shown inside the iFrame or where the dapp users will be redirected. +For the remainder of this documentation we will refere to it as the _Authentication Endpoint_ and pair it with the `GET https://provider.com/flow/authentication` route. + +The Authentication Endpoint will receive the following data as query params: + +- `l6n` _(required)_ -- location (origin) of dapp +- `nonce` _(required)_ -- a random string supplied by the FCL +- `scope` _(optional)_ -- the scopes requested by the dapp +- `redirect` _(optional)_ -- where to redirect once the authentication challenge is complete + +``` +GET https://provider.com/flow/authenticate + ?l6n=https%3A%2F%2Fdapp.com + &nonce=asdfasdfasdf + &scope=email+shippingAddress + &redirect=https%3A%2F%2Fdapp.com%2Fflow%2Fcallback + +The values will use javascripts `encodeURIComponent` function and scopes will be `+` deliminated. +``` + +We can tell that this challenge is using the Redirect Flow because of the inclusion of the redirect query param. +The Iframe Flow will still need to be supported as it will be the default flow for dapps. + +At this point its on the Wallet Provider to do their magic and be confident enough that the user is who they say they are. +The user should then be shown in some form what the dapp is requesting via the scopes and allow them to opt in or out of anything they want. +Once the Wallet Provider is ready to hand back control to the dapp and FCL it needs to complete the challenge by redirecting or emiting a javascript `postMessage` event. + +Redirecting will look like this: + +``` +GET https://dapp.com/flow/callback # supplied by the redirect query param above + ?l6n=https%3A%2F%2Fdapp.com # the l6n supplied by FCL above + &nonce=asdfasdfasdf # the nonce supplied by FCL above + &addr=0xab4U9KMf # address for the users flow account (if available) -- will be used to fetch public identity information and hooks + &padder=0xhMgqTff86 # address for the Wallet Providers account -- will be used to fetch provider information + &code=afseasdfsadf # a token supplied to FCL from the Wallet Provider, FCL will use this token when requesting private information and hooks, can be any url safe value + &exp=1650400809517 # when the code expires, a value of `0` will be considered as never expires + &hks==https%3A%2F%2Fprovider.com%2Fhooks # a URL where FCL can request the private information and hooks +``` + +Iframe will look like this: + +```javascript +parent.postMessage( + { + type: "FCL::CHALLENGE::RESPONSE", // used by FCL to know what kind of message this is + addr: "0xab4U9KMf", + paddr: "0xhMgqTff86", + code: "afseasdfsadf", + exp: 1650400809517, + hks: "https://provider.com/hooks", + nonce: "asdfasdfasdf", + l6n: decodeURIComponent(l6n), + }, + decodeURIComponent(l6n) +) +``` + +FCL should now have everything it needs to collect the Public, Private and Wallet Provider Info. +The Wallet Provider info will be on chain so its not something that needs to be worried about here by the Wallet Provider. +What does need to be worried about handling the hooks request which was supplied to FCL via the `hks` value in the challenge response `https://provider.hooks`. + +The hooks request will be to the `hks` value supplied in the challenge response. The request will also include the code as a query param + +``` +GET https://povider.com/hooks + ?code=afseasdfsadf +``` + +This request needs to happen for a number of reasons. + +- If it fails FCL knows something is wrong and will attempt to re-authenticate. +- If is succeeds FCL knows that the code it has is valid. +- It creates a direct way for FCL to "verify" the user against the Wallet Provider. +- It gives FCL a direct way to get Private Identity Information and Hooks. +- The code can be passed to the backend to create a back-channel between the backend and the Wallet Provider. + +When users return to a dapp, if the code FCL stored hasnt expired, FCL will make this request again in order to stay up to date with the latest informtaion. FCL may also intermitently request this information before some critial actions. + +The hooks request should respond with the following JSON + +```javascript +const privateHooks = { + addr: "0xab4U9KMf", // the flow address this user is using for the dapp + keyId: 3, // the keyId the user wants to use when authorizing transaction + identity: { // the identity information fcl always wants if its there, will be deep merged into public info + name: "Bob the Builder", + avatar: "https://avatars.onflow.org/avatar/0xab4U9KMf.svg" + cover: "https://placekittens.com/g/900/300", + color: "cccc00", + bio: "", + }, + scoped: { // the private info request in the original challenge + email: "bob@bob.bob", // the user said it was okay for the dapp to know the email + shippingAddress: null, // the user said it was NOT okay for the dapp to know the shippingAddress + }, + provider: { + addr: "0xhMgqTff86", // the flow address for the wallet provider (used in the identity composite id) + pid: 2345432, // the wallet providers internal id for the user (used in the identity composite id) + name: "Super Wallet", + icon: "https://provider.com/assets/icon.svg", + authn: "https://provider.com/flow/authenticate", + } +} +``` + +When FCL requested the Public info from the chain it is expecting something like this. +It will be on the Wallet Provider to keep this information up to date. + +```javascript +const publicHooks = { + addr: "0xab4U9KMf", + keyId: 2, + identity: { + name: "Bob the Builder", + avatar: "https://avatars.onflow.org/avatar/0xab4U9KMf.svg" + cover: "https://placekittens.com/g/900/300", + color: "cccc00", + bio: "", + }, + authorizations: [ + { + id: 345324539, + addr: "0xhMgqTff86", + method: "HTTP/POST", + endpoint: "https://provider.com/flow/authorize", + data: { + id: 2345432 + } + } + ] +} +``` + +At this point FCL can be fairly confident who the currentUser is and is ready to initiate transactions the user can authorize. + +# Authorization + +FCL will broadcast authorization requests to the Public and Private authorization hooks it knows for a User, in a process we call Asynchronous Remote Signing. + +The core concepts to this idea are: + +- Hooks tell FCL where to send authorization requests (Wallet Provider) +- Wallet Provider responds imediately with: + - a back-channel where FCL can request the results of the authorization + - some optional local hooks ways the currentUser can authorize +- FCL will trigger the local hooks if they are for the currentUser +- FCL will poll the back-channel requesting updates until an approval or denial is given + +Below is the public authorization hook we received during the challenge above. + +```javascript + { + id: 345324539, + addr: "0xhMgqTff86", + method: "HTTP/POST", + endpoint: "https://provider.com/flow/authorize", + data: { + id: 2345432 + } + } +``` + +FCL will take that hook and do the following post requeset: + +``` +POST https://provider.com/flow/authorize + ?id=2345432 +--- +{ + message: "...", // what needs to be signed (needs to be convered from hex to binary before signing) + addr: "0xab4U9KMf", // the flow address that needs to sign + keyId: 3, // the flow account keyId for the private key that needs to sign + roles: { + proposer: true, // this accounts sequence number will be used in the transaction + authorizer: true, // this transaction can "move" and "modify" the accounts resources directly + payer: true, // this transaction will be paid for by this account (also signifies that they are signing an envelopeMessage instead of a payloadMessage) + }, + interaction: {...} // needed to recreate the message if the Wallet Provider wants to verify the message. +} +``` + +FCL ise expecting something like this in response: + +```javascript +{ + status: "PENDING", + reason: null, + compositeSignature: null, + authorizationUpdates: { + method: "HTTP/POST", + endpoint: "https://provider.com/flow/authorizations/4323", + }, + local: [ + { + method: "BROWSER/IFRAME", + endpoint: "https://provider.com/authorizations/4324", + width: "300", + height: "600", + background: "#ff0066" + } + ] +} +``` + +That local hook will be consumed by FCL, rendering an iframe with the endpoint as the src. If the user is already authenticated this screen could show them the Wallet Providers transaction approval process directly. +Because FCL isnt relying on any communication to or from the Iframe it can lock it down as much as possible, and remove it once the authorization is complete. +While displaying the local hook, it will request the status of the authorization from the `authorizationUpdates` hook. + +``` +POST https://provider.com/flow/authorizations/4323 +``` + +Expecting a response that has the same structure as the origin but without the local hooks: + +```javascript +{ + status: "PENDING", + reason: "", + compositeSignature: null, + authorizationUpdates: { + method: "HTTP/POST", + endpoint: "https://provider.com/flow/authorizations/4323", + }, +} +``` + +FCL will then follow the new `authorizationUpdates` hooks until the status changes to `"APPROVED"` or `"DECLINED"`. +If the authorization is declined it should include a reason if possible. + +```javascript +{ + status: "DECLINED", + reason: "They said no", +} +``` + +If the authorization is approved it should include a composite signature: + +```javascript +{ + status: "APPROVED", + compositeSignature: { + addr: "0xab4U9KMf", // the flow address that needs to sign + keyId: 3, // the flow account keyId for the private key that needs to sign + signature: "..." // binary signature of message encoded as hex + } +} +``` + +FCl can now submit the transaction to the Flow blockchain. + +# TL;DR Wallet Provider + +Register Provider with FCL Handshake and implement 5 Endpoints. + +- `GET flow/authenticate` -> `parent.postMessage(..., l6n)` +- `GET flow/hooks?code=___` -> `{ ...identityAndHooks }` +- `POST flow/authorize` -> `{ status, reason, compositeSignature, authorizationUpdates, local }` +- `POST authorizations/:authorization_id` +- `GET authorizations/:authorization_id` + +![diagram showing current fcl authn and authz flow](./assets/fcl-ars-auth-v3.2.png) diff --git a/docs/tooling/wallet-provider-spec/index.md b/docs/tooling/wallet-provider-spec/index.md new file mode 100644 index 0000000000..820fa7e479 --- /dev/null +++ b/docs/tooling/wallet-provider-spec/index.md @@ -0,0 +1,979 @@ +--- +title: Wallet Provider Spec +sidebar_title: Draft v4 +--- +## Status + +- **Last Updated:** June 20th 2022 +- **Stable:** Yes +- **Risk of Breaking Change:** Medium +- **Compatibility:** `>= @onflow/fcl@1.0.0-alpha.0` + +## Definitions + +This document is written with the perspective that _you_ who are reading this right now are an FCL Wallet Developer. All references to _you_ in this doc are done with this perspective in mind. + +# Overview + +Flow Client Library (FCL) approaches the idea of blockchain wallets on Flow in a different way than how wallets may be supported on other blockchains. For example, with FCL, a wallet is not necessarily limited to being a browser extension or even a native application on a users device. FCL offers wallet developers the flexibility and freedom to build many different types of applications. Since wallet applications can take on many forms, we needed to create a way for these varying applications to be able to communicate and work together. + +FCL acts in many ways as a protocol to facilitate communication and configuration between the different parties involved in a blockchain application. An _Application_ can use FCL to _authenticate_ users, and request _authorizations_ for transactions, as well as mutate and query the _Blockchain_. An application using FCL offers its _Users_ a way to connect and select any number of Wallet Providers and their Wallet Services. A selected _Wallet_ provides an Application's instance of FCL with configuration information about itself and its Wallet Services, allowing the _User_ and _Application_ to interact with them. + +In the following paragraphs we'll explore ways in which you can integrate with FCL by providing implementations of various FCL services. + +The following services will be covered: + +- Authentication (Authn) Service +- Authorization (Authz) Service +- User Signature Service +- Pre-Authz Service + +# Service Methods + +FCL Services are your way as a Wallet Provider of configuring FCL with information about what your wallet can do. FCL uses what it calls `Service Methods` to perform your supported FCL services. Service Methods are the ways FCL can talk to your wallet. Your wallet gets to decide which of these service methods each of your supported services use to communicate with you. + +Sometimes services just configure FCL and that's it. An example of this can be seen with the Authentication Service and the OpenID Service. +With those two services you are simply telling FCL "here is a bunch of info about the current user". (You will see that those two services both have a `method: "DATA"` field in them. +Currently these are the only two cases that can be a data service.) + +Other services can be a little more complex. For example, they might require a back and forth communication between FCL and the Service in question. +Ultimately we want to do this back and forth via a secure back-channel (https requests to servers), **but in some situations that isn't a viable option, so there is also a front-channel option**. +Where possible, you should aim to provide a back-channel support for services, and only fall back to a front-channel if absolutely necessary. + +Back-channel communications use `method: "HTTP/POST"`, while front-channel communications use `method: "IFRAME/RPC"`, `method: "POP/RPC"`, `method: "TAB/RPC` and `method: "EXT/RPC"`. + +| Service Method | Front | Back | +|----------------|--------|-------| +| HTTP/POST | ⛔ | ✅ | +| IFRAME/RPC | ✅ | ⛔ | +| POP/RPC | ✅ | ⛔ | +| TAB/RPC | ✅ | ⛔ | +| EXT/RPC | ✅ | ⛔ | + +It's important to note that regardless of the method of communication, the data that is sent back and forth between the parties involved is the same. + +# Protocol schema definitions +In this section we define the schema of objects used in the protocol. While they are JavaScript objects, only features supported by JSON should be used. (Meaning that conversion of an object to and from JSON should not result in any loss.) + +For the schema definition language we choose TypeScript, so that the schema closely resembles the actual type definitions one would use when making an FCL implementation. + +**Note that currently there are no official type definitions available for FCL. If you are using TypeScript, you will have to create your own type definitions (possibly based on the schema definitions presented in this document).** + +## Common definitions +In this section we introduce some common definitions that the individual object definitions will be deriving from. + +First, let us define the kinds of FCL objects available: +```typescript +type ObjectType = + | 'PollingResponse' + | 'Service' + | 'Identity' + | 'ServiceProvider' + | 'AuthnResponse' + | 'Signable' + | 'CompositeSignature' + | 'OpenID' +``` + +The fields common to all FCL objects then can be defined as follows: +```typescript +interface ObjectBase { + f_vsn: Version + f_type: ObjectType +} +``` + +The `f_vsn` field is usually `1.0.0` for this specification, but some exceptions will be defined by passing a different `Version` type parameter to `ObjectBase`. + +All FCL objects carry an `f_type` field so that their types can be identified at runtime. + +## FCL objects +In this section we will define the FCL objects with each `ObjectType`. + +We also define the union of them to mean any FCL object: +```typescript +type FclObject = + | PollingResponse + | Service + | Identity + | ServiceProvider + | AuthnResponse + | Signable + | CompositeSignature + | OpenID +``` + +### `PollingResponse` + +```typescript +interface PollingResponse extends ObjectBase { + f_type: 'PollingResponse' + status: 'APPROVED' | 'DECLINED' | 'PENDING' | 'REDIRECT' + reason: string | null + data?: FclObject + updates?: FclObject + local?: FclObject +} +``` + +Each response back to FCL must be "wrapped" in a `PollingResponse`. The `status` field determines the meaning of the response: +- An `APPROVED` status means that the request has been approved. The `data` field should be present. +- A `DECLINED` status means that the request has been declined. The `reason` field should contain a human readable reason for the refusal. +- A `PENDING` status means that the request is being processed. More `PENDING` responses may follow, but eventually a non-pending status should be returned. The `updates` and `local` fields may be present. +- The `REDIRECT` status is reserved, and should not be used by wallet services. + +In summary, zero or more `PENDING` responses should be followed by a non-pending response. It is entirely acceptable for your service to immediately return an `APPROVED` Polling Response, skipping a `PENDING` state. + +See also [PollingResponse](https://github.com/onflow/flow-js-sdk/blob/master/packages/fcl/src/current-user/normalize/polling-response.js). + +Here are some examples of valid `PollingResponse` objects: +```javascript +// APPROVED +{ + f_type: "PollingResponse", + f_vsn: "1.0.0", + status: "APPROVED", + data: ___, // what the service needs to send to FCL +} + +// Declined +{ + f_type: "PollingResponse", + f_vsn: "1.0.0", + status: "DECLINED", + reason: "Declined by user." +} + +// Pending - Simple +{ + f_type: "PollingResponse", + f_vsn: "1.0.0", + status: "PENDING", + updates: { + f_type: "Service", + f_vsn: "1.0.0", + type: "back-channel-rpc", + endpoint: "https://____", // where post request will be sent + method: "HTTP/POST", + data: {}, // will be included in the request's body + params: {}, // will be included in the request's url + } +} + +// Pending - First Time with Local +{ + f_type: "PollingResponse", + f_vsn: "1.0.0", + status: "PENDING", + updates: { + f_type: "Service", + f_vsn: "1.0.0", + type: "back-channel-rpc", + endpoint: "https://____", // where post request will be sent + method: "HTTP/POST", + data: {}, // included in body of request + params: {}, // included as query params on endpoint + }, + local: { + f_type: "Service", + f_vsn: "1.0.0", + endpoint: "https://____", // the iframe that will be rendered, + method: "VIEW/IFRAME", + data: {}, // sent to frame when ready + params: {}, // included as query params on endpoint + } +} +``` + +A `PollingResponse` can alternatively be constructed using `WalletUtils` when sending `"APPROVED"` or `"DECLINED"` responses. + +```javascript +import {WalletUtils} from "@onflow/fcl" + +// Approving a PollingResponse +// Example using an AuthnResponse as the PollingResponse data +WalletUtils.approve({ + f_type: "AuthnResponse", + f_vsn: "1.0.0" + ... +}) + +// Rejecting a PollingResponse +// Supplies a reason for declining +const reason = "User declined to authenticate." +WalletUtils.decline(reason) +``` + +### `Service` + +```typescript +type ServiceType = + | 'authn' + | 'authz' + | 'user-signature' + | 'pre-authz' + | 'open-id' + | 'back-channel-rpc' + | 'authn-refresh' + +type ServiceMethod = + | 'HTTP/POST' + | 'IFRAME/RPC' + | 'POP/RPC' + | 'TAB/RPC' + | 'EXT/RPC' + | 'DATA' + +interface Service extends ObjectBase { + f_type: 'Service' + type: ServiceType + method: ServiceMethod + uid: string + endpoint: string + id: string + identity: Identity + provider?: ServiceProvider + data?: FclObject +} +``` + +The meaning of the fields is as follows. +- `type`: The type of this service. +- `method`: The service method this service uses. `DATA` means that the purpose of this service is just to provide the information in this `Service` object, and no active communication services are provided. +- `uid`: A unique identifier for the service. A common scheme for deriving this is to use `'wallet-name#${type}'`, where `${type}` refers to the type of this service. +- `endpoint`: Defines where to communicate with the service. + - When `method` is `EXT/RPC`, this can be an arbitrary unique string, and the extension will need to use it to identify its own services. A common scheme for deriving the `endpoint` is to use `'ext:${address}'`, where `${address}` refers to the wallet's address. (See `ServiceProvider` for more information.) +- `id`: The wallet's internal identifier for the user. If no other identifier is used, simply the user's flow account address can be used here. +- `identity`: Information about the identity of the user. +- `provider`: Information about the wallet. +- `data`: Additional information used with a service of type `open-id`. + +See also: +- [authn](https://github.com/onflow/flow-js-sdk/blob/master/packages/fcl/src/current-user/normalize/authn.js) +- [authz](https://github.com/onflow/flow-js-sdk/blob/master/packages/fcl/src/current-user/normalize/authz.js) +- [user-signature](https://github.com/onflow/flow-js-sdk/blob/master/packages/fcl/src/current-user/normalize/user-signature.js) +- [pre-authz](https://github.com/onflow/flow-js-sdk/blob/master/packages/fcl/src/current-user/normalize/pre-authz.js) +- [open-id](https://github.com/onflow/flow-js-sdk/blob/master/packages/fcl/src/current-user/normalize/open-id.js) +- [back-channel-rpc](https://github.com/onflow/flow-js-sdk/blob/master/packages/fcl/src/current-user/normalize/back-channel-rpc.js) + +### `Identity` +This object is used to define the identity of the user. + +```typescript +interface Identity extends ObjectBase { + f_type: 'Identity' + address: string + keyId?: number +} +``` + +The meaning of the fields is as follows. +- `address`: The flow account address of the user. +- `keyId`: The id of the key associated with this account that will be used for signing. + +### `ServiceProvider` +This object is used to communicate information about a wallet. + +```typescript +interface ServiceProvider extends ObjectBase { + f_type: 'ServiceProvider' + address: string + name?: string + description?: string + icon?: string + website?: string + supportUrl?: string + supportEmail?: string +} +``` + +The meaning of the fields is as follows. +- `address`: A flow account address owned by the wallet. It is unspecified what this will be used for. +- `name`: The name of the wallet. +- `description`: A short description for the wallet. +- `icon`: An image URL for the wallet's icon. +- `website`: The wallet's website. +- `supportUrl`: A URL the user can use to get support with the wallet. +- `supportEmail`: An e-mail address the user can use to get support with the wallet. + +### `AuthnResponse` +This object is used to inform FCL about the services a wallet provides. + +```typescript +interface AuthnResponse extends ObjectBase { + f_type: 'AuthnResponse' + addr: string + services: Service[] +} +``` + +The meaning of the fields is as follows. +- `addr`: The flow account address of the user. +- `services`: The list of services provided by the wallet. + +### `Signable` + +```typescript +interface Signable extends ObjectBase<'1.0.1'> { + f_type: 'Signable' + addr: string + keyId: number + voucher: { + cadence: string + refBlock: string + computeLimit: number + arguments: { + type: string + value: unknown + }[] + proposalKey: { + address: string + keyId: number + sequenceNum: number + } + payer: string + authorizers: string[] + } +} +``` + +The `WalletUtils.encodeMessageFromSignable` function can be used to calculate the message that needs to be signed. + +### `CompositeSignature` + +```typescript +interface CompositeSignature extends ObjectBase { + f_type: 'CompositeSignature' + addr: string + keyId: number + signature: string +} +``` + +See also [CompositeSignature](https://github.com/onflow/flow-js-sdk/blob/master/packages/fcl/src/current-user/normalize/composite-signature.js). + +### `OpenID` +TODO + +## Miscellaneous objects + +### `Message` +```typescript +type MessageType = + | 'FCL:VIEW:READY' + | 'FCL:VIEW:READY:RESPONSE' + | 'FCL:VIEW:RESPONSE' + | 'FCL:VIEW:CLOSE' + +type Message = { + type: MessageType +} +``` + +A message that indicates the status of the protocol invocation. + +This type is sometimes used as part of an _intersection type_. For example, the type `Message & PollingResponse` means a `PollingResponse` extended with the `type` field from `Message`. + +### `ExtensionServiceInitiationMessage` +```typescript +type ExtensionServiceInitiationMessage = { + service: Service +} +``` + +This object is used to invoke a service when the `EXT/RPC` service method is used. + +## See also +- [local-view](https://github.com/onflow/flow-js-sdk/blob/master/packages/fcl/src/current-user/normalize/local-view.js) +- [frame](https://github.com/onflow/flow-js-sdk/blob/master/packages/fcl/src/current-user/normalize/frame.js) + +# Service Methods + +## IFRAME/RPC (Front Channel) + +`IFRAME/RPC` is the easiest to explain, so we will start with it: + +- An iframe is rendered (comes from the `endpoint` in the service). +- The rendered iframe adds a listener and sends the `"FCL:VIEW:READY"` message. This can be simplified `WalletUtils.ready(callback)` +- FCL will send the data to be dealt with: + - Where `body` is the stuff you care about, `params` and `data` are additional information you can provide in the service object. +- The wallet sends back an `"APPROVED"` or `"DECLINED"` post message. (It will be a `f_type: "PollingResponse"`, which we will get to in a bit). This can be simplified using `WalletUtils.approve` and `WalletUtils.decline` + - If it's approved, the polling response's data field will need to be what FCL is expecting. + - If it's declined, the polling response's reason field should say why it was declined. + +```javascript +export const WalletUtils.approve = data => { + sendMsgToFCL("FCL:VIEW:RESPONSE", { + f_type: "PollingResponse", + f_vsn: "1.0.0", + status: "APPROVED", + reason: null, + data: data, + }) +} + +export const WalletUtils.decline = reason => { + sendMsgToFCL("FCL:VIEW:RESPONSE", { + f_type: "PollingResponse", + f_vsn: "1.0.0", + status: "DECLINED", + reason: reason, + data: null, + }) +} +``` + +```mermaid +graph LR + Start1(Start) + --Bot 启动--> check1[检查群内的非 Authing 用户] + --> addUser[添加 Authing 用户并消息提醒绑定手机号] + --> End1(End) +``` + +![IFRAME/RPC Diagram](https://raw.githubusercontent.com/onflow/flow-js-sdk/master/packages/fcl/assets/service-method-diagrams/iframe-rpc.png) + +## POP/RPC | TAB/RPC (Front Channel) + +`POP/RPC` and `TAB/RPC` work in an almost entirely similar way to `IFRAME/RPC`, except instead of rendering the `method` in an iframe, we render it in a popup or new tab. The same communication protocol between the rendered view and FCL applies. + +![POP/RPC Diagram](https://raw.githubusercontent.com/onflow/flow-js-sdk/master/packages/fcl/assets/service-method-diagrams/pop-rpc.png) + +![TAB/RPC Diagram](https://raw.githubusercontent.com/onflow/flow-js-sdk/master/packages/fcl/assets/service-method-diagrams/tab-rpc.png) + +## HTTP/POST (Back Channel) + +`HTTP/POST` initially sends a post request to the `endpoint` specified in the service, which should immediately return a `f_type: "PollingResponse"`. + +Like `IFRAME/RPC`, `POP/RPC` or `TAB/RPC`, our goal is to eventually get an `APPROVED` or `DECLINED` polling response, and technically this endpoint could return one of those immediately. + +But more than likely that isn't the case and it will be in a `PENDING` state (`PENDING` is not available to `IFRAME/RPC`, `POP/RPC` or `TAB/RPC`). +When the polling response is `PENDING` it requires an `updates` field that includes a service, `BackChannelRpc`, that FCL can use to request an updated `PollingResponse` from. +FCL will use that `BackChannelRpc` to request a new `PollingResponse` which itself can be `APPROVED`, `DECLINED` or `PENDING`. +If it is `APPROVED` FCL will return, otherwise if it is `DECLINED` FCL will error. However, if it is `PENDING`, it will use the `BackChannelRpc` supplied in the new `PollingResponse` updates field. It will repeat this cycle until it is either `APPROVED` or `DECLINED`. + +There is an additional optional feature that `HTTP/POST` enables in the first `PollingResponse` that is returned. +This optional feature is the ability for FCL to render an iframe, popup or new tab, and it can be triggered by supplying a service `type: "VIEW/IFRAME"`, `type: "VIEW/POP"` or `type: "VIEW/TAB"` and the `endpoint` that the wallet wishes to render in the `local` field of the `PollingResponse`. This is a great way for a wallet provider to switch to a webpage if displaying a UI is necessary for the service it is performing. + +![HTTP/POST Diagram](https://raw.githubusercontent.com/onflow/flow-js-sdk/master/packages/fcl/assets/service-method-diagrams/http-post.png) + +## EXT/RPC (Front Channel) + +`EXT/RPC` is used to enable and communicate between FCL and an installed web browser extension. (Though this specification is geared towards Chromium based browsers, it should be implementable in any browser with similar extension APIs available. From now on we will be using the word _Chrome_ to refer to Chromium based browsers.) + +An implementation of `EXT/RPC` needs to somehow enable communication between the application and the extension context. Implementing this is a bit more complex and usually relies on 3 key scripts to allow message passing between an installed extension and FCL. The separation of contexts enforced by Chrome and the availability of different Chrome APIs within those contexts require these scripts to be set up in a particular sequence so that the communication channels needed by FCL's `EXT/RPC` service method will work. + +The following is an overview of these scripts and the functionality they need to support FCL: + +- `background.js`: Used to launch the extension popup with `chrome.windows.create` if selected by the user from Discovery or set directly via `fcl.config.discovery.wallet` +- `content.js`: Used to proxy messages between the application to the extension via `chrome.runtime.sendMessage`. +- `script.js`: Injected by `content.js` into the application's HTML page. It appends the extension authn service to the `window.fcl_extensions` array on page load. This allows FCL to confirm installation and send extension details to Discovery or launch your wallet as the default wallet. + +An example and guide showing how to build an FCL compatible wallet extension on Flow can be found [here](https://github.com/onflow/wallet-extension-example). + +Once the extension is enabled (for example when the user selects it through the discovery service), the following communication protocol applies. (The term _send_ should specifically refer to using `window.postMessage` in the application context, as this is the only interface between the application and the extension. Note that since `window.postMessage` broadcasts messages to all message event handlers, care should be taken by each party to filter only the messages targeted at them.) + +- An `ExtensionServiceInitiationMessage` object is sent by FCL. It is the extension's responsibility to inspect the `endpoint` field of the service, and only activate itself (e.g. by opening a popup) if it is the provider of this service. +- The extension should respond by sending a `Message` with type `FCL:VIEW:READY`. (Usually this message will originate from the extension popup, and be relayed to the application context.) +- FCL will send a `Message` with type `FCL:VIEW:READY:RESPONSE`. Additional fields specific to the service (such as `body`, `params` or `data`) are usually present. See the section on the specific service for a description of these fields. +- The wallet sends back a `Message & PollingResponse` with type `FCL:VIEW:RESPONSE` with either an `APPROVED` or `DECLINED` status. + - If it's approved, the polling response's data field will need to be what FCL is expecting. + - If it's declined, the polling response's reason field should say why it was declined. + +The extension can send a `Message` with type `FCL:VIEW:CLOSE` at any point during this protocol to indicate an interruption. This will halt FCL's current routine. On the other hand, once a `PollingResponse` with either an `APPROVED` or `DECLINED` status was sent, the protocol is considered finished, and the extension should not send any further messages as part of this exchange. + +Conversely, when FCL sends a new `ExtensionServiceInitiationMessage`, the previous routine is interrupted. (This is the case even when the new service invocation is targeted at a different extension.) + +Note that as a consequence of the above restrictions, only single service invocation can be in progress at a time. + +Here is a code example for how an extension popup might send its response: +```javascript + chrome.tabs.sendMessage(tabs[0].id, { + f_type: "PollingResponse", + f_vsn: "1.0.0", + status: "APPROVED", + reason: null, + data: { + f_type: "AuthnResponse", + f_vsn: "1.0.0", + addr: address, + services: services, + }, + }); +``` + +![EXT/RPC Diagram](https://raw.githubusercontent.com/onflow/flow-js-sdk/master/packages/fcl/assets/service-method-diagrams/ext-rpc.png) + +## `data` and `params` + +`data` and `params` are information that the wallet can provide in the service config that FCL will pass back to the service. +- `params` will be added onto the `endpoint` as query params. +- `data` will be included in the body of the `HTTP/POST` request or in the `FCL:VIEW:READY:RESPONSE` for a `IFRAME/RPC`, `POP/RPC`, `TAB/RPC` or `EXT/RPC`. + +# Authentication Service + +In the following examples, we'll walk you through the process of building an authentication service. + +In FCL, wallets are configured by passing in a wallet provider's authentication URL or extension endpoint as the `discovery.wallet` config variable. + +You will need to make and expose a webpage or API hosted at an authentication endpoint that FCL will use. + +```javascript +// IN APPLICATION +// configuring fcl to point at a wallet looks like this +import {config} from "@onflow/fcl" + +config({ + "discovery.wallet": "url-or-endpoint-fcl-will-use-for-authentication", // FCL Discovery endpoint, wallet provider's authentication URL or extension endpoint + "discovery.wallet.method": "IFRAME/RPC" // Optional. Available methods are "IFRAME/RPC", "POP/RPC", "TAB/RPC", "EXT/RPC" or "HTTP/POST", defaults to "IFRAME/RPC". +}) +``` + +If the method specified is `IFRAME/RPC`, `POP/RPC` or `TAB/RPC`, then the URL specified as `discovery.wallet` will be rendered as a webpage. If the configured method is `EXT/RPC`, `discovery.wallet` should be set to the extension's `authn` `endpoint`. Otherwise, if the method specified is `HTTP/POST`, then the authentication process will happen over HTTP requests. (While authentication can be accomplished using any of those service methods, this example will use the `IFRAME/RPC` service method.) + +Once the Authentication webpage is rendered, the extension popup is enabled, or the API is ready, you then need to tell FCL that it is ready. You will do this by sending a message to FCL, and FCL will send back a message with some additional information that you can use about the application requesting authentication on behalf of the user. + +The following example is using the `IFRAME/RPC` method. Your authentication webpage will likely resemble the following code: + +```javascript +// IN WALLET AUTHENTICATION FRAME +import {WalletUtils} from "@onflow/fcl" + +function callback(data) { + if (typeof data != "object") return + if (data.type !== "FCL:VIEW:READY:RESPONSE") return + + ... // Do authentication things ... + + // Send back AuthnResponse + WalletUtils.sendMsgToFCL("FCL:VIEW:RESPONSE", { + f_type: "PollingResponse", + f_vsn: "1.0.0", + status: "APPROVED", + data: { + f_type: "AuthnResponse", + f_vsn: "1.0.0" + ... + } + }) + + // Alternatively be sent using WalletUtils.approve (or WalletUtils.decline) + // which will wrap AuthnResponse in a PollingResponse + WalletUtils.approve({ + f_type: "AuthnResponse", + f_vsn: "1.0.0" + ... + }) +} +// add event listener first +WalletUtils.onMsgFromFCL("FCL:VIEW:READY:RESPONSE", callback) + +// tell fcl the wallet is ready +WalletUtils.sendMsgToFCL("FCL:VIEW:READY") + +// alternatively adds "FCL:VIEW:READY:RESPONSE" listener and sends "FCL:VIEW:READY" +WalletUtils.ready(callback) +``` + +During authentication, the application has a chance to request to you what they would like you to send back to them. These requests are included in the `FCL:VIEW:READY:RESPONSE` message sent to the wallet from FCL. + +An example of such a request is the OpenID service. The application can request for example that you to send them the email address of the current user. The application requesting this information does not mean you need to send it. It's entirely optional for you to do so. However, some applications may depend on you sending the requested information back, and should you decline to do so it may cause the application to not work. + +In the config they can also tell you a variety of things about them, such as the name of their application or a url for an icon of their application. You can use these pieces of information to customize your wallet's user experience should you desire to do so. + +Your wallet having a visual distinction from the application, but still a seamless and connected experience is our goal here. + +Whether your authentication process happens using a webpage with the `IFRAME/RPC`, `POP/RPC` or `TAB/RPC` methods, via an enabled extension using the `EXT/RPC` method, or using a backchannel to an API with the `HTTP/POST` method, the handshake is the same. The same messages are sent in all methods, however the transport mechanism changes. For `IFRAME/RPC`, `POP/RPC`, `TAB/RPC` or `EXT/RPC` methods, the transport is `window.postMessage()`, with the `HTTP/POST` method, the transport is HTTP post messages. + +As always, you must never trust anything you receive from an application. Always do your due-diligence and be alert as you are the user's first line of defense against potentially malicious applications. + +### Authenticate your User + +It's important that you are confident that the user is who the user claims to be. + +Have them provide enough proof to you that you are okay with passing their details back to FCL. +Using Blocto as an example, an authentication code is sent to the email a user enters at login. +This code can be used as validation and is everything Blocto needs to be confident in the user's identity. + +### Once you know who your User is + +Once you're confident in the user's identity, we can complete the authentication process. + +The authentication process is complete once FCL receives back a response that configures FCL with FCL Services for the current user. This response is extremely important to FCL. At its core it tells FCL who the user is, and then via the included services it tells FCL how the user authenticated, how to request transaction signatures, how to get a personal message signed and the user's email and other details if requested. In the future it may also include many more things! + +You can kind of think of FCL as a plugin system. But since those plugins exist elsewhere outside of FCL, FCL needs to be configured with information on how to communicate with them. + +What you are sending back to FCL is everything that it needs to communicate with the plugins that you are supplying. +Your wallet is like a plugin to FCL, and these details tell FCL how to use you as a plugin. + +Here is an example of an authentication response: + +```javascript +// IN WALLET AUTHENTICATION FRAME +import {WalletUtils} from "@onflow/fcl" + +WalletUtils.approve({ + f_type: "AuthnResponse", + f_vsn: "1.0.0", + addr: "0xUSER", // The user's flow address + + services: [ // All the stuff that configures FCL + + // Authentication Service - REQUIRED + { + f_type: "Service", // It's a service! + f_vsn: "1.0.0", // Follows the v1.0.0 spec for the service + type: "authn", // the type of service it is + method: "DATA", // It's data! + uid: "amazing-wallet#authn", // A unique identifier for the service + endpoint: "your-url-that-fcl-will-use-for-authentication", // should be the same as was passed into the config + id: "0xUSER", // the wallet's internal id for the user, use flow address if you don't have one + // The User's Info + identity: { + f_type: "Identity", // It's an Identity! + f_vsn: "1.0.0", // Follows the v1.0.0 spec for an identity + address: "0xUSER", // The user's address + keyId: 0, // OPTIONAL - The User's KeyId they will use + }, + // The Wallet's Info + provider: { + f_type: "ServiceProvider", // It's a Service Provider + f_vsn: "1.0.0", // Follows the v1.0.0 spec for service providers + address: "0xWallet", // A flow address owned by the wallet + name: "Amazing Wallet", // OPTIONAL - The name of your wallet. ie: "Dapper Wallet" or "Blocto Wallet" + description: "The best wallet", // OPTIONAL - A short description for your wallet + icon: "https://___", // OPTIONAL - Image url for your wallet's icon + website: "https://___", // OPTIONAL - Your wallet's website + supportUrl: "https://___", // OPTIONAL - An url the user can use to get support from you + supportEmail: "help@aw.com", // OPTIONAL - An email the user can use to get support from you + }, + }, + + // Authorization Service + { + f_type: "Service", + f_vsn: "1.0.0", + type: "authz", + uid: "amazing-wallet#authz", + ... + // We will cover this at length in the authorization section of this guide + }, + + // User Signature Service + { + f_type: "Service", + f_vsn: "1.0.0", + type: "user-signature", + uid: "amazing-wallet#user-signature", + ... + // We will cover this at length in the user signature section of this guide + }, + + // OpenID Service + { + f_type: "Service", + f_vsn: "1.0.0", + type: "open-id", + uid: "amazing-wallet#open-id", + method: "DATA", + data: { // only include data that was request, ideally only if the user approves the sharing of data, everything is optional + f_type: "OpenID", + f_vsn: "1.0.0", + profile: { + name: "Jeff", + family_name: "D", // icky underscored names because of OpenID Connect spec + given_name: "Jeffrey", + middle_name: "FakeMiddleName", + nickname: "JeffJeff", + preferred_username: "Jeff", + profile: "https://www.jeff.jeff/", + picture: "https://avatars.onflow.org/avatar/jeff", + website: "https://www.jeff.jeff/", + gender: "male", + birthday: "1900-01-01", // can use 0000 for year if year is not known + zoneinfo: "America/Vancouver", + locale: "en", + updated_at: "1625588304427" + }, + email: { + email: "jeff@jeff.jeff", + email_verified: false, + } + }, + } + ] +}) +``` + +### Stopping an Authentication Process + +From any frame, you can send a `FCL:VIEW:CLOSE` post message to FCL, which will halt FCL's current routine and close the frame. + +```javascript +import {WalletUtils} from "@onflow/fcl" + +WalletUtils.sendMsgToFCL("FCL:VIEW:CLOSE") +``` + +# Authorization Service + +Authorization services are depicted with with a `type: "authz"`, and a `method` of either `HTTP/POST`, `IFRAME/RPC`, `POP/RPC`, `TAB/RPC` or `EXT/RPC`. +They are expected to eventually return a `f_type: "CompositeSignature"`. + +An authorization service is expected to know the Account and the Key that will be used to sign the transaction at the time the service is sent to FCL (during authentication). + +```javascript +{ + f_type: "Service", + f_vsn: "1.0.0", + type: "authz", // say it's an authorization service + uid: "amazing-wallet#authz", // standard service uid + method: "HTTP/POST", // can also be `IFRAME/RPC` or `POP/RPC` + endpoint: "https://____", // where to talk to the service + identity: { + f_type: "Identity", + f_vsn: "1.0.0", + address: "0xUser", // the address that the signature will be for + keyId: 0, // the key for the address that the signature will be for + }, + data: {}, + params: {}, +} +``` + +FCL will use the `method` provided to request an array of composite signature from authorization service (Wrapped in a `PollingResponse`). +The authorization service will be sent a `Signable`. +The service is expected to construct an encoded message to sign from `Signable.voucher`. +It then needs to hash the encoded message, and prepend a required [transaction domain tag](https://github.com/onflow/flow-js-sdk/blob/master/packages/sdk/src/encode/encode.js#L12-L13). +Finally it signs the payload with the user/s keys, producing a signature. +This signature, as a HEX string, is sent back to FCL as part of the `CompositeSignature` which includes the user address and keyID in the data property of a `PollingResponse`. + +```elixir +signature = + signable.voucher + |> encode + |> hash + |> tag + |> sign + |> convert_to_hex +``` + +The eventual response back from the authorization service should resolve to something like this: +```javascript +{ + f_type: "PollingResponse", + f_vsn: "1.0.0", + status: "APPROVED", + data: { + f_type: "CompositeSignature", + f_vsn: "1.0.0", + addr: "0xUSER", + keyId: 0, + signature: "signature as hex value" + } +} +``` + +A `CompositeSignature` can alternatively be constructed using `WalletUtils` + +```javascript +import {WalletUtils} from "@onflow/fcl" + +WalletUtils.CompositeSignature(addr: String, keyId: Number, signature: Hex) + +``` + +# User Signature Service + +User Signature services are depicted with a `type: "user-signature"` and a `method` of either `HTTP/POST`, `IFRAME/RPC`, `POP/RPC`, `TAB/RPC` or `EXT/RPC`. +They are expected to eventually return an array of `f_type: "CompositeSignature"`. + +The User Signature service is a stock/standard service. + +```javascript +{ + f_type: "Service", + f_vsn: "1.0.0", + type: "user-signature", // say it's an user-signature service + uid: "amazing-wallet#user-signature", // standard service uid + method: "HTTP/POST", // can also be `IFRAME/RPC` + endpoint: "https://___", // where to talk to the service + data: {}, + params: {}, +} +``` + +FCL will use the `method` provided to request an array of composite signatures from the user signature service (Wrapped in a `PollingResponse`). +The user signature service will be sent a `Signable`. +The service is expected to tag the `Signable.message` and then sign it with enough keys to produce a full weight. +The signatures need to be sent back to FCL as HEX strings in an array of `CompositeSignatures`. + +```javascript +// Pseudocode: +// For every required signature +import {WalletUtils} from "@onflow/fcl" + +const encoded = WalletUtils.encodeMessageFromSignable(signable, signerAddress) +const taggedMessage = tagMessage(encoded) // Tag the message to sign +const signature = signMessage(taggedMessage) // Sign the message +const hexSignature = signatureToHex(signature) // Convert the signature to hex, if required. + +return hexSignature +``` + +The eventual response back from the user signature service should resolve to something like this: +```javascript +{ + f_type: "PollingResponse", + f_vsn: "1.0.0", + status: "APPROVED", + data: [ + { + f_type: "CompositeSignature", + f_vsn: "1.0.0", + addr: "0xUSER", + keyId: 0, + signature: "signature as hex value" + }, + { + f_type: "CompositeSignature", + f_vsn: "1.0.0", + addr: "0xUSER", + keyId: 1, + signature: "signature as hex value" + } + ] +} +``` + +# Pre Authz Service + +This is a strange one, but extremely powerful. This service should be used when a wallet is responsible for an account that's signing as multiple roles of a transaction, and wants the ability to change the accounts on a per role basis. + +Pre Authz Services are depicted with a `type: "pre-authz"` and a `method` of either `HTTP/POST`, `IFRAME/RPC`, `POP/RPC`, `TAB/RPC` or `EXT/RPC`. +They are expected to eventually return a `f_type: "PreAuthzResponse"`. + +The Pre Authz Service is a stock/standard service. + +```javascript +{ + f_type: "Service", + f_vsn: "1.0.0", + type: "pre-authz", // say it's a pre-authz service + uid: "amazing-wallet#pre-authz", // standard service uid + method: "HTTP/POST", // can also be IFRAME/RPC, POP/RPC, TAB/RPC + endpoint: "https://___", // where to talk to the service + data: {}, + params: {}, +} +``` + +FCL will use the `method` provided to request a `PreAuthzReponse` (Wrapped in a `PollingResponse`). +The Authorizations service will be sent a `PreSignable`. +The pre-authz service is expected to look at the `PreSignable` and determine the breakdown of accounts to be used. +The pre-authz service is expected to return `Authz` services for each role it is responsible for. +A pre-authz service can only supply roles it is responsible for. +If a pre-authz service is responsible for multiple roles, but it wants the same account to be responsible for all the roles, it will need to supply an Authz service per role. + +The eventual response back from the pre-authz service should resolve to something like this: +```javascript +{ + f_type: "PollingResponse", + f_vsn: "1.0.0", + status: "APPROVED", + data: { + f_type: "PreAuthzResponse", + f_vsn: "1.0.0", + proposer: { // A single Authz Service + f_type: "Service", + f_vsn: "1.0.0", + type: "authz", + ... + }, + payer: [ // An array of Authz Services + { + f_type: "Service", + f_vsn: "1.0.0", + type: "authz", + ... + } + ], + authorization: [ // An array of Authz Services (it's singular because it only represents a singular authorization) + { + f_type: "Service", + f_vsn: "1.0.0", + type: "authz", + ... + } + ], + } +} +``` + +# Authentication Refresh Service + +Since synchronization of a user's session is important to provide a seamless user experience when using an app and transacting with the Flow Blockchain, a way to confirm, extend, and refresh a user session can be provided by the wallet. + +Authentication Refresh Services should include a `type: "authn-refresh"`, `endpoint`, and supported `method` (`HTTP/POST`, `IFRAME/RPC`, `POP/RPC`, or `EXT/RPC`). + +FCL will use the `endpoint` and service `method` provided to request updated authentication data. +The `authn-refresh` service should refresh the user's session if necessary and return updated authentication configuration and user session data. + +The service is expected to return a `PollingResponse` with a new `AuthnResponse` as data. If user input is required, a `PENDING` `PollingResponse` can be returned with a `local` view for approval/re-submission of user details. + +The Authentication Refresh Service is a stock/standard service. + +```javascript + { + "f_type": "Service", + "f_vsn": "1.0.0", + "type": "authn-refresh", + "uid": "uniqueDedupeKey", + "endpoint": "https://rawr", + "method": "HTTP/POST", // "HTTP/POST", // HTTP/POST | IFRAME/RPC | HTTP/RPC + "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", // wallet's internal id for the user + "data": {}, // included in body of request + "params": {}, // included as query params on endpoint url + } +``` + +The provided `data` and `params` should include all the wallet needs to identify and re-authenticate the user if necessary. + +The eventual response back from the `authn-refresh` service should resolve to an `AuthnResponse` and look something like this: + +```javascript +{ + f_type: "PollingResponse", + f_vsn: "1.0.0", + status: "APPROVED", + data: { + f_type: "AuthnResponse", + f_vsn: "1.0.0", + addr: "0xUSER", + services: [ + // Authentication Service - REQUIRED + { + f_type: "Service", + f_vsn: "1.0.0", + type: "authn", + ... + }, + // Authorization Service + { + f_type: "Service", + f_vsn: "1.0.0", + type: "authz", + ... + }, + // Authentication Refresh Service + { + f_type: "Service", + f_vsn: "1.0.0", + type: "authn-refresh", + ... + } + // Additional Services + ], + } +} +``` diff --git a/docs/tooling/wallet-provider-spec/provable-authn.md b/docs/tooling/wallet-provider-spec/provable-authn.md new file mode 100644 index 0000000000..319e00d933 --- /dev/null +++ b/docs/tooling/wallet-provider-spec/provable-authn.md @@ -0,0 +1,89 @@ +# Provable Authn + +In order to improve UX/DX and encourage seamless integration with App backends and services, `fcl.authenticate` has been upgraded. + +Additional data is sent in the body of `FCL:VIEW:READY:RESPONSE`. This data includes what the wallet needs to build a message for signing with the user’s private key/s. +The signature can be returned as part of an optional `account-proof` service with the `FCL:VIEW:RESPONSE`. + +When provided by the wallet, this **signature** and additional **account-proof data** is available to the App via `fcl.currentUser` services. The service data can be used to recreate the message, and verify the signature on the Flow Blockchain. + +For example, it can be sent to the App’s backend and after validating the signature and the other account-proof data, it can safely associate the included account address to a user and log them in. + +--- + +## TL;DR Wallet Provider + +1. Wallet receives Authn `FCL:VIEW:READY:RESPONSE` request and parses out the `appIdentifier`, and `nonce`. +2. The wallet authenticates the user however they choose to do, and determines the user's account `address` +3. Wallet prepares and signs the message: + - Encodes the `appIdentifier`, `nonce`, and `address` along with the `"FCL-ACCOUNT-PROOF-V0.0"` domain separation tag, [using the encoding scheme described below](#account-proof-message-encoding). + - Signs the message with the `signatureAlgorithm` and `hashAlgorithm` specified on user's key. **It is highly recommended that the wallet display the message data and receive user approval before signing.** +4. Wallet sends back this new service and data along with the other service configuration when completing Authn. + +### Account Proof Message Encoding + +The account proof message is encoded as follows: + +```text +MESSAGE = + USER_DOMAIN_TAG || + RLP_ENCODE([ + APP_IDENTIFIER, + ADDRESS, + NONCE + ]) +``` + +with the following values: + +- `ACCOUNT_PROOF_DOMAIN_TAG` is the constant `"FCL-ACCOUNT-PROOF-V0.0"`, encoded as UTF-8 byte array and right-padded with zero bytes to a length of 32 bytes. +- `APP_IDENTIFIER` is an arbitrary length string. +- `ADDRESS` is a byte array containing the address bytes, left-padded with zero bytes to a length of 8 bytes. +- `NONCE` is an byte array with a minimum length of 32 bytes. + +`RLP_ENCODE` is a function that performs [RLP encoding](https://eth.wiki/fundamentals/rlp) and returns the encoded value as bytes. + +### JavaScript Signing Example + +```javascript +// Using WalletUtils +import {WalletUtils} from "@onflow/fcl" + +const message = WalletUtils.encodeAccountProof( + appIdentifier, // A human readable string to identify your application during signing + address, // Flow address of the user authenticating + nonce, // minimum 32-btye nonce +) + +sign(privateKey, message) + +// Without using FCL WalletUtils +const ACCOUNT_PROOF_DOMAIN_TAG = rightPaddedHexBuffer( + Buffer.from("FCL-ACCOUNT-PROOF-V0.0").toString("hex"), + 32 +) +const message = rlp([appIdentifier, address, nonce]) +const prependUserDomainTag = (message) => ACCOUNT_PROOF_DOMAIN_TAG + message + +sign(privateKey, prependUserDomainTag(message)) +``` + +```json +// Authentication Proof Service +{ + f_type: "Service", // Its a service! + f_vsn: "1.0.0", // Follows the v1.0.0 spec for the service + type: "account-proof", // the type of service it is + method: "DATA", // Its data! + uid: "awesome-wallet#account-proof", // A unique identifier for the service + data: { + f_type: "account-proof", + f_vsn: "1.0.0" + // The user's address (8 bytes, i.e 16 hex characters) + address: "0xf8d6e0586b0a20c7", + // Nonce signed by the current account-proof (minimum 32 bytes in total, i.e 64 hex characters) + nonce: "75f8587e5bd5f9dcc9909d0dae1f0ac5814458b2ae129620502cb936fde7120a", + signatures: [CompositeSignature], + } +} +``` diff --git a/docs/tooling/wallet-provider-spec/user-signature.md b/docs/tooling/wallet-provider-spec/user-signature.md new file mode 100644 index 0000000000..f41f2e9382 --- /dev/null +++ b/docs/tooling/wallet-provider-spec/user-signature.md @@ -0,0 +1,106 @@ +# User Signature + +## Status + +- **Last Updated:** June 1st 2021 +- **Stable:** Yes +- **Risk of Breaking Change:** Low +- **Compatibility:** `>= @onflow/fcl@0.0.71` + +# Overview and Introduction + +**Personally sign data via FCL Compatible Wallets** + +**FCL** now incldues **`signUserMessage()`** which allows for the sending of unencrypted message data to a connected wallet provider or service to be signed with a user's private key. + +An application or service can verify a signature against a user's public key on the **Flow Blockchain**, providing proof a user controls the account's private key. + +**Use Cases** + +- **Authentication**: Cryptographically verify the ownership of a **Flow** account by signing a piece of data using a private key +- **Improved Application Login** + - **Increased security**: Arguably more secure than proof of ownership by email/password + - **Simplified UX**: No application password required + - **Increased privacy**: No email or third party authentication service needed +- **Message Validation**: Assuring that a message sent or received has not been tampered with +- **Multisig contracts** +- **Decentralised exchanges** +- **Meta transactions** + + +# Config and Authentication + +As a prerequisite, **FCL** is configured to point to the Wallet Provider's Authentication Endpoint. No additional configuration is required. + +> During development (and on mainnet) FCL can be configured to use the wallet directly by +> setting the **Wallet Discovery Url** to the wallet provider's **Authentication Endpoint** +> by configuring fcl like this `config().put("discovery.wallet", "https://my-awesome-wallet-provider.com/fcl/authenticate")`. + +Common Configuration Keys and additional info can be found here [How to Configure FCL](https://github.com/onflow/flow-js-sdk/blob/master/docs/configure-fcl.mdx#common-configuration-keys) + +1. A user initiates authentication with the wallet provider via application UI +2. The wallet confirms a user's identity and sends back information used to configure **FCL** for future user actions in the application +3. Included in the authentication response should be the provider's [Key Services](#) including a **`user-signature`** service for use with **`signUserMessage()`** + +# User Signature Service + +A [user-signature service](https://github.com/onflow/flow-js-sdk/blob/master/packages/fcl/src/current-user/normalize/user-signature.js#L4-L14) is a standard service, with methods for **IFRAME/RPC** or **HTTP/POST**. + +The `user-signature` service receives a signable message from **FCL** and returns a standard [PollingResponse](https://github.com/onflow/flow-js-sdk/blob/8e53ac59636e28cdcfa2494de6cb278e71bc14c2/packages/fcl/src/current-user/normalize/polling-response.js#L5) with an array of [CompositeSignatures](https://github.com/onflow/flow-js-sdk/blob/8e53ac59636e28cdcfa2494de6cb278e71bc14c2/packages/fcl/src/current-user/normalize/composite-signature.js#L4) or `null` as the data. + +A status of **Approved** needs to have an array of composite signatures as data. + +A status of **Declined** needs to include a reason why. + +A **Pending** status needs to include an updates service and can include a local. +A service using the **`IFRAME/RPC`** method can only respond with approved or declined, as pending is not valid for iframes. + + +When `signUserMessage()` is called by the application, **FCL** uses the service method to decide how to send the signable to the wallet. + +The Wallet is responsible for prepending the signable with the correct `UserDomainTag`, hashing, and signing the message. + +# Signing Sequence + +1. Application sends message to signing service. **FCL expects a hexadecimal string** +3. Wallet/Service tags the message with required `UserDomainTag` (see below), hashes, and signs using the `signatureAlgorithm` specified on account key +2. Wallet makes available a Composite Signature consisting of `addr`, `keyId`, and `signature` **as a hex string** + +### UserDomainTag +The **`UserDomainTag`** is the prefix of all signed user space payloads. + +Before hashing and signing the message, the wallet must add a specified DOMAIN TAG. + +> currently **"FLOW-V0.0-user"** + +A domain tag is encoded as **UTF-8 bytes, right padded to a total length of 32 bytes**, prepended to the message. + +The signature can now be verified on the Flow blockchain. The following illustrates an example using `fcl.verifyUserSignatures` + +```javascript +/** + * Verify a valid signature/s for an account on Flow. + * + * @param {string} msg - A message string in hexadecimal format + * @param {Array} compSigs - An array of Composite Signatures + * @param {string} compSigs[].addr - The account address + * @param {number} compSigs[].keyId - The account keyId + * @param {string} compSigs[].signature - The signature to verify + * @return {bool} + * + * @example + * + * const isValid = await fcl.verifyUserSignatures( + * Buffer.from('FOO').toString("hex"), + * [{f_type: "CompositeSignature", f_vsn: "1.0.0", addr: "0x123", keyId: 0, signature: "abc123"}] + * ) + */ +``` + +## TL;DR Wallet Provider + +- Register with **FCL** and provide signing service endpoint. No further configuration is needed. +- On receipt of message, prompt user to approve or decline +- Prepend `UserDomainTag`, hash and sign the message with the signatureAlgorithm specified on user's key +- Return a standard `PollingResponse` with an array of `CompositeSignatures` as data or `null` and `reason` if declined +