@commercetools/cli-topic-integration-layer 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.
Files changed (76) hide show
  1. package/README.md +1 -1
  2. package/dist/commands/integration-layer/allowlist/add.js +3 -3
  3. package/dist/commands/integration-layer/allowlist/add.js.map +1 -1
  4. package/dist/commands/integration-layer/allowlist/list.js +2 -2
  5. package/dist/commands/integration-layer/allowlist/list.js.map +1 -1
  6. package/dist/commands/integration-layer/allowlist/remove.js +3 -3
  7. package/dist/commands/integration-layer/allowlist/remove.js.map +1 -1
  8. package/dist/commands/integration-layer/allowlist/set.js +3 -3
  9. package/dist/commands/integration-layer/allowlist/set.js.map +1 -1
  10. package/dist/commands/integration-layer/config/get.js +2 -2
  11. package/dist/commands/integration-layer/config/get.js.map +1 -1
  12. package/dist/commands/integration-layer/config/list.js +2 -2
  13. package/dist/commands/integration-layer/config/list.js.map +1 -1
  14. package/dist/commands/integration-layer/config/set.js +2 -2
  15. package/dist/commands/integration-layer/config/set.js.map +1 -1
  16. package/dist/commands/integration-layer/config/unset.js +2 -2
  17. package/dist/commands/integration-layer/config/unset.js.map +1 -1
  18. package/dist/commands/integration-layer/explore.js +5 -5
  19. package/dist/commands/integration-layer/explore.js.map +1 -1
  20. package/dist/commands/integration-layer/extension/build.js +4 -1
  21. package/dist/commands/integration-layer/extension/build.js.map +1 -1
  22. package/dist/commands/integration-layer/extension/create-api-extension-input.d.ts +12 -0
  23. package/dist/commands/integration-layer/extension/create-api-extension-input.js +49 -0
  24. package/dist/commands/integration-layer/extension/create-api-extension-input.js.map +1 -0
  25. package/dist/commands/integration-layer/extension/delete.js +2 -2
  26. package/dist/commands/integration-layer/extension/delete.js.map +1 -1
  27. package/dist/commands/integration-layer/extension/invoke-api-extension.d.ts +19 -0
  28. package/dist/commands/integration-layer/extension/invoke-api-extension.js +140 -0
  29. package/dist/commands/integration-layer/extension/invoke-api-extension.js.map +1 -0
  30. package/dist/commands/integration-layer/extension/push.js +8 -5
  31. package/dist/commands/integration-layer/extension/push.js.map +1 -1
  32. package/dist/commands/integration-layer/extension/serve.d.ts +29 -0
  33. package/dist/commands/integration-layer/extension/serve.js +81 -30
  34. package/dist/commands/integration-layer/extension/serve.js.map +1 -1
  35. package/dist/commands/integration-layer/extension/status.js +2 -2
  36. package/dist/commands/integration-layer/extension/status.js.map +1 -1
  37. package/dist/commands/integration-layer/extension/validate.js +6 -3
  38. package/dist/commands/integration-layer/extension/validate.js.map +1 -1
  39. package/dist/commands/integration-layer/schema/fetch.js +2 -2
  40. package/dist/commands/integration-layer/schema/fetch.js.map +1 -1
  41. package/dist/hooks/authentication.d.ts +3 -0
  42. package/dist/hooks/authentication.js +33 -0
  43. package/dist/hooks/authentication.js.map +1 -0
  44. package/dist/lib/auth.d.ts +5 -0
  45. package/dist/lib/auth.js +41 -0
  46. package/dist/lib/auth.js.map +1 -0
  47. package/dist/lib/awaitBundleState.d.ts +2 -2
  48. package/dist/lib/awaitBundleState.js +2 -2
  49. package/dist/lib/awaitBundleState.js.map +1 -1
  50. package/dist/lib/base.d.ts +12 -21
  51. package/dist/lib/base.js +27 -76
  52. package/dist/lib/base.js.map +1 -1
  53. package/dist/lib/extensionConfig.d.ts +17 -0
  54. package/dist/lib/extensionConfig.js +36 -0
  55. package/dist/lib/extensionConfig.js.map +1 -0
  56. package/dist/lib/ilClient.d.ts +16 -10
  57. package/dist/lib/ilClient.js +28 -31
  58. package/dist/lib/ilClient.js.map +1 -1
  59. package/dist/lib/loadLocalEnv.d.ts +49 -0
  60. package/dist/lib/loadLocalEnv.js +112 -0
  61. package/dist/lib/loadLocalEnv.js.map +1 -0
  62. package/dist/lib/tooling/compose.js +2 -2
  63. package/dist/lib/tooling/compose.js.map +1 -1
  64. package/dist/lib/tooling/extensionInputSampleObj.d.ts +8 -0
  65. package/dist/lib/tooling/extensionInputSampleObj.js +178 -0
  66. package/dist/lib/tooling/extensionInputSampleObj.js.map +1 -0
  67. package/dist/lib/tooling/extensions.d.ts +22 -5
  68. package/dist/lib/tooling/extensions.js +30 -8
  69. package/dist/lib/tooling/extensions.js.map +1 -1
  70. package/dist/lib/tooling/generateExtensionInputSample.d.ts +22 -0
  71. package/dist/lib/tooling/generateExtensionInputSample.js +36 -0
  72. package/dist/lib/tooling/generateExtensionInputSample.js.map +1 -0
  73. package/package.json +6 -3
  74. package/dist/commands/integration-layer/extension/invoke.d.ts +0 -14
  75. package/dist/commands/integration-layer/extension/invoke.js +0 -94
  76. package/dist/commands/integration-layer/extension/invoke.js.map +0 -1
