@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.
- package/examples/README.md +277 -0
- package/examples/browser/README.md +119 -0
- package/examples/browser/simple-example.js +223 -0
- package/examples/nodejs/README.md +180 -0
- package/examples/nodejs/deploy-example.mjs +200 -0
- package/examples/nodejs/package.json +30 -0
- package/lib/adapters/config/browser.d.ts +12 -0
- package/lib/adapters/config/browser.d.ts.map +1 -0
- package/lib/adapters/config/browser.js +48 -0
- package/lib/adapters/config/browser.js.map +1 -0
- package/lib/adapters/config/node.d.ts +13 -0
- package/lib/adapters/config/node.d.ts.map +1 -0
- package/lib/adapters/config/node.js +62 -0
- package/lib/adapters/config/node.js.map +1 -0
- package/lib/adapters/http/browser.d.ts +12 -0
- package/lib/adapters/http/browser.d.ts.map +1 -0
- package/lib/adapters/http/browser.js +50 -0
- package/lib/adapters/http/browser.js.map +1 -0
- package/lib/adapters/http/node.d.ts +12 -0
- package/lib/adapters/http/node.d.ts.map +1 -0
- package/lib/adapters/http/node.js +30 -0
- package/lib/adapters/http/node.js.map +1 -0
- package/lib/browser/adapters/config/browser.d.ts +12 -0
- package/lib/browser/adapters/config/browser.d.ts.map +1 -0
- package/lib/browser/adapters/config/node.d.ts +13 -0
- package/lib/browser/adapters/config/node.d.ts.map +1 -0
- package/lib/browser/adapters/http/browser.d.ts +12 -0
- package/lib/browser/adapters/http/browser.d.ts.map +1 -0
- package/lib/browser/adapters/http/node.d.ts +12 -0
- package/lib/browser/adapters/http/node.d.ts.map +1 -0
- package/lib/browser/browser/factory.d.ts +19 -0
- package/lib/browser/browser/factory.d.ts.map +1 -0
- package/lib/browser/browser/index.d.ts +9 -0
- package/lib/browser/browser/index.d.ts.map +1 -0
- package/lib/browser/core/client.d.ts +29 -0
- package/lib/browser/core/client.d.ts.map +1 -0
- package/lib/browser/core/deployment.d.ts +20 -0
- package/lib/browser/core/deployment.d.ts.map +1 -0
- package/lib/browser/core/errors.d.ts +15 -0
- package/lib/browser/core/errors.d.ts.map +1 -0
- package/lib/browser/core/index.d.ts +10 -0
- package/lib/browser/core/index.d.ts.map +1 -0
- package/lib/browser/core/interfaces.d.ts +24 -0
- package/lib/browser/core/interfaces.d.ts.map +1 -0
- package/lib/browser/core/logger.d.ts +8 -0
- package/lib/browser/core/logger.d.ts.map +1 -0
- package/lib/browser/core/polling.d.ts +23 -0
- package/lib/browser/core/polling.d.ts.map +1 -0
- package/lib/browser/core/session.d.ts +31 -0
- package/lib/browser/core/session.d.ts.map +1 -0
- package/lib/browser/core/types.d.ts +175 -0
- package/lib/browser/core/types.d.ts.map +1 -0
- package/lib/browser/core/utils.d.ts +27 -0
- package/lib/browser/core/utils.d.ts.map +1 -0
- package/lib/browser/factory.d.ts +19 -0
- package/lib/browser/factory.d.ts.map +1 -0
- package/lib/browser/factory.js +30 -0
- package/lib/browser/factory.js.map +1 -0
- package/lib/browser/index.d.ts +8 -0
- package/lib/browser/index.d.ts.map +1 -0
- package/lib/browser/index.js +973 -0
- package/lib/browser/index.js.map +1 -0
- package/lib/browser/node/factory.d.ts +9 -0
- package/lib/browser/node/factory.d.ts.map +1 -0
- package/lib/browser/node/index.d.ts +8 -0
- package/lib/browser/node/index.d.ts.map +1 -0
- package/lib/core/client.d.ts +29 -0
- package/lib/core/client.d.ts.map +1 -0
- package/lib/core/client.js +150 -0
- package/lib/core/client.js.map +1 -0
- package/lib/core/deployment.d.ts +20 -0
- package/lib/core/deployment.d.ts.map +1 -0
- package/lib/core/deployment.js +184 -0
- package/lib/core/deployment.js.map +1 -0
- package/lib/core/errors.d.ts +15 -0
- package/lib/core/errors.d.ts.map +1 -0
- package/lib/core/errors.js +21 -0
- package/lib/core/errors.js.map +1 -0
- package/lib/core/index.d.ts +10 -0
- package/lib/core/index.d.ts.map +1 -0
- package/lib/core/index.js +32 -0
- package/lib/core/index.js.map +1 -0
- package/lib/core/interfaces.d.ts +24 -0
- package/lib/core/interfaces.d.ts.map +1 -0
- package/lib/core/interfaces.js +4 -0
- package/lib/core/interfaces.js.map +1 -0
- package/lib/core/logger.d.ts +8 -0
- package/lib/core/logger.d.ts.map +1 -0
- package/lib/core/logger.js +39 -0
- package/lib/core/logger.js.map +1 -0
- package/lib/core/polling.d.ts +23 -0
- package/lib/core/polling.d.ts.map +1 -0
- package/lib/core/polling.js +97 -0
- package/lib/core/polling.js.map +1 -0
- package/lib/core/session.d.ts +31 -0
- package/lib/core/session.d.ts.map +1 -0
- package/lib/core/session.js +202 -0
- package/lib/core/session.js.map +1 -0
- package/lib/core/types.d.ts +175 -0
- package/lib/core/types.d.ts.map +1 -0
- package/lib/core/types.js +48 -0
- package/lib/core/types.js.map +1 -0
- package/lib/core/utils.d.ts +27 -0
- package/lib/core/utils.d.ts.map +1 -0
- package/lib/core/utils.js +181 -0
- package/lib/core/utils.js.map +1 -0
- package/lib/index.d.ts +484 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.esm.js +969 -0
- package/lib/index.esm.js.map +1 -0
- package/lib/index.js +984 -0
- package/lib/index.js.map +1 -0
- package/lib/node/adapters/config/browser.d.ts +12 -0
- package/lib/node/adapters/config/browser.d.ts.map +1 -0
- package/lib/node/adapters/config/node.d.ts +13 -0
- package/lib/node/adapters/config/node.d.ts.map +1 -0
- package/lib/node/adapters/http/browser.d.ts +12 -0
- package/lib/node/adapters/http/browser.d.ts.map +1 -0
- package/lib/node/adapters/http/node.d.ts +12 -0
- package/lib/node/adapters/http/node.d.ts.map +1 -0
- package/lib/node/browser/factory.d.ts +19 -0
- package/lib/node/browser/factory.d.ts.map +1 -0
- package/lib/node/browser/index.d.ts +9 -0
- package/lib/node/browser/index.d.ts.map +1 -0
- package/lib/node/core/client.d.ts +29 -0
- package/lib/node/core/client.d.ts.map +1 -0
- package/lib/node/core/deployment.d.ts +20 -0
- package/lib/node/core/deployment.d.ts.map +1 -0
- package/lib/node/core/errors.d.ts +15 -0
- package/lib/node/core/errors.d.ts.map +1 -0
- package/lib/node/core/index.d.ts +10 -0
- package/lib/node/core/index.d.ts.map +1 -0
- package/lib/node/core/interfaces.d.ts +24 -0
- package/lib/node/core/interfaces.d.ts.map +1 -0
- package/lib/node/core/logger.d.ts +8 -0
- package/lib/node/core/logger.d.ts.map +1 -0
- package/lib/node/core/polling.d.ts +23 -0
- package/lib/node/core/polling.d.ts.map +1 -0
- package/lib/node/core/session.d.ts +31 -0
- package/lib/node/core/session.d.ts.map +1 -0
- package/lib/node/core/types.d.ts +175 -0
- package/lib/node/core/types.d.ts.map +1 -0
- package/lib/node/core/utils.d.ts +27 -0
- package/lib/node/core/utils.d.ts.map +1 -0
- package/lib/node/factory.d.ts +9 -0
- package/lib/node/factory.d.ts.map +1 -0
- package/lib/node/factory.js +34 -0
- package/lib/node/factory.js.map +1 -0
- package/lib/node/index.d.ts +8 -0
- package/lib/node/index.d.ts.map +1 -0
- package/lib/node/index.js +984 -0
- package/lib/node/index.js.map +1 -0
- package/lib/node/node/factory.d.ts +9 -0
- package/lib/node/node/factory.d.ts.map +1 -0
- package/lib/node/node/index.d.ts +8 -0
- package/lib/node/node/index.d.ts.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Payment Kit Broker Client - Node.js Example
|
|
2
|
+
|
|
3
|
+
这是一个使用 Payment Kit Broker Client 在 Node.js 环境中部署网站的完整示例。
|
|
4
|
+
|
|
5
|
+
## 功能特性
|
|
6
|
+
|
|
7
|
+
- ✅ 完整的部署流程演示
|
|
8
|
+
- 🔐 Auth Token 认证
|
|
9
|
+
- 🔄 支持恢复中断的部署
|
|
10
|
+
- 🎨 彩色控制台输出
|
|
11
|
+
- 🌐 自动打开支付页面
|
|
12
|
+
- ⚙️ 自定义 Payment Link Key
|
|
13
|
+
- 📊 详细的步骤回调和错误处理
|
|
14
|
+
|
|
15
|
+
## 安装依赖
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install
|
|
19
|
+
# 或
|
|
20
|
+
pnpm install
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 环境变量配置
|
|
24
|
+
|
|
25
|
+
创建 `.env` 文件或设置环境变量:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
export BASE_URL="https://your-blocklet-url.com"
|
|
29
|
+
export AUTH_TOKEN="your-auth-token-here"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 使用方法
|
|
33
|
+
|
|
34
|
+
### 1. 基本部署
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm start
|
|
38
|
+
# 或
|
|
39
|
+
npm run deploy
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 2. 恢复中断的部署
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
export CACHED_CHECKOUT_ID="cs_your_session_id"
|
|
46
|
+
export CACHED_PAYMENT_URL="https://your-payment-url"
|
|
47
|
+
npm run deploy:resume
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 3. 使用自定义 Payment Link Key
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm run deploy:custom
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 4. 编程方式使用
|
|
57
|
+
|
|
58
|
+
```javascript
|
|
59
|
+
import { deployWebsite } from './deploy-example.mjs';
|
|
60
|
+
|
|
61
|
+
try {
|
|
62
|
+
const result = await deployWebsite(
|
|
63
|
+
'cached-checkout-id', // 可选:缓存的 checkout ID
|
|
64
|
+
'cached-payment-url', // 可选:缓存的支付 URL
|
|
65
|
+
'CUSTOM_PAYMENT_KEY' // 可选:自定义 payment link key
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
console.log('部署成功:', result);
|
|
69
|
+
} catch (error) {
|
|
70
|
+
console.error('部署失败:', error);
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## 配置选项
|
|
75
|
+
|
|
76
|
+
### BrokerClient 配置
|
|
77
|
+
|
|
78
|
+
```javascript
|
|
79
|
+
const client = new BrokerClient({
|
|
80
|
+
baseUrl: 'https://your-blocklet-url.com', // 必需:Blocklet 基础 URL
|
|
81
|
+
authToken: 'your-auth-token', // 必需:认证令牌
|
|
82
|
+
paymentLinkKey: 'PAYMENT_LINK_ID', // 可选:Payment Link 键名(默认:PAYMENT_LINK_ID)
|
|
83
|
+
timeout: 300000, // 可选:请求超时时间(毫秒)
|
|
84
|
+
polling: { // 可选:轮询配置
|
|
85
|
+
interval: 3000, // 轮询间隔(毫秒)
|
|
86
|
+
maxAttempts: 100, // 最大尝试次数
|
|
87
|
+
backoffStrategy: 'linear', // 退避策略:'linear' | 'exponential'
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### 部署选项
|
|
93
|
+
|
|
94
|
+
```javascript
|
|
95
|
+
await client.deploy({
|
|
96
|
+
cachedCheckoutId: 'session-id', // 可选:缓存的会话 ID
|
|
97
|
+
cachedPaymentUrl: 'payment-url', // 可选:缓存的支付 URL
|
|
98
|
+
page_info: { // 必需:页面信息
|
|
99
|
+
success_message: { // 必需:成功消息
|
|
100
|
+
en: 'Success message in English',
|
|
101
|
+
zh: '中文成功消息',
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
stepCallbacks: { /* ... */ }, // 可选:步骤回调
|
|
105
|
+
onError: (error, step) => { /* ... */ }, // 可选:错误处理
|
|
106
|
+
});
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## 步骤回调
|
|
110
|
+
|
|
111
|
+
示例包含以下步骤的详细回调:
|
|
112
|
+
|
|
113
|
+
- `PAYMENT_PENDING`: 等待支付
|
|
114
|
+
- `PAYMENT_COMPLETED`: 支付完成
|
|
115
|
+
- `INSTALLATION_STARTING`: 开始安装
|
|
116
|
+
- `INSTALLATION_COMPLETED`: 安装完成
|
|
117
|
+
- `SERVICE_STARTING`: 启动服务
|
|
118
|
+
- `SERVICE_READY`: 服务就绪
|
|
119
|
+
- `ACCESS_PREPARING`: 准备访问权限
|
|
120
|
+
- `ACCESS_READY`: 访问就绪
|
|
121
|
+
|
|
122
|
+
## 错误处理
|
|
123
|
+
|
|
124
|
+
示例包含完善的错误处理:
|
|
125
|
+
|
|
126
|
+
- 详细的错误消息
|
|
127
|
+
- 恢复建议
|
|
128
|
+
- 会话 ID 用于恢复部署
|
|
129
|
+
- 彩色控制台输出
|
|
130
|
+
|
|
131
|
+
## 输出示例
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
🚀 Payment Kit Broker Client - Node.js Example
|
|
135
|
+
================================================
|
|
136
|
+
|
|
137
|
+
🔧 Base URL: https://example.com
|
|
138
|
+
🔑 Auth Token: ak_1234567...
|
|
139
|
+
🔗 Payment Link Key: PAYMENT_LINK_ID
|
|
140
|
+
|
|
141
|
+
⏳ Step 1/4: Waiting for payment...
|
|
142
|
+
📋 Session ID: cs_abc123...
|
|
143
|
+
🔗 Payment link: https://example.com/pay/cs_abc123...
|
|
144
|
+
|
|
145
|
+
🌐 Opening payment page in browser...
|
|
146
|
+
|
|
147
|
+
✅ Payment successful!
|
|
148
|
+
📋 Session ID: cs_abc123...
|
|
149
|
+
📦 Vendors: 2
|
|
150
|
+
|
|
151
|
+
📦 Step 2/4: Installing Website...
|
|
152
|
+
📊 Installing 2 services
|
|
153
|
+
|
|
154
|
+
✅ Installation complete (100%)
|
|
155
|
+
|
|
156
|
+
🚀 Step 3/4: Starting Website Services...
|
|
157
|
+
🔧 Starting 2 services
|
|
158
|
+
|
|
159
|
+
✅ Services started successfully
|
|
160
|
+
|
|
161
|
+
🌐 Step 4/4: Getting Website URLs...
|
|
162
|
+
|
|
163
|
+
🎉 Deployment completed successfully!
|
|
164
|
+
|
|
165
|
+
🏠 Website URL: https://your-website.com
|
|
166
|
+
💳 Subscription URL: https://subscription.com
|
|
167
|
+
📊 Dashboard URL: https://dashboard.com
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## 故障排除
|
|
171
|
+
|
|
172
|
+
1. **认证错误**: 确保 `AUTH_TOKEN` 环境变量正确设置
|
|
173
|
+
2. **网络错误**: 检查 `BASE_URL` 是否可访问
|
|
174
|
+
3. **Payment Link 错误**: 验证 `paymentLinkKey` 对应的环境变量是否存在
|
|
175
|
+
4. **超时错误**: 增加 `timeout` 配置值
|
|
176
|
+
|
|
177
|
+
## 相关链接
|
|
178
|
+
|
|
179
|
+
- [Payment Kit Broker Client 文档](../../README.md)
|
|
180
|
+
- [Browser 示例](../browser/README.md)
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import open from 'open';
|
|
5
|
+
import { BrokerClient, STEPS } from '@blocklet/payment-broker-client';
|
|
6
|
+
|
|
7
|
+
// ==================== Configuration ====================
|
|
8
|
+
const BASE_URL = process.env.BASE_URL || 'https://your-blocklet-url.com';
|
|
9
|
+
const AUTH_TOKEN = process.env.AUTH_TOKEN || 'your-auth-token-here';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Deploy a new website using Payment Kit Broker Client
|
|
13
|
+
* @param {string} cachedCheckoutId - Cached checkout ID (optional)
|
|
14
|
+
* @param {string} cachedPaymentUrl - Cached payment URL (optional)
|
|
15
|
+
* @param {string} paymentLinkKey - Custom payment link key (optional, defaults to 'PAYMENT_LINK_ID')
|
|
16
|
+
* @returns {Promise<Object>} - The deployment result with URLs
|
|
17
|
+
*/
|
|
18
|
+
export async function deployWebsite(cachedCheckoutId, cachedPaymentUrl, paymentLinkKey) {
|
|
19
|
+
console.log(chalk.blue('🚀 Payment Kit Broker Client - Node.js Example'));
|
|
20
|
+
console.log(chalk.gray('================================================\n'));
|
|
21
|
+
|
|
22
|
+
if (!AUTH_TOKEN || AUTH_TOKEN === 'your-auth-token-here') {
|
|
23
|
+
throw new Error(chalk.red('❌ Please set AUTH_TOKEN environment variable'));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (!BASE_URL || BASE_URL === 'https://your-blocklet-url.com') {
|
|
27
|
+
throw new Error(chalk.red('❌ Please set BASE_URL environment variable'));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Initialize the BrokerClient
|
|
31
|
+
const client = new BrokerClient({
|
|
32
|
+
baseUrl: BASE_URL,
|
|
33
|
+
authToken: AUTH_TOKEN,
|
|
34
|
+
paymentLinkKey: paymentLinkKey || undefined, // Optional: custom payment link key
|
|
35
|
+
timeout: 300000, // 5 minutes timeout
|
|
36
|
+
polling: {
|
|
37
|
+
interval: 3000,
|
|
38
|
+
maxAttempts: 100,
|
|
39
|
+
backoffStrategy: 'linear',
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
console.log(`🔧 Base URL: ${chalk.cyan(BASE_URL)}`);
|
|
44
|
+
console.log(`🔑 Auth Token: ${chalk.cyan(AUTH_TOKEN.slice(0, 10) + '...')}`);
|
|
45
|
+
if (paymentLinkKey) {
|
|
46
|
+
console.log(`🔗 Payment Link Key: ${chalk.cyan(paymentLinkKey)}`);
|
|
47
|
+
}
|
|
48
|
+
console.log('');
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
const result = await client.deploy({
|
|
52
|
+
cachedCheckoutId: cachedCheckoutId || undefined,
|
|
53
|
+
cachedPaymentUrl: cachedPaymentUrl || undefined,
|
|
54
|
+
page_info: {
|
|
55
|
+
success_message: {
|
|
56
|
+
en: 'Congratulations! Your website has been successfully installed. You can return to the command-line tool to continue the next steps.',
|
|
57
|
+
zh: '恭喜您,你的网站已安装成功!可以返回命令行工具继续后续操作!',
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
hooks: {
|
|
61
|
+
[STEPS.PAYMENT_PENDING]: async ({ sessionId, paymentUrl, linkId, isResuming }) => {
|
|
62
|
+
console.log(chalk.yellow('⏳ Step 1/4: Waiting for payment...'));
|
|
63
|
+
console.log(`${chalk.gray('📋 Session ID:')} ${chalk.cyan(sessionId)}`);
|
|
64
|
+
console.log(`${chalk.gray('🔗 Payment link:')} ${chalk.cyan(paymentUrl)}`);
|
|
65
|
+
if (linkId) {
|
|
66
|
+
console.log(`${chalk.gray('🆔 Link ID:')} ${chalk.cyan(linkId)}`);
|
|
67
|
+
}
|
|
68
|
+
console.log('');
|
|
69
|
+
|
|
70
|
+
if (!isResuming) {
|
|
71
|
+
console.log(chalk.blue('🌐 Opening payment page in browser...'));
|
|
72
|
+
try {
|
|
73
|
+
await open(paymentUrl);
|
|
74
|
+
} catch (error) {
|
|
75
|
+
console.log(chalk.red('❌ Failed to open browser. Please open the payment link manually.'));
|
|
76
|
+
}
|
|
77
|
+
} else {
|
|
78
|
+
console.log(chalk.yellow('🔄 Resuming existing session. Payment link is available above if needed.'));
|
|
79
|
+
}
|
|
80
|
+
console.log('');
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
[STEPS.PAYMENT_COMPLETED]: ({ sessionId, vendors }) => {
|
|
84
|
+
console.log(chalk.green('✅ Payment successful!'));
|
|
85
|
+
console.log(`${chalk.gray('📋 Session ID:')} ${chalk.cyan(sessionId)}`);
|
|
86
|
+
console.log(`${chalk.gray('📦 Vendors:')} ${chalk.cyan(vendors.length)}`);
|
|
87
|
+
console.log('');
|
|
88
|
+
},
|
|
89
|
+
|
|
90
|
+
[STEPS.INSTALLATION_STARTING]: ({ vendors }) => {
|
|
91
|
+
console.log(chalk.yellow('📦 Step 2/4: Installing Website...'));
|
|
92
|
+
console.log(`${chalk.gray('📊 Installing')} ${chalk.cyan(vendors.length)} ${chalk.gray('services')}`);
|
|
93
|
+
console.log('');
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
[STEPS.INSTALLATION_COMPLETED]: ({ progress }) => {
|
|
97
|
+
console.log(chalk.green(`✅ Installation complete (${progress || 100}%)`));
|
|
98
|
+
console.log('');
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
[STEPS.SERVICE_STARTING]: ({ vendors }) => {
|
|
102
|
+
console.log(chalk.yellow('🚀 Step 3/4: Starting Website Services...'));
|
|
103
|
+
console.log(`${chalk.gray('🔧 Starting')} ${chalk.cyan(vendors.length)} ${chalk.gray('services')}`);
|
|
104
|
+
console.log('');
|
|
105
|
+
},
|
|
106
|
+
|
|
107
|
+
[STEPS.SERVICE_READY]: () => {
|
|
108
|
+
console.log(chalk.green('✅ Services started successfully'));
|
|
109
|
+
console.log('');
|
|
110
|
+
},
|
|
111
|
+
|
|
112
|
+
[STEPS.ACCESS_PREPARING]: () => {
|
|
113
|
+
console.log(chalk.yellow('🌐 Step 4/4: Getting Website URLs...'));
|
|
114
|
+
console.log('');
|
|
115
|
+
},
|
|
116
|
+
|
|
117
|
+
[STEPS.ACCESS_READY]: ({ appUrl, homeUrl, subscriptionUrl, dashboardUrl }) => {
|
|
118
|
+
console.log(chalk.green('🎉 Deployment completed successfully!\n'));
|
|
119
|
+
|
|
120
|
+
if (homeUrl || appUrl) {
|
|
121
|
+
console.log(`${chalk.gray('🏠 Website URL:')} ${chalk.cyan(homeUrl || appUrl)}`);
|
|
122
|
+
}
|
|
123
|
+
if (subscriptionUrl) {
|
|
124
|
+
console.log(`${chalk.gray('💳 Subscription URL:')} ${chalk.cyan(subscriptionUrl)}`);
|
|
125
|
+
}
|
|
126
|
+
if (dashboardUrl) {
|
|
127
|
+
console.log(`${chalk.gray('📊 Dashboard URL:')} ${chalk.cyan(dashboardUrl)}`);
|
|
128
|
+
}
|
|
129
|
+
console.log('');
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
|
|
133
|
+
onError: (deploymentError, step) => {
|
|
134
|
+
console.error(`${chalk.red('❌')} Deployment failed at ${chalk.yellow(step || 'unknown step')}:`);
|
|
135
|
+
console.error(` ${chalk.red(deploymentError.message)}`);
|
|
136
|
+
|
|
137
|
+
if (deploymentError.recovery?.suggestions) {
|
|
138
|
+
console.log(chalk.yellow('\n💡 Suggestions:'));
|
|
139
|
+
deploymentError.recovery.suggestions.forEach((suggestion) => {
|
|
140
|
+
console.log(` • ${suggestion}`);
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if (deploymentError.sessionId) {
|
|
145
|
+
console.log(chalk.blue(`\n🔄 To resume this deployment, use session ID: ${deploymentError.sessionId}`));
|
|
146
|
+
}
|
|
147
|
+
console.log('');
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
const { appUrl, homeUrl, subscriptionUrl, dashboardUrl, vendors } = result;
|
|
152
|
+
const token = vendors?.[0]?.token;
|
|
153
|
+
|
|
154
|
+
console.log(chalk.green('🎊 Deployment Summary:'));
|
|
155
|
+
console.log(chalk.gray('======================'));
|
|
156
|
+
console.log(`${chalk.gray('Status:')} ${chalk.green('SUCCESS')}`);
|
|
157
|
+
console.log(`${chalk.gray('Session ID:')} ${chalk.cyan(result.sessionId)}`);
|
|
158
|
+
console.log(`${chalk.gray('Vendors:')} ${chalk.cyan(vendors?.length || 0)}`);
|
|
159
|
+
if (token) {
|
|
160
|
+
console.log(`${chalk.gray('Token:')} ${chalk.cyan(token.slice(0, 10) + '...')}`);
|
|
161
|
+
}
|
|
162
|
+
console.log('');
|
|
163
|
+
|
|
164
|
+
return {
|
|
165
|
+
appUrl,
|
|
166
|
+
homeUrl,
|
|
167
|
+
dashboardUrl,
|
|
168
|
+
subscriptionUrl,
|
|
169
|
+
token,
|
|
170
|
+
sessionId: result.sessionId,
|
|
171
|
+
vendors: result.vendors,
|
|
172
|
+
};
|
|
173
|
+
} catch (error) {
|
|
174
|
+
console.error(chalk.red('\n❌ Deployment failed:'));
|
|
175
|
+
console.error(` ${error.message}`);
|
|
176
|
+
|
|
177
|
+
if (error.sessionId) {
|
|
178
|
+
console.log(chalk.blue(`\n🔄 To resume this deployment, use session ID: ${error.sessionId}`));
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
throw error;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// CLI Usage
|
|
186
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
187
|
+
const cachedCheckoutId = process.argv[2];
|
|
188
|
+
const cachedPaymentUrl = process.argv[3];
|
|
189
|
+
const paymentLinkKey = process.argv[4];
|
|
190
|
+
|
|
191
|
+
deployWebsite(cachedCheckoutId, cachedPaymentUrl, paymentLinkKey)
|
|
192
|
+
.then((result) => {
|
|
193
|
+
console.log(chalk.green('✅ Deployment completed successfully!'));
|
|
194
|
+
process.exit(0);
|
|
195
|
+
})
|
|
196
|
+
.catch((error) => {
|
|
197
|
+
console.error(chalk.red('❌ Deployment failed!'));
|
|
198
|
+
process.exit(1);
|
|
199
|
+
});
|
|
200
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "broker-client-nodejs-example",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Node.js example for Payment Kit Broker Client",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "deploy-example.mjs",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"start": "node deploy-example.mjs",
|
|
9
|
+
"deploy": "node deploy-example.mjs",
|
|
10
|
+
"deploy:resume": "node deploy-example.mjs $CACHED_CHECKOUT_ID $CACHED_PAYMENT_URL",
|
|
11
|
+
"deploy:custom": "node deploy-example.mjs '' '' CUSTOM_PAYMENT_LINK_ID"
|
|
12
|
+
},
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"@blocklet/payment-broker-client": "^1.0.0",
|
|
15
|
+
"chalk": "^5.3.0",
|
|
16
|
+
"open": "^10.1.0"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18.0.0"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"payment-kit",
|
|
23
|
+
"broker-client",
|
|
24
|
+
"deployment",
|
|
25
|
+
"nodejs",
|
|
26
|
+
"example"
|
|
27
|
+
],
|
|
28
|
+
"author": "ArcBlock",
|
|
29
|
+
"license": "MIT"
|
|
30
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ConfigProvider } from '../../core/interfaces';
|
|
2
|
+
import { BrokerConfig } from '../../core/types';
|
|
3
|
+
/**
|
|
4
|
+
* Browser configuration provider implementation
|
|
5
|
+
* Gets raw blocklet information from window.blocklet
|
|
6
|
+
*/
|
|
7
|
+
export declare class BrowserConfigProvider implements ConfigProvider {
|
|
8
|
+
private config;
|
|
9
|
+
constructor(config: BrokerConfig);
|
|
10
|
+
getBlockletInfo(): Promise<any>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/adapters/config/browser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIhD;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,cAAc;IAC9C,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAExC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC;CAiChC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable import/prefer-default-export */
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.BrowserConfigProvider = void 0;
|
|
8
|
+
const errors_1 = require("../../core/errors");
|
|
9
|
+
const logger_1 = __importDefault(require("../../core/logger"));
|
|
10
|
+
/**
|
|
11
|
+
* Browser configuration provider implementation
|
|
12
|
+
* Gets raw blocklet information from window.blocklet
|
|
13
|
+
*/
|
|
14
|
+
class BrowserConfigProvider {
|
|
15
|
+
constructor(config) {
|
|
16
|
+
this.config = config;
|
|
17
|
+
}
|
|
18
|
+
getBlockletInfo() {
|
|
19
|
+
return Promise.resolve().then(() => {
|
|
20
|
+
try {
|
|
21
|
+
// Get blocklet info from window.blocklet object
|
|
22
|
+
const { blocklet } = window;
|
|
23
|
+
if (!blocklet) {
|
|
24
|
+
throw new Error('window.blocklet is not available. Make sure you are running in a blocklet environment.');
|
|
25
|
+
}
|
|
26
|
+
logger_1.default.info('Blocklet info found from window.blocklet', { hasBlocklet: true });
|
|
27
|
+
return blocklet;
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
logger_1.default.error('Failed to get blocklet info from window.blocklet', { error: error.message });
|
|
31
|
+
throw (0, errors_1.createDeploymentError)(`Failed to get blocklet info from window.blocklet: ${error.message}. Please ensure you are running in a blocklet environment.`, 'VALIDATION_ERROR', {
|
|
32
|
+
step: 'creating_session',
|
|
33
|
+
details: { originalError: error },
|
|
34
|
+
recovery: {
|
|
35
|
+
canRetry: false,
|
|
36
|
+
suggestions: [
|
|
37
|
+
'Make sure you are running this in a blocklet environment',
|
|
38
|
+
'Check if window.blocklet is available',
|
|
39
|
+
'Verify the Payment Kit is properly configured',
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.BrowserConfigProvider = BrowserConfigProvider;
|
|
48
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/adapters/config/browser.ts"],"names":[],"mappings":";AAAA,iDAAiD;;;;;;AAIjD,8CAA0D;AAC1D,+DAAuC;AAEvC;;;GAGG;AACH,MAAa,qBAAqB;IAChC,YAAoB,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAE5C,eAAe;QACb,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YACjC,IAAI,CAAC;gBACH,gDAAgD;gBAChD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAa,CAAC;gBAEnC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAC;gBAC5G,CAAC;gBAED,gBAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/E,OAAO,QAAQ,CAAC;YAClB,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,gBAAM,CAAC,KAAK,CAAC,kDAAkD,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC3F,MAAM,IAAA,8BAAqB,EACzB,qDAAqD,KAAK,CAAC,OAAO,4DAA4D,EAC9H,kBAAkB,EAClB;oBACE,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE;oBACjC,QAAQ,EAAE;wBACR,QAAQ,EAAE,KAAK;wBACf,WAAW,EAAE;4BACX,0DAA0D;4BAC1D,uCAAuC;4BACvC,+CAA+C;yBAChD;qBACF;iBACF,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AApCD,sDAoCC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ConfigProvider } from '../../core/interfaces';
|
|
2
|
+
import { BrokerConfig } from '../../core/types';
|
|
3
|
+
/**
|
|
4
|
+
* Node.js configuration provider implementation
|
|
5
|
+
* Gets raw blocklet information from API endpoints
|
|
6
|
+
*/
|
|
7
|
+
export declare class NodeConfigProvider implements ConfigProvider {
|
|
8
|
+
private config;
|
|
9
|
+
private cachedBlockletInfo?;
|
|
10
|
+
constructor(config: BrokerConfig);
|
|
11
|
+
getBlockletInfo(): Promise<any>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/adapters/config/node.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAKhD;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IAG3C,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,kBAAkB,CAAC,CAAM;gBAEb,MAAM,EAAE,YAAY;IAElC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC;CAkDtC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable import/prefer-default-export */
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.NodeConfigProvider = void 0;
|
|
8
|
+
const utils_1 = require("../../core/utils");
|
|
9
|
+
const errors_1 = require("../../core/errors");
|
|
10
|
+
const logger_1 = __importDefault(require("../../core/logger"));
|
|
11
|
+
/**
|
|
12
|
+
* Node.js configuration provider implementation
|
|
13
|
+
* Gets raw blocklet information from API endpoints
|
|
14
|
+
*/
|
|
15
|
+
class NodeConfigProvider {
|
|
16
|
+
constructor(config) {
|
|
17
|
+
this.config = config;
|
|
18
|
+
}
|
|
19
|
+
async getBlockletInfo() {
|
|
20
|
+
if (this.cachedBlockletInfo) {
|
|
21
|
+
return this.cachedBlockletInfo;
|
|
22
|
+
}
|
|
23
|
+
logger_1.default.info('Getting blocklet info from baseUrl', { baseUrl: this.config.baseUrl });
|
|
24
|
+
try {
|
|
25
|
+
// Try to get info from /__blocklet__.js endpoint
|
|
26
|
+
const blockletInfoUrl = utils_1.urlUtils.join(this.config.baseUrl, '__blocklet__.js?type=json');
|
|
27
|
+
logger_1.default.info('Getting blocklet info from __blocklet__.js', { blockletInfoUrl });
|
|
28
|
+
const response = await utils_1.httpUtils.get(blockletInfoUrl);
|
|
29
|
+
if (response.PAYMENT_LINK_ID) {
|
|
30
|
+
this.cachedBlockletInfo = response;
|
|
31
|
+
logger_1.default.info('Blocklet info found from __blocklet__.js', { hasPaymentLinkId: true });
|
|
32
|
+
return this.cachedBlockletInfo;
|
|
33
|
+
}
|
|
34
|
+
// Fallback to env API if not found in blocklet info
|
|
35
|
+
const envUrl = utils_1.urlUtils.join(this.config.baseUrl, 'api/env');
|
|
36
|
+
const envResponse = await utils_1.httpUtils.get(envUrl);
|
|
37
|
+
if (envResponse.PAYMENT_LINK_ID) {
|
|
38
|
+
this.cachedBlockletInfo = envResponse;
|
|
39
|
+
logger_1.default.info('Blocklet info found from /api/env', { hasPaymentLinkId: true });
|
|
40
|
+
return this.cachedBlockletInfo;
|
|
41
|
+
}
|
|
42
|
+
throw new Error('PAYMENT_LINK_ID not found in any API endpoint');
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
logger_1.default.error('Failed to get blocklet info', { error });
|
|
46
|
+
throw (0, errors_1.createDeploymentError)(`Failed to get blocklet info from ${this.config.baseUrl}: ${error.message}`, 'VALIDATION_ERROR', {
|
|
47
|
+
step: 'creating_session',
|
|
48
|
+
details: { originalError: error },
|
|
49
|
+
recovery: {
|
|
50
|
+
canRetry: true,
|
|
51
|
+
suggestions: [
|
|
52
|
+
'Check if the baseUrl is correct and accessible',
|
|
53
|
+
'Verify the service is running and configured properly',
|
|
54
|
+
'Ensure PAYMENT_LINK_ID is set in the environment',
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.NodeConfigProvider = NodeConfigProvider;
|
|
62
|
+
//# sourceMappingURL=node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/adapters/config/node.ts"],"names":[],"mappings":";AAAA,iDAAiD;;;;;;AAIjD,4CAAuD;AACvD,8CAA0D;AAC1D,+DAAuC;AAEvC;;;GAGG;AACH,MAAa,kBAAkB;IAG7B,YAAoB,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAE5C,KAAK,CAAC,eAAe;QACnB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,kBAAkB,CAAC;QACjC,CAAC;QAED,gBAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAEpF,IAAI,CAAC;YACH,iDAAiD;YACjD,MAAM,eAAe,GAAG,gBAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;YACxF,gBAAM,CAAC,IAAI,CAAC,4CAA4C,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;YAC/E,MAAM,QAAQ,GAAG,MAAM,iBAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAEtD,IAAK,QAAgB,CAAC,eAAe,EAAE,CAAC;gBACtC,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;gBACnC,gBAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpF,OAAO,IAAI,CAAC,kBAAkB,CAAC;YACjC,CAAC;YAED,oDAAoD;YACpD,MAAM,MAAM,GAAG,gBAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC7D,MAAM,WAAW,GAAG,MAAM,iBAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAEhD,IAAK,WAAmB,CAAC,eAAe,EAAE,CAAC;gBACzC,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC;gBACtC,gBAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7E,OAAO,IAAI,CAAC,kBAAkB,CAAC;YACjC,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,gBAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACvD,MAAM,IAAA,8BAAqB,EACzB,oCAAoC,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,EAC3E,kBAAkB,EAClB;gBACE,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE;gBACjC,QAAQ,EAAE;oBACR,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE;wBACX,gDAAgD;wBAChD,uDAAuD;wBACvD,kDAAkD;qBACnD;iBACF;aACF,CACF,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAvDD,gDAuDC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { HttpClient } from '../../core/interfaces';
|
|
2
|
+
/**
|
|
3
|
+
* Browser HTTP client implementation
|
|
4
|
+
* Uses the passed api object (typically an axios instance)
|
|
5
|
+
*/
|
|
6
|
+
export declare class BrowserHttpClient implements HttpClient {
|
|
7
|
+
private api;
|
|
8
|
+
constructor(api?: any);
|
|
9
|
+
get(url: string): Promise<any>;
|
|
10
|
+
post(url: string, data: any): Promise<any>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/adapters/http/browser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,UAAU;IAClD,OAAO,CAAC,GAAG,CAAM;gBAEL,GAAG,CAAC,EAAE,GAAG;IA8Bf,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAK9B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;CAIjD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable import/prefer-default-export */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.BrowserHttpClient = void 0;
|
|
5
|
+
/**
|
|
6
|
+
* Browser HTTP client implementation
|
|
7
|
+
* Uses the passed api object (typically an axios instance)
|
|
8
|
+
*/
|
|
9
|
+
class BrowserHttpClient {
|
|
10
|
+
constructor(api) {
|
|
11
|
+
if (api) {
|
|
12
|
+
this.api = api;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
// Create simple fetch-compatible interface as fallback
|
|
16
|
+
this.api = {
|
|
17
|
+
get: async (url) => {
|
|
18
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
19
|
+
const response = await fetch(url, { method: 'GET', headers });
|
|
20
|
+
if (!response.ok) {
|
|
21
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
22
|
+
}
|
|
23
|
+
return { data: await response.json() };
|
|
24
|
+
},
|
|
25
|
+
post: async (url, data) => {
|
|
26
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
27
|
+
const response = await fetch(url, {
|
|
28
|
+
method: 'POST',
|
|
29
|
+
headers,
|
|
30
|
+
body: data ? JSON.stringify(data) : undefined,
|
|
31
|
+
});
|
|
32
|
+
if (!response.ok) {
|
|
33
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
34
|
+
}
|
|
35
|
+
return { data: await response.json() };
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async get(url) {
|
|
41
|
+
const response = await this.api.get(url);
|
|
42
|
+
return response.data;
|
|
43
|
+
}
|
|
44
|
+
async post(url, data) {
|
|
45
|
+
const response = await this.api.post(url, data);
|
|
46
|
+
return response.data;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.BrowserHttpClient = BrowserHttpClient;
|
|
50
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/adapters/http/browser.ts"],"names":[],"mappings":";AAAA,iDAAiD;;;AAIjD;;;GAGG;AACH,MAAa,iBAAiB;IAG5B,YAAY,GAAS;QACnB,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,uDAAuD;YACvD,IAAI,CAAC,GAAG,GAAG;gBACT,GAAG,EAAE,KAAK,EAAE,GAAW,EAAE,EAAE;oBACzB,MAAM,OAAO,GAAG,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;oBACvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;oBAC9D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;wBACjB,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;oBACrE,CAAC;oBACD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;gBACzC,CAAC;gBACD,IAAI,EAAE,KAAK,EAAE,GAAW,EAAE,IAAU,EAAE,EAAE;oBACtC,MAAM,OAAO,GAAG,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;oBACvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;wBAChC,MAAM,EAAE,MAAM;wBACd,OAAO;wBACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;qBAC9C,CAAC,CAAC;oBACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;wBACjB,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;oBACrE,CAAC;oBACD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;gBACzC,CAAC;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,IAAS;QAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAChD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;CACF;AA1CD,8CA0CC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { HttpClient } from '../../core/interfaces';
|
|
2
|
+
/**
|
|
3
|
+
* Node.js HTTP client implementation
|
|
4
|
+
* Uses httpUtils and automatically adds Authorization header
|
|
5
|
+
*/
|
|
6
|
+
export declare class NodeHttpClient implements HttpClient {
|
|
7
|
+
private authToken;
|
|
8
|
+
constructor(authToken: string);
|
|
9
|
+
get(url: string): Promise<any>;
|
|
10
|
+
post(url: string, data: any): Promise<any>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/adapters/http/node.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD;;;GAGG;AACH,qBAAa,cAAe,YAAW,UAAU;IACnC,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,MAAM;IAErC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAQ9B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;CAO3C"}
|