@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.
@@ -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
@@ -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 (free; no key)
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
  *
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,SAAS,CAAA;AAE1G,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAsBnC,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;AAmTD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAs8BnE"}
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"}