@blocklet/payment-broker-client 1.20.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/examples/README.md +277 -0
  2. package/examples/browser/README.md +119 -0
  3. package/examples/browser/simple-example.js +223 -0
  4. package/examples/nodejs/README.md +180 -0
  5. package/examples/nodejs/deploy-example.mjs +200 -0
  6. package/examples/nodejs/package.json +30 -0
  7. package/lib/adapters/config/browser.d.ts +12 -0
  8. package/lib/adapters/config/browser.d.ts.map +1 -0
  9. package/lib/adapters/config/browser.js +48 -0
  10. package/lib/adapters/config/browser.js.map +1 -0
  11. package/lib/adapters/config/node.d.ts +13 -0
  12. package/lib/adapters/config/node.d.ts.map +1 -0
  13. package/lib/adapters/config/node.js +62 -0
  14. package/lib/adapters/config/node.js.map +1 -0
  15. package/lib/adapters/http/browser.d.ts +12 -0
  16. package/lib/adapters/http/browser.d.ts.map +1 -0
  17. package/lib/adapters/http/browser.js +50 -0
  18. package/lib/adapters/http/browser.js.map +1 -0
  19. package/lib/adapters/http/node.d.ts +12 -0
  20. package/lib/adapters/http/node.d.ts.map +1 -0
  21. package/lib/adapters/http/node.js +30 -0
  22. package/lib/adapters/http/node.js.map +1 -0
  23. package/lib/browser/adapters/config/browser.d.ts +12 -0
  24. package/lib/browser/adapters/config/browser.d.ts.map +1 -0
  25. package/lib/browser/adapters/config/node.d.ts +13 -0
  26. package/lib/browser/adapters/config/node.d.ts.map +1 -0
  27. package/lib/browser/adapters/http/browser.d.ts +12 -0
  28. package/lib/browser/adapters/http/browser.d.ts.map +1 -0
  29. package/lib/browser/adapters/http/node.d.ts +12 -0
  30. package/lib/browser/adapters/http/node.d.ts.map +1 -0
  31. package/lib/browser/browser/factory.d.ts +19 -0
  32. package/lib/browser/browser/factory.d.ts.map +1 -0
  33. package/lib/browser/browser/index.d.ts +9 -0
  34. package/lib/browser/browser/index.d.ts.map +1 -0
  35. package/lib/browser/core/client.d.ts +29 -0
  36. package/lib/browser/core/client.d.ts.map +1 -0
  37. package/lib/browser/core/deployment.d.ts +20 -0
  38. package/lib/browser/core/deployment.d.ts.map +1 -0
  39. package/lib/browser/core/errors.d.ts +15 -0
  40. package/lib/browser/core/errors.d.ts.map +1 -0
  41. package/lib/browser/core/index.d.ts +10 -0
  42. package/lib/browser/core/index.d.ts.map +1 -0
  43. package/lib/browser/core/interfaces.d.ts +24 -0
  44. package/lib/browser/core/interfaces.d.ts.map +1 -0
  45. package/lib/browser/core/logger.d.ts +8 -0
  46. package/lib/browser/core/logger.d.ts.map +1 -0
  47. package/lib/browser/core/polling.d.ts +23 -0
  48. package/lib/browser/core/polling.d.ts.map +1 -0
  49. package/lib/browser/core/session.d.ts +31 -0
  50. package/lib/browser/core/session.d.ts.map +1 -0
  51. package/lib/browser/core/types.d.ts +175 -0
  52. package/lib/browser/core/types.d.ts.map +1 -0
  53. package/lib/browser/core/utils.d.ts +27 -0
  54. package/lib/browser/core/utils.d.ts.map +1 -0
  55. package/lib/browser/factory.d.ts +19 -0
  56. package/lib/browser/factory.d.ts.map +1 -0
  57. package/lib/browser/factory.js +30 -0
  58. package/lib/browser/factory.js.map +1 -0
  59. package/lib/browser/index.d.ts +8 -0
  60. package/lib/browser/index.d.ts.map +1 -0
  61. package/lib/browser/index.js +973 -0
  62. package/lib/browser/index.js.map +1 -0
  63. package/lib/browser/node/factory.d.ts +9 -0
  64. package/lib/browser/node/factory.d.ts.map +1 -0
  65. package/lib/browser/node/index.d.ts +8 -0
  66. package/lib/browser/node/index.d.ts.map +1 -0
  67. package/lib/core/client.d.ts +29 -0
  68. package/lib/core/client.d.ts.map +1 -0
  69. package/lib/core/client.js +150 -0
  70. package/lib/core/client.js.map +1 -0
  71. package/lib/core/deployment.d.ts +20 -0
  72. package/lib/core/deployment.d.ts.map +1 -0
  73. package/lib/core/deployment.js +184 -0
  74. package/lib/core/deployment.js.map +1 -0
  75. package/lib/core/errors.d.ts +15 -0
  76. package/lib/core/errors.d.ts.map +1 -0
  77. package/lib/core/errors.js +21 -0
  78. package/lib/core/errors.js.map +1 -0
  79. package/lib/core/index.d.ts +10 -0
  80. package/lib/core/index.d.ts.map +1 -0
  81. package/lib/core/index.js +32 -0
  82. package/lib/core/index.js.map +1 -0
  83. package/lib/core/interfaces.d.ts +24 -0
  84. package/lib/core/interfaces.d.ts.map +1 -0
  85. package/lib/core/interfaces.js +4 -0
  86. package/lib/core/interfaces.js.map +1 -0
  87. package/lib/core/logger.d.ts +8 -0
  88. package/lib/core/logger.d.ts.map +1 -0
  89. package/lib/core/logger.js +39 -0
  90. package/lib/core/logger.js.map +1 -0
  91. package/lib/core/polling.d.ts +23 -0
  92. package/lib/core/polling.d.ts.map +1 -0
  93. package/lib/core/polling.js +97 -0
  94. package/lib/core/polling.js.map +1 -0
  95. package/lib/core/session.d.ts +31 -0
  96. package/lib/core/session.d.ts.map +1 -0
  97. package/lib/core/session.js +202 -0
  98. package/lib/core/session.js.map +1 -0
  99. package/lib/core/types.d.ts +175 -0
  100. package/lib/core/types.d.ts.map +1 -0
  101. package/lib/core/types.js +48 -0
  102. package/lib/core/types.js.map +1 -0
  103. package/lib/core/utils.d.ts +27 -0
  104. package/lib/core/utils.d.ts.map +1 -0
  105. package/lib/core/utils.js +181 -0
  106. package/lib/core/utils.js.map +1 -0
  107. package/lib/index.d.ts +484 -0
  108. package/lib/index.d.ts.map +1 -0
  109. package/lib/index.esm.js +969 -0
  110. package/lib/index.esm.js.map +1 -0
  111. package/lib/index.js +984 -0
  112. package/lib/index.js.map +1 -0
  113. package/lib/node/adapters/config/browser.d.ts +12 -0
  114. package/lib/node/adapters/config/browser.d.ts.map +1 -0
  115. package/lib/node/adapters/config/node.d.ts +13 -0
  116. package/lib/node/adapters/config/node.d.ts.map +1 -0
  117. package/lib/node/adapters/http/browser.d.ts +12 -0
  118. package/lib/node/adapters/http/browser.d.ts.map +1 -0
  119. package/lib/node/adapters/http/node.d.ts +12 -0
  120. package/lib/node/adapters/http/node.d.ts.map +1 -0
  121. package/lib/node/browser/factory.d.ts +19 -0
  122. package/lib/node/browser/factory.d.ts.map +1 -0
  123. package/lib/node/browser/index.d.ts +9 -0
  124. package/lib/node/browser/index.d.ts.map +1 -0
  125. package/lib/node/core/client.d.ts +29 -0
  126. package/lib/node/core/client.d.ts.map +1 -0
  127. package/lib/node/core/deployment.d.ts +20 -0
  128. package/lib/node/core/deployment.d.ts.map +1 -0
  129. package/lib/node/core/errors.d.ts +15 -0
  130. package/lib/node/core/errors.d.ts.map +1 -0
  131. package/lib/node/core/index.d.ts +10 -0
  132. package/lib/node/core/index.d.ts.map +1 -0
  133. package/lib/node/core/interfaces.d.ts +24 -0
  134. package/lib/node/core/interfaces.d.ts.map +1 -0
  135. package/lib/node/core/logger.d.ts +8 -0
  136. package/lib/node/core/logger.d.ts.map +1 -0
  137. package/lib/node/core/polling.d.ts +23 -0
  138. package/lib/node/core/polling.d.ts.map +1 -0
  139. package/lib/node/core/session.d.ts +31 -0
  140. package/lib/node/core/session.d.ts.map +1 -0
  141. package/lib/node/core/types.d.ts +175 -0
  142. package/lib/node/core/types.d.ts.map +1 -0
  143. package/lib/node/core/utils.d.ts +27 -0
  144. package/lib/node/core/utils.d.ts.map +1 -0
  145. package/lib/node/factory.d.ts +9 -0
  146. package/lib/node/factory.d.ts.map +1 -0
  147. package/lib/node/factory.js +34 -0
  148. package/lib/node/factory.js.map +1 -0
  149. package/lib/node/index.d.ts +8 -0
  150. package/lib/node/index.d.ts.map +1 -0
  151. package/lib/node/index.js +984 -0
  152. package/lib/node/index.js.map +1 -0
  153. package/lib/node/node/factory.d.ts +9 -0
  154. package/lib/node/node/factory.d.ts.map +1 -0
  155. package/lib/node/node/index.d.ts +8 -0
  156. package/lib/node/node/index.d.ts.map +1 -0
  157. package/package.json +98 -0
