@stigmer/sdk 3.12.3 → 3.12.5

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 (107) hide show
  1. package/__tests__/billing.test.js +36 -0
  2. package/__tests__/billing.test.js.map +1 -1
  3. package/__tests__/mcpserver-connect.test.d.ts +2 -0
  4. package/__tests__/mcpserver-connect.test.d.ts.map +1 -0
  5. package/__tests__/mcpserver-connect.test.js +146 -0
  6. package/__tests__/mcpserver-connect.test.js.map +1 -0
  7. package/__tests__/skill.test.d.ts +2 -0
  8. package/__tests__/skill.test.d.ts.map +1 -0
  9. package/__tests__/skill.test.js +117 -0
  10. package/__tests__/skill.test.js.map +1 -0
  11. package/__tests__/update-input.test.d.ts +2 -0
  12. package/__tests__/update-input.test.d.ts.map +1 -0
  13. package/__tests__/update-input.test.js +169 -0
  14. package/__tests__/update-input.test.js.map +1 -0
  15. package/billing.d.ts +27 -0
  16. package/billing.d.ts.map +1 -1
  17. package/billing.js +26 -1
  18. package/billing.js.map +1 -1
  19. package/errors.d.ts +1 -1
  20. package/errors.d.ts.map +1 -1
  21. package/errors.js +1 -1
  22. package/errors.js.map +1 -1
  23. package/execution/__tests__/tool-view.fixtures.test.js +23 -4
  24. package/execution/__tests__/tool-view.fixtures.test.js.map +1 -1
  25. package/execution/tool-view.d.ts +32 -0
  26. package/execution/tool-view.d.ts.map +1 -1
  27. package/execution/tool-view.js +45 -0
  28. package/execution/tool-view.js.map +1 -1
  29. package/gen/agentexecution.d.ts +6 -0
  30. package/gen/agentexecution.d.ts.map +1 -1
  31. package/gen/agentexecution.js +9 -1
  32. package/gen/agentexecution.js.map +1 -1
  33. package/gen/client.d.ts +4 -4
  34. package/gen/client.d.ts.map +1 -1
  35. package/gen/client.js +1 -1
  36. package/gen/client.js.map +1 -1
  37. package/gen/errors.d.ts +7 -0
  38. package/gen/errors.d.ts.map +1 -1
  39. package/gen/errors.js +9 -0
  40. package/gen/errors.js.map +1 -1
  41. package/gen/identityaccount.d.ts +8 -0
  42. package/gen/identityaccount.d.ts.map +1 -1
  43. package/gen/identityaccount.js +11 -1
  44. package/gen/identityaccount.js.map +1 -1
  45. package/gen/mcpserver.d.ts +1 -0
  46. package/gen/mcpserver.d.ts.map +1 -1
  47. package/gen/mcpserver.js +8 -0
  48. package/gen/mcpserver.js.map +1 -1
  49. package/gen/oauthapp.d.ts +2 -1
  50. package/gen/oauthapp.d.ts.map +1 -1
  51. package/gen/oauthapp.js +1 -0
  52. package/gen/oauthapp.js.map +1 -1
  53. package/gen/organization.d.ts +5 -0
  54. package/gen/organization.d.ts.map +1 -1
  55. package/gen/organization.js +8 -1
  56. package/gen/organization.js.map +1 -1
  57. package/gen/platformclient.d.ts +1 -0
  58. package/gen/platformclient.d.ts.map +1 -1
  59. package/gen/platformclient.js +2 -0
  60. package/gen/platformclient.js.map +1 -1
  61. package/index.d.ts +6 -2
  62. package/index.d.ts.map +1 -1
  63. package/index.js +8 -2
  64. package/index.js.map +1 -1
  65. package/mcpserver-connect.d.ts +79 -0
  66. package/mcpserver-connect.d.ts.map +1 -0
  67. package/mcpserver-connect.js +114 -0
  68. package/mcpserver-connect.js.map +1 -0
  69. package/package.json +2 -2
  70. package/provider-standing.d.ts +19 -0
  71. package/provider-standing.d.ts.map +1 -0
  72. package/provider-standing.js +31 -0
  73. package/provider-standing.js.map +1 -0
  74. package/skill.d.ts +51 -0
  75. package/skill.d.ts.map +1 -0
  76. package/skill.js +102 -0
  77. package/skill.js.map +1 -0
  78. package/src/__tests__/billing.test.ts +44 -0
  79. package/src/__tests__/mcpserver-connect.test.ts +181 -0
  80. package/src/__tests__/skill.test.ts +150 -0
  81. package/src/__tests__/update-input.test.ts +219 -0
  82. package/src/billing.ts +44 -0
  83. package/src/errors.ts +1 -0
  84. package/src/execution/__tests__/tool-view.fixtures.test.ts +41 -4
  85. package/src/execution/tool-view.ts +52 -0
  86. package/src/gen/agentexecution.ts +17 -1
  87. package/src/gen/client.ts +4 -4
  88. package/src/gen/errors.ts +10 -0
  89. package/src/gen/identityaccount.ts +21 -1
  90. package/src/gen/mcpserver.ts +6 -0
  91. package/src/gen/oauthapp.ts +3 -1
  92. package/src/gen/organization.ts +15 -1
  93. package/src/gen/platformclient.ts +3 -0
  94. package/src/index.ts +22 -0
  95. package/src/mcpserver-connect.ts +159 -0
  96. package/src/provider-standing.ts +37 -0
  97. package/src/skill.ts +125 -0
  98. package/src/stigmer.ts +12 -0
  99. package/src/update-input.ts +168 -0
  100. package/stigmer.d.ts +10 -0
  101. package/stigmer.d.ts.map +1 -1
  102. package/stigmer.js +12 -0
  103. package/stigmer.js.map +1 -1
  104. package/update-input.d.ts +24 -0
  105. package/update-input.d.ts.map +1 -0
  106. package/update-input.js +126 -0
  107. package/update-input.js.map +1 -0
