@typecall/admin-sdk 0.2.0 → 0.2.1
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 +33 -0
- package/dist/fabric/services/rest/client/payment_methods.cjs +17 -0
- package/dist/fabric/services/rest/client/payment_methods.cjs.map +1 -1
- package/dist/fabric/services/rest/client/payment_methods.d.cts +3 -1
- package/dist/fabric/services/rest/client/payment_methods.d.ts +3 -1
- package/dist/fabric/services/rest/client/payment_methods.js +17 -0
- package/dist/fabric/services/rest/client/payment_methods.js.map +1 -1
- package/dist/fabric/services/rest/client.cjs +17 -0
- package/dist/fabric/services/rest/client.cjs.map +1 -1
- package/dist/fabric/services/rest/client.js +17 -0
- package/dist/fabric/services/rest/client.js.map +1 -1
- package/dist/fabric/services/rest/dto/billing.cjs +9 -0
- package/dist/fabric/services/rest/dto/billing.cjs.map +1 -1
- package/dist/fabric/services/rest/dto/billing.d.cts +2 -1
- package/dist/fabric/services/rest/dto/billing.d.ts +2 -1
- package/dist/fabric/services/rest/dto/billing.js +8 -0
- package/dist/fabric/services/rest/dto/billing.js.map +1 -1
- package/dist/fabric/services/rest/dto/payment-method.cjs +9 -0
- package/dist/fabric/services/rest/dto/payment-method.cjs.map +1 -1
- package/dist/fabric/services/rest/dto/payment-method.d.cts +2 -1
- package/dist/fabric/services/rest/dto/payment-method.d.ts +2 -1
- package/dist/fabric/services/rest/dto/payment-method.js +8 -0
- package/dist/fabric/services/rest/dto/payment-method.js.map +1 -1
- package/dist/fabric/services/rest/dto/payment_method.cjs +9 -0
- package/dist/fabric/services/rest/dto/payment_method.cjs.map +1 -1
- package/dist/fabric/services/rest/dto/payment_method.d.cts +8 -1
- package/dist/fabric/services/rest/dto/payment_method.d.ts +8 -1
- package/dist/fabric/services/rest/dto/payment_method.js +8 -0
- package/dist/fabric/services/rest/dto/payment_method.js.map +1 -1
- package/dist/index.cjs +17 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -47,6 +47,39 @@ const org = await client.request<{ id: string; name: string }>("/orgs/me");
|
|
|
47
47
|
console.log(org);
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
+
## Releasing a New Version
|
|
51
|
+
|
|
52
|
+
Releases are published automatically to npm using GitHub Actions and npm Trusted Publishing (OIDC with provenance).
|
|
53
|
+
|
|
54
|
+
1. **Test and verify locally**:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npm run typecheck
|
|
58
|
+
npm run test
|
|
59
|
+
npm run build
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
2. **Bump the version**:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
npm version patch # or minor / major
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
_(This updates `package.json` and creates a local git commit and tag)._
|
|
69
|
+
|
|
70
|
+
3. **Push the commit and tag to GitHub**:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
git push origin main --tags
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
4. **Publish the Release on GitHub**:
|
|
77
|
+
- Go to [GitHub Releases](https://github.com/typecall/admin-sdk-js/releases) and click **Draft a new release**.
|
|
78
|
+
- Select the newly pushed tag (e.g., `v0.2.1`).
|
|
79
|
+
- Fill in release notes and click **Publish release**.
|
|
80
|
+
|
|
81
|
+
GitHub Actions will automatically run type checks, execute tests, build the package, and publish to npm with cryptographic provenance.
|
|
82
|
+
|
|
50
83
|
## Issues & Support
|
|
51
84
|
|
|
52
85
|
- **Client SDK Bugs & Feature Requests**: Please [open a GitHub issue](https://github.com/typecall/admin-sdk-js/issues) for issues with the JavaScript/TypeScript client library.
|
|
@@ -158,6 +158,23 @@ var PaymentMethodsClient = class extends BaseResourceClient {
|
|
|
158
158
|
this.bump();
|
|
159
159
|
return item;
|
|
160
160
|
}
|
|
161
|
+
async create(data) {
|
|
162
|
+
const item = await this.transport.requestData(
|
|
163
|
+
"/payment-methods",
|
|
164
|
+
{
|
|
165
|
+
method: "POST",
|
|
166
|
+
body: JSON.stringify(data)
|
|
167
|
+
}
|
|
168
|
+
);
|
|
169
|
+
if (item.is_primary) {
|
|
170
|
+
for (const existing of this.items.values()) {
|
|
171
|
+
existing.is_primary = existing.id === item.id;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
this.setItem(item);
|
|
175
|
+
this.bump();
|
|
176
|
+
return item;
|
|
177
|
+
}
|
|
161
178
|
createUrl() {
|
|
162
179
|
return this.transport.request(
|
|
163
180
|
"/payment-methods/create-url"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/fabric/services/rest/client/base.ts","../../../../../src/fabric/services/rest/client/payment_methods.ts"],"names":["atom","MiniSearch"],"mappings":"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","file":"payment_methods.cjs","sourcesContent":["import MiniSearch from \"minisearch\";\nimport { atom, type ReadableAtom, type WritableAtom } from \"nanostores\";\n\nexport type { ReadableAtom };\n\nexport interface RestTransport {\n request<T>(path: string, init?: RequestInit): Promise<T>;\n requestData<T>(path: string, init?: RequestInit): Promise<T>;\n requestBlob(path: string, init?: RequestInit): Promise<Blob>;\n}\n\nexport abstract class BaseResourceClient<T extends { id: string } = any> {\n protected readonly items = new Map<string, T>();\n protected isLoaded = false;\n protected searchIndex?: MiniSearch;\n\n private readonly _version: WritableAtom<number> = atom(1);\n\n readonly $version: ReadableAtom<number> = this._version;\n\n get version(): number {\n return this._version.get();\n }\n\n get loaded(): boolean {\n return this.isLoaded;\n }\n\n constructor(protected readonly transport: RestTransport) {}\n\n /**\n * Returns all items currently stored in cache.\n */\n all(): T[] {\n return Array.from(this.items.values());\n }\n\n /**\n * Synchronously finds an item in cache by ID.\n */\n find(id: string): T | undefined {\n return this.items.get(id);\n }\n\n /**\n * Synchronously finds multiple items in cache by ID.\n */\n getMany(...ids: string[]): T[] {\n const results: T[] = [];\n for (const id of ids) {\n const item = this.items.get(id);\n if (item) results.push(item);\n }\n return results;\n }\n\n /**\n * Searches cached items by search term using MiniSearch prefix matching.\n * If search term is empty, returns all items.\n */\n search(term: string): T[] {\n const trimmed = term.trim();\n if (!trimmed || !this.searchIndex) {\n return this.all();\n }\n const results = this.searchIndex.search(trimmed, { prefix: true });\n const matched: T[] = [];\n for (const r of results) {\n const item = this.items.get(r.id);\n if (item) matched.push(item);\n }\n return matched;\n }\n\n /**\n * Hook for subclasses to define what fields get indexed for search.\n */\n protected extractSearchTerms(item: T): string {\n return Object.values(item as Record<string, unknown>)\n .filter((v) => typeof v === \"string\" || typeof v === \"number\")\n .join(\" \")\n .toLowerCase();\n }\n\n /**\n * Adds or replaces an item in the search index.\n */\n protected indexItem(item: T): void {\n if (!this.searchIndex) {\n this.searchIndex = new MiniSearch({\n fields: [\"terms\"],\n storeFields: [\"id\"],\n });\n }\n const doc = { id: item.id, terms: this.extractSearchTerms(item) };\n if (this.searchIndex.has(item.id)) {\n this.searchIndex.replace(doc);\n } else {\n this.searchIndex.add(doc);\n }\n }\n\n /**\n * Sets or updates a single item in cache and search index.\n */\n protected setItem(item: T): void {\n this.items.set(item.id, item);\n this.indexItem(item);\n }\n\n /**\n * Removes a single item from cache and search index.\n */\n protected removeItem(id: string): void {\n this.items.delete(id);\n if (this.searchIndex?.has(id)) {\n this.searchIndex.discard(id);\n }\n }\n\n /**\n * Populates cache and search index with all items, marking the client as loaded.\n */\n protected setAll(items: T[]): void {\n this.items.clear();\n this.searchIndex?.removeAll();\n for (const item of items) {\n this.items.set(item.id, item);\n this.indexItem(item);\n }\n this.isLoaded = true;\n this.bump();\n }\n\n /**\n * Clears the in-memory cache and search index.\n */\n clearCache(): void {\n this.items.clear();\n this.searchIndex?.removeAll();\n this.isLoaded = false;\n this.bump();\n }\n\n bump(): void {\n this._version.set(this._version.get() + 1);\n }\n}\n","import type { PaymentMethod } from \"../../../domains/workspace/payment_method.js\";\nimport type { CreatePaymentMethodUrlResponse } from \"../dto/payment_method.js\";\nimport { BaseResourceClient } from \"./base.js\";\n\nexport class PaymentMethodsClient extends BaseResourceClient<PaymentMethod> {\n protected override extractSearchTerms(item: PaymentMethod): string {\n return (item.last_four || item.last_four_digits || \"\").toLowerCase();\n }\n\n async listAll(force = false): Promise<PaymentMethod[]> {\n if (this.isLoaded && !force) {\n return this.all();\n }\n const items =\n await this.transport.requestData<PaymentMethod[]>(\"/payment-methods\");\n this.setAll(items);\n return items;\n }\n\n async load(force = false): Promise<PaymentMethod[]> {\n return this.listAll(force);\n }\n\n async get(id: string, force = false): Promise<PaymentMethod> {\n if (!force) {\n const cached = this.find(id);\n if (cached) return cached;\n }\n const item = await this.transport.requestData<PaymentMethod>(\n `/payment-methods/${id}`,\n );\n this.setItem(item);\n this.bump();\n return item;\n }\n\n createUrl(): Promise<CreatePaymentMethodUrlResponse> {\n return this.transport.request<CreatePaymentMethodUrlResponse>(\n \"/payment-methods/create-url\",\n );\n }\n\n async delete(id: string): Promise<void> {\n await this.transport.request<void>(`/payment-methods/${id}`, {\n method: \"DELETE\",\n });\n this.removeItem(id);\n this.bump();\n }\n\n async setAsPrimary(id: string): Promise<PaymentMethod> {\n const paymentMethod = await this.transport.requestData<PaymentMethod>(\n `/payment-methods/${id}/set-as-primary`,\n { method: \"POST\" },\n );\n for (const item of this.items.values()) {\n item.is_primary = item.id === id;\n }\n this.setItem(paymentMethod);\n this.bump();\n return paymentMethod;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/fabric/services/rest/client/base.ts","../../../../../src/fabric/services/rest/client/payment_methods.ts"],"names":["atom","MiniSearch"],"mappings":"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","file":"payment_methods.cjs","sourcesContent":["import MiniSearch from \"minisearch\";\nimport { atom, type ReadableAtom, type WritableAtom } from \"nanostores\";\n\nexport type { ReadableAtom };\n\nexport interface RestTransport {\n request<T>(path: string, init?: RequestInit): Promise<T>;\n requestData<T>(path: string, init?: RequestInit): Promise<T>;\n requestBlob(path: string, init?: RequestInit): Promise<Blob>;\n}\n\nexport abstract class BaseResourceClient<T extends { id: string } = any> {\n protected readonly items = new Map<string, T>();\n protected isLoaded = false;\n protected searchIndex?: MiniSearch;\n\n private readonly _version: WritableAtom<number> = atom(1);\n\n readonly $version: ReadableAtom<number> = this._version;\n\n get version(): number {\n return this._version.get();\n }\n\n get loaded(): boolean {\n return this.isLoaded;\n }\n\n constructor(protected readonly transport: RestTransport) {}\n\n /**\n * Returns all items currently stored in cache.\n */\n all(): T[] {\n return Array.from(this.items.values());\n }\n\n /**\n * Synchronously finds an item in cache by ID.\n */\n find(id: string): T | undefined {\n return this.items.get(id);\n }\n\n /**\n * Synchronously finds multiple items in cache by ID.\n */\n getMany(...ids: string[]): T[] {\n const results: T[] = [];\n for (const id of ids) {\n const item = this.items.get(id);\n if (item) results.push(item);\n }\n return results;\n }\n\n /**\n * Searches cached items by search term using MiniSearch prefix matching.\n * If search term is empty, returns all items.\n */\n search(term: string): T[] {\n const trimmed = term.trim();\n if (!trimmed || !this.searchIndex) {\n return this.all();\n }\n const results = this.searchIndex.search(trimmed, { prefix: true });\n const matched: T[] = [];\n for (const r of results) {\n const item = this.items.get(r.id);\n if (item) matched.push(item);\n }\n return matched;\n }\n\n /**\n * Hook for subclasses to define what fields get indexed for search.\n */\n protected extractSearchTerms(item: T): string {\n return Object.values(item as Record<string, unknown>)\n .filter((v) => typeof v === \"string\" || typeof v === \"number\")\n .join(\" \")\n .toLowerCase();\n }\n\n /**\n * Adds or replaces an item in the search index.\n */\n protected indexItem(item: T): void {\n if (!this.searchIndex) {\n this.searchIndex = new MiniSearch({\n fields: [\"terms\"],\n storeFields: [\"id\"],\n });\n }\n const doc = { id: item.id, terms: this.extractSearchTerms(item) };\n if (this.searchIndex.has(item.id)) {\n this.searchIndex.replace(doc);\n } else {\n this.searchIndex.add(doc);\n }\n }\n\n /**\n * Sets or updates a single item in cache and search index.\n */\n protected setItem(item: T): void {\n this.items.set(item.id, item);\n this.indexItem(item);\n }\n\n /**\n * Removes a single item from cache and search index.\n */\n protected removeItem(id: string): void {\n this.items.delete(id);\n if (this.searchIndex?.has(id)) {\n this.searchIndex.discard(id);\n }\n }\n\n /**\n * Populates cache and search index with all items, marking the client as loaded.\n */\n protected setAll(items: T[]): void {\n this.items.clear();\n this.searchIndex?.removeAll();\n for (const item of items) {\n this.items.set(item.id, item);\n this.indexItem(item);\n }\n this.isLoaded = true;\n this.bump();\n }\n\n /**\n * Clears the in-memory cache and search index.\n */\n clearCache(): void {\n this.items.clear();\n this.searchIndex?.removeAll();\n this.isLoaded = false;\n this.bump();\n }\n\n bump(): void {\n this._version.set(this._version.get() + 1);\n }\n}\n","import type { PaymentMethod } from \"../../../domains/workspace/payment_method.js\";\nimport type {\n CreatePaymentMethodRequest,\n CreatePaymentMethodUrlResponse,\n} from \"../dto/payment_method.js\";\nimport { BaseResourceClient } from \"./base.js\";\n\nexport class PaymentMethodsClient extends BaseResourceClient<PaymentMethod> {\n protected override extractSearchTerms(item: PaymentMethod): string {\n return (item.last_four || item.last_four_digits || \"\").toLowerCase();\n }\n\n async listAll(force = false): Promise<PaymentMethod[]> {\n if (this.isLoaded && !force) {\n return this.all();\n }\n const items =\n await this.transport.requestData<PaymentMethod[]>(\"/payment-methods\");\n this.setAll(items);\n return items;\n }\n\n async load(force = false): Promise<PaymentMethod[]> {\n return this.listAll(force);\n }\n\n async get(id: string, force = false): Promise<PaymentMethod> {\n if (!force) {\n const cached = this.find(id);\n if (cached) return cached;\n }\n const item = await this.transport.requestData<PaymentMethod>(\n `/payment-methods/${id}`,\n );\n this.setItem(item);\n this.bump();\n return item;\n }\n\n async create(data: CreatePaymentMethodRequest): Promise<PaymentMethod> {\n const item = await this.transport.requestData<PaymentMethod>(\n \"/payment-methods\",\n {\n method: \"POST\",\n body: JSON.stringify(data),\n },\n );\n if (item.is_primary) {\n for (const existing of this.items.values()) {\n existing.is_primary = existing.id === item.id;\n }\n }\n this.setItem(item);\n this.bump();\n return item;\n }\n\n createUrl(): Promise<CreatePaymentMethodUrlResponse> {\n return this.transport.request<CreatePaymentMethodUrlResponse>(\n \"/payment-methods/create-url\",\n );\n }\n\n async delete(id: string): Promise<void> {\n await this.transport.request<void>(`/payment-methods/${id}`, {\n method: \"DELETE\",\n });\n this.removeItem(id);\n this.bump();\n }\n\n async setAsPrimary(id: string): Promise<PaymentMethod> {\n const paymentMethod = await this.transport.requestData<PaymentMethod>(\n `/payment-methods/${id}/set-as-primary`,\n { method: \"POST\" },\n );\n for (const item of this.items.values()) {\n item.is_primary = item.id === id;\n }\n this.setItem(paymentMethod);\n this.bump();\n return paymentMethod;\n }\n}\n"]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { PaymentMethod } from '../../../domains/workspace/payment_method.cjs';
|
|
2
|
-
import { CreatePaymentMethodUrlResponse } from '../dto/payment_method.cjs';
|
|
2
|
+
import { CreatePaymentMethodRequest, CreatePaymentMethodUrlResponse } from '../dto/payment_method.cjs';
|
|
3
3
|
import { BaseResourceClient } from './base.cjs';
|
|
4
4
|
import '../../../common/entity.cjs';
|
|
5
|
+
import 'zod';
|
|
5
6
|
import 'minisearch';
|
|
6
7
|
import 'nanostores';
|
|
7
8
|
|
|
@@ -10,6 +11,7 @@ declare class PaymentMethodsClient extends BaseResourceClient<PaymentMethod> {
|
|
|
10
11
|
listAll(force?: boolean): Promise<PaymentMethod[]>;
|
|
11
12
|
load(force?: boolean): Promise<PaymentMethod[]>;
|
|
12
13
|
get(id: string, force?: boolean): Promise<PaymentMethod>;
|
|
14
|
+
create(data: CreatePaymentMethodRequest): Promise<PaymentMethod>;
|
|
13
15
|
createUrl(): Promise<CreatePaymentMethodUrlResponse>;
|
|
14
16
|
delete(id: string): Promise<void>;
|
|
15
17
|
setAsPrimary(id: string): Promise<PaymentMethod>;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { PaymentMethod } from '../../../domains/workspace/payment_method.js';
|
|
2
|
-
import { CreatePaymentMethodUrlResponse } from '../dto/payment_method.js';
|
|
2
|
+
import { CreatePaymentMethodRequest, CreatePaymentMethodUrlResponse } from '../dto/payment_method.js';
|
|
3
3
|
import { BaseResourceClient } from './base.js';
|
|
4
4
|
import '../../../common/entity.js';
|
|
5
|
+
import 'zod';
|
|
5
6
|
import 'minisearch';
|
|
6
7
|
import 'nanostores';
|
|
7
8
|
|
|
@@ -10,6 +11,7 @@ declare class PaymentMethodsClient extends BaseResourceClient<PaymentMethod> {
|
|
|
10
11
|
listAll(force?: boolean): Promise<PaymentMethod[]>;
|
|
11
12
|
load(force?: boolean): Promise<PaymentMethod[]>;
|
|
12
13
|
get(id: string, force?: boolean): Promise<PaymentMethod>;
|
|
14
|
+
create(data: CreatePaymentMethodRequest): Promise<PaymentMethod>;
|
|
13
15
|
createUrl(): Promise<CreatePaymentMethodUrlResponse>;
|
|
14
16
|
delete(id: string): Promise<void>;
|
|
15
17
|
setAsPrimary(id: string): Promise<PaymentMethod>;
|
|
@@ -152,6 +152,23 @@ var PaymentMethodsClient = class extends BaseResourceClient {
|
|
|
152
152
|
this.bump();
|
|
153
153
|
return item;
|
|
154
154
|
}
|
|
155
|
+
async create(data) {
|
|
156
|
+
const item = await this.transport.requestData(
|
|
157
|
+
"/payment-methods",
|
|
158
|
+
{
|
|
159
|
+
method: "POST",
|
|
160
|
+
body: JSON.stringify(data)
|
|
161
|
+
}
|
|
162
|
+
);
|
|
163
|
+
if (item.is_primary) {
|
|
164
|
+
for (const existing of this.items.values()) {
|
|
165
|
+
existing.is_primary = existing.id === item.id;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
this.setItem(item);
|
|
169
|
+
this.bump();
|
|
170
|
+
return item;
|
|
171
|
+
}
|
|
155
172
|
createUrl() {
|
|
156
173
|
return this.transport.request(
|
|
157
174
|
"/payment-methods/create-url"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/fabric/services/rest/client/base.ts","../../../../../src/fabric/services/rest/client/payment_methods.ts"],"names":[],"mappings":"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","file":"payment_methods.js","sourcesContent":["import MiniSearch from \"minisearch\";\nimport { atom, type ReadableAtom, type WritableAtom } from \"nanostores\";\n\nexport type { ReadableAtom };\n\nexport interface RestTransport {\n request<T>(path: string, init?: RequestInit): Promise<T>;\n requestData<T>(path: string, init?: RequestInit): Promise<T>;\n requestBlob(path: string, init?: RequestInit): Promise<Blob>;\n}\n\nexport abstract class BaseResourceClient<T extends { id: string } = any> {\n protected readonly items = new Map<string, T>();\n protected isLoaded = false;\n protected searchIndex?: MiniSearch;\n\n private readonly _version: WritableAtom<number> = atom(1);\n\n readonly $version: ReadableAtom<number> = this._version;\n\n get version(): number {\n return this._version.get();\n }\n\n get loaded(): boolean {\n return this.isLoaded;\n }\n\n constructor(protected readonly transport: RestTransport) {}\n\n /**\n * Returns all items currently stored in cache.\n */\n all(): T[] {\n return Array.from(this.items.values());\n }\n\n /**\n * Synchronously finds an item in cache by ID.\n */\n find(id: string): T | undefined {\n return this.items.get(id);\n }\n\n /**\n * Synchronously finds multiple items in cache by ID.\n */\n getMany(...ids: string[]): T[] {\n const results: T[] = [];\n for (const id of ids) {\n const item = this.items.get(id);\n if (item) results.push(item);\n }\n return results;\n }\n\n /**\n * Searches cached items by search term using MiniSearch prefix matching.\n * If search term is empty, returns all items.\n */\n search(term: string): T[] {\n const trimmed = term.trim();\n if (!trimmed || !this.searchIndex) {\n return this.all();\n }\n const results = this.searchIndex.search(trimmed, { prefix: true });\n const matched: T[] = [];\n for (const r of results) {\n const item = this.items.get(r.id);\n if (item) matched.push(item);\n }\n return matched;\n }\n\n /**\n * Hook for subclasses to define what fields get indexed for search.\n */\n protected extractSearchTerms(item: T): string {\n return Object.values(item as Record<string, unknown>)\n .filter((v) => typeof v === \"string\" || typeof v === \"number\")\n .join(\" \")\n .toLowerCase();\n }\n\n /**\n * Adds or replaces an item in the search index.\n */\n protected indexItem(item: T): void {\n if (!this.searchIndex) {\n this.searchIndex = new MiniSearch({\n fields: [\"terms\"],\n storeFields: [\"id\"],\n });\n }\n const doc = { id: item.id, terms: this.extractSearchTerms(item) };\n if (this.searchIndex.has(item.id)) {\n this.searchIndex.replace(doc);\n } else {\n this.searchIndex.add(doc);\n }\n }\n\n /**\n * Sets or updates a single item in cache and search index.\n */\n protected setItem(item: T): void {\n this.items.set(item.id, item);\n this.indexItem(item);\n }\n\n /**\n * Removes a single item from cache and search index.\n */\n protected removeItem(id: string): void {\n this.items.delete(id);\n if (this.searchIndex?.has(id)) {\n this.searchIndex.discard(id);\n }\n }\n\n /**\n * Populates cache and search index with all items, marking the client as loaded.\n */\n protected setAll(items: T[]): void {\n this.items.clear();\n this.searchIndex?.removeAll();\n for (const item of items) {\n this.items.set(item.id, item);\n this.indexItem(item);\n }\n this.isLoaded = true;\n this.bump();\n }\n\n /**\n * Clears the in-memory cache and search index.\n */\n clearCache(): void {\n this.items.clear();\n this.searchIndex?.removeAll();\n this.isLoaded = false;\n this.bump();\n }\n\n bump(): void {\n this._version.set(this._version.get() + 1);\n }\n}\n","import type { PaymentMethod } from \"../../../domains/workspace/payment_method.js\";\nimport type { CreatePaymentMethodUrlResponse } from \"../dto/payment_method.js\";\nimport { BaseResourceClient } from \"./base.js\";\n\nexport class PaymentMethodsClient extends BaseResourceClient<PaymentMethod> {\n protected override extractSearchTerms(item: PaymentMethod): string {\n return (item.last_four || item.last_four_digits || \"\").toLowerCase();\n }\n\n async listAll(force = false): Promise<PaymentMethod[]> {\n if (this.isLoaded && !force) {\n return this.all();\n }\n const items =\n await this.transport.requestData<PaymentMethod[]>(\"/payment-methods\");\n this.setAll(items);\n return items;\n }\n\n async load(force = false): Promise<PaymentMethod[]> {\n return this.listAll(force);\n }\n\n async get(id: string, force = false): Promise<PaymentMethod> {\n if (!force) {\n const cached = this.find(id);\n if (cached) return cached;\n }\n const item = await this.transport.requestData<PaymentMethod>(\n `/payment-methods/${id}`,\n );\n this.setItem(item);\n this.bump();\n return item;\n }\n\n createUrl(): Promise<CreatePaymentMethodUrlResponse> {\n return this.transport.request<CreatePaymentMethodUrlResponse>(\n \"/payment-methods/create-url\",\n );\n }\n\n async delete(id: string): Promise<void> {\n await this.transport.request<void>(`/payment-methods/${id}`, {\n method: \"DELETE\",\n });\n this.removeItem(id);\n this.bump();\n }\n\n async setAsPrimary(id: string): Promise<PaymentMethod> {\n const paymentMethod = await this.transport.requestData<PaymentMethod>(\n `/payment-methods/${id}/set-as-primary`,\n { method: \"POST\" },\n );\n for (const item of this.items.values()) {\n item.is_primary = item.id === id;\n }\n this.setItem(paymentMethod);\n this.bump();\n return paymentMethod;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/fabric/services/rest/client/base.ts","../../../../../src/fabric/services/rest/client/payment_methods.ts"],"names":[],"mappings":"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","file":"payment_methods.js","sourcesContent":["import MiniSearch from \"minisearch\";\nimport { atom, type ReadableAtom, type WritableAtom } from \"nanostores\";\n\nexport type { ReadableAtom };\n\nexport interface RestTransport {\n request<T>(path: string, init?: RequestInit): Promise<T>;\n requestData<T>(path: string, init?: RequestInit): Promise<T>;\n requestBlob(path: string, init?: RequestInit): Promise<Blob>;\n}\n\nexport abstract class BaseResourceClient<T extends { id: string } = any> {\n protected readonly items = new Map<string, T>();\n protected isLoaded = false;\n protected searchIndex?: MiniSearch;\n\n private readonly _version: WritableAtom<number> = atom(1);\n\n readonly $version: ReadableAtom<number> = this._version;\n\n get version(): number {\n return this._version.get();\n }\n\n get loaded(): boolean {\n return this.isLoaded;\n }\n\n constructor(protected readonly transport: RestTransport) {}\n\n /**\n * Returns all items currently stored in cache.\n */\n all(): T[] {\n return Array.from(this.items.values());\n }\n\n /**\n * Synchronously finds an item in cache by ID.\n */\n find(id: string): T | undefined {\n return this.items.get(id);\n }\n\n /**\n * Synchronously finds multiple items in cache by ID.\n */\n getMany(...ids: string[]): T[] {\n const results: T[] = [];\n for (const id of ids) {\n const item = this.items.get(id);\n if (item) results.push(item);\n }\n return results;\n }\n\n /**\n * Searches cached items by search term using MiniSearch prefix matching.\n * If search term is empty, returns all items.\n */\n search(term: string): T[] {\n const trimmed = term.trim();\n if (!trimmed || !this.searchIndex) {\n return this.all();\n }\n const results = this.searchIndex.search(trimmed, { prefix: true });\n const matched: T[] = [];\n for (const r of results) {\n const item = this.items.get(r.id);\n if (item) matched.push(item);\n }\n return matched;\n }\n\n /**\n * Hook for subclasses to define what fields get indexed for search.\n */\n protected extractSearchTerms(item: T): string {\n return Object.values(item as Record<string, unknown>)\n .filter((v) => typeof v === \"string\" || typeof v === \"number\")\n .join(\" \")\n .toLowerCase();\n }\n\n /**\n * Adds or replaces an item in the search index.\n */\n protected indexItem(item: T): void {\n if (!this.searchIndex) {\n this.searchIndex = new MiniSearch({\n fields: [\"terms\"],\n storeFields: [\"id\"],\n });\n }\n const doc = { id: item.id, terms: this.extractSearchTerms(item) };\n if (this.searchIndex.has(item.id)) {\n this.searchIndex.replace(doc);\n } else {\n this.searchIndex.add(doc);\n }\n }\n\n /**\n * Sets or updates a single item in cache and search index.\n */\n protected setItem(item: T): void {\n this.items.set(item.id, item);\n this.indexItem(item);\n }\n\n /**\n * Removes a single item from cache and search index.\n */\n protected removeItem(id: string): void {\n this.items.delete(id);\n if (this.searchIndex?.has(id)) {\n this.searchIndex.discard(id);\n }\n }\n\n /**\n * Populates cache and search index with all items, marking the client as loaded.\n */\n protected setAll(items: T[]): void {\n this.items.clear();\n this.searchIndex?.removeAll();\n for (const item of items) {\n this.items.set(item.id, item);\n this.indexItem(item);\n }\n this.isLoaded = true;\n this.bump();\n }\n\n /**\n * Clears the in-memory cache and search index.\n */\n clearCache(): void {\n this.items.clear();\n this.searchIndex?.removeAll();\n this.isLoaded = false;\n this.bump();\n }\n\n bump(): void {\n this._version.set(this._version.get() + 1);\n }\n}\n","import type { PaymentMethod } from \"../../../domains/workspace/payment_method.js\";\nimport type {\n CreatePaymentMethodRequest,\n CreatePaymentMethodUrlResponse,\n} from \"../dto/payment_method.js\";\nimport { BaseResourceClient } from \"./base.js\";\n\nexport class PaymentMethodsClient extends BaseResourceClient<PaymentMethod> {\n protected override extractSearchTerms(item: PaymentMethod): string {\n return (item.last_four || item.last_four_digits || \"\").toLowerCase();\n }\n\n async listAll(force = false): Promise<PaymentMethod[]> {\n if (this.isLoaded && !force) {\n return this.all();\n }\n const items =\n await this.transport.requestData<PaymentMethod[]>(\"/payment-methods\");\n this.setAll(items);\n return items;\n }\n\n async load(force = false): Promise<PaymentMethod[]> {\n return this.listAll(force);\n }\n\n async get(id: string, force = false): Promise<PaymentMethod> {\n if (!force) {\n const cached = this.find(id);\n if (cached) return cached;\n }\n const item = await this.transport.requestData<PaymentMethod>(\n `/payment-methods/${id}`,\n );\n this.setItem(item);\n this.bump();\n return item;\n }\n\n async create(data: CreatePaymentMethodRequest): Promise<PaymentMethod> {\n const item = await this.transport.requestData<PaymentMethod>(\n \"/payment-methods\",\n {\n method: \"POST\",\n body: JSON.stringify(data),\n },\n );\n if (item.is_primary) {\n for (const existing of this.items.values()) {\n existing.is_primary = existing.id === item.id;\n }\n }\n this.setItem(item);\n this.bump();\n return item;\n }\n\n createUrl(): Promise<CreatePaymentMethodUrlResponse> {\n return this.transport.request<CreatePaymentMethodUrlResponse>(\n \"/payment-methods/create-url\",\n );\n }\n\n async delete(id: string): Promise<void> {\n await this.transport.request<void>(`/payment-methods/${id}`, {\n method: \"DELETE\",\n });\n this.removeItem(id);\n this.bump();\n }\n\n async setAsPrimary(id: string): Promise<PaymentMethod> {\n const paymentMethod = await this.transport.requestData<PaymentMethod>(\n `/payment-methods/${id}/set-as-primary`,\n { method: \"POST\" },\n );\n for (const item of this.items.values()) {\n item.is_primary = item.id === id;\n }\n this.setItem(paymentMethod);\n this.bump();\n return paymentMethod;\n }\n}\n"]}
|
|
@@ -843,6 +843,23 @@ var PaymentMethodsClient = class extends BaseResourceClient {
|
|
|
843
843
|
this.bump();
|
|
844
844
|
return item;
|
|
845
845
|
}
|
|
846
|
+
async create(data) {
|
|
847
|
+
const item = await this.transport.requestData(
|
|
848
|
+
"/payment-methods",
|
|
849
|
+
{
|
|
850
|
+
method: "POST",
|
|
851
|
+
body: JSON.stringify(data)
|
|
852
|
+
}
|
|
853
|
+
);
|
|
854
|
+
if (item.is_primary) {
|
|
855
|
+
for (const existing of this.items.values()) {
|
|
856
|
+
existing.is_primary = existing.id === item.id;
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
this.setItem(item);
|
|
860
|
+
this.bump();
|
|
861
|
+
return item;
|
|
862
|
+
}
|
|
846
863
|
createUrl() {
|
|
847
864
|
return this.transport.request(
|
|
848
865
|
"/payment-methods/create-url"
|