@@ -0,0 +1,277 @@
1
+ # Payment Kit Broker Client - Examples
2
+
3
+ 这里包含了 Payment Kit Broker Client 的完整使用示例,展示了如何在不同环境中使用 SDK 进行网站部署。
4
+
5
+ ## 📁 目录结构
6
+
7
+ ```
8
+ examples/
9
+ ├── nodejs/ # Node.js 环境示例
10
+ │ ├── deploy-example.mjs # 完整部署示例
11
+ │ ├── package.json # 依赖配置
12
+ │ └── README.md # Node.js 示例文档
13
+ ├── browser/ # 浏览器环境示例
14
+ │ ├── simple-example.js # 简化 JS 示例
15
+ │ └── README.md # Browser 示例文档(引用 test.tsx)
16
+ └── README.md # 本文件
17
+ ```
18
+
19
+ ## 🚀 快速开始
20
+
21
+ ### Node.js 示例
22
+
23
+ 适用于命令行工具、服务器端脚本等场景。
24
+
25
+ ```bash
26
+ # 进入 Node.js 示例目录
27
+ cd nodejs/
28
+
29
+ # 安装依赖
30
+ npm install
31
+
32
+ # 设置环境变量
33
+ export BASE_URL="https://your-blocklet-url.com"
34
+ export AUTH_TOKEN="your-auth-token"
35
+
36
+ # 运行示例
37
+ npm start
38
+ ```
39
+
40
+ **特点**:
41
+ - ✅ 完整的 CLI 体验
42
+ - 🔐 Auth Token 认证
43
+ - 🎨 彩色控制台输出
44
+ - 🌐 自动打开支付页面
45
+ - 🔄 支持恢复部署
46
+
47
+ ### Browser 示例
48
+
49
+ 适用于 Web 应用、管理面板等浏览器环境。
50
+
51
+ ```bash
52
+ # 进入 Browser 示例目录
53
+ cd examples/browser/
54
+
55
+ # 查看 README.md 了解详细使用方法
56
+ cat README.md
57
+ ```
58
+
59
+ **两种集成方式:**
60
+ - **完整示例** - `README.md` 中包含完整的 React 组件代码
61
+ - **简化集成** - `simple-example.js` 中包含核心逻辑
62
+
63
+ **特点**:
64
+ - ✅ 现代化 Web UI
65
+ - 🌐 浏览器原生支持
66
+ - 📱 响应式设计
67
+ - 📊 实时日志显示
68
+ - 💾 本地存储持久化
69
+
70
+ ## 🔧 配置对比
71
+
72
+ ### Node.js 配置
73
+
74
+ ```javascript
75
+ import { BrokerClient, STEPS } from '@blocklet/payment-broker-client';
76
+
77
+ const client = new BrokerClient({
78
+ baseUrl: 'https://your-blocklet-url.com',
79
+ authToken: 'your-auth-token', // 必需:认证令牌
80
+ paymentLinkKey: 'PAYMENT_LINK_ID', // 可选:Payment Link 键名
81
+ timeout: 300000,
82
+ polling: {
83
+ interval: 3000,
84
+ maxAttempts: 100,
85
+ backoffStrategy: 'linear',
86
+ },
87
+ });
88
+ ```
89
+
90
+ ### Browser 配置
91
+
92
+ ```javascript
93
+ import { BrokerClient, STEPS } from '@blocklet/payment-broker-client/browser';
94
+
95
+ const client = new BrokerClient({
96
+ baseUrl: 'https://your-blocklet-url.com',
97
+ api: yourApiInstance, // 必需:API 实例
98
+ paymentLinkKey: 'PAYMENT_LINK_ID', // 可选:Payment Link 键名
99
+ timeout: 300000,
100
+ polling: {
101
+ interval: 3000,
102
+ maxAttempts: 100,
103
+ backoffStrategy: 'linear',
104
+ },
105
+ });
106
+ ```
107
+
108
+ ## 📊 功能对比
109
+
110
+ | 功能 | Node.js | Browser | 说明 |
111
+ |------|---------|---------|------|
112
+ | **认证方式** | Auth Token | Cookie/Session | Node.js 需要显式令牌,Browser 依赖登录状态 |
113
+ | **HTTP 请求** | 内置 | 外部 API | Node.js 内置请求,Browser 需要传入 API 实例 |
114
+ | **配置获取** | API 调用 | window.blocklet | 不同的配置来源 |
115
+ | **支付页面** | 自动打开浏览器 | window.open | 都支持自动打开支付页面 |
116
+ | **错误处理** | 控制台输出 | UI 显示 | 不同的错误展示方式 |
117
+ | **数据持久化** | 文件/数据库 | localStorage | 不同的存储方式 |
118
+
119
+ ## 🎯 使用场景
120
+
121
+ ### Node.js 示例适用于:
122
+
123
+ - 📟 **命令行工具**: CLI 部署脚本
124
+ - 🤖 **自动化脚本**: CI/CD 流程
125
+ - 🖥️ **服务器端应用**: 后端服务集成
126
+ - 📦 **打包工具**: 构建时部署
127
+ - 🔧 **开发工具**: 开发者工具集成
128
+
129
+ ### Browser 示例适用于:
130
+
131
+ - 🌐 **Web 管理面板**: 管理员界面
132
+ - 👤 **用户控制台**: 用户自助部署
133
+ - 📱 **移动端 Web**: 响应式部署界面
134
+ - 🔗 **嵌入式组件**: 集成到现有应用
135
+ - 🎨 **自定义 UI**: 基于示例定制界面
136
+
137
+ ## 🔄 部署流程
138
+
139
+ 两个示例都遵循相同的部署流程:
140
+
141
+ ```
142
+ 1. 初始化 BrokerClient
143
+
144
+ 2. 调用 client.deploy()
145
+
146
+ 3. STEP1: 等待支付 → 支付成功
147
+
148
+ 4. STEP2: 开始安装 → 安装完成
149
+
150
+ 5. STEP3: 启动服务 → 服务完成
151
+
152
+ 6. STEP4: 获取地址 → 部署完成
153
+ ```
154
+
155
+ ## 🛠️ 自定义和扩展
156
+
157
+ ### 步骤回调自定义
158
+
159
+ ```javascript
160
+ const hooks = {
161
+ [STEPS.PAYMENT_PENDING]: async ({ sessionId, paymentUrl, isResuming }) => {
162
+ // 自定义支付步骤处理
163
+ console.log('处理支付步骤...');
164
+
165
+ // Node.js: 保存到文件
166
+ // Browser: 保存到 localStorage
167
+
168
+ if (!isResuming) {
169
+ // 自定义打开支付页面的逻辑
170
+ }
171
+ },
172
+
173
+ // 其他步骤回调...
174
+ };
175
+ ```
176
+
177
+ ### 错误处理自定义
178
+
179
+ ```javascript
180
+ const onError = (error, step) => {
181
+ // 自定义错误处理
182
+ console.error(`部署失败于 ${step}:`, error.message);
183
+
184
+ // Node.js: 记录到日志文件
185
+ // Browser: 显示用户友好的错误消息
186
+
187
+ if (error.recovery?.suggestions) {
188
+ error.recovery.suggestions.forEach(suggestion => {
189
+ // 显示恢复建议
190
+ });
191
+ }
192
+ };
193
+ ```
194
+
195
+ ## 📚 API 参考
196
+
197
+ ### BrokerClient 方法
198
+
199
+ ```javascript
200
+ // 部署方法
201
+ await client.deploy({
202
+ cachedCheckoutId?: string, // 缓存的会话 ID
203
+ cachedPaymentUrl?: string, // 缓存的支付 URL
204
+ page_info: { // 页面信息(必需)
205
+ success_message: {
206
+ en: string, // 英文成功消息
207
+ zh: string, // 中文成功消息
208
+ },
209
+ },
210
+ hooks?: DeploymentHooks, // 部署钩子
211
+ onError?: ErrorHandler, // 错误处理
212
+ });
213
+ ```
214
+
215
+ ### 步骤常量
216
+
217
+ ```javascript
218
+ import { STEPS } from '@blocklet/payment-broker-client';
219
+
220
+ STEPS.PAYMENT_PENDING // 等待支付
221
+ STEPS.PAYMENT_COMPLETED // 支付完成
222
+ STEPS.INSTALLATION_STARTING // 开始安装
223
+ STEPS.INSTALLATION_COMPLETED // 安装完成
224
+ STEPS.SERVICE_STARTING // 启动服务
225
+ STEPS.SERVICE_READY // 服务就绪
226
+ STEPS.ACCESS_PREPARING // 准备访问权限
227
+ STEPS.ACCESS_READY // 访问就绪
228
+ ```
229
+
230
+ ## 🔍 故障排除
231
+
232
+ ### 常见问题
233
+
234
+ 1. **认证失败**
235
+ - Node.js: 检查 `AUTH_TOKEN` 环境变量
236
+ - Browser: 确保在已登录状态下运行
237
+
238
+ 2. **网络错误**
239
+ - 检查 `BASE_URL` 是否正确
240
+ - 验证网络连接和防火墙设置
241
+
242
+ 3. **Payment Link 错误**
243
+ - 确认 `paymentLinkKey` 对应的环境变量存在
244
+ - 检查 blocklet 配置
245
+
246
+ 4. **构建问题**
247
+ - 确保正确构建了 SDK
248
+ - 检查文件路径和导入语句
249
+
250
+ ### 调试技巧
251
+
252
+ ```javascript
253
+ // 开启详细日志
254
+ const client = new BrokerClient({
255
+ // ... 其他配置
256
+ logger: {
257
+ level: 'debug',
258
+ enabled: true,
259
+ },
260
+ });
261
+
262
+ // 捕获所有错误
263
+ process.on('unhandledRejection', (error) => {
264
+ console.error('Unhandled rejection:', error);
265
+ });
266
+ ```
267
+
268
+ ## 📖 更多资源
269
+
270
+ - [Payment Kit Broker Client 主文档](../README.md)
271
+ - [API 完整参考](../docs/api.md)
272
+ - [类型定义](../src/core/types.ts)
273
+ - [错误处理指南](../docs/error-handling.md)
274
+
275
+ ## 🤝 贡献
276
+
277
+ 欢迎提交示例改进和新的使用场景!请查看项目的贡献指南。
@@ -0,0 +1,119 @@
1
+ # Payment Kit Broker Client - Browser Example
2
+
3
+ 这是一个使用 Payment Kit Broker Client 在浏览器环境中部署网站的完整示例。
4
+
5
+ ## 功能特性
6
+
7
+ - ✅ 完整的部署流程演示
8
+ - 🌐 浏览器原生支持(无需 Auth Token)
9
+ - 🔄 支持恢复中断的部署
10
+ - 🎨 现代化 UI 设计
11
+ - 📱 响应式布局
12
+ - 🔗 自动打开支付页面
13
+ - ⚙️ 自定义 Payment Link Key
14
+ - 📊 实时日志显示
15
+ - 💾 本地存储持久化
16
+ - 📈 详细的步骤回调和错误处理
17
+
18
+ ## 快速开始
19
+
20
+
21
+ 如果你只需要核心功能,可以参考 `simple-example.js` 文件中的简化代码。
22
+
23
+ ## 核心配置说明
24
+
25
+ ### 浏览器环境特点
26
+
27
+ 1. **无需 Auth Token** - 浏览器环境在已登录状态下运行
28
+ 2. **需要 API 实例** - 必须传入 `api` 对象处理 HTTP 请求
29
+ 3. **自动获取配置** - 从 `window.blocklet` 自动获取配置信息
30
+
31
+ ### 配置参数
32
+
33
+ ```javascript
34
+ const client = new BrokerClient({
35
+ baseUrl: 'https://your-blocklet-url.com', // 必需:Blocklet URL
36
+ api: yourApiInstance, // 必需:API 实例
37
+ paymentLinkKey: 'PAYMENT_LINK_ID', // 可选:Payment Link 键名
38
+ timeout: 300000, // 可选:超时时间
39
+ polling: { // 可选:轮询配置
40
+ interval: 3000,
41
+ maxAttempts: 100,
42
+ backoffStrategy: 'linear',
43
+ },
44
+ });
45
+ ```
46
+
47
+ ## 功能特性说明
48
+
49
+ 上面的完整示例包含了以下功能:
50
+
51
+ - ✅ 完整的 UI 界面
52
+ - 📊 实时日志显示
53
+ - 💾 localStorage 持久化
54
+ - 🔄 恢复部署功能
55
+ - 📱 响应式设计
56
+ - 🎨 Material-UI 组件
57
+ - 🔧 配置管理
58
+ - 🧹 缓存清理功能
59
+
60
+ 这个示例是一个完全独立的组件,可以直接在任何 React 项目中使用。
61
+
62
+ ## API 实例配置
63
+
64
+ 浏览器环境需要传入 API 实例:
65
+
66
+ ```javascript
67
+ // 方法1: 使用 @blocklet/payment-react 的 api
68
+ import { api } from '@blocklet/payment-react';
69
+
70
+ // 方法2: 使用自定义 axios 实例
71
+ import axios from 'axios';
72
+ const api = axios.create({
73
+ baseURL: getCurrentBaseUrl(),
74
+ headers: { 'Content-Type': 'application/json' },
75
+ });
76
+
77
+ // 方法3: 使用 fetch 包装
78
+ const api = {
79
+ get: async (url) => fetch(url).then(r => r.json()),
80
+ post: async (url, data) => fetch(url, {
81
+ method: 'POST',
82
+ headers: { 'Content-Type': 'application/json' },
83
+ body: JSON.stringify(data)
84
+ }).then(r => r.json())
85
+ };
86
+ ```
87
+
88
+ ## 故障排除
89
+
90
+ ### 常见问题
91
+
92
+ 1. **导入错误**
93
+ ```bash
94
+ npm install @blocklet/payment-broker-client
95
+ ```
96
+
97
+ 2. **API 实例未配置**
98
+ ```javascript
99
+ // 确保传入正确的 API 实例
100
+ import { api } from '@blocklet/payment-react';
101
+ ```
102
+
103
+ 3. **window.blocklet 未定义**
104
+ ```javascript
105
+ // 确保在 blocklet 环境中运行
106
+ console.log(window.blocklet); // 应该有值
107
+ ```
108
+
109
+ 4. **支付页面无法打开**
110
+ ```javascript
111
+ // 检查浏览器弹窗拦截设置
112
+ window.open(paymentUrl, '_blank');
113
+ ```
114
+
115
+ ## 相关链接
116
+
117
+ - [Payment Kit Broker Client 文档](../../README.md)
118
+ - [Node.js 示例](../nodejs/README.md)
119
+ - [API 参考](../../docs/api.md)
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Simple Browser Example for Payment Kit Broker Client
3
+ *
4
+ * This is a minimal example showing how to use the BrokerClient in a browser environment.
5
+ * For a complete UI example, see index.html
6
+ */
7
+
8
+ // Import the BrokerClient (make sure to build and copy the browser version first)
9
+ // import { BrokerClient, STEPS } from './broker-client-browser.js';
10
+
11
+ // Example usage function
12
+ async function deployWebsiteSimple(options = {}) {
13
+ const {
14
+ paymentLinkKey,
15
+ cachedCheckoutId,
16
+ cachedPaymentUrl,
17
+ api = createDefaultApi(),
18
+ } = options;
19
+
20
+ console.log('🚀 Starting simple browser deployment...');
21
+
22
+ // Create BrokerClient instance
23
+ const client = new BrokerClient({
24
+ baseUrl: getCurrentBaseUrl(),
25
+ paymentLinkKey: paymentLinkKey || undefined,
26
+ api: api,
27
+ timeout: 300000,
28
+ polling: {
29
+ interval: 3000,
30
+ maxAttempts: 100,
31
+ backoffStrategy: 'linear',
32
+ },
33
+ });
34
+
35
+ try {
36
+ const result = await client.deploy({
37
+ cachedCheckoutId: cachedCheckoutId || undefined,
38
+ cachedPaymentUrl: cachedPaymentUrl || undefined,
39
+ page_info: {
40
+ success_message: {
41
+ en: 'Congratulations! Your website has been successfully deployed.',
42
+ zh: '恭喜您,网站部署成功!',
43
+ },
44
+ },
45
+ hooks: {
46
+ [STEPS.PAYMENT_PENDING]: ({ sessionId, paymentUrl, linkId, isResuming }) => {
47
+ console.log('⏳ Step 1: Waiting for payment...');
48
+ console.log(`📋 Session ID: ${sessionId}`);
49
+ console.log(`🔗 Payment URL: ${paymentUrl}`);
50
+
51
+ if (!isResuming && paymentUrl) {
52
+ console.log('🌐 Opening payment page...');
53
+ window.open(paymentUrl, '_blank');
54
+ }
55
+ },
56
+
57
+ [STEPS.PAYMENT_COMPLETED]: ({ sessionId, vendors }) => {
58
+ console.log('✅ Payment successful!');
59
+ console.log(`📦 Vendors: ${vendors.length}`);
60
+ },
61
+
62
+ [STEPS.INSTALLATION_STARTING]: ({ vendors }) => {
63
+ console.log('📦 Step 2: Installing services...');
64
+ console.log(`📊 Installing ${vendors.length} services`);
65
+ },
66
+
67
+ [STEPS.INSTALLATION_COMPLETED]: ({ progress }) => {
68
+ console.log(`✅ Installation complete (${progress || 100}%)`);
69
+ },
70
+
71
+ [STEPS.SERVICE_STARTING]: ({ vendors }) => {
72
+ console.log('🚀 Step 3: Starting services...');
73
+ console.log(`🔧 Starting ${vendors.length} services`);
74
+ },
75
+
76
+ [STEPS.SERVICE_READY]: () => {
77
+ console.log('✅ Services started successfully');
78
+ },
79
+
80
+ [STEPS.ACCESS_PREPARING]: () => {
81
+ console.log('🌐 Step 4: Getting access URLs...');
82
+ },
83
+
84
+ [STEPS.ACCESS_READY]: ({ appUrl, homeUrl, subscriptionUrl, dashboardUrl }) => {
85
+ console.log('🎉 Deployment completed!');
86
+ console.log(`🏠 Website: ${homeUrl || appUrl}`);
87
+ if (subscriptionUrl) console.log(`💳 Subscription: ${subscriptionUrl}`);
88
+ if (dashboardUrl) console.log(`📊 Dashboard: ${dashboardUrl}`);
89
+ },
90
+ },
91
+
92
+ onError: (error, step) => {
93
+ console.error(`❌ Deployment failed at ${step}:`, error.message);
94
+ if (error.recovery?.suggestions) {
95
+ error.recovery.suggestions.forEach(suggestion => {
96
+ console.log(`💡 Suggestion: ${suggestion}`);
97
+ });
98
+ }
99
+ },
100
+ });
101
+
102
+ console.log('🎊 Deployment successful:', result);
103
+ return result;
104
+
105
+ } catch (error) {
106
+ console.error('❌ Deployment failed:', error.message);
107
+ throw error;
108
+ }
109
+ }
110
+
111
+ // Helper function to get current base URL
112
+ function getCurrentBaseUrl() {
113
+ return `${window.location.protocol}//${window.location.host}${window?.blocklet?.prefix || '/'}`;
114
+ }
115
+
116
+ // Default API implementation using fetch
117
+ function createDefaultApi() {
118
+ const baseURL = getCurrentBaseUrl();
119
+
120
+ return {
121
+ async get(url) {
122
+ const response = await fetch(`${baseURL}${url}`);
123
+ if (!response.ok) {
124
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
125
+ }
126
+ return response.json();
127
+ },
128
+
129
+ async post(url, data) {
130
+ const response = await fetch(`${baseURL}${url}`, {
131
+ method: 'POST',
132
+ headers: {
133
+ 'Content-Type': 'application/json',
134
+ },
135
+ body: JSON.stringify(data),
136
+ });
137
+ if (!response.ok) {
138
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
139
+ }
140
+ return response.json();
141
+ },
142
+ };
143
+ }
144
+
145
+ // Example usage scenarios
146
+
147
+ // 1. Basic deployment
148
+ function example1_BasicDeployment() {
149
+ return deployWebsiteSimple();
150
+ }
151
+
152
+ // 2. Resume deployment with cached session
153
+ function example2_ResumeDeployment() {
154
+ return deployWebsiteSimple({
155
+ cachedCheckoutId: 'cs_your_session_id_here',
156
+ cachedPaymentUrl: 'https://your-payment-url-here',
157
+ });
158
+ }
159
+
160
+ // 3. Custom payment link key
161
+ function example3_CustomPaymentLinkKey() {
162
+ return deployWebsiteSimple({
163
+ paymentLinkKey: 'CUSTOM_PAYMENT_LINK_ID',
164
+ });
165
+ }
166
+
167
+ // 4. Custom API instance
168
+ function example4_CustomAPI() {
169
+ const customApi = {
170
+ async get(url) {
171
+ // Your custom GET implementation
172
+ console.log('Custom GET:', url);
173
+ return fetch(url).then(r => r.json());
174
+ },
175
+ async post(url, data) {
176
+ // Your custom POST implementation
177
+ console.log('Custom POST:', url, data);
178
+ return fetch(url, {
179
+ method: 'POST',
180
+ headers: { 'Content-Type': 'application/json' },
181
+ body: JSON.stringify(data),
182
+ }).then(r => r.json());
183
+ },
184
+ };
185
+
186
+ return deployWebsiteSimple({
187
+ api: customApi,
188
+ });
189
+ }
190
+
191
+ // Export for use in other modules
192
+ if (typeof module !== 'undefined' && module.exports) {
193
+ module.exports = {
194
+ deployWebsiteSimple,
195
+ getCurrentBaseUrl,
196
+ createDefaultApi,
197
+ example1_BasicDeployment,
198
+ example2_ResumeDeployment,
199
+ example3_CustomPaymentLinkKey,
200
+ example4_CustomAPI,
201
+ };
202
+ }
203
+
204
+ // Global access for browser console
205
+ if (typeof window !== 'undefined') {
206
+ window.PaymentKitExamples = {
207
+ deployWebsiteSimple,
208
+ getCurrentBaseUrl,
209
+ createDefaultApi,
210
+ examples: {
211
+ basicDeployment: example1_BasicDeployment,
212
+ resumeDeployment: example2_ResumeDeployment,
213
+ customPaymentLinkKey: example3_CustomPaymentLinkKey,
214
+ customAPI: example4_CustomAPI,
215
+ },
216
+ };
217
+
218
+ console.log('🎯 Payment Kit Examples loaded! Try:');
219
+ console.log(' PaymentKitExamples.examples.basicDeployment()');
220
+ console.log(' PaymentKitExamples.examples.resumeDeployment()');
221
+ console.log(' PaymentKitExamples.examples.customPaymentLinkKey()');
222
+ console.log(' PaymentKitExamples.examples.customAPI()');
223
+ }