@@ -20,6 +20,10 @@ function fakeTransport(captured) {
20
20
  captured.adjustCredits = req;
21
21
  return create(CreditLedgerEntrySchema, { amountMicros: req.amountMicros });
22
22
  },
23
+ grantCredits: (req) => {
24
+ captured.grantCredits = req;
25
+ return create(CreditLedgerEntrySchema, { amountMicros: req.amountMicros });
26
+ },
23
27
  });
24
28
  service(BillingQueryController, {
25
29
  getCreditLedger: (req) => {
@@ -46,6 +50,38 @@ describe("BillingClient.adjustCredits", () => {
46
50
  expect(captured.adjustCredits?.idempotencyKey).toBe("fund-acme-001");
47
51
  });
48
52
  });
53
+ describe("BillingClient.grantCredits", () => {
54
+ it("maps params including the expiry onto GrantCreditsInput", async () => {
55
+ const captured = {};
56
+ const client = new BillingClient(fakeTransport(captured));
57
+ const expiresAt = new Date("2026-08-31T23:59:59Z");
58
+ const entry = await client.grantCredits({
59
+ orgId: "acme",
60
+ amountMicros: 5000000n,
61
+ expiresAt,
62
+ reason: "monthly free allowance 2026-08",
63
+ idempotencyKey: "allowance-acme-2026-08",
64
+ });
65
+ expect(entry.amountMicros).toBe(5000000n);
66
+ const req = captured.grantCredits;
67
+ expect(req?.orgId).toBe("acme");
68
+ expect(req?.amountMicros).toBe(5000000n);
69
+ expect(req?.expiresAt && timestampDate(req.expiresAt)).toEqual(expiresAt);
70
+ expect(req?.reason).toBe("monthly free allowance 2026-08");
71
+ expect(req?.idempotencyKey).toBe("allowance-acme-2026-08");
72
+ });
73
+ it("omits the expiry for a never-expiring grant", async () => {
74
+ const captured = {};
75
+ const client = new BillingClient(fakeTransport(captured));
76
+ await client.grantCredits({
77
+ orgId: "acme",
78
+ amountMicros: 1000000n,
79
+ reason: "welcome credit",
80
+ idempotencyKey: "welcome-acme",
81
+ });
82
+ expect(captured.grantCredits?.expiresAt).toBeUndefined();
83
+ });
84
+ });
49
85
  describe("BillingClient.getCreditLedger", () => {
50
86
  it("maps all filters including the time range", async () => {
51
87
  const captured = {};
@@ -1 +1 @@
1
- {"version":3,"file":"billing.test.js","sourceRoot":"","sources":["../../src/__tests__/billing.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"billing.test.js","sourceRoot":"","sources":["../../src/__tests__/billing.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mcpserver-connect.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpserver-connect.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/mcpserver-connect.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,146 @@
1
+ // Pins the shared async-connect protocol (stigmer/stigmer#425): start + poll,
2
+ // terminal-failure rehydration, the UNIMPLEMENTED blocking fallback, and the
3
+ // still-running bound. Every SDK surface (CLI, React hooks, host apps) rides
4
+ // this one implementation, so its contract is pinned here rather than
5
+ // re-tested per consumer.
6
+ import { describe, expect, it } from "vitest";
7
+ import { create } from "@bufbuild/protobuf";
8
+ import { Code, ConnectError } from "@connectrpc/connect";
9
+ import { McpServerSchema } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/api_pb";
10
+ import { ConnectInputSchema } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/io_pb";
11
+ import { ConnectPhase } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/status_pb";
12
+ import { StigmerError, wrapError } from "../gen/errors.js";
13
+ import { connectAndWait, ConnectStillRunningError, } from "../mcpserver-connect.js";
14
+ const INPUT = create(ConnectInputSchema, { mcpServerId: "mcp-1", org: "test-org" });
15
+ function server(overrides) {
16
+ return create(McpServerSchema, {
17
+ metadata: { id: "mcp-1", name: "Test Server" },
18
+ status: {
19
+ ...(overrides?.toolName !== undefined
20
+ ? { discoveredCapabilities: { tools: [{ name: overrides.toolName }] } }
21
+ : {}),
22
+ connectStatus: {
23
+ phase: overrides?.phase ?? ConnectPhase.connecting,
24
+ workflowId: "stigmer/mcp-server/connect/mcp-1",
25
+ failureCode: overrides?.failureCode ?? "",
26
+ failureMessage: overrides?.failureMessage ?? "",
27
+ warning: overrides?.warning ?? "",
28
+ },
29
+ },
30
+ });
31
+ }
32
+ function unimplemented() {
33
+ return wrapError(new ConnectError("startConnect is not implemented", Code.Unimplemented));
34
+ }
35
+ const NEVER = () => new Promise(() => { });
36
+ describe("connectAndWait", () => {
37
+ it("resolves with the settled resource once connect_status reports success", async () => {
38
+ const polled = [
39
+ server({ phase: ConnectPhase.connecting }),
40
+ server({ phase: ConnectPhase.succeeded, toolName: "search_code" }),
41
+ ];
42
+ const lane = {
43
+ startConnect: async () => server(),
44
+ connect: NEVER,
45
+ get: async () => polled.shift() ?? server({ phase: ConnectPhase.succeeded }),
46
+ };
47
+ const settled = await connectAndWait(lane, INPUT, { pollIntervalMs: 1 });
48
+ expect(settled.status?.connectStatus?.phase).toBe(ConnectPhase.succeeded);
49
+ expect(settled.status?.discoveredCapabilities?.tools[0]?.name).toBe("search_code");
50
+ });
51
+ it("surfaces the CONNECTING snapshot (dead-runner warning) via onStarted", async () => {
52
+ const lane = {
53
+ startConnect: async () => server({ warning: "no runner appears to be polling the task queue" }),
54
+ connect: NEVER,
55
+ get: async () => server({ phase: ConnectPhase.succeeded }),
56
+ };
57
+ let warning = "";
58
+ await connectAndWait(lane, INPUT, {
59
+ pollIntervalMs: 1,
60
+ onStarted: (started) => {
61
+ warning = started.status?.connectStatus?.warning ?? "";
62
+ },
63
+ });
64
+ expect(warning).toContain("no runner");
65
+ });
66
+ it("rehydrates a failed operation into the classification the blocking RPC would have thrown", async () => {
67
+ const lane = {
68
+ startConnect: async () => server(),
69
+ connect: NEVER,
70
+ get: async () => server({
71
+ phase: ConnectPhase.failed,
72
+ failureCode: "FailedPrecondition",
73
+ failureMessage: "connect failed for MCP server 'Test Server': missing credentials",
74
+ }),
75
+ };
76
+ const err = await connectAndWait(lane, INPUT, { pollIntervalMs: 1 }).catch((e) => e);
77
+ expect(err).toBeInstanceOf(StigmerError);
78
+ const stigmerErr = err;
79
+ // Byte-parity with the blocking lane: same code mapping, same raw message.
80
+ expect(stigmerErr.code).toBe("failed-precondition");
81
+ expect(stigmerErr.message).toBe("connect failed for MCP server 'Test Server': missing credentials");
82
+ });
83
+ it("maps an unknown failure_code to the unknown classification instead of crashing", async () => {
84
+ const lane = {
85
+ startConnect: async () => server(),
86
+ connect: NEVER,
87
+ get: async () => server({
88
+ phase: ConnectPhase.failed,
89
+ failureCode: "SomeFutureCode",
90
+ failureMessage: "boom",
91
+ }),
92
+ };
93
+ const err = await connectAndWait(lane, INPUT, { pollIntervalMs: 1 }).catch((e) => e);
94
+ expect(err.code).toBe("unknown");
95
+ expect(err.message).toBe("boom");
96
+ });
97
+ it("falls back to the blocking connect when the backend answers UNIMPLEMENTED", async () => {
98
+ let blockingCalled = false;
99
+ const lane = {
100
+ startConnect: async () => {
101
+ throw unimplemented();
102
+ },
103
+ connect: async () => {
104
+ blockingCalled = true;
105
+ return server({ phase: ConnectPhase.succeeded, toolName: "search_code" });
106
+ },
107
+ get: NEVER,
108
+ };
109
+ const settled = await connectAndWait(lane, INPUT);
110
+ expect(blockingCalled).toBe(true);
111
+ expect(settled.status?.discoveredCapabilities?.tools[0]?.name).toBe("search_code");
112
+ });
113
+ it("propagates non-UNIMPLEMENTED start failures untouched", async () => {
114
+ const startFailure = wrapError(new ConnectError("no such server", Code.NotFound));
115
+ const lane = {
116
+ startConnect: async () => {
117
+ throw startFailure;
118
+ },
119
+ connect: NEVER,
120
+ get: NEVER,
121
+ };
122
+ await expect(connectAndWait(lane, INPUT)).rejects.toBe(startFailure);
123
+ });
124
+ it("throws ConnectStillRunningError when the deadline elapses while CONNECTING", async () => {
125
+ const lane = {
126
+ startConnect: async () => server(),
127
+ connect: NEVER,
128
+ get: async () => server({ phase: ConnectPhase.connecting }),
129
+ };
130
+ const err = await connectAndWait(lane, INPUT, { pollIntervalMs: 1, deadlineMs: 20 }).catch((e) => e);
131
+ expect(err).toBeInstanceOf(ConnectStillRunningError);
132
+ expect(err.mcpServerId).toBe("mcp-1");
133
+ });
134
+ it("bounds the blocking fallback with the same still-running semantics (soft, non-cancelling)", async () => {
135
+ const lane = {
136
+ startConnect: async () => {
137
+ throw unimplemented();
138
+ },
139
+ connect: NEVER,
140
+ get: NEVER,
141
+ };
142
+ const err = await connectAndWait(lane, INPUT, { deadlineMs: 20 }).catch((e) => e);
143
+ expect(err).toBeInstanceOf(ConnectStillRunningError);
144
+ });
145
+ });
146
+ //# sourceMappingURL=mcpserver-connect.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpserver-connect.test.js","sourceRoot":"","sources":["../../src/__tests__/mcpserver-connect.test.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,6EAA6E;AAC7E,6EAA6E;AAC7E,sEAAsE;AACtE,0BAA0B;AAE1B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AAEzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uDAAuD,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,2DAA2D,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EACL,cAAc,EACd,wBAAwB,GAEzB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,KAAK,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;AAEpF,SAAS,MAAM,CAAC,SAMf;IACC,OAAO,MAAM,CAAC,eAAe,EAAE;QAC7B,QAAQ,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;QAC9C,MAAM,EAAE;YACN,GAAG,CAAC,SAAS,EAAE,QAAQ,KAAK,SAAS;gBACnC,CAAC,CAAC,EAAE,sBAAsB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE;gBACvE,CAAC,CAAC,EAAE,CAAC;YACP,aAAa,EAAE;gBACb,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,YAAY,CAAC,UAAU;gBAClD,UAAU,EAAE,kCAAkC;gBAC9C,WAAW,EAAE,SAAS,EAAE,WAAW,IAAI,EAAE;gBACzC,cAAc,EAAE,SAAS,EAAE,cAAc,IAAI,EAAE;gBAC/C,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,EAAE;aAClC;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,SAAS,CAAC,IAAI,YAAY,CAAC,iCAAiC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,IAAI,OAAO,CAAY,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAErD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,MAAM,GAAG;YACb,MAAM,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC;YAC1C,MAAM,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;SACnE,CAAC;QACF,MAAM,IAAI,GAAyB;YACjC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,EAAE;YAClC,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC;SAC7E,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1E,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,sBAAsB,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,IAAI,GAAyB;YACjC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAAC;YAC/F,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC;SAC3D,CAAC;QAEF,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,MAAM,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE;YAChC,cAAc,EAAE,CAAC;YACjB,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;gBACrB,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,IAAI,EAAE,CAAC;YACzD,CAAC;SACF,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0FAA0F,EAAE,KAAK,IAAI,EAAE;QACxG,MAAM,IAAI,GAAyB;YACjC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,EAAE;YAClC,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,KAAK,IAAI,EAAE,CACd,MAAM,CAAC;gBACL,KAAK,EAAE,YAAY,CAAC,MAAM;gBAC1B,WAAW,EAAE,oBAAoB;gBACjC,cAAc,EAAE,kEAAkE;aACnF,CAAC;SACL,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9F,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,GAAmB,CAAC;QACvC,2EAA2E;QAC3E,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACpD,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,IAAI,GAAyB;YACjC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,EAAE;YAClC,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,KAAK,IAAI,EAAE,CACd,MAAM,CAAC;gBACL,KAAK,EAAE,YAAY,CAAC,MAAM;gBAC1B,WAAW,EAAE,gBAAgB;gBAC7B,cAAc,EAAE,MAAM;aACvB,CAAC;SACL,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9F,MAAM,CAAE,GAAoB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,CAAE,GAAoB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,MAAM,IAAI,GAAyB;YACjC,YAAY,EAAE,KAAK,IAAI,EAAE;gBACvB,MAAM,aAAa,EAAE,CAAC;YACxB,CAAC;YACD,OAAO,EAAE,KAAK,IAAI,EAAE;gBAClB,cAAc,GAAG,IAAI,CAAC;gBACtB,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;YAC5E,CAAC;YACD,GAAG,EAAE,KAAK;SACX,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAClD,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,sBAAsB,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,YAAY,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClF,MAAM,IAAI,GAAyB;YACjC,YAAY,EAAE,KAAK,IAAI,EAAE;gBACvB,MAAM,YAAY,CAAC;YACrB,CAAC;YACD,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,KAAK;SACX,CAAC;QAEF,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,MAAM,IAAI,GAAyB;YACjC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,EAAE;YAClC,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC;SAC5D,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CACxF,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAClB,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC;QACrD,MAAM,CAAE,GAAgC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;QACzG,MAAM,IAAI,GAAyB;YACjC,YAAY,EAAE,KAAK,IAAI,EAAE;gBACvB,MAAM,aAAa,EAAE,CAAC;YACxB,CAAC;YACD,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,KAAK;SACX,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3F,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=skill.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/skill.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,117 @@
1
+ // Wire-shape tests for RoutedSkillClient's size-routed push (stigmer#701).
2
+ // A router transport fakes the skill service in-process, so the routing is
3
+ // exercised through the REAL generated client and its error wrapping — the
4
+ // CLI's earlier copy of this logic keyed its fallback on `instanceof
5
+ // ConnectError`, which the SDK's wrapError made unreachable; these pins run
6
+ // the wrapped path. Mirrors sdk/go/skill_test.go's five routing pins.
7
+ import { describe, expect, it, vi } from "vitest";
8
+ import { Code, ConnectError, createRouterTransport } from "@connectrpc/connect";
9
+ import { create } from "@bufbuild/protobuf";
10
+ import { SkillCommandController } from "@stigmer/protos/ai/stigmer/agentic/skill/v1/command_pb";
11
+ import { SkillSchema } from "@stigmer/protos/ai/stigmer/agentic/skill/v1/api_pb";
12
+ import { PushSkillRequestSchema, SkillArtifactUploadUrlSchema, } from "@stigmer/protos/ai/stigmer/agentic/skill/v1/io_pb";
13
+ import { StigmerError } from "../gen/errors.js";
14
+ import { MAX_INLINE_ARTIFACT_BYTES, RoutedSkillClient } from "../skill.js";
15
+ const STAGING_URL = "http://stage.example/v1/skill-artifacts/uploads/sau_t";
16
+ /**
17
+ * In-process skill service. `withMint: false` leaves createArtifactUploadUrl
18
+ * unregistered, so the router answers Unimplemented — the exact wire shape
19
+ * of a pre-transfer-lane server.
20
+ */
21
+ function fakeTransport(captured, opts = { withMint: true }) {
22
+ return createRouterTransport(({ service }) => {
23
+ service(SkillCommandController, {
24
+ push: (req) => {
25
+ captured.pushes.push(req);
26
+ return create(SkillSchema, {});
27
+ },
28
+ ...(opts.withMint
29
+ ? {
30
+ createArtifactUploadUrl: (req) => {
31
+ captured.mints++;
32
+ expect(req.sizeBytes).toBeGreaterThan(0n);
33
+ return create(SkillArtifactUploadUrlSchema, {
34
+ url: STAGING_URL,
35
+ artifactUploadRef: "sau_t",
36
+ ttlSeconds: 900,
37
+ });
38
+ },
39
+ }
40
+ : {}),
41
+ });
42
+ });
43
+ }
44
+ function okFetch(record) {
45
+ return vi.fn(async (url, init) => {
46
+ record.putUrl = String(url);
47
+ record.putBytes = init.body instanceof Uint8Array ? init.body.byteLength : -1;
48
+ record.contentType = init.headers["content-type"];
49
+ return new Response(null, { status: 200 });
50
+ });
51
+ }
52
+ describe("RoutedSkillClient.push size routing", () => {
53
+ it("keeps small artifacts inline — no mint, bytes in the request", async () => {
54
+ const captured = { pushes: [], mints: 0 };
55
+ const client = new RoutedSkillClient(fakeTransport(captured));
56
+ await client.push(create(PushSkillRequestSchema, { org: "acme", artifact: new Uint8Array(1024) }));
57
+ expect(captured.mints).toBe(0);
58
+ expect(captured.pushes).toHaveLength(1);
59
+ expect(captured.pushes[0].artifact.length).toBe(1024);
60
+ });
61
+ it("stages large artifacts over HTTP and pushes by reference, preserving the envelope", async () => {
62
+ const captured = { pushes: [], mints: 0 };
63
+ const record = {};
64
+ const client = new RoutedSkillClient(fakeTransport(captured), okFetch(record));
65
+ const artifact = new Uint8Array(MAX_INLINE_ARTIFACT_BYTES + 1);
66
+ await client.push(create(PushSkillRequestSchema, { org: "acme", artifact, tag: "stable", message: "big" }));
67
+ expect(captured.mints).toBe(1);
68
+ expect(record.putUrl).toBe(STAGING_URL);
69
+ expect(record.putBytes).toBe(artifact.length);
70
+ expect(record.contentType).toBe("application/zip");
71
+ expect(captured.pushes).toHaveLength(1);
72
+ expect(captured.pushes[0].artifact.length).toBe(0);
73
+ expect(captured.pushes[0].artifactUploadRef).toBe("sau_t");
74
+ // The by-ref rewrite must not lose the rest of the request.
75
+ expect(captured.pushes[0].tag).toBe("stable");
76
+ expect(captured.pushes[0].message).toBe("big");
77
+ });
78
+ it("passes an explicit upload ref through untouched — the caller staged it", async () => {
79
+ const captured = { pushes: [], mints: 0 };
80
+ const client = new RoutedSkillClient(fakeTransport(captured));
81
+ await client.push(create(PushSkillRequestSchema, { org: "acme", artifactUploadRef: "sau_mine" }));
82
+ expect(captured.mints).toBe(0);
83
+ expect(captured.pushes).toHaveLength(1);
84
+ expect(captured.pushes[0].artifactUploadRef).toBe("sau_mine");
85
+ });
86
+ it("fails loud against servers that predate the transfer lane (wrapped Unimplemented)", async () => {
87
+ const captured = { pushes: [], mints: 0 };
88
+ const client = new RoutedSkillClient(fakeTransport(captured, { withMint: false }));
89
+ await expect(client.push(create(PushSkillRequestSchema, { org: "acme", artifact: new Uint8Array(MAX_INLINE_ARTIFACT_BYTES + 1) }))).rejects.toThrow(/upgrade stigmer-server/);
90
+ expect(captured.pushes).toHaveLength(0);
91
+ });
92
+ it("surfaces the staging rejection body and never proceeds to push", async () => {
93
+ const captured = { pushes: [], mints: 0 };
94
+ const rejectingFetch = (async () => new Response("staging slot expired", { status: 404 }));
95
+ const client = new RoutedSkillClient(fakeTransport(captured), rejectingFetch);
96
+ await expect(client.push(create(PushSkillRequestSchema, { org: "acme", artifact: new Uint8Array(MAX_INLINE_ARTIFACT_BYTES + 1) }))).rejects.toThrow(/HTTP 404: staging slot expired/);
97
+ expect(captured.pushes).toHaveLength(0);
98
+ });
99
+ it("propagates non-Unimplemented mint errors unmasked", async () => {
100
+ const captured = { pushes: [], mints: 0 };
101
+ const transport = createRouterTransport(({ service }) => {
102
+ service(SkillCommandController, {
103
+ push: (req) => {
104
+ captured.pushes.push(req);
105
+ return create(SkillSchema, {});
106
+ },
107
+ createArtifactUploadUrl: () => {
108
+ throw new ConnectError("artifact too large", Code.InvalidArgument);
109
+ },
110
+ });
111
+ });
112
+ const client = new RoutedSkillClient(transport);
113
+ await expect(client.push(create(PushSkillRequestSchema, { org: "acme", artifact: new Uint8Array(MAX_INLINE_ARTIFACT_BYTES + 1) }))).rejects.toSatisfy((err) => err instanceof StigmerError && err.code === "invalid-argument");
114
+ expect(captured.pushes).toHaveLength(0);
115
+ });
116
+ });
117
+ //# sourceMappingURL=skill.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.test.js","sourceRoot":"","sources":["../../src/__tests__/skill.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=update-input.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-input.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/update-input.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,169 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { create, toJson } from "@bufbuild/protobuf";
3
+ import { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
4
+ import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
5
+ import { OrganizationSchema, } from "@stigmer/protos/ai/stigmer/tenancy/organization/v1/api_pb";
6
+ import { OrganizationSpecSchema } from "@stigmer/protos/ai/stigmer/tenancy/organization/v1/spec_pb";
7
+ import { ManagementMode } from "@stigmer/protos/ai/stigmer/tenancy/organization/v1/enum_pb";
8
+ import { IdentityAccountSchema, } from "@stigmer/protos/ai/stigmer/iam/identityaccount/v1/api_pb";
9
+ import { IdentityAccountSpecSchema } from "@stigmer/protos/ai/stigmer/iam/identityaccount/v1/spec_pb";
10
+ import { IdentityAccountProvisioningMode } from "@stigmer/protos/ai/stigmer/iam/identityaccount/v1/enum_pb";
11
+ import { buildOrganizationProto } from "../gen/organization";
12
+ import { buildIdentityAccountProto } from "../gen/identityaccount";
13
+ import { toOrganizationUpdateInput, toIdentityAccountUpdateInput, } from "../update-input";
14
+ /**
15
+ * Update RPCs are full-spec replacements, so a complete mapper must
16
+ * round-trip EVERY mutable field of a loaded resource through the generated
17
+ * builder without loss. These tests pin that contract: fully-populated
18
+ * resource → mapper → builder → spec (as JSON, defaults omitted) deep-equals
19
+ * the original. If a mapper drops a field, the wipe-bug class is back.
20
+ */
21
+ function fullOrganization() {
22
+ return create(OrganizationSchema, {
23
+ apiVersion: "tenancy.stigmer.ai/v1",
24
+ kind: "Organization",
25
+ metadata: {
26
+ id: "acme",
27
+ name: "Acme Corp",
28
+ slug: "acme",
29
+ org: "acme",
30
+ labels: { tier: "gold" },
31
+ visibility: ApiResourceVisibility.visibility_private,
32
+ },
33
+ spec: {
34
+ description: "We make everything.",
35
+ logoUrl: "https://acme.example/logo.png",
36
+ managementMode: ManagementMode.self_managed,
37
+ identityProviderRef: {
38
+ org: "acme",
39
+ slug: "acme-okta",
40
+ kind: ApiResourceKind.identity_provider,
41
+ },
42
+ externalOrgId: "ext-org-1",
43
+ isPersonal: true,
44
+ preferences: { standingContext: "We deploy to us-east-1." },
45
+ },
46
+ });
47
+ }
48
+ function fullIdentityAccount() {
49
+ return create(IdentityAccountSchema, {
50
+ apiVersion: "iam.stigmer.ai/v1",
51
+ kind: "IdentityAccount",
52
+ metadata: {
53
+ id: "ia-123",
54
+ name: "Ada Lovelace",
55
+ slug: "ada-lovelace",
56
+ org: "acme",
57
+ labels: { team: "platform" },
58
+ visibility: ApiResourceVisibility.visibility_private,
59
+ },
60
+ spec: {
61
+ idpId: "auth0|abc123",
62
+ email: "ada@acme.example",
63
+ firstName: "Ada",
64
+ lastName: "Lovelace",
65
+ pictureUrl: "https://acme.example/ada.png",
66
+ isMachineAccount: true,
67
+ provisioningMode: IdentityAccountProvisioningMode.federated,
68
+ identityProviderRef: { org: "acme", slug: "acme-okta" },
69
+ preferences: {
70
+ standingContext: "Keep answers terse.",
71
+ defaultHarness: "cursor",
72
+ defaultNativeModel: "claude-sonnet-4.6",
73
+ defaultCursorModel: "composer-2.5",
74
+ },
75
+ },
76
+ });
77
+ }
78
+ describe("toOrganizationUpdateInput", () => {
79
+ it("round-trips a fully-populated organization spec through the builder", () => {
80
+ const org = fullOrganization();
81
+ const built = buildOrganizationProto(toOrganizationUpdateInput(org));
82
+ expect(toJson(OrganizationSpecSchema, built.spec)).toEqual(toJson(OrganizationSpecSchema, org.spec));
83
+ expect(built.metadata?.name).toBe("Acme Corp");
84
+ expect(built.metadata?.slug).toBe("acme");
85
+ expect(built.metadata?.org).toBe("acme");
86
+ expect(built.metadata?.labels).toEqual({ tier: "gold" });
87
+ expect(built.metadata?.visibility).toBe(ApiResourceVisibility.visibility_private);
88
+ });
89
+ it("preserves preferences when a caller overrides only profile fields (the wipe-bug class)", () => {
90
+ const org = fullOrganization();
91
+ const built = buildOrganizationProto({
92
+ ...toOrganizationUpdateInput(org),
93
+ description: "New description",
94
+ });
95
+ expect(built.spec?.preferences?.standingContext).toBe("We deploy to us-east-1.");
96
+ expect(built.spec?.description).toBe("New description");
97
+ expect(built.spec?.logoUrl).toBe("https://acme.example/logo.png");
98
+ });
99
+ it("maps an empty spec without inventing values", () => {
100
+ const org = create(OrganizationSchema, {
101
+ metadata: { name: "Bare", slug: "bare", org: "bare" },
102
+ spec: {},
103
+ });
104
+ const built = buildOrganizationProto(toOrganizationUpdateInput(org));
105
+ expect(toJson(OrganizationSpecSchema, built.spec)).toEqual({});
106
+ });
107
+ it("falls back to the slug when metadata.org is empty", () => {
108
+ const org = create(OrganizationSchema, {
109
+ metadata: { name: "Bare", slug: "bare" },
110
+ });
111
+ expect(toOrganizationUpdateInput(org).org).toBe("bare");
112
+ });
113
+ });
114
+ describe("toIdentityAccountUpdateInput", () => {
115
+ it("round-trips a fully-populated identity account spec through the builder", () => {
116
+ const account = fullIdentityAccount();
117
+ const built = buildIdentityAccountProto(toIdentityAccountUpdateInput(account));
118
+ expect(toJson(IdentityAccountSpecSchema, built.spec)).toEqual(toJson(IdentityAccountSpecSchema, account.spec));
119
+ expect(built.metadata?.name).toBe("Ada Lovelace");
120
+ expect(built.metadata?.labels).toEqual({ team: "platform" });
121
+ });
122
+ it("carries org and slug — the update pipeline's fallback address", () => {
123
+ const input = toIdentityAccountUpdateInput(fullIdentityAccount());
124
+ expect(input.org).toBe("acme");
125
+ expect(input.slug).toBe("ada-lovelace");
126
+ });
127
+ it("preserves the rest of the spec when a caller overrides only preferences", () => {
128
+ const account = fullIdentityAccount();
129
+ const mapped = toIdentityAccountUpdateInput(account);
130
+ const built = buildIdentityAccountProto({
131
+ ...mapped,
132
+ preferences: { ...mapped.preferences, standingContext: "Prefer bullet points." },
133
+ });
134
+ expect(built.spec?.preferences?.standingContext).toBe("Prefer bullet points.");
135
+ expect(built.spec?.email).toBe("ada@acme.example");
136
+ expect(built.spec?.idpId).toBe("auth0|abc123");
137
+ expect(built.spec?.provisioningMode).toBe(IdentityAccountProvisioningMode.federated);
138
+ });
139
+ it("preserves structured defaults when only standing context is edited (nested wipe-bug class)", () => {
140
+ const account = fullIdentityAccount();
141
+ const mapped = toIdentityAccountUpdateInput(account);
142
+ // The correct editor pattern for a nested message: spread the mapper's
143
+ // COMPLETE preferences and override only the edited field. A bare
144
+ // `preferences: { standingContext }` literal would wipe the structured
145
+ // defaults — the session-4 wipe bug recurring one level down.
146
+ const built = buildIdentityAccountProto({
147
+ ...mapped,
148
+ preferences: { ...mapped.preferences, standingContext: "Terser still." },
149
+ });
150
+ expect(built.spec?.preferences?.standingContext).toBe("Terser still.");
151
+ expect(built.spec?.preferences?.defaultHarness).toBe("cursor");
152
+ expect(built.spec?.preferences?.defaultNativeModel).toBe("claude-sonnet-4.6");
153
+ expect(built.spec?.preferences?.defaultCursorModel).toBe("composer-2.5");
154
+ });
155
+ it("clears standing context to wire-absent when the text is emptied", () => {
156
+ const account = fullIdentityAccount();
157
+ const mapped = toIdentityAccountUpdateInput(account);
158
+ const built = buildIdentityAccountProto({
159
+ ...mapped,
160
+ preferences: { ...mapped.preferences, standingContext: "" },
161
+ });
162
+ // Proto3 empty string is the field default — wire-identical to absent,
163
+ // which the server compose steps treat as "no preference declared".
164
+ expect(built.spec?.preferences?.standingContext ?? "").toBe("");
165
+ // Clearing one field never disturbs its siblings.
166
+ expect(built.spec?.preferences?.defaultHarness).toBe("cursor");
167
+ });
168
+ });
169
+ //# sourceMappingURL=update-input.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-input.test.js","sourceRoot":"","sources":["../../src/__tests__/update-input.test.ts"],"names":[],"mappings":"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"}
package/billing.d.ts CHANGED
@@ -35,6 +35,21 @@ export interface AdjustCreditsParams {
35
35
  /** Client-supplied deduplication key to prevent double-processing. */
36
36
  readonly idempotencyKey: string;
37
37
  }
38
+ /** Parameters for a promotional credit grant. */
39
+ export interface GrantCreditsParams {
40
+ readonly orgId: string;
41
+ /** Amount to grant. Must be positive; grants never remove credits. */
42
+ readonly amountMicros: bigint;
43
+ /**
44
+ * When the grant expires (use-it-or-lose-it). Omit for a grant that never
45
+ * expires. Precision is whole seconds; sub-second precision is discarded.
46
+ */
47
+ readonly expiresAt?: Date;
48
+ /** Human-readable reason recorded on the ledger entry (audit trail). */
49
+ readonly reason: string;
50
+ /** Client-supplied deduplication key to prevent double-processing. */
51
+ readonly idempotencyKey: string;
52
+ }
38
53
  /** Parameters for querying the credit ledger. */
39
54
  export interface GetCreditLedgerParams {
40
55
  readonly orgId: string;
@@ -138,6 +153,18 @@ export declare class BillingClient {
138
153
  * Requires `can_manage_billing` on the org.
139
154
  */
140
155
  adjustCredits(params: AdjustCreditsParams): Promise<CreditLedgerEntry>;
156
+ /**
157
+ * Grant promotional credits to an organization, optionally expiring
158
+ * (use-it-or-lose-it).
159
+ *
160
+ * The grant burns before adjustment and purchased credits. When
161
+ * `expiresAt` is set, any remainder unconsumed at that time is removed
162
+ * from the balance by the platform's grant-expiry sweep. Idempotent:
163
+ * replaying an applied idempotency key returns the original ledger entry,
164
+ * even after the expiry has passed. Requires `can_manage_billing` on
165
+ * the org.
166
+ */
167
+ grantCredits(params: GrantCreditsParams): Promise<CreditLedgerEntry>;
141
168
  /** Retrieve paginated credit ledger entries with optional filters. */
142
169
  getCreditLedger(params: GetCreditLedgerParams): Promise<CreditLedgerResponse>;
143
170
  /**
package/billing.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":"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"}