@@ -0,0 +1,49 @@
1
+ /** Where a command's dotenv file is, and whether a missing file is an error. */
2
+ export interface EnvFileLocation {
3
+ /** Absolute path to the dotenv file. */
4
+ path: string;
5
+ /** True when an explicit `--env-file` was given, so a missing file must fail loudly. */
6
+ required: boolean;
7
+ }
8
+ /**
9
+ * Peek argv for `--env-file <path>` / `--env-file=<path>` before oclif parses flags.
10
+ * Must run in `init()` so values (e.g. `INTEGRATION_LAYER_URL`, `EXTENSION_CONFIG_*`)
11
+ * are in `process.env` when flag `env:` bindings resolve.
12
+ */
13
+ export declare function envFilePathFromArgv(argv?: readonly string[]): string | undefined;
14
+ /**
15
+ * Resolve which dotenv file a command should read: an explicit `--env-file <path>`
16
+ * (required — a missing one is an error) or, failing that, `.env` in the cwd (optional).
17
+ */
18
+ export declare function resolveEnvFileLocation(options?: {
19
+ argv?: readonly string[];
20
+ cwd?: string;
21
+ }): EnvFileLocation;
22
+ /**
23
+ * Load a dotenv file into `process.env` without overriding existing keys
24
+ * (Node's `process.loadEnvFile` semantics).
25
+ *
26
+ * - `--env-file <path>` (from argv): required; a missing file fails loudly.
27
+ * - otherwise `.env` in cwd: optional; a missing file is a no-op.
28
+ *
29
+ * Returns the absolute path that was loaded, or `undefined` when nothing was loaded.
30
+ */
31
+ export declare function loadLocalEnv(options?: {
32
+ argv?: readonly string[];
33
+ cwd?: string;
34
+ }): string | undefined;
35
+ /**
36
+ * Parse a dotenv file into a plain object WITHOUT touching `process.env`. Returns an
37
+ * empty object when the file is absent — the caller decides whether that's an error.
38
+ * Used by the `serve` hot-reload path, which needs the file's current values on each
39
+ * change (unlike {@link loadLocalEnv}, whose "existing env wins" load can't re-apply an
40
+ * edited value already present in `process.env`).
41
+ */
42
+ export declare function parseEnvFile(filePath: string): Record<string, string>;
43
+ /**
44
+ * Watch a dotenv file for changes and invoke `onChange` (debounced) after each write.
45
+ * Watches the containing DIRECTORY, not the file, so it survives editors that save via
46
+ * atomic rename (which swaps the inode and would silently kill a file-level watch) and
47
+ * catches the file being created after the server starts. Returns a stop function.
48
+ */
49
+ export declare function watchEnvFile(filePath: string, onChange: () => void): () => void;
@@ -0,0 +1,112 @@
1
+ import { watch } from "node:fs";
2
+ import path from "node:path";
3
+ import { parseEnv } from "node:util";
4
+ import { readFileSync } from "node:fs";
5
+ const ENV_FILE_FLAG = "--env-file";
6
+ /**
7
+ * Peek argv for `--env-file <path>` / `--env-file=<path>` before oclif parses flags.
8
+ * Must run in `init()` so values (e.g. `INTEGRATION_LAYER_URL`, `EXTENSION_CONFIG_*`)
9
+ * are in `process.env` when flag `env:` bindings resolve.
10
+ */
11
+ export function envFilePathFromArgv(argv = process.argv) {
12
+ for (let i = 0; i < argv.length; i++) {
13
+ const arg = argv[i];
14
+ if (arg === ENV_FILE_FLAG) {
15
+ const next = argv[i + 1];
16
+ if (!next || next.startsWith("-")) {
17
+ throw new Error(`${ENV_FILE_FLAG} requires a path`);
18
+ }
19
+ return next;
20
+ }
21
+ if (arg.startsWith(`${ENV_FILE_FLAG}=`)) {
22
+ const value = arg.slice(ENV_FILE_FLAG.length + 1);
23
+ if (!value)
24
+ throw new Error(`${ENV_FILE_FLAG} requires a path`);
25
+ return value;
26
+ }
27
+ }
28
+ return undefined;
29
+ }
30
+ /**
31
+ * Resolve which dotenv file a command should read: an explicit `--env-file <path>`
32
+ * (required — a missing one is an error) or, failing that, `.env` in the cwd (optional).
33
+ */
34
+ export function resolveEnvFileLocation(options) {
35
+ const cwd = options?.cwd ?? process.cwd();
36
+ const fromArgv = envFilePathFromArgv(options?.argv ?? process.argv);
37
+ return {
38
+ path: path.resolve(cwd, fromArgv ?? ".env"),
39
+ required: fromArgv !== undefined,
40
+ };
41
+ }
42
+ /**
43
+ * Load a dotenv file into `process.env` without overriding existing keys
44
+ * (Node's `process.loadEnvFile` semantics).
45
+ *
46
+ * - `--env-file <path>` (from argv): required; a missing file fails loudly.
47
+ * - otherwise `.env` in cwd: optional; a missing file is a no-op.
48
+ *
49
+ * Returns the absolute path that was loaded, or `undefined` when nothing was loaded.
50
+ */
51
+ export function loadLocalEnv(options) {
52
+ const { path: filePath, required } = resolveEnvFileLocation(options);
53
+ try {
54
+ process.loadEnvFile(filePath);
55
+ return filePath;
56
+ }
57
+ catch (err) {
58
+ const code = err.code;
59
+ if (!required && code === "ENOENT")
60
+ return undefined;
61
+ throw err;
62
+ }
63
+ }
64
+ /**
65
+ * Parse a dotenv file into a plain object WITHOUT touching `process.env`. Returns an
66
+ * empty object when the file is absent — the caller decides whether that's an error.
67
+ * Used by the `serve` hot-reload path, which needs the file's current values on each
68
+ * change (unlike {@link loadLocalEnv}, whose "existing env wins" load can't re-apply an
69
+ * edited value already present in `process.env`).
70
+ */
71
+ export function parseEnvFile(filePath) {
72
+ let source;
73
+ try {
74
+ source = readFileSync(filePath, "utf8");
75
+ }
76
+ catch (err) {
77
+ if (err.code === "ENOENT")
78
+ return {};
79
+ throw err;
80
+ }
81
+ return parseEnv(source);
82
+ }
83
+ /**
84
+ * Watch a dotenv file for changes and invoke `onChange` (debounced) after each write.
85
+ * Watches the containing DIRECTORY, not the file, so it survives editors that save via
86
+ * atomic rename (which swaps the inode and would silently kill a file-level watch) and
87
+ * catches the file being created after the server starts. Returns a stop function.
88
+ */
89
+ export function watchEnvFile(filePath, onChange) {
90
+ const dir = path.dirname(filePath);
91
+ const base = path.basename(filePath);
92
+ let timer;
93
+ let watcher;
94
+ try {
95
+ watcher = watch(dir, (_event, changed) => {
96
+ // `changed` is null on some platforms; fall back to firing on any dir event.
97
+ if (changed !== null && changed !== base)
98
+ return;
99
+ clearTimeout(timer);
100
+ timer = setTimeout(onChange, 50);
101
+ });
102
+ }
103
+ catch {
104
+ // A missing/unwatchable directory just means no hot-reload; not fatal.
105
+ return () => { };
106
+ }
107
+ return () => {
108
+ clearTimeout(timer);
109
+ watcher.close();
110
+ };
111
+ }
112
+ //# sourceMappingURL=loadLocalEnv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadLocalEnv.js","sourceRoot":"","sources":["../../src/lib/loadLocalEnv.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // `composeWithIntegrationLayer` below is the low-level half. Fetching the project's
5
5
  // subgraph SDL is a plain authenticated HTTP call, so it lives separately in
