ffid-python-sdk 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ffid_python_sdk-0.1.0.dist-info/METADATA +135 -0
- ffid_python_sdk-0.1.0.dist-info/RECORD +22 -0
- ffid_python_sdk-0.1.0.dist-info/WHEEL +4 -0
- ffid_python_sdk-0.1.0.dist-info/licenses/LICENSE +21 -0
- ffid_sdk/__init__.py +176 -0
- ffid_sdk/client.py +394 -0
- ffid_sdk/constants.py +75 -0
- ffid_sdk/context.py +75 -0
- ffid_sdk/decorators.py +147 -0
- ffid_sdk/errors.py +153 -0
- ffid_sdk/legal/__init__.py +53 -0
- ffid_sdk/legal/client.py +224 -0
- ffid_sdk/legal/errors.py +55 -0
- ffid_sdk/legal/helpers.py +55 -0
- ffid_sdk/legal/types.py +145 -0
- ffid_sdk/middleware.py +240 -0
- ffid_sdk/types.py +257 -0
- ffid_sdk/webhook_constants.py +34 -0
- ffid_sdk/webhook_errors.py +63 -0
- ffid_sdk/webhook_handler.py +213 -0
- ffid_sdk/webhook_types.py +212 -0
- ffid_sdk/webhook_verify.py +136 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ffid-python-sdk
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: FeelFlow ID Platform SDK for Python (FastAPI)
|
|
5
|
+
Project-URL: Homepage, https://github.com/feel-flow/feelflow-id-platform/tree/develop/sdk/python
|
|
6
|
+
Project-URL: Repository, https://github.com/feel-flow/feelflow-id-platform
|
|
7
|
+
Project-URL: Documentation, https://github.com/feel-flow/feelflow-id-platform/tree/develop/sdk/python#readme
|
|
8
|
+
Project-URL: Bug Tracker, https://github.com/feel-flow/feelflow-id-platform/issues
|
|
9
|
+
Author-email: "FeelFlow Inc." <dev@feelflow.co.jp>
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: authentication,fastapi,feelflow,ffid,sdk
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Framework :: FastAPI
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
21
|
+
Classifier: Typing :: Typed
|
|
22
|
+
Requires-Python: >=3.11
|
|
23
|
+
Requires-Dist: fastapi>=0.100.0
|
|
24
|
+
Requires-Dist: httpx>=0.24.0
|
|
25
|
+
Requires-Dist: pydantic>=2.0.0
|
|
26
|
+
Requires-Dist: typing-extensions>=4.0.0
|
|
27
|
+
Provides-Extra: dev
|
|
28
|
+
Requires-Dist: mypy>=1.0.0; extra == 'dev'
|
|
29
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
|
|
30
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
|
|
31
|
+
Requires-Dist: pytest>=7.0.0; extra == 'dev'
|
|
32
|
+
Requires-Dist: respx>=0.20.0; extra == 'dev'
|
|
33
|
+
Requires-Dist: ruff>=0.1.0; extra == 'dev'
|
|
34
|
+
Description-Content-Type: text/markdown
|
|
35
|
+
|
|
36
|
+
# ffid-python-sdk
|
|
37
|
+
|
|
38
|
+
FeelFlow ID Platform SDK for Python (FastAPI).
|
|
39
|
+
FastAPI アプリケーション向けの認証・認可・契約管理 SDK です。
|
|
40
|
+
|
|
41
|
+
**5行のコードでFFID認証を導入可能**(最小ボイラープレート)。
|
|
42
|
+
|
|
43
|
+
- Python 3.11+
|
|
44
|
+
- FastAPI / Pydantic v2 / httpx
|
|
45
|
+
|
|
46
|
+
## インストール
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
pip install ffid-python-sdk
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## クイックスタート(最小例)
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
from fastapi import FastAPI, Depends
|
|
56
|
+
from ffid_sdk import FFIDMiddleware, require_subscription, FFIDContext, get_ffid_context
|
|
57
|
+
|
|
58
|
+
app = FastAPI()
|
|
59
|
+
app.add_middleware(FFIDMiddleware, service_code="chatbot")
|
|
60
|
+
|
|
61
|
+
@app.get("/api/chat")
|
|
62
|
+
@require_subscription(plan=["basic", "pro", "enterprise"])
|
|
63
|
+
async def chat(ffid: FFIDContext = Depends(get_ffid_context)):
|
|
64
|
+
return {"message": f"Hello, {ffid.user.email}"}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
認証はミドルウェアが行い、`get_ffid_context` でコンテキストをエンドポイントに注入します。
|
|
68
|
+
`plan=` は `plans=` のエイリアスです(どちらも利用可能)。
|
|
69
|
+
|
|
70
|
+
## 主要コンポーネント
|
|
71
|
+
|
|
72
|
+
### FFIDMiddleware
|
|
73
|
+
|
|
74
|
+
リクエストからアクセストークン(`Authorization: Bearer` または Cookie `ffid_session`)を取得し、FFID API でセッション検証後に `request.state.ffid_context` にコンテキストを格納します。
|
|
75
|
+
|
|
76
|
+
```python
|
|
77
|
+
app.add_middleware(
|
|
78
|
+
FFIDMiddleware,
|
|
79
|
+
service_code="chatbot",
|
|
80
|
+
exclude_paths=["/health", "/docs", "/openapi.json"],
|
|
81
|
+
)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### FFIDContext
|
|
85
|
+
|
|
86
|
+
ユーザー・組織・契約情報を保持するリクエストスコープのコンテキスト。
|
|
87
|
+
`Depends(get_ffid_context)` で取得(認証任意)、`Depends(require_ffid_auth)` で認証必須にできます。
|
|
88
|
+
|
|
89
|
+
- `ctx.user` … 認証ユーザー
|
|
90
|
+
- `ctx.organizations` … 所属組織一覧
|
|
91
|
+
- `ctx.subscriptions` … 契約一覧
|
|
92
|
+
- `ctx.active_subscription` … 有効な契約(1件)
|
|
93
|
+
|
|
94
|
+
### @require_subscription
|
|
95
|
+
|
|
96
|
+
契約チェック用デコレータ。指定プランまたは任意の有効契約が必要なエンドポイントに付けます。
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
@require_subscription(plan=["basic", "pro", "enterprise"]) # または plans=
|
|
100
|
+
async def premium(ctx: FFIDContext = Depends(get_ffid_context)):
|
|
101
|
+
...
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### FFIDClient
|
|
105
|
+
|
|
106
|
+
FFID API を直接呼ぶクライアント(セッション取得・トークンリフレッシュ・サインアウト・契約確認など)。
|
|
107
|
+
ミドルウェアを使わないバックグラウンド処理やテストで利用します。
|
|
108
|
+
|
|
109
|
+
```python
|
|
110
|
+
from ffid_sdk import FFIDClient, FFIDConfig
|
|
111
|
+
|
|
112
|
+
client = FFIDClient(FFIDConfig(service_code="chatbot"))
|
|
113
|
+
response = await client.get_session(token="...")
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## 環境変数
|
|
117
|
+
|
|
118
|
+
| 変数 | 説明 |
|
|
119
|
+
|------|------|
|
|
120
|
+
| `FFID_SERVICE_CODE` | サービス識別コード(例: `chatbot`)。ミドルウェアの `service_code` に渡すか、クライアント設定で指定。 |
|
|
121
|
+
| `FFID_API_BASE_URL` | FFID API のベースURL(省略時は本番 `https://id.feelflow.co.jp` 相当)。 |
|
|
122
|
+
|
|
123
|
+
## 利用規約チェック・リダイレクト
|
|
124
|
+
|
|
125
|
+
法的文書の同意確認と未同意時のリダイレクトは、Legal クライアント(Service API Key 認証)で実装済みです。
|
|
126
|
+
`check_pending_agreements_and_redirect_url` で未同意一覧を取得し、未同意時は返却される `redirect_url` へリダイレクトできます。戻り値の第4要素に API エラーが入るため、呼び出し元でエラーハンドリング可能です。
|
|
127
|
+
|
|
128
|
+
## トークン自動リフレッシュ(オプション)
|
|
129
|
+
|
|
130
|
+
JWT 期限切れ時に refresh トークンで自動再取得する機能をミドルウェアで利用できます。
|
|
131
|
+
`FFIDMiddleware(..., auto_refresh=True)` にし、Cookie `ffid_refresh` にリフレッシュトークンが含まれる構成で有効化します。
|
|
132
|
+
|
|
133
|
+
## ライセンス
|
|
134
|
+
|
|
135
|
+
MIT
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
ffid_sdk/__init__.py,sha256=hTOc0zTeJ52THqvcHj89CQHR-zuMiZyG5XAmvQOec4U,4252
|
|
2
|
+
ffid_sdk/client.py,sha256=bEGTVTlTA1WeiiG-JI-pi_xk1Pl1sxMV6zLn-s6Tpt4,14363
|
|
3
|
+
ffid_sdk/constants.py,sha256=-P56fnO1QmcTAlbBA96fQ3xWK2gavDc1MGL2aRUi58E,2479
|
|
4
|
+
ffid_sdk/context.py,sha256=wZ8aiaZwybo9WMOxaYZXKBwIHFrpFhM4DMPMBr6fm0w,2415
|
|
5
|
+
ffid_sdk/decorators.py,sha256=WG1yFetF2s4FyOFfEBfSYQmN7ZUCWSo87voWxzqL_yg,5022
|
|
6
|
+
ffid_sdk/errors.py,sha256=yWbhP5zpWFahS56BYt18I60OoZa2jejYhrfviDxv_gw,4417
|
|
7
|
+
ffid_sdk/middleware.py,sha256=6iQdLJ_h11QuklX4u5QIt7J2F8tC9F6oRWz4Bm0SkgM,8938
|
|
8
|
+
ffid_sdk/types.py,sha256=rN54UQHVzr6lwAGQVq_7PfXoIswMdkNZZ2nvw2Fkh7w,8396
|
|
9
|
+
ffid_sdk/webhook_constants.py,sha256=CVv4kvVGyY4iAnhE4vuFNpx-2bzTiASmZyMOtxF44ZY,1104
|
|
10
|
+
ffid_sdk/webhook_errors.py,sha256=lvsTFYkgMcWtAbUyTenssYctl6rOEONEnm9CBIk9SEM,1821
|
|
11
|
+
ffid_sdk/webhook_handler.py,sha256=5W3QHgkhpAp5VHWIzChdzRC1ZBj5lI8jDJN9b_tkxzs,6760
|
|
12
|
+
ffid_sdk/webhook_types.py,sha256=kzjFYVO-EV5m15075NhIGnMsW70aSXJFa-cUAcrZqtw,7693
|
|
13
|
+
ffid_sdk/webhook_verify.py,sha256=R67Seb_j8flIkEGYTd_5VoYGZ8AqBz55YjWrFljSzMQ,4270
|
|
14
|
+
ffid_sdk/legal/__init__.py,sha256=MpROcaPJDzo2T-MxEHfWUC23JNN_7ck6KTLDyCqLbEs,1368
|
|
15
|
+
ffid_sdk/legal/client.py,sha256=Pk-yJLE8_7JECIfNV47PMp6W4wlbwClFuJRQ2keCYuE,8086
|
|
16
|
+
ffid_sdk/legal/errors.py,sha256=goCT_tEbJz9FE9cLIAJAC8dZanszpr7EDOERliLvedI,1580
|
|
17
|
+
ffid_sdk/legal/helpers.py,sha256=_WnbvxpYhboCdG4lkjMIhzcZVI-kTwYxy8xDMh9PyY0,2151
|
|
18
|
+
ffid_sdk/legal/types.py,sha256=crJmdb0u2raJpJqOJkwr42bbpJp0lxkSELx7RTLnD08,4348
|
|
19
|
+
ffid_python_sdk-0.1.0.dist-info/METADATA,sha256=lf6T4vr0HSTtez5A9fUGMRC6KPerrkKAIv7J3a1t-6M,5344
|
|
20
|
+
ffid_python_sdk-0.1.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
21
|
+
ffid_python_sdk-0.1.0.dist-info/licenses/LICENSE,sha256=Ok6MPtGJMOAAbrmK0JLei7UFH6qSScICFVm7YhuIBNo,1070
|
|
22
|
+
ffid_python_sdk-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 FeelFlow Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
ffid_sdk/__init__.py
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"""
|
|
2
|
+
FFID SDK - FeelFlow ID Platform SDK for Python (FastAPI)
|
|
3
|
+
|
|
4
|
+
FastAPI アプリケーション向けの認証・認可・契約管理 SDK。
|
|
5
|
+
|
|
6
|
+
Quick Start:
|
|
7
|
+
```python
|
|
8
|
+
from fastapi import FastAPI, Depends
|
|
9
|
+
from ffid_sdk import FFIDMiddleware, FFIDContext, get_ffid_context, require_subscription
|
|
10
|
+
|
|
11
|
+
app = FastAPI()
|
|
12
|
+
app.add_middleware(FFIDMiddleware, service_code="chatbot")
|
|
13
|
+
|
|
14
|
+
@app.get("/dashboard")
|
|
15
|
+
async def dashboard(ctx: FFIDContext = Depends(get_ffid_context)):
|
|
16
|
+
return {"user": ctx.user.email}
|
|
17
|
+
|
|
18
|
+
@app.get("/premium")
|
|
19
|
+
@require_subscription(plans=["pro", "enterprise"])
|
|
20
|
+
async def premium(ctx: FFIDContext = Depends(get_ffid_context)):
|
|
21
|
+
return {"plan": ctx.active_subscription.plan_code}
|
|
22
|
+
```
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from __future__ import annotations
|
|
26
|
+
|
|
27
|
+
# Client
|
|
28
|
+
from ffid_sdk.client import FFIDClient
|
|
29
|
+
|
|
30
|
+
# Constants
|
|
31
|
+
from ffid_sdk.constants import DEFAULT_API_BASE_URL
|
|
32
|
+
|
|
33
|
+
# Context & Dependencies
|
|
34
|
+
from ffid_sdk.context import get_ffid_context, require_ffid_auth
|
|
35
|
+
|
|
36
|
+
# Decorators
|
|
37
|
+
from ffid_sdk.decorators import require_subscription
|
|
38
|
+
|
|
39
|
+
# Errors
|
|
40
|
+
from ffid_sdk.errors import (
|
|
41
|
+
FFIDAuthenticationError,
|
|
42
|
+
FFIDAuthorizationError,
|
|
43
|
+
FFIDErrorCode,
|
|
44
|
+
FFIDNetworkError,
|
|
45
|
+
FFIDSDKError,
|
|
46
|
+
FFIDSubscriptionError,
|
|
47
|
+
FFIDValidationError,
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
# Middleware
|
|
51
|
+
from ffid_sdk.middleware import FFIDMiddleware
|
|
52
|
+
|
|
53
|
+
# Types
|
|
54
|
+
from ffid_sdk.types import (
|
|
55
|
+
FFIDApiResponse,
|
|
56
|
+
FFIDConfig,
|
|
57
|
+
FFIDContext,
|
|
58
|
+
FFIDError,
|
|
59
|
+
FFIDOrganization,
|
|
60
|
+
FFIDSessionResponse,
|
|
61
|
+
FFIDSubscription,
|
|
62
|
+
FFIDTokenResponse,
|
|
63
|
+
FFIDUser,
|
|
64
|
+
MembershipStatus,
|
|
65
|
+
OrganizationRole,
|
|
66
|
+
SubscriptionStatus,
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
# Webhook - Constants
|
|
70
|
+
from ffid_sdk.webhook_constants import (
|
|
71
|
+
DEFAULT_TOLERANCE_SECONDS,
|
|
72
|
+
FFID_WEBHOOK_EVENT_ID_HEADER,
|
|
73
|
+
FFID_WEBHOOK_SIGNATURE_HEADER,
|
|
74
|
+
FFID_WEBHOOK_TIMESTAMP_HEADER,
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
# Webhook - Errors
|
|
78
|
+
from ffid_sdk.webhook_errors import (
|
|
79
|
+
FFIDWebhookError,
|
|
80
|
+
FFIDWebhookPayloadError,
|
|
81
|
+
FFIDWebhookSignatureError,
|
|
82
|
+
FFIDWebhookTimestampError,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
# Webhook - Handler
|
|
86
|
+
from ffid_sdk.webhook_handler import WebhookHandler
|
|
87
|
+
|
|
88
|
+
# Webhook - Types
|
|
89
|
+
from ffid_sdk.webhook_types import (
|
|
90
|
+
EVENT_TYPE_PAYLOAD_MAP,
|
|
91
|
+
FFIDLegalDocumentPayload,
|
|
92
|
+
FFIDMaintenancePayload,
|
|
93
|
+
FFIDOrganizationMemberPayload,
|
|
94
|
+
FFIDOrganizationPayload,
|
|
95
|
+
FFIDSubscriptionPayload,
|
|
96
|
+
FFIDTestPingPayload,
|
|
97
|
+
FFIDUserPayload,
|
|
98
|
+
FFIDWebhookEvent,
|
|
99
|
+
WebhookEventType,
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
# Webhook - Verify
|
|
103
|
+
from ffid_sdk.webhook_verify import verify_webhook_signature
|
|
104
|
+
|
|
105
|
+
# Legal (Phase 2: 利用規約チェック・リダイレクト)
|
|
106
|
+
from ffid_sdk.legal import (
|
|
107
|
+
FFIDLegalClient,
|
|
108
|
+
FFIDLegalClientConfig,
|
|
109
|
+
check_pending_agreements_and_redirect_url,
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
__all__ = [
|
|
113
|
+
# Client
|
|
114
|
+
"FFIDClient",
|
|
115
|
+
# Config & Constants
|
|
116
|
+
"FFIDConfig",
|
|
117
|
+
"DEFAULT_API_BASE_URL",
|
|
118
|
+
# Context & Dependencies
|
|
119
|
+
"FFIDContext",
|
|
120
|
+
"get_ffid_context",
|
|
121
|
+
"require_ffid_auth",
|
|
122
|
+
# Decorators
|
|
123
|
+
"require_subscription",
|
|
124
|
+
# Errors
|
|
125
|
+
"FFIDSDKError",
|
|
126
|
+
"FFIDAuthenticationError",
|
|
127
|
+
"FFIDAuthorizationError",
|
|
128
|
+
"FFIDSubscriptionError",
|
|
129
|
+
"FFIDNetworkError",
|
|
130
|
+
"FFIDValidationError",
|
|
131
|
+
"FFIDErrorCode",
|
|
132
|
+
# Middleware
|
|
133
|
+
"FFIDMiddleware",
|
|
134
|
+
# Types
|
|
135
|
+
"FFIDUser",
|
|
136
|
+
"FFIDOrganization",
|
|
137
|
+
"FFIDSubscription",
|
|
138
|
+
"FFIDSessionResponse",
|
|
139
|
+
"FFIDTokenResponse",
|
|
140
|
+
"FFIDError",
|
|
141
|
+
"FFIDApiResponse",
|
|
142
|
+
"OrganizationRole",
|
|
143
|
+
"MembershipStatus",
|
|
144
|
+
"SubscriptionStatus",
|
|
145
|
+
# Webhook - Constants
|
|
146
|
+
"FFID_WEBHOOK_SIGNATURE_HEADER",
|
|
147
|
+
"FFID_WEBHOOK_TIMESTAMP_HEADER",
|
|
148
|
+
"FFID_WEBHOOK_EVENT_ID_HEADER",
|
|
149
|
+
"DEFAULT_TOLERANCE_SECONDS",
|
|
150
|
+
# Webhook - Errors
|
|
151
|
+
"FFIDWebhookError",
|
|
152
|
+
"FFIDWebhookSignatureError",
|
|
153
|
+
"FFIDWebhookTimestampError",
|
|
154
|
+
"FFIDWebhookPayloadError",
|
|
155
|
+
# Webhook - Handler
|
|
156
|
+
"WebhookHandler",
|
|
157
|
+
# Webhook - Types
|
|
158
|
+
"FFIDWebhookEvent",
|
|
159
|
+
"WebhookEventType",
|
|
160
|
+
"FFIDSubscriptionPayload",
|
|
161
|
+
"FFIDUserPayload",
|
|
162
|
+
"FFIDOrganizationPayload",
|
|
163
|
+
"FFIDOrganizationMemberPayload",
|
|
164
|
+
"FFIDLegalDocumentPayload",
|
|
165
|
+
"FFIDMaintenancePayload",
|
|
166
|
+
"FFIDTestPingPayload",
|
|
167
|
+
"EVENT_TYPE_PAYLOAD_MAP",
|
|
168
|
+
# Webhook - Verify
|
|
169
|
+
"verify_webhook_signature",
|
|
170
|
+
# Legal
|
|
171
|
+
"FFIDLegalClient",
|
|
172
|
+
"FFIDLegalClientConfig",
|
|
173
|
+
"check_pending_agreements_and_redirect_url",
|
|
174
|
+
]
|
|
175
|
+
|
|
176
|
+
__version__ = "0.1.0"
|