@payark/sdk-effect 0.1.0 → 0.1.2
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 +104 -54
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
A high-performance, functional TypeScript SDK for [PayArk](https://payark-public-demo.vercel.app/), built natively on the [Effect](https://effect.website/) ecosystem.
|
|
4
4
|
|
|
5
|
-
> **Native Effect** · **Type-safe** · **Runtime Validation** · **Zero Promise overhead**
|
|
5
|
+
> **Native Effect** · **Type-safe** · **Runtime Validation** · **Zero Promise overhead** · **Branded Types**
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -10,41 +10,42 @@ A high-performance, functional TypeScript SDK for [PayArk](https://payark-public
|
|
|
10
10
|
|
|
11
11
|
- **Effect-Native**: Built directly on `@effect/platform/HttpClient`. Returns pure `Effect` types without Promise wrappers.
|
|
12
12
|
- **Strict Validation**: All API responses are parsed and validated at runtime using `@effect/schema`, ensuring your data is exactly what you expect.
|
|
13
|
-
- **Branded Types**: IDs (e.g., `PaymentId`, `ProjectId`) are branded for compile-time safety, preventing mix-ups.
|
|
13
|
+
- **Branded Types**: IDs (e.g., `PaymentId`, `ProjectId`) are branded for compile-time safety, preventing mix-ups between different ID types.
|
|
14
14
|
- **Structured Errors**: Errors are typed as `PayArkEffectError`, a `TaggedError` that integrates seamlessly with `Effect.catchTag`.
|
|
15
|
+
- **Dependency Injection**: First-class support for `Layer` and `Context` for easy testing and modular architecture.
|
|
15
16
|
- **Tracing Ready**: Fully instrumented for observability with Effect's built-in tracing.
|
|
16
|
-
- **Zero-Dependency Core**: Lightweight and tree-shakeable.
|
|
17
17
|
|
|
18
18
|
## Installation
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
# bun
|
|
22
|
-
bun add @payark/sdk-effect
|
|
22
|
+
bun add @payark/sdk-effect effect @effect/schema @effect/platform
|
|
23
23
|
|
|
24
24
|
# npm
|
|
25
|
-
npm install @payark/sdk-effect
|
|
26
|
-
```
|
|
25
|
+
npm install @payark/sdk-effect effect @effect/schema @effect/platform
|
|
27
26
|
|
|
28
|
-
|
|
27
|
+
# pnpm
|
|
28
|
+
pnpm add @payark/sdk-effect effect @effect/schema @effect/platform
|
|
29
|
+
```
|
|
29
30
|
|
|
30
31
|
## Quick Start
|
|
31
32
|
|
|
33
|
+
### 1. Basic Usage
|
|
34
|
+
|
|
35
|
+
If you just want to run a script:
|
|
36
|
+
|
|
32
37
|
```ts
|
|
33
38
|
import { Effect, Console } from "effect";
|
|
34
39
|
import { PayArkEffect } from "@payark/sdk-effect";
|
|
35
40
|
|
|
36
|
-
//
|
|
37
|
-
const payark = new PayArkEffect({
|
|
38
|
-
apiKey: "sk_live_...",
|
|
39
|
-
// optional: baseUrl, timeout, etc.
|
|
40
|
-
});
|
|
41
|
+
// Initialize the client
|
|
42
|
+
const payark = new PayArkEffect({ apiKey: "sk_live_..." });
|
|
41
43
|
|
|
42
|
-
// 2. Define your program
|
|
43
44
|
const program = Effect.gen(function* (_) {
|
|
44
45
|
// Create a checkout session
|
|
45
46
|
const session = yield* _(
|
|
46
47
|
payark.checkout.create({
|
|
47
|
-
amount: 1000,
|
|
48
|
+
amount: 1000,
|
|
48
49
|
provider: "esewa",
|
|
49
50
|
returnUrl: "https://your-site.com/success",
|
|
50
51
|
}),
|
|
@@ -52,35 +53,76 @@ const program = Effect.gen(function* (_) {
|
|
|
52
53
|
|
|
53
54
|
yield* _(Console.log(`Checkout created: ${session.checkout_url}`));
|
|
54
55
|
|
|
55
|
-
//
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
// Access safely typed IDs
|
|
57
|
+
// session.id is type `CheckoutSessionId`, not just `string`
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// Run it
|
|
61
|
+
Effect.runPromise(program);
|
|
62
|
+
```
|
|
59
63
|
|
|
60
|
-
|
|
64
|
+
### 2. Dependency Injection (Recommended)
|
|
65
|
+
|
|
66
|
+
For larger applications, use the `PayArk` service tag and `PayArk.Live` layer.
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
import { Effect, Layer, Console } from "effect";
|
|
70
|
+
import { PayArk, PayArkConfig } from "@payark/sdk-effect";
|
|
71
|
+
|
|
72
|
+
// Define a program that depends on PayArk
|
|
73
|
+
const program = Effect.gen(function* (_) {
|
|
74
|
+
// Access the service from context
|
|
75
|
+
const client = yield* _(PayArk);
|
|
76
|
+
|
|
77
|
+
const payments = yield* _(client.payments.list({ limit: 5 }));
|
|
78
|
+
|
|
79
|
+
yield* _(Console.log(`Found ${payments.meta.total} payments`));
|
|
61
80
|
});
|
|
62
81
|
|
|
63
|
-
//
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
);
|
|
82
|
+
// Configure the layer
|
|
83
|
+
const PayArkLive = PayArk.Live({
|
|
84
|
+
apiKey: process.env.PAYARK_API_KEY!,
|
|
85
|
+
sandbox: true, // Enable sandbox mode
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
// Provide the layer to the program
|
|
89
|
+
const runnable = program.pipe(Effect.provide(PayArkLive));
|
|
90
|
+
|
|
91
|
+
Effect.runPromise(runnable);
|
|
71
92
|
```
|
|
72
93
|
|
|
73
|
-
##
|
|
94
|
+
## Configuration
|
|
95
|
+
|
|
96
|
+
The `PayArkConfig` object accepts:
|
|
97
|
+
|
|
98
|
+
| Option | Type | Default | Description |
|
|
99
|
+
| ------------ | --------- | ----------------------------------- | --------------------------------------------------- |
|
|
100
|
+
| `apiKey` | `string` | **Required** | Your project's secret key (`sk_...`). |
|
|
101
|
+
| `sandbox` | `boolean` | `false` | Enable Sandbox Mode for testing without real money. |
|
|
102
|
+
| `baseUrl` | `string` | `payark-api.codimo-dev.workers.dev` | Override for local dev or proxy. |
|
|
103
|
+
| `timeout` | `number` | `30000` | Request timeout in ms. |
|
|
104
|
+
| `maxRetries` | `number` | `2` | Automatic retries on 5xx errors. |
|
|
105
|
+
|
|
106
|
+
## Branded Types & Validation
|
|
107
|
+
|
|
108
|
+
This SDK uses **Branded Types** to prevent logic errors. You cannot accidentally pass a `PaymentId` to a function expecting a `ProjectId`.
|
|
109
|
+
|
|
110
|
+
```ts
|
|
111
|
+
import { PaymentId, ProjectId } from "@payark/sdk-effect";
|
|
112
|
+
|
|
113
|
+
const payId = "pay_123" as PaymentId; // In real code, this comes from API
|
|
114
|
+
const projId = "proj_456" as ProjectId;
|
|
74
115
|
|
|
75
|
-
|
|
116
|
+
// ❌ Compile Error: Argument of type 'ProjectId' is not assignable to parameter of type 'PaymentId'.
|
|
117
|
+
client.payments.retrieve(projId);
|
|
76
118
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
119
|
+
// ✅ Correct
|
|
120
|
+
client.payments.retrieve(payId);
|
|
121
|
+
```
|
|
80
122
|
|
|
81
|
-
###
|
|
123
|
+
### Schemas
|
|
82
124
|
|
|
83
|
-
We export all
|
|
125
|
+
We export all `@effect/schema` definitions for your use:
|
|
84
126
|
|
|
85
127
|
```ts
|
|
86
128
|
import { PaymentSchema } from "@payark/sdk-effect";
|
|
@@ -91,39 +133,47 @@ const isPayment = Schema.is(PaymentSchema);
|
|
|
91
133
|
|
|
92
134
|
## Error Handling
|
|
93
135
|
|
|
94
|
-
|
|
136
|
+
Errors are fully typed using `PayArkEffectError`. You can handle them exhaustively using `Effect.catchTag`.
|
|
95
137
|
|
|
96
138
|
```ts
|
|
139
|
+
import { Effect, Console } from "effect";
|
|
97
140
|
import { PayArkEffectError } from "@payark/sdk-effect";
|
|
98
|
-
import { Effect } from "effect";
|
|
99
|
-
|
|
100
|
-
// ...
|
|
101
141
|
|
|
102
142
|
program.pipe(
|
|
103
|
-
Effect.catchTag("PayArkEffectError", (
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
return Effect.die(error);
|
|
143
|
+
Effect.catchTag("PayArkEffectError", (err) => {
|
|
144
|
+
switch (err.code) {
|
|
145
|
+
case "authentication_error":
|
|
146
|
+
return Console.error("Check your API Key!");
|
|
147
|
+
case "rate_limit_error":
|
|
148
|
+
return Console.error("Slow down!");
|
|
149
|
+
default:
|
|
150
|
+
return Console.error(`Something went wrong: ${err.message}`);
|
|
151
|
+
}
|
|
113
152
|
}),
|
|
114
153
|
);
|
|
115
154
|
```
|
|
116
155
|
|
|
117
|
-
##
|
|
156
|
+
## Testing
|
|
118
157
|
|
|
119
|
-
|
|
158
|
+
Because the SDK is built on `Context` and `Layer`, mocking is trivial. You don't need network mocks; you can just provide a test layer.
|
|
120
159
|
|
|
121
160
|
```ts
|
|
122
|
-
import {
|
|
123
|
-
import {
|
|
161
|
+
import { PayArk } from "@payark/sdk-effect";
|
|
162
|
+
import { Layer } from "effect";
|
|
163
|
+
|
|
164
|
+
// Create a mock implementation
|
|
165
|
+
const MockPayArk = Layer.succeed(
|
|
166
|
+
PayArk,
|
|
167
|
+
{
|
|
168
|
+
checkout: {
|
|
169
|
+
create: () =>
|
|
170
|
+
Effect.succeed({ id: "cs_mock", checkout_url: "http://mock" }),
|
|
171
|
+
},
|
|
172
|
+
} as any, // Cast to partial implementation for simplicity
|
|
173
|
+
);
|
|
124
174
|
|
|
125
|
-
//
|
|
126
|
-
|
|
175
|
+
// Run test with mock
|
|
176
|
+
program.pipe(Effect.provide(MockPayArk));
|
|
127
177
|
```
|
|
128
178
|
|
|
129
179
|
## License
|
package/dist/index.js
CHANGED
|
@@ -17,10 +17,7 @@ var PayArkConfigService = class extends effect.Context.Tag("PayArkConfigService"
|
|
|
17
17
|
var request = (method, path, options) => effect.Effect.gen(function* (_) {
|
|
18
18
|
const config = yield* _(PayArkConfigService);
|
|
19
19
|
const client = yield* _(platform.HttpClient.HttpClient);
|
|
20
|
-
const baseUrl = (config.baseUrl ?? "https://api.
|
|
21
|
-
/\/+$/,
|
|
22
|
-
""
|
|
23
|
-
);
|
|
20
|
+
const baseUrl = (config.baseUrl ?? "https://payark-api.codimo-dev.workers.dev").replace(/\/+$/, "");
|
|
24
21
|
const url = new URL(`${baseUrl}${path}`);
|
|
25
22
|
if (options?.query) {
|
|
26
23
|
for (const [key, value] of Object.entries(options.query)) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/schemas.ts","../src/resources/checkout.ts","../src/resources/payments.ts","../src/resources/projects.ts","../src/index.ts"],"names":["Data","Context","Effect","HttpClient","SDK_VERSION","HttpClientRequest","Schema","Layer"],"mappings":"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","file":"index.js","sourcesContent":["import { Data } from \"effect\";\nimport type { PayArkErrorCode, PayArkErrorBody } from \"@payark/sdk\";\n\n/**\n * Effect-compatible error class for PayArk SDK.\n * Extends Data.TaggedError for easy matching in Effect.catchTag.\n */\nexport class PayArkEffectError extends Data.TaggedError(\"PayArkEffectError\")<{\n readonly message: string;\n readonly statusCode: number;\n readonly code: PayArkErrorCode;\n readonly raw?: PayArkErrorBody;\n}> {\n /** Human-readable representation for logging/debugging. */\n override toString(): string {\n return `[PayArkEffectError: ${this.code}] ${this.message} (HTTP ${this.statusCode})`;\n }\n}\n","import { Effect, Context } from \"effect\";\nimport { HttpClient, HttpClientRequest } from \"@effect/platform\";\nimport { PayArkEffectError } from \"./errors\";\nimport { SDK_VERSION } from \"@payark/sdk\";\nimport type { PayArkConfig, PayArkErrorCode } from \"@payark/sdk\";\n\n/**\n * Service tag for the PayArk configuration.\n */\nexport class PayArkConfigService extends Context.Tag(\"PayArkConfigService\")<\n PayArkConfigService,\n PayArkConfig\n>() {}\n\n/**\n * Executes an HTTP request using Effect and returns the JSON body or a PayArkEffectError.\n */\nexport const request = <T>(\n method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n path: string,\n options?: {\n readonly query?: Record<string, string | number | undefined>;\n readonly body?: any;\n readonly headers?: Record<string, string>;\n },\n): Effect.Effect<\n T,\n PayArkEffectError,\n PayArkConfigService | HttpClient.HttpClient\n> =>\n Effect.gen(function* (_) {\n const config = yield* _(PayArkConfigService);\n const client = yield* _(HttpClient.HttpClient);\n\n const baseUrl = (config.baseUrl ?? \"https://api.payark.com\").replace(\n /\\/+$/,\n \"\",\n );\n const url = new URL(`${baseUrl}${path}`);\n\n if (options?.query) {\n for (const [key, value] of Object.entries(options.query)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${config.apiKey}`,\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"User-Agent\": `payark-sdk-effect/${SDK_VERSION}`,\n ...options?.headers,\n };\n\n if (config.sandbox) {\n headers[\"x-sandbox-mode\"] = \"true\";\n }\n\n let req = HttpClientRequest.make(method)(url.toString()).pipe(\n HttpClientRequest.setHeaders(headers),\n );\n\n if (options?.body) {\n req = yield* _(\n HttpClientRequest.bodyJson(options.body)(req).pipe(\n Effect.mapError(\n (e) =>\n new PayArkEffectError({\n message: `Invalid request body: ${String(e)}`,\n statusCode: 400,\n code: \"invalid_request_error\",\n }),\n ),\n ),\n );\n }\n\n const response = yield* _(\n client.execute(req).pipe(\n Effect.mapError(\n (e) =>\n new PayArkEffectError({\n message: `Network error: ${e.message}`,\n statusCode: 0,\n code: \"connection_error\",\n }),\n ),\n ),\n );\n\n if (response.status >= 200 && response.status < 300) {\n if (response.status === 204) return {} as T;\n return (yield* _(\n response.json.pipe(\n Effect.mapError(\n (e) =>\n new PayArkEffectError({\n message: `Failed to parse response: ${String(e)}`,\n statusCode: response.status,\n code: \"api_error\",\n }),\n ),\n ),\n )) as T;\n }\n\n const errorBody: any = yield* _(\n response.json.pipe(\n Effect.catchAll(() => Effect.succeed({ error: undefined })),\n ),\n );\n\n return yield* _(\n Effect.fail(\n new PayArkEffectError({\n message:\n errorBody?.error || `Request failed with status ${response.status}`,\n statusCode: response.status,\n code: mapStatusToCode(response.status),\n raw: errorBody,\n }),\n ),\n );\n });\n\nfunction mapStatusToCode(status: number): PayArkErrorCode {\n if (status === 401) return \"authentication_error\";\n if (status === 403) return \"permission_error\";\n if (status === 400 || status === 422) return \"invalid_request_error\";\n if (status === 404) return \"not_found_error\";\n if (status === 429) return \"rate_limit_error\";\n if (status >= 500) return \"api_error\";\n return \"unknown_error\";\n}\n","import { Schema } from \"@effect/schema\";\n\n/**\n * Supported payment providers on the PayArk platform.\n */\nexport const ProviderSchema = Schema.Union(\n Schema.Literal(\n \"esewa\",\n \"khalti\",\n \"connectips\",\n \"imepay\",\n \"fonepay\",\n \"sandbox\",\n ),\n);\n\n// ── Branded Types ──────────────────────────────────────────────────────────\n\n/**\n * Branded Type for Checkout Session ID.\n */\nexport const CheckoutSessionId = Schema.String.pipe(\n Schema.brand(\"CheckoutSessionId\"),\n);\nexport type CheckoutSessionId = Schema.Schema.Type<typeof CheckoutSessionId>;\n\n/**\n * Branded Type for Payment ID.\n */\nexport const PaymentId = Schema.String.pipe(Schema.brand(\"PaymentId\"));\nexport type PaymentId = Schema.Schema.Type<typeof PaymentId>;\n\n/**\n * Branded Type for Project ID.\n */\nexport const ProjectId = Schema.String.pipe(Schema.brand(\"ProjectId\"));\nexport type ProjectId = Schema.Schema.Type<typeof ProjectId>;\n\n/**\n * Schema for creating a checkout session.\n */\nexport const CreateCheckoutSchema = Schema.Struct({\n amount: Schema.Number,\n currency: Schema.optionalWith(Schema.String, {\n default: () => \"NPR\" as const,\n }),\n provider: ProviderSchema,\n returnUrl: Schema.String,\n cancelUrl: Schema.optional(Schema.String),\n metadata: Schema.optional(\n Schema.Record({ key: Schema.String, value: Schema.Any }),\n ),\n});\n\n/**\n * Schema for a checkout session response.\n */\nexport const CheckoutSessionSchema = Schema.Struct({\n id: CheckoutSessionId,\n checkout_url: Schema.String,\n payment_method: Schema.Struct({\n type: ProviderSchema,\n url: Schema.optional(Schema.String),\n method: Schema.optional(\n Schema.Union(Schema.Literal(\"GET\"), Schema.Literal(\"POST\")),\n ),\n fields: Schema.optional(\n Schema.Record({ key: Schema.String, value: Schema.String }),\n ),\n }),\n});\n\n/**\n * Schema for a Payment response.\n */\nexport const PaymentSchema = Schema.Struct({\n id: PaymentId,\n project_id: ProjectId,\n amount: Schema.Number,\n currency: Schema.String,\n status: Schema.Union(\n Schema.Literal(\"pending\"),\n Schema.Literal(\"success\"),\n Schema.Literal(\"failed\"),\n ),\n provider_ref: Schema.optional(Schema.NullOr(Schema.String)),\n metadata_json: Schema.optional(\n Schema.NullOr(Schema.Record({ key: Schema.String, value: Schema.Any })),\n ),\n gateway_response: Schema.optional(\n Schema.NullOr(Schema.Record({ key: Schema.String, value: Schema.Any })),\n ),\n created_at: Schema.String,\n updated_at: Schema.optional(Schema.String),\n});\n\n/**\n * Schema for a Project response.\n */\nexport const ProjectSchema = Schema.Struct({\n id: ProjectId,\n name: Schema.String,\n api_key_secret: Schema.String,\n created_at: Schema.String,\n});\n\n/**\n * Higher-order schema for paginated responses.\n */\nexport const PaginatedResponseSchema = <A, I>(item: Schema.Schema<A, I>) =>\n Schema.Struct({\n data: Schema.Array(item),\n meta: Schema.Struct({\n total: Schema.NullOr(Schema.Number),\n limit: Schema.Number,\n offset: Schema.Number,\n }),\n });\n\n// ── Inferred Types ─────────────────────────────────────────────────────────\n\nexport type CheckoutSession = Schema.Schema.Type<typeof CheckoutSessionSchema>;\nexport type Payment = Schema.Schema.Type<typeof PaymentSchema>;\nexport type Project = Schema.Schema.Type<typeof ProjectSchema>;\nexport interface PaginatedResponse<T> {\n readonly data: ReadonlyArray<T>;\n readonly meta: {\n readonly total: number | null;\n readonly limit: number;\n readonly offset: number;\n };\n}\n","import { Effect } from \"effect\";\nimport { Schema } from \"@effect/schema\";\nimport { PayArkConfigService, request } from \"../http\";\nimport { CheckoutSessionSchema } from \"../schemas\";\nimport { PayArkEffectError } from \"../errors\";\nimport type { CreateCheckoutParams, PayArkConfig } from \"@payark/sdk\";\nimport type { CheckoutSession } from \"../schemas\";\nimport type { HttpClient } from \"@effect/platform\";\nimport type { ParseResult } from \"@effect/schema\";\n\n/**\n * Effect-based resource for PayArk Checkout.\n */\nexport class CheckoutEffect {\n constructor(private readonly config: PayArkConfig) {}\n\n /**\n * Create a new checkout session.\n *\n * @param params - Configuration for the checkout session.\n * @returns Effect that resolves to the created checkout session.\n */\n create(\n params: CreateCheckoutParams,\n ): Effect.Effect<\n CheckoutSession,\n PayArkEffectError | ParseResult.ParseError,\n HttpClient.HttpClient\n > {\n return request<unknown>(\"POST\", \"/v1/checkout\", { body: params }).pipe(\n Effect.flatMap(Schema.decodeUnknown(CheckoutSessionSchema)),\n Effect.provideService(PayArkConfigService, this.config),\n );\n }\n}\n","import { Effect } from \"effect\";\nimport { Schema } from \"@effect/schema\";\nimport { PayArkConfigService, request } from \"../http\";\nimport { PaymentSchema, PaginatedResponseSchema } from \"../schemas\";\nimport { PayArkEffectError } from \"../errors\";\nimport type { PayArkConfig, ListPaymentsParams } from \"@payark/sdk\";\nimport type { Payment, PaginatedResponse } from \"../schemas\";\nimport type { HttpClient } from \"@effect/platform\";\nimport type { ParseResult } from \"@effect/schema\";\n\n/**\n * Effect-based resource for PayArk Payments.\n */\nexport class PaymentsEffect {\n constructor(private readonly config: PayArkConfig) {}\n\n /**\n * List payments for the authenticated project.\n *\n * @param params - Optional pagination parameters.\n * @returns Effect that resolves to paginated payments.\n */\n list(\n params: ListPaymentsParams = {},\n ): Effect.Effect<\n PaginatedResponse<Payment>,\n PayArkEffectError | ParseResult.ParseError,\n HttpClient.HttpClient\n > {\n return request<unknown>(\"GET\", \"/v1/payments\", {\n query: {\n limit: params.limit,\n offset: params.offset,\n projectId: params.projectId,\n },\n }).pipe(\n Effect.flatMap(\n Schema.decodeUnknown(PaginatedResponseSchema(PaymentSchema)),\n ),\n Effect.provideService(PayArkConfigService, this.config),\n );\n }\n\n /**\n * Retrieve a single payment by its ID.\n *\n * @param id - The payment identifier.\n * @returns Effect that resolves to the payment object.\n */\n retrieve(\n id: string,\n ): Effect.Effect<\n Payment,\n PayArkEffectError | ParseResult.ParseError,\n HttpClient.HttpClient\n > {\n return request<unknown>(\n \"GET\",\n `/v1/payments/${encodeURIComponent(id)}`,\n ).pipe(\n Effect.flatMap(Schema.decodeUnknown(PaymentSchema)),\n Effect.provideService(PayArkConfigService, this.config),\n );\n }\n}\n","import { Effect } from \"effect\";\nimport { Schema } from \"@effect/schema\";\nimport { PayArkConfigService, request } from \"../http\";\nimport { ProjectSchema } from \"../schemas\";\nimport { PayArkEffectError } from \"../errors\";\nimport type { PayArkConfig } from \"@payark/sdk\";\nimport type { Project } from \"../schemas\";\nimport type { HttpClient } from \"@effect/platform\";\nimport type { ParseResult } from \"@effect/schema\";\n\n/**\n * Effect-based resource for PayArk Projects.\n */\nexport class ProjectsEffect {\n constructor(private readonly config: PayArkConfig) {}\n\n /**\n * List all projects belonging to the authenticated account.\n *\n * @returns Effect that resolves to an array of projects.\n */\n list(): Effect.Effect<\n readonly Project[],\n PayArkEffectError | ParseResult.ParseError,\n HttpClient.HttpClient\n > {\n return request<unknown>(\"GET\", \"/v1/projects\").pipe(\n Effect.flatMap(Schema.decodeUnknown(Schema.Array(ProjectSchema))),\n Effect.provideService(PayArkConfigService, this.config),\n );\n }\n}\n","import { Context, Layer } from \"effect\";\nimport { CheckoutEffect } from \"./resources/checkout\";\nimport { PaymentsEffect } from \"./resources/payments\";\nimport { ProjectsEffect } from \"./resources/projects\";\nimport type { PayArkConfig } from \"@payark/sdk\";\n\n/**\n * Main entry point for the Effect-based PayArk API.\n */\nexport class PayArkEffect {\n private _checkout?: CheckoutEffect;\n private _payments?: PaymentsEffect;\n private _projects?: ProjectsEffect;\n\n constructor(private readonly config: PayArkConfig) {}\n\n /**\n * Checkout sessions resource (Effect).\n */\n get checkout(): CheckoutEffect {\n if (!this._checkout) {\n this._checkout = new CheckoutEffect(this.config);\n }\n return this._checkout;\n }\n\n /**\n * Payments resource (Effect).\n */\n get payments(): PaymentsEffect {\n if (!this._payments) {\n this._payments = new PaymentsEffect(this.config);\n }\n return this._payments;\n }\n\n /**\n * Projects resource (Effect).\n */\n get projects(): ProjectsEffect {\n if (!this._projects) {\n this._projects = new ProjectsEffect(this.config);\n }\n return this._projects;\n }\n}\n\n/**\n * Service tag for the PayArk API.\n */\nexport class PayArk extends Context.Tag(\"@payark/sdk-effect/PayArk\")<\n PayArk,\n PayArkEffect\n>() {\n /**\n * Create a Layer that provides the PayArk service.\n */\n static readonly Live = (config: PayArkConfig) =>\n Layer.succeed(PayArk, new PayArkEffect(config));\n}\n\nexport { PayArkEffectError } from \"./errors\";\nexport * from \"./schemas\";\nexport type {\n PayArkConfig,\n CheckoutSession,\n Payment,\n PaymentStatus,\n Project,\n ListPaymentsParams,\n PaginatedResponse,\n PaginationMeta,\n Provider,\n WebhookEvent,\n WebhookEventType,\n PayArkErrorBody,\n PayArkErrorCode,\n} from \"@payark/sdk\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/schemas.ts","../src/resources/checkout.ts","../src/resources/payments.ts","../src/resources/projects.ts","../src/index.ts"],"names":["Data","Context","Effect","HttpClient","SDK_VERSION","HttpClientRequest","Schema","Layer"],"mappings":"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","file":"index.js","sourcesContent":["import { Data } from \"effect\";\nimport type { PayArkErrorCode, PayArkErrorBody } from \"@payark/sdk\";\n\n/**\n * Effect-compatible error class for PayArk SDK.\n * Extends Data.TaggedError for easy matching in Effect.catchTag.\n */\nexport class PayArkEffectError extends Data.TaggedError(\"PayArkEffectError\")<{\n readonly message: string;\n readonly statusCode: number;\n readonly code: PayArkErrorCode;\n readonly raw?: PayArkErrorBody;\n}> {\n /** Human-readable representation for logging/debugging. */\n override toString(): string {\n return `[PayArkEffectError: ${this.code}] ${this.message} (HTTP ${this.statusCode})`;\n }\n}\n","import { Effect, Context } from \"effect\";\nimport { HttpClient, HttpClientRequest } from \"@effect/platform\";\nimport { PayArkEffectError } from \"./errors\";\nimport { SDK_VERSION } from \"@payark/sdk\";\nimport type { PayArkConfig, PayArkErrorCode } from \"@payark/sdk\";\n\n/**\n * Service tag for the PayArk configuration.\n */\nexport class PayArkConfigService extends Context.Tag(\"PayArkConfigService\")<\n PayArkConfigService,\n PayArkConfig\n>() {}\n\n/**\n * Executes an HTTP request using Effect and returns the JSON body or a PayArkEffectError.\n */\nexport const request = <T>(\n method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n path: string,\n options?: {\n readonly query?: Record<string, string | number | undefined>;\n readonly body?: any;\n readonly headers?: Record<string, string>;\n },\n): Effect.Effect<\n T,\n PayArkEffectError,\n PayArkConfigService | HttpClient.HttpClient\n> =>\n Effect.gen(function* (_) {\n const config = yield* _(PayArkConfigService);\n const client = yield* _(HttpClient.HttpClient);\n\n const baseUrl = (\n config.baseUrl ?? \"https://payark-api.codimo-dev.workers.dev\"\n ).replace(/\\/+$/, \"\");\n const url = new URL(`${baseUrl}${path}`);\n\n if (options?.query) {\n for (const [key, value] of Object.entries(options.query)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${config.apiKey}`,\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"User-Agent\": `payark-sdk-effect/${SDK_VERSION}`,\n ...options?.headers,\n };\n\n if (config.sandbox) {\n headers[\"x-sandbox-mode\"] = \"true\";\n }\n\n let req = HttpClientRequest.make(method)(url.toString()).pipe(\n HttpClientRequest.setHeaders(headers),\n );\n\n if (options?.body) {\n req = yield* _(\n HttpClientRequest.bodyJson(options.body)(req).pipe(\n Effect.mapError(\n (e) =>\n new PayArkEffectError({\n message: `Invalid request body: ${String(e)}`,\n statusCode: 400,\n code: \"invalid_request_error\",\n }),\n ),\n ),\n );\n }\n\n const response = yield* _(\n client.execute(req).pipe(\n Effect.mapError(\n (e) =>\n new PayArkEffectError({\n message: `Network error: ${e.message}`,\n statusCode: 0,\n code: \"connection_error\",\n }),\n ),\n ),\n );\n\n if (response.status >= 200 && response.status < 300) {\n if (response.status === 204) return {} as T;\n return (yield* _(\n response.json.pipe(\n Effect.mapError(\n (e) =>\n new PayArkEffectError({\n message: `Failed to parse response: ${String(e)}`,\n statusCode: response.status,\n code: \"api_error\",\n }),\n ),\n ),\n )) as T;\n }\n\n const errorBody: any = yield* _(\n response.json.pipe(\n Effect.catchAll(() => Effect.succeed({ error: undefined })),\n ),\n );\n\n return yield* _(\n Effect.fail(\n new PayArkEffectError({\n message:\n errorBody?.error || `Request failed with status ${response.status}`,\n statusCode: response.status,\n code: mapStatusToCode(response.status),\n raw: errorBody,\n }),\n ),\n );\n });\n\nfunction mapStatusToCode(status: number): PayArkErrorCode {\n if (status === 401) return \"authentication_error\";\n if (status === 403) return \"permission_error\";\n if (status === 400 || status === 422) return \"invalid_request_error\";\n if (status === 404) return \"not_found_error\";\n if (status === 429) return \"rate_limit_error\";\n if (status >= 500) return \"api_error\";\n return \"unknown_error\";\n}\n","import { Schema } from \"@effect/schema\";\n\n/**\n * Supported payment providers on the PayArk platform.\n */\nexport const ProviderSchema = Schema.Union(\n Schema.Literal(\n \"esewa\",\n \"khalti\",\n \"connectips\",\n \"imepay\",\n \"fonepay\",\n \"sandbox\",\n ),\n);\n\n// ── Branded Types ──────────────────────────────────────────────────────────\n\n/**\n * Branded Type for Checkout Session ID.\n */\nexport const CheckoutSessionId = Schema.String.pipe(\n Schema.brand(\"CheckoutSessionId\"),\n);\nexport type CheckoutSessionId = Schema.Schema.Type<typeof CheckoutSessionId>;\n\n/**\n * Branded Type for Payment ID.\n */\nexport const PaymentId = Schema.String.pipe(Schema.brand(\"PaymentId\"));\nexport type PaymentId = Schema.Schema.Type<typeof PaymentId>;\n\n/**\n * Branded Type for Project ID.\n */\nexport const ProjectId = Schema.String.pipe(Schema.brand(\"ProjectId\"));\nexport type ProjectId = Schema.Schema.Type<typeof ProjectId>;\n\n/**\n * Schema for creating a checkout session.\n */\nexport const CreateCheckoutSchema = Schema.Struct({\n amount: Schema.Number,\n currency: Schema.optionalWith(Schema.String, {\n default: () => \"NPR\" as const,\n }),\n provider: ProviderSchema,\n returnUrl: Schema.String,\n cancelUrl: Schema.optional(Schema.String),\n metadata: Schema.optional(\n Schema.Record({ key: Schema.String, value: Schema.Any }),\n ),\n});\n\n/**\n * Schema for a checkout session response.\n */\nexport const CheckoutSessionSchema = Schema.Struct({\n id: CheckoutSessionId,\n checkout_url: Schema.String,\n payment_method: Schema.Struct({\n type: ProviderSchema,\n url: Schema.optional(Schema.String),\n method: Schema.optional(\n Schema.Union(Schema.Literal(\"GET\"), Schema.Literal(\"POST\")),\n ),\n fields: Schema.optional(\n Schema.Record({ key: Schema.String, value: Schema.String }),\n ),\n }),\n});\n\n/**\n * Schema for a Payment response.\n */\nexport const PaymentSchema = Schema.Struct({\n id: PaymentId,\n project_id: ProjectId,\n amount: Schema.Number,\n currency: Schema.String,\n status: Schema.Union(\n Schema.Literal(\"pending\"),\n Schema.Literal(\"success\"),\n Schema.Literal(\"failed\"),\n ),\n provider_ref: Schema.optional(Schema.NullOr(Schema.String)),\n metadata_json: Schema.optional(\n Schema.NullOr(Schema.Record({ key: Schema.String, value: Schema.Any })),\n ),\n gateway_response: Schema.optional(\n Schema.NullOr(Schema.Record({ key: Schema.String, value: Schema.Any })),\n ),\n created_at: Schema.String,\n updated_at: Schema.optional(Schema.String),\n});\n\n/**\n * Schema for a Project response.\n */\nexport const ProjectSchema = Schema.Struct({\n id: ProjectId,\n name: Schema.String,\n api_key_secret: Schema.String,\n created_at: Schema.String,\n});\n\n/**\n * Higher-order schema for paginated responses.\n */\nexport const PaginatedResponseSchema = <A, I>(item: Schema.Schema<A, I>) =>\n Schema.Struct({\n data: Schema.Array(item),\n meta: Schema.Struct({\n total: Schema.NullOr(Schema.Number),\n limit: Schema.Number,\n offset: Schema.Number,\n }),\n });\n\n// ── Inferred Types ─────────────────────────────────────────────────────────\n\nexport type CheckoutSession = Schema.Schema.Type<typeof CheckoutSessionSchema>;\nexport type Payment = Schema.Schema.Type<typeof PaymentSchema>;\nexport type Project = Schema.Schema.Type<typeof ProjectSchema>;\nexport interface PaginatedResponse<T> {\n readonly data: ReadonlyArray<T>;\n readonly meta: {\n readonly total: number | null;\n readonly limit: number;\n readonly offset: number;\n };\n}\n","import { Effect } from \"effect\";\nimport { Schema } from \"@effect/schema\";\nimport { PayArkConfigService, request } from \"../http\";\nimport { CheckoutSessionSchema } from \"../schemas\";\nimport { PayArkEffectError } from \"../errors\";\nimport type { CreateCheckoutParams, PayArkConfig } from \"@payark/sdk\";\nimport type { CheckoutSession } from \"../schemas\";\nimport type { HttpClient } from \"@effect/platform\";\nimport type { ParseResult } from \"@effect/schema\";\n\n/**\n * Effect-based resource for PayArk Checkout.\n */\nexport class CheckoutEffect {\n constructor(private readonly config: PayArkConfig) {}\n\n /**\n * Create a new checkout session.\n *\n * @param params - Configuration for the checkout session.\n * @returns Effect that resolves to the created checkout session.\n */\n create(\n params: CreateCheckoutParams,\n ): Effect.Effect<\n CheckoutSession,\n PayArkEffectError | ParseResult.ParseError,\n HttpClient.HttpClient\n > {\n return request<unknown>(\"POST\", \"/v1/checkout\", { body: params }).pipe(\n Effect.flatMap(Schema.decodeUnknown(CheckoutSessionSchema)),\n Effect.provideService(PayArkConfigService, this.config),\n );\n }\n}\n","import { Effect } from \"effect\";\nimport { Schema } from \"@effect/schema\";\nimport { PayArkConfigService, request } from \"../http\";\nimport { PaymentSchema, PaginatedResponseSchema } from \"../schemas\";\nimport { PayArkEffectError } from \"../errors\";\nimport type { PayArkConfig, ListPaymentsParams } from \"@payark/sdk\";\nimport type { Payment, PaginatedResponse } from \"../schemas\";\nimport type { HttpClient } from \"@effect/platform\";\nimport type { ParseResult } from \"@effect/schema\";\n\n/**\n * Effect-based resource for PayArk Payments.\n */\nexport class PaymentsEffect {\n constructor(private readonly config: PayArkConfig) {}\n\n /**\n * List payments for the authenticated project.\n *\n * @param params - Optional pagination parameters.\n * @returns Effect that resolves to paginated payments.\n */\n list(\n params: ListPaymentsParams = {},\n ): Effect.Effect<\n PaginatedResponse<Payment>,\n PayArkEffectError | ParseResult.ParseError,\n HttpClient.HttpClient\n > {\n return request<unknown>(\"GET\", \"/v1/payments\", {\n query: {\n limit: params.limit,\n offset: params.offset,\n projectId: params.projectId,\n },\n }).pipe(\n Effect.flatMap(\n Schema.decodeUnknown(PaginatedResponseSchema(PaymentSchema)),\n ),\n Effect.provideService(PayArkConfigService, this.config),\n );\n }\n\n /**\n * Retrieve a single payment by its ID.\n *\n * @param id - The payment identifier.\n * @returns Effect that resolves to the payment object.\n */\n retrieve(\n id: string,\n ): Effect.Effect<\n Payment,\n PayArkEffectError | ParseResult.ParseError,\n HttpClient.HttpClient\n > {\n return request<unknown>(\n \"GET\",\n `/v1/payments/${encodeURIComponent(id)}`,\n ).pipe(\n Effect.flatMap(Schema.decodeUnknown(PaymentSchema)),\n Effect.provideService(PayArkConfigService, this.config),\n );\n }\n}\n","import { Effect } from \"effect\";\nimport { Schema } from \"@effect/schema\";\nimport { PayArkConfigService, request } from \"../http\";\nimport { ProjectSchema } from \"../schemas\";\nimport { PayArkEffectError } from \"../errors\";\nimport type { PayArkConfig } from \"@payark/sdk\";\nimport type { Project } from \"../schemas\";\nimport type { HttpClient } from \"@effect/platform\";\nimport type { ParseResult } from \"@effect/schema\";\n\n/**\n * Effect-based resource for PayArk Projects.\n */\nexport class ProjectsEffect {\n constructor(private readonly config: PayArkConfig) {}\n\n /**\n * List all projects belonging to the authenticated account.\n *\n * @returns Effect that resolves to an array of projects.\n */\n list(): Effect.Effect<\n readonly Project[],\n PayArkEffectError | ParseResult.ParseError,\n HttpClient.HttpClient\n > {\n return request<unknown>(\"GET\", \"/v1/projects\").pipe(\n Effect.flatMap(Schema.decodeUnknown(Schema.Array(ProjectSchema))),\n Effect.provideService(PayArkConfigService, this.config),\n );\n }\n}\n","import { Context, Layer } from \"effect\";\nimport { CheckoutEffect } from \"./resources/checkout\";\nimport { PaymentsEffect } from \"./resources/payments\";\nimport { ProjectsEffect } from \"./resources/projects\";\nimport type { PayArkConfig } from \"@payark/sdk\";\n\n/**\n * Main entry point for the Effect-based PayArk API.\n */\nexport class PayArkEffect {\n private _checkout?: CheckoutEffect;\n private _payments?: PaymentsEffect;\n private _projects?: ProjectsEffect;\n\n constructor(private readonly config: PayArkConfig) {}\n\n /**\n * Checkout sessions resource (Effect).\n */\n get checkout(): CheckoutEffect {\n if (!this._checkout) {\n this._checkout = new CheckoutEffect(this.config);\n }\n return this._checkout;\n }\n\n /**\n * Payments resource (Effect).\n */\n get payments(): PaymentsEffect {\n if (!this._payments) {\n this._payments = new PaymentsEffect(this.config);\n }\n return this._payments;\n }\n\n /**\n * Projects resource (Effect).\n */\n get projects(): ProjectsEffect {\n if (!this._projects) {\n this._projects = new ProjectsEffect(this.config);\n }\n return this._projects;\n }\n}\n\n/**\n * Service tag for the PayArk API.\n */\nexport class PayArk extends Context.Tag(\"@payark/sdk-effect/PayArk\")<\n PayArk,\n PayArkEffect\n>() {\n /**\n * Create a Layer that provides the PayArk service.\n */\n static readonly Live = (config: PayArkConfig) =>\n Layer.succeed(PayArk, new PayArkEffect(config));\n}\n\nexport { PayArkEffectError } from \"./errors\";\nexport * from \"./schemas\";\nexport type {\n PayArkConfig,\n CheckoutSession,\n Payment,\n PaymentStatus,\n Project,\n ListPaymentsParams,\n PaginatedResponse,\n PaginationMeta,\n Provider,\n WebhookEvent,\n WebhookEventType,\n PayArkErrorBody,\n PayArkErrorCode,\n} from \"@payark/sdk\";\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -15,10 +15,7 @@ var PayArkConfigService = class extends Context.Tag("PayArkConfigService")() {
|
|
|
15
15
|
var request = (method, path, options) => Effect.gen(function* (_) {
|
|
16
16
|
const config = yield* _(PayArkConfigService);
|
|
17
17
|
const client = yield* _(HttpClient.HttpClient);
|
|
18
|
-
const baseUrl = (config.baseUrl ?? "https://api.
|
|
19
|
-
/\/+$/,
|
|
20
|
-
""
|
|
21
|
-
);
|
|
18
|
+
const baseUrl = (config.baseUrl ?? "https://payark-api.codimo-dev.workers.dev").replace(/\/+$/, "");
|
|
22
19
|
const url = new URL(`${baseUrl}${path}`);
|
|
23
20
|
if (options?.query) {
|
|
24
21
|
for (const [key, value] of Object.entries(options.query)) {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/schemas.ts","../src/resources/checkout.ts","../src/resources/payments.ts","../src/resources/projects.ts","../src/index.ts"],"names":["Effect","Schema","Context"],"mappings":"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","file":"index.mjs","sourcesContent":["import { Data } from \"effect\";\nimport type { PayArkErrorCode, PayArkErrorBody } from \"@payark/sdk\";\n\n/**\n * Effect-compatible error class for PayArk SDK.\n * Extends Data.TaggedError for easy matching in Effect.catchTag.\n */\nexport class PayArkEffectError extends Data.TaggedError(\"PayArkEffectError\")<{\n readonly message: string;\n readonly statusCode: number;\n readonly code: PayArkErrorCode;\n readonly raw?: PayArkErrorBody;\n}> {\n /** Human-readable representation for logging/debugging. */\n override toString(): string {\n return `[PayArkEffectError: ${this.code}] ${this.message} (HTTP ${this.statusCode})`;\n }\n}\n","import { Effect, Context } from \"effect\";\nimport { HttpClient, HttpClientRequest } from \"@effect/platform\";\nimport { PayArkEffectError } from \"./errors\";\nimport { SDK_VERSION } from \"@payark/sdk\";\nimport type { PayArkConfig, PayArkErrorCode } from \"@payark/sdk\";\n\n/**\n * Service tag for the PayArk configuration.\n */\nexport class PayArkConfigService extends Context.Tag(\"PayArkConfigService\")<\n PayArkConfigService,\n PayArkConfig\n>() {}\n\n/**\n * Executes an HTTP request using Effect and returns the JSON body or a PayArkEffectError.\n */\nexport const request = <T>(\n method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n path: string,\n options?: {\n readonly query?: Record<string, string | number | undefined>;\n readonly body?: any;\n readonly headers?: Record<string, string>;\n },\n): Effect.Effect<\n T,\n PayArkEffectError,\n PayArkConfigService | HttpClient.HttpClient\n> =>\n Effect.gen(function* (_) {\n const config = yield* _(PayArkConfigService);\n const client = yield* _(HttpClient.HttpClient);\n\n const baseUrl = (config.baseUrl ?? \"https://api.payark.com\").replace(\n /\\/+$/,\n \"\",\n );\n const url = new URL(`${baseUrl}${path}`);\n\n if (options?.query) {\n for (const [key, value] of Object.entries(options.query)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${config.apiKey}`,\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"User-Agent\": `payark-sdk-effect/${SDK_VERSION}`,\n ...options?.headers,\n };\n\n if (config.sandbox) {\n headers[\"x-sandbox-mode\"] = \"true\";\n }\n\n let req = HttpClientRequest.make(method)(url.toString()).pipe(\n HttpClientRequest.setHeaders(headers),\n );\n\n if (options?.body) {\n req = yield* _(\n HttpClientRequest.bodyJson(options.body)(req).pipe(\n Effect.mapError(\n (e) =>\n new PayArkEffectError({\n message: `Invalid request body: ${String(e)}`,\n statusCode: 400,\n code: \"invalid_request_error\",\n }),\n ),\n ),\n );\n }\n\n const response = yield* _(\n client.execute(req).pipe(\n Effect.mapError(\n (e) =>\n new PayArkEffectError({\n message: `Network error: ${e.message}`,\n statusCode: 0,\n code: \"connection_error\",\n }),\n ),\n ),\n );\n\n if (response.status >= 200 && response.status < 300) {\n if (response.status === 204) return {} as T;\n return (yield* _(\n response.json.pipe(\n Effect.mapError(\n (e) =>\n new PayArkEffectError({\n message: `Failed to parse response: ${String(e)}`,\n statusCode: response.status,\n code: \"api_error\",\n }),\n ),\n ),\n )) as T;\n }\n\n const errorBody: any = yield* _(\n response.json.pipe(\n Effect.catchAll(() => Effect.succeed({ error: undefined })),\n ),\n );\n\n return yield* _(\n Effect.fail(\n new PayArkEffectError({\n message:\n errorBody?.error || `Request failed with status ${response.status}`,\n statusCode: response.status,\n code: mapStatusToCode(response.status),\n raw: errorBody,\n }),\n ),\n );\n });\n\nfunction mapStatusToCode(status: number): PayArkErrorCode {\n if (status === 401) return \"authentication_error\";\n if (status === 403) return \"permission_error\";\n if (status === 400 || status === 422) return \"invalid_request_error\";\n if (status === 404) return \"not_found_error\";\n if (status === 429) return \"rate_limit_error\";\n if (status >= 500) return \"api_error\";\n return \"unknown_error\";\n}\n","import { Schema } from \"@effect/schema\";\n\n/**\n * Supported payment providers on the PayArk platform.\n */\nexport const ProviderSchema = Schema.Union(\n Schema.Literal(\n \"esewa\",\n \"khalti\",\n \"connectips\",\n \"imepay\",\n \"fonepay\",\n \"sandbox\",\n ),\n);\n\n// ── Branded Types ──────────────────────────────────────────────────────────\n\n/**\n * Branded Type for Checkout Session ID.\n */\nexport const CheckoutSessionId = Schema.String.pipe(\n Schema.brand(\"CheckoutSessionId\"),\n);\nexport type CheckoutSessionId = Schema.Schema.Type<typeof CheckoutSessionId>;\n\n/**\n * Branded Type for Payment ID.\n */\nexport const PaymentId = Schema.String.pipe(Schema.brand(\"PaymentId\"));\nexport type PaymentId = Schema.Schema.Type<typeof PaymentId>;\n\n/**\n * Branded Type for Project ID.\n */\nexport const ProjectId = Schema.String.pipe(Schema.brand(\"ProjectId\"));\nexport type ProjectId = Schema.Schema.Type<typeof ProjectId>;\n\n/**\n * Schema for creating a checkout session.\n */\nexport const CreateCheckoutSchema = Schema.Struct({\n amount: Schema.Number,\n currency: Schema.optionalWith(Schema.String, {\n default: () => \"NPR\" as const,\n }),\n provider: ProviderSchema,\n returnUrl: Schema.String,\n cancelUrl: Schema.optional(Schema.String),\n metadata: Schema.optional(\n Schema.Record({ key: Schema.String, value: Schema.Any }),\n ),\n});\n\n/**\n * Schema for a checkout session response.\n */\nexport const CheckoutSessionSchema = Schema.Struct({\n id: CheckoutSessionId,\n checkout_url: Schema.String,\n payment_method: Schema.Struct({\n type: ProviderSchema,\n url: Schema.optional(Schema.String),\n method: Schema.optional(\n Schema.Union(Schema.Literal(\"GET\"), Schema.Literal(\"POST\")),\n ),\n fields: Schema.optional(\n Schema.Record({ key: Schema.String, value: Schema.String }),\n ),\n }),\n});\n\n/**\n * Schema for a Payment response.\n */\nexport const PaymentSchema = Schema.Struct({\n id: PaymentId,\n project_id: ProjectId,\n amount: Schema.Number,\n currency: Schema.String,\n status: Schema.Union(\n Schema.Literal(\"pending\"),\n Schema.Literal(\"success\"),\n Schema.Literal(\"failed\"),\n ),\n provider_ref: Schema.optional(Schema.NullOr(Schema.String)),\n metadata_json: Schema.optional(\n Schema.NullOr(Schema.Record({ key: Schema.String, value: Schema.Any })),\n ),\n gateway_response: Schema.optional(\n Schema.NullOr(Schema.Record({ key: Schema.String, value: Schema.Any })),\n ),\n created_at: Schema.String,\n updated_at: Schema.optional(Schema.String),\n});\n\n/**\n * Schema for a Project response.\n */\nexport const ProjectSchema = Schema.Struct({\n id: ProjectId,\n name: Schema.String,\n api_key_secret: Schema.String,\n created_at: Schema.String,\n});\n\n/**\n * Higher-order schema for paginated responses.\n */\nexport const PaginatedResponseSchema = <A, I>(item: Schema.Schema<A, I>) =>\n Schema.Struct({\n data: Schema.Array(item),\n meta: Schema.Struct({\n total: Schema.NullOr(Schema.Number),\n limit: Schema.Number,\n offset: Schema.Number,\n }),\n });\n\n// ── Inferred Types ─────────────────────────────────────────────────────────\n\nexport type CheckoutSession = Schema.Schema.Type<typeof CheckoutSessionSchema>;\nexport type Payment = Schema.Schema.Type<typeof PaymentSchema>;\nexport type Project = Schema.Schema.Type<typeof ProjectSchema>;\nexport interface PaginatedResponse<T> {\n readonly data: ReadonlyArray<T>;\n readonly meta: {\n readonly total: number | null;\n readonly limit: number;\n readonly offset: number;\n };\n}\n","import { Effect } from \"effect\";\nimport { Schema } from \"@effect/schema\";\nimport { PayArkConfigService, request } from \"../http\";\nimport { CheckoutSessionSchema } from \"../schemas\";\nimport { PayArkEffectError } from \"../errors\";\nimport type { CreateCheckoutParams, PayArkConfig } from \"@payark/sdk\";\nimport type { CheckoutSession } from \"../schemas\";\nimport type { HttpClient } from \"@effect/platform\";\nimport type { ParseResult } from \"@effect/schema\";\n\n/**\n * Effect-based resource for PayArk Checkout.\n */\nexport class CheckoutEffect {\n constructor(private readonly config: PayArkConfig) {}\n\n /**\n * Create a new checkout session.\n *\n * @param params - Configuration for the checkout session.\n * @returns Effect that resolves to the created checkout session.\n */\n create(\n params: CreateCheckoutParams,\n ): Effect.Effect<\n CheckoutSession,\n PayArkEffectError | ParseResult.ParseError,\n HttpClient.HttpClient\n > {\n return request<unknown>(\"POST\", \"/v1/checkout\", { body: params }).pipe(\n Effect.flatMap(Schema.decodeUnknown(CheckoutSessionSchema)),\n Effect.provideService(PayArkConfigService, this.config),\n );\n }\n}\n","import { Effect } from \"effect\";\nimport { Schema } from \"@effect/schema\";\nimport { PayArkConfigService, request } from \"../http\";\nimport { PaymentSchema, PaginatedResponseSchema } from \"../schemas\";\nimport { PayArkEffectError } from \"../errors\";\nimport type { PayArkConfig, ListPaymentsParams } from \"@payark/sdk\";\nimport type { Payment, PaginatedResponse } from \"../schemas\";\nimport type { HttpClient } from \"@effect/platform\";\nimport type { ParseResult } from \"@effect/schema\";\n\n/**\n * Effect-based resource for PayArk Payments.\n */\nexport class PaymentsEffect {\n constructor(private readonly config: PayArkConfig) {}\n\n /**\n * List payments for the authenticated project.\n *\n * @param params - Optional pagination parameters.\n * @returns Effect that resolves to paginated payments.\n */\n list(\n params: ListPaymentsParams = {},\n ): Effect.Effect<\n PaginatedResponse<Payment>,\n PayArkEffectError | ParseResult.ParseError,\n HttpClient.HttpClient\n > {\n return request<unknown>(\"GET\", \"/v1/payments\", {\n query: {\n limit: params.limit,\n offset: params.offset,\n projectId: params.projectId,\n },\n }).pipe(\n Effect.flatMap(\n Schema.decodeUnknown(PaginatedResponseSchema(PaymentSchema)),\n ),\n Effect.provideService(PayArkConfigService, this.config),\n );\n }\n\n /**\n * Retrieve a single payment by its ID.\n *\n * @param id - The payment identifier.\n * @returns Effect that resolves to the payment object.\n */\n retrieve(\n id: string,\n ): Effect.Effect<\n Payment,\n PayArkEffectError | ParseResult.ParseError,\n HttpClient.HttpClient\n > {\n return request<unknown>(\n \"GET\",\n `/v1/payments/${encodeURIComponent(id)}`,\n ).pipe(\n Effect.flatMap(Schema.decodeUnknown(PaymentSchema)),\n Effect.provideService(PayArkConfigService, this.config),\n );\n }\n}\n","import { Effect } from \"effect\";\nimport { Schema } from \"@effect/schema\";\nimport { PayArkConfigService, request } from \"../http\";\nimport { ProjectSchema } from \"../schemas\";\nimport { PayArkEffectError } from \"../errors\";\nimport type { PayArkConfig } from \"@payark/sdk\";\nimport type { Project } from \"../schemas\";\nimport type { HttpClient } from \"@effect/platform\";\nimport type { ParseResult } from \"@effect/schema\";\n\n/**\n * Effect-based resource for PayArk Projects.\n */\nexport class ProjectsEffect {\n constructor(private readonly config: PayArkConfig) {}\n\n /**\n * List all projects belonging to the authenticated account.\n *\n * @returns Effect that resolves to an array of projects.\n */\n list(): Effect.Effect<\n readonly Project[],\n PayArkEffectError | ParseResult.ParseError,\n HttpClient.HttpClient\n > {\n return request<unknown>(\"GET\", \"/v1/projects\").pipe(\n Effect.flatMap(Schema.decodeUnknown(Schema.Array(ProjectSchema))),\n Effect.provideService(PayArkConfigService, this.config),\n );\n }\n}\n","import { Context, Layer } from \"effect\";\nimport { CheckoutEffect } from \"./resources/checkout\";\nimport { PaymentsEffect } from \"./resources/payments\";\nimport { ProjectsEffect } from \"./resources/projects\";\nimport type { PayArkConfig } from \"@payark/sdk\";\n\n/**\n * Main entry point for the Effect-based PayArk API.\n */\nexport class PayArkEffect {\n private _checkout?: CheckoutEffect;\n private _payments?: PaymentsEffect;\n private _projects?: ProjectsEffect;\n\n constructor(private readonly config: PayArkConfig) {}\n\n /**\n * Checkout sessions resource (Effect).\n */\n get checkout(): CheckoutEffect {\n if (!this._checkout) {\n this._checkout = new CheckoutEffect(this.config);\n }\n return this._checkout;\n }\n\n /**\n * Payments resource (Effect).\n */\n get payments(): PaymentsEffect {\n if (!this._payments) {\n this._payments = new PaymentsEffect(this.config);\n }\n return this._payments;\n }\n\n /**\n * Projects resource (Effect).\n */\n get projects(): ProjectsEffect {\n if (!this._projects) {\n this._projects = new ProjectsEffect(this.config);\n }\n return this._projects;\n }\n}\n\n/**\n * Service tag for the PayArk API.\n */\nexport class PayArk extends Context.Tag(\"@payark/sdk-effect/PayArk\")<\n PayArk,\n PayArkEffect\n>() {\n /**\n * Create a Layer that provides the PayArk service.\n */\n static readonly Live = (config: PayArkConfig) =>\n Layer.succeed(PayArk, new PayArkEffect(config));\n}\n\nexport { PayArkEffectError } from \"./errors\";\nexport * from \"./schemas\";\nexport type {\n PayArkConfig,\n CheckoutSession,\n Payment,\n PaymentStatus,\n Project,\n ListPaymentsParams,\n PaginatedResponse,\n PaginationMeta,\n Provider,\n WebhookEvent,\n WebhookEventType,\n PayArkErrorBody,\n PayArkErrorCode,\n} from \"@payark/sdk\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/schemas.ts","../src/resources/checkout.ts","../src/resources/payments.ts","../src/resources/projects.ts","../src/index.ts"],"names":["Effect","Schema","Context"],"mappings":"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","file":"index.mjs","sourcesContent":["import { Data } from \"effect\";\nimport type { PayArkErrorCode, PayArkErrorBody } from \"@payark/sdk\";\n\n/**\n * Effect-compatible error class for PayArk SDK.\n * Extends Data.TaggedError for easy matching in Effect.catchTag.\n */\nexport class PayArkEffectError extends Data.TaggedError(\"PayArkEffectError\")<{\n readonly message: string;\n readonly statusCode: number;\n readonly code: PayArkErrorCode;\n readonly raw?: PayArkErrorBody;\n}> {\n /** Human-readable representation for logging/debugging. */\n override toString(): string {\n return `[PayArkEffectError: ${this.code}] ${this.message} (HTTP ${this.statusCode})`;\n }\n}\n","import { Effect, Context } from \"effect\";\nimport { HttpClient, HttpClientRequest } from \"@effect/platform\";\nimport { PayArkEffectError } from \"./errors\";\nimport { SDK_VERSION } from \"@payark/sdk\";\nimport type { PayArkConfig, PayArkErrorCode } from \"@payark/sdk\";\n\n/**\n * Service tag for the PayArk configuration.\n */\nexport class PayArkConfigService extends Context.Tag(\"PayArkConfigService\")<\n PayArkConfigService,\n PayArkConfig\n>() {}\n\n/**\n * Executes an HTTP request using Effect and returns the JSON body or a PayArkEffectError.\n */\nexport const request = <T>(\n method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n path: string,\n options?: {\n readonly query?: Record<string, string | number | undefined>;\n readonly body?: any;\n readonly headers?: Record<string, string>;\n },\n): Effect.Effect<\n T,\n PayArkEffectError,\n PayArkConfigService | HttpClient.HttpClient\n> =>\n Effect.gen(function* (_) {\n const config = yield* _(PayArkConfigService);\n const client = yield* _(HttpClient.HttpClient);\n\n const baseUrl = (\n config.baseUrl ?? \"https://payark-api.codimo-dev.workers.dev\"\n ).replace(/\\/+$/, \"\");\n const url = new URL(`${baseUrl}${path}`);\n\n if (options?.query) {\n for (const [key, value] of Object.entries(options.query)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${config.apiKey}`,\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"User-Agent\": `payark-sdk-effect/${SDK_VERSION}`,\n ...options?.headers,\n };\n\n if (config.sandbox) {\n headers[\"x-sandbox-mode\"] = \"true\";\n }\n\n let req = HttpClientRequest.make(method)(url.toString()).pipe(\n HttpClientRequest.setHeaders(headers),\n );\n\n if (options?.body) {\n req = yield* _(\n HttpClientRequest.bodyJson(options.body)(req).pipe(\n Effect.mapError(\n (e) =>\n new PayArkEffectError({\n message: `Invalid request body: ${String(e)}`,\n statusCode: 400,\n code: \"invalid_request_error\",\n }),\n ),\n ),\n );\n }\n\n const response = yield* _(\n client.execute(req).pipe(\n Effect.mapError(\n (e) =>\n new PayArkEffectError({\n message: `Network error: ${e.message}`,\n statusCode: 0,\n code: \"connection_error\",\n }),\n ),\n ),\n );\n\n if (response.status >= 200 && response.status < 300) {\n if (response.status === 204) return {} as T;\n return (yield* _(\n response.json.pipe(\n Effect.mapError(\n (e) =>\n new PayArkEffectError({\n message: `Failed to parse response: ${String(e)}`,\n statusCode: response.status,\n code: \"api_error\",\n }),\n ),\n ),\n )) as T;\n }\n\n const errorBody: any = yield* _(\n response.json.pipe(\n Effect.catchAll(() => Effect.succeed({ error: undefined })),\n ),\n );\n\n return yield* _(\n Effect.fail(\n new PayArkEffectError({\n message:\n errorBody?.error || `Request failed with status ${response.status}`,\n statusCode: response.status,\n code: mapStatusToCode(response.status),\n raw: errorBody,\n }),\n ),\n );\n });\n\nfunction mapStatusToCode(status: number): PayArkErrorCode {\n if (status === 401) return \"authentication_error\";\n if (status === 403) return \"permission_error\";\n if (status === 400 || status === 422) return \"invalid_request_error\";\n if (status === 404) return \"not_found_error\";\n if (status === 429) return \"rate_limit_error\";\n if (status >= 500) return \"api_error\";\n return \"unknown_error\";\n}\n","import { Schema } from \"@effect/schema\";\n\n/**\n * Supported payment providers on the PayArk platform.\n */\nexport const ProviderSchema = Schema.Union(\n Schema.Literal(\n \"esewa\",\n \"khalti\",\n \"connectips\",\n \"imepay\",\n \"fonepay\",\n \"sandbox\",\n ),\n);\n\n// ── Branded Types ──────────────────────────────────────────────────────────\n\n/**\n * Branded Type for Checkout Session ID.\n */\nexport const CheckoutSessionId = Schema.String.pipe(\n Schema.brand(\"CheckoutSessionId\"),\n);\nexport type CheckoutSessionId = Schema.Schema.Type<typeof CheckoutSessionId>;\n\n/**\n * Branded Type for Payment ID.\n */\nexport const PaymentId = Schema.String.pipe(Schema.brand(\"PaymentId\"));\nexport type PaymentId = Schema.Schema.Type<typeof PaymentId>;\n\n/**\n * Branded Type for Project ID.\n */\nexport const ProjectId = Schema.String.pipe(Schema.brand(\"ProjectId\"));\nexport type ProjectId = Schema.Schema.Type<typeof ProjectId>;\n\n/**\n * Schema for creating a checkout session.\n */\nexport const CreateCheckoutSchema = Schema.Struct({\n amount: Schema.Number,\n currency: Schema.optionalWith(Schema.String, {\n default: () => \"NPR\" as const,\n }),\n provider: ProviderSchema,\n returnUrl: Schema.String,\n cancelUrl: Schema.optional(Schema.String),\n metadata: Schema.optional(\n Schema.Record({ key: Schema.String, value: Schema.Any }),\n ),\n});\n\n/**\n * Schema for a checkout session response.\n */\nexport const CheckoutSessionSchema = Schema.Struct({\n id: CheckoutSessionId,\n checkout_url: Schema.String,\n payment_method: Schema.Struct({\n type: ProviderSchema,\n url: Schema.optional(Schema.String),\n method: Schema.optional(\n Schema.Union(Schema.Literal(\"GET\"), Schema.Literal(\"POST\")),\n ),\n fields: Schema.optional(\n Schema.Record({ key: Schema.String, value: Schema.String }),\n ),\n }),\n});\n\n/**\n * Schema for a Payment response.\n */\nexport const PaymentSchema = Schema.Struct({\n id: PaymentId,\n project_id: ProjectId,\n amount: Schema.Number,\n currency: Schema.String,\n status: Schema.Union(\n Schema.Literal(\"pending\"),\n Schema.Literal(\"success\"),\n Schema.Literal(\"failed\"),\n ),\n provider_ref: Schema.optional(Schema.NullOr(Schema.String)),\n metadata_json: Schema.optional(\n Schema.NullOr(Schema.Record({ key: Schema.String, value: Schema.Any })),\n ),\n gateway_response: Schema.optional(\n Schema.NullOr(Schema.Record({ key: Schema.String, value: Schema.Any })),\n ),\n created_at: Schema.String,\n updated_at: Schema.optional(Schema.String),\n});\n\n/**\n * Schema for a Project response.\n */\nexport const ProjectSchema = Schema.Struct({\n id: ProjectId,\n name: Schema.String,\n api_key_secret: Schema.String,\n created_at: Schema.String,\n});\n\n/**\n * Higher-order schema for paginated responses.\n */\nexport const PaginatedResponseSchema = <A, I>(item: Schema.Schema<A, I>) =>\n Schema.Struct({\n data: Schema.Array(item),\n meta: Schema.Struct({\n total: Schema.NullOr(Schema.Number),\n limit: Schema.Number,\n offset: Schema.Number,\n }),\n });\n\n// ── Inferred Types ─────────────────────────────────────────────────────────\n\nexport type CheckoutSession = Schema.Schema.Type<typeof CheckoutSessionSchema>;\nexport type Payment = Schema.Schema.Type<typeof PaymentSchema>;\nexport type Project = Schema.Schema.Type<typeof ProjectSchema>;\nexport interface PaginatedResponse<T> {\n readonly data: ReadonlyArray<T>;\n readonly meta: {\n readonly total: number | null;\n readonly limit: number;\n readonly offset: number;\n };\n}\n","import { Effect } from \"effect\";\nimport { Schema } from \"@effect/schema\";\nimport { PayArkConfigService, request } from \"../http\";\nimport { CheckoutSessionSchema } from \"../schemas\";\nimport { PayArkEffectError } from \"../errors\";\nimport type { CreateCheckoutParams, PayArkConfig } from \"@payark/sdk\";\nimport type { CheckoutSession } from \"../schemas\";\nimport type { HttpClient } from \"@effect/platform\";\nimport type { ParseResult } from \"@effect/schema\";\n\n/**\n * Effect-based resource for PayArk Checkout.\n */\nexport class CheckoutEffect {\n constructor(private readonly config: PayArkConfig) {}\n\n /**\n * Create a new checkout session.\n *\n * @param params - Configuration for the checkout session.\n * @returns Effect that resolves to the created checkout session.\n */\n create(\n params: CreateCheckoutParams,\n ): Effect.Effect<\n CheckoutSession,\n PayArkEffectError | ParseResult.ParseError,\n HttpClient.HttpClient\n > {\n return request<unknown>(\"POST\", \"/v1/checkout\", { body: params }).pipe(\n Effect.flatMap(Schema.decodeUnknown(CheckoutSessionSchema)),\n Effect.provideService(PayArkConfigService, this.config),\n );\n }\n}\n","import { Effect } from \"effect\";\nimport { Schema } from \"@effect/schema\";\nimport { PayArkConfigService, request } from \"../http\";\nimport { PaymentSchema, PaginatedResponseSchema } from \"../schemas\";\nimport { PayArkEffectError } from \"../errors\";\nimport type { PayArkConfig, ListPaymentsParams } from \"@payark/sdk\";\nimport type { Payment, PaginatedResponse } from \"../schemas\";\nimport type { HttpClient } from \"@effect/platform\";\nimport type { ParseResult } from \"@effect/schema\";\n\n/**\n * Effect-based resource for PayArk Payments.\n */\nexport class PaymentsEffect {\n constructor(private readonly config: PayArkConfig) {}\n\n /**\n * List payments for the authenticated project.\n *\n * @param params - Optional pagination parameters.\n * @returns Effect that resolves to paginated payments.\n */\n list(\n params: ListPaymentsParams = {},\n ): Effect.Effect<\n PaginatedResponse<Payment>,\n PayArkEffectError | ParseResult.ParseError,\n HttpClient.HttpClient\n > {\n return request<unknown>(\"GET\", \"/v1/payments\", {\n query: {\n limit: params.limit,\n offset: params.offset,\n projectId: params.projectId,\n },\n }).pipe(\n Effect.flatMap(\n Schema.decodeUnknown(PaginatedResponseSchema(PaymentSchema)),\n ),\n Effect.provideService(PayArkConfigService, this.config),\n );\n }\n\n /**\n * Retrieve a single payment by its ID.\n *\n * @param id - The payment identifier.\n * @returns Effect that resolves to the payment object.\n */\n retrieve(\n id: string,\n ): Effect.Effect<\n Payment,\n PayArkEffectError | ParseResult.ParseError,\n HttpClient.HttpClient\n > {\n return request<unknown>(\n \"GET\",\n `/v1/payments/${encodeURIComponent(id)}`,\n ).pipe(\n Effect.flatMap(Schema.decodeUnknown(PaymentSchema)),\n Effect.provideService(PayArkConfigService, this.config),\n );\n }\n}\n","import { Effect } from \"effect\";\nimport { Schema } from \"@effect/schema\";\nimport { PayArkConfigService, request } from \"../http\";\nimport { ProjectSchema } from \"../schemas\";\nimport { PayArkEffectError } from \"../errors\";\nimport type { PayArkConfig } from \"@payark/sdk\";\nimport type { Project } from \"../schemas\";\nimport type { HttpClient } from \"@effect/platform\";\nimport type { ParseResult } from \"@effect/schema\";\n\n/**\n * Effect-based resource for PayArk Projects.\n */\nexport class ProjectsEffect {\n constructor(private readonly config: PayArkConfig) {}\n\n /**\n * List all projects belonging to the authenticated account.\n *\n * @returns Effect that resolves to an array of projects.\n */\n list(): Effect.Effect<\n readonly Project[],\n PayArkEffectError | ParseResult.ParseError,\n HttpClient.HttpClient\n > {\n return request<unknown>(\"GET\", \"/v1/projects\").pipe(\n Effect.flatMap(Schema.decodeUnknown(Schema.Array(ProjectSchema))),\n Effect.provideService(PayArkConfigService, this.config),\n );\n }\n}\n","import { Context, Layer } from \"effect\";\nimport { CheckoutEffect } from \"./resources/checkout\";\nimport { PaymentsEffect } from \"./resources/payments\";\nimport { ProjectsEffect } from \"./resources/projects\";\nimport type { PayArkConfig } from \"@payark/sdk\";\n\n/**\n * Main entry point for the Effect-based PayArk API.\n */\nexport class PayArkEffect {\n private _checkout?: CheckoutEffect;\n private _payments?: PaymentsEffect;\n private _projects?: ProjectsEffect;\n\n constructor(private readonly config: PayArkConfig) {}\n\n /**\n * Checkout sessions resource (Effect).\n */\n get checkout(): CheckoutEffect {\n if (!this._checkout) {\n this._checkout = new CheckoutEffect(this.config);\n }\n return this._checkout;\n }\n\n /**\n * Payments resource (Effect).\n */\n get payments(): PaymentsEffect {\n if (!this._payments) {\n this._payments = new PaymentsEffect(this.config);\n }\n return this._payments;\n }\n\n /**\n * Projects resource (Effect).\n */\n get projects(): ProjectsEffect {\n if (!this._projects) {\n this._projects = new ProjectsEffect(this.config);\n }\n return this._projects;\n }\n}\n\n/**\n * Service tag for the PayArk API.\n */\nexport class PayArk extends Context.Tag(\"@payark/sdk-effect/PayArk\")<\n PayArk,\n PayArkEffect\n>() {\n /**\n * Create a Layer that provides the PayArk service.\n */\n static readonly Live = (config: PayArkConfig) =>\n Layer.succeed(PayArk, new PayArkEffect(config));\n}\n\nexport { PayArkEffectError } from \"./errors\";\nexport * from \"./schemas\";\nexport type {\n PayArkConfig,\n CheckoutSession,\n Payment,\n PaymentStatus,\n Project,\n ListPaymentsParams,\n PaginatedResponse,\n PaginationMeta,\n Provider,\n WebhookEvent,\n WebhookEventType,\n PayArkErrorBody,\n PayArkErrorCode,\n} from \"@payark/sdk\";\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payark/sdk-effect",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Functional, type-safe Effect SDK for the PayArk API.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"@effect/platform": "^0.94.5",
|
|
43
43
|
"@effect/platform-node": "^0.104.1",
|
|
44
44
|
"@effect/schema": "^0.75.5",
|
|
45
|
-
"@payark/sdk": "
|
|
45
|
+
"@payark/sdk": "^0.1.2",
|
|
46
46
|
"effect": "^3.19.18"
|
|
47
47
|
}
|
|
48
48
|
}
|