6
- // `../ilClient.ts`, parameterised by (baseUrl, projectKey, token) with the command
7
- // layer supplying the token.
6
+ // `../ilClient.ts`, parameterised by (baseUrl, projectKey, authFetch) with the command
7
+ // layer supplying the authenticated fetch.
8
8
  import { parse, printSchema } from "graphql";
9
9
  import { composeServices } from "@apollo/composition";
10
10
  /** The subgraph names the Commerce Integration Layer composes under — matched here so the
@@ -1 +1 @@
1
- {"version":3,"file":"compose.js","sourceRoot":"","sources":["../../../src/lib/tooling/compose.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,+FAA+F;AAC/F,EAAE;AACF,oFAAoF;AACpF,6EAA6E;AAC7E,mFAAmF;AACnF,6BAA6B;AAE7B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAsB,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;mDAEmD;AACnD,MAAM,CAAC,MAAM,yBAAyB,GAAG,mBAAmB,CAAC;AAC7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAc9C;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CACzC,mBAA2B,EAC3B,YAAoB,EACpB,IAA2D;IAE3D,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACH,QAAQ,GAAG;YACT,EAAE,IAAI,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,mBAAmB,EAAE;YACxG,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE;SACnF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,6BAA8B,GAAa,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;IACxF,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,gFAAgF;IAChF,6EAA6E;IAC7E,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,iBAAiB,EAAE,CAAC;IAClE,OAAO;QACL,EAAE,EAAE,IAAI;QACR,SAAS;QACT,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC;QAC9B,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"compose.js","sourceRoot":"","sources":["../../../src/lib/tooling/compose.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,+FAA+F;AAC/F,EAAE;AACF,oFAAoF;AACpF,6EAA6E;AAC7E,uFAAuF;AACvF,2CAA2C;AAE3C,OAAO,EAAE,KAAK,EAAE,WAAW,EAAsB,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;mDAEmD;AACnD,MAAM,CAAC,MAAM,yBAAyB,GAAG,mBAAmB,CAAC;AAC7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAc9C;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CACzC,mBAA2B,EAC3B,YAAoB,EACpB,IAA2D;IAE3D,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACH,QAAQ,GAAG;YACT,EAAE,IAAI,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,mBAAmB,EAAE;YACxG,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE;SACnF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,6BAA8B,GAAa,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;IACxF,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,gFAAgF;IAChF,6EAA6E;IAC7E,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,iBAAiB,EAAE,CAAC;IAClE,OAAO;QACL,EAAE,EAAE,IAAI;QACR,SAAS;QACT,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC;QAC9B,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ExtensionResourceTypeId } from "@commercetools/platform-sdk";
2
+ export interface SampleContext {
3
+ resourceTypeId: ExtensionResourceTypeId;
4
+ id: string;
5
+ version: number;
6
+ }
7
+ /** Build the expanded `resource.obj` for an API-Extension resource type. */
8
+ export declare function sampleExtensionResourceObj(resourceTypeId: ExtensionResourceTypeId, ctx: SampleContext): Record<string, unknown>;
@@ -0,0 +1,178 @@
1
+ import { AuthenticationModeValues, BusinessUnitTypeValues, CartOriginValues, CartStateValues, ExtensionResourceTypeIdValues, InventoryModeValues, OrderStateValues, PaymentMethodStatusValues, QuoteRequestStateValues, QuoteStateValues, RoundingModeValues, ShippingModeValues, StagedQuoteStateValues, TaxCalculationModeValues, TaxModeValues, } from "@commercetools/platform-sdk";
2
+ const SAMPLE = {
3
+ productId: "sample-product-id",
4
+ productTypeId: "sample-product-type-id",
5
+ lineItemId: "sample-line-item-id",
6
+ cartId: "sample-cart-id",
7
+ sku: "SAMPLE-SKU",
8
+ currency: "EUR",
9
+ email: "sample.customer@example.com",
10
+ quoteRequestId: "sample-quote-request-id",
11
+ stagedQuoteId: "sample-staged-quote-id",
12
+ timestamp: "2024-01-01T00:00:00.000Z",
13
+ };
14
+ function sampleMoney(centAmount = 1000) {
15
+ return {
16
+ type: "centPrecision",
17
+ currencyCode: SAMPLE.currency,
18
+ centAmount,
19
+ fractionDigits: 2,
20
+ };
21
+ }
22
+ function sampleAddress(id = "sample-address-id") {
23
+ return {
24
+ id,
25
+ country: "DE",
26
+ city: "Berlin",
27
+ streetName: "Sample Street",
28
+ streetNumber: "1",
29
+ postalCode: "10115",
30
+ };
31
+ }
32
+ function sampleProductTypeRef() {
33
+ return { typeId: "product-type", id: SAMPLE.productTypeId };
34
+ }
35
+ function sampleCartLineItem() {
36
+ return {
37
+ id: SAMPLE.lineItemId,
38
+ productId: SAMPLE.productId,
39
+ productType: sampleProductTypeRef(),
40
+ name: { en: "Sample product" },
41
+ quantity: 1,
42
+ variant: { id: 1, sku: SAMPLE.sku },
43
+ price: { value: sampleMoney() },
44
+ };
45
+ }
46
+ function sampleShoppingListLineItem() {
47
+ return {
48
+ id: SAMPLE.lineItemId,
49
+ addedAt: SAMPLE.timestamp,
50
+ productId: SAMPLE.productId,
51
+ productType: sampleProductTypeRef(),
52
+ name: { en: "Sample product" },
53
+ published: true,
54
+ quantity: 1,
55
+ variant: { id: 1, sku: SAMPLE.sku },
56
+ };
57
+ }
58
+ function sampleCartFields(ctx) {
59
+ return {
60
+ id: ctx.id,
61
+ version: ctx.version,
62
+ currency: SAMPLE.currency,
63
+ lineItems: [sampleCartLineItem()],
64
+ customLineItems: [],
65
+ totalPrice: sampleMoney(),
66
+ taxMode: TaxModeValues.Platform,
67
+ priceRoundingMode: RoundingModeValues.HalfEven,
68
+ taxRoundingMode: RoundingModeValues.HalfEven,
69
+ taxCalculationMode: TaxCalculationModeValues.LineItemLevel,
70
+ inventoryMode: InventoryModeValues.None,
71
+ cartState: CartStateValues.Active,
72
+ shippingMode: ShippingModeValues.Single,
73
+ shipping: [],
74
+ discountCodes: [],
75
+ directDiscounts: [],
76
+ refusedGifts: [],
77
+ origin: CartOriginValues.Customer,
78
+ itemShippingAddresses: [],
79
+ };
80
+ }
81
+ const sampleObjBuilders = {
82
+ [ExtensionResourceTypeIdValues.Cart]: sampleCartFields,
83
+ [ExtensionResourceTypeIdValues.Order]: (ctx) => ({
84
+ ...sampleCartFields(ctx),
85
+ orderNumber: "SAMPLE-ORDER-001",
86
+ orderState: OrderStateValues.Open,
87
+ }),
88
+ [ExtensionResourceTypeIdValues.Payment]: (ctx) => ({
89
+ id: ctx.id,
90
+ version: ctx.version,
91
+ amountPlanned: sampleMoney(),
92
+ paymentMethodInfo: {
93
+ paymentInterface: "Sample",
94
+ method: "card",
95
+ },
96
+ paymentStatus: {
97
+ interfaceCode: "Pending",
98
+ interfaceText: "Pending",
99
+ },
100
+ }),
101
+ [ExtensionResourceTypeIdValues.PaymentMethod]: (ctx) => ({
102
+ id: ctx.id,
103
+ version: ctx.version,
104
+ key: "sample-payment-method",
105
+ name: { en: "Sample card" },
106
+ paymentInterface: "Sample",
107
+ paymentMethodStatus: PaymentMethodStatusValues.Active,
108
+ default: false,
109
+ }),
110
+ [ExtensionResourceTypeIdValues.Customer]: (ctx) => ({
111
+ id: ctx.id,
112
+ version: ctx.version,
113
+ email: SAMPLE.email,
114
+ firstName: "Sample",
115
+ lastName: "Customer",
116
+ authenticationMode: AuthenticationModeValues.Password,
117
+ addresses: [sampleAddress()],
118
+ }),
119
+ [ExtensionResourceTypeIdValues.CustomerGroup]: (ctx) => ({
120
+ id: ctx.id,
121
+ version: ctx.version,
122
+ key: "sample-customer-group",
123
+ name: "Sample customer group",
124
+ }),
125
+ [ExtensionResourceTypeIdValues.QuoteRequest]: (ctx) => ({
126
+ id: ctx.id,
127
+ version: ctx.version,
128
+ quoteRequestState: QuoteRequestStateValues.Submitted,
129
+ comment: "Sample quote request",
130
+ lineItems: [sampleCartLineItem()],
131
+ }),
132
+ [ExtensionResourceTypeIdValues.StagedQuote]: (ctx) => ({
133
+ id: ctx.id,
134
+ version: ctx.version,
135
+ stagedQuoteState: StagedQuoteStateValues.InProgress,
136
+ quoteRequest: {
137
+ typeId: ExtensionResourceTypeIdValues.QuoteRequest,
138
+ id: SAMPLE.quoteRequestId,
139
+ },
140
+ quotationCart: {
141
+ typeId: ExtensionResourceTypeIdValues.Cart,
142
+ id: SAMPLE.cartId,
143
+ },
144
+ }),
145
+ [ExtensionResourceTypeIdValues.Quote]: (ctx) => ({
146
+ id: ctx.id,
147
+ version: ctx.version,
148
+ quoteState: QuoteStateValues.Pending,
149
+ stagedQuote: {
150
+ typeId: ExtensionResourceTypeIdValues.StagedQuote,
151
+ id: SAMPLE.stagedQuoteId,
152
+ },
153
+ lineItems: [sampleCartLineItem()],
154
+ totalPrice: sampleMoney(),
155
+ }),
156
+ [ExtensionResourceTypeIdValues.BusinessUnit]: (ctx) => ({
157
+ id: ctx.id,
158
+ version: ctx.version,
159
+ key: "sample-business-unit",
160
+ name: "Sample business unit",
161
+ unitType: BusinessUnitTypeValues.Company,
162
+ }),
163
+ [ExtensionResourceTypeIdValues.ShoppingList]: (ctx) => ({
164
+ id: ctx.id,
165
+ version: ctx.version,
166
+ name: { en: "Sample shopping list" },
167
+ lineItems: [sampleShoppingListLineItem()],
168
+ }),
169
+ };
170
+ /** Build the expanded `resource.obj` for an API-Extension resource type. */
171
+ export function sampleExtensionResourceObj(resourceTypeId, ctx) {
172
+ const build = sampleObjBuilders[resourceTypeId];
173
+ if (!build) {
174
+ throw new Error(`no sample builder registered for resource type '${resourceTypeId}'`);
175
+ }
176
+ return build(ctx);
177
+ }
178
+ //# sourceMappingURL=extensionInputSampleObj.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensionInputSampleObj.js","sourceRoot":"","sources":["../../../src/lib/tooling/extensionInputSampleObj.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,33 @@
1
1
  import { type GraphQLSchema } from "graphql";
