@stateset/acp-client 1.0.0
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/README.md +160 -0
- package/dist/grpc-client.d.ts +57 -0
- package/dist/grpc-client.js +168 -0
- package/dist/http-client.d.ts +48 -0
- package/dist/http-client.js +149 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.js +63 -0
- package/dist/types.d.ts +197 -0
- package/dist/types.js +30 -0
- package/package.json +45 -0
- package/proto/acp_handler/v1/acp_handler.proto +232 -0
- package/proto/acp_handler.proto +232 -0
package/README.md
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# @stateset/acp-client
|
|
2
|
+
|
|
3
|
+
Official Node.js client for the StateSet Agentic Commerce Protocol (ACP) Handler.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @stateset/acp-client
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
### HTTP Client
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import { AcpHttpClient } from '@stateset/acp-client';
|
|
17
|
+
|
|
18
|
+
const client = new AcpHttpClient({
|
|
19
|
+
baseUrl: 'http://localhost:8080',
|
|
20
|
+
apiKey: 'your_api_key',
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
// Create a checkout session
|
|
24
|
+
const session = await client.createCheckoutSession({
|
|
25
|
+
items: [
|
|
26
|
+
{ id: 'prod_123', quantity: 1 },
|
|
27
|
+
],
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// Update with customer info
|
|
31
|
+
await client.updateCheckoutSession(session.id, {
|
|
32
|
+
customer: {
|
|
33
|
+
billing_address: {
|
|
34
|
+
name: 'John Doe',
|
|
35
|
+
email: 'john@example.com',
|
|
36
|
+
line1: '123 Main St',
|
|
37
|
+
city: 'San Francisco',
|
|
38
|
+
region: 'CA',
|
|
39
|
+
postal_code: '94102',
|
|
40
|
+
country: 'US',
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// Complete checkout
|
|
46
|
+
const result = await client.completeCheckoutSession(session.id, {
|
|
47
|
+
payment: { delegated_token: 'tok_xxx' },
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
console.log('Order ID:', result.order.id);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### gRPC Client
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
import { AcpGrpcClient } from '@stateset/acp-client';
|
|
57
|
+
|
|
58
|
+
const client = new AcpGrpcClient({
|
|
59
|
+
grpcAddress: 'localhost:50051',
|
|
60
|
+
apiKey: 'your_api_key',
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
await client.connect();
|
|
64
|
+
|
|
65
|
+
const session = await client.createCheckoutSession({
|
|
66
|
+
items: [{ id: 'prod_123', quantity: 1 }],
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
client.close();
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## API Reference
|
|
73
|
+
|
|
74
|
+
### AcpHttpClient
|
|
75
|
+
|
|
76
|
+
| Method | Description |
|
|
77
|
+
|--------|-------------|
|
|
78
|
+
| `createCheckoutSession(request)` | Create a new checkout session |
|
|
79
|
+
| `getCheckoutSession(sessionId)` | Get an existing session |
|
|
80
|
+
| `updateCheckoutSession(sessionId, request)` | Update session details |
|
|
81
|
+
| `completeCheckoutSession(sessionId, request)` | Complete with payment |
|
|
82
|
+
| `cancelCheckoutSession(sessionId)` | Cancel a session |
|
|
83
|
+
| `delegatePayment(request)` | Create PSP vault token |
|
|
84
|
+
| `healthCheck()` | Check service health |
|
|
85
|
+
|
|
86
|
+
### AcpGrpcClient
|
|
87
|
+
|
|
88
|
+
| Method | Description |
|
|
89
|
+
|--------|-------------|
|
|
90
|
+
| `connect()` | Establish gRPC connection |
|
|
91
|
+
| `close()` | Close connection |
|
|
92
|
+
| `createCheckoutSession(request)` | Create a new checkout session |
|
|
93
|
+
| `getCheckoutSession(sessionId)` | Get an existing session |
|
|
94
|
+
| `updateCheckoutSession(request)` | Update session details |
|
|
95
|
+
| `completeCheckoutSession(request)` | Complete with payment |
|
|
96
|
+
| `cancelCheckoutSession(sessionId)` | Cancel a session |
|
|
97
|
+
| `delegatePayment(request)` | Create PSP vault token |
|
|
98
|
+
|
|
99
|
+
## Configuration
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
interface AcpClientConfig {
|
|
103
|
+
baseUrl?: string; // HTTP base URL (default: http://localhost:8080)
|
|
104
|
+
grpcAddress?: string; // gRPC address (default: localhost:50051)
|
|
105
|
+
apiKey?: string; // API key for authentication
|
|
106
|
+
timeout?: number; // Request timeout in ms (default: 30000)
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Error Handling
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
import { AcpHttpClient, AcpApiError } from '@stateset/acp-client';
|
|
114
|
+
|
|
115
|
+
try {
|
|
116
|
+
await client.createCheckoutSession({ items: [] });
|
|
117
|
+
} catch (error) {
|
|
118
|
+
if (error instanceof AcpApiError) {
|
|
119
|
+
console.error('Type:', error.type);
|
|
120
|
+
console.error('Code:', error.code);
|
|
121
|
+
console.error('Message:', error.message);
|
|
122
|
+
console.error('Param:', error.param);
|
|
123
|
+
console.error('Status:', error.statusCode);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Types
|
|
129
|
+
|
|
130
|
+
All TypeScript types are exported from the package:
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
import {
|
|
134
|
+
CheckoutSession,
|
|
135
|
+
CheckoutSessionStatus,
|
|
136
|
+
LineItem,
|
|
137
|
+
Money,
|
|
138
|
+
Customer,
|
|
139
|
+
Address,
|
|
140
|
+
Order,
|
|
141
|
+
// ... and more
|
|
142
|
+
} from '@stateset/acp-client';
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Development
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
# Install dependencies
|
|
149
|
+
npm install
|
|
150
|
+
|
|
151
|
+
# Build
|
|
152
|
+
npm run build
|
|
153
|
+
|
|
154
|
+
# Build proto files (for gRPC)
|
|
155
|
+
npm run build:proto
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## License
|
|
159
|
+
|
|
160
|
+
MIT
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StateSet ACP Handler - gRPC Client
|
|
3
|
+
*/
|
|
4
|
+
import * as grpc from '@grpc/grpc-js';
|
|
5
|
+
import { AcpClientConfig, CheckoutSession, CheckoutSessionWithOrder, CreateCheckoutSessionRequest, UpdateCheckoutSessionRequest, CompleteCheckoutSessionRequest, DelegatePaymentRequest, DelegatePaymentResponse } from './types';
|
|
6
|
+
export declare class AcpGrpcClient {
|
|
7
|
+
private client;
|
|
8
|
+
private address;
|
|
9
|
+
private apiKey;
|
|
10
|
+
constructor(config?: AcpClientConfig);
|
|
11
|
+
/**
|
|
12
|
+
* Initialize the gRPC client connection
|
|
13
|
+
*/
|
|
14
|
+
connect(): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Get metadata with authentication
|
|
17
|
+
*/
|
|
18
|
+
private getMetadata;
|
|
19
|
+
/**
|
|
20
|
+
* Wrap a gRPC call in a Promise
|
|
21
|
+
*/
|
|
22
|
+
private promisify;
|
|
23
|
+
/**
|
|
24
|
+
* Create a new checkout session
|
|
25
|
+
*/
|
|
26
|
+
createCheckoutSession(request: CreateCheckoutSessionRequest): Promise<CheckoutSession>;
|
|
27
|
+
/**
|
|
28
|
+
* Get an existing checkout session
|
|
29
|
+
*/
|
|
30
|
+
getCheckoutSession(sessionId: string): Promise<CheckoutSession>;
|
|
31
|
+
/**
|
|
32
|
+
* Update an existing checkout session
|
|
33
|
+
*/
|
|
34
|
+
updateCheckoutSession(request: UpdateCheckoutSessionRequest): Promise<CheckoutSession>;
|
|
35
|
+
/**
|
|
36
|
+
* Complete a checkout session with payment
|
|
37
|
+
*/
|
|
38
|
+
completeCheckoutSession(request: CompleteCheckoutSessionRequest): Promise<CheckoutSessionWithOrder>;
|
|
39
|
+
/**
|
|
40
|
+
* Cancel a checkout session
|
|
41
|
+
*/
|
|
42
|
+
cancelCheckoutSession(sessionId: string): Promise<CheckoutSession>;
|
|
43
|
+
/**
|
|
44
|
+
* Delegate payment (PSP vault token)
|
|
45
|
+
*/
|
|
46
|
+
delegatePayment(request: DelegatePaymentRequest): Promise<DelegatePaymentResponse>;
|
|
47
|
+
/**
|
|
48
|
+
* Close the gRPC connection
|
|
49
|
+
*/
|
|
50
|
+
close(): void;
|
|
51
|
+
}
|
|
52
|
+
export declare class AcpGrpcError extends Error {
|
|
53
|
+
readonly code: grpc.status;
|
|
54
|
+
readonly details: string;
|
|
55
|
+
readonly metadata?: grpc.Metadata;
|
|
56
|
+
constructor(error: grpc.ServiceError);
|
|
57
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* StateSet ACP Handler - gRPC Client
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.AcpGrpcError = exports.AcpGrpcClient = void 0;
|
|
40
|
+
const grpc = __importStar(require("@grpc/grpc-js"));
|
|
41
|
+
const protoLoader = __importStar(require("@grpc/proto-loader"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
// Proto loader options
|
|
44
|
+
const PROTO_LOADER_OPTIONS = {
|
|
45
|
+
keepCase: true,
|
|
46
|
+
longs: String,
|
|
47
|
+
enums: String,
|
|
48
|
+
defaults: true,
|
|
49
|
+
oneofs: true,
|
|
50
|
+
};
|
|
51
|
+
class AcpGrpcClient {
|
|
52
|
+
constructor(config = {}) {
|
|
53
|
+
this.address = config.grpcAddress || 'localhost:50051';
|
|
54
|
+
this.apiKey = config.apiKey || '';
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Initialize the gRPC client connection
|
|
58
|
+
*/
|
|
59
|
+
async connect() {
|
|
60
|
+
const protoPath = path.join(__dirname, '..', 'proto', 'acp_handler', 'v1', 'acp_handler.proto');
|
|
61
|
+
const packageDefinition = await protoLoader.load(protoPath, PROTO_LOADER_OPTIONS);
|
|
62
|
+
const protoDescriptor = grpc.loadPackageDefinition(packageDefinition);
|
|
63
|
+
const AcpHandler = protoDescriptor.acp_handler.v1.AcpHandler;
|
|
64
|
+
const credentials = grpc.credentials.createInsecure();
|
|
65
|
+
this.client = new AcpHandler(this.address, credentials);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get metadata with authentication
|
|
69
|
+
*/
|
|
70
|
+
getMetadata() {
|
|
71
|
+
const metadata = new grpc.Metadata();
|
|
72
|
+
if (this.apiKey) {
|
|
73
|
+
metadata.set('authorization', `Bearer ${this.apiKey}`);
|
|
74
|
+
}
|
|
75
|
+
return metadata;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Wrap a gRPC call in a Promise
|
|
79
|
+
*/
|
|
80
|
+
promisify(method, request) {
|
|
81
|
+
return new Promise((resolve, reject) => {
|
|
82
|
+
if (!this.client) {
|
|
83
|
+
reject(new Error('Client not connected. Call connect() first.'));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
this.client[method](request, this.getMetadata(), (err, response) => {
|
|
87
|
+
if (err) {
|
|
88
|
+
reject(new AcpGrpcError(err));
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
resolve(response);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Create a new checkout session
|
|
98
|
+
*/
|
|
99
|
+
async createCheckoutSession(request) {
|
|
100
|
+
return this.promisify('CreateCheckoutSession', request);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get an existing checkout session
|
|
104
|
+
*/
|
|
105
|
+
async getCheckoutSession(sessionId) {
|
|
106
|
+
return this.promisify('GetCheckoutSession', { session_id: sessionId });
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Update an existing checkout session
|
|
110
|
+
*/
|
|
111
|
+
async updateCheckoutSession(request) {
|
|
112
|
+
return this.promisify('UpdateCheckoutSession', request);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Complete a checkout session with payment
|
|
116
|
+
*/
|
|
117
|
+
async completeCheckoutSession(request) {
|
|
118
|
+
return this.promisify('CompleteCheckoutSession', request);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Cancel a checkout session
|
|
122
|
+
*/
|
|
123
|
+
async cancelCheckoutSession(sessionId) {
|
|
124
|
+
return this.promisify('CancelCheckoutSession', { session_id: sessionId });
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Delegate payment (PSP vault token)
|
|
128
|
+
*/
|
|
129
|
+
async delegatePayment(request) {
|
|
130
|
+
// Convert metadata object to JSON string for proto
|
|
131
|
+
const protoRequest = {
|
|
132
|
+
...request,
|
|
133
|
+
metadata_json: request.metadata ? JSON.stringify(request.metadata) : '',
|
|
134
|
+
payment_method: {
|
|
135
|
+
...request.payment_method,
|
|
136
|
+
metadata_json: request.payment_method.metadata
|
|
137
|
+
? JSON.stringify(request.payment_method.metadata)
|
|
138
|
+
: '',
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
const response = await this.promisify('DelegatePayment', protoRequest);
|
|
142
|
+
// Parse metadata JSON back to object
|
|
143
|
+
return {
|
|
144
|
+
...response,
|
|
145
|
+
metadata: response.metadata_json ? JSON.parse(response.metadata_json) : undefined,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Close the gRPC connection
|
|
150
|
+
*/
|
|
151
|
+
close() {
|
|
152
|
+
if (this.client) {
|
|
153
|
+
grpc.closeClient(this.client);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
exports.AcpGrpcClient = AcpGrpcClient;
|
|
158
|
+
class AcpGrpcError extends Error {
|
|
159
|
+
constructor(error) {
|
|
160
|
+
super(error.message);
|
|
161
|
+
this.name = 'AcpGrpcError';
|
|
162
|
+
this.code = error.code;
|
|
163
|
+
this.details = error.details;
|
|
164
|
+
this.metadata = error.metadata;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
exports.AcpGrpcError = AcpGrpcError;
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JwYy1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZ3JwYy1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCxvREFBc0M7QUFDdEMsZ0VBQWtEO0FBQ2xELDJDQUE2QjtBQVk3Qix1QkFBdUI7QUFDdkIsTUFBTSxvQkFBb0IsR0FBd0I7SUFDaEQsUUFBUSxFQUFFLElBQUk7SUFDZCxLQUFLLEVBQUUsTUFBTTtJQUNiLEtBQUssRUFBRSxNQUFNO0lBQ2IsUUFBUSxFQUFFLElBQUk7SUFDZCxNQUFNLEVBQUUsSUFBSTtDQUNiLENBQUM7QUFZRixNQUFhLGFBQWE7SUFLeEIsWUFBWSxTQUEwQixFQUFFO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxpQkFBaUIsQ0FBQztRQUN2RCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FDekIsU0FBUyxFQUNULElBQUksRUFDSixPQUFPLEVBQ1AsYUFBYSxFQUNiLElBQUksRUFDSixtQkFBbUIsQ0FDcEIsQ0FBQztRQUVGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBUSxDQUFDO1FBQzdFLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQztRQUU3RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FB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QUMsRUFBRTthQUNQO1NBQ0YsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBVyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUVqRixxQ0FBcUM7UUFDckMsT0FBTztZQUNMLEdBQUcsUUFBUTtZQUNYLFFBQVEsRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUNsRixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUE1SkQsc0NBNEpDO0FBRUQsTUFBYSxZQUFhLFNBQVEsS0FBSztJQUtyQyxZQUFZLEtBQXdCO1FBQ2xDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxjQUFjLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBWkQsb0NBWUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0YXRlU2V0IEFDUCBIYW5kbGVyIC0gZ1JQQyBDbGllbnRcbiAqL1xuXG5pbXBvcnQgKiBhcyBncnBjIGZyb20gJ0BncnBjL2dycGMtanMnO1xuaW1wb3J0ICogYXMgcHJvdG9Mb2FkZXIgZnJvbSAnQGdycGMvcHJvdG8tbG9hZGVyJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQge1xuICBBY3BDbGllbnRDb25maWcsXG4gIENoZWNrb3V0U2Vzc2lvbixcbiAgQ2hlY2tvdXRTZXNzaW9uV2l0aE9yZGVyLFxuICBDcmVhdGVDaGVja291dFNlc3Npb25SZXF1ZXN0LFxuICBVcGRhdGVDaGVja291dFNlc3Npb25SZXF1ZXN0LFxuICBDb21wbGV0ZUNoZWNrb3V0U2Vzc2lvblJlcXVlc3QsXG4gIERlbGVnYXRlUGF5bWVudFJlcXVlc3QsXG4gIERlbGVnYXRlUGF5bWVudFJlc3BvbnNlLFxufSBmcm9tICcuL3R5cGVzJztcblxuLy8gUHJvdG8gbG9hZGVyIG9wdGlvbnNcbmNvbnN0IFBST1RPX0xPQURFUl9PUFRJT05TOiBwcm90b0xvYWRlci5PcHRpb25zID0ge1xuICBrZWVwQ2FzZTogdHJ1ZSxcbiAgbG9uZ3M6IFN0cmluZyxcbiAgZW51bXM6IFN0cmluZyxcbiAgZGVmYXVsdHM6IHRydWUsXG4gIG9uZW9mczogdHJ1ZSxcbn07XG5cbi8vIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBnZW5lcmF0ZWQgZ1JQQyBjbGllbnRcbmludGVyZmFjZSBBY3BIYW5kbGVyQ2xpZW50IHtcbiAgQ3JlYXRlQ2hlY2tvdXRTZXNzaW9uOiBncnBjLkNsaWVudFVuYXJ5Q2FsbDtcbiAgR2V0Q2hlY2tvdXRTZXNzaW9uOiBncnBjLkNsaWVudFVuYXJ5Q2FsbDtcbiAgVXBkYXRlQ2hlY2tvdXRTZXNzaW9uOiBncnBjLkNsaWVudFVuYXJ5Q2FsbDtcbiAgQ29tcGxldGVDaGVja291dFNlc3Npb246IGdycGMuQ2xpZW50VW5hcnlDYWxsO1xuICBDYW5jZWxDaGVja291dFNlc3Npb246IGdycGMuQ2xpZW50VW5hcnlDYWxsO1xuICBEZWxlZ2F0ZVBheW1lbnQ6IGdycGMuQ2xpZW50VW5hcnlDYWxsO1xufVxuXG5leHBvcnQgY2xhc3MgQWNwR3JwY0NsaWVudCB7XG4gIHByaXZhdGUgY2xpZW50OiBhbnk7XG4gIHByaXZhdGUgYWRkcmVzczogc3RyaW5nO1xuICBwcml2YXRlIGFwaUtleTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQWNwQ2xpZW50Q29uZmlnID0ge30pIHtcbiAgICB0aGlzLmFkZHJlc3MgPSBjb25maWcuZ3JwY0FkZHJlc3MgfHwgJ2xvY2FsaG9zdDo1MDA1MSc7XG4gICAgdGhpcy5hcGlLZXkgPSBjb25maWcuYXBpS2V5IHx8ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGdSUEMgY2xpZW50IGNvbm5lY3Rpb25cbiAgICovXG4gIGFzeW5jIGNvbm5lY3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHJvdG9QYXRoID0gcGF0aC5qb2luKFxuICAgICAgX19kaXJuYW1lLFxuICAgICAgJy4uJyxcbiAgICAgICdwcm90bycsXG4gICAgICAnYWNwX2hhbmRsZXInLFxuICAgICAgJ3YxJyxcbiAgICAgICdhY3BfaGFuZGxlci5wcm90bydcbiAgICApO1xuXG4gICAgY29uc3QgcGFja2FnZURlZmluaXRpb24gPSBhd2FpdCBwcm90b0xvYWRlci5sb2FkKHByb3RvUGF0aCwgUFJPVE9fTE9BREVSX09QVElPTlMpO1xuICAgIGNvbnN0IHByb3RvRGVzY3JpcHRvciA9IGdycGMubG9hZFBhY2thZ2VEZWZpbml0aW9uKHBhY2thZ2VEZWZpbml0aW9uKSBhcyBhbnk7XG4gICAgY29uc3QgQWNwSGFuZGxlciA9IHByb3RvRGVzY3JpcHRvci5hY3BfaGFuZGxlci52MS5BY3BIYW5kbGVyO1xuXG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSBncnBjLmNyZWRlbnRpYWxzLmNyZWF0ZUluc2VjdXJlKCk7XG4gICAgdGhpcy5jbGllbnQgPSBuZXcgQWNwSGFuZGxlcih0aGlzLmFkZHJlc3MsIGNyZWRlbnRpYWxzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbWV0YWRhdGEgd2l0aCBhdXRoZW50aWNhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBnZXRNZXRhZGF0YSgpOiBncnBjLk1ldGFkYXRhIHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IG5ldyBncnBjLk1ldGFkYXRhKCk7XG4gICAgaWYgKHRoaXMuYXBpS2V5KSB7XG4gICAgICBtZXRhZGF0YS5zZXQoJ2F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dGhpcy5hcGlLZXl9YCk7XG4gICAgfVxuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwIGEgZ1JQQyBjYWxsIGluIGEgUHJvbWlzZVxuICAgKi9cbiAgcHJpdmF0ZSBwcm9taXNpZnk8VFJlcXVlc3QsIFRSZXNwb25zZT4oXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgcmVxdWVzdDogVFJlcXVlc3RcbiAgKTogUHJvbWlzZTxUUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNsaWVudCkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKCdDbGllbnQgbm90IGNvbm5lY3RlZC4gQ2FsbCBjb25uZWN0KCkgZmlyc3QuJykpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2xpZW50W21ldGhvZF0ocmVxdWVzdCwgdGhpcy5nZXRNZXRhZGF0YSgpLCAoZXJyOiBncnBjLlNlcnZpY2VFcnJvciB8IG51bGwsIHJlc3BvbnNlOiBUUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChuZXcgQWNwR3JwY0Vycm9yKGVycikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgY2hlY2tvdXQgc2Vzc2lvblxuICAgKi9cbiAgYXN5bmMgY3JlYXRlQ2hlY2tvdXRTZXNzaW9uKFxuICAgIHJlcXVlc3Q6IENyZWF0ZUNoZWNrb3V0U2Vzc2lvblJlcXVlc3RcbiAgKTogUHJvbWlzZTxDaGVja291dFNlc3Npb24+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9taXNpZnk8Q3JlYXRlQ2hlY2tvdXRTZXNzaW9uUmVxdWVzdCwgQ2hlY2tvdXRTZXNzaW9uPihcbiAgICAgICdDcmVhdGVDaGVja291dFNlc3Npb24nLFxuICAgICAgcmVxdWVzdFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGV4aXN0aW5nIGNoZWNrb3V0IHNlc3Npb25cbiAgICovXG4gIGFzeW5jIGdldENoZWNrb3V0U2Vzc2lvbihzZXNzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Q2hlY2tvdXRTZXNzaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMucHJvbWlzaWZ5PHsgc2Vzc2lvbl9pZDogc3RyaW5nIH0sIENoZWNrb3V0U2Vzc2lvbj4oXG4gICAgICAnR2V0Q2hlY2tvdXRTZXNzaW9uJyxcbiAgICAgIHsgc2Vzc2lvbl9pZDogc2Vzc2lvbklkIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhbiBleGlzdGluZyBjaGVja291dCBzZXNzaW9uXG4gICAqL1xuICBhc3luYyB1cGRhdGVDaGVja291dFNlc3Npb24oXG4gICAgcmVxdWVzdDogVXBkYXRlQ2hlY2tvdXRTZXNzaW9uUmVxdWVzdFxuICApOiBQcm9taXNlPENoZWNrb3V0U2Vzc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLnByb21pc2lmeTxVcGRhdGVDaGVja291dFNlc3Npb25SZXF1ZXN0LCBDaGVja291dFNlc3Npb24+KFxuICAgICAgJ1VwZGF0ZUNoZWNrb3V0U2Vzc2lvbicsXG4gICAgICByZXF1ZXN0XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBhIGNoZWNrb3V0IHNlc3Npb24gd2l0aCBwYXltZW50XG4gICAqL1xuICBhc3luYyBjb21wbGV0ZUNoZWNrb3V0U2Vzc2lvbihcbiAgICByZXF1ZXN0OiBDb21wbGV0ZUNoZWNrb3V0U2Vzc2lvblJlcXVlc3RcbiAgKTogUHJvbWlzZTxDaGVja291dFNlc3Npb25XaXRoT3JkZXI+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9taXNpZnk8Q29tcGxldGVDaGVja291dFNlc3Npb25SZXF1ZXN0LCBDaGVja291dFNlc3Npb25XaXRoT3JkZXI+KFxuICAgICAgJ0NvbXBsZXRlQ2hlY2tvdXRTZXNzaW9uJyxcbiAgICAgIHJlcXVlc3RcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbCBhIGNoZWNrb3V0IHNlc3Npb25cbiAgICovXG4gIGFzeW5jIGNhbmNlbENoZWNrb3V0U2Vzc2lvbihzZXNzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Q2hlY2tvdXRTZXNzaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMucHJvbWlzaWZ5PHsgc2Vzc2lvbl9pZDogc3RyaW5nIH0sIENoZWNrb3V0U2Vzc2lvbj4oXG4gICAgICAnQ2FuY2VsQ2hlY2tvdXRTZXNzaW9uJyxcbiAgICAgIHsgc2Vzc2lvbl9pZDogc2Vzc2lvbklkIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGVnYXRlIHBheW1lbnQgKFBTUCB2YXVsdCB0b2tlbilcbiAgICovXG4gIGFzeW5jIGRlbGVnYXRlUGF5bWVudChcbiAgICByZXF1ZXN0OiBEZWxlZ2F0ZVBheW1lbnRSZXF1ZXN0XG4gICk6IFByb21pc2U8RGVsZWdhdGVQYXltZW50UmVzcG9uc2U+IHtcbiAgICAvLyBDb252ZXJ0IG1ldGFkYXRhIG9iamVjdCB0byBKU09OIHN0cmluZyBmb3IgcHJvdG9cbiAgICBjb25zdCBwcm90b1JlcXVlc3QgPSB7XG4gICAgICAuLi5yZXF1ZXN0LFxuICAgICAgbWV0YWRhdGFfanNvbjogcmVxdWVzdC5tZXRhZGF0YSA/IEpTT04uc3RyaW5naWZ5KHJlcXVlc3QubWV0YWRhdGEpIDogJycsXG4gICAgICBwYXltZW50X21ldGhvZDoge1xuICAgICAgICAuLi5yZXF1ZXN0LnBheW1lbnRfbWV0aG9kLFxuICAgICAgICBtZXRhZGF0YV9qc29uOiByZXF1ZXN0LnBheW1lbnRfbWV0aG9kLm1ldGFkYXRhXG4gICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShyZXF1ZXN0LnBheW1lbnRfbWV0aG9kLm1ldGFkYXRhKVxuICAgICAgICAgIDogJycsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJvbWlzaWZ5PGFueSwgYW55PignRGVsZWdhdGVQYXltZW50JywgcHJvdG9SZXF1ZXN0KTtcblxuICAgIC8vIFBhcnNlIG1ldGFkYXRhIEpTT04gYmFjayB0byBvYmplY3RcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVzcG9uc2UsXG4gICAgICBtZXRhZGF0YTogcmVzcG9uc2UubWV0YWRhdGFfanNvbiA/IEpTT04ucGFyc2UocmVzcG9uc2UubWV0YWRhdGFfanNvbikgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSB0aGUgZ1JQQyBjb25uZWN0aW9uXG4gICAqL1xuICBjbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jbGllbnQpIHtcbiAgICAgIGdycGMuY2xvc2VDbGllbnQodGhpcy5jbGllbnQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWNwR3JwY0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgY29kZTogZ3JwYy5zdGF0dXM7XG4gIHB1YmxpYyByZWFkb25seSBkZXRhaWxzOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBtZXRhZGF0YT86IGdycGMuTWV0YWRhdGE7XG5cbiAgY29uc3RydWN0b3IoZXJyb3I6IGdycGMuU2VydmljZUVycm9yKSB7XG4gICAgc3VwZXIoZXJyb3IubWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0FjcEdycGNFcnJvcic7XG4gICAgdGhpcy5jb2RlID0gZXJyb3IuY29kZTtcbiAgICB0aGlzLmRldGFpbHMgPSBlcnJvci5kZXRhaWxzO1xuICAgIHRoaXMubWV0YWRhdGEgPSBlcnJvci5tZXRhZGF0YTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StateSet ACP Handler - HTTP REST Client
|
|
3
|
+
*/
|
|
4
|
+
import { AcpClientConfig, AcpError, CheckoutSession, CheckoutSessionWithOrder, CreateCheckoutSessionRequest, UpdateCheckoutSessionRequest, CompleteCheckoutSessionRequest, DelegatePaymentRequest, DelegatePaymentResponse } from './types';
|
|
5
|
+
export declare class AcpHttpClient {
|
|
6
|
+
private baseUrl;
|
|
7
|
+
private apiKey;
|
|
8
|
+
private timeout;
|
|
9
|
+
constructor(config?: AcpClientConfig);
|
|
10
|
+
private request;
|
|
11
|
+
/**
|
|
12
|
+
* Create a new checkout session
|
|
13
|
+
*/
|
|
14
|
+
createCheckoutSession(request: CreateCheckoutSessionRequest): Promise<CheckoutSession>;
|
|
15
|
+
/**
|
|
16
|
+
* Get an existing checkout session
|
|
17
|
+
*/
|
|
18
|
+
getCheckoutSession(sessionId: string): Promise<CheckoutSession>;
|
|
19
|
+
/**
|
|
20
|
+
* Update an existing checkout session
|
|
21
|
+
*/
|
|
22
|
+
updateCheckoutSession(sessionId: string, request: Omit<UpdateCheckoutSessionRequest, 'session_id'>): Promise<CheckoutSession>;
|
|
23
|
+
/**
|
|
24
|
+
* Complete a checkout session with payment
|
|
25
|
+
*/
|
|
26
|
+
completeCheckoutSession(sessionId: string, request: Omit<CompleteCheckoutSessionRequest, 'session_id'>): Promise<CheckoutSessionWithOrder>;
|
|
27
|
+
/**
|
|
28
|
+
* Cancel a checkout session
|
|
29
|
+
*/
|
|
30
|
+
cancelCheckoutSession(sessionId: string): Promise<CheckoutSession>;
|
|
31
|
+
/**
|
|
32
|
+
* Delegate payment (PSP vault token)
|
|
33
|
+
*/
|
|
34
|
+
delegatePayment(request: DelegatePaymentRequest): Promise<DelegatePaymentResponse>;
|
|
35
|
+
/**
|
|
36
|
+
* Health check
|
|
37
|
+
*/
|
|
38
|
+
healthCheck(): Promise<{
|
|
39
|
+
status: string;
|
|
40
|
+
}>;
|
|
41
|
+
}
|
|
42
|
+
export declare class AcpApiError extends Error {
|
|
43
|
+
readonly type: string;
|
|
44
|
+
readonly code: string;
|
|
45
|
+
readonly param?: string;
|
|
46
|
+
readonly statusCode: number;
|
|
47
|
+
constructor(error: AcpError, statusCode: number);
|
|
48
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* StateSet ACP Handler - HTTP REST Client
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.AcpApiError = exports.AcpHttpClient = void 0;
|
|
40
|
+
const https = __importStar(require("https"));
|
|
41
|
+
const http = __importStar(require("http"));
|
|
42
|
+
class AcpHttpClient {
|
|
43
|
+
constructor(config = {}) {
|
|
44
|
+
this.baseUrl = config.baseUrl || 'http://localhost:8080';
|
|
45
|
+
this.apiKey = config.apiKey || '';
|
|
46
|
+
this.timeout = config.timeout || 30000;
|
|
47
|
+
}
|
|
48
|
+
async request(method, path, body) {
|
|
49
|
+
const url = new URL(path, this.baseUrl);
|
|
50
|
+
const isHttps = url.protocol === 'https:';
|
|
51
|
+
const httpModule = isHttps ? https : http;
|
|
52
|
+
return new Promise((resolve, reject) => {
|
|
53
|
+
const options = {
|
|
54
|
+
method,
|
|
55
|
+
hostname: url.hostname,
|
|
56
|
+
port: url.port || (isHttps ? 443 : 80),
|
|
57
|
+
path: url.pathname + url.search,
|
|
58
|
+
headers: {
|
|
59
|
+
'Content-Type': 'application/json',
|
|
60
|
+
...(this.apiKey && { Authorization: `Bearer ${this.apiKey}` }),
|
|
61
|
+
},
|
|
62
|
+
timeout: this.timeout,
|
|
63
|
+
};
|
|
64
|
+
const req = httpModule.request(options, (res) => {
|
|
65
|
+
let data = '';
|
|
66
|
+
res.on('data', (chunk) => (data += chunk));
|
|
67
|
+
res.on('end', () => {
|
|
68
|
+
try {
|
|
69
|
+
const parsed = data ? JSON.parse(data) : {};
|
|
70
|
+
if (res.statusCode && res.statusCode >= 400) {
|
|
71
|
+
const error = parsed;
|
|
72
|
+
reject(new AcpApiError(error, res.statusCode));
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
resolve(parsed);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
reject(new Error(`Failed to parse response: ${data}`));
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
req.on('error', reject);
|
|
84
|
+
req.on('timeout', () => {
|
|
85
|
+
req.destroy();
|
|
86
|
+
reject(new Error('Request timeout'));
|
|
87
|
+
});
|
|
88
|
+
if (body) {
|
|
89
|
+
req.write(JSON.stringify(body));
|
|
90
|
+
}
|
|
91
|
+
req.end();
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Create a new checkout session
|
|
96
|
+
*/
|
|
97
|
+
async createCheckoutSession(request) {
|
|
98
|
+
return this.request('POST', '/checkout_sessions', request);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get an existing checkout session
|
|
102
|
+
*/
|
|
103
|
+
async getCheckoutSession(sessionId) {
|
|
104
|
+
return this.request('GET', `/checkout_sessions/${sessionId}`);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Update an existing checkout session
|
|
108
|
+
*/
|
|
109
|
+
async updateCheckoutSession(sessionId, request) {
|
|
110
|
+
return this.request('POST', `/checkout_sessions/${sessionId}`, request);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Complete a checkout session with payment
|
|
114
|
+
*/
|
|
115
|
+
async completeCheckoutSession(sessionId, request) {
|
|
116
|
+
return this.request('POST', `/checkout_sessions/${sessionId}/complete`, request);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Cancel a checkout session
|
|
120
|
+
*/
|
|
121
|
+
async cancelCheckoutSession(sessionId) {
|
|
122
|
+
return this.request('POST', `/checkout_sessions/${sessionId}/cancel`);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Delegate payment (PSP vault token)
|
|
126
|
+
*/
|
|
127
|
+
async delegatePayment(request) {
|
|
128
|
+
return this.request('POST', '/agentic_commerce/delegate_payment', request);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Health check
|
|
132
|
+
*/
|
|
133
|
+
async healthCheck() {
|
|
134
|
+
return this.request('GET', '/health');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.AcpHttpClient = AcpHttpClient;
|
|
138
|
+
class AcpApiError extends Error {
|
|
139
|
+
constructor(error, statusCode) {
|
|
140
|
+
super(error.message);
|
|
141
|
+
this.name = 'AcpApiError';
|
|
142
|
+
this.type = error.type;
|
|
143
|
+
this.code = error.code;
|
|
144
|
+
this.param = error.param;
|
|
145
|
+
this.statusCode = statusCode;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.AcpApiError = AcpApiError;
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaHR0cC1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCw2Q0FBK0I7QUFDL0IsMkNBQTZCO0FBYTdCLE1BQWEsYUFBYTtJQUt4QixZQUFZLFNBQTBCLEVBQUU7UUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLHVCQUF1QixDQUFDO1FBQ3pELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQztJQUN6QyxDQUFDO0lBRU8sS0FBSyxDQUFDLE9BQU8sQ0FDbkIsTUFBYyxFQUNkLElBQVksRUFDWixJQUFjO1FBRWQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQztRQUMxQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRTFDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsTUFBTSxPQUFPLEdBQXdCO2dCQUNuQyxNQUFNO2dCQUNOLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtnQkFDdEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLEVBQUUsR0FBRyxDQUFDLFFBQVEsR0FBRyxHQUFH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QixTQUFTLFdBQVcsRUFDMUMsT0FBTyxDQUNSLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMscUJBQXFCLENBQUMsU0FBaUI7UUFDM0MsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUNqQixNQUFNLEVBQ04sc0JBQXNCLFNBQVMsU0FBUyxDQUN6QyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FDbkIsT0FBK0I7UUFFL0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUNqQixNQUFNLEVBQ04sb0NBQW9DLEVBQ3BDLE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFdBQVc7UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQXFCLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1RCxDQUFDO0NBQ0Y7QUF6SUQsc0NBeUlDO0FBRUQsTUFBYSxXQUFZLFNBQVEsS0FBSztJQU1wQyxZQUFZLEtBQWUsRUFBRSxVQUFrQjtRQUM3QyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7Q0FDRjtBQWRELGtDQWNDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTdGF0ZVNldCBBQ1AgSGFuZGxlciAtIEhUVFAgUkVTVCBDbGllbnRcbiAqL1xuXG5pbXBvcnQgKiBhcyBodHRwcyBmcm9tICdodHRwcyc7XG5pbXBvcnQgKiBhcyBodHRwIGZyb20gJ2h0dHAnO1xuaW1wb3J0IHtcbiAgQWNwQ2xpZW50Q29uZmlnLFxuICBBY3BFcnJvcixcbiAgQ2hlY2tvdXRTZXNzaW9uLFxuICBDaGVja291dFNlc3Npb25XaXRoT3JkZXIsXG4gIENyZWF0ZUNoZWNrb3V0U2Vzc2lvblJlcXVlc3QsXG4gIFVwZGF0ZUNoZWNrb3V0U2Vzc2lvblJlcXVlc3QsXG4gIENvbXBsZXRlQ2hlY2tvdXRTZXNzaW9uUmVxdWVzdCxcbiAgRGVsZWdhdGVQYXltZW50UmVxdWVzdCxcbiAgRGVsZWdhdGVQYXltZW50UmVzcG9uc2UsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQWNwSHR0cENsaWVudCB7XG4gIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICBwcml2YXRlIGFwaUtleTogc3RyaW5nO1xuICBwcml2YXRlIHRpbWVvdXQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IEFjcENsaWVudENvbmZpZyA9IHt9KSB7XG4gICAgdGhpcy5iYXNlVXJsID0gY29uZmlnLmJhc2VVcmwgfHwgJ2h0dHA6Ly9sb2NhbGhvc3Q6ODA4MCc7XG4gICAgdGhpcy5hcGlLZXkgPSBjb25maWcuYXBpS2V5IHx8ICcnO1xuICAgIHRoaXMudGltZW91dCA9IGNvbmZpZy50aW1lb3V0IHx8IDMwMDAwO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0PFQ+KFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBib2R5PzogdW5rbm93blxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHBhdGgsIHRoaXMuYmFzZVVybCk7XG4gICAgY29uc3QgaXNIdHRwcyA9IHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gICAgY29uc3QgaHR0cE1vZHVsZSA9IGlzSHR0cHMgPyBodHRwcyA6IGh0dHA7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9uczogaHR0cC5SZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBob3N0bmFtZTogdXJsLmhvc3RuYW1lLFxuICAgICAgICBwb3J0OiB1cmwucG9ydCB8fCAoaXNIdHRwcyA/IDQ0MyA6IDgwKSxcbiAgICAgICAgcGF0aDogdXJsLnBhdGhuYW1lICsgdXJsLnNlYXJjaCxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgLi4uKHRoaXMuYXBpS2V5ICYmIHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMuYXBpS2V5fWAgfSksXG4gICAgICAgIH0sXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlcSA9IGh0dHBNb2R1bGUucmVxdWVzdChvcHRpb25zLCAocmVzKSA9PiB7XG4gICAgICAgIGxldCBkYXRhID0gJyc7XG4gICAgICAgIHJlcy5vbignZGF0YScsIChjaHVuaykgPT4gKGRhdGEgKz0gY2h1bmspKTtcbiAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IGRhdGEgPyBKU09OLnBhcnNlKGRhdGEpIDoge307XG4gICAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgJiYgcmVzLnN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcGFyc2VkIGFzIEFjcEVycm9yO1xuICAgICAgICAgICAgICByZWplY3QobmV3IEFjcEFwaUVycm9yKGVycm9yLCByZXMuc3RhdHVzQ29kZSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShwYXJzZWQgYXMgVCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIHJlc3BvbnNlOiAke2RhdGF9YCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmVxLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICByZXEub24oJ3RpbWVvdXQnLCAoKSA9PiB7XG4gICAgICAgIHJlcS5kZXN0cm95KCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1JlcXVlc3QgdGltZW91dCcpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoYm9keSkge1xuICAgICAgICByZXEud3JpdGUoSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuICAgICAgfVxuICAgICAgcmVxLmVuZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBjaGVja291dCBzZXNzaW9uXG4gICAqL1xuICBhc3luYyBjcmVhdGVDaGVja291dFNlc3Npb24oXG4gICAgcmVxdWVzdDogQ3JlYXRlQ2hlY2tvdXRTZXNzaW9uUmVxdWVzdFxuICApOiBQcm9taXNlPENoZWNrb3V0U2Vzc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3Q8Q2hlY2tvdXRTZXNzaW9uPignUE9TVCcsICcvY2hlY2tvdXRfc2Vzc2lvbnMnLCByZXF1ZXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gZXhpc3RpbmcgY2hlY2tvdXQgc2Vzc2lvblxuICAgKi9cbiAgYXN5bmMgZ2V0Q2hlY2tvdXRTZXNzaW9uKHNlc3Npb25JZDogc3RyaW5nKTogUHJvbWlzZTxDaGVja291dFNlc3Npb24+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PENoZWNrb3V0U2Vzc2lvbj4oJ0dFVCcsIGAvY2hlY2tvdXRfc2Vzc2lvbnMvJHtzZXNzaW9uSWR9YCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFuIGV4aXN0aW5nIGNoZWNrb3V0IHNlc3Npb25cbiAgICovXG4gIGFzeW5jIHVwZGF0ZUNoZWNrb3V0U2Vzc2lvbihcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICByZXF1ZXN0OiBPbWl0PFVwZGF0ZUNoZWNrb3V0U2Vzc2lvblJlcXVlc3QsICdzZXNzaW9uX2lkJz5cbiAgKTogUHJvbWlzZTxDaGVja291dFNlc3Npb24+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PENoZWNrb3V0U2Vzc2lvbj4oXG4gICAgICAnUE9TVCcsXG4gICAgICBgL2NoZWNrb3V0X3Nlc3Npb25zLyR7c2Vzc2lvbklkfWAsXG4gICAgICByZXF1ZXN0XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBhIGNoZWNrb3V0IHNlc3Npb24gd2l0aCBwYXltZW50XG4gICAqL1xuICBhc3luYyBjb21wbGV0ZUNoZWNrb3V0U2Vzc2lvbihcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICByZXF1ZXN0OiBPbWl0PENvbXBsZXRlQ2hlY2tvdXRTZXNzaW9uUmVxdWVzdCwgJ3Nlc3Npb25faWQnPlxuICApOiBQcm9taXNlPENoZWNrb3V0U2Vzc2lvbldpdGhPcmRlcj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3Q8Q2hlY2tvdXRTZXNzaW9uV2l0aE9yZGVyPihcbiAgICAgICdQT1NUJyxcbiAgICAgIGAvY2hlY2tvdXRfc2Vzc2lvbnMvJHtzZXNzaW9uSWR9L2NvbXBsZXRlYCxcbiAgICAgIHJlcXVlc3RcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbCBhIGNoZWNrb3V0IHNlc3Npb25cbiAgICovXG4gIGFzeW5jIGNhbmNlbENoZWNrb3V0U2Vzc2lvbihzZXNzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Q2hlY2tvdXRTZXNzaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdDxDaGVja291dFNlc3Npb24+KFxuICAgICAgJ1BPU1QnLFxuICAgICAgYC9jaGVja291dF9zZXNzaW9ucy8ke3Nlc3Npb25JZH0vY2FuY2VsYFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZWdhdGUgcGF5bWVudCAoUFNQIHZhdWx0IHRva2VuKVxuICAgKi9cbiAgYXN5bmMgZGVsZWdhdGVQYXltZW50KFxuICAgIHJlcXVlc3Q6IERlbGVnYXRlUGF5bWVudFJlcXVlc3RcbiAgKTogUHJvbWlzZTxEZWxlZ2F0ZVBheW1lbnRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3Q8RGVsZWdhdGVQYXltZW50UmVzcG9uc2U+KFxuICAgICAgJ1BPU1QnLFxuICAgICAgJy9hZ2VudGljX2NvbW1lcmNlL2RlbGVnYXRlX3BheW1lbnQnLFxuICAgICAgcmVxdWVzdFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSGVhbHRoIGNoZWNrXG4gICAqL1xuICBhc3luYyBoZWFsdGhDaGVjaygpOiBQcm9taXNlPHsgc3RhdHVzOiBzdHJpbmcgfT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3Q8eyBzdGF0dXM6IHN0cmluZyB9PignR0VUJywgJy9oZWFsdGgnKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWNwQXBpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBwYXJhbT86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1c0NvZGU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihlcnJvcjogQWNwRXJyb3IsIHN0YXR1c0NvZGU6IG51bWJlcikge1xuICAgIHN1cGVyKGVycm9yLm1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdBY3BBcGlFcnJvcic7XG4gICAgdGhpcy50eXBlID0gZXJyb3IudHlwZTtcbiAgICB0aGlzLmNvZGUgPSBlcnJvci5jb2RlO1xuICAgIHRoaXMucGFyYW0gPSBlcnJvci5wYXJhbTtcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuICB9XG59XG4iXX0=
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StateSet ACP Handler - Node.js Client
|
|
3
|
+
*
|
|
4
|
+
* Official Node.js bindings for the StateSet Agentic Commerce Protocol Handler.
|
|
5
|
+
* Supports both HTTP REST and gRPC transports.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { AcpHttpClient, AcpGrpcClient } from '@stateset/acp-client';
|
|
10
|
+
*
|
|
11
|
+
* // HTTP Client
|
|
12
|
+
* const httpClient = new AcpHttpClient({
|
|
13
|
+
* baseUrl: 'http://localhost:8080',
|
|
14
|
+
* apiKey: 'api_key_demo_123',
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* const session = await httpClient.createCheckoutSession({
|
|
18
|
+
* items: [{ id: 'prod_123', quantity: 1 }],
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* // gRPC Client
|
|
22
|
+
* const grpcClient = new AcpGrpcClient({
|
|
23
|
+
* grpcAddress: 'localhost:50051',
|
|
24
|
+
* apiKey: 'api_key_demo_123',
|
|
25
|
+
* });
|
|
26
|
+
* await grpcClient.connect();
|
|
27
|
+
*
|
|
28
|
+
* const session = await grpcClient.createCheckoutSession({
|
|
29
|
+
* items: [{ id: 'prod_123', quantity: 1 }],
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export { AcpHttpClient, AcpApiError } from './http-client';
|
|
34
|
+
export { AcpGrpcClient, AcpGrpcError } from './grpc-client';
|
|
35
|
+
export * from './types';
|
|
36
|
+
import { AcpHttpClient } from './http-client';
|
|
37
|
+
export default AcpHttpClient;
|