@ingram-tech/luma 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -28
- package/dist/index.d.ts +7657 -170
- package/dist/index.js +80 -122
- package/dist/index.js.map +1 -1
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -27,25 +27,32 @@ import { LumaClient } from "@ingram-tech/luma";
|
|
|
27
27
|
const luma = new LumaClient({ apiKey: process.env.LUMA_API_KEY! });
|
|
28
28
|
// or: const luma = LumaClient.fromEnv(); // reads LUMA_API_KEY
|
|
29
29
|
|
|
30
|
-
// Iterate every event
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
// Iterate every event the calendar manages (auto-paginates). The calendar is
|
|
31
|
+
// inferred from the API key — no calendar id needed.
|
|
32
|
+
for await (const event of luma.calendar.listEvents()) {
|
|
33
|
+
console.log(event.id, event.name);
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
// …or collect them into an array.
|
|
36
|
-
const events = await luma.calendar.listAllEvents(
|
|
37
|
+
const events = await luma.calendar.listAllEvents();
|
|
37
38
|
|
|
38
39
|
// Guests of an event.
|
|
39
|
-
const guests = await luma.events.listAllGuests({
|
|
40
|
+
const guests = await luma.events.listAllGuests({ eventId });
|
|
40
41
|
|
|
41
|
-
// A single guest, by
|
|
42
|
-
const guest = await luma.events.getGuest({
|
|
42
|
+
// A single guest (with order detail), by guest id.
|
|
43
|
+
const guest = await luma.events.getGuest({ eventId, guestId: "gst-…" });
|
|
43
44
|
|
|
44
45
|
// Approve a guest.
|
|
45
|
-
await luma.events.updateGuestStatus({
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
await luma.events.updateGuestStatus({ eventId, guestId: guest.id, status: "approved" });
|
|
47
|
+
|
|
48
|
+
// Ticket types, including prices (cents / currency).
|
|
49
|
+
const tiers = await luma.events.listTicketTypes({ eventId });
|
|
50
|
+
|
|
51
|
+
// Register a guest (host-side — does NOT take payment; Luma owns checkout).
|
|
52
|
+
await luma.events.addGuests({
|
|
53
|
+
eventId,
|
|
54
|
+
guests: [{ email: "a@b.com", name: "Ada Lovelace" }],
|
|
55
|
+
ticketTypeId: tiers[0]?.id,
|
|
49
56
|
});
|
|
50
57
|
|
|
51
58
|
// Coupons.
|
|
@@ -58,21 +65,25 @@ const coupon = await luma.calendar.createCoupon({
|
|
|
58
65
|
|
|
59
66
|
### Pagination
|
|
60
67
|
|
|
61
|
-
Cursor-paginated methods (`listEvents`, `
|
|
68
|
+
Cursor-paginated methods (`listEvents`, `listContacts`, `listGuests`,
|
|
62
69
|
`listCoupons`) return an `AsyncGenerator` that follows `next_cursor`
|
|
63
70
|
automatically. Each has a `listAll…` sibling that drains it into an array.
|
|
64
71
|
`collect()` is exported for draining any async iterable.
|
|
65
72
|
|
|
66
73
|
### Escape hatches
|
|
67
74
|
|
|
68
|
-
The typed methods cover the endpoints
|
|
69
|
-
|
|
75
|
+
The typed methods cover the common endpoints. For anything else, call the API
|
|
76
|
+
directly — `request` and `paginate` are public, and the `ResponseOf` /
|
|
77
|
+
`QueryOf` / `BodyOf` helpers type *any* endpoint straight from the spec:
|
|
70
78
|
|
|
71
79
|
```ts
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
80
|
+
import type { ResponseOf } from "@ingram-tech/luma";
|
|
81
|
+
|
|
82
|
+
// `data` is typed as the endpoint's real response — no hand-written type.
|
|
83
|
+
const data = await luma.request<ResponseOf<"/v1/events/get", "get">>(
|
|
84
|
+
"/v1/events/get",
|
|
85
|
+
{ query: { event_id: eventId } },
|
|
86
|
+
);
|
|
76
87
|
|
|
77
88
|
// Any cursor-paginated endpoint.
|
|
78
89
|
for await (const entry of luma.paginate<MyEntry>("/v1/some/list", { foo: "bar" })) {
|
|
@@ -84,8 +95,7 @@ for await (const entry of luma.paginate<MyEntry>("/v1/some/list", { foo: "bar" }
|
|
|
84
95
|
options, e.g. Next.js cache hints:
|
|
85
96
|
|
|
86
97
|
```ts
|
|
87
|
-
await luma.request("/v1/
|
|
88
|
-
query: { calendar_api_id },
|
|
98
|
+
await luma.request("/v1/calendars/events/list", {
|
|
89
99
|
fetchInit: { next: { revalidate: 300 } },
|
|
90
100
|
});
|
|
91
101
|
```
|
|
@@ -114,25 +124,28 @@ try {
|
|
|
114
124
|
| Area | Methods |
|
|
115
125
|
| --- | --- |
|
|
116
126
|
| Calendar events | `calendar.listEvents`, `calendar.listAllEvents` |
|
|
117
|
-
| Calendar
|
|
127
|
+
| Calendar contacts | `calendar.listContacts`, `calendar.listAllContacts` |
|
|
118
128
|
| Coupons | `calendar.listCoupons`, `calendar.findCouponByCode`, `calendar.createCoupon` |
|
|
119
129
|
| Events | `events.get` |
|
|
120
130
|
| Guests | `events.listGuests`, `events.listAllGuests`, `events.getGuest`, `events.updateGuestStatus`, `events.addGuests` |
|
|
121
131
|
| Ticket types | `events.listTicketTypes`, `events.getTicketType`, `events.createTicketType`, `events.updateTicketType`, `events.deleteTicketType` |
|
|
122
|
-
| Anything else | `request`, `paginate` |
|
|
132
|
+
| Anything else | `request`, `paginate` (typed via `ResponseOf`/`QueryOf`/`BodyOf`) |
|
|
133
|
+
|
|
134
|
+
Types are generated from Luma's published OpenAPI
|
|
135
|
+
(`https://public-api.luma.com/openapi.json`) — run `bun run generate` to refresh
|
|
136
|
+
`src/generated/openapi.ts` when the API changes. The convenience methods and
|
|
137
|
+
their camelCase option objects are the only hand-written surface.
|
|
123
138
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
checkout
|
|
127
|
-
takes payment; ticket purchase happens on Luma's own hosted checkout. Response
|
|
128
|
-
objects carry an index signature, so unmodelled fields are always reachable.
|
|
129
|
-
PRs welcome.
|
|
139
|
+
Note the API has **no checkout/payment endpoint** — `addGuests` registers a
|
|
140
|
+
guest host-side but never takes payment; ticket purchase happens on Luma's own
|
|
141
|
+
hosted checkout.
|
|
130
142
|
|
|
131
143
|
## Development
|
|
132
144
|
|
|
133
145
|
```sh
|
|
134
146
|
bun install
|
|
135
147
|
bun run ci # type-check, lint, test, build
|
|
148
|
+
bun run generate # regenerate types from Luma's OpenAPI
|
|
136
149
|
bun run test # watch mode
|
|
137
150
|
```
|
|
138
151
|
|