2
+ /** The per-package entry the CLI expects under each `extensions/*` when nothing overrides it. */
3
+ export declare const DEFAULT_ENTRY_SEGMENT: string;
4
+ /**
5
+ * Reduce an `--entry` flag value to the path *within each* extension package that `--all`
6
+ * should build — the same source name applied uniformly across every discovered folder.
7
+ *
8
+ * The single-extension flag defaults to a cwd-absolute path (`<cwd>/src/extension.ts`),
9
+ * which only makes sense against N packages as its relative tail, so we relativise it to
10
+ * the monorepo root: the default collapses back to `src/extension.ts`, and a caller who
11
+ * passes a repo-relative `--entry` (e.g. `src/main.ts`) round-trips unchanged. Anything
12
+ * that doesn't sit under the root (an absolute path elsewhere) can't name a per-package
13
+ * source, so we fall back to the default rather than emit a `../…` segment.
14
+ */
15
+ export declare function entrySegmentFor(root: string, entry: string): string;
2
16
  /** An extension package discovered under the workspace's extensions/ directory. */
3
17
  export interface DiscoveredExtension {
4
18
  /** The package/directory name (used only for messages — the combined subgraph has one name). */
5
19
  name: string;
6
- /** The extension source entry (`<dir>/src/extension.ts`). */
20
+ /** The extension source entry (`<dir>/<entrySegment>`, e.g. `<dir>/src/extension.ts`). */
7
21
  entry: string;
8
22
  /** The esbuild bundle output for a standalone build (`<dir>/dist/extension.js`). */
9
23
  outfile: string;
10
24
  }
