@rovela-ai/sdk 0.19.8 → 0.21.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/dist/admin/api/index.d.ts +4 -2
- package/dist/admin/api/index.d.ts.map +1 -1
- package/dist/admin/api/index.js +4 -2
- package/dist/admin/api/index.js.map +1 -1
- package/dist/admin/api/integrations.d.ts +60 -0
- package/dist/admin/api/integrations.d.ts.map +1 -0
- package/dist/admin/api/integrations.js +337 -0
- package/dist/admin/api/integrations.js.map +1 -0
- package/dist/admin/api/orders.d.ts +49 -0
- package/dist/admin/api/orders.d.ts.map +1 -1
- package/dist/admin/api/orders.js +293 -30
- package/dist/admin/api/orders.js.map +1 -1
- package/dist/admin/api/settings.d.ts.map +1 -1
- package/dist/admin/api/settings.js +6 -1
- package/dist/admin/api/settings.js.map +1 -1
- package/dist/admin/api/shipping.d.ts +49 -0
- package/dist/admin/api/shipping.d.ts.map +1 -1
- package/dist/admin/api/shipping.js +144 -0
- package/dist/admin/api/shipping.js.map +1 -1
- package/dist/admin/components/AdminNav.d.ts.map +1 -1
- package/dist/admin/components/AdminNav.js +3 -1
- package/dist/admin/components/AdminNav.js.map +1 -1
- package/dist/admin/components/AdminSelect.d.ts.map +1 -1
- package/dist/admin/components/AdminSelect.js +2 -0
- package/dist/admin/components/AdminSelect.js.map +1 -1
- package/dist/admin/components/DiscountsManager.d.ts.map +1 -1
- package/dist/admin/components/DiscountsManager.js +2 -2
- package/dist/admin/components/DiscountsManager.js.map +1 -1
- package/dist/admin/components/IntegrationsManager.d.ts +5 -0
- package/dist/admin/components/IntegrationsManager.d.ts.map +1 -0
- package/dist/admin/components/IntegrationsManager.js +138 -0
- package/dist/admin/components/IntegrationsManager.js.map +1 -0
- package/dist/admin/components/OrderDetails.d.ts.map +1 -1
- package/dist/admin/components/OrderDetails.js +75 -3
- package/dist/admin/components/OrderDetails.js.map +1 -1
- package/dist/admin/components/ShippingSettings.d.ts.map +1 -1
- package/dist/admin/components/ShippingSettings.js +316 -137
- package/dist/admin/components/ShippingSettings.js.map +1 -1
- package/dist/admin/components/UsersTable.d.ts.map +1 -1
- package/dist/admin/components/UsersTable.js +2 -0
- package/dist/admin/components/UsersTable.js.map +1 -1
- package/dist/admin/components/VariantManager.d.ts.map +1 -1
- package/dist/admin/components/VariantManager.js +8 -2
- package/dist/admin/components/VariantManager.js.map +1 -1
- package/dist/admin/components/index.d.ts +2 -0
- package/dist/admin/components/index.d.ts.map +1 -1
- package/dist/admin/components/index.js +1 -0
- package/dist/admin/components/index.js.map +1 -1
- package/dist/admin/index.d.ts +1 -1
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +2 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/integrations/brevo-logo.d.ts +11 -0
- package/dist/admin/integrations/brevo-logo.d.ts.map +1 -0
- package/dist/admin/integrations/brevo-logo.js +11 -0
- package/dist/admin/integrations/brevo-logo.js.map +1 -0
- package/dist/admin/integrations/registry.d.ts +116 -0
- package/dist/admin/integrations/registry.d.ts.map +1 -0
- package/dist/admin/integrations/registry.js +389 -0
- package/dist/admin/integrations/registry.js.map +1 -0
- package/dist/admin/types.d.ts +13 -0
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/checkout/api/colissimo-relays.d.ts +24 -0
- package/dist/checkout/api/colissimo-relays.d.ts.map +1 -0
- package/dist/checkout/api/colissimo-relays.js +60 -0
- package/dist/checkout/api/colissimo-relays.js.map +1 -0
- package/dist/checkout/api/manual.d.ts.map +1 -1
- package/dist/checkout/api/manual.js +21 -5
- package/dist/checkout/api/manual.js.map +1 -1
- package/dist/checkout/api/shipping.d.ts.map +1 -1
- package/dist/checkout/api/shipping.js +60 -82
- package/dist/checkout/api/shipping.js.map +1 -1
- package/dist/checkout/components/CheckoutFlow.d.ts.map +1 -1
- package/dist/checkout/components/CheckoutFlow.js +141 -3
- package/dist/checkout/components/CheckoutFlow.js.map +1 -1
- package/dist/checkout/components/ShippingOptions.d.ts +8 -1
- package/dist/checkout/components/ShippingOptions.d.ts.map +1 -1
- package/dist/checkout/components/ShippingOptions.js +40 -11
- package/dist/checkout/components/ShippingOptions.js.map +1 -1
- package/dist/checkout/components/colissimo-logo.d.ts +12 -0
- package/dist/checkout/components/colissimo-logo.d.ts.map +1 -0
- package/dist/checkout/components/colissimo-logo.js +12 -0
- package/dist/checkout/components/colissimo-logo.js.map +1 -0
- package/dist/checkout/server/create-checkout-session.d.ts.map +1 -1
- package/dist/checkout/server/create-checkout-session.js +55 -13
- package/dist/checkout/server/create-checkout-session.js.map +1 -1
- package/dist/checkout/server/handle-webhook.js +7 -3
- package/dist/checkout/server/handle-webhook.js.map +1 -1
- package/dist/checkout/server/order-service.d.ts.map +1 -1
- package/dist/checkout/server/order-service.js +25 -0
- package/dist/checkout/server/order-service.js.map +1 -1
- package/dist/checkout/server/pricing.d.ts +20 -0
- package/dist/checkout/server/pricing.d.ts.map +1 -1
- package/dist/checkout/server/pricing.js +51 -5
- package/dist/checkout/server/pricing.js.map +1 -1
- package/dist/checkout/types.d.ts +57 -1
- package/dist/checkout/types.d.ts.map +1 -1
- package/dist/core/db/queries.d.ts +143 -21
- package/dist/core/db/queries.d.ts.map +1 -1
- package/dist/core/db/queries.js +228 -1
- package/dist/core/db/queries.js.map +1 -1
- package/dist/core/db/schema.d.ts +323 -5
- package/dist/core/db/schema.d.ts.map +1 -1
- package/dist/core/db/schema.js +70 -0
- package/dist/core/db/schema.js.map +1 -1
- package/dist/core/i18n/messages/en.d.ts.map +1 -1
- package/dist/core/i18n/messages/en.js +132 -0
- package/dist/core/i18n/messages/en.js.map +1 -1
- package/dist/core/i18n/messages/fr.d.ts.map +1 -1
- package/dist/core/i18n/messages/fr.js +132 -0
- package/dist/core/i18n/messages/fr.js.map +1 -1
- package/dist/products/api/products.d.ts +3 -1
- package/dist/products/api/products.d.ts.map +1 -1
- package/dist/products/api/products.js +29 -3
- package/dist/products/api/products.js.map +1 -1
- package/dist/products/components/VariantSelector.d.ts.map +1 -1
- package/dist/products/components/VariantSelector.js +4 -1
- package/dist/products/components/VariantSelector.js.map +1 -1
- package/dist/products/hooks/useProducts.d.ts +3 -1
- package/dist/products/hooks/useProducts.d.ts.map +1 -1
- package/dist/products/hooks/useProducts.js +4 -2
- package/dist/products/hooks/useProducts.js.map +1 -1
- package/dist/shipping/colissimo.d.ts +166 -0
- package/dist/shipping/colissimo.d.ts.map +1 -0
- package/dist/shipping/colissimo.js +424 -0
- package/dist/shipping/colissimo.js.map +1 -0
- package/dist/shipping/index.d.ts +4 -1
- package/dist/shipping/index.d.ts.map +1 -1
- package/dist/shipping/index.js +3 -1
- package/dist/shipping/index.js.map +1 -1
- package/docs/changelog/epoch-07-shipping-carriers.md +125 -0
- package/docs/changelog/epoch-08-integrations.md +125 -0
- package/package.json +6 -1
- package/templates/store-template/.claude/skills/build-feature/SKILL.md +19 -0
- package/templates/store-template/.claude/skills/manage-products/SKILL.md +1 -1
- package/templates/store-template/app/admin/(dashboard)/integrations/page.tsx +17 -0
- package/templates/store-template/app/api/admin/integrations/route.ts +9 -0
- package/templates/store-template/app/api/admin/orders/[id]/colissimo-defaults/route.ts +6 -0
- package/templates/store-template/app/api/admin/orders/[id]/label/route.ts +6 -0
- package/templates/store-template/app/api/admin/orders/[id]/ship-with-colissimo/route.ts +6 -0
- package/templates/store-template/app/api/admin/shipping/colissimo/route.ts +10 -0
- package/templates/store-template/app/api/checkout/colissimo-relays/route.ts +4 -0
- package/templates/store-template/app/faq/page.tsx +42 -56
- package/templates/store-template/app/privacy/page.tsx +65 -105
- package/templates/store-template/app/products/[slug]/ProductDetailClient.tsx +6 -3
- package/templates/store-template/app/products/page.tsx +63 -1
- package/templates/store-template/app/terms/page.tsx +70 -198
- package/templates/store-template/package.json +1 -1
|
@@ -87,7 +87,7 @@ export { POST as bulkProducts } from './products-bulk';
|
|
|
87
87
|
export { GET as getProductMetrics } from './products-stats';
|
|
88
88
|
export { GET as getSetupGuide, POST as markSetupTask, } from './setup-guide';
|
|
89
89
|
export type { SetupTaskId, SetupTier, SetupTask, SetupGuideResponse } from './setup-guide';
|
|
90
|
-
export { GET as getOrders, getOrder, PUT as updateOrder, getShippoRatesForOrder, shipWithShippo, bulkUpdateOrders, } from './orders';
|
|
90
|
+
export { GET as getOrders, getOrder, PUT as updateOrder, getShippoRatesForOrder, shipWithShippo, getColissimoDefaults, shipWithColissimo, downloadOrderLabel, bulkUpdateOrders, } from './orders';
|
|
91
91
|
export { POST as processRefund } from './refund';
|
|
92
92
|
export { APPROVE_POST as approveReturn, REJECT_POST as rejectReturn } from './return';
|
|
93
93
|
export { GET as getStats } from './stats';
|
|
@@ -106,8 +106,10 @@ export type { AdminListItem } from './users';
|
|
|
106
106
|
export { GET as validateAdminInviteHandler, POST as acceptAdminInviteHandler, } from './accept-invite';
|
|
107
107
|
export { GET as getMe, PATCH as updateMe, PATCH_PASSWORD as updateMyPassword, } from './me';
|
|
108
108
|
export { GET as getSettings, PUT as updateSettings } from './settings';
|
|
109
|
+
export { getIntegrations, saveIntegration } from './integrations';
|
|
110
|
+
export type { IntegrationState, IntegrationFieldState } from './integrations';
|
|
109
111
|
export { GET as getStripeStatus } from './stripe-status';
|
|
110
112
|
export { getCarriers as getShippingCarriers, createCarrier as createShippingCarrier, getCarrier as getShippingCarrier, updateCarrier as updateShippingCarrier, deleteCarrier as deleteShippingCarrier, } from './shipping';
|
|
111
|
-
export { getZones as getShippingZones, createZone as createShippingZone, getZone as getShippingZone, updateZone as updateShippingZone, deleteZone as deleteShippingZone, createRate as createShippingRate, updateRate as updateShippingRate, deleteRate as deleteShippingRate, validateShippoApiKey, saveShippoApiKey, deleteShippoApiKey, } from './shipping';
|
|
113
|
+
export { getZones as getShippingZones, createZone as createShippingZone, getZone as getShippingZone, updateZone as updateShippingZone, deleteZone as deleteShippingZone, createRate as createShippingRate, updateRate as updateShippingRate, deleteRate as deleteShippingRate, validateShippoApiKey, saveShippoApiKey, deleteShippoApiKey, getColissimoConfig, saveColissimoSettings, deleteColissimoSettings, } from './shipping';
|
|
112
114
|
export { getTaxZones, createTaxZone, getTaxZone, updateTaxZone, deleteTaxZone, } from './tax-zones';
|
|
113
115
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/admin/api/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/admin/api/index.ts"],"names":[],"mappings":"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"}
|
package/dist/admin/api/index.js
CHANGED
|
@@ -91,7 +91,7 @@ export { GET as getProductMetrics } from './products-stats';
|
|
|
91
91
|
// Setup guide — orchestrator for the new-store onboarding card on /admin
|
|
92
92
|
export { GET as getSetupGuide, POST as markSetupTask, } from './setup-guide';
|
|
93
93
|
// Orders
|
|
94
|
-
export { GET as getOrders, getOrder, PUT as updateOrder, getShippoRatesForOrder, shipWithShippo, bulkUpdateOrders, } from './orders';
|
|
94
|
+
export { GET as getOrders, getOrder, PUT as updateOrder, getShippoRatesForOrder, shipWithShippo, getColissimoDefaults, shipWithColissimo, downloadOrderLabel, bulkUpdateOrders, } from './orders';
|
|
95
95
|
// Refund
|
|
96
96
|
export { POST as processRefund } from './refund';
|
|
97
97
|
// Return (approve/reject return requests)
|
|
@@ -127,12 +127,14 @@ export { GET as validateAdminInviteHandler, POST as acceptAdminInviteHandler, }
|
|
|
127
127
|
export { GET as getMe, PATCH as updateMe, PATCH_PASSWORD as updateMyPassword, } from './me';
|
|
128
128
|
// Settings
|
|
129
129
|
export { GET as getSettings, PUT as updateSettings } from './settings';
|
|
130
|
+
// Integrations (/admin/integrations — external-service credentials)
|
|
131
|
+
export { getIntegrations, saveIntegration } from './integrations';
|
|
130
132
|
// Stripe Status
|
|
131
133
|
export { GET as getStripeStatus } from './stripe-status';
|
|
132
134
|
// Shipping Carriers
|
|
133
135
|
export { getCarriers as getShippingCarriers, createCarrier as createShippingCarrier, getCarrier as getShippingCarrier, updateCarrier as updateShippingCarrier, deleteCarrier as deleteShippingCarrier, } from './shipping';
|
|
134
136
|
// Shipping Zones & Rates
|
|
135
|
-
export { getZones as getShippingZones, createZone as createShippingZone, getZone as getShippingZone, updateZone as updateShippingZone, deleteZone as deleteShippingZone, createRate as createShippingRate, updateRate as updateShippingRate, deleteRate as deleteShippingRate, validateShippoApiKey, saveShippoApiKey, deleteShippoApiKey, } from './shipping';
|
|
137
|
+
export { getZones as getShippingZones, createZone as createShippingZone, getZone as getShippingZone, updateZone as updateShippingZone, deleteZone as deleteShippingZone, createRate as createShippingRate, updateRate as updateShippingRate, deleteRate as deleteShippingRate, validateShippoApiKey, saveShippoApiKey, deleteShippoApiKey, getColissimoConfig, saveColissimoSettings, deleteColissimoSettings, } from './shipping';
|
|
136
138
|
// Tax Zones
|
|
137
139
|
export { getTaxZones, createTaxZone, getTaxZone, updateTaxZone, deleteTaxZone, } from './tax-zones';
|
|
138
140
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/admin/api/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/admin/api/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rovela/sdk/admin/api/integrations
|
|
3
|
+
*
|
|
4
|
+
* API handlers behind /admin/integrations — the one place a merchant manages
|
|
5
|
+
* credentials for external services (see admin/integrations/registry.ts for
|
|
6
|
+
* the registry + presence semantics).
|
|
7
|
+
*
|
|
8
|
+
* SECRETS CONTRACT (do not regress):
|
|
9
|
+
* - GET returns public values verbatim; secret fields come back as
|
|
10
|
+
* `{ hasValue, masked }` only — a secret value NEVER reaches the browser.
|
|
11
|
+
* - PUT is write-only for secrets: an omitted/empty secret keeps the stored
|
|
12
|
+
* value. Clearing a credential is not a thing here — disable the
|
|
13
|
+
* integration instead (removal is a Features Store action).
|
|
14
|
+
* - Providers with a cheap verification endpoint are validated BEFORE
|
|
15
|
+
* persisting — a failing key is never saved.
|
|
16
|
+
*
|
|
17
|
+
* Usage (template):
|
|
18
|
+
* ```typescript
|
|
19
|
+
* // app/api/admin/integrations/route.ts
|
|
20
|
+
* export { getIntegrations as GET, saveIntegration as PUT } from '@rovela-ai/sdk/admin/api'
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
24
|
+
import { type IntegrationField } from '../integrations/registry';
|
|
25
|
+
export interface IntegrationFieldState {
|
|
26
|
+
id: string;
|
|
27
|
+
label: string;
|
|
28
|
+
kind: IntegrationField['kind'];
|
|
29
|
+
required?: boolean;
|
|
30
|
+
placeholder?: string;
|
|
31
|
+
help?: string;
|
|
32
|
+
options?: Array<{
|
|
33
|
+
value: string;
|
|
34
|
+
label: string;
|
|
35
|
+
}>;
|
|
36
|
+
/** Public fields only. */
|
|
37
|
+
value?: string | number | boolean | null;
|
|
38
|
+
/** Secret fields only. */
|
|
39
|
+
hasValue?: boolean;
|
|
40
|
+
masked?: string | null;
|
|
41
|
+
}
|
|
42
|
+
export interface IntegrationState {
|
|
43
|
+
key: string;
|
|
44
|
+
label: string;
|
|
45
|
+
description: string;
|
|
46
|
+
source: 'registry' | 'custom';
|
|
47
|
+
docsUrl?: string;
|
|
48
|
+
/** Brand icon data URI (card tile). */
|
|
49
|
+
logo?: string;
|
|
50
|
+
/** Full wordmark data URI (configure-modal header). */
|
|
51
|
+
logoFull?: string;
|
|
52
|
+
/** All required credentials present. */
|
|
53
|
+
connected: boolean;
|
|
54
|
+
/** Toggle state — null when the integration has no on/off switch. */
|
|
55
|
+
enabled: boolean | null;
|
|
56
|
+
fields: IntegrationFieldState[];
|
|
57
|
+
}
|
|
58
|
+
export declare function getIntegrations(): Promise<NextResponse>;
|
|
59
|
+
export declare function saveIntegration(request: NextRequest): Promise<NextResponse>;
|
|
60
|
+
//# sourceMappingURL=integrations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integrations.d.ts","sourceRoot":"","sources":["../../../src/admin/api/integrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAIvD,OAAO,EAML,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAA;AAMjC,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjD,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;IACxC,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wCAAwC;IACxC,SAAS,EAAE,OAAO,CAAA;IAClB,qEAAqE;IACrE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,MAAM,EAAE,qBAAqB,EAAE,CAAA;CAChC;AAiLD,wBAAsB,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,CAU7D;AAMD,wBAAsB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAyJjF"}
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rovela/sdk/admin/api/integrations
|
|
3
|
+
*
|
|
4
|
+
* API handlers behind /admin/integrations — the one place a merchant manages
|
|
5
|
+
* credentials for external services (see admin/integrations/registry.ts for
|
|
6
|
+
* the registry + presence semantics).
|
|
7
|
+
*
|
|
8
|
+
* SECRETS CONTRACT (do not regress):
|
|
9
|
+
* - GET returns public values verbatim; secret fields come back as
|
|
10
|
+
* `{ hasValue, masked }` only — a secret value NEVER reaches the browser.
|
|
11
|
+
* - PUT is write-only for secrets: an omitted/empty secret keeps the stored
|
|
12
|
+
* value. Clearing a credential is not a thing here — disable the
|
|
13
|
+
* integration instead (removal is a Features Store action).
|
|
14
|
+
* - Providers with a cheap verification endpoint are validated BEFORE
|
|
15
|
+
* persisting — a failing key is never saved.
|
|
16
|
+
*
|
|
17
|
+
* Usage (template):
|
|
18
|
+
* ```typescript
|
|
19
|
+
* // app/api/admin/integrations/route.ts
|
|
20
|
+
* export { getIntegrations as GET, saveIntegration as PUT } from '@rovela-ai/sdk/admin/api'
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
import { NextResponse } from 'next/server';
|
|
24
|
+
import { sql } from 'drizzle-orm';
|
|
25
|
+
import { requireAdmin } from '../server/admin-session';
|
|
26
|
+
import { getDb } from '../../core/db/client';
|
|
27
|
+
import { INTEGRATION_REGISTRY, findIntegrationDef, sanitizeCustomDescriptors, descriptorToDef, } from '../integrations/registry';
|
|
28
|
+
// =============================================================================
|
|
29
|
+
// Self-heal — the descriptor column (values live in their own columns)
|
|
30
|
+
// =============================================================================
|
|
31
|
+
let customColumnEnsured = false;
|
|
32
|
+
async function ensureCustomIntegrationsColumn() {
|
|
33
|
+
if (customColumnEnsured)
|
|
34
|
+
return;
|
|
35
|
+
const db = getDb();
|
|
36
|
+
await db.execute(sql `
|
|
37
|
+
ALTER TABLE store_settings
|
|
38
|
+
ADD COLUMN IF NOT EXISTS custom_integrations jsonb NOT NULL DEFAULT '[]'::jsonb
|
|
39
|
+
`);
|
|
40
|
+
customColumnEnsured = true;
|
|
41
|
+
}
|
|
42
|
+
function getPath(obj, path) {
|
|
43
|
+
return path
|
|
44
|
+
.split('.')
|
|
45
|
+
.reduce((acc, k) => (acc && typeof acc === 'object' ? acc[k] : undefined), obj);
|
|
46
|
+
}
|
|
47
|
+
function setPath(obj, path, value) {
|
|
48
|
+
const parts = path.split('.');
|
|
49
|
+
let cur = obj;
|
|
50
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
51
|
+
const k = parts[i];
|
|
52
|
+
if (!cur[k] || typeof cur[k] !== 'object')
|
|
53
|
+
cur[k] = {};
|
|
54
|
+
cur = cur[k];
|
|
55
|
+
}
|
|
56
|
+
const last = parts[parts.length - 1];
|
|
57
|
+
if (value === undefined || value === null || value === '')
|
|
58
|
+
delete cur[last];
|
|
59
|
+
else
|
|
60
|
+
cur[last] = value;
|
|
61
|
+
}
|
|
62
|
+
function maskSecret(value) {
|
|
63
|
+
const s = typeof value === 'string' ? value : '';
|
|
64
|
+
if (!s)
|
|
65
|
+
return { hasValue: false, masked: null };
|
|
66
|
+
return { hasValue: true, masked: s.length >= 8 ? `…${s.slice(-4)}` : '••••' };
|
|
67
|
+
}
|
|
68
|
+
/** Cached per-process store_settings column list (additive schema — staleness heals on redeploy or first ALTER). */
|
|
69
|
+
let columnsCache = null;
|
|
70
|
+
async function getSettingsColumns(force = false) {
|
|
71
|
+
if (columnsCache && !force)
|
|
72
|
+
return columnsCache;
|
|
73
|
+
const db = getDb();
|
|
74
|
+
const res = await db.execute(sql `
|
|
75
|
+
SELECT column_name FROM information_schema.columns WHERE table_name = 'store_settings'
|
|
76
|
+
`);
|
|
77
|
+
columnsCache = new Set(res.rows.map((r) => r.column_name));
|
|
78
|
+
return columnsCache;
|
|
79
|
+
}
|
|
80
|
+
function columnsForDef(def) {
|
|
81
|
+
if (def.storage.kind !== 'columns')
|
|
82
|
+
return [];
|
|
83
|
+
const cols = def.fields.map((f) => f.id);
|
|
84
|
+
if (def.enabledColumn)
|
|
85
|
+
cols.push(def.enabledColumn);
|
|
86
|
+
return cols;
|
|
87
|
+
}
|
|
88
|
+
/** Read the single store_settings row, selecting only columns that exist. */
|
|
89
|
+
async function readSettingsRow(wanted, existing) {
|
|
90
|
+
const cols = [...new Set(wanted)].filter((c) => existing.has(c));
|
|
91
|
+
if (cols.length === 0)
|
|
92
|
+
return {};
|
|
93
|
+
const db = getDb();
|
|
94
|
+
const res = await db.execute(sql `SELECT ${sql.join(cols.map((c) => sql.identifier(c)), sql `, `)} FROM store_settings LIMIT 1`);
|
|
95
|
+
return res.rows[0] ?? null;
|
|
96
|
+
}
|
|
97
|
+
function buildFieldStates(def, row, analytics) {
|
|
98
|
+
return def.fields.map((f) => {
|
|
99
|
+
const raw = def.storage.kind === 'columns'
|
|
100
|
+
? row[f.id]
|
|
101
|
+
: getPath(analytics?.[def.storage.path], f.id);
|
|
102
|
+
const base = {
|
|
103
|
+
id: f.id,
|
|
104
|
+
label: f.label,
|
|
105
|
+
kind: f.kind,
|
|
106
|
+
required: f.required,
|
|
107
|
+
placeholder: f.placeholder,
|
|
108
|
+
help: f.help,
|
|
109
|
+
options: f.options,
|
|
110
|
+
};
|
|
111
|
+
if (f.kind === 'secret')
|
|
112
|
+
return { ...base, ...maskSecret(raw) };
|
|
113
|
+
if (f.kind === 'toggle')
|
|
114
|
+
return { ...base, value: raw === true };
|
|
115
|
+
if (f.kind === 'number')
|
|
116
|
+
return { ...base, value: typeof raw === 'number' ? raw : raw != null ? Number(raw) : null };
|
|
117
|
+
return { ...base, value: typeof raw === 'string' ? raw : raw != null ? String(raw) : null };
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
function buildState(def, source, row, analytics, existing) {
|
|
121
|
+
// Presence: the entry renders only when its storage is detectable here.
|
|
122
|
+
if (def.storage.kind === 'columns') {
|
|
123
|
+
if (source === 'registry' && !def.fields.some((f) => existing.has(f.id)))
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
const slot = analytics?.[def.storage.path];
|
|
128
|
+
if (!slot || typeof slot !== 'object')
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
const fields = buildFieldStates(def, row, analytics);
|
|
132
|
+
const connected = def.fields
|
|
133
|
+
.filter((f) => f.required)
|
|
134
|
+
.every((f) => {
|
|
135
|
+
const s = fields.find((x) => x.id === f.id);
|
|
136
|
+
return f.kind === 'secret' ? s.hasValue === true : s.value != null && s.value !== '';
|
|
137
|
+
});
|
|
138
|
+
const enabled = def.storage.kind === 'columns' && def.enabledColumn
|
|
139
|
+
? row[def.enabledColumn] === true
|
|
140
|
+
: null;
|
|
141
|
+
return {
|
|
142
|
+
key: def.key,
|
|
143
|
+
label: def.label,
|
|
144
|
+
description: def.description,
|
|
145
|
+
source,
|
|
146
|
+
docsUrl: def.docsUrl,
|
|
147
|
+
logo: def.logo,
|
|
148
|
+
logoFull: def.logoFull,
|
|
149
|
+
connected,
|
|
150
|
+
enabled,
|
|
151
|
+
fields,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
async function loadStates() {
|
|
155
|
+
await ensureCustomIntegrationsColumn();
|
|
156
|
+
const existing = await getSettingsColumns(true);
|
|
157
|
+
const descriptorsWanted = ['custom_integrations', ...(existing.has('analytics') ? ['analytics'] : [])];
|
|
158
|
+
const registryColumns = INTEGRATION_REGISTRY.flatMap(columnsForDef);
|
|
159
|
+
const firstPass = await readSettingsRow([...descriptorsWanted, ...registryColumns], existing);
|
|
160
|
+
if (firstPass === null)
|
|
161
|
+
return { states: [], row: {}, analytics: null, existing };
|
|
162
|
+
const analytics = firstPass.analytics && typeof firstPass.analytics === 'object' ? firstPass.analytics : null;
|
|
163
|
+
const descriptors = sanitizeCustomDescriptors(firstPass.custom_integrations);
|
|
164
|
+
// Custom descriptor values may live in columns outside the registry set.
|
|
165
|
+
const customCols = descriptors.flatMap((d) => d.fields.map((f) => f.id)).filter((c) => existing.has(c));
|
|
166
|
+
const row = customCols.length > 0
|
|
167
|
+
? { ...firstPass, ...((await readSettingsRow(customCols, existing)) ?? {}) }
|
|
168
|
+
: firstPass;
|
|
169
|
+
const states = [];
|
|
170
|
+
for (const def of INTEGRATION_REGISTRY) {
|
|
171
|
+
const s = buildState(def, 'registry', row, analytics, existing);
|
|
172
|
+
if (s)
|
|
173
|
+
states.push(s);
|
|
174
|
+
}
|
|
175
|
+
for (const d of descriptors) {
|
|
176
|
+
const s = buildState(descriptorToDef(d), 'custom', row, analytics, existing);
|
|
177
|
+
if (s)
|
|
178
|
+
states.push(s);
|
|
179
|
+
}
|
|
180
|
+
return { states, row, analytics, existing };
|
|
181
|
+
}
|
|
182
|
+
// =============================================================================
|
|
183
|
+
// GET /api/admin/integrations
|
|
184
|
+
// =============================================================================
|
|
185
|
+
export async function getIntegrations() {
|
|
186
|
+
const guard = await requireAdmin({ permission: 'settings.read' });
|
|
187
|
+
if (!guard.ok)
|
|
188
|
+
return guard.response;
|
|
189
|
+
try {
|
|
190
|
+
const { states } = await loadStates();
|
|
191
|
+
return NextResponse.json({ data: { integrations: states } });
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
console.error('[Admin Integrations] GET failed:', error);
|
|
195
|
+
return NextResponse.json({ error: 'Failed to load integrations' }, { status: 500 });
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// =============================================================================
|
|
199
|
+
// PUT /api/admin/integrations { key, values }
|
|
200
|
+
// =============================================================================
|
|
201
|
+
export async function saveIntegration(request) {
|
|
202
|
+
const guard = await requireAdmin({ permission: 'settings.write' });
|
|
203
|
+
if (!guard.ok)
|
|
204
|
+
return guard.response;
|
|
205
|
+
try {
|
|
206
|
+
const body = (await request.json().catch(() => null));
|
|
207
|
+
if (!body?.key || !body.values || typeof body.values !== 'object') {
|
|
208
|
+
return NextResponse.json({ error: 'Missing key or values' }, { status: 400 });
|
|
209
|
+
}
|
|
210
|
+
await ensureCustomIntegrationsColumn();
|
|
211
|
+
const existing = await getSettingsColumns(true);
|
|
212
|
+
// Resolve the definition — registry first, else a sanitized descriptor.
|
|
213
|
+
let def = findIntegrationDef(body.key);
|
|
214
|
+
let source = 'registry';
|
|
215
|
+
if (!def) {
|
|
216
|
+
const row = await readSettingsRow(['custom_integrations'], existing);
|
|
217
|
+
const descriptor = sanitizeCustomDescriptors(row?.custom_integrations).find((d) => d.key === body.key);
|
|
218
|
+
if (!descriptor) {
|
|
219
|
+
return NextResponse.json({ error: 'Unknown integration' }, { status: 404 });
|
|
220
|
+
}
|
|
221
|
+
def = descriptorToDef(descriptor);
|
|
222
|
+
source = 'custom';
|
|
223
|
+
}
|
|
224
|
+
// ---- Coerce incoming values against the definition (allowlist). -------
|
|
225
|
+
// The client sends the on/off toggle as `__enabled` (it never learns the
|
|
226
|
+
// column name); map it onto the definition's enabledColumn.
|
|
227
|
+
const editableFields = [...def.fields];
|
|
228
|
+
if (def.storage.kind === 'columns' && def.enabledColumn) {
|
|
229
|
+
editableFields.push({ id: def.enabledColumn, label: 'Enabled', kind: 'toggle' });
|
|
230
|
+
if ('__enabled' in body.values) {
|
|
231
|
+
body.values[def.enabledColumn] = body.values.__enabled === true;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
const updates = new Map();
|
|
235
|
+
for (const f of editableFields) {
|
|
236
|
+
if (!(f.id in body.values))
|
|
237
|
+
continue;
|
|
238
|
+
const raw = body.values[f.id];
|
|
239
|
+
switch (f.kind) {
|
|
240
|
+
case 'secret': {
|
|
241
|
+
const s = typeof raw === 'string' ? raw.trim() : '';
|
|
242
|
+
if (s)
|
|
243
|
+
updates.set(f.id, s); // empty = keep stored
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
246
|
+
case 'number': {
|
|
247
|
+
if (raw === null || raw === '' || raw === undefined)
|
|
248
|
+
updates.set(f.id, null);
|
|
249
|
+
else {
|
|
250
|
+
const n = Number(raw);
|
|
251
|
+
if (!Number.isFinite(n)) {
|
|
252
|
+
return NextResponse.json({ error: `${f.label} must be a number` }, { status: 400 });
|
|
253
|
+
}
|
|
254
|
+
updates.set(f.id, Math.trunc(n));
|
|
255
|
+
}
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
case 'toggle':
|
|
259
|
+
updates.set(f.id, raw === true);
|
|
260
|
+
break;
|
|
261
|
+
case 'select': {
|
|
262
|
+
const s = typeof raw === 'string' ? raw : '';
|
|
263
|
+
if (s && f.options && !f.options.some((o) => o.value === s)) {
|
|
264
|
+
return NextResponse.json({ error: `Invalid value for ${f.label}` }, { status: 400 });
|
|
265
|
+
}
|
|
266
|
+
updates.set(f.id, s || null);
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
default: {
|
|
270
|
+
const s = typeof raw === 'string' ? raw.trim() : '';
|
|
271
|
+
updates.set(f.id, s || null);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
if (updates.size === 0) {
|
|
276
|
+
return NextResponse.json({ error: 'Nothing to save' }, { status: 400 });
|
|
277
|
+
}
|
|
278
|
+
const db = getDb();
|
|
279
|
+
if (def.storage.kind === 'columns') {
|
|
280
|
+
// Custom descriptors write to columns Claude Code ALTERed at install —
|
|
281
|
+
// verify each against the live schema (registry columns are our own
|
|
282
|
+
// constants but get the same check for uniformity).
|
|
283
|
+
for (const col of updates.keys()) {
|
|
284
|
+
if (!existing.has(col)) {
|
|
285
|
+
return NextResponse.json({ error: `Column ${col} does not exist on this store` }, { status: 400 });
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
// Merge stored + incoming for validation (secrets may be kept).
|
|
289
|
+
const stored = (await readSettingsRow(columnsForDef(def), existing)) ?? {};
|
|
290
|
+
const merged = { ...stored };
|
|
291
|
+
for (const [k, v] of updates)
|
|
292
|
+
merged[k] = v;
|
|
293
|
+
const credentialChanged = [...updates.keys()].some((k) => k !== def.enabledColumn);
|
|
294
|
+
const enablingOn = def.enabledColumn ? updates.get(def.enabledColumn) === true : false;
|
|
295
|
+
if (def.validate && (credentialChanged || enablingOn)) {
|
|
296
|
+
const message = await def.validate(merged);
|
|
297
|
+
if (message)
|
|
298
|
+
return NextResponse.json({ error: message }, { status: 400 });
|
|
299
|
+
}
|
|
300
|
+
await db.execute(sql `UPDATE store_settings SET ${sql.join([...updates].map(([col, val]) => sql `${sql.identifier(col)} = ${val}`), sql `, `)}`);
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
// analytics-jsonb: merge the stored object with the incoming fields.
|
|
304
|
+
const path = def.storage.path;
|
|
305
|
+
await db.execute(sql `
|
|
306
|
+
ALTER TABLE store_settings ADD COLUMN IF NOT EXISTS analytics jsonb DEFAULT '{}'::jsonb
|
|
307
|
+
`);
|
|
308
|
+
const res = await db.execute(sql `SELECT analytics FROM store_settings LIMIT 1`);
|
|
309
|
+
const analytics = res.rows[0] && typeof res.rows[0].analytics === 'object'
|
|
310
|
+
? res.rows[0].analytics
|
|
311
|
+
: {};
|
|
312
|
+
const slot = analytics?.[path] && typeof analytics[path] === 'object'
|
|
313
|
+
? { ...analytics[path] }
|
|
314
|
+
: {};
|
|
315
|
+
for (const [k, v] of updates)
|
|
316
|
+
setPath(slot, k, v);
|
|
317
|
+
if (def.validate) {
|
|
318
|
+
const message = await def.validate(slot);
|
|
319
|
+
if (message)
|
|
320
|
+
return NextResponse.json({ error: message }, { status: 400 });
|
|
321
|
+
}
|
|
322
|
+
await db.execute(sql `
|
|
323
|
+
UPDATE store_settings
|
|
324
|
+
SET analytics = jsonb_set(COALESCE(analytics, '{}'::jsonb), ${`{${path}}`}::text[], ${JSON.stringify(slot)}::jsonb)
|
|
325
|
+
`);
|
|
326
|
+
}
|
|
327
|
+
// Return the fresh state so the UI updates masked displays in place.
|
|
328
|
+
const { states } = await loadStates();
|
|
329
|
+
const integration = states.find((s) => s.key === def.key) ?? null;
|
|
330
|
+
return NextResponse.json({ data: { saved: true, integration, source } });
|
|
331
|
+
}
|
|
332
|
+
catch (error) {
|
|
333
|
+
console.error('[Admin Integrations] PUT failed:', error);
|
|
334
|
+
return NextResponse.json({ error: 'Failed to save the integration' }, { status: 500 });
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=integrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../../src/admin/api/integrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -116,4 +116,53 @@ export declare function shipWithShippo(request: NextRequest, { params }: {
|
|
|
116
116
|
trackingNumber?: string;
|
|
117
117
|
labelUrl?: string;
|
|
118
118
|
} | AdminApiError>>;
|
|
119
|
+
/**
|
|
120
|
+
* GET /api/admin/orders/[id]/colissimo-defaults
|
|
121
|
+
*
|
|
122
|
+
* Pre-fill data for the "Ship with Colissimo" card: whether Colissimo is
|
|
123
|
+
* configured, the suggested parcel weight (sum of item weight metafields ×
|
|
124
|
+
* qty with the store default as fallback), and relay context. The card
|
|
125
|
+
* renders only when `enabled` is true.
|
|
126
|
+
*/
|
|
127
|
+
export declare function getColissimoDefaults(_request: NextRequest, { params }: {
|
|
128
|
+
params: Promise<{
|
|
129
|
+
id: string;
|
|
130
|
+
}>;
|
|
131
|
+
}): Promise<NextResponse<Record<string, unknown> | AdminApiError>>;
|
|
132
|
+
/**
|
|
133
|
+
* POST /api/admin/orders/[id]/ship-with-colissimo
|
|
134
|
+
*
|
|
135
|
+
* Generate a Colissimo label for a paid order and mark it shipped.
|
|
136
|
+
* Mirrors shipWithShippo, with two Colissimo specifics: the label BYTES are
|
|
137
|
+
* persisted (Colissimo can't re-serve a label — regenerating mints a new
|
|
138
|
+
* parcel number) and served through the admin-gated label route, and relay
|
|
139
|
+
* orders route to the pickup-point product (A2P/BPR) with the point id.
|
|
140
|
+
*
|
|
141
|
+
* Body:
|
|
142
|
+
* - weightKg?: number (override; defaults to the computed suggestion)
|
|
143
|
+
* - signature?: boolean (home delivery only: DOS instead of DOM)
|
|
144
|
+
* - format?: 'PDF_A4_300dpi' | 'PDF_10x15_300dpi'
|
|
145
|
+
* - notifyCustomer?: boolean (default true)
|
|
146
|
+
*/
|
|
147
|
+
export declare function shipWithColissimo(request: NextRequest, { params }: {
|
|
148
|
+
params: Promise<{
|
|
149
|
+
id: string;
|
|
150
|
+
}>;
|
|
151
|
+
}): Promise<NextResponse<{
|
|
152
|
+
success: boolean;
|
|
153
|
+
trackingNumber?: string;
|
|
154
|
+
labelUrl?: string;
|
|
155
|
+
carrier?: string;
|
|
156
|
+
} | AdminApiError>>;
|
|
157
|
+
/**
|
|
158
|
+
* GET /api/admin/orders/[id]/label
|
|
159
|
+
*
|
|
160
|
+
* Stream the stored carrier label (admin-gated — labels carry customer PII,
|
|
161
|
+
* they are never served from a public URL). orders.labelUrl points here.
|
|
162
|
+
*/
|
|
163
|
+
export declare function downloadOrderLabel(_request: NextRequest, { params }: {
|
|
164
|
+
params: Promise<{
|
|
165
|
+
id: string;
|
|
166
|
+
}>;
|
|
167
|
+
}): Promise<NextResponse>;
|
|
119
168
|
//# sourceMappingURL=orders.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orders.d.ts","sourceRoot":"","sources":["../../../src/admin/api/orders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"orders.d.ts","sourceRoot":"","sources":["../../../src/admin/api/orders.ts"],"names":[],"mappings":"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"}
|