@extenshi/mcp 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -0
- package/dist/bff.d.ts +30 -5
- package/dist/bff.d.ts.map +1 -1
- package/dist/bff.js +14 -0
- package/dist/bff.js.map +1 -1
- package/dist/development-guide.d.ts +34 -22
- package/dist/development-guide.d.ts.map +1 -1
- package/dist/development-guide.js +33 -5
- package/dist/development-guide.js.map +1 -1
- package/dist/localize-workflow.d.ts +3 -0
- package/dist/localize-workflow.d.ts.map +1 -0
- package/dist/localize-workflow.js +87 -0
- package/dist/localize-workflow.js.map +1 -0
- package/dist/pay.d.ts +214 -0
- package/dist/pay.d.ts.map +1 -0
- package/dist/pay.js +202 -0
- package/dist/pay.js.map +1 -0
- package/dist/tools.d.ts +1 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +145 -6
- package/dist/tools.js.map +1 -1
- package/package.json +8 -7
- package/dist/project-workspace.d.ts +0 -1976
- package/dist/project-workspace.d.ts.map +0 -1
- package/dist/project-workspace.js +0 -350
- package/dist/project-workspace.js.map +0 -1
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/** Static, keyless guidance; translation and filesystem changes belong to the caller's local agent. */
|
|
2
|
+
export function renderLocalizeWorkflow() {
|
|
3
|
+
return `# Local extension localization
|
|
4
|
+
|
|
5
|
+
This workflow is free of Extenshi credits and requires no API key. The MCP tool returns
|
|
6
|
+
static instructions. Your coding agent translates using its own provider and tokens;
|
|
7
|
+
the CLI prepares and validates local files offline after installation.
|
|
8
|
+
|
|
9
|
+
## Availability
|
|
10
|
+
|
|
11
|
+
First run \`extenshi localize --help\` with the CLI installed in your environment.
|
|
12
|
+
Use a release that includes localize. A merged change is not proof that npm latest
|
|
13
|
+
contains it. When working from the Extenshi repository, build the CLI with
|
|
14
|
+
\`yarn workspace @extenshi/cli build\` and replace \`extenshi\` below with
|
|
15
|
+
\`node tools/extenshi-cli/dist/cli.js\` (from the repository root).
|
|
16
|
+
|
|
17
|
+
## Prepare
|
|
18
|
+
|
|
19
|
+
Start from manifest.json with default_locale and
|
|
20
|
+
_locales/<default_locale>/messages.json. This workflow handles these messages,
|
|
21
|
+
including manifest name/description references. Full store descriptions and arbitrary
|
|
22
|
+
hardcoded UI strings need their own extraction and review.
|
|
23
|
+
|
|
24
|
+
\`\`\`bash
|
|
25
|
+
extenshi localize prepare ./extension --lang fr,de,es --output ./localization --protect MyBrand
|
|
26
|
+
\`\`\`
|
|
27
|
+
|
|
28
|
+
The output localization-request.json contains missing, stale or untracked messages, grouped by
|
|
29
|
+
locale. Use a fresh output directory on each run; prepare refuses to overwrite its request.
|
|
30
|
+
When localization.json supplies targetLocales, --lang is optional. Its protectedTerms
|
|
31
|
+
are combined with --protect. Keep the version, sourceLocale, locale keys and sourceHashes unchanged. Each
|
|
32
|
+
locale has this structure (the hash shown is illustrative; retain the actual prepared hash):
|
|
33
|
+
|
|
34
|
+
\`\`\`json
|
|
35
|
+
{
|
|
36
|
+
"version": 1,
|
|
37
|
+
"sourceLocale": "en",
|
|
38
|
+
"locales": {
|
|
39
|
+
"fr": {
|
|
40
|
+
"sourceHashes": { "greeting": "<prepared SHA-256>" },
|
|
41
|
+
"messages": { "greeting": { "message": "Hello", "description": "Greeting in popup" } }
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
\`\`\`
|
|
46
|
+
|
|
47
|
+
## Translate and review
|
|
48
|
+
|
|
49
|
+
Translate only message text into each target language. Preserve keys, placeholder
|
|
50
|
+
names and definitions, positional substitutions, escaped dollar signs and protected
|
|
51
|
+
terms exactly. Keep descriptions as translation context. Use the actual product for
|
|
52
|
+
context; never invent features, guarantees or marketing claims. Save the edited bundle
|
|
53
|
+
as ./localization/translations.json. Preserve any removeKeys array: it lists translations whose source keys were
|
|
54
|
+
deleted. Review these removals together with the translated messages. A removal-only
|
|
55
|
+
locale has empty messages and sourceHashes objects and still requires reviewed: true.
|
|
56
|
+
|
|
57
|
+
Review the translations for meaning, tone, brand spelling and truthful claims before
|
|
58
|
+
applying, then add "reviewed": true inside each reviewed locale object alongside
|
|
59
|
+
sourceHashes and messages. Apply requires this explicit review marker. Source hashes detect edits to the source while translation was in progress;
|
|
60
|
+
if the source changed, prepare a fresh request and translate the changed entries again.
|
|
61
|
+
|
|
62
|
+
## Apply and validate
|
|
63
|
+
|
|
64
|
+
\`\`\`bash
|
|
65
|
+
extenshi localize apply ./extension --translations ./localization/translations.json --protect MyBrand
|
|
66
|
+
extenshi localize check ./extension --protect MyBrand
|
|
67
|
+
\`\`\`
|
|
68
|
+
|
|
69
|
+
Apply validates the bundle before updating _locales. Keep .extenshi-localization.json
|
|
70
|
+
with the project: it records source and reviewed target hashes for incremental updates. Direct target edits require re-review. Re-run
|
|
71
|
+
prepare after changing source messages. Review the diff and resolve validation errors;
|
|
72
|
+
do not bypass placeholder, protected-term or listing-risk failures to get a green result.
|
|
73
|
+
|
|
74
|
+
## Release review gates
|
|
75
|
+
|
|
76
|
+
- Run review-risk for every target locale using the exact command documented by your
|
|
77
|
+
installed CLI's help. Resolve listing risks against the real build and retain reports.
|
|
78
|
+
- Have a fluent reviewer inspect the copy and any full store descriptions/screenshots.
|
|
79
|
+
- Load the packaged extension under each target language. Check popup/options, long
|
|
80
|
+
strings, truncation and keyboard accessibility. For Arabic/Hebrew, inspect RTL direction,
|
|
81
|
+
layout and mixed text/numbers. A locale file or passing CLI check does not prove RTL UI support.
|
|
82
|
+
- Rebuild and check every browser artifact. Publish only within the developer's authorization.
|
|
83
|
+
|
|
84
|
+
Documentation: https://docs.extenshi.io/developers/localization
|
|
85
|
+
`;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=localize-workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localize-workflow.js","sourceRoot":"","sources":["../src/localize-workflow.ts"],"names":[],"mappings":"AAAA,uGAAuG;AACvG,MAAM,UAAU,sBAAsB;IACrC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkFP,CAAA;AACD,CAAC"}
|
package/dist/pay.d.ts
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/** Published packages deliberately carry this small contract locally; BFF validates again. */
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export declare const paySchemas: {
|
|
4
|
+
readonly listPayApps: z.ZodObject<{
|
|
5
|
+
includeArchived: z.ZodOptional<z.ZodBoolean>;
|
|
6
|
+
cursor: z.ZodOptional<z.ZodString>;
|
|
7
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
}, "strict", z.ZodTypeAny, {
|
|
9
|
+
includeArchived?: boolean | undefined;
|
|
10
|
+
cursor?: string | undefined;
|
|
11
|
+
limit?: number | undefined;
|
|
12
|
+
}, {
|
|
13
|
+
includeArchived?: boolean | undefined;
|
|
14
|
+
cursor?: string | undefined;
|
|
15
|
+
limit?: number | undefined;
|
|
16
|
+
}>;
|
|
17
|
+
readonly createPayApp: z.ZodObject<{
|
|
18
|
+
name: z.ZodString;
|
|
19
|
+
linkedProjectId: z.ZodOptional<z.ZodString>;
|
|
20
|
+
}, "strict", z.ZodTypeAny, {
|
|
21
|
+
name: string;
|
|
22
|
+
linkedProjectId?: string | undefined;
|
|
23
|
+
}, {
|
|
24
|
+
name: string;
|
|
25
|
+
linkedProjectId?: string | undefined;
|
|
26
|
+
}>;
|
|
27
|
+
readonly getPayApp: z.ZodObject<{
|
|
28
|
+
appId: z.ZodString;
|
|
29
|
+
}, "strict", z.ZodTypeAny, {
|
|
30
|
+
appId: string;
|
|
31
|
+
}, {
|
|
32
|
+
appId: string;
|
|
33
|
+
}>;
|
|
34
|
+
readonly getPayReadiness: z.ZodObject<{
|
|
35
|
+
appId: z.ZodString;
|
|
36
|
+
}, "strict", z.ZodTypeAny, {
|
|
37
|
+
appId: string;
|
|
38
|
+
}, {
|
|
39
|
+
appId: string;
|
|
40
|
+
}>;
|
|
41
|
+
readonly linkPayApp: z.ZodObject<{
|
|
42
|
+
appId: z.ZodString;
|
|
43
|
+
} & {
|
|
44
|
+
projectId: z.ZodString;
|
|
45
|
+
}, "strict", z.ZodTypeAny, {
|
|
46
|
+
appId: string;
|
|
47
|
+
projectId: string;
|
|
48
|
+
}, {
|
|
49
|
+
appId: string;
|
|
50
|
+
projectId: string;
|
|
51
|
+
}>;
|
|
52
|
+
readonly unlinkPayApp: z.ZodObject<{
|
|
53
|
+
appId: z.ZodString;
|
|
54
|
+
}, "strict", z.ZodTypeAny, {
|
|
55
|
+
appId: string;
|
|
56
|
+
}, {
|
|
57
|
+
appId: string;
|
|
58
|
+
}>;
|
|
59
|
+
readonly archivePayApp: z.ZodObject<{
|
|
60
|
+
appId: z.ZodString;
|
|
61
|
+
}, "strict", z.ZodTypeAny, {
|
|
62
|
+
appId: string;
|
|
63
|
+
}, {
|
|
64
|
+
appId: string;
|
|
65
|
+
}>;
|
|
66
|
+
readonly exportPayData: z.ZodObject<{
|
|
67
|
+
appId: z.ZodString;
|
|
68
|
+
} & {
|
|
69
|
+
resource: z.ZodEnum<["offers", "payments", "subscriptions", "entitlements", "customers"]>;
|
|
70
|
+
cursor: z.ZodOptional<z.ZodString>;
|
|
71
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
72
|
+
}, "strict", z.ZodTypeAny, {
|
|
73
|
+
appId: string;
|
|
74
|
+
resource: "offers" | "payments" | "subscriptions" | "entitlements" | "customers";
|
|
75
|
+
cursor?: string | undefined;
|
|
76
|
+
limit?: number | undefined;
|
|
77
|
+
}, {
|
|
78
|
+
appId: string;
|
|
79
|
+
resource: "offers" | "payments" | "subscriptions" | "entitlements" | "customers";
|
|
80
|
+
cursor?: string | undefined;
|
|
81
|
+
limit?: number | undefined;
|
|
82
|
+
}>;
|
|
83
|
+
readonly getPaySeller: z.ZodObject<{
|
|
84
|
+
appId: z.ZodString;
|
|
85
|
+
}, "strict", z.ZodTypeAny, {
|
|
86
|
+
appId: string;
|
|
87
|
+
}, {
|
|
88
|
+
appId: string;
|
|
89
|
+
}>;
|
|
90
|
+
readonly connectPaySeller: z.ZodObject<{
|
|
91
|
+
appId: z.ZodString;
|
|
92
|
+
} & {
|
|
93
|
+
provider: z.ZodDefault<z.ZodLiteral<"stripe">>;
|
|
94
|
+
accountKind: z.ZodDefault<z.ZodEnum<["standard", "express"]>>;
|
|
95
|
+
}, "strict", z.ZodTypeAny, {
|
|
96
|
+
appId: string;
|
|
97
|
+
provider: "stripe";
|
|
98
|
+
accountKind: "standard" | "express";
|
|
99
|
+
}, {
|
|
100
|
+
appId: string;
|
|
101
|
+
provider?: "stripe" | undefined;
|
|
102
|
+
accountKind?: "standard" | "express" | undefined;
|
|
103
|
+
}>;
|
|
104
|
+
readonly refreshPaySeller: z.ZodObject<{
|
|
105
|
+
appId: z.ZodString;
|
|
106
|
+
}, "strict", z.ZodTypeAny, {
|
|
107
|
+
appId: string;
|
|
108
|
+
}, {
|
|
109
|
+
appId: string;
|
|
110
|
+
}>;
|
|
111
|
+
readonly setPaySellerProfile: z.ZodObject<{
|
|
112
|
+
appId: z.ZodString;
|
|
113
|
+
} & {
|
|
114
|
+
profile: z.ZodObject<{
|
|
115
|
+
displayName: z.ZodString;
|
|
116
|
+
supportUrl: z.ZodUnion<[z.ZodEffects<z.ZodString, string, string>, z.ZodString]>;
|
|
117
|
+
termsUrl: z.ZodNullable<z.ZodEffects<z.ZodString, string, string>>;
|
|
118
|
+
}, "strict", z.ZodTypeAny, {
|
|
119
|
+
displayName: string;
|
|
120
|
+
supportUrl: string;
|
|
121
|
+
termsUrl: string | null;
|
|
122
|
+
}, {
|
|
123
|
+
displayName: string;
|
|
124
|
+
supportUrl: string;
|
|
125
|
+
termsUrl: string | null;
|
|
126
|
+
}>;
|
|
127
|
+
}, "strict", z.ZodTypeAny, {
|
|
128
|
+
appId: string;
|
|
129
|
+
profile: {
|
|
130
|
+
displayName: string;
|
|
131
|
+
supportUrl: string;
|
|
132
|
+
termsUrl: string | null;
|
|
133
|
+
};
|
|
134
|
+
}, {
|
|
135
|
+
appId: string;
|
|
136
|
+
profile: {
|
|
137
|
+
displayName: string;
|
|
138
|
+
supportUrl: string;
|
|
139
|
+
termsUrl: string | null;
|
|
140
|
+
};
|
|
141
|
+
}>;
|
|
142
|
+
readonly upsertPayOffer: z.ZodObject<{
|
|
143
|
+
appId: z.ZodString;
|
|
144
|
+
} & {
|
|
145
|
+
sku: z.ZodString;
|
|
146
|
+
kind: z.ZodEnum<["one_time", "subscription", "lifetime"]>;
|
|
147
|
+
interval: z.ZodDefault<z.ZodNullable<z.ZodEnum<["month", "year"]>>>;
|
|
148
|
+
amountMinor: z.ZodNumber;
|
|
149
|
+
currency: z.ZodEnum<["usd", "eur", "gbp"]>;
|
|
150
|
+
title: z.ZodString;
|
|
151
|
+
description: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
152
|
+
features: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
153
|
+
sortOrder: z.ZodDefault<z.ZodNumber>;
|
|
154
|
+
}, "strict", z.ZodTypeAny, {
|
|
155
|
+
appId: string;
|
|
156
|
+
sku: string;
|
|
157
|
+
kind: "one_time" | "subscription" | "lifetime";
|
|
158
|
+
interval: "month" | "year" | null;
|
|
159
|
+
amountMinor: number;
|
|
160
|
+
currency: "usd" | "eur" | "gbp";
|
|
161
|
+
title: string;
|
|
162
|
+
description: string | null;
|
|
163
|
+
features: string[];
|
|
164
|
+
sortOrder: number;
|
|
165
|
+
}, {
|
|
166
|
+
appId: string;
|
|
167
|
+
sku: string;
|
|
168
|
+
kind: "one_time" | "subscription" | "lifetime";
|
|
169
|
+
amountMinor: number;
|
|
170
|
+
currency: "usd" | "eur" | "gbp";
|
|
171
|
+
title: string;
|
|
172
|
+
interval?: "month" | "year" | null | undefined;
|
|
173
|
+
description?: string | null | undefined;
|
|
174
|
+
features?: string[] | undefined;
|
|
175
|
+
sortOrder?: number | undefined;
|
|
176
|
+
}>;
|
|
177
|
+
readonly archivePayOffer: z.ZodObject<{
|
|
178
|
+
appId: z.ZodString;
|
|
179
|
+
} & {
|
|
180
|
+
sku: z.ZodString;
|
|
181
|
+
}, "strict", z.ZodTypeAny, {
|
|
182
|
+
appId: string;
|
|
183
|
+
sku: string;
|
|
184
|
+
}, {
|
|
185
|
+
appId: string;
|
|
186
|
+
sku: string;
|
|
187
|
+
}>;
|
|
188
|
+
readonly setPayEnabled: z.ZodObject<{
|
|
189
|
+
appId: z.ZodString;
|
|
190
|
+
} & {
|
|
191
|
+
enabled: z.ZodBoolean;
|
|
192
|
+
}, "strict", z.ZodTypeAny, {
|
|
193
|
+
appId: string;
|
|
194
|
+
enabled: boolean;
|
|
195
|
+
}, {
|
|
196
|
+
appId: string;
|
|
197
|
+
enabled: boolean;
|
|
198
|
+
}>;
|
|
199
|
+
readonly rotatePayKey: z.ZodObject<{
|
|
200
|
+
appId: z.ZodString;
|
|
201
|
+
}, "strict", z.ZodTypeAny, {
|
|
202
|
+
appId: string;
|
|
203
|
+
}, {
|
|
204
|
+
appId: string;
|
|
205
|
+
}>;
|
|
206
|
+
};
|
|
207
|
+
export type PayMethod = keyof typeof paySchemas;
|
|
208
|
+
export type PayBff = {
|
|
209
|
+
[M in PayMethod]: (input: z.infer<(typeof paySchemas)[M]>) => Promise<unknown>;
|
|
210
|
+
};
|
|
211
|
+
export declare const PAY_OPERATIONS: readonly [readonly ["listPayApps", "list_pay_apps", "list", "payApp.list", false, "List your independent Pay applications. No development project required. Follow nextCursor for more results."], readonly ["createPayApp", "create_pay_app", "create", "payApp.create", true, "Create an independent Pay application; linking a development project is optional. Creates a new application on every call: do not retry blindly after a timeout."], readonly ["getPayApp", "get_pay_app", "get", "payApp.get", false, "Read your Pay application and optional project link."], readonly ["getPayReadiness", "get_pay_readiness", "readiness", "payApp.readiness", false, "Check current checkout and launch prerequisites. A passing checkout check does not prove a live external purchase or SDK publication."], readonly ["linkPayApp", "link_pay_app", "link", "payApp.link", true, "Link your Pay application to your development project. Existing purchases remain attached to the Pay application."], readonly ["unlinkPayApp", "unlink_pay_app", "unlink", "payApp.unlink", true, "Remove the optional development-project link without deleting Pay data."], readonly ["archivePayApp", "archive_pay_app", "archive", "payApp.archive", true, "Archive your application and stop new checkout. Preserve payment records and existing entitlements."], readonly ["exportPayData", "export_pay_data", "export", "payApp.export", false, "Export one page of your application data. Follow nextCursor until null for a complete export. Customer/payment data is sensitive: save only to an author-controlled destination; never paste into public issues."], readonly ["getPaySeller", "get_pay_seller", "seller", "paySeller.get", false, "Read seller connection, public profile, offers and publishable SDK key. Agreement signing and KYC require the author in the browser."], readonly ["connectPaySeller", "connect_pay_seller", "connect", "paySeller.connect", true, "Start Stripe Connect onboarding and return a browser action URL. The author must complete KYC and legal acceptance; never do these on their behalf."], readonly ["refreshPaySeller", "refresh_pay_seller", "refresh", "paySeller.refreshStatus", true, "Refresh current payment-provider onboarding status. This does not complete KYC or accept agreements."], readonly ["setPaySellerProfile", "set_pay_seller_profile", "profile", "paySeller.setPublicProfile", true, "Save author-confirmed public seller identity, support and terms links. Never invent legal identity or terms."], readonly ["upsertPayOffer", "upsert_pay_offer", "offer-upsert", "paySeller.upsertOffer", true, "Create or update an offer by stable SKU. Price is in minor currency units. Use only the author-approved price, billing interval and features."], readonly ["archivePayOffer", "archive_pay_offer", "offer-archive", "paySeller.archiveOffer", true, "Stop offering a SKU for new checkout; preserve historical purchases."], readonly ["setPayEnabled", "set_pay_enabled", "enable", "paySeller.setEnabled", true, "Explicitly enable or disable new payments. Enabling is a live commerce change: only do so with author authorization and after checking readiness. Backend prerequisites remain enforced."], readonly ["rotatePayKey", "rotate_pay_key", "rotate-key", "paySeller.rotatePublishableKey", true, "Generate a new publishable SDK key. Prior keys remain accepted for installed extension builds; this is not secret revocation. Never retry blindly."]];
|
|
212
|
+
/** The legacy seller API uses projectId as the payment namespace. Never substitute a linked project ID. */
|
|
213
|
+
export declare function payWireInput(method: PayMethod, input: Record<string, unknown>): Record<string, unknown>;
|
|
214
|
+
//# sourceMappingURL=pay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pay.d.ts","sourceRoot":"","sources":["../src/pay.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAavB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDb,CAAA;AACV,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,UAAU,CAAA;AAC/C,MAAM,MAAM,MAAM,GAAG;KAAG,CAAC,IAAI,SAAS,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC;CAAE,CAAA;AACvG,eAAO,MAAM,cAAc,61GAiIjB,CAAA;AAEV,2GAA2G;AAC3G,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIvG"}
|
package/dist/pay.js
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/** Published packages deliberately carry this small contract locally; BFF validates again. */
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
const app = z.object({ appId: z.string().uuid() }).strict();
|
|
4
|
+
const sku = z.string().regex(/^[a-z0-9][a-z0-9_-]{1,39}$/);
|
|
5
|
+
const publicUrl = z
|
|
6
|
+
.string()
|
|
7
|
+
.trim()
|
|
8
|
+
.max(2048)
|
|
9
|
+
.url()
|
|
10
|
+
.refine((value) => {
|
|
11
|
+
const url = new URL(value);
|
|
12
|
+
return url.protocol === 'https:' && !url.username && !url.password;
|
|
13
|
+
}, 'Use an HTTPS URL without credentials');
|
|
14
|
+
export const paySchemas = {
|
|
15
|
+
listPayApps: z
|
|
16
|
+
.object({
|
|
17
|
+
includeArchived: z.boolean().optional(),
|
|
18
|
+
cursor: z.string().uuid().optional(),
|
|
19
|
+
limit: z.number().int().min(1).max(100).optional(),
|
|
20
|
+
})
|
|
21
|
+
.strict(),
|
|
22
|
+
createPayApp: z
|
|
23
|
+
.object({ name: z.string().trim().min(1).max(120), linkedProjectId: z.string().uuid().optional() })
|
|
24
|
+
.strict(),
|
|
25
|
+
getPayApp: app,
|
|
26
|
+
getPayReadiness: app,
|
|
27
|
+
linkPayApp: app.extend({ projectId: z.string().uuid() }),
|
|
28
|
+
unlinkPayApp: app,
|
|
29
|
+
archivePayApp: app,
|
|
30
|
+
exportPayData: app.extend({
|
|
31
|
+
resource: z.enum(['offers', 'payments', 'subscriptions', 'entitlements', 'customers']),
|
|
32
|
+
cursor: z.string().uuid().optional(),
|
|
33
|
+
limit: z.number().int().min(1).max(500).optional(),
|
|
34
|
+
}),
|
|
35
|
+
getPaySeller: app,
|
|
36
|
+
connectPaySeller: app.extend({
|
|
37
|
+
provider: z.literal('stripe').default('stripe'),
|
|
38
|
+
accountKind: z.enum(['standard', 'express']).default('standard'),
|
|
39
|
+
}),
|
|
40
|
+
refreshPaySeller: app,
|
|
41
|
+
setPaySellerProfile: app.extend({
|
|
42
|
+
profile: z
|
|
43
|
+
.object({
|
|
44
|
+
displayName: z.string().trim().min(1).max(160),
|
|
45
|
+
supportUrl: z.union([publicUrl, z.string().trim().email().max(254)]),
|
|
46
|
+
termsUrl: publicUrl.nullable(),
|
|
47
|
+
})
|
|
48
|
+
.strict(),
|
|
49
|
+
}),
|
|
50
|
+
upsertPayOffer: app.extend({
|
|
51
|
+
sku,
|
|
52
|
+
kind: z.enum(['one_time', 'subscription', 'lifetime']),
|
|
53
|
+
interval: z.enum(['month', 'year']).nullable().default(null),
|
|
54
|
+
amountMinor: z.number().int().min(199).max(100_000_00),
|
|
55
|
+
currency: z.enum(['usd', 'eur', 'gbp']),
|
|
56
|
+
title: z.string().trim().min(1).max(80),
|
|
57
|
+
description: z.string().trim().max(500).nullable().default(null),
|
|
58
|
+
features: z.array(z.string().trim().min(1).max(60)).max(20).default([]),
|
|
59
|
+
sortOrder: z.number().int().min(0).max(1000).default(0),
|
|
60
|
+
}),
|
|
61
|
+
archivePayOffer: app.extend({ sku }),
|
|
62
|
+
setPayEnabled: app.extend({ enabled: z.boolean() }),
|
|
63
|
+
rotatePayKey: app,
|
|
64
|
+
};
|
|
65
|
+
export const PAY_OPERATIONS = [
|
|
66
|
+
[
|
|
67
|
+
'listPayApps',
|
|
68
|
+
'list_pay_apps',
|
|
69
|
+
'list',
|
|
70
|
+
'payApp.list',
|
|
71
|
+
false,
|
|
72
|
+
'List your independent Pay applications. No development project required. Follow nextCursor for more results.',
|
|
73
|
+
],
|
|
74
|
+
[
|
|
75
|
+
'createPayApp',
|
|
76
|
+
'create_pay_app',
|
|
77
|
+
'create',
|
|
78
|
+
'payApp.create',
|
|
79
|
+
true,
|
|
80
|
+
'Create an independent Pay application; linking a development project is optional. Creates a new application on every call: do not retry blindly after a timeout.',
|
|
81
|
+
],
|
|
82
|
+
[
|
|
83
|
+
'getPayApp',
|
|
84
|
+
'get_pay_app',
|
|
85
|
+
'get',
|
|
86
|
+
'payApp.get',
|
|
87
|
+
false,
|
|
88
|
+
'Read your Pay application and optional project link.',
|
|
89
|
+
],
|
|
90
|
+
[
|
|
91
|
+
'getPayReadiness',
|
|
92
|
+
'get_pay_readiness',
|
|
93
|
+
'readiness',
|
|
94
|
+
'payApp.readiness',
|
|
95
|
+
false,
|
|
96
|
+
'Check current checkout and launch prerequisites. A passing checkout check does not prove a live external purchase or SDK publication.',
|
|
97
|
+
],
|
|
98
|
+
[
|
|
99
|
+
'linkPayApp',
|
|
100
|
+
'link_pay_app',
|
|
101
|
+
'link',
|
|
102
|
+
'payApp.link',
|
|
103
|
+
true,
|
|
104
|
+
'Link your Pay application to your development project. Existing purchases remain attached to the Pay application.',
|
|
105
|
+
],
|
|
106
|
+
[
|
|
107
|
+
'unlinkPayApp',
|
|
108
|
+
'unlink_pay_app',
|
|
109
|
+
'unlink',
|
|
110
|
+
'payApp.unlink',
|
|
111
|
+
true,
|
|
112
|
+
'Remove the optional development-project link without deleting Pay data.',
|
|
113
|
+
],
|
|
114
|
+
[
|
|
115
|
+
'archivePayApp',
|
|
116
|
+
'archive_pay_app',
|
|
117
|
+
'archive',
|
|
118
|
+
'payApp.archive',
|
|
119
|
+
true,
|
|
120
|
+
'Archive your application and stop new checkout. Preserve payment records and existing entitlements.',
|
|
121
|
+
],
|
|
122
|
+
[
|
|
123
|
+
'exportPayData',
|
|
124
|
+
'export_pay_data',
|
|
125
|
+
'export',
|
|
126
|
+
'payApp.export',
|
|
127
|
+
false,
|
|
128
|
+
'Export one page of your application data. Follow nextCursor until null for a complete export. Customer/payment data is sensitive: save only to an author-controlled destination; never paste into public issues.',
|
|
129
|
+
],
|
|
130
|
+
[
|
|
131
|
+
'getPaySeller',
|
|
132
|
+
'get_pay_seller',
|
|
133
|
+
'seller',
|
|
134
|
+
'paySeller.get',
|
|
135
|
+
false,
|
|
136
|
+
'Read seller connection, public profile, offers and publishable SDK key. Agreement signing and KYC require the author in the browser.',
|
|
137
|
+
],
|
|
138
|
+
[
|
|
139
|
+
'connectPaySeller',
|
|
140
|
+
'connect_pay_seller',
|
|
141
|
+
'connect',
|
|
142
|
+
'paySeller.connect',
|
|
143
|
+
true,
|
|
144
|
+
'Start Stripe Connect onboarding and return a browser action URL. The author must complete KYC and legal acceptance; never do these on their behalf.',
|
|
145
|
+
],
|
|
146
|
+
[
|
|
147
|
+
'refreshPaySeller',
|
|
148
|
+
'refresh_pay_seller',
|
|
149
|
+
'refresh',
|
|
150
|
+
'paySeller.refreshStatus',
|
|
151
|
+
true,
|
|
152
|
+
'Refresh current payment-provider onboarding status. This does not complete KYC or accept agreements.',
|
|
153
|
+
],
|
|
154
|
+
[
|
|
155
|
+
'setPaySellerProfile',
|
|
156
|
+
'set_pay_seller_profile',
|
|
157
|
+
'profile',
|
|
158
|
+
'paySeller.setPublicProfile',
|
|
159
|
+
true,
|
|
160
|
+
'Save author-confirmed public seller identity, support and terms links. Never invent legal identity or terms.',
|
|
161
|
+
],
|
|
162
|
+
[
|
|
163
|
+
'upsertPayOffer',
|
|
164
|
+
'upsert_pay_offer',
|
|
165
|
+
'offer-upsert',
|
|
166
|
+
'paySeller.upsertOffer',
|
|
167
|
+
true,
|
|
168
|
+
'Create or update an offer by stable SKU. Price is in minor currency units. Use only the author-approved price, billing interval and features.',
|
|
169
|
+
],
|
|
170
|
+
[
|
|
171
|
+
'archivePayOffer',
|
|
172
|
+
'archive_pay_offer',
|
|
173
|
+
'offer-archive',
|
|
174
|
+
'paySeller.archiveOffer',
|
|
175
|
+
true,
|
|
176
|
+
'Stop offering a SKU for new checkout; preserve historical purchases.',
|
|
177
|
+
],
|
|
178
|
+
[
|
|
179
|
+
'setPayEnabled',
|
|
180
|
+
'set_pay_enabled',
|
|
181
|
+
'enable',
|
|
182
|
+
'paySeller.setEnabled',
|
|
183
|
+
true,
|
|
184
|
+
'Explicitly enable or disable new payments. Enabling is a live commerce change: only do so with author authorization and after checking readiness. Backend prerequisites remain enforced.',
|
|
185
|
+
],
|
|
186
|
+
[
|
|
187
|
+
'rotatePayKey',
|
|
188
|
+
'rotate_pay_key',
|
|
189
|
+
'rotate-key',
|
|
190
|
+
'paySeller.rotatePublishableKey',
|
|
191
|
+
true,
|
|
192
|
+
'Generate a new publishable SDK key. Prior keys remain accepted for installed extension builds; this is not secret revocation. Never retry blindly.',
|
|
193
|
+
],
|
|
194
|
+
];
|
|
195
|
+
/** The legacy seller API uses projectId as the payment namespace. Never substitute a linked project ID. */
|
|
196
|
+
export function payWireInput(method, input) {
|
|
197
|
+
if (!PAY_OPERATIONS.find(([key]) => key === method)?.[3].startsWith('paySeller.'))
|
|
198
|
+
return input;
|
|
199
|
+
const { appId, ...rest } = input;
|
|
200
|
+
return { ...rest, projectId: appId };
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=pay.js.map
|
package/dist/pay.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pay.js","sourceRoot":"","sources":["../src/pay.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* list_my_projects, get_project_state, get_project_scaffold,
|
|
27
27
|
* list/get/publish/update privacy policy (hosted; Pro)
|
|
28
28
|
* 'docs' → get_development_guide, search_docs, list_extension_templates, generate_icon_workflow,
|
|
29
|
-
* generate_welcome_page_workflow
|
|
29
|
+
* generate_welcome_page_workflow, localize_workflow (free; no key)
|
|
30
30
|
* 'scan' → scan_extension (local artifact; stdio only)
|
|
31
31
|
* 'publish' → publish_extension (local creds; stdio only)
|
|
32
32
|
*
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,SAAS,CAAA;AAE1G,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAuBnC,eAAO,MAAM,QAAQ,sCAAsC,CAAA;AAC3D,eAAO,MAAM,WAAW,oCAAoC,CAAA;AAC5D,eAAO,MAAM,YAAY,qCAAqC,CAAA;AAE9D,eAAO,MAAM,mBAAmB,QAWS,CAAA;AAEzC;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAA;AAEtC,eAAO,MAAM,WAAW,aAAa,CAAA;AAErC,eAAO,MAAM,mBAAmB,QAgBmB,CAAA;AAEnD,oFAAoF;AACpF,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,GAAG,MAAM,CAWnF;AAID,uDAAuD;AACvD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;AAE7D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC/B,OAAO,CAAC,EAAE,kBAAkB,CAAA;CAC5B;AAED,MAAM,WAAW,QAAQ;IACxB,kEAAkE;IAClE,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACzD,+BAA+B;IAC/B,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;IACrC;;;;;OAKG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,GAAG,CAAA;IACrC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,CAAA;IAChD;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,GAAG,SAAS,CAAA;IACxD,sFAAsF;IACtF,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAiFD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAE,MAA2B,GAAG,OAAO,CAGxF;AAkVD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAmjCnE"}
|