11
25
  /**
12
- * Discover every extension package under `<root>/<dirName>` that has a
13
- * `src/extension.ts`. Sorted by name for stable, deterministic merge output.
26
+ * Discover every extension package under `<root>/<dirName>` that has an entry at
27
+ * `<pkg>/<entrySegment>` (default `src/extension.ts`). Sorted by name for stable,
28
+ * deterministic merge output.
14
29
  */
15
- export declare function discoverExtensions(root: string, dirName: string): Promise<DiscoveredExtension[]>;
30
+ export declare function discoverExtensions(root: string, dirName: string, entrySegment?: string): Promise<DiscoveredExtension[]>;
16
31
  /** One extension's contribution to the combined subgraph. */
17
32
  export interface ExtensionModule {
18
33
  name: string;
@@ -65,7 +80,9 @@ export interface BundleForFlags extends CombinedBuildResult {
65
80
  /**
66
81
  * The single build step shared by `build`/`validate`/`push`: bundle either the one
67
82
  * extension in the cwd (default) or — with `--all` — every extension under
68
- * `<extensionsDir>/*` merged into the one combined bundle a project deploys. Throws a
83
+ * `<extensionsDir>/*` merged into the one combined bundle a project deploys. `--entry`
84
+ * carries over to `--all` as the per-package source segment (see {@link entrySegmentFor}),
85
+ * so a repo with a non-default entry name builds uniformly across every folder. Throws a
69
86
  * clean message when `--all` finds nothing to build.
70
87
  */
71
88
  export declare function bundleForFlags(opts: {
@@ -7,25 +7,43 @@
7
7
  // never one-subgraph-per-extension (that's not the deployed shape).
8
8
  import { readdir, readFile, stat, writeFile, mkdtemp } from "node:fs/promises";
9
9
  import { tmpdir } from "node:os";
10
- import { join, resolve } from "node:path";
10
+ import { join, relative, resolve } from "node:path";
11
11
  import process from "node:process";
12
12
  import { buildSubgraphSchema, printSubgraphSchema } from "@apollo/subgraph";
13
13
  import { mergeTypeDefs } from "@graphql-tools/merge";
14
14
  import { Kind, parse } from "graphql";
15
15
  import { buildBundle } from "./build.js";
16
16
  import { loadBundleSource } from "./loadBundle.js";
17
+ /** The per-package entry the CLI expects under each `extensions/*` when nothing overrides it. */
18
+ export const DEFAULT_ENTRY_SEGMENT = join("src", "extension.ts");
17
19
  /**
18
- * Discover every extension package under `<root>/<dirName>` that has a
19
- * `src/extension.ts`. Sorted by name for stable, deterministic merge output.
20
+ * Reduce an `--entry` flag value to the path *within each* extension package that `--all`
21
+ * should build — the same source name applied uniformly across every discovered folder.
22
+ *
23
+ * The single-extension flag defaults to a cwd-absolute path (`<cwd>/src/extension.ts`),
24
+ * which only makes sense against N packages as its relative tail, so we relativise it to
25
+ * the monorepo root: the default collapses back to `src/extension.ts`, and a caller who
26
+ * passes a repo-relative `--entry` (e.g. `src/main.ts`) round-trips unchanged. Anything
27
+ * that doesn't sit under the root (an absolute path elsewhere) can't name a per-package
28
+ * source, so we fall back to the default rather than emit a `../…` segment.
29
+ */
30
+ export function entrySegmentFor(root, entry) {
31
+ const segment = relative(root, resolve(root, entry));
32
+ return segment === "" || segment.startsWith("..") ? DEFAULT_ENTRY_SEGMENT : segment;
33
+ }
34
+ /**
35
+ * Discover every extension package under `<root>/<dirName>` that has an entry at
36
+ * `<pkg>/<entrySegment>` (default `src/extension.ts`). Sorted by name for stable,
37
+ * deterministic merge output.
20
38
  */
21
- export async function discoverExtensions(root, dirName) {
39
+ export async function discoverExtensions(root, dirName, entrySegment = DEFAULT_ENTRY_SEGMENT) {
22
40
  const base = join(root, dirName);
23
41
  const dirents = await readdir(base, { withFileTypes: true }).catch(() => []);
24
42
  const found = [];
25
43
  for (const dirent of dirents) {
26
44
  if (!dirent.isDirectory())
27
45
  continue;
28
- const entry = join(base, dirent.name, "src", "extension.ts");
46
+ const entry = join(base, dirent.name, entrySegment);
29
47
  const hasEntry = await stat(entry)
30
48
  .then((s) => s.isFile())
31
49
  .catch(() => false);
@@ -187,7 +205,9 @@ export const hooks = Object.assign(
187
205
  /**
188
206
  * The single build step shared by `build`/`validate`/`push`: bundle either the one
189
207
  * extension in the cwd (default) or — with `--all` — every extension under
190
- * `<extensionsDir>/*` merged into the one combined bundle a project deploys. Throws a
208
+ * `<extensionsDir>/*` merged into the one combined bundle a project deploys. `--entry`
209
+ * carries over to `--all` as the per-package source segment (see {@link entrySegmentFor}),
210
+ * so a repo with a non-default entry name builds uniformly across every folder. Throws a
191
211
  * clean message when `--all` finds nothing to build.
192
212
  */
193
213
  export async function bundleForFlags(opts) {
@@ -195,9 +215,11 @@ export async function bundleForFlags(opts) {
195
215
  const { outfile, sourceFiles } = await buildBundle(opts.entry, opts.out);
196
216
  return { outfile, sourceFiles, describe: opts.entry };
197
217
  }
198
- const extensions = await discoverExtensions(opts.cwd ?? process.cwd(), opts.extensionsDir);
218
+ const cwd = opts.cwd ?? process.cwd();
219
+ const entrySegment = entrySegmentFor(cwd, opts.entry);
220
+ const extensions = await discoverExtensions(cwd, opts.extensionsDir, entrySegment);
199
221
  if (extensions.length === 0) {
200
- throw new Error(`no extensions found under ./${opts.extensionsDir}/*/src/extension.ts — run --all from the monorepo root`);
222
+ throw new Error(`no extensions found under ./${opts.extensionsDir}/*/${entrySegment} — run --all from the monorepo root`);
201
223
  }
202
224
  const { outfile, sourceFiles } = await buildCombinedBundle(extensions, opts.out);
203
225
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../../src/lib/tooling/extensions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../../src/lib/tooling/extensions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { ExtensionResourceTypeId } from "@commercetools/platform-sdk";
2
+ import type { ApiExtensionAction } from "./apiExtension.js";
3
+ /** Resource type ids the platform SDK exposes for API Extensions. */
4
+ export declare const EXTENSION_RESOURCE_TYPE_IDS: readonly ExtensionResourceTypeId[];
5
+ export type ExtensionResourceTypeIdValue = (typeof EXTENSION_RESOURCE_TYPE_IDS)[number];
6
+ export interface GenerateExtensionInputSampleOptions {
7
+ action: ApiExtensionAction;
8
+ resourceTypeId: string;
9
+ /** Override the sample resource id (defaults to `sample-<resourceType>-id`). */
10
+ id?: string;
11
+ }
12
+ export interface ExtensionInputSample {
13
+ action: ApiExtensionAction;
14
+ resource: {
15
+ typeId: ExtensionResourceTypeId;
16
+ id: string;
17
+ obj: Record<string, unknown>;
18
+ };
19
+ }
20
+ export declare function isExtensionResourceTypeId(value: string): value is ExtensionResourceTypeId;
21
+ /** Build a commercetools ExtensionInput sample for local handler testing. */
22
+ export declare function generateExtensionInputSample(options: GenerateExtensionInputSampleOptions): ExtensionInputSample;
@@ -0,0 +1,36 @@
1
+ import { ExtensionActionValues, ExtensionResourceTypeIdValues, } from "@commercetools/platform-sdk";
2
+ import { sampleExtensionResourceObj } from "./extensionInputSampleObj.js";
3
+ /** Resource type ids the platform SDK exposes for API Extensions. */
4
+ export const EXTENSION_RESOURCE_TYPE_IDS = Object.freeze(Object.values(ExtensionResourceTypeIdValues).sort());
5
+ const supportedResourceTypes = new Set(EXTENSION_RESOURCE_TYPE_IDS);
6
+ export function isExtensionResourceTypeId(value) {
7
+ return supportedResourceTypes.has(value);
8
+ }
9
+ function sampleId(resourceTypeId, id) {
10
+ return id ?? `sample-${resourceTypeId}-id`;
11
+ }
12
+ /** Build a commercetools ExtensionInput sample for local handler testing. */
13
+ export function generateExtensionInputSample(options) {
14
+ const { action, resourceTypeId } = options;
15
+ if (!isExtensionResourceTypeId(resourceTypeId)) {
16
+ throw new Error(`unsupported resource type '${resourceTypeId}' — supported: ${EXTENSION_RESOURCE_TYPE_IDS.join(", ")}`);
17
+ }
18
+ if (action !== ExtensionActionValues.Create && action !== ExtensionActionValues.Update) {
19
+ throw new Error(`unsupported action '${action}' — supported: ${ExtensionActionValues.Create}, ${ExtensionActionValues.Update}`);
20
+ }
21
+ const id = sampleId(resourceTypeId, options.id);
22
+ const version = action === ExtensionActionValues.Update ? 2 : 1;
23
+ return {
24
+ action,
25
+ resource: {
26
+ typeId: resourceTypeId,
27
+ id,
28
+ obj: sampleExtensionResourceObj(resourceTypeId, {
29
+ resourceTypeId,
30
+ id,
31
+ version,
32
+ }),
33
+ },
34
+ };
35
+ }
36
+ //# sourceMappingURL=generateExtensionInputSample.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateExtensionInputSample.js","sourceRoot":"","sources":["../../../src/lib/tooling/generateExtensionInputSample.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,qEAAqE;AACrE,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC,MAAM,CACtD,MAAM,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,IAAI,EAAE,CACd,CAAC;AAoBxC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAS,2BAA2B,CAAC,CAAC;AAE5E,MAAM,UAAU,yBAAyB,CAAC,KAAa;IACrD,OAAO,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,QAAQ,CAAC,cAAsB,EAAE,EAAW;IACnD,OAAO,EAAE,IAAI,UAAU,cAAc,KAAK,CAAC;AAC7C,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,4BAA4B,CAC1C,OAA4C;IAE5C,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAC3C,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,8BAA8B,cAAc,kBAAkB,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvG,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,KAAK,qBAAqB,CAAC,MAAM,IAAI,MAAM,KAAK,qBAAqB,CAAC,MAAM,EAAE,CAAC;QACvF,MAAM,IAAI,KAAK,CACb,uBAAuB,MAAM,kBAAkB,qBAAqB,CAAC,MAAM,KAAK,qBAAqB,CAAC,MAAM,EAAE,CAC/G,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,MAAM,KAAK,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,OAAO;QACL,MAAM;QACN,QAAQ,EAAE;YACR,MAAM,EAAE,cAAc;YACtB,EAAE;YACF,GAAG,EAAE,0BAA0B,CAAC,cAAc,EAAE;gBAC9C,cAAc;gBACd,EAAE;gBACF,OAAO;aACR,CAAC;SACH;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@commercetools/cli-topic-integration-layer",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "commercetools CLI plugin: integration-layer topic",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -21,6 +21,7 @@
21
21
  },
22
22
  "dependencies": {
23
23
  "@commercetools/cli-plugin-auth": ">=0.0.6",
24
+ "@commercetools/platform-sdk": "8.25.0",
24
25
  "@apollo/composition": "^2.14.1",
25
26
  "@apollo/gateway": "^2.14.1",
26
27
  "@apollo/subgraph": "^2.14.1",
@@ -33,7 +34,6 @@
33
34
  "typescript": "^5.7.2"
34
35
  },
35
36
  "devDependencies": {
36
- "@commercetools/platform-sdk": "8.25.0",
37
37
  "@oclif/test": "^4.1.12",
38
38
  "@types/node": "^22.10.2",
39
39
  "rimraf": "^6.0.1",
@@ -41,7 +41,10 @@
41
41
  },
42
42
  "oclif": {
43
43
  "topicSeparator": " ",
44
- "commands": "./dist/commands"
44
+ "commands": "./dist/commands",
45
+ "hooks": {
46
+ "prerun": "./dist/hooks/authentication"
47
+ }
45
48
  },
46
49
  "scripts": {
47
50
  "clean": "rimraf dist",