diff --git a/lib/messaging-api/.openapi-generator/FILES b/lib/messaging-api/.openapi-generator/FILES
index 8a4bbb761..6d81453e2 100644
--- a/lib/messaging-api/.openapi-generator/FILES
+++ b/lib/messaging-api/.openapi-generator/FILES
@@ -66,6 +66,7 @@ model/genderDemographicFilter.ts
model/getAggregationUnitNameListResponse.ts
model/getAggregationUnitUsageResponse.ts
model/getFollowersResponse.ts
+model/getJoinedMembershipUsersResponse.ts
model/getMembershipSubscriptionResponse.ts
model/getMessageContentTranscodingResponse.ts
model/getWebhookEndpointResponse.ts
diff --git a/lib/messaging-api/api/messagingApiClient.ts b/lib/messaging-api/api/messagingApiClient.ts
index e750d908c..ec1236452 100644
--- a/lib/messaging-api/api/messagingApiClient.ts
+++ b/lib/messaging-api/api/messagingApiClient.ts
@@ -18,6 +18,7 @@ import { ErrorResponse } from "../model/errorResponse.js";
import { GetAggregationUnitNameListResponse } from "../model/getAggregationUnitNameListResponse.js";
import { GetAggregationUnitUsageResponse } from "../model/getAggregationUnitUsageResponse.js";
import { GetFollowersResponse } from "../model/getFollowersResponse.js";
+import { GetJoinedMembershipUsersResponse } from "../model/getJoinedMembershipUsersResponse.js";
import { GetMembershipSubscriptionResponse } from "../model/getMembershipSubscriptionResponse.js";
import { GetWebhookEndpointResponse } from "../model/getWebhookEndpointResponse.js";
import { GroupMemberCountResponse } from "../model/groupMemberCountResponse.js";
@@ -589,6 +590,63 @@ export class MessagingApiClient {
const parsedBody = text ? JSON.parse(text) : null;
return { httpResponse: res, body: parsedBody };
}
+ /**
+ * Get a list of user IDs who joined the membership.
+ * @param membershipId Membership plan ID.
+ * @param start A continuation token to get next remaining membership user IDs. Returned only when there are remaining user IDs that weren\'t returned in the userIds property in the previous request. The continuation token expires in 24 hours (86,400 seconds).
+ * @param limit The max number of items to return for this API call. The value is set to 300 by default, but the max acceptable value is 1000.
+ *
+ * @see Documentation
+ */
+ public async getJoinedMembershipUsers(
+ membershipId: number,
+ start?: string,
+ limit?: number,
+ ): Promise {
+ return (
+ await this.getJoinedMembershipUsersWithHttpInfo(
+ membershipId,
+ start,
+ limit,
+ )
+ ).body;
+ }
+
+ /**
+ * Get a list of user IDs who joined the membership..
+ * This method includes HttpInfo object to return additional information.
+ * @param membershipId Membership plan ID.
+ * @param start A continuation token to get next remaining membership user IDs. Returned only when there are remaining user IDs that weren\'t returned in the userIds property in the previous request. The continuation token expires in 24 hours (86,400 seconds).
+ * @param limit The max number of items to return for this API call. The value is set to 300 by default, but the max acceptable value is 1000.
+ *
+ * @see Documentation
+ */
+ public async getJoinedMembershipUsersWithHttpInfo(
+ membershipId: number,
+ start?: string,
+ limit?: number,
+ ): Promise> {
+ const queryParams = {
+ start: start,
+ limit: limit,
+ };
+ Object.keys(queryParams).forEach((key: keyof typeof queryParams) => {
+ if (queryParams[key] === undefined) {
+ delete queryParams[key];
+ }
+ });
+
+ const res = await this.httpClient.get(
+ "/v2/bot/membership/{membershipId}/users/ids".replace(
+ "{membershipId}",
+ String(membershipId),
+ ),
+ queryParams,
+ );
+ const text = await res.text();
+ const parsedBody = text ? JSON.parse(text) : null;
+ return { httpResponse: res, body: parsedBody };
+ }
/**
* Get a list of memberships.
*
diff --git a/lib/messaging-api/model/getJoinedMembershipUsersResponse.ts b/lib/messaging-api/model/getJoinedMembershipUsersResponse.ts
new file mode 100644
index 000000000..c3c7149c8
--- /dev/null
+++ b/lib/messaging-api/model/getJoinedMembershipUsersResponse.ts
@@ -0,0 +1,29 @@
+/**
+ * LINE Messaging API
+ * This document describes LINE Messaging API.
+ *
+ * The version of the OpenAPI document: 0.0.1
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+/**
+ * List of users who have joined the membership
+ */
+export type GetJoinedMembershipUsersResponse = {
+ /**
+ * A list of user IDs who joined the membership. Users who have not agreed to the bot user agreement, are not following the bot, or are not active will be excluded. If there are no users in the membership, an empty list will be returned.
+ *
+ * @see userIds Documentation
+ */
+ userIds: Array /**/;
+ /**
+ * A continuation token to get next remaining membership user IDs. Returned only when there are remaining user IDs that weren\'t returned in the userIds property in the previous request. The continuation token expires in 24 hours (86,400 seconds).
+ *
+ * @see next Documentation
+ */
+ next?: string /**/;
+};
diff --git a/lib/messaging-api/model/models.ts b/lib/messaging-api/model/models.ts
index 9a4031e9d..a9972f71d 100644
--- a/lib/messaging-api/model/models.ts
+++ b/lib/messaging-api/model/models.ts
@@ -61,6 +61,7 @@ export * from "./genderDemographicFilter.js";
export * from "./getAggregationUnitNameListResponse.js";
export * from "./getAggregationUnitUsageResponse.js";
export * from "./getFollowersResponse.js";
+export * from "./getJoinedMembershipUsersResponse.js";
export * from "./getMembershipSubscriptionResponse.js";
export * from "./getMessageContentTranscodingResponse.js";
export * from "./getWebhookEndpointResponse.js";
diff --git a/lib/messaging-api/tests/api/MessagingApiClientTest.spec.ts b/lib/messaging-api/tests/api/MessagingApiClientTest.spec.ts
index 5e58ae280..3aefde46e 100644
--- a/lib/messaging-api/tests/api/MessagingApiClientTest.spec.ts
+++ b/lib/messaging-api/tests/api/MessagingApiClientTest.spec.ts
@@ -7,6 +7,7 @@ import { ErrorResponse } from "../../model/errorResponse.js";
import { GetAggregationUnitNameListResponse } from "../../model/getAggregationUnitNameListResponse.js";
import { GetAggregationUnitUsageResponse } from "../../model/getAggregationUnitUsageResponse.js";
import { GetFollowersResponse } from "../../model/getFollowersResponse.js";
+import { GetJoinedMembershipUsersResponse } from "../../model/getJoinedMembershipUsersResponse.js";
import { GetMembershipSubscriptionResponse } from "../../model/getMembershipSubscriptionResponse.js";
import { GetWebhookEndpointResponse } from "../../model/getWebhookEndpointResponse.js";
import { GroupMemberCountResponse } from "../../model/groupMemberCountResponse.js";
@@ -1472,6 +1473,144 @@ describe("MessagingApiClient", () => {
server.close();
});
+ it("getJoinedMembershipUsersWithHttpInfo", async () => {
+ let requestCount = 0;
+
+ const server = createServer((req, res) => {
+ requestCount++;
+
+ equal(req.method, "GET");
+ const reqUrl = new URL(req.url, "http://localhost/");
+ equal(
+ reqUrl.pathname,
+ "/v2/bot/membership/{membershipId}/users/ids"
+ .replace("{membershipId}", "0") // number
+ .replace("{start}", "DUMMY") // string
+ .replace("{limit}", "0"), // number
+ );
+
+ // Query parameters
+ const queryParams = new URLSearchParams(reqUrl.search);
+ equal(
+ queryParams.get("start"),
+ String(
+ // start: string
+ "DUMMY" as unknown as string, // paramName=start(enum)
+ ),
+ );
+ equal(
+ queryParams.get("limit"),
+ String(
+ // limit: number
+ "DUMMY" as unknown as number, // paramName=limit(enum)
+ ),
+ );
+
+ equal(req.headers["authorization"], `Bearer ${channel_access_token}`);
+ equal(req.headers["user-agent"], "@line/bot-sdk/1.0.0-test");
+
+ res.writeHead(200, { "Content-Type": "application/json" });
+ res.end(JSON.stringify({}));
+ });
+ await new Promise(resolve => {
+ server.listen(0);
+ server.on("listening", resolve);
+ });
+
+ const serverAddress = server.address();
+ if (typeof serverAddress === "string" || serverAddress === null) {
+ throw new Error("Unexpected server address: " + serverAddress);
+ }
+
+ const client = new MessagingApiClient({
+ channelAccessToken: channel_access_token,
+ baseURL: `http://localhost:${String(serverAddress.port)}/`,
+ });
+
+ const res = await client.getJoinedMembershipUsersWithHttpInfo(
+ // membershipId: number
+ 0, // paramName=membershipId(number or int or long)
+
+ // start: string
+ "DUMMY" as unknown as string, // paramName=start(enum)
+
+ // limit: number
+ "DUMMY" as unknown as number, // paramName=limit(enum)
+ );
+
+ equal(requestCount, 1);
+ server.close();
+ });
+
+ it("getJoinedMembershipUsers", async () => {
+ let requestCount = 0;
+
+ const server = createServer((req, res) => {
+ requestCount++;
+
+ equal(req.method, "GET");
+ const reqUrl = new URL(req.url, "http://localhost/");
+ equal(
+ reqUrl.pathname,
+ "/v2/bot/membership/{membershipId}/users/ids"
+ .replace("{membershipId}", "0") // number
+ .replace("{start}", "DUMMY") // string
+ .replace("{limit}", "0"), // number
+ );
+
+ // Query parameters
+ const queryParams = new URLSearchParams(reqUrl.search);
+ equal(
+ queryParams.get("start"),
+ String(
+ // start: string
+ "DUMMY" as unknown as string, // paramName=start(enum)
+ ),
+ );
+ equal(
+ queryParams.get("limit"),
+ String(
+ // limit: number
+ "DUMMY" as unknown as number, // paramName=limit(enum)
+ ),
+ );
+
+ equal(req.headers["authorization"], `Bearer ${channel_access_token}`);
+ equal(req.headers["user-agent"], "@line/bot-sdk/1.0.0-test");
+
+ res.writeHead(200, { "Content-Type": "application/json" });
+ res.end(JSON.stringify({}));
+ });
+ await new Promise(resolve => {
+ server.listen(0);
+ server.on("listening", resolve);
+ });
+
+ const serverAddress = server.address();
+ if (typeof serverAddress === "string" || serverAddress === null) {
+ throw new Error("Unexpected server address: " + serverAddress);
+ }
+
+ const client = new MessagingApiClient({
+ channelAccessToken: channel_access_token,
+ baseURL: `http://localhost:${String(serverAddress.port)}/`,
+ });
+
+ const res = await client.getJoinedMembershipUsers(
+ // membershipId: number
+ 0, // paramName=membershipId(number or int or long)
+
+ // start: string
+ "DUMMY" as unknown as string, // paramName=start(enum)
+
+ // limit: number
+ "DUMMY" as unknown as number, // paramName=limit(enum)
+ );
+
+ equal(requestCount, 1);
+ server.close();
+ });
+
it("getMembershipListWithHttpInfo", async () => {
let requestCount = 0;
diff --git a/lib/webhook/.openapi-generator/FILES b/lib/webhook/.openapi-generator/FILES
index cb71457ea..421123c27 100644
--- a/lib/webhook/.openapi-generator/FILES
+++ b/lib/webhook/.openapi-generator/FILES
@@ -29,13 +29,17 @@ model/imageMessageContent.ts
model/imageSet.ts
model/joinEvent.ts
model/joinedMembers.ts
+model/joinedMembershipContent.ts
model/leaveEvent.ts
model/leftMembers.ts
+model/leftMembershipContent.ts
model/linkContent.ts
model/linkThingsContent.ts
model/locationMessageContent.ts
model/memberJoinedEvent.ts
model/memberLeftEvent.ts
+model/membershipContent.ts
+model/membershipEvent.ts
model/mention.ts
model/mentionee.ts
model/messageContent.ts
@@ -47,6 +51,7 @@ model/pnpDelivery.ts
model/pnpDeliveryCompletionEvent.ts
model/postbackContent.ts
model/postbackEvent.ts
+model/renewedMembershipContent.ts
model/roomSource.ts
model/scenarioResult.ts
model/scenarioResultThingsContent.ts
diff --git a/lib/webhook/model/event.ts b/lib/webhook/model/event.ts
index a05d41b38..8086fed8b 100644
--- a/lib/webhook/model/event.ts
+++ b/lib/webhook/model/event.ts
@@ -26,6 +26,7 @@ import { JoinEvent } from "./models.js";
import { LeaveEvent } from "./models.js";
import { MemberJoinedEvent } from "./models.js";
import { MemberLeftEvent } from "./models.js";
+import { MembershipEvent } from "./models.js";
import { MessageEvent } from "./models.js";
import { ModuleEvent } from "./models.js";
import { PostbackEvent } from "./models.js";
@@ -47,6 +48,7 @@ export type Event =
| LeaveEvent // leave
| MemberJoinedEvent // memberJoined
| MemberLeftEvent // memberLeft
+ | MembershipEvent // membership
| MessageEvent // message
| ModuleEvent // module
| PostbackEvent // postback
diff --git a/lib/webhook/model/joinedMembershipContent.ts b/lib/webhook/model/joinedMembershipContent.ts
new file mode 100644
index 000000000..306ae3a22
--- /dev/null
+++ b/lib/webhook/model/joinedMembershipContent.ts
@@ -0,0 +1,23 @@
+/**
+ * Webhook Type Definition
+ * Webhook event definition of the LINE Messaging API
+ *
+ * The version of the OpenAPI document: 1.0.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+import { MembershipContent } from "./membershipContent.js";
+
+import { MembershipContentBase } from "./models.js";
+
+export type JoinedMembershipContent = MembershipContentBase & {
+ type: "joined";
+ /**
+ * The ID of the membership that the user joined. This is defined for each membership.
+ */
+ membershipId: number /**/;
+};
diff --git a/lib/webhook/model/leftMembershipContent.ts b/lib/webhook/model/leftMembershipContent.ts
new file mode 100644
index 000000000..44ce97a0b
--- /dev/null
+++ b/lib/webhook/model/leftMembershipContent.ts
@@ -0,0 +1,23 @@
+/**
+ * Webhook Type Definition
+ * Webhook event definition of the LINE Messaging API
+ *
+ * The version of the OpenAPI document: 1.0.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+import { MembershipContent } from "./membershipContent.js";
+
+import { MembershipContentBase } from "./models.js";
+
+export type LeftMembershipContent = MembershipContentBase & {
+ type: "left";
+ /**
+ * The ID of the membership that the user left. This is defined for each membership.
+ */
+ membershipId: number /**/;
+};
diff --git a/lib/webhook/model/membershipContent.ts b/lib/webhook/model/membershipContent.ts
new file mode 100644
index 000000000..752945105
--- /dev/null
+++ b/lib/webhook/model/membershipContent.ts
@@ -0,0 +1,30 @@
+/**
+ * Webhook Type Definition
+ * Webhook event definition of the LINE Messaging API
+ *
+ * The version of the OpenAPI document: 1.0.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+import { JoinedMembershipContent } from "./models.js";
+import { LeftMembershipContent } from "./models.js";
+import { RenewedMembershipContent } from "./models.js";
+
+export type MembershipContent =
+ | JoinedMembershipContent // joined
+ | LeftMembershipContent // left
+ | RenewedMembershipContent; // renewed
+
+/**
+ * Content of the membership event.
+ */
+export type MembershipContentBase = {
+ /**
+ * Type of membership event.
+ */
+ type: string /**/;
+};
diff --git a/lib/webhook/model/membershipEvent.ts b/lib/webhook/model/membershipEvent.ts
new file mode 100644
index 000000000..2dfbb9b50
--- /dev/null
+++ b/lib/webhook/model/membershipEvent.ts
@@ -0,0 +1,35 @@
+/**
+ * Webhook Type Definition
+ * Webhook event definition of the LINE Messaging API
+ *
+ * The version of the OpenAPI document: 1.0.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+import { DeliveryContext } from "./deliveryContext.js";
+import { Event } from "./event.js";
+import { EventMode } from "./eventMode.js";
+import { MembershipContent } from "./membershipContent.js";
+import { Source } from "./source.js";
+
+/**
+ * This event indicates that a user has subscribed (joined), unsubscribed (left), or renewed the bot\'s membership.
+ */
+import { EventBase } from "./models.js";
+
+export type MembershipEvent = EventBase & {
+ type: "membership";
+ /**
+ * Reply token used to send reply message to this event
+ */
+ replyToken: string /**/;
+ /**
+ */
+ membership: MembershipContent /**/;
+};
+
+export namespace MembershipEvent {}
diff --git a/lib/webhook/model/models.ts b/lib/webhook/model/models.ts
index 6cc1ba361..352ce1335 100644
--- a/lib/webhook/model/models.ts
+++ b/lib/webhook/model/models.ts
@@ -25,13 +25,17 @@ export * from "./imageMessageContent.js";
export * from "./imageSet.js";
export * from "./joinEvent.js";
export * from "./joinedMembers.js";
+export * from "./joinedMembershipContent.js";
export * from "./leaveEvent.js";
export * from "./leftMembers.js";
+export * from "./leftMembershipContent.js";
export * from "./linkContent.js";
export * from "./linkThingsContent.js";
export * from "./locationMessageContent.js";
export * from "./memberJoinedEvent.js";
export * from "./memberLeftEvent.js";
+export * from "./membershipContent.js";
+export * from "./membershipEvent.js";
export * from "./mention.js";
export * from "./mentionee.js";
export * from "./messageContent.js";
@@ -42,6 +46,7 @@ export * from "./pnpDelivery.js";
export * from "./pnpDeliveryCompletionEvent.js";
export * from "./postbackContent.js";
export * from "./postbackEvent.js";
+export * from "./renewedMembershipContent.js";
export * from "./roomSource.js";
export * from "./scenarioResult.js";
export * from "./scenarioResultThingsContent.js";
diff --git a/lib/webhook/model/renewedMembershipContent.ts b/lib/webhook/model/renewedMembershipContent.ts
new file mode 100644
index 000000000..3c8ffe434
--- /dev/null
+++ b/lib/webhook/model/renewedMembershipContent.ts
@@ -0,0 +1,23 @@
+/**
+ * Webhook Type Definition
+ * Webhook event definition of the LINE Messaging API
+ *
+ * The version of the OpenAPI document: 1.0.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+import { MembershipContent } from "./membershipContent.js";
+
+import { MembershipContentBase } from "./models.js";
+
+export type RenewedMembershipContent = MembershipContentBase & {
+ type: "renewed";
+ /**
+ * The ID of the membership that the user renewed. This is defined for each membership.
+ */
+ membershipId: number /**/;
+};
diff --git a/line-openapi b/line-openapi
index 04b9b633e..4e10c73df 160000
--- a/line-openapi
+++ b/line-openapi
@@ -1 +1 @@
-Subproject commit 04b9b633e6558600ee94bc5156e228643f020c79
+Subproject commit 4e10c73df579b4c1821a305f0190dfbe8710d2de